@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
@@ -527,6 +527,10 @@
527
527
  "type": "boolean",
528
528
  "description": "是否支持选择一个范围 默认值:false"
529
529
  },
530
+ "var-date-picker/touchable": {
531
+ "type": "boolean",
532
+ "description": "是否支持拖动切换面板 默认值:true"
533
+ },
530
534
  "var-dialog/v-model:show": {
531
535
  "type": "boolean",
532
536
  "description": "是否显示对话框 默认值:false"
@@ -1743,6 +1747,10 @@
1743
1747
  "type": "boolean",
1744
1748
  "description": "是否开启水波纹 默认值:true"
1745
1749
  },
1750
+ "var-uploader/hide-list": {
1751
+ "type": "boolean",
1752
+ "description": "是否隐藏文件列表 默认值:false"
1753
+ },
1746
1754
  "var-uploader/validate-trigger": {
1747
1755
  "type": "ValidateTriggers[]",
1748
1756
  "description": "触发验证的时机, 可选值为 `onChange` `onRemove` 默认值:['onChange', 'onRemove']"
@@ -192,7 +192,8 @@
192
192
  "show-current",
193
193
  "readonly",
194
194
  "multiple",
195
- "range"
195
+ "range",
196
+ "touchable"
196
197
  ]
197
198
  },
198
199
  "var-dialog": {
@@ -678,6 +679,7 @@
678
679
  "maxsize",
679
680
  "previewed",
680
681
  "ripple",
682
+ "hide-list",
681
683
  "validate-trigger",
682
684
  "rules"
683
685
  ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "framework": "vue",
4
- "version": "1.26.3",
4
+ "version": "1.26.6",
5
5
  "name": "VARLET",
6
6
  "contributions": {
7
7
  "html": {
@@ -1542,6 +1542,15 @@
1542
1542
  "type": "boolean",
1543
1543
  "kind": "expression"
1544
1544
  }
1545
+ },
1546
+ {
1547
+ "name": "touchable",
1548
+ "description": "是否支持拖动切换面板",
1549
+ "default": "true",
1550
+ "value": {
1551
+ "type": "boolean",
1552
+ "kind": "expression"
1553
+ }
1545
1554
  }
1546
1555
  ],
1547
1556
  "events": [
@@ -2186,6 +2195,10 @@
2186
2195
  {
2187
2196
  "name": "close-icon",
2188
2197
  "description": "关闭按钮"
2198
+ },
2199
+ {
2200
+ "name": "extra",
2201
+ "description": "额外插槽"
2189
2202
  }
2190
2203
  ]
2191
2204
  },
@@ -5159,6 +5172,15 @@
5159
5172
  "kind": "expression"
5160
5173
  }
5161
5174
  },
