@odx/angular 12.14.1 → 12.15.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 (34) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/components/anchor-navigation/README.md +3 -0
  3. package/components/anchor-navigation/anchor-navigation.component.d.ts +31 -0
  4. package/components/anchor-navigation/anchor-navigation.module.d.ts +8 -0
  5. package/components/anchor-navigation/anchor-navigation.service.d.ts +43 -0
  6. package/components/anchor-navigation/components/anchor-navigation-item.component.d.ts +10 -0
  7. package/components/anchor-navigation/components/index.d.ts +1 -0
  8. package/components/anchor-navigation/index.d.ts +4 -0
  9. package/components/datepicker/lib/datepicker.component.d.ts +10 -0
  10. package/components/daterangepicker/lib/daterangepicker.component.d.ts +11 -0
  11. package/components/timepicker/lib/components/timepicker-option.component.d.ts +13 -1
  12. package/components/timepicker/lib/timepicker.component.d.ts +7 -0
  13. package/components/timepicker/lib/timepicker.service.d.ts +19 -11
  14. package/esm2022/components/anchor-navigation/anchor-navigation.component.mjs +60 -0
  15. package/esm2022/components/anchor-navigation/anchor-navigation.module.mjs +18 -0
  16. package/esm2022/components/anchor-navigation/anchor-navigation.service.mjs +119 -0
  17. package/esm2022/components/anchor-navigation/components/anchor-navigation-item.component.mjs +32 -0
  18. package/esm2022/components/anchor-navigation/components/index.mjs +2 -0
  19. package/esm2022/components/anchor-navigation/index.mjs +5 -0
  20. package/esm2022/components/anchor-navigation/odx-angular-components-anchor-navigation.mjs +5 -0
  21. package/esm2022/components/datepicker/lib/datepicker.component.mjs +19 -2
  22. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +27 -9
  23. package/esm2022/components/timepicker/lib/components/timepicker-option.component.mjs +14 -2
  24. package/esm2022/components/timepicker/lib/timepicker.component.mjs +15 -5
  25. package/esm2022/components/timepicker/lib/timepicker.service.mjs +35 -13
  26. package/fesm2022/odx-angular-components-anchor-navigation.mjs +220 -0
  27. package/fesm2022/odx-angular-components-anchor-navigation.mjs.map +1 -0
  28. package/fesm2022/odx-angular-components-datepicker.mjs +18 -1
  29. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  30. package/fesm2022/odx-angular-components-daterangepicker.mjs +27 -9
  31. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  32. package/fesm2022/odx-angular-components-timepicker.mjs +61 -17
  33. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  34. package/package.json +7 -1
@@ -14,7 +14,7 @@ import { DropdownDirective, DropdownModule } from '@odx/angular/components/dropd
14
14
  import { IconComponent } from '@odx/angular/components/icon';
15
15
  import { CSSComponent } from '@odx/angular/internal';
16
16
  import { createConfigTokens, untilDestroyed, injectElement, deferFn } from '@odx/angular/utils';
17
- import { toDate, isValid, startOfDay, format } from 'date-fns';
17
+ import { toDate, isValid, format, startOfDay } from 'date-fns';
18
18
  import { DatepickerInputDateOrder, DatepickerInputFormat, DatepickerInputMask } from '@odx/angular/components/datepicker';
19
19
  export { DatepickerInputDateOrder as DaterangepickerInputDateOrder, DatepickerInputFormat as DaterangepickerInputFormat, DatepickerInputMask as DaterangepickerInputMask } from '@odx/angular/components/datepicker';
20
20
  import { NgxMaskPipe, provideNgxMask } from 'ngx-mask';
@@ -277,12 +277,7 @@ let DaterangepickerComponent = class DaterangepickerComponent extends CustomForm
277
277
  this.updateWidth(this.endDateField, this.endDateMirror);
278
278
  this.handleDateFieldChanges();
279
279
  this.handleDateFieldFocus();
280
- deferFn(() => {
281
- if (!this.value || !this.value.start || !this.value.end)
282
- return;
283
- this.updateStartDateField(startOfDay(this.value.start));
284
- this.updateEndDateField(startOfDay(this.value.end));
285
- });
280
+ this.updateInputFields();
286
281
  }
287
282
  /**
288
283
  * Selects a date range, updates the form value, and emits the selected range.
@@ -296,9 +291,22 @@ let DaterangepickerComponent = class DaterangepickerComponent extends CustomForm
296
291
  this.selectedChange.emit(value);
297
292
  this.dropdown.close();
298
293
  }
294
+ /**
295
+ * Resets the daterangepicker's value to an empty date range (both start and end as null).
296
+ */
299
297
  reset() {
300
298
  this.updateInternalValue({ start: null, end: null });
301
299
  }
300
+ /**
301
+ * @internal
302
+ * Writes a new value to the element.
303
+ * Part of the ControlValueAccessor interface.
304
+ * @param {DateRange | null} value - The new date range value.
305
+ */
306
+ writeValue(value) {
307
+ super.writeValue(value);
308
+ this.updateInputFields();
309
+ }
302
310
  isEmpty(value) {
303
311
  return !value || !value.start || !value.end;
304
312
  }
@@ -309,12 +317,12 @@ let DaterangepickerComponent = class DaterangepickerComponent extends CustomForm
309
317
  }
310
318
  handleDateFieldChanges() {
311
319
  this.startDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value) => {
312
- this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });
313
320
  this.updateWidth(this.startDateField, this.startDateMirror, value);
321
+ this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });
314
322
  });
315
323
  this.endDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value) => {
316
- this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });
317
324
  this.updateWidth(this.endDateField, this.endDateMirror, value);
325
+ this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });
318
326
  });
319
327
  }
320
328
  updateWidth(target, source, value = '') {
@@ -362,6 +370,16 @@ let DaterangepickerComponent = class DaterangepickerComponent extends CustomForm
362
370
  this.endDateField.nativeElementValue = date ? format(date, dateFormat) : '';
363
371
  this.updateWidth(this.endDateField, this.endDateMirror, date ? format(date, dateFormat) : '');
364
372
  }
