UNPKG

@clr/angular

Version:

Angular components for Clarity

135 lines 17.2 kB
/* * Copyright (c) 2016-2025 Broadcom. All Rights Reserved. * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { Component, HostListener, Inject, Input, Optional } from '@angular/core'; import { assertNever } from '../../utils/assert/assert.helpers'; import { uniqueIdFactory } from '../../utils/id-generator/id-generator.service'; import { AbstractPopover } from '../common/abstract-popover'; import { Point } from '../common/popover'; import { POPOVER_HOST_ANCHOR } from '../common/popover-host-anchor.token'; import * as i0 from "@angular/core"; import * as i1 from "./providers/tooltip-id.service"; import * as i2 from "./providers/tooltip-mouse.service"; const POSITIONS = ['bottom-left', 'bottom-right', 'top-left', 'top-right', 'right', 'left']; const SIZES = ['xs', 'sm', 'md', 'lg']; const defaultPosition = 'right'; const defaultSize = 'sm'; export class ClrTooltipContent extends AbstractPopover { constructor(injector, parentHost, tooltipIdService, tooltipMouseService) { super(injector, parentHost); this.tooltipIdService = tooltipIdService; this.tooltipMouseService = tooltipMouseService; if (!parentHost) { throw new Error('clr-tooltip-content should only be used inside of a clr-tooltip'); } // Set the default id in case consumer does not supply a custom id. this.id = uniqueIdFactory(); } get id() { return this._id; } set id(value) { const id = value || ''; this._id = id; this.tooltipIdService.updateId(id); } get position() { return this._position; } set position(value) { const oldPosition = this._position; const newPosition = POSITIONS.includes(value) ? value : defaultPosition; this._position = newPosition; this.updateCssClass({ oldClass: `tooltip-${oldPosition}`, newClass: `tooltip-${newPosition}` }); // set the popover values based on direction switch (newPosition) { case 'top-right': this.anchorPoint = Point.TOP_CENTER; this.popoverPoint = Point.LEFT_BOTTOM; break; case 'top-left': this.anchorPoint = Point.TOP_CENTER; this.popoverPoint = Point.RIGHT_BOTTOM; break; case 'bottom-right': this.anchorPoint = Point.BOTTOM_CENTER; this.popoverPoint = Point.LEFT_TOP; break; case 'bottom-left': this.anchorPoint = Point.BOTTOM_CENTER; this.popoverPoint = Point.RIGHT_TOP; break; case 'right': this.anchorPoint = Point.RIGHT_CENTER; this.popoverPoint = Point.LEFT_TOP; break; case 'left': this.anchorPoint = Point.LEFT_CENTER; this.popoverPoint = Point.RIGHT_TOP; break; default: assertNever(newPosition); } } get size() { return this._size; } set size(value) { const oldSize = this._size; const newSize = SIZES.includes(value) ? value : defaultSize; this._size = newSize; this.updateCssClass({ oldClass: `tooltip-${oldSize}`, newClass: `tooltip-${newSize}` }); } ngOnInit() { this.size = this.size || defaultSize; this.position = this.position || defaultPosition; } onMouseEnter() { this.tooltipMouseService.onMouseEnterContent(); } onMouseLeave() { this.tooltipMouseService.onMouseLeaveContent(); } updateCssClass({ oldClass, newClass }) { this.renderer.removeClass(this.el.nativeElement, oldClass); this.renderer.addClass(this.el.nativeElement, newClass); } } ClrTooltipContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTooltipContent, deps: [{ token: i0.Injector }, { token: POPOVER_HOST_ANCHOR, optional: true }, { token: i1.TooltipIdService }, { token: i2.TooltipMouseService }], target: i0.ɵɵFactoryTarget.Component }); ClrTooltipContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrTooltipContent, selector: "clr-tooltip-content", inputs: { id: "id", position: ["clrPosition", "position"], size: ["clrSize", "size"] }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "class.tooltip-content": "true", "style.opacity": "1", "attr.role": "\"tooltip\"", "id": "id" } }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrTooltipContent, decorators: [{ type: Component, args: [{ selector: 'clr-tooltip-content', template: `<ng-content></ng-content>`, host: { '[class.tooltip-content]': 'true', '[style.opacity]': '1', '[attr.role]': '"tooltip"', '[id]': 'id', }, }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [POPOVER_HOST_ANCHOR] }] }, { type: i1.TooltipIdService }, { type: i2.TooltipMouseService }]; }, propDecorators: { id: [{ type: Input }], position: [{ type: Input, args: ['clrPosition'] }], size: [{ type: Input, args: ['clrSize'] }], onMouseEnter: [{ type: HostListener, args: ['mouseenter'] }], onMouseLeave: [{ type: HostListener, args: ['mouseleave'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvcG9wb3Zlci90b29sdGlwL3Rvb2x0aXAtY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUkxRSxNQUFNLFNBQVMsR0FBRyxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFHckcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUV2QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBWXpCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUFlO0lBS3BELFlBQ0UsUUFBa0IsRUFHbEIsVUFBbUMsRUFDM0IsZ0JBQWtDLEVBQ2xDLG1CQUF3QztRQUVoRCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBSHBCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUlo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QUs7dUJBQUMsYUFBYTtnQkEyQ2hCLElBQUk7c0JBRFAsS0FBSzt1QkFBQyxTQUFTO2dCQWtCUixZQUFZO3NCQURuQixZQUFZO3VCQUFDLFlBQVk7Z0JBTWxCLFlBQVk7c0JBRG5CLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXNzZXJ0L2Fzc2VydC5oZWxwZXJzJztcbmltcG9ydCB7IHVuaXF1ZUlkRmFjdG9yeSB9IGZyb20gJy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvci9pZC1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFBvcG92ZXIgfSBmcm9tICcuLi9jb21tb24vYWJzdHJhY3QtcG9wb3Zlcic7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2NvbW1vbi9wb3BvdmVyJztcbmltcG9ydCB7IFBPUE9WRVJfSE9TVF9BTkNIT1IgfSBmcm9tICcuLi9jb21tb24vcG9wb3Zlci1ob3N0LWFuY2hvci50b2tlbic7XG5pbXBvcnQgeyBUb29sdGlwSWRTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvdG9vbHRpcC1pZC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2x0aXBNb3VzZVNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy90b29sdGlwLW1vdXNlLnNlcnZpY2UnO1xuXG5jb25zdCBQT1NJVElPTlMgPSBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnLCAncmlnaHQnLCAnbGVmdCddIGFzIGNvbnN0O1xudHlwZSBQb3NpdGlvbiA9IHR5cGVvZiBQT1NJVElPTlNbbnVtYmVyXTtcblxuY29uc3QgU0laRVMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJ107XG5cbmNvbnN0IGRlZmF1bHRQb3NpdGlvbiA9ICdyaWdodCc7XG5jb25zdCBkZWZhdWx0U2l6ZSA9ICdzbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsci10b29sdGlwLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy50b29sdGlwLWNvbnRlbnRdJzogJ3RydWUnLFxuICAgICdbc3R5bGUub3BhY2l0eV0nOiAnMScsXG4gICAgJ1thdHRyLnJvbGVdJzogJ1widG9vbHRpcFwiJyxcbiAgICAnW2lkXSc6ICdpZCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIENsclRvb2x0aXBDb250ZW50IGV4dGVuZHMgQWJzdHJhY3RQb3BvdmVyIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfcG9zaXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfc2l6ZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoUE9QT1ZFUl9IT1NUX0FOQ0hPUilcbiAgICBwYXJlbnRIb3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHRvb2x0aXBJZFNlcnZpY2U6IFRvb2x0aXBJZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b29sdGlwTW91c2VTZXJ2aWNlOiBUb29sdGlwTW91c2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBwYXJlbnRIb3N0KTtcblxuICAgIGlmICghcGFyZW50SG9zdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAnKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgaWQgaW4gY2FzZSBjb25zdW1lciBkb2VzIG5vdCBzdXBwbHkgYSBjdXN0b20gaWQuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkRmFjdG9yeSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSB2YWx1ZSB8fCAnJztcblxuICAgIHRoaXMuX2lkID0gaWQ7XG4gICAgdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGlkKTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9zaXRpb24nKVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICB9XG4gIHNldCBwb3NpdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgb2xkUG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IFBPU0lUSU9OUy5pbmNsdWRlcyh2YWx1ZSBhcyBhbnkpID8gKHZhbHVlIGFzIFBvc2l0aW9uKSA6IGRlZmF1bHRQb3NpdGlvbjtcblxuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247XG4gICAgdGhpcy51cGRhdGVDc3NDbGFzcyh7IG9sZENsYXNzOiBgdG9vbHRpcC0ke29sZFBvc2l0aW9ufWAsIG5ld0NsYXNzOiBgdG9vbHRpcC0ke25ld1Bvc2l0aW9ufWAgfSk7XG5cbiAgICAvLyBzZXQgdGhlIHBvcG92ZXIgdmFsdWVzIGJhc2VkIG9uIGRpcmVjdGlvblxuICAgIHN3aXRjaCAobmV3UG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHRoaXMuYW5jaG9yUG9pbnQgPSBQb2ludC5UT1BfQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LkxFRlRfQk9UVE9NO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LlRPUF9DRU5URVI7XG4gICAgICAgIHRoaXMucG9wb3ZlclBvaW50ID0gUG9pbnQuUklHSFRfQk9UVE9NO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHRoaXMuYW5jaG9yUG9pbnQgPSBQb2ludC5CT1RUT01fQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LkxFRlRfVE9QO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LkJPVFRPTV9DRU5URVI7XG4gICAgICAgIHRoaXMucG9wb3ZlclBvaW50ID0gUG9pbnQuUklHSFRfVE9QO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LlJJR0hUX0NFTlRFUjtcbiAgICAgICAgdGhpcy5wb3BvdmVyUG9pbnQgPSBQb2ludC5MRUZUX1RPUDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LkxFRlRfQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LlJJR0hUX1RPUDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcihuZXdQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdjbHJTaXplJylcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cbiAgc2V0IHNpemUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG9sZFNpemUgPSB0aGlzLl9zaXplO1xuICAgIGNvbnN0IG5ld1NpemUgPSBTSVpFUy5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRTaXplO1xuXG4gICAgdGhpcy5fc2l6ZSA9IG5ld1NpemU7XG4gICAgdGhpcy51cGRhdGVDc3NDbGFzcyh7IG9sZENsYXNzOiBgdG9vbHRpcC0ke29sZFNpemV9YCwgbmV3Q2xhc3M6IGB0b29sdGlwLSR7bmV3U2l6ZX1gIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaXplID0gdGhpcy5zaXplIHx8IGRlZmF1bHRTaXplO1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwcml2YXRlIG9uTW91c2VFbnRlcigpIHtcbiAgICB0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIHByaXZhdGUgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNzc0NsYXNzKHsgb2xkQ2xhc3MsIG5ld0NsYXNzIH06IHsgb2xkQ2xhc3M6IHN0cmluZzsgbmV3Q2xhc3M6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIG9sZENsYXNzKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgbmV3Q2xhc3MpO1xuICB9XG59XG4iXX0=