UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.03 kB
{"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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"}