373
+ updateInputFields() {
374
+ deferFn(() => {
375
+ if (this.value === null)
376
+ return this.reset();
377
+ if (!this.value || !this.value.start || !this.value.end)
378
+ return;
379
+ this.updateStartDateField(startOfDay(this.value.start));
380
+ this.updateEndDateField(startOfDay(this.value.end));
381
+ });
382
+ }
365
383
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
366
384
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DaterangepickerComponent, isStandalone: true, selector: "odx-daterangepicker", inputs: { filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: false, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: false, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: false, isRequired: false, transformFunction: null }, dropdownPosition: { classPropertyName: "dropdownPosition", publicName: "dropdownPosition", isSignal: false, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDaterangepicker($event)" } }, providers: [
367
385
  provideCalendarConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-daterangepicker.mjs","sources":["../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.config.ts","../../../../libs/angular/components/daterangepicker/src/lib/utils/get-daterangepicker-input-pattern.ts","../../../../libs/angular/components/daterangepicker/src/lib/utils/get-daterangepicker-input-value-as-date.ts","../../../../libs/angular/components/daterangepicker/src/lib/directives/daterangepicker-input-control.directive.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.component.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.component.html","../../../../libs/angular/components/daterangepicker/src/lib/range.validator.ts","../../../../libs/angular/components/daterangepicker/src/lib/required.validator.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.module.ts","../../../../libs/angular/components/daterangepicker/src/odx-angular-components-daterangepicker.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { DaterangepickerInputDateOrder } from './models';\n\nexport interface DaterangepickerConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default DaterangepickerInputDateOrder.DMY\n */\n inputDateOrder: DaterangepickerInputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\n/**\n * Tools for injecting and providing the daterangepicker configuration with default configuration for the daterangepicker.\n *\n * @example\n * // Providing custom daterangepicker configuration.\n * ```ts\n * @Component({\n * providers: [provideDaterangepickerConfig({ inputDateOrder: DaterangepickerInputDateOrder.MDY, inputDateSeparator: '/'})]\n * })\n * export class MyComponent {}\n *\n * // Injecting the daterangepicker configuration.\n * ```ts\n * @Component({})\n * export class MyComponent {\n * constructor(@Inject(injectDaterangepickerConfig()) private readonly daterangepickerConfig: DaterangepickerConfig) {}\n * }\n * ```\n */\nexport const { DaterangepickerConfig, DaterangepickerDefaultConfig, injectDaterangepickerConfig, provideDaterangepickerConfig } = createConfigTokens(\n 'Daterangepicker',\n '@odx/angular/components/daterangepicker',\n {\n inputDateOrder: DaterangepickerInputDateOrder.DMY,\n inputDateSeparator: '.',\n },\n);\n","import { DaterangepickerConfig } from '../daterangepicker.config';\nimport { DaterangepickerInputDateOrder, DaterangepickerInputFormat, DaterangepickerInputMask, DaterangepickerInputPattern } from '../models';\n\nfunction getDaterangepickerInputPattern({ inputDateOrder, inputDateSeparator }: DaterangepickerConfig, pattern: DaterangepickerInputPattern): string {\n const patternList: Record<DaterangepickerInputDateOrder, string> = {\n [DaterangepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [DaterangepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [DaterangepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\n/** @internal */\nexport function getDaterangepickerInputFormat(config: DaterangepickerConfig): string {\n return getDaterangepickerInputPattern(config, DaterangepickerInputFormat);\n}\n\n/** @internal */\nexport function getDaterangepickerInputMask(config: DaterangepickerConfig): string {\n return getDaterangepickerInputPattern(config, DaterangepickerInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DaterangepickerConfig } from '../daterangepicker.config';\nimport { DaterangepickerInputDateOrder } from '../models';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<DaterangepickerInputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [DaterangepickerInputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [DaterangepickerInputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [DaterangepickerInputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DaterangepickerConfig, value: string): string | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n const isDateCandidateInvalid = !month || !day || !year;\n\n return isDateCandidateInvalid ? null : `${month}.${day}.${year}`;\n}\n\n/** @internal */\nexport function getDaterangepickerInputValueAsDate(config: DaterangepickerConfig, value: string): Date | null {\n const dateCandidate: string | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(Date.parse(dateCandidate));\n\n return isValid(date) ? date : null;\n}\n","import { Directive, EventEmitter, HostListener, inject, Output } from '@angular/core';\nimport { ReadonlyController, WithTabIndex } from '@odx/angular';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { NgxMaskConfig, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\nimport { injectDaterangepickerConfig } from '../daterangepicker.config';\nimport { getDaterangepickerInputFormat, getDaterangepickerInputMask, getDaterangepickerInputValueAsDate } from '../utils';\n\n/**\n * Enhances an input element to support date range picking, applying an input mask for date formatting\n * and managing focus events. This directive is typically used within a date range picker to provide\n * consistent and configurable input behavior. Extends the `InputControlDirective` to provide form control.\n * Has host directive `WithTabIndex` to manage the tab index attribute of the input element.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('daterangepicker__control')\n@Directive({\n standalone: true,\n selector: 'input[odxDaterangepickerControl],input[odxDaterangepickerStartDateControl], input[odxDaterangepickerEndDateControl]',\n host: {\n '[attr.readonly]': 'readonlyController?.readonly || null',\n '[attr.placeholder]': 'placeholder',\n },\n providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],\n hostDirectives: [WithTabIndex],\n})\nexport class DaterangepickerInputControlDirective extends InputControlDirective {\n private readonly maskConfig: Partial<NgxMaskConfig> = { validation: false, leadZeroDateTime: true };\n\n protected readonly readonlyController = ReadonlyController.inject();\n protected readonly config = injectDaterangepickerConfig();\n protected readonly inputMask = getDaterangepickerInputMask(this.config);\n protected readonly ngxMaskPipe = inject(NgxMaskPipe);\n\n /**\n * Emits an event when the input gains or loses focus, facilitating external event handling.\n *\n * @emits {boolean} - Indicates whether the input is focused.\n */\n @Output()\n public focused = new EventEmitter<boolean>();\n\n /**\n * Captures and processes changes to the input element's value, applying the mask and updating\n * the form control.\n *\n * @emits {string} - The updated value of the input element.\n */\n public override valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n tap(() => this.applyMask()),\n map(() => this.nativeElementValue),\n );\n\n /**\n * Applies the configured input mask to the native input element's value.\n */\n public applyMask(): void {\n this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);\n }\n\n /**\n * Converts the current input value to a Date object based on the configuration's date format.\n *\n * @returns {Date | null} The parsed date object or null if the input does not represent a valid date.\n */\n public get valueAsDate(): Date | null {\n return getDaterangepickerInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n /**\n * Provides the placeholder text for the input, typically the date format in uppercase.\n *\n * @returns {string} The placeholder text for the input.\n */\n public get placeholder(): string {\n return getDaterangepickerInputFormat(this.config).toUpperCase();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.focused.emit(true);\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.focused.emit(false);\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostListener,\n input,\n Input,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { detectControllerChanges } from '@odx/angular';\nimport { CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CalendarComponent, CalendarSelectionMode, DateFilter, DateRange, provideCalendarConfig } from '@odx/angular/components/calendar';\nimport { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, injectElement, Position, untilDestroyed } from '@odx/angular/utils';\nimport { format, startOfDay } from 'date-fns';\nimport { injectDaterangepickerConfig } from './daterangepicker.config';\nimport { DaterangepickerInputControlDirective } from './directives';\nimport { getDaterangepickerInputFormat } from './utils';\n\n/**\n * A component for selecting a date range, integrated with dropdowns and input fields for start and end dates.\n * It supports custom configurations for minimum, maximum dates, and date filters. The component also handles\n * the dropdown's behavior for date selection and applies date formats automatically based on configuration.\n * The component extends the `CustomFormControl` class to provide form control functionality.\n *\n * @see {CustomFormControl}\n */\n@CSSComponent('daterangepicker')\n@Component({\n selector: 'odx-daterangepicker',\n standalone: true,\n imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent],\n templateUrl: './daterangepicker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n provideCalendarConfig({\n displayAdjacentDays: false,\n selectionMode: CalendarSelectionMode.DateRange,\n }),\n ],\n})\nexport class DaterangepickerComponent extends CustomFormControl<DateRange | null> implements AfterViewInit {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly config = injectDaterangepickerConfig();\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the dropdown part of the date range picker is open.\n *\n * @type {boolean}\n */\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n /**\n * Represents today's date, used for default selections and validations.\n *\n * @type {Date}\n */\n public today = new Date();\n\n /**\n * A function that defines additional rules for disabled dates within the picker.\n *\n * @type {DateFilter | null}\n * @default null\n *\n * @example\n * ```ts\n * // Disables all Wednesdays in the picker.\n * const filterFn: DateFilter = (date: Date) => date.getDay() !== 3;\n * ```\n */\n @Input()\n public filterFn: DateFilter | null = null;\n\n /**\n * The earliest date that can be selected in the picker.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public minDate: Date | null = null;\n\n /**\n * The latest date that can be selected in the picker.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public maxDate: Date | null = null;\n\n /**\n * Position of the dropdown relative to the input fields.\n *\n * @type {Position}\n * @default Position.BOTTOM\n */\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n /**\n * When set to true, the select will display a reset button.\n *\n * @type {boolean}\n * @default false\n */\n public clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits the selected date range when it changes.\n *\n * @emits {DateRange}\n */\n @Output()\n public selectedChange = new EventEmitter<DateRange>();\n\n /**\n * Directive managing the dropdown functionality.\n *\n * @type {DropdownDirective}\n */\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n /**\n * Reference to the element triggering the dropdown.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n /**\n * Query list of the input controls within the date range picker.\n *\n * @type {QueryList<DaterangepickerInputControlDirective>}\n */\n @ContentChildren(DaterangepickerInputControlDirective)\n public dateFields!: QueryList<DaterangepickerInputControlDirective>;\n\n /**\n * Reference to the element mirroring the start date input field.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('startDateMirror', { read: ElementRef, static: true })\n public startDateMirror!: ElementRef<HTMLElement>;\n\n /**\n * Reference to the element mirroring the end date input field.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('endDateMirror', { read: ElementRef, static: true })\n public endDateMirror!: ElementRef<HTMLElement>;\n\n /**\n * The input control for the start date.\n *\n * @type {DaterangepickerInputControlDirective | undefined}\n */\n public get startDateField(): DaterangepickerInputControlDirective | undefined {\n const [startDate, _endDate] = this.dateFields;\n return startDate;\n }\n\n /**\n * The input control for the end date.\n *\n * @type {DaterangepickerInputControlDirective | undefined}\n */\n public get endDateField(): DaterangepickerInputControlDirective | undefined {\n const [_startDate, endDate] = this.dateFields;\n return endDate;\n }\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.updateWidth(this.startDateField, this.startDateMirror);\n this.updateWidth(this.endDateField, this.endDateMirror);\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n\n deferFn(() => {\n if (!this.value || !this.value.start || !this.value.end) return;\n this.updateStartDateField(startOfDay(this.value.start));\n this.updateEndDateField(startOfDay(this.value.end));\n });\n }\n\n /**\n * Selects a date range, updates the form value, and emits the selected range.\n *\n * @param {DateRange | null} value - The date range to select.\n */\n public selectDateRange(value: DateRange | null): void {\n if (!value || !value.start || !value.end) return;\n\n this.updateInternalValue(value);\n\n this.selectedChange.emit(value);\n this.dropdown.close();\n }\n\n public reset(): void {\n this.updateInternalValue({ start: null, end: null });\n }\n\n protected isEmpty(value: DateRange | null): boolean {\n return !value || !value.start || !value.end;\n }\n\n protected updateInternalValue(value: DateRange): void {\n this.updateValue(value);\n this.updateStartDateField(value.start);\n this.updateEndDateField(value.end);\n }\n\n protected handleDateFieldChanges(): void {\n this.startDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value: string) => {\n this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });\n this.updateWidth(this.startDateField, this.startDateMirror, value);\n });\n this.endDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value: string) => {\n this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });\n this.updateWidth(this.endDateField, this.endDateMirror, value);\n });\n }\n\n protected updateWidth(target: DaterangepickerInputControlDirective | undefined, source: ElementRef<HTMLElement>, value = ''): void {\n const compensationPx = 2;\n source.nativeElement.textContent = value || target?.placeholder || null;\n if (target) {\n deferFn(() => (target.element.nativeElement.style.width = `${source.nativeElement.offsetWidth + compensationPx}px`));\n }\n }\n\n protected handleDateFieldFocus(): void {\n this.startDateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {\n if (!isFocused) {\n this.onTouched();\n }\n if (this.isOpen) {\n this.dropdown.close();\n }\n });\n this.endDateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {\n if (!isFocused) {\n this.onTouched();\n }\n if (this.isOpen) {\n this.dropdown.close();\n }\n });\n }\n\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n protected openDaterangepicker(event: KeyboardEvent) {\n event.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n private updateStartDateField(date: Date | null): void {\n if (!this.startDateField) return;\n\n const dateFormat = getDaterangepickerInputFormat(this.config);\n this.startDateField.nativeElementValue = date ? format(date, dateFormat) : '';\n this.updateWidth(this.startDateField, this.startDateMirror, date ? format(date, dateFormat) : '');\n }\n\n private updateEndDateField(date: Date | null): void {\n if (!this.endDateField) return;\n\n const dateFormat = getDaterangepickerInputFormat(this.config);\n this.endDateField.nativeElementValue = date ? format(date, dateFormat) : '';\n this.updateWidth(this.endDateField, this.endDateMirror, date ? format(date, dateFormat) : '');\n }\n}\n","<span #startDateMirror role=\"none\" class=\"odx-daterangepicker__mirror\"></span>\n<ng-content select=\"input[odxDaterangepickerStartDateControl]\" />\n<span role=\"none\" class=\"odx-daterangepicker__separator\">–</span>\n<span #endDateMirror role=\"none\" class=\"odx-daterangepicker__mirror\"></span>\n<ng-content select=\"input[odxDaterangepickerEndDateControl]\" />\n\n<odx-action-group class=\"odx-daterangepicker__trigger-wrapper\">\n @if (clearable() && !isEmpty(value)) {\n <button class=\"odx-daterangepicker__clear\" (click)=\"reset()\" odxButton size=\"small\" aria-label=\"Reset time\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n odxButton\n size=\"small\"\n variant=\"ghost\"\n class=\"odx-daterangepicker__trigger\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\" />\n </button>\n <ng-content select=\"[odxButton]\" ngProjectAs=\"[odxButton]\" />\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"today\"\n [selectedDateRange]=\"value\"\n (selectedDateRangeChange)=\"selectDateRange($event)\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n />\n</ng-template>\n","import { Directive, forwardRef } from '@angular/core';\nimport { FormControl, NG_VALIDATORS } from '@angular/forms';\nimport { DateRange, validateDaterange } from '@odx/angular/components/calendar';\n\n/**\n * A validation directive to be used with date range picker controls. This validator ensures that the date range\n * selected is valid, meaning the start date must occur on or before the end date. If the date range is invalid,\n * this validator will provide a validation error that can be used to display an appropriate message or to style\n * the form control.\n *\n * The validator is designed to be used with form controls that manage `DateRange` objects in Angular forms.\n */\n@Directive({\n standalone: true,\n selector: 'odx-daterangepicker[formControlName], odx-daterangepicker[formControl], odx-daterangepicker[ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DaterangepickerRangeValidator),\n multi: true,\n },\n ],\n})\nexport class DaterangepickerRangeValidator {\n /**\n * Performs the validation check on the form control's value.\n *\n * @param {FormControl<DateRange | null>} control - The form control instance associated with the date range input.\n * @returns {ValidationErrors | null} An object expressing validation errors if the range is invalid,\n * or null if the range is valid. The object returned in case of a validation error is `{ invalidRange: true }`.\n */\n public validate({ value }: FormControl<DateRange | null>) {\n const valuesArePresent = value && value.start && value.end;\n\n const isValidRange = value && value.start && value.end && validateDaterange(value.start, value.end);\n\n return (\n valuesArePresent &&\n !isValidRange && {\n invalidRange: true,\n }\n );\n }\n}\n","import { Directive, forwardRef } from '@angular/core';\nimport { FormControl, NG_VALIDATORS } from '@angular/forms';\nimport { DateRange } from '@odx/angular/components/calendar';\n\n/**\n * A validation directive to ensure that both start and end dates are provided for a date range picker.\n * This validator is essential for forms where the date range is a required field. It checks that both the\n * start and end date values exist in the date range object. If one or both dates are missing, it flags the\n * form control as having a validation error.\n */\n@Directive({\n standalone: true,\n selector: 'odx-daterangepicker[required][formControlName], odx-daterangepicker[required][formControl], odx-daterangepicker[required][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DaterangepickerRequiredValidator),\n multi: true,\n },\n ],\n})\nexport class DaterangepickerRequiredValidator {\n /**\n * Validates the form control associated with the date range input.\n * Checks if both start and end dates are present. If either is missing, it returns a validation error.\n *\n * @param {FormControl<DateRange | null>} control - The form control instance that contains the date range value.\n * @returns {ValidationErrors | null} An object expressing validation errors if the range is incomplete,\n * or null if the range is fully specified. If validation fails, the object returned is `{ required: true }`.\n */\n public validate({ value }: FormControl<DateRange | null>) {\n const isValid = value && value.start && value.end;\n\n return (\n !isValid && {\n required: true,\n }\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DaterangepickerComponent } from './daterangepicker.component';\nimport { DaterangepickerInputControlDirective } from './directives';\nimport { DaterangepickerRangeValidator } from './range.validator';\nimport { DaterangepickerRequiredValidator } from './required.validator';\n\nconst modules = [DaterangepickerComponent, DaterangepickerInputControlDirective, DaterangepickerRangeValidator, DaterangepickerRequiredValidator];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class DaterangepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DaterangepickerInputDateOrder","DaterangepickerInputFormat","DaterangepickerInputMask","i1"],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-daterangepicker.mjs","sources":["../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.config.ts","../../../../libs/angular/components/daterangepicker/src/lib/utils/get-daterangepicker-input-pattern.ts","../../../../libs/angular/components/daterangepicker/src/lib/utils/get-daterangepicker-input-value-as-date.ts","../../../../libs/angular/components/daterangepicker/src/lib/directives/daterangepicker-input-control.directive.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.component.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.component.html","../../../../libs/angular/components/daterangepicker/src/lib/range.validator.ts","../../../../libs/angular/components/daterangepicker/src/lib/required.validator.ts","../../../../libs/angular/components/daterangepicker/src/lib/daterangepicker.module.ts","../../../../libs/angular/components/daterangepicker/src/odx-angular-components-daterangepicker.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { DaterangepickerInputDateOrder } from './models';\n\nexport interface DaterangepickerConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default DaterangepickerInputDateOrder.DMY\n */\n inputDateOrder: DaterangepickerInputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\n/**\n * Tools for injecting and providing the daterangepicker configuration with default configuration for the daterangepicker.\n *\n * @example\n * // Providing custom daterangepicker configuration.\n * ```ts\n * @Component({\n * providers: [provideDaterangepickerConfig({ inputDateOrder: DaterangepickerInputDateOrder.MDY, inputDateSeparator: '/'})]\n * })\n * export class MyComponent {}\n *\n * // Injecting the daterangepicker configuration.\n * ```ts\n * @Component({})\n * export class MyComponent {\n * constructor(@Inject(injectDaterangepickerConfig()) private readonly daterangepickerConfig: DaterangepickerConfig) {}\n * }\n * ```\n */\nexport const { DaterangepickerConfig, DaterangepickerDefaultConfig, injectDaterangepickerConfig, provideDaterangepickerConfig } = createConfigTokens(\n 'Daterangepicker',\n '@odx/angular/components/daterangepicker',\n {\n inputDateOrder: DaterangepickerInputDateOrder.DMY,\n inputDateSeparator: '.',\n },\n);\n","import { DaterangepickerConfig } from '../daterangepicker.config';\nimport { DaterangepickerInputDateOrder, DaterangepickerInputFormat, DaterangepickerInputMask, DaterangepickerInputPattern } from '../models';\n\nfunction getDaterangepickerInputPattern({ inputDateOrder, inputDateSeparator }: DaterangepickerConfig, pattern: DaterangepickerInputPattern): string {\n const patternList: Record<DaterangepickerInputDateOrder, string> = {\n [DaterangepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [DaterangepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [DaterangepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\n/** @internal */\nexport function getDaterangepickerInputFormat(config: DaterangepickerConfig): string {\n return getDaterangepickerInputPattern(config, DaterangepickerInputFormat);\n}\n\n/** @internal */\nexport function getDaterangepickerInputMask(config: DaterangepickerConfig): string {\n return getDaterangepickerInputPattern(config, DaterangepickerInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DaterangepickerConfig } from '../daterangepicker.config';\nimport { DaterangepickerInputDateOrder } from '../models';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<DaterangepickerInputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [DaterangepickerInputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [DaterangepickerInputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [DaterangepickerInputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DaterangepickerConfig, value: string): string | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n const isDateCandidateInvalid = !month || !day || !year;\n\n return isDateCandidateInvalid ? null : `${month}.${day}.${year}`;\n}\n\n/** @internal */\nexport function getDaterangepickerInputValueAsDate(config: DaterangepickerConfig, value: string): Date | null {\n const dateCandidate: string | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(Date.parse(dateCandidate));\n\n return isValid(date) ? date : null;\n}\n","import { Directive, EventEmitter, HostListener, inject, Output } from '@angular/core';\nimport { ReadonlyController, WithTabIndex } from '@odx/angular';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { NgxMaskConfig, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\nimport { injectDaterangepickerConfig } from '../daterangepicker.config';\nimport { getDaterangepickerInputFormat, getDaterangepickerInputMask, getDaterangepickerInputValueAsDate } from '../utils';\n\n/**\n * Enhances an input element to support date range picking, applying an input mask for date formatting\n * and managing focus events. This directive is typically used within a date range picker to provide\n * consistent and configurable input behavior. Extends the `InputControlDirective` to provide form control.\n * Has host directive `WithTabIndex` to manage the tab index attribute of the input element.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('daterangepicker__control')\n@Directive({\n standalone: true,\n selector: 'input[odxDaterangepickerControl],input[odxDaterangepickerStartDateControl], input[odxDaterangepickerEndDateControl]',\n host: {\n '[attr.readonly]': 'readonlyController?.readonly || null',\n '[attr.placeholder]': 'placeholder',\n },\n providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],\n hostDirectives: [WithTabIndex],\n})\nexport class DaterangepickerInputControlDirective extends InputControlDirective {\n private readonly maskConfig: Partial<NgxMaskConfig> = { validation: false, leadZeroDateTime: true };\n\n protected readonly readonlyController = ReadonlyController.inject();\n protected readonly config = injectDaterangepickerConfig();\n protected readonly inputMask = getDaterangepickerInputMask(this.config);\n protected readonly ngxMaskPipe = inject(NgxMaskPipe);\n\n /**\n * Emits an event when the input gains or loses focus, facilitating external event handling.\n *\n * @emits {boolean} - Indicates whether the input is focused.\n */\n @Output()\n public focused = new EventEmitter<boolean>();\n\n /**\n * Captures and processes changes to the input element's value, applying the mask and updating\n * the form control.\n *\n * @emits {string} - The updated value of the input element.\n */\n public override valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n tap(() => this.applyMask()),\n map(() => this.nativeElementValue),\n );\n\n /**\n * Applies the configured input mask to the native input element's value.\n */\n public applyMask(): void {\n this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);\n }\n\n /**\n * Converts the current input value to a Date object based on the configuration's date format.\n *\n * @returns {Date | null} The parsed date object or null if the input does not represent a valid date.\n */\n public get valueAsDate(): Date | null {\n return getDaterangepickerInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n /**\n * Provides the placeholder text for the input, typically the date format in uppercase.\n *\n * @returns {string} The placeholder text for the input.\n */\n public get placeholder(): string {\n return getDaterangepickerInputFormat(this.config).toUpperCase();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.focused.emit(true);\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.focused.emit(false);\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostListener,\n input,\n Input,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { detectControllerChanges } from '@odx/angular';\nimport { CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CalendarComponent, CalendarSelectionMode, DateFilter, DateRange, provideCalendarConfig } from '@odx/angular/components/calendar';\nimport { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, injectElement, Position, untilDestroyed } from '@odx/angular/utils';\nimport { format, startOfDay } from 'date-fns';\nimport { injectDaterangepickerConfig } from './daterangepicker.config';\nimport { DaterangepickerInputControlDirective } from './directives';\nimport { getDaterangepickerInputFormat } from './utils';\n\n/**\n * A component for selecting a date range, integrated with dropdowns and input fields for start and end dates.\n * It supports custom configurations for minimum, maximum dates, and date filters. The component also handles\n * the dropdown's behavior for date selection and applies date formats automatically based on configuration.\n * The component extends the `CustomFormControl` class to provide form control functionality.\n *\n * @see {CustomFormControl}\n */\n@CSSComponent('daterangepicker')\n@Component({\n selector: 'odx-daterangepicker',\n standalone: true,\n imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent],\n templateUrl: './daterangepicker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n provideCalendarConfig({\n displayAdjacentDays: false,\n selectionMode: CalendarSelectionMode.DateRange,\n }),\n ],\n})\nexport class DaterangepickerComponent extends CustomFormControl<DateRange | null> implements AfterViewInit {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly config = injectDaterangepickerConfig();\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the dropdown part of the date range picker is open.\n *\n * @type {boolean}\n */\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n /**\n * Represents today's date, used for default selections and validations.\n *\n * @type {Date}\n */\n public today = new Date();\n\n /**\n * A function that defines additional rules for disabled dates within the picker.\n *\n * @type {DateFilter | null}\n * @default null\n *\n * @example\n * ```ts\n * // Disables all Wednesdays in the picker.\n * const filterFn: DateFilter = (date: Date) => date.getDay() !== 3;\n * ```\n */\n @Input()\n public filterFn: DateFilter | null = null;\n\n /**\n * The earliest date that can be selected in the picker.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public minDate: Date | null = null;\n\n /**\n * The latest date that can be selected in the picker.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public maxDate: Date | null = null;\n\n /**\n * Position of the dropdown relative to the input fields.\n *\n * @type {Position}\n * @default Position.BOTTOM\n */\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n /**\n * When set to true, the select will display a reset button.\n *\n * @type {boolean}\n * @default false\n */\n public clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits the selected date range when it changes.\n *\n * @emits {DateRange}\n */\n @Output()\n public selectedChange = new EventEmitter<DateRange>();\n\n /**\n * Directive managing the dropdown functionality.\n *\n * @type {DropdownDirective}\n */\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n /**\n * Reference to the element triggering the dropdown.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n /**\n * Query list of the input controls within the date range picker.\n *\n * @type {QueryList<DaterangepickerInputControlDirective>}\n */\n @ContentChildren(DaterangepickerInputControlDirective)\n public dateFields!: QueryList<DaterangepickerInputControlDirective>;\n\n /**\n * Reference to the element mirroring the start date input field.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('startDateMirror', { read: ElementRef, static: true })\n public startDateMirror!: ElementRef<HTMLElement>;\n\n /**\n * Reference to the element mirroring the end date input field.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('endDateMirror', { read: ElementRef, static: true })\n public endDateMirror!: ElementRef<HTMLElement>;\n\n /**\n * The input control for the start date.\n *\n * @type {DaterangepickerInputControlDirective | undefined}\n */\n public get startDateField(): DaterangepickerInputControlDirective | undefined {\n const [startDate, _endDate] = this.dateFields;\n return startDate;\n }\n\n /**\n * The input control for the end date.\n *\n * @type {DaterangepickerInputControlDirective | undefined}\n */\n public get endDateField(): DaterangepickerInputControlDirective | undefined {\n const [_startDate, endDate] = this.dateFields;\n return endDate;\n }\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.updateWidth(this.startDateField, this.startDateMirror);\n this.updateWidth(this.endDateField, this.endDateMirror);\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n this.updateInputFields();\n }\n\n /**\n * Selects a date range, updates the form value, and emits the selected range.\n *\n * @param {DateRange | null} value - The date range to select.\n */\n public selectDateRange(value: DateRange | null): void {\n if (!value || !value.start || !value.end) return;\n\n this.updateInternalValue(value);\n\n this.selectedChange.emit(value);\n this.dropdown.close();\n }\n\n /**\n * Resets the daterangepicker's value to an empty date range (both start and end as null).\n */\n public reset(): void {\n this.updateInternalValue({ start: null, end: null });\n }\n\n /**\n * @internal\n * Writes a new value to the element.\n * Part of the ControlValueAccessor interface.\n * @param {DateRange | null} value - The new date range value.\n */\n public override writeValue(value: DateRange | null): void {\n super.writeValue(value);\n this.updateInputFields();\n }\n\n protected isEmpty(value: DateRange | null): boolean {\n return !value || !value.start || !value.end;\n }\n\n protected updateInternalValue(value: DateRange): void {\n this.updateValue(value);\n this.updateStartDateField(value.start);\n this.updateEndDateField(value.end);\n }\n\n protected handleDateFieldChanges(): void {\n this.startDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value) => {\n this.updateWidth(this.startDateField, this.startDateMirror, value);\n this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });\n });\n this.endDateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((value) => {\n this.updateWidth(this.endDateField, this.endDateMirror, value);\n this.updateValue({ start: this.startDateField?.valueAsDate ?? null, end: this.endDateField?.valueAsDate ?? null });\n });\n }\n\n protected updateWidth(target: DaterangepickerInputControlDirective | undefined, source: ElementRef<HTMLElement>, value = ''): void {\n const compensationPx = 2;\n source.nativeElement.textContent = value || target?.placeholder || null;\n if (target) {\n deferFn(() => (target.element.nativeElement.style.width = `${source.nativeElement.offsetWidth + compensationPx}px`));\n }\n }\n\n protected handleDateFieldFocus(): void {\n this.startDateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {\n if (!isFocused) {\n this.onTouched();\n }\n if (this.isOpen) {\n this.dropdown.close();\n }\n });\n this.endDateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {\n if (!isFocused) {\n this.onTouched();\n }\n if (this.isOpen) {\n this.dropdown.close();\n }\n });\n }\n\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n protected openDaterangepicker(event: KeyboardEvent) {\n event.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n private updateStartDateField(date: Date | null): void {\n if (!this.startDateField) return;\n\n const dateFormat = getDaterangepickerInputFormat(this.config);\n this.startDateField.nativeElementValue = date ? format(date, dateFormat) : '';\n this.updateWidth(this.startDateField, this.startDateMirror, date ? format(date, dateFormat) : '');\n }\n\n private updateEndDateField(date: Date | null): void {\n if (!this.endDateField) return;\n\n const dateFormat = getDaterangepickerInputFormat(this.config);\n this.endDateField.nativeElementValue = date ? format(date, dateFormat) : '';\n this.updateWidth(this.endDateField, this.endDateMirror, date ? format(date, dateFormat) : '');\n }\n\n private updateInputFields(): void {\n deferFn(() => {\n if (this.value === null) return this.reset();\n if (!this.value || !this.value.start || !this.value.end) return;\n this.updateStartDateField(startOfDay(this.value.start));\n this.updateEndDateField(startOfDay(this.value.end));\n });\n }\n}\n","<span #startDateMirror role=\"none\" class=\"odx-daterangepicker__mirror\"></span>\n<ng-content select=\"input[odxDaterangepickerStartDateControl]\" />\n<span role=\"none\" class=\"odx-daterangepicker__separator\">–</span>\n<span #endDateMirror role=\"none\" class=\"odx-daterangepicker__mirror\"></span>\n<ng-content select=\"input[odxDaterangepickerEndDateControl]\" />\n\n<odx-action-group class=\"odx-daterangepicker__trigger-wrapper\">\n @if (clearable() && !isEmpty(value)) {\n <button class=\"odx-daterangepicker__clear\" (click)=\"reset()\" odxButton size=\"small\" aria-label=\"Reset time\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n odxButton\n size=\"small\"\n variant=\"ghost\"\n class=\"odx-daterangepicker__trigger\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\" />\n </button>\n <ng-content select=\"[odxButton]\" ngProjectAs=\"[odxButton]\" />\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"today\"\n [selectedDateRange]=\"value\"\n (selectedDateRangeChange)=\"selectDateRange($event)\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n />\n</ng-template>\n","import { Directive, forwardRef } from '@angular/core';\nimport { FormControl, NG_VALIDATORS } from '@angular/forms';\nimport { DateRange, validateDaterange } from '@odx/angular/components/calendar';\n\n/**\n * A validation directive to be used with date range picker controls. This validator ensures that the date range\n * selected is valid, meaning the start date must occur on or before the end date. If the date range is invalid,\n * this validator will provide a validation error that can be used to display an appropriate message or to style\n * the form control.\n *\n * The validator is designed to be used with form controls that manage `DateRange` objects in Angular forms.\n */\n@Directive({\n standalone: true,\n selector: 'odx-daterangepicker[formControlName], odx-daterangepicker[formControl], odx-daterangepicker[ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DaterangepickerRangeValidator),\n multi: true,\n },\n ],\n})\nexport class DaterangepickerRangeValidator {\n /**\n * Performs the validation check on the form control's value.\n *\n * @param {FormControl<DateRange | null>} control - The form control instance associated with the date range input.\n * @returns {ValidationErrors | null} An object expressing validation errors if the range is invalid,\n * or null if the range is valid. The object returned in case of a validation error is `{ invalidRange: true }`.\n */\n public validate({ value }: FormControl<DateRange | null>) {\n const valuesArePresent = value && value.start && value.end;\n\n const isValidRange = value && value.start && value.end && validateDaterange(value.start, value.end);\n\n return (\n valuesArePresent &&\n !isValidRange && {\n invalidRange: true,\n }\n );\n }\n}\n","import { Directive, forwardRef } from '@angular/core';\nimport { FormControl, NG_VALIDATORS } from '@angular/forms';\nimport { DateRange } from '@odx/angular/components/calendar';\n\n/**\n * A validation directive to ensure that both start and end dates are provided for a date range picker.\n * This validator is essential for forms where the date range is a required field. It checks that both the\n * start and end date values exist in the date range object. If one or both dates are missing, it flags the\n * form control as having a validation error.\n */\n@Directive({\n standalone: true,\n selector: 'odx-daterangepicker[required][formControlName], odx-daterangepicker[required][formControl], odx-daterangepicker[required][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DaterangepickerRequiredValidator),\n multi: true,\n },\n ],\n})\nexport class DaterangepickerRequiredValidator {\n /**\n * Validates the form control associated with the date range input.\n * Checks if both start and end dates are present. If either is missing, it returns a validation error.\n *\n * @param {FormControl<DateRange | null>} control - The form control instance that contains the date range value.\n * @returns {ValidationErrors | null} An object expressing validation errors if the range is incomplete,\n * or null if the range is fully specified. If validation fails, the object returned is `{ required: true }`.\n */\n public validate({ value }: FormControl<DateRange | null>) {\n const isValid = value && value.start && value.end;\n\n return (\n !isValid && {\n required: true,\n }\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DaterangepickerComponent } from './daterangepicker.component';\nimport { DaterangepickerInputControlDirective } from './directives';\nimport { DaterangepickerRangeValidator } from './range.validator';\nimport { DaterangepickerRequiredValidator } from './required.validator';\n\nconst modules = [DaterangepickerComponent, DaterangepickerInputControlDirective, DaterangepickerRangeValidator, DaterangepickerRequiredValidator];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class DaterangepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DaterangepickerInputDateOrder","DaterangepickerInputFormat","DaterangepickerInputMask","i1"],"mappings":"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"}
