Skip to content

Commit 5a0ce6e

Browse files
author
Melissa Thompson
authored
feat(tooltip): s2 migration (#2743)
1 parent 2f8ef28 commit 5a0ce6e

File tree

13 files changed

+120
-181
lines changed

13 files changed

+120
-181
lines changed

.changeset/light-years-speak.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
"@spectrum-css/tooltip": major
3+
---
4+
5+
feat(tooltip): Spectrum 2 migration
6+
7+
This migration includes updated colors, rounding, a bigger tip, and the removal of variants (only neutral is available in Spectrum 2). As a result of the deprecation of variants, icons have also been removed.
8+
9+
The redesign of the tip, specifically the rounding, required a reworking of how we use clip-path and transform.
10+
11+
Some custom property mods have been removed:
12+
13+
- `--mod-tooltip-background-color-informative`
14+
- `--mod-tooltip-background-color-negative`
15+
- `--mod-tooltip-background-color-positive`
16+
- `--mod-tooltip-icon-spacing-block-start`
17+
- `--mod-tooltip-icon-spacing-inline-end`
18+
- `--mod-tooltip-icon-spacing-inline-start`
19+
- `--mod-tooltip-icon-width`
20+
21+
And one mod has been added:
22+
23+
- `--mod-tooltip-tip-corner-radius`

components/tooltip/index.css

Lines changed: 39 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ governing permissions and limitations under the License.
1515

1616
.spectrum-Tooltip {
1717
--spectrum-tooltip-animation-duration: var(--spectrum-animation-duration-100);
18+
--spectrum-tooltip-animation-distance: var(--spectrum-spacing-75);
1819

1920
/* override if additional spacing to source is required */
2021
--spectrum-tooltip-margin: 0px;
2122

2223
--spectrum-tooltip-height: var(--spectrum-component-height-75);
2324
--spectrum-tooltip-max-inline-size: var(--spectrum-tooltip-maximum-width);
24-
--spectrum-tooltip-border-radius: var(--spectrum-corner-radius-100);
25-
26-
--spectrum-tooltip-icon-width: var(--spectrum-workflow-icon-size-50);
27-
--spectrum-tooltip-icon-height: var(--spectrum-workflow-icon-size-50);
25+
--spectrum-tooltip-border-radius: var(--spectrum-corner-radius-400);
2826

2927
--spectrum-tooltip-font-size: var(--spectrum-font-size-75);
30-
--spectrum-tooltip-line-height: var(--spectrum-line-height-100);
28+
29+
/* @todo set line-height using font size specific line-height tokens when they are finalized along with the new variable font. */
30+
--spectrum-tooltip-line-height: 1.2;
3131
--spectrum-tooltip-cjk-line-height: var(--spectrum-cjk-line-height-100);
3232
--spectrum-tooltip-font-weight: var(--spectrum-regular-font-weight);
3333

@@ -38,50 +38,22 @@ governing permissions and limitations under the License.
3838
--spectrum-tooltip-spacing-block-start: var(--spectrum-component-top-to-text-75);
3939
--spectrum-tooltip-spacing-block-end: var(--spectrum-component-bottom-to-text-75);
4040

41-
/* icon spacing */
42-
--spectrum-tooltip-icon-spacing-inline-start: var(--spectrum-text-to-visual-75);
43-
--spectrum-tooltip-icon-spacing-inline-end: var(--spectrum-text-to-visual-75);
44-
--spectrum-tooltip-icon-spacing-block-start: var(--spectrum-component-top-to-workflow-icon-75);
45-
46-
/* colors */
47-
--spectrum-tooltip-background-color-informative: var(--spectrum-informative-background-color-default);
48-
--spectrum-tooltip-background-color-positive: var(--spectrum-positive-background-color-default);
49-
--spectrum-tooltip-background-color-negative: var(--spectrum-negative-background-color-default);
50-
51-
--spectrum-tooltip-content-color: var(--spectrum-white);
41+
--spectrum-tooltip-content-color: var(--spectrum-gray-25);
42+
--spectrum-tooltip-background-color-default: var(--spectrum-neutral-background-color-default);
5243

5344
/* tip */
54-
--spectrum-tooltip-tip-inline-size: var(--spectrum-tooltip-tip-width);
5545
--spectrum-tooltip-tip-block-size: var(--spectrum-tooltip-tip-height);
5646

57-
/* Width and height of square element used to render the tip triangle. */
58-
--spectrum-tooltip-tip-square-size: var(--spectrum-tooltip-tip-inline-size);
59-
6047
/* Percentage value of height divided by width, for calculating clip-path within a square tip. */
61-
--spectrum-tooltip-tip-height-percentage: 50%;
48+
--spectrum-tooltip-tip-height-percentage: 100%;
6249

6350
/* Tip inset from container edges for clip-paths calculation, to fix hairline gap in Chrome cause by antialiasing. */
6451
--spectrum-tooltip-tip-antialiasing-inset: 0.5px;
6552

6653
/* pointer tip - default spacing to edge - corner radius plus half of tip width to neutralize override */
67-
--spectrum-tooltip-pointer-corner-spacing: var(--spectrum-corner-radius-100);
54+
--spectrum-tooltip-pointer-corner-spacing: var(--mod-tooltip-border-radius, var(--spectrum-tooltip-border-radius));
6855

69-
/* neutral background changes per theme */
70-
--spectrum-tooltip-background-color-default: var(--spectrum-tooltip-backgound-color-default-neutral);
71-
}
72-
73-
@media (forced-colors: active) {
74-
.spectrum-Tooltip {
75-
border: 1px solid transparent;
76-
}
77-
78-
.spectrum-Tooltip-tip {
79-
forced-color-adjust: none;
80-
--highcontrast-tooltip-background-color-default: CanvasText;
81-
--highcontrast-tooltip-background-color-informative: CanvasText;
82-
--highcontrast-tooltip-background-color-positive: CanvasText;
83-
--highcontrast-tooltip-background-color-negative: CanvasText;
84-
}
56+
--highcontrast-tooltip-border-width: 0px;
8557
}
8658

8759
.spectrum-Tooltip {
@@ -129,19 +101,6 @@ governing permissions and limitations under the License.
129101
}
130102
}
131103

