@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 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": "24.8.4",
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
- "@polymer/polymer": "^3.0.0",
39
- "@vaadin/a11y-base": "~24.8.4",
40
- "@vaadin/component-base": "~24.8.4",
41
- "@vaadin/overlay": "~24.8.4",
42
- "@vaadin/popover": "~24.8.4",
43
- "@vaadin/vaadin-lumo-styles": "~24.8.4",
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": "~24.8.4",
50
- "@vaadin/test-runner-commands": "~24.8.4",
51
- "@vaadin/testing-helpers": "^1.1.0",
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": "849e54e967563080a685965e2dced02060b3ab23"
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
+ `;
@@ -0,0 +1,8 @@
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 type { CSSResult } from 'lit';
7
+
8
+ export const tooltipOverlayStyles: CSSResult;
@@ -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 '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
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, 0);
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, 0);
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, 0);
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, 0);
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._srLabelController = new SlotController(this, 'sr-label', 'div', {
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._srLabel = element;
455
+ this.__contentNode = element;
475
456
  },
476
457
  });
477
- this.addController(this._srLabelController);
458
+ this.addController(this.__contentController);
478
459
  }
479
460
 
480
- /** @private */
481
- __computeOpened(manual, opened, autoOpened, connected) {
482
- return connected && (manual ? opened : autoOpened);
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
- __textChanged(text, oldText) {
692
- if (this._overlayElement && (text || oldText)) {
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, PolymerElement } from '@polymer/polymer/polymer-element.js';
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 { overlayStyles } from '@vaadin/overlay/src/vaadin-overlay-styles.js';
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 { registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
12
- import { tooltipOverlayStyles } from './vaadin-tooltip-overlay-styles.js';
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(DirMixin(ThemableMixin(PolymerElement))) {
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 template() {
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);
@@ -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
- * `<vaadin-tooltip>` uses `<vaadin-tooltip-overlay>` internal
24
- * themable component as the actual visible overlay.
22
+ * The following shadow DOM parts are available for styling:
25
23
  *
26
- * See [`<vaadin-overlay>`](#/elements/vaadin-overlay) documentation
27
- * for `<vaadin-tooltip-overlay>` parts.
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(ControllerMixin(ElementMixin(HTMLElement)))) {
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.
@@ -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, PolymerElement } from '@polymer/polymer/polymer-element.js';
8
- import { ControllerMixin } from '@vaadin/component-base/src/controller-mixin.js';
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
- * `<vaadin-tooltip>` uses `<vaadin-tooltip-overlay>` internal
25
- * themable component as the actual visible overlay.
25
+ * The following shadow DOM parts are available for styling:
26
26
  *
27
- * See [`<vaadin-overlay>`](#/elements/vaadin-overlay) documentation
28
- * for `<vaadin-tooltip-overlay>` parts.
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(ControllerMixin(PolymerElement)))) {
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 template() {
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="[[__overlayOwner]]"
74
- renderer="[[_renderer]]"
75
- theme$="[[_theme]]"
76
- opened="[[__computeOpened(manual, opened, _autoOpened, _isConnected)]]"
77
- position-target="[[target]]"
78
- position="[[__effectivePosition]]"
79
- no-horizontal-overlap$="[[__computeNoHorizontalOverlap(__effectivePosition)]]"
80
- no-vertical-overlap$="[[__computeNoVerticalOverlap(__effectivePosition)]]"
81
- horizontal-align="[[__computeHorizontalAlign(__effectivePosition)]]"
82
- vertical-align="[[__computeVerticalAlign(__effectivePosition)]]"
83
- on-mouseenter="__onOverlayMouseEnter"
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
- --vaadin-tooltip-offset-top: var(--lumo-space-xs);
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": "24.8.4",
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\n`<vaadin-tooltip>` uses `<vaadin-tooltip-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.8.4/#/elements/vaadin-overlay) documentation\nfor `<vaadin-tooltip-overlay>` parts.\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.",
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",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/tooltip",
4
- "version": "24.8.4",
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\n`<vaadin-tooltip>` uses `<vaadin-tooltip-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.8.4/#/elements/vaadin-overlay) documentation\nfor `<vaadin-tooltip-overlay>` parts.\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.",
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,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-lit-tooltip.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-lit-tooltip.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-lit-tooltip.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-lit-tooltip.js';
@@ -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' });
@@ -1,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-tooltip.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-tooltip-styles.js';
2
- import '../../src/vaadin-tooltip.js';
@@ -1 +0,0 @@
1
- export * from './src/vaadin-tooltip.js';
@@ -1,3 +0,0 @@
1
- import './theme/lumo/vaadin-lit-tooltip.js';
2
-
3
- export * from './src/vaadin-lit-tooltip.js';