5175
+ {
5176
+ "name": "hide-list",
5177
+ "description": "是否隐藏文件列表",
5178
+ "default": "false",
5179
+ "value": {
5180
+ "type": "boolean",
5181
+ "kind": "expression"
5182
+ }
5183
+ },
5162
5184
  {
5163
5185
  "name": "validate-trigger",
5164
5186
  "description": "触发验证的时机, 可选值为 `onChange` `onRemove`",
@@ -18,16 +18,12 @@ var _props = require("./props");
18
18
 
19
19
  var _shared = require("../utils/shared");
20
20
 
21
+ var _elements = require("../utils/elements");
22
+
21
23
  var _locale = require("../locale");
22
24
 
23
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
26
 
25
- var _withScopeId = n => ((0, _vue.pushScopeId)(""), n = n(), (0, _vue.popScopeId)(), n);
26
-
27
- var _hoisted_1 = {
28
- class: "var-date-picker-body"
29
- };
30
-
31
27
  function render(_ctx, _cache) {
32
28
  var _component_year_picker_panel = (0, _vue.resolveComponent)("year-picker-panel");
33
29
 
@@ -105,18 +101,30 @@ function render(_ctx, _cache) {
105
101
  /* CLASS */
106
102
  )], 4
107
103
  /* STYLE */
108
- ), (0, _vue.createElementVNode)("div", _hoisted_1, [(0, _vue.createVNode)(_vue.Transition, {
104
+ ), (0, _vue.createElementVNode)("div", {
105
+ class: "var-date-picker-body",
106
+ onTouchstart: _cache[2] || (_cache[2] = function () {
107
+ return _ctx.handleTouchstart && _ctx.handleTouchstart(...arguments);
108
+ }),
109
+ onTouchmove: _cache[3] || (_cache[3] = function () {
110
+ return _ctx.handleTouchmove && _ctx.handleTouchmove(...arguments);
111
+ }),
112
+ onTouchend: _cache[4] || (_cache[4] = function () {
113
+ return _ctx.handleTouchend && _ctx.handleTouchend(...arguments);
114
+ })
115
+ }, [(0, _vue.createVNode)(_vue.Transition, {
109
116
  name: "var-date-picker-panel-fade"
110
117
  }, {
111
- default: (0, _vue.withCtx)(() => [_ctx.isYearPanel ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_year_picker_panel, {
118
+ default: (0, _vue.withCtx)(() => [_ctx.getPanelType === 'year' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_year_picker_panel, {
112
119
  key: 0,
113
120
  "component-props": _ctx.componentProps,
114
121
  preview: _ctx.previewYear,
115
122
  onChooseYear: _ctx.getChooseYear
116
123
  }, null, 8
117
124
  /* PROPS */
118
- , ["component-props", "preview", "onChooseYear"])) : !_ctx.isYearPanel && _ctx.type === 'month' || _ctx.isMonthPanel ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_month_picker_panel, {
125
+ , ["component-props", "preview", "onChooseYear"])) : _ctx.getPanelType === 'month' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_month_picker_panel, {
119
126
  key: 1,
127
+ ref: "monthPanelEl",
120
128
  current: _ctx.currentDate,
121
129
  choose: _ctx.getChoose,
122
130
  preview: _ctx.getPreview,
@@ -126,8 +134,9 @@ function render(_ctx, _cache) {
126
134
  onCheckPreview: _ctx.checkPreview
127
135
  }, null, 8
128
136
  /* PROPS */
129
- , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : !_ctx.isYearPanel && !_ctx.isMonthPanel && _ctx.type === 'date' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_day_picker_panel, {
137
+ , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : _ctx.getPanelType === 'date' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_day_picker_panel, {
130
138
  key: 2,
139
+ ref: "dayPanelEl",
131
140
  current: _ctx.currentDate,
132
141
  choose: _ctx.getChoose,
133
142
  preview: _ctx.getPreview,
@@ -141,7 +150,9 @@ function render(_ctx, _cache) {
141
150
  _: 1
142
151
  /* STABLE */
143
152
 
144
- })])], 2
153
+ })], 32
154
+ /* HYDRATE_EVENTS */
155
+ )], 2
145
156
  /* CLASS */
146
157
  );
147
158
  }
@@ -157,6 +168,10 @@ var _default = (0, _vue.defineComponent)({
157
168
  props: _props.props,
158
169
 
159
170
  setup(props) {
171
+ var startX = 0;
172
+ var startY = 0;
173
+ var checkType = '';
174
+ var touchDirection;
160
175
  var currentDate = (0, _dayjs.default)().format('YYYY-MM-D');
161
176
  var [currentYear, currentMonth] = currentDate.split('-');
162
177
 
@@ -175,6 +190,8 @@ var _default = (0, _vue.defineComponent)({
175
190
  var chooseDays = (0, _vue.ref)([]);
176
191
  var chooseRangeMonth = (0, _vue.ref)([]);
177
192
  var chooseRangeDay = (0, _vue.ref)([]);
193
+ var monthPanelEl = (0, _vue.ref)(null);
194
+ var dayPanelEl = (0, _vue.ref)(null);
178
195
  var componentProps = (0, _vue.reactive)({
179
196
  allowedDates: props.allowedDates,
180
197
  type: props.type,
@@ -244,6 +261,15 @@ var _default = (0, _vue.defineComponent)({
244
261
  if (_locale.pack.value.lang === 'zh-CN') return chooseMonth.value.index + "-" + showDay + " " + weekName.slice(0, 3);
245
262
  return weekName.slice(0, 3) + ", " + monthName.slice(0, 3) + " " + chooseDay.value;
246
263
  });
264
+ var getPanelType = (0, _vue.computed)(() => {
265
+ if (isYearPanel.value) return 'year';
266
+ if (props.type === 'month' || isMonthPanel.value) return 'month';
267
+ if (props.type === 'date') return 'date';
268
+ return '';
269
+ });
270
+ var isUntouchable = (0, _vue.computed)(() => {
271
+ return !props.touchable || ['', 'year'].includes(getPanelType.value);
272
+ });
247
273
  var slotProps = (0, _vue.computed)(() => {
248
274
  var _chooseMonth$value, _chooseDay$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2;
249
275
 
@@ -271,6 +297,41 @@ var _default = (0, _vue.defineComponent)({
271
297
  }
272
298
  };
273
299
 
300
+ var handleTouchstart = event => {
301
+ if (isUntouchable.value) return;
302
+ var {
303
+ clientX,
304
+ clientY
305
+ } = event.touches[0];
306
+ startX = clientX;
307
+ startY = clientY;
308
+ };
309
+
310
+ var getDirection = (x, y) => {
311
+ return x >= y && x > 20 ? 'x' : 'y';
312
+ };
313
+
314
+ var handleTouchmove = event => {
315
+ if (isUntouchable.value) return;
316
+ var {
317
+ clientX,
318
+ clientY
319
+ } = event.touches[0];
320
+ var x = clientX - startX;
321
+ var y = clientY - startY;
322
+ touchDirection = getDirection(Math.abs(x), Math.abs(y));
323
+ checkType = x > 0 ? 'prev' : 'next';
324
+ };
325
+
326
+ var handleTouchend = () => {
327
+ if (isUntouchable.value || touchDirection !== 'x') return;
328
+ var componentRef = getPanelType.value === 'month' ? monthPanelEl : dayPanelEl;
329
+ (0, _elements.nextTickFrame)(() => {
330
+ componentRef.value.forwardRef(checkType);
331
+ resetState();
332
+ });
333
+ };
334
+
274
335
  var updateRange = (date, type) => {
275
336
  var rangeDate = type === 'month' ? chooseRangeMonth : chooseRangeDay;
276
337
  rangeDate.value = rangeDone.value ? [date, date] : [rangeDate.value[0], date];
@@ -438,6 +499,13 @@ var _default = (0, _vue.defineComponent)({
438
499
  previewYear.value = yearValue;
439
500
  };
440
501
 
502
+ var resetState = () => {
503
+ startY = 0;
504
+ startX = 0;
505
+ checkType = '';
506
+ touchDirection = undefined;
507
+ };
508
+
441
509
  (0, _vue.watch)(() => props.modelValue, value => {
442
510
  if (!checkValue() || invalidFormatDate(value) || !value) return;
443
511
 
@@ -454,7 +522,10 @@ var _default = (0, _vue.defineComponent)({
454
522
  }, {
455
523
  immediate: true
456
524
  });
525
+ (0, _vue.watch)(getPanelType, resetState);
457
526
  return {
527
+ monthPanelEl,
528
+ dayPanelEl,
458
529
  reverse,
459
530
  currentDate,
460
531
  chooseMonth,
@@ -465,12 +536,16 @@ var _default = (0, _vue.defineComponent)({
465
536
  isMonthPanel,
466
537
  getMonthTitle,
467
538
  getDateTitle,
539
+ getPanelType,
468
540
  getChoose,
469
541
  getPreview,
470
542
  componentProps,
471
543
  slotProps,
472
544
  formatRange,
473
545
  clickEl,
546
+ handleTouchstart,
547
+ handleTouchmove,
548
+ handleTouchend,
474
549
  getChooseDay,
475
550
  getChooseMonth,
476
551
  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 {
@@ -97,6 +97,10 @@ var props = {
97
97
  type: Boolean,
98
98
  default: false
99
99
  },
100
+ touchable: {
101
+ type: Boolean,
102
+ default: true
103
+ },
100
104
  onChange: {
101
105
  type: Function
102
106
  },
@@ -51,6 +51,7 @@ function render(_ctx, _cache) {
51
51
  var _component_var_button = (0, _vue.resolveComponent)("var-button");
52
52
 
53
53
  return (0, _vue.openBlock)(), (0, _vue.createElementBlock)("div", _hoisted_1, [(0, _vue.createElementVNode)("div", _hoisted_2, [(0, _vue.createVNode)(_component_panel_header, {
54
+ ref: "headerEl",
54
55
  type: "day",
55
56
  date: _ctx.preview,
56
57
  disabled: _ctx.panelBtnDisabled,
@@ -83,7 +84,7 @@ function render(_ctx, _cache) {
83
84
  round: "",
84
85
  ripple: false
85
86
  }, _extends({}, _ctx.buttonProps(day)), {
86
- onClick: $event => _ctx.chooseDay(day)
87
+ onClick: event => _ctx.chooseDay(day, event)
87
88
  }), {
88
89
  default: (0, _vue.withCtx)(() => [(0, _vue.createTextVNode)((0, _vue.toDisplayString)(_ctx.filterDay(day)), 1
89
90
  /* TEXT */
@@ -144,6 +145,7 @@ var _default = (0, _vue.defineComponent)({
144
145
  var days = (0, _vue.ref)([]);
145
146
  var reverse = (0, _vue.ref)(false);
146
147
  var panelKey = (0, _vue.ref)(0);
148
+ var headerEl = (0, _vue.ref)(null);
147
149
  var panelBtnDisabled = (0, _vue.reactive)({
148
150
  left: false,
149
151
  right: false
@@ -312,11 +314,13 @@ var _default = (0, _vue.defineComponent)({
312
314
 
313
315
  var isCover = textColorOrCover().startsWith('var-date-picker');
314
316
  return {
315
- disabled,
316
317
  text: computeText(),
317
318
  outline: computeOutline(),
318
319
  textColor: isCover ? '' : textColorOrCover(),
319
- 'var-date-picker-color-cover': isCover
320
+ 'var-date-picker-color-cover': isCover,
321
+ class: {
322
+ 'var-day-picker__button-disabled': disabled
323
+ }
320
324
  };
321
325
  };
322
326
 
@@ -326,8 +330,15 @@ var _default = (0, _vue.defineComponent)({
326
330
  emit('check-preview', 'month', checkType);
327
331
  };
328
332
 
329
- var chooseDay = day => {
333
+ var chooseDay = (day, event) => {
334
+ var buttonEl = event.currentTarget;
335
+ if (buttonEl.classList.contains('var-day-picker__button-disabled')) return;
330
336
  emit('choose-day', day);
337
+ }; // expose for internal
338
+
339
+
340
+ var forwardRef = checkType => {
341
+ headerEl.value.checkDate(checkType);
331
342
  };
332
343
 
333
344
  (0, _vue.onMounted)(() => {
@@ -341,9 +352,11 @@ var _default = (0, _vue.defineComponent)({
341
352
  return {
342
353
  days,
343
354
  reverse,
355
+ headerEl,
344
356
  panelKey,
345
357
  sortWeekList,
346
358
  panelBtnDisabled,
359
+ forwardRef,
347
360
  filterDay,
348
361
  getDayAbbr,
349
362
  checkDate,
@@ -45,6 +45,7 @@ function render(_ctx, _cache) {
45
45
  var _component_var_button = (0, _vue.resolveComponent)("var-button");
46
46
 
47
47
  return (0, _vue.openBlock)(), (0, _vue.createElementBlock)("div", _hoisted_1, [(0, _vue.createElementVNode)("div", _hoisted_2, [(0, _vue.createVNode)(_component_panel_header, {
48
+ ref: "headerEl",
48
49
  type: "month",
49
50
  date: _ctx.preview,
50
51
  disabled: _ctx.panelBtnDisabled,
@@ -66,7 +67,7 @@ function render(_ctx, _cache) {
66
67
  "var-month-picker-cover": "",
67
68
  ripple: false
68
69
  }, _extends({}, _ctx.buttonProps(month.index)), {
69
- onClick: $event => _ctx.chooseMonth(month)
70
+ onClick: event => _ctx.chooseMonth(month, event)
70
71
  }), {
71
72
  default: (0, _vue.withCtx)(() => [(0, _vue.createTextVNode)((0, _vue.toDisplayString)(_ctx.getMonthAbbr(month.index)), 1
72
73
  /* TEXT */
@@ -126,6 +127,7 @@ var _default = (0, _vue.defineComponent)({
126
127
  var [currentYear, currentMonth] = props.current.split('-');
127
128
  var reverse = (0, _vue.ref)(false);
128
129
  var panelKey = (0, _vue.ref)(0);
130
+ var headerEl = (0, _vue.ref)(null);
129
131
  var panelBtnDisabled = (0, _vue.reactive)({
130
132
  left: false,
131
133
  right: false
@@ -238,16 +240,20 @@ var _default = (0, _vue.defineComponent)({
238
240
 
239
241
  var isCover = textColorOrCover().startsWith('var-date-picker');
240
242
  return {
241
- disabled,
242
243
  outline: computeOutline(),
243
244
  text: computeText(),
244
245
  color: !computeText() ? color : '',
245
246
  textColor: isCover ? '' : textColorOrCover(),
246
- 'var-date-picker-color-cover': isCover
247
+ 'var-date-picker-color-cover': isCover,
248
+ class: {
249
+ 'var-month-picker__button-disabled': disabled
250
+ }
247
251
  };
248
252
  };
249
253
 
250
- var chooseMonth = month => {
254
+ var chooseMonth = (month, event) => {
255
+ var buttonEl = event.currentTarget;
256
+ if (buttonEl.classList.contains('var-month-picker__button-disabled')) return;
251
257
  emit('choose-month', month);
252
258
  };
253
259
 
@@ -255,6 +261,11 @@ var _default = (0, _vue.defineComponent)({
255
261
  reverse.value = checkType === 'prev';
256
262
  panelKey.value += checkType === 'prev' ? -1 : 1;
257
263
  emit('check-preview', 'year', checkType);
264
+ }; // expose for internal
265
+
266
+
267
+ var forwardRef = checkType => {
268
+ headerEl.value.checkDate(checkType);
258
269
  };
259
270
 
260
271
  (0, _vue.watch)(() => props.preview.previewYear, year => {
@@ -272,9 +283,11 @@ var _default = (0, _vue.defineComponent)({
272
283
  return {
273
284
  pack: _locale.pack,
274
285
  MONTH_LIST: _props.MONTH_LIST,
286
+ headerEl,
275
287
  reverse,
276
288
  panelKey,
277
289
  panelBtnDisabled,
290
+ forwardRef,
278
291
  buttonProps,
279
292
  getMonthAbbr,
280
293
  chooseMonth,
@@ -126,6 +126,7 @@ var _default = (0, _vue.defineComponent)({
126
126
  });
127
127
 
128
128
  var checkDate = checkType => {
129
+ if (checkType === 'prev' && props.disabled.left || checkType === 'next' && props.disabled.right) return;
129
130
  emit('check-date', checkType);
130
131
  reverse.value = checkType === 'prev';
131
132
  forwardOrBackNum.value += checkType === 'prev' ? -1 : 1;
@@ -32,6 +32,9 @@ var _hoisted_2 = {
32
32
  key: 0,
33
33
  class: "var-image-preview__indicators"
34
34
  };
35
+ var _hoisted_3 = {
36
+ class: "var-image-preview__extra"
37
+ };
35
38
 
36
39
  function render(_ctx, _cache) {
37
40
  var _component_var_swipe_item = (0, _vue.resolveComponent)("var-swipe-item");
@@ -131,7 +134,7 @@ function render(_ctx, _cache) {
131
134
  onClick: _ctx.close
132
135
  }, null, 8
133
136
  /* PROPS */
134
- , ["onClick"])) : (0, _vue.createCommentVNode)("v-if", true)])]),
137
+ , ["onClick"])) : (0, _vue.createCommentVNode)("v-if", true)]), (0, _vue.createElementVNode)("div", _hoisted_3, [(0, _vue.renderSlot)(_ctx.$slots, "extra")])]),
135
138
  _: 3
136
139
  /* FORWARDED */
137
140
 
@@ -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;
@@ -66,7 +66,6 @@ var _default = (0, _vue.defineComponent)({
66
66
  indexAnchors,
67
67
  bindIndexAnchors
68
68
  } = (0, _provide.useIndexAnchors)();
69
- var scrollEl = (0, _vue.ref)(null);
70
69
  var clickedName = (0, _vue.ref)('');
71
70
  var scroller = (0, _vue.ref)(null);
72
71
  var barEl = (0, _vue.ref)(null);
@@ -93,10 +92,8 @@ var _default = (0, _vue.defineComponent)({
93
92
  };
94
93
 
95
94
  var handleScroll = () => {
96
- var {
97
- scrollTop,
98
- scrollHeight
99
- } = scrollEl.value;
95
+ var scrollTop = (0, _elements.getScrollTop)(scroller.value);
96
+ var scrollHeight = scroller.value === window ? document.body.scrollHeight : scroller.value.scrollHeight;
100
97
  var {
101
98
  offsetTop
102
99
  } = barEl.value;
@@ -131,10 +128,10 @@ var _default = (0, _vue.defineComponent)({
131
128
  });
132
129
  if (!indexAnchor) return;
133
130
  var top = indexAnchor.ownTop.value - stickyOffsetTop.value + offsetTop;
134
- var left = (0, _elements.getScrollLeft)(scrollEl.value);
131
+ var left = (0, _elements.getScrollLeft)(scroller.value);
135
132
  clickedName.value = anchorName;
136
133
  emitEvent(anchorName);
137
- yield (0, _elements.scrollTo)(scrollEl.value, {
134
+ yield (0, _elements.scrollTo)(scroller.value, {
138
135
  left,
139
136
  top,
140
137
  animation: _shared.easeInOutCubic,
@@ -167,17 +164,14 @@ var _default = (0, _vue.defineComponent)({
167
164
  });
168
165
  }));
169
166
  (0, _vue.onMounted)( /*#__PURE__*/_asyncToGenerator(function* () {
170
- var _scroller$value;
171
-
172
167
  yield (0, _elements.doubleRaf)();
173
168
  scroller.value = (0, _elements.getParentScroller)(barEl.value);
174
- scrollEl.value = scroller.value === window ? scroller.value.document.documentElement : scroller.value;
175
- (_scroller$value = scroller.value) == null ? void 0 : _scroller$value.addEventListener('scroll', handleScroll);
169
+ scroller.value.addEventListener('scroll', handleScroll);
176
170
  }));
177
171
  (0, _vue.onBeforeUnmount)(() => {
178
- var _scroller$value2;
172
+ var _scroller$value;
179
173
 
180
- (_scroller$value2 = scroller.value) == null ? void 0 : _scroller$value2.removeEventListener('scroll', handleScroll);
174
+ (_scroller$value = scroller.value) == null ? void 0 : _scroller$value.removeEventListener('scroll', handleScroll);
181
175
  });
182
176
  return {
183
177
  barEl,