132-
/****** Variants ******/
133-
.spectrum-Tooltip--info {
134-
background-color: var(--highcontrast-tooltip-background-color-informative, var(--mod-tooltip-background-color-informative, var(--spectrum-tooltip-background-color-informative)));
135-
}
136-
137-
.spectrum-Tooltip--positive {
138-
background-color: var(--highcontrast-tooltip-background-color-positive, var(--mod-tooltip-background-color-positive, var(--spectrum-tooltip-background-color-positive)));
139-
}
140-
141-
.spectrum-Tooltip--negative {
142-
background-color: var(--highcontrast-tooltip-background-color-negative, var(--mod-tooltip-background-color-negative, var(--spectrum-tooltip-background-color-negative)));
143-
}
144-
145104
.spectrum-Tooltip.is-open {
146105
@extend %spectrum-overlay--open;
147106
}
@@ -153,27 +112,17 @@ governing permissions and limitations under the License.
153112
block-size: var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size));
154113
inline-size: var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size));
155114

156-
inset-block-start: 100%;
115+
inset-block-start: calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
157116
/* stylelint-disable-next-line csstools/use-logical -- intentional use of non-logical property */
158-
left: 50%;
159-
transform: translateX(-50%);
117+
left: calc(50% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))));
118+
transform: rotate(-45deg);
160119

161120
background-color: var(--highcontrast-tooltip-background-color-default, var(--mod-tooltip-background-color-default, var(--spectrum-tooltip-background-color-default)));
162121

163122
/* Default: Pointing down ▽ */
164-
clip-path: polygon(0 calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))), 50% var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage)), 100% calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))));
165-
166-
.spectrum-Tooltip--info & {
167-
background-color: var(--highcontrast-tooltip-background-color-informative, var(--mod-tooltip-background-color-informative, var(--spectrum-tooltip-background-color-informative)));
168-
}
123+
clip-path: polygon(0 0, 100% var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage)), 0 100%);
169124

