@maas/vue-equipment 0.16.7 → 0.16.8

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment/nuxt",
3
3
  "configKey": "vueEquipment",
4
- "version": "0.16.6"
4
+ "version": "0.16.7"
5
5
  }
@@ -290,5 +290,5 @@ onBeforeUnmount(() => {
290
290
  </script>
291
291
 
292
292
  <style>
293
- :root{--magic-drawer-height:75svh;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-y:auto;--magic-drawer-handle-wrapper-height:2rem;--magic-drawer-handle-width:3rem;--magic-drawer-handle-height:0.375rem;--magic-drawer-handle-color:#d4d4d8;--magic-drawer-handle-border-radius:0.25rem;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-drag-overshoot-x:0;--magic-drawer-drag-overshoot-y:0}.magic-drawer{align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot)}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1)}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot)}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1)}.magic-drawer__wrapper{height:calc(var(--magic-drawer-height) + var(--magic-drawer-drag-overshoot));pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:100%}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;width:100%}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
293
+ :root{--magic-drawer-height:75svh;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-x:hidden;--magic-drawer-content-overflow-y:auto;--magic-drawer-handle-wrapper-height:2rem;--magic-drawer-handle-width:3rem;--magic-drawer-handle-height:0.375rem;--magic-drawer-handle-color:#d4d4d8;--magic-drawer-handle-border-radius:0.25rem;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-drag-overshoot-x:0;--magic-drawer-drag-overshoot-y:0}.magic-drawer{align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot)}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1)}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot)}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1)}.magic-drawer__wrapper{height:calc(var(--magic-drawer-height) + var(--magic-drawer-drag-overshoot));pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:100%}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-x:var(--magic-drawer-content-overflow-x);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;width:100%}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
294
294
  </style>
@@ -11,10 +11,13 @@ import {
11
11
  useEventListener,
12
12
  unrefElement,
13
13
  useResizeObserver,
14
- useThrottleFn
14
+ useThrottleFn,
15
+ useScrollLock
15
16
  } from "@vueuse/core";
16
17
  import { useDrawerEmitter } from "../useDrawerEmitter.mjs";
17
18
  import { useDrawerSnap } from "./useDrawerSnap.mjs";
19
+ import { useDrawerGuards } from "./useDrawerGuards.mjs";
20
+ import { isIOS } from "@maas/vue-equipment/utils";
18
21
  export function useDrawerDrag(args) {
19
22
  const {
20
23
  id,
@@ -35,10 +38,14 @@ export function useDrawerDrag(args) {
35
38
  const interpolateTo = ref(void 0);
36
39
  let cancelPointerup = void 0;
37
40
  let cancelPointermove = void 0;
41
+ let cancelTouchend = void 0;
42
+ let scrollLock = void 0;
38
43
  const originX = ref(0);
39
44
  const originY = ref(0);
40
- const directionY = ref("absolute");
41
- const directionX = ref("absolute");
45
+ const relDirectionY = ref("absolute");
46
+ const relDirectionX = ref("absolute");
47
+ const absDirectionY = ref(void 0);
48
+ const absDirectionX = ref(void 0);
42
49
  const hasSnapPoints = computed(() => toValue(snapPoints).length > 1);
43
50
  const elRect = ref(void 0);
44
51
  const wrapperRect = ref(void 0);
@@ -67,6 +74,13 @@ export function useDrawerDrag(args) {
67
74
  draggedY,
68
75
  draggedX
69
76
  });
77
+ const { canDrag, canInterpolate, lockScroll } = useDrawerGuards({
78
+ elRef,
79
+ absDirectionX,
80
+ absDirectionY,
81
+ position,
82
+ activeSnapPoint
83
+ });
70
84
  async function getSizes() {
71
85
  elRect.value = unrefElement(elRef)?.getBoundingClientRect();
72
86
  wrapperRect.value = unrefElement(wrapperRef)?.getBoundingClientRect();
@@ -78,7 +92,7 @@ export function useDrawerDrag(args) {
78
92
  const snapPointB = await findClosestSnapPoint({
79
93
  draggedX,
80
94
  draggedY,
81
- direction: directionY.value
95
+ direction: relDirectionY.value
82
96
  });
83
97
  if (draggedY.value > toValue(threshold).distance || hasSnapPoints.value) {
84
98
  if (snapPointB === drawerHeight.value) {
@@ -92,7 +106,7 @@ export function useDrawerDrag(args) {
92
106
  const snapPointT = await findClosestSnapPoint({
93
107
  draggedX,
94
108
  draggedY,
95
- direction: directionY.value
109
+ direction: relDirectionY.value
96
110
  });
97
111
  if (draggedY.value < toValue(threshold).distance * -1 || hasSnapPoints.value) {
98
112
  if (snapPointT === drawerHeight.value * -1) {
@@ -106,7 +120,7 @@ export function useDrawerDrag(args) {
106
120
  const snapPointR = await findClosestSnapPoint({
107
121
  draggedX,
108
122
  draggedY,
109
- direction: directionX.value
123
+ direction: relDirectionX.value
110
124
  });
111
125
  if (draggedX.value > toValue(threshold).distance || hasSnapPoints.value) {
112
126
  if (snapPointR === drawerWidth.value) {
@@ -120,7 +134,7 @@ export function useDrawerDrag(args) {
120
134
  const snapPointL = await findClosestSnapPoint({
121
135
  draggedX,
122
136
  draggedY,
123
- direction: directionX.value
137
+ direction: relDirectionX.value
124
138
  });
125
139
  if (draggedX.value < toValue(threshold).distance * -1 || hasSnapPoints.value) {
126
140
  if (snapPointL === drawerWidth.value * -1) {
@@ -141,7 +155,7 @@ export function useDrawerDrag(args) {
141
155
  const snapPointB = await findClosestSnapPoint({
142
156
  draggedX,
143
157
  draggedY,
144
- direction: directionY.value
158
+ direction: relDirectionY.value
145
159
  });
146
160
  if (velocityY > toValue(threshold).momentum) {
147
161
  if (snapPointB === drawerHeight.value) {
@@ -155,7 +169,7 @@ export function useDrawerDrag(args) {
155
169
  const snapPointT = await findClosestSnapPoint({
156
170
  draggedX,
157
171
  draggedY,
158
- direction: directionY.value
172
+ direction: relDirectionY.value
159
173
  });
160
174
  if (velocityY < toValue(threshold).momentum * -1) {
161
175
  if (snapPointT === drawerHeight.value) {
@@ -169,7 +183,7 @@ export function useDrawerDrag(args) {
169
183
  const snapPointR = await findClosestSnapPoint({
170
184
  draggedX,
171
185
  draggedY,
172
- direction: directionX.value
186
+ direction: relDirectionX.value
173
187
  });
174
188
  if (velocityX > toValue(threshold).momentum) {
175
189
  if (snapPointR === drawerWidth.value) {
@@ -183,7 +197,7 @@ export function useDrawerDrag(args) {
183
197
  const snapPointL = await findClosestSnapPoint({
184
198
  draggedX,
185
199
  draggedY,
186
- direction: directionX.value
200
+ direction: relDirectionX.value
187
201
  });
188
202
  if (velocityX > toValue(threshold).momentum) {
189
203
  if (snapPointL === drawerWidth.value) {
@@ -218,33 +232,56 @@ export function useDrawerDrag(args) {
218
232
  switch (position) {
219
233
  case "bottom":
220
234
  const newDraggedB = clamp(y - originY.value, 0, toValue(overshoot) * -1);
221
- directionY.value = newDraggedB < draggedY.value ? "below" : "above";
235
+ relDirectionY.value = newDraggedB < draggedY.value ? "below" : "above";
222
236
  draggedY.value = newDraggedB;
223
237
  break;
224
238
  case "top":
225
239
  const newDraggedT = clamp(y - originY.value, 0, toValue(overshoot));
226
- directionY.value = newDraggedT < draggedY.value ? "below" : "above";
240
+ relDirectionY.value = newDraggedT < draggedY.value ? "below" : "above";
227
241
  draggedY.value = newDraggedT;
228
242
  break;
229
243
  case "right":
230
244
  const newDraggedR = clamp(x - originX.value, 0, toValue(overshoot) * -1);
231
- directionX.value = newDraggedR < draggedX.value ? "below" : "above";
245
+ relDirectionX.value = newDraggedR < draggedX.value ? "below" : "above";
232
246
  draggedX.value = newDraggedR;
233
247
  break;
234
248
  case "left":
235
249
  const newDraggedL = clamp(x - originX.value, 0, toValue(overshoot));
236
- directionX.value = newDraggedL < draggedX.value ? "below" : "above";
250
+ relDirectionX.value = newDraggedL < draggedX.value ? "below" : "above";
237
251
  draggedX.value = newDraggedL;
238
252
  break;
239
253
  }
240
254
  }
255
+ function checkDirection({ x, y }) {
256
+ switch (position) {
257
+ case "bottom":
258
+ absDirectionY.value = y < originY.value ? "with" : y > originY.value ? "against" : void 0;
259
+ break;
260
+ case "top":
261
+ absDirectionY.value = y > originY.value ? "with" : y < originY.value ? "against" : void 0;
262
+ break;
263
+ case "right":
264
+ absDirectionX.value = x < originX.value ? "with" : x > originX.value ? "against" : void 0;
265
+ break;
266
+ case "left":
267
+ absDirectionX.value = x > originX.value ? "with" : x < originX.value ? "against" : void 0;
268
+ break;
269
+ }
270
+ }
241
271
  function resetStateAndListeners() {
242
272
  dragging.value = false;
243
273
  shouldClose.value = false;
244
274
  interpolateTo.value = void 0;
275
+ cancelTouchend?.();
245
276
  cancelPointerup?.();
246
277
  cancelPointermove?.();
247
278
  }
279
+ function resetScrollLock() {
280
+ if (scrollLock?.value) {
281
+ scrollLock.value = false;
282
+ }
283
+ scrollLock = void 0;
284
+ }
248
285
  function resetDragged() {
249
286
  draggedX.value = 0;
250
287
  draggedY.value = 0;
@@ -272,7 +309,9 @@ export function useDrawerDrag(args) {
272
309
  if (shouldClose.value) {
273
310
  close();
274
311
  } else if (interpolateTo.value || interpolateTo.value === 0) {
275
- interpolateDragged(interpolateTo.value);
312
+ if (scrollLock && scrollLock.value || canInterpolate(e.target)) {
313
+ interpolateDragged(interpolateTo.value);
314
+ }
276
315
  activeSnapPoint.value = snapPointsMap.value[interpolateTo.value];
277
316
  switch (position) {
278
317
  case "bottom":
@@ -297,10 +336,22 @@ export function useDrawerDrag(args) {
297
336
  }
298
337
  }
299
338
  resetStateAndListeners();
339
+ resetScrollLock();
300
340
  e.preventDefault();
301
341
  }
302
342
  function onPointermove(e) {
303
343
  shouldClose.value = false;
344
+ checkDirection({ x: e.screenX, y: e.screenY });
345
+ if (!scrollLock) {
346
+ const target = lockScroll(e.target);
347
+ if (target) {
348
+ scrollLock = useScrollLock(target);
349
+ scrollLock.value = true;
350
+ }
351
+ }
352
+ if (!canDrag(e.target)) {
353
+ return;
354
+ }
304
355
  checkMomentum({ x: e.screenX, y: e.screenY });
305
356
  setDragged({ x: e.screenX, y: e.screenY });
306
357
  checkPosition();
@@ -316,6 +367,7 @@ export function useDrawerDrag(args) {
316
367
  e.target.setPointerCapture(e.pointerId);
317
368
  cancelPointerup = useEventListener(document, "pointerup", onPointerup);
318
369
  cancelPointermove = useEventListener(document, "pointermove", onPointermove);
370
+ cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : void 0;
319
371
  originX.value = e.screenX - draggedX.value;
320
372
  originY.value = e.screenY - draggedY.value;
321
373
  dragStart.value = /* @__PURE__ */ new Date();
@@ -0,0 +1,16 @@
1
+ import { type MaybeRef } from 'vue';
2
+ import { type DefaultOptions } from '../../utils/defaultOptions.js';
3
+ import { type SnapPoint } from '../../types.js';
4
+ interface UseDrawerGuardsArgs {
5
+ elRef: MaybeRef<HTMLDivElement | undefined>;
6
+ absDirectionX: MaybeRef<'with' | 'against' | undefined>;
7
+ absDirectionY: MaybeRef<'with' | 'against' | undefined>;
8
+ position: MaybeRef<DefaultOptions['position']>;
9
+ activeSnapPoint: MaybeRef<SnapPoint | undefined>;
10
+ }
11
+ export declare function useDrawerGuards(args: UseDrawerGuardsArgs): {
12
+ canDrag: (el: EventTarget) => boolean;
13
+ canInterpolate: (el: EventTarget) => boolean | undefined;
14
+ lockScroll: (el: EventTarget) => HTMLElement | undefined;
15
+ };
16
+ export {};
@@ -0,0 +1,152 @@
1
+ import { computed, toValue } from "vue";
2
+ import { unrefElement } from "@vueuse/core";
3
+ export function useDrawerGuards(args) {
4
+ const { elRef, absDirectionX, absDirectionY, position, activeSnapPoint } = args;
5
+ const isHoverSupported = matchMedia("(hover: hover)").matches;
6
+ const canSnap = computed(() => {
7
+ return toValue(activeSnapPoint) !== 1 && !!toValue(activeSnapPoint);
8
+ });
9
+ function canDrag(el) {
10
+ let element = el;
11
+ if (isHoverSupported) {
12
+ return true;
13
+ }
14
+ if (canSnap.value) {
15
+ return true;
16
+ }
17
+ while (element) {
18
+ if (element === unrefElement(elRef)) {
19
+ return true;
20
+ }
21
+ switch (position) {
22
+ case "bottom":
23
+ if (element.scrollHeight > element.clientHeight) {
24
+ if (element.scrollTop > 0) {
25
+ return false;
26
+ }
27
+ if (toValue(absDirectionY) === "with") {
28
+ return false;
29
+ }
30
+ }
31
+ break;
32
+ case "top":
33
+ if (element.scrollHeight > element.clientHeight) {
34
+ const maxScroll = element.scrollHeight - element.clientHeight;
35
+ if (element.scrollTop < maxScroll) {
36
+ return false;
37
+ }
38
+ if (toValue(absDirectionY) === "with") {
39
+ return false;
40
+ }
41
+ }
42
+ break;
43
+ case "right":
44
+ if (element.scrollWidth > element.clientWidth) {
45
+ if (element.scrollLeft > 0) {
46
+ return false;
47
+ }
48
+ if (toValue(absDirectionX) === "with") {
49
+ return false;
50
+ }
51
+ }
52
+ break;
53
+ case "left":
54
+ if (element.scrollWidth > element.clientWidth) {
55
+ const maxScroll = element.scrollWidth - element.clientWidth;
56
+ if (element.scrollLeft < maxScroll) {
57
+ return false;
58
+ }
59
+ if (toValue(absDirectionX) === "with") {
60
+ return false;
61
+ }
62
+ }
63
+ break;
64
+ }
65
+ element = element.parentNode;
66
+ }
67
+ return true;
68
+ }
69
+ function canInterpolate(el) {
70
+ let element = el;
71
+ if (isHoverSupported) {
72
+ return true;
73
+ }
74
+ while (element) {
75
+ switch (position) {
76
+ case "bottom":
77
+ case "top":
78
+ if (element.scrollHeight > element.clientHeight) {
79
+ return false;
80
+ }
81
+ break;
82
+ case "left":
83
+ case "right":
84
+ if (element.scrollWidth > element.clientWidth) {
85
+ return false;
86
+ }
87
+ break;
88
+ }
89
+ if (element === unrefElement(elRef)) {
90
+ return true;
91
+ }
92
+ element = element.parentNode;
93
+ }
94
+ }
95
+ function lockScroll(el) {
96
+ let element = el;
97
+ if (isHoverSupported) {
98
+ return void 0;
99
+ }
100
+ while (element) {
101
+ if (element === unrefElement(elRef)) {
102
+ return void 0;
103
+ }
104
+ switch (position) {
105
+ case "bottom":
106
+ if (element.scrollHeight > element.clientHeight) {
107
+ if (element.scrollTop === 0 || canSnap.value) {
108
+ if (toValue(absDirectionY) === "against") {
109
+ return element;
110
+ }
111
+ }
112
+ }
113
+ break;
114
+ case "top":
115
+ if (element.scrollHeight > element.clientHeight) {
116
+ const maxScroll = element.scrollHeight - element.clientHeight;
117
+ if (element.scrollTop === maxScroll || canSnap.value) {
118
+ if (toValue(absDirectionY) === "against") {
119
+ return element;
120
+ }
121
+ }
122
+ }
123
+ break;
124
+ case "right":
125
+ if (element.scrollWidth > element.clientWidth) {
126
+ if (element.scrollLeft === 0 || canSnap.value) {
127
+ if (toValue(absDirectionX) === "against") {
128
+ return element;
129
+ }
130
+ }
131
+ }
132
+ break;
133
+ case "left":
134
+ if (element.scrollWidth > element.clientWidth) {
135
+ const maxScroll = element.scrollWidth - element.clientWidth;
136
+ if (element.scrollLeft === maxScroll || canSnap.value) {
137
+ if (toValue(absDirectionX) === "against") {
138
+ return element;
139
+ }
140
+ }
141
+ }
142
+ break;
143
+ }
144
+ element = element.parentNode;
145
+ }
146
+ }
147
+ return {
148
+ canDrag,
149
+ canInterpolate,
150
+ lockScroll
151
+ };
152
+ }
@@ -39,11 +39,10 @@ function clampValue(value, min, max) {
39
39
  function interpolate(args) {
40
40
  const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args;
41
41
  let startTime;
42
- const speed = 1;
43
42
  function animate(timestamp) {
44
43
  if (!startTime)
45
44
  startTime = timestamp;
46
- const progress = Math.min(1, (timestamp - startTime) / (duration * speed));
45
+ const progress = Math.min(1, (timestamp - startTime) / duration);
47
46
  const easedProgress = easing(progress);
48
47
  const value = from + (to - from) * easedProgress;
49
48
  callback(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/interpolate'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\nexport * from './src/functions/slugify'\n\nexport type * from './src/types'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: number\n const speed = 1\n\n function animate(timestamp: number) {\n if (!startTime) startTime = timestamp\n\n const progress = Math.min(1, (timestamp - startTime) / (duration * speed))\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM,EAAE,MAAM,IAAI,UAAU,UAAU,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI;AAEtE,MAAI;AACJ,QAAM,QAAQ;AAEd,WAAS,QAAQ,WAAmB;AAClC,QAAI,CAAC;AAAW,kBAAY;AAE5B,UAAM,WAAW,KAAK,IAAI,IAAI,YAAY,cAAc,WAAW,MAAM;AACzE,UAAM,gBAAgB,OAAO,QAAQ;AACrC,UAAM,QAAQ,QAAQ,KAAK,QAAQ;AAEnC,aAAS,KAAK;AAEd,QAAI,WAAW,GAAG;AAChB,4BAAsB,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,wBAAsB,OAAO;AAC/B;;;AC9BO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/interpolate'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\nexport * from './src/functions/slugify'\n\nexport type * from './src/types'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: number\n\n function animate(timestamp: number) {\n if (!startTime) startTime = timestamp\n\n const progress = Math.min(1, (timestamp - startTime) / duration)\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM,EAAE,MAAM,IAAI,UAAU,UAAU,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI;AAEtE,MAAI;AAEJ,WAAS,QAAQ,WAAmB;AAClC,QAAI,CAAC;AAAW,kBAAY;AAE5B,UAAM,WAAW,KAAK,IAAI,IAAI,YAAY,aAAa,QAAQ;AAC/D,UAAM,gBAAgB,OAAO,QAAQ;AACrC,UAAM,QAAQ,QAAQ,KAAK,QAAQ;AAEnC,aAAS,KAAK;AAEd,QAAI,WAAW,GAAG;AAChB,4BAAsB,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,wBAAsB,OAAO;AAC/B;;;AC7BO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
@@ -7,11 +7,10 @@ function clampValue(value, min, max) {
7
7
  function interpolate(args) {
8
8
  const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args;
9
9
  let startTime;
10
- const speed = 1;
11
10
  function animate(timestamp) {
12
11
  if (!startTime)
13
12
  startTime = timestamp;
14
- const progress = Math.min(1, (timestamp - startTime) / (duration * speed));
13
+ const progress = Math.min(1, (timestamp - startTime) / duration);
15
14
  const easedProgress = easing(progress);
16
15
  const value = from + (to - from) * easedProgress;
17
16
  callback(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: number\n const speed = 1\n\n function animate(timestamp: number) {\n if (!startTime) startTime = timestamp\n\n const progress = Math.min(1, (timestamp - startTime) / (duration * speed))\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";AAAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM,EAAE,MAAM,IAAI,UAAU,UAAU,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI;AAEtE,MAAI;AACJ,QAAM,QAAQ;AAEd,WAAS,QAAQ,WAAmB;AAClC,QAAI,CAAC;AAAW,kBAAY;AAE5B,UAAM,WAAW,KAAK,IAAI,IAAI,YAAY,cAAc,WAAW,MAAM;AACzE,UAAM,gBAAgB,OAAO,QAAQ;AACrC,UAAM,QAAQ,QAAQ,KAAK,QAAQ;AAEnC,aAAS,KAAK;AAEd,QAAI,WAAW,GAAG;AAChB,4BAAsB,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,wBAAsB,OAAO;AAC/B;;;AC9BO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: number\n\n function animate(timestamp: number) {\n if (!startTime) startTime = timestamp\n\n const progress = Math.min(1, (timestamp - startTime) / duration)\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";AAAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM,EAAE,MAAM,IAAI,UAAU,UAAU,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI;AAEtE,MAAI;AAEJ,WAAS,QAAQ,WAAmB;AAClC,QAAI,CAAC;AAAW,kBAAY;AAE5B,UAAM,WAAW,KAAK,IAAI,IAAI,YAAY,aAAa,QAAQ;AAC/D,UAAM,gBAAgB,OAAO,QAAQ;AACrC,UAAM,QAAQ,QAAQ,KAAK,QAAQ;AAEnC,aAAS,KAAK;AAEd,QAAI,WAAW,GAAG;AAChB,4BAAsB,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,wBAAsB,OAAO;AAC/B;;;AC7BO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment",
3
3
  "description": "A magic collection of Vue composables, plugins, components and directives",
4
- "version": "0.16.7",
4
+ "version": "0.16.8",
5
5
  "author": "Robin Scholz <https://github.com/robinscholz>, Christoph Jeworutzki <https://github.com/ChristophJeworutzki>",
6
6
  "devDependencies": {
7
7
  "@antfu/ni": "^0.21.12",