@brightspot/ui 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/components/avatar/Avatar.d.ts +1 -1
- package/dist/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.js +3 -1
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/popover/Popover.d.ts +161 -0
- package/dist/components/popover/Popover.d.ts.map +1 -0
- package/dist/components/popover/Popover.js +436 -0
- package/dist/components/popover/Popover.js.map +1 -0
- package/dist/components/widget/Widget.css +104 -0
- package/dist/components/widget/Widget.d.ts +170 -0
- package/dist/components/widget/Widget.d.ts.map +1 -0
- package/dist/components/widget/Widget.js +434 -0
- package/dist/components/widget/Widget.js.map +1 -0
- package/dist/custom-elements.json +687 -184
- package/dist/global.d.ts +5 -0
- package/dist/storybook/assets/{Avatar.stories-QxWs-YfX.js → Avatar.stories-CPVNxsaA.js} +37 -32
- package/dist/storybook/assets/AvatarGroup.stories-Bl65NGHl.js +225 -0
- package/dist/storybook/assets/{Badge.stories-BpaApWbR.js → Badge.stories-Bbnc6fRy.js} +1 -1
- package/dist/storybook/assets/{Button.stories-C5h2usmd.js → Button.stories-CRJ5n2y4.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories-DlPOiGja.js → CircularProgress.stories-D9vBj3JJ.js} +1 -1
- package/dist/storybook/assets/{ClipboardMixin.stories-Bb45-UOM.js → ClipboardMixin.stories-Dm-Jm4yb.js} +7 -7
- package/dist/storybook/assets/Color-6BZIO3FS-BcNIJY1U.js +1 -0
- package/dist/storybook/assets/{Colors.stories-DP2JKWUJ.js → Colors.stories-B9_090wL.js} +1 -1
- package/dist/storybook/assets/ComponentStatesMixin-ChiFBCuo.js +1 -0
- package/dist/storybook/assets/{ComponentStatesMixin.stories-CyQ2aSTu.js → ComponentStatesMixin.stories-DHv9MHmE.js} +3 -3
- package/dist/storybook/assets/{CopyToClipboard.stories-DR7pckeV.js → CopyToClipboard.stories-gtJlTP1l.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-hkqyvqmg.js → Debounce.stories-BBNX7mJA.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-Dtw9GMer.js → DocsRenderer-LL677BLK-D-E99pXl.js} +6 -6
- package/dist/storybook/assets/{Events.stories-BAgDzdyl.js → Events.stories-DDmydlh_.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-CN_fPsRf.js → Heading.stories-BLGfko-i.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-CSx_2K8V.js → Icon.stories-BHnAGcFF.js} +1 -1
- package/dist/storybook/assets/{LinearProgress.stories-In48DY2g.js → LinearProgress.stories-Dx26a0P_.js} +1 -1
- package/dist/storybook/assets/Popover.stories-CbqpY6YR.js +431 -0
- package/dist/storybook/assets/ReadyMixin-BHiHoIbr.js +1 -0
- package/dist/storybook/assets/{Rtc.stories-19d7WXe4.js → Rtc.stories-CAjDv_Ub.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-BFjracVd.js → ScrollShadow.stories-BSV4U-tq.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-DD6ydiVq.js → Throttle.stories-kaxXQ8RZ.js} +1 -1
- package/dist/storybook/assets/Tooltip.stories-CsxXkztr.js +143 -0
- package/dist/storybook/assets/Widget.stories-DqATHnSq.js +233 -0
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-Be1dKqOF.js → WithTooltip-65CFNBJE-BtbbFYSA.js} +2 -2
- package/dist/storybook/assets/custom-element-UsVr97OX.js +1 -0
- package/dist/storybook/assets/{formatter-EIJCOSYU-anC2P5HS.js → formatter-EIJCOSYU-C87Csnpu.js} +1 -1
- package/dist/storybook/assets/if-defined-COHr0XBn.js +1 -0
- package/dist/storybook/assets/{iframe-B4njXYq6.css → iframe-BkDGeDre.css} +1 -1
- package/dist/storybook/assets/{iframe-Bl9oHz5c.js → iframe-CcloOV09.js} +77 -77
- package/dist/storybook/assets/{index-Cn5E5A3G.js → index-DP7vnJf7.js} +1 -1
- package/dist/storybook/assets/{onFind.stories-BMDLUk0l.js → onFind.stories-BxvoC-Z-.js} +1 -1
- package/dist/storybook/assets/{onRemove.stories-C3FcxtYh.js → onRemove.stories-Dwoixzb0.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-B8Zyu0Th.js → onVisible.stories-CinmRF9w.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BfTKsIVL.js → syntaxhighlighter-ED5Y7EFY-BHLkDkOn.js} +1 -1
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/index.json +1 -1
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind-plugin-popover.d.ts +2 -0
- package/dist/tailwind-plugin-popover.d.ts.map +1 -0
- package/dist/tailwind-plugin-popover.js +177 -0
- package/dist/tailwind-plugin-popover.js.map +1 -0
- package/dist/tailwind-plugin-popover.ts +202 -0
- package/dist/tailwind-plugin-tooltip.d.ts +2 -0
- package/dist/tailwind-plugin-tooltip.d.ts.map +1 -0
- package/dist/tailwind-plugin-tooltip.js +184 -0
- package/dist/tailwind-plugin-tooltip.js.map +1 -0
- package/dist/tailwind-plugin-tooltip.ts +209 -0
- package/dist/util/EventEmitterMixin.d.ts +11 -0
- package/dist/util/EventEmitterMixin.d.ts.map +1 -1
- package/dist/util/EventEmitterMixin.js +1 -1
- package/dist/util/EventEmitterMixin.js.map +1 -1
- package/dist/util/TooltipController.d.ts +37 -0
- package/dist/util/TooltipController.d.ts.map +1 -0
- package/dist/util/TooltipController.js +133 -0
- package/dist/util/TooltipController.js.map +1 -0
- package/dist/util/TooltipMixin.d.ts +42 -0
- package/dist/util/TooltipMixin.d.ts.map +1 -0
- package/dist/util/TooltipMixin.js +401 -0
- package/dist/util/TooltipMixin.js.map +1 -0
- package/package.json +1 -1
- package/dist/storybook/assets/AvatarGroup.stories-Cy_Bvn7E.js +0 -211
- package/dist/storybook/assets/Color-6BZIO3FS-CcgGYVAo.js +0 -1
- package/dist/storybook/assets/ComponentStatesMixin-B7ci0thi.js +0 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
type Constructor<T = object> = new (...args: any[]) => T;
|
|
3
|
+
export type TooltipOffset = 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
export declare class TooltipMixinInterface {
|
|
5
|
+
tooltip: string;
|
|
6
|
+
tooltipPosition: 'top' | 'bottom' | 'left' | 'right';
|
|
7
|
+
tooltipDelay: number;
|
|
8
|
+
tooltipOffset: TooltipOffset | null;
|
|
9
|
+
tooltipNoArrow: boolean;
|
|
10
|
+
tooltipTrigger: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Mixin that adds declarative tooltip support to any LitElement component.
|
|
14
|
+
*
|
|
15
|
+
* Uses the native Popover API for top-layer rendering and CSS anchor positioning
|
|
16
|
+
* for viewport-aware placement. The tooltip element is appended as the last child
|
|
17
|
+
* of the host (safe from Lit re-render interference in Light DOM components).
|
|
18
|
+
*
|
|
19
|
+
* For click triggers (`popover="auto"`), the browser provides light dismiss
|
|
20
|
+
* (Escape key and click-outside). For hover/focus triggers (`popover="manual"`),
|
|
21
|
+
* show/hide is controlled by the mixin.
|
|
22
|
+
*
|
|
23
|
+
* @mixin
|
|
24
|
+
*
|
|
25
|
+
* @cssprop --tooltip-color-background - Background color (default: white)
|
|
26
|
+
* @cssprop --tooltip-color-text - Text color (default: oklch gray-900)
|
|
27
|
+
* @cssprop --tooltip-border-radius - Border radius (default: 0.5rem / lg)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* class MyComponent extends TooltipMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
32
|
+
* // Component now supports tooltip, tooltip-position, tooltip-delay attributes
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* ```html
|
|
37
|
+
* <my-component tooltip="Hello!" tooltip-position="bottom"></my-component>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare const TooltipMixin: <T extends Constructor<LitElement>>(superClass: T) => Constructor<TooltipMixinInterface> & T;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=TooltipMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipMixin.d.ts","sourceRoot":"","sources":["../../src/util/TooltipMixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAGhC,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAExD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAA;IACnC,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;CACvB;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,KAiY/C,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAClE,CAAA"}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { LitElement } from 'lit';
|
|
8
|
+
import { property } from 'lit/decorators.js';
|
|
9
|
+
// Tailwind content scanning requires complete class names (no template literals).
|
|
10
|
+
const POSITION_CLASSES = {
|
|
11
|
+
top: 'btu-tooltip-top',
|
|
12
|
+
bottom: 'btu-tooltip-bottom',
|
|
13
|
+
left: 'btu-tooltip-left',
|
|
14
|
+
right: 'btu-tooltip-right',
|
|
15
|
+
};
|
|
16
|
+
const OFFSET_CLASSES = {
|
|
17
|
+
sm: 'btu-tooltip-offset-sm',
|
|
18
|
+
md: 'btu-tooltip-offset-md',
|
|
19
|
+
lg: 'btu-tooltip-offset-lg',
|
|
20
|
+
xl: 'btu-tooltip-offset-xl',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Mixin that adds declarative tooltip support to any LitElement component.
|
|
24
|
+
*
|
|
25
|
+
* Uses the native Popover API for top-layer rendering and CSS anchor positioning
|
|
26
|
+
* for viewport-aware placement. The tooltip element is appended as the last child
|
|
27
|
+
* of the host (safe from Lit re-render interference in Light DOM components).
|
|
28
|
+
*
|
|
29
|
+
* For click triggers (`popover="auto"`), the browser provides light dismiss
|
|
30
|
+
* (Escape key and click-outside). For hover/focus triggers (`popover="manual"`),
|
|
31
|
+
* show/hide is controlled by the mixin.
|
|
32
|
+
*
|
|
33
|
+
* @mixin
|
|
34
|
+
*
|
|
35
|
+
* @cssprop --tooltip-color-background - Background color (default: white)
|
|
36
|
+
* @cssprop --tooltip-color-text - Text color (default: oklch gray-900)
|
|
37
|
+
* @cssprop --tooltip-border-radius - Border radius (default: 0.5rem / lg)
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* class MyComponent extends TooltipMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
42
|
+
* // Component now supports tooltip, tooltip-position, tooltip-delay attributes
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* ```html
|
|
47
|
+
* <my-component tooltip="Hello!" tooltip-position="bottom"></my-component>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export const TooltipMixin = (superClass) => {
|
|
51
|
+
class TooltipMixinClass extends superClass {
|
|
52
|
+
constructor() {
|
|
53
|
+
super(...arguments);
|
|
54
|
+
/**
|
|
55
|
+
* Tooltip text content. Set to empty string to remove the tooltip.
|
|
56
|
+
* @attr
|
|
57
|
+
*/
|
|
58
|
+
this.tooltip = '';
|
|
59
|
+
/**
|
|
60
|
+
* Position relative to the host element. Auto-flips when constrained by the viewport.
|
|
61
|
+
* @attr
|
|
62
|
+
*/
|
|
63
|
+
this.tooltipPosition = 'top';
|
|
64
|
+
/**
|
|
65
|
+
* Show delay in milliseconds (hover trigger only).
|
|
66
|
+
* @attr
|
|
67
|
+
*/
|
|
68
|
+
this.tooltipDelay = 300;
|
|
69
|
+
/**
|
|
70
|
+
* Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).
|
|
71
|
+
* @attr
|
|
72
|
+
*/
|
|
73
|
+
this.tooltipOffset = null;
|
|
74
|
+
/**
|
|
75
|
+
* Hide the arrow pseudo-element.
|
|
76
|
+
* @attr
|
|
77
|
+
*/
|
|
78
|
+
this.tooltipNoArrow = false;
|
|
79
|
+
/**
|
|
80
|
+
* Space-separated trigger types: 'hover', 'focus', 'click'.
|
|
81
|
+
* @attr
|
|
82
|
+
*/
|
|
83
|
+
this.tooltipTrigger = 'hover focus';
|
|
84
|
+
/** @internal */
|
|
85
|
+
this._tooltipEl = null;
|
|
86
|
+
/** @internal */
|
|
87
|
+
this._tooltipId = `btu-tooltip-${crypto.randomUUID()}`;
|
|
88
|
+
/** @internal */
|
|
89
|
+
this._anchorName = `--btu-trigger-${crypto.randomUUID()}`;
|
|
90
|
+
/** @internal */
|
|
91
|
+
this._showTimer = null;
|
|
92
|
+
/** @internal */
|
|
93
|
+
this._isVisible = false;
|
|
94
|
+
/** @internal Parsed set of active triggers */
|
|
95
|
+
this._activeTriggers = new Set();
|
|
96
|
+
/** @internal bound listeners for cleanup */
|
|
97
|
+
this._onMouseEnter = this._handleMouseEnter.bind(this);
|
|
98
|
+
this._onMouseLeave = this._handleMouseLeave.bind(this);
|
|
99
|
+
this._onFocusIn = this._handleFocusIn.bind(this);
|
|
100
|
+
this._onFocusOut = this._handleFocusOut.bind(this);
|
|
101
|
+
this._onClick = this._handleClick.bind(this);
|
|
102
|
+
this._onNativeToggle = this._handleNativeToggle.bind(this);
|
|
103
|
+
this._onKeyDown = this._handleKeyDown.bind(this);
|
|
104
|
+
this._onDocumentClick = null;
|
|
105
|
+
}
|
|
106
|
+
connectedCallback() {
|
|
107
|
+
super.connectedCallback();
|
|
108
|
+
this._bindTriggerListeners();
|
|
109
|
+
}
|
|
110
|
+
disconnectedCallback() {
|
|
111
|
+
this._clearShowTimer();
|
|
112
|
+
this._removeDocumentClickListener();
|
|
113
|
+
this._unbindTriggerListeners();
|
|
114
|
+
if (this._tooltipEl) {
|
|
115
|
+
try {
|
|
116
|
+
this._tooltipEl.hidePopover();
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
if (!(e instanceof DOMException && e.name === 'InvalidStateError')) {
|
|
120
|
+
console.warn('[btu-tooltip] Failed to hide tooltip during disconnect:', e);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
this._tooltipEl.removeEventListener('toggle', this._onNativeToggle);
|
|
124
|
+
this._tooltipEl.remove();
|
|
125
|
+
this._tooltipEl = null;
|
|
126
|
+
}
|
|
127
|
+
this._removeAriaDescribedBy();
|
|
128
|
+
this.style.removeProperty('anchor-name');
|
|
129
|
+
this._isVisible = false;
|
|
130
|
+
super.disconnectedCallback();
|
|
131
|
+
}
|
|
132
|
+
updated(changedProperties) {
|
|
133
|
+
super.updated(changedProperties);
|
|
134
|
+
if (changedProperties.has('tooltipTrigger')) {
|
|
135
|
+
this._unbindTriggerListeners();
|
|
136
|
+
this._bindTriggerListeners();
|
|
137
|
+
// Update popover mode when trigger changes
|
|
138
|
+
if (this._tooltipEl) {
|
|
139
|
+
if (this._isVisible) {
|
|
140
|
+
this._hide();
|
|
141
|
+
}
|
|
142
|
+
this._tooltipEl.setAttribute('popover', this._getPopoverMode());
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (changedProperties.has('tooltip') ||
|
|
146
|
+
changedProperties.has('tooltipPosition') ||
|
|
147
|
+
changedProperties.has('tooltipDelay') ||
|
|
148
|
+
changedProperties.has('tooltipOffset') ||
|
|
149
|
+
changedProperties.has('tooltipNoArrow')) {
|
|
150
|
+
this._syncTooltipElement();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** @internal
|
|
154
|
+
* Always manual — popovertarget (needed for popover="auto" click toggle)
|
|
155
|
+
* only works on <button>/<input>, not arbitrary custom element hosts.
|
|
156
|
+
*/
|
|
157
|
+
_getPopoverMode() {
|
|
158
|
+
return 'manual';
|
|
159
|
+
}
|
|
160
|
+
/** @internal */
|
|
161
|
+
_syncTooltipElement() {
|
|
162
|
+
if (!this.tooltip) {
|
|
163
|
+
// Remove tooltip if text cleared
|
|
164
|
+
if (this._tooltipEl) {
|
|
165
|
+
this._hide();
|
|
166
|
+
this._tooltipEl.removeEventListener('toggle', this._onNativeToggle);
|
|
167
|
+
this._tooltipEl.remove();
|
|
168
|
+
this._tooltipEl = null;
|
|
169
|
+
this._removeAriaDescribedBy();
|
|
170
|
+
this.style.removeProperty('anchor-name');
|
|
171
|
+
document.removeEventListener('keydown', this._onKeyDown);
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// Set unique anchor name on host
|
|
176
|
+
this.style.setProperty('anchor-name', this._anchorName);
|
|
177
|
+
if (!this._tooltipEl) {
|
|
178
|
+
this._tooltipEl = this._createTooltipElement();
|
|
179
|
+
this.appendChild(this._tooltipEl);
|
|
180
|
+
this._appendAriaDescribedBy();
|
|
181
|
+
// Always manual mode — Escape not handled by browser, add only when tooltip exists
|
|
182
|
+
document.addEventListener('keydown', this._onKeyDown);
|
|
183
|
+
}
|
|
184
|
+
// Update text content
|
|
185
|
+
this._tooltipEl.textContent = this.tooltip;
|
|
186
|
+
// Update classes (includes offset)
|
|
187
|
+
this._tooltipEl.className = this._buildTooltipClasses();
|
|
188
|
+
}
|
|
189
|
+
/** @internal */
|
|
190
|
+
_createTooltipElement() {
|
|
191
|
+
const el = document.createElement('div');
|
|
192
|
+
el.id = this._tooltipId;
|
|
193
|
+
el.className = this._buildTooltipClasses();
|
|
194
|
+
el.setAttribute('role', 'tooltip');
|
|
195
|
+
el.setAttribute('data-tooltip-internal', '');
|
|
196
|
+
el.setAttribute('popover', this._getPopoverMode());
|
|
197
|
+
el.style.setProperty('position-anchor', this._anchorName);
|
|
198
|
+
el.textContent = this.tooltip;
|
|
199
|
+
// Listen for native toggle events — single source of truth for state
|
|
200
|
+
el.addEventListener('toggle', this._onNativeToggle);
|
|
201
|
+
return el;
|
|
202
|
+
}
|
|
203
|
+
/** @internal Builds the full class string for the tooltip element */
|
|
204
|
+
_buildTooltipClasses() {
|
|
205
|
+
const classes = ['btu-tooltip', POSITION_CLASSES[this.tooltipPosition]];
|
|
206
|
+
if (this.tooltipOffset && OFFSET_CLASSES[this.tooltipOffset])
|
|
207
|
+
classes.push(OFFSET_CLASSES[this.tooltipOffset]);
|
|
208
|
+
if (this.tooltipNoArrow)
|
|
209
|
+
classes.push('btu-tooltip-no-arrow');
|
|
210
|
+
return classes.join(' ');
|
|
211
|
+
}
|
|
212
|
+
/** @internal */
|
|
213
|
+
_hasTrigger(trigger) {
|
|
214
|
+
return this._activeTriggers.has(trigger);
|
|
215
|
+
}
|
|
216
|
+
/** @internal Parses trigger string and attaches relevant listeners */
|
|
217
|
+
_bindTriggerListeners() {
|
|
218
|
+
const VALID_TRIGGERS = new Set(['hover', 'focus', 'click']);
|
|
219
|
+
this._activeTriggers = new Set(this.tooltipTrigger.trim().split(/\s+/));
|
|
220
|
+
for (const trigger of this._activeTriggers) {
|
|
221
|
+
if (!VALID_TRIGGERS.has(trigger)) {
|
|
222
|
+
console.warn(`[btu-tooltip] Unrecognized tooltip-trigger value: "${trigger}". Valid values: hover, focus, click.`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (this._hasTrigger('hover')) {
|
|
226
|
+
this.addEventListener('mouseenter', this._onMouseEnter);
|
|
227
|
+
this.addEventListener('mouseleave', this._onMouseLeave);
|
|
228
|
+
}
|
|
229
|
+
if (this._hasTrigger('focus')) {
|
|
230
|
+
this.addEventListener('focusin', this._onFocusIn);
|
|
231
|
+
this.addEventListener('focusout', this._onFocusOut);
|
|
232
|
+
}
|
|
233
|
+
if (this._hasTrigger('click')) {
|
|
234
|
+
this.addEventListener('click', this._onClick);
|
|
235
|
+
}
|
|
236
|
+
// Keydown listener for Escape is added in _syncTooltipElement when tooltip is set
|
|
237
|
+
}
|
|
238
|
+
/** @internal Removes all trigger listeners */
|
|
239
|
+
_unbindTriggerListeners() {
|
|
240
|
+
this.removeEventListener('mouseenter', this._onMouseEnter);
|
|
241
|
+
this.removeEventListener('mouseleave', this._onMouseLeave);
|
|
242
|
+
this.removeEventListener('focusin', this._onFocusIn);
|
|
243
|
+
this.removeEventListener('focusout', this._onFocusOut);
|
|
244
|
+
this.removeEventListener('click', this._onClick);
|
|
245
|
+
document.removeEventListener('keydown', this._onKeyDown);
|
|
246
|
+
}
|
|
247
|
+
/** @internal */
|
|
248
|
+
_show() {
|
|
249
|
+
if (this._isVisible || !this._tooltipEl)
|
|
250
|
+
return;
|
|
251
|
+
try {
|
|
252
|
+
this._tooltipEl.showPopover();
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
if (!(e instanceof DOMException && e.name === 'InvalidStateError')) {
|
|
256
|
+
console.warn('[btu-tooltip] Failed to show tooltip:', e);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Click-outside dismiss for click-triggered tooltips
|
|
260
|
+
if (this._hasTrigger('click')) {
|
|
261
|
+
// Use next tick to avoid the opening click from immediately dismissing
|
|
262
|
+
setTimeout(() => {
|
|
263
|
+
this._removeDocumentClickListener();
|
|
264
|
+
this._onDocumentClick = (e) => {
|
|
265
|
+
const path = e.composedPath();
|
|
266
|
+
if (!path.includes(this) && (!this._tooltipEl || !path.includes(this._tooltipEl))) {
|
|
267
|
+
this._hide();
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
document.addEventListener('click', this._onDocumentClick);
|
|
271
|
+
}, 0);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/** @internal */
|
|
275
|
+
_hide() {
|
|
276
|
+
this._clearShowTimer();
|
|
277
|
+
this._removeDocumentClickListener();
|
|
278
|
+
if (!this._isVisible || !this._tooltipEl)
|
|
279
|
+
return;
|
|
280
|
+
try {
|
|
281
|
+
this._tooltipEl.hidePopover();
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
if (!(e instanceof DOMException && e.name === 'InvalidStateError')) {
|
|
285
|
+
console.warn('[btu-tooltip] Failed to hide tooltip:', e);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/** @internal */
|
|
290
|
+
_removeDocumentClickListener() {
|
|
291
|
+
if (this._onDocumentClick) {
|
|
292
|
+
document.removeEventListener('click', this._onDocumentClick);
|
|
293
|
+
this._onDocumentClick = null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/** @internal Native toggle event — single source of truth for state changes */
|
|
297
|
+
_handleNativeToggle(e) {
|
|
298
|
+
const { newState } = e;
|
|
299
|
+
this._isVisible = newState === 'open';
|
|
300
|
+
this.dispatchEvent(new CustomEvent(this._isVisible ? 'btu-tooltip-show' : 'btu-tooltip-hide', {
|
|
301
|
+
bubbles: true,
|
|
302
|
+
composed: true,
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
/** @internal Escape dismisses for popover="manual" (hover/focus triggers) */
|
|
306
|
+
_handleKeyDown(e) {
|
|
307
|
+
if (e.key === 'Escape') {
|
|
308
|
+
this._clearShowTimer();
|
|
309
|
+
this._hide();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** @internal */
|
|
313
|
+
_clearShowTimer() {
|
|
314
|
+
if (this._showTimer !== null) {
|
|
315
|
+
clearTimeout(this._showTimer);
|
|
316
|
+
this._showTimer = null;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/** @internal */
|
|
320
|
+
_handleMouseEnter() {
|
|
321
|
+
this._clearShowTimer();
|
|
322
|
+
this._showTimer = setTimeout(() => {
|
|
323
|
+
this._show();
|
|
324
|
+
}, this.tooltipDelay);
|
|
325
|
+
}
|
|
326
|
+
/** @internal */
|
|
327
|
+
_handleMouseLeave() {
|
|
328
|
+
this._clearShowTimer();
|
|
329
|
+
this._hide();
|
|
330
|
+
}
|
|
331
|
+
/** @internal */
|
|
332
|
+
_handleFocusIn() {
|
|
333
|
+
this._clearShowTimer();
|
|
334
|
+
this._show();
|
|
335
|
+
}
|
|
336
|
+
/** @internal */
|
|
337
|
+
_handleFocusOut() {
|
|
338
|
+
this._clearShowTimer();
|
|
339
|
+
this._hide();
|
|
340
|
+
}
|
|
341
|
+
/** @internal Click trigger toggles visibility */
|
|
342
|
+
_handleClick() {
|
|
343
|
+
this._clearShowTimer();
|
|
344
|
+
if (this._isVisible) {
|
|
345
|
+
this._hide();
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
this._show();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/** @internal Appends tooltip id to existing aria-describedby */
|
|
352
|
+
_appendAriaDescribedBy() {
|
|
353
|
+
const existing = this.getAttribute('aria-describedby');
|
|
354
|
+
if (existing) {
|
|
355
|
+
if (!existing.includes(this._tooltipId)) {
|
|
356
|
+
this.setAttribute('aria-describedby', `${existing} ${this._tooltipId}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
this.setAttribute('aria-describedby', this._tooltipId);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** @internal Removes tooltip id from aria-describedby */
|
|
364
|
+
_removeAriaDescribedBy() {
|
|
365
|
+
const existing = this.getAttribute('aria-describedby');
|
|
366
|
+
if (!existing)
|
|
367
|
+
return;
|
|
368
|
+
const ids = existing
|
|
369
|
+
.split(/\s+/)
|
|
370
|
+
.filter(id => id !== this._tooltipId)
|
|
371
|
+
.join(' ')
|
|
372
|
+
.trim();
|
|
373
|
+
if (ids) {
|
|
374
|
+
this.setAttribute('aria-describedby', ids);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.removeAttribute('aria-describedby');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
__decorate([
|
|
382
|
+
property({ attribute: 'tooltip' })
|
|
383
|
+
], TooltipMixinClass.prototype, "tooltip", void 0);
|
|
384
|
+
__decorate([
|
|
385
|
+
property({ attribute: 'tooltip-position' })
|
|
386
|
+
], TooltipMixinClass.prototype, "tooltipPosition", void 0);
|
|
387
|
+
__decorate([
|
|
388
|
+
property({ attribute: 'tooltip-delay', type: Number })
|
|
389
|
+
], TooltipMixinClass.prototype, "tooltipDelay", void 0);
|
|
390
|
+
__decorate([
|
|
391
|
+
property({ attribute: 'tooltip-offset' })
|
|
392
|
+
], TooltipMixinClass.prototype, "tooltipOffset", void 0);
|
|
393
|
+
__decorate([
|
|
394
|
+
property({ attribute: 'tooltip-no-arrow', type: Boolean })
|
|
395
|
+
], TooltipMixinClass.prototype, "tooltipNoArrow", void 0);
|
|
396
|
+
__decorate([
|
|
397
|
+
property({ attribute: 'tooltip-trigger' })
|
|
398
|
+
], TooltipMixinClass.prototype, "tooltipTrigger", void 0);
|
|
399
|
+
return TooltipMixinClass;
|
|
400
|
+
};
|
|
401
|
+
//# sourceMappingURL=TooltipMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipMixin.js","sourceRoot":"","sources":["../../src/util/TooltipMixin.ts"],"names":[],"mappings":"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"}
|