@varlet/ui 1.26.4 → 1.26.7

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.
Files changed (40) hide show
  1. package/README.en-US.md +14 -15
  2. package/README.md +19 -18
  3. package/es/date-picker/DatePicker.js +86 -12
  4. package/es/date-picker/date-picker.css +1 -1
  5. package/es/date-picker/date-picker.less +11 -0
  6. package/es/date-picker/props.js +4 -0
  7. package/es/date-picker/src/day-picker-panel.js +17 -4
  8. package/es/date-picker/src/month-picker-panel.js +17 -4
  9. package/es/date-picker/src/panel-header.js +1 -0
  10. package/es/image-preview/ImagePreview.js +4 -1
  11. package/es/image-preview/imagePreview.css +1 -1
  12. package/es/image-preview/imagePreview.less +11 -1
  13. package/es/index-bar/IndexBar.js +8 -14
  14. package/es/snackbar/style/index.js +1 -1
  15. package/es/snackbar/style/less.js +1 -1
  16. package/es/style.css +1 -1
  17. package/es/uploader/Uploader.js +14 -1
  18. package/es/uploader/props.js +4 -0
  19. package/es/varlet.esm.js +201 -83
  20. package/highlight/attributes.json +8 -0
  21. package/highlight/tags.json +3 -1
  22. package/highlight/web-types.json +23 -1
  23. package/lib/date-picker/DatePicker.js +86 -11
  24. package/lib/date-picker/date-picker.css +1 -1
  25. package/lib/date-picker/date-picker.less +11 -0
  26. package/lib/date-picker/props.js +4 -0
  27. package/lib/date-picker/src/day-picker-panel.js +17 -4
  28. package/lib/date-picker/src/month-picker-panel.js +17 -4
  29. package/lib/date-picker/src/panel-header.js +1 -0
  30. package/lib/image-preview/ImagePreview.js +4 -1
  31. package/lib/image-preview/imagePreview.css +1 -1
  32. package/lib/image-preview/imagePreview.less +11 -1
  33. package/lib/index-bar/IndexBar.js +7 -13
  34. package/lib/style.css +1 -1
  35. package/lib/uploader/Uploader.js +14 -1
  36. package/lib/uploader/props.js +4 -0
  37. package/package.json +5 -5
  38. package/types/datePicker.d.ts +1 -0
  39. package/types/uploader.d.ts +1 -0
  40. package/umd/varlet.js +4 -4
package/README.en-US.md CHANGED
@@ -9,10 +9,10 @@
9
9
  </p>
10
10
  <p>
11
11
  <img src="https://img.shields.io/npm/v/@varlet/ui?style=flat-square" alt="version">
12
- <img src="https://img.shields.io/github/stars/haoziqaq/varlet" alt="ci">
12
+ <img src="https://img.shields.io/github/stars/varletjs/varlet" alt="stars">
13
13
  <img src="https://img.shields.io/badge/vue-v3.2.0%2B-%23407fbc" alt="vue">
14
14
  <img src="https://img.shields.io/npm/l/@varlet/ui.svg" alt="licence">
15
- <img src="https://img.shields.io/codecov/c/github/haoziqaq/varlet" alt="coverage">
15
+ <img src="https://img.shields.io/codecov/c/github/varletjs/varlet" alt="coverage">
16
16
  <img src="https://img.badgesize.io/https://unpkg.com/@varlet/ui/umd/varlet.js?compression=gzip&label=gzip" alt="gzip" />
17
17
  <img src="https://github.com/varletjs/varlet/workflows/CI/badge.svg" alt="ci">
18
18
  </p>
@@ -26,17 +26,17 @@ Varlet is a Material design mobile component library developed based on `Vue3`,
26
26
 
27
27
 
28
28
  ### Features
29
- 1. Provide 50 high quality general purpose components
30
- 2. Components are very lightweight
31
- 3. Developed by Chinese, complete Chinese and English documentation and logistics support
32
- 4. Support on-demand introduction
33
- 5. Support theme customization
34
- 6. Support internationalization
35
- 7. Support WebStorm, VS Code component syntax highlighting
36
- 8. Support the SSR
37
- 9. Support the Typescript
38
- 10. Make sure more than 90 percent unit test coverage, providing stability assurance
39
- 11. Support dark mode
29
+ - 🚀 Provide 50 high quality general purpose components
30
+ - 🚀 Components are very lightweight
31
+ - 💪 Developed by Chinese, complete Chinese and English documentation and logistics support
32
+ - 🛠️ Support on-demand introduction
33
+ - 🛠️ Support theme customization
34
+ - 🌍 Support internationalization
35
+ - 💡 Support WebStorm, VS Code component syntax highlighting
36
+ - 💪 Support the SSR
37
+ - 💡 Support the Typescript
38
+ - 💪 Make sure more than 90 percent unit test coverage, providing stability assurance
39
+ - 🛠️ Support dark mode
40
40
 
41
41
  ### Install
42
42
 
@@ -56,7 +56,6 @@ Varlet is a Material design mobile component library developed based on `Vue3`,
56
56
  ```
57
57
 
58
58
  ### Webpack / Vite
59
-
60
59
  ```shell
61
60
  # Install with npm or yarn or pnpm
62
61
 
@@ -83,4 +82,4 @@ createApp(App).use(Varlet).mount('#app')
83
82
 
84
83
  <a href="https://github.com/varletjs/varlet/graphs/contributors">
85
84
  <img src="https://contrib.rocks/image?repo=haoziqaq/varlet" />
