UNPKG

ideaz-element

Version:

<p align="center"> <a href="" target="_blank" rel="noopener noreferrer"> <img src="./docs/public/logo.svg" alt="Ideaz Element" width="180" style="width: 180px;" /> </a> </p>

1 lines 6.71 kB
{"version":3,"file":"index.cjs","sources":["../../../../../packages/element/text/src/index.tsx"],"sourcesContent":["import { resolveDynamicComponent } from '@ideaz/shared'\nimport { cutStrByFullLength, getStrFullLength, getStyle, isObject, isValid } from '@ideaz/utils'\nimport { ElTooltip } from 'element-plus'\nimport { textProps } from './text'\n\nexport default defineComponent({\n name: 'ZText',\n props: textProps,\n setup(props, { slots }) {\n const ns = useNamespace('text', ref('el'))\n const size = useFormSize()\n\n const zText = ref()\n const computedReady = ref(false)\n const oversize = ref(false)\n const computedText = ref('')\n const textRef = ref()\n const moreRef = ref()\n\n const textKls = computed<string[]>(() => [\n ns.b(),\n ns.m(props.type),\n ns.m(size.value),\n ns.is('truncated', props.truncated),\n ])\n\n const getText = () => {\n return props.value || props.text || (slots.default?.()[0].children as string)\n }\n\n const computeText = async () => {\n oversize.value = false\n computedReady.value = false\n await nextTick()\n const $text = textRef.value\n const $el = zText.value\n const $more = moreRef.value\n let n = 1000\n let text = getText()\n let height = props.height || 0\n\n // When height is undefined and lines are defined, calculate the true height, otherwise use props.height\n if (!height && props.lines) {\n const lineHeight = Number.parseInt(getStyle($el, 'lineHeight') || '', 10) || 24\n height = lineHeight * props.lines\n }\n if ($text) {\n // If length is specified, it is tailored to the specific number of words\n if (props.length) {\n const textLength = props.fullWidthRecognition ? getStrFullLength(text) : text.length\n if (textLength > props.length) {\n oversize.value = true\n $more.style.display = 'inline-block'\n text = props.fullWidthRecognition ? cutStrByFullLength(text, props.length) : text.slice(0, props.length)\n }\n }\n else {\n if ($el.offsetHeight > height) {\n oversize.value = true\n $more.style.display = 'inline-block'\n while ($el.offsetHeight > height && n > 0) {\n if ($el.offsetHeight > height * 3)\n $text.textContent = text = text.substring(0, Math.floor(text.length / 2))\n else\n $text.textContent = text = text.substring(0, text.length - 1)\n\n n--\n }\n }\n }\n }\n\n computedText.value = text\n limitShow()\n }\n\n async function limitShow() {\n computedReady.value = true\n await nextTick()\n const $text = textRef.value\n // const $el = zText.value\n if ($text)\n $text.textContent = computedText.value\n // if ($el.offsetHeight > this.height)\n // emit('on-hide')\n // else\n // this.$emit('on-show')\n }\n\n onMounted(() => {\n if (isValid(props.length) || isValid(props.lines))\n computeText()\n })\n\n return () => {\n const { tag } = props\n const tooltipConfig = isObject(props.tooltip) ? props.tooltip : {}\n return resolveDynamicComponent({\n name: tag,\n attrs: {\n class: textKls.value,\n ref: zText,\n },\n content: (() => {\n if (computedReady.value) {\n if (oversize.value) {\n return (\n <ElTooltip content={getText()} {...tooltipConfig}>\n <div>\n <span ref={textRef}>{getText()}</span>\n <span v-show={oversize.value} ref={moreRef}>...</span>\n </div>\n </ElTooltip>\n )\n }\n else {\n return (\n <>\n <span ref={textRef}>{getText()}</span>\n <span v-show={oversize.value} ref={moreRef}>...</span>\n </>\n )\n }\n }\n else {\n return (\n <>\n <span ref={textRef}>{getText()}</span>\n <span v-show={oversize.value} ref={moreRef}>...</span>\n </>\n )\n }\n })(),\n })\n }\n },\n})\n"],"names":["Text","vue","name","props","slots","size","useFormSize","zText","computedReady","oversize","computedText","textRef","moreRef","textKls","ns","_a","computeText","$text","$el","$more","text","getText","height","getStyle","string","n","limitShow","onMounted","is","tag","tooltipConfig","resolveDynamicComponent","attrs","ref","elementPlus","default"],"mappings":"0aAKAA,EAAAC,EAAA,gBAAA,CACEC,KAAAA,QACAC,MAAAA,EAAAA,mBACeC,MAAAA,CAAM,EAAA,4CAEnBC,EAAAC,EAAA,YAAA,EAEAC,EAAAN,EAAA,IAAA,EACAO,EAAAP,EAAA,IAAA,EAAA,EACAQ,EAAAR,EAAA,IAAA,EAAA,EACAS,EAAAT,EAAA,IAAA,EAAA,EACAU,EAAAV,EAAA,IAAA,EACAW,EAAAX,EAAA,IAAA,EAEAY,EAAAZ,EAAA,SAAA,IAAA,CAAAa,EAAA,EAAA,EAAAA,EAAA,EAAAX,EAAA,IAAA,EAAAW,EAAA,EAAAT,EAAA,KAAA,EAAAS,EAAA,GAAA,YAAAX,EAAA,SAAA,CAAA,CAAA,eAQE,OAAAA,EAAA,OAAAA,EAAA,QAAAY,EAAAX,EAAA,UAAA,YAAAW,EAAA,KAAAX,GAAA,GAAA,WAGFY,EAAA,SAAA,0CAIE,MAAAC,EAAAN,EAAA,MACAO,EAAAX,EAAA,MACAY,EAAAP,EAAA,gBAEAQ,EAAAC,EAAA,EACAC,EAAAnB,EAAA,QAAA,EAOA,GAJA,CAAAmB,GAAAnB,EAAA,QAEEmB,GADA,OAAA,SAAAC,EAAA,SAAAL,EAAA,YAAA,GAAA,GAAA,EAAA,GAAA,IACAI,EAAAA,OAEFL,gBAGId,EAAA,qBAAAqB,EAAA,iBAAAJ,CAAA,EAAAA,EAAA,QACAjB,EAAA,oBAEEgB,EAAAA,MAAAA,QAAAA,sGAKFD,EAAA,aAAAI,iBAEEH,EAAAA,MAAAA,QAAAA,yJAOEM,cAORC,EAAAA,oDAMA,MAAAT,EAAAN,EAAA,gCAQF,CAEAgB,OAAAA,EAAAA,UAAAA,IAAAA,EACEC,EAAA,QAAAzB,EAAA,MAAA,GAAAyB,EAAA,QAAAzB,EAAA,KAAA,IAAAa,EAAA,CAEF,CAAA,EAEA,IAAA,OACUa,IAAAA,CAAI,EAAA1B,EACZ2B,EAAAF,EAAA,SAAAzB,EAAA,OAAA,EAAAA,EAAA,QAAA,CAAA,EACA,OAAA4B,EAAA,wBAAA,CACE7B,KAAAA,EACA8B,MAAAA,eAEEC,IAAAA,2BAKIhC,EAAA,YAAAiC,EAAA,UAAAjC,EAAA,WAAA,CAAA,QAAAoB,EAAA,CAC+B,EAAAS,CAAA,EAAA,CAAmBK,QAAAA,IAAAA,CAAAA,EAAAA,YAAAA,MAAAA,KAAAA,CAAAA,EAAAA,YAAAA,OAAAA,MAE1B,EAAA,CAAAd,EAAA,CAAA,CAAA,EAAApB,EAAA,eAAAA,EAAA,YAAA,OAAA,MACwB,EAAA,CAAAA,EAAA,gBAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAAA,EAAA,MAAAQ,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAd,CAAA,EAMlCR,EAAA,YAAAA,EAAA,SAAA,KAAA,CAAAA,EAAA,YAAA,OAAA,MAEsB,EAAA,CAAAoB,EAAA,CAAA,CAAA,EAAApB,EAAA,eAAAA,EAAA,YAAA,OAAA,MACwB,EAAA,CAAAA,EAAA,gBAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAAA,EAAA,MAAAQ,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,EAMhDR,EAAA,YAAAA,EAAA,SAAA,KAAA,CAAAA,EAAA,YAAA,OAAA,MAEsB,EAAA,CAAAoB,EAAA,CAAA,CAAA,EAAApB,EAAA,eAAAA,EAAA,YAAA,OAAA,MACwB,EAAA,CAAAA,EAAA,gBAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAAA,EAAA,MAAAQ,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAKpD,CAAA,EAEJ,CACF,CAAA"}