@vaadin/tooltip 24.8.4 → 25.0.0-alpha10
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 +0 -23
- package/package.json +13 -13
- package/src/styles/vaadin-tooltip-overlay-base-styles.js +58 -0
- package/src/styles/vaadin-tooltip-overlay-core-styles.d.ts +8 -0
- package/src/{vaadin-tooltip-overlay-styles.js → styles/vaadin-tooltip-overlay-core-styles.js} +9 -5
- package/src/vaadin-tooltip-mixin.js +13 -56
- package/src/vaadin-tooltip-overlay.js +15 -26
- package/src/vaadin-tooltip.d.ts +6 -6
- package/src/vaadin-tooltip.js +34 -39
- package/theme/lumo/vaadin-tooltip-styles.js +1 -4
- package/web-types.json +2 -2
- package/web-types.lit.json +2 -2
- package/src/vaadin-lit-tooltip-overlay.js +0 -60
- package/src/vaadin-lit-tooltip.js +0 -71
- package/theme/lumo/vaadin-lit-tooltip.d.ts +0 -2
- package/theme/lumo/vaadin-lit-tooltip.js +0 -2
- package/theme/material/vaadin-lit-tooltip.d.ts +0 -2
- package/theme/material/vaadin-lit-tooltip.js +0 -2
- package/theme/material/vaadin-tooltip-styles.d.ts +0 -1
- package/theme/material/vaadin-tooltip-styles.js +0 -23
- package/theme/material/vaadin-tooltip.d.ts +0 -2
- package/theme/material/vaadin-tooltip.js +0 -2
- package/vaadin-lit-tooltip.d.ts +0 -1
- package/vaadin-lit-tooltip.js +0 -3
- /package/src/{vaadin-tooltip-overlay-styles.d.ts → styles/vaadin-tooltip-overlay-base-styles.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -27,29 +27,6 @@ Once installed, import the component in your application:
|
|
|
27
27
|
import '@vaadin/tooltip';
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
## Themes
|
|
31
|
-
|
|
32
|
-
Vaadin components come with two built-in [themes](https://vaadin.com/docs/latest/styling), Lumo and Material.
|
|
33
|
-
The [main entrypoint](https://github.com/vaadin/web-components/blob/main/packages/tooltip/vaadin-tooltip.js) of the package uses the Lumo theme.
|
|
34
|
-
|
|
35
|
-
To use the Material theme, import the component from the `theme/material` folder:
|
|
36
|
-
|
|
37
|
-
```js
|
|
38
|
-
import '@vaadin/tooltip/theme/material/vaadin-tooltip.js';
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
You can also import the Lumo version of the component explicitly:
|
|
42
|
-
|
|
43
|
-
```js
|
|
44
|
-
import '@vaadin/tooltip/theme/lumo/vaadin-tooltip.js';
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Finally, you can import the un-themed component from the `src` folder to get a minimal starting point:
|
|
48
|
-
|
|
49
|
-
```js
|
|
50
|
-
import '@vaadin/tooltip/src/vaadin-tooltip.js';
|
|
51
|
-
```
|
|
52
|
-
|
|
53
30
|
## Contributing
|
|
54
31
|
|
|
55
32
|
Read the [contributing guide](https://vaadin.com/docs/latest/contributing) to learn about our development process, how to propose bugfixes and improvements, and how to test your changes to Vaadin components.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/tooltip",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "25.0.0-alpha10",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"files": [
|
|
23
23
|
"src",
|
|
24
|
+
"!src/styles/*-base-styles.d.ts",
|
|
25
|
+
"!src/styles/*-base-styles.js",
|
|
24
26
|
"theme",
|
|
25
27
|
"vaadin-*.d.ts",
|
|
26
28
|
"vaadin-*.js",
|
|
@@ -35,25 +37,23 @@
|
|
|
35
37
|
],
|
|
36
38
|
"dependencies": {
|
|
37
39
|
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
38
|
-
"@
|
|
39
|
-
"@vaadin/
|
|
40
|
-
"@vaadin/
|
|
41
|
-
"@vaadin/
|
|
42
|
-
"@vaadin/
|
|
43
|
-
"@vaadin/vaadin-
|
|
44
|
-
"@vaadin/vaadin-material-styles": "~24.8.4",
|
|
45
|
-
"@vaadin/vaadin-themable-mixin": "~24.8.4",
|
|
40
|
+
"@vaadin/a11y-base": "25.0.0-alpha10",
|
|
41
|
+
"@vaadin/component-base": "25.0.0-alpha10",
|
|
42
|
+
"@vaadin/overlay": "25.0.0-alpha10",
|
|
43
|
+
"@vaadin/popover": "25.0.0-alpha10",
|
|
44
|
+
"@vaadin/vaadin-lumo-styles": "25.0.0-alpha10",
|
|
45
|
+
"@vaadin/vaadin-themable-mixin": "25.0.0-alpha10",
|
|
46
46
|
"lit": "^3.0.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@vaadin/chai-plugins": "
|
|
50
|
-
"@vaadin/test-runner-commands": "
|
|
51
|
-
"@vaadin/testing-helpers": "^
|
|
49
|
+
"@vaadin/chai-plugins": "25.0.0-alpha10",
|
|
50
|
+
"@vaadin/test-runner-commands": "25.0.0-alpha10",
|
|
51
|
+
"@vaadin/testing-helpers": "^2.0.0",
|
|
52
52
|
"sinon": "^18.0.0"
|
|
53
53
|
},
|
|
54
54
|
"web-types": [
|
|
55
55
|
"web-types.json",
|
|
56
56
|
"web-types.lit.json"
|
|
57
57
|
],
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "6cc6c94079e805fa5b2f0af4dbf3b2a7485e57d0"
|
|
59
59
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import '@vaadin/component-base/src/style-props.js';
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
|
|
9
|
+
export const tooltipOverlayStyles = css`
|
|
10
|
+
:host {
|
|
11
|
+
--_vaadin-tooltip-default-offset: 4px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
[part='overlay'] {
|
|
15
|
+
max-width: var(--vaadin-tooltip-max-width, 40ch);
|
|
16
|
+
padding: var(--vaadin-tooltip-padding, var(--vaadin-padding-container));
|
|
17
|
+
border-radius: var(--vaadin-tooltip-border-radius, var(--vaadin-radius-m));
|
|
18
|
+
background: var(--vaadin-tooltip-background, var(--vaadin-background-color));
|
|
19
|
+
color: var(--vaadin-tooltip-color, inherit);
|
|
20
|
+
font-size: var(--vaadin-tooltip-font-size, 0.9em);
|
|
21
|
+
font-weight: var(--vaadin-tooltip-font-weight, inherit);
|
|
22
|
+
line-height: var(--vaadin-tooltip-line-height, inherit);
|
|
23
|
+
border: 0;
|
|
24
|
+
box-shadow:
|
|
25
|
+
0 0 0 var(--vaadin-tooltip-border-width, 1px) var(--vaadin-tooltip-border-color, var(--vaadin-border-color)),
|
|
26
|
+
var(--vaadin-tooltip-box-shadow, 0 3px 8px -1px rgba(0, 0, 0, 0.2));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[part='content'] {
|
|
30
|
+
white-space: pre-wrap;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:host([position^='top'][top-aligned]) [part='overlay'],
|
|
34
|
+
:host([position^='bottom'][top-aligned]) [part='overlay'] {
|
|
35
|
+
margin-top: var(--vaadin-tooltip-offset-top, var(--_vaadin-tooltip-default-offset));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
:host([position^='top'][bottom-aligned]) [part='overlay'],
|
|
39
|
+
:host([position^='bottom'][bottom-aligned]) [part='overlay'] {
|
|
40
|
+
margin-bottom: var(--vaadin-tooltip-offset-bottom, var(--_vaadin-tooltip-default-offset));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:host([position^='start'][start-aligned]) [part='overlay'],
|
|
44
|
+
:host([position^='end'][start-aligned]) [part='overlay'] {
|
|
45
|
+
margin-inline-start: var(--vaadin-tooltip-offset-start, var(--_vaadin-tooltip-default-offset));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:host([position^='start'][end-aligned]) [part='overlay'],
|
|
49
|
+
:host([position^='end'][end-aligned]) [part='overlay'] {
|
|
50
|
+
margin-inline-end: var(--vaadin-tooltip-offset-end, var(--_vaadin-tooltip-default-offset));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (forced-colors: active) {
|
|
54
|
+
[part='overlay'] {
|
|
55
|
+
border: 1px dashed;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
`;
|
package/src/{vaadin-tooltip-overlay-styles.js → styles/vaadin-tooltip-overlay-core-styles.js}
RENAMED
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import { css } from '
|
|
6
|
+
import { css } from 'lit';
|
|
7
7
|
|
|
8
8
|
export const tooltipOverlayStyles = css`
|
|
9
|
+
:host {
|
|
10
|
+
--_vaadin-tooltip-default-offset: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
9
13
|
[part='overlay'] {
|
|
10
14
|
max-width: 40ch;
|
|
11
15
|
}
|
|
@@ -16,22 +20,22 @@ export const tooltipOverlayStyles = css`
|
|
|
16
20
|
|
|
17
21
|
:host([position^='top'][top-aligned]) [part='overlay'],
|
|
18
22
|
:host([position^='bottom'][top-aligned]) [part='overlay'] {
|
|
19
|
-
margin-top: var(--vaadin-tooltip-offset-top,
|
|
23
|
+
margin-top: var(--vaadin-tooltip-offset-top, var(--_vaadin-tooltip-default-offset));
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
:host([position^='top'][bottom-aligned]) [part='overlay'],
|
|
23
27
|
:host([position^='bottom'][bottom-aligned]) [part='overlay'] {
|
|
24
|
-
margin-bottom: var(--vaadin-tooltip-offset-bottom,
|
|
28
|
+
margin-bottom: var(--vaadin-tooltip-offset-bottom, var(--_vaadin-tooltip-default-offset));
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
:host([position^='start'][start-aligned]) [part='overlay'],
|
|
28
32
|
:host([position^='end'][start-aligned]) [part='overlay'] {
|
|
29
|
-
margin-inline-start: var(--vaadin-tooltip-offset-start,
|
|
33
|
+
margin-inline-start: var(--vaadin-tooltip-offset-start, var(--_vaadin-tooltip-default-offset));
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
:host([position^='start'][end-aligned]) [part='overlay'],
|
|
33
37
|
:host([position^='end'][end-aligned]) [part='overlay'] {
|
|
34
|
-
margin-inline-end: var(--vaadin-tooltip-offset-end,
|
|
38
|
+
margin-inline-end: var(--vaadin-tooltip-offset-end, var(--_vaadin-tooltip-default-offset));
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
@media (forced-colors: active) {
|
|
@@ -330,7 +330,6 @@ export const TooltipMixin = (superClass) =>
|
|
|
330
330
|
*/
|
|
331
331
|
text: {
|
|
332
332
|
type: String,
|
|
333
|
-
observer: '__textChanged',
|
|
334
333
|
},
|
|
335
334
|
|
|
336
335
|
/**
|
|
@@ -366,26 +365,9 @@ export const TooltipMixin = (superClass) =>
|
|
|
366
365
|
type: Boolean,
|
|
367
366
|
sync: true,
|
|
368
367
|
},
|
|
369
|
-
|
|
370
|
-
/** @private */
|
|
371
|
-
_srLabel: {
|
|
372
|
-
type: Object,
|
|
373
|
-
},
|
|
374
|
-
|
|
375
|
-
/** @private */
|
|
376
|
-
_overlayContent: {
|
|
377
|
-
type: String,
|
|
378
|
-
},
|
|
379
368
|
};
|
|
380
369
|
}
|
|
381
370
|
|
|
382
|
-
static get observers() {
|
|
383
|
-
return [
|
|
384
|
-
'__generatorChanged(_overlayElement, generator, context)',
|
|
385
|
-
'__updateSrLabelText(_srLabel, _overlayContent)',
|
|
386
|
-
];
|
|
387
|
-
}
|
|
388
|
-
|
|
389
371
|
/**
|
|
390
372
|
* Sets the default focus delay to be used by all tooltip instances,
|
|
391
373
|
* except for those that have focus delay configured using property.
|
|
@@ -420,7 +402,6 @@ export const TooltipMixin = (superClass) =>
|
|
|
420
402
|
super();
|
|
421
403
|
|
|
422
404
|
this._uniqueId = `vaadin-tooltip-${generateUniqueId()}`;
|
|
423
|
-
this._renderer = this.__tooltipRenderer.bind(this);
|
|
424
405
|
|
|
425
406
|
this.__onFocusin = this.__onFocusin.bind(this);
|
|
426
407
|
this.__onFocusout = this.__onFocusout.bind(this);
|
|
@@ -467,19 +448,24 @@ export const TooltipMixin = (superClass) =>
|
|
|
467
448
|
|
|
468
449
|
this._overlayElement = this.$.overlay;
|
|
469
450
|
|
|
470
|
-
this.
|
|
451
|
+
this.__contentController = new SlotController(this, 'overlay', 'div', {
|
|
471
452
|
initializer: (element) => {
|
|
472
453
|
element.id = this._uniqueId;
|
|
473
454
|
element.setAttribute('role', 'tooltip');
|
|
474
|
-
this.
|
|
455
|
+
this.__contentNode = element;
|
|
475
456
|
},
|
|
476
457
|
});
|
|
477
|
-
this.addController(this.
|
|
458
|
+
this.addController(this.__contentController);
|
|
478
459
|
}
|
|
479
460
|
|
|
480
|
-
/** @
|
|
481
|
-
|
|
482
|
-
|
|
461
|
+
/** @protected */
|
|
462
|
+
updated(props) {
|
|
463
|
+
super.updated(props);
|
|
464
|
+
|
|
465
|
+
if (props.has('text') || props.has('generator') || props.has('context')) {
|
|
466
|
+
this.__updateContent();
|
|
467
|
+
this.$.overlay.toggleAttribute('hidden', this.__contentNode.textContent.trim() === '');
|
|
468
|
+
}
|
|
483
469
|
}
|
|
484
470
|
|
|
485
471
|
/** @private */
|
|
@@ -688,18 +674,8 @@ export const TooltipMixin = (superClass) =>
|
|
|
688
674
|
}
|
|
689
675
|
|
|
690
676
|
/** @private */
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
this._overlayElement.requestContentUpdate();
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
/** @private */
|
|
698
|
-
__tooltipRenderer(root) {
|
|
699
|
-
root.textContent = typeof this.generator === 'function' ? this.generator(this.context) : this.text;
|
|
700
|
-
|
|
701
|
-
// Update the sr-only label text content
|
|
702
|
-
this._overlayContent = root.textContent;
|
|
677
|
+
__updateContent() {
|
|
678
|
+
this.__contentNode.textContent = typeof this.generator === 'function' ? this.generator(this.context) : this.text;
|
|
703
679
|
}
|
|
704
680
|
|
|
705
681
|
/** @private */
|
|
@@ -723,23 +699,4 @@ export const TooltipMixin = (superClass) =>
|
|
|
723
699
|
});
|
|
724
700
|
}
|
|
725
701
|
}
|
|
726
|
-
|
|
727
|
-
/** @private */
|
|
728
|
-
__generatorChanged(overlayElement, generator, context) {
|
|
729
|
-
if (overlayElement) {
|
|
730
|
-
if (generator !== this.__oldTextGenerator || context !== this.__oldContext) {
|
|
731
|
-
overlayElement.requestContentUpdate();
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
this.__oldTextGenerator = generator;
|
|
735
|
-
this.__oldContext = context;
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
/** @private */
|
|
740
|
-
__updateSrLabelText(srLabel, textContent) {
|
|
741
|
-
if (srLabel) {
|
|
742
|
-
srLabel.textContent = textContent;
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
702
|
};
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import { html,
|
|
6
|
+
import { html, LitElement } from 'lit';
|
|
7
7
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
8
8
|
import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
|
|
9
|
-
import {
|
|
9
|
+
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
10
|
+
import { overlayStyles } from '@vaadin/overlay/src/styles/vaadin-overlay-core-styles.js';
|
|
10
11
|
import { PopoverOverlayMixin } from '@vaadin/popover/src/vaadin-popover-overlay-mixin.js';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
registerStyles('vaadin-tooltip-overlay', [overlayStyles, tooltipOverlayStyles], {
|
|
15
|
-
moduleId: 'vaadin-tooltip-overlay-styles',
|
|
16
|
-
});
|
|
12
|
+
import { LumoInjectionMixin } from '@vaadin/vaadin-themable-mixin/lumo-injection-mixin.js';
|
|
13
|
+
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
14
|
+
import { tooltipOverlayStyles } from './styles/vaadin-tooltip-overlay-core-styles.js';
|
|
17
15
|
|
|
18
16
|
/**
|
|
19
17
|
* An element used internally by `<vaadin-tooltip>`. Not intended to be used separately.
|
|
@@ -25,34 +23,25 @@ registerStyles('vaadin-tooltip-overlay', [overlayStyles, tooltipOverlayStyles],
|
|
|
25
23
|
* @mixes PopoverOverlayMixin
|
|
26
24
|
* @private
|
|
27
25
|
*/
|
|
28
|
-
class TooltipOverlay extends PopoverOverlayMixin(
|
|
26
|
+
class TooltipOverlay extends PopoverOverlayMixin(
|
|
27
|
+
DirMixin(ThemableMixin(PolylitMixin(LumoInjectionMixin(LitElement)))),
|
|
28
|
+
) {
|
|
29
29
|
static get is() {
|
|
30
30
|
return 'vaadin-tooltip-overlay';
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
static get
|
|
33
|
+
static get styles() {
|
|
34
|
+
return [overlayStyles, tooltipOverlayStyles];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @protected */
|
|
38
|
+
render() {
|
|
34
39
|
return html`
|
|
35
|
-
<div id="backdrop" part="backdrop" hidden></div>
|
|
36
40
|
<div part="overlay" id="overlay">
|
|
37
41
|
<div part="content" id="content"><slot></slot></div>
|
|
38
42
|
</div>
|
|
39
43
|
`;
|
|
40
44
|
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Tag name prefix used by custom properties.
|
|
44
|
-
* @protected
|
|
45
|
-
* @return {string}
|
|
46
|
-
*/
|
|
47
|
-
get _tagNamePrefix() {
|
|
48
|
-
return 'vaadin-tooltip';
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
requestContentUpdate() {
|
|
52
|
-
super.requestContentUpdate();
|
|
53
|
-
|
|
54
|
-
this.toggleAttribute('hidden', this.textContent.trim() === '');
|
|
55
|
-
}
|
|
56
45
|
}
|
|
57
46
|
|
|
58
47
|
defineCustomElement(TooltipOverlay);
|
package/src/vaadin-tooltip.d.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import { ControllerMixin } from '@vaadin/component-base/src/controller-mixin.js';
|
|
7
6
|
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
8
7
|
import { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';
|
|
9
8
|
import { TooltipMixin } from './vaadin-tooltip-mixin.js';
|
|
@@ -20,11 +19,12 @@ export { TooltipPosition } from './vaadin-tooltip-mixin.js';
|
|
|
20
19
|
*
|
|
21
20
|
* ### Styling
|
|
22
21
|
*
|
|
23
|
-
*
|
|
24
|
-
* themable component as the actual visible overlay.
|
|
22
|
+
* The following shadow DOM parts are available for styling:
|
|
25
23
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* Part name | Description
|
|
25
|
+
* ----------- | ---------------
|
|
26
|
+
* `overlay` | The overlay element
|
|
27
|
+
* `content` | The overlay content element
|
|
28
28
|
*
|
|
29
29
|
* The following state attributes are available for styling:
|
|
30
30
|
*
|
|
@@ -48,7 +48,7 @@ export { TooltipPosition } from './vaadin-tooltip-mixin.js';
|
|
|
48
48
|
*
|
|
49
49
|
* See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.
|
|
50
50
|
*/
|
|
51
|
-
declare class Tooltip extends TooltipMixin(ThemePropertyMixin(
|
|
51
|
+
declare class Tooltip extends TooltipMixin(ThemePropertyMixin(ElementMixin(HTMLElement))) {
|
|
52
52
|
/**
|
|
53
53
|
* Sets the default focus delay to be used by all tooltip instances,
|
|
54
54
|
* except for those that have focus delay configured using property.
|
package/src/vaadin-tooltip.js
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import './vaadin-tooltip-overlay.js';
|
|
7
|
-
import { html,
|
|
8
|
-
import {
|
|
7
|
+
import { css, html, LitElement } from 'lit';
|
|
8
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
9
9
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
10
10
|
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
11
|
+
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
11
12
|
import { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';
|
|
12
13
|
import { TooltipMixin } from './vaadin-tooltip-mixin.js';
|
|
13
14
|
|
|
@@ -21,11 +22,12 @@ import { TooltipMixin } from './vaadin-tooltip-mixin.js';
|
|
|
21
22
|
*
|
|
22
23
|
* ### Styling
|
|
23
24
|
*
|
|
24
|
-
*
|
|
25
|
-
* themable component as the actual visible overlay.
|
|
25
|
+
* The following shadow DOM parts are available for styling:
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* Part name | Description
|
|
28
|
+
* ----------- | ---------------
|
|
29
|
+
* `overlay` | The overlay element
|
|
30
|
+
* `content` | The overlay content element
|
|
29
31
|
*
|
|
30
32
|
* The following state attributes are available for styling:
|
|
31
33
|
*
|
|
@@ -51,54 +53,47 @@ import { TooltipMixin } from './vaadin-tooltip-mixin.js';
|
|
|
51
53
|
*
|
|
52
54
|
* @customElement
|
|
53
55
|
* @extends HTMLElement
|
|
54
|
-
* @mixes ControllerMixin
|
|
55
56
|
* @mixes ElementMixin
|
|
56
57
|
* @mixes ThemePropertyMixin
|
|
57
58
|
* @mixes TooltipMixin
|
|
58
59
|
*/
|
|
59
|
-
class Tooltip extends TooltipMixin(ThemePropertyMixin(ElementMixin(
|
|
60
|
+
class Tooltip extends TooltipMixin(ThemePropertyMixin(ElementMixin(PolylitMixin(LitElement)))) {
|
|
60
61
|
static get is() {
|
|
61
62
|
return 'vaadin-tooltip';
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
static get
|
|
65
|
+
static get styles() {
|
|
66
|
+
return css`
|
|
67
|
+
:host {
|
|
68
|
+
display: contents;
|
|
69
|
+
}
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** @protected */
|
|
74
|
+
render() {
|
|
75
|
+
const effectivePosition = this.__effectivePosition;
|
|
76
|
+
|
|
65
77
|
return html`
|
|
66
|
-
<style>
|
|
67
|
-
:host {
|
|
68
|
-
display: none;
|
|
69
|
-
}
|
|
70
|
-
</style>
|
|
71
78
|
<vaadin-tooltip-overlay
|
|
72
79
|
id="overlay"
|
|
73
|
-
owner="
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
position
|
|
78
|
-
|
|
79
|
-
no-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
on-mouseleave="__onOverlayMouseLeave"
|
|
80
|
+
.owner="${this}"
|
|
81
|
+
theme="${ifDefined(this._theme)}"
|
|
82
|
+
.opened="${this._isConnected && (this.manual ? this.opened : this._autoOpened)}"
|
|
83
|
+
.positionTarget="${this.target}"
|
|
84
|
+
.position="${effectivePosition}"
|
|
85
|
+
?no-horizontal-overlap="${this.__computeNoHorizontalOverlap(effectivePosition)}"
|
|
86
|
+
?no-vertical-overlap="${this.__computeNoVerticalOverlap(effectivePosition)}"
|
|
87
|
+
.horizontalAlign="${this.__computeHorizontalAlign(effectivePosition)}"
|
|
88
|
+
.verticalAlign="${this.__computeVerticalAlign(effectivePosition)}"
|
|
89
|
+
@mouseenter="${this.__onOverlayMouseEnter}"
|
|
90
|
+
@mouseleave="${this.__onOverlayMouseLeave}"
|
|
85
91
|
modeless
|
|
92
|
+
exportparts="overlay, content"
|
|
93
|
+
><slot name="overlay"></slot
|
|
86
94
|
></vaadin-tooltip-overlay>
|
|
87
|
-
|
|
88
|
-
<slot name="sr-label"></slot>
|
|
89
95
|
`;
|
|
90
96
|
}
|
|
91
|
-
|
|
92
|
-
static get properties() {
|
|
93
|
-
return {
|
|
94
|
-
/** @private */
|
|
95
|
-
__overlayOwner: {
|
|
96
|
-
value() {
|
|
97
|
-
return this;
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
97
|
}
|
|
103
98
|
|
|
104
99
|
defineCustomElement(Tooltip);
|
|
@@ -6,10 +6,7 @@ import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themab
|
|
|
6
6
|
|
|
7
7
|
const tooltipOverlay = css`
|
|
8
8
|
:host {
|
|
9
|
-
--
|
|
10
|
-
--vaadin-tooltip-offset-bottom: var(--lumo-space-xs);
|
|
11
|
-
--vaadin-tooltip-offset-start: var(--lumo-space-xs);
|
|
12
|
-
--vaadin-tooltip-offset-end: var(--lumo-space-xs);
|
|
9
|
+
--_vaadin-tooltip-default-offset: var(--lumo-space-xs);
|
|
13
10
|
}
|
|
14
11
|
|
|
15
12
|
[part='overlay'] {
|
package/web-types.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/tooltip",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "25.0.0-alpha10",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
8
8
|
"elements": [
|
|
9
9
|
{
|
|
10
10
|
"name": "vaadin-tooltip",
|
|
11
|
-
"description": "`<vaadin-tooltip>` is a Web Component for creating tooltips.\n\n```html\n<button id=\"confirm\">Confirm</button>\n<vaadin-tooltip text=\"Click to save changes\" for=\"confirm\"></vaadin-tooltip>\n```\n\n### Styling\n\
|
|
11
|
+
"description": "`<vaadin-tooltip>` is a Web Component for creating tooltips.\n\n```html\n<button id=\"confirm\">Confirm</button>\n<vaadin-tooltip text=\"Click to save changes\" for=\"confirm\"></vaadin-tooltip>\n```\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------- | ---------------\n`overlay` | The overlay element\n`content` | The overlay content element\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-tooltip>` is\npropagated to the internal `<vaadin-tooltip-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-tooltip>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-tooltip-offset-top` | Used as an offset when the tooltip is aligned vertically below the target\n`--vaadin-tooltip-offset-bottom` | Used as an offset when the tooltip is aligned vertically above the target\n`--vaadin-tooltip-offset-start` | Used as an offset when the tooltip is aligned horizontally after the target\n`--vaadin-tooltip-offset-end` | Used as an offset when the tooltip is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
12
12
|
"attributes": [
|
|
13
13
|
{
|
|
14
14
|
"name": "overlay-class",
|
package/web-types.lit.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/tooltip",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "25.0.0-alpha10",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"framework": "lit",
|
|
7
7
|
"framework-config": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"elements": [
|
|
17
17
|
{
|
|
18
18
|
"name": "vaadin-tooltip",
|
|
19
|
-
"description": "`<vaadin-tooltip>` is a Web Component for creating tooltips.\n\n```html\n<button id=\"confirm\">Confirm</button>\n<vaadin-tooltip text=\"Click to save changes\" for=\"confirm\"></vaadin-tooltip>\n```\n\n### Styling\n\
|
|
19
|
+
"description": "`<vaadin-tooltip>` is a Web Component for creating tooltips.\n\n```html\n<button id=\"confirm\">Confirm</button>\n<vaadin-tooltip text=\"Click to save changes\" for=\"confirm\"></vaadin-tooltip>\n```\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n----------- | ---------------\n`overlay` | The overlay element\n`content` | The overlay content element\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-tooltip>` is\npropagated to the internal `<vaadin-tooltip-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-tooltip>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-tooltip-offset-top` | Used as an offset when the tooltip is aligned vertically below the target\n`--vaadin-tooltip-offset-bottom` | Used as an offset when the tooltip is aligned vertically above the target\n`--vaadin-tooltip-offset-start` | Used as an offset when the tooltip is aligned horizontally after the target\n`--vaadin-tooltip-offset-end` | Used as an offset when the tooltip is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
20
20
|
"extension": true,
|
|
21
21
|
"attributes": [
|
|
22
22
|
{
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
|
-
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
-
*/
|
|
6
|
-
import { html, LitElement } from 'lit';
|
|
7
|
-
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
8
|
-
import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
|
|
9
|
-
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
10
|
-
import { overlayStyles } from '@vaadin/overlay/src/vaadin-overlay-styles.js';
|
|
11
|
-
import { PopoverOverlayMixin } from '@vaadin/popover/src/vaadin-popover-overlay-mixin.js';
|
|
12
|
-
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
13
|
-
import { tooltipOverlayStyles } from './vaadin-tooltip-overlay-styles.js';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* An element used internally by `<vaadin-tooltip>`. Not intended to be used separately.
|
|
17
|
-
*
|
|
18
|
-
* @customElement
|
|
19
|
-
* @extends HTMLElement
|
|
20
|
-
* @mixes DirMixin
|
|
21
|
-
* @mixes ThemableMixin
|
|
22
|
-
* @mixes PopoverOverlayMixin
|
|
23
|
-
* @private
|
|
24
|
-
*/
|
|
25
|
-
class TooltipOverlay extends PopoverOverlayMixin(DirMixin(ThemableMixin(PolylitMixin(LitElement)))) {
|
|
26
|
-
static get is() {
|
|
27
|
-
return 'vaadin-tooltip-overlay';
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static get styles() {
|
|
31
|
-
return [overlayStyles, tooltipOverlayStyles];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Tag name prefix used by custom properties.
|
|
36
|
-
* @protected
|
|
37
|
-
* @return {string}
|
|
38
|
-
*/
|
|
39
|
-
get _tagNamePrefix() {
|
|
40
|
-
return 'vaadin-tooltip';
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** @protected */
|
|
44
|
-
render() {
|
|
45
|
-
return html`
|
|
46
|
-
<div id="backdrop" part="backdrop" hidden></div>
|
|
47
|
-
<div part="overlay" id="overlay">
|
|
48
|
-
<div part="content" id="content"><slot></slot></div>
|
|
49
|
-
</div>
|
|
50
|
-
`;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
requestContentUpdate() {
|
|
54
|
-
super.requestContentUpdate();
|
|
55
|
-
|
|
56
|
-
this.toggleAttribute('hidden', this.textContent.trim() === '');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
defineCustomElement(TooltipOverlay);
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright (c) 2022 - 2025 Vaadin Ltd.
|
|
4
|
-
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
-
*/
|
|
6
|
-
import './vaadin-lit-tooltip-overlay.js';
|
|
7
|
-
import { css, html, LitElement } from 'lit';
|
|
8
|
-
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
9
|
-
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
10
|
-
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
11
|
-
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
12
|
-
import { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';
|
|
13
|
-
import { TooltipMixin } from './vaadin-tooltip-mixin.js';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* LitElement based version of `<vaadin-tooltip>` web component.
|
|
17
|
-
*
|
|
18
|
-
* ## Disclaimer
|
|
19
|
-
*
|
|
20
|
-
* This component is an experiment and not yet a part of Vaadin platform.
|
|
21
|
-
* There is no ETA regarding specific Vaadin version where it'll land.
|
|
22
|
-
* Feel free to try this code in your apps as per Apache 2.0 license.
|
|
23
|
-
*
|
|
24
|
-
* @extends HTMLElement
|
|
25
|
-
* @mixes ElementMixin
|
|
26
|
-
* @mixes ThemePropertyMixin
|
|
27
|
-
* @mixes TooltipMixin
|
|
28
|
-
*/
|
|
29
|
-
class Tooltip extends TooltipMixin(ThemePropertyMixin(ElementMixin(PolylitMixin(LitElement)))) {
|
|
30
|
-
static get is() {
|
|
31
|
-
return 'vaadin-tooltip';
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static get styles() {
|
|
35
|
-
return css`
|
|
36
|
-
:host {
|
|
37
|
-
display: none;
|
|
38
|
-
}
|
|
39
|
-
`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/** @protected */
|
|
43
|
-
render() {
|
|
44
|
-
const effectivePosition = this.__effectivePosition;
|
|
45
|
-
|
|
46
|
-
return html`
|
|
47
|
-
<vaadin-tooltip-overlay
|
|
48
|
-
id="overlay"
|
|
49
|
-
.renderer="${this._renderer}"
|
|
50
|
-
.owner="${this}"
|
|
51
|
-
theme="${ifDefined(this._theme)}"
|
|
52
|
-
.opened="${this._isConnected && (this.manual ? this.opened : this._autoOpened)}"
|
|
53
|
-
.positionTarget="${this.target}"
|
|
54
|
-
.position="${effectivePosition}"
|
|
55
|
-
?no-horizontal-overlap="${this.__computeNoHorizontalOverlap(effectivePosition)}"
|
|
56
|
-
?no-vertical-overlap="${this.__computeNoVerticalOverlap(effectivePosition)}"
|
|
57
|
-
.horizontalAlign="${this.__computeHorizontalAlign(effectivePosition)}"
|
|
58
|
-
.verticalAlign="${this.__computeVerticalAlign(effectivePosition)}"
|
|
59
|
-
@mouseenter="${this.__onOverlayMouseEnter}"
|
|
60
|
-
@mouseleave="${this.__onOverlayMouseLeave}"
|
|
61
|
-
modeless
|
|
62
|
-
></vaadin-tooltip-overlay>
|
|
63
|
-
|
|
64
|
-
<slot name="sr-label"></slot>
|
|
65
|
-
`;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
defineCustomElement(Tooltip);
|
|
70
|
-
|
|
71
|
-
export { Tooltip };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { overlay } from '@vaadin/vaadin-material-styles/mixins/overlay.js';
|
|
2
|
-
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
3
|
-
|
|
4
|
-
const tooltipOverlay = css`
|
|
5
|
-
:host {
|
|
6
|
-
--vaadin-tooltip-offset-top: 0.25rem;
|
|
7
|
-
--vaadin-tooltip-offset-bottom: 0.25rem;
|
|
8
|
-
--vaadin-tooltip-offset-start: 0.25rem;
|
|
9
|
-
--vaadin-tooltip-offset-end: 0.25rem;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
[part='overlay'] {
|
|
13
|
-
background-color: rgba(97, 97, 97, 0.92);
|
|
14
|
-
color: #fff;
|
|
15
|
-
font-size: 0.6875rem;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
[part='content'] {
|
|
19
|
-
padding: 0.25rem 0.5rem;
|
|
20
|
-
}
|
|
21
|
-
`;
|
|
22
|
-
|
|
23
|
-
registerStyles('vaadin-tooltip-overlay', [overlay, tooltipOverlay], { moduleId: 'material-tooltip-overlay' });
|
package/vaadin-lit-tooltip.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src/vaadin-tooltip.js';
|
package/vaadin-lit-tooltip.js
DELETED
/package/src/{vaadin-tooltip-overlay-styles.d.ts → styles/vaadin-tooltip-overlay-base-styles.d.ts}
RENAMED
|
File without changes
|