170-
.spectrum-Tooltip--positive & {
171-
background-color: var(--highcontrast-tooltip-background-color-positive, var(--mod-tooltip-background-color-positive, var(--spectrum-tooltip-background-color-positive)));
172-
}
173-
174-
.spectrum-Tooltip--negative & {
175-
background-color: var(--highcontrast-tooltip-background-color-negative, var(--mod-tooltip-background-color-negative, var(--spectrum-tooltip-background-color-negative)));
176-
}
125+
border-radius: 0 0 0 var(--mod-tooltip-tip-corner-radius, var(--spectrum-tooltip-tip-corner-radius));
177126

178127
/*** Tip Placement ***/
179128
/* tip is horizontal at bottom pointing down ▽ */
@@ -182,7 +131,8 @@ governing permissions and limitations under the License.
182131
.spectrum-Tooltip--top-right &,
183132
.spectrum-Tooltip--top-start &,
184133
.spectrum-Tooltip--top-end & {
185-
inset-block-start: 100%;
134+
inset-block-start: calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
135+
transform: rotate(-45deg);
186136
}
187137

188138
/* tip is horizontal at top pointing up △ */
@@ -191,20 +141,8 @@ governing permissions and limitations under the License.
191141
.spectrum-Tooltip--bottom-right &,
192142
.spectrum-Tooltip--bottom-start &,
193143
.spectrum-Tooltip--bottom-end & {
194-
clip-path: polygon(50% calc(100% - var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage))), 0 calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))), 100% calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))));
195-
inset-block: auto 100%;
196-
}
197-
198-
/* tip is horizontal and at the edge */
199-
.spectrum-Tooltip--top-left &,
200-
.spectrum-Tooltip--bottom-left &,
201-
.spectrum-Tooltip--top-right &,
202-
.spectrum-Tooltip--bottom-right &,
203-
.spectrum-Tooltip--top-start &,
204-
.spectrum-Tooltip--bottom-start &,
205-
.spectrum-Tooltip--top-end &,
206-
.spectrum-Tooltip--bottom-end & {
207-
transform: none;
144+
inset-block: auto calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
145+
transform: rotate(135deg);
208146
}
209147

210148
/* tip is horizontal at left △ ▽ */
@@ -254,8 +192,7 @@ governing permissions and limitations under the License.
254192
.spectrum-Tooltip--end &,
255193
.spectrum-Tooltip--end-top &,
256194
.spectrum-Tooltip--end-bottom & {
257-
inset-block-start: 50%;
258-
transform: translateY(-50%);
195+
inset-block-start: calc(50% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))));
259196
}
260197

261198
/* tip is vertical and at edge */
@@ -267,7 +204,6 @@ governing permissions and limitations under the License.
267204
.spectrum-Tooltip--start-bottom &,
268205
.spectrum-Tooltip--end-top &,
269206
.spectrum-Tooltip--end-bottom & {
270-
transform: none;
271207
inset-block-start: auto;
272208
}
273209

@@ -278,8 +214,8 @@ governing permissions and limitations under the License.
278214
.spectrum-Tooltip--end &,
279215
.spectrum-Tooltip--end-top &,
280216
.spectrum-Tooltip--end-bottom & {
281-
clip-path: polygon(calc(100% - var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage))) 50%, calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 100%, calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 0);
282-
inset-inline: auto 100%;
217+
inset-inline: auto calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
218+
transform: rotate(45deg);
283219
}
284220

285221
/* tip is vertical pointing ▷ right or end, for LTR. */
@@ -289,8 +225,8 @@ governing permissions and limitations under the License.
289225
.spectrum-Tooltip--start &,
290226
.spectrum-Tooltip--start-top &,
291227
.spectrum-Tooltip--start-bottom & {
292-
clip-path: polygon(calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 0, calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 100%, var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage)) 50%);
293-
inset-inline-start: 100%;
228+
inset-inline-start: calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
229+
transform: rotate(-135deg);
294230
}
295231

296232
/* tip is vertical at top ◁ ▷ */
@@ -317,9 +253,9 @@ governing permissions and limitations under the License.
317253
.spectrum-Tooltip--end-top &,
318254
.spectrum-Tooltip--end-bottom & {
319255
&:dir(rtl) {
320-
clip-path: polygon(calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 0, calc(0% - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 100%, var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage)) 50%);
256+
transform: rotate(-135deg);
321257
right: auto;
322-
left: 100%;
258+
left: calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
323259
}
324260
}
325261

