@varlet/ui 1.26.2 → 1.26.5

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 (39) hide show
  1. package/es/checkbox/Checkbox.js +6 -1
  2. package/es/checkbox-group/CheckboxGroup.js +7 -1
  3. package/es/date-picker/DatePicker.js +87 -15
  4. package/es/date-picker/date-picker.css +1 -1
  5. package/es/date-picker/date-picker.less +1 -0
  6. package/es/date-picker/props.js +4 -0
  7. package/es/date-picker/src/day-picker-panel.js +10 -1
  8. package/es/date-picker/src/month-picker-panel.js +10 -1
  9. package/es/date-picker/src/panel-header.js +2 -1
  10. package/es/image-preview/ImagePreview.js +7 -3
  11. package/es/image-preview/imagePreview.css +1 -1
  12. package/es/image-preview/imagePreview.less +11 -1
  13. package/es/rate/Rate.js +2 -1
  14. package/es/rate/props.js +3 -0
  15. package/es/style.css +1 -1
  16. package/es/varlet.esm.js +180 -69
  17. package/highlight/attributes.json +8 -0
  18. package/highlight/tags.json +3 -1
  19. package/highlight/web-types.json +23 -1
  20. package/lib/checkbox/Checkbox.js +6 -1
  21. package/lib/checkbox-group/CheckboxGroup.js +7 -1
  22. package/lib/date-picker/DatePicker.js +86 -14
  23. package/lib/date-picker/date-picker.css +1 -1
  24. package/lib/date-picker/date-picker.less +1 -0
  25. package/lib/date-picker/props.js +4 -0
  26. package/lib/date-picker/src/day-picker-panel.js +10 -1
  27. package/lib/date-picker/src/month-picker-panel.js +10 -1
  28. package/lib/date-picker/src/panel-header.js +2 -1
  29. package/lib/image-preview/ImagePreview.js +7 -3
  30. package/lib/image-preview/imagePreview.css +1 -1
  31. package/lib/image-preview/imagePreview.less +11 -1
  32. package/lib/rate/Rate.js +2 -1
  33. package/lib/rate/props.js +3 -0
  34. package/lib/style.css +1 -1
  35. package/package.json +4 -4
  36. package/types/datePicker.d.ts +1 -0
  37. package/types/radioGroup.d.ts +3 -3
  38. package/types/rate.d.ts +1 -0
  39. 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"
@@ -1203,6 +1207,10 @@
1203
1207
  "type": "string",
1204
1208
  "description": "半选时图标的样式,只有在 `half` 为 `true` 时才有效 默认值:star-half-full"
1205
1209
  },
1210
+ "var-rate/namespace": {
1211
+ "type": "string",
1212
+ "description": "图标的命名空间, 可扩展自定义图标库 默认值:var-icon"
1213
+ },
1206
1214
  "var-rate/disabled": {
1207
1215
  "type": "boolean",
1208
1216
  "description": "是否禁止评分 默认值:false"
@@ -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": {
@@ -455,6 +456,7 @@
455
456
  "gap",
456
457
  "half",
457
458
  "half-icon",
459
+ "namespace",
458
460
  "disabled",
459
461
  "disabled-color",
460
462
  "readonly",
@@ -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.1",
4
+ "version": "1.26.4",
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
  },
@@ -3583,6 +3596,15 @@
3583
3596
  "kind": "expression"
3584
3597
  }
3585
3598
  },
3599
+ {
3600
+ "name": "namespace",
3601
+ "description": "图标的命名空间, 可扩展自定义图标库",
3602
+ "default": "var-icon",
3603
+ "value": {
3604
+ "type": "string",
3605
+ "kind": "expression"
3606
+ }
3607
+ },
3586
3608
  {
3587
3609
  "name": "disabled",
3588
3610
  "description": "是否禁止评分",
@@ -171,6 +171,10 @@ var _default = (0, _vue.defineComponent)({
171
171
  uncheckedValue
172
172
  } = props;
173
173
  value.value = values.includes(checkedValue) ? checkedValue : uncheckedValue;
174
+ };
175
+
176
+ var resetWithAnimation = () => {
177
+ withAnimation.value = false;
174
178
  }; // expose
175
179
 
176
180
 
@@ -210,7 +214,8 @@ var _default = (0, _vue.defineComponent)({
210
214
  sync,
211
215
  validate,
212
216
  resetValidation,
213
- reset
217
+ reset,
218
+ resetWithAnimation
214
219
  };
215
220
  bindCheckboxGroup == null ? void 0 : bindCheckboxGroup(checkboxProvider);
216
221
  bindForm == null ? void 0 : bindForm(checkboxProvider);
@@ -114,7 +114,11 @@ var _default = (0, _vue.defineComponent)({
114
114
  sync
115
115
  } = _ref;
116
116
  return sync(props.modelValue);
117
- }); // expose
117
+ });
118
+
119
+ var resetWithAnimation = () => {
120
+ checkboxes.forEach(checkbox => checkbox.resetWithAnimation());
121
+ }; // expose
118
122
 
