@gez/date-time-kit 1.1.4 → 2.0.0-alpha.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/dist/assets/arrow-down.svg +1 -0
- package/dist/assets/arrow-left-double.svg +1 -0
- package/dist/assets/arrow-left.svg +1 -0
- package/dist/assets/arrow-right-double.svg +1 -0
- package/dist/assets/arrow-right.svg +1 -0
- package/dist/assets/back-arrow.svg +1 -0
- package/dist/assets/time.svg +1 -0
- package/dist/components/calendar/index.css +108 -0
- package/dist/components/calendar/index.d.ts +84 -0
- package/dist/components/calendar/index.mjs +238 -0
- package/dist/components/date-time-selector/index.d.ts +53 -0
- package/dist/components/date-time-selector/index.mjs +180 -0
- package/dist/components/date-time-selector/styleStr.d.ts +1 -0
- package/dist/components/date-time-selector/styleStr.mjs +6 -0
- package/dist/components/hhmmss-ms-list-grp/index.css +60 -0
- package/dist/components/hhmmss-ms-list-grp/index.d.ts +54 -0
- package/dist/components/hhmmss-ms-list-grp/index.mjs +226 -0
- package/dist/components/i18n/index.d.ts +13 -0
- package/dist/components/i18n/index.mjs +42 -0
- package/dist/components/num-list/index.css +35 -0
- package/dist/components/num-list/index.d.ts +68 -0
- package/dist/components/num-list/index.mjs +259 -0
- package/dist/components/period-selector/index.css +153 -0
- package/dist/components/period-selector/index.d.ts +77 -0
- package/dist/components/period-selector/index.mjs +331 -0
- package/dist/components/popover/index.d.ts +34 -0
- package/dist/components/popover/index.mjs +104 -0
- package/dist/components/quick-selector/index.css +167 -0
- package/dist/components/quick-selector/index.d.ts +86 -0
- package/dist/components/quick-selector/index.mjs +379 -0
- package/dist/components/web-component-base/index.css +9 -0
- package/dist/components/web-component-base/index.d.ts +46 -0
- package/dist/components/web-component-base/index.mjs +118 -0
- package/dist/components/web-component-base/scrollbar.css +25 -0
- package/dist/components/yyyymm-nav/index.css +92 -0
- package/dist/components/yyyymm-nav/index.d.ts +62 -0
- package/dist/components/yyyymm-nav/index.mjs +160 -0
- package/dist/components/yyyymmdd-list-grp/index.css +32 -0
- package/dist/components/yyyymmdd-list-grp/index.d.ts +52 -0
- package/dist/components/yyyymmdd-list-grp/index.mjs +181 -0
- package/dist/i18n.d.ts +36 -0
- package/dist/i18n.mjs +368 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.mjs +17 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.mjs +21 -0
- package/package.json +37 -63
- package/src/assets/arrow-down.svg +1 -0
- package/src/assets/arrow-left-double.svg +1 -0
- package/src/assets/arrow-left.svg +1 -0
- package/src/assets/arrow-right-double.svg +1 -0
- package/src/assets/arrow-right.svg +1 -0
- package/src/assets/back-arrow.svg +1 -0
- package/src/assets/time.svg +1 -0
- package/src/components/calendar/index.scss +128 -0
- package/src/components/calendar/index.ts +453 -0
- package/src/components/date-time-selector/index.ts +239 -0
- package/src/components/date-time-selector/styleStr.ts +86 -0
- package/src/components/hhmmss-ms-list-grp/index.scss +61 -0
- package/src/components/hhmmss-ms-list-grp/index.ts +387 -0
- package/src/components/i18n/index.ts +48 -0
- package/src/components/num-list/index.scss +38 -0
- package/src/components/num-list/index.ts +357 -0
- package/src/components/period-selector/index.scss +161 -0
- package/src/components/period-selector/index.ts +581 -0
- package/src/components/popover/index.ts +127 -0
- package/src/components/quick-selector/index.scss +183 -0
- package/src/components/quick-selector/index.ts +656 -0
- package/src/components/web-component-base/index.scss +11 -0
- package/src/components/web-component-base/index.ts +235 -0
- package/src/components/web-component-base/scrollbar.scss +30 -0
- package/src/components/yyyymm-nav/index.scss +108 -0
- package/src/components/yyyymm-nav/index.ts +319 -0
- package/src/components/yyyymmdd-list-grp/index.scss +33 -0
- package/src/components/yyyymmdd-list-grp/index.ts +290 -0
- package/src/i18n.ts +415 -0
- package/src/index.ts +13 -0
- package/src/utils.ts +36 -0
- package/README.md +0 -152
- package/dist/index.css +0 -1
- package/dist/index.html +0 -85
- package/dist/index.js +0 -145
- package/type.d.ts +0 -164
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
.wrapper {
|
|
2
|
+
display: block;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
display: flex;
|
|
6
|
+
justify-content: space-between;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
.wrapper.show-list .btns {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.btns {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.btn {
|
|
19
|
+
width: 25px;
|
|
20
|
+
height: 25px;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
background: 50%/16px 16px no-repeat;
|
|
23
|
+
--icon-arrow-left: url("@/assets/arrow-left.svg");
|
|
24
|
+
--icon-arrow-left-double: url("@/assets/arrow-left-double.svg");
|
|
25
|
+
--icon-arrow-right: url("@/assets/arrow-right.svg");
|
|
26
|
+
--icon-arrow-right-double: url("@/assets/arrow-right-double.svg");
|
|
27
|
+
background-image: var(--bg-img);
|
|
28
|
+
border-radius: 50%;
|
|
29
|
+
}
|
|
30
|
+
.btn:hover {
|
|
31
|
+
background-color: #eee;
|
|
32
|
+
}
|
|
33
|
+
:host(:not([show-ctrl-btn-year-add])) .btn.add.year, :host(:not([show-ctrl-btn-year-sub])) .btn.sub.year, :host(:not([show-ctrl-btn-month-add])) .btn.add.month, :host(:not([show-ctrl-btn-month-sub])) .btn.sub.month {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
36
|
+
.btn.sub {
|
|
37
|
+
--bg-img: var(--icon-arrow-left);
|
|
38
|
+
}
|
|
39
|
+
:host([show-ctrl-btn-month-add]) .btn.sub.add.year, :host([show-ctrl-btn-month-sub]) .btn.sub.sub.year {
|
|
40
|
+
--bg-img: var(--icon-arrow-left-double);
|
|
41
|
+
}
|
|
42
|
+
.btn.add {
|
|
43
|
+
--bg-img: var(--icon-arrow-right);
|
|
44
|
+
}
|
|
45
|
+
:host([show-ctrl-btn-month-add]) .btn.add.add.year, :host([show-ctrl-btn-month-sub]) .btn.add.sub.year {
|
|
46
|
+
--bg-img: var(--icon-arrow-right-double);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
dt-yyyymmdd-list-grp {
|
|
50
|
+
width: 100%;
|
|
51
|
+
}
|
|
52
|
+
dt-yyyymmdd-list-grp::part(list) {
|
|
53
|
+
scroll-behavior: smooth;
|
|
54
|
+
}
|
|
55
|
+
dt-yyyymmdd-list-grp::part(col label) {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
dt-popover {
|
|
60
|
+
width: 100%;
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
align-items: center;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.title-wrapper {
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
gap: 2px;
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
margin: 10px 0;
|
|
74
|
+
min-height: 25px;
|
|
75
|
+
padding: 0 10px;
|
|
76
|
+
border-radius: 2px;
|
|
77
|
+
user-select: none;
|
|
78
|
+
}
|
|
79
|
+
.title-wrapper:hover {
|
|
80
|
+
background-color: #eee;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.title-arrow {
|
|
84
|
+
display: inline-block;
|
|
85
|
+
width: 16px;
|
|
86
|
+
height: 16px;
|
|
87
|
+
background: url("@/assets/arrow-down.svg") no-repeat center center;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
dt-popover[open] .title-arrow {
|
|
91
|
+
transform: rotate(180deg);
|
|
92
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type BaseAttrs, type Emit2EventMap, UiBase } from '../web-component-base';
|
|
2
|
+
export interface Attrs extends BaseAttrs {
|
|
3
|
+
millisecond: number;
|
|
4
|
+
/**
|
|
5
|
+
* 选择器的粒度,表示最大可选的时间单位。默认为 year。
|
|
6
|
+
*/
|
|
7
|
+
'max-granularity'?: 'year' | 'month';
|
|
8
|
+
/**
|
|
9
|
+
* 选择器的粒度,表示最小可选的时间单位。默认为 month。
|
|
10
|
+
*/
|
|
11
|
+
'min-granularity'?: 'year' | 'month';
|
|
12
|
+
/**
|
|
13
|
+
* 是否显示年份控制按钮(快速增减年份)
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
'show-ctrl-btn-year-add'?: boolean;
|
|
17
|
+
'show-ctrl-btn-year-sub'?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 是否显示月份控制按钮(快速增减月份)
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
'show-ctrl-btn-month-add'?: boolean;
|
|
23
|
+
'show-ctrl-btn-month-sub'?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface Emits {
|
|
26
|
+
change: {
|
|
27
|
+
oldTime: Date;
|
|
28
|
+
newTime: Date;
|
|
29
|
+
};
|
|
30
|
+
'popover-open-change': boolean;
|
|
31
|
+
}
|
|
32
|
+
export type EventMap = Emit2EventMap<Emits>;
|
|
33
|
+
/**
|
|
34
|
+
* 日期导航组件
|
|
35
|
+
*
|
|
36
|
+
* 存在一个 titleFormatter 方法,可以重写该方法以自定义年月标题的回显格式。
|
|
37
|
+
*/
|
|
38
|
+
export declare class Ele extends UiBase<Attrs, Emits> {
|
|
39
|
+
static readonly tagName: "dt-yyyymm-nav";
|
|
40
|
+
static get observedAttributes(): string[];
|
|
41
|
+
protected _style: string;
|
|
42
|
+
protected _template: string;
|
|
43
|
+
get millisecond(): number;
|
|
44
|
+
set millisecond(v: number);
|
|
45
|
+
get showCtrlBtnYearAdd(): boolean;
|
|
46
|
+
set showCtrlBtnYearAdd(val: boolean);
|
|
47
|
+
get showCtrlBtnYearSub(): boolean;
|
|
48
|
+
set showCtrlBtnYearSub(val: boolean);
|
|
49
|
+
get showCtrlBtnMonthAdd(): boolean;
|
|
50
|
+
set showCtrlBtnMonthAdd(val: boolean);
|
|
51
|
+
get showCtrlBtnMonthSub(): boolean;
|
|
52
|
+
set showCtrlBtnMonthSub(val: boolean);
|
|
53
|
+
constructor();
|
|
54
|
+
connectedCallback(): void;
|
|
55
|
+
disconnectedCallback(): void;
|
|
56
|
+
protected _onAttrChanged(name: string, oldValue: string, newValue: string): void;
|
|
57
|
+
private _render;
|
|
58
|
+
private _onTitleToggle;
|
|
59
|
+
private _onItemSelect;
|
|
60
|
+
private _onBtnClick;
|
|
61
|
+
titleFormatter: (ms: number) => string;
|
|
62
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
var __freeze = Object.freeze;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(raw || cooked.slice()) }));
|
|
6
|
+
var _a, _b;
|
|
7
|
+
import { css, debounce, html } from "../../utils.mjs";
|
|
8
|
+
import {
|
|
9
|
+
UiBase
|
|
10
|
+
} from "../web-component-base/index.mjs";
|
|
11
|
+
const styleStr = css(_a || (_a = __template(["\n.wrapper {\n display: block;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n}\n.wrapper.show-list .btns {\n display: none;\n}\n\n.btns {\n display: flex;\n align-items: center;\n}\n\n.btn {\n width: 25px;\n height: 25px;\n cursor: pointer;\n background: 50%/16px 16px no-repeat;\n --icon-arrow-left: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='17' fill='currentColor'%3E%3Cpath d='M11.687 1.703a.5.5 0 0 0-.707 0L4.852 7.83a.505.505 0 0 0-.045.05.5.5 0 0 0-.051.752l6.128 6.128a.5.5 0 0 0 .707-.707L5.817 8.28l5.87-5.87a.5.5 0 0 0 0-.707Z'/%3E%3C/svg%3E\");\n --icon-arrow-left-double: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='17' fill='currentColor'%3E%3Cpath d='M9.037 1.98a.5.5 0 1 1 .707.707l-5.87 5.87 5.774 5.774a.5.5 0 1 1-.707.707L2.813 8.911a.5.5 0 0 1 .051-.752.505.505 0 0 1 .045-.051L9.037 1.98ZM13.037 1.98a.5.5 0 0 1 .707.707l-5.87 5.87 5.774 5.774a.5.5 0 1 1-.707.707L6.813 8.911a.5.5 0 0 1 .051-.752.505.505 0 0 1 .045-.051l6.128-6.128Z'/%3E%3C/svg%3E\");\n --icon-arrow-right: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' fill='currentColor'%3E%3Cpath d='M5.256 1.703a.5.5 0 0 1 .707 0l6.128 6.128a.493.493 0 0 1 .045.05.5.5 0 0 1 .051.752l-6.128 6.128a.5.5 0 0 1-.707-.707l5.774-5.774-5.87-5.87a.5.5 0 0 1 0-.707Z'/%3E%3C/svg%3E\");\n --icon-arrow-right-double: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' fill='currentColor'%3E%3Cpath d='M7.963 1.703a.5.5 0 0 0-.707.707l5.87 5.87-5.774 5.774a.5.5 0 0 0 .707.707l6.128-6.128a.5.5 0 0 0-.051-.751.493.493 0 0 0-.045-.051L7.963 1.703ZM3.963 1.703a.5.5 0 0 0-.707.707l5.87 5.87-5.774 5.774a.5.5 0 0 0 .707.707l6.128-6.128a.5.5 0 0 0-.051-.751.493.493 0 0 0-.045-.051L3.963 1.703Z'/%3E%3C/svg%3E\");\n background-image: var(--bg-img);\n border-radius: 50%;\n}\n.btn:hover {\n background-color: #eee;\n}\n:host(:not([show-ctrl-btn-year-add])) .btn.add.year, :host(:not([show-ctrl-btn-year-sub])) .btn.sub.year, :host(:not([show-ctrl-btn-month-add])) .btn.add.month, :host(:not([show-ctrl-btn-month-sub])) .btn.sub.month {\n display: none;\n}\n.btn.sub {\n --bg-img: var(--icon-arrow-left);\n}\n:host([show-ctrl-btn-month-add]) .btn.sub.add.year, :host([show-ctrl-btn-month-sub]) .btn.sub.sub.year {\n --bg-img: var(--icon-arrow-left-double);\n}\n.btn.add {\n --bg-img: var(--icon-arrow-right);\n}\n:host([show-ctrl-btn-month-add]) .btn.add.add.year, :host([show-ctrl-btn-month-sub]) .btn.add.sub.year {\n --bg-img: var(--icon-arrow-right-double);\n}\n\ndt-yyyymmdd-list-grp {\n width: 100%;\n}\ndt-yyyymmdd-list-grp::part(list) {\n scroll-behavior: smooth;\n}\ndt-yyyymmdd-list-grp::part(col label) {\n display: none;\n}\n\ndt-popover {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.title-wrapper {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 2px;\n cursor: pointer;\n margin: 10px 0;\n min-height: 25px;\n padding: 0 10px;\n border-radius: 2px;\n user-select: none;\n}\n.title-wrapper:hover {\n background-color: #eee;\n}\n\n.title-arrow {\n display: inline-block;\n width: 16px;\n height: 16px;\n background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='15' fill='currentColor'%3E%3Cpath d='m8.02 10.54 3.96-4.4a.583.583 0 0 0-.433-.973h-7.88a.583.583 0 0 0-.434.973l3.94 4.378c.216.24.585.26.824.044l.022-.021Z'/%3E%3C/svg%3E\") no-repeat center center;\n}\n\ndt-popover[open] .title-arrow {\n transform: rotate(180deg);\n}\n"])));
|
|
12
|
+
import { Ele as PopoverEle } from "../popover/index.mjs";
|
|
13
|
+
PopoverEle.define();
|
|
14
|
+
import {
|
|
15
|
+
Ele as YyyyMmDdListGrpEle
|
|
16
|
+
} from "../yyyymmdd-list-grp/index.mjs";
|
|
17
|
+
YyyyMmDdListGrpEle.define();
|
|
18
|
+
export class Ele extends UiBase {
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
__publicField(this, "_style", styleStr);
|
|
22
|
+
__publicField(this, "_template", html(_b || (_b = __template(['\n<div class="wrapper">\n <div class="btns sub">\n <i class="btn sub year"></i>\n <i class="btn sub month"></i>\n </div>\n <dt-popover class="echo">\n <div slot="trigger" class="title-wrapper">\n <span class="title">title</span>\n <i class="title-arrow"></i>\n </div>\n <dt-yyyymmdd-list-grp slot="pop" min-granularity="month" part="list-grp"></dt-yyyymmdd-list-grp>\n </dt-popover>\n <div class="btns add">\n <i class="btn add month"></i>\n <i class="btn add year"></i>\n </div>\n</div>\n']))));
|
|
23
|
+
__publicField(this, "_render", debounce(() => {
|
|
24
|
+
const root = this.shadowRoot;
|
|
25
|
+
const ms = this.millisecond;
|
|
26
|
+
root.querySelector(
|
|
27
|
+
"dt-yyyymmdd-list-grp"
|
|
28
|
+
).millisecond = ms;
|
|
29
|
+
root.querySelector(".title").textContent = this.titleFormatter(ms);
|
|
30
|
+
}, 0));
|
|
31
|
+
__publicField(this, "_onTitleToggle", (e) => {
|
|
32
|
+
const isOpen = e.detail;
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
this.shadowRoot.querySelector(".wrapper").classList.toggle(
|
|
35
|
+
"show-list",
|
|
36
|
+
isOpen
|
|
37
|
+
);
|
|
38
|
+
this.shadowRoot.querySelector(
|
|
39
|
+
"dt-yyyymmdd-list-grp"
|
|
40
|
+
).scrollToCurrentItem();
|
|
41
|
+
this.dispatchEvent("popover-open-change", isOpen, true);
|
|
42
|
+
});
|
|
43
|
+
__publicField(this, "_onItemSelect", (e) => {
|
|
44
|
+
if (!(e.target instanceof YyyyMmDdListGrpEle)) return;
|
|
45
|
+
e.stopPropagation();
|
|
46
|
+
this.millisecond = e.target.millisecond;
|
|
47
|
+
});
|
|
48
|
+
__publicField(this, "_onBtnClick", (e) => {
|
|
49
|
+
if (!(e.target instanceof HTMLElement)) return;
|
|
50
|
+
const date = new Date(this.millisecond);
|
|
51
|
+
date.setDate(1);
|
|
52
|
+
if (e.target.matches(".add.year")) {
|
|
53
|
+
date.setFullYear(date.getFullYear() + 1);
|
|
54
|
+
} else if (e.target.matches(".sub.year")) {
|
|
55
|
+
date.setFullYear(date.getFullYear() - 1);
|
|
56
|
+
} else if (e.target.matches(".add.month")) {
|
|
57
|
+
date.setMonth(date.getMonth() + 1);
|
|
58
|
+
} else if (e.target.matches(".sub.month")) {
|
|
59
|
+
date.setMonth(date.getMonth() - 1);
|
|
60
|
+
}
|
|
61
|
+
this.millisecond = +date;
|
|
62
|
+
});
|
|
63
|
+
__publicField(this, "titleFormatter", (ms) => {
|
|
64
|
+
const date = new Date(ms);
|
|
65
|
+
const year = date.getFullYear();
|
|
66
|
+
const month = date.getMonth() + 1;
|
|
67
|
+
return "".concat(("0" + month).slice(-2), "/").concat(year);
|
|
68
|
+
});
|
|
69
|
+
this._applyTemplate();
|
|
70
|
+
}
|
|
71
|
+
static get observedAttributes() {
|
|
72
|
+
return [
|
|
73
|
+
...super.observedAttributes,
|
|
74
|
+
"millisecond",
|
|
75
|
+
"max-granularity",
|
|
76
|
+
"min-granularity",
|
|
77
|
+
"show-ctrl-btn-month-add",
|
|
78
|
+
"show-ctrl-btn-year-sub",
|
|
79
|
+
"show-ctrl-btn-month-add",
|
|
80
|
+
"show-ctrl-btn-month-sub"
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
get millisecond() {
|
|
84
|
+
return Math.floor(+this._getAttr("millisecond", "0"));
|
|
85
|
+
}
|
|
86
|
+
set millisecond(v) {
|
|
87
|
+
if (!Number.isSafeInteger(v)) return;
|
|
88
|
+
this.setAttribute("millisecond", "" + Math.floor(v));
|
|
89
|
+
}
|
|
90
|
+
get showCtrlBtnYearAdd() {
|
|
91
|
+
return this.hasAttribute("show-ctrl-btn-year-add");
|
|
92
|
+
}
|
|
93
|
+
set showCtrlBtnYearAdd(val) {
|
|
94
|
+
this.toggleAttribute("show-ctrl-btn-year-add", val);
|
|
95
|
+
}
|
|
96
|
+
get showCtrlBtnYearSub() {
|
|
97
|
+
return this.hasAttribute("show-ctrl-btn-year-sub");
|
|
98
|
+
}
|
|
99
|
+
set showCtrlBtnYearSub(val) {
|
|
100
|
+
this.toggleAttribute("show-ctrl-btn-year-sub", val);
|
|
101
|
+
}
|
|
102
|
+
get showCtrlBtnMonthAdd() {
|
|
103
|
+
return this.hasAttribute("show-ctrl-btn-month-add");
|
|
104
|
+
}
|
|
105
|
+
set showCtrlBtnMonthAdd(val) {
|
|
106
|
+
this.toggleAttribute("show-ctrl-btn-month-add", val);
|
|
107
|
+
}
|
|
108
|
+
get showCtrlBtnMonthSub() {
|
|
109
|
+
return this.hasAttribute("show-ctrl-btn-month-sub");
|
|
110
|
+
}
|
|
111
|
+
set showCtrlBtnMonthSub(val) {
|
|
112
|
+
this.toggleAttribute("show-ctrl-btn-month-sub", val);
|
|
113
|
+
}
|
|
114
|
+
connectedCallback() {
|
|
115
|
+
if (!super.connectedCallback()) return;
|
|
116
|
+
this._render();
|
|
117
|
+
this.shadowRoot.querySelector(".echo").addEventListener(
|
|
118
|
+
"open-change",
|
|
119
|
+
this._onTitleToggle
|
|
120
|
+
);
|
|
121
|
+
this.shadowRoot.querySelector(
|
|
122
|
+
"dt-yyyymmdd-list-grp"
|
|
123
|
+
).addEventListener("change", this._onItemSelect);
|
|
124
|
+
this.shadowRoot.querySelectorAll(".btn").forEach(
|
|
125
|
+
(btn) => {
|
|
126
|
+
btn.addEventListener("click", this._onBtnClick);
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
disconnectedCallback() {
|
|
131
|
+
if (!super.disconnectedCallback()) return;
|
|
132
|
+
this.shadowRoot.querySelector(
|
|
133
|
+
".echo"
|
|
134
|
+
).removeEventListener("open-change", this._onTitleToggle);
|
|
135
|
+
this.shadowRoot.querySelector(
|
|
136
|
+
"dt-yyyymmdd-list-grp"
|
|
137
|
+
).removeEventListener("change", this._onItemSelect);
|
|
138
|
+
this.shadowRoot.querySelectorAll(".btn").forEach(
|
|
139
|
+
(btn) => {
|
|
140
|
+
btn.removeEventListener("click", this._onBtnClick);
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
_onAttrChanged(name, oldValue, newValue) {
|
|
145
|
+
super._onAttrChanged(name, oldValue, newValue);
|
|
146
|
+
this._render();
|
|
147
|
+
if (name === "millisecond") {
|
|
148
|
+
this.dispatchEvent(
|
|
149
|
+
"change",
|
|
150
|
+
{
|
|
151
|
+
oldTime: /* @__PURE__ */ new Date(+oldValue),
|
|
152
|
+
newTime: /* @__PURE__ */ new Date(+newValue)
|
|
153
|
+
},
|
|
154
|
+
true
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
__publicField(Ele, "tagName", "dt-yyyymm-nav");
|
|
160
|
+
Ele.define();
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
gap: 15px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.cols {
|
|
9
|
+
flex: 1;
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: row;
|
|
12
|
+
height: 0;
|
|
13
|
+
justify-content: space-between;
|
|
14
|
+
gap: 2px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.col {
|
|
18
|
+
flex: 1;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: 10px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.col > span {
|
|
25
|
+
text-align: center;
|
|
26
|
+
display: inline-block;
|
|
27
|
+
line-height: 27px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
dt-num-list {
|
|
31
|
+
flex: 1;
|
|
32
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type BaseAttrs, type Emit2EventMap, UiBase } from '../web-component-base';
|
|
2
|
+
export interface Attrs extends BaseAttrs {
|
|
3
|
+
millisecond: number;
|
|
4
|
+
/**
|
|
5
|
+
* 选择器的粒度,表示最大可选的时间单位。默认为 year。
|
|
6
|
+
* 例如设置为 'month',则表示最大只能选择到月份,年将被忽略。
|
|
7
|
+
*/
|
|
8
|
+
'max-granularity'?: 'year' | 'month' | 'day';
|
|
9
|
+
/**
|
|
10
|
+
* 选择器的粒度,表示最小可选的时间单位。默认为 second。
|
|
11
|
+
* 例如设置为 'month',则表示只能选择到月份,日会将被忽略。
|
|
12
|
+
*/
|
|
13
|
+
'min-granularity'?: 'year' | 'month' | 'day';
|
|
14
|
+
'col-order'?: 'ymd' | 'ydm' | 'myd' | 'mdy' | 'dym' | 'dmy';
|
|
15
|
+
}
|
|
16
|
+
export interface Emits {
|
|
17
|
+
change: {
|
|
18
|
+
oldMs: number;
|
|
19
|
+
newMs: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export type EventMap = Emit2EventMap<Emits>;
|
|
23
|
+
/**
|
|
24
|
+
* 日期选择器
|
|
25
|
+
*/
|
|
26
|
+
export declare class Ele extends UiBase<Attrs, Emits> {
|
|
27
|
+
static readonly tagName: "dt-yyyymmdd-list-grp";
|
|
28
|
+
static get observedAttributes(): string[];
|
|
29
|
+
protected _style: string;
|
|
30
|
+
protected _template: string;
|
|
31
|
+
constructor();
|
|
32
|
+
private get _listEleYear();
|
|
33
|
+
private get _listEleMonth();
|
|
34
|
+
private get _listEleDay();
|
|
35
|
+
get millisecond(): number;
|
|
36
|
+
set millisecond(v: number);
|
|
37
|
+
get maxGranularity(): "year" | "month" | "day";
|
|
38
|
+
set maxGranularity(v: 'year' | 'month' | 'day');
|
|
39
|
+
get minGranularity(): "year" | "month" | "day";
|
|
40
|
+
set minGranularity(v: 'year' | 'month' | 'day');
|
|
41
|
+
get colOrder(): "ymd" | "ydm" | "myd" | "mdy" | "dym" | "dmy";
|
|
42
|
+
set colOrder(v: 'ymd' | 'ydm' | 'myd' | 'mdy' | 'dym' | 'dmy');
|
|
43
|
+
scrollToCurrentItem(): void;
|
|
44
|
+
connectedCallback(): void;
|
|
45
|
+
disconnectedCallback(): void;
|
|
46
|
+
protected _onAttrChanged(name: string, oldValue: string, newValue: string): void;
|
|
47
|
+
private _renderCols;
|
|
48
|
+
private _updateGranularity;
|
|
49
|
+
private _updateColsValue;
|
|
50
|
+
private _getMsFromEle;
|
|
51
|
+
private _onColsSelect;
|
|
52
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
var __freeze = Object.freeze;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(raw || cooked.slice()) }));
|
|
6
|
+
var _a, _b;
|
|
7
|
+
import { css, debounce, html } from "../../utils.mjs";
|
|
8
|
+
import { Ele as NumListEle } from "../num-list/index.mjs";
|
|
9
|
+
NumListEle.define();
|
|
10
|
+
import {
|
|
11
|
+
UiBase
|
|
12
|
+
} from "../web-component-base/index.mjs";
|
|
13
|
+
const styleStr = css(_a || (_a = __template(["\n:host {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n gap: 15px;\n}\n\n.cols {\n flex: 1;\n display: flex;\n flex-direction: row;\n height: 0;\n justify-content: space-between;\n gap: 2px;\n}\n\n.col {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.col > span {\n text-align: center;\n display: inline-block;\n line-height: 27px;\n}\n\ndt-num-list {\n flex: 1;\n}\n"])));
|
|
14
|
+
export class Ele extends UiBase {
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
__publicField(this, "_style", styleStr);
|
|
18
|
+
__publicField(this, "_template", html(_b || (_b = __template(['\n <div class="cols" part="cols">\n <div class="col year" part="col year">\n <span part="col label year">Year</span>\n <dt-num-list part="list year" class="year"></dt-num-list>\n </div>\n <div class="col month" part="col month">\n <span part="col label month">Month</span>\n <dt-num-list part="list month" class="month" min-num="1" max-num="12"></dt-num-list>\n </div>\n <div class="col day" part="col day">\n <span part="col label day">Day</span>\n <dt-num-list part="list day" class="day" min-num="1" max-num="31"></dt-num-list>\n </div>\n </div>\n ']))));
|
|
19
|
+
__publicField(this, "_renderCols", debounce(() => {
|
|
20
|
+
if (!this.isConnected) return;
|
|
21
|
+
const { colOrder } = this;
|
|
22
|
+
const orderedCols = ["year", "month", "day"].sort((a, b) => colOrder.indexOf(a[0]) - colOrder.indexOf(b[0])).map(
|
|
23
|
+
(s) => this.shadowRoot.querySelector(".col.".concat(s))
|
|
24
|
+
);
|
|
25
|
+
const colsContainer = this.shadowRoot.querySelector(".cols");
|
|
26
|
+
if (orderedCols.every((el, i) => el === colsContainer.children[i]))
|
|
27
|
+
return;
|
|
28
|
+
colsContainer.append(...orderedCols);
|
|
29
|
+
}, 0));
|
|
30
|
+
__publicField(this, "_updateGranularity", debounce(() => {
|
|
31
|
+
var _a2, _b2;
|
|
32
|
+
if (!this.isConnected) return;
|
|
33
|
+
const { maxGranularity, minGranularity } = this;
|
|
34
|
+
const colsContainer = this.shadowRoot.querySelector(".cols");
|
|
35
|
+
const yEle = this.shadowRoot.querySelector(".col.year");
|
|
36
|
+
const mEle = this.shadowRoot.querySelector(".col.month");
|
|
37
|
+
const dEle = this.shadowRoot.querySelector(".col.day");
|
|
38
|
+
const granularityMap = { year: 3, month: 2, day: 1 };
|
|
39
|
+
let maxG = (_a2 = granularityMap[maxGranularity]) != null ? _a2 : 1;
|
|
40
|
+
let minG = (_b2 = granularityMap[minGranularity]) != null ? _b2 : 3;
|
|
41
|
+
if (maxG < minG) [maxG, minG] = [minG, maxG];
|
|
42
|
+
yEle.style.display = maxG >= 3 && minG <= 3 ? "" : "none";
|
|
43
|
+
mEle.style.display = maxG >= 2 && minG <= 2 ? "" : "none";
|
|
44
|
+
dEle.style.display = maxG >= 1 && minG <= 1 ? "" : "none";
|
|
45
|
+
colsContainer.style.display = [yEle, mEle, dEle].filter(
|
|
46
|
+
(ele) => ele.style.display !== "none"
|
|
47
|
+
).length ? "" : "none";
|
|
48
|
+
}, 0));
|
|
49
|
+
__publicField(this, "_updateColsValue", debounce(() => {
|
|
50
|
+
if (!this.isConnected) return;
|
|
51
|
+
const { millisecond } = this;
|
|
52
|
+
const date = new Date(millisecond);
|
|
53
|
+
if (Number.isNaN(date.getTime())) return;
|
|
54
|
+
this._listEleYear.currentNum = date.getFullYear();
|
|
55
|
+
this._listEleMonth.currentNum = date.getMonth() + 1;
|
|
56
|
+
this._listEleDay.maxNum = new Date(
|
|
57
|
+
date.getFullYear(),
|
|
58
|
+
date.getMonth() + 1,
|
|
59
|
+
0
|
|
60
|
+
).getDate();
|
|
61
|
+
this._listEleDay.currentNum = date.getDate();
|
|
62
|
+
}, 0));
|
|
63
|
+
__publicField(this, "_onColsSelect", ({
|
|
64
|
+
target,
|
|
65
|
+
detail: { newNum }
|
|
66
|
+
}) => {
|
|
67
|
+
if (!(target instanceof NumListEle)) return;
|
|
68
|
+
target.currentNum = newNum;
|
|
69
|
+
const oldMs = this.millisecond;
|
|
70
|
+
const newMs = this._getMsFromEle();
|
|
71
|
+
this.millisecond = newMs;
|
|
72
|
+
this.dispatchEvent(
|
|
73
|
+
"change",
|
|
74
|
+
{
|
|
75
|
+
oldMs,
|
|
76
|
+
newMs: this.millisecond
|
|
77
|
+
},
|
|
78
|
+
true
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
this._applyTemplate();
|
|
82
|
+
}
|
|
83
|
+
static get observedAttributes() {
|
|
84
|
+
return [
|
|
85
|
+
...super.observedAttributes,
|
|
86
|
+
"millisecond",
|
|
87
|
+
"max-granularity",
|
|
88
|
+
"min-granularity",
|
|
89
|
+
"col-order"
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
get _listEleYear() {
|
|
93
|
+
var _a2;
|
|
94
|
+
return (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector("dt-num-list.year");
|
|
95
|
+
}
|
|
96
|
+
get _listEleMonth() {
|
|
97
|
+
var _a2;
|
|
98
|
+
return (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector(
|
|
99
|
+
"dt-num-list.month"
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
get _listEleDay() {
|
|
103
|
+
var _a2;
|
|
104
|
+
return (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector("dt-num-list.day");
|
|
105
|
+
}
|
|
106
|
+
get millisecond() {
|
|
107
|
+
return Math.floor(+this._getAttr("millisecond", "0"));
|
|
108
|
+
}
|
|
109
|
+
set millisecond(v) {
|
|
110
|
+
if (!Number.isSafeInteger(v)) return;
|
|
111
|
+
this.setAttribute("millisecond", "" + Math.floor(v));
|
|
112
|
+
}
|
|
113
|
+
get maxGranularity() {
|
|
114
|
+
return this._getAttr("max-granularity", "year");
|
|
115
|
+
}
|
|
116
|
+
set maxGranularity(v) {
|
|
117
|
+
if (!["year", "month", "day"].includes(v)) return;
|
|
118
|
+
this.setAttribute("max-granularity", v);
|
|
119
|
+
}
|
|
120
|
+
get minGranularity() {
|
|
121
|
+
return this._getAttr("min-granularity", "day");
|
|
122
|
+
}
|
|
123
|
+
set minGranularity(v) {
|
|
124
|
+
if (!["year", "month", "day"].includes(v)) return;
|
|
125
|
+
this.setAttribute("min-granularity", v);
|
|
126
|
+
}
|
|
127
|
+
get colOrder() {
|
|
128
|
+
return this._getAttr("col-order", "dmy");
|
|
129
|
+
}
|
|
130
|
+
set colOrder(v) {
|
|
131
|
+
if (!["ymd", "ydm", "myd", "mdy", "dym", "dmy"].includes(v)) return;
|
|
132
|
+
this.setAttribute("col-order", v);
|
|
133
|
+
}
|
|
134
|
+
scrollToCurrentItem() {
|
|
135
|
+
var _a2;
|
|
136
|
+
(_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelectorAll("dt-num-list").forEach((ele) => {
|
|
137
|
+
if (ele instanceof NumListEle) ele.scrollToCurrent();
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
connectedCallback() {
|
|
141
|
+
if (!super.connectedCallback()) return;
|
|
142
|
+
this._listEleYear.formatter = (num) => "" + num;
|
|
143
|
+
this._listEleMonth.formatter = this._listEleDay.formatter = (num) => ("0" + num).slice(-2);
|
|
144
|
+
this._renderCols();
|
|
145
|
+
this._updateGranularity();
|
|
146
|
+
this._updateColsValue();
|
|
147
|
+
this._listEleYear.addEventListener("select-num", this._onColsSelect);
|
|
148
|
+
this._listEleMonth.addEventListener("select-num", this._onColsSelect);
|
|
149
|
+
this._listEleDay.addEventListener("select-num", this._onColsSelect);
|
|
150
|
+
}
|
|
151
|
+
disconnectedCallback() {
|
|
152
|
+
if (!super.disconnectedCallback()) return;
|
|
153
|
+
this._listEleYear.removeEventListener("select-num", this._onColsSelect);
|
|
154
|
+
this._listEleMonth.removeEventListener(
|
|
155
|
+
"select-num",
|
|
156
|
+
this._onColsSelect
|
|
157
|
+
);
|
|
158
|
+
this._listEleDay.removeEventListener("select-num", this._onColsSelect);
|
|
159
|
+
}
|
|
160
|
+
_onAttrChanged(name, oldValue, newValue) {
|
|
161
|
+
super._onAttrChanged(name, oldValue, newValue);
|
|
162
|
+
if (name === "col-order") this._renderCols();
|
|
163
|
+
else if (name === "max-granularity" || name === "min-granularity")
|
|
164
|
+
this._updateGranularity();
|
|
165
|
+
else if (name === "millisecond") this._updateColsValue();
|
|
166
|
+
}
|
|
167
|
+
_getMsFromEle() {
|
|
168
|
+
const month = this._listEleMonth.currentNum;
|
|
169
|
+
const date = new Date(
|
|
170
|
+
this._listEleYear.currentNum,
|
|
171
|
+
month - 1,
|
|
172
|
+
this._listEleDay.currentNum
|
|
173
|
+
);
|
|
174
|
+
if (date.getMonth() + 1 !== month) {
|
|
175
|
+
date.setDate(0);
|
|
176
|
+
}
|
|
177
|
+
return +date;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
__publicField(Ele, "tagName", "dt-yyyymmdd-list-grp");
|
|
181
|
+
Ele.define();
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type DataLimit = 'all' | 'today' | 'yesterday' | 'week' | 'lastWeek' | 'last7Days' | 'month' | 'last30Days' | 'last180Days' | 'last6Month' | 'year';
|
|
2
|
+
export declare const langs: readonly ["en-US", "zh-CN", "zh-TW", "id-ID", "vi-VN", "th-TH", "ms-MY", "ko-KR", "ar-AE"];
|
|
3
|
+
export type Lang = (typeof langs)[number];
|
|
4
|
+
export type I18nCfg = {
|
|
5
|
+
box: {
|
|
6
|
+
confirm: string;
|
|
7
|
+
cancel: string;
|
|
8
|
+
select: string;
|
|
9
|
+
};
|
|
10
|
+
quick: {
|
|
11
|
+
[k in DataLimit]: string;
|
|
12
|
+
} & {
|
|
13
|
+
timezone: string;
|
|
14
|
+
recommend: string;
|
|
15
|
+
timezoneList: string;
|
|
16
|
+
};
|
|
17
|
+
date: {
|
|
18
|
+
sun: string;
|
|
19
|
+
mon: string;
|
|
20
|
+
tue: string;
|
|
21
|
+
wed: string;
|
|
22
|
+
thu: string;
|
|
23
|
+
fri: string;
|
|
24
|
+
sat: string;
|
|
25
|
+
};
|
|
26
|
+
time: {
|
|
27
|
+
startTime: string;
|
|
28
|
+
endTime: string;
|
|
29
|
+
startMillisecond: string;
|
|
30
|
+
endMillisecond: string;
|
|
31
|
+
singleTitle: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export type I18n = Record<Lang, I18nCfg>;
|
|
35
|
+
export declare const i18n: I18n;
|
|
36
|
+
export default i18n;
|