86
- </a>
85
+ </a>
package/README.md CHANGED
@@ -3,16 +3,16 @@
3
3
  <img src="https://varlet.gitee.io/varlet-ui/logo.svg" width="150">
4
4
  </a>
5
5
  <h1>VARLET</h1>
6
- <p>基于Vue3的Material design风格移动端组件库</p>
6
+ <p>基于 Vue3 Material design 风格移动端组件库</p>
7
7
  <p>
8
8
  <a href="https://varlet.gitee.io/varlet-ui/">开发文档</a> | <a href="https://github.com/varletjs/varlet/blob/dev/README.en-US.md">English</a>
9
9
  </p>
10
10
  <p>
11
11
  <img src="https://img.shields.io/npm/v/@varlet/ui?style=flat-square" alt="version">
12
- <img src="https://img.shields.io/github/stars/haoziqaq/varlet" alt="ci">
12
+ <img src="https://img.shields.io/github/stars/varletjs/varlet" alt="stars">
13
13
  <img src="https://img.shields.io/badge/vue-v3.2.0%2B-%23407fbc" alt="vue">
14
14
  <img src="https://img.shields.io/npm/l/@varlet/ui.svg" alt="licence">
15
- <img src="https://img.shields.io/codecov/c/github/haoziqaq/varlet" alt="coverage">
15
+ <img src="https://img.shields.io/codecov/c/github/varletjs/varlet" alt="coverage">
16
16
  <img src="https://img.badgesize.io/https://unpkg.com/@varlet/ui/umd/varlet.js?compression=gzip&label=gzip" alt="gzip" />
17
17
  <img src="https://github.com/varletjs/varlet/workflows/CI/badge.svg" alt="ci">
18
18
  </p>
@@ -22,25 +22,25 @@
22
22
 
23
23
  ### 介绍
24
24
 
25
- Varlet是一个基于`Vue3`开发的Material风格移动端组件库,全面拥抱`Vue3`生态,由社区建立起来的组件库团队进行维护。
25
+ Varlet 是一个基于 `Vue3` 开发的 Material 风格移动端组件库,全面拥抱 `Vue3` 生态,由社区建立起来的组件库团队进行维护。
26
26
 
27
27
  ### 特性
28
- 1. 提供50个高质量通用组件
29
- 2. 组件十分轻量
30
- 3. 由国人开发,完善的中英文文档和后勤保障
31
- 4. 支持按需引入
32
- 5. 支持主题定制
33
- 6. 支持国际化
34
- 7. 支持webstorm,vscode组件属性高亮
35
- 8. 支持SSR
36
- 9. 支持Typescript
37
- 10. 确保90%以上单元测试覆盖率,提供稳定性保证
38
- 11. 支持暗黑模式
28
+ - 🚀 提供50个高质量通用组件
29
+ - 🚀 组件十分轻量
30
+ - 💪 由国人开发,完善的中英文文档和后勤保障
31
+ - 🛠️ 支持按需引入
32
+ - 🛠️ 支持主题定制
33
+ - 🌍 支持国际化
34
+ - 💡 支持 webstorm,vscode 组件属性高亮
35
+ - 💪 支持 SSR
36
+ - 💡 支持 Typescript
37
+ - 💪 确保90%以上单元测试覆盖率,提供稳定性保证
38
+ - 🛠️ 支持暗黑模式
39
39
 
40
40
  ### 安装
41
41
 
42
42
  ### CDN
43
- `varlet.js`包含组件库的所有样式和逻辑,引入即可。
43
+ `varlet.js` 包含组件库的所有样式和逻辑,引入即可。
44
44
 
45
45
  ```html
46
46
  <div id="app"></div>
@@ -56,7 +56,7 @@ Varlet是一个基于`Vue3`开发的Material风格移动端组件库,全面拥
56
56
 
57
57
  ### Webpack / Vite
58
58
  ```shell
59
- # 通过npm或yarn或pnpm安装
59
+ # 通过 npm yarn pnpm 安装
60
60
 
61
61
  # npm
62
62
  npm i @varlet/ui -S
@@ -80,5 +80,6 @@ createApp(App).use(Varlet).mount('#app')
80
80
  ### Contributors
81
81
 
82
82
  <a href="https://github.com/varletjs/varlet/graphs/contributors">
83
- <img src="https://contrib.rocks/image?repo=haoziqaq/varlet" />
83
+ <img src="https://contrib.rocks/image?repo=varletjs/varlet" />
84
84
  </a>
85
+
@@ -5,14 +5,9 @@ import YearPickerPanel from './src/year-picker-panel.js'
5
5
  import DayPickerPanel from './src/day-picker-panel.js'
6
6
  import { props, MONTH_LIST, WEEK_HEADER } from './props';
7
7
  import { isArray, toNumber } from '../utils/shared';
8
+ import { nextTickFrame } from '../utils/elements';
8
9
  import { pack } from '../locale';
9
- import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeProps as _normalizeProps, mergeProps as _mergeProps, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue";
10
-
11
- var _withScopeId = n => (_pushScopeId(""), n = n(), _popScopeId(), n);
12
-
13
- var _hoisted_1 = {
14
- class: "var-date-picker-body"
15
- };
10
+ import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeProps as _normalizeProps, mergeProps as _mergeProps, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, createBlock as _createBlock } from "vue";
16
11
  export function render(_ctx, _cache) {
17
12
  var _component_year_picker_panel = _resolveComponent("year-picker-panel");
18
13
 
@@ -90,18 +85,30 @@ export function render(_ctx, _cache) {
90
85
  /* CLASS */
91
86
  )], 4
92
87
  /* STYLE */
