@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
@@ -155,6 +155,10 @@ export default defineComponent({
155
155
  uncheckedValue
156
156
  } = props;
157
157
  value.value = values.includes(checkedValue) ? checkedValue : uncheckedValue;
158
+ };
159
+
160
+ var resetWithAnimation = () => {
161
+ withAnimation.value = false;
158
162
  }; // expose
159
163
 
160
164
 
@@ -194,7 +198,8 @@ export default defineComponent({
194
198
  sync,
195
199
  validate,
196
200
  resetValidation,
197
- reset
201
+ reset,
202
+ resetWithAnimation
198
203
  };
199
204
  bindCheckboxGroup == null ? void 0 : bindCheckboxGroup(checkboxProvider);
200
205
  bindForm == null ? void 0 : bindForm(checkboxProvider);
@@ -99,7 +99,11 @@ export default defineComponent({
99
99
  sync
100
100
  } = _ref;
101
101
  return sync(props.modelValue);
102
- }); // expose
102
+ });
103
+
104
+ var resetWithAnimation = () => {
105
+ checkboxes.forEach(checkbox => checkbox.resetWithAnimation());
106
+ }; // expose
103
107
 
104
108
 
105
109
  var checkAll = () => {
@@ -112,6 +116,7 @@ export default defineComponent({
112
116
  return checkedValue.value;
113
117
  });
114
118
  var changedModelValue = uniq(checkedValues);
119
+ resetWithAnimation();
115
120
  (_props$onUpdateModel2 = props['onUpdate:modelValue']) == null ? void 0 : _props$onUpdateModel2.call(props, changedModelValue);
116
121
  return changedModelValue;
117
122
  }; // expose
@@ -132,6 +137,7 @@ export default defineComponent({
132
137
  return checkedValue.value;
133
138
  });
134
139
  var changedModelValue = uniq(checkedValues);
140
+ resetWithAnimation();
135
141
  (_props$onUpdateModel3 = props['onUpdate:modelValue']) == null ? void 0 : _props$onUpdateModel3.call(props, changedModelValue);
136
142
  return changedModelValue;
137
143
  }; // expose
@@ -6,13 +6,7 @@ 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
8
  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
