UNPKG

hongluan-business-ui

Version:
1 lines 5.55 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/text-overflow/src/index.vue"],"sourcesContent":["<template>\n <hl-popover\n tooltip\n popper-class=\"text-overflow-poppper\"\n :placement=\"placement\"\n :effect=\"effect\"\n :disabled=\"disabled\"\n :width=\"width\"\n >\n <template #reference>\n <span\n ref=\"textContentRef\"\n :class=\"prefix + '-text-overflow'\"\n v-bind=\"$attrs\"\n >\n <slot></slot>\n </span>\n </template>\n <div class=\"text-overflow-content\" v-html=\"tooltipContent\"></div>\n </hl-popover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onBeforeUnmount, nextTick } from 'vue'\nimport { HlPopover } from 'hongluan-ui'\nimport { getStyle } from '@hongluan-business-ui/utils/dom'\nimport { usePrefix } from '@hongluan-business-ui/utils/util'\n\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n name: 'TextOverflow',\n components: {\n HlPopover,\n },\n inheritAttrs: false,\n props: {\n effect: {\n type: String as PropType<'light' | 'dark'>,\n default: 'light',\n },\n placement: {\n type: String,\n default: 'top',\n },\n width: [String, Number],\n method: {\n type: String as PropType<'width' | 'length' | 'autoWidth'>,\n default: 'width',\n },\n length: {\n type: Number,\n default: -1,\n },\n },\n setup(props) {\n const { prefix } = usePrefix()\n const tooltipContent = ref(undefined)\n const textContentRef = ref<HTMLElement>(null)\n const disabled = ref(false)\n\n const cutTextContent = () => {\n unobserveDom()\n const text = textContentRef.value.innerText || textContentRef.value.textContent\n tooltipContent.value = text\n if (props.method === 'length' && props.length !== -1) {\n if (text.length > props.length) {\n // 两边各有一个空白节点\n textContentRef.value.childNodes[1].nodeValue = text.substr(0, props.length) + '...'\n disabled.value = false\n } else {\n disabled.value = true\n }\n } else if (props.method === 'width' || props.method === 'autoWidth') {\n const cellChild = textContentRef.value\n const range = document.createRange()\n range.setStart(cellChild, 0)\n range.setEnd(cellChild, cellChild.childNodes.length)\n const rangeWidth = range.getBoundingClientRect().width - 1\n const padding = (parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0)\n + (parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0)\n if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth)) {\n disabled.value = false\n } else {\n disabled.value = true\n }\n }\n observeDom()\n }\n\n const observeDom = () => {\n observer.observe(textContentRef.value, {\n characterData: true,\n childList: true,\n subtree: true,\n })\n }\n const unobserveDom = () => {\n observer.disconnect()\n }\n\n const observer = new MutationObserver(cutTextContent)\n\n onMounted(() => {\n if (props.method === 'autoWidth' && props.length > 0) {\n textContentRef.value.style.maxWidth = `${props.length}em`\n nextTick(() => {\n cutTextContent()\n })\n } else {\n cutTextContent()\n }\n })\n\n onBeforeUnmount(() => {\n unobserveDom()\n })\n\n return {\n prefix,\n tooltipContent,\n textContentRef,\n disabled,\n }\n },\n})\n</script>\n"],"names":["_createBlock","_withCtx","_createElementVNode","_mergeProps","_renderSlot"],"mappings":";;;;;;AA8BA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA;AAAA,EAEF,cAAc;AAAA,EACd,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,OAAO,CAAC,QAAQ;AAAA,IAChB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA,EAGb,MAAM,OAAO;AACX,UAAM,EAAE,WAAW;AACnB,UAAM,iBAAiB,IAAI;AAC3B,UAAM,iBAAiB,IAAiB;AACxC,UAAM,WAAW,IAAI;AAErB,UAAM,iBAAiB,MAAM;AAC3B;AACA,YAAM,OAAO,eAAe,MAAM,aAAa,eAAe,MAAM;AACpE,qBAAe,QAAQ;AACvB,UAAI,MAAM,WAAW,YAAY,MAAM,WAAW,IAAI;AACpD,YAAI,KAAK,SAAS,MAAM,QAAQ;AAE9B,yBAAe,MAAM,WAAW,GAAG,YAAY,KAAK,OAAO,GAAG,MAAM,UAAU;AAC9E,mBAAS,QAAQ;AAAA,eACZ;AACL,mBAAS,QAAQ;AAAA;AAAA,iBAEV,MAAM,WAAW,WAAW,MAAM,WAAW,aAAa;AACnE,cAAM,YAAY,eAAe;AACjC,cAAM,QAAQ,SAAS;AACvB,cAAM,SAAS,WAAW;AAC1B,cAAM,OAAO,WAAW,UAAU,WAAW;AAC7C,cAAM,aAAa,MAAM,wBAAwB,QAAQ;AACzD,cAAM,UAAW,UAAS,SAAS,WAAW,gBAAgB,OAAO,eACvD,SAAS,WAAW,iBAAiB,OAAO;AAC1D,YAAK,aAAa,UAAU,UAAU,eAAe,UAAU,cAAc,UAAU,aAAc;AACnG,mBAAS,QAAQ;AAAA,eACZ;AACL,mBAAS,QAAQ;AAAA;AAAA;AAGrB;AAAA;AAGF,UAAM,aAAa,MAAM;AACvB,eAAS,QAAQ,eAAe,OAAO;AAAA,QACrC,eAAe;AAAA,QACf,WAAW;AAAA,QACX,SAAS;AAAA;AAAA;AAGb,UAAM,eAAe,MAAM;AACzB,eAAS;AAAA;AAGX,UAAM,WAAW,IAAI,iBAAiB;AAEtC,cAAU,MAAM;AACd,UAAI,MAAM,WAAW,eAAe,MAAM,SAAS,GAAG;AACpD,uBAAe,MAAM,MAAM,WAAW,GAAG,MAAM;AAC/C,iBAAS,MAAM;AACb;AAAA;AAAA,aAEG;AACL;AAAA;AAAA;AAIJ,oBAAgB,MAAM;AACpB;AAAA;AAGF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;sBAzHJA,YAkBa;AAAA,IAjBX;AAAA,IACA,gBAAa;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA;IAEG,WAASC,QAClB,MAMO;AAAA,MANPC,mBAMO,QANPC,WAMO;AAAA,QALL,KAAI;AAAA,QACH,OAAO,cAAM;AAAA,SACN,cAAM;AAAA,QAEdC,WAAa;AAAA;;qBAGjB,MAAiE;AAAA,MAAjEF,mBAAiE;AAAA,QAA5D,OAAM;AAAA,QAAwB,WAAQ;AAAA;;;;;;;;;"}