{"version":3,"file":"tooltip-DS8L4mHj.mjs","sources":["../../src/strings/popoverString.ts","../../src/strings/popoverComponent.ts","../../src/strings/tooltipString.ts","../../src/util/getTipTemplate.ts","../../src/util/tipClassPositions.ts","../../src/util/styleTip.ts","../../src/util/tooltipDefaults.ts","../../src/strings/dataOriginalTitle.ts","../../src/strings/tooltipComponent.ts","../../src/util/setHtml.ts","../../src/util/createTip.ts","../../src/util/getElementContainer.ts","../../src/components/tooltip.ts"],"sourcesContent":["/** @type {string} */\nconst popoverString = \"popover\";\nexport default popoverString;\n","/** @type {string} */\nconst popoverComponent = \"Popover\";\nexport default popoverComponent;\n","/** @type {string} */\nconst tooltipString = \"tooltip\";\nexport default tooltipString;\n","import tooltipString from \"../strings/tooltipString\";\n\n/**\n * Returns a template for Popover / Tooltip.\n *\n * @param tipType the expected markup type\n * @returns the template markup\n */\nconst getTipTemplate = (tipType: string) => {\n const isTooltip = tipType === tooltipString;\n const bodyClass = isTooltip ? `${tipType}-inner` : `${tipType}-body`;\n const header = !isTooltip ? `

` : \"\";\n const arrow = `
`;\n const body = `
`;\n return `
${\n header + arrow + body\n }
`;\n};\n\nexport default getTipTemplate;\n","const tipClassPositions = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"start\",\n right: \"end\",\n};\n\nexport default tipClassPositions;\n","import {\n createCustomEvent,\n dispatchEvent,\n getBoundingClientRect,\n getDocumentElement,\n getElementStyle,\n getNodeScroll,\n getRectRelativeToOffsetParent,\n isHTMLElement,\n isRTL,\n setElementStyle,\n toLowerCase,\n} from \"@thednp/shorty\";\n\nimport tipClassPositions from \"./tipClassPositions\";\nimport Tooltip from \"../components/tooltip\";\nimport type { TooltipEvent } from \"../interface/tooltip\";\nimport type { PopoverEvent } from \"../interface/popover\";\n\n/**\n * Style popovers and tooltips.\n *\n * @param self the `Popover` / `Tooltip` instance\n */\nconst styleTip = (self: Tooltip) => {\n requestAnimationFrame(() => {\n const tipClasses = /\\b(top|bottom|start|end)+/;\n const { element, tooltip, container, offsetParent, options, arrow } = self;\n\n // istanbul ignore if @preserve\n if (!tooltip) return;\n const RTL = isRTL(element);\n const { x: scrollLeft, y: scrollTop } = getNodeScroll(offsetParent);\n\n // reset tooltip style (top: 0, left: 0 works best)\n setElementStyle(tooltip, {\n top: \"\",\n left: \"\",\n right: \"\",\n bottom: \"\",\n });\n const { offsetWidth: tipWidth, offsetHeight: tipHeight } = tooltip;\n const { clientWidth: htmlcw, clientHeight: htmlch, offsetWidth: htmlow } =\n getDocumentElement(element);\n let { placement } = options;\n const { clientWidth: parentCWidth, offsetWidth: parentOWidth } = container;\n const parentPosition = getElementStyle(\n container,\n \"position\",\n );\n const fixedParent = parentPosition === \"fixed\";\n const scrollbarWidth = fixedParent\n ? Math.abs(parentCWidth - parentOWidth)\n : Math.abs(htmlcw - htmlow);\n const leftBoundry = RTL && fixedParent\n ? /* istanbul ignore next @preserve */ scrollbarWidth\n : 0;\n const rightBoundry = htmlcw - (!RTL ? scrollbarWidth : 0) - 1;\n\n // reuse observer entry bounding box\n const observerEntry = self._observer.getEntry(element);\n const {\n width: elemWidth,\n height: elemHeight,\n left: elemRectLeft,\n right: elemRectRight,\n top: elemRectTop,\n } = observerEntry?.boundingClientRect ||\n getBoundingClientRect(element, true);\n\n const {\n x: elemOffsetLeft,\n y: elemOffsetTop,\n } = getRectRelativeToOffsetParent(\n element,\n offsetParent,\n { x: scrollLeft, y: scrollTop },\n );\n\n // reset arrow style\n setElementStyle(arrow as HTMLElement, {\n top: \"\",\n left: \"\",\n right: \"\",\n bottom: \"\",\n });\n let topPosition: number | string = 0;\n let bottomPosition: number | string = \"\";\n let leftPosition: number | string = 0;\n let rightPosition: number | string = \"\";\n let arrowTop: number | string = \"\";\n let arrowLeft: number | string = \"\";\n let arrowRight: number | string = \"\";\n\n const arrowWidth = arrow.offsetWidth || 0;\n const arrowHeight = arrow.offsetHeight || 0;\n const arrowAdjust = arrowWidth / 2;\n\n // check placement\n let topExceed = elemRectTop - tipHeight - arrowHeight < 0;\n let bottomExceed =\n elemRectTop + tipHeight + elemHeight + arrowHeight >= htmlch;\n let leftExceed = elemRectLeft - tipWidth - arrowWidth < leftBoundry;\n let rightExceed =\n elemRectLeft + tipWidth + elemWidth + arrowWidth >= rightBoundry;\n\n const horizontals = [\"left\", \"right\"];\n const verticals = [\"top\", \"bottom\"];\n\n topExceed = horizontals.includes(placement)\n ? elemRectTop + elemHeight / 2 - tipHeight / 2 - arrowHeight < 0\n : topExceed;\n bottomExceed = horizontals.includes(placement)\n ? elemRectTop + tipHeight / 2 + elemHeight / 2 + arrowHeight >= htmlch\n : bottomExceed;\n leftExceed = verticals.includes(placement)\n ? elemRectLeft + elemWidth / 2 - tipWidth / 2 < leftBoundry\n : leftExceed;\n rightExceed = verticals.includes(placement)\n ? elemRectLeft + tipWidth / 2 + elemWidth / 2 >= rightBoundry\n : rightExceed;\n\n // first remove side positions if both left and right limits are exceeded\n // we usually fall back to top|bottom\n placement = horizontals.includes(placement) && leftExceed && rightExceed\n ? \"top\"\n : placement;\n // recompute placement\n placement = placement === \"top\" && topExceed ? \"bottom\" : placement;\n placement = placement === \"bottom\" && bottomExceed ? \"top\" : placement;\n placement = placement === \"left\" && leftExceed ? \"right\" : placement;\n placement = placement === \"right\" && rightExceed\n ? \"left\"\n // istanbul ignore next @preserve\n : placement;\n\n // update tooltip/popover class\n // istanbul ignore else @preserve\n if (!tooltip.className.includes(placement)) {\n tooltip.className = tooltip.className.replace(\n tipClasses,\n tipClassPositions[placement],\n );\n }\n\n // compute tooltip / popover coordinates\n // istanbul ignore else @preserve\n if (horizontals.includes(placement)) {\n // secondary|side positions\n if (placement === \"left\") {\n // LEFT\n leftPosition = elemOffsetLeft - tipWidth - arrowWidth;\n } else {\n // RIGHT\n leftPosition = elemOffsetLeft + elemWidth + arrowWidth;\n }\n\n // adjust top and arrow\n if (topExceed && bottomExceed) {\n topPosition = 0;\n bottomPosition = 0;\n arrowTop = elemOffsetTop + elemHeight / 2 - arrowHeight / 2;\n } else if (topExceed) {\n topPosition = elemOffsetTop;\n bottomPosition = \"\";\n arrowTop = elemHeight / 2 - arrowWidth;\n } else if (bottomExceed) {\n topPosition = elemOffsetTop - tipHeight + elemHeight;\n bottomPosition = \"\";\n arrowTop = tipHeight - elemHeight / 2 - arrowWidth;\n } else {\n topPosition = elemOffsetTop - tipHeight / 2 + elemHeight / 2;\n arrowTop = tipHeight / 2 - arrowHeight / 2;\n }\n } else if (verticals.includes(placement)) {\n if (placement === \"top\") {\n topPosition = elemOffsetTop - tipHeight - arrowHeight;\n } else {\n // BOTTOM\n topPosition = elemOffsetTop + elemHeight + arrowHeight;\n }\n\n // adjust left | right and also the arrow\n if (leftExceed) {\n leftPosition = 0;\n arrowLeft = elemOffsetLeft + elemWidth / 2 - arrowAdjust;\n } else if (rightExceed) {\n leftPosition = \"auto\";\n rightPosition = 0;\n arrowRight = elemWidth / 2 + rightBoundry - elemRectRight - arrowAdjust;\n } else {\n leftPosition = elemOffsetLeft - tipWidth / 2 + elemWidth / 2;\n arrowLeft = tipWidth / 2 - arrowAdjust;\n }\n }\n\n // apply style to tooltip/popover\n setElementStyle(tooltip, {\n top: `${topPosition}px`,\n bottom: bottomPosition === \"\" ? \"\" : `${bottomPosition}px`,\n left: leftPosition === \"auto\" ? leftPosition : `${leftPosition}px`,\n right: rightPosition !== \"\" ? `${rightPosition}px` : \"\",\n });\n\n // update arrow placement\n // istanbul ignore else @preserve\n if (isHTMLElement(arrow)) {\n if (arrowTop !== \"\") {\n arrow.style.top = `${arrowTop}px`;\n }\n if (arrowLeft !== \"\") {\n arrow.style.left = `${arrowLeft}px`;\n } else if (arrowRight !== \"\") {\n arrow.style.right = `${arrowRight}px`;\n }\n }\n const updatedTooltipEvent = createCustomEvent<\n Record,\n TooltipEvent | PopoverEvent\n >(\n `updated.bs.${toLowerCase(self.name)}`,\n );\n dispatchEvent(element, updatedTooltipEvent);\n });\n};\n\nexport default styleTip;\n","import getTipTemplate from \"./getTipTemplate\";\nimport tooltipString from \"../strings/tooltipString\";\nimport { TooltipOptions } from \"../interface/tooltip\";\n\nconst tooltipDefaults: TooltipOptions = {\n template: getTipTemplate(tooltipString),\n title: \"\",\n customClass: \"\",\n trigger: \"hover focus\",\n placement: \"top\",\n sanitizeFn: undefined,\n animation: true,\n delay: 200,\n container: document.body,\n content: \"\",\n dismissible: false,\n btnClose: \"\",\n};\nexport default tooltipDefaults;\n","/**\n * Global namespace for `data-bs-title` attribute.\n */\nconst dataOriginalTitle = \"data-original-title\";\nexport default dataOriginalTitle;\n","/** @type {string} */\nconst tooltipComponent = \"Tooltip\";\nexport default tooltipComponent;\n","import {\n isArray,\n isFunction,\n isHTMLElement,\n isNode,\n isNodeList,\n isString,\n} from \"@thednp/shorty\";\n\n/**\n * Append an existing `Element` to Popover / Tooltip component or HTML\n * markup string to be parsed & sanitized to be used as popover / tooltip content.\n *\n * @param element target\n * @param content the `Element` to append / string\n * @param sanitizeFn a function to sanitize string content\n */\nconst setHtml = (\n element: HTMLElement,\n content: Node[] | Node | string,\n sanitizeFn?: (s: string) => string,\n) => {\n // istanbul ignore else @preserve\n if (isString(content) && content.length) {\n let dirty = content.trim(); // fixing #233\n if (isFunction(sanitizeFn)) dirty = sanitizeFn(dirty);\n\n const domParser = new DOMParser();\n const tempDocument = domParser.parseFromString(dirty, \"text/html\");\n element.append(...[...tempDocument.body.childNodes]);\n } else if (isHTMLElement(content)) {\n element.append(content);\n } else if (\n isNodeList(content) || (isArray(content) && content.every(isNode))\n ) {\n element.append(...[...content]);\n }\n};\nexport default setHtml;\n","import {\n addClass,\n createElement,\n hasClass,\n isHTMLElement,\n isRTL,\n querySelector,\n setAttribute,\n} from \"@thednp/shorty\";\n\nimport tooltipComponent from \"../strings/tooltipComponent\";\nimport tooltipString from \"../strings/tooltipString\";\nimport popoverString from \"../strings/popoverString\";\nimport fadeClass from \"../strings/fadeClass\";\nimport tipClassPositions from \"./tipClassPositions\";\nimport setHtml from \"./setHtml\";\nimport Tooltip from \"../components/tooltip\";\nimport Popover from \"../components/popover\";\n\n/**\n * Creates a new tooltip / popover.\n *\n * @param self the `Tooltip` / `Popover` instance\n */\nconst createTip = (self: Tooltip | Popover) => {\n const isTooltip = self.name === tooltipComponent;\n\n const { id, element, options } = self;\n const {\n title,\n placement,\n template,\n animation,\n customClass,\n sanitizeFn,\n dismissible,\n content,\n btnClose,\n } = options;\n const tipString = isTooltip ? tooltipString : popoverString;\n const tipPositions = { ...tipClassPositions };\n let titleParts: Node[] = [];\n let contentParts: Node[] = [];\n\n if (isRTL(element)) {\n tipPositions.left = \"end\";\n tipPositions.right = \"start\";\n }\n\n // set initial popover class\n const placementClass = `bs-${tipString}-${tipPositions[placement]}`;\n\n // load template\n let tooltipTemplate: Node | string;\n if (isHTMLElement(template)) {\n tooltipTemplate = template;\n } else {\n const htmlMarkup = createElement(\"div\") as HTMLElement;\n setHtml(htmlMarkup, template, sanitizeFn);\n tooltipTemplate = htmlMarkup.firstChild as HTMLElement;\n }\n\n /* istanbul ignore if @preserve */\n if (!isHTMLElement(tooltipTemplate)) return;\n\n // set popover markup\n self.tooltip = tooltipTemplate.cloneNode(true) as HTMLElement;\n const { tooltip } = self;\n\n // set id and role attributes\n setAttribute(tooltip, \"id\", id);\n setAttribute(tooltip, \"role\", tooltipString);\n\n const bodyClass = isTooltip\n ? `${tooltipString}-inner`\n : `${popoverString}-body`;\n const tooltipHeader = isTooltip\n ? null\n : querySelector(`.${popoverString}-header`, tooltip);\n const tooltipBody = querySelector(`.${bodyClass}`, tooltip);\n\n // set arrow and enable access for styleTip\n self.arrow = querySelector(\n `.${tipString}-arrow`,\n tooltip,\n ) as HTMLElement;\n const { arrow } = self;\n\n if (isHTMLElement(title)) titleParts = [title.cloneNode(true)];\n else {\n const tempTitle = createElement(\"div\") as HTMLElement;\n setHtml(tempTitle, title, sanitizeFn);\n titleParts = [...[...tempTitle.childNodes]];\n }\n\n if (isHTMLElement(content)) contentParts = [content.cloneNode(true)];\n else {\n const tempContent = createElement(\"div\") as HTMLElement;\n setHtml(tempContent, content, sanitizeFn);\n contentParts = [...[...tempContent.childNodes]];\n }\n\n // set dismissible button\n if (dismissible) {\n if (title) {\n if (isHTMLElement(btnClose)) {\n titleParts = [...titleParts, btnClose.cloneNode(true)];\n } else {\n const tempBtn = createElement(\"div\") as HTMLElement;\n setHtml(tempBtn, btnClose, sanitizeFn);\n titleParts = [...titleParts, tempBtn.firstChild as Node];\n }\n } else {\n // istanbul ignore else @preserve\n if (tooltipHeader) tooltipHeader.remove();\n if (isHTMLElement(btnClose)) {\n contentParts = [...contentParts, btnClose.cloneNode(true)];\n } else {\n const tempBtn = createElement(\"div\") as HTMLElement;\n setHtml(tempBtn, btnClose, sanitizeFn);\n contentParts = [...contentParts, tempBtn.firstChild as Node];\n }\n }\n }\n\n // fill the template with content from options / data attributes\n // also sanitize title && content\n // istanbul ignore else @preserve\n if (!isTooltip) {\n // istanbul ignore else @preserve\n if (title && tooltipHeader) {\n setHtml(tooltipHeader, titleParts, sanitizeFn);\n }\n // istanbul ignore else @preserve\n if (content && tooltipBody) {\n setHtml(tooltipBody, contentParts, sanitizeFn);\n }\n // set btn\n self.btn = querySelector(\".btn-close\", tooltip) ||\n undefined;\n } else if (title && tooltipBody) setHtml(tooltipBody, title, sanitizeFn);\n\n // Bootstrap 5.2.x\n addClass(tooltip, \"position-absolute\");\n addClass(arrow, \"position-absolute\");\n\n // set popover animation and placement\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, tipString)) addClass(tooltip, tipString);\n // istanbul ignore else @preserve\n if (animation && !hasClass(tooltip, fadeClass)) {\n addClass(tooltip, fadeClass);\n }\n // istanbul ignore else @preserve\n if (customClass && !hasClass(tooltip, customClass)) {\n addClass(tooltip, customClass);\n }\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, placementClass)) addClass(tooltip, placementClass);\n};\n\nexport default createTip;\n","import {\n getDocument,\n getElementStyle,\n getParentNode,\n isShadowRoot,\n isTableElement,\n} from \"@thednp/shorty\";\n\n/**\n * Returns an `HTMLElement` to be used as default value for *options.container*\n * for `Tooltip` / `Popover` components.\n *\n * @see https://github.com/floating-ui/floating-ui\n *\n * @param element the target\n * @returns the query result\n */\nconst getElementContainer = (element: Element) => {\n const majorBlockTags = [\"HTML\", \"BODY\"];\n const containers: HTMLElement[] = [];\n let { parentNode } = element;\n\n while (parentNode && !majorBlockTags.includes(parentNode.nodeName)) {\n parentNode = getParentNode(parentNode) as HTMLElement;\n // istanbul ignore else @preserve\n if (!(isShadowRoot(parentNode) || isTableElement(parentNode))) {\n containers.push(parentNode as HTMLElement);\n }\n }\n\n return (\n containers.find((c, i) => {\n if (\n ((getElementStyle(c, \"position\") !== \"relative\" ||\n getElementStyle(c, \"position\") === \"relative\" &&\n c.offsetHeight !== c.scrollHeight) &&\n containers.slice(i + 1).every((r) =>\n getElementStyle(r, \"position\") === \"static\"\n ))\n ) {\n return c;\n }\n return null;\n }) ||\n /* istanbul ignore next: optional guard */\n getDocument(element).body\n );\n};\n\nexport default getElementContainer;\n","/* Native JavaScript for Bootstrap 5 | Tooltip\n---------------------------------------------- */\nimport {\n addClass,\n ariaDescribedBy,\n closest,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n focus,\n focusEvent,\n focusinEvent,\n focusoutEvent,\n getAttribute,\n getDocument,\n getElementStyle,\n getInstance,\n getUID,\n getWindow,\n hasAttribute,\n hasClass,\n isApple,\n mouseclickEvent,\n mousedownEvent,\n mouseenterEvent,\n mousehoverEvent,\n mouseleaveEvent,\n ObjectAssign,\n passiveHandler,\n removeAttribute,\n removeClass,\n setAttribute,\n Timer,\n toLowerCase,\n TouchEvent,\n touchstartEvent,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\nimport PositionObserver from \"@thednp/position-observer\";\n\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport dataOriginalTitle from \"~/strings/dataOriginalTitle\";\nimport showClass from \"~/strings/showClass\";\nimport tooltipString from \"~/strings/tooltipString\";\nimport tooltipComponent from \"~/strings/tooltipComponent\";\nimport popoverString from \"~/strings/popoverString\";\nimport popoverComponent from \"~/strings/popoverComponent\";\nimport modalString from \"~/strings/modalString\";\nimport offcanvasString from \"~/strings/offcanvasString\";\n\nimport styleTip from \"~/util/styleTip\";\nimport createTip from \"~/util/createTip\";\nimport { appendPopup, hasPopup, removePopup } from \"~/util/popupContainer\";\nimport getElementContainer from \"~/util/getElementContainer\";\nimport tooltipDefaults from \"~/util/tooltipDefaults\";\nimport BaseComponent from \"./base-component\";\nimport type { TooltipEvent, TooltipOptions } from \"~/interface/tooltip\";\nimport type { PopoverEvent, PopoverOptions } from \"~/interface/popover\";\n\n// TOOLTIP PRIVATE GC\n// ==================\nconst tooltipSelector =\n `[${dataBsToggle}=\"${tooltipString}\"],[data-tip=\"${tooltipString}\"]`;\nconst titleAttr = \"title\";\n\n/**\n * Static method which returns an existing `Tooltip` instance associated\n * to a target `Element`.\n */\nlet getTooltipInstance = (element: Element) =>\n getInstance(element, tooltipComponent);\n\n/**\n * A `Tooltip` initialization callback.\n */\nconst tooltipInitCallback = (element: Element) => new Tooltip(element);\n\n// TOOLTIP PRIVATE METHODS\n// =======================\n/**\n * Removes the tooltip from the DOM.\n *\n * @param self the `Tooltip` instance\n */\nconst removeTooltip = (self: Tooltip) => {\n const { element, tooltip, container } = self;\n removeAttribute(element, ariaDescribedBy);\n removePopup(\n tooltip,\n container,\n );\n};\n\n/**\n * Check if container contains the tooltip.\n *\n * @param self Tooltip\n */\nconst hasTip = (self: Tooltip): boolean | undefined => {\n const { tooltip, container } = self;\n\n return tooltip &&\n hasPopup(tooltip, container);\n};\n\n/**\n * Executes after the instance has been disposed.\n *\n * @param self the `Tooltip` instance\n * @param callback the parent dispose callback\n */\nconst disposeTooltipComplete = (self: Tooltip, callback?: () => void) => {\n const { element } = self;\n self._toggleEventListeners();\n\n // istanbul ignore else @preserve\n if (\n hasAttribute(element, dataOriginalTitle) && self.name === tooltipComponent\n ) {\n toggleTooltipTitle(self);\n }\n // istanbul ignore else @preserve\n if (callback) callback();\n};\n\n/**\n * Toggles on/off the special `Tooltip` event listeners.\n *\n * @param self the `Tooltip` instance\n * @param add when `true`, event listeners are added\n */\nconst toggleTooltipAction = (self: Tooltip, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element } = self;\n\n action(\n getDocument(element),\n touchstartEvent,\n self.handleTouch,\n passiveHandler,\n );\n};\n\n/**\n * Executes after the tooltip was shown to the user.\n *\n * @param self the `Tooltip` instance\n */\nconst tooltipShownAction = (self: Tooltip) => {\n const { element } = self;\n const shownTooltipEvent = createCustomEvent<\n Record,\n TooltipEvent | PopoverEvent\n >(\n `shown.bs.${toLowerCase(self.name)}`,\n );\n\n toggleTooltipAction(self, true);\n dispatchEvent(element, shownTooltipEvent);\n Timer.clear(element, \"in\");\n};\n\n/**\n * Executes after the tooltip was hidden to the user.\n *\n * @param self the `Tooltip` instance\n */\nconst tooltipHiddenAction = (self: Tooltip) => {\n const { element } = self;\n const hiddenTooltipEvent = createCustomEvent<\n Record,\n TooltipEvent | PopoverEvent\n >(\n `hidden.bs.${toLowerCase(self.name)}`,\n );\n\n toggleTooltipAction(self);\n removeTooltip(self);\n dispatchEvent(element, hiddenTooltipEvent);\n\n Timer.clear(element, \"out\");\n};\n\n/**\n * Toggles on/off the `Tooltip` event listeners that hide/update the tooltip.\n *\n * @param self the `Tooltip` instance\n * @param add when `true`, event listeners are added\n */\nconst toggleTooltipOpenHandlers = (self: Tooltip, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element, tooltip } = self;\n const parentModal = closest(element, `.${modalString}`);\n const parentOffcanvas = closest(element, `.${offcanvasString}`);\n\n if (add) {\n [element, tooltip]\n .forEach((target) => self._observer.observe(target));\n } else self._observer.disconnect();\n\n // dismiss tooltips inside modal / offcanvas\n if (parentModal) {\n action(parentModal, `hide.bs.${modalString}`, self.handleHide);\n }\n if (parentOffcanvas) {\n action(parentOffcanvas, `hide.bs.${offcanvasString}`, self.handleHide);\n }\n};\n\n/**\n * Toggles the `title` and `data-original-title` attributes.\n *\n * @param self the `Tooltip` instance\n * @param content when `true`, event listeners are added\n */\nconst toggleTooltipTitle = (self: Tooltip, content?: string) => {\n // [0 - add, 1 - remove] | [0 - remove, 1 - add]\n const titleAtt = [dataOriginalTitle, titleAttr];\n const { element } = self;\n\n setAttribute(\n element,\n titleAtt[content ? 0 : 1],\n content ||\n getAttribute(element, titleAtt[0]) ||\n // istanbul ignore next @preserve\n \"\",\n );\n removeAttribute(element, titleAtt[content ? 1 : 0]);\n};\n\n// TOOLTIP DEFINITION\n// ==================\n/** Creates a new `Tooltip` instance. */\nexport default class Tooltip extends BaseComponent {\n static selector = tooltipSelector;\n static init = tooltipInitCallback;\n static getInstance = getTooltipInstance;\n static styleTip = styleTip;\n declare element: Element & HTMLOrSVGElement;\n declare options: TooltipOptions;\n declare btn?: HTMLElement;\n declare tooltip: HTMLElement;\n declare container: HTMLElement;\n declare offsetParent: Element | Window;\n declare arrow: HTMLElement;\n declare enabled: boolean;\n declare id: string;\n declare _observer: PositionObserver;\n\n /**\n * @param target the target element\n * @param config the instance options\n */\n constructor(target: Element | string, config?: Partial) {\n super(target, config);\n\n const { element } = this;\n const isTooltip = this.name === tooltipComponent;\n const tipString = isTooltip ? tooltipString : popoverString;\n const tipComponent = isTooltip ? tooltipComponent : popoverComponent;\n\n // istanbul ignore next @preserve: this is to set Popover too\n getTooltipInstance = (elem: Element) =>\n getInstance(elem, tipComponent);\n\n // additional properties\n this.enabled = true;\n /** Set unique ID for `aria-describedby`. */\n this.id = `${tipString}-${getUID(element, tipString)}`;\n\n // instance options\n const { options } = this;\n\n // invalidate\n // istanbul ignore else @preserve\n if (((!options.title && isTooltip) || (!isTooltip && !options.content))) {\n return;\n }\n\n // reset default options\n ObjectAssign(tooltipDefaults, { titleAttr: \"\" });\n\n // set title attributes and add event listeners\n // istanbul ignore else @preserve\n if (\n hasAttribute(element, titleAttr) && isTooltip &&\n typeof options.title === \"string\"\n ) {\n toggleTooltipTitle(this, options.title);\n }\n\n // set containers\n const container = getElementContainer(element);\n const offsetParent = [\"sticky\", \"fixed\", \"relative\"].some(\n (position) =>\n getElementStyle(container, \"position\") ===\n position,\n )\n ? container\n : getWindow(element);\n\n this.container = container;\n this.offsetParent = offsetParent;\n\n // create tooltip here\n createTip(this);\n\n /* istanbul ignore if @preserve */\n if (!this.tooltip) return;\n\n // create observer\n this._observer = new PositionObserver(() => this.update());\n\n // attach events\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return tooltipComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return tooltipDefaults;\n }\n\n // TOOLTIP PUBLIC METHODS\n // ======================\n /** Handles the focus event on iOS. */\n // istanbul ignore next @preserve - impossible to test without Apple device\n handleFocus = () => focus(this.element as HTMLElement);\n /** Shows the tooltip. */\n handleShow = () => this.show();\n show() {\n const { options, tooltip, element, container, id } = this;\n const { animation } = options;\n const outTimer = Timer.get(element, \"out\");\n\n Timer.clear(element, \"out\");\n\n if (tooltip && !outTimer && !hasTip(this)) {\n Timer.set(\n element,\n () => {\n const showTooltipEvent = createCustomEvent<\n Record,\n TooltipEvent | PopoverEvent\n >(\n `show.bs.${toLowerCase(this.name)}`,\n );\n dispatchEvent(element, showTooltipEvent);\n\n // istanbul ignore else @preserve\n if (!showTooltipEvent.defaultPrevented) {\n // append to container\n appendPopup(tooltip, container);\n\n setAttribute(element, ariaDescribedBy, `#${id}`);\n\n this.update();\n toggleTooltipOpenHandlers(this, true);\n\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, showClass)) addClass(tooltip, showClass);\n // istanbul ignore else @preserve\n if (animation) {\n emulateTransitionEnd(tooltip, () => tooltipShownAction(this));\n } else tooltipShownAction(this);\n }\n },\n 17,\n \"in\",\n );\n }\n }\n\n /** Hides the tooltip. */\n handleHide = () => this.hide();\n hide() {\n const { options, tooltip, element } = this;\n const { animation, delay } = options;\n\n Timer.clear(element, \"in\");\n\n // istanbul ignore else @preserve\n if (tooltip && hasTip(this)) {\n Timer.set(\n element,\n () => {\n const hideTooltipEvent = createCustomEvent<\n Record,\n TooltipEvent | PopoverEvent\n >(\n `hide.bs.${toLowerCase(this.name)}`,\n );\n dispatchEvent(element, hideTooltipEvent);\n\n // istanbul ignore else @preserve\n if (!hideTooltipEvent.defaultPrevented) {\n this.update();\n removeClass(tooltip, showClass);\n toggleTooltipOpenHandlers(this);\n\n // istanbul ignore else @preserve\n if (animation) {\n emulateTransitionEnd(tooltip, () => tooltipHiddenAction(this));\n } else tooltipHiddenAction(this);\n }\n },\n delay + 17,\n \"out\",\n );\n }\n }\n\n /** Updates the tooltip position. */\n update = () => {\n styleTip(this);\n };\n\n /** Toggles the tooltip visibility. */\n toggle = () => {\n const { tooltip } = this;\n\n if (tooltip && !hasTip(this)) this.show();\n else this.hide();\n };\n\n /** Enables the tooltip. */\n enable() {\n const { enabled } = this;\n // istanbul ignore else @preserve\n if (!enabled) {\n this._toggleEventListeners(true);\n this.enabled = !enabled;\n }\n }\n\n /** Disables the tooltip. */\n disable() {\n const { tooltip, enabled } = this;\n // istanbul ignore else @preserve\n if (enabled) {\n if (tooltip && hasTip(this)) this.hide();\n this._toggleEventListeners();\n this.enabled = !enabled;\n }\n }\n\n /** Toggles the `disabled` property. */\n toggleEnabled() {\n if (!this.enabled) this.enable();\n else this.disable();\n }\n\n /**\n * Handles the `touchstart` event listener for `Tooltip`\n *\n * @this {Tooltip}\n * @param {TouchEvent} e the `Event` object\n */\n handleTouch = ({ target }: TouchEvent) => {\n const { tooltip, element } = this;\n\n // istanbul ignore if @preserve\n if (\n (tooltip && tooltip.contains(target)) ||\n target === element ||\n (target && element.contains(target))\n ) {\n // smile for ESLint\n } else {\n this.hide();\n }\n };\n\n /**\n * Toggles on/off the `Tooltip` event listeners.\n *\n * @param add when `true`, event listeners are added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n // btn is only for dismissible popover\n const { element, options, btn } = this;\n const { trigger } = options;\n const isPopover = this.name !== tooltipComponent;\n const dismissible = isPopover && (options as PopoverOptions).dismissible\n ? true\n : false;\n\n // istanbul ignore else @preserve\n if (!trigger.includes(\"manual\")) {\n this.enabled = !!add;\n\n const triggerOptions = trigger.split(\" \");\n\n triggerOptions.forEach((tr) => {\n // istanbul ignore else @preserve\n if (tr === mousehoverEvent) {\n action(element, mousedownEvent, this.handleShow);\n action(element, mouseenterEvent, this.handleShow);\n\n // istanbul ignore else @preserve\n if (!dismissible) {\n action(element, mouseleaveEvent, this.handleHide);\n action(\n getDocument(element),\n touchstartEvent,\n this.handleTouch,\n passiveHandler,\n );\n }\n } else if (tr === mouseclickEvent) {\n action(element, tr, !dismissible ? this.toggle : this.handleShow);\n } else if (tr === focusEvent) {\n action(element, focusinEvent, this.handleShow);\n // istanbul ignore else @preserve\n if (!dismissible) action(element, focusoutEvent, this.handleHide);\n // istanbul ignore else @preserve\n if (isApple()) {\n action(element, mouseclickEvent, this.handleFocus);\n }\n }\n // istanbul ignore else @preserve\n if (dismissible && btn) {\n action(btn, mouseclickEvent, this.handleHide);\n }\n });\n }\n };\n\n /** Removes the `Tooltip` from the target element. */\n dispose() {\n const { tooltip, options } = this;\n const clone = { ...this, name: this.name };\n const callback = () =>\n setTimeout(\n () => disposeTooltipComplete(clone, () => super.dispose()),\n 17,\n );\n\n if (options.animation && hasTip(clone)) {\n this.options.delay = 0; // reset delay\n this.hide();\n emulateTransitionEnd(tooltip, callback);\n } else {\n callback();\n }\n }\n}\n"],"names":["popoverString","popoverComponent","tooltipString","getTipTemplate","tipType","isTooltip","bodyClass","header","arrow","body","tipClassPositions","styleTip","self","tipClasses","element","tooltip","container","offsetParent","options","RTL","isRTL","scrollLeft","scrollTop","getNodeScroll","setElementStyle","tipWidth","tipHeight","htmlcw","htmlch","htmlow","getDocumentElement","placement","parentCWidth","parentOWidth","fixedParent","getElementStyle","scrollbarWidth","leftBoundry","rightBoundry","observerEntry","elemWidth","elemHeight","elemRectLeft","elemRectRight","elemRectTop","getBoundingClientRect","elemOffsetLeft","elemOffsetTop","getRectRelativeToOffsetParent","topPosition","bottomPosition","leftPosition","rightPosition","arrowTop","arrowLeft","arrowRight","arrowWidth","arrowHeight","arrowAdjust","topExceed","bottomExceed","leftExceed","rightExceed","horizontals","verticals","isHTMLElement","updatedTooltipEvent","createCustomEvent","toLowerCase","dispatchEvent","tooltipDefaults","dataOriginalTitle","tooltipComponent","setHtml","content","sanitizeFn","isString","dirty","isFunction","tempDocument","isNodeList","isArray","isNode","createTip","id","title","template","animation","customClass","dismissible","btnClose","tipString","tipPositions","titleParts","contentParts","placementClass","tooltipTemplate","htmlMarkup","createElement","setAttribute","tooltipHeader","querySelector","tooltipBody","tempTitle","tempContent","tempBtn","addClass","hasClass","fadeClass","getElementContainer","majorBlockTags","containers","parentNode","getParentNode","isShadowRoot","isTableElement","c","i","r","getDocument","tooltipSelector","dataBsToggle","titleAttr","getTooltipInstance","getInstance","tooltipInitCallback","Tooltip","removeTooltip","removeAttribute","ariaDescribedBy","removePopup","hasTip","hasPopup","disposeTooltipComplete","callback","hasAttribute","toggleTooltipTitle","toggleTooltipAction","add","action","addListener","removeListener","touchstartEvent","passiveHandler","tooltipShownAction","shownTooltipEvent","Timer","tooltipHiddenAction","hiddenTooltipEvent","toggleTooltipOpenHandlers","parentModal","closest","modalString","parentOffcanvas","offcanvasString","target","titleAtt","getAttribute","BaseComponent","config","tipComponent","elem","getUID","ObjectAssign","position","getWindow","PositionObserver","focus","outTimer","showTooltipEvent","appendPopup","showClass","emulateTransitionEnd","delay","hideTooltipEvent","removeClass","enabled","btn","trigger","tr","mousehoverEvent","mousedownEvent","mouseenterEvent","mouseleaveEvent","mouseclickEvent","focusEvent","focusinEvent","focusoutEvent","isApple","clone"],"mappings":"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"}