- };
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 } from "vue";
16
10
  export function render(_ctx, _cache) {
17
11
  var _component_year_picker_panel = _resolveComponent("year-picker-panel");
18
12
 
@@ -40,7 +34,7 @@ export function render(_ctx, _cache) {
40
34
  class: _normalizeClass(["var-date-picker-title__date", [!_ctx.isYearPanel ? 'var-date-picker-title__date--active' : null, _ctx.range ? 'var-date-picker-title__date--range' : null]]),
41
35
  onClick: _cache[1] || (_cache[1] = $event => _ctx.clickEl('date'))
42
36
  }, [_createVNode(_Transition, {
43
- name: _ctx.multiple ? '' : _ctx.reverse ? 'var-date-picker-reverse-translatey' : 'var-date-picker-translatey'
37
+ name: _ctx.multiple ? '' : "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatey"
44
38
  }, {
45
39
  default: _withCtx(() => {
46
40
  var _ctx$chooseMonth, _ctx$chooseMonth2, _ctx$chooseMonth3;
@@ -90,18 +84,30 @@ export function render(_ctx, _cache) {
90
84
  /* CLASS */
91
85
  )], 4
92
86
  /* STYLE */
93
- ), _createElementVNode("div", _hoisted_1, [_createVNode(_Transition, {
87
+ ), _createElementVNode("div", {
88
+ class: "var-date-picker-body",
89
+ onTouchstart: _cache[2] || (_cache[2] = function () {
90
+ return _ctx.handleTouchstart && _ctx.handleTouchstart(...arguments);
91
+ }),
92
+ onTouchmove: _cache[3] || (_cache[3] = function () {
93
+ return _ctx.handleTouchmove && _ctx.handleTouchmove(...arguments);
94
+ }),
95
+ onTouchend: _cache[4] || (_cache[4] = function () {
96
+ return _ctx.handleTouchend && _ctx.handleTouchend(...arguments);
97
+ })
98
+ }, [_createVNode(_Transition, {
94
99
  name: "var-date-picker-panel-fade"
95
100
  }, {
96
- default: _withCtx(() => [_ctx.isYearPanel ? (_openBlock(), _createBlock(_component_year_picker_panel, {
101
+ default: _withCtx(() => [_ctx.getPanelType === 'year' ? (_openBlock(), _createBlock(_component_year_picker_panel, {
97
102
  key: 0,
98
103
  "component-props": _ctx.componentProps,
99
104
  preview: _ctx.previewYear,
100
105
  onChooseYear: _ctx.getChooseYear
101
106
  }, null, 8
102
107
  /* PROPS */
103
- , ["component-props", "preview", "onChooseYear"])) : !_ctx.isYearPanel && _ctx.type === 'month' || _ctx.isMonthPanel ? (_openBlock(), _createBlock(_component_month_picker_panel, {
108
+ , ["component-props", "preview", "onChooseYear"])) : _ctx.getPanelType === 'month' ? (_openBlock(), _createBlock(_component_month_picker_panel, {
104
109
  key: 1,
110
+ ref: "monthPanelEl",
105
111
  current: _ctx.currentDate,
106
112
  choose: _ctx.getChoose,
107
113
  preview: _ctx.getPreview,
@@ -111,8 +117,9 @@ export function render(_ctx, _cache) {
111
117
  onCheckPreview: _ctx.checkPreview
112
118
  }, null, 8
113
119
  /* PROPS */
114
- , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : !_ctx.isYearPanel && !_ctx.isMonthPanel && _ctx.type === 'date' ? (_openBlock(), _createBlock(_component_day_picker_panel, {
120
+ , ["current", "choose", "preview", "click-year", "component-props", "onChooseMonth", "onCheckPreview"])) : _ctx.getPanelType === 'date' ? (_openBlock(), _createBlock(_component_day_picker_panel, {
115
121
  key: 2,
122
+ ref: "dayPanelEl",
116
123
  current: _ctx.currentDate,
117
124
  choose: _ctx.getChoose,
118
125
  preview: _ctx.getPreview,
@@ -126,7 +133,9 @@ export function render(_ctx, _cache) {
126
133
  _: 1
127
134
  /* STABLE */
128
135
 
129
- })])], 2
136
+ })], 32
137
+ /* HYDRATE_EVENTS */
138
+ )], 2
130
139
  /* CLASS */
131
140
  );
132
141
  }
@@ -141,6 +150,10 @@ export default defineComponent({
141
150
  props,
142
151
 
143
152
  setup(props) {
153
+ var startX = 0;
154
+ var startY = 0;
155
+ var checkType = '';
156
+ var touchDirection;
144
157
  var currentDate = dayjs().format('YYYY-MM-D');
145
158
  var [currentYear, currentMonth] = currentDate.split('-');
146
159
  var monthDes = MONTH_LIST.find(month => month.index === currentMonth);
@@ -157,6 +170,8 @@ export default defineComponent({
157
170
  var chooseDays = ref([]);
158
171
  var chooseRangeMonth = ref([]);
159
172
  var chooseRangeDay = ref([]);
173
+ var monthPanelEl = ref(null);
174
+ var dayPanelEl = ref(null);
160
175
  var componentProps = reactive({
161
176
  allowedDates: props.allowedDates,
162
177
  type: props.type,
@@ -224,15 +239,25 @@ export default defineComponent({
224
239
  if (pack.value.lang === 'zh-CN') return chooseMonth.value.index + "-" + showDay + " " + weekName.slice(0, 3);
225
240
  return weekName.slice(0, 3) + ", " + monthName.slice(0, 3) + " " + chooseDay.value;
226
241
  });
242
+ var getPanelType = computed(() => {
243
+ if (isYearPanel.value) return 'year';
244
+ if (props.type === 'month' || isMonthPanel.value) return 'month';
245
+ if (props.type === 'date') return 'date';
246
+ return '';
247
+ });
248
+ var isUntouchable = computed(() => {
249
+ return !props.touchable || ['', 'year'].includes(getPanelType.value);
250
+ });
227
251
  var slotProps = computed(() => {
228
- var _chooseMonth$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2, _chooseDay$value;
252
+ var _chooseMonth$value, _chooseDay$value, _chooseYear$value, _chooseMonth$value$in, _chooseMonth$value2;
229
253
 
230
254
  var weekIndex = dayjs(chooseYear.value + "-" + ((_chooseMonth$value = chooseMonth.value) == null ? void 0 : _chooseMonth$value.index) + "-" + chooseDay.value).day();
255
+ var date = chooseDay.value ? (_chooseDay$value = chooseDay.value) == null ? void 0 : _chooseDay$value.padStart(2, '0') : '';
231
256
  return {
232
257
  week: "" + weekIndex,
233
258
  year: (_chooseYear$value = chooseYear.value) != null ? _chooseYear$value : '',
234
259
  month: (_chooseMonth$value$in = (_chooseMonth$value2 = chooseMonth.value) == null ? void 0 : _chooseMonth$value2.index) != null ? _chooseMonth$value$in : '',
235
- date: (_chooseDay$value = chooseDay.value) != null ? _chooseDay$value : ''
260
+ date
236
261
  };
237
262
  });
238
263
  var formatRange = computed(() => getChoose.value.chooseRangeDay.map(choose => dayjs(choose).format('YYYY-MM-DD')));
@@ -250,6 +275,39 @@ export default defineComponent({
250
275
  }
251
276
  };
252
277
 
278
+ var handleTouchstart = event => {
279
+ if (isUntouchable.value) return;
280
+ var {
281
+ clientX,
282
+ clientY
283
+ } = event.touches[0];
284
+ startX = clientX;
285
+ startY = clientY;
286
+ };
287
+
288
+ var getDirection = (x, y) => {
289
+ return x >= y && x > 20 ? 'x' : 'y';
290
+ };
291
+
292
+ var handleTouchmove = event => {
293
+ if (isUntouchable.value) return;
294
+ var {
295
+ clientX,
296
+ clientY
297
+ } = event.touches[0];
298
+ var x = clientX - startX;
299
+ var y = clientY - startY;
300
+ touchDirection = getDirection(Math.abs(x), Math.abs(y));
301
+ checkType = x > 0 ? 'prev' : 'next';
302
+ };
303
+
304
+ var handleTouchend = () => {
305
+ if (isUntouchable.value || touchDirection !== 'x') return;
306
+ var componentRef = getPanelType.value === 'month' ? monthPanelEl : dayPanelEl;
307
+ componentRef.value.forwardRef(checkType);
308
+ resetState();
309
+ };
310
+
253
311
  var updateRange = (date, type) => {
254
312
  var rangeDate = type === 'month' ? chooseRangeMonth : chooseRangeDay;
255
313
  rangeDate.value = rangeDone.value ? [date, date] : [rangeDate.value[0], date];
@@ -415,6 +473,13 @@ export default defineComponent({
415
473
  previewYear.value = yearValue;
416
474
  };
417
475
 
476
+ var resetState = () => {
477
+ startY = 0;
478
+ startX = 0;
479
+ checkType = '';
480
+ touchDirection = undefined;
481
+ };
482
+
418
483
  watch(() => props.modelValue, value => {
419
484
  if (!checkValue() || invalidFormatDate(value) || !value) return;
420
485
 
@@ -431,7 +496,10 @@ export default defineComponent({
431
496
  }, {
432
497
  immediate: true
433
498
  });
499
+ watch(getPanelType, resetState);
434
500
  return {
501
+ monthPanelEl,
502
+ dayPanelEl,
435
503
  reverse,
436
504
  currentDate,
437
505
  chooseMonth,
@@ -442,12 +510,16 @@ export default defineComponent({
442
510
  isMonthPanel,
443
511
  getMonthTitle,
444
512
  getDateTitle,
513
+ getPanelType,
445
514
  getChoose,
446
515
  getPreview,
447
516
  componentProps,
448
517
  slotProps,
449
518
  formatRange,
450
519
  clickEl,
520
+ handleTouchstart,
521
+ handleTouchmove,
522
+ handleTouchend,
451
523
  getChooseDay,
452
524
  getChooseMonth,
453
525
  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%;
@@ -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,
@@ -41,7 +42,7 @@ export function render(_ctx, _cache) {
41
42
  }, null, 8
42
43
  /* PROPS */
43
44
  , ["date", "disabled", "onCheckPanel", "onCheckDate"]), _createVNode(_Transition, {
44
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
45
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
45
46
  }, {
46
47
  default: _withCtx(() => [(_openBlock(), _createElementBlock("div", {
47
48
  key: _ctx.panelKey
@@ -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
@@ -308,6 +310,11 @@ export default defineComponent({
308
310
 
309
311
  var chooseDay = day => {
310
312
  emit('choose-day', day);
313
+ }; // expose for internal
314
+
315
+
316
+ var forwardRef = checkType => {
317
+ headerEl.value.checkDate(checkType);
311
318
  };
312
319
 
313
320
  onMounted(() => {
@@ -321,9 +328,11 @@ export default defineComponent({
321
328
  return {
322
329
  days,
323
330
  reverse,
331
+ headerEl,
324
332
  panelKey,
325
333
  sortWeekList,
326
334
  panelBtnDisabled,
335
+ forwardRef,
327
336
  filterDay,
328
337
  getDayAbbr,
329
338
  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,
@@ -35,7 +36,7 @@ export function render(_ctx, _cache) {
35
36
  }, null, 8
36
37
  /* PROPS */
37
38
  , ["date", "disabled", "onCheckPanel", "onCheckDate"]), _createVNode(_Transition, {
38
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
39
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
39
40
  }, {
40
41
  default: _withCtx(() => [(_openBlock(), _createElementBlock("ul", {
41
42
  key: _ctx.panelKey
@@ -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
@@ -236,6 +238,11 @@ export default defineComponent({
236
238
  reverse.value = checkType === 'prev';
237
239
  panelKey.value += checkType === 'prev' ? -1 : 1;
238
240
  emit('check-preview', 'year', checkType);
241
+ }; // expose for internal
242
+
243
+
244
+ var forwardRef = checkType => {
245
+ headerEl.value.checkDate(checkType);
239
246
  };
240
247
 
241
248
  watch(() => props.preview.previewYear, year => {
@@ -253,9 +260,11 @@ export default defineComponent({
253
260
  return {
254
261
  pack,
255
262
  MONTH_LIST,
263
+ headerEl,
256
264
  reverse,
257
265
  panelKey,
258
266
  panelBtnDisabled,
267
+ forwardRef,
259
268
  buttonProps,
260
269
  getMonthAbbr,
261
270
  chooseMonth,
@@ -36,7 +36,7 @@ export function render(_ctx, _cache) {
36
36
  class: "var-picker-header__value",
37
37
  onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('check-panel'))
38
38
  }, [_createVNode(_Transition, {
39
- name: _ctx.reverse ? 'var-date-picker-reverse-translatex' : 'var-date-picker-translatex'
39
+ name: "var-date-picker" + (_ctx.reverse ? '-reverse' : '') + "-translatex"
40
40
  }, {
41
41
  default: _withCtx(() => [(_openBlock(), _createElementBlock("div", {
42
42
  key: _ctx.showDate
@@ -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;
@@ -7,6 +7,7 @@ import { props } from './props';
7
7
  import { toNumber } from '../utils/shared';
8
8
  var DISTANCE_OFFSET = 12;
9
9
  var EVENT_DELAY = 200;
10
+ var TAP_DELAY = 350;
10
11
  var ANIMATION_DURATION = 200;
11
12
  import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, mergeProps as _mergeProps, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue";
12
13
 
@@ -17,6 +18,9 @@ var _hoisted_2 = {
17
18
  key: 0,
18
19
  class: "var-image-preview__indicators"
19
20
  };
21
+ var _hoisted_3 = {
22
+ class: "var-image-preview__extra"
23
+ };
20
24
  export function render(_ctx, _cache) {
21
25
  var _component_var_swipe_item = _resolveComponent("var-swipe-item");
22
26
 
@@ -115,7 +119,7 @@ export function render(_ctx, _cache) {
115
119
  onClick: _ctx.close
116
120
  }, null, 8
117
121
  /* PROPS */
118
- , ["onClick"])) : _createCommentVNode("v-if", true)])]),
122
+ , ["onClick"])) : _createCommentVNode("v-if", true)]), _createElementVNode("div", _hoisted_3, [_renderSlot(_ctx.$slots, "extra")])]),
119
123
  _: 3
120
124
  /* FORWARDED */
121
125
 
@@ -203,11 +207,11 @@ export default defineComponent({
203
207
  };
204
208
 
205
209
  var isTapTouch = target => {
206
- if (!startTouch || !prevTouch) {
210
+ if (!target || !startTouch || !prevTouch) {
207
211
  return false;
208
212
  }
209
213
 
210
- return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && (target === startTouch.target || target.parentNode === startTouch.target);
214
+ return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && Date.now() - prevTouch.timestamp < TAP_DELAY && (target === startTouch.target || target.parentNode === startTouch.target);
211
215
  };
212
216
 
213
217
  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/es/rate/Rate.js CHANGED
@@ -33,13 +33,14 @@ export function render(_ctx, _cache) {
33
33
  onClick: $event => _ctx.handleClick(val, $event)
34
34
  }, [_createVNode(_component_var_icon, {
35
35
  transition: 0,
36
+ namespace: _ctx.namespace,
36
37
  name: _ctx.getIconName(val),
37
38
  style: _normalizeStyle({
38
39
  fontSize: _ctx.toSizeUnit(_ctx.size)
39
40
  })
40
41
  }, null, 8
41
42
  /* PROPS */
42
- , ["name", "style"])], 14
43
+ , ["namespace", "name", "style"])], 14
43
44
  /* CLASS, STYLE, PROPS */
44
45
  , _hoisted_3)), [[_directive_ripple, {
45
46
  disabled: _ctx.formReadonly || _ctx.readonly || _ctx.formDisabled || _ctx.disabled || !_ctx.ripple
package/es/rate/props.js CHANGED
@@ -29,6 +29,9 @@ export var props = {
29
29
  type: [String, Number],
30
30
  default: '2'
31
31
  },
32
+ namespace: {
33
+ type: String
34
+ },
32
35
  half: {
33
36
  type: Boolean,
34
37
  default: false