@@ -331,25 +267,13 @@ governing permissions and limitations under the License.
331267
.spectrum-Tooltip--start-top &,
332268
.spectrum-Tooltip--start-bottom & {
333269
&:dir(rtl) {
334-
clip-path: polygon(var(--mod-tooltip-tip-height-percentage, var(--spectrum-tooltip-tip-height-percentage)) 50%, calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 100%, calc(100% + var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset))) 0);
270+
transform: rotate(45deg);
335271
left: auto;
336-
right: 100%;
272+
right: calc(100% - (0.5 * var(--mod-tooltip-tip-square-size, var(--spectrum-tooltip-tip-square-size))) - var(--mod-tooltip-tip-antialiasing-inset, var(--spectrum-tooltip-tip-antialiasing-inset)) + var(--highcontrast-tooltip-border-width));
337273
}
338274
}
339275
}
340276

341-
/****** Icon ******/
342-
.spectrum-Tooltip-typeIcon {
343-
/* subtract tooltip padding from icon start margin */
344-
margin-inline-start: calc(var(--mod-tooltip-icon-spacing-inline-start, var(--spectrum-tooltip-icon-spacing-inline-start)) - var(--mod-tooltip-spacing-inline, var(--spectrum-tooltip-spacing-inline)));
345-
margin-inline-end: var(--mod-tooltip-icon-spacing-inline-end, var(--spectrum-tooltip-icon-spacing-inline-end));
346-
margin-block-start: var(--mod-tooltip-icon-spacing-block-start, var(--spectrum-tooltip-icon-spacing-block-start));
347-
inline-size: var(--mod-tooltip-icon-width, var(--spectrum-tooltip-icon-width));
348-
block-size: var(--mod-tooltip-icon-height, var(--spectrum-tooltip-icon-height));
349-
align-self: flex-start;
350-
flex-shrink: 0;
351-
}
352-
353277
/****** Label ******/
354278
.spectrum-Tooltip-label {
355279
/* Make sure line height is correct to prevent problems in Windows */
@@ -647,3 +571,14 @@ governing permissions and limitations under the License.
647571
}
648572
}
649573
}
574+
575+
@media (forced-colors: active) {
576+
.spectrum-Tooltip {
577+
--highcontrast-tooltip-border-width: 1px;
578+
border: var(--highcontrast-tooltip-border-width) solid CanvasText;
579+
}
580+
581+
.spectrum-Tooltip-tip {
582+
--highcontrast-tooltip-background-color-default: CanvasText;
583+
}
584+
}

