UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

73 lines 8.21 kB
import { TooltipDirective } from '@alauda/ui'; import { Directive, HostListener, Input, inject } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@alauda/ui"; const CLONE_ELEMENT_BASE_STYLES = { position: 'absolute', visibility: 'hidden', zIndex: -999, }; /** * 使用场景: * 文案需要单行显示,过长时截取的情况。 * 效果: * 发生截取的文案会显示完整内容的 tooltip。未发生截取的文案不显示 tooltip。 * @example: * <span class="tw-text-overflow" aclTextTooltip>TEXT...</span> * * tooltip 的一些设置(位置、类型)可以使用 aui 相同设置。未传 tooltip content 则取元素 text content */ export class TextTooltipDirective { constructor() { this.tooltipDirective = inject(TooltipDirective); } onMouseEnter(e) { const el = e.target; const displayWidth = el.offsetWidth; const fullWidth = this.calcFullTextWidth(el); this.tooltipDirective.content = this.content || el.textContent; this.tooltipDirective.disabled = fullWidth <= displayWidth; } calcFullTextWidth(el) { const computedStyle = window.getComputedStyle(el); const contentContainer = document.createElement('div'); contentContainer.textContent = this.content || el.textContent; Object.assign(contentContainer.style, { ...CLONE_ELEMENT_BASE_STYLES, fontSize: computedStyle.fontSize, fontWeight: computedStyle.fontWeight, }); document.body.append(contentContainer); const width = contentContainer.offsetWidth; contentContainer.remove(); return width; } static { this.ɵfac = function TextTooltipDirective_Factory(t) { return new (t || TextTooltipDirective)(); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TextTooltipDirective, selectors: [["", "aclTextTooltip", ""]], hostBindings: function TextTooltipDirective_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("mouseenter", function TextTooltipDirective_mouseenter_HostBindingHandler($event) { return ctx.onMouseEnter($event); }); } }, inputs: { content: [0, "aclTextTooltip", "content"] }, standalone: true, features: [i0.ɵɵHostDirectivesFeature([{ directive: i1.TooltipDirective, inputs: ["auiTooltip", "aclTextTooltip", "auiTooltipPosition", "auiTooltipPosition", "auiTooltipType", "auiTooltipType"] }])] }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextTooltipDirective, [{ type: Directive, args: [{ selector: '[aclTextTooltip]', hostDirectives: [ { directive: TooltipDirective, inputs: [ 'auiTooltip:aclTextTooltip', 'auiTooltipPosition', 'auiTooltipType', ], }, ], standalone: true, }] }], null, { content: [{ type: Input, args: ['aclTextTooltip'] }], onMouseEnter: [{ type: HostListener, args: ['mouseenter', ['$event']] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3dpZGdldC90ZXh0LXRvb2x0aXAvZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFFdkUsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxRQUFRLEVBQUUsVUFBVTtJQUNwQixVQUFVLEVBQUUsUUFBUTtJQUNwQixNQUFNLEVBQUUsQ0FBQyxHQUFHO0NBQ2IsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQWVILE1BQU0sT0FBTyxvQkFBb0I7SUFkakM7UUEyQkUscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FnQjdDO0lBeEJDLFlBQVksQ0FBQyxDQUFhO1FBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFxQixDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsU0FBUyxJQUFJLFlBQVksQ0FBQztJQUM3RCxDQUFDO0lBSU8saUJBQWlCLENBQUMsRUFBZTtRQUN2QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDOUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDcEMsR0FBRyx5QkFBeUI7WUFDNUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtTQUNyQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUMzQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7cUZBNUJVLG9CQUFvQjtvRUFBcEIsb0JBQW9CO1lBQXBCLHlHQUFBLHdCQUFvQixJQUFBOzs7aUZBQXBCLG9CQUFvQjtjQWRoQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsY0FBYyxFQUFFO29CQUNkO3dCQUNFLFNBQVMsRUFBRSxnQkFBZ0I7d0JBQzNCLE1BQU0sRUFBRTs0QkFDTiwyQkFBMkI7NEJBQzNCLG9CQUFvQjs0QkFDcEIsZ0JBQWdCO3lCQUNqQjtxQkFDRjtpQkFDRjtnQkFDRCxVQUFVLEVBQUUsSUFBSTthQUNqQjtnQkFHQyxPQUFPO2tCQUROLEtBQUs7bUJBQUMsZ0JBQWdCO1lBSXZCLFlBQVk7a0JBRFgsWUFBWTttQkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBDTE9ORV9FTEVNRU5UX0JBU0VfU1RZTEVTID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIHpJbmRleDogLTk5OSxcbn07XG5cbi8qKlxuICog5L2/55So5Zy65pmv77yaXG4gKiDmlofmoYjpnIDopoHljZXooYzmmL7npLrvvIzov4fplb/ml7bmiKrlj5bnmoTmg4XlhrXjgIJcbiAqIOaViOaenO+8mlxuICog5Y+R55Sf5oiq5Y+W55qE5paH5qGI5Lya5pi+56S65a6M5pW05YaF5a6555qEIHRvb2x0aXDjgILmnKrlj5HnlJ/miKrlj5bnmoTmlofmoYjkuI3mmL7npLogdG9vbHRpcOOAglxuICogQGV4YW1wbGU6XG4gKiA8c3BhbiBjbGFzcz1cInR3LXRleHQtb3ZlcmZsb3dcIiBhY2xUZXh0VG9vbHRpcD5URVhULi4uPC9zcGFuPlxuICpcbiAqIHRvb2x0aXAg55qE5LiA5Lqb6K6+572u77yI5L2N572u44CB57G75Z6L77yJ5Y+v5Lul5L2/55SoIGF1aSDnm7jlkIzorr7nva7jgILmnKrkvKAgdG9vbHRpcCBjb250ZW50IOWImeWPluWFg+e0oCB0ZXh0IGNvbnRlbnRcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FjbFRleHRUb29sdGlwXScsXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBUb29sdGlwRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbXG4gICAgICAgICdhdWlUb29sdGlwOmFjbFRleHRUb29sdGlwJyxcbiAgICAgICAgJ2F1aVRvb2x0aXBQb3NpdGlvbicsXG4gICAgICAgICdhdWlUb29sdGlwVHlwZScsXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRUb29sdGlwRGlyZWN0aXZlIHtcbiAgQElucHV0KCdhY2xUZXh0VG9vbHRpcCcpXG4gIGNvbnRlbnQ6IHN0cmluZztcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZUVudGVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGRpc3BsYXlXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGZ1bGxXaWR0aCA9IHRoaXMuY2FsY0Z1bGxUZXh0V2lkdGgoZWwpO1xuICAgIHRoaXMudG9vbHRpcERpcmVjdGl2ZS5jb250ZW50ID0gdGhpcy5jb250ZW50IHx8IGVsLnRleHRDb250ZW50O1xuICAgIHRoaXMudG9vbHRpcERpcmVjdGl2ZS5kaXNhYmxlZCA9IGZ1bGxXaWR0aCA8PSBkaXNwbGF5V2lkdGg7XG4gIH1cblxuICB0b29sdGlwRGlyZWN0aXZlID0gaW5qZWN0KFRvb2x0aXBEaXJlY3RpdmUpO1xuXG4gIHByaXZhdGUgY2FsY0Z1bGxUZXh0V2lkdGgoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICBjb25zdCBjb250ZW50Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudENvbnRhaW5lci50ZXh0Q29udGVudCA9IHRoaXMuY29udGVudCB8fCBlbC50ZXh0Q29udGVudDtcbiAgICBPYmplY3QuYXNzaWduKGNvbnRlbnRDb250YWluZXIuc3R5bGUsIHtcbiAgICAgIC4uLkNMT05FX0VMRU1FTlRfQkFTRV9TVFlMRVMsXG4gICAgICBmb250U2l6ZTogY29tcHV0ZWRTdHlsZS5mb250U2l6ZSxcbiAgICAgIGZvbnRXZWlnaHQ6IGNvbXB1dGVkU3R5bGUuZm9udFdlaWdodCxcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250ZW50Q29udGFpbmVyKTtcbiAgICBjb25zdCB3aWR0aCA9IGNvbnRlbnRDb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgY29udGVudENvbnRhaW5lci5yZW1vdmUoKTtcbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cbn1cbiJdfQ==