@duskmoon-dev/el-tooltip 0.4.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/dist/cjs/index.js +261 -0
- package/dist/cjs/index.js.map +11 -0
- package/dist/cjs/register.js +264 -0
- package/dist/cjs/register.js.map +12 -0
- package/dist/esm/index.js +229 -0
- package/dist/esm/index.js.map +11 -0
- package/dist/esm/register.js +228 -0
- package/dist/esm/register.js.map +12 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/el-dm-tooltip.d.ts +76 -0
- package/dist/types/el-dm-tooltip.d.ts.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/register.d.ts +2 -0
- package/dist/types/register.d.ts.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/index.ts
|
|
30
|
+
var exports_src = {};
|
|
31
|
+
__export(exports_src, {
|
|
32
|
+
register: () => register,
|
|
33
|
+
ElDmTooltip: () => ElDmTooltip
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(exports_src);
|
|
36
|
+
|
|
37
|
+
// src/el-dm-tooltip.ts
|
|
38
|
+
var import_el_core = require("@duskmoon-dev/el-core");
|
|
39
|
+
var import_tooltip = require("@duskmoon-dev/core/components/tooltip");
|
|
40
|
+
var POSITION_CLASSES = {
|
|
41
|
+
top: "tooltip-top",
|
|
42
|
+
bottom: "tooltip-bottom",
|
|
43
|
+
left: "tooltip-left",
|
|
44
|
+
right: "tooltip-right"
|
|
45
|
+
};
|
|
46
|
+
var coreStyles = import_tooltip.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
|
|
47
|
+
var styles = import_el_core.css`
|
|
48
|
+
:host {
|
|
49
|
+
display: inline-flex;
|
|
50
|
+
position: relative;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:host([hidden]) {
|
|
54
|
+
display: none !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
${coreStyles}
|
|
58
|
+
|
|
59
|
+
.tooltip-wrapper {
|
|
60
|
+
display: inline-flex;
|
|
61
|
+
position: relative;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.tooltip-content {
|
|
65
|
+
position: absolute;
|
|
66
|
+
z-index: 1000;
|
|
67
|
+
padding: 0.5rem 0.75rem;
|
|
68
|
+
background-color: var(--color-inverse-surface, #1f1f1f);
|
|
69
|
+
color: var(--color-inverse-on-surface, #fff);
|
|
70
|
+
font-size: 0.75rem;
|
|
71
|
+
line-height: 1rem;
|
|
72
|
+
border-radius: 0.375rem;
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
opacity: 0;
|
|
75
|
+
visibility: hidden;
|
|
76
|
+
transition:
|
|
77
|
+
opacity 150ms ease,
|
|
78
|
+
visibility 150ms ease;
|
|
79
|
+
pointer-events: none;
|
|
80
|
+
font-family: inherit;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.tooltip-content.visible {
|
|
84
|
+
opacity: 1;
|
|
85
|
+
visibility: visible;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.tooltip-top {
|
|
89
|
+
bottom: 100%;
|
|
90
|
+
left: 50%;
|
|
91
|
+
transform: translateX(-50%);
|
|
92
|
+
margin-bottom: 0.5rem;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.tooltip-bottom {
|
|
96
|
+
top: 100%;
|
|
97
|
+
left: 50%;
|
|
98
|
+
transform: translateX(-50%);
|
|
99
|
+
margin-top: 0.5rem;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.tooltip-left {
|
|
103
|
+
right: 100%;
|
|
104
|
+
top: 50%;
|
|
105
|
+
transform: translateY(-50%);
|
|
106
|
+
margin-right: 0.5rem;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.tooltip-right {
|
|
110
|
+
left: 100%;
|
|
111
|
+
top: 50%;
|
|
112
|
+
transform: translateY(-50%);
|
|
113
|
+
margin-left: 0.5rem;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.tooltip-arrow {
|
|
117
|
+
position: absolute;
|
|
118
|
+
width: 0;
|
|
119
|
+
height: 0;
|
|
120
|
+
border: 0.375rem solid transparent;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.tooltip-top .tooltip-arrow {
|
|
124
|
+
top: 100%;
|
|
125
|
+
left: 50%;
|
|
126
|
+
transform: translateX(-50%);
|
|
127
|
+
border-top-color: var(--color-inverse-surface, #1f1f1f);
|
|
128
|
+
border-bottom: 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.tooltip-bottom .tooltip-arrow {
|
|
132
|
+
bottom: 100%;
|
|
133
|
+
left: 50%;
|
|
134
|
+
transform: translateX(-50%);
|
|
135
|
+
border-bottom-color: var(--color-inverse-surface, #1f1f1f);
|
|
136
|
+
border-top: 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.tooltip-left .tooltip-arrow {
|
|
140
|
+
left: 100%;
|
|
141
|
+
top: 50%;
|
|
142
|
+
transform: translateY(-50%);
|
|
143
|
+
border-left-color: var(--color-inverse-surface, #1f1f1f);
|
|
144
|
+
border-right: 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.tooltip-right .tooltip-arrow {
|
|
148
|
+
right: 100%;
|
|
149
|
+
top: 50%;
|
|
150
|
+
transform: translateY(-50%);
|
|
151
|
+
border-right-color: var(--color-inverse-surface, #1f1f1f);
|
|
152
|
+
border-left: 0;
|
|
153
|
+
}
|
|
154
|
+
`;
|
|
155
|
+
|
|
156
|
+
class ElDmTooltip extends import_el_core.BaseElement {
|
|
157
|
+
static properties = {
|
|
158
|
+
content: { type: String, reflect: true },
|
|
159
|
+
position: { type: String, reflect: true, default: "top" },
|
|
160
|
+
trigger: { type: String, reflect: true, default: "hover" },
|
|
161
|
+
delay: { type: Number, reflect: true, default: 0 },
|
|
162
|
+
arrow: { type: Boolean, reflect: true, default: true },
|
|
163
|
+
disabled: { type: Boolean, reflect: true }
|
|
164
|
+
};
|
|
165
|
+
_showTimeout = null;
|
|
166
|
+
_isVisible = false;
|
|
167
|
+
constructor() {
|
|
168
|
+
super();
|
|
169
|
+
this.attachStyles(styles);
|
|
170
|
+
}
|
|
171
|
+
_show() {
|
|
172
|
+
if (this.disabled || !this.content)
|
|
173
|
+
return;
|
|
174
|
+
if (this.delay > 0) {
|
|
175
|
+
this._showTimeout = window.setTimeout(() => {
|
|
176
|
+
this._setVisible(true);
|
|
177
|
+
}, this.delay);
|
|
178
|
+
} else {
|
|
179
|
+
this._setVisible(true);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
_hide() {
|
|
183
|
+
if (this._showTimeout) {
|
|
184
|
+
clearTimeout(this._showTimeout);
|
|
185
|
+
this._showTimeout = null;
|
|
186
|
+
}
|
|
187
|
+
this._setVisible(false);
|
|
188
|
+
}
|
|
189
|
+
_setVisible(visible) {
|
|
190
|
+
this._isVisible = visible;
|
|
191
|
+
const tooltipContent = this.shadowRoot?.querySelector(".tooltip-content");
|
|
192
|
+
if (tooltipContent) {
|
|
193
|
+
tooltipContent.classList.toggle("visible", visible);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
_toggle() {
|
|
197
|
+
if (this._isVisible) {
|
|
198
|
+
this._hide();
|
|
199
|
+
} else {
|
|
200
|
+
this._show();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
_getTooltipClasses() {
|
|
204
|
+
const classes = ["tooltip-content"];
|
|
205
|
+
if (this.position && POSITION_CLASSES[this.position]) {
|
|
206
|
+
classes.push(POSITION_CLASSES[this.position]);
|
|
207
|
+
} else {
|
|
208
|
+
classes.push("tooltip-top");
|
|
209
|
+
}
|
|
210
|
+
return classes.join(" ");
|
|
211
|
+
}
|
|
212
|
+
connectedCallback() {
|
|
213
|
+
super.connectedCallback();
|
|
214
|
+
this._setupListeners();
|
|
215
|
+
}
|
|
216
|
+
disconnectedCallback() {
|
|
217
|
+
super.disconnectedCallback?.();
|
|
218
|
+
this._removeListeners();
|
|
219
|
+
}
|
|
220
|
+
_setupListeners() {
|
|
221
|
+
if (this.trigger === "hover") {
|
|
222
|
+
this.addEventListener("mouseenter", this._show.bind(this));
|
|
223
|
+
this.addEventListener("mouseleave", this._hide.bind(this));
|
|
224
|
+
} else if (this.trigger === "click") {
|
|
225
|
+
this.addEventListener("click", this._toggle.bind(this));
|
|
226
|
+
}
|
|
227
|
+
if (this.trigger === "focus" || this.trigger === "hover") {
|
|
228
|
+
this.addEventListener("focusin", this._show.bind(this));
|
|
229
|
+
this.addEventListener("focusout", this._hide.bind(this));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
_removeListeners() {
|
|
233
|
+
this.removeEventListener("mouseenter", this._show.bind(this));
|
|
234
|
+
this.removeEventListener("mouseleave", this._hide.bind(this));
|
|
235
|
+
this.removeEventListener("click", this._toggle.bind(this));
|
|
236
|
+
this.removeEventListener("focusin", this._show.bind(this));
|
|
237
|
+
this.removeEventListener("focusout", this._hide.bind(this));
|
|
238
|
+
}
|
|
239
|
+
render() {
|
|
240
|
+
const tooltipClasses = this._getTooltipClasses();
|
|
241
|
+
return `
|
|
242
|
+
<div class="tooltip-wrapper" part="tooltip">
|
|
243
|
+
<slot></slot>
|
|
244
|
+
<div class="${tooltipClasses}" role="tooltip" part="content">
|
|
245
|
+
${this.content || ""}
|
|
246
|
+
${this.arrow ? '<span class="tooltip-arrow" part="arrow"></span>' : ""}
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// src/index.ts
|
|
254
|
+
function register() {
|
|
255
|
+
if (!customElements.get("el-dm-tooltip")) {
|
|
256
|
+
customElements.define("el-dm-tooltip", ElDmTooltip);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
//# debugId=C16F69374C2DE6DC64756E2164756E21
|
|
261
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/el-dm-tooltip.ts", "../../src/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * DuskMoon Tooltip Element\n *\n * A tooltip component for displaying additional information on hover/focus.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-tooltip\n *\n * @attr {string} content - Tooltip text content\n * @attr {string} position - Tooltip position: top, bottom, left, right\n * @attr {string} trigger - Trigger mode: hover, click, focus\n * @attr {number} delay - Show delay in milliseconds\n * @attr {boolean} arrow - Whether to show arrow\n * @attr {boolean} disabled - Whether tooltip is disabled\n *\n * @slot - Default slot for trigger element\n *\n * @csspart tooltip - The tooltip container\n * @csspart content - The tooltip content\n * @csspart arrow - The tooltip arrow\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-core';\nimport { css as tooltipCSS } from '@duskmoon-dev/core/components/tooltip';\n\nconst POSITION_CLASSES: Record<string, string> = {\n top: 'tooltip-top',\n bottom: 'tooltip-bottom',\n left: 'tooltip-left',\n right: 'tooltip-right',\n};\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type TooltipTrigger = 'hover' | 'click' | 'focus';\n\n// Strip @layer wrapper for Shadow DOM compatibility\nconst coreStyles = tooltipCSS.replace(/@layer\\s+components\\s*\\{/, '').replace(/\\}\\s*$/, '');\n\nconst styles = css`\n :host {\n display: inline-flex;\n position: relative;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n ${coreStyles}\n\n .tooltip-wrapper {\n display: inline-flex;\n position: relative;\n }\n\n .tooltip-content {\n position: absolute;\n z-index: 1000;\n padding: 0.5rem 0.75rem;\n background-color: var(--color-inverse-surface, #1f1f1f);\n color: var(--color-inverse-on-surface, #fff);\n font-size: 0.75rem;\n line-height: 1rem;\n border-radius: 0.375rem;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition:\n opacity 150ms ease,\n visibility 150ms ease;\n pointer-events: none;\n font-family: inherit;\n }\n\n .tooltip-content.visible {\n opacity: 1;\n visibility: visible;\n }\n\n .tooltip-top {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 0.5rem;\n }\n\n .tooltip-bottom {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 0.5rem;\n }\n\n .tooltip-left {\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-right: 0.5rem;\n }\n\n .tooltip-right {\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-left: 0.5rem;\n }\n\n .tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border: 0.375rem solid transparent;\n }\n\n .tooltip-top .tooltip-arrow {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border-top-color: var(--color-inverse-surface, #1f1f1f);\n border-bottom: 0;\n }\n\n .tooltip-bottom .tooltip-arrow {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n border-bottom-color: var(--color-inverse-surface, #1f1f1f);\n border-top: 0;\n }\n\n .tooltip-left .tooltip-arrow {\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n border-left-color: var(--color-inverse-surface, #1f1f1f);\n border-right: 0;\n }\n\n .tooltip-right .tooltip-arrow {\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n border-right-color: var(--color-inverse-surface, #1f1f1f);\n border-left: 0;\n }\n`;\n\nexport class ElDmTooltip extends BaseElement {\n static properties = {\n content: { type: String, reflect: true },\n position: { type: String, reflect: true, default: 'top' },\n trigger: { type: String, reflect: true, default: 'hover' },\n delay: { type: Number, reflect: true, default: 0 },\n arrow: { type: Boolean, reflect: true, default: true },\n disabled: { type: Boolean, reflect: true },\n };\n\n declare content: string;\n declare position: TooltipPosition;\n declare trigger: TooltipTrigger;\n declare delay: number;\n declare arrow: boolean;\n declare disabled: boolean;\n\n private _showTimeout: number | null = null;\n private _isVisible = false;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n private _show(): void {\n if (this.disabled || !this.content) return;\n\n if (this.delay > 0) {\n this._showTimeout = window.setTimeout(() => {\n this._setVisible(true);\n }, this.delay);\n } else {\n this._setVisible(true);\n }\n }\n\n private _hide(): void {\n if (this._showTimeout) {\n clearTimeout(this._showTimeout);\n this._showTimeout = null;\n }\n this._setVisible(false);\n }\n\n private _setVisible(visible: boolean): void {\n this._isVisible = visible;\n const tooltipContent = this.shadowRoot?.querySelector('.tooltip-content');\n if (tooltipContent) {\n tooltipContent.classList.toggle('visible', visible);\n }\n }\n\n private _toggle(): void {\n if (this._isVisible) {\n this._hide();\n } else {\n this._show();\n }\n }\n\n private _getTooltipClasses(): string {\n const classes = ['tooltip-content'];\n\n if (this.position && POSITION_CLASSES[this.position]) {\n classes.push(POSITION_CLASSES[this.position]);\n } else {\n classes.push('tooltip-top');\n }\n\n return classes.join(' ');\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._setupListeners();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this._removeListeners();\n }\n\n private _setupListeners(): void {\n if (this.trigger === 'hover') {\n this.addEventListener('mouseenter', this._show.bind(this));\n this.addEventListener('mouseleave', this._hide.bind(this));\n } else if (this.trigger === 'click') {\n this.addEventListener('click', this._toggle.bind(this));\n }\n\n if (this.trigger === 'focus' || this.trigger === 'hover') {\n this.addEventListener('focusin', this._show.bind(this));\n this.addEventListener('focusout', this._hide.bind(this));\n }\n }\n\n private _removeListeners(): void {\n this.removeEventListener('mouseenter', this._show.bind(this));\n this.removeEventListener('mouseleave', this._hide.bind(this));\n this.removeEventListener('click', this._toggle.bind(this));\n this.removeEventListener('focusin', this._show.bind(this));\n this.removeEventListener('focusout', this._hide.bind(this));\n }\n\n render(): string {\n const tooltipClasses = this._getTooltipClasses();\n\n return `\n <div class=\"tooltip-wrapper\" part=\"tooltip\">\n <slot></slot>\n <div class=\"${tooltipClasses}\" role=\"tooltip\" part=\"content\">\n ${this.content || ''}\n ${this.arrow ? '<span class=\"tooltip-arrow\" part=\"arrow\"></span>' : ''}\n </div>\n </div>\n `;\n }\n}\n",
|
|
6
|
+
"/**\n * @duskmoon-dev/el-tooltip\n *\n * DuskMoon Tooltip custom element\n */\n\nimport { ElDmTooltip } from './el-dm-tooltip.js';\n\nexport { ElDmTooltip };\nexport type { TooltipPosition, TooltipTrigger } from './el-dm-tooltip.js';\n\n/**\n * Register the el-dm-tooltip custom element\n *\n * @example\n * ```ts\n * import { register } from '@duskmoon-dev/el-tooltip';\n * register();\n * ```\n */\nexport function register(): void {\n if (!customElements.get('el-dm-tooltip')) {\n customElements.define('el-dm-tooltip', ElDmTooltip);\n }\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "C16F69374C2DE6DC64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/index.ts
|
|
30
|
+
var exports_src = {};
|
|
31
|
+
__export(exports_src, {
|
|
32
|
+
register: () => register,
|
|
33
|
+
ElDmTooltip: () => ElDmTooltip
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(exports_src);
|
|
36
|
+
|
|
37
|
+
// src/el-dm-tooltip.ts
|
|
38
|
+
var import_el_core = require("@duskmoon-dev/el-core");
|
|
39
|
+
var import_tooltip = require("@duskmoon-dev/core/components/tooltip");
|
|
40
|
+
var POSITION_CLASSES = {
|
|
41
|
+
top: "tooltip-top",
|
|
42
|
+
bottom: "tooltip-bottom",
|
|
43
|
+
left: "tooltip-left",
|
|
44
|
+
right: "tooltip-right"
|
|
45
|
+
};
|
|
46
|
+
var coreStyles = import_tooltip.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
|
|
47
|
+
var styles = import_el_core.css`
|
|
48
|
+
:host {
|
|
49
|
+
display: inline-flex;
|
|
50
|
+
position: relative;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:host([hidden]) {
|
|
54
|
+
display: none !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
${coreStyles}
|
|
58
|
+
|
|
59
|
+
.tooltip-wrapper {
|
|
60
|
+
display: inline-flex;
|
|
61
|
+
position: relative;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.tooltip-content {
|
|
65
|
+
position: absolute;
|
|
66
|
+
z-index: 1000;
|
|
67
|
+
padding: 0.5rem 0.75rem;
|
|
68
|
+
background-color: var(--color-inverse-surface, #1f1f1f);
|
|
69
|
+
color: var(--color-inverse-on-surface, #fff);
|
|
70
|
+
font-size: 0.75rem;
|
|
71
|
+
line-height: 1rem;
|
|
72
|
+
border-radius: 0.375rem;
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
opacity: 0;
|
|
75
|
+
visibility: hidden;
|
|
76
|
+
transition:
|
|
77
|
+
opacity 150ms ease,
|
|
78
|
+
visibility 150ms ease;
|
|
79
|
+
pointer-events: none;
|
|
80
|
+
font-family: inherit;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.tooltip-content.visible {
|
|
84
|
+
opacity: 1;
|
|
85
|
+
visibility: visible;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.tooltip-top {
|
|
89
|
+
bottom: 100%;
|
|
90
|
+
left: 50%;
|
|
91
|
+
transform: translateX(-50%);
|
|
92
|
+
margin-bottom: 0.5rem;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.tooltip-bottom {
|
|
96
|
+
top: 100%;
|
|
97
|
+
left: 50%;
|
|
98
|
+
transform: translateX(-50%);
|
|
99
|
+
margin-top: 0.5rem;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.tooltip-left {
|
|
103
|
+
right: 100%;
|
|
104
|
+
top: 50%;
|
|
105
|
+
transform: translateY(-50%);
|
|
106
|
+
margin-right: 0.5rem;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.tooltip-right {
|
|
110
|
+
left: 100%;
|
|
111
|
+
top: 50%;
|
|
112
|
+
transform: translateY(-50%);
|
|
113
|
+
margin-left: 0.5rem;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.tooltip-arrow {
|
|
117
|
+
position: absolute;
|
|
118
|
+
width: 0;
|
|
119
|
+
height: 0;
|
|
120
|
+
border: 0.375rem solid transparent;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.tooltip-top .tooltip-arrow {
|
|
124
|
+
top: 100%;
|
|
125
|
+
left: 50%;
|
|
126
|
+
transform: translateX(-50%);
|
|
127
|
+
border-top-color: var(--color-inverse-surface, #1f1f1f);
|
|
128
|
+
border-bottom: 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.tooltip-bottom .tooltip-arrow {
|
|
132
|
+
bottom: 100%;
|
|
133
|
+
left: 50%;
|
|
134
|
+
transform: translateX(-50%);
|
|
135
|
+
border-bottom-color: var(--color-inverse-surface, #1f1f1f);
|
|
136
|
+
border-top: 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.tooltip-left .tooltip-arrow {
|
|
140
|
+
left: 100%;
|
|
141
|
+
top: 50%;
|
|
142
|
+
transform: translateY(-50%);
|
|
143
|
+
border-left-color: var(--color-inverse-surface, #1f1f1f);
|
|
144
|
+
border-right: 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.tooltip-right .tooltip-arrow {
|
|
148
|
+
right: 100%;
|
|
149
|
+
top: 50%;
|
|
150
|
+
transform: translateY(-50%);
|
|
151
|
+
border-right-color: var(--color-inverse-surface, #1f1f1f);
|
|
152
|
+
border-left: 0;
|
|
153
|
+
}
|
|
154
|
+
`;
|
|
155
|
+
|
|
156
|
+
class ElDmTooltip extends import_el_core.BaseElement {
|
|
157
|
+
static properties = {
|
|
158
|
+
content: { type: String, reflect: true },
|
|
159
|
+
position: { type: String, reflect: true, default: "top" },
|
|
160
|
+
trigger: { type: String, reflect: true, default: "hover" },
|
|
161
|
+
delay: { type: Number, reflect: true, default: 0 },
|
|
162
|
+
arrow: { type: Boolean, reflect: true, default: true },
|
|
163
|
+
disabled: { type: Boolean, reflect: true }
|
|
164
|
+
};
|
|
165
|
+
_showTimeout = null;
|
|
166
|
+
_isVisible = false;
|
|
167
|
+
constructor() {
|
|
168
|
+
super();
|
|
169
|
+
this.attachStyles(styles);
|
|
170
|
+
}
|
|
171
|
+
_show() {
|
|
172
|
+
if (this.disabled || !this.content)
|
|
173
|
+
return;
|
|
174
|
+
if (this.delay > 0) {
|
|
175
|
+
this._showTimeout = window.setTimeout(() => {
|
|
176
|
+
this._setVisible(true);
|
|
177
|
+
}, this.delay);
|
|
178
|
+
} else {
|
|
179
|
+
this._setVisible(true);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
_hide() {
|
|
183
|
+
if (this._showTimeout) {
|
|
184
|
+
clearTimeout(this._showTimeout);
|
|
185
|
+
this._showTimeout = null;
|
|
186
|
+
}
|
|
187
|
+
this._setVisible(false);
|
|
188
|
+
}
|
|
189
|
+
_setVisible(visible) {
|
|
190
|
+
this._isVisible = visible;
|
|
191
|
+
const tooltipContent = this.shadowRoot?.querySelector(".tooltip-content");
|
|
192
|
+
if (tooltipContent) {
|
|
193
|
+
tooltipContent.classList.toggle("visible", visible);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
_toggle() {
|
|
197
|
+
if (this._isVisible) {
|
|
198
|
+
this._hide();
|
|
199
|
+
} else {
|
|
200
|
+
this._show();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
_getTooltipClasses() {
|
|
204
|
+
const classes = ["tooltip-content"];
|
|
205
|
+
if (this.position && POSITION_CLASSES[this.position]) {
|
|
206
|
+
classes.push(POSITION_CLASSES[this.position]);
|
|
207
|
+
} else {
|
|
208
|
+
classes.push("tooltip-top");
|
|
209
|
+
}
|
|
210
|
+
return classes.join(" ");
|
|
211
|
+
}
|
|
212
|
+
connectedCallback() {
|
|
213
|
+
super.connectedCallback();
|
|
214
|
+
this._setupListeners();
|
|
215
|
+
}
|
|
216
|
+
disconnectedCallback() {
|
|
217
|
+
super.disconnectedCallback?.();
|
|
218
|
+
this._removeListeners();
|
|
219
|
+
}
|
|
220
|
+
_setupListeners() {
|
|
221
|
+
if (this.trigger === "hover") {
|
|
222
|
+
this.addEventListener("mouseenter", this._show.bind(this));
|
|
223
|
+
this.addEventListener("mouseleave", this._hide.bind(this));
|
|
224
|
+
} else if (this.trigger === "click") {
|
|
225
|
+
this.addEventListener("click", this._toggle.bind(this));
|
|
226
|
+
}
|
|
227
|
+
if (this.trigger === "focus" || this.trigger === "hover") {
|
|
228
|
+
this.addEventListener("focusin", this._show.bind(this));
|
|
229
|
+
this.addEventListener("focusout", this._hide.bind(this));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
_removeListeners() {
|
|
233
|
+
this.removeEventListener("mouseenter", this._show.bind(this));
|
|
234
|
+
this.removeEventListener("mouseleave", this._hide.bind(this));
|
|
235
|
+
this.removeEventListener("click", this._toggle.bind(this));
|
|
236
|
+
this.removeEventListener("focusin", this._show.bind(this));
|
|
237
|
+
this.removeEventListener("focusout", this._hide.bind(this));
|
|
238
|
+
}
|
|
239
|
+
render() {
|
|
240
|
+
const tooltipClasses = this._getTooltipClasses();
|
|
241
|
+
return `
|
|
242
|
+
<div class="tooltip-wrapper" part="tooltip">
|
|
243
|
+
<slot></slot>
|
|
244
|
+
<div class="${tooltipClasses}" role="tooltip" part="content">
|
|
245
|
+
${this.content || ""}
|
|
246
|
+
${this.arrow ? '<span class="tooltip-arrow" part="arrow"></span>' : ""}
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// src/index.ts
|
|
254
|
+
function register() {
|
|
255
|
+
if (!customElements.get("el-dm-tooltip")) {
|
|
256
|
+
customElements.define("el-dm-tooltip", ElDmTooltip);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// src/register.ts
|
|
261
|
+
register();
|
|
262
|
+
|
|
263
|
+
//# debugId=1333D145610F1D8564756E2164756E21
|
|
264
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/el-dm-tooltip.ts", "../../src/index.ts", "../../src/register.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * DuskMoon Tooltip Element\n *\n * A tooltip component for displaying additional information on hover/focus.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-tooltip\n *\n * @attr {string} content - Tooltip text content\n * @attr {string} position - Tooltip position: top, bottom, left, right\n * @attr {string} trigger - Trigger mode: hover, click, focus\n * @attr {number} delay - Show delay in milliseconds\n * @attr {boolean} arrow - Whether to show arrow\n * @attr {boolean} disabled - Whether tooltip is disabled\n *\n * @slot - Default slot for trigger element\n *\n * @csspart tooltip - The tooltip container\n * @csspart content - The tooltip content\n * @csspart arrow - The tooltip arrow\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-core';\nimport { css as tooltipCSS } from '@duskmoon-dev/core/components/tooltip';\n\nconst POSITION_CLASSES: Record<string, string> = {\n top: 'tooltip-top',\n bottom: 'tooltip-bottom',\n left: 'tooltip-left',\n right: 'tooltip-right',\n};\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type TooltipTrigger = 'hover' | 'click' | 'focus';\n\n// Strip @layer wrapper for Shadow DOM compatibility\nconst coreStyles = tooltipCSS.replace(/@layer\\s+components\\s*\\{/, '').replace(/\\}\\s*$/, '');\n\nconst styles = css`\n :host {\n display: inline-flex;\n position: relative;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n ${coreStyles}\n\n .tooltip-wrapper {\n display: inline-flex;\n position: relative;\n }\n\n .tooltip-content {\n position: absolute;\n z-index: 1000;\n padding: 0.5rem 0.75rem;\n background-color: var(--color-inverse-surface, #1f1f1f);\n color: var(--color-inverse-on-surface, #fff);\n font-size: 0.75rem;\n line-height: 1rem;\n border-radius: 0.375rem;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition:\n opacity 150ms ease,\n visibility 150ms ease;\n pointer-events: none;\n font-family: inherit;\n }\n\n .tooltip-content.visible {\n opacity: 1;\n visibility: visible;\n }\n\n .tooltip-top {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 0.5rem;\n }\n\n .tooltip-bottom {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 0.5rem;\n }\n\n .tooltip-left {\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-right: 0.5rem;\n }\n\n .tooltip-right {\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-left: 0.5rem;\n }\n\n .tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border: 0.375rem solid transparent;\n }\n\n .tooltip-top .tooltip-arrow {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border-top-color: var(--color-inverse-surface, #1f1f1f);\n border-bottom: 0;\n }\n\n .tooltip-bottom .tooltip-arrow {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n border-bottom-color: var(--color-inverse-surface, #1f1f1f);\n border-top: 0;\n }\n\n .tooltip-left .tooltip-arrow {\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n border-left-color: var(--color-inverse-surface, #1f1f1f);\n border-right: 0;\n }\n\n .tooltip-right .tooltip-arrow {\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n border-right-color: var(--color-inverse-surface, #1f1f1f);\n border-left: 0;\n }\n`;\n\nexport class ElDmTooltip extends BaseElement {\n static properties = {\n content: { type: String, reflect: true },\n position: { type: String, reflect: true, default: 'top' },\n trigger: { type: String, reflect: true, default: 'hover' },\n delay: { type: Number, reflect: true, default: 0 },\n arrow: { type: Boolean, reflect: true, default: true },\n disabled: { type: Boolean, reflect: true },\n };\n\n declare content: string;\n declare position: TooltipPosition;\n declare trigger: TooltipTrigger;\n declare delay: number;\n declare arrow: boolean;\n declare disabled: boolean;\n\n private _showTimeout: number | null = null;\n private _isVisible = false;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n private _show(): void {\n if (this.disabled || !this.content) return;\n\n if (this.delay > 0) {\n this._showTimeout = window.setTimeout(() => {\n this._setVisible(true);\n }, this.delay);\n } else {\n this._setVisible(true);\n }\n }\n\n private _hide(): void {\n if (this._showTimeout) {\n clearTimeout(this._showTimeout);\n this._showTimeout = null;\n }\n this._setVisible(false);\n }\n\n private _setVisible(visible: boolean): void {\n this._isVisible = visible;\n const tooltipContent = this.shadowRoot?.querySelector('.tooltip-content');\n if (tooltipContent) {\n tooltipContent.classList.toggle('visible', visible);\n }\n }\n\n private _toggle(): void {\n if (this._isVisible) {\n this._hide();\n } else {\n this._show();\n }\n }\n\n private _getTooltipClasses(): string {\n const classes = ['tooltip-content'];\n\n if (this.position && POSITION_CLASSES[this.position]) {\n classes.push(POSITION_CLASSES[this.position]);\n } else {\n classes.push('tooltip-top');\n }\n\n return classes.join(' ');\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._setupListeners();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this._removeListeners();\n }\n\n private _setupListeners(): void {\n if (this.trigger === 'hover') {\n this.addEventListener('mouseenter', this._show.bind(this));\n this.addEventListener('mouseleave', this._hide.bind(this));\n } else if (this.trigger === 'click') {\n this.addEventListener('click', this._toggle.bind(this));\n }\n\n if (this.trigger === 'focus' || this.trigger === 'hover') {\n this.addEventListener('focusin', this._show.bind(this));\n this.addEventListener('focusout', this._hide.bind(this));\n }\n }\n\n private _removeListeners(): void {\n this.removeEventListener('mouseenter', this._show.bind(this));\n this.removeEventListener('mouseleave', this._hide.bind(this));\n this.removeEventListener('click', this._toggle.bind(this));\n this.removeEventListener('focusin', this._show.bind(this));\n this.removeEventListener('focusout', this._hide.bind(this));\n }\n\n render(): string {\n const tooltipClasses = this._getTooltipClasses();\n\n return `\n <div class=\"tooltip-wrapper\" part=\"tooltip\">\n <slot></slot>\n <div class=\"${tooltipClasses}\" role=\"tooltip\" part=\"content\">\n ${this.content || ''}\n ${this.arrow ? '<span class=\"tooltip-arrow\" part=\"arrow\"></span>' : ''}\n </div>\n </div>\n `;\n }\n}\n",
|
|
6
|
+
"/**\n * @duskmoon-dev/el-tooltip\n *\n * DuskMoon Tooltip custom element\n */\n\nimport { ElDmTooltip } from './el-dm-tooltip.js';\n\nexport { ElDmTooltip };\nexport type { TooltipPosition, TooltipTrigger } from './el-dm-tooltip.js';\n\n/**\n * Register the el-dm-tooltip custom element\n *\n * @example\n * ```ts\n * import { register } from '@duskmoon-dev/el-tooltip';\n * register();\n * ```\n */\nexport function register(): void {\n if (!customElements.get('el-dm-tooltip')) {\n customElements.define('el-dm-tooltip', ElDmTooltip);\n }\n}\n",
|
|
7
|
+
"import { register } from './index.js';\nregister();\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "1333D145610F1D8564756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|