components/tooltip/metadata/mods.md

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,24 @@
1-
| Modifiable custom properties |
2-
| -------------------------------------------- |
3-
| `--mod-overlay-animation-duration` |
4-
| `--mod-overlay-animation-duration-opened` |
5-
| `--mod-tooltip-animation-distance` |
6-
| `--mod-tooltip-background-color-default` |
7-
| `--mod-tooltip-background-color-informative` |
8-
| `--mod-tooltip-background-color-negative` |
9-
| `--mod-tooltip-background-color-positive` |
10-
| `--mod-tooltip-border-radius` |
11-
| `--mod-tooltip-cjk-line-height` |
12-
| `--mod-tooltip-content-color` |
13-
| `--mod-tooltip-font-size` |
14-
| `--mod-tooltip-font-weight` |
15-
| `--mod-tooltip-height` |
16-
| `--mod-tooltip-icon-height` |
17-
| `--mod-tooltip-icon-spacing-block-start` |
18-
| `--mod-tooltip-icon-spacing-inline-end` |
19-
| `--mod-tooltip-icon-spacing-inline-start` |
20-
| `--mod-tooltip-icon-width` |
21-
| `--mod-tooltip-line-height` |
22-
| `--mod-tooltip-margin` |
23-
| `--mod-tooltip-max-inline-size` |
24-
| `--mod-tooltip-pointer-corner-spacing` |
25-
| `--mod-tooltip-spacing-block-end` |
26-
| `--mod-tooltip-spacing-block-start` |
27-
| `--mod-tooltip-spacing-inline` |
28-
| `--mod-tooltip-tip-antialiasing-inset` |
29-
| `--mod-tooltip-tip-block-size` |
30-
| `--mod-tooltip-tip-height-percentage` |
31-
| `--mod-tooltip-tip-square-size` |
1+
| Modifiable custom properties |
2+
| ----------------------------------------- |
3+
| `--mod-overlay-animation-duration` |
4+
| `--mod-overlay-animation-duration-opened` |
5+
| `--mod-tooltip-animation-distance` |
6+
| `--mod-tooltip-background-color-default` |
7+
| `--mod-tooltip-border-radius` |
8+
| `--mod-tooltip-cjk-line-height` |
9+
| `--mod-tooltip-content-color` |
10+
| `--mod-tooltip-font-size` |
11+
| `--mod-tooltip-font-weight` |
12+
| `--mod-tooltip-height` |
13+
| `--mod-tooltip-line-height` |
14+
| `--mod-tooltip-margin` |
15+
| `--mod-tooltip-max-inline-size` |
16+
| `--mod-tooltip-pointer-corner-spacing` |
17+
| `--mod-tooltip-spacing-block-end` |
18+
| `--mod-tooltip-spacing-block-start` |
19+
| `--mod-tooltip-spacing-inline` |
20+
| `--mod-tooltip-tip-antialiasing-inset` |
21+
| `--mod-tooltip-tip-block-size` |
22+
| `--mod-tooltip-tip-corner-radius` |
23+
| `--mod-tooltip-tip-height-percentage` |
24+
| `--mod-tooltip-tip-square-size` |

components/tooltip/metadata/tooltip.yml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,29 @@ sections:
66
This component can be modified via its `--mod-*` prefixed custom properties. A list of those prefixed custom properties can be found <a class="spectrum-Link" href="https://github.com/adobe/spectrum-css/tree/main/components/tooltip/metadata/mods.md">here</a>.
77
- name: Migration Guide
88
description: |
9-
### Version 6.1.1
9+
### Version 7.0.0
10+
#### Spectrum 2 migration
11+
This migration includes updated colors, rounding, a bigger tip, and the removal of variants (only neutral is available in Spectrum 2). As a result of the deprecation of variants, icons have also been removed. The redesign of the tip, specifically the rounding, required a reworking of how we use clip-path and transform. Some custom property mods have been removed:
12+
- `--mod-tooltip-background-color-informative`
13+
- `--mod-tooltip-background-color-negative`
14+
- `--mod-tooltip-background-color-positive`
15+
- `--mod-tooltip-icon-spacing-block-start`
16+
- `--mod-tooltip-icon-spacing-inline-end`
17+
- `--mod-tooltip-icon-spacing-inline-start`
18+
- `--mod-tooltip-icon-width`
19+
20+
And one mod has been added:
21+
- `--mod-tooltip-tip-corner-radius`
22+
23+
### Spectrum 1 versions
24+
#### Version 6.1.1
1025
This patch includes tooltip placement adjustments for RTL bugs and increased coverage with Chromatic VRTs. Some clarification on placements:
1126
1227
- If you use a Start or End placement, the tooltip *will* change to the other side of the source when the text direction (LTR/RTL) is changed
1328
- If you use a Left or Right placement, the tooltip *will not* change sides when text direction is changed
1429
1530
As a result of the placement specifications, some placements intentionally use non-logical properties in the CSS (particularly for tooltips that show on hover).
16-
17-
### Tooltip now has 22 directions
31+
#### Tooltip now has 22 directions
1832
- 10 of the new directions are logical and should be tested both left-to-right and right-to-left
1933
examples:
2034
- id: tooltip

components/tooltip/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
],
2424
"peerDependencies": {
2525
"@spectrum-css/icon": ">=7",
26-
"@spectrum-css/tokens": ">=14.0.0-next.3"
26+
"@spectrum-css/tokens": ">=14.0.0-next.7"
2727
},
2828
"devDependencies": {
2929
"@spectrum-css/commons": "^10.0.0"

0 commit comments

Comments
 (0)