119
123
 
120
124
  var checkAll = () => {
@@ -127,6 +131,7 @@ var _default = (0, _vue.defineComponent)({
127
131
  return checkedValue.value;
128
132
  });
129
133
  var changedModelValue = (0, _shared.uniq)(checkedValues);
134
+ resetWithAnimation();
130
135
  (_props$onUpdateModel2 = props['onUpdate:modelValue']) == null ? void 0 : _props$onUpdateModel2.call(props, changedModelValue);
131
136
  return changedModelValue;
132
137
  }; // expose
@@ -147,6 +152,7 @@ var _default = (0, _vue.defineComponent)({
147
152
  return checkedValue.value;
148
153
  });
149
154
  var changedModelValue = (0, _shared.uniq)(checkedValues);
155
+ resetWithAnimation();
150
156
  (_props$onUpdateModel3 = props['onUpdate:modelValue']) == null ? void 0 : _props$onUpdateModel3.call(props, changedModelValue);
151
157
  return changedModelValue;
152
158
  }; // expose
@@ -22,12 +22,6 @@ var _locale = require("../locale");
22
22
 
23
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
24
 
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
25
  function render(_ctx, _cache) {
32
26
  var _component_year_picker_panel = (0, _vue.resolveComponent)("year-picker-panel");
33
27
 
@@ -55,7 +49,7 @@ function render(_ctx, _cache) {
55
49
  class: (0, _vue.normalizeClass)(["var-date-picker-title__date", [!_ctx.isYearPanel ? 'var-date-picker-title__date--active' : null, _ctx.range ? 'var-date-picker-title__date--range' : null]]),
56
50
  onClick: _cache[1] || (_cache[1] = $event => _ctx.clickEl('date'))
57
51
  }, [(0, _vue.createVNode)(_vue.Transition, {
58
- name: _ctx.multiple ? '' : _ctx.reverse ? 'var-date-picker-reverse-translatey' : 'var-date-picker-translatey'
52
+ name: _ctx.multiple ? '' : "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatey"
59
53
  }, {
60
54
  default: (0, _vue.withCtx)(() => {
61
55
  var _ctx$chooseMonth, _ctx$chooseMonth2, _ctx$chooseMonth3;
@@ -105,18 +99,30 @@ function render(_ctx, _cache) {
105
99
  /* CLASS */
106
100
  )], 4
107
101
  /* STYLE */
108
- ), (0, _vue.createElementVNode)("div", _hoisted_1, [(0, _vue.createVNode)(_vue.Transition, {
102
+ ), (0, _vue.createElementVNode)("div", {
103
+ class: "var-date-picker-body",
104
+ onTouchstart: _cache[2] || (_cache[2] = function () {
105
+ return _ctx.handleTouchstart && _ctx.handleTouchstart(...arguments);
106
+ }),
107
+ onTouchmove: _cache[3] || (_cache[3] = function () {
108
+ return _ctx.handleTouchmove && _ctx.handleTouchmove(...arguments);
109
+ }),
110
+ onTouchend: _cache[4] || (_cache[4] = function () {
111
+ return _ctx.handleTouchend && _ctx.handleTouchend(...arguments);
112
+ })
113
+ }, [(0, _vue.createVNode)(_vue.Transition, {
109
114
  name: "var-date-picker-panel-fade"
110
115
  }, {
111
- default: (0, _vue.withCtx)(() => [_ctx.isYearPanel ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_year_picker_panel, {
116
+ default: (0, _vue.withCtx)(() => [_ctx.getPanelType === 'year' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_year_picker_panel, {
112
117
  key: 0,
113
118
  "component-props": _ctx.componentProps,
114
119
  preview: _ctx.previewYear,
115
120
  onChooseYear: _ctx.getChooseYear
116
121
  }, null, 8
117
122
  /* PROPS */
118
- , ["component-props", "preview", "onChooseYear"])) : !_ctx.isYearPanel && _ctx.type === 'month' || _ctx.isMonthPanel ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_month_picker_panel, {
123
+ , ["component-props", "preview", "onChooseYear"])) : _ctx.getPanelType === 'month' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_month_picker_panel, {
119
124
  key: 1,
125
+ ref: "monthPanelEl",
120
126
  current: _ctx.currentDate,
121
127
  choose: _ctx.getChoose,
122
128
  preview: _ctx.getPreview,
@@ -126,8 +132,9 @@ function render(_ctx, _cache) {
126
132
  onCheckPreview: _ctx.checkPreview
127
133
  }, null, 8
128
134
  /* 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, {
135
+ , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : _ctx.getPanelType === 'date' ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_day_picker_panel, {
130
136
  key: 2,
137
+ ref: "dayPanelEl",
131
138
  current: _ctx.currentDate,
132
139
  choose: _ctx.getChoose,
133
140
  preview: _ctx.getPreview,
@@ -141,7 +148,9 @@ function render(_ctx, _cache) {
141
148
  _: 1
142
149
  /* STABLE */
143
150
 
144
- })])], 2
151
+ })], 32
152
+ /* HYDRATE_EVENTS */
153
+ )], 2
145
154
  /* CLASS */
146
155
  );
147
156
  }
@@ -157,6 +166,10 @@ var _default = (0, _vue.defineComponent)({
157
166
  props: _props.props,
158
167
 
159
168
  setup(props) {
169
+ var startX = 0;
170
+ var startY = 0;
171
+ var checkType = '';
172
+ var touchDirection;
160
173
  var currentDate = (0, _dayjs.default)().format('YYYY-MM-D');
161
174
  var [currentYear, currentMonth] = currentDate.split('-');
162
175
 
@@ -175,6 +188,8 @@ var _default = (0, _vue.defineComponent)({
175
188
  var chooseDays = (0, _vue.ref)([]);
176
189
  var chooseRangeMonth = (0, _vue.ref)([]);
177
190
  var chooseRangeDay = (0, _vue.ref)([]);
191
+ var monthPanelEl = (0, _vue.ref)(null);
192
+ var dayPanelEl = (0, _vue.ref)(null);
178
193
  var componentProps = (0, _vue.reactive)({
179
194
  allowedDates: props.allowedDates,
180
195
  type: props.type,
@@ -244,15 +259,25 @@ var _default = (0, _vue.defineComponent)({
244
259
  if (_locale.pack.value.lang === 'zh-CN') return chooseMonth.value.index + "-" + showDay + " " + weekName.slice(0, 3);
245
260
  return weekName.slice(0, 3) + ", " + monthName.slice(0, 3) + " " + chooseDay.value;
246
261
  });
262
+ var getPanelType = (0, _vue.computed)(() => {
263
+ if (isYearPanel.value) return 'year';
264
+ if (props.type === 'month' || isMonthPanel.value) return 'month';
265
+ if (props.type === 'date') return 'date';
266
+ return '';
267
+ });
268
+ var isUntouchable = (0, _vue.computed)(() => {
269
+ return !props.touchable || ['', 'year'].includes(getPanelType.value);
270
+ });
247
271
  var slotProps = (0, _vue.computed)(() => {
248
- var _chooseMonth$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2, _chooseDay$value;
272
+ var _chooseMonth$value, _chooseDay$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2;
249
273
 
250
274
  var weekIndex = (0, _dayjs.default)(chooseYear.value + "-" + ((_chooseMonth$value = chooseMonth.value) == null ? void 0 : _chooseMonth$value.index) + "-" + chooseDay.value).day();
275
+ var date = chooseDay.value ? (_chooseDay$value = chooseDay.value) == null ? void 0 : _chooseDay$value.padStart(2, '0') : '';
251
276
  return {
252
277
  week: "" + weekIndex,
253
278
  year: (_chooseYear$value = chooseYear.value) != null ? _chooseYear$value : '',
254
279
  month: (_chooseMonth$value$in = (_chooseMonth$value2 = chooseMonth.value) == null ? void 0 : _chooseMonth$value2.index) != null ? _chooseMonth$value$in : '',
255
- date: (_chooseDay$value = chooseDay.value) != null ? _chooseDay$value : ''
280
+ date
256
281
  };
257
282
  });
258
283
  var formatRange = (0, _vue.computed)(() => getChoose.value.chooseRangeDay.map(choose => (0, _dayjs.default)(choose).format('YYYY-MM-DD')));
@@ -270,6 +295,39 @@ var _default = (0, _vue.defineComponent)({
270
295
  }
271
296
  };
272
297
 
298
+ var handleTouchstart = event => {
299
+ if (isUntouchable.value) return;
300
+ var {
301
+ clientX,
302
+ clientY
303
+ } = event.touches[0];
304
+ startX = clientX;
305
+ startY = clientY;
306
+ };
307
+
308
+ var getDirection = (x, y) => {
309
+ return x >= y && x > 20 ? 'x' : 'y';
310
+ };
311
+
312
+ var handleTouchmove = event => {
313
+ if (isUntouchable.value) return;
314
+ var {
315
+ clientX,
316
+ clientY
317
+ } = event.touches[0];
318
+ var x = clientX - startX;
319
+ var y = clientY - startY;
320
+ touchDirection = getDirection(Math.abs(x), Math.abs(y));
321
+ checkType = x > 0 ? 'prev' : 'next';
322
+ };
323
+
324
+ var handleTouchend = () => {
325
+ if (isUntouchable.value || touchDirection !== 'x') return;
326
+ var componentRef = getPanelType.value === 'month' ? monthPanelEl : dayPanelEl;
327
+ componentRef.value.forwardRef(checkType);
328
+ resetState();
329
+ };
330
+
273
331
  var updateRange = (date, type) => {
274
332
  var rangeDate = type === 'month' ? chooseRangeMonth : chooseRangeDay;
275
333
  rangeDate.value = rangeDone.value ? [date, date] : [rangeDate.value[0], date];
@@ -437,6 +495,13 @@ var _default = (0, _vue.defineComponent)({
437
495
  previewYear.value = yearValue;
438
496
  };
439
497
 
498
+ var resetState = () => {
499
+ startY = 0;
500
+ startX = 0;
501
+ checkType = '';
502
+ touchDirection = undefined;
503
+ };
504
+
440
505
  (0, _vue.watch)(() => props.modelValue, value => {
441
506
  if (!checkValue() || invalidFormatDate(value) || !value) return;
442
507
 
@@ -453,7 +518,10 @@ var _default = (0, _vue.defineComponent)({
453
518
  }, {
454
519
  immediate: true
455
520
  });
521
+ (0, _vue.watch)(getPanelType, resetState);
456
522
  return {
523
+ monthPanelEl,
524
+ dayPanelEl,
457
525
  reverse,
458
526
  currentDate,
459
527
  chooseMonth,
@@ -464,12 +532,16 @@ var _default = (0, _vue.defineComponent)({
464
532
  isMonthPanel,
465
533
  getMonthTitle,
466
534
  getDateTitle,
535
+ getPanelType,
467
536
  getChoose,
468
537
  getPreview,
469
538
  componentProps,
470
539
  slotProps,
471
540
  formatRange,
472
541
  clickEl,
542
+ handleTouchstart,
543
+ handleTouchmove,
544
+ handleTouchend,
473
545
  getChooseDay,
474
546
  getChooseMonth,
475
547
  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-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%);}
@@ -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%;
@@ -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,
@@ -59,7 +60,7 @@ function render(_ctx, _cache) {
59
60
  }, null, 8
60
61
  /* PROPS */
61
62
  , ["date", "disabled", "onCheckPanel", "onCheckDate"]), (0, _vue.createVNode)(_vue.Transition, {
62
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
63
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
63
64
  }, {
64
65
  default: (0, _vue.withCtx)(() => [((0, _vue.openBlock)(), (0, _vue.createElementBlock)("div", {
65
66
  key: _ctx.panelKey
@@ -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
@@ -328,6 +330,11 @@ var _default = (0, _vue.defineComponent)({
328
330
 
329
331
  var chooseDay = day => {
330
332
  emit('choose-day', day);
333
+ }; // expose for internal
334
+
335
+
336
+ var forwardRef = checkType => {
337
+ headerEl.value.checkDate(checkType);
331
338
  };
332
339
 
333
340
  (0, _vue.onMounted)(() => {
@@ -341,9 +348,11 @@ var _default = (0, _vue.defineComponent)({
341
348
  return {
342
349
  days,
343
350
  reverse,
351
+ headerEl,
344
352
  panelKey,
345
353
  sortWeekList,
346
354
  panelBtnDisabled,
355
+ forwardRef,
347
356
  filterDay,
348
357
  getDayAbbr,
349
358
  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,
@@ -53,7 +54,7 @@ function render(_ctx, _cache) {
53
54
  }, null, 8
54
55
  /* PROPS */
55
56
  , ["date", "disabled", "onCheckPanel", "onCheckDate"]), (0, _vue.createVNode)(_vue.Transition, {
56
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
57
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
57
58
  }, {
58
59
  default: (0, _vue.withCtx)(() => [((0, _vue.openBlock)(), (0, _vue.createElementBlock)("ul", {
59
60
  key: _ctx.panelKey
@@ -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
@@ -255,6 +257,11 @@ var _default = (0, _vue.defineComponent)({
255
257
  reverse.value = checkType === 'prev';
256
258
  panelKey.value += checkType === 'prev' ? -1 : 1;
257
259
  emit('check-preview', 'year', checkType);
260
+ }; // expose for internal
261
+
262
+
263
+ var forwardRef = checkType => {
264
+ headerEl.value.checkDate(checkType);
258
265
  };
259
266
 
260
267
  (0, _vue.watch)(() => props.preview.previewYear, year => {
@@ -272,9 +279,11 @@ var _default = (0, _vue.defineComponent)({
272
279
  return {
273
280
  pack: _locale.pack,
274
281
  MONTH_LIST: _props.MONTH_LIST,
282
+ headerEl,
275
283
  reverse,
276
284
  panelKey,
277
285
  panelBtnDisabled,
286
+ forwardRef,
278
287
  buttonProps,
279
288
  getMonthAbbr,
280
289
  chooseMonth,
@@ -48,7 +48,7 @@ function render(_ctx, _cache) {
48
48
  class: "var-picker-header__value",
49
49
  onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('check-panel'))
50
50
  }, [(0, _vue.createVNode)(_vue.Transition, {
51
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
51
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
52
52
  }, {
53
53
  default: (0, _vue.withCtx)(() => [((0, _vue.openBlock)(), (0, _vue.createElementBlock)("div", {
54
54
  key: _ctx.showDate
@@ -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;
@@ -22,6 +22,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
22
22
 
23
23
  var DISTANCE_OFFSET = 12;
24
24
  var EVENT_DELAY = 200;
25
+ var TAP_DELAY = 350;
25
26
  var ANIMATION_DURATION = 200;
26
27
 
27
28
  var _withScopeId = n => ((0, _vue.pushScopeId)(""), n = n(), (0, _vue.popScopeId)(), n);
@@ -31,6 +32,9 @@ var _hoisted_2 = {
31
32
  key: 0,
32
33
  class: "var-image-preview__indicators"
33
34
  };
35
+ var _hoisted_3 = {
36
+ class: "var-image-preview__extra"
37
+ };
34
38
 
35
39
  function render(_ctx, _cache) {
36
40
  var _component_var_swipe_item = (0, _vue.resolveComponent)("var-swipe-item");
@@ -130,7 +134,7 @@ function render(_ctx, _cache) {
130
134
  onClick: _ctx.close
131
135
  }, null, 8
132
136
  /* PROPS */
133
- , ["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")])]),
134
138
  _: 3
135
139
  /* FORWARDED */
136
140
 
@@ -219,11 +223,11 @@ var _default = (0, _vue.defineComponent)({
219
223
  };
220
224
 
221
225
  var isTapTouch = target => {
222
- if (!startTouch || !prevTouch) {
226
+ if (!target || !startTouch || !prevTouch) {
223
227
  return false;
224
228
  }
225
229
 
226
- return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && (target === startTouch.target || target.parentNode === startTouch.target);
230
+ return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && Date.now() - prevTouch.timestamp < TAP_DELAY && (target === startTouch.target || target.parentNode === startTouch.target);
227
231
  };
228
232
 
229
233
  var handleTouchend = event => {
@@ -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;
package/lib/rate/Rate.js CHANGED
@@ -49,13 +49,14 @@ function render(_ctx, _cache) {
49
49
  onClick: $event => _ctx.handleClick(val, $event)
50
50
  }, [(0, _vue.createVNode)(_component_var_icon, {
51
51
  transition: 0,
52
+ namespace: _ctx.namespace,
52
53
  name: _ctx.getIconName(val),
53
54
  style: (0, _vue.normalizeStyle)({
54
55
  fontSize: _ctx.toSizeUnit(_ctx.size)
55
56
  })
56
57
  }, null, 8
57
58
  /* PROPS */
58
- , ["name", "style"])], 14
59
+ , ["namespace", "name", "style"])], 14
59
60
  /* CLASS, STYLE, PROPS */
60
61
  , _hoisted_3)), [[_directive_ripple, {
61
62
  disabled: _ctx.formReadonly || _ctx.readonly || _ctx.formDisabled || _ctx.disabled || !_ctx.ripple
package/lib/rate/props.js CHANGED
@@ -33,6 +33,9 @@ var props = {
33
33
  type: [String, Number],
34
34
  default: '2'
35
35
  },
36
+ namespace: {
37
+ type: String
38
+ },
36
39
  half: {
37
40
  type: Boolean,
38
41
  default: false