UNPKG

@scania/tegel

Version:
332 lines (331 loc) 12.7 kB
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 }]; } }