Skip to content

Commit f2bc837

Browse files
committed
feat: add tooltips to all api links
1 parent 2a0207d commit f2bc837

File tree

8 files changed

+423
-41
lines changed

8 files changed

+423
-41
lines changed

site/lib/_sass/_site.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
@use 'components/tabs';
3636
@use 'components/theming';
3737
@use 'components/toc';
38+
@use 'components/tooltip';
3839
@use 'components/trailing';
3940

4041
// Styles for specific pages, alphabetically ordered.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
.tooltip-wrapper {
2+
position: relative;
3+
4+
a.tooltip-target {
5+
text-decoration: underline dotted;
6+
}
7+
8+
.tooltip {
9+
visibility: hidden;
10+
11+
display: flex;
12+
position: absolute;
13+
z-index: 100;
14+
top: 100%;
15+
left: 50%;
16+
transform: translateX(-50%);
17+
18+
flex-flow: column nowrap;
19+
width: 20rem;
20+
21+
background: var(--site-raised-bgColor);
22+
border: 0.05rem solid rgba(0, 0, 0, .125);
23+
border-radius: 0.75rem;
24+
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, .15);
25+
padding: 0.8rem;
26+
27+
.tooltip-header {
28+
font-size: 1.2rem;
29+
font-weight: 500;
30+
margin-bottom: 0.25rem;
31+
}
32+
33+
.tooltip-content {
34+
font-size: 0.875rem;
35+
color: var(--site-secondary-textColor);
36+
}
37+
}
38+
39+
// On non-touch devices, show tooltip on hover or focus.
40+
@media all and not (pointer: coarse) {
41+
&:hover .tooltip {
42+
visibility: visible;
43+
}
44+
45+
&:has(.tooltip-target:focus) .tooltip {
46+
visibility: visible;
47+
}
48+
}
49+
50+
// On touch devices, show tooltip on click.
51+
@media all and (pointer: coarse) {
52+
.tooltip.visible {
53+
visibility: visible;
54+
}
55+
}
56+
57+
}

site/lib/jaspr_options.dart

Lines changed: 50 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,34 @@
77
import 'package:jaspr/jaspr.dart';
88
import 'package:docs_flutter_dev_site/src/client/global_scripts.dart'
99
as prefix0;
10-
import 'package:docs_flutter_dev_site/src/components/common/client/cookie_notice.dart'
10+
import 'package:docs_flutter_dev_site/src/components/common/client/api_link_tooltip.dart'
1111
as prefix1;
12-
import 'package:docs_flutter_dev_site/src/components/common/client/copy_button.dart'
12+
import 'package:docs_flutter_dev_site/src/components/common/client/cookie_notice.dart'
1313
as prefix2;
14-
import 'package:docs_flutter_dev_site/src/components/common/client/download_latest_button.dart'
14+
import 'package:docs_flutter_dev_site/src/components/common/client/copy_button.dart'
1515
as prefix3;
16-
import 'package:docs_flutter_dev_site/src/components/common/client/feedback.dart'
16+
import 'package:docs_flutter_dev_site/src/components/common/client/download_latest_button.dart'
1717
as prefix4;
18-
import 'package:docs_flutter_dev_site/src/components/common/client/on_this_page_button.dart'
18+
import 'package:docs_flutter_dev_site/src/components/common/client/feedback.dart'
1919
as prefix5;
20-
import 'package:docs_flutter_dev_site/src/components/common/client/os_selector.dart'
20+
import 'package:docs_flutter_dev_site/src/components/common/client/on_this_page_button.dart'
2121
as prefix6;
22-
import 'package:docs_flutter_dev_site/src/components/dartpad/dartpad_injector.dart'
22+
import 'package:docs_flutter_dev_site/src/components/common/client/os_selector.dart'
2323
as prefix7;
24-
import 'package:docs_flutter_dev_site/src/components/layout/menu_toggle.dart'
24+
import 'package:docs_flutter_dev_site/src/components/dartpad/dartpad_injector.dart'
2525
as prefix8;
26-
import 'package:docs_flutter_dev_site/src/components/layout/site_switcher.dart'
26+
import 'package:docs_flutter_dev_site/src/components/layout/menu_toggle.dart'
2727
as prefix9;
28-
import 'package:docs_flutter_dev_site/src/components/layout/theme_switcher.dart'
28+
import 'package:docs_flutter_dev_site/src/components/layout/site_switcher.dart'
2929
as prefix10;
30-
import 'package:docs_flutter_dev_site/src/components/pages/archive_table.dart'
30+
import 'package:docs_flutter_dev_site/src/components/layout/theme_switcher.dart'
3131
as prefix11;
32-
import 'package:docs_flutter_dev_site/src/components/pages/learning_resource_filters.dart'
32+
import 'package:docs_flutter_dev_site/src/components/pages/archive_table.dart'
3333
as prefix12;
34-
import 'package:docs_flutter_dev_site/src/components/pages/learning_resource_filters_sidebar.dart'
34+
import 'package:docs_flutter_dev_site/src/components/pages/learning_resource_filters.dart'
3535
as prefix13;
36+
import 'package:docs_flutter_dev_site/src/components/pages/learning_resource_filters_sidebar.dart'
37+
as prefix14;
3638

