@odx/angular 2.6.0 → 2.7.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.
- package/CHANGELOG.md +45 -0
- package/cdk/autocomplete-control/index.d.ts +0 -1
- package/cdk/autocomplete-control/lib/autocomplete-control.d.ts +2 -3
- package/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.d.ts +15 -7
- package/cdk/custom-form-control/index.d.ts +1 -0
- package/cdk/{autocomplete-control/lib/abstract/base-search-field.directive.d.ts → custom-form-control/lib/input-control.directive.d.ts} +3 -3
- package/charts-config/lib/charts-theme.directive.d.ts +1 -1
- package/charts-config/lib/charts-theme.service.d.ts +3 -3
- package/components/autocomplete/lib/autocomplete.component.d.ts +2 -2
- package/components/autocomplete/lib/autocomplete.module.d.ts +2 -2
- package/components/autocomplete/lib/directives/autocomplete-input-control.directive.d.ts +9 -0
- package/components/autocomplete/lib/directives/index.d.ts +1 -1
- package/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.d.ts +4 -9
- package/components/calendar/README.md +3 -0
- package/components/calendar/index.d.ts +5 -0
- package/components/calendar/lib/calendar.component.d.ts +18 -0
- package/components/calendar/lib/calendar.config.d.ts +100 -0
- package/components/calendar/lib/components/calendar-header/calendar-header.component.d.ts +27 -0
- package/components/calendar/lib/components/calendar-header/index.d.ts +1 -0
- package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +21 -0
- package/components/calendar/lib/components/calendar-month/index.d.ts +1 -0
- package/components/calendar/lib/components/calendar-year/calendar-year.component.d.ts +18 -0
- package/components/calendar/lib/components/calendar-year/index.d.ts +1 -0
- package/components/calendar/lib/components/calendar-years/calendar-years.component.d.ts +20 -0
- package/components/calendar/lib/components/calendar-years/index.d.ts +1 -0
- package/components/calendar/lib/components/index.d.ts +4 -0
- package/components/calendar/lib/directives/calendar-cell.directive.d.ts +34 -0
- package/components/calendar/lib/directives/calendar-view.directive.d.ts +29 -0
- package/components/calendar/lib/directives/index.d.ts +2 -0
- package/components/calendar/lib/enums/calendar-view.enum.d.ts +5 -0
- package/components/calendar/lib/enums/index.d.ts +1 -0
- package/components/calendar/lib/models/date-filter.d.ts +1 -0
- package/components/calendar/lib/models/date-type.d.ts +1 -0
- package/components/calendar/lib/models/date-validator.d.ts +1 -0
- package/components/calendar/lib/models/index.d.ts +3 -0
- package/components/calendar/lib/pipes/date-label.pipe.d.ts +18 -0
- package/components/calendar/lib/pipes/index.d.ts +1 -0
- package/components/calendar/lib/services/calendar-month.service.d.ts +13 -0
- package/components/calendar/lib/services/calendar-year.service.d.ts +11 -0
- package/components/calendar/lib/services/calendar-years.service.d.ts +9 -0
- package/components/calendar/lib/services/calendar.service.d.ts +25 -0
- package/components/calendar/lib/services/index.d.ts +4 -0
- package/components/calendar/lib/utils/check-identical-date.d.ts +2 -0
- package/components/calendar/lib/utils/get-A11y-label.d.ts +3 -0
- package/components/calendar/lib/utils/index.d.ts +7 -0
- package/components/calendar/lib/utils/parse-date.d.ts +2 -0
- package/components/calendar/lib/utils/validate-max-date.d.ts +2 -0
- package/components/calendar/lib/utils/validate-min-date.d.ts +2 -0
- package/components/calendar/lib/utils/validate-next-date-set.d.ts +2 -0
- package/components/calendar/lib/utils/validate-previous-date-set.d.ts +2 -0
- package/components/datepicker/README.md +3 -0
- package/components/datepicker/index.d.ts +5 -0
- package/components/datepicker/lib/datepicker.component.d.ts +37 -0
- package/components/datepicker/lib/datepicker.config.d.ts +29 -0
- package/components/datepicker/lib/datepicker.module.d.ts +9 -0
- package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +24 -0
- package/components/datepicker/lib/directives/index.d.ts +1 -0
- package/components/datepicker/lib/models/datepicker-input-date-order.d.ts +6 -0
- package/components/datepicker/lib/models/datepicker-input-pattern.d.ts +11 -0
- package/components/datepicker/lib/models/index.d.ts +2 -0
- package/components/datepicker/lib/utils/get-datepicker-input-pattern.d.ts +3 -0
- package/components/datepicker/lib/utils/get-datepicker-input-value-as-date.d.ts +2 -0
- package/components/datepicker/lib/utils/index.d.ts +2 -0
- package/components/select/lib/directives/index.d.ts +1 -1
- package/components/select/lib/directives/select-input-control.directive.d.ts +9 -0
- package/components/select/lib/pipes/select-search-filter.pipe.d.ts +3 -9
- package/components/select/lib/select.component.d.ts +2 -2
- package/components/select/lib/select.module.d.ts +2 -2
- package/esm2020/cdk/autocomplete-control/index.mjs +1 -2
- package/esm2020/cdk/autocomplete-control/lib/autocomplete-control.mjs +1 -1
- package/esm2020/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.mjs +15 -4
- package/esm2020/cdk/custom-form-control/index.mjs +2 -1
- package/esm2020/cdk/custom-form-control/lib/input-control.directive.mjs +35 -0
- package/esm2020/charts-config/lib/charts-theme.directive.mjs +5 -5
- package/esm2020/charts-config/lib/charts-theme.module.mjs +4 -4
- package/esm2020/charts-config/lib/charts-theme.service.mjs +5 -5
- package/esm2020/components/autocomplete/lib/autocomplete.component.mjs +13 -6
- package/esm2020/components/autocomplete/lib/autocomplete.module.mjs +4 -4
- package/esm2020/components/autocomplete/lib/directives/autocomplete-input-control.directive.mjs +32 -0
- package/esm2020/components/autocomplete/lib/directives/index.mjs +2 -2
- package/esm2020/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.mjs +2 -16
- package/esm2020/components/calendar/index.mjs +6 -0
- package/esm2020/components/calendar/lib/calendar.component.mjs +57 -0
- package/esm2020/components/calendar/lib/calendar.config.mjs +15 -0
- package/esm2020/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +51 -0
- package/esm2020/components/calendar/lib/components/calendar-header/index.mjs +2 -0
- package/esm2020/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +59 -0
- package/esm2020/components/calendar/lib/components/calendar-month/index.mjs +2 -0
- package/esm2020/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +57 -0
- package/esm2020/components/calendar/lib/components/calendar-year/index.mjs +2 -0
- package/esm2020/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +65 -0
- package/esm2020/components/calendar/lib/components/calendar-years/index.mjs +2 -0
- package/esm2020/components/calendar/lib/components/index.mjs +5 -0
- package/esm2020/components/calendar/lib/directives/calendar-cell.directive.mjs +92 -0
- package/esm2020/components/calendar/lib/directives/calendar-view.directive.mjs +39 -0
- package/esm2020/components/calendar/lib/directives/index.mjs +3 -0
- package/esm2020/components/calendar/lib/enums/calendar-view.enum.mjs +7 -0
- package/esm2020/components/calendar/lib/enums/index.mjs +2 -0
- package/esm2020/components/calendar/lib/models/date-filter.mjs +2 -0
- package/esm2020/components/calendar/lib/models/date-type.mjs +2 -0
- package/esm2020/components/calendar/lib/models/date-validator.mjs +2 -0
- package/esm2020/components/calendar/lib/models/index.mjs +4 -0
- package/esm2020/components/calendar/lib/pipes/date-label.pipe.mjs +25 -0
- package/esm2020/components/calendar/lib/pipes/index.mjs +2 -0
- package/esm2020/components/calendar/lib/services/calendar-month.service.mjs +38 -0
- package/esm2020/components/calendar/lib/services/calendar-year.service.mjs +31 -0
- package/esm2020/components/calendar/lib/services/calendar-years.service.mjs +33 -0
- package/esm2020/components/calendar/lib/services/calendar.service.mjs +74 -0
- package/esm2020/components/calendar/lib/services/index.mjs +5 -0
- package/esm2020/components/calendar/lib/utils/check-identical-date.mjs +11 -0
- package/esm2020/components/calendar/lib/utils/get-A11y-label.mjs +10 -0
- package/esm2020/components/calendar/lib/utils/index.mjs +8 -0
- package/esm2020/components/calendar/lib/utils/parse-date.mjs +15 -0
- package/esm2020/components/calendar/lib/utils/validate-max-date.mjs +11 -0
- package/esm2020/components/calendar/lib/utils/validate-min-date.mjs +11 -0
- package/esm2020/components/calendar/lib/utils/validate-next-date-set.mjs +12 -0
- package/esm2020/components/calendar/lib/utils/validate-previous-date-set.mjs +12 -0
- package/esm2020/components/calendar/odx-angular-components-calendar.mjs +5 -0
- package/esm2020/components/datepicker/index.mjs +6 -0
- package/esm2020/components/datepicker/lib/datepicker.component.mjs +118 -0
- package/esm2020/components/datepicker/lib/datepicker.config.mjs +7 -0
- package/esm2020/components/datepicker/lib/datepicker.module.mjs +19 -0
- package/esm2020/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +60 -0
- package/esm2020/components/datepicker/lib/directives/index.mjs +2 -0
- package/esm2020/components/datepicker/lib/models/datepicker-input-date-order.mjs +6 -0
- package/esm2020/components/datepicker/lib/models/datepicker-input-pattern.mjs +11 -0
- package/esm2020/components/datepicker/lib/models/index.mjs +3 -0
- package/esm2020/components/datepicker/lib/utils/get-datepicker-input-pattern.mjs +16 -0
- package/esm2020/components/datepicker/lib/utils/get-datepicker-input-value-as-date.mjs +30 -0
- package/esm2020/components/datepicker/lib/utils/index.mjs +3 -0
- package/esm2020/components/datepicker/odx-angular-components-datepicker.mjs +5 -0
- package/esm2020/components/select/lib/components/select-option/select-option.component.mjs +3 -3
- package/esm2020/components/select/lib/directives/index.mjs +2 -2
- package/esm2020/components/select/lib/directives/select-input-control.directive.mjs +35 -0
- package/esm2020/components/select/lib/pipes/select-search-filter.pipe.mjs +2 -16
- package/esm2020/components/select/lib/select.component.mjs +15 -7
- package/esm2020/components/select/lib/select.module.mjs +4 -4
- package/esm2020/utils/lib/helpers/index.mjs +2 -2
- package/fesm2015/odx-angular-cdk-autocomplete-control.mjs +19 -41
- package/fesm2015/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
- package/fesm2015/odx-angular-cdk-custom-form-control.mjs +34 -2
- package/fesm2015/odx-angular-cdk-custom-form-control.mjs.map +1 -1
- package/fesm2015/odx-angular-charts-config.mjs +10 -10
- package/fesm2015/odx-angular-charts-config.mjs.map +1 -1
- package/fesm2015/odx-angular-components-autocomplete.mjs +23 -27
- package/fesm2015/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2015/odx-angular-components-calendar.mjs +623 -0
- package/fesm2015/odx-angular-components-calendar.mjs.map +1 -0
- package/fesm2015/odx-angular-components-datepicker.mjs +249 -0
- package/fesm2015/odx-angular-components-datepicker.mjs.map +1 -0
- package/fesm2015/odx-angular-components-select.mjs +22 -28
- package/fesm2015/odx-angular-components-select.mjs.map +1 -1
- package/fesm2015/odx-angular-utils.mjs +21 -21
- package/fesm2015/odx-angular-utils.mjs.map +1 -1
- package/fesm2020/odx-angular-cdk-autocomplete-control.mjs +17 -41
- package/fesm2020/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
- package/fesm2020/odx-angular-cdk-custom-form-control.mjs +34 -2
- package/fesm2020/odx-angular-cdk-custom-form-control.mjs.map +1 -1
- package/fesm2020/odx-angular-charts-config.mjs +10 -10
- package/fesm2020/odx-angular-charts-config.mjs.map +1 -1
- package/fesm2020/odx-angular-components-autocomplete.mjs +23 -25
- package/fesm2020/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2020/odx-angular-components-calendar.mjs +621 -0
- package/fesm2020/odx-angular-components-calendar.mjs.map +1 -0
- package/fesm2020/odx-angular-components-datepicker.mjs +249 -0
- package/fesm2020/odx-angular-components-datepicker.mjs.map +1 -0
- package/fesm2020/odx-angular-components-select.mjs +22 -26
- package/fesm2020/odx-angular-components-select.mjs.map +1 -1
- package/fesm2020/odx-angular-utils.mjs +21 -21
- package/fesm2020/odx-angular-utils.mjs.map +1 -1
- package/package.json +21 -3
- package/utils/lib/helpers/index.d.ts +1 -1
- package/cdk/autocomplete-control/lib/abstract/index.d.ts +0 -1
- package/components/autocomplete/lib/directives/autocomplete-search-field.directive.d.ts +0 -9
- package/components/select/lib/directives/select-search-field.directive.d.ts +0 -9
- package/esm2020/cdk/autocomplete-control/lib/abstract/base-search-field.directive.mjs +0 -38
- package/esm2020/cdk/autocomplete-control/lib/abstract/index.mjs +0 -2
- package/esm2020/components/autocomplete/lib/directives/autocomplete-search-field.directive.mjs +0 -26
- package/esm2020/components/select/lib/directives/select-search-field.directive.mjs +0 -35
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odx-angular-components-calendar.mjs","sources":["../../../../libs/angular/components/calendar/src/lib/calendar.config.ts","../../../../libs/angular/components/calendar/src/lib/enums/calendar-view.enum.ts","../../../../libs/angular/components/calendar/src/lib/utils/check-identical-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/get-A11y-label.ts","../../../../libs/angular/components/calendar/src/lib/utils/parse-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-max-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-min-date.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-next-date-set.ts","../../../../libs/angular/components/calendar/src/lib/utils/validate-previous-date-set.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-month.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-year.service.ts","../../../../libs/angular/components/calendar/src/lib/services/calendar-years.service.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-header/calendar-header.component.html","../../../../libs/angular/components/calendar/src/lib/pipes/date-label.pipe.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-cell.directive.ts","../../../../libs/angular/components/calendar/src/lib/directives/calendar-view.directive.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-month/calendar-month.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-year/calendar-year.component.html","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.ts","../../../../libs/angular/components/calendar/src/lib/components/calendar-years/calendar-years.component.html","../../../../libs/angular/components/calendar/src/lib/calendar.component.ts","../../../../libs/angular/components/calendar/src/lib/calendar.component.html","../../../../libs/angular/components/calendar/src/odx-angular-components-calendar.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { Locale } from 'date-fns';\nimport { enGB } from 'date-fns/locale';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface CalendarConfig {\n /**\n * Pattern by which month-year label is transformed\n * @default 'LLLL yyyy'\n */\n monthYearLabel: string;\n /**\n * Pattern by which month label is transformed\n * @default 'LLL'\n */\n monthLabel: string;\n /**\n * Pattern by which week label is transformed\n * @default 'EEEEE'\n */\n weekLabel: string;\n /**\n * Pattern by which day label is transformed\n * @default 'd'\n */\n dayLabel: string;\n /**\n * Pattern by which Year label is transformed\n * @default 'yyyy'\n */\n yearLabel: string;\n /**\n * Pattern by which A11y day label is transformed\n * @default 'MMMM dd, yyyy'\n */\n dayA11yLabel: string;\n /**\n * Pattern by which A11y month label is transformed\n * @default 'MMMM, yyyy'\n */\n monthA11yLabel: string;\n /**\n * Pattern by which A11y year label is transformed\n * @default 'yyyy'\n */\n yearA11yLabel: string;\n /**\n * Locale by which calendar labels are transformed\n * @default enGB\n */\n locale: BehaviorSubject<Locale>;\n}\n\nexport const { CalendarConfig, CalendarDefaultConfig, injectCalendarConfig, provideCalendarConfig } = createConfigTokens(\n 'Calendar',\n '@odx/angular/components/calendar',\n {\n monthYearLabel: 'LLLL yyyy',\n monthLabel: 'LLL',\n weekLabel: 'EEEEE',\n dayLabel: 'd',\n yearLabel: 'yyyy',\n dayA11yLabel: 'MMMM dd, yyyy',\n monthA11yLabel: 'MMMM, yyyy',\n yearA11yLabel: 'yyyy',\n locale: new BehaviorSubject<Locale>(enGB),\n },\n);\n","export enum CalendarViewEnum {\n Month = 'month',\n Year = 'year',\n Years = 'years',\n}\n","import { isSameDay, isSameMonth, isSameYear } from 'date-fns';\nimport { CalendarViewEnum } from '../enums';\nimport { DateValidator } from '../models';\n\nconst functionList: Record<CalendarViewEnum, DateValidator> = {\n [CalendarViewEnum.Month]: (currentDate: Date, date: Date) => isSameDay(currentDate, date),\n [CalendarViewEnum.Year]: (currentDate: Date, date: Date) => isSameMonth(currentDate, date),\n [CalendarViewEnum.Years]: (currentDate: Date, date: Date) => isSameYear(currentDate, date),\n};\n\nexport function checkIdenticalDate(currentDate: Date, date: Date, calendarView: CalendarViewEnum): boolean {\n return functionList[calendarView](currentDate, date);\n}\n","import { CalendarConfig } from '../calendar.config';\nimport { CalendarViewEnum } from '../enums';\n\nconst functionList: Record<CalendarViewEnum, (config: CalendarConfig) => string> = {\n [CalendarViewEnum.Month]: (config: CalendarConfig) => config.dayA11yLabel,\n [CalendarViewEnum.Year]: (config: CalendarConfig) => config.monthA11yLabel,\n [CalendarViewEnum.Years]: (config: CalendarConfig) => config.yearA11yLabel,\n};\n\nexport function getA11yLabel(calendarView: CalendarViewEnum, config: CalendarConfig): string {\n return functionList[calendarView](config);\n}\n","import { isString } from '@odx/angular/utils';\nimport { isValid, toDate } from 'date-fns';\nimport { DateType } from '../models';\n\nexport function parseDate(value: DateType): Date {\n try {\n const timestamp = isString(value) ? Date.parse(value) : value;\n\n if (!isValid(timestamp)) {\n return new Date();\n }\n\n return toDate(timestamp);\n } catch {\n return new Date();\n }\n}\n","import { endOfDay, endOfMonth, endOfYear } from 'date-fns';\nimport { CalendarViewEnum } from '../enums';\nimport { DateValidator } from '../models';\n\nconst functionList: Record<CalendarViewEnum, DateValidator> = {\n [CalendarViewEnum.Month]: (maxDate: Date, date: Date) => endOfDay(maxDate) < endOfDay(date),\n [CalendarViewEnum.Year]: (maxDate: Date, date: Date) => endOfMonth(maxDate) < endOfMonth(date),\n [CalendarViewEnum.Years]: (maxDate: Date, date: Date) => endOfYear(maxDate) < endOfYear(date),\n};\n\nexport function validateMaxDate(maxDate: Date, date: Date, calendarView: CalendarViewEnum): boolean {\n return functionList[calendarView](maxDate, date);\n}\n","import { startOfDay, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarViewEnum } from '../enums';\nimport { DateValidator } from '../models';\n\nconst functionList: Record<CalendarViewEnum, DateValidator> = {\n [CalendarViewEnum.Month]: (minDate: Date, date: Date) => startOfDay(minDate) > startOfDay(date),\n [CalendarViewEnum.Year]: (minDate: Date, date: Date) => startOfMonth(minDate) > startOfMonth(date),\n [CalendarViewEnum.Years]: (minDate: Date, date: Date) => startOfYear(minDate) > startOfYear(date),\n};\n\nexport function validateMinDate(maxDate: Date, date: Date, calendarView: CalendarViewEnum): boolean {\n return functionList[calendarView](maxDate, date);\n}\n","import { addMonths, startOfMonth, startOfYear } from 'date-fns';\nimport { CalendarViewEnum } from '../enums';\nimport { DateValidator } from '../models';\n\nconst functionList: Record<CalendarViewEnum, DateValidator> = {\n [CalendarViewEnum.Month]: (maxDate: Date, date: Date) => maxDate < startOfMonth(addMonths(date, 1)),\n [CalendarViewEnum.Year]: (maxDate: Date, date: Date) => maxDate < startOfYear(addMonths(date, 12)),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n [CalendarViewEnum.Years]: (maxDate: Date, date: Date) => false,\n};\n\nexport function validateNextDateSet(maxDate: Date, date: Date, calendarView: CalendarViewEnum): boolean {\n return functionList[calendarView](maxDate, date);\n}\n","import { endOfMonth, endOfYear, subMonths } from 'date-fns';\nimport { CalendarViewEnum } from '../enums';\nimport { DateValidator } from '../models';\n\nconst functionList: Record<CalendarViewEnum, DateValidator> = {\n [CalendarViewEnum.Month]: (minDate: Date, date: Date) => minDate > endOfMonth(subMonths(date, 1)),\n [CalendarViewEnum.Year]: (minDate: Date, date: Date) => minDate > endOfYear(subMonths(date, 12)),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n [CalendarViewEnum.Years]: () => false,\n};\n\nexport function validatePreviousDateSet(minDate: Date, date: Date, calendarView: CalendarViewEnum): boolean {\n return functionList[calendarView](minDate, date);\n}\n","import { Injectable } from '@angular/core';\nimport { isPresent, Pure } from '@odx/angular/utils';\nimport { startOfDay } from 'date-fns';\nimport { BehaviorSubject, shareReplay, tap } from 'rxjs';\nimport { CalendarViewEnum } from '../enums';\nimport { DateFilter, DateType } from '../models';\nimport { parseDate, validateMaxDate, validateMinDate, validateNextDateSet, validatePreviousDateSet } from '../utils';\n\n@Injectable()\nexport class CalendarService {\n private readonly calendarView$$ = new BehaviorSubject<CalendarViewEnum>(CalendarViewEnum.Month);\n private readonly activeDate$$ = new BehaviorSubject<Date>(startOfDay(new Date()));\n private readonly selectedDate$$ = new BehaviorSubject<Date | null>(null);\n\n public minDate: Date | null = null;\n public maxDate: Date | null = null;\n public filterFn?: DateFilter | null = null;\n\n public readonly calendarView$ = this.calendarView$$.pipe(shareReplay({ refCount: true }));\n\n public readonly activeDate$ = this.activeDate$$.pipe(shareReplay({ refCount: true }));\n public readonly selectedDate$ = this.selectedDate$$.pipe(\n tap((date) => isPresent(date) && this.setActiveDate(date)),\n shareReplay({ refCount: true }),\n );\n\n public setActiveDate(value: DateType | null): void {\n if (isPresent(value)) {\n this.activeDate$$.next(parseDate(value));\n }\n }\n\n public selectDate(value: DateType | null): void {\n if (isPresent(value)) {\n this.activeDate$$.next(parseDate(value));\n this.selectedDate$$.next(parseDate(value));\n } else {\n this.selectedDate$$.next(null);\n }\n }\n\n public get activeDate(): Date {\n return this.activeDate$$.getValue();\n }\n\n public get selectedDate(): Date | null {\n return this.selectedDate$$.getValue();\n }\n\n public changeView(view: CalendarViewEnum): void {\n this.calendarView$$.next(view);\n }\n\n public get calendarCurrentView(): CalendarViewEnum {\n return this.calendarView$$.getValue();\n }\n\n @Pure\n public isDateDisabled(date: Date): boolean {\n const minDate = this.minDate && validateMinDate(this.minDate, date, this.calendarCurrentView);\n const maxDate = this.maxDate && validateMaxDate(this.maxDate, date, this.calendarCurrentView);\n let isDateFiltered = false;\n\n if (this.calendarCurrentView === CalendarViewEnum.Month) {\n isDateFiltered = this.filterFn?.(date) ?? false;\n }\n\n return minDate || maxDate || isDateFiltered;\n }\n\n public isPreviousDateSetDisabled(): boolean {\n return this.minDate ? validatePreviousDateSet(this.minDate, this.activeDate, this.calendarCurrentView) : false;\n }\n\n public isNextDateSetDisabled(): boolean {\n return this.maxDate ? validateNextDateSet(this.maxDate, this.activeDate, this.calendarCurrentView) : false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { addDays, endOfMonth, endOfWeek, startOfMonth, startOfWeek } from 'date-fns';\nimport { map, Observable } from 'rxjs';\nimport { CalendarService } from './calendar.service';\n\n@Injectable()\nexport class CalendarMonthService {\n protected readonly calendar = inject(CalendarService);\n\n public readonly weekDays$: Observable<Date[]> = this.calendar.activeDate$.pipe(map((date) => this.generateWeekDays(date)));\n public readonly weeks$: Observable<Date[][]> = this.calendar.activeDate$.pipe(map((date) => this.generateWeeks(date)));\n\n public generateWeekDays(date: Date): Date[] {\n const firstWeekDay = startOfWeek(date, { weekStartsOn: 1 });\n\n return Array.from({ length: 7 }, (_, i) => addDays(firstWeekDay, i));\n }\n\n public generateWeeks(date: Date): Date[][] {\n const startOfTheSelectedMonth = startOfMonth(date);\n const endOfTheSelectedMonth = endOfMonth(date);\n const startDate = startOfWeek(startOfTheSelectedMonth, { weekStartsOn: 1 });\n const endDate = endOfWeek(endOfTheSelectedMonth);\n const allWeeks = [];\n\n let currentDate = startDate;\n while (currentDate <= endDate) {\n allWeeks.push(this.generateDaysForWeek(currentDate, date));\n currentDate = addDays(currentDate, 7);\n }\n\n return allWeeks;\n }\n\n public generateDaysForWeek(date: Date, currentDate: Date): Date[] {\n return Array.from({ length: 7 }).map((_, i) => addDays(date, i), currentDate);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { eachMonthOfInterval, endOfYear, startOfYear } from 'date-fns';\nimport { map, Observable } from 'rxjs';\nimport { CalendarService } from './calendar.service';\n\n@Injectable()\nexport class CalendarYearService {\n protected readonly calendar = inject(CalendarService);\n\n public readonly seasonSeparator = 3;\n\n public readonly seasons$: Observable<Date[][]> = this.calendar.activeDate$.pipe(map((selectedDate) => this.generateSeasons(selectedDate)));\n\n public generateSeasons(date: Date): Date[][] {\n const seasons = [];\n const months = eachMonthOfInterval({\n start: startOfYear(date),\n end: endOfYear(date),\n });\n\n let index = 0;\n while (index < months.length) {\n seasons.push(months.slice(index, index + this.seasonSeparator));\n index += this.seasonSeparator;\n }\n\n return seasons;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { addYears, getYear, setYear, startOfYear } from 'date-fns';\n\n@Injectable()\nexport class CalendarYearsService {\n public readonly yearsSeparator = 3;\n public readonly yearsLimit = 100;\n public readonly date = new Date();\n\n public get years(): Date[][] {\n const startDate = startOfYear(addYears(this.date, -this.yearsLimit));\n const startYear = getYear(startDate);\n const endDate = startOfYear(addYears(this.date, this.yearsLimit));\n const endYear = getYear(endDate);\n\n const years: Date[] = [];\n const yearRows: Date[][] = [];\n\n for (let i = startYear; i <= endYear; i++) {\n years.push(setYear(startDate, i));\n }\n\n let index = 0;\n while (index < years.length) {\n yearRows.push(years.slice(index, index + this.yearsSeparator));\n index += this.yearsSeparator;\n }\n\n return yearRows;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { injectCalendarConfig } from '../../calendar.config';\nimport { CalendarService } from '../../services';\n\n@CSSComponent('calendar-header')\n@Component({\n selector: 'odx-calendar-header',\n standalone: true,\n imports: [CoreModule, ActionGroupComponent, ButtonComponent, IconComponent],\n templateUrl: './calendar-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarHeaderComponent {\n protected readonly calendar = inject(CalendarService);\n\n public readonly element = injectElement();\n\n @Output()\n public previous = new EventEmitter<Event>();\n\n @Output()\n public next = new EventEmitter<Event>();\n\n @Output()\n public changeView = new EventEmitter<null>();\n\n public readonly config = injectCalendarConfig();\n\n protected previousClicked(event: Event): void {\n !this.isPreviousDisabled && this.previous.emit(event);\n }\n\n protected nextClicked(event: Event): void {\n !this.isNextDisabled && this.next.emit(event);\n }\n\n protected get isPreviousDisabled(): boolean {\n return this.calendar.isPreviousDateSetDisabled();\n }\n\n protected get isNextDisabled(): boolean {\n return this.calendar.isNextDateSetDisabled();\n }\n}\n","<odx-action-group>\n <button odxButton (click)=\"previousClicked($event)\" [disabled]=\"isPreviousDisabled\">\n <odx-icon name=\"chevron-left\"></odx-icon>\n </button>\n\n <button class=\"odx-calendar-header__title\" odxButton (click)=\"changeView.emit()\">\n <ng-content></ng-content>\n </button>\n\n <button odxButton (click)=\"nextClicked($event)\" [disabled]=\"isNextDisabled\">\n <odx-icon name=\"chevron-right\"></odx-icon>\n </button>\n</odx-action-group>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { format } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\n\n@Pipe({\n pure: false,\n name: 'odxDateLabel',\n standalone: true,\n})\nexport class DateLabelPipe implements PipeTransform {\n public readonly config = injectCalendarConfig();\n\n public transform(value: Date | null, dateFormat: string): string {\n if (!value) return '';\n\n return format(value, dateFormat, { locale: this.config.locale.getValue() });\n }\n}\n","import { Directive, inject, Input, OnChanges } from '@angular/core';\nimport { DisabledController } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { deferFn, hasChanged, injectElement, NgChanges } from '@odx/angular/utils';\nimport { isSameMonth } from 'date-fns';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarViewEnum } from '../enums';\nimport { DateLabelPipe } from '../pipes';\nimport { checkIdenticalDate, getA11yLabel } from '../utils';\n\n@CSSComponent('calendar-cell')\n@Directive({\n selector: '[odxCalendarCell]',\n standalone: true,\n providers: [DisabledController.connect(), DateLabelPipe],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[class.is-selected]': 'isSelected',\n '[tabindex]': 'isActive ? 0 : -1',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-disabled]': 'isDisabled',\n },\n})\nexport class CalendarCellDirective implements OnChanges {\n private readonly disabledController = DisabledController.inject();\n\n protected isActive = false;\n protected isSelected = false;\n\n @CSSModifier()\n protected isCurrent = false;\n\n @CSSModifier()\n protected adjacent = false;\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n public readonly element = injectElement();\n public readonly dateLabelPipe = inject(DateLabelPipe);\n\n public readonly config = injectCalendarConfig();\n\n @Input('odxCalendarCell')\n public date!: Date;\n\n @Input('odxCalendarCellCalendarView')\n public calendarView: CalendarViewEnum = CalendarViewEnum.Month;\n\n @Input('odxCalendarCellActiveDate')\n public activeDate: Date | null = null;\n\n @Input('odxCalendarCellSelectedDate')\n public selectedDate: Date | null = null;\n\n public ngOnChanges(changes: NgChanges<CalendarCellDirective>): void {\n if (hasChanged(changes, ['date'], false)) {\n this.isCurrent = checkIdenticalDate(this.date, new Date(), this.calendarView);\n }\n\n if (this.activeDate && hasChanged(changes, ['date', 'activeDate'], false)) {\n this.isActive = checkIdenticalDate(this.date, this.activeDate, this.calendarView);\n\n if (this.calendarView === CalendarViewEnum.Month) {\n this.adjacent = !isSameMonth(this.date, this.activeDate);\n }\n }\n\n if (this.selectedDate && hasChanged(changes, ['date', 'selectedDate'], false)) {\n this.isSelected = checkIdenticalDate(this.date, this.selectedDate, this.calendarView);\n }\n\n if (this.isActive) {\n deferFn(() => this.element.nativeElement.focus());\n }\n }\n\n public get ariaLabel(): string {\n const dateFormat = getA11yLabel(this.calendarView, this.config);\n return this.dateLabelPipe.transform(this.date, dateFormat);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { injectCalendarConfig } from '../calendar.config';\nimport { CalendarViewEnum } from '../enums';\nimport { CalendarService } from '../services';\n\n@Directive({\n standalone: true,\n})\nexport abstract class CalendarViewDirective {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly calendar = inject(CalendarService);\n\n protected abstract readonly calendarNextView: CalendarViewEnum;\n\n protected abstract readonly calendarCurrentView: CalendarViewEnum;\n\n public readonly config = injectCalendarConfig();\n\n public readonly element = injectElement();\n\n public get activeDate(): Date {\n return this.calendar.activeDate;\n }\n\n public trackByIndex(index: number): number {\n return index;\n }\n\n public isDateDisabled(value: Date): boolean {\n return this.calendar.isDateDisabled(value);\n }\n\n public changeView(): void {\n this.calendar.changeView(this.calendarNextView);\n }\n\n public updateActiveDate(event: Event, date: Date): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.calendar.setActiveDate(date);\n }\n\n protected abstract selectDate(event: Date): void;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addDays, addMonths, addWeeks, subDays, subMonths, subWeeks } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarViewEnum } from '../../enums';\nimport { DateType } from '../../models';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarMonthService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-month')\n@Component({\n selector: 'odx-calendar-month',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-month.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarMonthService],\n})\nexport class CalendarMonthComponent extends CalendarViewDirective {\n protected readonly calendarMonth = inject(CalendarMonthService);\n\n protected readonly calendarNextView = CalendarViewEnum.Years;\n protected readonly calendarCurrentView = CalendarViewEnum.Month;\n\n @Output()\n public selectedChange = new EventEmitter<DateType | null>();\n\n public previousDay(event: Event): void {\n this.updateActiveDate(event, subDays(this.activeDate, 1));\n }\n\n public nextDay(event: Event): void {\n this.updateActiveDate(event, addDays(this.activeDate, 1));\n }\n\n public previousWeek(event: Event): void {\n this.updateActiveDate(event, subWeeks(this.activeDate, 1));\n }\n\n public nextWeek(event: Event): void {\n this.updateActiveDate(event, addWeeks(this.activeDate, 1));\n }\n\n public previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n public nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n public selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n this.calendar.selectDate(value);\n this.selectedChange.emit(value);\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"7\">\n <odx-calendar-header (previous)=\"previousMonth($event)\" (next)=\"nextMonth($event)\" (changeView)=\"changeView()\">\n {{ calendar.activeDate$ | async | odxDateLabel: config.monthYearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n\n <tr class=\"odx-calendar__weekdays\">\n <td *ngFor=\"let day of calendarMonth.weekDays$ | async\">\n {{ day | odxDateLabel: config.weekLabel }}\n </td>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"calendar.activeDate$ | async as activeDate\"\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousDay($event)\"\n (keydown.ArrowRight)=\"nextDay($event)\"\n (keydown.ArrowUp)=\"previousWeek($event)\"\n (keydown.ArrowDown)=\"nextWeek($event)\"\n (keydown.PageUp)=\"previousMonth($event)\"\n (keydown.PageDown)=\"nextMonth($event)\"\n >\n <tr *ngFor=\"let week of calendarMonth.weeks$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let day of week; let i = index; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(day)\"\n [odxCalendarCell]=\"day\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n (click)=\"selectDate(day)\"\n >\n {{ day | odxDateLabel: config.dayLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { addMonths, getMonth, setMonth, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarViewEnum } from '../../enums';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-year')\n@Component({\n selector: 'odx-calendar-year',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-year.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearService],\n})\nexport class CalendarYearComponent extends CalendarViewDirective {\n protected readonly calendarYear = inject(CalendarYearService);\n\n protected readonly calendarNextView = CalendarViewEnum.Month;\n protected readonly calendarCurrentView = CalendarViewEnum.Year;\n\n public previousMonth(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 1));\n }\n\n public nextMonth(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 1));\n }\n\n public previousSeason(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 3));\n }\n\n public nextSeason(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 3));\n }\n\n public previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n public nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n public selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setMonth(this.calendar.activeDate, getMonth(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead>\n <tr>\n <th colspan=\"3\">\n <odx-calendar-header (previous)=\"previousYear($event)\" (next)=\"nextYear($event)\" (changeView)=\"changeView()\">\n {{ calendar.activeDate$ | async | odxDateLabel: config.yearLabel }}\n </odx-calendar-header>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"calendar.activeDate$ | async as activeDate\"\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousMonth($event)\"\n (keydown.ArrowRight)=\"nextMonth($event)\"\n (keydown.ArrowUp)=\"previousSeason($event)\"\n (keydown.ArrowDown)=\"nextSeason($event)\"\n (keydown.PageDown)=\"nextYear($event)\"\n (keydown.PageUp)=\"previousYear($event)\"\n >\n <tr class=\"odx-calendar__season\" *ngFor=\"let season of calendarYear.seasons$ | async; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let month of season; let i = index; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(month)\"\n [odxCalendarCell]=\"month\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n [odxCalendarCellCalendarView]=\"calendarCurrentView\"\n (click)=\"selectDate(month)\"\n >\n {{ month | odxDateLabel: config.monthLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, isFunction } from '@odx/angular/utils';\nimport { addMonths, getYear, setYear, subMonths } from 'date-fns';\nimport { CalendarCellDirective, CalendarViewDirective } from '../../directives';\nimport { CalendarViewEnum } from '../../enums';\nimport { DateLabelPipe } from '../../pipes';\nimport { CalendarYearsService } from '../../services';\nimport { CalendarHeaderComponent } from '../calendar-header';\n\n@CSSComponent('calendar-years')\n@Component({\n selector: 'odx-calendar-years',\n standalone: true,\n imports: [CoreModule, CalendarCellDirective, CalendarHeaderComponent, DateLabelPipe],\n templateUrl: './calendar-years.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarYearsService],\n})\nexport class CalendarYearsComponent extends CalendarViewDirective implements AfterViewInit {\n private readonly document = inject(DOCUMENT);\n\n protected readonly calendarYears = inject(CalendarYearsService);\n\n protected readonly calendarNextView = CalendarViewEnum.Year;\n protected readonly calendarCurrentView = CalendarViewEnum.Years;\n\n public ngAfterViewInit(): void {\n deferFn(() => this.scrollCurrentYearIntoView());\n }\n\n public previousYear(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12));\n }\n\n public nextYear(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12));\n }\n\n public previousRow(event: Event): void {\n this.updateActiveDate(event, subMonths(this.activeDate, 12 * 3));\n }\n\n public nextRow(event: Event): void {\n this.updateActiveDate(event, addMonths(this.activeDate, 12 * 3));\n }\n\n public selectDate(value: Date): void {\n if (this.isDateDisabled(value)) return;\n\n const date = setYear(this.calendar.activeDate, getYear(value));\n this.calendar.selectDate(date);\n\n this.changeView();\n }\n\n public scrollCurrentYearIntoView(): void {\n const selectedYear = this.document.querySelector('.odx-calendar-cell.is-selected');\n const currentYear = this.document.querySelector('.odx-calendar-cell--is-current');\n\n const element = selectedYear || currentYear;\n\n if (element && isFunction(element.scrollIntoView)) {\n element.scrollIntoView({ block: 'center', behavior: 'smooth' });\n }\n }\n}\n","<table class=\"odx-calendar__table\" role=\"grid\" aria-describedby=\"odx-calendar\">\n <thead aria-hidden=\"true\">\n <th></th>\n </thead>\n\n <tbody\n *ngIf=\"calendar.activeDate$ | async as activeDate\"\n class=\"odx-calendar__body\"\n (keydown.ArrowLeft)=\"previousYear($event)\"\n (keydown.ArrowRight)=\"nextYear($event)\"\n (keydown.ArrowUp)=\"previousRow($event)\"\n (keydown.ArrowDown)=\"nextRow($event)\"\n >\n <tr class=\"odx-calendar__year-row\" *ngFor=\"let yearRow of calendarYears.years; trackBy: trackByIndex\">\n <td role=\"gridcell\" *ngFor=\"let year of yearRow; let i = index; trackBy: trackByIndex\">\n <button\n [disabled]=\"isDateDisabled(year)\"\n [odxCalendarCell]=\"year\"\n [odxCalendarCellActiveDate]=\"activeDate\"\n [odxCalendarCellSelectedDate]=\"calendar.selectedDate$ | async\"\n [odxCalendarCellCalendarView]=\"calendarCurrentView\"\n (click)=\"selectDate(year)\"\n >\n {{ year | odxDateLabel: config.yearLabel }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { hasChanged, injectElement } from '@odx/angular/utils';\nimport { CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent } from './components';\nimport { CalendarViewEnum } from './enums';\nimport { DateFilter, DateType } from './models';\nimport { CalendarService } from './services';\n\n@CSSComponent('calendar')\n@Component({\n selector: 'odx-calendar',\n standalone: true,\n imports: [CoreModule, A11yModule, CalendarMonthComponent, CalendarYearComponent, CalendarYearsComponent],\n templateUrl: './calendar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CalendarService],\n})\nexport class CalendarComponent implements OnChanges {\n protected readonly calendar = inject(CalendarService);\n\n public readonly element = injectElement();\n\n public readonly calendarView = CalendarViewEnum;\n\n @Input()\n public set selectedDate(value: DateType | null) {\n this.calendar.selectDate(value);\n }\n\n @Input()\n public minDate: Date | null = null;\n\n @Input()\n public maxDate: Date | null = null;\n\n @Input()\n public filterFn?: DateFilter | null = null;\n\n @Output()\n public selectedChange = new EventEmitter<DateType | null>();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (hasChanged(changes, 'minDate', false)) {\n this.calendar.minDate = this.minDate;\n }\n\n if (hasChanged(changes, 'maxDate', false)) {\n this.calendar.maxDate = this.maxDate;\n }\n\n if (hasChanged(changes, 'filterFn', false)) {\n this.calendar.filterFn = this.filterFn;\n }\n }\n}\n","<ng-container [ngSwitch]=\"calendar.calendarCurrentView\">\n <odx-calendar-year *ngSwitchCase=\"calendarView.Year\"></odx-calendar-year>\n <odx-calendar-years *ngSwitchCase=\"calendarView.Years\"></odx-calendar-years>\n <odx-calendar-month *ngSwitchDefault (selectedChange)=\"selectedChange.emit($event)\"></odx-calendar-month>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["functionList"],"mappings":"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"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { __decorate, __metadata } from 'tslib';
|
|
2
|
+
import * as i2 from '@angular/cdk/a11y';
|
|
3
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { inject, EventEmitter, Directive, Output, HostListener, ElementRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, ContentChild, NgModule } from '@angular/core';
|
|
6
|
+
import * as i1 from '@odx/angular';
|
|
7
|
+
import { ReadonlyController, WithTabIndex, ClickOutsideDirective, detectControllerChanges, CoreModule } from '@odx/angular';
|
|
8
|
+
import { InputControlDirective, CustomFormControl } from '@odx/angular/cdk/custom-form-control';
|
|
9
|
+
import { ActionGroupComponent } from '@odx/angular/components/action-group';
|
|
10
|
+
import { ButtonComponent } from '@odx/angular/components/button';
|
|
11
|
+
import { CalendarComponent } from '@odx/angular/components/calendar';
|
|
12
|
+
import * as i3 from '@odx/angular/components/dropdown';
|
|
13
|
+
import { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';
|
|
14
|
+
import { IconComponent } from '@odx/angular/components/icon';
|
|
15
|
+
import { CSSComponent } from '@odx/angular/internal';
|
|
16
|
+
import { createConfigTokens, untilDestroyed, injectElement, deferFn } from '@odx/angular/utils';
|
|
17
|
+
import { toDate, isValid, startOfDay, format } from 'date-fns';
|
|
18
|
+
import { fromEvent, distinctUntilChanged, tap, map, filter } from 'rxjs';
|
|
19
|
+
import { NgxMaskPipe, provideNgxMask } from 'ngx-mask';
|
|
20
|
+
|
|
21
|
+
const DatepickerInputDateOrder = {
|
|
22
|
+
DMY: 'DMY',
|
|
23
|
+
MDY: 'MDY',
|
|
24
|
+
YMD: 'YMD',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const DatepickerInputFormat = {
|
|
28
|
+
DAYS: 'dd',
|
|
29
|
+
MONTH: 'MM',
|
|
30
|
+
YEAR: 'yyyy',
|
|
31
|
+
};
|
|
32
|
+
const DatepickerInputMask = {
|
|
33
|
+
DAYS: 'd0',
|
|
34
|
+
MONTH: 'M0',
|
|
35
|
+
YEAR: '0000',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const { DatepickerConfig, DatepickerDefaultConfig, injectDatepickerConfig, provideDatepickerConfig } = createConfigTokens('Datepicker', '@odx/angular/components/datepicker', {
|
|
39
|
+
inputDateOrder: DatepickerInputDateOrder.DMY,
|
|
40
|
+
inputDateSeparator: '.',
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
function getDatepickerInputPattern({ inputDateOrder, inputDateSeparator }, pattern) {
|
|
44
|
+
const patternList = {
|
|
45
|
+
[DatepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,
|
|
46
|
+
[DatepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,
|
|
47
|
+
[DatepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,
|
|
48
|
+
};
|
|
49
|
+
return patternList[inputDateOrder];
|
|
50
|
+
}
|
|
51
|
+
function getDatepickerInputFormat(config) {
|
|
52
|
+
return getDatepickerInputPattern(config, DatepickerInputFormat);
|
|
53
|
+
}
|
|
54
|
+
function getDatepickerInputMask(config) {
|
|
55
|
+
return getDatepickerInputPattern(config, DatepickerInputMask);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const functionList = {
|
|
59
|
+
[DatepickerInputDateOrder.DMY]: (splittedValue) => {
|
|
60
|
+
const [day, month, year] = splittedValue;
|
|
61
|
+
return { month, day, year };
|
|
62
|
+
},
|
|
63
|
+
[DatepickerInputDateOrder.MDY]: (splittedValue) => {
|
|
64
|
+
const [month, day, year] = splittedValue;
|
|
65
|
+
return { month, day, year };
|
|
66
|
+
},
|
|
67
|
+
[DatepickerInputDateOrder.YMD]: (splittedValue) => {
|
|
68
|
+
const [year, month, day] = splittedValue;
|
|
69
|
+
return { month, day, year };
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
function getDateCandidate({ inputDateOrder, inputDateSeparator }, value) {
|
|
73
|
+
const splittedValue = value.split(inputDateSeparator);
|
|
74
|
+
const { month, day, year } = functionList[inputDateOrder](splittedValue);
|
|
75
|
+
const isDateCandidateInvalid = !month || !day || !year;
|
|
76
|
+
return isDateCandidateInvalid ? null : `${month}.${day}.${year}`;
|
|
77
|
+
}
|
|
78
|
+
function getDatepickerInputValueAsDate(config, value) {
|
|
79
|
+
const dateCandidate = getDateCandidate(config, value);
|
|
80
|
+
if (!dateCandidate)
|
|
81
|
+
return null;
|
|
82
|
+
const date = toDate(Date.parse(dateCandidate));
|
|
83
|
+
return isValid(date) ? date : null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let DatepickerInputControlDirective = class DatepickerInputControlDirective extends InputControlDirective {
|
|
87
|
+
constructor() {
|
|
88
|
+
super(...arguments);
|
|
89
|
+
this.maskConfig = { validation: false, leadZeroDateTime: true };
|
|
90
|
+
this.readonlyController = ReadonlyController.inject();
|
|
91
|
+
this.config = injectDatepickerConfig();
|
|
92
|
+
this.inputMask = getDatepickerInputMask(this.config);
|
|
93
|
+
this.ngxMaskPipe = inject(NgxMaskPipe);
|
|
94
|
+
this.focused = new EventEmitter();
|
|
95
|
+
this.valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(distinctUntilChanged(), tap(() => this.applyMask()), map(() => this.nativeElementValue));
|
|
96
|
+
}
|
|
97
|
+
applyMask() {
|
|
98
|
+
this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);
|
|
99
|
+
}
|
|
100
|
+
get valueAsDate() {
|
|
101
|
+
return getDatepickerInputValueAsDate(this.config, this.nativeElementValue);
|
|
102
|
+
}
|
|
103
|
+
get placeholder() {
|
|
104
|
+
return getDatepickerInputFormat(this.config).toUpperCase();
|
|
105
|
+
}
|
|
106
|
+
handleFocus(event) {
|
|
107
|
+
this.focused.emit(event);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
DatepickerInputControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
111
|
+
DatepickerInputControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: DatepickerInputControlDirective, isStandalone: true, selector: "input[odxDatepickerControl]", outputs: { focused: "focused" }, host: { listeners: { "focus": "handleFocus($event)" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 });
|
|
112
|
+
DatepickerInputControlDirective = __decorate([
|
|
113
|
+
CSSComponent('datepicker__control')
|
|
114
|
+
], DatepickerInputControlDirective);
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerInputControlDirective, decorators: [{
|
|
116
|
+
type: Directive,
|
|
117
|
+
args: [{
|
|
118
|
+
standalone: true,
|
|
119
|
+
selector: 'input[odxDatepickerControl]',
|
|
120
|
+
host: {
|
|
121
|
+
'[attr.readonly]': 'readonlyController?.readonly || null',
|
|
122
|
+
'[attr.placeholder]': 'placeholder',
|
|
123
|
+
},
|
|
124
|
+
providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],
|
|
125
|
+
hostDirectives: [WithTabIndex],
|
|
126
|
+
}]
|
|
127
|
+
}], propDecorators: { focused: [{
|
|
128
|
+
type: Output
|
|
129
|
+
}], handleFocus: [{
|
|
130
|
+
type: HostListener,
|
|
131
|
+
args: ['focus', ['$event']]
|
|
132
|
+
}] } });
|
|
133
|
+
|
|
134
|
+
let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
|
|
135
|
+
get isOpen() {
|
|
136
|
+
return !!this.dropdown.isOpen;
|
|
137
|
+
}
|
|
138
|
+
constructor() {
|
|
139
|
+
super(null);
|
|
140
|
+
this.takeUntilDestroyed = untilDestroyed();
|
|
141
|
+
this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
|
|
142
|
+
this.config = injectDatepickerConfig();
|
|
143
|
+
this.element = injectElement();
|
|
144
|
+
this.filterFn = null;
|
|
145
|
+
this.minDate = null;
|
|
146
|
+
this.maxDate = null;
|
|
147
|
+
this.selectedChange = new EventEmitter();
|
|
148
|
+
detectControllerChanges(this).subscribe();
|
|
149
|
+
}
|
|
150
|
+
ngAfterViewInit() {
|
|
151
|
+
this.handleDateFieldChanges();
|
|
152
|
+
this.handleDateFieldFocus();
|
|
153
|
+
this.handleClickOutside();
|
|
154
|
+
deferFn(() => {
|
|
155
|
+
if (!this.value)
|
|
156
|
+
return;
|
|
157
|
+
this.updateValue(startOfDay(this.value));
|
|
158
|
+
this.updateDateField(this.value);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
selectDate(value) {
|
|
162
|
+
if (!value)
|
|
163
|
+
return;
|
|
164
|
+
this.updateValue(value);
|
|
165
|
+
this.updateDateField(value);
|
|
166
|
+
this.selectedChange.emit(value);
|
|
167
|
+
this.closeDropdown();
|
|
168
|
+
}
|
|
169
|
+
handleDateFieldChanges() {
|
|
170
|
+
this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));
|
|
171
|
+
}
|
|
172
|
+
handleDateFieldFocus() {
|
|
173
|
+
this.dateField?.focused
|
|
174
|
+
.pipe(filter(() => this.isOpen), this.takeUntilDestroyed())
|
|
175
|
+
.subscribe(() => this.closeDropdown());
|
|
176
|
+
}
|
|
177
|
+
handleClickOutside() {
|
|
178
|
+
this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());
|
|
179
|
+
}
|
|
180
|
+
closeDropdown() {
|
|
181
|
+
this.dropdown.close();
|
|
182
|
+
}
|
|
183
|
+
clickOutside() {
|
|
184
|
+
this.closeDropdown();
|
|
185
|
+
}
|
|
186
|
+
openDatepicker(event) {
|
|
187
|
+
event.stopPropagation();
|
|
188
|
+
if (this.isReadonly || this.isDisabled)
|
|
189
|
+
return;
|
|
190
|
+
this.dropdown.open(event);
|
|
191
|
+
}
|
|
192
|
+
updateDateField(date) {
|
|
193
|
+
if (!this.dateField)
|
|
194
|
+
return;
|
|
195
|
+
const dateFormat = getDatepickerInputFormat(this.config);
|
|
196
|
+
this.dateField.nativeElementValue = format(date, dateFormat);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
200
|
+
DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatepickerComponent, isStandalone: true, selector: "odx-datepicker", inputs: { filterFn: "filterFn", minDate: "minDate", maxDate: "maxDate" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDatepicker($event)" } }, queries: [{ propertyName: "dateField", first: true, predicate: DatepickerInputControlDirective, descendants: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dropdownTriggerElement", first: true, predicate: ["dropdownTrigger"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: 'bottom-end' }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedChange)=\"selectDate($any($event))\"\n ></odx-calendar>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: CalendarComponent, selector: "odx-calendar", inputs: ["selectedDate", "minDate", "maxDate", "filterFn"], outputs: ["selectedChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i3.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
201
|
+
DatepickerComponent = __decorate([
|
|
202
|
+
CSSComponent('datepicker'),
|
|
203
|
+
__metadata("design:paramtypes", [])
|
|
204
|
+
], DatepickerComponent);
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
206
|
+
type: Component,
|
|
207
|
+
args: [{ selector: 'odx-datepicker', standalone: true, imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, hostDirectives: [ClickOutsideDirective], template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: 'bottom-end' }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedChange)=\"selectDate($any($event))\"\n ></odx-calendar>\n</ng-template>\n" }]
|
|
208
|
+
}], ctorParameters: function () { return []; }, propDecorators: { filterFn: [{
|
|
209
|
+
type: Input
|
|
210
|
+
}], minDate: [{
|
|
211
|
+
type: Input
|
|
212
|
+
}], maxDate: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], selectedChange: [{
|
|
215
|
+
type: Output
|
|
216
|
+
}], dropdown: [{
|
|
217
|
+
type: ViewChild,
|
|
218
|
+
args: [DropdownDirective]
|
|
219
|
+
}], dropdownTriggerElement: [{
|
|
220
|
+
type: ViewChild,
|
|
221
|
+
args: ['dropdownTrigger', { read: ElementRef, static: true }]
|
|
222
|
+
}], dateField: [{
|
|
223
|
+
type: ContentChild,
|
|
224
|
+
args: [DatepickerInputControlDirective]
|
|
225
|
+
}], openDatepicker: [{
|
|
226
|
+
type: HostListener,
|
|
227
|
+
args: ['keydown.alt.ArrowDown', ['$event']]
|
|
228
|
+
}] } });
|
|
229
|
+
|
|
230
|
+
const modules = [DatepickerComponent, DatepickerInputControlDirective];
|
|
231
|
+
class DatepickerModule {
|
|
232
|
+
}
|
|
233
|
+
DatepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
234
|
+
DatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, DatepickerInputControlDirective], exports: [CoreModule, DatepickerComponent, DatepickerInputControlDirective] });
|
|
235
|
+
DatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, CoreModule] });
|
|
236
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatepickerModule, decorators: [{
|
|
237
|
+
type: NgModule,
|
|
238
|
+
args: [{
|
|
239
|
+
imports: modules,
|
|
240
|
+
exports: [CoreModule, ...modules],
|
|
241
|
+
}]
|
|
242
|
+
}] });
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Generated bundle index. Do not edit.
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
export { DatepickerComponent, DatepickerConfig, DatepickerDefaultConfig, DatepickerInputControlDirective, DatepickerInputDateOrder, DatepickerInputFormat, DatepickerInputMask, DatepickerModule, injectDatepickerConfig, provideDatepickerConfig };
|
|
249
|
+
//# sourceMappingURL=odx-angular-components-datepicker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odx-angular-components-datepicker.mjs","sources":["../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-date-order.ts","../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.config.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-value-as-date.ts","../../../../libs/angular/components/datepicker/src/lib/directives/datepicker-input-control.directive.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.html","../../../../libs/angular/components/datepicker/src/lib/datepicker.module.ts","../../../../libs/angular/components/datepicker/src/odx-angular-components-datepicker.ts"],"sourcesContent":["export type DatepickerInputDateOrder = (typeof DatepickerInputDateOrder)[keyof typeof DatepickerInputDateOrder];\n\nexport const DatepickerInputDateOrder = {\n DMY: 'DMY',\n MDY: 'MDY',\n YMD: 'YMD',\n};\n","export type DatepickerInputPattern = typeof DatepickerInputFormat | typeof DatepickerInputMask;\n\nexport const DatepickerInputFormat = {\n DAYS: 'dd',\n MONTH: 'MM',\n YEAR: 'yyyy',\n};\n\nexport const DatepickerInputMask = {\n DAYS: 'd0',\n MONTH: 'M0',\n YEAR: '0000',\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { DatepickerInputDateOrder } from './models';\n\nexport interface DatepickerConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default DatepickerInputDateOrder.DMY\n */\n inputDateOrder: DatepickerInputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\nexport const { DatepickerConfig, DatepickerDefaultConfig, injectDatepickerConfig, provideDatepickerConfig } = createConfigTokens(\n 'Datepicker',\n '@odx/angular/components/datepicker',\n {\n inputDateOrder: DatepickerInputDateOrder.DMY,\n inputDateSeparator: '.',\n },\n);\n","import { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder, DatepickerInputFormat, DatepickerInputMask, DatepickerInputPattern } from '../models';\n\nfunction getDatepickerInputPattern({ inputDateOrder, inputDateSeparator }: DatepickerConfig, pattern: DatepickerInputPattern): string {\n const patternList: Record<DatepickerInputDateOrder, string> = {\n [DatepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\nexport function getDatepickerInputFormat(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputFormat);\n}\n\nexport function getDatepickerInputMask(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder } from '../models';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<DatepickerInputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [DatepickerInputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DatepickerConfig, 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\nexport function getDatepickerInputValueAsDate(config: DatepickerConfig, 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 { IConfig, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\nimport { injectDatepickerConfig } from '../datepicker.config';\nimport { getDatepickerInputFormat, getDatepickerInputMask, getDatepickerInputValueAsDate } from '../utils';\n\n@CSSComponent('datepicker__control')\n@Directive({\n standalone: true,\n selector: 'input[odxDatepickerControl]',\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 DatepickerInputControlDirective extends InputControlDirective {\n private readonly maskConfig: Partial<IConfig> = { validation: false, leadZeroDateTime: true };\n\n protected readonly readonlyController = ReadonlyController.inject();\n\n protected readonly config = injectDatepickerConfig();\n\n protected readonly inputMask = getDatepickerInputMask(this.config);\n\n protected readonly ngxMaskPipe = inject(NgxMaskPipe);\n\n @Output()\n public focused = new EventEmitter<FocusEvent>();\n\n public override valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n tap(() => this.applyMask()),\n map(() => this.nativeElementValue),\n );\n\n public applyMask(): void {\n this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);\n }\n\n public get valueAsDate(): Date | null {\n return getDatepickerInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n public get placeholder(): string {\n return getDatepickerInputFormat(this.config).toUpperCase();\n }\n\n @HostListener('focus', ['$event'])\n protected handleFocus(event: FocusEvent): void {\n this.focused.emit(event);\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClickOutsideDirective, 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, DateFilter } 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, untilDestroyed } from '@odx/angular/utils';\nimport { format, startOfDay } from 'date-fns';\nimport { filter } from 'rxjs';\nimport { injectDatepickerConfig } from './datepicker.config';\nimport { DatepickerInputControlDirective } from './directives';\nimport { getDatepickerInputFormat } from './utils';\n\n@CSSComponent('datepicker')\n@Component({\n selector: 'odx-datepicker',\n standalone: true,\n imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent],\n templateUrl: './datepicker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [ClickOutsideDirective],\n})\nexport class DatepickerComponent extends CustomFormControl<Date | null> implements AfterViewInit {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly clickOutsideDirective = inject(ClickOutsideDirective, { host: true });\n\n protected readonly config = injectDatepickerConfig();\n\n public readonly element = injectElement();\n\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n @Input()\n public filterFn: DateFilter | null = null;\n\n @Input()\n public minDate: Date | null = null;\n\n @Input()\n public maxDate: Date | null = null;\n\n @Output()\n public selectedChange = new EventEmitter<Date>();\n\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n @ContentChild(DatepickerInputControlDirective)\n public dateField?: DatepickerInputControlDirective;\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n this.handleClickOutside();\n\n deferFn(() => {\n if (!this.value) return;\n this.updateValue(startOfDay(this.value));\n this.updateDateField(this.value);\n });\n }\n\n public selectDate(value: Date | null): void {\n if (!value) return;\n\n this.updateValue(value);\n this.updateDateField(value);\n\n this.selectedChange.emit(value);\n\n this.closeDropdown();\n }\n\n protected handleDateFieldChanges(): void {\n this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));\n }\n\n protected handleDateFieldFocus(): void {\n this.dateField?.focused\n .pipe(\n filter(() => this.isOpen),\n this.takeUntilDestroyed(),\n )\n .subscribe(() => this.closeDropdown());\n }\n\n protected handleClickOutside(): void {\n this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());\n }\n\n protected closeDropdown(): void {\n this.dropdown.close();\n }\n\n protected clickOutside(): void {\n this.closeDropdown();\n }\n\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n protected openDatepicker(event: KeyboardEvent) {\n event.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n private updateDateField(date: Date): void {\n if (!this.dateField) return;\n\n const dateFormat = getDatepickerInputFormat(this.config);\n this.dateField.nativeElementValue = format(date, dateFormat);\n }\n}\n","<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: 'bottom-end' }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedChange)=\"selectDate($any($event))\"\n ></odx-calendar>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DatepickerComponent } from './datepicker.component';\nimport { DatepickerInputControlDirective } from './directives';\n\nconst modules = [DatepickerComponent, DatepickerInputControlDirective];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class DatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ import { CheckboxComponent } from '@odx/angular/components/checkbox';
|
|
|
10
10
|
import { CSSComponent, CSSModifier } from '@odx/angular/internal';
|
|
11
11
|
import { Transform, deferFn } from '@odx/angular/utils';
|
|
12
12
|
import * as i1 from '@angular/common';
|
|
13
|
-
import {
|
|
13
|
+
import { InputControlDirective } from '@odx/angular/cdk/custom-form-control';
|
|
14
|
+
import { BaseSearchFilterPipe, AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';
|
|
14
15
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
15
16
|
import { DropdownDirective } from '@odx/angular/components/dropdown';
|
|
16
17
|
import { IconComponent } from '@odx/angular/components/icon';
|
|
@@ -81,7 +82,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
81
82
|
type: Input
|
|
82
83
|
}] } });
|
|
83
84
|
|
|
84
|
-
let
|
|
85
|
+
let SelectInputControlDirective = class SelectInputControlDirective extends InputControlDirective {
|
|
85
86
|
constructor() {
|
|
86
87
|
super(...arguments);
|
|
87
88
|
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
@@ -91,12 +92,12 @@ let SelectSearchFieldDirective = class SelectSearchFieldDirective extends BaseSe
|
|
|
91
92
|
this.reset();
|
|
92
93
|
}
|
|
93
94
|
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
CSSComponent('
|
|
98
|
-
],
|
|
99
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
|
95
|
+
SelectInputControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
96
|
+
SelectInputControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SelectInputControlDirective, isStandalone: true, selector: "input[odxSelectSearchField]", inputs: { notFoundContent: ["odxSelectSearchField", "notFoundContent"] }, host: { listeners: { "keydown.delete": "handleDelete()" } }, usesInheritance: true, ngImport: i0 });
|
|
97
|
+
SelectInputControlDirective = __decorate([
|
|
98
|
+
CSSComponent('select__control')
|
|
99
|
+
], SelectInputControlDirective);
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectInputControlDirective, decorators: [{
|
|
100
101
|
type: Directive,
|
|
101
102
|
args: [{
|
|
102
103
|
standalone: true,
|
|
@@ -111,19 +112,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
111
112
|
}] } });
|
|
112
113
|
|
|
113
114
|
class SelectSearchFilterPipe extends BaseSearchFilterPipe {
|
|
114
|
-
constructor() {
|
|
115
|
-
super(...arguments);
|
|
116
|
-
this.hostController = inject(SELECT_CONTROL, { optional: true });
|
|
117
|
-
}
|
|
118
|
-
get searchField() {
|
|
119
|
-
return this.hostController?.searchField;
|
|
120
|
-
}
|
|
121
|
-
queryHandler(query) {
|
|
122
|
-
return query?.trim();
|
|
123
|
-
}
|
|
124
|
-
get searchBy() {
|
|
125
|
-
return this.hostController?.stringify ?? this.stringify;
|
|
126
|
-
}
|
|
127
115
|
}
|
|
128
116
|
SelectSearchFilterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectSearchFilterPipe, deps: null, target: i0.ɵɵFactoryTarget.Pipe });
|
|
129
117
|
SelectSearchFilterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SelectSearchFilterPipe, isStandalone: true, name: "odxSelectSearchFilter", pure: false });
|
|
@@ -267,7 +255,11 @@ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
|
|
|
267
255
|
provide: SELECT_CONTROL,
|
|
268
256
|
useExisting: forwardRef(() => SelectComponent_1),
|
|
269
257
|
},
|
|
270
|
-
|
|
258
|
+
{
|
|
259
|
+
provide: ODX_SEARCH_FILTER_HOST,
|
|
260
|
+
useExisting: SELECT_CONTROL,
|
|
261
|
+
},
|
|
262
|
+
], queries: [{ propertyName: "searchField", first: true, predicate: SelectInputControlDirective, descendants: true }, { propertyName: "options", predicate: SelectOptionComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-select__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n>\n <ng-template [ngIf]=\"!searchFieldEnabled\" [ngIfElse]=\"searchFieldTemplate\">\n <div class=\"odx-select__value\" *ngIf=\"selectedOptionContent; else placeholderTemplate\">\n <ng-template [odxDynamicView]=\"selectedOptionContent\" [odxDynamicViewContext]=\"{ $implicit: value }\"></ng-template>\n </div>\n </ng-template>\n <ng-template #placeholderTemplate>\n <div class=\"odx-select__placeholder\">\n {{ placeholder }}\n </div>\n </ng-template>\n <ng-template #searchFieldTemplate>\n <ng-content select=\"[odxSelectSearchField]\"></ng-content>\n </ng-template>\n <odx-icon class=\"odx-select__indicator\" name=\"chevron-down\" iconSet=\"core\"></odx-icon>\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\" [ngIfElse]=\"noOptionsTemplate\">\n <ng-content></ng-content>\n </ng-template>\n <ng-template #noOptionsTemplate>\n <odx-select-option disabled notFoundMessage>\n <ng-template [odxDynamicView]=\"searchField?.notFoundContent\"></ng-template>\n </odx-select-option>\n </ng-template>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "component", type: SelectOptionComponent, selector: "odx-select-option, odx-option", inputs: ["notFoundMessage"] }, { kind: "ngmodule", type: LoadingSpinnerModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
271
263
|
__decorate([
|
|
272
264
|
CSSModifier(),
|
|
273
265
|
Transform(coerceBooleanProperty),
|
|
@@ -283,6 +275,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
283
275
|
provide: SELECT_CONTROL,
|
|
284
276
|
useExisting: forwardRef(() => SelectComponent),
|
|
285
277
|
},
|
|
278
|
+
{
|
|
279
|
+
provide: ODX_SEARCH_FILTER_HOST,
|
|
280
|
+
useExisting: SELECT_CONTROL,
|
|
281
|
+
},
|
|
286
282
|
], host: {
|
|
287
283
|
'[tabindex]': 'searchFieldEnabled || isDisabled ? -1 : 0',
|
|
288
284
|
'[attr.aria-multiselectable]': 'multiple',
|
|
@@ -292,7 +288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
292
288
|
args: [SelectOptionComponent, { descendants: true, emitDistinctChangesOnly: true }]
|
|
293
289
|
}], searchField: [{
|
|
294
290
|
type: ContentChild,
|
|
295
|
-
args: [
|
|
291
|
+
args: [SelectInputControlDirective]
|
|
296
292
|
}], placeholder: [{
|
|
297
293
|
type: Input
|
|
298
294
|
}], multiple: [{
|
|
@@ -309,11 +305,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
309
305
|
args: ['keydown', ['$event']]
|
|
310
306
|
}] } });
|
|
311
307
|
|
|
312
|
-
const modules = [SelectComponent,
|
|
308
|
+
const modules = [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent];
|
|
313
309
|
class SelectModule {
|
|
314
310
|
}
|
|
315
311
|
SelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
316
|
-
SelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SelectModule, imports: [SelectComponent,
|
|
312
|
+
SelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SelectModule, imports: [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent], exports: [CoreModule, SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent] });
|
|
317
313
|
SelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectModule, imports: [SelectComponent, SelectOptionComponent, CoreModule] });
|
|
318
314
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectModule, decorators: [{
|
|
319
315
|
type: NgModule,
|
|
@@ -327,5 +323,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
327
323
|
* Generated bundle index. Do not edit.
|
|
328
324
|
*/
|
|
329
325
|
|
|
330
|
-
export { SELECT_CONTROL, SelectComponent, SelectModule, SelectOptionComponent,
|
|
326
|
+
export { SELECT_CONTROL, SelectComponent, SelectInputControlDirective, SelectModule, SelectOptionComponent, SelectSearchFilterPipe };
|
|
331
327
|
//# sourceMappingURL=odx-angular-components-select.mjs.map
|