@maas/vue-equipment 1.0.1 → 1.1.0
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.
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +2 -2
- package/dist/plugins/MagicDrawer/index.d.ts +2 -2
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +127 -168
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.d.ts +16 -11
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.mjs +178 -175
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +2 -1
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.d.ts +3 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.mjs +11 -1
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.d.ts +1 -0
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +2 -1
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +8 -1
- package/dist/plugins/MagicTray/index.d.ts +2 -2
- package/dist/plugins/MagicTray/src/composables/private/useTrayDrag.mjs +99 -51
- package/dist/plugins/MagicTray/src/composables/private/useTrayMagnetism.mjs +3 -1
- package/dist/plugins/MagicTray/src/composables/private/useTraySnap.d.ts +12 -7
- package/dist/plugins/MagicTray/src/composables/private/useTraySnap.mjs +89 -39
- package/dist/plugins/MagicTray/src/composables/private/useTrayUtils.d.ts +3 -1
- package/dist/plugins/MagicTray/src/composables/private/useTrayUtils.mjs +11 -1
- package/dist/plugins/MagicTray/src/types/index.d.ts +7 -1
- package/dist/utils/index.d.ts +46 -1
- package/dist/utils/index.js +75 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/index.js
CHANGED
|
@@ -378,6 +378,76 @@ function slugify(string, options) {
|
|
|
378
378
|
return slug;
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
+
// src/functions/snapTarget.ts
|
|
382
|
+
function snapRangeAt(args) {
|
|
383
|
+
const { ranges, position } = args;
|
|
384
|
+
return ranges.find((range) => position >= range.min && position <= range.max);
|
|
385
|
+
}
|
|
386
|
+
function closestSnapPoint(args) {
|
|
387
|
+
const { points, value, direction = "absolute" } = args;
|
|
388
|
+
if (!points.length) {
|
|
389
|
+
return void 0;
|
|
390
|
+
}
|
|
391
|
+
switch (direction) {
|
|
392
|
+
case "above":
|
|
393
|
+
return points.find((point) => point > value) ?? points.at(-1);
|
|
394
|
+
case "below":
|
|
395
|
+
return [...points].reverse().find((point) => point < value) ?? points[0];
|
|
396
|
+
case "absolute":
|
|
397
|
+
return points.reduce(
|
|
398
|
+
(closest, point) => Math.abs(point - value) < Math.abs(closest - value) ? point : closest
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
function snapTargetAt(args) {
|
|
403
|
+
const { points, ranges, value } = args;
|
|
404
|
+
return snapRangeAt({ ranges, position: value }) ? value : closestSnapPoint({ points, value });
|
|
405
|
+
}
|
|
406
|
+
function clampToRestRange(drag) {
|
|
407
|
+
const range = snapRangeAt({ ranges: drag.ranges, position: drag.rest });
|
|
408
|
+
return range ? clampValue(drag.position, range.min, range.max) : void 0;
|
|
409
|
+
}
|
|
410
|
+
function nextSnapPoint(args) {
|
|
411
|
+
const { points, mode, rest, position, direction } = args;
|
|
412
|
+
const value = mode === "step" ? rest : position;
|
|
413
|
+
return closestSnapPoint({ points, value, direction });
|
|
414
|
+
}
|
|
415
|
+
function restsInRange(args) {
|
|
416
|
+
const { ranges, mode, rest, position, flicked } = args;
|
|
417
|
+
const range = snapRangeAt({ ranges, position });
|
|
418
|
+
if (!range || flicked && range.momentum !== false) {
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
const startsInside = rest >= range.min && rest <= range.max;
|
|
422
|
+
if (mode !== "step" || startsInside) {
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
const direction = position < rest ? "below" : "above";
|
|
426
|
+
const next = nextSnapPoint({ ...args, direction });
|
|
427
|
+
return next === (direction === "above" ? range.min : range.max);
|
|
428
|
+
}
|
|
429
|
+
function snapCommit(args) {
|
|
430
|
+
const { distance, flicked, flickDirection, ...drag } = args;
|
|
431
|
+
const delta = drag.position - (clampToRestRange(drag) ?? drag.start);
|
|
432
|
+
if (Math.abs(delta) > distance) {
|
|
433
|
+
return nextSnapPoint({ ...drag, direction: delta < 0 ? "below" : "above" });
|
|
434
|
+
}
|
|
435
|
+
if (flicked && flickDirection) {
|
|
436
|
+
return nextSnapPoint({ ...drag, direction: flickDirection });
|
|
437
|
+
}
|
|
438
|
+
return void 0;
|
|
439
|
+
}
|
|
440
|
+
function snapRelease(args) {
|
|
441
|
+
const { committed, flicked, tapped, ...drag } = args;
|
|
442
|
+
if (tapped) {
|
|
443
|
+
return committed ?? drag.rest;
|
|
444
|
+
}
|
|
445
|
+
if (restsInRange({ ...drag, flicked })) {
|
|
446
|
+
return drag.position;
|
|
447
|
+
}
|
|
448
|
+
return committed ?? clampToRestRange(drag) ?? drag.rest;
|
|
449
|
+
}
|
|
450
|
+
|
|
381
451
|
// src/functions/uniq.ts
|
|
382
452
|
function uniq(a) {
|
|
383
453
|
return Array.from(new Set(a));
|
|
@@ -385,6 +455,7 @@ function uniq(a) {
|
|
|
385
455
|
export {
|
|
386
456
|
cancelEdgeNavigation,
|
|
387
457
|
clampValue,
|
|
458
|
+
closestSnapPoint,
|
|
388
459
|
convertToPixels,
|
|
389
460
|
createStateStore,
|
|
390
461
|
easeInCubic,
|
|
@@ -416,6 +487,10 @@ export {
|
|
|
416
487
|
scrollbarGutterSupport,
|
|
417
488
|
scrollbarWidth,
|
|
418
489
|
slugify,
|
|
490
|
+
snapCommit,
|
|
491
|
+
snapRangeAt,
|
|
492
|
+
snapRelease,
|
|
493
|
+
snapTargetAt,
|
|
419
494
|
uniq
|
|
420
495
|
};
|
|
421
496
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/convertToPixels.ts","../../packages/utils/src/functions/createStateStore.ts","../../packages/utils/src/functions/easings.ts","../../packages/utils/src/functions/edgeNavigation.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isAndroid.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/isWithinRange.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/pointerCapture.ts","../../packages/utils/src/functions/rubberband.ts","../../packages/utils/src/functions/scrollbarGutterSupport.ts","../../packages/utils/src/functions/scrollbarWidth.ts","../../packages/utils/src/functions/selectionLock.ts","../../packages/utils/src/functions/slugify.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","// Converts a CSS length string in `px` or `rem` to an absolute pixel value.\n// Returns undefined for any other unit or an unparseable value, so callers can\n// warn with their own context.\nexport function convertToPixels(value: string): number | undefined {\n const match = value.trim().match(/^(\\d*\\.?\\d+)\\s*(rem|px)$/)\n if (!match) {\n return undefined\n }\n\n const numericValue = parseFloat(match[1] ?? '')\n\n if (match[2] === 'rem') {\n const rootFontSize =\n parseFloat(getComputedStyle(document.body).fontSize) || 16\n return numericValue * rootFontSize\n }\n\n return numericValue\n}\n","import { getCurrentInstance, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport type CreateStore<T> = () => Ref<T>\n\nexport function createStateStore<T>(\n key: string,\n setInitialValue: () => T\n): CreateStore<T> {\n return function getOrCreateStore(): Ref<T> {\n const instance = getCurrentInstance()\n const app = instance?.appContext.app\n\n // If no app instance is found, return a fresh store. Event handlers,\n // timers and watcher callbacks run without one, so composables that use\n // a store must be called during setup, never from inside those.\n if (!app || !key) {\n return ref(setInitialValue()) as Ref<T>\n }\n\n // Create a global Map to hold all state stores\n if (!app.config.globalProperties.__VEStateStores) {\n app.config.globalProperties.__VEStateStores = new Map<string, Ref<T>>()\n }\n\n // Check if a store already exists for this app instance\n let store = app.config.globalProperties.__VEStateStores.get(key)\n\n // If no store exists for this app instance, create one\n if (!store) {\n store = ref(setInitialValue()) as Ref<T>\n app.config.globalProperties.__VEStateStores.set(key, store)\n }\n\n return store\n }\n}\n","export function linear(t: number) {\n return t\n}\nexport function easeInQuad(t: number) {\n return t * t\n}\nexport function easeOutQuad(t: number) {\n return t * (2 - t)\n}\nexport function easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n}\nexport function easeOutBack(t: number, o: number = 1.25) {\n return 1 + (t - 1) * (t - 1) * ((o + 1) * (t - 1) + o)\n}\nexport function easeInCubic(t: number) {\n return t * t * t\n}\nexport function easeOutCubic(t: number) {\n return --t * t * t + 1\n}\nexport function easeInOutCubic(t: number) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n}\nexport function easeInQuart(t: number) {\n return t * t * t * t\n}\nexport function easeOutQuart(t: number) {\n return 1 - --t * t * t * t\n}\nexport function easeInOutQuart(t: number) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t\n}\nexport function easeInQuint(t: number) {\n return t * t * t * t * t\n}\nexport function easeOutQuint(t: number) {\n return 1 + --t * t * t * t * t\n}\nexport function easeInOutQuint(t: number) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t\n}\n","interface CancelEdgeNavigationArgs {\n event: TouchEvent\n threshold?: number\n slop?: number\n exclude?: string[]\n}\n\ninterface RestoreClickArgs {\n target: HTMLElement\n touch: Touch\n slop: number\n}\n\n// iPadOS reports a Macintosh user agent, so touch support is the tell\nexport function hasEdgeNavigationGestures() {\n if (typeof window === 'undefined') {\n return false\n }\n\n return (\n /iPad|iPhone|iPod/.test(navigator?.userAgent) ||\n (/Macintosh/.test(navigator?.userAgent) && navigator?.maxTouchPoints > 1)\n )\n}\n\n// Canceling touchstart is the one signal WebKit honors to keep its edge\n// navigation swipe from arming; pointer events keep firing regardless\nexport function cancelEdgeNavigation(args: CancelEdgeNavigationArgs): boolean {\n const {\n event,\n threshold = 44,\n slop = 12,\n exclude = ['SELECT', 'OPTION', 'INPUT', 'TEXTAREA'],\n } = args\n\n if (!hasEdgeNavigationGestures() || !event.cancelable) {\n return false\n }\n\n if (event.touches.length !== 1) {\n return false\n }\n\n const touch = event.touches[0]\n const target =\n event.target instanceof Element ? closestHTMLElement(event.target) : null\n\n if (!touch || !target) {\n return false\n }\n\n if (\n exclude.some((tag) => tag.toUpperCase() === target.tagName) ||\n target.isContentEditable\n ) {\n return false\n }\n\n if (\n touch.clientX > threshold &&\n touch.clientX < window.innerWidth - threshold\n ) {\n return false\n }\n\n event.preventDefault()\n restoreClick({ target, touch, slop })\n\n return true\n}\n\n// An SVG element has no click(), so a touch on an icon restores the click on\n// the HTML element that holds it\nfunction closestHTMLElement(element: Element) {\n for (\n let current: Element | null = element;\n current;\n current = current.parentElement\n ) {\n if (current instanceof HTMLElement) {\n return current\n }\n }\n\n return null\n}\n\n// Canceling touchstart swallows the tap’s synthesized click; a touch that\n// ends within the slop dispatches a deferred replacement\nfunction restoreClick(args: RestoreClickArgs) {\n const { target, touch, slop } = args\n const { identifier, clientX, clientY } = touch\n\n function findTouch(list: TouchList) {\n for (let index = 0; index < list.length; index++) {\n const candidate = list[index]\n if (candidate?.identifier === identifier) {\n return candidate\n }\n }\n\n return undefined\n }\n\n function teardown() {\n document.removeEventListener('touchend', onTouchend, true)\n document.removeEventListener('touchcancel', onTouchcancel, true)\n }\n\n function onTouchend(event: TouchEvent) {\n const endTouch = findTouch(event.changedTouches)\n\n if (!endTouch) {\n return\n }\n\n teardown()\n\n const distance = Math.hypot(\n endTouch.clientX - clientX,\n endTouch.clientY - clientY\n )\n\n if (distance <= slop) {\n setTimeout(() => target.click())\n }\n }\n\n function onTouchcancel(event: TouchEvent) {\n if (findTouch(event.changedTouches)) {\n teardown()\n }\n }\n\n document.addEventListener('touchend', onTouchend, true)\n document.addEventListener('touchcancel', onTouchcancel, true)\n}\n","export function toNumber(value: string | number): number {\n return typeof value === 'string' ? parseFloat(value) : Number(value)\n}\n","import { toNumber } from './toNumber'\n\nexport function formatTime(seconds: number, guide: number) {\n seconds = seconds < 0 ? 0 : seconds\n let s: string | number = Math.floor(seconds % 60)\n let m: string | number = Math.floor((seconds / 60) % 60)\n let h: string | number = Math.floor(seconds / 3600)\n const gm = Math.floor((guide / 60) % 60)\n const gh = Math.floor(guide / 3600)\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-'\n }\n\n // Check if we need to show hours\n h = toNumber(h) > 0 || gh > 0 ? h + ':' : ''\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = ((h || gm >= 10) && toNumber(m) < 10 ? '0' + m : m) + ':'\n\n // Check if leading zero is need for seconds\n s = toNumber(s) < 10 ? '0' + s : s\n\n return h + m + s\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n easing?: (t: number) => number\n callback: (result: number) => void\n interpolationIdCallback?: (id: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n interpolationIdCallback = () => {},\n easing = (t) => t * (2 - t),\n } = args\n\n let startTime: number\n let interpolationId: number\n\n function animate(timestamp: number) {\n if (!startTime) {\n startTime = timestamp\n }\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 interpolationId = requestAnimationFrame(animate)\n interpolationIdCallback(interpolationId)\n }\n }\n\n interpolationId = requestAnimationFrame(animate)\n\n return interpolationId\n}\n","export function isAndroid() {\n if (typeof window === 'undefined') {\n return false\n }\n return /android/i.test(navigator?.userAgent)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') {\n return false\n }\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","interface isWithinRangeArgs {\n input: number\n base: number\n threshold: number\n}\n\nexport function isWithinRange(args: isWithinRangeArgs): boolean {\n const { input, base, threshold } = args\n return input >= base - threshold && input <= base + threshold\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","export function matchClass(el: Element, regex: RegExp) {\n return Array.from(el.classList).some((className) => regex.test(className))\n}\n","interface GuardedSetPointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n mouse?: boolean\n debug?: boolean\n}\n\ninterface GuardedReleasePointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n}\n\nexport function guardedSetPointerCapture(\n args: GuardedSetPointerCaptureArgs\n): void {\n const { event, element, mouse, debug } = args\n if (element && event.isPrimary && (mouse || event.pointerType !== 'mouse')) {\n try {\n const coalescedEvents: PointerEvent[] =\n 'getCoalescedEvents' in event ? event.getCoalescedEvents() : [event]\n\n if (coalescedEvents.length > 0 || mouse) {\n element?.setPointerCapture(event.pointerId)\n }\n } catch (error) {\n if (debug) {\n console.warn('Failed to set pointer capture:', error)\n }\n }\n }\n}\n\nexport function guardedReleasePointerCapture(\n args: GuardedReleasePointerCaptureArgs\n): void {\n const { event, element } = args\n if (element?.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId)\n }\n}\n","// Maps overdrag distance onto a diminishing, ever-increasing offset that\n// approaches `max` but never reaches it, so resistance always keeps growing.\n// Higher `tightness` climbs toward the edge sooner while staying elastic.\nexport function rubberband(distance: number, max: number, tightness = 2) {\n if (max <= 0 || distance <= 0) {\n return 0\n }\n return (1 - 1 / ((distance * tightness) / max + 1)) * max\n}\n","export function scrollbarGutterSupport() {\n return CSS.supports('scrollbar-gutter', 'stable')\n}\n","export function scrollbarWidth() {\n const wrapper = document.createElement('div')\n wrapper.style.position = 'absolute'\n wrapper.style.visibility = 'hidden'\n wrapper.style.overflow = 'hidden'\n wrapper.style.width = '100px'\n wrapper.style.height = '100px'\n wrapper.style.top = '-9999px'\n\n wrapper.innerHTML = '<div style=\"width: 200px; height: 200px;\"></div>'\n document.body.appendChild(wrapper)\n\n // Get the scrollbar width\n const withoutScrollbar = wrapper.clientWidth\n wrapper.style.overflow = 'scroll'\n const withScrollbar = wrapper.clientWidth\n\n // Clean up\n document.body.removeChild(wrapper)\n\n return Math.round(withoutScrollbar - withScrollbar)\n}\n","let lockCount = 0\nlet previousUserSelect = ''\nlet previousWebkitUserSelect = ''\n\nfunction onSelectstart(event: Event) {\n event.preventDefault()\n}\n\n// Blocks text selection page-wide, e.g. for the duration of a drag.\nexport function lockSelection(): () => void {\n if (typeof document === 'undefined') {\n return () => {}\n }\n\n if (lockCount === 0) {\n const { style } = document.documentElement\n previousUserSelect = style.userSelect\n previousWebkitUserSelect = style.webkitUserSelect\n style.userSelect = 'none'\n style.webkitUserSelect = 'none'\n document.addEventListener('selectstart', onSelectstart)\n }\n\n lockCount++\n\n let released = false\n\n return function releaseSelection() {\n if (released) {\n return\n }\n\n released = true\n lockCount--\n\n if (lockCount === 0) {\n const { style } = document.documentElement\n style.userSelect = previousUserSelect\n style.webkitUserSelect = previousWebkitUserSelect\n document.removeEventListener('selectstart', onSelectstart)\n }\n }\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) {\n appendChar = ch\n }\n if (appendChar === _options?.separator) {\n appendChar = ' '\n }\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","export function uniq<T extends unknown[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/convertToPixels.ts","../../packages/utils/src/functions/createStateStore.ts","../../packages/utils/src/functions/easings.ts","../../packages/utils/src/functions/edgeNavigation.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isAndroid.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/isWithinRange.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/pointerCapture.ts","../../packages/utils/src/functions/rubberband.ts","../../packages/utils/src/functions/scrollbarGutterSupport.ts","../../packages/utils/src/functions/scrollbarWidth.ts","../../packages/utils/src/functions/selectionLock.ts","../../packages/utils/src/functions/slugify.ts","../../packages/utils/src/functions/snapTarget.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","// Converts a CSS length string in `px` or `rem` to an absolute pixel value.\n// Returns undefined for any other unit or an unparseable value, so callers can\n// warn with their own context.\nexport function convertToPixels(value: string): number | undefined {\n const match = value.trim().match(/^(\\d*\\.?\\d+)\\s*(rem|px)$/)\n if (!match) {\n return undefined\n }\n\n const numericValue = parseFloat(match[1] ?? '')\n\n if (match[2] === 'rem') {\n const rootFontSize =\n parseFloat(getComputedStyle(document.body).fontSize) || 16\n return numericValue * rootFontSize\n }\n\n return numericValue\n}\n","import { getCurrentInstance, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport type CreateStore<T> = () => Ref<T>\n\nexport function createStateStore<T>(\n key: string,\n setInitialValue: () => T\n): CreateStore<T> {\n return function getOrCreateStore(): Ref<T> {\n const instance = getCurrentInstance()\n const app = instance?.appContext.app\n\n // If no app instance is found, return a fresh store. Event handlers,\n // timers and watcher callbacks run without one, so composables that use\n // a store must be called during setup, never from inside those.\n if (!app || !key) {\n return ref(setInitialValue()) as Ref<T>\n }\n\n // Create a global Map to hold all state stores\n if (!app.config.globalProperties.__VEStateStores) {\n app.config.globalProperties.__VEStateStores = new Map<string, Ref<T>>()\n }\n\n // Check if a store already exists for this app instance\n let store = app.config.globalProperties.__VEStateStores.get(key)\n\n // If no store exists for this app instance, create one\n if (!store) {\n store = ref(setInitialValue()) as Ref<T>\n app.config.globalProperties.__VEStateStores.set(key, store)\n }\n\n return store\n }\n}\n","export function linear(t: number) {\n return t\n}\nexport function easeInQuad(t: number) {\n return t * t\n}\nexport function easeOutQuad(t: number) {\n return t * (2 - t)\n}\nexport function easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n}\nexport function easeOutBack(t: number, o: number = 1.25) {\n return 1 + (t - 1) * (t - 1) * ((o + 1) * (t - 1) + o)\n}\nexport function easeInCubic(t: number) {\n return t * t * t\n}\nexport function easeOutCubic(t: number) {\n return --t * t * t + 1\n}\nexport function easeInOutCubic(t: number) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n}\nexport function easeInQuart(t: number) {\n return t * t * t * t\n}\nexport function easeOutQuart(t: number) {\n return 1 - --t * t * t * t\n}\nexport function easeInOutQuart(t: number) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t\n}\nexport function easeInQuint(t: number) {\n return t * t * t * t * t\n}\nexport function easeOutQuint(t: number) {\n return 1 + --t * t * t * t * t\n}\nexport function easeInOutQuint(t: number) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t\n}\n","interface CancelEdgeNavigationArgs {\n event: TouchEvent\n threshold?: number\n slop?: number\n exclude?: string[]\n}\n\ninterface RestoreClickArgs {\n target: HTMLElement\n touch: Touch\n slop: number\n}\n\n// iPadOS reports a Macintosh user agent, so touch support is the tell\nexport function hasEdgeNavigationGestures() {\n if (typeof window === 'undefined') {\n return false\n }\n\n return (\n /iPad|iPhone|iPod/.test(navigator?.userAgent) ||\n (/Macintosh/.test(navigator?.userAgent) && navigator?.maxTouchPoints > 1)\n )\n}\n\n// Canceling touchstart is the one signal WebKit honors to keep its edge\n// navigation swipe from arming; pointer events keep firing regardless\nexport function cancelEdgeNavigation(args: CancelEdgeNavigationArgs): boolean {\n const {\n event,\n threshold = 44,\n slop = 12,\n exclude = ['SELECT', 'OPTION', 'INPUT', 'TEXTAREA'],\n } = args\n\n if (!hasEdgeNavigationGestures() || !event.cancelable) {\n return false\n }\n\n if (event.touches.length !== 1) {\n return false\n }\n\n const touch = event.touches[0]\n const target =\n event.target instanceof Element ? closestHTMLElement(event.target) : null\n\n if (!touch || !target) {\n return false\n }\n\n if (\n exclude.some((tag) => tag.toUpperCase() === target.tagName) ||\n target.isContentEditable\n ) {\n return false\n }\n\n if (\n touch.clientX > threshold &&\n touch.clientX < window.innerWidth - threshold\n ) {\n return false\n }\n\n event.preventDefault()\n restoreClick({ target, touch, slop })\n\n return true\n}\n\n// An SVG element has no click(), so a touch on an icon restores the click on\n// the HTML element that holds it\nfunction closestHTMLElement(element: Element) {\n for (\n let current: Element | null = element;\n current;\n current = current.parentElement\n ) {\n if (current instanceof HTMLElement) {\n return current\n }\n }\n\n return null\n}\n\n// Canceling touchstart swallows the tap’s synthesized click; a touch that\n// ends within the slop dispatches a deferred replacement\nfunction restoreClick(args: RestoreClickArgs) {\n const { target, touch, slop } = args\n const { identifier, clientX, clientY } = touch\n\n function findTouch(list: TouchList) {\n for (let index = 0; index < list.length; index++) {\n const candidate = list[index]\n if (candidate?.identifier === identifier) {\n return candidate\n }\n }\n\n return undefined\n }\n\n function teardown() {\n document.removeEventListener('touchend', onTouchend, true)\n document.removeEventListener('touchcancel', onTouchcancel, true)\n }\n\n function onTouchend(event: TouchEvent) {\n const endTouch = findTouch(event.changedTouches)\n\n if (!endTouch) {\n return\n }\n\n teardown()\n\n const distance = Math.hypot(\n endTouch.clientX - clientX,\n endTouch.clientY - clientY\n )\n\n if (distance <= slop) {\n setTimeout(() => target.click())\n }\n }\n\n function onTouchcancel(event: TouchEvent) {\n if (findTouch(event.changedTouches)) {\n teardown()\n }\n }\n\n document.addEventListener('touchend', onTouchend, true)\n document.addEventListener('touchcancel', onTouchcancel, true)\n}\n","export function toNumber(value: string | number): number {\n return typeof value === 'string' ? parseFloat(value) : Number(value)\n}\n","import { toNumber } from './toNumber'\n\nexport function formatTime(seconds: number, guide: number) {\n seconds = seconds < 0 ? 0 : seconds\n let s: string | number = Math.floor(seconds % 60)\n let m: string | number = Math.floor((seconds / 60) % 60)\n let h: string | number = Math.floor(seconds / 3600)\n const gm = Math.floor((guide / 60) % 60)\n const gh = Math.floor(guide / 3600)\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-'\n }\n\n // Check if we need to show hours\n h = toNumber(h) > 0 || gh > 0 ? h + ':' : ''\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = ((h || gm >= 10) && toNumber(m) < 10 ? '0' + m : m) + ':'\n\n // Check if leading zero is need for seconds\n s = toNumber(s) < 10 ? '0' + s : s\n\n return h + m + s\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n easing?: (t: number) => number\n callback: (result: number) => void\n interpolationIdCallback?: (id: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n interpolationIdCallback = () => {},\n easing = (t) => t * (2 - t),\n } = args\n\n let startTime: number\n let interpolationId: number\n\n function animate(timestamp: number) {\n if (!startTime) {\n startTime = timestamp\n }\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 interpolationId = requestAnimationFrame(animate)\n interpolationIdCallback(interpolationId)\n }\n }\n\n interpolationId = requestAnimationFrame(animate)\n\n return interpolationId\n}\n","export function isAndroid() {\n if (typeof window === 'undefined') {\n return false\n }\n return /android/i.test(navigator?.userAgent)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') {\n return false\n }\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","interface isWithinRangeArgs {\n input: number\n base: number\n threshold: number\n}\n\nexport function isWithinRange(args: isWithinRangeArgs): boolean {\n const { input, base, threshold } = args\n return input >= base - threshold && input <= base + threshold\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","export function matchClass(el: Element, regex: RegExp) {\n return Array.from(el.classList).some((className) => regex.test(className))\n}\n","interface GuardedSetPointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n mouse?: boolean\n debug?: boolean\n}\n\ninterface GuardedReleasePointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n}\n\nexport function guardedSetPointerCapture(\n args: GuardedSetPointerCaptureArgs\n): void {\n const { event, element, mouse, debug } = args\n if (element && event.isPrimary && (mouse || event.pointerType !== 'mouse')) {\n try {\n const coalescedEvents: PointerEvent[] =\n 'getCoalescedEvents' in event ? event.getCoalescedEvents() : [event]\n\n if (coalescedEvents.length > 0 || mouse) {\n element?.setPointerCapture(event.pointerId)\n }\n } catch (error) {\n if (debug) {\n console.warn('Failed to set pointer capture:', error)\n }\n }\n }\n}\n\nexport function guardedReleasePointerCapture(\n args: GuardedReleasePointerCaptureArgs\n): void {\n const { event, element } = args\n if (element?.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId)\n }\n}\n","// Maps overdrag distance onto a diminishing, ever-increasing offset that\n// approaches `max` but never reaches it, so resistance always keeps growing.\n// Higher `tightness` climbs toward the edge sooner while staying elastic.\nexport function rubberband(distance: number, max: number, tightness = 2) {\n if (max <= 0 || distance <= 0) {\n return 0\n }\n return (1 - 1 / ((distance * tightness) / max + 1)) * max\n}\n","export function scrollbarGutterSupport() {\n return CSS.supports('scrollbar-gutter', 'stable')\n}\n","export function scrollbarWidth() {\n const wrapper = document.createElement('div')\n wrapper.style.position = 'absolute'\n wrapper.style.visibility = 'hidden'\n wrapper.style.overflow = 'hidden'\n wrapper.style.width = '100px'\n wrapper.style.height = '100px'\n wrapper.style.top = '-9999px'\n\n wrapper.innerHTML = '<div style=\"width: 200px; height: 200px;\"></div>'\n document.body.appendChild(wrapper)\n\n // Get the scrollbar width\n const withoutScrollbar = wrapper.clientWidth\n wrapper.style.overflow = 'scroll'\n const withScrollbar = wrapper.clientWidth\n\n // Clean up\n document.body.removeChild(wrapper)\n\n return Math.round(withoutScrollbar - withScrollbar)\n}\n","let lockCount = 0\nlet previousUserSelect = ''\nlet previousWebkitUserSelect = ''\n\nfunction onSelectstart(event: Event) {\n event.preventDefault()\n}\n\n// Blocks text selection page-wide, e.g. for the duration of a drag.\nexport function lockSelection(): () => void {\n if (typeof document === 'undefined') {\n return () => {}\n }\n\n if (lockCount === 0) {\n const { style } = document.documentElement\n previousUserSelect = style.userSelect\n previousWebkitUserSelect = style.webkitUserSelect\n style.userSelect = 'none'\n style.webkitUserSelect = 'none'\n document.addEventListener('selectstart', onSelectstart)\n }\n\n lockCount++\n\n let released = false\n\n return function releaseSelection() {\n if (released) {\n return\n }\n\n released = true\n lockCount--\n\n if (lockCount === 0) {\n const { style } = document.documentElement\n style.userSelect = previousUserSelect\n style.webkitUserSelect = previousWebkitUserSelect\n document.removeEventListener('selectstart', onSelectstart)\n }\n }\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) {\n appendChar = ch\n }\n if (appendChar === _options?.separator) {\n appendChar = ' '\n }\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","import { clampValue } from './clampValue'\n\nexport type SnapRange = {\n min: number\n max: number\n // False keeps a flick released inside the range from carrying on\n momentum?: boolean\n}\n\nexport type SnapDirection = 'below' | 'above'\n\nexport type SnapMode = 'closest' | 'step'\n\n// A drag along one axis, in pixels\nexport type SnapDrag = {\n // Snap points and range ends, sorted ascending\n points: Array<number>\n ranges: Array<SnapRange>\n mode: SnapMode\n // Where the side rests, where the drag started, and where it is now\n rest: number\n start: number\n position: number\n}\n\ntype SnapRangeAtArgs<RangeType extends SnapRange> = {\n ranges: Array<RangeType>\n position: number\n}\n\ntype ClosestSnapPointArgs = {\n points: Array<number>\n value: number\n direction?: SnapDirection | 'absolute'\n}\n\ntype SnapTargetAtArgs = {\n points: Array<number>\n ranges: Array<SnapRange>\n value: number\n}\n\ntype SnapCommitArgs = SnapDrag & {\n distance: number\n flicked: boolean\n flickDirection?: SnapDirection\n}\n\ntype SnapReleaseArgs = SnapDrag & {\n committed: number | undefined\n flicked: boolean\n tapped: boolean\n}\n\n// The range a position lies within, ends included\nexport function snapRangeAt<RangeType extends SnapRange>(\n args: SnapRangeAtArgs<RangeType>\n) {\n const { ranges, position } = args\n\n return ranges.find((range) => position >= range.min && position <= range.max)\n}\n\n// The closest point to a value, in a direction or either way. With nothing\n// past the value in the direction, the outermost point that way.\nexport function closestSnapPoint(args: ClosestSnapPointArgs) {\n const { points, value, direction = 'absolute' } = args\n\n if (!points.length) {\n return undefined\n }\n\n switch (direction) {\n case 'above':\n return points.find((point) => point > value) ?? points.at(-1)\n case 'below':\n return [...points].reverse().find((point) => point < value) ?? points[0]\n case 'absolute':\n return points.reduce((closest, point) =>\n Math.abs(point - value) < Math.abs(closest - value) ? point : closest\n )\n }\n}\n\n// Where a value lands without a drag: in place inside a range, otherwise at\n// the closest point\nexport function snapTargetAt(args: SnapTargetAtArgs) {\n const { points, ranges, value } = args\n\n return snapRangeAt({ ranges, position: value })\n ? value\n : closestSnapPoint({ points, value })\n}\n\n// For a drag that started inside a range, the position clamped to that\n// range, so travel within the range never counts toward a snap\nfunction clampToRestRange(drag: SnapDrag) {\n const range = snapRangeAt({ ranges: drag.ranges, position: drag.rest })\n\n return range ? clampValue(drag.position, range.min, range.max) : undefined\n}\n\n// The closest point in the drag direction, or in 'step' mode the next one\n// from where the side rests\nfunction nextSnapPoint(args: SnapDrag & { direction: SnapDirection }) {\n const { points, mode, rest, position, direction } = args\n const value = mode === 'step' ? rest : position\n\n return closestSnapPoint({ points, value, direction })\n}\n\n// A release inside a range rests in place, unless flicked in a range with\n// momentum. In 'step' mode only inside the range the side rests in, or the\n// one whose end is the next step.\nfunction restsInRange(args: SnapDrag & { flicked: boolean }) {\n const { ranges, mode, rest, position, flicked } = args\n const range = snapRangeAt({ ranges, position })\n\n if (!range || (flicked && range.momentum !== false)) {\n return false\n }\n\n const startsInside = rest >= range.min && rest <= range.max\n\n if (mode !== 'step' || startsInside) {\n return true\n }\n\n const direction = position < rest ? 'below' : 'above'\n const next = nextSnapPoint({ ...args, direction })\n\n return next === (direction === 'above' ? range.min : range.max)\n}\n\n// The point a drag commits to once it passes the distance threshold or is\n// flicked, otherwise undefined so a release reverts\nexport function snapCommit(args: SnapCommitArgs) {\n const { distance, flicked, flickDirection, ...drag } = args\n const delta = drag.position - (clampToRestRange(drag) ?? drag.start)\n\n if (Math.abs(delta) > distance) {\n return nextSnapPoint({ ...drag, direction: delta < 0 ? 'below' : 'above' })\n }\n\n if (flicked && flickDirection) {\n return nextSnapPoint({ ...drag, direction: flickDirection })\n }\n\n return undefined\n}\n\n// Where a release comes to rest: in place inside a range, at the committed\n// point, or back where the drag started. A tap never rests inside a range,\n// or a pulled handle would keep the pulled position.\nexport function snapRelease(args: SnapReleaseArgs) {\n const { committed, flicked, tapped, ...drag } = args\n\n if (tapped) {\n return committed ?? drag.rest\n }\n\n if (restsInRange({ ...drag, flicked })) {\n return drag.position\n }\n\n return committed ?? clampToRestRange(drag) ?? drag.rest\n}\n","export function uniq<T extends unknown[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":"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","names":[]}
|