@koobiq/components 20.3.1 → 20.4.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 (104) hide show
  1. package/accordion/accordion.scss +4 -1
  2. package/accordion/index.d.ts +36 -12
  3. package/alert/index.d.ts +8 -0
  4. package/breadcrumbs/index.d.ts +2 -0
  5. package/button-toggle/button-toggle-tokens.scss +14 -0
  6. package/button-toggle/button-toggle.scss +75 -3
  7. package/core/index.d.ts +146 -5
  8. package/core/option/_option-theme.scss +3 -0
  9. package/core/styles/common/_select.scss +98 -3
  10. package/core/styles/typography/_typography.scss +8 -0
  11. package/ellipsis-center/ellipsis-center.scss +31 -0
  12. package/ellipsis-center/index.d.ts +35 -2
  13. package/fesm2022/koobiq-components-accordion.mjs +143 -44
  14. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-alert.mjs +17 -1
  16. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-autocomplete.mjs +2 -2
  18. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +8 -3
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-code-block.mjs +10 -5
  24. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-core.mjs +214 -11
  26. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-dropdown.mjs +2 -2
  28. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-ellipsis-center.mjs +101 -34
  30. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-file-upload.mjs +7 -7
  32. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-filter-bar.mjs +94 -55
  34. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-inline-edit.mjs +177 -14
  36. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-list.mjs +359 -44
  38. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-markdown.mjs +6 -2
  40. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-modal.mjs +48 -7
  42. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-select.mjs +117 -12
  44. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-sidebar.mjs +5 -1
  46. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-sidepanel.mjs +25 -6
  48. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-tabs.mjs +460 -197
  50. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-time-range.mjs +388 -74
  52. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-timezone.mjs +4 -4
  54. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-title.mjs +15 -3
  56. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-tree-select.mjs +2 -2
  58. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-tree.mjs +14 -4
  60. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  61. package/file-upload/file-upload.scss +0 -18
  62. package/file-upload/index.d.ts +1 -1
  63. package/file-upload/multiple-file-upload.component.scss +15 -3
  64. package/file-upload/single-file-upload.component.scss +10 -2
  65. package/filter-bar/filter-bar-tokens.scss +2 -1
  66. package/filter-bar/index.d.ts +41 -4
  67. package/filter-bar/pipes/base-pipe.scss +24 -6
  68. package/filter-bar/pipes/pipe-input.scss +3 -1
  69. package/inline-edit/index.d.ts +87 -8
  70. package/inline-edit/inline-edit-tokens.scss +1 -0
  71. package/inline-edit/inline-edit.scss +26 -0
  72. package/link/_link-theme.scss +50 -15
  73. package/list/index.d.ts +126 -5
  74. package/markdown/index.d.ts +2 -0
  75. package/modal/index.d.ts +16 -7
  76. package/navbar/_navbar-item_horizontal.scss +5 -0
  77. package/package.json +3 -3
  78. package/prebuilt-themes/dark-theme.css +1 -1
  79. package/prebuilt-themes/light-theme.css +1 -1
  80. package/prebuilt-themes/theme.css +1 -1
  81. package/schematics/migrations/alert-signals/index.js +4 -1
  82. package/schematics/migrations/autocomplete-panel-width-auto/index.js +3 -34
  83. package/schematics/migrations/empty-state-size-attr/index.js +3 -34
  84. package/schematics/migrations/filter-bar-signals/index.js +4 -1
  85. package/schematics/migrations/loader-overlay-size-attr/index.js +3 -34
  86. package/schematics/migrations/v20-upgrade/index.js +4 -1
  87. package/schematics/ng-add/index.js +1 -1
  88. package/schematics/utils/angular-parsing.js +11 -12
  89. package/schematics/utils/package-config.js +5 -4
  90. package/schematics/utils/typescript.js +24 -0
  91. package/select/_select-theme.scss +9 -1
  92. package/select/index.d.ts +18 -2
  93. package/select/select.scss +13 -0
  94. package/sidebar/index.d.ts +1 -0
  95. package/sidepanel/index.d.ts +9 -0
  96. package/tabs/_tabs-common.scss +111 -2
  97. package/tabs/index.d.ts +79 -48
  98. package/tabs/tab-group.scss +0 -4
  99. package/tabs/tab-header.scss +0 -2
  100. package/tabs/tab-nav-bar.scss +3 -11
  101. package/time-range/index.d.ts +140 -5
  102. package/time-range/time-range.scss +16 -1
  103. package/title/index.d.ts +10 -2
  104. package/tree/index.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-time-range.mjs","sources":["../../../packages/components/time-range/constants.ts","../../../packages/components/time-range/time-range.service.ts","../../../packages/components/time-range/time-range-editor.ts","../../../packages/components/time-range/time-range-editor.html","../../../packages/components/time-range/time-range-title.ts","../../../packages/components/time-range/time-range.ts","../../../packages/components/time-range/time-range-title-as-form-field.ts","../../../packages/components/time-range/module.ts","../../../packages/components/time-range/koobiq-components-time-range.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqCustomTimeRangeType, KbqTimeRangeType } from './types';\n\n/** Preset of selectable time ranges, provided by DI. */\nexport const KBQ_DEFAULT_TIME_RANGE_TYPES = new InjectionToken<KbqTimeRangeType[]>('KBQ_DEFAULT_TIME_RANGE_TYPES');\n\n/** Preset of custom time ranges, provided by DI. */\nexport const KBQ_CUSTOM_TIME_RANGE_TYPES = new InjectionToken<KbqCustomTimeRangeType[]>('KBQ_CUSTOM_TIME_RANGE_TYPES');\n\n/** Time range types in range editor if nothing provided */\nexport const defaultTimeRangeTypes: KbqTimeRangeType[] = [\n 'lastHour',\n 'last24Hours',\n 'last3Days',\n 'last7Days',\n 'last14Days',\n 'currentQuarter',\n 'currentYear',\n 'allTime',\n 'range'\n];\n\n/** @docs-private */\nexport function createMissingDateImplError(componentName: string, provider: string): Error {\n return Error(\n `${componentName}: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/**\n * Validates that the 'from' date-time is not greater than the 'to' date-time in a range form.\n * Returns an error if the start date-time occurs after the end date-time.\n *\n * @param timeRangeService - Service used to manipulate date-time values.\n */\nexport const rangeValidator = <T>(timeRangeService: KbqTimeRangeService<T>): ValidatorFn => {\n return (control: AbstractControl) => {\n const form = control.value;\n\n if (!form.fromTime || !form.fromDate || !form.toTime || !form.toDate) {\n return null;\n }\n\n const fromDateTime = timeRangeService.combineDateAndTime(form.fromDate, form.fromTime);\n const toDateTime = timeRangeService.combineDateAndTime(form.toDate, form.toTime);\n\n return timeRangeService.dateAdapter.compareDate(fromDateTime, toDateTime) > 0\n ? { fromIsGreaterThanTo: fromDateTime }\n : null;\n };\n};\n","import { inject, Injectable } from '@angular/core';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport {\n createMissingDateImplError,\n defaultTimeRangeTypes,\n KBQ_CUSTOM_TIME_RANGE_TYPES,\n KBQ_DEFAULT_TIME_RANGE_TYPES\n} from './constants';\nimport {\n KbqCustomTimeRangeType,\n KbqRange,\n KbqRangeValue,\n KbqTimeRangeRange,\n KbqTimeRangeTranslationType,\n KbqTimeRangeType,\n KbqTimeRangeUnits\n} from './types';\n\n@Injectable()\nexport class KbqTimeRangeService<T> {\n // Optional so the constructor can name the missing provider instead of letting DI throw a bare\n // `NullInjectorError`. Neither is optional in practice - the guards below reject a missing one.\n readonly dateAdapter = inject<DateAdapter<T>>(DateAdapter, { optional: true })!;\n readonly dateFormatter = inject<DateFormatter<T>>(DateFormatter, { optional: true })!;\n\n readonly providedDefaultTimeRangeTypes =\n inject(KBQ_DEFAULT_TIME_RANGE_TYPES, { optional: true }) || defaultTimeRangeTypes;\n\n readonly customTimeRangeTypes = inject(KBQ_CUSTOM_TIME_RANGE_TYPES, { optional: true });\n\n readonly DEFAULT_RANGE_TYPE: KbqTimeRangeType = 'lastHour';\n\n readonly timeRangeConfig: Record<KbqTimeRangeType, Omit<KbqCustomTimeRangeType, 'type'>> = {\n lastMinute: { units: { minutes: -1 }, translationType: 'minutes' },\n last5Minutes: { units: { minutes: -5 }, translationType: 'minutes' },\n last15Minutes: { units: { minutes: -15 }, translationType: 'minutes' },\n last30Minutes: { units: { minutes: -30 }, translationType: 'minutes' },\n\n lastHour: { units: { hours: -1 }, translationType: 'hours' },\n last24Hours: { units: { hours: -24 }, translationType: 'hours' },\n\n last3Days: { units: { days: -3 }, translationType: 'days' },\n last7Days: { units: { days: -7 }, translationType: 'days' },\n last14Days: { units: { days: -14 }, translationType: 'days' },\n last30Days: { units: { days: -30 }, translationType: 'days' },\n\n last3Months: { units: { months: -3 }, translationType: 'months' },\n last12Months: { units: { months: -12 }, translationType: 'months' },\n\n allTime: { units: {}, translationType: 'other' },\n currentQuarter: { units: {}, translationType: 'other' },\n currentYear: { units: {}, translationType: 'other' },\n range: { units: {}, translationType: 'other' }\n };\n\n constructor() {\n if (!this.dateAdapter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateAdapter');\n }\n\n if (!this.dateFormatter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateFormatter');\n }\n\n this.customTimeRangeTypes\n ?.filter(({ type }) => {\n return !this.timeRangeConfig[type];\n })\n .forEach((type) => this.add(type));\n }\n\n static range = (dateTimeISOString: string): KbqRange => ({\n startDateTime: dateTimeISOString\n });\n\n add({ type, ...customTimeRangeConfig }: KbqCustomTimeRangeType): void {\n this.timeRangeConfig[type] = customTimeRangeConfig;\n }\n\n getTimeRangeTypeUnits(type: KbqTimeRangeType): KbqTimeRangeUnits {\n return this.timeRangeConfig[type].units;\n }\n\n getTimeRangeUnitByType(type: KbqTimeRangeType): KbqTimeRangeTranslationType {\n return this.timeRangeConfig[type].translationType;\n }\n\n getDefaultRangeValue(): Required<KbqRangeValue<T>> {\n const from = this.dateAdapter!.addCalendarUnits(this.dateAdapter!.today(), { days: -1 });\n const to = this.dateAdapter!.today();\n\n return {\n fromTime: this.omitMilliseconds(from),\n fromDate: this.omitMilliseconds(from),\n toTime: this.omitMilliseconds(to),\n toDate: this.omitMilliseconds(to)\n };\n }\n\n getTimeRangeDefaultValue(\n rangeValue: KbqRangeValue<T>,\n availableTimeRangeTypes: KbqTimeRangeType[] = []\n ): KbqTimeRangeRange {\n const defaultType =\n availableTimeRangeTypes[0] ?? this.providedDefaultTimeRangeTypes[0] ?? this.DEFAULT_RANGE_TYPE;\n\n return {\n ...this.calculateTimeRange(defaultType, rangeValue || this.getDefaultRangeValue()),\n type: defaultType\n };\n }\n\n calculateTimeRange(type?: KbqTimeRangeType, rangeValue?: KbqRangeValue<T>): KbqRange {\n if (!type) {\n return {};\n }\n\n if (type === 'range') {\n const checkedRangeValue = rangeValue || this.getDefaultRangeValue();\n\n return {\n startDateTime:\n checkedRangeValue.fromDate && checkedRangeValue.fromTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.fromDate, checkedRangeValue.fromTime)\n )\n : '',\n endDateTime:\n checkedRangeValue.toDate && checkedRangeValue.toTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.toDate, checkedRangeValue.toTime)\n )\n : ''\n };\n }\n\n switch (this.getTimeRangeUnitByType(type)) {\n case 'other': {\n switch (type) {\n case 'currentQuarter':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'quarter'))\n );\n case 'currentYear':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'year'))\n );\n case 'allTime':\n default: {\n return this.timeRangeConfig[type].range ?? {};\n }\n }\n }\n default: {\n return this.lastUnitsRange(this.getTimeRangeTypeUnits(type));\n }\n }\n }\n\n combineDateAndTime(date: T, time: T): T {\n return this.dateAdapter!.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(time),\n this.dateAdapter.getMinutes(time),\n this.dateAdapter.getSeconds(time),\n this.dateAdapter.getMilliseconds(time)\n );\n }\n\n lastUnitsRange = (unitsInfo: KbqTimeRangeUnits): KbqRange =>\n KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.addCalendarUnits(this.dateAdapter.today(), unitsInfo))\n );\n\n checkAndCorrectTimeRangeValue(\n value: KbqTimeRangeRange | null | undefined,\n availableTimeRangeTypes: KbqTimeRangeType[],\n rangeValue: KbqRangeValue<T>\n ): KbqTimeRangeRange {\n let result =\n value && (!availableTimeRangeTypes.length || availableTimeRangeTypes.includes(value.type))\n ? value\n : this.getTimeRangeDefaultValue(rangeValue, availableTimeRangeTypes);\n\n if (!result.startDateTime || (result.type === 'range' && (!result.startDateTime || !result.endDateTime))) {\n result = {\n ...this.calculateTimeRange(result.type, rangeValue),\n type: result.type\n };\n }\n\n return result;\n }\n\n omitMilliseconds(date: T): T {\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n 0\n );\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n TemplateRef,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ReactiveFormsModule,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { ErrorStateMatcher, KbqTimeRangeLocaleConfig } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqFieldset, KbqFieldsetItem } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqRadioModule } from '@koobiq/components/radio';\nimport { KbqTimepicker, KbqTimepickerModule, TimeFormats } from '@koobiq/components/timepicker';\nimport { merge } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { rangeValidator } from './constants';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType,\n KbqTimeRangeTypeContext\n} from './types';\n\ninterface FormValue<T> {\n type: FormControl<KbqTimeRangeType>;\n fromTime: FormControl<T>;\n fromDate: FormControl<T>;\n toTime: FormControl<T>;\n toDate: FormControl<T>;\n}\n\nclass RangeErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!form?.invalid || !!control?.invalid;\n }\n}\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-editor',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n KbqFieldset,\n KbqFieldsetItem,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqRadioModule,\n KbqIcon\n ],\n templateUrl: './time-range-editor.html',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: KbqTimeRangeEditor\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: KbqTimeRangeEditor\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range__editor'\n }\n})\nexport class KbqTimeRangeEditor<T> implements ControlValueAccessor, Validator, OnInit {\n private readonly timeRangeService = inject(KbqTimeRangeService);\n\n /** The maximum selectable date. */\n readonly maxDate = input<T | null>(null);\n /** The minimum selectable date. */\n readonly minDate = input<T | null>(null);\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Provided value of selected range */\n readonly rangeValue = input<Required<KbqRangeValue<T>>>(this.timeRangeService.getDefaultRangeValue());\n readonly showRangeAsDefault = input.required<boolean>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n\n /** @docs-private */\n protected readonly isRangeVisible = computed(\n () => this.showRangeAsDefault() || this.availableTimeRangeTypes().includes('range')\n );\n\n /** @docs-private */\n protected readonly timeRangeTypesWithoutRange = computed<KbqTimeRangeOptionContext[]>(() => {\n const localeConfig = this.localeConfiguration();\n\n return this.availableTimeRangeTypes()\n .filter((type) => type !== 'range')\n .map((type) => ({\n type,\n translationType: this.timeRangeService.getTimeRangeUnitByType(type),\n units: this.timeRangeService.getTimeRangeTypeUnits(type),\n formattedValue: this.getFormattedOption(type, localeConfig)\n }));\n });\n\n /** @docs-private */\n protected readonly timepickerList = viewChildren<KbqTimepicker<T>>(KbqTimepicker);\n\n /** @docs-private */\n protected readonly form: FormGroup<FormValue<T>>;\n /** @docs-private */\n protected readonly timepickerFormat = TimeFormats.HHmmss;\n /** @docs-private */\n protected readonly rangeStateMatcher = new RangeErrorStateMatcher();\n\n private lastValidationErrorOnEmit: ValidationErrors | null = null;\n\n constructor() {\n const defaultRangeValue = this.rangeValue();\n\n this.form = new FormGroup(\n {\n type: new FormControl<KbqTimeRangeType>(this.timeRangeService.DEFAULT_RANGE_TYPE, {\n nonNullable: true\n }),\n fromTime: new FormControl<T>(defaultRangeValue.fromTime, { nonNullable: true }),\n fromDate: new FormControl<T>(defaultRangeValue.fromDate, { nonNullable: true }),\n toTime: new FormControl<T>(defaultRangeValue.toTime, { nonNullable: true }),\n toDate: new FormControl<T>(defaultRangeValue.toDate, { nonNullable: true })\n },\n { validators: rangeValidator(this.timeRangeService) }\n );\n\n const rangeControls = [\n this.form.controls.fromTime,\n this.form.controls.fromDate,\n this.form.controls.toTime,\n this.form.controls.toDate\n ];\n\n merge(...rangeControls.map((control) => control.statusChanges))\n .pipe(takeUntilDestroyed())\n .subscribe(() => (this.lastValidationErrorOnEmit = this.concatControlValidationErrors()));\n\n this.form.valueChanges\n .pipe(\n map((formValue) => formValue.type),\n distinctUntilChanged(),\n takeUntilDestroyed()\n )\n .subscribe((type) => {\n const isDisabled = type !== 'range';\n\n rangeControls.forEach((control) => {\n if (isDisabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false });\n }\n });\n });\n\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((formValue) => {\n const range = this.mapTimeRange(formValue);\n\n if (range) this.onChange(range);\n });\n\n this.form.statusChanges.pipe(takeUntilDestroyed()).subscribe((status) => {\n const timepickerList = this.timepickerList();\n\n if (timepickerList.at(0)) {\n timepickerList.at(0)!.errorState = status === 'INVALID';\n }\n });\n }\n\n ngOnInit(): void {\n const defaultRangeValue = this.rangeValue();\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n this.form.setValue({\n type: (availableTimeRangeTypes.length && availableTimeRangeTypes[0]) || 'range',\n fromTime: defaultRangeValue.fromTime,\n fromDate: defaultRangeValue.fromDate,\n toTime: defaultRangeValue.toTime,\n toDate: defaultRangeValue.toDate\n });\n }\n\n /** @docs-private */\n validate(): ValidationErrors | null {\n return this.form.errors || this.lastValidationErrorOnEmit;\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value?: KbqTimeRangeRange): void {\n if (!value) return;\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n this.availableTimeRangeTypes(),\n this.form.value\n );\n\n this.form.controls.type.setValue(corrected.type);\n\n if (corrected.type === 'range' && corrected.startDateTime && corrected.endDateTime) {\n const from: T = this.timeRangeService.dateAdapter.deserialize(corrected.startDateTime);\n const to: T = this.timeRangeService.dateAdapter.deserialize(corrected.endDateTime);\n\n this.form.patchValue({\n fromTime: from,\n fromDate: from,\n toTime: to,\n toDate: to\n });\n }\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n private mapTimeRange({ type }: Partial<KbqTimeRangeTypeContext> & KbqRangeValue<T>): KbqTimeRangeRange | undefined {\n if (!type) return;\n\n return {\n type,\n ...this.timeRangeService.calculateTimeRange(type, {\n // use control.value, since via form.value control values can be undefined\n fromTime: this.form.controls.fromTime.value,\n fromDate: this.form.controls.fromDate.value,\n toDate: this.form.controls.toTime.value,\n toTime: this.form.controls.toTime.value\n })\n };\n }\n\n private getFormattedOption(type: KbqTimeRangeType, localeConfig: KbqTimeRangeLocaleConfig): string {\n const translationType = this.timeRangeService.getTimeRangeUnitByType(type);\n\n if (translationType === 'other') return '';\n\n const range = this.timeRangeService.calculateTimeRange(type);\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(range.startDateTime!),\n this.timeRangeService.dateAdapter.today(),\n [translationType],\n false,\n localeConfig.durationTemplate.option\n );\n }\n\n private concatControlValidationErrors(): ValidationErrors | null {\n let result: ValidationErrors | null = this.form.errors;\n\n Object.values(this.form.controls).forEach((control: AbstractControl) => {\n if (control.errors) {\n result = {\n ...result,\n ...control.errors\n };\n }\n });\n\n return result;\n }\n}\n","<form [formGroup]=\"form\">\n <kbq-radio-group class=\"kbq-time-range-editor__container\" [formControl]=\"form.controls.type\">\n @let types = timeRangeTypesWithoutRange();\n\n @if (types.length) {\n <div class=\"kbq-time-range-editor__predefined\">\n @for (type of types; track type) {\n <kbq-radio-button class=\"kbq-time-range-editor__predefined-option\" [value]=\"type.type\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplate() || defaultOptionTemplate; context: { $implicit: type }\"\n />\n </kbq-radio-button>\n }\n </div>\n }\n\n @if (isRangeVisible()) {\n @let localeConfig = localeConfiguration();\n\n <div class=\"kbq-time-range-editor__range\" role=\"group\">\n @if (types.length) {\n <kbq-radio-button [value]=\"'range'\">{{ localeConfig.editor.rangeLabel }}</kbq-radio-button>\n }\n\n <div class=\"kbq-time-range-editor__date-time\">\n <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.from\">\n {{ localeConfig.editor.from }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input kbqTimepicker [format]=\"timepickerFormat\" [formControl]=\"form.controls.fromTime\" />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [kbqDatepicker]=\"datepickerFrom\"\n [formControl]=\"form.controls.fromDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerFrom\" />\n <kbq-datepicker #datepickerFrom [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n </kbq-fieldset>\n </div>\n\n <div class=\"kbq-time-range-editor__date-time\">\n <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.to\">\n {{ localeConfig.editor.to }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input kbqTimepicker [format]=\"timepickerFormat\" [formControl]=\"form.controls.toTime\" />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [kbqDatepicker]=\"datepickerTo\"\n [formControl]=\"form.controls.toDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerTo\" />\n <kbq-datepicker #datepickerTo [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n </kbq-fieldset>\n </div>\n </div>\n }\n </kbq-radio-group>\n</form>\n\n<ng-template #defaultOptionTemplate let-context>\n @let localeConfig = localeConfiguration();\n @switch (context.translationType) {\n @case ('other') {\n @switch (context.type) {\n @case ('allTime') {\n {{ localeConfig.editor.allTimeOption ?? localeConfig.editor.allTime }}\n }\n @case ('currentQuarter') {\n {{ localeConfig.editor.currentQuarterOption ?? localeConfig.editor.currentQuarter }}\n }\n @case ('currentYear') {\n {{ localeConfig.editor.currentYearOption ?? localeConfig.editor.currentYear }}\n }\n }\n }\n @default {\n {{ context.formattedValue }}\n }\n }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, Injector, input, TemplateRef } from '@angular/core';\nimport { KbqTimeRangeLocaleConfig } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLinkModule } from '@koobiq/components/link';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqTimeRangeCustomizableTitleContext, KbqTimeRangeRange, KbqTimeRangeTitleContext } from './types';\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-title',\n imports: [\n NgTemplateOutlet,\n KbqLinkModule,\n KbqIconModule\n ],\n template: `\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()!; context: titleContext() ?? null; injector: injector\" />\n } @else {\n <a kbq-link pseudo>\n <span class=\"kbq-link__text\">{{ formattedDate() }}</span>\n\n <i kbq-icon=\"kbq-calendar-o_16\"></i>\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitle {\n private readonly timeRangeService = inject(KbqTimeRangeService);\n private readonly popover = inject(KbqPopoverTrigger, { host: true });\n protected readonly injector = inject(Injector);\n\n readonly timeRange = input.required<KbqTimeRangeRange | null>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n readonly titleTemplate = input<TemplateRef<any>>();\n\n protected readonly context = computed<KbqTimeRangeTitleContext | undefined>(() => {\n const timeRange = this.timeRange();\n\n if (!timeRange) return undefined;\n\n return {\n ...timeRange,\n ...this.timeRangeService.getTimeRangeTypeUnits(timeRange.type)\n };\n });\n\n protected readonly titleContext = computed<KbqTimeRangeCustomizableTitleContext | undefined>(() => {\n const context = this.context();\n const formattedDate = this.formattedDate();\n\n let customizableTitleContext = { formattedDate, popover: this.popover };\n\n if (context) {\n customizableTitleContext = { ...context, ...customizableTitleContext };\n }\n\n return {\n $implicit: customizableTitleContext,\n ...customizableTitleContext\n };\n });\n\n protected readonly formattedDate = computed(() => {\n const context = this.context();\n const localeConfiguration = this.localeConfiguration();\n\n if (!context) {\n return localeConfiguration.title.placeholder;\n }\n\n const timeRangeUnit = this.timeRangeService.getTimeRangeUnitByType(context.type);\n\n if (timeRangeUnit === 'other') {\n switch (context.type) {\n case 'range': {\n return (\n localeConfiguration.title.for +\n ' ' +\n this.timeRangeService.dateFormatter.rangeLongDate(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime ?? ''),\n this.timeRangeService.dateAdapter.deserialize(context.endDateTime ?? '')\n )\n );\n }\n case 'allTime': {\n return localeConfiguration.editor.allTime;\n }\n case 'currentQuarter': {\n return localeConfiguration.editor.currentQuarter;\n }\n case 'currentYear': {\n return localeConfiguration.editor.currentYear;\n }\n default: {\n return '';\n }\n }\n }\n\n if (!context.startDateTime) return '';\n\n return (\n localeConfiguration.title.for +\n ' ' +\n this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime),\n this.timeRangeService.dateAdapter.today(),\n [timeRangeUnit],\n false,\n localeConfiguration.durationTemplate.title\n )\n );\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n InjectionToken,\n input,\n OnInit,\n output,\n Provider,\n signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqTimeRangeLocaleConfig,\n PopUpPlacements,\n PopUpSizes,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeCustomizableTitleContext,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType\n} from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_TIME_RANGE_LOCALE_CONFIGURATION = new InjectionToken<KbqTimeRangeLocaleConfig>(\n 'KBQ_TIME_RANGE_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.timeRange }\n);\n\n/** Utility provider for `KBQ_TIME_RANGE_LOCALE_CONFIGURATION`. */\nexport const kbqTimeRangeLocaleConfigurationProvider = (configuration: KbqTimeRangeLocaleConfig): Provider => ({\n provide: KBQ_TIME_RANGE_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n@Component({\n selector: 'kbq-time-range',\n imports: [\n ReactiveFormsModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqTimeRangeEditor,\n KbqTimeRangeTitle\n ],\n template: `\n @let localeConfig = localeConfiguration();\n <kbq-time-range-title\n #popover=\"kbqPopover\"\n class=\"kbq-time-range__trigger\"\n kbqPopover\n kbqPopoverClass=\"kbq-time-range__popover\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqPopoverContent]=\"timeRangePopoverContent\"\n [kbqPopoverFooter]=\"timeRangePopoverFooter\"\n [kbqPopoverPlacement]=\"popupPlacement\"\n [kbqPopoverArrow]=\"arrow()\"\n [titleTemplate]=\"titleTemplate()\"\n [timeRange]=\"titleValue()\"\n [localeConfiguration]=\"localeConfig\"\n (kbqPopoverVisibleChange)=\"onVisibleChange($event)\"\n />\n\n <ng-template #timeRangePopoverContent>\n <kbq-time-range-editor\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [formControl]=\"rangeEditorControl\"\n [localeConfiguration]=\"localeConfig\"\n [showRangeAsDefault]=\"showRangeAsDefault()\"\n [rangeValue]=\"normalizedDefaultRangeValue()\"\n [availableTimeRangeTypes]=\"availableTimeRangeTypes()\"\n [optionTemplate]=\"optionTemplate()\"\n />\n </ng-template>\n\n <ng-template #timeRangePopoverFooter>\n <div class=\"kbq-time-range__buttons\" role=\"group\">\n <button\n kbq-button\n [color]=\"'contrast'\"\n [disabled]=\"rangeEditorControl.invalid\"\n (click)=\"onApply(popover)\"\n >\n {{ localeConfig.editor.apply }}\n </button>\n\n <button kbq-button (click)=\"onCancel(popover)\">{{ localeConfig.editor.cancel }}</button>\n </div>\n </ng-template>\n `,\n styleUrls: ['./time-range.scss'],\n providers: [KbqTimeRangeService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range'\n }\n})\nexport class KbqTimeRange<T> implements ControlValueAccessor, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** The minimum selectable date. */\n readonly minDate = input<T>();\n /** The maximum selectable date. */\n readonly maxDate = input<T>();\n /** provided value of selected range */\n readonly defaultRangeValue = input<KbqRangeValue<T>>();\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Customizable trigger output */\n readonly titleTemplate = input<TemplateRef<KbqTimeRangeCustomizableTitleContext>>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n /** Whether to show popover with arrow */\n readonly arrow = input(true, { transform: booleanAttribute });\n /**\n * Whether to show range in popover if not provided\n * @see availableTimeRangeTypes\n */\n readonly showRangeAsDefault = input(true);\n /** Whether component should fallback to default value if null provided */\n readonly nonNullable = input(true, { transform: booleanAttribute });\n\n /** Emit value update if provided value via formControl wasn't valid */\n readonly valueCorrected = output<KbqTimeRangeRange>();\n\n /**\n * Used to calculate time range.\n * @docs-private */\n protected readonly normalizedDefaultRangeValue = computed(() => ({\n ...this.timeRangeService.getDefaultRangeValue(),\n ...this.defaultRangeValue()\n }));\n\n /** @docs-private */\n protected readonly titleValue: WritableSignal<KbqTimeRangeRange | null>;\n /** @docs-private */\n protected readonly rangeEditorControl: FormControl<KbqTimeRangeRange>;\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popupPlacement = PopUpPlacements.BottomLeft;\n\n /** @docs-private */\n protected readonly localeConfiguration = signal(inject(KBQ_TIME_RANGE_LOCALE_CONFIGURATION));\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n const defaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n this.availableTimeRangeTypes()\n );\n\n this.titleValue = signal(this.nonNullable() ? defaultValue : null);\n this.rangeEditorControl = new FormControl<KbqTimeRangeRange>(defaultValue, { nonNullable: true });\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n this.localeConfiguration.set(this.localeService?.getParams('timeRange') ?? ruRULocaleData.timeRange);\n });\n\n toObservable(this.availableTimeRangeTypes)\n .pipe(takeUntilDestroyed())\n .subscribe(this.handleAvailableTypesChange);\n }\n\n ngOnInit(): void {\n // call again on init, so input signals values will be correct\n this.writeValue(this.ngControl?.value ?? null);\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value: KbqTimeRangeRange | null): void {\n const nonNullable = this.nonNullable();\n\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n availableTimeRangeTypes,\n this.normalizedDefaultRangeValue()\n );\n\n if (\n (value && value.type && !('startDateTime' in value && availableTimeRangeTypes.includes(value.type))) ||\n (nonNullable && value === null)\n ) {\n this.valueCorrected.emit(corrected);\n }\n\n this.titleValue.set(nonNullable || value !== null ? corrected : null);\n this.rangeEditorControl.setValue(corrected);\n }\n\n /** @docs-private */\n onApply(popover: KbqPopoverTrigger): void {\n this.titleValue.set(this.rangeEditorControl.value);\n this.onChange(this.rangeEditorControl.value);\n popover.hide();\n }\n\n /** @docs-private */\n onCancel(popover: KbqPopoverTrigger): void {\n popover.hide();\n }\n\n onVisibleChange(isVisible: boolean) {\n const titleValue = this.titleValue();\n\n if (!isVisible && titleValue) {\n this.rangeEditorControl.setValue(titleValue);\n }\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (_value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n private handleAvailableTypesChange = (types: KbqTimeRangeType[]): void => {\n if (types.includes(this.rangeEditorControl.value.type) || this.rangeEditorControl.value.type === 'range') {\n return;\n }\n\n const timeRangeDefaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n types.length ? types : ['range']\n );\n\n this.titleValue.set(timeRangeDefaultValue);\n this.rangeEditorControl.setValue(timeRangeDefaultValue);\n this.onChange(timeRangeDefaultValue);\n };\n}\n","import { ChangeDetectionStrategy, Component, Directive, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Observable, Subject } from 'rxjs';\nimport { KbqTimeRange } from './time-range';\n\n/** Directive for easy using styles of time-range placeholder publicly. */\n@Directive({\n selector: '[kbqTimeRangeTitlePlaceholder]',\n host: {\n class: 'kbq-time-range-title__placeholder'\n }\n})\nexport class KbqTimeRangeTitlePlaceholder {}\n\n/** Component simulates `KbqFormFieldControl` allowing to provide custom content inside `KbqFormField` */\n@Component({\n selector: 'kbq-time-range-title-as-control',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n &:focus-visible {\n outline: none;\n }\n display: flex;\n align-items: center;\n }\n `,\n providers: [\n {\n provide: KbqFormFieldControl,\n useExisting: KbqTimeRangeTitleAsControl\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.tabindex]': '0',\n class: 'kbq-time-range-title-as-form-field'\n }\n})\nexport class KbqTimeRangeTitleAsControl implements KbqFormFieldControl<any> {\n private timeRange = inject(KbqTimeRange);\n\n /** @docs-private */\n controlType = 'select';\n /** @docs-private */\n stateChanges: Observable<void> = new Subject<void>();\n /** @docs-private */\n ngControl: NgControl | null = this.timeRange.ngControl;\n /** @docs-private */\n value: any;\n /** @docs-private */\n id: string;\n /** @docs-private */\n placeholder: string;\n /** @docs-private */\n focused: boolean;\n /** @docs-private */\n empty: boolean;\n /** @docs-private */\n required: boolean;\n /** @docs-private */\n disabled: boolean;\n /** @docs-private */\n errorState: boolean;\n /** @docs-private */\n onContainerClick(_event: MouseEvent): void {}\n /** @docs-private */\n focus(_options?: FocusOptions): void {}\n}\n","import { NgModule } from '@angular/core';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeTitleAsControl, KbqTimeRangeTitlePlaceholder } from './time-range-title-as-form-field';\n\nconst COMPONENTS = [\n KbqTimeRange,\n KbqTimeRangeTitle,\n KbqTimeRangeEditor,\n KbqTimeRangeTitlePlaceholder,\n KbqTimeRangeTitleAsControl\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqTimeRangeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-time-range.mjs","sources":["../../../packages/components/time-range/constants.ts","../../../packages/components/time-range/time-range-editor-bridge.ts","../../../packages/components/time-range/time-range.service.ts","../../../packages/components/time-range/time-range-editor.ts","../../../packages/components/time-range/time-range-editor.html","../../../packages/components/time-range/time-range-title.ts","../../../packages/components/time-range/time-range.ts","../../../packages/components/time-range/time-range-title-as-form-field.ts","../../../packages/components/time-range/module.ts","../../../packages/components/time-range/koobiq-components-time-range.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqCustomTimeRangeType, KbqTimeRangeType } from './types';\n\n/** Preset of selectable time ranges, provided by DI. */\nexport const KBQ_DEFAULT_TIME_RANGE_TYPES = new InjectionToken<KbqTimeRangeType[]>('KBQ_DEFAULT_TIME_RANGE_TYPES');\n\n/** Preset of custom time ranges, provided by DI. */\nexport const KBQ_CUSTOM_TIME_RANGE_TYPES = new InjectionToken<KbqCustomTimeRangeType[]>('KBQ_CUSTOM_TIME_RANGE_TYPES');\n\n/** Time range types in range editor if nothing provided */\nexport const defaultTimeRangeTypes: KbqTimeRangeType[] = [\n 'lastHour',\n 'last24Hours',\n 'last3Days',\n 'last7Days',\n 'last14Days',\n 'currentQuarter',\n 'currentYear',\n 'allTime',\n 'range'\n];\n\n/** @docs-private */\nexport function createMissingDateImplError(componentName: string, provider: string): Error {\n return Error(\n `${componentName}: No provider found for ${provider}. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`\n );\n}\n\n/**\n * Validates that the 'from' date-time is not greater than the 'to' date-time in a range form.\n * Returns an error if the start date-time occurs after the end date-time.\n *\n * @param timeRangeService - Service used to manipulate date-time values.\n */\nexport const rangeValidator = <T>(timeRangeService: KbqTimeRangeService<T>): ValidatorFn => {\n return (control: AbstractControl) => {\n const form = control.value;\n\n if (!form.fromTime || !form.fromDate || !form.toTime || !form.toDate) {\n return null;\n }\n\n const fromDateTime = timeRangeService.combineDateAndTime(form.fromDate, form.fromTime);\n const toDateTime = timeRangeService.combineDateAndTime(form.toDate, form.toTime);\n\n return timeRangeService.dateAdapter.compareDateTime(fromDateTime, toDateTime) > 0\n ? { fromIsGreaterThanTo: fromDateTime }\n : null;\n };\n};\n","import { Injectable } from '@angular/core';\n\n/**\n * Channel between the popover footer, which `KbqTimeRange` owns, and the editor rendered inside the\n * popover. Provided by `KbqTimeRange`, so there is exactly one instance per component.\n *\n * @docs-private\n */\n@Injectable()\nexport class KbqTimeRangeEditorBridge {\n /**\n * Raised while a pointer is held down on the footer. `focusout` on its own cannot tell \"the user is\n * pressing apply\" apart from \"the user clicked a blank spot\": Safari does not move focus onto a\n * `<button>` when it is clicked, so both arrive with a `null` `relatedTarget`.\n */\n applyGestureInProgress = false;\n\n /**\n * Registered by the editor. Reveals the errors of both borders and moves focus to the first field\n * carrying one; returns whether the editor is free of errors.\n */\n revealErrors: () => boolean = () => true;\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport {\n createMissingDateImplError,\n defaultTimeRangeTypes,\n KBQ_CUSTOM_TIME_RANGE_TYPES,\n KBQ_DEFAULT_TIME_RANGE_TYPES\n} from './constants';\nimport {\n KbqCustomTimeRangeType,\n KbqRange,\n KbqRangeValue,\n KbqTimeRangeRange,\n KbqTimeRangeTranslationType,\n KbqTimeRangeType,\n KbqTimeRangeUnits\n} from './types';\n\n/** The owning component's bound inputs, read live rather than copied. @docs-private */\ninterface KbqTimeRangeBoundsSource<T> {\n min: Signal<T | null | undefined>;\n max: Signal<T | null | undefined>;\n}\n\n@Injectable()\nexport class KbqTimeRangeService<T> {\n // Optional so the constructor can name the missing provider instead of letting DI throw a bare\n // `NullInjectorError`. Neither is optional in practice - the guards below reject a missing one.\n readonly dateAdapter = inject<DateAdapter<T>>(DateAdapter, { optional: true })!;\n readonly dateFormatter = inject<DateFormatter<T>>(DateFormatter, { optional: true })!;\n\n readonly providedDefaultTimeRangeTypes =\n inject(KBQ_DEFAULT_TIME_RANGE_TYPES, { optional: true }) || defaultTimeRangeTypes;\n\n readonly customTimeRangeTypes = inject(KBQ_CUSTOM_TIME_RANGE_TYPES, { optional: true });\n\n readonly DEFAULT_RANGE_TYPE: KbqTimeRangeType = 'lastHour';\n\n private readonly boundsSource = signal<KbqTimeRangeBoundsSource<T>>({\n min: signal(null),\n max: signal(null)\n });\n\n /**\n * Bounds of the owning component, so that every default and every check reads one pair. Both are\n * exact instants rather than whole days: a `maxDate` that should admit its own day has to carry the\n * end of that day.\n */\n readonly minDate = computed(() => this.boundsSource().min() ?? null);\n /** @see minDate */\n readonly maxDate = computed(() => this.boundsSource().max() ?? null);\n\n readonly timeRangeConfig: Record<KbqTimeRangeType, Omit<KbqCustomTimeRangeType, 'type'>> = {\n lastMinute: { units: { minutes: -1 }, translationType: 'minutes' },\n last5Minutes: { units: { minutes: -5 }, translationType: 'minutes' },\n last15Minutes: { units: { minutes: -15 }, translationType: 'minutes' },\n last30Minutes: { units: { minutes: -30 }, translationType: 'minutes' },\n\n lastHour: { units: { hours: -1 }, translationType: 'hours' },\n last24Hours: { units: { hours: -24 }, translationType: 'hours' },\n\n last3Days: { units: { days: -3 }, translationType: 'days' },\n last7Days: { units: { days: -7 }, translationType: 'days' },\n last14Days: { units: { days: -14 }, translationType: 'days' },\n last30Days: { units: { days: -30 }, translationType: 'days' },\n\n last3Months: { units: { months: -3 }, translationType: 'months' },\n last12Months: { units: { months: -12 }, translationType: 'months' },\n\n allTime: { units: {}, translationType: 'other' },\n currentQuarter: { units: {}, translationType: 'other' },\n currentYear: { units: {}, translationType: 'other' },\n range: { units: {}, translationType: 'other' }\n };\n\n constructor() {\n if (!this.dateAdapter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateAdapter');\n }\n\n if (!this.dateFormatter) {\n throw createMissingDateImplError('KbqTimeRange', 'DateFormatter');\n }\n\n this.customTimeRangeTypes\n ?.filter(({ type }) => {\n return !this.timeRangeConfig[type];\n })\n .forEach((type) => this.add(type));\n }\n\n static range = (dateTimeISOString: string): KbqRange => ({\n startDateTime: dateTimeISOString\n });\n\n add({ type, ...customTimeRangeConfig }: KbqCustomTimeRangeType): void {\n this.timeRangeConfig[type] = customTimeRangeConfig;\n }\n\n /**\n * Hands the owning component's own bound inputs over, rather than a copy of their values: a signal\n * input reads as its initial value until the first change detection, so a mirror would leave every\n * default computed in a constructor clamped against no bounds at all.\n */\n bindBounds(min: Signal<T | null | undefined>, max: Signal<T | null | undefined>): void {\n this.boundsSource.set({ min, max });\n }\n\n getTimeRangeTypeUnits(type: KbqTimeRangeType): KbqTimeRangeUnits {\n return this.timeRangeConfig[type].units;\n }\n\n getTimeRangeUnitByType(type: KbqTimeRangeType): KbqTimeRangeTranslationType {\n return this.timeRangeConfig[type].translationType;\n }\n\n /**\n * \"Yesterday to today\", pulled inside {@link minDate}/{@link maxDate} when they are set - otherwise\n * the editor opens on a range it would itself report as out of bounds.\n *\n * Milliseconds are dropped from \"today\" *before* clamping, so a clamped end lands exactly on its\n * bound rather than a fraction of a second below it.\n */\n getDefaultRangeValue(): Required<KbqRangeValue<T>> {\n const today = this.omitMilliseconds(this.dateAdapter.today());\n // `from` is derived from the clamped `to`, so the one-day window survives bounds that lie\n // entirely in the past - clamping both ends independently would collapse it onto `maxDate`.\n const to = this.clampToBounds(today);\n const from = this.clampToBounds(this.dateAdapter.addCalendarUnits(to, { days: -1 }));\n // Bounds lying entirely in the future leave no room below `to`, and both ends land on `minDate`.\n // The window is opened upwards instead, which is the same day in the other direction.\n const end =\n this.dateAdapter.compareDateTime(from, to) === 0\n ? this.clampToBounds(this.dateAdapter.addCalendarUnits(from, { days: 1 }))\n : to;\n\n return { fromTime: from, fromDate: from, toTime: end, toDate: end };\n }\n\n getTimeRangeDefaultValue(\n rangeValue: KbqRangeValue<T>,\n availableTimeRangeTypes: KbqTimeRangeType[] = []\n ): KbqTimeRangeRange {\n const defaultType =\n availableTimeRangeTypes[0] ?? this.providedDefaultTimeRangeTypes[0] ?? this.DEFAULT_RANGE_TYPE;\n\n return {\n ...this.calculateTimeRange(defaultType, rangeValue || this.getDefaultRangeValue()),\n type: defaultType\n };\n }\n\n calculateTimeRange(type?: KbqTimeRangeType, rangeValue?: KbqRangeValue<T>): KbqRange {\n if (!type) {\n return {};\n }\n\n if (type === 'range') {\n const checkedRangeValue = rangeValue || this.getDefaultRangeValue();\n\n return {\n startDateTime:\n checkedRangeValue.fromDate && checkedRangeValue.fromTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.fromDate, checkedRangeValue.fromTime)\n )\n : '',\n endDateTime:\n checkedRangeValue.toDate && checkedRangeValue.toTime\n ? this.dateAdapter.toIso8601(\n this.combineDateAndTime(checkedRangeValue.toDate, checkedRangeValue.toTime)\n )\n : ''\n };\n }\n\n switch (this.getTimeRangeUnitByType(type)) {\n case 'other': {\n switch (type) {\n case 'currentQuarter':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'quarter'))\n );\n case 'currentYear':\n return KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'year'))\n );\n case 'allTime':\n default: {\n return this.timeRangeConfig[type].range ?? {};\n }\n }\n }\n default: {\n return this.lastUnitsRange(this.getTimeRangeTypeUnits(type));\n }\n }\n }\n\n combineDateAndTime(date: T, time: T): T {\n return this.dateAdapter!.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(time),\n this.dateAdapter.getMinutes(time),\n this.dateAdapter.getSeconds(time),\n this.dateAdapter.getMilliseconds(time)\n );\n }\n\n lastUnitsRange = (unitsInfo: KbqTimeRangeUnits): KbqRange =>\n KbqTimeRangeService.range(\n this.dateAdapter.toIso8601(this.dateAdapter.addCalendarUnits(this.dateAdapter.today(), unitsInfo))\n );\n\n checkAndCorrectTimeRangeValue(\n value: KbqTimeRangeRange | null | undefined,\n availableTimeRangeTypes: KbqTimeRangeType[],\n rangeValue: KbqRangeValue<T>\n ): KbqTimeRangeRange {\n let result =\n value && (!availableTimeRangeTypes.length || availableTimeRangeTypes.includes(value.type))\n ? value\n : this.getTimeRangeDefaultValue(rangeValue, availableTimeRangeTypes);\n\n if (!result.startDateTime || (result.type === 'range' && (!result.startDateTime || !result.endDateTime))) {\n result = {\n ...this.calculateTimeRange(result.type, rangeValue),\n type: result.type\n };\n }\n\n return result;\n }\n\n /** Which bound, if any, an instant falls outside of. */\n private checkBounds(dateTime: T): 'min' | 'max' | null {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n if (minDate && this.dateAdapter.compareDateTime(dateTime, minDate) < 0) return 'min';\n\n if (maxDate && this.dateAdapter.compareDateTime(dateTime, maxDate) > 0) return 'max';\n\n return null;\n }\n\n /**\n * `DateAdapter.clampDate` compares whole days only, while a border is rejected by its time as well -\n * a value clamped to the day would still land outside the bounds.\n */\n private clampToBounds(date: T): T {\n switch (this.checkBounds(date)) {\n case 'min':\n return this.minDate()!;\n case 'max':\n return this.maxDate()!;\n default:\n return date;\n }\n }\n\n omitMilliseconds(date: T): T {\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n this.dateAdapter.getHours(date),\n this.dateAdapter.getMinutes(date),\n this.dateAdapter.getSeconds(date),\n 0\n );\n }\n}\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnInit,\n TemplateRef,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn\n} from '@angular/forms';\nimport { ErrorStateMatcher, KbqTimeRangeLocaleConfig, ruRULocaleData } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqError, KbqFieldset, KbqFieldsetItem, KbqHint } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqRadioModule } from '@koobiq/components/radio';\nimport { KbqTimepicker, KbqTimepickerModule, TimeFormats } from '@koobiq/components/timepicker';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType,\n KbqTimeRangeTypeContext\n} from './types';\n\ninterface FormValue<T> {\n type: FormControl<KbqTimeRangeType>;\n fromTime: FormControl<T>;\n fromDate: FormControl<T>;\n toTime: FormControl<T>;\n toDate: FormControl<T>;\n}\n\n/** One end of the range. Its date and its time are checked together, and revealed together. */\ntype RangeBorder = 'from' | 'to';\n\ntype BorderHalf = 'Date' | 'Time';\n\nconst borders: RangeBorder[] = ['from', 'to'];\nconst halves: BorderHalf[] = ['Time', 'Date'];\n\n/**\n * Errors are reported only once the user has left the border they belong to, and go quiet again as soon\n * as typing resumes. The validators themselves always run, so that `validate()` stays honest about\n * whether the range could be saved - only the painting waits.\n */\nclass RangeErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null): boolean {\n return !!control?.invalid && !!control.touched;\n }\n}\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-editor',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n KbqError,\n KbqFieldset,\n KbqFieldsetItem,\n KbqHint,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqRadioModule,\n KbqIcon\n ],\n templateUrl: './time-range-editor.html',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: KbqTimeRangeEditor\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: KbqTimeRangeEditor\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range__editor'\n }\n})\nexport class KbqTimeRangeEditor<T> implements ControlValueAccessor, Validator, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n /** The maximum selectable date. */\n readonly maxDate = input<T | null>(null);\n /** The minimum selectable date. */\n readonly minDate = input<T | null>(null);\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Provided value of selected range */\n readonly rangeValue = input<Required<KbqRangeValue<T>>>(this.timeRangeService.getDefaultRangeValue());\n readonly showRangeAsDefault = input.required<boolean>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n\n /** @docs-private */\n protected readonly isRangeVisible = computed(\n () => this.showRangeAsDefault() || this.availableTimeRangeTypes().includes('range')\n );\n\n /** @docs-private */\n protected readonly timeRangeTypesWithoutRange = computed<KbqTimeRangeOptionContext[]>(() => {\n const localeConfig = this.localeConfiguration();\n\n return this.availableTimeRangeTypes()\n .filter((type) => type !== 'range')\n .map((type) => ({\n type,\n translationType: this.timeRangeService.getTimeRangeUnitByType(type),\n units: this.timeRangeService.getTimeRangeTypeUnits(type),\n formattedValue: this.getFormattedOption(type, localeConfig)\n }));\n });\n\n /**\n * Caption under the \"range\" option, spelling out the bounds the border has to stay within. Read from\n * the service rather than from this component's own inputs, so that it can never disagree with what\n * the border validators go on to enforce.\n * @docs-private\n */\n protected readonly boundsHint = computed(() => {\n const { dateFormatter } = this.timeRangeService;\n const minDate = this.timeRangeService.minDate();\n const maxDate = this.timeRangeService.maxDate();\n\n if (!minDate && !maxDate) return '';\n\n // The time half earns a place in the caption only once a bound actually carries one.\n return [minDate, maxDate].some((bound) => bound && this.carriesTime(bound))\n ? dateFormatter.rangeShortDateTime(minDate, maxDate ?? undefined)\n : dateFormatter.rangeShortDate(minDate, maxDate ?? undefined);\n });\n\n /** @docs-private */\n protected readonly timepickerList = viewChildren<KbqTimepicker<T>>(KbqTimepicker);\n\n /** @docs-private */\n protected readonly form: FormGroup<FormValue<T>>;\n\n /**\n * The same four controls as `form`, indexed as two ends each with a date and a time. The form itself\n * has to stay flat, because its value is the `KbqRangeValue` the service and the bound control speak\n * in - this is the single place the two shapes are tied together, and `Record` over both dimensions is\n * what keeps it exhaustive.\n */\n private readonly borderControls: Record<RangeBorder, Record<BorderHalf, FormControl<T>>>;\n /** The same four, flat, for the checks that treat the range as one thing. */\n private readonly rangeControls: FormControl<T>[];\n\n /** @docs-private */\n protected readonly timepickerFormat = TimeFormats.HHmmss;\n /** @docs-private */\n protected readonly rangeStateMatcher = new RangeErrorStateMatcher();\n\n /** Raised by the first \"apply\", after which a border left wholly empty counts as an error too. */\n private applyAttempted = false;\n\n constructor() {\n const defaultRangeValue = this.rangeValue();\n\n this.form = new FormGroup({\n type: new FormControl<KbqTimeRangeType>(this.timeRangeService.DEFAULT_RANGE_TYPE, {\n nonNullable: true\n }),\n fromTime: new FormControl<T>(defaultRangeValue.fromTime, { nonNullable: true }),\n fromDate: new FormControl<T>(defaultRangeValue.fromDate, { nonNullable: true }),\n toTime: new FormControl<T>(defaultRangeValue.toTime, { nonNullable: true }),\n toDate: new FormControl<T>(defaultRangeValue.toDate, { nonNullable: true })\n });\n\n const { fromTime, fromDate, toTime, toDate } = this.form.controls;\n\n this.borderControls = {\n from: { Time: fromTime, Date: fromDate },\n to: { Time: toTime, Date: toDate }\n };\n this.rangeControls = borders.flatMap((border) => this.borderHalves(border));\n\n borders.forEach((border) =>\n halves.forEach((half) =>\n this.borderControls[border][half].addValidators(this.borderValidator(border, half))\n )\n );\n\n if (this.editorBridge) this.editorBridge.revealErrors = () => this.revealErrors();\n\n this.form.valueChanges\n .pipe(\n map((formValue) => formValue.type),\n distinctUntilChanged(),\n takeUntilDestroyed()\n )\n .subscribe((type) => {\n const isDisabled = type !== 'range';\n\n this.rangeControls.forEach((control) => {\n if (isDisabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false });\n }\n });\n });\n\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((formValue) => {\n // Each half is checked against its sibling, so editing one has to re-run the other. Silent,\n // or this would re-enter through `valueChanges`.\n this.revalidateRange();\n\n const range = this.mapTimeRange(formValue);\n\n if (range) this.onChange(range);\n });\n }\n\n ngOnInit(): void {\n const defaultRangeValue = this.rangeValue();\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n this.form.setValue({\n type: (availableTimeRangeTypes.length && availableTimeRangeTypes[0]) || 'range',\n fromTime: defaultRangeValue.fromTime,\n fromDate: defaultRangeValue.fromDate,\n toTime: defaultRangeValue.toTime,\n toDate: defaultRangeValue.toDate\n });\n }\n\n /** @docs-private */\n validate(): ValidationErrors | null {\n return this.concatControlValidationErrors();\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value?: KbqTimeRangeRange): void {\n if (!value) return;\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n this.availableTimeRangeTypes(),\n this.form.value\n );\n\n this.form.controls.type.setValue(corrected.type);\n\n if (corrected.type === 'range' && corrected.startDateTime && corrected.endDateTime) {\n const { dateAdapter } = this.timeRangeService;\n // An unparseable end leaves its halves empty, which the border validators then report.\n const from = dateAdapter.deserialize(corrected.startDateTime)!;\n const to = dateAdapter.deserialize(corrected.endDateTime)!;\n\n this.form.patchValue({\n fromTime: from,\n fromDate: from,\n toTime: to,\n toDate: to\n });\n }\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /**\n * Leaving one border reports what is wrong with it. Angular marks a control touched on its own blur,\n * which is a finer grain than the spec asks for - so moving between a border's own date and time\n * takes the touch back off, and the pair is judged only once focus is out of both.\n * @docs-private\n */\n protected onBorderFocusOut(border: RangeBorder, { currentTarget, relatedTarget }: FocusEvent): void {\n this.setBorderTouched(\n border,\n !this.staysWithin(currentTarget as HTMLElement, relatedTarget as HTMLElement | null)\n );\n }\n\n /**\n * Typing puts a border back to its neutral state, the way `validation-on-blur` does for a single\n * field. What is wrong with it is said again when focus leaves it.\n * @docs-private\n */\n protected onBorderInput(border: RangeBorder): void {\n this.setBorderTouched(border, false);\n }\n\n /**\n * What is said when the range as a whole has left the bounds. Said once, below the last of the two\n * ends, and only when both of them are at fault: a single end out of bounds is already pointed at by\n * the fields painted around it. Silent until the ends have been left, keeping step with that\n * painting.\n * @docs-private\n */\n protected outOfBoundsMessage(): string {\n const bothOutOfBounds = borders.every((border) =>\n this.borderHalves(border).some((control) => control.touched && !!control.errors?.kbqTimeRangeOutOfBounds)\n );\n\n if (!bothOutOfBounds) return '';\n\n const template =\n this.localeConfiguration().editor.outOfBoundsError ??\n ruRULocaleData.timeRange.editor.outOfBoundsError ??\n '';\n\n return template.replace('{{ value }}', this.boundsHint());\n }\n\n /**\n * Once focus leaves the manual range fields, a reversed range is silently swapped back into order -\n * except on the way to \"apply\", where the swap is left to the emitted value so that the popover does\n * not visibly reorder itself in the same gesture that closes it.\n * @docs-private\n */\n protected onRangeFocusOut({ currentTarget, relatedTarget }: FocusEvent): void {\n const next = relatedTarget as HTMLElement | null;\n\n if (this.staysWithin(currentTarget as HTMLElement, next)) return;\n\n // Safari reports a `null` `relatedTarget` for a click on a button, so the footer is recognised by\n // the pointer gesture it started rather than by where focus went.\n if (this.editorBridge?.applyGestureInProgress || next?.closest('.kbq-time-range__buttons')) return;\n\n // Focus went nowhere because the whole window lost it - the user is still mid-edit.\n if (!next && !this.document.hasFocus()) return;\n\n this.swapIfReversed();\n }\n\n /**\n * Reveals both borders and sends the user to the first field at fault, reporting whether there is\n * anything to fix at all.\n */\n private revealErrors(): boolean {\n this.applyAttempted = true;\n // `applyAttempted` is read by the validators, so they have to be run again before anything is said\n // about the result.\n this.revalidateRange();\n borders.forEach((border) => this.setBorderTouched(border, true));\n\n const firstInvalid = borders\n .flatMap((border) => halves.map((half) => ({ border, half })))\n .find(({ border, half }) => this.borderControls[border][half].invalid);\n\n if (!firstInvalid) return true;\n\n // The only place the two halves of a name are put back together, and it builds a selector rather\n // than a control key: the attribute in the template is spelled the same way.\n this.elementRef.nativeElement\n .querySelector<HTMLInputElement>(`[data-time-range-field=\"${firstInvalid.border}${firstInvalid.half}\"]`)\n ?.focus();\n\n return false;\n }\n\n /** Whether a bound is a moment within its day rather than the day itself. */\n private carriesTime(date: T): boolean {\n const { dateAdapter } = this.timeRangeService;\n\n return !!(dateAdapter.getHours(date) || dateAdapter.getMinutes(date) || dateAdapter.getSeconds(date));\n }\n\n /** Whether focus is still inside `group`, counting the datepicker calendar as part of it. */\n private staysWithin(group: HTMLElement, next: HTMLElement | null): boolean {\n // The calendar is rendered in a separate overlay, so focus moving into it is still editing.\n return group.contains(next) || !!next?.closest('.kbq-datepicker__popup');\n }\n\n /** Both halves of a border are painted, or neither: the pair is what the user is judged on. */\n private setBorderTouched(border: RangeBorder, touched: boolean): void {\n this.borderHalves(border).forEach((control) => {\n if (touched) {\n control.markAsTouched();\n } else {\n control.markAsUntouched();\n }\n });\n }\n\n /** Both halves of one end, in the order they are painted. */\n private borderHalves(border: RangeBorder): FormControl<T>[] {\n return halves.map((half) => this.borderControls[border][half]);\n }\n\n /** Each half is checked against its sibling, so a change to one has to re-run the other. */\n private revalidateRange(): void {\n this.rangeControls.forEach((control) => control.updateValueAndValidity({ emitEvent: false }));\n }\n\n private swapIfReversed(): void {\n if (this.hasBorderProblem()) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n\n if (!this.isReversed(fromDate, fromTime, toDate, toTime)) return;\n\n this.form.patchValue({ fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate });\n }\n\n /**\n * Whether anything about the borders would stop the range being saved. Deliberately blind to which\n * borders have been revealed: a swap rewrites the user's values, so it has to answer \"is this range\n * actually sound\", not \"has the user been shown the problem yet\".\n */\n private hasBorderProblem(): boolean {\n if (this.form.controls.type.value !== 'range') return false;\n\n // The validators run whether or not the user has been shown the result, so the controls already\n // hold the answer - including the pickers' own format errors.\n return this.rangeControls.some((control) => !!control.errors);\n }\n\n /**\n * What is wrong with each half of a border, whether or not the user has been shown it. A missing half\n * is flagged on its own; a bound is judged in two steps, so that the field actually at fault is the\n * one painted.\n */\n private borderErrors(border: RangeBorder): Record<BorderHalf, ValidationErrors | null> {\n const { value: date } = this.borderControls[border].Date;\n const { value: time } = this.borderControls[border].Time;\n\n if (!date && !time) {\n const error = this.applyAttempted ? { kbqTimeRangeRequired: true } : null;\n\n return { Date: error, Time: error };\n }\n\n // Only the missing half is painted, so the user is pointed at the field to fill in.\n if (!date || !time) {\n const error = { kbqTimeRangeIncomplete: true };\n\n return { Date: date ? null : error, Time: time ? null : error };\n }\n\n const outOfBounds = this.checkBorderBounds(date, time);\n\n if (!outOfBounds) return { Date: null, Time: null };\n\n const error = { kbqTimeRangeOutOfBounds: { bound: outOfBounds.bound } };\n\n // A day outside the bounds is wrong whatever time sits next to it, so both halves are painted.\n // A day on the boundary itself can only be pushed out by its time, so only the time is.\n return { Date: outOfBounds.scope === 'date' ? error : null, Time: error };\n }\n\n /** Which bound a border falls outside of, and whether its day or only its time is to blame. */\n private checkBorderBounds(date: T, time: T): { bound: 'min' | 'max'; scope: 'date' | 'time' } | null {\n const service = this.timeRangeService;\n const { dateAdapter } = service;\n const minDate = service.minDate();\n const maxDate = service.maxDate();\n\n if (minDate && dateAdapter.compareDate(date, minDate) < 0) return { bound: 'min', scope: 'date' };\n\n if (maxDate && dateAdapter.compareDate(date, maxDate) > 0) return { bound: 'max', scope: 'date' };\n\n const combined = service.combineDateAndTime(date, time);\n\n if (minDate && dateAdapter.compareDateTime(combined, minDate) < 0) return { bound: 'min', scope: 'time' };\n\n if (maxDate && dateAdapter.compareDateTime(combined, maxDate) > 0) return { bound: 'max', scope: 'time' };\n\n return null;\n }\n\n private isReversed(fromDate: T, fromTime: T, toDate: T, toTime: T): boolean {\n if (!fromDate || !fromTime || !toDate || !toTime) return false;\n\n const service = this.timeRangeService;\n\n return (\n service.dateAdapter.compareDateTime(\n service.combineDateAndTime(fromDate, fromTime),\n service.combineDateAndTime(toDate, toTime)\n ) > 0\n );\n }\n\n /**\n * A border reports only what the pickers do not: an empty half next to a filled one, a border left\n * wholly empty once \"apply\" was pressed, and a border outside the bounds. Format is the pickers' own\n * business, and so is the calendar restriction.\n */\n private borderValidator(border: RangeBorder, half: BorderHalf): ValidatorFn {\n return (): ValidationErrors | null => {\n if (this.form.controls.type.value !== 'range') return null;\n\n return this.borderErrors(border)[half];\n };\n }\n\n private mapTimeRange({ type }: Partial<KbqTimeRangeTypeContext> & KbqRangeValue<T>): KbqTimeRangeRange | undefined {\n if (!type) return;\n\n const { fromTime, fromDate, toTime, toDate } = this.form.getRawValue();\n // Ordered here as well as on blur, so that pressing \"apply\" straight out of a reversed field is\n // safe. A range with something wrong in it is left exactly as typed: it cannot be saved anyway,\n // and reordering it would move the fields out from under the user while they fix it.\n const ordered =\n !this.hasBorderProblem() && this.isReversed(fromDate, fromTime, toDate, toTime)\n ? { fromTime: toTime, fromDate: toDate, toTime: fromTime, toDate: fromDate }\n : { fromTime, fromDate, toTime, toDate };\n\n return { type, ...this.timeRangeService.calculateTimeRange(type, ordered) };\n }\n\n private getFormattedOption(type: KbqTimeRangeType, localeConfig: KbqTimeRangeLocaleConfig): string {\n const translationType = this.timeRangeService.getTimeRangeUnitByType(type);\n\n if (translationType === 'other') return '';\n\n const range = this.timeRangeService.calculateTimeRange(type);\n\n return this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(range.startDateTime!)!,\n this.timeRangeService.dateAdapter.today(),\n [translationType],\n false,\n localeConfig.durationTemplate.option\n );\n }\n\n private concatControlValidationErrors(): ValidationErrors | null {\n let result: ValidationErrors | null = null;\n\n Object.values(this.form.controls).forEach((control: AbstractControl) => {\n if (control.errors) {\n result = {\n ...result,\n ...control.errors\n };\n }\n });\n\n return result;\n }\n}\n","<form [formGroup]=\"form\">\n <kbq-radio-group class=\"kbq-time-range-editor__container\" [formControl]=\"form.controls.type\">\n @let types = timeRangeTypesWithoutRange();\n\n @if (types.length) {\n <div class=\"kbq-time-range-editor__predefined\">\n @for (type of types; track type) {\n <kbq-radio-button class=\"kbq-time-range-editor__predefined-option\" [value]=\"type.type\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplate() || defaultOptionTemplate; context: { $implicit: type }\"\n />\n </kbq-radio-button>\n }\n </div>\n }\n\n @if (isRangeVisible()) {\n @let localeConfig = localeConfiguration();\n\n <div class=\"kbq-time-range-editor__range\" role=\"group\" (focusout)=\"onRangeFocusOut($event)\">\n @let bounds = boundsHint();\n\n @if (types.length) {\n <kbq-radio-button [value]=\"'range'\">\n {{ localeConfig.editor.rangeLabel }}\n @if (bounds) {\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-radio-button>\n }\n\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('from')\"\n (focusout)=\"onBorderFocusOut('from', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.from\">\n {{ localeConfig.editor.from }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"fromTime\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.fromTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"fromDate\"\n [kbqDatepicker]=\"datepickerFrom\"\n [formControl]=\"form.controls.fromDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerFrom\" />\n <kbq-datepicker #datepickerFrom [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n </kbq-fieldset>\n </div>\n\n <div\n class=\"kbq-time-range-editor__date-time\"\n (input)=\"onBorderInput('to')\"\n (focusout)=\"onBorderFocusOut('to', $event)\"\n >\n <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.to\">\n {{ localeConfig.editor.to }}\n </span>\n <kbq-fieldset>\n <kbq-form-field kbqFieldsetItem>\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n <input\n kbqTimepicker\n data-time-range-field=\"toTime\"\n [format]=\"timepickerFormat\"\n [formControl]=\"form.controls.toTime\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n </kbq-form-field>\n\n <kbq-form-field>\n <input\n data-time-range-field=\"toDate\"\n [kbqDatepicker]=\"datepickerTo\"\n [formControl]=\"form.controls.toDate\"\n [errorStateMatcher]=\"rangeStateMatcher\"\n />\n <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerTo\" />\n <kbq-datepicker #datepickerTo [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n </kbq-form-field>\n\n <!-- The range is judged as a whole, so what is wrong with it is said once, below the\n last of its two ends - in place of the caption, which spells the same bounds out. -->\n @if (outOfBoundsMessage(); as message) {\n <kbq-error>{{ message }}</kbq-error>\n } @else if (!types.length && bounds) {\n <!-- With no presets there is no option to hang the bounds off, so they go in the\n fieldset's own hint area rather than loose in the block. -->\n <kbq-hint>{{ bounds }}</kbq-hint>\n }\n </kbq-fieldset>\n </div>\n </div>\n }\n </kbq-radio-group>\n</form>\n\n<ng-template #defaultOptionTemplate let-context>\n @let localeConfig = localeConfiguration();\n @switch (context.translationType) {\n @case ('other') {\n @switch (context.type) {\n @case ('allTime') {\n {{ localeConfig.editor.allTimeOption ?? localeConfig.editor.allTime }}\n }\n @case ('currentQuarter') {\n {{ localeConfig.editor.currentQuarterOption ?? localeConfig.editor.currentQuarter }}\n }\n @case ('currentYear') {\n {{ localeConfig.editor.currentYearOption ?? localeConfig.editor.currentYear }}\n }\n }\n }\n @default {\n {{ context.formattedValue }}\n }\n }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, Injector, input, TemplateRef } from '@angular/core';\nimport { KbqTimeRangeLocaleConfig } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLinkModule } from '@koobiq/components/link';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqTimeRangeCustomizableTitleContext, KbqTimeRangeRange, KbqTimeRangeTitleContext } from './types';\n\n/** @docs-private */\n@Component({\n selector: 'kbq-time-range-title',\n imports: [\n NgTemplateOutlet,\n KbqLinkModule,\n KbqIconModule\n ],\n template: `\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()!; context: titleContext() ?? null; injector: injector\" />\n } @else {\n <a kbq-link pseudo>\n <span class=\"kbq-link__text\">{{ formattedDate() }}</span>\n\n <i kbq-icon=\"kbq-calendar-o_16\"></i>\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitle {\n private readonly timeRangeService = inject(KbqTimeRangeService);\n private readonly popover = inject(KbqPopoverTrigger, { host: true });\n protected readonly injector = inject(Injector);\n\n readonly timeRange = input.required<KbqTimeRangeRange | null>();\n readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n readonly titleTemplate = input<TemplateRef<any>>();\n\n protected readonly context = computed<KbqTimeRangeTitleContext | undefined>(() => {\n const timeRange = this.timeRange();\n\n if (!timeRange) return undefined;\n\n return {\n ...timeRange,\n ...this.timeRangeService.getTimeRangeTypeUnits(timeRange.type)\n };\n });\n\n protected readonly titleContext = computed<KbqTimeRangeCustomizableTitleContext | undefined>(() => {\n const context = this.context();\n const formattedDate = this.formattedDate();\n\n let customizableTitleContext = { formattedDate, popover: this.popover };\n\n if (context) {\n customizableTitleContext = { ...context, ...customizableTitleContext };\n }\n\n return {\n $implicit: customizableTitleContext,\n ...customizableTitleContext\n };\n });\n\n protected readonly formattedDate = computed(() => {\n const context = this.context();\n const localeConfiguration = this.localeConfiguration();\n\n if (!context) {\n return localeConfiguration.title.placeholder;\n }\n\n const timeRangeUnit = this.timeRangeService.getTimeRangeUnitByType(context.type);\n\n if (timeRangeUnit === 'other') {\n switch (context.type) {\n case 'range': {\n return (\n localeConfiguration.title.for +\n ' ' +\n this.timeRangeService.dateFormatter.rangeLongDate(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime ?? ''),\n this.timeRangeService.dateAdapter.deserialize(context.endDateTime ?? '')\n )\n );\n }\n case 'allTime': {\n return localeConfiguration.editor.allTime;\n }\n case 'currentQuarter': {\n return localeConfiguration.editor.currentQuarter;\n }\n case 'currentYear': {\n return localeConfiguration.editor.currentYear;\n }\n default: {\n return '';\n }\n }\n }\n\n if (!context.startDateTime) return '';\n\n return (\n localeConfiguration.title.for +\n ' ' +\n this.timeRangeService.dateFormatter.duration(\n this.timeRangeService.dateAdapter.deserialize(context.startDateTime),\n this.timeRangeService.dateAdapter.today(),\n [timeRangeUnit],\n false,\n localeConfiguration.durationTemplate.title\n )\n );\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n InjectionToken,\n input,\n OnInit,\n output,\n Provider,\n signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqTimeRangeLocaleConfig,\n PopUpPlacements,\n PopUpSizes,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeEditorBridge } from './time-range-editor-bridge';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n KbqRangeValue,\n KbqTimeRangeCustomizableTitleContext,\n KbqTimeRangeOptionContext,\n KbqTimeRangeRange,\n KbqTimeRangeType\n} from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_TIME_RANGE_LOCALE_CONFIGURATION = new InjectionToken<KbqTimeRangeLocaleConfig>(\n 'KBQ_TIME_RANGE_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.timeRange }\n);\n\n/** Utility provider for `KBQ_TIME_RANGE_LOCALE_CONFIGURATION`. */\nexport const kbqTimeRangeLocaleConfigurationProvider = (configuration: KbqTimeRangeLocaleConfig): Provider => ({\n provide: KBQ_TIME_RANGE_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n@Component({\n selector: 'kbq-time-range',\n imports: [\n ReactiveFormsModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqTimeRangeEditor,\n KbqTimeRangeTitle\n ],\n template: `\n @let localeConfig = localeConfiguration();\n <kbq-time-range-title\n #popover=\"kbqPopover\"\n class=\"kbq-time-range__trigger\"\n kbqPopover\n kbqPopoverClass=\"kbq-time-range__popover\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqPopoverContent]=\"timeRangePopoverContent\"\n [kbqPopoverFooter]=\"timeRangePopoverFooter\"\n [kbqPopoverPlacement]=\"popupPlacement\"\n [kbqPopoverArrow]=\"arrow()\"\n [titleTemplate]=\"titleTemplate()\"\n [timeRange]=\"titleValue()\"\n [localeConfiguration]=\"localeConfig\"\n (kbqPopoverVisibleChange)=\"onVisibleChange($event)\"\n />\n\n <ng-template #timeRangePopoverContent>\n <kbq-time-range-editor\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [formControl]=\"rangeEditorControl\"\n [localeConfiguration]=\"localeConfig\"\n [showRangeAsDefault]=\"showRangeAsDefault()\"\n [rangeValue]=\"normalizedDefaultRangeValue()\"\n [availableTimeRangeTypes]=\"availableTimeRangeTypes()\"\n [optionTemplate]=\"optionTemplate()\"\n />\n </ng-template>\n\n <ng-template #timeRangePopoverFooter>\n <div class=\"kbq-time-range__buttons\" role=\"group\" (mousedown)=\"onFooterPointerDown()\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"onApply(popover)\">\n {{ localeConfig.editor.apply }}\n </button>\n\n <button kbq-button (click)=\"onCancel(popover)\">{{ localeConfig.editor.cancel }}</button>\n </div>\n </ng-template>\n `,\n styleUrls: ['./time-range.scss'],\n providers: [KbqTimeRangeService, KbqTimeRangeEditorBridge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-time-range'\n }\n})\nexport class KbqTimeRange<T> implements ControlValueAccessor, OnInit {\n private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly editorBridge = inject(KbqTimeRangeEditorBridge);\n private readonly document = inject(DOCUMENT);\n /** @docs-private */\n readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /** The minimum selectable date. */\n readonly minDate = input<T>();\n /** The maximum selectable date. */\n readonly maxDate = input<T>();\n /** provided value of selected range */\n readonly defaultRangeValue = input<KbqRangeValue<T>>();\n /** Preset of selectable ranges */\n readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n /** Customizable trigger output */\n readonly titleTemplate = input<TemplateRef<KbqTimeRangeCustomizableTitleContext>>();\n /** Customizable option output */\n readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n /** Whether to show popover with arrow */\n readonly arrow = input(true, { transform: booleanAttribute });\n /**\n * Whether to show range in popover if not provided\n * @see availableTimeRangeTypes\n */\n readonly showRangeAsDefault = input(true);\n /** Whether component should fallback to default value if null provided */\n readonly nonNullable = input(true, { transform: booleanAttribute });\n\n /** Emit value update if provided value via formControl wasn't valid */\n readonly valueCorrected = output<KbqTimeRangeRange>();\n\n /**\n * Used to calculate time range.\n * @docs-private */\n protected readonly normalizedDefaultRangeValue = computed(() => ({\n ...this.timeRangeService.getDefaultRangeValue(),\n ...this.defaultRangeValue()\n }));\n\n /** @docs-private */\n protected readonly titleValue: WritableSignal<KbqTimeRangeRange | null>;\n /** @docs-private */\n protected readonly rangeEditorControl: FormControl<KbqTimeRangeRange>;\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popupPlacement = PopUpPlacements.BottomLeft;\n\n /** @docs-private */\n protected readonly localeConfiguration = signal(inject(KBQ_TIME_RANGE_LOCALE_CONFIGURATION));\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.timeRangeService.bindBounds(this.minDate, this.maxDate);\n\n const defaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n this.availableTimeRangeTypes()\n );\n\n this.titleValue = signal(this.nonNullable() ? defaultValue : null);\n this.rangeEditorControl = new FormControl<KbqTimeRangeRange>(defaultValue, { nonNullable: true });\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n this.localeConfiguration.set(this.localeService?.getParams('timeRange') ?? ruRULocaleData.timeRange);\n });\n\n toObservable(this.availableTimeRangeTypes)\n .pipe(takeUntilDestroyed())\n .subscribe(this.handleAvailableTypesChange);\n }\n\n ngOnInit(): void {\n // call again on init, so input signals values will be correct\n this.writeValue(this.ngControl?.value ?? null);\n }\n\n /** Implemented as part of ControlValueAccessor */\n writeValue(value: KbqTimeRangeRange | null): void {\n const nonNullable = this.nonNullable();\n\n const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n value,\n availableTimeRangeTypes,\n this.normalizedDefaultRangeValue()\n );\n\n if (\n (value && value.type && !('startDateTime' in value && availableTimeRangeTypes.includes(value.type))) ||\n (nonNullable && value === null)\n ) {\n this.valueCorrected.emit(corrected);\n }\n\n this.titleValue.set(nonNullable || value !== null ? corrected : null);\n this.rangeEditorControl.setValue(corrected);\n }\n\n /**\n * Lets the editor tell an \"apply\" gesture from a plain focus loss before the click even lands - the\n * `focusout` it reacts to is dispatched between this `mousedown` and the `click` below.\n * @docs-private\n */\n protected onFooterPointerDown(): void {\n this.editorBridge.applyGestureInProgress = true;\n this.document.addEventListener('mouseup', () => (this.editorBridge.applyGestureInProgress = false), {\n once: true\n });\n }\n\n /**\n * Applying is always offered; an invalid editor keeps the popover open and sends the user to the\n * first field at fault instead.\n * @docs-private\n */\n onApply(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n\n if (!this.editorBridge.revealErrors()) return;\n\n this.titleValue.set(this.rangeEditorControl.value);\n this.onChange(this.rangeEditorControl.value);\n popover.hide();\n }\n\n /** @docs-private */\n onCancel(popover: KbqPopoverTrigger): void {\n this.editorBridge.applyGestureInProgress = false;\n popover.hide();\n }\n\n onVisibleChange(isVisible: boolean) {\n if (isVisible) return;\n\n // Closing throws the edits away, applied or not. With nothing on the trigger yet there is no value\n // to go back to, so the editor returns to its default - otherwise an abandoned edit, which may well\n // be one the editor refused to apply, would be waiting the next time it opens.\n this.rangeEditorControl.setValue(this.titleValue() ?? this.defaultEditorValue(this.availableTimeRangeTypes()));\n }\n\n /** @docs-private */\n onChange = (_value: KbqTimeRangeRange) => {};\n /** @docs-private */\n onTouch = () => {};\n /** Implemented as part of ControlValueAccessor */\n registerOnChange(fn: (_value: KbqTimeRangeRange) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /** What the editor opens on: the first offered type, or a plain range when none are offered. */\n private defaultEditorValue(types: KbqTimeRangeType[]): KbqTimeRangeRange {\n return this.timeRangeService.getTimeRangeDefaultValue(\n this.normalizedDefaultRangeValue(),\n types.length ? types : ['range']\n );\n }\n\n private handleAvailableTypesChange = (types: KbqTimeRangeType[]): void => {\n if (types.includes(this.rangeEditorControl.value.type) || this.rangeEditorControl.value.type === 'range') {\n return;\n }\n\n const timeRangeDefaultValue = this.defaultEditorValue(types);\n\n // The editor still needs something to open on, whether or not the trigger shows a value.\n this.rangeEditorControl.setValue(timeRangeDefaultValue);\n\n // A nullable trigger that has never been given a value keeps its placeholder: replacing the types\n // is not the user picking a range, and emitting here would put one into the bound control.\n if (!this.nonNullable() && this.titleValue() === null) return;\n\n this.titleValue.set(timeRangeDefaultValue);\n this.onChange(timeRangeDefaultValue);\n };\n}\n","import { ChangeDetectionStrategy, Component, Directive, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Observable, Subject } from 'rxjs';\nimport { KbqTimeRange } from './time-range';\n\n/** Directive for easy using styles of time-range placeholder publicly. */\n@Directive({\n selector: '[kbqTimeRangeTitlePlaceholder]',\n host: {\n class: 'kbq-time-range-title__placeholder'\n }\n})\nexport class KbqTimeRangeTitlePlaceholder {}\n\n/** Component simulates `KbqFormFieldControl` allowing to provide custom content inside `KbqFormField` */\n@Component({\n selector: 'kbq-time-range-title-as-control',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n &:focus-visible {\n outline: none;\n }\n display: flex;\n align-items: center;\n }\n `,\n providers: [\n {\n provide: KbqFormFieldControl,\n useExisting: KbqTimeRangeTitleAsControl\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.tabindex]': '0',\n class: 'kbq-time-range-title-as-form-field'\n }\n})\nexport class KbqTimeRangeTitleAsControl implements KbqFormFieldControl<any> {\n private timeRange = inject(KbqTimeRange);\n\n /** @docs-private */\n controlType = 'select';\n /** @docs-private */\n stateChanges: Observable<void> = new Subject<void>();\n /** @docs-private */\n ngControl: NgControl | null = this.timeRange.ngControl;\n /** @docs-private */\n value: any;\n /** @docs-private */\n id: string;\n /** @docs-private */\n placeholder: string;\n /** @docs-private */\n focused: boolean;\n /** @docs-private */\n empty: boolean;\n /** @docs-private */\n required: boolean;\n /** @docs-private */\n disabled: boolean;\n /** @docs-private */\n errorState: boolean;\n /** @docs-private */\n onContainerClick(_event: MouseEvent): void {}\n /** @docs-private */\n focus(_options?: FocusOptions): void {}\n}\n","import { NgModule } from '@angular/core';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeTitleAsControl, KbqTimeRangeTitlePlaceholder } from './time-range-title-as-form-field';\n\nconst COMPONENTS = [\n KbqTimeRange,\n KbqTimeRangeTitle,\n KbqTimeRangeEditor,\n KbqTimeRangeTitlePlaceholder,\n KbqTimeRangeTitleAsControl\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqTimeRangeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}