3739
/// Default [JasprOptions] for use with your jaspr project.
3840
///
@@ -56,87 +58,96 @@ JasprOptions get defaultJasprOptions => JasprOptions(
5658
'src/client/global_scripts',
5759
),
5860

59-
prefix1.CookieNotice: ClientTarget<prefix1.CookieNotice>(
61+
prefix1.ApiLinkTooltip: ClientTarget<prefix1.ApiLinkTooltip>(
62+
'src/components/common/client/api_link_tooltip',
63+
params: _prefix1ApiLinkTooltip,
64+
),
65+
66+
prefix2.CookieNotice: ClientTarget<prefix2.CookieNotice>(
6067
'src/components/common/client/cookie_notice',
6168
),
6269

63-
prefix2.CopyButton: ClientTarget<prefix2.CopyButton>(
70+
prefix3.CopyButton: ClientTarget<prefix3.CopyButton>(
6471
'src/components/common/client/copy_button',
65-
params: _prefix2CopyButton,
72+
params: _prefix3CopyButton,
6673
),
6774

68-
prefix3.DownloadLatestButton: ClientTarget<prefix3.DownloadLatestButton>(
75+
prefix4.DownloadLatestButton: ClientTarget<prefix4.DownloadLatestButton>(
6976
'src/components/common/client/download_latest_button',
70-
params: _prefix3DownloadLatestButton,
77+
params: _prefix4DownloadLatestButton,
7178
),
7279

73-
prefix4.FeedbackComponent: ClientTarget<prefix4.FeedbackComponent>(
80+
prefix5.FeedbackComponent: ClientTarget<prefix5.FeedbackComponent>(
7481
'src/components/common/client/feedback',
75-
params: _prefix4FeedbackComponent,
82+
params: _prefix5FeedbackComponent,
7683
),
7784

78-
prefix5.OnThisPageButton: ClientTarget<prefix5.OnThisPageButton>(
85+
prefix6.OnThisPageButton: ClientTarget<prefix6.OnThisPageButton>(
7986
'src/components/common/client/on_this_page_button',
8087
),
8188

82-
prefix6.OsSelector: ClientTarget<prefix6.OsSelector>(
89+
prefix7.OsSelector: ClientTarget<prefix7.OsSelector>(
8390
'src/components/common/client/os_selector',
8491
),
8592

86-
prefix7.DartPadInjector: ClientTarget<prefix7.DartPadInjector>(
93+
prefix8.DartPadInjector: ClientTarget<prefix8.DartPadInjector>(
8794
'src/components/dartpad/dartpad_injector',
88-
params: _prefix7DartPadInjector,
95+
params: _prefix8DartPadInjector,
8996
),
9097

91-
prefix8.MenuToggle: ClientTarget<prefix8.MenuToggle>(
98+
prefix9.MenuToggle: ClientTarget<prefix9.MenuToggle>(
9299
'src/components/layout/menu_toggle',
93100
),
94101

95-
prefix9.SiteSwitcher: ClientTarget<prefix9.SiteSwitcher>(
102+
prefix10.SiteSwitcher: ClientTarget<prefix10.SiteSwitcher>(
96103
'src/components/layout/site_switcher',
97104
),
98105

99-
prefix10.ThemeSwitcher: ClientTarget<prefix10.ThemeSwitcher>(
106+
prefix11.ThemeSwitcher: ClientTarget<prefix11.ThemeSwitcher>(
100107
'src/components/layout/theme_switcher',
101108
),
102109

103-
prefix11.ArchiveTable: ClientTarget<prefix11.ArchiveTable>(
110+
prefix12.ArchiveTable: ClientTarget<prefix12.ArchiveTable>(
104111
'src/components/pages/archive_table',
105-
params: _prefix11ArchiveTable,
112+
params: _prefix12ArchiveTable,
106113
),
107114

108-
prefix12.LearningResourceFilters:
109-
ClientTarget<prefix12.LearningResourceFilters>(
115+
prefix13.LearningResourceFilters:
116+
ClientTarget<prefix13.LearningResourceFilters>(
110117
'src/components/pages/learning_resource_filters',
111118
),
112119

113-
prefix13.LearningResourceFiltersSidebar:
114-
ClientTarget<prefix13.LearningResourceFiltersSidebar>(
120+
prefix14.LearningResourceFiltersSidebar:
121+
ClientTarget<prefix14.LearningResourceFiltersSidebar>(
115122
'src/components/pages/learning_resource_filters_sidebar',
116123
),
117124
},
118125
styles: () => [],
119126
);
120127

121-
Map<String, dynamic> _prefix2CopyButton(prefix2.CopyButton c) => {
128+
Map<String, dynamic> _prefix1ApiLinkTooltip(prefix1.ApiLinkTooltip c) => {
129+
'url': c.url,
130+
'text': c.text,
131+
};
132+
Map<String, dynamic> _prefix3CopyButton(prefix3.CopyButton c) => {
122133
'toCopy': c.toCopy,
123134
'buttonText': c.buttonText,
124135
'classes': c.classes,
125136
'title': c.title,
126137
};
127-
Map<String, dynamic> _prefix3DownloadLatestButton(
128-
prefix3.DownloadLatestButton c,
138+
Map<String, dynamic> _prefix4DownloadLatestButton(
139+
prefix4.DownloadLatestButton c,
129140
) => {'os': c.os, 'arch': c.arch};
130-
Map<String, dynamic> _prefix4FeedbackComponent(prefix4.FeedbackComponent c) => {
141+
Map<String, dynamic> _prefix5FeedbackComponent(prefix5.FeedbackComponent c) => {
131142
'issueUrl': c.issueUrl,
132143
};
133-
Map<String, dynamic> _prefix7DartPadInjector(prefix7.DartPadInjector c) => {
144+
Map<String, dynamic> _prefix8DartPadInjector(prefix8.DartPadInjector c) => {
134145
'title': c.title,
135146
'theme': c.theme,
136147
'height': c.height,
137148
'runAutomatically': c.runAutomatically,
138149
};
139-
Map<String, dynamic> _prefix11ArchiveTable(prefix11.ArchiveTable c) => {
150+
Map<String, dynamic> _prefix12ArchiveTable(prefix12.ArchiveTable c) => {
140151
'os': c.os,
141152
'channel': c.channel,
142153
};

0 commit comments

Comments
 (0)