{"version":3,"file":"SingleNumber.cjs","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","defineComponent","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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"}