@spectrum-web-components/tooltip 0.33.3-overlay.61 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,6 +41,24 @@ Tooltips can be top, bottom, left, or right.
41
41
  <sp-tooltip open placement="right">Label</sp-tooltip>
42
42
  ```
43
43
 
44
+ ### Self-managed overlays
45
+
46
+ By default, Tooltip provides styling without behavior.
47
+ You must combine it with an [Overlay Trigger](https://opensource.adobe.com/spectrum-web-components/components/overlay-trigger/#%22hover%22-content-only) in order to manage its overlay behavior.
48
+
49
+ You can instead apply the `self-managed` attribute for this common case,
50
+ which automaticaly binds to the parent element's hover interaction:
51
+
52
+ ```html
53
+ <sp-action-button>
54
+ Trigger
55
+ <sp-tooltip self-managed>Content</sp-tooltip>
56
+ </sp-action-button>
57
+ ```
58
+
59
+ This is especially useful when inserting an intermediate `<overlay-trigger>` would interfere with
60
+ parent/child relationships, such as between `<sp-action-group>` and `<sp-action-button>`.
61
+
44
62
  ## Variants
45
63
 
46
64
  ### Informative
@@ -4,7 +4,7 @@
4
4
  "modules": [
5
5
  {
6
6
  "kind": "javascript-module",
7
- "path": "sp-tooltip.ts",
7
+ "path": "sp-tooltip.js",
8
8
  "declarations": [],
9
9
  "exports": [
10
10
  {
@@ -19,71 +19,24 @@
19
19
  },
20
20
  {
21
21
  "kind": "javascript-module",
22
- "path": "src/Tooltip.ts",
22
+ "path": "src/Tooltip.js",
23
23
  "declarations": [
24
24
  {
25
25
  "kind": "class",
26
26
  "description": "",
27
- "name": "TooltipOpenable",
28
- "members": [
27
+ "name": "TooltipProxy",
28
+ "events": [
29
29
  {
30
- "kind": "field",
31
- "name": "open",
30
+ "name": "disconnected",
32
31
  "type": {
33
- "text": "boolean"
32
+ "text": "Event"
34
33
  }
35
- },
36
- {
37
- "kind": "field",
38
- "name": "_open",
39
- "type": {
40
- "text": "boolean"
41
- },
42
- "privacy": "private",
43
- "default": "false"
44
- },
45
- {
46
- "kind": "field",
47
- "name": "placement",
48
- "type": {
49
- "text": "Placement"
50
- },
51
- "attribute": "placement"
52
- },
53
- {
54
- "kind": "field",
55
- "name": "_placement",
56
- "type": {
57
- "text": "Placement"
58
- },
59
- "privacy": "private",
60
- "default": "'top'"
61
- },
62
- {
63
- "kind": "field",
64
- "name": "tipElement",
65
- "type": {
66
- "text": "HTMLElement"
67
- },
68
- "readonly": true
69
- }
70
- ],
71
- "attributes": [
72
- {
73
- "name": "open"
74
- },
75
- {
76
- "name": "placement",
77
- "type": {
78
- "text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
79
- },
80
- "fieldName": "placement"
81
34
  }
82
35
  ],
83
36
  "superclass": {
84
37
  "name": "HTMLElement"
85
38
  },
86
- "tagName": "sp-tooltip-openable",
39
+ "tagName": "tooltip-proxy",
87
40
  "customElement": true
88
41
  },
89
42
  {
@@ -111,6 +64,12 @@
111
64
  "default": "0",
112
65
  "privacy": "private"
113
66
  },
67
+ {
68
+ "kind": "field",
69
+ "name": "_tooltipId",
70
+ "privacy": "private",
71
+ "default": "`sp-tooltip-describedby-helper-${Tooltip.instanceCount++}`"
72
+ },
114
73
  {
115
74
  "kind": "field",
116
75
  "name": "selfManaged",
@@ -119,6 +78,7 @@
119
78
  },
120
79
  "privacy": "public",
121
80
  "default": "false",
81
+ "description": "Automatically bind to the parent element's hover interaction. Without this, you must provide your own `overlay-trigger`.",
122
82
  "attribute": "self-managed"
123
83
  },
124
84
  {
@@ -132,6 +92,15 @@
132
92
  "attribute": "offset",
133
93
  "reflects": true
134
94
  },
95
+ {
96
+ "kind": "field",
97
+ "name": "hadTooltipId",
98
+ "type": {
99
+ "text": "boolean"
100
+ },
101
+ "privacy": "private",
102
+ "default": "false"
103
+ },
135
104
  {
136
105
  "kind": "field",
137
106
  "name": "open",
@@ -147,9 +116,10 @@
147
116
  "kind": "field",
148
117
  "name": "placement",
149
118
  "type": {
150
- "text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
119
+ "text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\""
151
120
  },
152
121
  "privacy": "public",
122
+ "default": "'top'",
153
123
  "attribute": "placement",
154
124
  "reflects": true
155
125
  },
@@ -159,7 +129,7 @@
159
129
  "type": {
160
130
  "text": "HTMLSpanElement"
161
131
  },
162
- "privacy": "public"
132
+ "privacy": "private"
163
133
  },
164
134
  {
165
135
  "kind": "field",
@@ -179,20 +149,46 @@
179
149
  "privacy": "public",
180
150
  "attribute": "variant"
181
151
  },
152
+ {
153
+ "kind": "method",
154
+ "name": "onOverlayQuery",
155
+ "privacy": "public",
156
+ "return": {
157
+ "type": {
158
+ "text": "void"
159
+ }
160
+ },
161
+ "parameters": [
162
+ {
163
+ "name": "event",
164
+ "type": {
165
+ "text": "CustomEvent<OverlayDisplayQueryDetail>"
166
+ }
167
+ }
168
+ ]
169
+ },
182
170
  {
183
171
  "kind": "field",
184
- "name": "handleOpenOverlay",
172
+ "name": "_proxy",
173
+ "type": {
174
+ "text": "HTMLElement"
175
+ },
185
176
  "privacy": "private"
186
177
  },
187
178
  {
188
- "kind": "field",
189
- "name": "handleCloseOverlay",
190
- "privacy": "protected"
179
+ "kind": "method",
180
+ "name": "generateProxy",
181
+ "privacy": "private",
182
+ "return": {
183
+ "type": {
184
+ "text": "void"
185
+ }
186
+ }
191
187
  },
192
188
  {
193
189
  "kind": "method",
194
- "name": "handleTransitionrun",
195
- "privacy": "protected",
190
+ "name": "overlayWillOpenCallback",
191
+ "privacy": "public",
196
192
  "return": {
197
193
  "type": {
198
194
  "text": "void"
@@ -200,17 +196,17 @@
200
196
  },
201
197
  "parameters": [
202
198
  {
203
- "name": "event",
199
+ "name": "{\n trigger,\n }",
204
200
  "type": {
205
- "text": "TransitionEvent"
201
+ "text": "{\n trigger: HTMLElement;\n }"
206
202
  }
207
203
  }
208
204
  ]
209
205
  },
210
206
  {
211
207
  "kind": "method",
212
- "name": "handleTransitionend",
213
- "privacy": "protected",
208
+ "name": "overlayOpenCancelledCallback",
209
+ "privacy": "public",
214
210
  "return": {
215
211
  "type": {
216
212
  "text": "void"
@@ -218,25 +214,83 @@
218
214
  },
219
215
  "parameters": [
220
216
  {
221
- "name": "event",
217
+ "name": "{\n trigger,\n }",
222
218
  "type": {
223
- "text": "TransitionEvent"
219
+ "text": "{\n trigger: HTMLElement;\n }"
224
220
  }
225
221
  }
226
222
  ]
227
- }
228
- ],
229
- "events": [
223
+ },
230
224
  {
231
- "name": "transitionrun",
232
- "type": {
233
- "text": "TransitionEvent"
225
+ "kind": "method",
226
+ "name": "overlayCloseCallback",
227
+ "privacy": "public",
228
+ "return": {
229
+ "type": {
230
+ "text": "void"
231
+ }
232
+ },
233
+ "parameters": [
234
+ {
235
+ "name": "{ trigger }",
236
+ "type": {
237
+ "text": "{ trigger: HTMLElement }"
238
+ }
239
+ }
240
+ ]
241
+ },
242
+ {
243
+ "kind": "method",
244
+ "name": "removeProxy",
245
+ "privacy": "private",
246
+ "return": {
247
+ "type": {
248
+ "text": "void"
249
+ }
234
250
  }
235
251
  },
236
252
  {
237
- "name": "transitionend",
253
+ "kind": "field",
254
+ "name": "closeOverlayCallback",
255
+ "type": {
256
+ "text": "Promise<() => void> | undefined"
257
+ },
258
+ "privacy": "private"
259
+ },
260
+ {
261
+ "kind": "field",
262
+ "name": "abortOverlay",
238
263
  "type": {
239
- "text": "TransitionEvent"
264
+ "text": "(cancelled: boolean) => void"
265
+ },
266
+ "privacy": "private"
267
+ },
268
+ {
269
+ "kind": "field",
270
+ "name": "openOverlay",
271
+ "privacy": "private"
272
+ },
273
+ {
274
+ "kind": "field",
275
+ "name": "closeOverlay",
276
+ "privacy": "private"
277
+ },
278
+ {
279
+ "kind": "field",
280
+ "name": "previousSlot",
281
+ "type": {
282
+ "text": "string | undefined"
283
+ },
284
+ "privacy": "private"
285
+ },
286
+ {
287
+ "kind": "method",
288
+ "name": "manageTooltip",
289
+ "privacy": "private",
290
+ "return": {
291
+ "type": {
292
+ "text": "void"
293
+ }
240
294
  }
241
295
  }
242
296
  ],
@@ -244,8 +298,9 @@
244
298
  {
245
299
  "name": "placement",
246
300
  "type": {
247
- "text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
301
+ "text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\""
248
302
  },
303
+ "default": "'top'",
249
304
  "fieldName": "placement",
250
305
  "attribute": "placement"
251
306
  },
@@ -255,6 +310,7 @@
255
310
  "text": "boolean"
256
311
  },
257
312
  "default": "false",
313
+ "description": "Automatically bind to the parent element's hover interaction. Without this, you must provide your own `overlay-trigger`.",
258
314
  "fieldName": "selfManaged"
259
315
  },
260
316
  {
@@ -290,12 +346,20 @@
290
346
  }
291
347
  ],
292
348
  "exports": [
349
+ {
350
+ "kind": "js",
351
+ "name": "TooltipProxy",
352
+ "declaration": {
353
+ "name": "TooltipProxy",
354
+ "module": "src/Tooltip.js"
355
+ }
356
+ },
293
357
  {
294
358
  "kind": "custom-element-definition",
295
- "name": "sp-tooltip-openable",
359
+ "name": "tooltip-proxy",
296
360
  "declaration": {
297
- "name": "TooltipOpenable",
298
- "module": "src/Tooltip.ts"
361
+ "name": "TooltipProxy",
362
+ "module": "src/Tooltip.js"
299
363
  }
300
364
  },
301
365
  {
@@ -303,7 +367,7 @@
303
367
  "name": "Tooltip",
304
368
  "declaration": {
305
369
  "name": "Tooltip",
306
- "module": "src/Tooltip.ts"
370
+ "module": "src/Tooltip.js"
307
371
  }
308
372
  }
309
373
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/tooltip",
3
- "version": "0.33.3-overlay.61+af969dcc2",
3
+ "version": "0.34.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -57,8 +57,8 @@
57
57
  "lit-html"
58
58
  ],
59
59
  "dependencies": {
60
- "@spectrum-web-components/base": "^0.33.3-overlay.61+af969dcc2",
61
- "@spectrum-web-components/overlay": "^0.33.3-overlay.61+af969dcc2"
60
+ "@spectrum-web-components/base": "^0.34.0",
61
+ "@spectrum-web-components/overlay": "^0.34.0"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@spectrum-css/tooltip": "^4.0.10"
@@ -69,5 +69,5 @@
69
69
  "./sp-*.js",
70
70
  "./**/*.dev.js"
71
71
  ],
72
- "gitHead": "af969dcc2f8c905648b3e5a5fad982d1f81ee080"
72
+ "gitHead": "f9b3294d67cdd52b2c36897cdc1c20ceaeb019cf"
73
73
  }
package/src/Tooltip.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
- import type { Placement } from '@spectrum-web-components/overlay';
3
- import '@spectrum-web-components/overlay/sp-overlay.js';
1
+ import { CSSResultArray, PropertyValues, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
+ import type { OverlayDisplayQueryDetail, Placement } from '@spectrum-web-components/overlay';
3
+ export declare class TooltipProxy extends HTMLElement {
4
+ disconnectedCallback(): void;
5
+ }
4
6
  /**
5
7
  * @element sp-tooltip
6
8
  *
@@ -13,21 +15,44 @@ export declare class Tooltip extends SpectrumElement {
13
15
  * @private
14
16
  */
15
17
  static instanceCount: number;
18
+ private _tooltipId;
19
+ /**
20
+ * Automatically bind to the parent element's hover interaction. Without this, you must provide your own `overlay-trigger`.
21
+ */
16
22
  selfManaged: boolean;
17
23
  offset: number;
24
+ private hadTooltipId;
18
25
  open: boolean;
19
26
  /**
20
- * @type {"auto" | "auto-start" | "auto-end" | "top" | "bottom" | "right" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end"}
27
+ * @type {"auto" | "auto-start" | "auto-end" | "top" | "bottom" | "right" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end" | "none"}
21
28
  * @attr
22
29
  */
23
- placement?: Placement;
24
- tipElement: HTMLSpanElement;
30
+ placement: Placement;
31
+ private tipElement;
25
32
  private _variant;
26
33
  get variant(): string;
27
34
  set variant(variant: string);
28
- private handleOpenOverlay;
29
- protected handleCloseOverlay: () => void;
30
- protected handleTransitionrun(event: TransitionEvent): void;
31
- protected handleTransitionend(event: TransitionEvent): void;
35
+ constructor();
36
+ onOverlayQuery(event: CustomEvent<OverlayDisplayQueryDetail>): void;
37
+ private _proxy;
38
+ private generateProxy;
39
+ overlayWillOpenCallback({ trigger, }: {
40
+ trigger: HTMLElement;
41
+ }): void;
42
+ overlayOpenCancelledCallback({ trigger, }: {
43
+ trigger: HTMLElement;
44
+ }): void;
45
+ overlayCloseCallback({ trigger }: {
46
+ trigger: HTMLElement;
47
+ }): void;
48
+ private removeProxy;
49
+ private closeOverlayCallback?;
50
+ private abortOverlay;
51
+ private openOverlay;
52
+ private closeOverlay;
53
+ private previousSlot?;
54
+ private manageTooltip;
32
55
  render(): TemplateResult;
56
+ protected update(changed: PropertyValues<this>): Promise<void>;
57
+ protected updated(changed: PropertyValues<this>): void;
33
58
  }