import { __decorate } from "tslib";
import { html } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import { createRef, ref } from 'lit/directives/ref.js';
import { when } from 'lit/directives/when.js';
import { getOverflowAncestors } from '@floating-ui/utils/dom';
import { $ } from '@mdui/jq/$.js';
import '@mdui/jq/methods/css.js';
import '@mdui/jq/methods/filter.js';
import '@mdui/jq/methods/height.js';
import '@mdui/jq/methods/prop.js';
import '@mdui/jq/methods/width.js';
import { MduiElement } from '@mdui/shared/base/mdui-element.js';
import { DefinedController } from '@mdui/shared/controllers/defined.js';
import { HasSlotController } from '@mdui/shared/controllers/has-slot.js';
import { HoverController } from '@mdui/shared/controllers/hover.js';
import { watch } from '@mdui/shared/decorators/watch.js';
import { animateTo, stopAnimations } from '@mdui/shared/helpers/animate.js';
import { booleanConverter } from '@mdui/shared/helpers/decorator.js';
import { getDuration, getEasing } from '@mdui/shared/helpers/motion.js';
import { observeResize } from '@mdui/shared/helpers/observeResize.js';
import { componentStyle } from '@mdui/shared/lit-styles/component-style.js';
import { style } from './style.js';
/**
* @summary 工具提示组件
*
* ```html
*
* ..button
*
* ```
*
* @event open - tooltip 开始显示时,事件被触发。可以通过调用 `event.preventDefault()` 阻止 tooltip 打开
* @event opened - tooltip 显示动画完成时,事件被触发
* @event close - tooltip 开始隐藏时,事件被触发。可以通过调用 `event.preventDefault()` 阻止 tooltip 关闭
* @event closed - tooltip 隐藏动画完成时,事件被触发
*
* @slot - tooltip 触发的目标元素,只有 `default` slot 中的第一个元素会作为目标元素
* @slot headline - tooltip 的标题,只有当 `variant="rich"` 时,此 slot 才有效
* @slot content - tooltip 的内容,可以包含 HTML。若只包含纯文本,可以使用 `content` 属性代替
* @slot action - tooltip 底部的按钮,只有当 `variant="rich"` 时,此 slot 才有效
*
* @csspart popup - tooltip 的容器
* @csspart headline - 标题
* @csspart content - 正文
* @csspart action - 操作按钮
*
* @cssprop --shape-corner-plain - 当 variant="plain" 时,组件的圆角大小。可以指定一个具体的像素值;但更推荐引用[设计令牌](/docs/2/styles/design-tokens#shape-corner)
* @cssprop --shape-corner-rich - 当 variant="rich" 时,组件的圆角大小。可以指定一个具体的像素值;但更推荐引用[设计令牌](/docs/2/styles/design-tokens#shape-corner)
* @cssprop --z-index - 组件的 CSS `z-index` 值
*/
let Tooltip = class Tooltip extends MduiElement {
constructor() {
super();
/**
* tooltip 的形状。默认为 `plain`。可选值包括:
*
* * `plain`:纯文本,适用于简单的单行文本
* * `rich`:富文本,可以包含标题、正文和操作按钮
*/
this.variant = 'plain';
/**
* tooltip 的位置。默认为 `auto`。可选值包括:
*
* * `auto`:自动判断位置。`variant="plain"` 时,优先使用 `top`;`variant="rich"` 时,优先使用 `bottom-right`
* * `top-left`:位于左上方
* * `top-start`:位于上方,左对齐
* * `top`:位于上方,居中对齐
* * `top-end`:位于上方,右对齐
* * `top-right`:位于右上方
* * `bottom-left`:位于左下方
* * `bottom-start`:位于下方,左对齐
* * `bottom`:位于下方,居中对齐
* * `bottom-end`:位于下方,右对齐
* * `bottom-right`:位于右下方
* * `left-start`:位于左侧,顶部对齐
* * `left`:位于左侧,居中对齐
* * `left-end`:位于左侧,底部对齐
* * `right-start`:位于右侧,顶部对齐
* * `right`:位于右侧,居中对齐
* * `right-end`:位于右侧,底部对齐
*/
this.placement = 'auto';
/**
* 鼠标悬浮触发显示的延时,单位为毫秒
*/
this.openDelay = 150;
/**
* 鼠标悬浮触发隐藏的延时,单位为毫秒
*/
this.closeDelay = 150;
/**
* 触发方式,支持多个值,用空格分隔。可选值包括:
*
* * `click`:点击时触发
* * `hover`:鼠标悬浮时触发
* * `focus`:聚焦时触发
* * `manual`:只能通过编程方式打开和关闭 tooltip,不能再指定其他触发方式
*/
this.trigger = 'hover focus';
/**
* 是否禁用 tooltip
*/
this.disabled = false;
/**
* 是否显示 tooltip
*/
this.open = false;
this.popupRef = createRef();
this.hasSlotController = new HasSlotController(this, 'headline', 'action');
this.hoverController = new HoverController(this, this.popupRef);
this.definedController = new DefinedController(this, {
needDomReady: true,
});
this.onDocumentClick = this.onDocumentClick.bind(this);
this.onWindowScroll = this.onWindowScroll.bind(this);
this.onFocus = this.onFocus.bind(this);
this.onBlur = this.onBlur.bind(this);
this.onClick = this.onClick.bind(this);
this.onKeydown = this.onKeydown.bind(this);
this.onMouseEnter = this.onMouseEnter.bind(this);
this.onMouseLeave = this.onMouseLeave.bind(this);
}
/**
* 获取第一个非