@luoxiao123/angular-material-date-time-range-picker 21.0.1 → 21.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"luoxiao123-angular-material-date-time-range-picker.mjs","sources":["../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/container/container.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/container/container.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/date-time-input/date-time-input.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/date-time-input/date-time-input.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-selector/date-selector.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-selector/date-selector.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-picker.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-picker.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/shared/smart-dialog/smart-dialog.service.ts","../../../projects/angular-material-date-time-range-picker/src/luoxiao123-angular-material-date-time-range-picker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, model, output, TemplateRef } from '@angular/core';\r\nimport { TablerIconComponent, provideTablerIcons } from '@luoxiao123/angular-tabler-icons';\r\nimport { IconX, IconClock, IconCalendarDue, IconInfoCircle } from '@luoxiao123/angular-tabler-icons/icons';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'date-time-picker-container',\r\n templateUrl: './container.component.html',\r\n styleUrls: ['./container.component.scss'],\r\n styles: `\r\n :host {\r\n height: 100%;\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [TablerIconComponent, NgTemplateOutlet, MatButtonModule],\r\n providers: [provideTablerIcons({ IconInfoCircle, IconCalendarDue, IconX, IconClock })]\r\n})\r\nexport class Container {\r\n readonly #breakpoints = inject(BreakpointObserver);\r\n\r\n public isMobile = this.#breakpoints.isMatched([Breakpoints.Handset, Breakpoints.Tablet]);\r\n\r\n hasHeader = model<boolean | undefined>(true);\r\n hasFooter = model<boolean | undefined>(true);\r\n headerTitle = model<string>('');\r\n\r\n headerExtraContent = model<TemplateRef<any> | undefined>();\r\n\r\n footerExtraContent = model<TemplateRef<any> | undefined>();\r\n hasDismiss = model<boolean | undefined>(true);\r\n hasSubmit = model<boolean | undefined>(true);\r\n submitTitle = model<string>('Save');\r\n submitBg = model<string>('');\r\n submitColor = model<string>('');\r\n submitTitleColor = model<string>('');\r\n disabledSubmit = model<boolean | undefined>(false);\r\n\r\n hasSecondaryButton = model<boolean | undefined>(false);\r\n secondaryButtonTitle = model<string>('');\r\n secondaryButtonBg = model<string>('');\r\n secondaryButtonColor = model<string>('');\r\n secondaryButtonTitleColor = model<string>('');\r\n disabledSecondaryButton = model<boolean | undefined>(false);\r\n\r\n dismiss = output<void>();\r\n submit = output<void>();\r\n secondaryButton = output<void>();\r\n}\r\n","<aside class=\"container-wrapper\">\r\n @if (hasHeader()) {\r\n <header class=\"container-header\">\r\n <div class=\"container-header-start\">\r\n <i-tabler name=\"clock\" strokeWidth=\"2px\" size=\"18px\" class=\"container-header-icon\" />\r\n\r\n @if (headerTitle()) {\r\n <h2 class=\"container-header-title\">{{ headerTitle() }}</h2>\r\n }\r\n </div>\r\n\r\n @if (headerExtraContent()) {\r\n <div class=\"container-header-extra\">\r\n <ng-container *ngTemplateOutlet=\"headerExtraContent() ?? null\"></ng-container>\r\n </div>\r\n }\r\n\r\n <button (click)=\"dismiss.emit()\" type=\"button\" class=\"container-header-close\" [attr.aria-label]=\"'关闭'\" tabindex=\"0\">\r\n <i-tabler name=\"x\" strokeWidth=\"2.5px\" size=\"18px\" class=\"container-header-close-icon\" />\r\n </button>\r\n </header>\r\n }\r\n\r\n <main class=\"container-main\">\r\n <ng-content />\r\n </main>\r\n\r\n @if (hasFooter()) {\r\n <footer class=\"container-footer\">\r\n @if (footerExtraContent()) {\r\n <div class=\"container-footer-extra\">\r\n <ng-container *ngTemplateOutlet=\"footerExtraContent() ?? null\"></ng-container>\r\n </div>\r\n }\r\n\r\n <div class=\"container-footer-actions\">\r\n @if (hasDismiss()) {\r\n <button mat-stroked-button color=\"primary\" (click)=\"dismiss.emit()\" type=\"button\"> 取消 </button>\r\n }\r\n\r\n @if (hasSecondaryButton()) {\r\n <button mat-stroked-button color=\"primary\" (click)=\"secondaryButton.emit()\" type=\"button\" [disabled]=\"disabledSecondaryButton()\">\r\n {{ secondaryButtonTitle() }}\r\n </button>\r\n }\r\n\r\n @if (hasSubmit()) {\r\n <button mat-raised-button color=\"primary\" (click)=\"submit.emit()\" type=\"button\" [disabled]=\"disabledSubmit()\">\r\n {{ submitTitle() }}\r\n </button>\r\n }\r\n </div>\r\n </footer>\r\n }\r\n</aside>\r\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TablerIconComponent } from '@luoxiao123/angular-tabler-icons';\r\nimport { DecimalPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'date-time-input',\r\n templateUrl: './date-time-input.component.html',\r\n styleUrls: ['./date-time-input.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDatepickerModule, FormsModule, TablerIconComponent, DecimalPipe]\r\n})\r\nexport class DateTimeInputComponent {\r\n label = input<string>('');\r\n dateValue = input<string | null>(null);\r\n hourValue = input<number | null>(null);\r\n minuteValue = input<number | null>(null);\r\n hours = input<number[]>([]);\r\n minutes = input<number[]>([]);\r\n\r\n dateChange = output<string>();\r\n hourChange = output<number | null>();\r\n minuteChange = output<number | null>();\r\n timeChange = output<void>();\r\n\r\n onDateChange(value: string) {\r\n this.dateChange.emit(value);\r\n }\r\n\r\n onHourChange(value: number | null) {\r\n this.hourChange.emit(value);\r\n this.timeChange.emit();\r\n }\r\n\r\n onMinuteChange(value: number | null) {\r\n this.minuteChange.emit(value);\r\n this.timeChange.emit();\r\n }\r\n}\r\n","<div class=\"date-time-input-wrapper\">\r\n <label class=\"date-time-input-label\">{{ label() }}</label>\r\n\r\n <div class=\"date-time-input-container\">\r\n <!-- 日期部分 -->\r\n <div class=\"date-time-input-date\">\r\n <input\r\n type=\"text\"\r\n matInput\r\n [ngModel]=\"dateValue()\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n [matDatepicker]=\"datePicker\"\r\n (click)=\"datePicker.open()\"\r\n (focus)=\"datePicker.open()\"\r\n placeholder=\"选择日期\"\r\n class=\"date-time-input-field\"\r\n />\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n\r\n <button type=\"button\" class=\"date-time-input-icon-btn\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <i-tabler name=\"calendar-due\" strokeWidth=\"2px\" size=\"16px\" />\r\n </button>\r\n </div>\r\n\r\n <!-- 分隔符 -->\r\n <div class=\"date-time-input-divider\"></div>\r\n\r\n <!-- 时间部分 -->\r\n <div class=\"date-time-input-time\">\r\n <!-- 小时 -->\r\n <select class=\"date-time-input-select date-time-input-select-hour\" [ngModel]=\"hourValue()\" (ngModelChange)=\"onHourChange($event)\" [attr.aria-label]=\"'小时'\">\r\n <option [value]=\"null\" disabled>--</option>\r\n @for (hour of hours(); track hour) {\r\n <option [value]=\"hour\">{{ hour | number: '2.0-0' }}</option>\r\n }\r\n </select>\r\n\r\n <!-- 分隔符 -->\r\n <span class=\"date-time-input-separator\">:</span>\r\n\r\n <!-- 分钟 -->\r\n <select class=\"date-time-input-select date-time-input-select-minute\" [ngModel]=\"minuteValue()\" (ngModelChange)=\"onMinuteChange($event)\" [attr.aria-label]=\"'分钟'\">\r\n <option [value]=\"null\" disabled>--</option>\r\n @for (minute of minutes(); track minute) {\r\n <option [value]=\"minute\">{{ minute | number: '2.0-0' }}</option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, model, OnInit, signal } from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { DatePipe } from '@angular/common';\r\nimport { MatTimepickerModule } from '@angular/material/timepicker';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatNativeDateModule, provideNativeDateAdapter } from '@angular/material/core';\r\nimport { DatePickerModel, DateTimePickerValue, HourType, TimeRange, Weekday } from '../interfaces';\r\nimport { TablerIconComponent } from '@luoxiao123/angular-tabler-icons';\r\nimport { DateRange, DefaultMatCalendarRangeStrategy, MatCalendar, MatDatepickerModule, MatRangeDateSelectionModel } from '@angular/material/datepicker';\r\nimport { Container } from '../components';\r\nimport { DateTimeInputComponent } from '../components';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'date-time-picker-selector',\r\n templateUrl: './date-selector.component.html',\r\n styleUrls: ['./date-selector.component.scss'],\r\n styles: `\r\n :host {\r\n display: block;\r\n height: 100%;\r\n }\r\n `,\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideNativeDateAdapter(), DefaultMatCalendarRangeStrategy, MatRangeDateSelectionModel],\r\n imports: [\r\n MatCalendar,\r\n TablerIconComponent,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatCheckbox,\r\n DatePipe,\r\n MatTimepickerModule,\r\n Container,\r\n DateTimeInputComponent\r\n ]\r\n})\r\nexport class DateSelector implements OnInit {\r\n readonly #cdr = inject(ChangeDetectorRef);\r\n readonly #dialogRef = inject(MatDialogRef<DateSelector>);\r\n readonly #data = inject(MAT_DIALOG_DATA) as DatePickerModel;\r\n readonly #selectionModel = inject(MatRangeDateSelectionModel<Date>);\r\n\r\n public data = this.#data;\r\n\r\n // 从 data 中获取格式,如果没有则使用默认值\r\n dateFormat = this.data?.dateFormat ?? 'yyyy年M月d日 HH:mm';\r\n valueFormat = this.data?.valueFormat ?? 'yyyy-MM-dd HH:mm:ss';\r\n\r\n startDate = model<string>('');\r\n endDate = model<string>('');\r\n\r\n startHour = model<number | null>(null);\r\n startMinute = model<number | null>(null);\r\n endHour = model<number | null>(null);\r\n endMinute = model<number | null>(null);\r\n\r\n future = model<boolean>(false);\r\n optionalFeatures = model<boolean>(true);\r\n\r\n relativeDurations = [\r\n ['最近5分钟', '-5minutes'],\r\n ['最近15分钟', '-15minutes'],\r\n ['最近30分钟', '-30minutes'],\r\n ['最近1小时', '-1hours'],\r\n ['最近3小时', '-3hours'],\r\n ['最近6小时', '-6hours'],\r\n ['最近12小时', '-12hours'],\r\n ['最近24小时', '-24hours'],\r\n ['最近2天', '-2days'],\r\n ['最近7天', '-7days'],\r\n ['最近30天', '-30days'],\r\n ['最近90天', '-90days'],\r\n ['最近6个月', '-6months'],\r\n ['最近1年', '-1years'],\r\n ['最近2年', '-2years'],\r\n ['最近5年', '-5years'],\r\n ['上周', '-1weeks'],\r\n ['上个月', '-1months'],\r\n ['去年', '-1years']\r\n ];\r\n\r\n fixedDays = [\r\n ['昨天', '-1days/day'],\r\n ['前天', '-2days/day'],\r\n ['上周同一天', '-7days/day'],\r\n ['上周', '-1weeks/week'],\r\n ['上个月', '-1months/month'],\r\n ['去年', '-1years/year']\r\n ];\r\n\r\n currentPeriods = [\r\n ['今天', 'today', 'today'],\r\n ['今天至今', 'today', 'now'],\r\n ['本周至今', 'thisweek', 'now'],\r\n ['本月至今', 'thismonth', 'now'],\r\n ['今年至今', 'thisyear', 'now']\r\n ];\r\n\r\n timeRanges = signal<TimeRange[]>([\r\n ...this.relativeDurations.map(([label, offset]) => ({\r\n label,\r\n start: `offset:${offset}`,\r\n end: 'offset:now'\r\n })),\r\n ...this.fixedDays.map(([label, point]) => ({\r\n label,\r\n start: `offset:${point}`,\r\n end: `offset:${point}`\r\n })),\r\n ...this.currentPeriods.map(([label, start, end]) => ({\r\n label,\r\n start: `offset:${start}`,\r\n end: `offset:${end}`\r\n }))\r\n ]);\r\n selectedTimeRange = model<TimeRange | undefined>(undefined);\r\n\r\n allDays = model<boolean>(true);\r\n weekdays = model<Weekday[]>([\r\n { label: '六', data: 'Saturday', value: 0, selected: false },\r\n { label: '日', data: 'Sunday', value: 1, selected: false },\r\n { label: '一', data: 'Monday', value: 2, selected: false },\r\n { label: '二', data: 'Tuesday', value: 3, selected: false },\r\n { label: '三', data: 'Wednesday', value: 4, selected: false },\r\n { label: '四', data: 'Thursday', value: 5, selected: false },\r\n { label: '五', data: 'Friday', value: 6, selected: false }\r\n ]);\r\n\r\n allHours = model<boolean>(true);\r\n hourTypes = signal<HourType[]>([\r\n { label: '全部', value: 0, selected: false },\r\n { label: '忙碌时间', value: 1, selected: false },\r\n { label: '自定义', value: 2, selected: true }\r\n ]);\r\n\r\n selectedDateRange: DateRange<Date> | null = null;\r\n now = new Date();\r\n selectingStart = true;\r\n\r\n ngOnInit(): void {\r\n if (this.data) {\r\n this.optionalFeatures.set(this.data.optionalFeatures);\r\n this.future.set(this.data.future);\r\n\r\n const picker = this.data.dateTimePicker;\r\n\r\n if (picker) {\r\n if (picker.start && picker.end) {\r\n this.selectedDateRange = {\r\n start: new Date(picker.start),\r\n end: new Date(picker.end)\r\n } as DateRange<Date>;\r\n\r\n // 初始化时间值\r\n const startDate = new Date(picker.start);\r\n const endDate = new Date(picker.end);\r\n this.startHour.set(startDate.getHours());\r\n this.startMinute.set(startDate.getMinutes());\r\n this.endHour.set(endDate.getHours());\r\n this.endMinute.set(endDate.getMinutes());\r\n }\r\n }\r\n\r\n if (this.future()) {\r\n const futureOffsets: TimeRange[] = [\r\n { label: '未来1天', start: 'offset:now', end: 'offset:+1days' },\r\n { label: '未来1周', start: 'offset:now', end: 'offset:+1weeks' },\r\n { label: '未来1月', start: 'offset:now', end: 'offset:+1months' },\r\n { label: '未来3月', start: 'offset:now', end: 'offset:+3months' }\r\n ];\r\n this.timeRanges.update(ranges => [...ranges, ...futureOffsets]);\r\n }\r\n } else {\r\n this.selectTimeRange(this.timeRanges()[5]);\r\n }\r\n }\r\n\r\n selectTimeRange(timeRange: TimeRange): void {\r\n this.selectedTimeRange.set(timeRange);\r\n const { startDate, endDate } = this.processTimeRange(timeRange);\r\n const start = new Date(startDate);\r\n const end = new Date(endDate);\r\n\r\n this.startDate.set(start.toISOString());\r\n this.endDate.set(end.toISOString());\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n this.selectedDateRange = new DateRange<Date>(start, end);\r\n }\r\n\r\n private processTimeRange(timeRange: TimeRange): { startDate: string; endDate: string } {\r\n const now = new Date();\r\n const parseTime = (time: string): Date => {\r\n if (!time) return new Date(now);\r\n if (time.startsWith('offset:')) {\r\n const offset = time.replace('offset:', '').trim();\r\n if (offset === 'now') return new Date(now);\r\n\r\n const regex = /([+-]?)(\\d+)(months?|days?|years?|weeks?|hours?|minutes?)/i;\r\n const match = regex.exec(offset);\r\n if (!match) return new Date(now);\r\n\r\n const sign = match[1] === '-' ? -1 : 1;\r\n const value = parseInt(match[2], 10) * sign;\r\n const unit = match[3].toLowerCase();\r\n const result = new Date(now);\r\n\r\n switch (unit) {\r\n case 'minutes':\r\n case 'minute':\r\n result.setMinutes(result.getMinutes() + value);\r\n break;\r\n case 'hours':\r\n case 'hour':\r\n result.setHours(result.getHours() + value);\r\n break;\r\n case 'days':\r\n case 'day':\r\n result.setDate(result.getDate() + value);\r\n break;\r\n case 'weeks':\r\n case 'week':\r\n result.setDate(result.getDate() + value * 7);\r\n break;\r\n case 'months':\r\n case 'month':\r\n result.setMonth(result.getMonth() + value);\r\n break;\r\n case 'years':\r\n case 'year':\r\n result.setFullYear(result.getFullYear() + value);\r\n break;\r\n }\r\n return result;\r\n }\r\n return new Date(time);\r\n };\r\n\r\n const startDate = timeRange.start ? parseTime(timeRange.start) : null;\r\n const endDate = timeRange.end ? parseTime(timeRange.end) : now;\r\n\r\n return {\r\n startDate: (startDate ?? endDate).toISOString(),\r\n endDate: endDate.toISOString()\r\n };\r\n }\r\n\r\n changeDatePart(part: 'start' | 'end', date: Date | string): void {\r\n if (!date) return;\r\n\r\n let dateObj: Date;\r\n\r\n if (typeof date === 'string') {\r\n // 如果是字符串,尝试解析它\r\n dateObj = new Date(date);\r\n // 如果不能解析为有效日期,返回\r\n if (isNaN(dateObj.getTime())) return;\r\n } else {\r\n dateObj = new Date(date);\r\n }\r\n\r\n // 保持原有的时间部分(只修改日期部分)\r\n if (part === 'start') {\r\n const currentStart = this.selectedDateRange?.start;\r\n if (currentStart) {\r\n dateObj.setHours(currentStart.getHours(), currentStart.getMinutes(), currentStart.getSeconds());\r\n } else {\r\n dateObj.setHours(0, 0, 0, 0);\r\n }\r\n } else {\r\n const currentEnd = this.selectedDateRange?.end;\r\n if (currentEnd) {\r\n dateObj.setHours(currentEnd.getHours(), currentEnd.getMinutes(), currentEnd.getSeconds());\r\n } else {\r\n dateObj.setHours(0, 0, 0, 0);\r\n }\r\n }\r\n\r\n this.selectedTimeRange.set(undefined);\r\n\r\n let start = this.selectedDateRange?.start ?? null;\r\n let end = this.selectedDateRange?.end ?? null;\r\n\r\n if (part === 'start') {\r\n start = dateObj;\r\n } else {\r\n end = dateObj;\r\n }\r\n\r\n if (start && end && start.getTime() > end.getTime()) {\r\n [start, end] = [end, start];\r\n }\r\n\r\n const range = new DateRange<Date>(start, end);\r\n this.selectedDateRange = range;\r\n this.startDate.set(start?.toISOString() ?? '');\r\n this.endDate.set(end?.toISOString() ?? '');\r\n }\r\n\r\n rangeChanged(selectedDate: Date | null): void {\r\n if (!selectedDate) return;\r\n\r\n if (this.selectingStart) {\r\n this.startDate.set(selectedDate.toISOString());\r\n this.endDate.set('');\r\n this.startHour.set(selectedDate.getHours());\r\n this.startMinute.set(selectedDate.getMinutes());\r\n this.endHour.set(null);\r\n this.endMinute.set(null);\r\n this.selectedTimeRange.set(undefined);\r\n this.selectedDateRange = null;\r\n this.#selectionModel.updateSelection(new DateRange(selectedDate, null), this);\r\n this.selectingStart = false;\r\n } else {\r\n const start = this.#selectionModel.selection.start;\r\n if (!start) return;\r\n\r\n const range =\r\n start.toDateString() === selectedDate.toDateString()\r\n ? new DateRange(start, start)\r\n : new DateRange(start < selectedDate ? start : selectedDate, start < selectedDate ? selectedDate : start);\r\n\r\n this.updateSelection(range.start, range.end);\r\n this.selectingStart = true;\r\n }\r\n }\r\n\r\n updateSelection(start: Date, end: Date): void {\r\n const range = new DateRange(start, end);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.startDate.set(start.toISOString());\r\n this.endDate.set(end.toISOString());\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n }\r\n\r\n submit(): void {\r\n const start = new Date(this.selectedDateRange?.start ?? '');\r\n const end = new Date(this.selectedDateRange?.end ?? '');\r\n const startISO = start.toISOString();\r\n const endISO = end.toISOString();\r\n\r\n const result: DateTimePickerValue = {\r\n start: startISO,\r\n end: endISO\r\n };\r\n\r\n this.data = { ...this.data, dateTimePicker: result };\r\n this.#dialogRef.close(this.data);\r\n }\r\n\r\n dismiss(): void {\r\n this.#dialogRef.close(undefined);\r\n }\r\n\r\n getHours(): number[] {\r\n return Array.from({ length: 24 }, (_, i) => i);\r\n }\r\n\r\n getMinutes(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n updateStartTime(): void {\r\n if (this.selectedDateRange?.start && this.startHour() !== null && this.startMinute() !== null) {\r\n const startDate = new Date(this.selectedDateRange.start);\r\n startDate.setHours(this.startHour() ?? 0, this.startMinute() ?? 0, 0, 0);\r\n\r\n let endDate = this.selectedDateRange.end;\r\n const range = new DateRange(startDate, endDate);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.startDate.set(startDate.toISOString());\r\n }\r\n }\r\n\r\n updateEndTime(): void {\r\n if (this.selectedDateRange?.end && this.endHour() !== null && this.endMinute() !== null) {\r\n const endDate = new Date(this.selectedDateRange.end);\r\n endDate.setHours(this.endHour() ?? 0, this.endMinute() ?? 0, 0, 0);\r\n\r\n let startDate = this.selectedDateRange.start;\r\n const range = new DateRange(startDate, endDate);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.endDate.set(endDate.toISOString());\r\n }\r\n }\r\n}\r\n","<date-time-picker-container\r\n headerTitle=\"日期时间选择器\"\r\n submitTitle=\"应用\"\r\n [disabledSubmit]=\"!selectedDateRange\"\r\n [footerExtraContent]=\"footerExtraContent\"\r\n (submit)=\"submit()\"\r\n (dismiss)=\"dismiss()\"\r\n>\r\n <!-- 左侧快捷选择面板 -->\r\n <aside class=\"date-selector-sidebar\" dir=\"rtl\">\r\n <div class=\"date-selector-sidebar-inner\" dir=\"ltr\">\r\n <div class=\"date-selector-sidebar-header\">\r\n <span class=\"date-selector-sidebar-title\">快捷选择</span>\r\n </div>\r\n <ul class=\"date-selector-sidebar-list\">\r\n @for (timeRangeItem of timeRanges(); track timeRangeItem) {\r\n <li class=\"date-selector-sidebar-item\">\r\n <button\r\n type=\"button\"\r\n (click)=\"selectTimeRange(timeRangeItem)\"\r\n [class.selected]=\"selectedTimeRange() && selectedTimeRange()?.start === timeRangeItem.start && selectedTimeRange()?.end === timeRangeItem.end\"\r\n class=\"date-selector-sidebar-btn\"\r\n >\r\n <span class=\"date-selector-sidebar-text\">{{ timeRangeItem.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </aside>\r\n <!-- 左侧快捷选择面板结束 -->\r\n\r\n <!-- 主要内容区域 -->\r\n <div class=\"date-selector-main\">\r\n <div class=\"date-selector-content\">\r\n <!-- 日历容器 -->\r\n <section class=\"date-selector-calendar-section\">\r\n <div class=\"date-selector-calendar-wrapper\">\r\n <mat-calendar [maxDate]=\"!future() ? now : undefined\" [(selected)]=\"selectedDateRange\" (selectedChange)=\"rangeChanged($event)\" class=\"date-selector-calendar\" />\r\n\r\n <div class=\"date-selector-hint\">\r\n <i-tabler name=\"info-circle\" strokeWidth=\"2px\" class=\"date-selector-hint-icon\"></i-tabler>\r\n <span class=\"date-selector-hint-text\">如果要选择一天,请双击该天。</span>\r\n </div>\r\n </div>\r\n </section>\r\n <!-- 日历容器结束 -->\r\n\r\n <!-- 时间设置容器 -->\r\n <section class=\"date-selector-time-section\">\r\n <!-- 开始和结束输入日期 -->\r\n <div class=\"date-selector-inputs\">\r\n <!-- 从日期 -->\r\n <date-time-input\r\n label=\"开始日期\"\r\n [dateValue]=\"startDate()\"\r\n [hourValue]=\"startHour()\"\r\n [minuteValue]=\"startMinute()\"\r\n [hours]=\"getHours()\"\r\n [minutes]=\"getMinutes()\"\r\n (dateChange)=\"changeDatePart('start', $event)\"\r\n (timeChange)=\"updateStartTime()\"\r\n />\r\n\r\n <!-- 结束日期 -->\r\n <date-time-input\r\n label=\"结束日期\"\r\n [dateValue]=\"endDate()\"\r\n [hourValue]=\"endHour()\"\r\n [minuteValue]=\"endMinute()\"\r\n [hours]=\"getHours()\"\r\n [minutes]=\"getMinutes()\"\r\n (dateChange)=\"changeDatePart('end', $event)\"\r\n (timeChange)=\"updateEndTime()\"\r\n />\r\n </div>\r\n\r\n @if (optionalFeatures()) {\r\n <!-- 自定义选项 -->\r\n <div class=\"date-selector-options\">\r\n <!-- 自定义天数 -->\r\n <div class=\"date-selector-option-group\">\r\n <mat-checkbox [(ngModel)]=\"allDays\" class=\"date-selector-option-checkbox\">\r\n <span class=\"date-selector-option-label\">所有天</span>\r\n </mat-checkbox>\r\n\r\n @if (!allDays()) {\r\n <div class=\"date-selector-weekdays\">\r\n @for (day of weekdays(); track day.value) {\r\n <button type=\"button\" (click)=\"day.selected = !day.selected\" [class.selected]=\"day.selected\" class=\"date-selector-weekday-btn\">\r\n {{ day.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- 自定义小时 -->\r\n <div class=\"date-selector-option-group\">\r\n <mat-checkbox [(ngModel)]=\"allHours\" class=\"date-selector-option-checkbox\">\r\n <span class=\"date-selector-option-label\">所有小时</span>\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n }\r\n </section>\r\n </div>\r\n </div>\r\n</date-time-picker-container>\r\n\r\n<ng-template #footerExtraContent>\r\n <div class=\"date-selector-footer-range\">\r\n <span class=\"date-selector-footer-label\">范围:</span>\r\n\r\n @if (selectedDateRange) {\r\n <div class=\"date-selector-footer-value\">\r\n @if (selectedDateRange.start) {\r\n <span class=\"date-selector-footer-date\">{{ selectedDateRange.start | date: dateFormat }}</span>\r\n }\r\n\r\n @if (selectedDateRange.start && selectedDateRange.end) {\r\n <span class=\"date-selector-footer-separator\">-</span>\r\n }\r\n\r\n @if (selectedDateRange.end) {\r\n <span class=\"date-selector-footer-date\">{{ selectedDateRange.end | date: dateFormat }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, model, output, signal, ViewChild, ElementRef, Input, forwardRef } from '@angular/core';\r\nimport { take, tap } from 'rxjs';\r\nimport { DatePipe } from '@angular/common';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DateRange, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { DatePickerModel, DateTimePickerValue } from './interfaces';\r\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { TablerIconComponent, provideTablerIcons } from '@luoxiao123/angular-tabler-icons';\r\nimport { IconCalendarDue, IconX } from '@luoxiao123/angular-tabler-icons/icons';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl, MatFormField } from '@angular/material/form-field';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { DateSelector } from './date-selector/date-selector.component';\r\n\r\n@Component({\r\n selector: 'date-time-picker',\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [TablerIconComponent, MatDatepickerModule, DatePipe, MatDialogModule],\r\n providers: [\r\n provideTablerIcons({ IconCalendarDue, IconX }),\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatePickerComponent),\r\n multi: true\r\n },\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: forwardRef(() => DatePickerComponent)\r\n }\r\n ]\r\n})\r\nexport class DatePickerComponent implements ControlValueAccessor, MatFormFieldControl<DateTimePickerValue | null> {\r\n readonly #breakpoints = inject(BreakpointObserver);\r\n readonly #dialog = inject(MatDialog);\r\n readonly #focusMonitor = inject(FocusMonitor);\r\n readonly #elementRef = inject(ElementRef);\r\n readonly #matFormField = inject(MatFormField, { optional: true });\r\n\r\n protected destroyRef = inject(DestroyRef);\r\n\r\n @ViewChild('dateRangeButton') dateRangeButton?: ElementRef<HTMLButtonElement>;\r\n\r\n ngControl: NgControl | null = null;\r\n\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n @Input() dateFormat: string = 'yyyy年M月d日 HH:mm';\r\n @Input() valueFormat: string = 'yyyy-MM-dd HH:mm:ss';\r\n @Input() dateTimePicker: DateTimePickerValue | undefined;\r\n @Input() placeholder: string = '';\r\n optionalFeatures = input<boolean>(true);\r\n future = input<boolean>(false);\r\n\r\n selectedDateRange = model<DateRange<Date> | undefined>();\r\n\r\n toggle = signal<boolean>(false);\r\n\r\n selectionChange = output<DateTimePickerValue | undefined>();\r\n\r\n // 内部值存储:{start: string, end: string} 或 null/undefined\r\n #internalValue = signal<DateTimePickerValue | null | undefined>(undefined);\r\n\r\n // MatFormFieldControl 属性\r\n readonly stateChanges = new Subject<void>();\r\n readonly #errorStateSignal = signal(false);\r\n readonly #shouldLabelFloatSignal = signal(false);\r\n readonly #focusedSignal = signal(false);\r\n readonly #id = signal<string>(`date-time-picker-${Math.random().toString(36).substr(2, 9)}`);\r\n\r\n // ControlValueAccessor 回调函数\r\n private onChange?: (value: any) => void;\r\n private onTouched?: () => void;\r\n\r\n constructor() {\r\n // 监听 focus 事件\r\n this.#focusMonitor\r\n .monitor(this.#elementRef, true)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(origin => {\r\n const isFocused = !!origin;\r\n this.#focusedSignal.set(isFocused);\r\n this.stateChanges.next();\r\n if (!isFocused) {\r\n this.onTouched?.();\r\n }\r\n });\r\n }\r\n\r\n ref = effect((): void => {\r\n const dateRange = this.selectedDateRange();\r\n\r\n // 触发 MatFormField 更新\r\n this.stateChanges.next();\r\n this.#shouldLabelFloatSignal.set(!!dateRange);\r\n\r\n // 通知 ControlValueAccessor(当通过 model 更新时)\r\n if (dateRange && this.onChange) {\r\n const value = this.#internalValue();\r\n if (value) {\r\n this.onChange(value);\r\n }\r\n }\r\n });\r\n\r\n openDateDialogSelector(): void {\r\n const isMobile = this.#breakpoints.isMatched([Breakpoints.Handset, Breakpoints.Tablet]);\r\n const currentValue = this.#internalValue();\r\n const data: DatePickerModel = {\r\n optionalFeatures: this.optionalFeatures(),\r\n dateTimePicker: currentValue ?? undefined,\r\n future: this.future(),\r\n dateFormat: this.dateFormat,\r\n valueFormat: this.valueFormat\r\n };\r\n\r\n const dialogRef = this.#dialog.open(DateSelector, {\r\n width: isMobile ? '100%' : '850px',\r\n height: isMobile ? '90vh' : '520px',\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n data,\r\n disableClose: false,\r\n panelClass: 'date-time-picker-dialog'\r\n });\r\n\r\n dialogRef\r\n .afterOpened()\r\n .pipe(\r\n take(1),\r\n takeUntilDestroyed(this.destroyRef),\r\n tap(() => this.toggle.update((status: boolean) => !status))\r\n )\r\n .subscribe();\r\n\r\n dialogRef\r\n .afterClosed()\r\n .pipe(\r\n take(1),\r\n takeUntilDestroyed(this.destroyRef),\r\n tap((result: DatePickerModel | undefined): void => {\r\n this.toggle.update((status: boolean) => !status);\r\n\r\n if (result && result.dateTimePicker) {\r\n const rangeValue: DateTimePickerValue = {\r\n start: result.dateTimePicker.start,\r\n end: result.dateTimePicker.end\r\n };\r\n this.#internalValue.set(rangeValue);\r\n // 更新显示用的日期范围\r\n this.selectedDateRange.set(new DateRange(new Date(result.dateTimePicker.start), new Date(result.dateTimePicker.end)));\r\n // 发出用户手动选择的值\r\n this.selectionChange.emit(rangeValue);\r\n // 通知表单控件\r\n if (this.onChange) {\r\n this.onChange(rangeValue);\r\n }\r\n }\r\n\r\n this.onTouched?.();\r\n })\r\n )\r\n .subscribe();\r\n }\r\n\r\n // ControlValueAccessor 实现\r\n writeValue(value: any): void {\r\n // 处理各种值类型:null, undefined, '', {start, end}\r\n if (value === null || value === undefined || value === '') {\r\n this.#internalValue.set(null);\r\n this.selectedDateRange.set(undefined);\r\n } else if (typeof value === 'object' && value.start && value.end) {\r\n this.#internalValue.set(value);\r\n // 尝试转换为 Date 对象以显示在选择器中\r\n try {\r\n const startDate = new Date(value.start);\r\n const endDate = new Date(value.end);\r\n if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime())) {\r\n this.selectedDateRange.set(new DateRange(startDate, endDate));\r\n }\r\n } catch (e) {\r\n console.warn('Failed to parse date values:', value);\r\n }\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: any) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n // 可以根据需要在这里处理禁用状态\r\n }\r\n\r\n // MatFormFieldControl 实现\r\n get empty(): boolean {\r\n return !this.#internalValue();\r\n }\r\n\r\n get shouldPlaceholderFloat(): boolean {\r\n return this.#shouldLabelFloatSignal();\r\n }\r\n\r\n get focused(): boolean {\r\n return this.#focusedSignal();\r\n }\r\n\r\n get errorState(): boolean {\r\n return this.#errorStateSignal();\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.#shouldLabelFloatSignal();\r\n }\r\n\r\n get id(): string {\r\n return this.#id();\r\n }\r\n\r\n set value(val: DateTimePickerValue | undefined) {\r\n if (!val) {\r\n this.#internalValue.set(null);\r\n } else {\r\n this.#internalValue.set(val);\r\n this.selectedDateRange.set(new DateRange(new Date(val.start), new Date(val.end)));\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any {\r\n return this.#internalValue();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n // Material form field 使用此方法将错误 ID 传递给控件\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if ((event.target as HTMLElement).tagName.toLowerCase() !== 'button') {\r\n this.dateRangeButton?.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","<div\r\n #dateRangeButton\r\n [attr.id]=\"id\"\r\n [attr.aria-label]=\"'选择日期时间范围'\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (click)=\"!disabled && openDateDialogSelector()\"\r\n (keydown.enter)=\"!disabled && openDateDialogSelector()\"\r\n (keydown.space)=\"!disabled && openDateDialogSelector()\"\r\n tabindex=\"0\"\r\n [attr.role]=\"'button'\"\r\n class=\"date-range-container\"\r\n>\r\n @if (selectedDateRange()) {\r\n <div class=\"date-range-content\">\r\n <div class=\"date-range-primary\">\r\n {{ selectedDateRange()?.start | date: dateFormat }}\r\n </div>\r\n <div class=\"date-range-secondary\">\r\n {{ selectedDateRange()?.end | date: dateFormat }}\r\n </div>\r\n </div>\r\n } @else if (placeholder) {\r\n <span class=\"date-range-placeholder\">{{ placeholder }}</span>\r\n } @else {\r\n <div class=\"date-range-content\"></div>\r\n }\r\n\r\n <div class=\"date-range-actions\">\r\n <i-tabler name=\"calendar-due\" strokeWidth=\"2px\" size=\"18px\" class=\"date-range-icon\" />\r\n\r\n @if (selectedDateRange()) {\r\n <button\r\n (click)=\"selectedDateRange.set(undefined); $event.stopPropagation()\"\r\n type=\"button\"\r\n class=\"date-range-clear-btn\"\r\n [attr.aria-label]=\"'清除日期选择'\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"selectedDateRange.set(undefined); $event.stopPropagation()\"\r\n (keydown.space)=\"selectedDateRange.set(undefined); $event.stopPropagation()\"\r\n [attr.role]=\"'button'\"\r\n >\r\n <i-tabler name=\"x\" strokeWidth=\"2.5px\" size=\"18px\" class=\"date-range-icon\" />\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import {inject, Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\r\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\r\nimport {MatBottomSheet, MatBottomSheetRef} from '@angular/material/bottom-sheet';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class SmartDialogService {\r\n readonly #dialog = inject(MatDialog);\r\n readonly #bottomSheet = inject(MatBottomSheet);\r\n readonly #breakpoints = inject(BreakpointObserver);\r\n\r\n private ref: MatDialogRef<any> | MatBottomSheetRef<any> | null = null;\r\n private data: any = null;\r\n\r\n open<T, R = any>(\r\n component: any,\r\n config: {\r\n data?: R;\r\n panelClass?: string | string[];\r\n disableClose?: boolean;\r\n width?: string;\r\n maxWidth?: string;\r\n height?: string;\r\n } = {}\r\n ): SmartDialogRef<R> {\r\n const isMobile = this.#breakpoints.isMatched([\r\n Breakpoints.Handset,\r\n Breakpoints.Tablet\r\n ]);\r\n const smartRef = new SmartDialogRef<R>({} as any);\r\n\r\n this.data = config.data;\r\n\r\n if (isMobile) {\r\n this.ref = this.#bottomSheet.open(component, {\r\n ariaLabel: 'Bottomsheet',\r\n ariaModal: true,\r\n autoFocus: false,\r\n data: config.data,\r\n panelClass: config.panelClass,\r\n disableClose: config.disableClose\r\n });\r\n\r\n Promise.resolve().then(() => {\r\n const hostElement = (this.ref as any)?.containerInstance?._elementRef?.nativeElement as HTMLElement;\r\n const container = hostElement?.closest('.mat-bottom-sheet-container') as HTMLElement;\r\n\r\n if (container) {\r\n if (config.width) container.style.width = config.width;\r\n if (config.height) container.style.height = config.height;\r\n if (config.maxWidth) container.style.maxWidth = config.maxWidth;\r\n container.style.minWidth = 'unset';\r\n container.style.maxHeight = 'unset';\r\n\r\n container.style.borderTopLeftRadius = '1rem';\r\n container.style.borderTopRightRadius = '1rem';\r\n }\r\n\r\n if (hostElement) {\r\n if (config.width) hostElement.style.width = config.width;\r\n if (config.maxWidth) hostElement.style.maxWidth = config.maxWidth;\r\n if (config.height) hostElement.style.height = config.height;\r\n }\r\n });\r\n\r\n (smartRef as any).ref = this.ref;\r\n } else {\r\n this.ref = this.#dialog.open(component, {\r\n data: config.data,\r\n ariaLabel: 'Dialog',\r\n ariaModal: true,\r\n autoFocus: false,\r\n panelClass: config.panelClass,\r\n disableClose: config.disableClose,\r\n width: config.width,\r\n height: config.height,\r\n maxWidth: config.maxWidth,\r\n });\r\n\r\n const hostElement = (this.ref as any)._containerInstance?._elementRef?.nativeElement;\r\n\r\n const container = hostElement?.closest('.mat-mdc-dialog-panel') as HTMLElement;\r\n\r\n if (container) {\r\n if (config.width) container.style.width = config.width;\r\n if (config.height) container.style.height = config.height;\r\n if (config.maxWidth) {\r\n container.style.maxWidth = config.maxWidth;\r\n } else {\r\n container.style.maxWidth = 'unset';\r\n }\r\n container.style.minWidth = 'unset';\r\n container.style.maxHeight = 'unset';\r\n }\r\n\r\n (smartRef as any).ref = this.ref;\r\n }\r\n\r\n return smartRef;\r\n }\r\n\r\n getData<T = any>(): T {\r\n return this.data;\r\n }\r\n\r\n close(result?: any): void {\r\n if (!this.ref) return;\r\n\r\n if ('close' in this.ref) {\r\n this.ref.close(result);\r\n } else {\r\n this.ref.dismiss(result);\r\n }\r\n\r\n this.clear();\r\n }\r\n\r\n clear(): void {\r\n this.ref = null;\r\n this.data = null;\r\n }\r\n}\r\n\r\ntype DialogRef<T> = {\r\n close: (value?: T) => void;\r\n afterClosed: () => Observable<T>;\r\n afterOpened: () => Observable<T>;\r\n};\r\n\r\ntype BottomSheetRef<T> = {\r\n dismiss: (value?: T) => void;\r\n afterDismissed: () => Observable<T>;\r\n afterOpened: () => Observable<T>;\r\n bef: () => Observable<T | undefined>;\r\n};\r\n\r\nexport class SmartDialogRef<T = unknown> {\r\n constructor(\r\n private readonly ref: DialogRef<T> | BottomSheetRef<T>\r\n ) {\r\n }\r\n\r\n close(result?: T): void {\r\n if ('close' in this.ref) {\r\n this.ref.close(result);\r\n } else {\r\n this.ref.dismiss(result);\r\n }\r\n }\r\n\r\n afterOpened(): Observable<T> {\r\n return this.ref.afterOpened();\r\n }\r\n\r\n afterClosed(): Observable<T> {\r\n if ('afterClosed' in this.ref) {\r\n return this.ref.afterClosed();\r\n } else {\r\n return this.ref.afterDismissed();\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"luoxiao123-angular-material-date-time-range-picker.mjs","sources":["../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/container/container.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/container/container.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/date-time-input/date-time-input.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/components/date-time-input/date-time-input.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/until/index.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/constants.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-selector/date-selector.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-selector/date-selector.component.html","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-picker.component.ts","../../../projects/angular-material-date-time-range-picker/src/lib/date-picker/date-picker.component.html","../../../projects/angular-material-date-time-range-picker/src/luoxiao123-angular-material-date-time-range-picker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, model, output, TemplateRef } from '@angular/core';\r\nimport { TablerIconComponent, provideTablerIcons } from '@luoxiao123/angular-tabler-icons';\r\nimport { IconX, IconClock, IconCalendarDue, IconInfoCircle, IconLayoutSidebarLeftCollapse } from '@luoxiao123/angular-tabler-icons/icons';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'date-time-picker-container',\r\n templateUrl: './container.component.html',\r\n styleUrls: ['./container.component.scss'],\r\n styles: `\r\n :host {\r\n height: 100%;\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [TablerIconComponent, NgTemplateOutlet, MatButtonModule],\r\n providers: [provideTablerIcons({ IconInfoCircle, IconCalendarDue, IconX, IconClock, IconLayoutSidebarLeftCollapse })]\r\n})\r\nexport class Container {\r\n hasHeader = model<boolean | undefined>(true);\r\n hasFooter = model<boolean | undefined>(true);\r\n headerTitle = model<string>('');\r\n\r\n headerExtraContent = model<TemplateRef<any> | undefined>();\r\n\r\n footerExtraContent = model<TemplateRef<any> | undefined>();\r\n hasDismiss = model<boolean | undefined>(true);\r\n hasSubmit = model<boolean | undefined>(true);\r\n submitTitle = model<string>('Save');\r\n submitBg = model<string>('');\r\n submitColor = model<string>('');\r\n submitTitleColor = model<string>('');\r\n disabledSubmit = model<boolean | undefined>(false);\r\n\r\n hasSecondaryButton = model<boolean | undefined>(false);\r\n secondaryButtonTitle = model<string>('');\r\n secondaryButtonBg = model<string>('');\r\n secondaryButtonColor = model<string>('');\r\n secondaryButtonTitleColor = model<string>('');\r\n disabledSecondaryButton = model<boolean | undefined>(false);\r\n\r\n dismiss = output<void>();\r\n submit = output<void>();\r\n secondaryButton = output<void>();\r\n}\r\n","<aside class=\"container-wrapper\">\r\n @if (hasHeader()) {\r\n <header class=\"container-header\">\r\n <div class=\"container-header-start\">\r\n <i-tabler name=\"clock\" strokeWidth=\"2px\" size=\"18px\" class=\"container-header-icon\" />\r\n\r\n @if (headerTitle()) {\r\n <h2 class=\"container-header-title\">{{ headerTitle() }}</h2>\r\n }\r\n </div>\r\n\r\n @if (headerExtraContent()) {\r\n <div class=\"container-header-extra\">\r\n <ng-container *ngTemplateOutlet=\"headerExtraContent() ?? null\"></ng-container>\r\n </div>\r\n }\r\n\r\n <button (click)=\"dismiss.emit()\" type=\"button\" class=\"container-header-close\" [attr.aria-label]=\"'关闭'\" tabindex=\"0\">\r\n <i-tabler name=\"x\" strokeWidth=\"2.5px\" size=\"18px\" class=\"container-header-close-icon\" />\r\n </button>\r\n </header>\r\n }\r\n\r\n <main class=\"container-main\">\r\n <ng-content />\r\n </main>\r\n\r\n @if (hasFooter()) {\r\n <footer class=\"container-footer\">\r\n @if (footerExtraContent()) {\r\n <div class=\"container-footer-extra\">\r\n <ng-container *ngTemplateOutlet=\"footerExtraContent() ?? null\"></ng-container>\r\n </div>\r\n }\r\n\r\n <div class=\"container-footer-actions\">\r\n @if (hasDismiss()) {\r\n <button mat-stroked-button color=\"primary\" (click)=\"dismiss.emit()\" type=\"button\"> 取消 </button>\r\n }\r\n\r\n @if (hasSecondaryButton()) {\r\n <button mat-stroked-button color=\"primary\" (click)=\"secondaryButton.emit()\" type=\"button\" [disabled]=\"disabledSecondaryButton()\">\r\n {{ secondaryButtonTitle() }}\r\n </button>\r\n }\r\n\r\n @if (hasSubmit()) {\r\n <button mat-raised-button color=\"primary\" (click)=\"submit.emit()\" type=\"button\" [disabled]=\"disabledSubmit()\">\r\n {{ submitTitle() }}\r\n </button>\r\n }\r\n </div>\r\n </footer>\r\n }\r\n</aside>\r\n","import { Component, input, output, ChangeDetectionStrategy, computed } from '@angular/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TablerIconComponent } from '@luoxiao123/angular-tabler-icons';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'date-time-input',\r\n templateUrl: './date-time-input.component.html',\r\n styleUrls: ['./date-time-input.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDatepickerModule, FormsModule, TablerIconComponent, CommonModule]\r\n})\r\nexport class DateTimeInputComponent {\r\n label = input<string>('');\r\n dateValue = input<string | null>(null);\r\n hourValue = input<number | null>(null);\r\n minuteValue = input<number | null>(null);\r\n hours = input<number[]>([]);\r\n minutes = input<number[]>([]);\r\n\r\n dateChange = output<string>();\r\n hourChange = output<number | null>();\r\n minuteChange = output<number | null>();\r\n timeChange = output<void>();\r\n\r\n protected dateObj = computed(() => {\r\n const val = this.dateValue();\r\n return val ? new Date(val) : null;\r\n });\r\n\r\n onDateChange(value: Date | null) {\r\n if (value) {\r\n this.dateChange.emit(value.toISOString());\r\n }\r\n }\r\n\r\n onHourChange(value: number | null) {\r\n this.hourChange.emit(value);\r\n this.timeChange.emit();\r\n }\r\n\r\n onMinuteChange(value: number | null) {\r\n this.minuteChange.emit(value);\r\n this.timeChange.emit();\r\n }\r\n}\r\n","<div class=\"date-time-input-wrapper\">\r\n <label class=\"date-time-input-label\">{{ label() }}</label>\r\n\r\n <div class=\"date-time-input-container\">\r\n <!-- 日期部分 -->\r\n <div class=\"date-time-input-date\">\r\n <input\r\n type=\"text\"\r\n matInput\r\n [ngModel]=\"dateObj()\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n [matDatepicker]=\"datePicker\"\r\n (click)=\"datePicker.open()\"\r\n (focus)=\"datePicker.open()\"\r\n placeholder=\"选择日期\"\r\n class=\"date-time-input-field\"\r\n />\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n\r\n <button type=\"button\" class=\"date-time-input-icon-btn\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <i-tabler name=\"calendar-due\" strokeWidth=\"2px\" size=\"16px\" />\r\n </button>\r\n </div>\r\n\r\n <!-- 分隔符 -->\r\n <div class=\"date-time-input-divider\"></div>\r\n\r\n <!-- 时间部分 -->\r\n <div class=\"date-time-input-time\">\r\n <!-- 小时 -->\r\n <select class=\"date-time-input-select date-time-input-select-hour\" [ngModel]=\"hourValue()\" (ngModelChange)=\"onHourChange($event)\" [attr.aria-label]=\"'小时'\">\r\n <option [ngValue]=\"null\" disabled>--</option>\r\n @for (hour of hours(); track hour) {\r\n <option [ngValue]=\"hour\">{{ hour | number: '2.0-0' }}</option>\r\n }\r\n </select>\r\n\r\n <!-- 分隔符 -->\r\n <span class=\"date-time-input-separator\">:</span>\r\n\r\n <!-- 分钟 -->\r\n <select class=\"date-time-input-select date-time-input-select-minute\" [ngModel]=\"minuteValue()\" (ngModelChange)=\"onMinuteChange($event)\" [attr.aria-label]=\"'分钟'\">\r\n <option [ngValue]=\"null\" disabled>--</option>\r\n @for (minute of minutes(); track minute) {\r\n <option [ngValue]=\"minute\">{{ minute | number: '2.0-0' }}</option>\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n</div>\r\n","import { DateAdapter, MatDateFormats } from '@angular/material/core';\r\n\r\nexport function formatDate(date: Date, dateAdapter: DateAdapter<any>, dateFormats: MatDateFormats): string {\r\n const datePart = dateAdapter.format(date, dateFormats.display.dateInput);\r\n const hours = date.getHours().toString().padStart(2, '0');\r\n const minutes = date.getMinutes().toString().padStart(2, '0');\r\n return `${datePart} ${hours}:${minutes}`;\r\n}\r\n","import { TimeRange } from './interfaces';\r\n\r\nexport const DEFAULT_TIME_RANGES: TimeRange[] = [\r\n { label: '最近5分钟', start: 'offset:-5minutes', end: 'offset:now' },\r\n { label: '最近15分钟', start: 'offset:-15minutes', end: 'offset:now' },\r\n { label: '最近30分钟', start: 'offset:-30minutes', end: 'offset:now' },\r\n { label: '最近1小时', start: 'offset:-1hours', end: 'offset:now' },\r\n { label: '最近3小时', start: 'offset:-3hours', end: 'offset:now' },\r\n { label: '最近6小时', start: 'offset:-6hours', end: 'offset:now' },\r\n { label: '最近12小时', start: 'offset:-12hours', end: 'offset:now' },\r\n { label: '最近24小时', start: 'offset:-24hours', end: 'offset:now' },\r\n { label: '最近2天', start: 'offset:-2days', end: 'offset:now' },\r\n { label: '最近7天', start: 'offset:-7days', end: 'offset:now' },\r\n { label: '最近30天', start: 'offset:-30days', end: 'offset:now' },\r\n { label: '最近90天', start: 'offset:-90days', end: 'offset:now' },\r\n { label: '最近6个月', start: 'offset:-6months', end: 'offset:now' },\r\n { label: '最近1年', start: 'offset:-1years', end: 'offset:now' },\r\n { label: '最近2年', start: 'offset:-2years', end: 'offset:now' },\r\n { label: '最近5年', start: 'offset:-5years', end: 'offset:now' },\r\n { label: '昨天', start: 'offset:-1days/start', end: 'offset:-1days/end' },\r\n { label: '前天', start: 'offset:-2days/start', end: 'offset:-2days/end' },\r\n { label: '上周同一天', start: 'offset:-7days/start', end: 'offset:-7days/end' },\r\n { label: '今天', start: 'offset:0days/start', end: 'offset:0days/end' },\r\n { label: '今天至今', start: 'offset:0days/start', end: 'offset:now' },\r\n { label: '本周至今', start: 'startof:week', end: 'offset:now' },\r\n { label: '本月至今', start: 'startof:month', end: 'offset:now' },\r\n { label: '今年至今', start: 'startof:year', end: 'offset:now' }\r\n];\r\n\r\nexport const FUTURE_TIME_RANGES: TimeRange[] = [\r\n { label: '未来1天', start: 'offset:now', end: 'offset:+1days' },\r\n { label: '未来1周', start: 'offset:now', end: 'offset:+1weeks' },\r\n { label: '未来1月', start: 'offset:now', end: 'offset:+1months' },\r\n { label: '未来3月', start: 'offset:now', end: 'offset:+3months' }\r\n];\r\n","import { ChangeDetectionStrategy, Component, inject, model, OnInit, signal, ViewChild, computed } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { DatePickerModel, DateTimePickerValue, TimeRange } from '../interfaces';\r\nimport { TablerIconComponent } from '@luoxiao123/angular-tabler-icons';\r\nimport { DateRange, DefaultMatCalendarRangeStrategy, MatCalendar, MatDatepickerModule, MatRangeDateSelectionModel } from '@angular/material/datepicker';\r\nimport { Container } from '../components';\r\nimport { DateTimeInputComponent } from '../components';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSidenavModule, MatSidenav } from '@angular/material/sidenav';\r\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { formatDate } from '../until';\r\nimport { DEFAULT_TIME_RANGES, FUTURE_TIME_RANGES } from '../constants';\r\n\r\n@Component({\r\n selector: 'date-time-picker-selector',\r\n templateUrl: './date-selector.component.html',\r\n styleUrls: ['./date-selector.component.scss'],\r\n styles: `\r\n :host {\r\n display: block;\r\n height: 100%;\r\n }\r\n `,\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n DefaultMatCalendarRangeStrategy,\r\n MatRangeDateSelectionModel\r\n ],\r\n imports: [\r\n MatCalendar,\r\n TablerIconComponent,\r\n MatDatepickerModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n Container,\r\n DateTimeInputComponent,\r\n MatSidenavModule,\r\n MatButtonModule\r\n ]\r\n})\r\nexport class DateSelector implements OnInit {\r\n readonly #dialogRef = inject(MatDialogRef<DateSelector>);\r\n readonly #data = inject(MAT_DIALOG_DATA) as DatePickerModel;\r\n readonly #selectionModel = inject(MatRangeDateSelectionModel<Date>);\r\n readonly #breakpoints = inject(BreakpointObserver);\r\n private _dateAdapter = inject(DateAdapter);\r\n private _dateFormats = inject(MAT_DATE_FORMATS);\r\n\r\n @ViewChild('sidenav') sidenav?: MatSidenav;\r\n\r\n isMobile = signal(false);\r\n\r\n public data = this.#data;\r\n\r\n startDate = model<string>('');\r\n endDate = model<string>('');\r\n\r\n startHour = model<number | null>(null);\r\n startMinute = model<number | null>(null);\r\n endHour = model<number | null>(null);\r\n endMinute = model<number | null>(null);\r\n\r\n future = model<boolean>(false);\r\n\r\n displayStart = computed(() => {\r\n const startStr = this.startDate();\r\n if (!startStr) return '';\r\n return formatDate(new Date(startStr), this._dateAdapter, this._dateFormats);\r\n });\r\n\r\n displayEnd = computed(() => {\r\n const endStr = this.endDate();\r\n if (!endStr) return '';\r\n return formatDate(new Date(endStr), this._dateAdapter, this._dateFormats);\r\n });\r\n\r\n timeRanges: TimeRange[] = [...DEFAULT_TIME_RANGES];\r\n selectedTimeRange = model<TimeRange | undefined>(undefined);\r\n\r\n selectedDateRange: DateRange<Date> | null = null;\r\n now = new Date();\r\n selectingStart = true;\r\n\r\n constructor() {\r\n this.#breakpoints\r\n .observe([Breakpoints.Handset, Breakpoints.Tablet])\r\n .pipe(takeUntilDestroyed())\r\n .subscribe(result => {\r\n this.isMobile.set(result.matches);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.data) {\r\n this.future.set(this.data.future);\r\n\r\n const picker = this.data.dateTimePicker;\r\n\r\n if (picker) {\r\n if (picker.start && picker.end) {\r\n const start = new Date(picker.start);\r\n const end = new Date(picker.end);\r\n this.selectedDateRange = new DateRange(start, end);\r\n\r\n this.#selectionModel.updateSelection(this.selectedDateRange, this);\r\n\r\n // 初始化时间值\r\n this.startDate.set(picker.start);\r\n this.endDate.set(picker.end);\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n }\r\n }\r\n\r\n if (this.future()) {\r\n this.timeRanges = [...this.timeRanges, ...FUTURE_TIME_RANGES];\r\n }\r\n }\r\n \r\n if (!this.data?.dateTimePicker) {\r\n this.selectTimeRange(this.timeRanges[5]);\r\n }\r\n }\r\n\r\n selectTimeRange(timeRange: TimeRange): void {\r\n this.selectedTimeRange.set(timeRange);\r\n const { startDate, endDate } = this.processTimeRange(timeRange);\r\n const start = new Date(startDate);\r\n const end = new Date(endDate);\r\n\r\n this.startDate.set(start.toISOString());\r\n this.endDate.set(end.toISOString());\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n this.selectedDateRange = new DateRange<Date>(start, end);\r\n }\r\n\r\n private processTimeRange(timeRange: TimeRange): { startDate: string; endDate: string } {\r\n const now = new Date();\r\n const parseTime = (time: string): Date => {\r\n if (!time) return new Date(now);\r\n\r\n // 处理 startof: 前缀 (本周/本月/今年)\r\n if (time.startsWith('startof:')) {\r\n const unit = time.replace('startof:', '').trim().toLowerCase();\r\n const result = new Date(now);\r\n result.setHours(0, 0, 0, 0);\r\n\r\n switch (unit) {\r\n case 'week':\r\n // 假设周一为一周的开始\r\n const day = result.getDay() || 7; // 0是周日,改为7\r\n if (day !== 1) {\r\n result.setHours(-24 * (day - 1));\r\n }\r\n break;\r\n case 'month':\r\n result.setDate(1);\r\n break;\r\n case 'year':\r\n result.setMonth(0, 1);\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n // 处理 offset: 前缀\r\n if (time.startsWith('offset:')) {\r\n const offsetStr = time.replace('offset:', '').trim();\r\n if (offsetStr === 'now') return new Date(now);\r\n\r\n // 检查是否有 /start 或 /end 后缀\r\n let suffix = '';\r\n let cleanOffset = offsetStr;\r\n if (offsetStr.endsWith('/start')) {\r\n suffix = 'start';\r\n cleanOffset = offsetStr.replace('/start', '');\r\n } else if (offsetStr.endsWith('/end')) {\r\n suffix = 'end';\r\n cleanOffset = offsetStr.replace('/end', '');\r\n }\r\n\r\n const regex = /([+-]?)(\\d+)(months?|days?|years?|weeks?|hours?|minutes?)/i;\r\n const match = regex.exec(cleanOffset);\r\n \r\n // 如果没有匹配到数字偏移量,但有后缀(例如 offset:0days/start),尝试解析\r\n // 注意:上面的正则也能匹配 0days\r\n \r\n const result = new Date(now);\r\n \r\n if (match) {\r\n const sign = match[1] === '-' ? -1 : 1;\r\n const value = parseInt(match[2], 10) * sign;\r\n const unit = match[3].toLowerCase();\r\n\r\n switch (unit) {\r\n case 'minutes':\r\n case 'minute':\r\n result.setMinutes(result.getMinutes() + value);\r\n break;\r\n case 'hours':\r\n case 'hour':\r\n result.setHours(result.getHours() + value);\r\n break;\r\n case 'days':\r\n case 'day':\r\n result.setDate(result.getDate() + value);\r\n break;\r\n case 'weeks':\r\n case 'week':\r\n result.setDate(result.getDate() + value * 7);\r\n break;\r\n case 'months':\r\n case 'month':\r\n result.setMonth(result.getMonth() + value);\r\n break;\r\n case 'years':\r\n case 'year':\r\n result.setFullYear(result.getFullYear() + value);\r\n break;\r\n }\r\n }\r\n\r\n // 应用后缀修正\r\n if (suffix === 'start') {\r\n result.setHours(0, 0, 0, 0);\r\n } else if (suffix === 'end') {\r\n result.setHours(23, 59, 59, 999);\r\n }\r\n\r\n return result;\r\n }\r\n return new Date(time);\r\n };\r\n\r\n const startDate = timeRange.start ? parseTime(timeRange.start) : null;\r\n const endDate = timeRange.end ? parseTime(timeRange.end) : now;\r\n\r\n return {\r\n startDate: (startDate ?? endDate).toISOString(),\r\n endDate: endDate.toISOString()\r\n };\r\n }\r\n\r\n changeDatePart(part: 'start' | 'end', date: Date | string): void {\r\n if (!date) return;\r\n\r\n let dateObj: Date;\r\n\r\n if (typeof date === 'string') {\r\n // 如果是字符串,尝试解析它\r\n dateObj = new Date(date);\r\n // 如果不能解析为有效日期,返回\r\n if (isNaN(dateObj.getTime())) return;\r\n } else {\r\n dateObj = new Date(date);\r\n }\r\n\r\n // 保持原有的时间部分(只修改日期部分)\r\n if (part === 'start') {\r\n const currentStart = this.selectedDateRange?.start;\r\n if (currentStart) {\r\n dateObj.setHours(currentStart.getHours(), currentStart.getMinutes(), currentStart.getSeconds());\r\n } else {\r\n dateObj.setHours(0, 0, 0, 0);\r\n }\r\n } else {\r\n const currentEnd = this.selectedDateRange?.end;\r\n if (currentEnd) {\r\n dateObj.setHours(currentEnd.getHours(), currentEnd.getMinutes(), currentEnd.getSeconds());\r\n } else {\r\n dateObj.setHours(0, 0, 0, 0);\r\n }\r\n }\r\n\r\n this.selectedTimeRange.set(undefined);\r\n\r\n let start = this.selectedDateRange?.start ?? null;\r\n let end = this.selectedDateRange?.end ?? null;\r\n\r\n if (part === 'start') {\r\n start = dateObj;\r\n } else {\r\n end = dateObj;\r\n }\r\n\r\n if (start && end && start.getTime() > end.getTime()) {\r\n [start, end] = [end, start];\r\n }\r\n\r\n const range = new DateRange<Date>(start, end);\r\n this.selectedDateRange = range;\r\n this.startDate.set(start?.toISOString() ?? '');\r\n this.endDate.set(end?.toISOString() ?? '');\r\n\r\n if (start) {\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n } else {\r\n this.startHour.set(null);\r\n this.startMinute.set(null);\r\n }\r\n\r\n if (end) {\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n } else {\r\n this.endHour.set(null);\r\n this.endMinute.set(null);\r\n }\r\n }\r\n\r\n rangeChanged(selectedDate: Date | null): void {\r\n if (!selectedDate) return;\r\n\r\n if (this.selectingStart) {\r\n // 正在选择开始日期\r\n let h = 0, m = 0, s = 0, ms = 0;\r\n // 尝试保留之前的开始时间\r\n if (this.selectedDateRange?.start) {\r\n h = this.selectedDateRange.start.getHours();\r\n m = this.selectedDateRange.start.getMinutes();\r\n s = this.selectedDateRange.start.getSeconds();\r\n }\r\n\r\n const newStart = new Date(selectedDate);\r\n newStart.setHours(h, m, s, ms);\r\n\r\n this.startDate.set(newStart.toISOString());\r\n this.endDate.set('');\r\n this.startHour.set(newStart.getHours());\r\n this.startMinute.set(newStart.getMinutes());\r\n this.endHour.set(null);\r\n this.endMinute.set(null);\r\n this.selectedTimeRange.set(undefined);\r\n this.selectedDateRange = new DateRange(newStart, null);\r\n this.#selectionModel.updateSelection(this.selectedDateRange, this);\r\n this.selectingStart = false;\r\n } else {\r\n // 正在选择结束日期\r\n const start = this.#selectionModel.selection.start;\r\n if (!start) return;\r\n\r\n const startDay = new Date(start.getFullYear(), start.getMonth(), start.getDate());\r\n const selectedDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());\r\n\r\n let newStart: Date;\r\n let newEnd: Date;\r\n\r\n if (selectedDay.getTime() < startDay.getTime()) {\r\n // 用户选了一个比 Start 更早的日期 -> 交换角色\r\n // 新 Start (selectedDate) 设为 00:00\r\n newStart = new Date(selectedDate);\r\n newStart.setHours(0, 0, 0, 0);\r\n\r\n // 新 End (旧 start) 设为 23:59\r\n newEnd = new Date(start);\r\n newEnd.setHours(23, 59, 59, 999);\r\n } else {\r\n // 正常顺序 (selectedDate >= start)\r\n // Start 保持原样\r\n newStart = new Date(start);\r\n\r\n // End (selectedDate) 设为 23:59\r\n newEnd = new Date(selectedDate);\r\n newEnd.setHours(23, 59, 59, 999);\r\n \r\n // 如果是同一天,确保 Start <= End\r\n if (newStart.getTime() > newEnd.getTime()) {\r\n newStart.setHours(0, 0, 0, 0);\r\n }\r\n }\r\n\r\n this.updateSelection(newStart, newEnd);\r\n this.selectingStart = true;\r\n }\r\n }\r\n\r\n updateSelection(start: Date, end: Date): void {\r\n const range = new DateRange(start, end);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.startDate.set(start.toISOString());\r\n this.endDate.set(end.toISOString());\r\n this.startHour.set(start.getHours());\r\n this.startMinute.set(start.getMinutes());\r\n this.endHour.set(end.getHours());\r\n this.endMinute.set(end.getMinutes());\r\n }\r\n\r\n submit(): void {\r\n if (!this.selectedDateRange?.start || !this.selectedDateRange?.end) {\r\n return;\r\n }\r\n\r\n const start = new Date(this.selectedDateRange.start);\r\n const end = new Date(this.selectedDateRange.end);\r\n\r\n if (isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n return;\r\n }\r\n\r\n const result: DateTimePickerValue = {\r\n start: start.toISOString(),\r\n end: end.toISOString()\r\n };\r\n\r\n this.data = { ...this.data, dateTimePicker: result };\r\n this.#dialogRef.close(this.data);\r\n }\r\n\r\n dismiss(): void {\r\n this.#dialogRef.close(undefined);\r\n }\r\n\r\n readonly hours = Array.from({ length: 24 }, (_, i) => i);\r\n readonly minutes = Array.from({ length: 60 }, (_, i) => i);\r\n\r\n updateStartTime(): void {\r\n if (this.selectedDateRange?.start && this.startHour() !== null && this.startMinute() !== null) {\r\n const startDate = new Date(this.selectedDateRange.start);\r\n startDate.setHours(this.startHour() ?? 0, this.startMinute() ?? 0, 0, 0);\r\n\r\n let endDate = this.selectedDateRange.end;\r\n const range = new DateRange(startDate, endDate);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.startDate.set(startDate.toISOString());\r\n }\r\n }\r\n\r\n updateEndTime(): void {\r\n if (this.selectedDateRange?.end && this.endHour() !== null && this.endMinute() !== null) {\r\n const endDate = new Date(this.selectedDateRange.end);\r\n endDate.setHours(this.endHour() ?? 0, this.endMinute() ?? 0, 0, 0);\r\n\r\n let startDate = this.selectedDateRange.start;\r\n const range = new DateRange(startDate, endDate);\r\n this.selectedDateRange = range;\r\n this.#selectionModel.updateSelection(range, this);\r\n this.endDate.set(endDate.toISOString());\r\n }\r\n }\r\n}\r\n","<date-time-picker-container\r\n headerTitle=\"日期时间选择器\"\r\n submitTitle=\"应用\"\r\n [disabledSubmit]=\"!selectedDateRange\"\r\n [footerExtraContent]=\"footerExtraContent\"\r\n (submit)=\"submit()\"\r\n (dismiss)=\"dismiss()\"\r\n>\r\n <mat-sidenav-container class=\"date-selector-sidenav-container\">\r\n <!-- 左侧快捷选择面板 -->\r\n <mat-sidenav #sidenav [mode]=\"isMobile() ? 'over' : 'side'\" [opened]=\"!isMobile()\" class=\"date-selector-sidebar\" dir=\"rtl\">\r\n <div class=\"date-selector-sidebar-inner\" dir=\"ltr\">\r\n <div class=\"date-selector-sidebar-header\">\r\n <span class=\"date-selector-sidebar-title\">快捷选择</span>\r\n @if (isMobile()) {\r\n <button mat-icon-button (click)=\"sidenav.close()\">\r\n <i-tabler name=\"layout-sidebar-left-collapse\" />\r\n </button>\r\n }\r\n </div>\r\n <ul class=\"date-selector-sidebar-list\">\r\n @for (timeRangeItem of timeRanges; track timeRangeItem) {\r\n <li class=\"date-selector-sidebar-item\">\r\n <button\r\n type=\"button\"\r\n (click)=\"selectTimeRange(timeRangeItem); isMobile() && sidenav.close()\"\r\n [class.selected]=\"selectedTimeRange() && selectedTimeRange()?.start === timeRangeItem.start && selectedTimeRange()?.end === timeRangeItem.end\"\r\n class=\"date-selector-sidebar-btn\"\r\n >\r\n <span class=\"date-selector-sidebar-text\">{{ timeRangeItem.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </mat-sidenav>\r\n <!-- 左侧快捷选择面板结束 -->\r\n\r\n <mat-sidenav-content>\r\n @if (isMobile()) {\r\n <div class=\"date-selector-mobile-toolbar\">\r\n <button mat-button (click)=\"sidenav.open()\">\r\n <span>快捷选择</span>\r\n </button>\r\n </div>\r\n }\r\n\r\n <!-- 主要内容区域 -->\r\n <div class=\"date-selector-main\">\r\n <div class=\"date-selector-content\">\r\n <!-- 日历容器 -->\r\n <section class=\"date-selector-calendar-section\">\r\n <div class=\"date-selector-calendar-wrapper\">\r\n <mat-calendar [maxDate]=\"!future() ? now : undefined\" [(selected)]=\"selectedDateRange\" (selectedChange)=\"rangeChanged($event)\" class=\"date-selector-calendar\" />\r\n </div>\r\n </section>\r\n <!-- 日历容器结束 -->\r\n\r\n <!-- 时间设置容器 -->\r\n <section class=\"date-selector-time-section\">\r\n <!-- 开始和结束输入日期 -->\r\n <div class=\"date-selector-inputs\">\r\n <!-- 从日期 -->\r\n <date-time-input\r\n label=\"开始日期\"\r\n [dateValue]=\"startDate()\"\r\n [hourValue]=\"startHour()\"\r\n (hourChange)=\"startHour.set($event)\"\r\n [minuteValue]=\"startMinute()\"\r\n (minuteChange)=\"startMinute.set($event)\"\r\n [hours]=\"hours\"\r\n [minutes]=\"minutes\"\r\n (dateChange)=\"changeDatePart('start', $event)\"\r\n (timeChange)=\"updateStartTime()\"\r\n />\r\n\r\n <!-- 结束日期 -->\r\n <date-time-input\r\n label=\"结束日期\"\r\n [dateValue]=\"endDate()\"\r\n [hourValue]=\"endHour()\"\r\n (hourChange)=\"endHour.set($event)\"\r\n [minuteValue]=\"endMinute()\"\r\n (minuteChange)=\"endMinute.set($event)\"\r\n [hours]=\"hours\"\r\n [minutes]=\"minutes\"\r\n (dateChange)=\"changeDatePart('end', $event)\"\r\n (timeChange)=\"updateEndTime()\"\r\n />\r\n </div>\r\n\r\n <div class=\"date-selector-hint-wrapper\">\r\n <div class=\"date-selector-hint\">\r\n <i-tabler name=\"info-circle\" strokeWidth=\"2px\" class=\"date-selector-hint-icon\"></i-tabler>\r\n <span class=\"date-selector-hint-text\">如果要选择一天,请双击该天。</span>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</date-time-picker-container>\r\n\r\n<ng-template #footerExtraContent>\r\n <div class=\"date-selector-footer-range\">\r\n <span class=\"date-selector-footer-label\">范围:</span>\r\n\r\n @if (startDate()) {\r\n <div class=\"date-selector-footer-value\">\r\n @if (startDate()) {\r\n <span class=\"date-selector-footer-date\">{{ displayStart() }}</span>\r\n }\r\n\r\n @if (startDate() && endDate()) {\r\n <span class=\"date-selector-footer-separator\">-</span>\r\n }\r\n\r\n @if (endDate()) {\r\n <span class=\"date-selector-footer-date\">{{ displayEnd() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, model, output, signal, ViewChild, ElementRef, Input, forwardRef, computed, Injector, untracked } from '@angular/core';\r\nimport { take, tap } from 'rxjs';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DateRange, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { DatePickerModel, DateTimePickerValue } from './interfaces';\r\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { TablerIconComponent, provideTablerIcons } from '@luoxiao123/angular-tabler-icons';\r\nimport { IconCalendarDue, IconX } from '@luoxiao123/angular-tabler-icons/icons';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { DateSelector } from './date-selector/date-selector.component';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { formatDate } from './until';\r\n\r\n@Component({\r\n selector: 'date-time-picker',\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [TablerIconComponent, MatDatepickerModule, MatDialogModule],\r\n providers: [\r\n provideTablerIcons({ IconCalendarDue, IconX }),\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: forwardRef(() => DatePickerComponent)\r\n }\r\n ]\r\n})\r\nexport class DatePickerComponent implements ControlValueAccessor, MatFormFieldControl<DateTimePickerValue | null> {\r\n readonly #breakpoints = inject(BreakpointObserver);\r\n readonly #dialog = inject(MatDialog);\r\n readonly #focusMonitor = inject(FocusMonitor);\r\n readonly #elementRef = inject(ElementRef);\r\n readonly #injector = inject(Injector);\r\n private _dateAdapter = inject(DateAdapter);\r\n private _dateFormats = inject(MAT_DATE_FORMATS);\r\n\r\n protected destroyRef = inject(DestroyRef);\r\n\r\n @ViewChild('dateRangeButton') dateRangeButton?: ElementRef<HTMLButtonElement>;\r\n\r\n ngControl = inject(NgControl, { optional: true, self: true });\r\n\r\n @Input() required: boolean = false;\r\n disabledInput = input<boolean>(false, { alias: 'disabled' });\r\n private _formDisabled = signal(false);\r\n @Input() placeholder: string = '';\r\n future = input<boolean>(false);\r\n\r\n selectedDateRange = model<DateRange<Date> | undefined>();\r\n\r\n selectionChange = output<DateTimePickerValue | undefined>();\r\n\r\n // 内部值存储:{start: string, end: string} 或 null/undefined\r\n #internalValue = signal<DateTimePickerValue | null | undefined>(undefined);\r\n\r\n // MatFormFieldControl 属性\r\n readonly stateChanges = new Subject<void>();\r\n readonly #errorStateSignal = signal(false);\r\n readonly #focusedSignal = signal(false);\r\n readonly #id = signal<string>(`date-time-picker-${Math.random().toString(36).substr(2, 9)}`);\r\n\r\n // ControlValueAccessor 回调函数\r\n private onChange?: (value: any) => void;\r\n private onTouched?: () => void;\r\n\r\n protected displayStart = computed(() => {\r\n const range = this.selectedDateRange();\r\n if (!range?.start) return '';\r\n return formatDate(range.start, this._dateAdapter, this._dateFormats);\r\n });\r\n\r\n protected displayEnd = computed(() => {\r\n const range = this.selectedDateRange();\r\n if (!range?.end) return '';\r\n return formatDate(range.end, this._dateAdapter, this._dateFormats);\r\n });\r\n\r\n constructor() {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n this.ngControl.statusChanges?.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this.stateChanges.next();\r\n });\r\n }\r\n\r\n // 监听 focus 事件\r\n this.#focusMonitor\r\n .monitor(this.#elementRef, true)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(origin => {\r\n const isFocused = !!origin;\r\n this.#focusedSignal.set(isFocused);\r\n this.stateChanges.next();\r\n if (!isFocused) {\r\n this.onTouched?.();\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.disabledInput();\r\n untracked(() => this.stateChanges.next());\r\n });\r\n }\r\n\r\n ref = effect((): void => {\r\n this.selectedDateRange();\r\n // 触发 MatFormField 更新\r\n untracked(() => this.stateChanges.next());\r\n });\r\n\r\n openDateDialogSelector(): void {\r\n const isMobile = this.#breakpoints.isMatched([Breakpoints.Handset, Breakpoints.Tablet]);\r\n const currentValue = this.#internalValue();\r\n const data: DatePickerModel = {\r\n dateTimePicker: currentValue ?? undefined,\r\n future: this.future()\r\n };\r\n\r\n const dialogRef = this.#dialog.open(DateSelector, {\r\n width: isMobile ? '100%' : '850px',\r\n height: isMobile ? '90vh' : '520px',\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n data,\r\n disableClose: false,\r\n panelClass: 'date-time-picker-dialog',\r\n injector: this.#injector\r\n });\r\n\r\n dialogRef\r\n .afterClosed()\r\n .pipe(\r\n take(1),\r\n takeUntilDestroyed(this.destroyRef),\r\n tap((result: DatePickerModel | undefined): void => {\r\n if (result && result.dateTimePicker) {\r\n const start = new Date(result.dateTimePicker.start);\r\n const end = new Date(result.dateTimePicker.end);\r\n \r\n const startStr = formatDate(start, this._dateAdapter, this._dateFormats);\r\n const endStr = formatDate(end, this._dateAdapter, this._dateFormats);\r\n\r\n const rangeValue: DateTimePickerValue = {\r\n start: startStr,\r\n end: endStr\r\n };\r\n this.#internalValue.set(rangeValue);\r\n // 更新显示用的日期范围\r\n this.selectedDateRange.set(new DateRange(start, end));\r\n // 发出用户手动选择的值\r\n this.selectionChange.emit(rangeValue);\r\n // 通知表单控件\r\n if (this.onChange) {\r\n this.onChange(rangeValue);\r\n }\r\n }\r\n\r\n this.onTouched?.();\r\n })\r\n )\r\n .subscribe();\r\n }\r\n\r\n // ControlValueAccessor 实现\r\n writeValue(value: any): void {\r\n // 处理各种值类型:null, undefined, '', {start, end}\r\n if (value === null || value === undefined || value === '') {\r\n this.#internalValue.set(null);\r\n this.selectedDateRange.set(undefined);\r\n } else if (typeof value === 'object' && value.start && value.end) {\r\n this.#internalValue.set(value);\r\n // 尝试转换为 Date 对象以显示在选择器中\r\n try {\r\n const startDate = new Date(value.start);\r\n const endDate = new Date(value.end);\r\n if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime())) {\r\n this.selectedDateRange.set(new DateRange(startDate, endDate));\r\n }\r\n } catch (e) {\r\n console.warn('Failed to parse date values:', value);\r\n }\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: any) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._formDisabled.set(isDisabled);\r\n this.stateChanges.next();\r\n }\r\n\r\n get disabled(): boolean {\r\n return this.disabledInput() || this._formDisabled();\r\n }\r\n\r\n // MatFormFieldControl 实现\r\n get empty(): boolean {\r\n return !this.#internalValue();\r\n }\r\n\r\n get shouldPlaceholderFloat(): boolean {\r\n return this.shouldLabelFloat;\r\n }\r\n\r\n get focused(): boolean {\r\n return this.#focusedSignal();\r\n }\r\n\r\n get errorState(): boolean {\r\n return this.#errorStateSignal() || (!!this.ngControl?.invalid && (!!this.ngControl?.touched || !!this.ngControl?.dirty));\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get id(): string {\r\n return this.#id();\r\n }\r\n\r\n set value(val: DateTimePickerValue | undefined) {\r\n if (!val) {\r\n this.#internalValue.set(null);\r\n } else {\r\n this.#internalValue.set(val);\r\n this.selectedDateRange.set(new DateRange(new Date(val.start), new Date(val.end)));\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any {\r\n return this.#internalValue();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n // Material form field 使用此方法将错误 ID 传递给控件\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if ((event.target as HTMLElement).tagName.toLowerCase() !== 'button') {\r\n this.dateRangeButton?.nativeElement.focus();\r\n }\r\n }\r\n\r\n clear(event?: Event): void {\r\n event?.stopPropagation();\r\n this.selectedDateRange.set(undefined);\r\n this.#internalValue.set(null);\r\n this.onChange?.(null);\r\n this.onTouched?.();\r\n this.selectionChange.emit(undefined);\r\n this.stateChanges.next();\r\n }\r\n}\r\n","<div\r\n #dateRangeButton\r\n [attr.id]=\"id\"\r\n [attr.aria-label]=\"'选择日期时间范围'\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (click)=\"!disabled && openDateDialogSelector()\"\r\n (keydown.enter)=\"!disabled && openDateDialogSelector()\"\r\n (keydown.space)=\"!disabled && openDateDialogSelector()\"\r\n [tabindex]=\"disabled ? -1 : 0\"\r\n [attr.role]=\"'button'\"\r\n class=\"date-range-container\"\r\n>\r\n @if (selectedDateRange()) {\r\n <div class=\"date-range-content\">\r\n <span class=\"date-range-value\">{{ displayStart() }}</span>\r\n <span class=\"date-range-separator\"> ~ </span>\r\n <span class=\"date-range-value\">{{ displayEnd() }}</span>\r\n </div>\r\n } @else if (placeholder) {\r\n <span class=\"date-range-placeholder\">{{ placeholder }}</span>\r\n } @else {\r\n <div class=\"date-range-content\"></div>\r\n }\r\n\r\n <div class=\"date-range-actions\">\r\n @if (selectedDateRange() && !disabled) {\r\n <button\r\n (click)=\"clear($event)\"\r\n type=\"button\"\r\n class=\"date-range-clear-btn\"\r\n [attr.aria-label]=\"'清除日期选择'\"\r\n [tabindex]=\"disabled ? -1 : 0\"\r\n [disabled]=\"disabled\"\r\n (keydown.enter)=\"clear($event)\"\r\n (keydown.space)=\"clear($event)\"\r\n [attr.role]=\"'button'\"\r\n >\r\n <i-tabler name=\"x\" strokeWidth=\"2.5px\" size=\"18px\" class=\"date-range-icon\" />\r\n </button>\r\n }\r\n\r\n <i-tabler name=\"calendar-due\" strokeWidth=\"2px\" size=\"18px\" class=\"date-range-icon\" />\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luoxiao123/angular-material-date-time-range-picker",
3
- "version": "21.0.1",
3
+ "version": "21.1.2",
4
4
  "description": "An Angular Material date-time range picker library component",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -3,55 +3,42 @@ import { DestroyRef, ElementRef, OnInit } from '@angular/core';
3
3
  import { DateRange } from '@angular/material/datepicker';
4
4
  import { ControlValueAccessor, NgControl } from '@angular/forms';
5
5
  import { MatFormFieldControl } from '@angular/material/form-field';
6
- import { Subject, Observable } from 'rxjs';
6
+ import { Subject } from 'rxjs';
7
+ import { MatSidenav } from '@angular/material/sidenav';
7
8
 
8
9
  interface DateTimePickerValue {
9
10
  start: string;
10
11
  end: string;
11
12
  }
12
13
  interface DatePickerModel {
13
- optionalFeatures: boolean;
14
14
  dateTimePicker?: DateTimePickerValue | null;
15
15
  future: boolean;
16
- dateFormat?: string;
17
- valueFormat?: string;
18
16
  }
19
17
  interface TimeRange {
20
18
  label: string;
21
19
  start: string;
22
20
  end: string;
23
21
  }
24
- interface Weekday {
25
- label: string;
26
- data: string;
27
- value: number;
28
- selected: boolean;
29
- }
30
- interface HourType {
31
- label: string;
32
- value: number;
33
- selected: boolean;
34
- }
35
22
 
36
23
  declare class DatePickerComponent implements ControlValueAccessor, MatFormFieldControl<DateTimePickerValue | null> {
37
24
  #private;
25
+ private _dateAdapter;
26
+ private _dateFormats;
38
27
  protected destroyRef: DestroyRef;
39
28
  dateRangeButton?: ElementRef<HTMLButtonElement>;
40
29
  ngControl: NgControl | null;
41
30
  required: boolean;
42
- disabled: boolean;
43
- dateFormat: string;
44
- valueFormat: string;
45
- dateTimePicker: DateTimePickerValue | undefined;
31
+ disabledInput: _angular_core.InputSignal<boolean>;
32
+ private _formDisabled;
46
33
  placeholder: string;
47
- optionalFeatures: _angular_core.InputSignal<boolean>;
48
34
  future: _angular_core.InputSignal<boolean>;
49
35
  selectedDateRange: _angular_core.ModelSignal<DateRange<Date> | undefined>;
50
- toggle: _angular_core.WritableSignal<boolean>;
51
36
  selectionChange: _angular_core.OutputEmitterRef<DateTimePickerValue | undefined>;
52
37
  readonly stateChanges: Subject<void>;
53
38
  private onChange?;
54
39
  private onTouched?;
40
+ protected displayStart: _angular_core.Signal<string>;
41
+ protected displayEnd: _angular_core.Signal<string>;
55
42
  constructor();
56
43
  ref: _angular_core.EffectRef;
57
44
  openDateDialogSelector(): void;
@@ -59,6 +46,7 @@ declare class DatePickerComponent implements ControlValueAccessor, MatFormFieldC
59
46
  registerOnChange(fn: (value: any) => void): void;
60
47
  registerOnTouched(fn: () => void): void;
61
48
  setDisabledState(isDisabled: boolean): void;
49
+ get disabled(): boolean;
62
50
  get empty(): boolean;
63
51
  get shouldPlaceholderFloat(): boolean;
64
52
  get focused(): boolean;
@@ -69,15 +57,18 @@ declare class DatePickerComponent implements ControlValueAccessor, MatFormFieldC
69
57
  get value(): any;
70
58
  setDescribedByIds(ids: string[]): void;
71
59
  onContainerClick(event: MouseEvent): void;
60
+ clear(event?: Event): void;
72
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatePickerComponent, never>;
73
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "date-time-picker", never, { "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; "valueFormat": { "alias": "valueFormat"; "required": false; }; "dateTimePicker": { "alias": "dateTimePicker"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "optionalFeatures": { "alias": "optionalFeatures"; "required": false; "isSignal": true; }; "future": { "alias": "future"; "required": false; "isSignal": true; }; "selectedDateRange": { "alias": "selectedDateRange"; "required": false; "isSignal": true; }; }, { "selectedDateRange": "selectedDateRangeChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
62
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "date-time-picker", never, { "required": { "alias": "required"; "required": false; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; }; "future": { "alias": "future"; "required": false; "isSignal": true; }; "selectedDateRange": { "alias": "selectedDateRange"; "required": false; "isSignal": true; }; }, { "selectedDateRange": "selectedDateRangeChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
74
63
  }
75
64
 
76
65
  declare class DateSelector implements OnInit {
77
66
  #private;
67
+ private _dateAdapter;
68
+ private _dateFormats;
69
+ sidenav?: MatSidenav;
70
+ isMobile: _angular_core.WritableSignal<boolean>;
78
71
  data: DatePickerModel;
79
- dateFormat: string;
80
- valueFormat: string;
81
72
  startDate: _angular_core.ModelSignal<string>;
82
73
  endDate: _angular_core.ModelSignal<string>;
83
74
  startHour: _angular_core.ModelSignal<number | null>;
@@ -85,19 +76,14 @@ declare class DateSelector implements OnInit {
85
76
  endHour: _angular_core.ModelSignal<number | null>;
86
77
  endMinute: _angular_core.ModelSignal<number | null>;
87
78
  future: _angular_core.ModelSignal<boolean>;
88
- optionalFeatures: _angular_core.ModelSignal<boolean>;
89
- relativeDurations: string[][];
90
- fixedDays: string[][];
91
- currentPeriods: string[][];
92
- timeRanges: _angular_core.WritableSignal<TimeRange[]>;
79
+ displayStart: _angular_core.Signal<string>;
80
+ displayEnd: _angular_core.Signal<string>;
81
+ timeRanges: TimeRange[];
93
82
  selectedTimeRange: _angular_core.ModelSignal<TimeRange | undefined>;
94
- allDays: _angular_core.ModelSignal<boolean>;
95
- weekdays: _angular_core.ModelSignal<Weekday[]>;
96
- allHours: _angular_core.ModelSignal<boolean>;
97
- hourTypes: _angular_core.WritableSignal<HourType[]>;
98
83
  selectedDateRange: DateRange<Date> | null;
99
84
  now: Date;
100
85
  selectingStart: boolean;
86
+ constructor();
101
87
  ngOnInit(): void;
102
88
  selectTimeRange(timeRange: TimeRange): void;
103
89
  private processTimeRange;
@@ -106,50 +92,13 @@ declare class DateSelector implements OnInit {
106
92
  updateSelection(start: Date, end: Date): void;
107
93
  submit(): void;
108
94
  dismiss(): void;
109
- getHours(): number[];
110
- getMinutes(): number[];
95
+ readonly hours: number[];
96
+ readonly minutes: number[];
111
97
  updateStartTime(): void;
112
98
  updateEndTime(): void;
113
99
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateSelector, never>;
114
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateSelector, "date-time-picker-selector", never, { "startDate": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "startHour": { "alias": "startHour"; "required": false; "isSignal": true; }; "startMinute": { "alias": "startMinute"; "required": false; "isSignal": true; }; "endHour": { "alias": "endHour"; "required": false; "isSignal": true; }; "endMinute": { "alias": "endMinute"; "required": false; "isSignal": true; }; "future": { "alias": "future"; "required": false; "isSignal": true; }; "optionalFeatures": { "alias": "optionalFeatures"; "required": false; "isSignal": true; }; "selectedTimeRange": { "alias": "selectedTimeRange"; "required": false; "isSignal": true; }; "allDays": { "alias": "allDays"; "required": false; "isSignal": true; }; "weekdays": { "alias": "weekdays"; "required": false; "isSignal": true; }; "allHours": { "alias": "allHours"; "required": false; "isSignal": true; }; }, { "startDate": "startDateChange"; "endDate": "endDateChange"; "startHour": "startHourChange"; "startMinute": "startMinuteChange"; "endHour": "endHourChange"; "endMinute": "endMinuteChange"; "future": "futureChange"; "optionalFeatures": "optionalFeaturesChange"; "selectedTimeRange": "selectedTimeRangeChange"; "allDays": "allDaysChange"; "weekdays": "weekdaysChange"; "allHours": "allHoursChange"; }, never, never, true, never>;
115
- }
116
-
117
- declare class SmartDialogService {
118
- #private;
119
- private ref;
120
- private data;
121
- open<T, R = any>(component: any, config?: {
122
- data?: R;
123
- panelClass?: string | string[];
124
- disableClose?: boolean;
125
- width?: string;
126
- maxWidth?: string;
127
- height?: string;
128
- }): SmartDialogRef<R>;
129
- getData<T = any>(): T;
130
- close(result?: any): void;
131
- clear(): void;
132
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartDialogService, never>;
133
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<SmartDialogService>;
134
- }
135
- type DialogRef<T> = {
136
- close: (value?: T) => void;
137
- afterClosed: () => Observable<T>;
138
- afterOpened: () => Observable<T>;
139
- };
140
- type BottomSheetRef<T> = {
141
- dismiss: (value?: T) => void;
142
- afterDismissed: () => Observable<T>;
143
- afterOpened: () => Observable<T>;
144
- bef: () => Observable<T | undefined>;
145
- };
146
- declare class SmartDialogRef<T = unknown> {
147
- private readonly ref;
148
- constructor(ref: DialogRef<T> | BottomSheetRef<T>);
149
- close(result?: T): void;
150
- afterOpened(): Observable<T>;
151
- afterClosed(): Observable<T>;
100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateSelector, "date-time-picker-selector", never, { "startDate": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "startHour": { "alias": "startHour"; "required": false; "isSignal": true; }; "startMinute": { "alias": "startMinute"; "required": false; "isSignal": true; }; "endHour": { "alias": "endHour"; "required": false; "isSignal": true; }; "endMinute": { "alias": "endMinute"; "required": false; "isSignal": true; }; "future": { "alias": "future"; "required": false; "isSignal": true; }; "selectedTimeRange": { "alias": "selectedTimeRange"; "required": false; "isSignal": true; }; }, { "startDate": "startDateChange"; "endDate": "endDateChange"; "startHour": "startHourChange"; "startMinute": "startMinuteChange"; "endHour": "endHourChange"; "endMinute": "endMinuteChange"; "future": "futureChange"; "selectedTimeRange": "selectedTimeRangeChange"; }, never, never, true, never>;
152
101
  }
153
102
 
154
- export { DatePickerComponent, DateSelector, SmartDialogRef, SmartDialogService };
155
- export type { DatePickerModel, DateTimePickerValue, HourType, TimeRange, Weekday };
103
+ export { DatePickerComponent, DateSelector };
104
+ export type { DatePickerModel, DateTimePickerValue, TimeRange };