@clr/angular
Version:
Angular components for Clarity
134 lines • 17.1 kB
JavaScript
/*
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
* 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvcG9wb3Zlci90b29sdGlwL3Rvb2x0aXAtY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFZLEtBQUssRUFBVSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBSTFFLE1BQU0sU0FBUyxHQUFHLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQVUsQ0FBQztBQUdyRyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFZekIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFLcEQsWUFDRSxRQUFrQixFQUdsQixVQUFzQixFQUNkLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFFaEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUhwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFJaEQs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O3VCQUFDLGFBQWE7Z0JBMkNoQixJQUFJO3NCQURQLEtBQUs7dUJBQUMsU0FBUztnQkFrQlIsWUFBWTtzQkFEbkIsWUFBWTt1QkFBQyxZQUFZO2dCQU1sQixZQUFZO3NCQURuQixZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uLy4uL3V0aWxzL2Fzc2VydC9hc3NlcnQuaGVscGVycyc7XG5pbXBvcnQgeyB1bmlxdWVJZEZhY3RvcnkgfSBmcm9tICcuLi8uLi91dGlscy9pZC1nZW5lcmF0b3IvaWQtZ2VuZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RQb3BvdmVyIH0gZnJvbSAnLi4vY29tbW9uL2Fic3RyYWN0LXBvcG92ZXInO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9jb21tb24vcG9wb3Zlcic7XG5pbXBvcnQgeyBQT1BPVkVSX0hPU1RfQU5DSE9SIH0gZnJvbSAnLi4vY29tbW9uL3BvcG92ZXItaG9zdC1hbmNob3IudG9rZW4nO1xuaW1wb3J0IHsgVG9vbHRpcElkU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL3Rvb2x0aXAtaWQuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwTW91c2VTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvdG9vbHRpcC1tb3VzZS5zZXJ2aWNlJztcblxuY29uc3QgUE9TSVRJT05TID0gWydib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0JywgJ3JpZ2h0JywgJ2xlZnQnXSBhcyBjb25zdDtcbnR5cGUgUG9zaXRpb24gPSB0eXBlb2YgUE9TSVRJT05TW251bWJlcl07XG5cbmNvbnN0IFNJWkVTID0gWyd4cycsICdzbScsICdtZCcsICdsZyddO1xuXG5jb25zdCBkZWZhdWx0UG9zaXRpb24gPSAncmlnaHQnO1xuY29uc3QgZGVmYXVsdFNpemUgPSAnc20nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItdG9vbHRpcC1jb250ZW50JyxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MudG9vbHRpcC1jb250ZW50XSc6ICd0cnVlJyxcbiAgICAnW3N0eWxlLm9wYWNpdHldJzogJzEnLFxuICAgICdbYXR0ci5yb2xlXSc6ICdcInRvb2x0aXBcIicsXG4gICAgJ1tpZF0nOiAnaWQnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDbHJUb29sdGlwQ29udGVudCBleHRlbmRzIEFic3RyYWN0UG9wb3ZlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2lkOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Bvc2l0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NpemU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFBPUE9WRVJfSE9TVF9BTkNIT1IpXG4gICAgcGFyZW50SG9zdDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHRvb2x0aXBJZFNlcnZpY2U6IFRvb2x0aXBJZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b29sdGlwTW91c2VTZXJ2aWNlOiBUb29sdGlwTW91c2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBwYXJlbnRIb3N0KTtcblxuICAgIGlmICghcGFyZW50SG9zdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAnKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgaWQgaW4gY2FzZSBjb25zdW1lciBkb2VzIG5vdCBzdXBwbHkgYSBjdXN0b20gaWQuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkRmFjdG9yeSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSB2YWx1ZSB8fCAnJztcblxuICAgIHRoaXMuX2lkID0gaWQ7XG4gICAgdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGlkKTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9zaXRpb24nKVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICB9XG4gIHNldCBwb3NpdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgb2xkUG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IFBPU0lUSU9OUy5pbmNsdWRlcyh2YWx1ZSBhcyBhbnkpID8gKHZhbHVlIGFzIFBvc2l0aW9uKSA6IGRlZmF1bHRQb3NpdGlvbjtcblxuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247XG4gICAgdGhpcy51cGRhdGVDc3NDbGFzcyh7IG9sZENsYXNzOiBgdG9vbHRpcC0ke29sZFBvc2l0aW9ufWAsIG5ld0NsYXNzOiBgdG9vbHRpcC0ke25ld1Bvc2l0aW9ufWAgfSk7XG5cbiAgICAvLyBzZXQgdGhlIHBvcG92ZXIgdmFsdWVzIGJhc2VkIG9uIGRpcmVjdGlvblxuICAgIHN3aXRjaCAobmV3UG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHRoaXMuYW5jaG9yUG9pbnQgPSBQb2ludC5UT1BfQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LkxFRlRfQk9UVE9NO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LlRPUF9DRU5URVI7XG4gICAgICAgIHRoaXMucG9wb3ZlclBvaW50ID0gUG9pbnQuUklHSFRfQk9UVE9NO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHRoaXMuYW5jaG9yUG9pbnQgPSBQb2ludC5CT1RUT01fQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LkxFRlRfVE9QO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LkJPVFRPTV9DRU5URVI7XG4gICAgICAgIHRoaXMucG9wb3ZlclBvaW50ID0gUG9pbnQuUklHSFRfVE9QO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LlJJR0hUX0NFTlRFUjtcbiAgICAgICAgdGhpcy5wb3BvdmVyUG9pbnQgPSBQb2ludC5MRUZUX1RPUDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5hbmNob3JQb2ludCA9IFBvaW50LkxFRlRfQ0VOVEVSO1xuICAgICAgICB0aGlzLnBvcG92ZXJQb2ludCA9IFBvaW50LlJJR0hUX1RPUDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcihuZXdQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdjbHJTaXplJylcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cbiAgc2V0IHNpemUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG9sZFNpemUgPSB0aGlzLl9zaXplO1xuICAgIGNvbnN0IG5ld1NpemUgPSBTSVpFUy5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRTaXplO1xuXG4gICAgdGhpcy5fc2l6ZSA9IG5ld1NpemU7XG4gICAgdGhpcy51cGRhdGVDc3NDbGFzcyh7IG9sZENsYXNzOiBgdG9vbHRpcC0ke29sZFNpemV9YCwgbmV3Q2xhc3M6IGB0b29sdGlwLSR7bmV3U2l6ZX1gIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaXplID0gdGhpcy5zaXplIHx8IGRlZmF1bHRTaXplO1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwcml2YXRlIG9uTW91c2VFbnRlcigpIHtcbiAgICB0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIHByaXZhdGUgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNzc0NsYXNzKHsgb2xkQ2xhc3MsIG5ld0NsYXNzIH06IHsgb2xkQ2xhc3M6IHN0cmluZzsgbmV3Q2xhc3M6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIG9sZENsYXNzKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgbmV3Q2xhc3MpO1xuICB9XG59XG4iXX0=