@ezuikit/control-date-picker 2.0.0-beta.3 → 2.1.0-beta.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.
@@ -20,7 +20,7 @@
20
20
  }
21
21
 
22
22
  & .#{common.$emonth-prefix-cls}-cell {
23
- height: 52px;
23
+ height: var(--edate-month-cell-height, 52px);
24
24
  }
25
25
 
26
26
  & .#{common.$emonth-prefix-cls}-cell-inner {
@@ -44,7 +44,7 @@
44
44
  padding: 0px 0;
45
45
  cursor: pointer;
46
46
  text-align: center;
47
- color: rgba(0, 0, 0, 0.25);
47
+ color: var(--edate-out-view-color, rgba(0, 0, 0, 0.25));
48
48
  box-sizing: border-box;
49
49
 
50
50
  &:not(.#{common.$disabled}):hover &-inner {
@@ -57,7 +57,7 @@
57
57
  inset-inline-start: 0;
58
58
  inset-inline-end: 0;
59
59
  z-index: 1;
60
- height: 22px;
60
+ height: var(--edate-month-cell-inner-height, 22px);
61
61
  transform: translateY(-50%);
62
62
  transition: all 0.3s;
63
63
  content: '';
@@ -68,7 +68,7 @@
68
68
 
69
69
  &.#{common.$emonth-prefix-cls}-cell-selected:not(.#{common.$disabled}) .#{common.$emonth-prefix-cls}-cell-inner {
70
70
  background-color: var(--edate-primary-color, #1677ff) !important;
71
- color: #fff;
71
+ color: var(--edate-on-primary-color, #fff);
72
72
  }
73
73
  &.#{common.$emonth-prefix-cls}-cell-selected.#{common.$disabled} .#{common.$emonth-prefix-cls}-cell-inner {
74
74
  background-color: var(--edate-disabled-bg-color, rgba(0, 0, 0, 0.04)) !important;
@@ -79,9 +79,9 @@
79
79
  position: relative;
80
80
  z-index: 2;
81
81
  display: inline-block;
82
- min-width: 22px;
83
- height: 22px;
84
- line-height: 22px;
82
+ min-width: var(--edate-month-cell-inner-min-width, 22px);
83
+ height: var(--edate-month-cell-inner-height, 22px);
84
+ line-height: var(--edate-month-cell-inner-height, 22px);
85
85
  border-radius: var(--edate-border-radius, 2px);
86
86
  transition:
87
87
  background 0.2s,
@@ -2,4 +2,5 @@ $edate-prefix-cls: edate;
2
2
  $ecalendar-prefix-cls: ecalendar;
3
3
  $emonth-prefix-cls: emonth;
4
4
  $eyear-prefix-cls: eyear;
5
+ $etime-prefix-cls: etime;
5
6
  $disabled: #{$edate-prefix-cls}-disabled;
@@ -1,9 +1,20 @@
1
1
  :root {
2
+ /* ============================ 尺寸 · 通用 ============================ */
2
3
  --edate-header-height: 34px;
3
- --edate-footer-height: var(--edate-header-height, 34px);
4
+ --edate-footer-height: 36px;
4
5
  --edate-font-size: 14px;
6
+ --edate-min-width: 246px;
7
+ --edate-border-radius: 2px;
8
+
9
+ /* ============================ 颜色 · 通用 ============================ */
10
+ /* 面板背景色 */
11
+ --edate-bg-color: #fff;
5
12
  --edate-default-color: rgba(0, 0, 0, 0.88);
6
13
  --edate-primary-color: #648ffc;
14
+ /* 主色之上的前景色(选中态文字、主按钮文字) */
15
+ --edate-on-primary-color: #fff;
16
+ /* 非本视图(上 / 下月等)单元格文字色 */
17
+ --edate-out-view-color: rgba(0, 0, 0, 0.25);
7
18
  --edate-hover-color: var(--edate-default-color, rgba(0, 0, 0, 0.88));
8
19
  --edate-hover-bg-color: rgba(0, 0, 0, 0.04);
9
20
  --edate-active-color: var(--edate-default-color, rgba(0, 0, 0, 0.88));
@@ -12,16 +23,39 @@
12
23
  --edate-disabled-bg-color: rgba(0, 0, 0, 0.04);
13
24
  --edate-disabled-active-bg-color: rgba(0, 0, 0, 0.25);
14
25
  --edate-border-color: rgba(5, 5, 5, 0.06);
15
- --edate-border-radius: 2px;
26
+ /* 按钮描边色 */
27
+ --edate-btn-border-color: #d9d9d9;
16
28
  --edate-close-color: rgba(240, 87, 87, 1);
29
+ --edate-arrow-color: rgba(0, 0, 0, 0.45);
30
+ --edate-arrow-hover-color: var(--edate-default-color, rgba(0, 0, 0, 0.88));
17
31
 
18
- //
32
+ /* ============================ Calendar 日历 ============================ */
19
33
  --edate-calendar-border-radius: 50%;
20
34
  --edate-calendar-cell-width: 26px;
21
35
  --edate-calendar-cell-height: 26px;
36
+ /* 星期表头行高 */
37
+ --edate-calendar-weekday-height: 30px;
22
38
 
23
- //
39
+ /* 徽章点 */
24
40
  --edate-badge-color: var(--edate-primary-color, #648ffc);
25
- --edate-arrow-color: rgba(0, 0, 0, 0.45);
41
+ --edate-badge-size: 3px;
42
+
43
+ /* ============================ Month 月历 ============================ */
44
+ --edate-month-cell-height: 52px;
45
+ --edate-month-cell-inner-min-width: 22px;
46
+ --edate-month-cell-inner-height: 22px;
47
+
48
+ /* ============================ Year 年历 ============================ */
49
+ --edate-year-cell-height: 52px;
50
+ --edate-year-cell-inner-min-width: 22px;
51
+ --edate-year-cell-inner-height: 22px;
52
+
53
+ /* ============================ Time 时间 ============================ */
54
+ /* 滚动列总高度 */
55
+ --edate-time-column-height: 208px;
56
+ /* 时 / 分 / 秒单元格高度 */
57
+ --edate-time-cell-height: 30px;
58
+
59
+ /* 箭头 hover 色 */
26
60
  --edate-arrow-hover-color: var(--edate-default-color, rgba(0, 0, 0, 0.88));
27
61
  }
@@ -1 +1 @@
1
- .epicker-body-noscroll{overflow:hidden;touch-action:none}.epicker{box-shadow:0 9px 28px 8px #0000000d;display:none;margin:0;opacity:0;padding:0;position:absolute;transition:opacity .3s ease;vertical-align:top;z-index:1000}.epicker,.epicker-body{box-sizing:border-box;flex-direction:column}.epicker-body{display:flex}.epicker.epicker-mobile .epicker-mask{background:#0000004d;bottom:0;box-sizing:border-box;height:100%;left:0;position:fixed;right:0;top:0;width:100%;z-index:9998}.epicker.epicker-mobile .epicker-body{align-items:center;bottom:0;left:0;position:fixed;right:0;z-index:9999}:root{--edate-header-height:34px;--edate-footer-height:var(--edate-header-height,34px);--edate-font-size:14px;--edate-default-color:rgba(0,0,0,.88);--edate-primary-color:#648ffc;--edate-hover-color:var(--edate-default-color,rgba(0,0,0,.88));--edate-hover-bg-color:rgba(0,0,0,.04);--edate-active-color:var(--edate-default-color,rgba(0,0,0,.88));--edate-active-bg-color:#e6f4ff;--edate-disabled-color:rgba(0,0,0,.25);--edate-disabled-bg-color:rgba(0,0,0,.04);--edate-disabled-active-bg-color:rgba(0,0,0,.25);--edate-border-color:rgba(5,5,5,.06);--edate-border-radius:2px;--edate-close-color:#f05757;--edate-calendar-border-radius:50%;--edate-calendar-cell-width:26px;--edate-calendar-cell-height:26px;--edate-badge-color:var(--edate-primary-color,#648ffc);--edate-arrow-color:rgba(0,0,0,.45);--edate-arrow-hover-color:var(--edate-default-color,rgba(0,0,0,.88))}.epicker-mobile .edate-mobile{--edate-hover-bg-color:transparent}.edate-container{background-color:#fff;box-sizing:border-box;display:flex;font-size:14px;max-height:80%;min-width:246px;text-align:center;width:100%}.edate-container *{-webkit-tap-highlight-color:transparent;border:none;box-sizing:border-box;margin:0;outline:none;padding:0}.edate-container li,.edate-container ul{border:0;box-sizing:border-box;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-container table,.edate-container tbody,.edate-container td,.edate-container th,.edate-container thead,.edate-container tr{border:0;border-color:transparent;border-spacing:0;box-sizing:border-box;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-container table:active,.edate-container table:focus,.edate-container table:focus-visible,.edate-container tbody:active,.edate-container tbody:focus,.edate-container tbody:focus-visible,.edate-container td:active,.edate-container td:focus,.edate-container td:focus-visible,.edate-container th:active,.edate-container th:focus,.edate-container th:focus-visible,.edate-container thead:active,.edate-container thead:focus,.edate-container thead:focus-visible,.edate-container tr:active,.edate-container tr:focus,.edate-container tr:focus-visible{background-color:transparent}.edate-container table{height:100%}.edate-panel{display:flex;flex-direction:column;width:100%}.edate-header{align-items:center;border-bottom:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;color:var(--edate-default-color,rgba(0,0,0,.88));display:flex;font-weight:600;height:var(--edate-header-height,34px);justify-content:space-between;line-height:var(--edate-header-height,34px);padding:2px 15px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-header-view{text-align:center;width:40%}.edate-header-title-hover{cursor:pointer;transition:color .2s ease-in-out}.edate-header-title-hover:hover{color:var(--edate-primary-color,#1677ff)}.edate-next-btns,.edate-prev-btns{display:inline-flex;height:var(--edate-header-height,34px);line-height:var(--edate-header-height,34px)}.edate-next-btn,.edate-prev-btn,.edate-super-next-btn,.edate-super-prev-btn{align-items:center;background:0 0;border:0;box-sizing:border-box;color:var(--edate-arrow-color,rgba(0,0,0,.45));cursor:pointer;display:inline-flex;font-size:var(--edate-font-size,14px);height:100%;justify-content:center;line-height:var(--edate-header-height,34px);min-width:1.6em;padding:0;transition:color .2s}.edate-next-btn:not(.edate-disabled):active,.edate-prev-btn:not(.edate-disabled):active,.edate-super-next-btn:not(.edate-disabled):active,.edate-super-prev-btn:not(.edate-disabled):active{color:var(--edate-arrow-hover-color,rgba(0,0,0,.88))}.edate-next-icon,.edate-prev-icon,.edate-super-next-icon,.edate-super-prev-icon{display:inline-flex;height:6px;position:relative;transform:rotate(-45deg);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:6px}.edate-next-icon:before,.edate-prev-icon:before,.edate-super-next-icon:before,.edate-super-prev-icon:before{inset-inline-start:0;top:0}.edate-next-icon:before,.edate-prev-icon:before,.edate-super-next-icon:after,.edate-super-next-icon:before,.edate-super-prev-icon:after,.edate-super-prev-icon:before{border:0 solid;border-block-end-width:0;border-block-start-width:1.5px;border-inline-end-width:0;border-inline-start-width:1.5px;content:"";display:inline-block;height:6px;position:absolute;width:6px}.edate-super-next-icon:after,.edate-super-prev-icon:after{left:-4px;top:-4px}.edate-next-icon,.edate-super-next-icon{transform:rotate(135deg)}.edate-footer{align-items:center;border-bottom:1px solid var(--edate-border-color,rgba(5,5,5,.06));border-left:1px solid var(--edate-border-color,rgba(5,5,5,.06));border-right:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;display:flex;height:var(--edate-footer-height,34px);justify-content:space-between;padding:4px 5px}.edate-btn-text,.edate-now,.edate-today{color:var(--edate-primary-color,#1677ff);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-btn-text:not(.edate-disabled):active,.edate-now:not(.edate-disabled):active,.edate-today:not(.edate-disabled):active{opacity:.75}.edate-close-btn{align-items:center;cursor:pointer;font-size:24px}.edate-close-btn,.edate-close-btn .edate-close-icon{display:inline-flex}.edate-close-btn:active{color:var(--edate-close-color,#f05757)}.edate-btn-text{padding:2px 4px}.edate-btn-text.edate-disabled{color:var(--edate-disabled-color,rgba(0,0,0,.25))!important}.edate-btn{background-image:none;background:transparent;border:1px solid #d9d9d9;border-radius:2px;color:var(--edate-primary-color,#1677ff);cursor:pointer;display:inline-block;font-weight:400;height:20px;line-height:19px;min-width:32px;outline:none;padding:0 4px;position:relative;text-align:center;touch-action:manipulation;transition:all .2s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.edate-btn.edate-disabled{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important;border-color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;cursor:not-allowed!important}.edate-btn-primary{background-color:var(--edate-primary-color,#1677ff);border-color:var(--edate-primary-color,#1677ff);color:#fff}.edate-btn-primary:not(.edate-disabled):active{opacity:.75}.edate-disabled{cursor:not-allowed!important}.edate-disabled:before{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important}.edate-disabled:before,.edate-disabled>*{color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;cursor:not-allowed!important}.edate-picker-date .emonth-container,.edate-picker-date .eyear-container,.edate-picker-month .ecalendar-container,.edate-picker-month .eyear-container,.edate-picker-year .ecalendar-container,.edate-picker-year .emonth-container{display:none}.epicker-mobile.edate-picker-container{border-radius:10px;overflow:hidden}.epicker-mobile.edate-picker-container .epicker-body{background-color:#fff;border-top-left-radius:10px;border-top-right-radius:10px;overflow:hidden;padding-bottom:15px}.epicker-mobile.edate-picker-container .epicker-body .edate-panel{border:none}.epicker-mobile.edate-picker-container .epicker-body .edate-header{border-bottom:none;height:44px}.ecalendar{box-sizing:border-box;cursor:unset;line-height:normal;margin:0;padding-left:0;text-align:left}.ecalendar-panel{border:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;display:flex;flex-direction:column;width:100%}.ecalendar-body{box-sizing:border-box;color:var(--edate-default-color,rgba(0,0,0,.88));flex:1 1 auto;padding:6px 10px}.ecalendar-content{box-sizing:border-box;width:100%}.ecalendar-content th{height:30px}.ecalendar-content tr td{padding:3px 0}.ecalendar-content tr td:before{content:"";display:block;height:var(--edate-calendar-cell-height,24px);position:absolute;width:100%}.ecalendar-cell{box-sizing:border-box;color:rgba(0,0,0,.25);cursor:pointer;padding:0;position:relative;text-align:center}.ecalendar-cell:not(.edate-disabled):hover .ecalendar-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.ecalendar-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.ecalendar-cell-in-view.ecalendar-cell-selected:not(.edate-disabled) .ecalendar-cell-inner{background-color:var(--edate-primary-color,#1677ff)!important;color:#fff}.ecalendar-cell-in-view.ecalendar-cell-selected:not(.edate-disabled) .ecalendar-badge{background-color:#fff}.ecalendar-cell-in-view.ecalendar-cell-selected.edate-disabled .ecalendar-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.25))}.ecalendar-cell-in-view.ecalendar-cell-today .ecalendar-cell-inner{border-color:var(--edate-primary-color,#1677ff)}.ecalendar-cell-in-view.ecalendar-cell-today.edate-disabled .ecalendar-cell-inner{border-color:var(--edate-disabled-bg-color,rgba(0,0,0,.25))}.ecalendar-cell-inner{align-items:center;border:1px solid transparent;border-radius:var(--edate-calendar-border-radius,2px);display:inline-flex;height:var(--edate-calendar-cell-height,26px);inset-inline-end:0;inset-inline-start:0;justify-content:center;line-height:var(--edate-calendar-cell-height,26px);padding:0;position:relative;transition:background .2s,border .2s;width:var(--edate-calendar-cell-width,26px);z-index:2}.ecalendar-cell .ecalendar-badge{background-color:var(--edate-primary-color,#1677ff);border-radius:50%;height:3px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(8px);width:3px;z-index:3}.ecalendar-cell.edate-disabled .ecalendar-badge{background-color:var(--edate-disabled-color,rgba(0,0,0,.25))}.epicker-mobile .ecalendar-content tr td{padding:8px 0}.emonth{cursor:unset;line-height:normal}.emonth-panel{background-color:#fff;border:1px solid var(--edate-border-color,rgba(5,5,5,.06));display:flex;flex-direction:column}.emonth-panel .emonth-body{padding:1px 8px}.emonth-panel table{width:100%}.emonth-panel .emonth-cell{height:52px}.emonth-panel .emonth-cell-inner{padding:0 8px}.emonth-body{color:var(--edate-default-color,rgba(0,0,0,.88));padding:0 10px}.emonth-content{width:100%}.emonth-cell{box-sizing:border-box;color:rgba(0,0,0,.25);cursor:pointer;padding:0;position:relative;text-align:center}.emonth-cell:not(.edate-disabled):hover .emonth-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.emonth-cell:before{content:"";height:22px;inset-inline-end:0;inset-inline-start:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .3s;z-index:1}.emonth-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.emonth-cell-in-view.emonth-cell-selected:not(.edate-disabled) .emonth-cell-inner{background-color:var(--edate-primary-color,#1677ff)!important;color:#fff}.emonth-cell-in-view.emonth-cell-selected.edate-disabled .emonth-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important}.emonth-cell-inner{border-radius:var(--edate-border-radius,2px);display:inline-block;height:22px;line-height:22px;min-width:22px;position:relative;transition:background .2s,border .2s;z-index:2}.eyear{cursor:unset;line-height:normal}.eyear-layout{align-items:stretch;display:flex;flex-wrap:nowrap}.eyear-panel{background-color:#fff;border:1px solid var(--edate-border-color,rgba(5,5,5,.06));display:flex;flex-direction:column}.eyear-panel .eyear-body{padding:1px 8px}.eyear-panel table{width:100%}.eyear-panel .eyear-cell{height:52px}.eyear-panel .eyear-cell-inner{padding:0 8px}.eyear-body{padding:0 10px}.eyear-cell{box-sizing:border-box;color:rgba(0,0,0,.25);cursor:pointer;padding:0;position:relative;text-align:center}.eyear-cell:not(.edate-disabled):hover .eyear-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.eyear-cell:before{content:"";height:22px;inset-inline-end:0;inset-inline-start:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .3s;z-index:1}.eyear-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.eyear-cell-in-view.eyear-cell-selected:not(.edate-disabled) .eyear-cell-inner{background-color:var(--edate-primary-color,#1677ff);color:#fff}.eyear-cell-in-view.eyear-cell-selected.edate-disabled .eyear-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))}.eyear-cell-inner{border-radius:var(--data-picker-border-radius,2px);display:inline-block;height:22px;line-height:22px;min-width:22px;position:relative;transition:background .2s,border .2s;z-index:2}
1
+ .epicker-body-noscroll{overflow:hidden;touch-action:none}.epicker{box-shadow:0 9px 28px 8px #0000000d;display:none;margin:0;opacity:0;padding:0;position:absolute;transition:opacity .3s ease;vertical-align:top;z-index:1000}.epicker,.epicker-body{box-sizing:border-box;flex-direction:column}.epicker-body{display:flex}.epicker.epicker-mobile .epicker-mask{background:#0000004d;bottom:0;box-sizing:border-box;height:100%;left:0;position:fixed;right:0;top:0;width:100%;z-index:9998}.epicker.epicker-mobile .epicker-body{align-items:center;bottom:0;left:0;position:fixed;right:0;z-index:9999}:root{--edate-header-height:34px;--edate-footer-height:36px;--edate-font-size:14px;--edate-min-width:246px;--edate-border-radius:2px;--edate-bg-color:#fff;--edate-default-color:rgba(0,0,0,.88);--edate-primary-color:#648ffc;--edate-on-primary-color:#fff;--edate-out-view-color:rgba(0,0,0,.25);--edate-hover-color:var(--edate-default-color,rgba(0,0,0,.88));--edate-hover-bg-color:rgba(0,0,0,.04);--edate-active-color:var(--edate-default-color,rgba(0,0,0,.88));--edate-active-bg-color:#e6f4ff;--edate-disabled-color:rgba(0,0,0,.25);--edate-disabled-bg-color:rgba(0,0,0,.04);--edate-disabled-active-bg-color:rgba(0,0,0,.25);--edate-border-color:rgba(5,5,5,.06);--edate-btn-border-color:#d9d9d9;--edate-close-color:#f05757;--edate-arrow-color:rgba(0,0,0,.45);--edate-calendar-border-radius:50%;--edate-calendar-cell-width:26px;--edate-calendar-cell-height:26px;--edate-calendar-weekday-height:30px;--edate-badge-color:var(--edate-primary-color,#648ffc);--edate-badge-size:3px;--edate-month-cell-height:52px;--edate-month-cell-inner-min-width:22px;--edate-month-cell-inner-height:22px;--edate-year-cell-height:52px;--edate-year-cell-inner-min-width:22px;--edate-year-cell-inner-height:22px;--edate-time-column-height:208px;--edate-time-cell-height:30px;--edate-arrow-hover-color:var(--edate-default-color,rgba(0,0,0,.88))}.epicker-mobile .edate-mobile{--edate-hover-bg-color:transparent}.edate-container{background-color:var(--edate-bg-color,#fff);box-sizing:border-box;display:flex;font-size:var(--edate-font-size,14px);max-height:80%;min-width:var(--edate-min-width,246px);text-align:center;width:100%}.edate-container *{-webkit-tap-highlight-color:transparent;border:none;box-sizing:border-box;margin:0;outline:none;padding:0}.edate-container li,.edate-container ul{border:0;box-sizing:border-box;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-container table,.edate-container tbody,.edate-container td,.edate-container th,.edate-container thead,.edate-container tr{border:0;border-color:transparent;border-spacing:0;box-sizing:border-box;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-container table:active,.edate-container table:focus,.edate-container table:focus-visible,.edate-container tbody:active,.edate-container tbody:focus,.edate-container tbody:focus-visible,.edate-container td:active,.edate-container td:focus,.edate-container td:focus-visible,.edate-container th:active,.edate-container th:focus,.edate-container th:focus-visible,.edate-container thead:active,.edate-container thead:focus,.edate-container thead:focus-visible,.edate-container tr:active,.edate-container tr:focus,.edate-container tr:focus-visible{background-color:transparent}.edate-container table{height:100%}.edate-panel{display:flex;flex-direction:column;width:100%}.edate-header{align-items:center;border-bottom:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;color:var(--edate-default-color,rgba(0,0,0,.88));display:flex;font-weight:600;height:var(--edate-header-height,34px);justify-content:space-between;line-height:var(--edate-header-height,34px);padding:2px 15px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-header-view{text-align:center;width:40%}.edate-header-title-hover{cursor:pointer;transition:color .2s ease-in-out}.edate-header-title-hover:hover{color:var(--edate-primary-color,#1677ff)}.edate-next-btns,.edate-prev-btns{display:inline-flex;height:var(--edate-header-height,34px);line-height:var(--edate-header-height,34px)}.edate-next-btn,.edate-prev-btn,.edate-super-next-btn,.edate-super-prev-btn{align-items:center;background:0 0;border:0;box-sizing:border-box;color:var(--edate-arrow-color,rgba(0,0,0,.45));cursor:pointer;display:inline-flex;font-size:var(--edate-font-size,14px);height:100%;justify-content:center;line-height:var(--edate-header-height,34px);min-width:1.6em;padding:0;transition:color .2s}.edate-next-btn:not(.edate-disabled):active,.edate-prev-btn:not(.edate-disabled):active,.edate-super-next-btn:not(.edate-disabled):active,.edate-super-prev-btn:not(.edate-disabled):active{color:var(--edate-arrow-hover-color,rgba(0,0,0,.88))}.edate-next-icon,.edate-prev-icon,.edate-super-next-icon,.edate-super-prev-icon{display:inline-flex;height:6px;position:relative;transform:rotate(-45deg);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:6px}.edate-next-icon:before,.edate-prev-icon:before,.edate-super-next-icon:before,.edate-super-prev-icon:before{inset-inline-start:0;top:0}.edate-next-icon:before,.edate-prev-icon:before,.edate-super-next-icon:after,.edate-super-next-icon:before,.edate-super-prev-icon:after,.edate-super-prev-icon:before{border:0 solid;border-block-end-width:0;border-block-start-width:1.5px;border-inline-end-width:0;border-inline-start-width:1.5px;content:"";display:inline-block;height:6px;position:absolute;width:6px}.edate-super-next-icon:after,.edate-super-prev-icon:after{left:-4px;top:-4px}.edate-next-icon,.edate-super-next-icon{transform:rotate(135deg)}.edate-footer{align-items:center;border-top:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;display:flex;font-size:12px;height:var(--edate-footer-height,36px);justify-content:flex-end;padding:6px 8px}.edate-footer .edate-btn+.edate-btn{margin-left:7px}.edate-btn-text,.edate-cancel,.edate-now,.edate-today{color:var(--edate-primary-color,#1677ff);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.edate-btn-text:not(.edate-disabled):active,.edate-cancel:not(.edate-disabled):active,.edate-now:not(.edate-disabled):active,.edate-today:not(.edate-disabled):active{opacity:.75}.edate-close-btn{align-items:center;cursor:pointer;font-size:24px}.edate-close-btn,.edate-close-btn .edate-close-icon{display:inline-flex}.edate-close-btn:active{color:var(--edate-close-color,#f05757)}.edate-btn-text{padding:2px 4px}.edate-btn-text.edate-disabled{color:var(--edate-disabled-color,rgba(0,0,0,.25))!important}.edate-btn{background-image:none;background:transparent;border:1px solid var(--edate-btn-border-color,#d9d9d9);border-radius:var(--edate-border-radius,2px);color:var(--edate-default-color,#262626);cursor:pointer;display:inline-block;font-size:12px;font-weight:400;height:24px;line-height:23px;min-width:32px;outline:none;padding:0 5px;position:relative;text-align:center;touch-action:manipulation;transition:all .2s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.edate-btn.edate-disabled{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important;border-color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;cursor:not-allowed!important}.edate-btn-primary{background-color:var(--edate-primary-color,#1677ff);border-color:var(--edate-primary-color,#1677ff);color:var(--edate-on-primary-color,#fff)}.edate-btn-primary:not(.edate-disabled):active{opacity:.75}.edate-disabled{cursor:not-allowed!important}.edate-disabled:before{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important}.edate-disabled:before,.edate-disabled>*{color:var(--edate-disabled-color,rgba(0,0,0,.25))!important;cursor:not-allowed!important}.edate-picker-date .emonth-container,.edate-picker-date .eyear-container,.edate-picker-month .ecalendar-container,.edate-picker-month .eyear-container,.edate-picker-year .ecalendar-container,.edate-picker-year .emonth-container{display:none}.edate-picker{border-radius:2px;overflow:hidden}.edate-picker .edate-panel{border:none}.epicker-mobile.edate-picker .epicker-body{background-color:var(--edate-bg-color,#fff);border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:10px;border-top-right-radius:10px;overflow:hidden;padding-bottom:15px}.epicker-mobile.edate-picker .epicker-body .edate-header{border-bottom:none;height:44px}.ecalendar{box-sizing:border-box;cursor:unset;line-height:normal;margin:0;padding-left:0;text-align:left}.ecalendar-panel{border:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;display:flex;flex-direction:column;width:100%}.ecalendar-body{box-sizing:border-box;color:var(--edate-default-color,rgba(0,0,0,.88));flex:1 1 auto;padding:6px 10px}.ecalendar-content{box-sizing:border-box;width:100%}.ecalendar-content th{height:var(--edate-calendar-weekday-height,30px)}.ecalendar-content tr td{padding:3px 0}.ecalendar-content tr td:before{content:"";display:block;height:var(--edate-calendar-cell-height,24px);position:absolute;width:100%}.ecalendar-cell{box-sizing:border-box;color:var(--edate-out-view-color,rgba(0,0,0,.25));cursor:pointer;padding:0;position:relative;text-align:center}.ecalendar-cell:not(.edate-disabled):hover .ecalendar-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.ecalendar-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.ecalendar-cell-in-view.ecalendar-cell-selected:not(.edate-disabled) .ecalendar-cell-inner{background-color:var(--edate-primary-color,#1677ff)!important;color:var(--edate-on-primary-color,#fff)}.ecalendar-cell-in-view.ecalendar-cell-selected:not(.edate-disabled) .ecalendar-badge{background-color:var(--edate-on-primary-color,#fff)}.ecalendar-cell-in-view.ecalendar-cell-selected.edate-disabled .ecalendar-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.25))}.ecalendar-cell-in-view.ecalendar-cell-today .ecalendar-cell-inner{border-color:var(--edate-primary-color,#1677ff)}.ecalendar-cell-in-view.ecalendar-cell-today.edate-disabled .ecalendar-cell-inner{border-color:var(--edate-disabled-bg-color,rgba(0,0,0,.25))}.ecalendar-cell-inner{align-items:center;border:1px solid transparent;border-radius:var(--edate-calendar-border-radius,2px);display:inline-flex;height:var(--edate-calendar-cell-height,26px);inset-inline-end:0;inset-inline-start:0;justify-content:center;line-height:var(--edate-calendar-cell-height,26px);padding:0;position:relative;transition:background .2s,border .2s;width:var(--edate-calendar-cell-width,26px);z-index:2}.ecalendar-cell .ecalendar-badge{background-color:var(--edate-badge-color,#1677ff);border-radius:50%;height:var(--edate-badge-size,3px);left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(8px);width:var(--edate-badge-size,3px);z-index:3}.ecalendar-cell.edate-disabled .ecalendar-badge{background-color:var(--edate-disabled-color,rgba(0,0,0,.25))}.epicker-mobile .ecalendar-content tr td{padding:8px 0}.emonth{cursor:unset;line-height:normal}.emonth-panel{background-color:#fff;border:1px solid var(--edate-border-color,rgba(5,5,5,.06));display:flex;flex-direction:column}.emonth-panel .emonth-body{padding:1px 8px}.emonth-panel table{width:100%}.emonth-panel .emonth-cell{height:var(--edate-month-cell-height,52px)}.emonth-panel .emonth-cell-inner{padding:0 8px}.emonth-body{color:var(--edate-default-color,rgba(0,0,0,.88));padding:0 10px}.emonth-content{width:100%}.emonth-cell{box-sizing:border-box;color:var(--edate-out-view-color,rgba(0,0,0,.25));cursor:pointer;padding:0;position:relative;text-align:center}.emonth-cell:not(.edate-disabled):hover .emonth-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.emonth-cell:before{content:"";height:var(--edate-month-cell-inner-height,22px);inset-inline-end:0;inset-inline-start:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .3s;z-index:1}.emonth-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.emonth-cell-in-view.emonth-cell-selected:not(.edate-disabled) .emonth-cell-inner{background-color:var(--edate-primary-color,#1677ff)!important;color:var(--edate-on-primary-color,#fff)}.emonth-cell-in-view.emonth-cell-selected.edate-disabled .emonth-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))!important}.emonth-cell-inner{border-radius:var(--edate-border-radius,2px);display:inline-block;height:var(--edate-month-cell-inner-height,22px);line-height:var(--edate-month-cell-inner-height,22px);min-width:var(--edate-month-cell-inner-min-width,22px);position:relative;transition:background .2s,border .2s;z-index:2}.eyear{cursor:unset;line-height:normal}.eyear-layout{align-items:stretch;display:flex;flex-wrap:nowrap}.eyear-panel{background-color:#fff;border:1px solid var(--edate-border-color,rgba(5,5,5,.06));display:flex;flex-direction:column}.eyear-panel .eyear-body{padding:1px 8px}.eyear-panel table{width:100%}.eyear-panel .eyear-cell{height:var(--edate-year-cell-height,52px)}.eyear-panel .eyear-cell-inner{padding:0 8px}.eyear-body{padding:0 10px}.eyear-cell{box-sizing:border-box;color:var(--edate-out-view-color,rgba(0,0,0,.25));cursor:pointer;padding:0;position:relative;text-align:center}.eyear-cell:not(.edate-disabled):hover .eyear-cell-inner{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04))}.eyear-cell:before{content:"";height:var(--edate-year-cell-inner-height,22px);inset-inline-end:0;inset-inline-start:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .3s;z-index:1}.eyear-cell-in-view{color:var(--edate-default-color,rgba(0,0,0,.88))}.eyear-cell-in-view.eyear-cell-selected:not(.edate-disabled) .eyear-cell-inner{background-color:var(--edate-primary-color,#1677ff);color:var(--edate-on-primary-color,#fff)}.eyear-cell-in-view.eyear-cell-selected.edate-disabled .eyear-cell-inner{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))}.eyear-cell-inner{border-radius:var(--edate-border-radius,2px);display:inline-block;height:var(--edate-year-cell-inner-height,22px);line-height:var(--edate-year-cell-inner-height,22px);min-width:var(--edate-year-cell-inner-min-width,22px);position:relative;transition:background .2s,border .2s;z-index:2}.epicker-mobile .etime-container{padding-bottom:env(safe-area-inset-bottom)}.etime-container{max-height:unset;min-width:unset}.etime-panel{border:1px solid var(--edate-border-color,rgba(5,5,5,.06));display:flex;flex-direction:column}.etime-body{display:flex;flex-direction:row;width:100%}.etime-header{justify-content:center}.etime-column{-webkit-tap-highlight-color:transparent;border-inline-start:1px solid var(--edate-border-color,rgba(5,5,5,.06));box-sizing:border-box;flex:1 1 33.33333%;overflow:hidden;position:relative;touch-action:none;width:33.33333%}.etime-column:first-child{border-inline-start:0}.etime-track{backface-visibility:hidden;-webkit-backface-visibility:hidden;list-style:none;margin:1px 0;padding:0;transform:translateY(0);will-change:transform}.etime-track li{box-sizing:border-box;margin:0;padding:0;width:100%}.etime-cell{position:relative}.etime-cell:before{border-radius:4px;content:"";cursor:pointer;height:100%;position:absolute;width:100%;z-index:-1}.etime-cell .etime-cell-inner{box-sizing:border-box;color:var(--edate-default-color,rgba(0,0,0,.88));cursor:pointer;display:inline-block;margin:0;padding-left:4px;padding-right:4px;transition:background .2s;width:100%}.etime-cell-selected:not(.edate-disabled) div{background-color:var(--edate-active-bg-color,#f0f7ff);color:var(--edate-active-color,rgba(0,0,0,.88))}.etime-cell-selected.edate-disabled div{background-color:var(--edate-disabled-bg-color,rgba(0,0,0,.04))}.etime-cell:not(.edate-disabled) .etime-cell-inner:hover{background-color:var(--edate-hover-bg-color,rgba(0,0,0,.04));color:var(--edate-hover-color,rgba(0,0,0,.88))}.etime-picker{border-radius:2px;overflow:hidden}.etime-picker .etime-panel{border:none}.etime-picker .etime-container{width:160px}
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/control-date-picker v2.0.0-beta.3
3
- * Copyright (c) 2026-05-04 Ezviz-OpenBiz
2
+ * @ezuikit/control-date-picker v2.1.0-beta.1
3
+ * Copyright (c) 2026-06-24 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  require("./style.css");
@@ -0,0 +1,127 @@
1
+ // @use "~@common/components/dist/style/_style.scss" as common;
2
+ // @use "~@skax/picker/dist/style/_style.scss" as picker;
3
+
4
+ @use '../style/_style.scss' as common;
5
+ @use '@skax/picker/dist/style/style.scss' as picker;
6
+
7
+ $time-prefix-cls: etime;
8
+
9
+ .#{picker.$picker-prefix}-mobile .#{$time-prefix-cls}-container {
10
+ padding-bottom: #{'constant(safe-area-inset-bottom)'}; /*兼容 IOS<11.2*/
11
+ padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/
12
+ }
13
+
14
+ .#{$time-prefix-cls} {
15
+ &-container {
16
+ min-width: unset;
17
+ max-height: unset;
18
+ }
19
+
20
+ &-panel {
21
+ display: flex;
22
+ flex-direction: column;
23
+ border: 1px solid var(--edate-border-color, rgba(5, 5, 5, 0.06));
24
+ }
25
+
26
+ &-body {
27
+ display: flex;
28
+ flex-direction: row;
29
+ width: 100%;
30
+ }
31
+
32
+ &-header {
33
+ justify-content: center;
34
+ }
35
+
36
+ // 列视口:定高裁剪容器,纵向平移由 JS 通过 transform 接管(无原生滚动)
37
+ &-column {
38
+ position: relative;
39
+ flex: 1 1 33.33333%;
40
+ width: 33.33333%;
41
+ overflow: hidden;
42
+ box-sizing: border-box;
43
+ border-inline-start: 1px solid var(--edate-border-color, rgba(5, 5, 5, 0.06));
44
+ // 由 JS 接管纵向平移,禁用浏览器默认手势滚动,避免移动端冲突
45
+ touch-action: none;
46
+ -webkit-tap-highlight-color: transparent;
47
+
48
+ &:first-child {
49
+ border-inline-start: 0;
50
+ }
51
+ }
52
+
53
+ // 平移轨道:承载单元格,整体被 translateY 平移
54
+ &-track {
55
+ list-style: none;
56
+ margin: 1px 0;
57
+ padding: 0;
58
+ transform: translateY(0);
59
+ // 丝滑 & 兼容性:提示合成层 + 减少子像素抖动
60
+ will-change: transform;
61
+ backface-visibility: hidden;
62
+ -webkit-backface-visibility: hidden;
63
+
64
+ li {
65
+ margin: 0;
66
+ // 单元格平分/铺满所在列宽
67
+ width: 100%;
68
+ box-sizing: border-box;
69
+ padding: 0px;
70
+ }
71
+ }
72
+
73
+ &-cell {
74
+ position: relative;
75
+
76
+ &::before {
77
+ content: '';
78
+ position: absolute;
79
+ width: 100%;
80
+ height: 100%;
81
+ z-index: -1;
82
+ border-radius: 4px;
83
+ cursor: pointer;
84
+ }
85
+ }
86
+
87
+ &-cell &-cell-inner {
88
+ display: inline-block;
89
+ margin: 0;
90
+ color: var(--edate-default-color, rgba(0, 0, 0, 0.88));
91
+ cursor: pointer;
92
+ transition: background 0.2s;
93
+ box-sizing: border-box;
94
+ padding-left: 4px;
95
+ padding-right: 4px;
96
+ width: 100%;
97
+ }
98
+
99
+ &-cell-selected:not(.#{common.$disabled}) div {
100
+ background-color: var(--edate-active-bg-color, #f0f7ff);
101
+ color: var(--edate-active-color, rgba(0, 0, 0, 0.88));
102
+ }
103
+
104
+ &-cell-selected.#{common.$disabled} div {
105
+ background-color: var(--edate-disabled-bg-color, rgba(0, 0, 0, 0.04));
106
+ }
107
+
108
+ &-cell:not(.#{common.$disabled}) .#{$time-prefix-cls}-cell-inner {
109
+ &:hover {
110
+ color: var(--edate-hover-color, rgba(0, 0, 0, 0.88));
111
+ background-color: var(--edate-hover-bg-color, rgba(0, 0, 0, 0.04));
112
+ }
113
+ }
114
+
115
+ &-picker {
116
+ border-radius: 2px;
117
+ overflow: hidden;
118
+
119
+ .#{$time-prefix-cls}-panel {
120
+ border: none;
121
+ }
122
+
123
+ .#{$time-prefix-cls}-container {
124
+ width: 160px;
125
+ }
126
+ }
127
+ }
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  & .#{common.$eyear-prefix-cls}-cell {
29
- height: 52px;
29
+ height: var(--edate-year-cell-height, 52px);
30
30
  }
