element-plus
Version:
A Component Library for Vue 3
1 lines • 7.5 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","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":";;;;;;AAmBA,MAAMA,cAAAA,GAAiB,aAAA;AACvB,oDAA+B;AAAA,EAC7BC,IAAAA,EAAMD,cAAAA;AAAAA,EACNE,KAAAA,EAAO;AAAA,IACLC,WAAAA,EAAaC,OAAAA;AAAAA,IACbC,SAAAA,EAAWD;AAAAA,GACb;AAAA,EAEAE,MAAMJ,KAAAA,EAAO;AAAA,IAAEK;AAAAA,GAAM,EAAG;AACtB,IAAA,MAAMC,WAAAA,GAAcC,MAAAA,CAAOC,cAAAA,EAAgBC,MAAS,CAAA;AACpD,IAAA,MAAMC,eAAAA,GAAkBH,OAAOI,kBAAkB,CAAA;AACjD,IAAA,IAAI,CAACD,eAAAA,EACHE,UAAAA,CACEd,cAAAA,EACA,oDACF,CAAA;AAEF,IAAA,MAAMe,EAAAA,GAAKC,aAAa,MAAM,CAAA;AAE9B,IAAA,MAAMC,KAAKC,GAAAA,EAAiB;AAC5B,IAAA,MAAMC,aAAAA,GAAgBD,IAAI,CAAC,CAAA;AAE3B,IAAA,MAAME,gBAAgBA,MAAM;AAzChC,MAAA,IAAA,EAAA;AA0CM,MAAA,IAAA,CAAIH,EAAAA,GAAAA,EAAAA,CAAGI,KAAAA,KAAHJ,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAUK,iBAAAA,EAAmB;AAC/B,QAAA,MAAMC,QAAQC,MAAAA,CAAOC,gBAAAA,CAAiBR,EAAAA,CAAGI,KAAAA,CAAMC,iBAAiB,CAAA,CAAEC,KAAAA;AAClE,QAAA,OAAOG,IAAAA,CAAKC,IAAAA,CAAKC,MAAAA,CAAOC,UAAAA,CAAWN,KAAK,CAAC,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF,CAAA;AAEA,IAAA,MAAMO,gBAAAA,GAAmBA,CAACC,MAAAA,GAA8B,QAAA,KAAa;AACnEC,MAAAA,QAAAA,CAAS,MAAM;AACb,QAAA,IAAIzB,KAAAA,CAAM0B,OAAAA,IAAW/B,KAAAA,CAAMC,WAAAA,EAAa;AACtC,UAAA,IAAI4B,WAAW,QAAA,EAAU;AACvBZ,YAAAA,aAAAA,CAAcE,QAAQD,aAAAA,EAAc;AAAA,UACtC,CAAA,MAAA,IAAWW,WAAW,QAAA,EAAU;AAC9BvB,YAAAA,WAAAA,IAAAA,IAAAA,GAAAA,MAAAA,GAAAA,WAAAA,CAAa0B,qBAAqBf,aAAAA,CAAcE,KAAAA,CAAAA;AAAAA,UAClD;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AACA,IAAA,MAAMc,kBAAAA,GAAqBA,MAAML,gBAAAA,CAAiB,QAAQ,CAAA;AAE1DM,IAAAA,SAAAA,CAAU,MAAM;AACdD,MAAAA,kBAAAA,EAAmB;AAAA,IACrB,CAAC,CAAA;AACDE,IAAAA,eAAAA,CAAgB,MAAM;AACpBP,MAAAA,gBAAAA,CAAiB,QAAQ,CAAA;AAAA,IAC3B,CAAC,CAAA;AACDQ,IAAAA,SAAAA,CAAU,MAAMH,oBAAoB,CAAA;AAEpCI,IAAAA,KAAAA,CAAMpB,aAAAA,EAAe,CAACqB,GAAAA,EAAKC,MAAAA,KAAW;AACpC,MAAA,IAAIvC,MAAMG,SAAAA,EAAW;AACnBG,QAAAA,WAAAA,IAAAA,IAAAA,GAAAA,MAAAA,GAAAA,WAAAA,CAAakC,mBAAmBF,GAAAA,EAAKC,MAAAA,CAAAA;AAAAA,MACvC;AAAA,IACF,CAAC,CAAA;AAEDE,IAAAA,iBAAAA,CACEC,SACE,MAAA;AA/ER,MAAA,IAAA,EAAA,EAAA,EAAA;AA+Ee3B,MAAAA,OAAAA,CAAAA,EAAAA,GAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAGI,KAAAA,KAAHJ,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAUK,iBAAAA,KAAVL,IAAAA,GAAAA,EAAAA,GAA+B,IAAA;AAAA,IAAA,CACxC,GACAkB,kBACF,CAAA;AAEA,IAAA,OAAO,MAAM;AApFjB,MAAA,IAAA,EAAA,EAAA,EAAA;AAqFM,MAAA,IAAI,CAAC5B,OAAO,OAAO,IAAA;AAEnB,MAAA,MAAM;AAAA,QAAEJ;AAAAA,OAAY,GAAID,KAAAA;AACxB,MAAA,IAAIC,WAAAA,EAAa;AACf,QAAA,MAAM0C,iBAAiBrC,WAAAA,IAAAA,IAAAA,GAAAA,MAAAA,GAAAA,WAAAA,CAAaqC,cAAAA;AACpC,QAAA,MAAMC,WAAWlC,eAAAA,IAAAA,IAAAA,GAAAA,MAAAA,GAAAA,eAAAA,CAAiBkC,QAAAA;AAClC,QAAA,MAAMC,QAAuB,EAAC;AAC9B,QAAA,IAAID,QAAAA,IAAYD,cAAAA,IAAkBA,cAAAA,KAAmB,MAAA,EAAQ;AAC3D,UAAA,MAAMG,WAAAA,GAActB,IAAAA,CAAKuB,GAAAA,CACvB,CAAA,EACArB,MAAAA,CAAOsB,SAASL,cAAAA,EAAgB,EAAE,CAAA,GAAI1B,aAAAA,CAAcE,KACtD,CAAA;AACA,UAAA,MAAM8B,aAAAA,GACJvC,eAAAA,CAAgBuC,aAAAA,IAAiB3C,WAAAA,CAAY2C,aAAAA;AAE/C,UAAA,MAAMC,cAAAA,GACJD,aAAAA,KAAkB,MAAA,GAAS,aAAA,GAAgB,YAAA;AAE7C,UAAA,IAAIH,WAAAA,EAAa;AACfD,YAAAA,KAAAA,CAAMK,cAAc,CAAA,GAAI,CAAA,EAAGJ,WAAW,CAAA,EAAA,CAAA;AAAA,UACxC;AAAA,QACF;AACA,QAAA,OAAAK,YAAA,KAAA,EAAA;AAAA,UAAA,KAAA,EACYpC,EAAAA;AAAAA,UAAE,SAAS,CAACF,EAAAA,CAAGuC,EAAAA,CAAG,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,UAAC,OAAA,EAASP;AAAAA,SAAK,EAAA,CAAA,CAC7DxC,EAAAA,GAAAA,KAAAA,CAAM0B,OAAAA,KAAN1B,8BAAiB,CAAA,CAAA;AAAA,MAGxB,CAAA,MAAO;AACL,QAAA,OAAA8C,YAAAE,QAAAA,EAAA;AAAA,UAAA,KAAA,EAAsBtC;AAAAA,SAAE,EAAA,CAAA,CAAGV,EAAAA,GAAAA,KAAAA,CAAM0B,OAAAA,KAAN1B,8BAAiB,CAAA,CAAA;AAAA,MAC9C;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;;;"}