element-plus
Version:
A Component Library for Vue 3
1 lines • 7.76 kB
Source Map (JSON)
{"version":3,"file":"form-label-wrap.mjs","sources":["../../../../../../packages/components/form/src/form-label-wrap.tsx"],"sourcesContent":["import {\n Fragment,\n computed,\n defineComponent,\n inject,\n nextTick,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n ref,\n watch,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { throwError } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { formContextKey, formItemContextKey } from './constants'\n\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'ElLabelWrap'\nexport default defineComponent({\n name: COMPONENT_NAME,\n props: {\n isAutoWidth: Boolean,\n updateAll: Boolean,\n },\n\n setup(props, { slots }) {\n const formContext = inject(formContextKey, undefined)\n const formItemContext = inject(formItemContextKey)\n if (!formItemContext)\n throwError(\n COMPONENT_NAME,\n 'usage: <el-form-item><label-wrap /></el-form-item>'\n )\n\n const ns = useNamespace('form')\n\n const el = ref<HTMLElement>()\n const computedWidth = ref(0)\n\n const getLabelWidth = () => {\n if (el.value?.firstElementChild) {\n const width = window.getComputedStyle(el.value.firstElementChild).width\n return Math.ceil(Number.parseFloat(width))\n } else {\n return 0\n }\n }\n\n const updateLabelWidth = (action: 'update' | 'remove' = 'update') => {\n nextTick(() => {\n if (slots.default && props.isAutoWidth) {\n if (action === 'update') {\n computedWidth.value = getLabelWidth()\n } else if (action === 'remove') {\n formContext?.deregisterLabelWidth(computedWidth.value)\n }\n }\n })\n }\n const updateLabelWidthFn = () => updateLabelWidth('update')\n\n onMounted(() => {\n updateLabelWidthFn()\n })\n onBeforeUnmount(() => {\n updateLabelWidth('remove')\n })\n onUpdated(() => updateLabelWidthFn())\n\n watch(computedWidth, (val, oldVal) => {\n if (props.updateAll) {\n formContext?.registerLabelWidth(val, oldVal)\n }\n })\n\n useResizeObserver(\n computed(\n () => (el.value?.firstElementChild ?? null) as HTMLElement | null\n ),\n updateLabelWidthFn\n )\n\n return () => {\n if (!slots) return null\n\n const { isAutoWidth } = props\n if (isAutoWidth) {\n const autoLabelWidth = formContext?.autoLabelWidth\n const hasLabel = formItemContext?.hasLabel\n const style: CSSProperties = {}\n if (hasLabel && autoLabelWidth && autoLabelWidth !== 'auto') {\n const marginWidth = Math.max(\n 0,\n Number.parseInt(autoLabelWidth, 10) - computedWidth.value\n )\n const labelPosition =\n formItemContext.labelPosition || formContext.labelPosition\n\n const marginPosition =\n labelPosition === 'left' ? 'marginRight' : 'marginLeft'\n\n if (marginWidth) {\n style[marginPosition] = `${marginWidth}px`\n }\n }\n return (\n <div ref={el} class={[ns.be('item', 'label-wrap')]} style={style}>\n {slots.default?.()}\n </div>\n )\n } else {\n return <Fragment ref={el}>{slots.default?.()}</Fragment>\n }\n }\n },\n})\n"],"names":["COMPONENT_NAME","defineComponent","name","props","isAutoWidth","Boolean","updateAll","setup","slots","formContext","inject","formContextKey","undefined","formItemContext","formItemContextKey","throwError","ns","useNamespace","el","ref","computedWidth","getLabelWidth","value","firstElementChild","width","window","getComputedStyle","Math","ceil","Number","parseFloat","updateLabelWidth","action","nextTick","default","deregisterLabelWidth","updateLabelWidthFn","onMounted","onBeforeUnmount","onUpdated","watch","val","oldVal","registerLabelWidth","useResizeObserver","computed","autoLabelWidth","hasLabel","style","marginWidth","max","parseInt","labelPosition","marginPosition","_createVNode","be","_Fragment"],"mappings":"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"}