@luoxiao123/angular-material-date-time-range-picker 21.1.3 → 21.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -113,7 +113,6 @@ export class AppComponent {
113
113
  <mat-form-field>
114
114
  <mat-label>选择日期时间范围</mat-label>
115
115
  <date-time-picker
116
- matInput
117
116
  [(ngModel)]="selectedRange"
118
117
  [required]="true"
119
118
  />
@@ -104,10 +104,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
104
104
  * @returns 格式化后的日期时间字符串,例如 "2024-01-24 14:30"
105
105
  */
106
106
  function formatDate(date, dateAdapter, dateFormats) {
107
- const datePart = dateAdapter.format(date, dateFormats.display.dateInput);
108
- const hours = date.getHours().toString().padStart(2, '0');
109
- const minutes = date.getMinutes().toString().padStart(2, '0');
110
- return `${datePart} ${hours}:${minutes}`;
107
+ if (!date || isNaN(date.getTime())) {
108
+ return '';
109
+ }
110
+ try {
111
+ const datePart = dateAdapter.format(date, dateFormats.display.dateInput);
112
+ const hours = date.getHours().toString().padStart(2, '0');
113
+ const minutes = date.getMinutes().toString().padStart(2, '0');
114
+ return `${datePart} ${hours}:${minutes}`;
115
+ }
116
+ catch (e) {
117
+ // 降级处理:如果 adapter 格式化失败(例如 date-fns 版本兼容性问题),使用原生方法
118
+ const year = date.getFullYear();
119
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
120
+ const day = date.getDate().toString().padStart(2, '0');
121
+ const hours = date.getHours().toString().padStart(2, '0');
122
+ const minutes = date.getMinutes().toString().padStart(2, '0');
123
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
124
+ }
111
125
  }
112
126
 
113
127
  const DEFAULT_TIME_RANGES = [
@@ -201,8 +215,9 @@ class DateSelector {
201
215
  this.selectedDateRange = new DateRange(start, end);
202
216
  this.#selectionModel.updateSelection(this.selectedDateRange, this);
203
217
  // 初始化时间值
204
- this.startDate.set(!isNaN(start.getTime()) ? start.toISOString() : String(picker.start));
205
- this.endDate.set(!isNaN(end.getTime()) ? end.toISOString() : String(picker.end));
218
+ // 此时 picker.start/end 已经是 ISO 字符串,可以直接使用
219
+ this.startDate.set(String(picker.start));
220
+ this.endDate.set(String(picker.end));
206
221
  this.startHour.set(start.getHours());
207
222
  this.startMinute.set(start.getMinutes());
208
223
  this.endHour.set(end.getHours());
@@ -610,8 +625,20 @@ class DatePickerComponent {
610
625
  openDateDialogSelector() {
611
626
  const isMobile = this.#breakpoints.isMatched([Breakpoints.Handset, Breakpoints.Tablet]);
612
627
  const currentValue = this.#internalValue();
628
+ // 确保传递给 DateSelector 的值是标准的 ISO 字符串格式
629
+ let dialogValue;
630
+ if (currentValue && currentValue.start && currentValue.end) {
631
+ const s = new Date(currentValue.start);
632
+ const e = new Date(currentValue.end);
633
+ if (!isNaN(s.getTime()) && !isNaN(e.getTime())) {
634
+ dialogValue = {
635
+ start: s.toISOString(),
636
+ end: e.toISOString()
637
+ };
638
+ }
639
+ }
613
640
  const data = {
614
- dateTimePicker: currentValue ?? undefined,
641
+ dateTimePicker: dialogValue,
615
642
  future: this.future()
616
643
  };
617
644
  const dialogRef = this.#dialog.open(DateSelector, {
@@ -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/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\n/**\r\n * 格式化日期对象为字符串\r\n * \r\n * 将给定的 Date 对象格式化为包含日期和时间的字符串。\r\n * 日期部分使用提供的 DateAdapter 和 MatDateFormats 进行格式化。\r\n * 时间部分格式化为 HH:mm (24小时制)。\r\n *\r\n * @param date - 要格式化的 Date 对象\r\n * @param dateAdapter - Angular Material 的 DateAdapter,用于处理日期部分的格式化\r\n * @param dateFormats - Angular Material 的 MatDateFormats,包含日期格式配置\r\n * @returns 格式化后的日期时间字符串,例如 \"2024-01-24 14:30\"\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(!isNaN(start.getTime()) ? start.toISOString() : String(picker.start));\r\n this.endDate.set(!isNaN(end.getTime()) ? end.toISOString() : String(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 isTimestamp = 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 let startVal: string | number;\r\n let endVal: string | number;\r\n\r\n if (this.isTimestamp()) {\r\n start.setSeconds(0, 0);\r\n end.setSeconds(0, 0);\r\n startVal = start.getTime();\r\n endVal = end.getTime();\r\n } else {\r\n startVal = formatDate(start, this._dateAdapter, this._dateFormats);\r\n endVal = formatDate(end, this._dateAdapter, this._dateFormats);\r\n }\r\n\r\n const rangeValue: DateTimePickerValue = {\r\n start: startVal,\r\n end: endVal\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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"}
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\n/**\r\n * 格式化日期对象为字符串\r\n * \r\n * 将给定的 Date 对象格式化为包含日期和时间的字符串。\r\n * 日期部分使用提供的 DateAdapter 和 MatDateFormats 进行格式化。\r\n * 时间部分格式化为 HH:mm (24小时制)。\r\n *\r\n * @param date - 要格式化的 Date 对象\r\n * @param dateAdapter - Angular Material 的 DateAdapter,用于处理日期部分的格式化\r\n * @param dateFormats - Angular Material 的 MatDateFormats,包含日期格式配置\r\n * @returns 格式化后的日期时间字符串,例如 \"2024-01-24 14:30\"\r\n */\r\nexport function formatDate(date: Date, dateAdapter: DateAdapter<any>, dateFormats: MatDateFormats): string {\r\n if (!date || isNaN(date.getTime())) {\r\n return '';\r\n }\r\n try {\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 } catch (e) {\r\n // 降级处理:如果 adapter 格式化失败(例如 date-fns 版本兼容性问题),使用原生方法\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const hours = date.getHours().toString().padStart(2, '0');\r\n const minutes = date.getMinutes().toString().padStart(2, '0');\r\n return `${year}-${month}-${day} ${hours}:${minutes}`;\r\n }\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 // 此时 picker.start/end 已经是 ISO 字符串,可以直接使用\r\n this.startDate.set(String(picker.start));\r\n this.endDate.set(String(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 isTimestamp = 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 \r\n // 确保传递给 DateSelector 的值是标准的 ISO 字符串格式\r\n let dialogValue: DateTimePickerValue | undefined;\r\n if (currentValue && currentValue.start && currentValue.end) {\r\n const s = new Date(currentValue.start);\r\n const e = new Date(currentValue.end);\r\n if (!isNaN(s.getTime()) && !isNaN(e.getTime())) {\r\n dialogValue = {\r\n start: s.toISOString(),\r\n end: e.toISOString()\r\n };\r\n }\r\n }\r\n\r\n const data: DatePickerModel = {\r\n dateTimePicker: dialogValue,\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 let startVal: string | number;\r\n let endVal: string | number;\r\n\r\n if (this.isTimestamp()) {\r\n start.setSeconds(0, 0);\r\n end.setSeconds(0, 0);\r\n startVal = start.getTime();\r\n endVal = end.getTime();\r\n } else {\r\n startVal = formatDate(start, this._dateAdapter, this._dateFormats);\r\n endVal = formatDate(end, this._dateAdapter, this._dateFormats);\r\n }\r\n\r\n const rangeValue: DateTimePickerValue = {\r\n start: startVal,\r\n end: endVal\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.1.3",
3
+ "version": "21.1.5",
4
4
  "description": "An Angular Material date-time range picker library component",
5
5
  "type": "module",
6
6
  "keywords": [