@scania/tegel
Version:
Tegel Design System
332 lines (331 loc) • 12.7 kB
JavaScript
import { h, Host } from "@stencil/core";
import inheritAttributes from "../../utils/inheritAttributes";
/**
* @slot <default> - <b>Unnamed slot.</b> For the tooltip contents.
*/
export class TdsTooltip {
constructor() {
/** In case Tooltip contains only text, no HTML, a text can be passed by this prop */
this.text = '';
/** Decides if the component should be visible from the start. */
this.defaultShow = false;
/** Allow mouse over Tooltip. Useful when Tooltip contains clickable elements like link or button. */
this.mouseOverTooltip = false;
/** What triggers the popover to show */
this.trigger = 'hover';
/** Prop in control of showing and hiding prop. Takes precedence over `defaultOpen` prop. */
this.show = null;
/** Placement of Tooltip. */
this.placement = 'bottom';
/** Sets the offset skidding */
this.offsetSkidding = 0;
/** Sets the offset distance */
this.offsetDistance = 8;
this.border = '';
this.popperjsExtraModifiers = [
{
name: 'positionCalc',
enabled: true,
phase: 'main',
fn: ({ state }) => {
if (state.placement === 'bottom-start' || state.placement === 'right-start') {
this.border = 'top-left';
}
else if (state.placement === 'bottom-end' || state.placement === 'left-start') {
this.border = 'top-right';
}
else if (state.placement === 'top-end' || state.placement === 'left-end') {
this.border = 'bottom-right';
}
else if (state.placement === 'top-start' || state.placement === 'right-end') {
this.border = 'bottom-left';
}
else if (state.placement === 'bottom' || state.placement === 'top') {
this.border = 'default';
}
},
},
];
this.inheritedAttributes = {};
}
handleKeyDown(event) {
if (event.key === 'Escape' && this.show) {
this.show = false;
}
}
componentWillLoad() {
this.inheritedAttributes = inheritAttributes(this.host, ['style', 'class']);
}
determineTrigger() {
if (this.trigger === 'hover') {
return this.mouseOverTooltip ? 'hover-popover' : 'hover';
}
return this.trigger;
}
render() {
var _a;
return (h(Host, { key: '1bd8ec7aed94718f305853bfe59cff193537c3f9', role: "tooltip", "aria-describedby": this.tdsAriaDescribedby, "aria-label": this.text }, h("tds-popover-core", Object.assign({ key: '6dbe7c7c9662fccba29de2451b37bec6c3e77db4' }, this.inheritedAttributes, { class: {
'tds-tooltip': true,
[`tds-tooltip-${this.border}`]: true,
[(_a = this.inheritedAttributes.class) !== null && _a !== void 0 ? _a : '']: true,
'tds-tooltip-show': !!this.show,
}, selector: this.selector, referenceEl: this.referenceEl, trigger: this.determineTrigger(), modifiers: this.popperjsExtraModifiers, offsetSkidding: this.offsetSkidding, offsetDistance: this.offsetDistance, show: this.show, placement: this.placement, autoHide: false, onInternalTdsShow: () => {
this.show = true;
}, onInternalTdsClose: () => {
this.show = false;
}, defaultShow: this.defaultShow }), this.text, h("slot", { key: '4a14caadf2026d45858f7de11b94faebf1b19f03' }))));
}
static get is() { return "tds-tooltip"; }
static get encapsulation() { return "scoped"; }
static get originalStyleUrls() {
return {
"$": ["tooltip.scss"]
};
}
static get styleUrls() {
return {
"$": ["tooltip.css"]
};
}
static get properties() {
return {
"text": {
"type": "string",
"mutable": false,
"complexType": {
"original": "string",
"resolved": "string",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "In case Tooltip contains only text, no HTML, a text can be passed by this prop"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "text",
"defaultValue": "''"
},
"selector": {
"type": "string",
"mutable": false,
"complexType": {
"original": "string",
"resolved": "string | undefined",
"references": {}
},
"required": false,
"optional": true,
"docs": {
"tags": [],
"text": "The CSS-selector for an element that will trigger the Tooltip"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "selector"
},
"referenceEl": {
"type": "unknown",
"mutable": false,
"complexType": {
"original": "HTMLElement | null",
"resolved": "HTMLElement | null | undefined",
"references": {
"HTMLElement": {
"location": "global",
"id": "global::HTMLElement"
}
}
},
"required": false,
"optional": true,
"docs": {
"tags": [],
"text": "Element that will trigger the Tooltip (takes priority over selector)"
},
"getter": false,
"setter": false
},
"defaultShow": {
"type": "boolean",
"mutable": false,
"complexType": {
"original": "boolean",
"resolved": "boolean",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Decides if the component should be visible from the start."
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "default-show",
"defaultValue": "false"
},
"mouseOverTooltip": {
"type": "boolean",
"mutable": false,
"complexType": {
"original": "boolean",
"resolved": "boolean",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Allow mouse over Tooltip. Useful when Tooltip contains clickable elements like link or button."
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "mouse-over-tooltip",
"defaultValue": "false"
},
"trigger": {
"type": "string",
"mutable": false,
"complexType": {
"original": "'click' | 'hover'",
"resolved": "\"click\" | \"hover\"",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "What triggers the popover to show"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "trigger",
"defaultValue": "'hover'"
},
"show": {
"type": "boolean",
"mutable": true,
"complexType": {
"original": "boolean | null",
"resolved": "boolean | null",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Prop in control of showing and hiding prop. Takes precedence over `defaultOpen` prop."
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "show",
"defaultValue": "null"
},
"placement": {
"type": "string",
"mutable": false,
"complexType": {
"original": "Placement",
"resolved": "\"auto\" | \"auto-end\" | \"auto-start\" | \"bottom\" | \"bottom-end\" | \"bottom-start\" | \"left\" | \"left-end\" | \"left-start\" | \"right\" | \"right-end\" | \"right-start\" | \"top\" | \"top-end\" | \"top-start\"",
"references": {
"Placement": {
"location": "import",
"path": "@popperjs/core",
"id": "node_modules::Placement",
"referenceLocation": "Placement"
}
}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Placement of Tooltip."
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "placement",
"defaultValue": "'bottom'"
},
"offsetSkidding": {
"type": "number",
"mutable": false,
"complexType": {
"original": "number",
"resolved": "number",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Sets the offset skidding"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "offset-skidding",
"defaultValue": "0"
},
"offsetDistance": {
"type": "number",
"mutable": false,
"complexType": {
"original": "number",
"resolved": "number",
"references": {}
},
"required": false,
"optional": false,
"docs": {
"tags": [],
"text": "Sets the offset distance"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "offset-distance",
"defaultValue": "8"
},
"tdsAriaDescribedby": {
"type": "string",
"mutable": false,
"complexType": {
"original": "string",
"resolved": "string | undefined",
"references": {}
},
"required": false,
"optional": true,
"docs": {
"tags": [],
"text": "Sets the aria-describedby attribute"
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "tds-aria-describedby"
}
};
}
static get elementRef() { return "host"; }
static get listeners() {
return [{
"name": "keydown",
"method": "handleKeyDown",
"target": "window",
"capture": false,
"passive": false
}];
}
}