@@ -45,7 +45,18 @@ let TimepickerOptionComponent = class TimepickerOptionComponent extends OptionCo
45
45
  super();
46
46
  this.timepicker = inject(TIMEPICKER_CONTROL);
47
47
  this.disabledController = DisabledController.inject();
48
+ /**
49
+ * Indicates whether this time option is currently selected.
50
+ * @type {boolean}
51
+ * @default false
52
+ */
48
53
  this.isSelected = false;
54
+ /**
55
+ * Indicates whether this time option is currently active (e.g., highlighted by keyboard navigation).
56
+ * This is an override from the base `OptionControl`.
57
+ * @type {boolean}
58
+ * @default false
59
+ */
49
60
  this.isActive = false;
50
61
  /**
51
62
  * Emits an event when the option is selected, allowing the timepicker component to update its value
@@ -60,7 +71,8 @@ let TimepickerOptionComponent = class TimepickerOptionComponent extends OptionCo
60
71
  this.isSelected = this.timepicker.isTimeOptionSelected(this);
61
72
  }
62
73
  /**
63
- * Sets the active styles for the option, indicating that it is currently
74
+ * Sets the active styles for the option, typically indicating that it is
75
+ * focused or highlighted via keyboard navigation.
64
76
  */
65
77
  setActiveStyles() {
66
78
  this.isActive = true;
@@ -101,7 +113,7 @@ class TimepickerService {
101
113
  /**
102
114
  * Generates a placeholder string for time input fields.
103
115
  *
104
- * @param {boolean} apm - Specifies if the placeholder should include AM/PM notation.
116
+ * @param {boolean} [apm=false] - Specifies if the placeholder should include AM/PM notation.
105
117
  * @returns {string} The placeholder string.
106
118
  */
107
119
  getPlaceholder(apm = false) {
@@ -112,18 +124,32 @@ class TimepickerService {
112
124
  *
113
125
  * @param {string} time - The time to validate.
114
126
  * @param {string} max - The maximum allowable time.
115
- * @returns {boolean} True if the time is valid, false otherwise.
127
+ * @returns {boolean} True if the time is valid (i.e., not after max), false otherwise.
116
128
  */
117
129
  maxValidation(time, max) {
118
130
  const [targetValue, maxValue] = this.convertToDates([time, max]);
119
131
  return isBefore(targetValue, maxValue) || isEqual(targetValue, maxValue);
120
132
  }
133
+ /**
134
+ * Checks if the provided value is a valid time string in HH:mm or HH:mm AM/PM format.
135
+ * This method also acts as a type guard.
136
+ *
137
+ * @param {unknown} time - The value to validate.
138
+ * @returns {time is string} True if the value is a valid time string, false otherwise.
139
+ */
140
+ isValidTime(time) {
141
+ if (!time || typeof time !== 'string')
142
+ return false;
143
+ // Matches "HH:mm" (24h) or "HH:mm AM/PM" (12h)
144
+ const regex = /^([01]\d|2[0-3]):([0-5]\d)(\s?(AM|PM|am|pm))?$/;
145
+ return regex.test(time.trim());
146
+ }
121
147
  /**
122
148
  * Validates if the given time is greater than or equal to a minimum time constraint.
123
149
  *
124
150
  * @param {string} time - The time to validate.
125
151
  * @param {string} min - The minimum allowable time.
126
- * @returns {boolean} True if the time is valid, false otherwise.
152
+ * @returns {boolean} True if the time is valid (i.e., not before min), false otherwise.
127
153
  */
128
154
  minValidation(time, min) {
129
155
  const [targetValue, minValue] = this.convertToDates([time, min]);
@@ -132,26 +158,34 @@ class TimepickerService {
132
158
  /**
133
159
  * Finds the closest time to a target time from a list of times.
134
160
  *
135
- * @param {string[]} timeStamps - The list of times to search through.
136
- * @param {string} targetTime - The target time to find the closest match for.
137
- * @returns {string} The closest time to the target.
161
+ * @param {string[]} timeStamps - The list of time strings to search through (e.g., ["10:00", "10:30", "11:00"]).
162
+ * @param {string} targetTime - The target time string to find the closest match for (e.g., "10:35").
163
+ * @returns {string} The closest time string from the list to the target, formatted according to locale.
138
164
  */
139
165
  findClosestDate(timeStamps, targetTime) {
140
166
  const [target] = this.convertToDates([targetTime]);
141
167
  const datesArray = this.convertToDates(timeStamps);
168
+ if (datesArray.length === 0)
169
+ return this.getLocalizedTimeFormat(targetTime);
142
170
  const closestDate = datesArray.reduce((prev, curr) => {
143
- return Math.abs(curr.getTime() - target.getTime()) < Math.abs(prev.getTime() - target.getTime()) ? curr : prev;
171
+ const prevDiff = Math.abs(prev.getTime() - target.getTime());
172
+ const currDiff = Math.abs(curr.getTime() - target.getTime());
173
+ return currDiff < prevDiff ? curr : prev;
144
174
  });
145
- return this.getLocalizedTimeFormat(`${closestDate.getHours()}:${closestDate.getMinutes()}`);
175
+ const hours = closestDate.getHours().toString().padStart(2, '0');
176
+ const minutes = closestDate.getMinutes().toString().padStart(2, '0');
177
+ return this.getLocalizedTimeFormat(`${hours}:${minutes}`);
146
178
  }
147
179
  /**
148
- * Formats a time string to a localized time format.
180
+ * Formats a time string to a localized time format using Intl.DateTimeFormat.
149
181
  *
150
- * @param {string} time - The time string to format.
151
- * @param {boolean} hour12 - Specifies if the output should use 12-hour format with AM/PM notation.
152
- * @returns {string} The formatted time string.
182
+ * @param {unknown} time - The time string to format (e.g., "14:30").
183
+ * @param {boolean} [hour12=false] - Specifies if the output should use 12-hour format with AM/PM notation.
184
+ * @returns {string} The formatted time string, or an empty string if the input time is invalid.
153
185
  */
154
186
  getLocalizedTimeFormat(time, hour12 = false) {
187
+ if (!this.isValidTime(time))
188
+ return '';
155
189
  const locale = hour12 ? 'en-US' : 'en-GB';
156
190
  const [date] = this.convertToDates([time]);
157
191
  return new this.windowRef.nativeWindow.Intl.DateTimeFormat(locale, {
@@ -446,6 +480,17 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
446
480
  get timeStampsList() {
447
481
  return generateTimeStamps(this.step, this.useLocale);
448
482
  }
483
+ /**
484
+ * @internal
485
+ * Writes a new value to the element.
486
+ * Part of the ControlValueAccessor interface.
487
+ * @param {string | null} value - The new value.
488
+ */
489
+ writeValue(value) {
490
+ super.writeValue(value);
491
+ if (value === null || this.timepickerService.isValidTime(value))
492
+ this.updateInputValue();
493
+ }
449
494
  onOpen() {
450
495
  this.keyManager = new ActiveDescendantKeyManager(this.options).withHomeAndEnd();
451
496
  this.setActiveOptionBasedOnCurrentValue();
@@ -495,10 +540,9 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
495
540
  return availableTimeSlots.find((option) => option.value === nearestTimeValue);
496
541
  }
497
542
  updateInputValue() {
498
- if (this.value && this.dateField) {
499
- const time = this.timepickerService.getLocalizedTimeFormat(this.value, this.useLocale);
500
- this.dateField.nativeElementValue = time;
501
- }
543
+ if (!this.dateField)
544
+ return;
545
+ this.dateField.nativeElementValue = this.timepickerService.getLocalizedTimeFormat(this.value, this.useLocale);
502
546
  }
503
547
  scrollToActiveOption(option, _opts = {}) {
504
548
  if (isFunction(option.element.nativeElement.scrollIntoView)) {