@maas/vue-equipment 1.0.0 β†’ 1.0.1

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/README.md CHANGED
@@ -7,13 +7,9 @@ Our Frontend Toolkit, Free and Open Source.
7
7
 
8
8
  Over the years, we have found ourselves facing a common problem: driven by the lack of options in the Vue ecosystem, we needed to implement solutions from the ground-up, over and over again. Vue Equipment is our attempt to solve this. It is essentially a collection of ready-to-use plugins and composables for building modern web applications.
9
9
 
10
- ## 🚧 Disclaimer
11
-
12
- This project is currently in beta. Expect breaking changes before the initial stable release. With this being said, we aim to keep the amount to an absolute minimum and will communicate any breaking changes with each [release](https://github.com/magicasaservice/vue-equipment/releases).
13
-
14
10
  ## πŸ“– Docs
15
11
 
16
- For the full documentation visit [vue.equipment](https://vue.equipment). We are actively working on updating the docs before our initial stable release.
12
+ For the full documentation visit [vue.equipment](https://vue.equipment).
17
13
 
18
14
  ## πŸ› Found a Bug?
19
15
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment/nuxt",
3
3
  "configKey": "vueEquipment",
4
- "version": "1.0.0-beta.88",
4
+ "version": "1.0.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.3",
7
7
  "unbuild": "unknown"
@@ -1,5 +1,5 @@
1
1
  import type { MagicTraySide } from '../types/index.js';
2
- declare var __VLS_9: {}, __VLS_11: {}, __VLS_25: "handle-top" | "handle-left" | "handle-right" | "handle-bottom" | "handle", __VLS_26: {
2
+ declare var __VLS_9: {}, __VLS_11: {}, __VLS_25: "handle-top" | "handle-right" | "handle-bottom" | "handle-left" | "handle", __VLS_26: {
3
3
  side: MagicTraySide;
4
4
  };
5
5
  type __VLS_Slots = {} & {
@@ -1,5 +1,5 @@
1
1
  import type { MagicTraySide } from '../types/index.js';
2
- declare var __VLS_9: {}, __VLS_11: {}, __VLS_25: "handle-top" | "handle-left" | "handle-right" | "handle-bottom" | "handle", __VLS_26: {
2
+ declare var __VLS_9: {}, __VLS_11: {}, __VLS_25: "handle-top" | "handle-right" | "handle-bottom" | "handle-left" | "handle", __VLS_26: {
3
3
  side: MagicTraySide;
4
4
  };
5
5
  type __VLS_Slots = {} & {
@@ -103,8 +103,8 @@ function cancelEdgeNavigation(args) {
103
103
  return false;
104
104
  }
105
105
  const touch = event.touches[0];
106
- const target = event.target;
107
- if (!touch || !(target instanceof HTMLElement)) {
106
+ const target = event.target instanceof Element ? closestHTMLElement(event.target) : null;
107
+ if (!touch || !target) {
108
108
  return false;
109
109
  }
110
110
  if (exclude.some((tag) => tag.toUpperCase() === target.tagName) || target.isContentEditable) {
@@ -117,6 +117,14 @@ function cancelEdgeNavigation(args) {
117
117
  restoreClick({ target, touch, slop });
118
118
  return true;
119
119
  }
120
+ function closestHTMLElement(element) {
121
+ for (let current = element; current; current = current.parentElement) {
122
+ if (current instanceof HTMLElement) {
123
+ return current;
124
+ }
125
+ }
126
+ return null;
127
+ }
120
128
  function restoreClick(args) {
121
129
  const { target, touch, slop } = args;
122
130
  const { identifier, clientX, clientY } = touch;
@@ -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 = event.target\n\n if (!touch || !(target instanceof HTMLElement)) {\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// 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/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":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment",
3
3
  "description": "Our Frontend Toolkit, Free and Open Source",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "contributors": [
6
6
  {
7
7
  "name": "Robin Scholz",