{"version":3,"file":"index.umd.cjs","sources":["../src/utils.ts","../src/components/vue-number-flow.vue","../src/index.ts"],"sourcesContent":["/**\n * Omit specified keys from an object or an array of objects.\n *\n * @template T - The type of the input object or objects.\n * @template K - The keys to omit from the object or objects.\n * @param {T[] | Record<any, any>} obj - The input object or an array of objects.\n * @param {...K} keys - The keys to omit from the object or objects.\n * @returns {Omit<T, K>[] | Omit<T, K>} - The object with specified keys omitted or an array of objects with specified keys omitted.\n */\nexport function omit<T extends object, K extends Extract<keyof T, string>>(\n  obj: T,\n  ...keys: K[]\n): Omit<T, K> {\n  const _obj = { ...obj }\n  for (const key of keys) {\n    delete _obj[key]\n  }\n  return _obj\n}\n","<template>\n  <number-flow :data-will-change=\"willChange ? '' : undefined\">\n    <span :style=\"slottedStyles({ willChange: true })\">\n      {{ parts.formatted }}\n    </span>\n  </number-flow>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, nextTick, ref, watch } from 'vue'\n\nimport {\n  partitionParts,\n  slottedStyles,\n  type Format,\n  type Trend,\n} from 'number-flow'\n\nimport { omit } from '@/utils'\n\ninterface Props {\n  value: number\n  format?: Format\n  locales?: Intl.LocalesArgument\n  isolate?: boolean\n  animated?: boolean\n  respectMotionPreference?: boolean\n  willChange?: boolean\n  trend?: Trend\n  onAnimationsStart?: () => void\n  onAnimationsFinish?: () => void\n  opacityTiming?: EffectTiming\n  transformTiming?: EffectTiming\n  spinTiming?: EffectTiming\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  isolate: false,\n  animated: true,\n  respectMotionPreference: true,\n  willChange: false,\n  trend: true,\n})\n\nconst parts = ref(\n  partitionParts(props.value, Intl.NumberFormat(props.locales, props.format)),\n)\n\nconst instance = getCurrentInstance()\nconst rootEl = computed(() => instance?.proxy?.$el)\n\nwatch(\n  () => props.value,\n  async () => {\n    parts.value = partitionParts(\n      props.value,\n      Intl.NumberFormat(props.locales, props.format),\n    )\n\n    if (rootEl.value) {\n      rootEl.value.setAttribute('parts', JSON.stringify(parts.value))\n      rootEl.value.willUpdate()\n\n      await nextTick()\n\n      rootEl.value.didUpdate()\n    }\n  },\n  { immediate: true },\n)\n\nwatch(\n  () => omit(props, 'value'),\n  async (newProps, prevProps) => {\n    await nextTick()\n\n    if (!rootEl.value) return\n\n    rootEl.value.animated = newProps.animated\n    rootEl.value.respectMotionPreference = newProps.respectMotionPreference\n    rootEl.value.trend = newProps.trend\n    rootEl.value.isolate = newProps.isolate\n    if (newProps.opacityTiming)\n      rootEl.value.opacityTiming = newProps.opacityTiming\n    if (newProps.transformTiming)\n      rootEl.value.transformTiming = newProps.transformTiming\n    if (newProps.spinTiming) rootEl.value.spinTiming = newProps.spinTiming\n\n    if (prevProps?.onAnimationsStart) {\n      rootEl.value.removeEventListener(\n        'animationsstart',\n        prevProps.onAnimationsStart,\n      )\n    }\n\n    if (newProps.onAnimationsStart) {\n      rootEl.value.addEventListener(\n        'animationsstart',\n        newProps.onAnimationsStart,\n      )\n    }\n\n    if (prevProps?.onAnimationsFinish) {\n      rootEl.value.removeEventListener(\n        'animationsfinish',\n        prevProps.onAnimationsFinish,\n      )\n    }\n\n    if (newProps.onAnimationsFinish) {\n      rootEl.value.addEventListener(\n        'animationsfinish',\n        newProps.onAnimationsFinish,\n      )\n    }\n  },\n  {\n    immediate: true,\n    deep: true,\n  },\n)\n</script>\n","import { NumberFlowLite } from 'number-flow'\nexport * from 'number-flow'\n\nexport const defineNumberFlow = () => {\n  const OBSERVED_ATTRIBUTES = ['parts']\n\n  class NumberFlowElement extends NumberFlowLite {\n    static get observedAttributes() {\n      return OBSERVED_ATTRIBUTES\n    }\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-expect-error\n    attributeChangedCallback(attr, _oldValue, newValue) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-expect-error\n      this[attr] = JSON.parse(newValue)\n    }\n  }\n\n  NumberFlowElement.define()\n}\n\nimport VueNumberFlow from './components/vue-number-flow.vue'\nexport { VueNumberFlow }\n"],"names":["ref","partitionParts","getCurrentInstance","computed","watch","nextTick","NumberFlowLite"],"mappings":"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"}