93
- ), _createElementVNode("div", _hoisted_1, [_createVNode(_Transition, {
88
+ ), _createElementVNode("div", {
89
+ class: "var-date-picker-body",
90
+ onTouchstart: _cache[2] || (_cache[2] = function () {
91
+ return _ctx.handleTouchstart && _ctx.handleTouchstart(...arguments);
92
+ }),
93
+ onTouchmove: _cache[3] || (_cache[3] = function () {
94
+ return _ctx.handleTouchmove && _ctx.handleTouchmove(...arguments);
95
+ }),
96
+ onTouchend: _cache[4] || (_cache[4] = function () {
97
+ return _ctx.handleTouchend && _ctx.handleTouchend(...arguments);
98
+ })
99
+ }, [_createVNode(_Transition, {
94
100
  name: "var-date-picker-panel-fade"
95
101
  }, {
96
- default: _withCtx(() => [_ctx.isYearPanel ? (_openBlock(), _createBlock(_component_year_picker_panel, {
102
+ default: _withCtx(() => [_ctx.getPanelType === 'year' ? (_openBlock(), _createBlock(_component_year_picker_panel, {
97
103
  key: 0,
98
104
  "component-props": _ctx.componentProps,
99
105
  preview: _ctx.previewYear,
100
106
  onChooseYear: _ctx.getChooseYear
101
107
  }, null, 8
102
108
  /* PROPS */
103
- , ["component-props", "preview", "onChooseYear"])) : !_ctx.isYearPanel && _ctx.type === 'month' || _ctx.isMonthPanel ? (_openBlock(), _createBlock(_component_month_picker_panel, {
109
+ , ["component-props", "preview", "onChooseYear"])) : _ctx.getPanelType === 'month' ? (_openBlock(), _createBlock(_component_month_picker_panel, {
104
110
  key: 1,
111
+ ref: "monthPanelEl",
105
112
  current: _ctx.currentDate,
106
113
  choose: _ctx.getChoose,
107
114
  preview: _ctx.getPreview,
@@ -111,8 +118,9 @@ export function render(_ctx, _cache) {
111
118
  onCheckPreview: _ctx.checkPreview
112
119
  }, null, 8
113
120
  /* PROPS */
114
- , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : !_ctx.isYearPanel && !_ctx.isMonthPanel && _ctx.type === 'date' ? (_openBlock(), _createBlock(_component_day_picker_panel, {
121
+ , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : _ctx.getPanelType === 'date' ? (_openBlock(), _createBlock(_component_day_picker_panel, {
115
122
  key: 2,
123
+ ref: "dayPanelEl",
116
124
  current: _ctx.currentDate,
117
125
  choose: _ctx.getChoose,
118
126
  preview: _ctx.getPreview,
@@ -126,7 +134,9 @@ export function render(_ctx, _cache) {
126
134
  _: 1
127
135
  /* STABLE */
128
136
 
129
- })])], 2
137
+ })], 32
138
+ /* HYDRATE_EVENTS */
139
+ )], 2
130
140
  /* CLASS */
131
141
  );
132
142
  }
@@ -141,6 +151,10 @@ export default defineComponent({
141
151
  props,
142
152
 
143
153
  setup(props) {
154
+ var startX = 0;
155
+ var startY = 0;
156
+ var checkType = '';
157
+ var touchDirection;
144
158
  var currentDate = dayjs().format('YYYY-MM-D');
145
159
  var [currentYear, currentMonth] = currentDate.split('-');
146
160
  var monthDes = MONTH_LIST.find(month => month.index === currentMonth);
@@ -157,6 +171,8 @@ export default defineComponent({
157
171
  var chooseDays = ref([]);
158
172
  var chooseRangeMonth = ref([]);
159
173
  var chooseRangeDay = ref([]);
174
+ var monthPanelEl = ref(null);
175
+ var dayPanelEl = ref(null);
160
176
  var componentProps = reactive({
161
177
  allowedDates: props.allowedDates,
162
178
  type: props.type,
@@ -224,6 +240,15 @@ export default defineComponent({
224
240
  if (pack.value.lang === 'zh-CN') return chooseMonth.value.index + "-" + showDay + " " + weekName.slice(0, 3);
225
241
  return weekName.slice(0, 3) + ", " + monthName.slice(0, 3) + " " + chooseDay.value;
226
242
  });
243
+ var getPanelType = computed(() => {
244
+ if (isYearPanel.value) return 'year';
245
+ if (props.type === 'month' || isMonthPanel.value) return 'month';
246
+ if (props.type === 'date') return 'date';
247
+ return '';
248
+ });
249
+ var isUntouchable = computed(() => {
250
+ return !props.touchable || ['', 'year'].includes(getPanelType.value);
251
+ });
227
252
  var slotProps = computed(() => {
228
253
  var _chooseMonth$value, _chooseDay$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2;
229
254
 
@@ -251,6 +276,41 @@ export default defineComponent({
251
276
  }
252
277
  };
253
278
 
279
+ var handleTouchstart = event => {
280
+ if (isUntouchable.value) return;
281
+ var {
282
+ clientX,
283
+ clientY
284
+ } = event.touches[0];
285
+ startX = clientX;
286
+ startY = clientY;
287
+ };
288
+
289
+ var getDirection = (x, y) => {
290
+ return x >= y && x > 20 ? 'x' : 'y';
291
+ };
292
+
293
+ var handleTouchmove = event => {
294
+ if (isUntouchable.value) return;
295
+ var {
296
+ clientX,
297
+ clientY
298
+ } = event.touches[0];
299
+ var x = clientX - startX;
300
+ var y = clientY - startY;
301
+ touchDirection = getDirection(Math.abs(x), Math.abs(y));
302
+ checkType = x > 0 ? 'prev' : 'next';
303
+ };
304
+
305
+ var handleTouchend = () => {
306
+ if (isUntouchable.value || touchDirection !== 'x') return;
307
+ var componentRef = getPanelType.value === 'month' ? monthPanelEl : dayPanelEl;
308
+ nextTickFrame(() => {
309
+ componentRef.value.forwardRef(checkType);
310
+ resetState();
311
+ });
312
+ };
313
+
254
314
  var updateRange = (date, type) => {
255
315
  var rangeDate = type === 'month' ? chooseRangeMonth : chooseRangeDay;
256
316
  rangeDate.value = rangeDone.value ? [date, date] : [rangeDate.value[0], date];
@@ -416,6 +476,13 @@ export default defineComponent({
416
476
  previewYear.value = yearValue;
417
477
  };
418
478
 
479
+ var resetState = () => {
480
+ startY = 0;
481
+ startX = 0;
482
+ checkType = '';
483
+ touchDirection = undefined;
484
+ };
485
+
419
486
  watch(() => props.modelValue, value => {
420
487
  if (!checkValue() || invalidFormatDate(value) || !value) return;
421
488
 
@@ -432,7 +499,10 @@ export default defineComponent({
432
499
  }, {
433
500
  immediate: true
434
501
  });
502
+ watch(getPanelType, resetState);
435
503
  return {
504
+ monthPanelEl,
505
+ dayPanelEl,
436
506
  reverse,
437
507
  currentDate,
438
508
  chooseMonth,
@@ -443,12 +513,16 @@ export default defineComponent({
443
513
  isMonthPanel,
444
514
  getMonthTitle,
445
515
  getDateTitle,
516
+ getPanelType,
446
517
  getChoose,
447
518
  getPreview,
448
519
  componentProps,
449
520
  slotProps,
450
521
  formatRange,
451
522
  clickEl,
523
+ handleTouchstart,
524
+ handleTouchmove,
525
+ handleTouchend,
452
526
  getChooseDay,
453
527
  getChooseMonth,
454
528
  getChooseYear,
@@ -1 +1 @@
1
- :root { --date-picker-border-radius: 4px; --date-picker-font-size: var(--font-size-md); --date-picker-min-width: 290px; --date-picker-height: 385px; --date-picker-main-color: rgba(0, 0, 0, 0.87); --date-picker-title-padding: 16px; --date-picker-title-background: var(--color-primary); --date-picker-title-color: #fff; --date-picker-title-year-font-size: var(--font-size-md); --date-picker-title-year-font-weight: 500; --date-picker-title-year-margin-bottom: 8px; --date-picker-title-date-height: 48px; --date-picker-title-date-font-size: 34px; --date-picker-title-date-font-weight: 500; --date-picker-title-date-range-font-size: 20px; --date-picker-body-background-color: rgba(0, 0, 0, 0); --picker-header-padding: 4px 16px; --month-picker-padding: 0 12px; --month-picker-item-width: 33%; --month-picker-item-height: 56px; --month-picker-item-button-max-width: 140px; --year-picker-font-weight: 400; --year-picker-item-padding: 8px 0; --year-picker-item-active-font-size: 26px; --year-picker-item-active-font-weight: 500; --year-picker-item-active-font-padding: 10px 0; --year-picker-item-active-color: var(--color-primary); --day-picker-content-item-width: 14.28%; --day-picker-content-item-font-size: var(--font-size-sm); --day-picker-content-item-padding: 2px 0; --day-picker-content-item-button-width: 32px; --day-picker-content-item-button-height: 32px; --day-picker-content-item-button-font-size: var(--font-size-sm); --day-picker-head-item-color: rgba(0, 0, 0, 0.38); --day-picker-head-item-padding: 8px 0; --day-picker-head-item-font-weight: 600;}.var-date-picker { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); border-radius: var(--date-picker-border-radius); contain: layout style; display: flex; flex-direction: column; font-size: var(--date-picker-font-size); position: relative; min-width: var(--date-picker-min-width); height: var(--date-picker-height); overflow: hidden;}.var-date-picker ul { list-style: none; margin: 0; padding: 0;}.var-date-picker-title { padding: var(--date-picker-title-padding); color: var(--date-picker-title-color); background: var(--date-picker-title-background); display: flex; justify-content: space-between; flex-direction: column; flex-wrap: wrap;}.var-date-picker-title__year { opacity: 0.6; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); align-items: center; display: inline-flex; font-size: var(--date-picker-title-year-font-size); font-weight: var(--date-picker-title-year-font-weight); margin-bottom: var(--date-picker-title-year-margin-bottom); transition: 0.3s var(--cubic-bezier);}.var-date-picker-title__year--active { opacity: 1;}.var-date-picker-title__date { height: var(--date-picker-title-date-height); overflow: hidden; font-size: var(--date-picker-title-date-font-size); text-align: left; font-weight: var(--date-picker-title-date-font-weight); position: relative; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); display: flex; align-items: center; opacity: 0.6; transition: 0.3s var(--cubic-bezier);}.var-date-picker-title__date--active { opacity: 1;}.var-date-picker-title__date--range { font-size: var(--date-picker-title-date-range-font-size);}.var-date-picker-body { flex: 1; position: relative; overflow: auto; background-color: var(--date-picker-body-background-color);}.var-date-picker .var-picker-header { padding: var(--picker-header-padding); align-items: center; display: flex; justify-content: space-between; position: relative;}.var-date-picker .var-picker-header__value { flex: 1; text-align: center; position: relative; overflow: hidden; font-weight: 700; cursor: pointer;}.var-date-picker .var-picker-header__value div { width: 100%;}.var-date-picker .var-month-picker__content { padding: var(--month-picker-padding);}.var-date-picker .var-month-picker__content ul { display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-month-picker__content ul li { width: var(--month-picker-item-width); display: flex; height: var(--month-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-month-picker__button[var-month-picker-cover] { width: 100%; max-width: var(--month-picker-item-button-max-width);}.var-date-picker .var-month-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-year-picker__panel { width: 100%; height: 100%; font-weight: var(--year-picker-font-weight); padding: 0; margin: 0; list-style-type: none; overflow: auto; text-align: center;}.var-date-picker .var-year-picker__panel li { padding: var(--year-picker-item-padding); cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.var-date-picker .var-year-picker__panel--active { font-size: var(--year-picker-item-active-font-size); font-weight: var(--year-picker-item-active-font-weight); padding: var(--year-picker-item-active-font-padding); color: var(--year-picker-item-active-color);}.var-date-picker .var-day-picker__content ul { display: flex; flex-wrap: wrap;}.var-date-picker .var-day-picker__content ul li { position: relative; display: flex; justify-content: center; width: var(--day-picker-content-item-width); font-size: var(--day-picker-content-item-font-size); padding: var(--day-picker-content-item-padding);}.var-date-picker .var-day-picker__head li { color: var(--day-picker-head-item-color); padding: var(--day-picker-head-item-padding); font-weight: var(--day-picker-head-item-font-weight);}.var-date-picker .var-day-picker__button[var-day-picker-cover] { width: var(--day-picker-content-item-button-width); height: var(--day-picker-content-item-button-height); font-size: var(--day-picker-content-item-button-font-size);}.var-date-picker .var-day-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker-translatey-enter-from { opacity: 0; transform: translateY(100%);}.var-date-picker-translatey-enter-active,.var-date-picker-reverse-translatey-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-active,.var-date-picker-reverse-translatey-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-to { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-enter-from { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-leave-to { opacity: 0; transform: translateY(100%);}.var-date-picker-panel-fade-enter-from,.var-date-picker-panel-fade-leave-to { transition: 0.3s var(--cubic-bezier); opacity: 0;}.var-date-picker-panel-fade-leave-active { position: absolute;}.var-date-picker-translatex-enter-from { opacity: 0; transform: translateX(100%);}.var-date-picker-reverse-translatex-enter-from { opacity: 0; transform: translateX(-100%);}.var-date-picker-translatex-enter-active,.var-date-picker-reverse-translatex-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-active,.var-date-picker-reverse-translatex-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-to { opacity: 0; transform: translateX(-100%);}.var-date-picker-reverse-translatex-leave-to { opacity: 0; transform: translateX(100%);}
1
+ :root { --date-picker-border-radius: 4px; --date-picker-font-size: var(--font-size-md); --date-picker-min-width: 290px; --date-picker-height: 385px; --date-picker-main-color: rgba(0, 0, 0, 0.87); --date-picker-title-padding: 16px; --date-picker-title-background: var(--color-primary); --date-picker-title-color: #fff; --date-picker-title-year-font-size: var(--font-size-md); --date-picker-title-year-font-weight: 500; --date-picker-title-year-margin-bottom: 8px; --date-picker-title-date-height: 48px; --date-picker-title-date-font-size: 34px; --date-picker-title-date-font-weight: 500; --date-picker-title-date-range-font-size: 20px; --date-picker-body-background-color: rgba(0, 0, 0, 0); --picker-header-padding: 4px 16px; --month-picker-padding: 0 12px; --month-picker-item-width: 33%; --month-picker-item-height: 56px; --month-picker-item-button-max-width: 140px; --year-picker-font-weight: 400; --year-picker-item-padding: 8px 0; --year-picker-item-active-font-size: 26px; --year-picker-item-active-font-weight: 500; --year-picker-item-active-font-padding: 10px 0; --year-picker-item-active-color: var(--color-primary); --day-picker-content-item-width: 14.28%; --day-picker-content-item-font-size: var(--font-size-sm); --day-picker-content-item-padding: 2px 0; --day-picker-content-item-button-width: 32px; --day-picker-content-item-button-height: 32px; --day-picker-content-item-button-font-size: var(--font-size-sm); --day-picker-head-item-color: rgba(0, 0, 0, 0.38); --day-picker-head-item-padding: 8px 0; --day-picker-head-item-font-weight: 600;}.var-date-picker { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); border-radius: var(--date-picker-border-radius); contain: layout style; display: flex; flex-direction: column; font-size: var(--date-picker-font-size); position: relative; min-width: var(--date-picker-min-width); height: var(--date-picker-height); overflow: hidden;}.var-date-picker ul { list-style: none; margin: 0; padding: 0;}.var-date-picker-title { padding: var(--date-picker-title-padding); color: var(--date-picker-title-color); background: var(--date-picker-title-background); display: flex; justify-content: space-between; flex-direction: column; flex-wrap: wrap;}.var-date-picker-title__year { opacity: 0.6; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); align-items: center; display: inline-flex; font-size: var(--date-picker-title-year-font-size); font-weight: var(--date-picker-title-year-font-weight); margin-bottom: var(--date-picker-title-year-margin-bottom); transition: 0.3s var(--cubic-bezier);}.var-date-picker-title__year--active { opacity: 1;}.var-date-picker-title__date { height: var(--date-picker-title-date-height); overflow: hidden; font-size: var(--date-picker-title-date-font-size); text-align: left; font-weight: var(--date-picker-title-date-font-weight); position: relative; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); display: flex; align-items: center; opacity: 0.6; transition: 0.3s var(--cubic-bezier);}.var-date-picker-title__date--active { opacity: 1;}.var-date-picker-title__date--range { font-size: var(--date-picker-title-date-range-font-size);}.var-date-picker-body { flex: 1; position: relative; overflow: auto; background-color: var(--date-picker-body-background-color);}.var-date-picker .var-picker-header { padding: var(--picker-header-padding); align-items: center; display: flex; justify-content: space-between; position: relative;}.var-date-picker .var-picker-header__value { flex: 1; text-align: center; position: relative; overflow: hidden; font-weight: 700; cursor: pointer; user-select: none;}.var-date-picker .var-picker-header__value div { width: 100%;}.var-date-picker .var-month-picker__content { padding: var(--month-picker-padding);}.var-date-picker .var-month-picker__content ul { display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-month-picker__content ul li { width: var(--month-picker-item-width); display: flex; height: var(--month-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-month-picker__button[var-month-picker-cover] { width: 100%; max-width: var(--month-picker-item-button-max-width);}.var-date-picker .var-month-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-month-picker__button-disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker .var-year-picker__panel { width: 100%; height: 100%; font-weight: var(--year-picker-font-weight); padding: 0; margin: 0; list-style-type: none; overflow: auto; text-align: center;}.var-date-picker .var-year-picker__panel li { padding: var(--year-picker-item-padding); cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.var-date-picker .var-year-picker__panel--active { font-size: var(--year-picker-item-active-font-size); font-weight: var(--year-picker-item-active-font-weight); padding: var(--year-picker-item-active-font-padding); color: var(--year-picker-item-active-color);}.var-date-picker .var-day-picker__content ul { display: flex; flex-wrap: wrap;}.var-date-picker .var-day-picker__content ul li { position: relative; display: flex; justify-content: center; width: var(--day-picker-content-item-width); font-size: var(--day-picker-content-item-font-size); padding: var(--day-picker-content-item-padding);}.var-date-picker .var-day-picker__head li { color: var(--day-picker-head-item-color); padding: var(--day-picker-head-item-padding); font-weight: var(--day-picker-head-item-font-weight);}.var-date-picker .var-day-picker__button[var-day-picker-cover] { width: var(--day-picker-content-item-button-width); height: var(--day-picker-content-item-button-height); font-size: var(--day-picker-content-item-button-font-size);}.var-date-picker .var-day-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-day-picker__button-disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker-translatey-enter-from { opacity: 0; transform: translateY(100%);}.var-date-picker-translatey-enter-active,.var-date-picker-reverse-translatey-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-active,.var-date-picker-reverse-translatey-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-to { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-enter-from { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-leave-to { opacity: 0; transform: translateY(100%);}.var-date-picker-panel-fade-enter-from,.var-date-picker-panel-fade-leave-to { transition: 0.3s var(--cubic-bezier); opacity: 0;}.var-date-picker-panel-fade-leave-active { position: absolute;}.var-date-picker-translatex-enter-from { opacity: 0; transform: translateX(100%);}.var-date-picker-reverse-translatex-enter-from { opacity: 0; transform: translateX(-100%);}.var-date-picker-translatex-enter-active,.var-date-picker-reverse-translatex-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-active,.var-date-picker-reverse-translatex-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-to { opacity: 0; transform: translateX(-100%);}.var-date-picker-reverse-translatex-leave-to { opacity: 0; transform: translateX(100%);}
@@ -162,6 +162,7 @@
162
162
  overflow: hidden;
163
163
  font-weight: 700;
164
164
  cursor: pointer;
165
+ user-select: none;
165
166
 
166
167
  div {
167
168
  width: 100%;
@@ -196,6 +197,11 @@
196
197
  &__button[var-date-picker-color-cover='true'] {
197
198
  color: var(--date-picker-main-color);
198
199
  }
200
+
201
+ &__button-disabled {
202
+ color: var(--color-text-disabled) !important;
203
+ cursor: not-allowed;
204
+ }
199
205
  }
200
206
 
201
207
  .var-year-picker {
@@ -258,6 +264,11 @@
258
264
  &__button[var-date-picker-color-cover='true'] {
259
265
  color: var(--date-picker-main-color);
260
266
  }
267
+
268
+ &__button-disabled {
269
+ color: var(--color-text-disabled) !important;
270
+ cursor: not-allowed;
271
+ }
261
272
  }
262
273
 
263
274
  &-translatey-enter-from {
@@ -90,6 +90,10 @@ export var props = {
90
90
  type: Boolean,
91
91
  default: false
92
92
  },
93
+ touchable: {
94
+ type: Boolean,
95
+ default: true
96
+ },
93
97
  onChange: {
94
98
  type: Function
95
99
  },
@@ -33,6 +33,7 @@ export function render(_ctx, _cache) {
33
33
  var _component_var_button = _resolveComponent("var-button");
34
34
 
35
35
  return _openBlock(), _createElementBlock("div", _hoisted_1, [_createElementVNode("div", _hoisted_2, [_createVNode(_component_panel_header, {
36
+ ref: "headerEl",
36
37
  type: "day",
37
38
  date: _ctx.preview,
38
39
  disabled: _ctx.panelBtnDisabled,
@@ -65,7 +66,7 @@ export function render(_ctx, _cache) {
65
66
  round: "",
66
67
  ripple: false
67
68
  }, _extends({}, _ctx.buttonProps(day)), {
68
- onClick: $event => _ctx.chooseDay(day)
69
+ onClick: event => _ctx.chooseDay(day, event)
69
70
  }), {
70
71
  default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.filterDay(day)), 1
71
72
  /* TEXT */
@@ -125,6 +126,7 @@ export default defineComponent({
125
126
  var days = ref([]);
126
127
  var reverse = ref(false);
127
128
  var panelKey = ref(0);
129
+ var headerEl = ref(null);
128
130
  var panelBtnDisabled = reactive({
129
131
  left: false,
130
132
  right: false
@@ -292,11 +294,13 @@ export default defineComponent({
292
294
 
293
295
  var isCover = textColorOrCover().startsWith('var-date-picker');
294
296
  return {
295
- disabled,
296
297
  text: computeText(),
297
298
  outline: computeOutline(),
298
299
  textColor: isCover ? '' : textColorOrCover(),
299
- 'var-date-picker-color-cover': isCover
300
+ 'var-date-picker-color-cover': isCover,
301
+ class: {
302
+ 'var-day-picker__button-disabled': disabled
303
+ }
300
304
  };
301
305
  };
302
306
 
@@ -306,8 +310,15 @@ export default defineComponent({
306
310
  emit('check-preview', 'month', checkType);
307
311
  };
308
312
 
309
- var chooseDay = day => {
313
+ var chooseDay = (day, event) => {
314
+ var buttonEl = event.currentTarget;
315
+ if (buttonEl.classList.contains('var-day-picker__button-disabled')) return;
310
316
  emit('choose-day', day);
317
+ }; // expose for internal
318
+
319
+
320
+ var forwardRef = checkType => {
321
+ headerEl.value.checkDate(checkType);
311
322
  };
312
323
 
313
324
  onMounted(() => {
@@ -321,9 +332,11 @@ export default defineComponent({
321
332
  return {
322
333
  days,
323
334
  reverse,
335
+ headerEl,
324
336
  panelKey,
325
337
  sortWeekList,
326
338
  panelBtnDisabled,
339
+ forwardRef,
327
340
  filterDay,
328
341
  getDayAbbr,
329
342
  checkDate,
@@ -27,6 +27,7 @@ export function render(_ctx, _cache) {
27
27
  var _component_var_button = _resolveComponent("var-button");
28
28
 
29
29
  return _openBlock(), _createElementBlock("div", _hoisted_1, [_createElementVNode("div", _hoisted_2, [_createVNode(_component_panel_header, {
30
+ ref: "headerEl",
30
31
  type: "month",
31
32
  date: _ctx.preview,
32
33
  disabled: _ctx.panelBtnDisabled,
@@ -48,7 +49,7 @@ export function render(_ctx, _cache) {
48
49
  "var-month-picker-cover": "",
49
50
  ripple: false
50
51
  }, _extends({}, _ctx.buttonProps(month.index)), {
51
- onClick: $event => _ctx.chooseMonth(month)
52
+ onClick: event => _ctx.chooseMonth(month, event)
52
53
  }), {
53
54
  default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.getMonthAbbr(month.index)), 1
54
55
  /* TEXT */
@@ -107,6 +108,7 @@ export default defineComponent({
107
108
  var [currentYear, currentMonth] = props.current.split('-');
108
109
  var reverse = ref(false);
109
110
  var panelKey = ref(0);
111
+ var headerEl = ref(null);
110
112
  var panelBtnDisabled = reactive({
111
113
  left: false,
112
114
  right: false
@@ -219,16 +221,20 @@ export default defineComponent({
219
221
 
220
222
  var isCover = textColorOrCover().startsWith('var-date-picker');
221
223
  return {
222
- disabled,
223
224
  outline: computeOutline(),
224
225
  text: computeText(),
225
226
  color: !computeText() ? color : '',
226
227
  textColor: isCover ? '' : textColorOrCover(),
227
- 'var-date-picker-color-cover': isCover
228
+ 'var-date-picker-color-cover': isCover,
229
+ class: {
230
+ 'var-month-picker__button-disabled': disabled
231
+ }
228
232
  };
229
233
  };
230
234
 
231
- var chooseMonth = month => {
235
+ var chooseMonth = (month, event) => {
236
+ var buttonEl = event.currentTarget;
237
+ if (buttonEl.classList.contains('var-month-picker__button-disabled')) return;
232
238
  emit('choose-month', month);
233
239
  };
234
240
 
@@ -236,6 +242,11 @@ export default defineComponent({
236
242
  reverse.value = checkType === 'prev';
237
243
  panelKey.value += checkType === 'prev' ? -1 : 1;
238
244
  emit('check-preview', 'year', checkType);
245
+ }; // expose for internal
246
+
247
+
248
+ var forwardRef = checkType => {
249
+ headerEl.value.checkDate(checkType);
239
250
  };
240
251
 
241
252
  watch(() => props.preview.previewYear, year => {
@@ -253,9 +264,11 @@ export default defineComponent({
253
264
  return {
254
265
  pack,
255
266
  MONTH_LIST,
267
+ headerEl,
256
268
  reverse,
257
269
  panelKey,
258
270
  panelBtnDisabled,
271
+ forwardRef,
259
272
  buttonProps,
260
273
  getMonthAbbr,
261
274
  chooseMonth,
@@ -113,6 +113,7 @@ export default defineComponent({
113
113
  });
114
114
 
115
115
  var checkDate = checkType => {
116
+ if (checkType === 'prev' && props.disabled.left || checkType === 'next' && props.disabled.right) return;
116
117
  emit('check-date', checkType);
117
118
  reverse.value = checkType === 'prev';
118
119
  forwardOrBackNum.value += checkType === 'prev' ? -1 : 1;
@@ -18,6 +18,9 @@ var _hoisted_2 = {
18
18
  key: 0,
19
19
  class: "var-image-preview__indicators"
20
20
  };
21
+ var _hoisted_3 = {
22
+ class: "var-image-preview__extra"
23
+ };
21
24
  export function render(_ctx, _cache) {
22
25
  var _component_var_swipe_item = _resolveComponent("var-swipe-item");
23
26
 
@@ -116,7 +119,7 @@ export function render(_ctx, _cache) {
116
119
  onClick: _ctx.close
117
120
  }, null, 8
118
121
  /* PROPS */
119
- , ["onClick"])) : _createCommentVNode("v-if", true)])]),
122
+ , ["onClick"])) : _createCommentVNode("v-if", true)]), _createElementVNode("div", _hoisted_3, [_renderSlot(_ctx.$slots, "extra")])]),
120
123
  _: 3
121
124
  /* FORWARDED */
122
125
 
@@ -1 +1 @@
1
- :root { --image-preview-swipe-indicators-text-color: #ddd; --image-preview-swipe-indicators-padding: 16px 0; --image-preview-zoom-container-background: #000; --image-preview-close-icon-top: 13px; --image-preview-close-icon-right: 14px; --image-preview-close-icon-size: 22px; --image-preview-close-icon-color: #fff;}.var-image-preview__popup[var-image-preview-cover] { background: transparent;}.var-image-preview__swipe[var-image-preview-cover] { width: 100vw; height: 100vh;}.var-image-preview__swipe-item[var-image-preview-cover] { overflow: hidden;}.var-image-preview__close-icon[var-image-preview-cover] { position: absolute; top: var(--image-preview-close-icon-top); right: var(--image-preview-close-icon-right); color: var(--image-preview-close-icon-color); font-size: var(--image-preview-close-icon-size);}.var-image-preview__indicators { position: absolute; top: 0; width: 100%; padding: var(--image-preview-swipe-indicators-padding); color: var(--image-preview-swipe-indicators-text-color); text-align: center;}.var-image-preview__image { width: 100%; height: 100%; object-fit: contain; -webkit-user-drag: none;}.var-image-preview__zoom-container { display: flex; justify-content: center; align-items: center; width: 100vw; height: 100vh; transition: transform 0.2s; background: var(--image-preview-zoom-container-background);}
1
+ :root { --image-preview-swipe-indicators-text-color: #ddd; --image-preview-swipe-indicators-padding: 16px 0; --image-preview-zoom-container-background: #000; --image-preview-close-icon-top: 14px; --image-preview-close-icon-right: 14px; --image-preview-extra-top: 14px; --image-preview-extra-left: 14px; --image-preview-close-icon-size: 22px; --image-preview-close-icon-color: #fff;}.var-image-preview__popup[var-image-preview-cover] { background: transparent;}.var-image-preview__swipe[var-image-preview-cover] { width: 100vw; height: 100vh;}.var-image-preview__swipe-item[var-image-preview-cover] { overflow: hidden;}.var-image-preview__close-icon[var-image-preview-cover] { position: absolute; top: var(--image-preview-close-icon-top); right: var(--image-preview-close-icon-right); color: var(--image-preview-close-icon-color); font-size: var(--image-preview-close-icon-size);}.var-image-preview__extra { position: absolute; top: var(--image-preview-extra-top); left: var(--image-preview-extra-left);}.var-image-preview__indicators { position: absolute; top: 0; width: 100%; padding: var(--image-preview-swipe-indicators-padding); color: var(--image-preview-swipe-indicators-text-color); text-align: center;}.var-image-preview__image { width: 100%; height: 100%; object-fit: contain; -webkit-user-drag: none;}.var-image-preview__zoom-container { display: flex; justify-content: center; align-items: center; width: 100vw; height: 100vh; transition: transform 0.2s; background: var(--image-preview-zoom-container-background);}
@@ -1,8 +1,10 @@
1
1
  @image-preview-swipe-indicators-text-color: #ddd;
2
2
  @image-preview-swipe-indicators-padding: 16px 0;
3
3
  @image-preview-zoom-container-background: #000;
4
- @image-preview-close-icon-top: 13px;
4
+ @image-preview-close-icon-top: 14px;
5
5
  @image-preview-close-icon-right: 14px;
6
+ @image-preview-extra-top: 14px;
7
+ @image-preview-extra-left: 14px;
6
8
  @image-preview-close-icon-size: 22px;
7
9
  @image-preview-close-icon-color: #fff;
8
10
 
@@ -12,6 +14,8 @@
12
14
  --image-preview-zoom-container-background: @image-preview-zoom-container-background;
13
15
  --image-preview-close-icon-top: @image-preview-close-icon-top;
14
16
  --image-preview-close-icon-right: @image-preview-close-icon-right;
17
+ --image-preview-extra-top: @image-preview-extra-top;
18
+ --image-preview-extra-left: @image-preview-extra-left;
15
19
  --image-preview-close-icon-size: @image-preview-close-icon-size;
16
20
  --image-preview-close-icon-color: @image-preview-close-icon-color;
17
21
  }
@@ -38,6 +42,12 @@
38
42
  font-size: var(--image-preview-close-icon-size);
39
43
  }
40
44
 
45
+ &__extra {
46
+ position: absolute;
47
+ top: var(--image-preview-extra-top);
48
+ left: var(--image-preview-extra-left);
49
+ }
50
+
41
51
  &__indicators {
42
52
  position: absolute;
43
53
  top: 0;