ngx-tethys 19.0.0-next.2 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ # [19.0.0](https://github.com/atinc/ngx-tethys/compare/19.0.0-next.3...19.0.0) (2025-03-27)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **date-picker:** fix vercel error ([#3320](https://github.com/atinc/ngx-tethys/issues/3320)) ([daa5a0e](https://github.com/atinc/ngx-tethys/commit/daa5a0e7473c8794c894a4ee0797624c4f3427e2))
11
+
12
+
13
+
14
+ # [19.0.0-next.3](https://github.com/atinc/ngx-tethys/compare/18.2.9...19.0.0-next.3) (2025-03-26)
15
+
16
+
17
+
5
18
  # [19.0.0-next.2](https://github.com/atinc/ngx-tethys/compare/19.0.0-next.1...19.0.0-next.2) (2025-03-21)
6
19
 
7
20
 
@@ -25,6 +38,47 @@ All notable changes to this project will be documented in this file. See [commit
25
38
 
26
39
 
27
40
 
41
+ # [19.0.0-next.2](https://github.com/atinc/ngx-tethys/compare/19.0.0-next.1...19.0.0-next.2) (2025-03-21)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * **util:** export keycodes ([#3311](https://github.com/atinc/ngx-tethys/issues/3311)) ([bb7e99c](https://github.com/atinc/ngx-tethys/commit/bb7e99c3f2226d7e314c4b09beae9d5bfaed1f51))
47
+
48
+
49
+
50
+ # [19.0.0-next.1](https://github.com/atinc/ngx-tethys/compare/19.0.0-next.0...19.0.0-next.1) (2025-03-18)
51
+
52
+
53
+
54
+ # [19.0.0-next.0](https://github.com/atinc/ngx-tethys/compare/18.2.7...19.0.0-next.0) (2025-03-17)
55
+
56
+
57
+ ### Features
58
+
59
+ * upgrade ng to 19 ([5ec421d](https://github.com/atinc/ngx-tethys/commit/5ec421dc6a2972983114d8c5092b6249b4dddc86))
60
+ * upgrade ng to 19.2.x #TINFR-1676 ([675f754](https://github.com/atinc/ngx-tethys/commit/675f7547f389e9f8e5f605be3905f3de9c199844)), closes [#TINFR-1676](https://github.com/atinc/ngx-tethys/issues/TINFR-1676)
61
+
62
+
63
+
64
+ ## [18.2.9](https://github.com/atinc/ngx-tethys/compare/18.2.8...18.2.9) (2025-03-25)
65
+
66
+
67
+ ### Features
68
+
69
+ * **date-picker:** handle zh-cn format show ([#3315](https://github.com/atinc/ngx-tethys/issues/3315)) ([95afd8f](https://github.com/atinc/ngx-tethys/commit/95afd8f03c588f2a3e9584170418be217d801706))
70
+
71
+
72
+
73
+ ## [18.2.8](https://github.com/atinc/ngx-tethys/compare/18.2.7...18.2.8) (2025-03-25)
74
+
75
+
76
+ ### Features
77
+
78
+ * **date-picker:** support date-fns i18n and support thySeparator ([#3313](https://github.com/atinc/ngx-tethys/issues/3313)) ([ce81827](https://github.com/atinc/ngx-tethys/commit/ce818272681bb8f6ce9a240bed4e80d2bfee0054))
79
+
80
+
81
+
28
82
  ## [18.2.7](https://github.com/atinc/ngx-tethys/compare/18.2.6...18.2.7) (2025-03-11)
29
83
 
30
84
 
@@ -3,10 +3,10 @@ import { TinyDate } from 'ngx-tethys/util';
3
3
  import { Subject } from 'rxjs';
4
4
  import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, Signal, SimpleChanges } from '@angular/core';
5
5
  import { ControlValueAccessor } from '@angular/forms';
6
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
6
7
  import { CompatibleValue, RangeAdvancedValue } from './inner-types';
7
8
  import { ThyPicker } from './picker.component';
8
- import { CompatibleDate, DateEntry, DisabledDateFn, ThyDateRangeEntry, ThyPanelMode, ThyShortcutPosition, CompatiblePresets, ThyDateGranularity, ThyDateChangeEvent } from './standard-types';
9
- import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
9
+ import { CompatibleDate, CompatiblePresets, DateEntry, DisabledDateFn, ThyDateChangeEvent, ThyDateGranularity, ThyDateRangeEntry, ThyPanelMode, ThyShortcutPosition } from './standard-types';
10
10
  import * as i0 from "@angular/core";
11
11
  /**
12
12
  * @private
@@ -77,6 +77,11 @@ export declare abstract class AbstractPickerComponent extends TabIndexDisabledCo
77
77
  * @default yyyy-MM-dd
78
78
  */
79
79
  thyFormat: string;
80
+ /**
81
+ * 区间分隔符,不传值默认为 "~"
82
+ */
83
+ thySeparator: string;
84
+ separator: Signal<string>;
80
85
  /**
81
86
  * @description.en-us only for range picker, Whether to automatically take the beginning and ending unixTime of the day
82
87
  * @description.zh-cn 是否取值开始日期的00:00以及截止日期的24:00
@@ -155,7 +160,7 @@ export declare abstract class AbstractPickerComponent extends TabIndexDisabledCo
155
160
  setValue(value: CompatibleDate): void;
156
161
  private setValueByPrecision;
157
162
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractPickerComponent, never>;
158
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPickerComponent, never, never, { "thyMode": { "alias": "thyMode"; "required": false; }; "thyAllowClear": { "alias": "thyAllowClear"; "required": false; }; "thyAutoFocus": { "alias": "thyAutoFocus"; "required": false; }; "thyOpen": { "alias": "thyOpen"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyPlaceHolder": { "alias": "thyPlaceHolder"; "required": false; }; "thyReadonly": { "alias": "thyReadonly"; "required": false; }; "thyOriginClassName": { "alias": "thyOriginClassName"; "required": false; }; "thyPanelClassName": { "alias": "thyPanelClassName"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyTimestampPrecision": { "alias": "thyTimestampPrecision"; "required": false; }; "thyFormat": { "alias": "thyFormat"; "required": false; }; "thyAutoStartAndEnd": { "alias": "thyAutoStartAndEnd"; "required": false; }; "thyDefaultPickerValue": { "alias": "thyDefaultPickerValue"; "required": false; }; "thySuffixIcon": { "alias": "thySuffixIcon"; "required": false; }; "thyShowShortcut": { "alias": "thyShowShortcut"; "required": false; }; "thyShortcutPosition": { "alias": "thyShortcutPosition"; "required": false; }; "thyShortcutPresets": { "alias": "thyShortcutPresets"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; }, { "thyDateChange": "thyDateChange"; "thyOpenChange": "thyOpenChange"; }, never, never, true, never>;
163
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPickerComponent, never, never, { "thyMode": { "alias": "thyMode"; "required": false; }; "thyAllowClear": { "alias": "thyAllowClear"; "required": false; }; "thyAutoFocus": { "alias": "thyAutoFocus"; "required": false; }; "thyOpen": { "alias": "thyOpen"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyPlaceHolder": { "alias": "thyPlaceHolder"; "required": false; }; "thyReadonly": { "alias": "thyReadonly"; "required": false; }; "thyOriginClassName": { "alias": "thyOriginClassName"; "required": false; }; "thyPanelClassName": { "alias": "thyPanelClassName"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyTimestampPrecision": { "alias": "thyTimestampPrecision"; "required": false; }; "thyFormat": { "alias": "thyFormat"; "required": false; }; "thySeparator": { "alias": "thySeparator"; "required": false; }; "thyAutoStartAndEnd": { "alias": "thyAutoStartAndEnd"; "required": false; }; "thyDefaultPickerValue": { "alias": "thyDefaultPickerValue"; "required": false; }; "thySuffixIcon": { "alias": "thySuffixIcon"; "required": false; }; "thyShowShortcut": { "alias": "thyShowShortcut"; "required": false; }; "thyShortcutPosition": { "alias": "thyShortcutPosition"; "required": false; }; "thyShortcutPresets": { "alias": "thyShortcutPresets"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; }, { "thyDateChange": "thyDateChange"; "thyOpenChange": "thyOpenChange"; }, never, never, true, never>;
159
164
  static ngAcceptInputType_thyAllowClear: boolean | string | number;
160
165
  static ngAcceptInputType_thyAutoFocus: boolean | string | number;
161
166
  static ngAcceptInputType_thyOpen: boolean | string | number;
@@ -8,6 +8,7 @@ export interface ThyDatePickerConfig {
8
8
  shortcutRangesPresets: CompatiblePresets;
9
9
  showShortcut: boolean;
10
10
  weekStartsOn: WeekDayIndex;
11
+ separator: string;
11
12
  timestampPrecision: 'seconds' | 'milliseconds';
12
13
  }
13
14
  /**
@@ -8,6 +8,7 @@ export declare class ThyDatePickerConfigService {
8
8
  get showShortcut(): boolean;
9
9
  get shortcutRangesPresets(): import("ngx-tethys/date-picker").CompatiblePresets;
10
10
  get timestampPrecision(): "seconds" | "milliseconds";
11
+ get separator(): string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyDatePickerConfigService, never>;
12
13
  static ɵprov: i0.ɵɵInjectableDeclaration<ThyDatePickerConfigService>;
13
14
  }
@@ -1,9 +1,9 @@
1
1
  import { OnDestroy, OnInit, Signal } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
3
4
  import { TinyDate } from 'ngx-tethys/util';
4
5
  import { AdvancedSelectableCell, RangeAdvancedValue } from '../../inner-types';
5
6
  import { ThyDateGranularity } from '../../standard-types';
6
- import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
7
7
  import * as i0 from "@angular/core";
8
8
  /**
9
9
  * @private
@@ -11,6 +11,7 @@ import * as i0 from "@angular/core";
11
11
  export declare class ThyPicker implements OnChanges, AfterViewInit {
12
12
  private changeDetector;
13
13
  private dateHelper;
14
+ private i18n;
14
15
  isRange: boolean;
15
16
  open: boolean | undefined;
16
17
  disabled: boolean;
@@ -25,6 +26,7 @@ export declare class ThyPicker implements OnChanges, AfterViewInit {
25
26
  flexible: boolean;
26
27
  mode: string;
27
28
  hasBackdrop: boolean;
29
+ separator: string;
28
30
  blur: EventEmitter<Event>;
29
31
  readonly valueChange: EventEmitter<TinyDate | TinyDate[]>;
30
32
  readonly openChange: EventEmitter<boolean>;
@@ -72,6 +74,6 @@ export declare class ThyPicker implements OnChanges, AfterViewInit {
72
74
  getPlaceholder(): string;
73
75
  private updateReadableDate;
74
76
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyPicker, never>;
75
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyPicker, "thy-picker", ["thyPicker"], { "isRange": { "alias": "isRange"; "required": false; }; "open": { "alias": "open"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "className": { "alias": "className"; "required": false; }; "size": { "alias": "size"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "format": { "alias": "format"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "blur": "blur"; "valueChange": "valueChange"; "openChange": "openChange"; "inputChange": "inputChange"; }, never, ["*"], true, never>;
77
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyPicker, "thy-picker", ["thyPicker"], { "isRange": { "alias": "isRange"; "required": false; }; "open": { "alias": "open"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "className": { "alias": "className"; "required": false; }; "size": { "alias": "size"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "flexible": { "alias": "flexible"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "format": { "alias": "format"; "required": false; }; "flexibleDateGranularity": { "alias": "flexibleDateGranularity"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "blur": "blur"; "valueChange": "valueChange"; "openChange": "openChange"; "inputChange": "inputChange"; }, never, ["*"], true, never>;
76
78
  static ngAcceptInputType_hasBackdrop: boolean | string | number;
77
79
  }
@@ -1,4 +1,5 @@
1
1
  import { PipeTransform } from '@angular/core';
2
+ import { ThyDatePickerConfigService } from './date-picker.service';
2
3
  import { AdvancedSelectableCell } from './inner-types';
3
4
  import { CompatibleDate, DateEntry, ThyDateGranularity, ThyDateRangeEntry } from './standard-types';
4
5
  import * as i0 from "@angular/core";
@@ -7,12 +8,16 @@ import * as i0 from "@angular/core";
7
8
  */
8
9
  export declare class ThyDatePickerFormatPipe implements PipeTransform {
9
10
  private dateHelper;
10
- transform(originalValue: CompatibleDate | DateEntry | ThyDateRangeEntry, formatStr?: string): string;
11
+ private datePickerConfigService;
12
+ private i18n;
13
+ transform(originalValue: CompatibleDate | DateEntry | ThyDateRangeEntry, formatStr?: string, separator?: string): string;
11
14
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyDatePickerFormatPipe, never>;
12
15
  static ɵpipe: i0.ɵɵPipeDeclaration<ThyDatePickerFormatPipe, "thyDatePickerFormat", true>;
13
16
  }
14
17
  export declare class ThyQuarterPickerFormatPipe implements PipeTransform {
15
- transform(originalValue: CompatibleDate | DateEntry | ThyDateRangeEntry, formatStr?: string): string;
18
+ private datePickerConfigService;
19
+ constructor(datePickerConfigService: ThyDatePickerConfigService);
20
+ transform(originalValue: CompatibleDate | DateEntry | ThyDateRangeEntry, formatStr?: string, separator?: string): string;
16
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyQuarterPickerFormatPipe, never>;
17
22
  static ɵpipe: i0.ɵɵPipeDeclaration<ThyQuarterPickerFormatPipe, "thyQuarterPickerFormat", true>;
18
23
  }
@@ -1,3 +1,5 @@
1
+ import { Signal } from '@angular/core';
2
+ import { ThyI18nLocale } from 'ngx-tethys/i18n';
1
3
  import { SafeAny } from 'ngx-tethys/types';
2
4
  import { TinyDate } from 'ngx-tethys/util';
3
5
  import { CompatibleValue, RangeAdvancedValue } from './inner-types';
@@ -7,7 +9,7 @@ export declare function transformDateValue(value: CompatibleDate | CompatibleVal
7
9
  withTime?: boolean;
8
10
  flexibleDateGranularity?: ThyDateGranularity;
9
11
  };
10
- export declare function getFlexibleAdvancedReadableValue(tinyDates: TinyDate[], flexibleDateGranularity: ThyDateGranularity): string;
12
+ export declare function getFlexibleAdvancedReadableValue(tinyDates: TinyDate[], flexibleDateGranularity: ThyDateGranularity, separator: string, locale: Signal<ThyI18nLocale>): string;
11
13
  export declare function convertDate(date: Date | number | TinyDate): Date;
12
14
  export declare function hasValue(value: CompatibleValue): boolean;
13
15
  export declare function makeValue(value: CompatibleDate | null, isRange?: boolean): CompatibleValue;
@@ -49,6 +49,9 @@
49
49
  }
50
50
 
51
51
  .#{style.$calendar-prefix-cls}-quarter-panel-quarter {
52
+ white-space: nowrap;
53
+ overflow: hidden;
54
+ text-overflow: ellipsis;
52
55
  display: inline-block;
53
56
  height: 30px;
54
57
  margin: 0 auto;
@@ -1,4 +1,4 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
1
+ import { EventEmitter, OnInit, Signal } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import { DateRangeItemInfo } from './date-range.class';
4
4
  import * as i0 from "@angular/core";
@@ -11,6 +11,7 @@ export declare class ThyDateRange implements OnInit, ControlValueAccessor {
11
11
  private thyPopover;
12
12
  private cdr;
13
13
  private locale;
14
+ private datePickerConfigService;
14
15
  /**
15
16
  * 自定义可选值列表项
16
17
  * @type DateRangeItemInfo[]
@@ -55,6 +56,11 @@ export declare class ThyDateRange implements OnInit, ControlValueAccessor {
55
56
  * 自定义日期禁用日期
56
57
  */
57
58
  thyDisabledDate: (d: Date) => boolean;
59
+ /**
60
+ * 区间分隔符,不传值默认为 "~"
61
+ */
62
+ thySeparator: string;
63
+ separator: Signal<string>;
58
64
  /**
59
65
  * 自定义日期选择日期回调
60
66
  * @type EventEmitter<Date[]>
@@ -79,17 +85,17 @@ export declare class ThyDateRange implements OnInit, ControlValueAccessor {
79
85
  next(): void;
80
86
  openOptionalDateRangesMenu(event: Event): void;
81
87
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyDateRange, never>;
82
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyDateRange, "thy-date-range", never, { "thyOptionalDateRanges": { "alias": "thyOptionalDateRanges"; "required": false; }; "thyHiddenMenu": { "alias": "thyHiddenMenu"; "required": false; }; "thyDisabledSwitch": { "alias": "thyDisabledSwitch"; "required": false; }; "thyCustomTextValue": { "alias": "thyCustomTextValue"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyCustomKey": { "alias": "thyCustomKey"; "required": false; }; "thyPickerFormat": { "alias": "thyPickerFormat"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; }, { "thyOnCalendarChange": "thyOnCalendarChange"; }, never, never, true, never>;
83
- static ngAcceptInputType_thyHiddenMenu: boolean | string |
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyDateRange, "thy-date-range", never, { "thyOptionalDateRanges": { "alias": "thyOptionalDateRanges"; "required": false; }; "thyHiddenMenu": { "alias": "thyHiddenMenu"; "required": false; }; "thyDisabledSwitch": { "alias": "thyDisabledSwitch"; "required": false; }; "thyCustomTextValue": { "alias": "thyCustomTextValue"; "required": false; }; "thyMinDate": { "alias": "thyMinDate"; "required": false; }; "thyMaxDate": { "alias": "thyMaxDate"; "required": false; }; "thyCustomKey": { "alias": "thyCustomKey"; "required": false; }; "thyPickerFormat": { "alias": "thyPickerFormat"; "required": false; }; "thyDisabledDate": { "alias": "thyDisabledDate"; "required": false; }; "thySeparator": { "alias": "thySeparator"; "required": false; }; }, { "thyOnCalendarChange": "thyOnCalendarChange"; }, never, never, true, never>;
89
+ static ngAcceptInputType_thyHiddenMenu:
84
90
  /**
85
- * 自定义日期选择的展示文字
86
- * @default 自定义
91
+ * 禁用左右切换时间段
92
+ * @default false
87
93
  */
88
- number;
89
- static ngAcceptInputType_thyDisabledSwitch: boolean | string |
94
+ boolean | string | number;
95
+ static ngAcceptInputType_thyDisabledSwitch:
90
96
  /**
91
- * 自定义日期选择的展示文字
92
- * @default 自定义
97
+ * 禁用左右切换时间段
98
+ * @default false
93
99
  */
94
- number;
100
+ boolean | string | number;
95
101
  }
@@ -100,7 +100,7 @@ class ThyCalendarHeader {
100
100
  currentDate.getMonth() !== getMonth(new TinyDate().getTime()) || currentDate.getYear() !== getYear(new TinyDate().getTime());
101
101
  }
102
102
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: ThyCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: ThyCalendarHeader, isStandalone: true, selector: "thy-calendar-header", inputs: { currentDate: "currentDate", operationRender: "operationRender" }, outputs: { yearChange: "yearChange", monthChange: "monthChange", dateRangeChange: "dateRangeChange" }, host: { properties: { "class.thy-calendar-full-header-container": "this.className" } }, ngImport: i0, template: "<div class=\"thy-calendar-full-header-left\">\n <thy-date-range\n class=\"select-date-range\"\n [ngModel]=\"date\"\n [thyHiddenMenu]=\"true\"\n [thyCustomKey]=\"'exception'\"\n [thyPickerFormat]=\"pickerFormat\"\n (ngModelChange)=\"onChangeRange($event)\"></thy-date-range>\n @if (isCurrent) {\n <button thyButton=\"outline-default-square\" thySize=\"md\" (click)=\"backToday()\">{{ locale().today }}</button>\n }\n</div>\n<div class=\"thy-calendar-full-header-right\">\n <ng-container *ngTemplateOutlet=\"$any(operationRender); context: { $implicit: operationRender }\">\n <span>{{ operationRender | json }}</span>\n </ng-container>\n</div>\n", dependencies: [{ kind: "component", type: ThyDateRange, selector: "thy-date-range", inputs: ["thyOptionalDateRanges", "thyHiddenMenu", "thyDisabledSwitch", "thyCustomTextValue", "thyMinDate", "thyMaxDate", "thyCustomKey", "thyPickerFormat", "thyDisabledDate"], outputs: ["thyOnCalendarChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThyButton, selector: "thy-button,[thy-button],[thyButton]", inputs: ["thyButton", "thyType", "thyLoading", "thyLoadingText", "thySize", "thyIcon", "thyBlock"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: JsonPipe, name: "json" }] }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: ThyCalendarHeader, isStandalone: true, selector: "thy-calendar-header", inputs: { currentDate: "currentDate", operationRender: "operationRender" }, outputs: { yearChange: "yearChange", monthChange: "monthChange", dateRangeChange: "dateRangeChange" }, host: { properties: { "class.thy-calendar-full-header-container": "this.className" } }, ngImport: i0, template: "<div class=\"thy-calendar-full-header-left\">\n <thy-date-range\n class=\"select-date-range\"\n [ngModel]=\"date\"\n [thyHiddenMenu]=\"true\"\n [thyCustomKey]=\"'exception'\"\n [thyPickerFormat]=\"pickerFormat\"\n (ngModelChange)=\"onChangeRange($event)\"></thy-date-range>\n @if (isCurrent) {\n <button thyButton=\"outline-default-square\" thySize=\"md\" (click)=\"backToday()\">{{ locale().today }}</button>\n }\n</div>\n<div class=\"thy-calendar-full-header-right\">\n <ng-container *ngTemplateOutlet=\"$any(operationRender); context: { $implicit: operationRender }\">\n <span>{{ operationRender | json }}</span>\n </ng-container>\n</div>\n", dependencies: [{ kind: "component", type: ThyDateRange, selector: "thy-date-range", inputs: ["thyOptionalDateRanges", "thyHiddenMenu", "thyDisabledSwitch", "thyCustomTextValue", "thyMinDate", "thyMaxDate", "thyCustomKey", "thyPickerFormat", "thyDisabledDate", "thySeparator"], outputs: ["thyOnCalendarChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThyButton, selector: "thy-button,[thy-button],[thyButton]", inputs: ["thyButton", "thyType", "thyLoading", "thyLoadingText", "thySize", "thyIcon", "thyBlock"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: JsonPipe, name: "json" }] }); }
104
104
  }
105
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: ThyCalendarHeader, decorators: [{
106
106
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-calendar.mjs","sources":["../../../src/calendar/calendar-header.component.ts","../../../src/calendar/calendar-header.component.html","../../../src/calendar/calendar-cells.ts","../../../src/calendar/calendar.component.ts","../../../src/calendar/calendar.component.html","../../../src/calendar/module.ts","../../../src/calendar/ngx-tethys-calendar.ts"],"sourcesContent":["import { DateRangeItemInfo, ThyDateRange } from 'ngx-tethys/date-range';\nimport { endOfMonth, FunctionProp, getMonth, getUnixTime, getYear, startOfMonth, TinyDate } from 'ngx-tethys/util';\n\nimport { JsonPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, EventEmitter, HostBinding, inject, Input, OnInit, Output, Signal, TemplateRef } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport { DateHelperService } from 'ngx-tethys/date-picker';\nimport { injectLocale, ThyCalendarLocale } from 'ngx-tethys/i18n';\n\n/**\n * 日历头部操作栏组件\n * @name thy-calendar-header\n * @order 20\n */\n@Component({\n selector: 'thy-calendar-header',\n templateUrl: './calendar-header.component.html',\n imports: [ThyDateRange, FormsModule, ThyButton, NgTemplateOutlet, JsonPipe]\n})\nexport class ThyCalendarHeader implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n private dateHelper = inject(DateHelperService);\n private locale: Signal<ThyCalendarLocale> = injectLocale('calendar');\n\n @HostBinding('class.thy-calendar-full-header-container') className = true;\n\n /**\n * 当前选中日期\n */\n @Input()\n set currentDate(value: TinyDate) {\n this.setDate(value);\n }\n\n /**\n * \t自定义渲染右侧操作项\n */\n @Input() operationRender: FunctionProp<TemplateRef<any>>;\n\n /**\n * 日期选择范围(年)发生变化的回调\n */\n @Output() readonly yearChange: EventEmitter<number> = new EventEmitter();\n\n /**\n * 日期选择范围(月)发生变化的回调\n */\n @Output() readonly monthChange: EventEmitter<number> = new EventEmitter();\n\n /**\n * 日期选择范围(日期)发生变化的回调\n */\n @Output() readonly dateRangeChange: EventEmitter<DateRangeItemInfo> = new EventEmitter();\n\n public pickerFormat = this.locale().yearMonthFormat;\n\n public dateRanges: DateRangeItemInfo[] = [\n {\n key: 'month',\n text: this.dateHelper.format(new TinyDate().nativeDate, this.pickerFormat),\n begin: getUnixTime(startOfMonth(new TinyDate().getTime())),\n end: getUnixTime(endOfMonth(new TinyDate().getTime())),\n timestamp: {\n interval: 1,\n unit: 'month'\n }\n }\n ];\n\n public date: DateRangeItemInfo;\n\n private _currentDate: TinyDate;\n\n public isCurrent: boolean;\n\n ngOnInit(): void {}\n\n onChangeMonth(month: DateRangeItemInfo) {\n const currentMonth = TinyDate.fromUnixTime(month.end).getMonth();\n this.monthChange.emit(currentMonth);\n }\n\n onChangeYear(year: DateRangeItemInfo) {\n const currentYear = TinyDate.fromUnixTime(year.begin).getFullYear();\n this.yearChange.emit(currentYear);\n }\n\n onChangeRange(dateRange: DateRangeItemInfo) {\n this.isCurrentDate(this._currentDate);\n this.onChangeYear(dateRange);\n this.onChangeMonth(dateRange);\n this.dateRangeChange.emit(dateRange);\n }\n\n backToday() {\n this._currentDate = new TinyDate();\n this.date = { ...this.dateRanges[0] };\n this.onChangeRange(this.date);\n this.cdr.detectChanges();\n }\n\n setDate(value: TinyDate) {\n this.isCurrentDate(value);\n if (this.isCurrent) {\n this._currentDate = value;\n const dateRange = {\n ...this.dateRanges[0],\n key: 'exception',\n text: this._currentDate.format(this.pickerFormat),\n begin: getUnixTime(startOfMonth(this._currentDate.getTime())),\n end: getUnixTime(endOfMonth(this._currentDate.getTime()))\n };\n this.date = dateRange;\n } else {\n this._currentDate = new TinyDate();\n this.date = { ...this.dateRanges[0] };\n }\n }\n\n isCurrentDate(currentDate: TinyDate) {\n this.isCurrent =\n currentDate.getMonth() !== getMonth(new TinyDate().getTime()) || currentDate.getYear() !== getYear(new TinyDate().getTime());\n }\n}\n","<div class=\"thy-calendar-full-header-left\">\n <thy-date-range\n class=\"select-date-range\"\n [ngModel]=\"date\"\n [thyHiddenMenu]=\"true\"\n [thyCustomKey]=\"'exception'\"\n [thyPickerFormat]=\"pickerFormat\"\n (ngModelChange)=\"onChangeRange($event)\"></thy-date-range>\n @if (isCurrent) {\n <button thyButton=\"outline-default-square\" thySize=\"md\" (click)=\"backToday()\">{{ locale().today }}</button>\n }\n</div>\n<div class=\"thy-calendar-full-header-right\">\n <ng-container *ngTemplateOutlet=\"$any(operationRender); context: { $implicit: operationRender }\">\n <span>{{ operationRender | json }}</span>\n </ng-container>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * 自定义日期单元格,模板内容会被追加到单元格,可通过 *thyDateCell 传入模板\n * @name thyDateCell\n */\n@Directive({\n selector: '[thyDateCell]',\n exportAs: 'thyDateCell',\n standalone: true\n})\nexport class ThyDateCellDirective {}\n\n/**\n * 自定义右上角操作项,可通过 *thyCalendarHeaderOperation传入模板\n * @name thyCalendarHeaderOperation\n */\n@Directive({\n selector: '[thyCalendarHeaderOperation]',\n exportAs: 'thyCalendarHeaderOperation',\n standalone: true\n})\nexport class ThyCalendarHeaderOperationDirective {}\n","import { DateRangeItemInfo } from 'ngx-tethys/date-range';\nimport { TinyDate } from 'ngx-tethys/util';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { DateTable, MonthTable } from 'ngx-tethys/date-picker';\nimport { ThyDateCellDirective as DateCell, ThyCalendarHeaderOperationDirective as HeaderOperation } from './calendar-cells';\n\nimport { ThyCalendarHeader } from './calendar-header.component';\n\nexport type CalendarMode = 'month' | 'year';\ntype CalendarDateTemplate = TemplateRef<{ $implicit: Date }>;\n\n/**\n * 日历组件\n * @name thy-calendar\n * @order 10\n */\n@Component({\n selector: 'thy-calendar',\n templateUrl: './calendar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ThyCalendar), multi: true }],\n imports: [ThyCalendarHeader, DateTable, MonthTable]\n})\nexport class ThyCalendar implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @HostBinding('class.thy-calendar-container') className = true;\n\n @HostBinding('class.thy-calendar-full') className1 = true;\n\n /**\n * 展示模式\n * @type month | year\n */\n @Input() thyMode: CalendarMode = 'month';\n\n /**\n * (可双向绑定)展示日期,默认为当前日期\n */\n @Input() thyValue?: Date;\n\n /**\n * 不可选择的日期\n */\n @Input() thyDisabledDate?: (date: Date) => boolean;\n\n /**\n * 日期选择变化的回调\n */\n @Output() thySelectChange: EventEmitter<Date> = new EventEmitter();\n\n /**\n * 日期选择变化的回调\n */\n @Output() thyValueChange: EventEmitter<Date> = new EventEmitter();\n\n /**\n * 日期选择范围变化的回调\n */\n @Output() thyDateRangeChange: EventEmitter<DateRangeItemInfo> = new EventEmitter();\n\n /**\n * (可作为内容)自定义渲染日期单元格,模板内容会被追加到单元格\n */\n @Input() thyDateCell?: CalendarDateTemplate;\n\n /**\n * 追加到单元格的自定义模板\n */\n @ContentChild(DateCell, { read: TemplateRef }) thyDateCellChild?: CalendarDateTemplate;\n get dateCell(): CalendarDateTemplate {\n return (this.thyDateCell || this.thyDateCellChild)!;\n }\n\n /**\n * (可作为内容)自定义渲染右上角操作项\n */\n @Input() thyCalendarHeaderOperation?: CalendarDateTemplate;\n\n /**\n * 右上角操作项的自定义模板\n */\n @ContentChild(HeaderOperation, { read: TemplateRef }) thyCalendarHeaderOperationChild?: CalendarDateTemplate;\n get headerOperation(): CalendarDateTemplate {\n return (this.thyCalendarHeaderOperation || this.thyCalendarHeaderOperationChild)!;\n }\n\n public currentDate = new TinyDate();\n\n public prefixCls = 'thy-calendar-full';\n\n private onChangeFn: (date: Date) => void = () => {};\n\n private onTouchFn: () => void = () => {};\n\n ngOnInit(): void {}\n\n onYearSelect(year: number): void {\n const date = this.currentDate.setYear(year);\n this.updateDate(date);\n }\n\n onMonthSelect(month: number): void {\n const date = this.currentDate.setMonth(month);\n this.updateDate(date);\n }\n\n onDateSelect(date: TinyDate): void {\n // Only currentDate is enough in calendar\n // this.value = date;\n this.updateDate(date);\n }\n\n onDateRangeSelect(date: DateRangeItemInfo) {\n this.thyDateRangeChange.emit(date);\n }\n\n writeValue(value: Date | null): void {\n this.updateDate(new TinyDate(value as Date), false);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (date: Date) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchFn = fn;\n }\n\n private updateDate(date: TinyDate, touched: boolean = true): void {\n this.currentDate = date;\n\n if (touched) {\n this.onChangeFn(date.nativeDate);\n this.onTouchFn();\n this.thySelectChange.emit(date.nativeDate);\n this.thyValueChange.emit(date.nativeDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.thyValue) {\n this.updateDate(new TinyDate(this.thyValue), false);\n }\n }\n}\n","<thy-calendar-header\n [operationRender]=\"headerOperation\"\n (monthChange)=\"onMonthSelect($event)\"\n (yearChange)=\"onYearSelect($event)\"\n (dateRangeChange)=\"onDateRangeSelect($event)\"\n [currentDate]=\"currentDate\"\n></thy-calendar-header>\n\n<div class=\"thy-calendar-panel\">\n <div class=\"thy-calendar-{{ thyMode === 'month' ? 'date' : 'month' }}-panel\">\n <div class=\"thy-calendar-body\">\n @if (thyMode === 'month') {\n <date-table\n [prefixCls]=\"prefixCls\"\n [value]=\"currentDate\"\n [activeDate]=\"currentDate\"\n [selectedValue]=\"currentDate\"\n [cellRender]=\"dateCell\"\n [disabledDate]=\"thyDisabledDate\"\n (valueChange)=\"onDateSelect($event)\"\n ></date-table>\n } @else {\n <month-table [value]=\"currentDate\" [disabledDate]=\"thyDisabledDate\" (valueChange)=\"onDateSelect($event)\"></month-table>\n }\n </div>\n </div>\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyCalendarHeader } from './calendar-header.component';\nimport { ThyCalendar } from './calendar.component';\nimport { ThyCalendarHeaderOperationDirective, ThyDateCellDirective } from './calendar-cells';\nimport { LibPackerModule } from 'ngx-tethys/date-picker';\nimport { ThySelectModule } from 'ngx-tethys/select';\nimport { ThyRadioModule } from 'ngx-tethys/radio';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyDateRangeModule } from 'ngx-tethys/date-range';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThySharedModule,\n ThyIconModule,\n LibPackerModule,\n ThySelectModule,\n ThyRadioModule,\n ThyButtonModule,\n ThyDateRangeModule,\n ThyCalendarHeader,\n ThyCalendar,\n ThyDateCellDirective,\n ThyCalendarHeaderOperationDirective\n ],\n exports: [ThyCalendarHeader, ThyCalendar, ThyDateCellDirective, ThyCalendarHeaderOperationDirective]\n})\nexport class ThyCalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DateCell","HeaderOperation"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-calendar.mjs","sources":["../../../src/calendar/calendar-header.component.ts","../../../src/calendar/calendar-header.component.html","../../../src/calendar/calendar-cells.ts","../../../src/calendar/calendar.component.ts","../../../src/calendar/calendar.component.html","../../../src/calendar/module.ts","../../../src/calendar/ngx-tethys-calendar.ts"],"sourcesContent":["import { DateRangeItemInfo, ThyDateRange } from 'ngx-tethys/date-range';\nimport { endOfMonth, FunctionProp, getMonth, getUnixTime, getYear, startOfMonth, TinyDate } from 'ngx-tethys/util';\n\nimport { JsonPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, EventEmitter, HostBinding, inject, Input, OnInit, Output, Signal, TemplateRef } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport { DateHelperService } from 'ngx-tethys/date-picker';\nimport { injectLocale, ThyCalendarLocale } from 'ngx-tethys/i18n';\n\n/**\n * 日历头部操作栏组件\n * @name thy-calendar-header\n * @order 20\n */\n@Component({\n selector: 'thy-calendar-header',\n templateUrl: './calendar-header.component.html',\n imports: [ThyDateRange, FormsModule, ThyButton, NgTemplateOutlet, JsonPipe]\n})\nexport class ThyCalendarHeader implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n private dateHelper = inject(DateHelperService);\n private locale: Signal<ThyCalendarLocale> = injectLocale('calendar');\n\n @HostBinding('class.thy-calendar-full-header-container') className = true;\n\n /**\n * 当前选中日期\n */\n @Input()\n set currentDate(value: TinyDate) {\n this.setDate(value);\n }\n\n /**\n * \t自定义渲染右侧操作项\n */\n @Input() operationRender: FunctionProp<TemplateRef<any>>;\n\n /**\n * 日期选择范围(年)发生变化的回调\n */\n @Output() readonly yearChange: EventEmitter<number> = new EventEmitter();\n\n /**\n * 日期选择范围(月)发生变化的回调\n */\n @Output() readonly monthChange: EventEmitter<number> = new EventEmitter();\n\n /**\n * 日期选择范围(日期)发生变化的回调\n */\n @Output() readonly dateRangeChange: EventEmitter<DateRangeItemInfo> = new EventEmitter();\n\n public pickerFormat = this.locale().yearMonthFormat;\n\n public dateRanges: DateRangeItemInfo[] = [\n {\n key: 'month',\n text: this.dateHelper.format(new TinyDate().nativeDate, this.pickerFormat),\n begin: getUnixTime(startOfMonth(new TinyDate().getTime())),\n end: getUnixTime(endOfMonth(new TinyDate().getTime())),\n timestamp: {\n interval: 1,\n unit: 'month'\n }\n }\n ];\n\n public date: DateRangeItemInfo;\n\n private _currentDate: TinyDate;\n\n public isCurrent: boolean;\n\n ngOnInit(): void {}\n\n onChangeMonth(month: DateRangeItemInfo) {\n const currentMonth = TinyDate.fromUnixTime(month.end).getMonth();\n this.monthChange.emit(currentMonth);\n }\n\n onChangeYear(year: DateRangeItemInfo) {\n const currentYear = TinyDate.fromUnixTime(year.begin).getFullYear();\n this.yearChange.emit(currentYear);\n }\n\n onChangeRange(dateRange: DateRangeItemInfo) {\n this.isCurrentDate(this._currentDate);\n this.onChangeYear(dateRange);\n this.onChangeMonth(dateRange);\n this.dateRangeChange.emit(dateRange);\n }\n\n backToday() {\n this._currentDate = new TinyDate();\n this.date = { ...this.dateRanges[0] };\n this.onChangeRange(this.date);\n this.cdr.detectChanges();\n }\n\n setDate(value: TinyDate) {\n this.isCurrentDate(value);\n if (this.isCurrent) {\n this._currentDate = value;\n const dateRange = {\n ...this.dateRanges[0],\n key: 'exception',\n text: this._currentDate.format(this.pickerFormat),\n begin: getUnixTime(startOfMonth(this._currentDate.getTime())),\n end: getUnixTime(endOfMonth(this._currentDate.getTime()))\n };\n this.date = dateRange;\n } else {\n this._currentDate = new TinyDate();\n this.date = { ...this.dateRanges[0] };\n }\n }\n\n isCurrentDate(currentDate: TinyDate) {\n this.isCurrent =\n currentDate.getMonth() !== getMonth(new TinyDate().getTime()) || currentDate.getYear() !== getYear(new TinyDate().getTime());\n }\n}\n","<div class=\"thy-calendar-full-header-left\">\n <thy-date-range\n class=\"select-date-range\"\n [ngModel]=\"date\"\n [thyHiddenMenu]=\"true\"\n [thyCustomKey]=\"'exception'\"\n [thyPickerFormat]=\"pickerFormat\"\n (ngModelChange)=\"onChangeRange($event)\"></thy-date-range>\n @if (isCurrent) {\n <button thyButton=\"outline-default-square\" thySize=\"md\" (click)=\"backToday()\">{{ locale().today }}</button>\n }\n</div>\n<div class=\"thy-calendar-full-header-right\">\n <ng-container *ngTemplateOutlet=\"$any(operationRender); context: { $implicit: operationRender }\">\n <span>{{ operationRender | json }}</span>\n </ng-container>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * 自定义日期单元格,模板内容会被追加到单元格,可通过 *thyDateCell 传入模板\n * @name thyDateCell\n */\n@Directive({\n selector: '[thyDateCell]',\n exportAs: 'thyDateCell',\n standalone: true\n})\nexport class ThyDateCellDirective {}\n\n/**\n * 自定义右上角操作项,可通过 *thyCalendarHeaderOperation传入模板\n * @name thyCalendarHeaderOperation\n */\n@Directive({\n selector: '[thyCalendarHeaderOperation]',\n exportAs: 'thyCalendarHeaderOperation',\n standalone: true\n})\nexport class ThyCalendarHeaderOperationDirective {}\n","import { DateRangeItemInfo } from 'ngx-tethys/date-range';\nimport { TinyDate } from 'ngx-tethys/util';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { DateTable, MonthTable } from 'ngx-tethys/date-picker';\nimport { ThyDateCellDirective as DateCell, ThyCalendarHeaderOperationDirective as HeaderOperation } from './calendar-cells';\n\nimport { ThyCalendarHeader } from './calendar-header.component';\n\nexport type CalendarMode = 'month' | 'year';\ntype CalendarDateTemplate = TemplateRef<{ $implicit: Date }>;\n\n/**\n * 日历组件\n * @name thy-calendar\n * @order 10\n */\n@Component({\n selector: 'thy-calendar',\n templateUrl: './calendar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ThyCalendar), multi: true }],\n imports: [ThyCalendarHeader, DateTable, MonthTable]\n})\nexport class ThyCalendar implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @HostBinding('class.thy-calendar-container') className = true;\n\n @HostBinding('class.thy-calendar-full') className1 = true;\n\n /**\n * 展示模式\n * @type month | year\n */\n @Input() thyMode: CalendarMode = 'month';\n\n /**\n * (可双向绑定)展示日期,默认为当前日期\n */\n @Input() thyValue?: Date;\n\n /**\n * 不可选择的日期\n */\n @Input() thyDisabledDate?: (date: Date) => boolean;\n\n /**\n * 日期选择变化的回调\n */\n @Output() thySelectChange: EventEmitter<Date> = new EventEmitter();\n\n /**\n * 日期选择变化的回调\n */\n @Output() thyValueChange: EventEmitter<Date> = new EventEmitter();\n\n /**\n * 日期选择范围变化的回调\n */\n @Output() thyDateRangeChange: EventEmitter<DateRangeItemInfo> = new EventEmitter();\n\n /**\n * (可作为内容)自定义渲染日期单元格,模板内容会被追加到单元格\n */\n @Input() thyDateCell?: CalendarDateTemplate;\n\n /**\n * 追加到单元格的自定义模板\n */\n @ContentChild(DateCell, { read: TemplateRef }) thyDateCellChild?: CalendarDateTemplate;\n get dateCell(): CalendarDateTemplate {\n return (this.thyDateCell || this.thyDateCellChild)!;\n }\n\n /**\n * (可作为内容)自定义渲染右上角操作项\n */\n @Input() thyCalendarHeaderOperation?: CalendarDateTemplate;\n\n /**\n * 右上角操作项的自定义模板\n */\n @ContentChild(HeaderOperation, { read: TemplateRef }) thyCalendarHeaderOperationChild?: CalendarDateTemplate;\n get headerOperation(): CalendarDateTemplate {\n return (this.thyCalendarHeaderOperation || this.thyCalendarHeaderOperationChild)!;\n }\n\n public currentDate = new TinyDate();\n\n public prefixCls = 'thy-calendar-full';\n\n private onChangeFn: (date: Date) => void = () => {};\n\n private onTouchFn: () => void = () => {};\n\n ngOnInit(): void {}\n\n onYearSelect(year: number): void {\n const date = this.currentDate.setYear(year);\n this.updateDate(date);\n }\n\n onMonthSelect(month: number): void {\n const date = this.currentDate.setMonth(month);\n this.updateDate(date);\n }\n\n onDateSelect(date: TinyDate): void {\n // Only currentDate is enough in calendar\n // this.value = date;\n this.updateDate(date);\n }\n\n onDateRangeSelect(date: DateRangeItemInfo) {\n this.thyDateRangeChange.emit(date);\n }\n\n writeValue(value: Date | null): void {\n this.updateDate(new TinyDate(value as Date), false);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (date: Date) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchFn = fn;\n }\n\n private updateDate(date: TinyDate, touched: boolean = true): void {\n this.currentDate = date;\n\n if (touched) {\n this.onChangeFn(date.nativeDate);\n this.onTouchFn();\n this.thySelectChange.emit(date.nativeDate);\n this.thyValueChange.emit(date.nativeDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.thyValue) {\n this.updateDate(new TinyDate(this.thyValue), false);\n }\n }\n}\n","<thy-calendar-header\n [operationRender]=\"headerOperation\"\n (monthChange)=\"onMonthSelect($event)\"\n (yearChange)=\"onYearSelect($event)\"\n (dateRangeChange)=\"onDateRangeSelect($event)\"\n [currentDate]=\"currentDate\"\n></thy-calendar-header>\n\n<div class=\"thy-calendar-panel\">\n <div class=\"thy-calendar-{{ thyMode === 'month' ? 'date' : 'month' }}-panel\">\n <div class=\"thy-calendar-body\">\n @if (thyMode === 'month') {\n <date-table\n [prefixCls]=\"prefixCls\"\n [value]=\"currentDate\"\n [activeDate]=\"currentDate\"\n [selectedValue]=\"currentDate\"\n [cellRender]=\"dateCell\"\n [disabledDate]=\"thyDisabledDate\"\n (valueChange)=\"onDateSelect($event)\"\n ></date-table>\n } @else {\n <month-table [value]=\"currentDate\" [disabledDate]=\"thyDisabledDate\" (valueChange)=\"onDateSelect($event)\"></month-table>\n }\n </div>\n </div>\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyCalendarHeader } from './calendar-header.component';\nimport { ThyCalendar } from './calendar.component';\nimport { ThyCalendarHeaderOperationDirective, ThyDateCellDirective } from './calendar-cells';\nimport { LibPackerModule } from 'ngx-tethys/date-picker';\nimport { ThySelectModule } from 'ngx-tethys/select';\nimport { ThyRadioModule } from 'ngx-tethys/radio';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyDateRangeModule } from 'ngx-tethys/date-range';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThySharedModule,\n ThyIconModule,\n LibPackerModule,\n ThySelectModule,\n ThyRadioModule,\n ThyButtonModule,\n ThyDateRangeModule,\n ThyCalendarHeader,\n ThyCalendar,\n ThyDateCellDirective,\n ThyCalendarHeaderOperationDirective\n ],\n exports: [ThyCalendarHeader, ThyCalendar, ThyDateCellDirective, ThyCalendarHeaderOperationDirective]\n})\nexport class ThyCalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DateCell","HeaderOperation"],"mappings":"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"}