import Component from "@glimmer/component"; import { cached } from "@glimmer/tracking"; import { getOwner } from "@ember/application"; import { concat } from "@ember/helper"; import { action } from "@ember/object"; import { next } from "@ember/runloop"; import { service } from "@ember/service"; import { modifier } from "ember-modifier"; import { and } from "truth-helpers"; import concatClass from "discourse/helpers/concat-class"; import icon from "discourse-common/helpers/d-icon"; import DFloatBody from "float-kit/components/d-float-body"; import { TOOLTIP } from "float-kit/lib/constants"; import DTooltipInstance from "float-kit/lib/d-tooltip-instance"; export default class DTooltip extends Component { @service tooltip; @service internalTooltip; registerTrigger = modifier((element) => { if (!this.tooltipInstance?.trigger) { next(() => { this.tooltipInstance.trigger = element; this.options.onRegisterApi?.(this.tooltipInstance); }); } }); @cached get tooltipInstance() { return new DTooltipInstance(getOwner(this), { ...this.allowedProperties(), ...{ autoUpdate: true, listeners: true }, }); } get options() { return this.tooltipInstance?.options; } get componentArgs() { return { close: this.tooltip.close, data: this.options.data, }; } @action allowedProperties() { const properties = {}; Object.keys(TOOLTIP.options).forEach((key) => { const value = TOOLTIP.options[key]; properties[key] = this.args[key] ?? value; }); return properties; } }