@varlet/ui 2.11.0 → 2.11.1-alpha.1684493331817

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.
@@ -163,7 +163,7 @@ var __sfc__ = defineComponent({
163
163
  var canSwipe = ref(true);
164
164
  var startTouch = null;
165
165
  var prevTouch = null;
166
- var checker = null;
166
+ var closeRunner = null;
167
167
 
168
168
  var getDistance = (touch, target) => {
169
169
  var {
@@ -180,7 +180,7 @@ var __sfc__ = defineComponent({
180
180
  var createVarTouch = (touches, target) => ({
181
181
  clientX: touches.clientX,
182
182
  clientY: touches.clientY,
183
- timestamp: Date.now(),
183
+ timestamp: performance.now(),
184
184
  target
185
185
  });
186
186
 
@@ -217,22 +217,20 @@ var __sfc__ = defineComponent({
217
217
  return false;
218
218
  }
219
219
 
220
- return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && Date.now() - prevTouch.timestamp < TAP_DELAY && (target === startTouch.target || target.parentNode === startTouch.target);
220
+ return getDistance(startTouch, prevTouch) <= DISTANCE_OFFSET && performance.now() - prevTouch.timestamp < TAP_DELAY && (target === startTouch.target || target.parentNode === startTouch.target);
221
221
  };
222
222
 
223
223
  var handleTouchend = event => {
224
- checker = window.setTimeout(() => {
225
- isTapTouch(event.target) && close();
224
+ var isTap = isTapTouch(event.target);
225
+ closeRunner = window.setTimeout(() => {
226
+ isTap && close();
226
227
  startTouch = null;
227
228
  }, EVENT_DELAY);
228
229
  };
229
230
 
230
231
  var handleTouchstart = event => {
231
- checker && window.clearTimeout(checker);
232
- var {
233
- touches
234
- } = event;
235
- var currentTouch = createVarTouch(touches[0], event.currentTarget);
232
+ closeRunner && window.clearTimeout(closeRunner);
233
+ var currentTouch = createVarTouch(event.touches[0], event.currentTarget);
236
234
  startTouch = currentTouch;
237
235
 
238
236
  if (isDoubleTouch(currentTouch)) {
@@ -313,10 +311,7 @@ var __sfc__ = defineComponent({
313
311
  }
314
312
 
315
313
  var target = event.currentTarget;
316
- var {
317
- touches
318
- } = event;
319
- var currentTouch = createVarTouch(touches[0], target);
314
+ var currentTouch = createVarTouch(event.touches[0], target);
320
315
 
321
316
  if (scale.value > 1) {
322
317
  var moveX = currentTouch.clientX - prevTouch.clientX;
@@ -241,7 +241,7 @@ import './time-picker/style/index.mjs'
241
241
  import './tooltip/style/index.mjs'
242
242
  import './uploader/style/index.mjs'
243
243
 
244
- const version = '2.11.0'
244
+ const version = '2.11.1-alpha.1684493331817'
245
245
 
246
246
  function install(app) {
247
247
  ActionSheet.install && app.use(ActionSheet)
package/es/index.mjs CHANGED
@@ -160,7 +160,7 @@ export * from './time-picker/index.mjs'
160
160
  export * from './tooltip/index.mjs'
161
161
  export * from './uploader/index.mjs'
162
162
 
163
- const version = '2.11.0'
163
+ const version = '2.11.1-alpha.1684493331817'
164
164
 
165
165
  function install(app) {
166
166
  ActionSheet.install && app.use(ActionSheet)
@@ -4,7 +4,7 @@ import { defineComponent, watch, ref, computed, Transition, toRaw } from 'vue';
4
4
  import { props } from './props.mjs';
5
5
  import { isArray } from '@varlet/shared';
6
6
  import { dt } from '../utils/shared.mjs';
7
- import { toPxNum, getTranslate } from '../utils/elements.mjs';
7
+ import { toPxNum, getTranslateY, requestAnimationFrame } from '../utils/elements.mjs';
8
8
  import { pack } from '../locale/index.mjs';
9
9
  import { createNamespace, call } from '../utils/components.mjs';
10
10
  var {
@@ -13,6 +13,8 @@ var {
13
13
  } = createNamespace('picker');
14
14
  var MOMENTUM_RECORD_TIME = 300;
15
15
  var MOMENTUM_ALLOW_DISTANCE = 15;
16
+ var TRANSITION_DURATION = 200;
17
+ var MOMENTUM_TRANSITION_DURATION = 1000;
16
18
  var sid = 0;
17
19
  import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, withModifiers as _withModifiers, mergeProps as _mergeProps, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue";
18
20
 
@@ -20,6 +22,7 @@ var _withScopeId = n => (_pushScopeId(""), n = n(), _popScopeId(), n);
20
22
 
21
23
  var _hoisted_1 = ["onTouchstart", "onTouchmove", "onTouchend"];
22
24
  var _hoisted_2 = ["onTransitionend"];
25
+ var _hoisted_3 = ["onClick"];
23
26
 
24
27
  function __render__(_ctx, _cache) {
25
28
  var _component_var_button = _resolveComponent("var-button");
@@ -97,27 +100,28 @@ function __render__(_ctx, _cache) {
97
100
  }, [_createElementVNode("div", {
98
101
  class: _normalizeClass(_ctx.n('scroller')),
99
102
  ref_for: true,
100
- ref: el => _ctx.getScrollEl(el, c),
103
+ ref: el => _ctx.setScrollEl(el, c),
101
104
  style: _normalizeStyle({
102
105
  transform: "translateY(" + c.translate + "px)",
103
106
  transitionDuration: c.duration + "ms",
104
107
  transitionProperty: c.duration ? 'transform' : 'none'
105
108
  }),
106
109
  onTransitionend: $event => _ctx.handleTransitionend(c)
107
- }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(c.column.texts, t => {
110
+ }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(c.column.texts, (t, i) => {
108
111
  return _openBlock(), _createElementBlock("div", {
109
112
  class: _normalizeClass(_ctx.n('option')),
110
113
  style: _normalizeStyle({
111
114
  height: _ctx.optionHeight + "px"
112
115
  }),
113
- key: t
116
+ key: t,
117
+ onClick: $event => _ctx.handleClick(c, i)
114
118
  }, [_createElementVNode("div", {
115
119
  class: _normalizeClass(_ctx.n('text'))
116
120
  }, _toDisplayString(_ctx.textFormatter(t, c.columnIndex)), 3
117
121
  /* TEXT, CLASS */
118
- )], 6
119
- /* CLASS, STYLE */
120
- );
122
+ )], 14
123
+ /* CLASS, STYLE, PROPS */
124
+ , _hoisted_3);
121
125
  }), 128
122
126
  /* KEYED_FRAGMENT */
123
127
  ))], 46
@@ -171,8 +175,9 @@ var __sfc__ = defineComponent({
171
175
  var center = computed(() => optionCount.value * optionHeight.value / 2 - optionHeight.value / 2);
172
176
  var columnHeight = computed(() => optionCount.value * optionHeight.value);
173
177
  var prevIndexes = [];
178
+ var dragging = false;
174
179
 
175
- var getScrollEl = (el, scrollColumn) => {
180
+ var setScrollEl = (el, scrollColumn) => {
176
181
  scrollColumn.scrollEl = el;
177
182
  };
178
183
 
@@ -180,16 +185,16 @@ var __sfc__ = defineComponent({
180
185
  call(props['onUpdate:show'], value);
181
186
  };
182
187
 
183
- var limitTranslate = scrollColumn => {
184
- var START_LIMIT = optionHeight.value + center.value;
185
- var END_LIMIT = center.value - scrollColumn.column.texts.length * optionHeight.value;
188
+ var boundaryTranslate = scrollColumn => {
189
+ var startTranslate = optionHeight.value + center.value;
190
+ var endTranslate = center.value - scrollColumn.column.texts.length * optionHeight.value;
186
191
 
187
- if (scrollColumn.translate >= START_LIMIT) {
188
- scrollColumn.translate = START_LIMIT;
192
+ if (scrollColumn.translate >= startTranslate) {
193
+ scrollColumn.translate = startTranslate;
189
194
  }
190
195
 
191
- if (scrollColumn.translate <= END_LIMIT) {
192
- scrollColumn.translate = END_LIMIT;
196
+ if (scrollColumn.translate <= endTranslate) {
197
+ scrollColumn.translate = endTranslate;
193
198
  }
194
199
  };
195
200
 
@@ -202,11 +207,16 @@ var __sfc__ = defineComponent({
202
207
  return index;
203
208
  };
204
209
 
205
- var getIndex = scrollColumn => {
206
- var index = Math.round((center.value - scrollColumn.translate) / optionHeight.value);
210
+ var getTargetIndex = (scrollColumn, viewTranslate) => {
211
+ var index = Math.round((center.value - viewTranslate) / optionHeight.value);
207
212
  return boundaryIndex(scrollColumn, index);
208
213
  };
209
214
 
215
+ var updateTranslate = scrollColumn => {
216
+ scrollColumn.translate = center.value - scrollColumn.index * optionHeight.value;
217
+ return scrollColumn.translate;
218
+ };
219
+
210
220
  var getPicked = () => {
211
221
  var texts = scrollColumns.value.map(scrollColumn => scrollColumn.column.texts[scrollColumn.index]);
212
222
  var indexes = scrollColumns.value.map(scrollColumn => scrollColumn.index);
@@ -216,19 +226,12 @@ var __sfc__ = defineComponent({
216
226
  };
217
227
  };
218
228
 
219
- var scrollTo = function (scrollColumn, index, duration, noEmit) {
220
- if (noEmit === void 0) {
221
- noEmit = false;
222
- }
223
-
224
- var translate = center.value - boundaryIndex(scrollColumn, index) * optionHeight.value;
225
-
226
- if (translate === scrollColumn.translate) {
227
- scrollColumn.scrolling = false;
228
- !noEmit && change(scrollColumn);
229
+ var scrollTo = function (scrollColumn, duration) {
230
+ if (duration === void 0) {
231
+ duration = 0;
229
232
  }
230
233
 
231
- scrollColumn.translate = translate;
234
+ updateTranslate(scrollColumn);
232
235
  scrollColumn.duration = duration;
233
236
  };
234
237
 
@@ -236,11 +239,21 @@ var __sfc__ = defineComponent({
236
239
  scrollColumn.translate += Math.abs(distance / duration) / 0.003 * (distance < 0 ? -1 : 1);
237
240
  };
238
241
 
242
+ var handleClick = (scrollColumn, index) => {
243
+ if (dragging) {
244
+ return;
245
+ }
246
+
247
+ scrollColumn.index = index;
248
+ scrollColumn.scrolling = true;
249
+ scrollTo(scrollColumn, TRANSITION_DURATION);
250
+ };
251
+
239
252
  var handleTouchstart = (event, scrollColumn) => {
240
253
  scrollColumn.touching = true;
241
254
  scrollColumn.scrolling = false;
242
255
  scrollColumn.duration = 0;
243
- scrollColumn.translate = getTranslate(scrollColumn.scrollEl);
256
+ scrollColumn.translate = getTranslateY(scrollColumn.scrollEl);
244
257
  };
245
258
 
246
259
  var handleTouchmove = (event, scrollColumn) => {
@@ -248,13 +261,14 @@ var __sfc__ = defineComponent({
248
261
  return;
249
262
  }
250
263
 
264
+ dragging = true;
251
265
  var {
252
266
  clientY
253
267
  } = event.touches[0];
254
- var moveY = scrollColumn.prevY !== undefined ? clientY - scrollColumn.prevY : 0;
268
+ var deltaY = scrollColumn.prevY !== undefined ? clientY - scrollColumn.prevY : 0;
255
269
  scrollColumn.prevY = clientY;
256
- scrollColumn.translate += moveY;
257
- limitTranslate(scrollColumn);
270
+ scrollColumn.translate += deltaY;
271
+ boundaryTranslate(scrollColumn);
258
272
  var now = performance.now();
259
273
 
260
274
  if (now - scrollColumn.momentumTime > MOMENTUM_RECORD_TIME) {
@@ -265,14 +279,28 @@ var __sfc__ = defineComponent({
265
279
 
266
280
  var handleTouchend = (event, scrollColumn) => {
267
281
  scrollColumn.touching = false;
268
- scrollColumn.scrolling = true;
269
282
  scrollColumn.prevY = undefined;
270
283
  var distance = scrollColumn.translate - scrollColumn.momentumPrevY;
271
284
  var duration = performance.now() - scrollColumn.momentumTime;
272
285
  var shouldMomentum = Math.abs(distance) >= MOMENTUM_ALLOW_DISTANCE && duration <= MOMENTUM_RECORD_TIME;
273
- shouldMomentum && momentum(scrollColumn, distance, duration);
274
- scrollColumn.index = getIndex(scrollColumn);
275
- scrollTo(scrollColumn, scrollColumn.index, shouldMomentum ? 1000 : 200);
286
+
287
+ if (shouldMomentum) {
288
+ momentum(scrollColumn, distance, duration);
289
+ }
290
+
291
+ scrollColumn.index = getTargetIndex(scrollColumn, scrollColumn.translate);
292
+ var oldTranslate = scrollColumn.translate;
293
+ var newTranslate = updateTranslate(scrollColumn);
294
+ scrollColumn.scrolling = newTranslate !== oldTranslate;
295
+ scrollTo(scrollColumn, shouldMomentum ? MOMENTUM_TRANSITION_DURATION : TRANSITION_DURATION); // Can't trigger transition end when not scrolling, change needs to be triggered manually.
296
+
297
+ if (!scrollColumn.scrolling) {
298
+ change(scrollColumn);
299
+ }
300
+
301
+ requestAnimationFrame(() => {
302
+ dragging = false;
303
+ });
276
304
  };
277
305
 
278
306
  var handleTransitionend = scrollColumn => {
@@ -301,7 +329,7 @@ var __sfc__ = defineComponent({
301
329
  scrollEl: null,
302
330
  scrolling: false
303
331
  };
304
- scrollTo(scrollColumn, scrollColumn.index, 0, true);
332
+ scrollTo(scrollColumn);
305
333
  return scrollColumn;
306
334
  });
307
335
  };
@@ -339,7 +367,7 @@ var __sfc__ = defineComponent({
339
367
  scrolling: false
340
368
  };
341
369
  scrollColumns.push(scrollColumn);
342
- scrollTo(scrollColumn, scrollColumn.index, 0, true);
370
+ scrollTo(scrollColumn);
343
371
  createChildren(scrollColumns, scrollColumn.columns[scrollColumn.index].children, columnIndex + 1, initial);
344
372
  }
345
373
  };
@@ -354,7 +382,11 @@ var __sfc__ = defineComponent({
354
382
  cascade,
355
383
  onChange
356
384
  } = props;
357
- cascade && rebuildChildren(scrollColumn);
385
+
386
+ if (cascade) {
387
+ rebuildChildren(scrollColumn);
388
+ }
389
+
358
390
  var hasScrolling = scrollColumns.value.some(scrollColumn => scrollColumn.scrolling);
359
391
 
360
392
  if (hasScrolling) {
@@ -380,17 +412,15 @@ var __sfc__ = defineComponent({
380
412
  var currentScrollColumn = scrollColumns.value.find(scrollColumn => scrollColumn.scrolling);
381
413
 
382
414
  if (currentScrollColumn) {
383
- currentScrollColumn.translate = getTranslate(currentScrollColumn.scrollEl);
384
- currentScrollColumn.index = getIndex(currentScrollColumn);
385
- scrollTo(currentScrollColumn, currentScrollColumn.index, 0, true);
415
+ currentScrollColumn.index = getTargetIndex(currentScrollColumn, getTranslateY(currentScrollColumn.scrollEl));
386
416
  currentScrollColumn.scrolling = false;
417
+ scrollTo(currentScrollColumn);
387
418
  rebuildChildren(currentScrollColumn);
388
419
  }
389
420
  } else {
390
421
  scrollColumns.value.forEach(scrollColumn => {
391
- scrollColumn.translate = getTranslate(scrollColumn.scrollEl);
392
- scrollColumn.index = getIndex(scrollColumn);
393
- scrollTo(scrollColumn, scrollColumn.index, 0);
422
+ scrollColumn.index = getTargetIndex(scrollColumn, getTranslateY(scrollColumn.scrollEl));
423
+ scrollTo(scrollColumn);
394
424
  });
395
425
  }
396
426
  }; // expose
@@ -437,7 +467,7 @@ var __sfc__ = defineComponent({
437
467
  columnHeight,
438
468
  center,
439
469
  Transition,
440
- getScrollEl,
470
+ setScrollEl,
441
471
  handlePopupUpdateShow,
442
472
  handleTouchstart,
443
473
  handleTouchmove,
@@ -445,7 +475,8 @@ var __sfc__ = defineComponent({
445
475
  handleTransitionend,
446
476
  confirm,
447
477
  cancel,
448
- dt
478
+ dt,
479
+ handleClick
449
480
  };
450
481
  }
451
482
 
@@ -1,6 +1,6 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import { isNumber, isObject, isString, kebabCase, toNumber, isWindow } from '@varlet/shared';
3
+ import { isNumber, isObject, isString, kebabCase, toNumber, isWindow, inBrowser } from '@varlet/shared';
4
4
  import { getGlobalThis } from './shared.mjs';
5
5
  import { error } from './logger.mjs';
6
6
  // shorthand only
@@ -64,7 +64,7 @@ export function inViewport(element) {
64
64
  var yInViewport = top <= height && bottom >= 0;
65
65
  return xInViewport && yInViewport;
66
66
  }
67
- export function getTranslate(el) {
67
+ export function getTranslateY(el) {
68
68
  var {
69
69
  transform
70
70
  } = getStyle(el);
@@ -136,7 +136,9 @@ export function getViewportSize() {
136
136
  };
137
137
  } // example 1rem
138
138
 
139
- export var isRem = value => isString(value) && value.endsWith('rem'); // e.g. 1 || 1px
139
+ export var isRem = value => isString(value) && value.endsWith('rem'); // example 1em
140
+
141
+ export var isEm = value => isString(value) && value.endsWith('em') && !value.endsWith('rem'); // e.g. 1 || 1px
140
142
 
141
143
  export var isPx = value => isString(value) && value.endsWith('px') || isNumber(value); // e.g. 1%
142
144
 
@@ -163,6 +165,10 @@ export var toPxNum = value => {
163
165
  return +value.replace('px', '');
164
166
  }
165
167
 
168
+ if (!inBrowser()) {
169
+ return 0;
170
+ }
171
+
166
172
  var {
167
173
  width,
168
174
  height
@@ -203,7 +209,7 @@ export var toSizeUnit = value => {
203
209
  return undefined;
204
210
  }
205
211
 
206
- if (isPercent(value) || isVw(value) || isVh(value) || isRem(value) || isCalc(value) || isVar(value) || isVMin(value) || isVMax(value)) {
212
+ if (isPercent(value) || isVw(value) || isVh(value) || isEm(value) || isRem(value) || isCalc(value) || isVar(value) || isVMin(value) || isVMax(value)) {
207
213
  return value;
208
214
  }
209
215