{"version":3,"file":"label-wrap.mjs","sources":["../../../../../../packages/components/form/src/label-wrap.ts"],"sourcesContent":["import {\n  defineComponent,\n  Fragment,\n  h,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  onUpdated,\n  ref,\n  watch,\n} from 'vue'\nimport { addResizeListener, removeResizeListener } from '@element-plus/utils'\nimport { elFormItemKey, elFormKey } from '@element-plus/tokens'\nimport type { ResizableElement, Nullable } from '@element-plus/utils'\n\nimport type { CSSProperties } from 'vue'\n\nexport default defineComponent({\n  name: 'ElLabelWrap',\n  props: {\n    isAutoWidth: Boolean,\n    updateAll: Boolean,\n  },\n  setup(props, { slots }) {\n    const el = ref<Nullable<HTMLElement>>(null)\n    const elForm = inject(elFormKey)\n    const elFormItem = inject(elFormItemKey)\n\n    const computedWidth = ref(0)\n    watch(computedWidth, (val, oldVal) => {\n      if (props.updateAll) {\n        elForm.registerLabelWidth(val, oldVal)\n        elFormItem.updateComputedLabelWidth(val)\n      }\n    })\n\n    const getLabelWidth = () => {\n      if (el.value?.firstElementChild) {\n        const width = window.getComputedStyle(el.value.firstElementChild).width\n        return Math.ceil(parseFloat(width))\n      } else {\n        return 0\n      }\n    }\n    const updateLabelWidth = (action = 'update') => {\n      nextTick(() => {\n        if (slots.default && props.isAutoWidth) {\n          if (action === 'update') {\n            computedWidth.value = getLabelWidth()\n          } else if (action === 'remove') {\n            elForm.deregisterLabelWidth(computedWidth.value)\n          }\n        }\n      })\n    }\n    const updateLabelWidthFn = () => updateLabelWidth('update')\n\n    onMounted(() => {\n      addResizeListener(\n        el.value.firstElementChild as ResizableElement,\n        updateLabelWidthFn\n      )\n      updateLabelWidthFn()\n    })\n\n    onUpdated(updateLabelWidthFn)\n\n    onBeforeUnmount(() => {\n      updateLabelWidth('remove')\n      removeResizeListener(\n        el.value?.firstElementChild as ResizableElement,\n        updateLabelWidthFn\n      )\n    })\n\n    function render() {\n      if (!slots) return null\n      if (props.isAutoWidth) {\n        const autoLabelWidth = elForm.autoLabelWidth\n        const style = {} as CSSProperties\n        if (autoLabelWidth && autoLabelWidth !== 'auto') {\n          const marginWidth = Math.max(\n            0,\n            parseInt(autoLabelWidth, 10) - computedWidth.value\n          )\n          const marginPosition =\n            elForm.labelPosition === 'left' ? 'marginRight' : 'marginLeft'\n          if (marginWidth) {\n            style[marginPosition] = `${marginWidth}px`\n          }\n        }\n        return h(\n          'div',\n          {\n            ref: el,\n            class: ['el-form-item__label-wrap'],\n            style,\n          },\n          slots.default?.()\n        )\n      } else {\n        return h(Fragment, { ref: el }, slots.default?.())\n      }\n    }\n\n    return render\n  },\n})\n"],"names":[],"mappings":"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"}