From 1a36f0f75824859d9657759bb88fc4f1cb4fa368 Mon Sep 17 00:00:00 2001
From: Haoxin Yang <1810849666@qq.com>
Date: Fri, 14 Jun 2024 18:19:08 +0800
Subject: [PATCH 01/12] feat: year and month header will in locale order
---
src/date-picker/calendar/header/component.ts | 32 +++++++++++++--
src/date-picker/calendar/header/template.html | 39 +++++++++++++------
2 files changed, 55 insertions(+), 16 deletions(-)
diff --git a/src/date-picker/calendar/header/component.ts b/src/date-picker/calendar/header/component.ts
index 821d469ae..4e7f5488f 100644
--- a/src/date-picker/calendar/header/component.ts
+++ b/src/date-picker/calendar/header/component.ts
@@ -1,4 +1,4 @@
-import { NgIf, NgTemplateOutlet } from '@angular/common';
+import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
import {
ChangeDetectionStrategy,
Component,
@@ -8,19 +8,22 @@ import {
ViewEncapsulation,
} from '@angular/core';
import dayjs, { ConfigType, Dayjs } from 'dayjs';
+import { map, startWith } from 'rxjs';
import { ButtonComponent } from '../../../button/button.component';
import { I18nPipe } from '../../../i18n/i18n.pipe';
import { IconComponent } from '../../../icon/icon.component';
-import { buildBem } from '../../../internal/utils';
+import { buildBem, publishRef } from '../../../internal/utils';
import {
CalendarHeaderRange,
DateNavRange,
Side,
} from '../../date-picker.type';
-import { MONTH, YEAR } from '../constant';
+import { DatePickerType, MONTH, YEAR } from '../constant';
import { calcRangeValue } from '../util';
+import { I18nService } from 'src/i18n';
+
const bem = buildBem('aui-calendar-header');
@Component({
@@ -30,7 +33,14 @@ const bem = buildBem('aui-calendar-header');
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
- imports: [NgIf, NgTemplateOutlet, ButtonComponent, IconComponent, I18nPipe],
+ imports: [
+ NgIf,
+ NgTemplateOutlet,
+ ButtonComponent,
+ IconComponent,
+ I18nPipe,
+ AsyncPipe,
+ ],
})
export class CalendarHeaderComponent {
@Input()
@@ -67,6 +77,20 @@ export class CalendarHeaderComponent {
DateNavRange = DateNavRange;
+ monthBeforeYear$ = this.i18nService.localeChange$.pipe(
+ map(locale => {
+ const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date());
+ return (
+ parts.findIndex(part => part.type === DatePickerType.Month) <
+ parts.findIndex(part => part.type === DatePickerType.Year)
+ );
+ }),
+ startWith(false),
+ publishRef(),
+ );
+
+ constructor(private readonly i18nService: I18nService) {}
+
// maxAvail > current date :right btn hide
// minAvail > current date :left btn hide
shouldShowNav(type: DateNavRange, side: Side) {
diff --git a/src/date-picker/calendar/header/template.html b/src/date-picker/calendar/header/template.html
index 51cedfb9d..be72e9265 100644
--- a/src/date-picker/calendar/header/template.html
+++ b/src/date-picker/calendar/header/template.html
@@ -17,23 +17,21 @@
*ngIf="dateNavRange === DateNavRange.Month"
[class]="bem.element('nav-content')"
>
-
+
/
-
+
+
+
+
+
+
+
+
From 6ac279868ac92257449f31f4f67ff95b79d7efed Mon Sep 17 00:00:00 2001
From: Haoxin Yang <1810849666@qq.com>
Date: Mon, 17 Jun 2024 18:17:38 +0800
Subject: [PATCH 02/12] fix: picker header overflow and preview button font
---
.storybook/global.scss | 2 +
.storybook/reset-browser.scss | 92 +++++++++++++++++++
angular.json | 3 +-
src/date-picker/calendar/header/style.scss | 6 ++
src/date-picker/calendar/header/template.html | 4 +
.../date-picker/date-picker.template.html | 2 +-
6 files changed, 107 insertions(+), 2 deletions(-)
create mode 100644 .storybook/global.scss
create mode 100644 .storybook/reset-browser.scss
diff --git a/.storybook/global.scss b/.storybook/global.scss
new file mode 100644
index 000000000..b9becfb19
--- /dev/null
+++ b/.storybook/global.scss
@@ -0,0 +1,2 @@
+@import './reset-browser';
+@import '../src/theme/style.scss';
diff --git a/.storybook/reset-browser.scss b/.storybook/reset-browser.scss
new file mode 100644
index 000000000..d03c43895
--- /dev/null
+++ b/.storybook/reset-browser.scss
@@ -0,0 +1,92 @@
+@import '../src/theme/var';
+@import '../src/theme/mixin';
+
+* {
+ &,
+ &:before,
+ &:after {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font: inherit;
+ box-sizing: border-box;
+ vertical-align: baseline;
+ }
+
+ &:focus {
+ outline: none;
+ }
+}
+
+em {
+ font-style: italic;
+}
+
+ol {
+ list-style: decimal;
+ margin-left: 16px;
+}
+
+ul {
+ list-style: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+
+ &:before,
+ &:after {
+ content: '';
+ content: none;
+ }
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+body {
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 100%;
+ min-height: 100%;
+ color: use-text-color(main);
+ background-color: use-rgb(main-bg);
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC',
+ Arial, 'Microsoft YaHei', sans-serif;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 1.43;
+}
+
+pre,
+code {
+ font-family: Menlo, Monaco, 'Courier New', monospace;
+ white-space: pre-wrap;
+ font-size: 14px;
+ line-height: 20px;
+ padding: 12px;
+ background: use-rgb(n-9);
+ border-radius: 2px;
+
+ &[ngCodeColorize] {
+ padding: 0 12px;
+ }
+}
+
+input:-webkit-autofill,
+input:-webkit-autofill:hover,
+input:-webkit-autofill:focus,
+input:-webkit-autofill:active {
+ -webkit-text-fill-color: #{use-text-color(main)} !important;
+ box-shadow: 0 0 0 3000px #{use-rgb(main-bg)} inset !important;
+}
+
+[hidden] {
+ display: none !important;
+}
diff --git a/angular.json b/angular.json
index 1a55ac474..cc8e44bcf 100644
--- a/angular.json
+++ b/angular.json
@@ -64,7 +64,8 @@
"browserTarget": "storybook:build",
"compodoc": true,
"compodocArgs": ["-e", "json", "-d", "."],
- "port": 6006
+ "port": 6006,
+ "styles": [".storybook/global.scss"]
}
},
"build-storybook": {
diff --git a/src/date-picker/calendar/header/style.scss b/src/date-picker/calendar/header/style.scss
index 0fa8a9ef1..dbafce8a8 100644
--- a/src/date-picker/calendar/header/style.scss
+++ b/src/date-picker/calendar/header/style.scss
@@ -1,6 +1,7 @@
@import '../../../theme/var';
$block: aui-calendar-header;
+$prev-next-icon-button-width: 24px;
.#{$block} {
&__container {
@@ -12,6 +13,7 @@ $block: aui-calendar-header;
&__nav-content {
flex: 1;
+ max-width: calc(100% - $prev-next-icon-button-width * 4);
display: flex;
flex-wrap: wrap;
justify-content: center;
@@ -43,6 +45,10 @@ $block: aui-calendar-header;
margin-left: 0;
}
}
+
+ .aui-button--text.header-range {
+ max-width: 100%;
+ }
}
}
diff --git a/src/date-picker/calendar/header/template.html b/src/date-picker/calendar/header/template.html
index be72e9265..2554d35c7 100644
--- a/src/date-picker/calendar/header/template.html
+++ b/src/date-picker/calendar/header/template.html
@@ -125,6 +125,8 @@
@@ -42,7 +34,7 @@
aui-button="text"
(click)="clickNav(DateNavRange.Year)"
>
- {{ headerRange?.start?.year() }}{{ 'year_suffix' | auiI18n }}
+ {{ $headerRange().start.year }}
@@ -50,7 +42,7 @@
*ngIf="dateNavRange === DateNavRange.Decade"
[class]="bem.element('nav-content')"
>
- {{ headerRange?.start.year() }} - {{ headerRange?.end?.year() }}
+ {{ $headerRange().start.year }} - {{ $headerRange().end.year }}
@@ -75,6 +67,8 @@