{"version":3,"file":"steps.mjs","sources":["../../src/steps/steps.tsx"],"sourcesContent":["import { computed, defineComponent, provide, reactive, ref, toRefs, VNode } from 'vue';\nimport isObject from 'lodash/isObject';\nimport props from './props';\nimport stepItemProps from './step-item-props';\nimport { TdStepItemProps } from './type';\nimport StepItem from './step-item';\n\nimport { usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport { useChildComponentSlots } from '../hooks';\n\nexport default defineComponent({\n  name: 'XSteps',\n  props: { ...props },\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('steps');\n\n    const { current, modelValue } = toRefs(props);\n    const [innerCurrent, setInnerCurrent] = useVModel(\n      current,\n      modelValue,\n      props.defaultCurrent,\n      props.onChange,\n      'current',\n    );\n\n    provide(\n      'StepsState',\n      reactive({\n        current: innerCurrent,\n        setCurrent: setInnerCurrent,\n      }),\n    );\n\n    provide('StepsProps', props);\n\n    const indexMap = ref({});\n\n    const handleStatus = (itemProps: TdStepItemProps, index: number) => {\n      if (itemProps.status && itemProps.status !== 'default') return itemProps.status;\n      if (innerCurrent.value === 'FINISH') return 'finish';\n      // value 不存在时，使用 index 进行区分每一个步骤\n      if (itemProps.value === undefined && index < innerCurrent.value) return 'finish';\n      // value 存在，找匹配位置\n      if (itemProps.value !== undefined) {\n        const matchIndex = indexMap.value[innerCurrent.value];\n        if (matchIndex === undefined) {\n          console.warn('TDesign Steps Warn: The current `value` is not exist.');\n          return 'default';\n        }\n        if (props.sequence === 'positive' && index < matchIndex) return 'finish';\n        if (props.sequence === 'reverse' && index > matchIndex) return 'finish';\n      }\n      const key = itemProps.value === undefined ? index : itemProps.value;\n      if (key === innerCurrent.value) return 'process';\n      return 'default';\n    };\n\n    const getChildComponentByName = useChildComponentSlots();\n\n    const getOptionListBySlots = (nodes: VNode[]) => {\n      const arr: Array<TdStepItemProps> = [];\n      nodes?.forEach((node) => {\n        const option = node?.props || {};\n        const children = node?.children;\n        if (!option && !children) return;\n        if (children && isObject(children)) {\n          for (const key in children) {\n            if (key in stepItemProps && !option[key]) {\n              option[key] = children[key];\n            }\n          }\n        }\n        props.sequence === 'reverse' ? arr.unshift(option as TdStepItemProps) : arr.push(option as TdStepItemProps);\n      });\n      return arr;\n    };\n    const getOptions = () => {\n      let options: Array<TdStepItemProps>;\n      if (props.options?.length) {\n        options = props.sequence === 'reverse' ? props.options.slice().reverse() : props.options;\n      } else {\n        const nodes: VNode[] = getChildComponentByName('StepItem') as VNode[];\n        options = getOptionListBySlots(nodes);\n      }\n\n      (options || []).forEach((item, index) => {\n        if (item.value !== undefined) indexMap.value[item.value] = index;\n      });\n      return options;\n    };\n\n    const renderContent = () => {\n      const options = getOptions();\n\n      return options.map((item, index) => {\n        const stepIndex = props.sequence === 'reverse' ? options.length - index - 1 : index;\n        index = item.value !== undefined ? index : stepIndex;\n\n        return <StepItem {...item} index={stepIndex} status={handleStatus(item, index)} key={item.value || index} />;\n      });\n    };\n\n    /** class calculate */\n    const handleTheme = () => {\n      let { theme } = props;\n      const options = getOptions();\n      options.forEach((item) => {\n        if (item?.icon !== undefined) {\n          // icon > theme\n          theme = 'default';\n        }\n      });\n      return theme;\n    };\n    const baseClass = computed(() => {\n      return [\n        COMPONENT_NAME.value,\n        `${COMPONENT_NAME.value}--${props.layout}`,\n        `${COMPONENT_NAME.value}--${handleTheme()}-anchor`,\n        `${COMPONENT_NAME.value}--${props.sequence}`,\n        `${COMPONENT_NAME.value}--${props.separator}-separator`,\n      ];\n    });\n    /** class calculate END */\n\n    return () => <div class={baseClass.value}>{renderContent()}</div>;\n  },\n});\n"],"names":["name","props","innerCurrent","setInnerCurrent","provide","current","setCurrent","console","isObject","option","options","_createVNode","StepItem","_mergeProps","theme"],"mappings":"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"}