ngx-tethys 18.1.1 → 18.2.0-next.1
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 +36 -0
- package/alert/styles/mixin.scss +1 -1
- package/anchor/style/anchor.scss +4 -2
- package/autocomplete/autocomplete.component.d.ts +2 -1
- package/avatar/styles/avatar.scss +1 -1
- package/back-top/styles/back-top.scss +3 -3
- package/button/styles/button-group.scss +9 -9
- package/button/styles/button.scss +2 -6
- package/button/styles/mixin.scss +6 -53
- package/calendar/calendar-header.component.d.ts +2 -0
- package/calendar/styles/calendar.scss +3 -11
- package/card/styles/card.scss +3 -3
- package/carousel/styles/carousel.scss +10 -10
- package/cascader/cascader.component.d.ts +1 -0
- package/cascader/styles/cascader.scss +3 -2
- package/collapse/styles/collapse.scss +4 -2
- package/color-picker/color-picker-panel.component.d.ts +3 -1
- package/color-picker/styles/alpha.scss +1 -1
- package/color-picker/styles/color-picker-panel.scss +1 -1
- package/color-picker/styles/hue.scss +1 -1
- package/color-picker/styles/saturation.scss +1 -1
- package/comment/styles/mixin.scss +1 -1
- package/copy/copy.directive.d.ts +1 -0
- package/core/index.d.ts +1 -0
- package/core/theme/index.d.ts +2 -0
- package/core/theme/store.d.ts +12 -0
- package/core/theme/theme.d.ts +5 -0
- package/date-picker/abstract-picker.component.d.ts +3 -1
- package/date-picker/date-helper.service.d.ts +3 -0
- package/date-picker/date-picker.config.d.ts +7 -1
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +3 -1
- package/date-picker/lib/calendar/calendar-header.component.d.ts +3 -1
- package/date-picker/lib/calendar/calendar-table.component.d.ts +3 -1
- package/date-picker/lib/date-carousel/date-carousel.component.d.ts +4 -1
- package/date-picker/lib/popups/date-popup.component.d.ts +3 -1
- package/date-picker/lib/popups/inner-popup.component.d.ts +3 -1
- package/date-picker/styles/calendar.scss +1 -1
- package/date-picker/styles/decade-panel.scss +1 -1
- package/date-picker/styles/picker.scss +1 -1
- package/date-picker/styles/range-picker.scss +3 -3
- package/date-picker/styles/year-panel.scss +2 -2
- package/date-range/date-range.component.d.ts +2 -0
- package/date-range/optional-dates/optional-dates.component.d.ts +1 -0
- package/dialog/confirm/confirm.component.d.ts +1 -0
- package/dialog/confirm.config.d.ts +14 -7
- package/dialog/styles/dialog.scss +6 -6
- package/dropdown/styles/dropdown.scss +3 -3
- package/empty/empty.component.d.ts +14 -9
- package/empty/empty.config.d.ts +3 -0
- package/empty/styles/empty.scss +22 -2
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -3
- package/esm2022/calendar/calendar-header.component.mjs +9 -5
- package/esm2022/carousel/carousel.component.mjs +3 -3
- package/esm2022/cascader/cascader.component.mjs +5 -3
- package/esm2022/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -3
- package/esm2022/copy/copy.directive.mjs +7 -5
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/theme/index.mjs +3 -0
- package/esm2022/core/theme/store.mjs +42 -0
- package/esm2022/core/theme/theme.mjs +2 -0
- package/esm2022/date-picker/abstract-picker.component.mjs +4 -2
- package/esm2022/date-picker/base-picker.component.mjs +2 -2
- package/esm2022/date-picker/date-helper.service.mjs +4 -2
- package/esm2022/date-picker/date-picker.component.mjs +1 -1
- package/esm2022/date-picker/date-picker.config.mjs +55 -2
- package/esm2022/date-picker/date-picker.directive.mjs +1 -1
- package/esm2022/date-picker/date-picker.service.mjs +3 -3
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -3
- package/esm2022/date-picker/lib/calendar/calendar-header.component.mjs +3 -1
- package/esm2022/date-picker/lib/calendar/calendar-table.component.mjs +3 -1
- package/esm2022/date-picker/lib/date/date-header.component.mjs +6 -5
- package/esm2022/date-picker/lib/date/date-table.component.mjs +4 -4
- package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +9 -4
- package/esm2022/date-picker/lib/decade/decade-header.component.mjs +3 -3
- package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/month/month-table.component.mjs +3 -2
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +5 -3
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +5 -3
- package/esm2022/date-picker/lib/year/year-header.component.mjs +3 -3
- package/esm2022/date-picker/month-picker.component.mjs +1 -1
- package/esm2022/date-picker/quarter-picker.component.mjs +1 -1
- package/esm2022/date-picker/range-picker.component.mjs +1 -1
- package/esm2022/date-picker/range-picker.directive.mjs +1 -1
- package/esm2022/date-picker/week-picker.component.mjs +1 -1
- package/esm2022/date-picker/year-picker.component.mjs +1 -1
- package/esm2022/date-range/date-range.component.mjs +7 -4
- package/esm2022/date-range/optional-dates/optional-dates.component.mjs +4 -2
- package/esm2022/dialog/confirm/confirm.component.mjs +14 -3
- package/esm2022/dialog/confirm.config.mjs +17 -2
- package/esm2022/empty/empty.component.mjs +7 -2
- package/esm2022/empty/empty.config.mjs +4 -1
- package/esm2022/empty/svgs.mjs +103 -8
- package/esm2022/form/form-validator-loader.mjs +17 -15
- package/esm2022/guider/guider-hint/guider-hint.component.mjs +5 -3
- package/esm2022/i18n/i18n.mjs +2 -0
- package/esm2022/i18n/i18n.service.mjs +39 -0
- package/esm2022/i18n/i18n.token.mjs +8 -0
- package/esm2022/i18n/index.mjs +7 -0
- package/esm2022/i18n/locale.mjs +14 -0
- package/esm2022/i18n/locales/en-us.mjs +147 -0
- package/esm2022/i18n/locales/zh-cn.mjs +127 -0
- package/esm2022/i18n/ngx-tethys-i18n.mjs +5 -0
- package/esm2022/notify/notify.component.mjs +3 -3
- package/esm2022/pagination/pagination.component.mjs +22 -5
- package/esm2022/pagination/pagination.module.mjs +26 -5
- package/esm2022/pagination/pagination.pipe.mjs +22 -1
- package/esm2022/radio/button/radio-button.component.mjs +1 -1
- package/esm2022/radio/radio.component.mjs +1 -1
- package/esm2022/result/result.component.mjs +3 -3
- package/esm2022/select/custom-select/custom-select.component.mjs +9 -3
- package/esm2022/strength/strength.component.mjs +21 -20
- package/esm2022/table/table-skeleton.component.mjs +3 -3
- package/esm2022/time-picker/time-picker-panel.component.mjs +5 -3
- package/esm2022/time-picker/time-picker.component.mjs +4 -2
- package/esm2022/transfer/transfer-list.component.mjs +5 -3
- package/esm2022/tree-select/tree-select.component.mjs +5 -3
- package/esm2022/version.mjs +2 -2
- package/esm2022/watermark/config.mjs +2 -2
- package/esm2022/watermark/watermark.directive.mjs +18 -10
- package/fesm2022/ngx-tethys-autocomplete.mjs +4 -2
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-calendar.mjs +8 -5
- package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +2 -2
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +4 -2
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +4 -2
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +6 -4
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +42 -2
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +95 -30
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +8 -4
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +27 -2
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +111 -8
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +16 -14
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-guider.mjs +4 -2
- package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +338 -0
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -0
- package/fesm2022/ngx-tethys-notify.mjs +2 -2
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +66 -7
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-result.mjs +2 -2
- package/fesm2022/ngx-tethys-result.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +8 -2
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-strength.mjs +20 -19
- package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +2 -2
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +6 -3
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-transfer.mjs +4 -2
- package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +4 -2
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +18 -10
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/form/form-validator-loader.d.ts +2 -0
- package/form/styles/form-check.scss +1 -1
- package/form/styles/forms.scss +2 -3
- package/form/styles/mixin.scss +6 -5
- package/guider/guider-hint/guider-hint.component.d.ts +3 -1
- package/guider/styles/guider-tip.scss +2 -1
- package/i18n/i18n.d.ts +143 -0
- package/i18n/i18n.service.d.ts +19 -0
- package/i18n/i18n.token.d.ts +5 -0
- package/i18n/index.d.ts +6 -0
- package/i18n/locale.d.ts +4 -0
- package/i18n/locales/en-us.d.ts +147 -0
- package/i18n/locales/zh-cn.d.ts +126 -0
- package/icon/examples/all/all.component.scss +3 -1
- package/image/styles/image.scss +15 -11
- package/input/styles/input-group.scss +1 -1
- package/input/styles/input.scss +2 -2
- package/layout/examples/sidebar/sidebar.component.scss +1 -1
- package/layout/styles/layout.scss +3 -3
- package/menu/examples/theme/theme.component.scss +0 -8
- package/menu/styles/theme.scss +4 -4
- package/message/styles/message.scss +1 -1
- package/nav/examples/basic/basic.component.scss +1 -1
- package/nav/examples/extra/extra.component.scss +1 -1
- package/nav/examples/fill/fill.component.scss +1 -1
- package/nav/examples/lite/lite.component.scss +1 -1
- package/nav/examples/pills/pills.component.scss +1 -1
- package/nav/examples/responsive/responsive.component.scss +1 -1
- package/nav/examples/size/size.component.scss +1 -1
- package/nav/examples/tabs/tabs.component.scss +1 -1
- package/nav/examples/type/type.component.scss +1 -1
- package/nav/examples/vertical/vertical.component.scss +1 -1
- package/notify/styles/notify.scss +4 -4
- package/package.json +7 -1
- package/pagination/pagination.component.d.ts +4 -1
- package/pagination/pagination.module.d.ts +1 -1
- package/pagination/pagination.pipe.d.ts +6 -0
- package/pagination/styles/pagination.scss +2 -2
- package/popover/styles.scss +3 -3
- package/property/styles/properties.scss +1 -1
- package/radio/radio.component.d.ts +0 -2
- package/resizable/examples/line/line.component.scss +3 -1
- package/resizable/examples/style.scss +7 -5
- package/result/styles/result.scss +25 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/styles/mixin.scss +2 -3
- package/segment/styles/segment.scss +1 -1
- package/select/custom-select/custom-select.component.d.ts +1 -0
- package/select/styles/select.scss +1 -1
- package/shared/option/styles/option.mixin.scss +1 -1
- package/shared/select/styles/select.mixin.scss +2 -2
- package/slide/examples/drawer-container/drawer-container.component.scss +1 -1
- package/slide/examples/layout/layout.component.scss +4 -2
- package/slide/styles/slide.scss +3 -2
- package/slider/slider.scss +2 -2
- package/stepper/examples/basic/basic.component.scss +3 -1
- package/stepper/examples/icon/icon.component.scss +3 -1
- package/stepper/styles/stepper.scss +7 -3
- package/strength/strength.component.d.ts +21 -2
- package/styles/bootstrap/_variables.scss +14 -876
- package/styles/bootstrap/utilities/_background.scss +27 -5
- package/styles/bootstrap/utilities/_text.scss +29 -31
- package/styles/index.scss +2 -1
- package/styles/mixins/background-variant.scss +2 -10
- package/styles/mixins/utilities.scss +2 -11
- package/styles/modules/cdk/drag-drop.scss +6 -8
- package/styles/modules/close.scss +1 -1
- package/styles/modules/reboot.scss +1 -1
- package/styles/modules/tables.scss +1 -1
- package/styles/modules/utils.scss +0 -17
- package/styles/theme/dark.scss +70 -0
- package/styles/theme/default.scss +70 -0
- package/styles/theme/index.scss +2 -0
- package/styles/variables.scss +114 -76
- package/switch/styles/mixin.scss +0 -13
- package/table/styles/table.scss +7 -19
- package/tabs/styles/tabs.scss +1 -1
- package/tag/styles/mixin.scss +7 -42
- package/tag/styles/tag.scss +2 -2
- package/time-picker/styles/time-panel.scss +1 -1
- package/time-picker/time-picker-panel.component.d.ts +3 -1
- package/time-picker/time-picker.component.d.ts +3 -1
- package/timeline/styles/timeline.scss +2 -2
- package/tooltip/styles.scss +4 -4
- package/transfer/styles/transfer.scss +2 -2
- package/transfer/transfer-list.component.d.ts +3 -1
- package/tree/styles/tree.scss +3 -5
- package/tree-select/tree-select.component.d.ts +1 -0
- package/watermark/config.d.ts +1 -1
- package/watermark/watermark.directive.d.ts +23 -2
- package/carousel/styles/index.scss +0 -1
- package/carousel/styles/variables.scss +0 -5
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, DestroyRef, Directive, Input, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, DestroyRef, effect, Directive, Input, NgModule } from '@angular/core';
|
|
3
3
|
import { Subject, Observable } from 'rxjs';
|
|
4
4
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { MutationObserverFactory } from '@angular/cdk/observers';
|
|
6
6
|
import { coerceBooleanProperty } from 'ngx-tethys/util';
|
|
7
|
+
import { ThyThemeStore } from 'ngx-tethys/core';
|
|
7
8
|
import { CommonModule } from '@angular/common';
|
|
8
9
|
import { ThySharedModule } from 'ngx-tethys/shared';
|
|
9
10
|
|
|
@@ -21,7 +22,7 @@ const DEFAULT_WATERMARK_CONFIG = {
|
|
|
21
22
|
};
|
|
22
23
|
const DEFAULT_CANVAS_CONFIG = {
|
|
23
24
|
degree: 15,
|
|
24
|
-
color: 'rgba(51, 51, 51, 0.12)',
|
|
25
|
+
color: ['rgba(51, 51, 51, 0.12)', 'rgb(60, 65, 74)'],
|
|
25
26
|
fontSize: 12,
|
|
26
27
|
textLineHeight: 20,
|
|
27
28
|
gutter: [250, 200]
|
|
@@ -32,6 +33,13 @@ const DEFAULT_CANVAS_CONFIG = {
|
|
|
32
33
|
* @name thyWatermark
|
|
33
34
|
*/
|
|
34
35
|
class ThyWatermarkDirective {
|
|
36
|
+
/**
|
|
37
|
+
* 水印内容
|
|
38
|
+
*/
|
|
39
|
+
set thyWatermark(value) {
|
|
40
|
+
value = value?.replace(/^\"|\"$/g, '');
|
|
41
|
+
this.content = !!value ? value : '';
|
|
42
|
+
}
|
|
35
43
|
constructor() {
|
|
36
44
|
this.el = inject(ElementRef);
|
|
37
45
|
/**
|
|
@@ -40,13 +48,12 @@ class ThyWatermarkDirective {
|
|
|
40
48
|
this.thyDisabled = false;
|
|
41
49
|
this.createWatermark$ = new Subject();
|
|
42
50
|
this.destroyRef = inject(DestroyRef);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.content = !!value ? value : '';
|
|
51
|
+
this.thyThemeStore = inject(ThyThemeStore);
|
|
52
|
+
effect(() => {
|
|
53
|
+
if (!this.thyDisabled && this.thyThemeStore.theme()) {
|
|
54
|
+
this.refreshWatermark();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
50
57
|
}
|
|
51
58
|
ngOnInit() {
|
|
52
59
|
if (!this.thyDisabled) {
|
|
@@ -90,6 +97,7 @@ class ThyWatermarkDirective {
|
|
|
90
97
|
...DEFAULT_CANVAS_CONFIG,
|
|
91
98
|
...(this.thyCanvasConfig || {})
|
|
92
99
|
};
|
|
100
|
+
color = this.thyThemeStore.normalizeColor(color);
|
|
93
101
|
const [xGutter, yGutter] = gutter;
|
|
94
102
|
const canvas = document.createElement('canvas');
|
|
95
103
|
const ctx = canvas.getContext('2d');
|
|
@@ -181,7 +189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
181
189
|
selector: '[thyWatermark]',
|
|
182
190
|
standalone: true
|
|
183
191
|
}]
|
|
184
|
-
}], propDecorators: { thyDisabled: [{
|
|
192
|
+
}], ctorParameters: () => [], propDecorators: { thyDisabled: [{
|
|
185
193
|
type: Input,
|
|
186
194
|
args: [{ transform: coerceBooleanProperty }]
|
|
187
195
|
}], thyWatermark: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: 'rgba(51, 51, 51, 0.12)',\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, Input, ElementRef, OnInit, SimpleChanges, OnChanges, inject, DestroyRef } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport interface ThyCanvasConfigType {\n degree?: number;\n color?: string;\n fontSize?: number | string;\n textLineHeight?: number;\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]',\n standalone: true\n})\nexport class ThyWatermarkDirective implements OnInit, OnChanges {\n private el = inject(ElementRef);\n\n /**\n * 是否禁用,默认为 false\n */\n @Input({ transform: coerceBooleanProperty })\n thyDisabled: boolean = false;\n\n content: string;\n /**\n * 水印内容\n */\n @Input()\n set thyWatermark(value: string) {\n value = value?.replace(/^\\\"|\\\"$/g, '');\n this.content = !!value ? value : '';\n }\n\n /**\n * canvas样式配置\n */\n @Input() thyCanvasConfig: ThyCanvasConfigType;\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver;\n\n private canvas: HTMLCanvasElement;\n\n private wmDiv: HTMLElement;\n\n private readonly destroyRef = inject(DestroyRef);\n\n ngOnInit() {\n if (!this.thyDisabled) {\n this.createWatermark$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {});\n });\n this.createWatermark();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyWatermark, thyDisabled } = changes;\n const thyWatermarkChange = () => {\n if (thyWatermark.firstChange) return;\n if (thyWatermark.currentValue) {\n this.refreshWatermark();\n }\n };\n const thyDisabledChange = () => {\n if (thyDisabled.firstChange) return;\n thyDisabled?.currentValue ? this.removeWatermark() : this.refreshWatermark();\n };\n thyWatermark && thyWatermarkChange();\n thyDisabled && thyDisabledChange();\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n let { gutter, fontSize, color, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig || {})\n };\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat('' + fontSize)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content.replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body').insertBefore(fakeBox, document.querySelector('body').firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content.split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', '' + (canvasWidth + xGutter));\n canvas.setAttribute('height', '' + (canvasHeight + yGutter));\n\n ctx.font = `${parseFloat('' + fontSize)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv, {\n attributes: true\n });\n }\n stream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: ['rgba(51, 51, 51, 0.12)', 'rgb(60, 65, 74)'],\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, Input, ElementRef, OnInit, SimpleChanges, OnChanges, inject, DestroyRef, effect } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyThemeStore } from 'ngx-tethys/core';\n\n/**\n * @public\n * 水印样式配置\n */\nexport interface ThyCanvasConfigType {\n /**\n * 偏移角度\n */\n degree?: number;\n /**\n * 字体颜色。如果传的是数组,第一个为默认主题的字体颜色,第二个为黑暗主题的字体颜色\n */\n color?: string | string[];\n /**\n * 字体大小\n */\n fontSize?: number | string;\n /**\n * 文本行高\n */\n textLineHeight?: number;\n /**\n * 横纵间距\n */\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]',\n standalone: true\n})\nexport class ThyWatermarkDirective implements OnInit, OnChanges {\n private el = inject(ElementRef);\n\n /**\n * 是否禁用,默认为 false\n */\n @Input({ transform: coerceBooleanProperty })\n thyDisabled: boolean = false;\n\n content: string;\n /**\n * 水印内容\n */\n @Input()\n set thyWatermark(value: string) {\n value = value?.replace(/^\\\"|\\\"$/g, '');\n this.content = !!value ? value : '';\n }\n\n /**\n * 水印样式配置\n */\n @Input() thyCanvasConfig: ThyCanvasConfigType;\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver;\n\n private canvas: HTMLCanvasElement;\n\n private wmDiv: HTMLElement;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private thyThemeStore = inject(ThyThemeStore);\n\n constructor() {\n effect(() => {\n if (!this.thyDisabled && this.thyThemeStore.theme()) {\n this.refreshWatermark();\n }\n });\n }\n\n ngOnInit() {\n if (!this.thyDisabled) {\n this.createWatermark$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {});\n });\n\n this.createWatermark();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyWatermark, thyDisabled } = changes;\n const thyWatermarkChange = () => {\n if (thyWatermark.firstChange) return;\n if (thyWatermark.currentValue) {\n this.refreshWatermark();\n }\n };\n const thyDisabledChange = () => {\n if (thyDisabled.firstChange) return;\n thyDisabled?.currentValue ? this.removeWatermark() : this.refreshWatermark();\n };\n thyWatermark && thyWatermarkChange();\n thyDisabled && thyDisabledChange();\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n let { gutter, fontSize, color, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig || {})\n };\n color = this.thyThemeStore.normalizeColor(color);\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat('' + fontSize)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content.replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body').insertBefore(fakeBox, document.querySelector('body').firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content.split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', '' + (canvasWidth + xGutter));\n canvas.setAttribute('height', '' + (canvasHeight + yGutter));\n\n ctx.font = `${parseFloat('' + fontSize)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv, {\n attributes: true\n });\n }\n stream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.2.0-next.1');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe;;ACFlD;;AAEG;;;;"}
|
|
@@ -8,6 +8,8 @@ export declare const ERROR_VALUE_REPLACE_REGEX: RegExp;
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class ThyFormValidatorLoader {
|
|
10
10
|
private config;
|
|
11
|
+
private locale;
|
|
12
|
+
private globalValidationMessages;
|
|
11
13
|
private getDefaultValidationMessage;
|
|
12
14
|
constructor(config: ThyFormValidatorGlobalConfig);
|
|
13
15
|
get validationMessages(): ThyFormValidationMessages;
|
package/form/styles/forms.scss
CHANGED
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
border-radius: 0;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
// @include box-shadow($input-box-shadow);
|
|
38
37
|
@include transition.transition(bootstrap-variables.$input-transition);
|
|
39
38
|
|
|
40
39
|
// Unstyle the caret on `<select>`s in IE10+.
|
|
@@ -244,9 +243,9 @@
|
|
|
244
243
|
|
|
245
244
|
// Avoid using mixin so we can pass custom focus shadow properly
|
|
246
245
|
@if variables.$enable-shadows {
|
|
247
|
-
box-shadow: variables.$
|
|
246
|
+
box-shadow: variables.$box-shadow-none, variables.$box-shadow-none;
|
|
248
247
|
} @else {
|
|
249
|
-
box-shadow:
|
|
248
|
+
box-shadow: variables.$box-shadow-none;
|
|
250
249
|
}
|
|
251
250
|
}
|
|
252
251
|
|
package/form/styles/mixin.scss
CHANGED
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
outline: 0;
|
|
24
24
|
// Avoid using mixin so we can pass custom focus shadow properly
|
|
25
25
|
@if variables.$enable-shadows {
|
|
26
|
-
box-shadow: variables.$
|
|
26
|
+
box-shadow: variables.$box-shadow-none, variables.$box-shadow-none;
|
|
27
27
|
} @else {
|
|
28
|
-
box-shadow:
|
|
28
|
+
box-shadow: variables.$box-shadow-none;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
&:not([disabled]):not(.disabled):not(.is-invalid) {
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
display: none;
|
|
49
49
|
width: 100%;
|
|
50
50
|
margin-top: bootstrap-variables.$form-feedback-margin-top;
|
|
51
|
-
// font-size: $form-feedback-font-size;
|
|
52
51
|
color: $color;
|
|
53
52
|
}
|
|
54
53
|
|
|
@@ -140,7 +139,9 @@
|
|
|
140
139
|
|
|
141
140
|
&:focus {
|
|
142
141
|
~ .custom-control-label::before {
|
|
143
|
-
box-shadow:
|
|
142
|
+
box-shadow:
|
|
143
|
+
0 0 0 1px bootstrap-variables.$body-bg,
|
|
144
|
+
0 0 0 bootstrap-variables.$input-focus-width rgba($color, 0.25);
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
}
|
|
@@ -181,7 +182,7 @@
|
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
@mixin set-select-arrow() {
|
|
184
|
-
content: '\e6b8';
|
|
185
|
+
content: '\e6b8';
|
|
185
186
|
font: normal normal normal 14px/1 wtf;
|
|
186
187
|
position: absolute;
|
|
187
188
|
right: 12px;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { OnInit, TemplateRef } from '@angular/core';
|
|
1
|
+
import { OnInit, TemplateRef, Signal } from '@angular/core';
|
|
2
2
|
import { ThyGuiderRef } from '../guider-ref';
|
|
3
3
|
import { ThyGuiderStep } from '../guider.class';
|
|
4
4
|
import { ThyGuiderStepRef } from '../guider-step-ref';
|
|
5
|
+
import { ThyGuiderLocale } from 'ngx-tethys/i18n';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
7
8
|
* @private
|
|
8
9
|
*/
|
|
9
10
|
export declare class ThyGuiderHint implements OnInit {
|
|
10
11
|
guiderHint: boolean;
|
|
12
|
+
locale: Signal<ThyGuiderLocale>;
|
|
11
13
|
guiderRef: ThyGuiderRef;
|
|
12
14
|
stepRef: ThyGuiderStepRef;
|
|
13
15
|
descriptionString: string;
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
flex-direction: column;
|
|
36
36
|
display: flex;
|
|
37
37
|
font-size: 14px;
|
|
38
|
+
background-color: variables.$bg-panel;
|
|
38
39
|
color: variables.$gray-700;
|
|
39
40
|
letter-spacing: 0;
|
|
40
41
|
line-height: 26px;
|
|
@@ -71,7 +72,7 @@
|
|
|
71
72
|
box-sizing: border-box;
|
|
72
73
|
&.active {
|
|
73
74
|
border: 2px solid variables.$primary;
|
|
74
|
-
background-color: variables.$
|
|
75
|
+
background-color: variables.$bg-default;
|
|
75
76
|
width: 7px;
|
|
76
77
|
height: 7px;
|
|
77
78
|
margin: 0 4px;
|
package/i18n/i18n.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export type ThyModuleType = 'datePicker' | 'dateRange' | 'timePicker' | 'calendar' | 'autocomplete' | 'transfer' | 'colorPicker' | 'strength' | 'guider' | 'copy' | 'dialog' | 'select' | 'treeSelect' | 'cascader' | 'pagination' | 'form' | 'empty';
|
|
2
|
+
export type ThyModuleLocaleType<K extends ThyModuleType> = ThyI18nLocale[K];
|
|
3
|
+
export interface ThyI18nLocale {
|
|
4
|
+
id: string;
|
|
5
|
+
datePicker: ThyDatePickerLocale;
|
|
6
|
+
dateRange: ThyDateRangeLocale;
|
|
7
|
+
timePicker: ThyTimePickerLocale;
|
|
8
|
+
calendar: ThyCalendarLocale;
|
|
9
|
+
autocomplete: ThyAutoCompleteLocale;
|
|
10
|
+
transfer: ThyTransferLocale;
|
|
11
|
+
colorPicker: ThyColorPickerLocale;
|
|
12
|
+
strength: ThyStrengthLocale;
|
|
13
|
+
guider: ThyGuiderLocale;
|
|
14
|
+
copy: ThyCopyLocale;
|
|
15
|
+
dialog: ThyDialogLocale;
|
|
16
|
+
select: ThySelectLocale;
|
|
17
|
+
treeSelect: ThyTreeSelectLocale;
|
|
18
|
+
cascader: ThyCascaderLocale;
|
|
19
|
+
pagination: ThyPaginationLocale;
|
|
20
|
+
form: ThyFormLocale;
|
|
21
|
+
empty: ThyEmptyLocale;
|
|
22
|
+
}
|
|
23
|
+
export interface ThyDatePickerLocale {
|
|
24
|
+
yearFormat: string;
|
|
25
|
+
monthFormat: string;
|
|
26
|
+
zhMonthFormat: string;
|
|
27
|
+
weekFormat: string;
|
|
28
|
+
fullWeekFormat: string;
|
|
29
|
+
weekThFormat: string;
|
|
30
|
+
dateFormat: string;
|
|
31
|
+
yearText: string;
|
|
32
|
+
quarterText: string;
|
|
33
|
+
monthText: string;
|
|
34
|
+
week: string;
|
|
35
|
+
prefixWeek: string;
|
|
36
|
+
previousYear: string;
|
|
37
|
+
nextYear: string;
|
|
38
|
+
previousMonth: string;
|
|
39
|
+
nextMonth: string;
|
|
40
|
+
today: string;
|
|
41
|
+
tomorrow: string;
|
|
42
|
+
nextWeek: string;
|
|
43
|
+
lastSevenDays: string;
|
|
44
|
+
lastThirtyDays: string;
|
|
45
|
+
currentMonth: string;
|
|
46
|
+
currentWeek: string;
|
|
47
|
+
advance: string;
|
|
48
|
+
custom: string;
|
|
49
|
+
startDate: string;
|
|
50
|
+
endDate: string;
|
|
51
|
+
setTime: string;
|
|
52
|
+
placeholder: string;
|
|
53
|
+
ok: string;
|
|
54
|
+
clear: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ThyDateRangeLocale {
|
|
57
|
+
custom: string;
|
|
58
|
+
currentWeek: string;
|
|
59
|
+
currentMonth: string;
|
|
60
|
+
}
|
|
61
|
+
export interface ThyTimePickerLocale {
|
|
62
|
+
placeholder: string;
|
|
63
|
+
now: string;
|
|
64
|
+
ok: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ThyCalendarLocale {
|
|
67
|
+
today: string;
|
|
68
|
+
yearMonthFormat: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ThyAutoCompleteLocale {
|
|
71
|
+
empty: string;
|
|
72
|
+
}
|
|
73
|
+
export interface ThyTransferLocale {
|
|
74
|
+
maxLimit: string;
|
|
75
|
+
maxLockLimit: string;
|
|
76
|
+
unlocked: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ThyColorPickerLocale {
|
|
79
|
+
defaultColor: string;
|
|
80
|
+
noFillColor: string;
|
|
81
|
+
recentUsedColor: string;
|
|
82
|
+
customColor: string;
|
|
83
|
+
none: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ThyStrengthLocale {
|
|
86
|
+
highest: string;
|
|
87
|
+
high: string;
|
|
88
|
+
medium: string;
|
|
89
|
+
low: string;
|
|
90
|
+
}
|
|
91
|
+
export interface ThyGuiderLocale {
|
|
92
|
+
skip: string;
|
|
93
|
+
prev: string;
|
|
94
|
+
next: string;
|
|
95
|
+
finish: string;
|
|
96
|
+
}
|
|
97
|
+
export interface ThyCopyLocale {
|
|
98
|
+
tips: string;
|
|
99
|
+
success: string;
|
|
100
|
+
error: string;
|
|
101
|
+
}
|
|
102
|
+
export interface ThyDialogLocale {
|
|
103
|
+
title: string;
|
|
104
|
+
ok: string;
|
|
105
|
+
cancel: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ThySelectLocale {
|
|
108
|
+
placeholder: string;
|
|
109
|
+
empty: string;
|
|
110
|
+
}
|
|
111
|
+
export interface ThyTreeSelectLocale {
|
|
112
|
+
placeholder: string;
|
|
113
|
+
empty: string;
|
|
114
|
+
}
|
|
115
|
+
export interface ThyCascaderLocale {
|
|
116
|
+
placeholder: string;
|
|
117
|
+
empty: string;
|
|
118
|
+
}
|
|
119
|
+
export interface ThyPaginationLocale {
|
|
120
|
+
page: string;
|
|
121
|
+
total: string;
|
|
122
|
+
totalCount: string;
|
|
123
|
+
jumpTo: string;
|
|
124
|
+
firstPage: string;
|
|
125
|
+
lastPage: string;
|
|
126
|
+
defaultUnit: string;
|
|
127
|
+
}
|
|
128
|
+
export interface ThyFormLocale {
|
|
129
|
+
required: string;
|
|
130
|
+
maxlength: string;
|
|
131
|
+
minlength: string;
|
|
132
|
+
uniqueCheck: string;
|
|
133
|
+
email: string;
|
|
134
|
+
confirm: string;
|
|
135
|
+
pattern: string;
|
|
136
|
+
number: string;
|
|
137
|
+
url: string;
|
|
138
|
+
max: string;
|
|
139
|
+
min: string;
|
|
140
|
+
}
|
|
141
|
+
export interface ThyEmptyLocale {
|
|
142
|
+
noDataText: string;
|
|
143
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { ThyI18nLocale } from './index';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ThyI18nService {
|
|
5
|
+
private locales;
|
|
6
|
+
private defaultLocaleId;
|
|
7
|
+
private locale;
|
|
8
|
+
/**
|
|
9
|
+
* 设置语言,支持传入 zh-cn(或zh-CN)、 en-us(或en-US)
|
|
10
|
+
* @param id
|
|
11
|
+
*/
|
|
12
|
+
setLocale(id: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* 获取当前语言
|
|
15
|
+
*/
|
|
16
|
+
getLocale(): Signal<ThyI18nLocale>;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThyI18nService, never>;
|
|
18
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ThyI18nService>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { ThyI18nLocale } from './i18n';
|
|
3
|
+
export declare const THY_I18N_LOCALE_ID: InjectionToken<string>;
|
|
4
|
+
export declare const THY_I18N_ZH_CN: InjectionToken<ThyI18nLocale>;
|
|
5
|
+
export declare const THY_I18N_EN_US: InjectionToken<ThyI18nLocale>;
|
package/i18n/index.d.ts
ADDED
package/i18n/locale.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { ThyModuleType, ThyI18nLocale, ThyModuleLocaleType } from './index';
|
|
3
|
+
export declare function useLocale(): Signal<ThyI18nLocale>;
|
|
4
|
+
export declare function injectLocale<K extends ThyModuleType>(key: K): Signal<ThyModuleLocaleType<K>>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
id: string;
|
|
3
|
+
datePicker: {
|
|
4
|
+
yearFormat: string;
|
|
5
|
+
monthFormat: string;
|
|
6
|
+
zhMonthFormat: string;
|
|
7
|
+
weekFormat: string;
|
|
8
|
+
fullWeekFormat: string;
|
|
9
|
+
weekThFormat: string;
|
|
10
|
+
dateFormat: string;
|
|
11
|
+
yearText: string;
|
|
12
|
+
quarterText: string;
|
|
13
|
+
monthText: string;
|
|
14
|
+
week: string;
|
|
15
|
+
prefixWeek: string;
|
|
16
|
+
previousYear: string;
|
|
17
|
+
nextYear: string;
|
|
18
|
+
previousMonth: string;
|
|
19
|
+
nextMonth: string;
|
|
20
|
+
today: string;
|
|
21
|
+
tomorrow: string;
|
|
22
|
+
nextWeek: string;
|
|
23
|
+
lastSevenDays: string;
|
|
24
|
+
lastThirtyDays: string;
|
|
25
|
+
currentMonth: string;
|
|
26
|
+
currentWeek: string;
|
|
27
|
+
advance: string;
|
|
28
|
+
custom: string;
|
|
29
|
+
startDate: string;
|
|
30
|
+
endDate: string;
|
|
31
|
+
setTime: string;
|
|
32
|
+
placeholder: string;
|
|
33
|
+
ok: string;
|
|
34
|
+
clear: string;
|
|
35
|
+
};
|
|
36
|
+
dateRange: {
|
|
37
|
+
custom: string;
|
|
38
|
+
currentWeek: string;
|
|
39
|
+
currentMonth: string;
|
|
40
|
+
};
|
|
41
|
+
timePicker: {
|
|
42
|
+
placeholder: string;
|
|
43
|
+
now: string;
|
|
44
|
+
ok: string;
|
|
45
|
+
};
|
|
46
|
+
calendar: {
|
|
47
|
+
today: string;
|
|
48
|
+
yearMonthFormat: string;
|
|
49
|
+
};
|
|
50
|
+
autocomplete: {
|
|
51
|
+
empty: string;
|
|
52
|
+
};
|
|
53
|
+
transfer: {
|
|
54
|
+
maxLimit: string;
|
|
55
|
+
maxLockLimit: string;
|
|
56
|
+
unlocked: string;
|
|
57
|
+
};
|
|
58
|
+
colorPicker: {
|
|
59
|
+
defaultColor: string;
|
|
60
|
+
noFillColor: string;
|
|
61
|
+
recentUsedColor: string;
|
|
62
|
+
customColor: string;
|
|
63
|
+
none: string;
|
|
64
|
+
};
|
|
65
|
+
strength: {
|
|
66
|
+
highest: string;
|
|
67
|
+
high: string;
|
|
68
|
+
medium: string;
|
|
69
|
+
low: string;
|
|
70
|
+
};
|
|
71
|
+
guider: {
|
|
72
|
+
skip: string;
|
|
73
|
+
prev: string;
|
|
74
|
+
next: string;
|
|
75
|
+
finish: string;
|
|
76
|
+
};
|
|
77
|
+
copy: {
|
|
78
|
+
tips: string;
|
|
79
|
+
success: string;
|
|
80
|
+
error: string;
|
|
81
|
+
};
|
|
82
|
+
dialog: {
|
|
83
|
+
title: string;
|
|
84
|
+
ok: string;
|
|
85
|
+
cancel: string;
|
|
86
|
+
};
|
|
87
|
+
select: {
|
|
88
|
+
placeholder: string;
|
|
89
|
+
empty: string;
|
|
90
|
+
};
|
|
91
|
+
treeSelect: {
|
|
92
|
+
placeholder: string;
|
|
93
|
+
empty: string;
|
|
94
|
+
};
|
|
95
|
+
cascader: {
|
|
96
|
+
placeholder: string;
|
|
97
|
+
empty: string;
|
|
98
|
+
};
|
|
99
|
+
pagination: {
|
|
100
|
+
page: string;
|
|
101
|
+
order: string;
|
|
102
|
+
total: string;
|
|
103
|
+
totalCount: string;
|
|
104
|
+
jumpTo: string;
|
|
105
|
+
firstPage: string;
|
|
106
|
+
lastPage: string;
|
|
107
|
+
defaultUnit: string;
|
|
108
|
+
};
|
|
109
|
+
form: {
|
|
110
|
+
required: string;
|
|
111
|
+
maxlength: string;
|
|
112
|
+
minlength: string;
|
|
113
|
+
uniqueCheck: string;
|
|
114
|
+
email: string;
|
|
115
|
+
confirm: string;
|
|
116
|
+
pattern: string;
|
|
117
|
+
number: string;
|
|
118
|
+
url: string;
|
|
119
|
+
max: string;
|
|
120
|
+
min: string;
|
|
121
|
+
};
|
|
122
|
+
empty: {
|
|
123
|
+
noDataText: string;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
export default _default;
|
|
127
|
+
/**
|
|
128
|
+
* Format options:
|
|
129
|
+
* | Field type | Format | Description | Example Value |
|
|
130
|
+
* |--------------------|-------------|--------------------------------------------|---------------------------------|
|
|
131
|
+
* | Year | y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |
|
|
132
|
+
* | | yy | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |
|
|
133
|
+
* | | yyy | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |
|
|
134
|
+
* | | yyyy | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |
|
|
135
|
+
* | Month | M | Numeric: 1 digit | 9, 12 |
|
|
136
|
+
* | | MM | Numeric: 2 digits + zero padded | 09, 12 |
|
|
137
|
+
* | | MMM | Abbreviated | Sep |
|
|
138
|
+
* | | MMMM | Wide | September |
|
|
139
|
+
* | | MMMMM | Narrow | S |
|
|
140
|
+
* | Week day | E, EE & EEE | Abbreviated | Tue |
|
|
141
|
+
* | | EEEE | Wide | Tuesday |
|
|
142
|
+
* | | EEEEE | Narrow | T |
|
|
143
|
+
* | | EEEEEE | Short | Tu |
|
|
144
|
+
* | ISO Week of year | w | Numeric: minimum digits | 1... 53 |
|
|
145
|
+
* | | ww | Numeric: 2 digits + zero padded | 01... 53 |
|
|
146
|
+
*
|
|
147
|
+
*/
|