{"version":3,"file":"utils.cjs","sources":["../../src/NumberField/utils.ts"],"sourcesContent":["import { NumberFormatter, NumberParser } from '@internationalized/number'\nimport { type MaybeComputedElementRef, unrefElement, useEventListener } from '@vueuse/core'\nimport { createEventHook, isClient, reactiveComputed } from '@vueuse/shared'\nimport { type Ref, computed, ref } from 'vue'\n\nexport function usePressedHold(options: { target?: MaybeComputedElementRef, disabled: Ref<boolean> }) {\n  const { disabled } = options\n  const timeout = ref<number>()\n  const triggerHook = createEventHook()\n  const resetTimeout = () => window.clearTimeout(timeout.value)\n\n  const onIncrementPressStart = (delay: number) => {\n    resetTimeout()\n    if (disabled.value)\n      return\n\n    triggerHook.trigger()\n\n    timeout.value = window.setTimeout(() => {\n      onIncrementPressStart(60)\n    }, delay)\n  }\n\n  const handlePressStart = () => {\n    onIncrementPressStart(400)\n  }\n\n  const handlePressEnd = () => {\n    resetTimeout()\n  }\n\n  // Handle press event, modified version of useMousePressed\n  const isPressed = ref(false)\n  const target = computed(() => unrefElement(options.target))\n\n  const onPressStart = (event: PointerEvent) => {\n    // Only handle left clicks, and ignore events that bubbled through portals.\n    if (event.button !== 0 || isPressed.value)\n      return\n\n    event.preventDefault()\n    isPressed.value = true\n    handlePressStart()\n  }\n\n  const onPressRelease = () => {\n    isPressed.value = false\n    handlePressEnd()\n  }\n\n  if (isClient) {\n    useEventListener(target || window, 'pointerdown', onPressStart)\n    useEventListener(window, 'pointerup', onPressRelease)\n    useEventListener(window, 'pointercancel', onPressRelease)\n  }\n\n  return {\n    isPressed,\n    onTrigger: triggerHook.on,\n  }\n}\n\nexport function useNumberFormatter(locale: Ref<string>, options: Ref<Intl.NumberFormatOptions | undefined> = ref({})) {\n  return reactiveComputed(() => new NumberFormatter(locale.value, options.value))\n}\n\nexport function useNumberParser(locale: Ref<string>, options: Ref<Intl.NumberFormatOptions | undefined> = ref({})) {\n  return reactiveComputed(() => new NumberParser(locale.value, options.value))\n}\n\nexport function handleDecimalOperation(operator: '-' | '+', value1: number, value2: number): number {\n  let result = operator === '+' ? value1 + value2 : value1 - value2\n\n  // Check if we have decimals\n  if (value1 % 1 !== 0 || value2 % 1 !== 0) {\n    const value1Decimal = value1.toString().split('.')\n    const value2Decimal = value2.toString().split('.')\n    const value1DecimalLength = (value1Decimal[1] && value1Decimal[1].length) || 0\n    const value2DecimalLength = (value2Decimal[1] && value2Decimal[1].length) || 0\n    const multiplier = 10 ** Math.max(value1DecimalLength, value2DecimalLength)\n\n    // Transform the decimals to integers based on the precision\n    value1 = Math.round(value1 * multiplier)\n    value2 = Math.round(value2 * multiplier)\n\n    // Perform the operation on integers values to make sure we don't get a fancy decimal value\n    result = operator === '+' ? value1 + value2 : value1 - value2\n\n    // Transform the integer result back to decimal\n    result /= multiplier\n  }\n\n  return result\n}\n"],"names":["ref","createEventHook","computed","unrefElement","isClient","useEventListener","reactiveComputed","NumberFormatter","NumberParser"],"mappings":"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"}