{"version":3,"file":"SingleNumber.mjs","sources":["../../../../../../packages/components/badge/src/SingleNumber.tsx"],"sourcesContent":["import type { CSSProperties } from 'vue';\nimport type { UnitNumberProps } from './interface';\nimport { classNames } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  onUnmounted,\n  reactive,\n  ref,\n  watch,\n} from 'vue';\nimport { singleNumberProps } from './props';\n\nfunction UnitNumber({ prefixCls, value, current, offset = 0 }: UnitNumberProps) {\n  let style: CSSProperties | undefined;\n\n  if (offset) {\n    style = {\n      position: 'absolute',\n      top: `${offset}00%`,\n      left: 0,\n    };\n  }\n\n  return (\n    <p\n      style={style}\n      class={classNames(`${prefixCls}-only-unit`, {\n        current,\n      })}\n    >\n      {value}\n    </p>\n  );\n}\n\nfunction getOffset(start: number, end: number, unit: -1 | 1) {\n  let index = start;\n  let offset = 0;\n\n  while ((index + 10) % 10 !== end) {\n    index += unit;\n    offset += unit;\n  }\n\n  return offset;\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'SingleNumber',\n  props: singleNumberProps(),\n  setup(props) {\n    const originValue = computed(() => Number(props.value));\n    const originCount = computed(() => Math.abs(props.count));\n    const state = reactive({\n      prevValue: originValue.value,\n      prevCount: originCount.value,\n    });\n\n    // ============================= Events =============================\n    const onTransitionEnd = () => {\n      state.prevValue = originValue.value;\n      state.prevCount = originCount.value;\n    };\n    const timeout = ref();\n    // Fallback if transition event not support\n    watch(\n      originValue,\n      () => {\n        clearTimeout(timeout.value);\n        timeout.value = setTimeout(() => {\n          onTransitionEnd();\n        }, 1000);\n      },\n      { flush: 'post' },\n    );\n    onUnmounted(() => {\n      clearTimeout(timeout.value);\n    });\n\n    return () => {\n      let unitNodes: any[];\n      let offsetStyle: CSSProperties = {};\n      const value = originValue.value;\n      if (state.prevValue === value || Number.isNaN(value) || Number.isNaN(state.prevValue)) {\n        // Nothing to change\n        unitNodes = [UnitNumber({ ...props, current: true } as UnitNumberProps)];\n        offsetStyle = {\n          transition: 'none',\n        };\n      } else {\n        unitNodes = [];\n\n        // Fill basic number units\n        const end = value + 10;\n        const unitNumberList: number[] = [];\n        for (let index = value; index <= end; index += 1)\n          unitNumberList.push(index);\n\n        // Fill with number unit nodes\n        const prevIndex = unitNumberList.findIndex(n => n % 10 === state.prevValue);\n        unitNodes = unitNumberList.map((n, index) => {\n          const singleUnit = n % 10;\n          return UnitNumber({\n            ...props,\n            value: singleUnit,\n            offset: index - prevIndex,\n            current: index === prevIndex,\n          } as UnitNumberProps);\n        });\n\n        // Calculate container offset value\n        const unit = state.prevCount < originCount.value ? 1 : -1;\n        offsetStyle = {\n          transform: `translateY(${-getOffset(state.prevValue, value, unit)}00%)`,\n        };\n      }\n      return (\n        <span\n          class={`${props.prefixCls}-only`}\n          style={offsetStyle}\n          onTransitionend={() => onTransitionEnd()}\n        >\n          {unitNodes}\n        </span>\n      );\n    };\n  },\n});\n"],"names":["UnitNumber","prefixCls","value","current","offset","style","position","top","left","_createVNode","classNames","getOffset","start","end","unit","index","compatConfig","MODE","name","props","singleNumberProps","setup","originValue","computed","Number","originCount","Math","abs","count","state","reactive","prevValue","prevCount","onTransitionEnd","timeout","ref","watch","clearTimeout","setTimeout","flush","onUnmounted","unitNodes","offsetStyle","isNaN","transition","unitNumberList","push","prevIndex","findIndex","n","map","singleUnit","transform","onTransitionend"],"mappings":"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"}