{"version":3,"file":"item.mjs","sources":["../../../../../../packages/components/steps/src/item.vue"],"sourcesContent":["<template>\n  <div ref=\"wrapperRef\" :style=\"style\" :class=\"containerKls\">\n    <!-- icon & line -->\n    <div :class=\"[ns.e('head'), ns.is(currentStatus)]\">\n      <div v-if=\"!isSimple\" :class=\"ns.e('line')\" :style=\"lineParentStyle\">\n        <i :class=\"ns.e('line-inner')\" :style=\"lineStyle\" />\n      </div>\n      <div style=\"display: flex; align-items: center; flex-direction: row\">\n        <div\n          ref=\"iconRef\"\n          :class=\"[ns.e('icon'), ns.is(icon || $slots.icon ? 'icon' : 'text')]\"\n        >\n          <slot name=\"icon\">\n            <lt-icon v-if=\"icon\" :class=\"ns.e('icon-inner')\">\n              <component :is=\"icon\" />\n            </lt-icon>\n            <lt-icon\n              v-else-if=\"currentStatus === 'success'\"\n              :class=\"[ns.e('icon-inner'), ns.is('status')]\"\n            >\n              <Check />\n            </lt-icon>\n            <lt-icon\n              v-else-if=\"currentStatus === 'error'\"\n              :class=\"[ns.e('icon-inner'), ns.is('status')]\"\n            >\n              <Close />\n            </lt-icon>\n            <div v-else-if=\"!isSimple\" :class=\"ns.e('icon-inner')\">\n              {{ index + 1 }}\n            </div>\n          </slot>\n        </div>\n        <div\n          ref=\"contentRef\"\n          :class=\"[ns.e('title'), ns.is(currentStatus)]\"\n          :style=\"{\n            width: parent.props.direction === 'vertical' ? '50px' : 'auto',\n            marginLeft: '5px',\n          }\"\n        >\n          <slot name=\"title\">{{ title }}</slot>\n        </div>\n      </div>\n    </div>\n    <!-- title & description -->\n    <div :class=\"ns.e('main')\">\n      <!-- <div :class=\"[ns.e('title'), ns.is(currentStatus)]\">\n        <slot name=\"title\">{{ title }}</slot>\n      </div> -->\n      <div v-if=\"isSimple\" :class=\"ns.e('arrow')\" />\n      <div v-else :class=\"[ns.e('description'), ns.is(currentStatus)]\">\n        <slot name=\"description\">{{ description }}</slot>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  getCurrentInstance,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\nimport { LtIcon } from '@lit-element/components/icon'\nimport { useNamespace } from '@lit-element/hooks'\nimport { isNumber } from '@lit-element/utils'\nimport { Check, Close } from '@inte-cloud/icons-vue'\nimport { stepProps } from './item'\n\nimport type { CSSProperties, Ref } from 'vue'\nexport interface IStepsProps {\n  space: number | string\n  active: number\n  direction: string\n  alignCenter: boolean\n  simple: boolean\n  finishStatus: string\n  processStatus: string\n}\n\nexport interface StepItemState {\n  uid: number\n  currentStatus: string\n  setIndex: (val: number) => void\n  calcProgress: (status: string) => void\n}\n\nexport interface IStepsInject {\n  props: IStepsProps\n  steps: Ref<StepItemState[]>\n  addStep: (item: StepItemState) => void\n  removeStep: (uid: number) => void\n}\n\ndefineOptions({\n  name: 'LtStep',\n})\n\nconst props = defineProps(stepProps)\nconst ns = useNamespace('step')\nconst index = ref(-1)\nconst lineStyle = ref({})\nconst internalStatus = ref('')\nconst parent = inject('LtSteps') as IStepsInject\nconst currentInstance = getCurrentInstance()\n\nconst lineParentStyle = ref({})\nconst contentRef = ref<any>()\nconst wrapperRef = ref<any>()\nconst iconRef = ref<any>()\n\nonMounted(() => {\n  watch(\n    [\n      () => parent.props.active,\n      () => parent.props.processStatus,\n      () => parent.props.finishStatus,\n    ],\n    ([active]) => {\n      updateStatus(active)\n      nextTick(updateStyles)\n    },\n    { immediate: true }\n  )\n})\n\nonBeforeUnmount(() => {\n  parent.removeStep(stepItemState.uid)\n})\n\nconst currentStatus = computed(() => {\n  return props.status || internalStatus.value\n})\n\nconst prevStatus = computed(() => {\n  const prevStep = parent.steps.value[index.value - 1]\n  return prevStep ? prevStep.currentStatus : 'wait'\n})\n\nconst isCenter = computed(() => {\n  return parent.props.alignCenter\n})\n\nconst isVertical = computed(() => {\n  return parent.props.direction === 'vertical'\n})\n\nconst isSimple = computed(() => {\n  return parent.props.simple\n})\n\nconst stepsCount = computed(() => {\n  return parent.steps.value.length\n})\n\nconst isLast = computed(() => {\n  return parent.steps.value[stepsCount.value - 1]?.uid === currentInstance?.uid\n})\n\nconst space = computed(() => {\n  return isSimple.value ? '' : parent.props.space\n})\n\nconst containerKls = computed(() => {\n  return [\n    ns.b(),\n    ns.is(isSimple.value ? 'simple' : parent.props.direction),\n    ns.is('flex', isLast.value && !space.value && !isCenter.value),\n    ns.is('center', isCenter.value && !isVertical.value && !isSimple.value),\n  ]\n})\n\nconst style = computed(() => {\n  const style: CSSProperties = {\n    flexBasis: isNumber(space.value)\n      ? `${space.value}px`\n      : space.value\n      ? space.value\n      : `${100 / (stepsCount.value - (isCenter.value ? 0 : 1))}%`,\n  }\n  if (isVertical.value) return style\n  if (isLast.value) {\n    style.maxWidth = `${100 / stepsCount.value}%`\n  }\n  return style\n})\n\nconst setIndex = (val: number) => {\n  index.value = val\n}\n\nconst calcProgress = (status: string) => {\n  const isWait = status === 'wait'\n  const style: CSSProperties = {\n    transitionDelay: `${isWait ? '-' : ''}${150 * index.value}ms`,\n  }\n  const step = status === parent.props.processStatus || isWait ? 0 : 100\n\n  style.borderWidth = step && !isSimple.value ? '1px' : 0\n  style[parent.props.direction === 'vertical' ? 'height' : 'width'] = `${step}%`\n  lineStyle.value = style\n}\n\nconst updateStatus = (activeIndex: number) => {\n  if (activeIndex > index.value) {\n    internalStatus.value = parent.props.finishStatus\n  } else if (activeIndex === index.value && prevStatus.value !== 'error') {\n    internalStatus.value = parent.props.processStatus\n  } else {\n    internalStatus.value = 'wait'\n  }\n  const prevChild = parent.steps.value[index.value - 1]\n  if (prevChild) prevChild.calcProgress(internalStatus.value)\n}\n\n// 调整element-ui的样式\nconst updateStyles = () => {\n  const vertical = parent.props.direction === 'vertical'\n  const wrapperWidth = wrapperRef.value.clientWidth // 最外层的宽度\n  const contentWidth = contentRef.value.clientWidth // 内容的宽度\n  const contentHeight = contentRef.value.clientHeight // 内容的高度\n  const iconWidth = iconRef.value.clientWidth // icon的宽度\n  const iconHeight = iconRef.value.clientHeight // icon的高度\n\n  iconRef.value.style.margin = vertical ? '10px 0' : '0' // 设置icon的margin\n\n  lineParentStyle.value = {\n    height: vertical ? `$calc(${contentRef.value.clientHeight}px / 2)` : '1px', // 1px 横线的宽度\n    width: vertical\n      ? '1px'\n      : `calc(${wrapperWidth}px - ${contentWidth}px - ${iconWidth}px - 15px - 10px)`, // 15px 是横线距离icon的左边距，10px 是icon的右边距\n    left: vertical\n      ? `calc(${iconWidth}px / 2)`\n      : `calc(${contentWidth}px + 15px + ${iconWidth}px)`, //15px 是横线距离icon的左边距，左移需要加上\n    top: vertical\n      ? `calc(${iconHeight}px + 20px)` // 20px 是竖线距离icon的上边距10px和下边距10px，下移需要加20px\n      : `calc(${contentHeight}px / 2)`,\n  }\n}\n\nconst stepItemState = reactive({\n  uid: currentInstance!.uid,\n  currentStatus,\n  setIndex,\n  calcProgress,\n})\n\nparent.addStep(stepItemState)\n</script>\n"],"names":["style","_openBlock","_createElementBlock"],"mappings":"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"}