31
31
 
32
32
  & .#{common.$eyear-prefix-cls}-cell-inner {
@@ -49,7 +49,7 @@
49
49
  padding: 0px 0;
50
50
  cursor: pointer;
51
51
  text-align: center;
52
- color: rgba(0, 0, 0, 0.25);
52
+ color: var(--edate-out-view-color, rgba(0, 0, 0, 0.25));
53
53
  box-sizing: border-box;
54
54
 
55
55
  &:not(.#{common.$disabled}):hover &-inner {
@@ -62,7 +62,7 @@
62
62
  inset-inline-start: 0;
63
63
  inset-inline-end: 0;
64
64
  z-index: 1;
65
- height: 22px;
65
+ height: var(--edate-year-cell-inner-height, 22px);
66
66
  transform: translateY(-50%);
67
67
  transition: all 0.3s;
68
68
  content: '';
@@ -73,7 +73,7 @@
73
73
 
74
74
  &.#{common.$eyear-prefix-cls}-cell-selected:not(.#{common.$disabled}) .#{common.$eyear-prefix-cls}-cell-inner {
75
75
  background-color: var(--edate-primary-color, #1677ff);
76
- color: #fff;
76
+ color: var(--edate-on-primary-color, #fff);
77
77
  }
78
78
  &.#{common.$eyear-prefix-cls}-cell-selected.#{common.$disabled} .#{common.$eyear-prefix-cls}-cell-inner {
79
79
  background-color: var(--edate-disabled-bg-color, rgba(0, 0, 0, 0.04));
@@ -84,10 +84,10 @@
84
84
  position: relative;
85
85
  z-index: 2;
86
86
  display: inline-block;
87
- min-width: 22px;
88
- height: 22px;
89
- line-height: 22px;
90
- border-radius: var(--data-picker-border-radius, 2px);
87
+ min-width: var(--edate-year-cell-inner-min-width, 22px);
88
+ height: var(--edate-year-cell-inner-height, 22px);
89
+ line-height: var(--edate-year-cell-inner-height, 22px);
90
+ border-radius: var(--edate-border-radius, 2px);
91
91
  transition:
92
92
  background 0.2s,
93
93
  border 0.2s;
@@ -1,4 +1,5 @@
1
1
  import { DateTime } from '@ezuikit/utils-tools';
2
+ import { DelegateEvent } from '@skax/delegate';
2
3
  import Picker, { PickerOptions } from '@skax/picker';
3
4
 
4
5
  interface CalendarLocale {
@@ -8,6 +9,10 @@ interface CalendarLocale {
8
9
  months: string[];
9
10
  today: string;
10
11
  ok: string;
12
+ /** 时间选择「此刻」文案 */
13
+ now: string;
14
+ /** 时间选择「取消」文案 */
15
+ cancel: string;
11
16
  }
12
17
 
13
18
  /**
@@ -135,6 +140,8 @@ interface HeaderOptions {
135
140
  declare class Header {
136
141
  options: Required<HeaderOptions>;
137
142
  $header: HTMLElement | null;
143
+ /** 头部内部事件委托集合,destroy 时统一解绑(修复监听泄漏 P0)。 */
144
+ private _delegations;
138
145
  constructor(options: HeaderOptions);
139
146
  private _render;
140
147
  private _getStrOrFunToStr;
@@ -228,6 +235,12 @@ declare class Container<T extends ContainerOptions> {
228
235
  * header.
229
236
  */
230
237
  header: Header | null;
238
+ /**
239
+ * 该容器注册的事件委托集合,destroy 时统一解绑(修复监听泄漏 P0)。
240
+ */
241
+ protected _delegations: Array<{
242
+ destroy: () => void;
243
+ }>;
231
244
  /**
232
245
  * The locale object for the current language.
233
246
  */
@@ -239,6 +252,12 @@ declare class Container<T extends ContainerOptions> {
239
252
  * @returns {void}
240
253
  */
241
254
  private _setLocale;
255
+ /**
256
+ * 注册事件委托并登记,便于 destroy 统一解绑(修复 delegate 监听不解绑导致的泄漏 P0)。
257
+ * 子类应使用本方法替代直接调用 delegate。
258
+ * @returns {{ destroy: () => void }} delegate 句柄
259
+ */
260
+ protected _delegate(el: Element, selector: string, type: string, cb: (e: DelegateEvent) => void, useCapture?: boolean): any;
242
261
  /**
243
262
  * destroy content node
244
263
  * @example
@@ -589,7 +608,7 @@ declare class Month extends Container<MonthOptions> {
589
608
  /**
590
609
  * 年历 (12 年)配置项
591
610
  */
592
- interface YearOptions extends Omit<ContainerOptions, 'showPrevIcon' | 'showNextIcon' | 'renderPrevIcon' | 'renderNextIcon'> {
611
+ interface YearOptions extends Omit<ContainerOptions, 'prefixCls' | 'showPrevIcon' | 'showNextIcon' | 'renderPrevIcon' | 'renderNextIcon'> {
593
612
  /** 当前时间 或当前年份 */
594
613
  current?: Date | number;
595
614
  /** 是否展示头部, 默认 true */
@@ -812,5 +831,185 @@ declare class DatePicker extends Picker {
812
831
  private _removeCurrentTypeClass;
813
832
  }
814
833
 
815
- export { Calendar, DatePicker, Header, Month, Year };
816
- export type { CalendarLocale, CalendarOptions, ContainerOptions, DatePickerModeType, DatePickerOptions, HeaderOptions, MonthOptions, PopupContainerEle, YearOptions };
834
+ /**
835
+ * @zh 时间选择器配置
836
+ * @en time options
837
+ */
838
+ interface TimeOptions extends ContainerOptions {
839
+ /** 当前时分秒 00:00:00 */
840
+ current?: string;
841
+ /** 自定义行高, 默认 208px */
842
+ columnHeight?: number;
843
+ /** 自定义行宽, 默认 120 */
844
+ width?: number;
845
+ /** 自定义cell高, 默认 30 */
846
+ cellHeight?: number;
847
+ /** 是否显示头部, 默认 true */
848
+ showHeader?: boolean;
849
+ /** 是否显示底部, 默认 true */
850
+ showFooter?: boolean;
851
+ /** 是否显示底部「取消」按钮,默认 false */
852
+ showCancel?: boolean;
853
+ /** 是否显示底部「确定」按钮,默认 false */
854
+ showOk?: boolean;
855
+ /** 禁用小时, true 禁用小时 */
856
+ disabledHour?: (time: number) => boolean;
857
+ /** 禁用分钟, true 禁用分钟 */
858
+ disabledMinute?: (time: number) => boolean;
859
+ /** 禁用秒, true 禁用秒 */
860
+ disabledSecond?: (time: number) => boolean;
861
+ /** 点击 单元格 cell */
862
+ onCell?: (type: string, time: string, times: string[]) => void;
863
+ /** time 变换后 */
864
+ onChange?: (type: string, time: string, times: string[]) => void;
865
+ /** 点击底部「取消」回调 */
866
+ onCancel?: () => void;
867
+ }
868
+ /**
869
+ * 时分秒控件
870
+ *
871
+ * 滚动交互采用 **CSS transform: translateY 平移**(不依赖原生 overflow 滚动):
872
+ * - 鼠标滚轮:实时跟随平移,停止后吸附到最近单元格;
873
+ * - 点击单元格:选中并平移到列顶部;
874
+ * - 移动端:触摸拖拽平移 + 抬手惯性吸附;
875
+ * - 平移过渡使用 transform + transition,开启 will-change 保证丝滑;
876
+ * - 事件监听做被动模式能力检测,兼容主流浏览器与旧环境。
877
+ */
878
+ declare class Time extends Container<TimeOptions> {
879
+ options: Required<TimeOptions>;
880
+ private _current;
881
+ /** 已绑定的平移事件清理函数集合,destroy 时统一解绑 */
882
+ private _panCleanups;
883
+ constructor(container: PopupContainerEle, options: TimeOptions);
884
+ /**
885
+ * 获取时分秒数组 ["21", "30", "37"]
886
+ * @returns {[string, string, string]}
887
+ */
888
+ get _currentTimes(): string[];
889
+ /**
890
+ * 获取当前时间
891
+ * @returns {string} "00:00:00"
892
+ */
893
+ get current(): string | undefined;
894
+ /**
895
+ * set current time
896
+ * @param {string | [string, string, string]} time 设置激活时间
897
+ */
898
+ setCurrent(time?: string | [string, string, string]): void;
899
+ /**
900
+ * 销毁:先解绑平移事件再销毁容器。
901
+ */
902
+ destroy(): void;
903
+ private _events;
904
+ /** 当前三列(视口)元素 */
905
+ private get _columns();
906
+ /** 取某列内的轨道(被平移的 ul) */
907
+ private _trackOf;
908
+ /** 测量单元格高度:优先取真实渲染高度,无布局(如测试 / 样式未加载)时回退到选项值 */
909
+ private _measureCellHeight;
910
+ /** 单元格最大索引(用于钳制平移范围) */
911
+ private _maxIndex;
912
+ private _clamp;
913
+ /** 读取轨道当前平移量(px,<=0) */
914
+ private _getTrackOffset;
915
+ /**
916
+ * 设置轨道平移量并钳制到合法区间 [-(maxIndex*cellH), 0]。
917
+ * @param smooth 是否启用过渡动画(点击 / 吸附为 true;拖拽 / 滚轮跟随为 false)
918
+ */
919
+ private _setTrackOffset;
920
+ /** 把指定单元格平移到列顶部 */
921
+ private _panCellToTop;
922
+ /** 吸附到最近的单元格边界 */
923
+ private _snapColumn;
924
+ /**
925
+ * 根据当前时间把各列选中项平移到顶部。
926
+ * @param behavior 'smooth' 带过渡(默认);'auto' 立即定位(用于首帧)
927
+ * @private 内部方法:由 setCurrent / 构造 / 点击等流程驱动,不对外暴露
928
+ */
929
+ private activeItem;
930
+ /** 被动监听能力检测(兼容旧浏览器;支持时用 {passive:false} 以允许 preventDefault) */
931
+ private _supportsPassive;
932
+ private _bindPanEvents;
933
+ /** 鼠标滚轮:实时跟随平移,停止后吸附 */
934
+ private _bindColumnWheel;
935
+ /** 触摸拖拽(移动端):拖动跟随 + 抬手惯性吸附 */
936
+ private _bindColumnTouch;
937
+ private _render;
938
+ /**
939
+ * 渲染底部 footer(取消 / 确定),默认不展示(showCancel / showOk 均为 false)。
940
+ * @private
941
+ */
942
+ private _renderFooter;
943
+ private _renderTimeBody;
944
+ /**
945
+ * 生成时分秒列:外层 .etime-column 为定高视口(overflow hidden),
946
+ * 内层 .etime-track(ul)承载单元格并被 transform 平移。
947
+ * @param { "hour" | "minute" | "second"} type
948
+ * @param {string[]} times 时间数组
949
+ * @returns {string} 列 dom 字符串
950
+ */
951
+ private _generateList;
952
+ /**
953
+ * 检查时分秒格式化是否正确
954
+ * @param {string | [string, string, string]} time 时间字符串 HH:mm:ss
955
+ * @returns {boolean} true 正确 false 不正确
956
+ */
957
+ private _checkTimeFmt;
958
+ }
959
+
960
+ /**
961
+ * TimePicker 配置。footer(取消 / 确定)能力来自内嵌 `Time`:
962
+ * `showCancel` / `showOk` / `onOk` / `onCancel` 透传给 Time,弹层默认展示 footer。
963
+ */
964
+ interface TimePickerOptions extends PickerOptions, Omit<TimeOptions, 'onOk' | 'onChange'> {
965
+ /** 点击底部「确定」回调,参数为当前时间 HH:mm:ss */
966
+ onOk?: (time: string) => void;
967
+ /**
968
+ *
969
+ * @param type
970
+ * @param time
971
+ * @param times
972
+ * @returns
973
+ */
974
+ onChange: (time: string, times: string[]) => void;
975
+ }
976
+ /**
977
+ * 时分秒选择弹层
978
+ *
979
+ * 在 `Time` 面板外层包一层 `@skax/picker` 弹层,提供触发、定位与显隐控制。
980
+ * `Time` 面板在弹层首次打开时懒创建并挂载到 `this.$body`;footer 的「取消 / 确定」
981
+ * 由 `Time` 渲染,TimePicker 仅在其回调中补充「关闭弹层」行为。
982
+ */
983
+ declare class TimePicker extends Picker {
984
+ options: TimePickerOptions;
985
+ /** 内嵌时分秒面板,弹层首次打开时懒创建 */
986
+ time: Time | null;
987
+ private _current;
988
+ constructor(container: HTMLElement | (() => HTMLElement) | null, options: TimePickerOptions);
989
+ /**
990
+ * 获取当前时间
991
+ * @returns {string} "00:00:00"
992
+ */
993
+ get current(): string;
994
+ /**
995
+ * set current time
996
+ * @param {string | [string, string, string]} time 设置激活时间
997
+ */
998
+ setCurrent(time?: string | [string, string, string]): void;
999
+ /**
1000
+ * 收起弹层
1001
+ */
1002
+ hide(): void;
1003
+ /**
1004
+ * 销毁:先销毁内嵌面板再销毁弹层。
1005
+ */
1006
+ destroy(): void;
1007
+ /**
1008
+ * Picker 的 onOpenChange,在 open=true 时懒创建面板(含 footer)并定位到选中时间。
1009
+ * @param {boolean} open
1010
+ */
1011
+ protected _onOpenChange(open: boolean): void;
1012
+ }
1013
+
1014
+ export { Calendar, DatePicker, Header, Month, Time, TimePicker, Year };
1015
+ export type { CalendarLocale, CalendarOptions, ContainerOptions, DatePickerModeType, DatePickerOptions, HeaderOptions, MonthOptions, PopupContainerEle, TimeOptions, TimePickerOptions, YearOptions };
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@ezuikit/control-date-picker",
3
- "version": "2.0.0-beta.3",
3
+ "version": "2.1.0-beta.1",
4
4
  "description": "date picker control for ezviz",
5
5
  "title": "date-picker",
6
6
  "main": "dist/index.cjs",
7
- "module": "dist/index.mjs",
7
+ "module": "dist/index.esm.js",
8
8
  "types": "dist/types/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/types/index.d.ts",
12
- "import": "./dist/index.mjs",
12
+ "import": "./dist/index.esm.js",
13
13
  "require": "./dist/index.cjs",
14
14
  "default": "./dist/index.cjs"
15
15
  },