@internetarchive/ia-topnav 1.4.1-alpha-webdev8259.0 → 1.4.1-alpha-webdev8259.1
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/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/src/data/menus.js.map +1 -1
- package/dist/src/dropdown-menu.js +26 -26
- package/dist/src/dropdown-menu.js.map +1 -1
- package/dist/src/ia-topnav.d.ts +2 -13
- package/dist/src/ia-topnav.js +70 -140
- package/dist/src/ia-topnav.js.map +1 -1
- package/dist/src/lib/keyboard-navigation.js.map +1 -1
- package/dist/src/login-button.js +17 -17
- package/dist/src/login-button.js.map +1 -1
- package/dist/src/media-menu.js +21 -21
- package/dist/src/media-menu.js.map +1 -1
- package/dist/src/models.d.ts +0 -1
- package/dist/src/models.js.map +1 -1
- package/dist/src/primary-nav.d.ts +6 -7
- package/dist/src/primary-nav.js +98 -142
- package/dist/src/primary-nav.js.map +1 -1
- package/dist/src/styles/login-button.js +87 -87
- package/dist/src/styles/login-button.js.map +1 -1
- package/dist/src/styles/primary-nav.js +343 -343
- package/dist/src/styles/primary-nav.js.map +1 -1
- package/dist/src/user-menu.js +13 -13
- package/dist/src/user-menu.js.map +1 -1
- package/dist/test/ia-topnav.test.js +15 -87
- package/dist/test/ia-topnav.test.js.map +1 -1
- package/dist/test/primary-nav.test.js +16 -34
- package/dist/test/primary-nav.test.js.map +1 -1
- package/index.ts +3 -4
- package/package.json +1 -1
- package/src/data/menus.ts +652 -652
- package/src/dropdown-menu.ts +132 -132
- package/src/ia-topnav.ts +301 -383
- package/src/lib/keyboard-navigation.ts +166 -166
- package/src/login-button.ts +78 -78
- package/src/media-menu.ts +143 -143
- package/src/models.ts +63 -65
- package/src/primary-nav.ts +277 -324
- package/src/styles/login-button.ts +90 -90
- package/src/styles/primary-nav.ts +346 -346
- package/src/user-menu.ts +32 -32
- package/test/ia-topnav.test.ts +282 -381
- package/test/primary-nav.test.ts +136 -163
package/dist/src/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"","sourcesContent":["export interface IATopNavConfig {\
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"","sourcesContent":["export interface IATopNavConfig {\n /**\n * Google Analytics event category\n */\n eventCategory?: string;\n\n /**\n * Copy to display for number of pages archived at the top of the Wayback search form\n *\n * ie. \"425 billion\"\n */\n waybackPagesArchived?: string;\n\n /**\n * Array of strings representing the values of options that should be hidden from search options\n */\n hiddenSearchOptions?: string[];\n\n /**\n * Map from dropdown item ids to any callout text that should be applied beside them\n */\n callouts?: Record<string, string>;\n}\n\nexport interface IATopNavLink {\n title: string;\n\n url?: string;\n\n class?: string;\n\n icon?: string;\n\n analyticsEvent?: string;\n\n external?: boolean;\n}\n\nexport interface IATopNavMediaMenu {\n heading: string;\n iconLinks: IATopNavLink[];\n featuredLinks: IATopNavLink[];\n links: IATopNavLink[];\n mobileAppsLinks: IATopNavLink[];\n browserExtensionsLinks: IATopNavLink[];\n archiveItLinks: IATopNavLink[];\n}\n\nexport interface IATopNavMenuConfig {\n audio: IATopNavMediaMenu;\n images: IATopNavMediaMenu;\n more: IATopNavMediaMenu;\n signedOut: IATopNavLink[];\n software: IATopNavMediaMenu;\n texts: IATopNavMediaMenu;\n user: IATopNavLink[];\n userAdmin: IATopNavLink[];\n userAdminFlags: IATopNavLink[];\n video: IATopNavMediaMenu;\n web: IATopNavMediaMenu;\n}\n\nexport type IATopNavSecondIdentitySlotMode = 'allow' | '';\n"]}
|
|
@@ -2,9 +2,8 @@ import { nothing, PropertyValues } from 'lit';
|
|
|
2
2
|
import TrackedElement from './tracked-element';
|
|
3
3
|
import './assets/img/hamburger';
|
|
4
4
|
import './login-button';
|
|
5
|
-
import './nav-search';
|
|
6
5
|
import './media-menu';
|
|
7
|
-
import { IATopNavConfig,
|
|
6
|
+
import { IATopNavConfig, IATopNavSecondIdentitySlotMode } from './models';
|
|
8
7
|
export declare class PrimaryNav extends TrackedElement {
|
|
9
8
|
mediaBaseHost: string;
|
|
10
9
|
baseHost: string;
|
|
@@ -12,9 +11,6 @@ export declare class PrimaryNav extends TrackedElement {
|
|
|
12
11
|
config: IATopNavConfig;
|
|
13
12
|
openMenu: string;
|
|
14
13
|
screenName: string;
|
|
15
|
-
searchIn: string;
|
|
16
|
-
searchQuery: string;
|
|
17
|
-
searchSlotMode: IATopNavSearchSlotMode;
|
|
18
14
|
secondIdentitySlotMode: IATopNavSecondIdentitySlotMode;
|
|
19
15
|
selectedMenuOption: string;
|
|
20
16
|
signedOutMenuOpen: boolean;
|
|
@@ -35,10 +31,13 @@ export declare class PrimaryNav extends TrackedElement {
|
|
|
35
31
|
get userIcon(): import("lit").TemplateResult<1>;
|
|
36
32
|
get loginIcon(): import("lit").TemplateResult<1>;
|
|
37
33
|
get searchMenuOpen(): boolean;
|
|
38
|
-
get useCustomSearch(): boolean;
|
|
39
34
|
get allowSecondaryIcon(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The search slot container, rendered between media-menu and
|
|
37
|
+
* right-side-section so it sits left of the Upload button on desktop.
|
|
38
|
+
*/
|
|
39
|
+
get searchSlotContainer(): import("lit").TemplateResult<1> | typeof nothing;
|
|
40
40
|
get searchMenu(): import("lit").TemplateResult<1> | typeof nothing;
|
|
41
|
-
private emitNavSearchBlurEvent;
|
|
42
41
|
get mobileDonateHeart(): import("lit").TemplateResult<1>;
|
|
43
42
|
get uploadButtonTemplate(): import("lit").TemplateResult<1>;
|
|
44
43
|
get userStateTemplate(): import("lit").TemplateResult<1>;
|
package/dist/src/primary-nav.js
CHANGED
|
@@ -4,11 +4,9 @@ import TrackedElement from './tracked-element';
|
|
|
4
4
|
import icons from './assets/img/icons';
|
|
5
5
|
import './assets/img/hamburger';
|
|
6
6
|
import './login-button';
|
|
7
|
-
import './nav-search';
|
|
8
7
|
import './media-menu';
|
|
9
8
|
import logoWordmarkStacked from './assets/img/wordmark-stacked';
|
|
10
9
|
import primaryNavCSS from './styles/primary-nav';
|
|
11
|
-
import locationHandler from './lib/location-handler';
|
|
12
10
|
import formatUrl from './lib/format-url';
|
|
13
11
|
import { customElement, property } from 'lit/decorators.js';
|
|
14
12
|
import { defaultTopNavConfig } from './data/menus';
|
|
@@ -21,9 +19,6 @@ let PrimaryNav = class PrimaryNav extends TrackedElement {
|
|
|
21
19
|
this.config = defaultTopNavConfig;
|
|
22
20
|
this.openMenu = '';
|
|
23
21
|
this.screenName = '';
|
|
24
|
-
this.searchIn = '';
|
|
25
|
-
this.searchQuery = '';
|
|
26
|
-
this.searchSlotMode = '';
|
|
27
22
|
this.secondIdentitySlotMode = '';
|
|
28
23
|
this.selectedMenuOption = '';
|
|
29
24
|
this.signedOutMenuOpen = false;
|
|
@@ -99,127 +94,96 @@ let PrimaryNav = class PrimaryNav extends TrackedElement {
|
|
|
99
94
|
var _a;
|
|
100
95
|
const userMenuClass = this.openMenu === 'user' ? 'active' : '';
|
|
101
96
|
const userMenuToolTip = this.openMenu === 'user' ? 'Close user menu' : 'Expand user menu';
|
|
102
|
-
return html `
|
|
103
|
-
<button
|
|
104
|
-
class="user-menu ${userMenuClass}"
|
|
105
|
-
title="${userMenuToolTip}"
|
|
106
|
-
@click="${this.toggleUserMenu}"
|
|
107
|
-
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavUserMenu"
|
|
108
|
-
>
|
|
109
|
-
<img
|
|
110
|
-
src="${this.mediaBaseHost}${this.userProfileImagePath}"
|
|
111
|
-
alt="Profile picture for ${this.screenName}"
|
|
112
|
-
/>
|
|
113
|
-
<span class="screen-name" dir="auto">${this.screenName}</span>
|
|
114
|
-
</button>
|
|
97
|
+
return html `
|
|
98
|
+
<button
|
|
99
|
+
class="user-menu ${userMenuClass}"
|
|
100
|
+
title="${userMenuToolTip}"
|
|
101
|
+
@click="${this.toggleUserMenu}"
|
|
102
|
+
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavUserMenu"
|
|
103
|
+
>
|
|
104
|
+
<img
|
|
105
|
+
src="${this.mediaBaseHost}${this.userProfileImagePath}"
|
|
106
|
+
alt="Profile picture for ${this.screenName}"
|
|
107
|
+
/>
|
|
108
|
+
<span class="screen-name" dir="auto">${this.screenName}</span>
|
|
109
|
+
</button>
|
|
115
110
|
`;
|
|
116
111
|
}
|
|
117
112
|
get loginIcon() {
|
|
118
|
-
return html `
|
|
119
|
-
<login-button
|
|
120
|
-
.baseHost=${this.baseHost}
|
|
121
|
-
.config=${this.config}
|
|
122
|
-
.dropdownOpen=${this.signedOutMenuOpen}
|
|
123
|
-
.openMenu=${this.openMenu}
|
|
124
|
-
@signedOutMenuToggled=${this.signedOutMenuToggled}
|
|
125
|
-
></login-button>
|
|
113
|
+
return html `
|
|
114
|
+
<login-button
|
|
115
|
+
.baseHost=${this.baseHost}
|
|
116
|
+
.config=${this.config}
|
|
117
|
+
.dropdownOpen=${this.signedOutMenuOpen}
|
|
118
|
+
.openMenu=${this.openMenu}
|
|
119
|
+
@signedOutMenuToggled=${this.signedOutMenuToggled}
|
|
120
|
+
></login-button>
|
|
126
121
|
`;
|
|
127
122
|
}
|
|
128
123
|
get searchMenuOpen() {
|
|
129
124
|
return this.openMenu === 'search';
|
|
130
125
|
}
|
|
131
|
-
get useCustomSearch() {
|
|
132
|
-
return this.searchSlotMode === 'custom';
|
|
133
|
-
}
|
|
134
126
|
get allowSecondaryIcon() {
|
|
135
127
|
return this.secondIdentitySlotMode === 'allow';
|
|
136
128
|
}
|
|
137
|
-
|
|
138
|
-
|
|
129
|
+
/**
|
|
130
|
+
* The search slot container, rendered between media-menu and
|
|
131
|
+
* right-side-section so it sits left of the Upload button on desktop.
|
|
132
|
+
*/
|
|
133
|
+
get searchSlotContainer() {
|
|
139
134
|
if (this.hideSearch)
|
|
140
135
|
return nothing;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
@click="${this.toggleSearchMenu}"
|
|
146
|
-
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavSearchOpen"
|
|
147
|
-
>
|
|
148
|
-
${icons.search}
|
|
149
|
-
</button>
|
|
150
|
-
<div
|
|
151
|
-
class="custom-search-container ${this.searchMenuOpen ? 'open' : ''}"
|
|
152
|
-
>
|
|
153
|
-
<slot name="custom-search"></slot>
|
|
154
|
-
</div>
|
|
155
|
-
`;
|
|
156
|
-
}
|
|
157
|
-
return html `
|
|
158
|
-
<button
|
|
159
|
-
class="search-trigger"
|
|
160
|
-
@click="${this.toggleSearchMenu}"
|
|
161
|
-
data-event-click-tracking="${(_b = this.config) === null || _b === void 0 ? void 0 : _b.eventCategory}|NavSearchOpen"
|
|
162
|
-
>
|
|
163
|
-
${icons.search}
|
|
164
|
-
</button>
|
|
165
|
-
<nav-search
|
|
166
|
-
.baseHost=${this.baseHost}
|
|
167
|
-
.config=${this.config}
|
|
168
|
-
.locationHandler=${locationHandler}
|
|
169
|
-
.open=${this.searchMenuOpen}
|
|
170
|
-
.openMenu=${this.openMenu}
|
|
171
|
-
.searchIn=${this.searchIn}
|
|
172
|
-
.searchQuery=${this.searchQuery}
|
|
173
|
-
@blur=${this.emitNavSearchBlurEvent}
|
|
174
|
-
></nav-search>
|
|
136
|
+
return html `
|
|
137
|
+
<div class="custom-search-container ${this.searchMenuOpen ? 'open' : ''}">
|
|
138
|
+
<slot name="custom-search"></slot>
|
|
139
|
+
</div>
|
|
175
140
|
`;
|
|
176
141
|
}
|
|
177
|
-
|
|
142
|
+
get searchMenu() {
|
|
178
143
|
var _a;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
this.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}));
|
|
144
|
+
if (this.hideSearch)
|
|
145
|
+
return nothing;
|
|
146
|
+
return html `
|
|
147
|
+
<button
|
|
148
|
+
class="search-trigger"
|
|
149
|
+
@click="${this.toggleSearchMenu}"
|
|
150
|
+
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavSearchOpen"
|
|
151
|
+
>
|
|
152
|
+
${icons.search}
|
|
153
|
+
</button>
|
|
154
|
+
`;
|
|
191
155
|
}
|
|
192
156
|
get mobileDonateHeart() {
|
|
193
|
-
return html `
|
|
194
|
-
<a
|
|
195
|
-
class="mobile-donate-link"
|
|
196
|
-
.href=${formatUrl('/donate/?origin=iawww-mbhrt', this.baseHost)}
|
|
197
|
-
>
|
|
198
|
-
${icons.donateUnpadded}
|
|
199
|
-
<span class="sr-only">"Donate to the archive"</span>
|
|
200
|
-
</a>
|
|
157
|
+
return html `
|
|
158
|
+
<a
|
|
159
|
+
class="mobile-donate-link"
|
|
160
|
+
.href=${formatUrl('/donate/?origin=iawww-mbhrt', this.baseHost)}
|
|
161
|
+
>
|
|
162
|
+
${icons.donateUnpadded}
|
|
163
|
+
<span class="sr-only">"Donate to the archive"</span>
|
|
164
|
+
</a>
|
|
201
165
|
`;
|
|
202
166
|
}
|
|
203
167
|
get uploadButtonTemplate() {
|
|
204
|
-
return html ` <a
|
|
205
|
-
.href="${formatUrl('/upload', this.baseHost)}"
|
|
206
|
-
class="upload"
|
|
207
|
-
@focus=${this.toggleMediaMenu}
|
|
208
|
-
>
|
|
209
|
-
${icons.upload}
|
|
210
|
-
<span>Upload</span>
|
|
168
|
+
return html ` <a
|
|
169
|
+
.href="${formatUrl('/upload', this.baseHost)}"
|
|
170
|
+
class="upload"
|
|
171
|
+
@focus=${this.toggleMediaMenu}
|
|
172
|
+
>
|
|
173
|
+
${icons.upload}
|
|
174
|
+
<span>Upload</span>
|
|
211
175
|
</a>`;
|
|
212
176
|
}
|
|
213
177
|
get userStateTemplate() {
|
|
214
|
-
return html `<div class="user-info">
|
|
215
|
-
${this.username ? this.userIcon : this.loginIcon}
|
|
178
|
+
return html `<div class="user-info">
|
|
179
|
+
${this.username ? this.userIcon : this.loginIcon}
|
|
216
180
|
</div>`;
|
|
217
181
|
}
|
|
218
182
|
get secondLogoSlot() {
|
|
219
183
|
return this.allowSecondaryIcon
|
|
220
|
-
? html `
|
|
221
|
-
<slot name="opt-sec-logo"></slot>
|
|
222
|
-
<slot name="opt-sec-logo-mobile"></slot>
|
|
184
|
+
? html `
|
|
185
|
+
<slot name="opt-sec-logo"></slot>
|
|
186
|
+
<slot name="opt-sec-logo-mobile"></slot>
|
|
223
187
|
`
|
|
224
188
|
: nothing;
|
|
225
189
|
}
|
|
@@ -229,41 +193,42 @@ let PrimaryNav = class PrimaryNav extends TrackedElement {
|
|
|
229
193
|
render() {
|
|
230
194
|
var _a, _b;
|
|
231
195
|
// const mediaMenuTabIndex = this.openMenu === 'media' ? '' : '-1';
|
|
232
|
-
return html `
|
|
233
|
-
<nav class=${this.hideSearch ? 'hide-search' : ''}>
|
|
234
|
-
<button
|
|
235
|
-
class="hamburger"
|
|
236
|
-
@click="${this.toggleMediaMenu}"
|
|
237
|
-
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavHamburger"
|
|
238
|
-
title="Open main menu"
|
|
239
|
-
>
|
|
240
|
-
<icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>
|
|
241
|
-
</button>
|
|
242
|
-
|
|
243
|
-
<div class=${`branding ${this.secondLogoClass}`}>
|
|
244
|
-
<a
|
|
245
|
-
.href=${formatUrl('/', this.baseHost)}
|
|
246
|
-
@click=${this.trackClick}
|
|
247
|
-
data-event-click-tracking="${(_b = this.config) === null || _b === void 0 ? void 0 : _b.eventCategory}|NavHome"
|
|
248
|
-
title="Go home"
|
|
249
|
-
class="link-home"
|
|
250
|
-
>${icons.iaLogo}${logoWordmarkStacked}</a
|
|
251
|
-
>
|
|
252
|
-
${this.secondLogoSlot}
|
|
253
|
-
</div>
|
|
254
|
-
<media-menu
|
|
255
|
-
.baseHost=${this.baseHost}
|
|
256
|
-
.config=${this.config}
|
|
257
|
-
?mediaMenuAnimate=${this.mediaMenuAnimate}
|
|
258
|
-
.selectedMenuOption=${this.selectedMenuOption}
|
|
259
|
-
.openMenu=${this.openMenu}
|
|
260
|
-
.currentTab=${this.currentTab}
|
|
261
|
-
></media-menu>
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
${this.
|
|
265
|
-
|
|
266
|
-
|
|
196
|
+
return html `
|
|
197
|
+
<nav class=${this.hideSearch ? 'hide-search' : ''}>
|
|
198
|
+
<button
|
|
199
|
+
class="hamburger"
|
|
200
|
+
@click="${this.toggleMediaMenu}"
|
|
201
|
+
data-event-click-tracking="${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavHamburger"
|
|
202
|
+
title="Open main menu"
|
|
203
|
+
>
|
|
204
|
+
<icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>
|
|
205
|
+
</button>
|
|
206
|
+
|
|
207
|
+
<div class=${`branding ${this.secondLogoClass}`}>
|
|
208
|
+
<a
|
|
209
|
+
.href=${formatUrl('/', this.baseHost)}
|
|
210
|
+
@click=${this.trackClick}
|
|
211
|
+
data-event-click-tracking="${(_b = this.config) === null || _b === void 0 ? void 0 : _b.eventCategory}|NavHome"
|
|
212
|
+
title="Go home"
|
|
213
|
+
class="link-home"
|
|
214
|
+
>${icons.iaLogo}${logoWordmarkStacked}</a
|
|
215
|
+
>
|
|
216
|
+
${this.secondLogoSlot}
|
|
217
|
+
</div>
|
|
218
|
+
<media-menu
|
|
219
|
+
.baseHost=${this.baseHost}
|
|
220
|
+
.config=${this.config}
|
|
221
|
+
?mediaMenuAnimate=${this.mediaMenuAnimate}
|
|
222
|
+
.selectedMenuOption=${this.selectedMenuOption}
|
|
223
|
+
.openMenu=${this.openMenu}
|
|
224
|
+
.currentTab=${this.currentTab}
|
|
225
|
+
></media-menu>
|
|
226
|
+
${this.searchSlotContainer}
|
|
227
|
+
<div class="right-side-section">
|
|
228
|
+
${this.mobileDonateHeart} ${this.userStateTemplate}
|
|
229
|
+
${this.uploadButtonTemplate} ${this.searchMenu}
|
|
230
|
+
</div>
|
|
231
|
+
</nav>
|
|
267
232
|
`;
|
|
268
233
|
}
|
|
269
234
|
};
|
|
@@ -285,15 +250,6 @@ __decorate([
|
|
|
285
250
|
__decorate([
|
|
286
251
|
property({ type: String })
|
|
287
252
|
], PrimaryNav.prototype, "screenName", void 0);
|
|
288
|
-
__decorate([
|
|
289
|
-
property({ type: String })
|
|
290
|
-
], PrimaryNav.prototype, "searchIn", void 0);
|
|
291
|
-
__decorate([
|
|
292
|
-
property({ type: String })
|
|
293
|
-
], PrimaryNav.prototype, "searchQuery", void 0);
|
|
294
|
-
__decorate([
|
|
295
|
-
property({ type: String })
|
|
296
|
-
], PrimaryNav.prototype, "searchSlotMode", void 0);
|
|
297
253
|
__decorate([
|
|
298
254
|
property({ type: String })
|
|
299
255
|
], PrimaryNav.prototype, "secondIdentitySlotMode", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../src/primary-nav.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues } from 'lit';\r\nimport TrackedElement from './tracked-element';\r\nimport icons from './assets/img/icons';\r\nimport './assets/img/hamburger';\r\nimport './login-button';\r\nimport './nav-search';\r\nimport './media-menu';\r\nimport logoWordmarkStacked from './assets/img/wordmark-stacked';\r\nimport primaryNavCSS from './styles/primary-nav';\r\nimport locationHandler from './lib/location-handler';\r\nimport formatUrl from './lib/format-url';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport {\r\n IATopNavConfig,\r\n IATopNavSearchSlotMode,\r\n IATopNavSecondIdentitySlotMode,\r\n} from './models';\r\nimport { defaultTopNavConfig } from './data/menus';\r\n\r\n@customElement('primary-nav')\r\nexport class PrimaryNav extends TrackedElement {\r\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\r\n @property({ type: String }) baseHost = '';\r\n @property({ type: Boolean }) hideSearch = false;\r\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\r\n @property({ type: String }) openMenu = '';\r\n @property({ type: String }) screenName = '';\r\n @property({ type: String }) searchIn = '';\r\n @property({ type: String }) searchQuery = '';\r\n @property({ type: String })\r\n searchSlotMode: IATopNavSearchSlotMode = '';\r\n @property({ type: String })\r\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\r\n @property({ type: String }) selectedMenuOption = '';\r\n @property({ type: Boolean }) signedOutMenuOpen = false;\r\n @property({ type: Boolean }) userMenuOpen = false;\r\n @property({ type: Boolean }) mediaMenuAnimate = false;\r\n @property({ type: String }) username = '';\r\n @property({ type: String }) userProfileImagePath = '';\r\n @property({ type: Object }) currentTab:\r\n | { mediatype: string; moveTo: string }\r\n | undefined;\r\n signedOutMenuToggled: unknown;\r\n\r\n static get styles() {\r\n return primaryNavCSS;\r\n }\r\n\r\n toggleMediaMenu(e: Event) {\r\n this.trackClick(e);\r\n this.dispatchEvent(\r\n new CustomEvent('menuToggled', {\r\n detail: {\r\n menuName: 'media',\r\n },\r\n }),\r\n );\r\n }\r\n\r\n toggleSearchMenu(e: Event) {\r\n this.trackClick(e);\r\n this.dispatchEvent(\r\n new CustomEvent('menuToggled', {\r\n detail: {\r\n menuName: 'search',\r\n },\r\n }),\r\n );\r\n }\r\n\r\n toggleUserMenu(e: Event) {\r\n this.trackClick(e);\r\n this.dispatchEvent(\r\n new CustomEvent('menuToggled', {\r\n detail: {\r\n menuName: 'user',\r\n },\r\n }),\r\n );\r\n }\r\n\r\n updated(props: PropertyValues) {\r\n if (props.has('currentTab')) {\r\n // early return\r\n if (!this.currentTab || Object.keys(this.currentTab).length === 0)\r\n return nothing;\r\n\r\n const isUserMenuTab =\r\n this.currentTab && this.currentTab.mediatype === 'usermenu';\r\n if (isUserMenuTab) {\r\n const mediaButtons = Array.from(\r\n this.shadowRoot\r\n ?.querySelector('media-menu')\r\n ?.shadowRoot?.querySelectorAll('media-button') ?? [],\r\n );\r\n const lastMediaButton = mediaButtons.filter((element) => {\r\n return element.shadowRoot\r\n ?.querySelector('a')\r\n ?.classList.contains('images');\r\n });\r\n\r\n let nextElement;\r\n if (this.username) {\r\n nextElement = this.shadowRoot?.querySelector('a.upload');\r\n } else {\r\n nextElement = this.shadowRoot\r\n ?.querySelector('login-button')\r\n ?.shadowRoot?.querySelector('span a');\r\n }\r\n\r\n const menuItemElement =\r\n lastMediaButton[0]?.shadowRoot?.querySelector('a.menu-item');\r\n\r\n const focusElement =\r\n this.currentTab.moveTo === 'next' ? nextElement : menuItemElement;\r\n\r\n if (focusElement) {\r\n (focusElement as HTMLElement).focus();\r\n }\r\n } else if (this.currentTab.moveTo === 'next') {\r\n if (this.shadowRoot?.querySelector('.user-menu')) {\r\n (this.shadowRoot?.querySelector('.user-menu') as HTMLElement).focus();\r\n } else {\r\n (\r\n this.shadowRoot\r\n ?.querySelector('login-button')\r\n ?.shadowRoot?.querySelectorAll('span a')[0] as HTMLElement\r\n )?.focus();\r\n }\r\n }\r\n }\r\n }\r\n\r\n get userIcon() {\r\n const userMenuClass = this.openMenu === 'user' ? 'active' : '';\r\n const userMenuToolTip =\r\n this.openMenu === 'user' ? 'Close user menu' : 'Expand user menu';\r\n\r\n return html`\r\n <button\r\n class=\"user-menu ${userMenuClass}\"\r\n title=\"${userMenuToolTip}\"\r\n @click=\"${this.toggleUserMenu}\"\r\n data-event-click-tracking=\"${this.config?.eventCategory}|NavUserMenu\"\r\n >\r\n <img\r\n src=\"${this.mediaBaseHost}${this.userProfileImagePath}\"\r\n alt=\"Profile picture for ${this.screenName}\"\r\n />\r\n <span class=\"screen-name\" dir=\"auto\">${this.screenName}</span>\r\n </button>\r\n `;\r\n }\r\n\r\n get loginIcon() {\r\n return html`\r\n <login-button\r\n .baseHost=${this.baseHost}\r\n .config=${this.config}\r\n .dropdownOpen=${this.signedOutMenuOpen}\r\n .openMenu=${this.openMenu}\r\n @signedOutMenuToggled=${this.signedOutMenuToggled}\r\n ></login-button>\r\n `;\r\n }\r\n\r\n get searchMenuOpen() {\r\n return this.openMenu === 'search';\r\n }\r\n\r\n get useCustomSearch() {\r\n return this.searchSlotMode === 'custom';\r\n }\r\n\r\n get allowSecondaryIcon() {\r\n return this.secondIdentitySlotMode === 'allow';\r\n }\r\n\r\n get searchMenu() {\r\n if (this.hideSearch) return nothing;\r\n\r\n if (this.useCustomSearch) {\r\n return html`\r\n <button\r\n class=\"search-trigger\"\r\n @click=\"${this.toggleSearchMenu}\"\r\n data-event-click-tracking=\"${this.config\r\n ?.eventCategory}|NavSearchOpen\"\r\n >\r\n ${icons.search}\r\n </button>\r\n <div\r\n class=\"custom-search-container ${this.searchMenuOpen ? 'open' : ''}\"\r\n >\r\n <slot name=\"custom-search\"></slot>\r\n </div>\r\n `;\r\n }\r\n\r\n return html`\r\n <button\r\n class=\"search-trigger\"\r\n @click=\"${this.toggleSearchMenu}\"\r\n data-event-click-tracking=\"${this.config?.eventCategory}|NavSearchOpen\"\r\n >\r\n ${icons.search}\r\n </button>\r\n <nav-search\r\n .baseHost=${this.baseHost}\r\n .config=${this.config}\r\n .locationHandler=${locationHandler}\r\n .open=${this.searchMenuOpen}\r\n .openMenu=${this.openMenu}\r\n .searchIn=${this.searchIn}\r\n .searchQuery=${this.searchQuery}\r\n @blur=${this.emitNavSearchBlurEvent}\r\n ></nav-search>\r\n `;\r\n }\r\n\r\n private emitNavSearchBlurEvent(e: FocusEvent) {\r\n const relatedTarget = e.relatedTarget as HTMLElement;\r\n const isUploadButton = relatedTarget?.classList.contains('upload');\r\n\r\n if (isUploadButton) {\r\n (this.shadowRoot?.querySelector('a.upload') as HTMLElement).focus();\r\n }\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('navSearchBlur', {\r\n detail: {\r\n isUploadButton: !!isUploadButton,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n get mobileDonateHeart() {\r\n return html`\r\n <a\r\n class=\"mobile-donate-link\"\r\n .href=${formatUrl(\r\n '/donate/?origin=iawww-mbhrt' as string & Location,\r\n this.baseHost,\r\n )}\r\n >\r\n ${icons.donateUnpadded}\r\n <span class=\"sr-only\">\"Donate to the archive\"</span>\r\n </a>\r\n `;\r\n }\r\n\r\n get uploadButtonTemplate() {\r\n return html` <a\r\n .href=\"${formatUrl('/upload' as string & Location, this.baseHost)}\"\r\n class=\"upload\"\r\n @focus=${this.toggleMediaMenu}\r\n >\r\n ${icons.upload}\r\n <span>Upload</span>\r\n </a>`;\r\n }\r\n\r\n get userStateTemplate() {\r\n return html`<div class=\"user-info\">\r\n ${this.username ? this.userIcon : this.loginIcon}\r\n </div>`;\r\n }\r\n\r\n get secondLogoSlot() {\r\n return this.allowSecondaryIcon\r\n ? html`\r\n <slot name=\"opt-sec-logo\"></slot>\r\n <slot name=\"opt-sec-logo-mobile\"></slot>\r\n `\r\n : nothing;\r\n }\r\n\r\n get secondLogoClass() {\r\n return this.allowSecondaryIcon ? 'second-logo' : '';\r\n }\r\n\r\n render() {\r\n // const mediaMenuTabIndex = this.openMenu === 'media' ? '' : '-1';\r\n return html`\r\n <nav class=${this.hideSearch ? 'hide-search' : ''}>\r\n <button\r\n class=\"hamburger\"\r\n @click=\"${this.toggleMediaMenu}\"\r\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHamburger\"\r\n title=\"Open main menu\"\r\n >\r\n <icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>\r\n </button>\r\n\r\n <div class=${`branding ${this.secondLogoClass}`}>\r\n <a\r\n .href=${formatUrl('/' as string & Location, this.baseHost)}\r\n @click=${this.trackClick}\r\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHome\"\r\n title=\"Go home\"\r\n class=\"link-home\"\r\n >${icons.iaLogo}${logoWordmarkStacked}</a\r\n >\r\n ${this.secondLogoSlot}\r\n </div>\r\n <media-menu\r\n .baseHost=${this.baseHost}\r\n .config=${this.config}\r\n ?mediaMenuAnimate=${this.mediaMenuAnimate}\r\n .selectedMenuOption=${this.selectedMenuOption}\r\n .openMenu=${this.openMenu}\r\n .currentTab=${this.currentTab}\r\n ></media-menu>\r\n <div class=\"right-side-section\">\r\n ${this.mobileDonateHeart} ${this.userStateTemplate}\r\n ${this.uploadButtonTemplate} ${this.searchMenu}\r\n </div>\r\n </nav>\r\n `;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../src/primary-nav.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues } from 'lit';\nimport TrackedElement from './tracked-element';\nimport icons from './assets/img/icons';\nimport './assets/img/hamburger';\nimport './login-button';\nimport './media-menu';\nimport logoWordmarkStacked from './assets/img/wordmark-stacked';\nimport primaryNavCSS from './styles/primary-nav';\nimport formatUrl from './lib/format-url';\nimport { customElement, property } from 'lit/decorators.js';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('primary-nav')\nexport class PrimaryNav extends TrackedElement {\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\n @property({ type: String }) baseHost = '';\n @property({ type: Boolean }) hideSearch = false;\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) openMenu = '';\n @property({ type: String }) screenName = '';\n @property({ type: String })\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\n @property({ type: String }) selectedMenuOption = '';\n @property({ type: Boolean }) signedOutMenuOpen = false;\n @property({ type: Boolean }) userMenuOpen = false;\n @property({ type: Boolean }) mediaMenuAnimate = false;\n @property({ type: String }) username = '';\n @property({ type: String }) userProfileImagePath = '';\n @property({ type: Object }) currentTab:\n | { mediatype: string; moveTo: string }\n | undefined;\n signedOutMenuToggled: unknown;\n\n static get styles() {\n return primaryNavCSS;\n }\n\n toggleMediaMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'media',\n },\n }),\n );\n }\n\n toggleSearchMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'search',\n },\n }),\n );\n }\n\n toggleUserMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'user',\n },\n }),\n );\n }\n\n updated(props: PropertyValues) {\n if (props.has('currentTab')) {\n // early return\n if (!this.currentTab || Object.keys(this.currentTab).length === 0)\n return nothing;\n\n const isUserMenuTab =\n this.currentTab && this.currentTab.mediatype === 'usermenu';\n if (isUserMenuTab) {\n const mediaButtons = Array.from(\n this.shadowRoot\n ?.querySelector('media-menu')\n ?.shadowRoot?.querySelectorAll('media-button') ?? [],\n );\n const lastMediaButton = mediaButtons.filter((element) => {\n return element.shadowRoot\n ?.querySelector('a')\n ?.classList.contains('images');\n });\n\n let nextElement;\n if (this.username) {\n nextElement = this.shadowRoot?.querySelector('a.upload');\n } else {\n nextElement = this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelector('span a');\n }\n\n const menuItemElement =\n lastMediaButton[0]?.shadowRoot?.querySelector('a.menu-item');\n\n const focusElement =\n this.currentTab.moveTo === 'next' ? nextElement : menuItemElement;\n\n if (focusElement) {\n (focusElement as HTMLElement).focus();\n }\n } else if (this.currentTab.moveTo === 'next') {\n if (this.shadowRoot?.querySelector('.user-menu')) {\n (this.shadowRoot?.querySelector('.user-menu') as HTMLElement).focus();\n } else {\n (\n this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelectorAll('span a')[0] as HTMLElement\n )?.focus();\n }\n }\n }\n }\n\n get userIcon() {\n const userMenuClass = this.openMenu === 'user' ? 'active' : '';\n const userMenuToolTip =\n this.openMenu === 'user' ? 'Close user menu' : 'Expand user menu';\n\n return html`\n <button\n class=\"user-menu ${userMenuClass}\"\n title=\"${userMenuToolTip}\"\n @click=\"${this.toggleUserMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavUserMenu\"\n >\n <img\n src=\"${this.mediaBaseHost}${this.userProfileImagePath}\"\n alt=\"Profile picture for ${this.screenName}\"\n />\n <span class=\"screen-name\" dir=\"auto\">${this.screenName}</span>\n </button>\n `;\n }\n\n get loginIcon() {\n return html`\n <login-button\n .baseHost=${this.baseHost}\n .config=${this.config}\n .dropdownOpen=${this.signedOutMenuOpen}\n .openMenu=${this.openMenu}\n @signedOutMenuToggled=${this.signedOutMenuToggled}\n ></login-button>\n `;\n }\n\n get searchMenuOpen() {\n return this.openMenu === 'search';\n }\n\n get allowSecondaryIcon() {\n return this.secondIdentitySlotMode === 'allow';\n }\n\n /**\n * The search slot container, rendered between media-menu and\n * right-side-section so it sits left of the Upload button on desktop.\n */\n get searchSlotContainer() {\n if (this.hideSearch) return nothing;\n return html`\n <div class=\"custom-search-container ${this.searchMenuOpen ? 'open' : ''}\">\n <slot name=\"custom-search\"></slot>\n </div>\n `;\n }\n\n get searchMenu() {\n if (this.hideSearch) return nothing;\n\n return html`\n <button\n class=\"search-trigger\"\n @click=\"${this.toggleSearchMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavSearchOpen\"\n >\n ${icons.search}\n </button>\n `;\n }\n\n get mobileDonateHeart() {\n return html`\n <a\n class=\"mobile-donate-link\"\n .href=${formatUrl(\n '/donate/?origin=iawww-mbhrt' as string & Location,\n this.baseHost,\n )}\n >\n ${icons.donateUnpadded}\n <span class=\"sr-only\">\"Donate to the archive\"</span>\n </a>\n `;\n }\n\n get uploadButtonTemplate() {\n return html` <a\n .href=\"${formatUrl('/upload' as string & Location, this.baseHost)}\"\n class=\"upload\"\n @focus=${this.toggleMediaMenu}\n >\n ${icons.upload}\n <span>Upload</span>\n </a>`;\n }\n\n get userStateTemplate() {\n return html`<div class=\"user-info\">\n ${this.username ? this.userIcon : this.loginIcon}\n </div>`;\n }\n\n get secondLogoSlot() {\n return this.allowSecondaryIcon\n ? html`\n <slot name=\"opt-sec-logo\"></slot>\n <slot name=\"opt-sec-logo-mobile\"></slot>\n `\n : nothing;\n }\n\n get secondLogoClass() {\n return this.allowSecondaryIcon ? 'second-logo' : '';\n }\n\n render() {\n // const mediaMenuTabIndex = this.openMenu === 'media' ? '' : '-1';\n return html`\n <nav class=${this.hideSearch ? 'hide-search' : ''}>\n <button\n class=\"hamburger\"\n @click=\"${this.toggleMediaMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHamburger\"\n title=\"Open main menu\"\n >\n <icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>\n </button>\n\n <div class=${`branding ${this.secondLogoClass}`}>\n <a\n .href=${formatUrl('/' as string & Location, this.baseHost)}\n @click=${this.trackClick}\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHome\"\n title=\"Go home\"\n class=\"link-home\"\n >${icons.iaLogo}${logoWordmarkStacked}</a\n >\n ${this.secondLogoSlot}\n </div>\n <media-menu\n .baseHost=${this.baseHost}\n .config=${this.config}\n ?mediaMenuAnimate=${this.mediaMenuAnimate}\n .selectedMenuOption=${this.selectedMenuOption}\n .openMenu=${this.openMenu}\n .currentTab=${this.currentTab}\n ></media-menu>\n ${this.searchSlotContainer}\n <div class=\"right-side-section\">\n ${this.mobileDonateHeart} ${this.userStateTemplate}\n ${this.uploadButtonTemplate} ${this.searchMenu}\n </div>\n </nav>\n `;\n }\n}\n"]}
|
|
@@ -1,90 +1,90 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export default css `
|
|
3
|
-
.logged-out-menu {
|
|
4
|
-
background: inherit;
|
|
5
|
-
border: none;
|
|
6
|
-
}
|
|
7
|
-
.logged-out-menu:focus-visible {
|
|
8
|
-
outline: none;
|
|
9
|
-
border: none;
|
|
10
|
-
}
|
|
11
|
-
.dropdown-toggle {
|
|
12
|
-
display: block;
|
|
13
|
-
text-transform: uppercase;
|
|
14
|
-
color: var(--grey80);
|
|
15
|
-
cursor: pointer;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.dropdown-toggle svg {
|
|
19
|
-
height: 100%;
|
|
20
|
-
width: 4rem;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.dropdown-toggle .fill-color {
|
|
24
|
-
fill: var(--iconFill);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.dropdown-toggle:active .fill-color,
|
|
28
|
-
.dropdown-toggle:focus .fill-color,
|
|
29
|
-
.dropdown-toggle:hover .fill-color {
|
|
30
|
-
fill: var(--linkHoverColor);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.active {
|
|
34
|
-
border-radius: 1rem 1rem 0 0;
|
|
35
|
-
background: var(--activeButtonBg);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.active .fill-color {
|
|
39
|
-
fill: var(--activeColor);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
span {
|
|
43
|
-
display: none;
|
|
44
|
-
font-size: 1.4rem;
|
|
45
|
-
text-transform: uppercase;
|
|
46
|
-
color: var(--loginTextColor);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
span a {
|
|
50
|
-
color: inherit;
|
|
51
|
-
text-decoration: none;
|
|
52
|
-
outline: 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
a:hover,
|
|
56
|
-
a:active,
|
|
57
|
-
a:focus {
|
|
58
|
-
color: var(--linkHoverColor) !important;
|
|
59
|
-
outline: none !important;
|
|
60
|
-
outline-offset: inherit !important;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
@media (min-width: 890px) {
|
|
64
|
-
.logged-out-toolbar {
|
|
65
|
-
padding: 1rem 0.5rem;
|
|
66
|
-
vertical-align: middle;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.active {
|
|
70
|
-
background: transparent;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.dropdown-toggle {
|
|
74
|
-
display: inline-block;
|
|
75
|
-
vertical-align: middle;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.dropdown-toggle svg {
|
|
79
|
-
height: 3rem;
|
|
80
|
-
width: 3rem;
|
|
81
|
-
display: block;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
span {
|
|
85
|
-
display: inline;
|
|
86
|
-
vertical-align: middle;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
2
|
+
export default css `
|
|
3
|
+
.logged-out-menu {
|
|
4
|
+
background: inherit;
|
|
5
|
+
border: none;
|
|
6
|
+
}
|
|
7
|
+
.logged-out-menu:focus-visible {
|
|
8
|
+
outline: none;
|
|
9
|
+
border: none;
|
|
10
|
+
}
|
|
11
|
+
.dropdown-toggle {
|
|
12
|
+
display: block;
|
|
13
|
+
text-transform: uppercase;
|
|
14
|
+
color: var(--grey80);
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.dropdown-toggle svg {
|
|
19
|
+
height: 100%;
|
|
20
|
+
width: 4rem;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.dropdown-toggle .fill-color {
|
|
24
|
+
fill: var(--iconFill);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.dropdown-toggle:active .fill-color,
|
|
28
|
+
.dropdown-toggle:focus .fill-color,
|
|
29
|
+
.dropdown-toggle:hover .fill-color {
|
|
30
|
+
fill: var(--linkHoverColor);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.active {
|
|
34
|
+
border-radius: 1rem 1rem 0 0;
|
|
35
|
+
background: var(--activeButtonBg);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.active .fill-color {
|
|
39
|
+
fill: var(--activeColor);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
span {
|
|
43
|
+
display: none;
|
|
44
|
+
font-size: 1.4rem;
|
|
45
|
+
text-transform: uppercase;
|
|
46
|
+
color: var(--loginTextColor);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
span a {
|
|
50
|
+
color: inherit;
|
|
51
|
+
text-decoration: none;
|
|
52
|
+
outline: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
a:hover,
|
|
56
|
+
a:active,
|
|
57
|
+
a:focus {
|
|
58
|
+
color: var(--linkHoverColor) !important;
|
|
59
|
+
outline: none !important;
|
|
60
|
+
outline-offset: inherit !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@media (min-width: 890px) {
|
|
64
|
+
.logged-out-toolbar {
|
|
65
|
+
padding: 1rem 0.5rem;
|
|
66
|
+
vertical-align: middle;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.active {
|
|
70
|
+
background: transparent;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.dropdown-toggle {
|
|
74
|
+
display: inline-block;
|
|
75
|
+
vertical-align: middle;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.dropdown-toggle svg {
|
|
79
|
+
height: 3rem;
|
|
80
|
+
width: 3rem;
|
|
81
|
+
display: block;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
span {
|
|
85
|
+
display: inline;
|
|
86
|
+
vertical-align: middle;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
89
|
`;
|
|
90
90
|
//# sourceMappingURL=login-button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-button.js","sourceRoot":"","sources":["../../../src/styles/login-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFjB,CAAC","sourcesContent":["import { css } from 'lit';\
|
|
1
|
+
{"version":3,"file":"login-button.js","sourceRoot":"","sources":["../../../src/styles/login-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n .logged-out-menu {\n background: inherit;\n border: none;\n }\n .logged-out-menu:focus-visible {\n outline: none;\n border: none;\n }\n .dropdown-toggle {\n display: block;\n text-transform: uppercase;\n color: var(--grey80);\n cursor: pointer;\n }\n\n .dropdown-toggle svg {\n height: 100%;\n width: 4rem;\n }\n\n .dropdown-toggle .fill-color {\n fill: var(--iconFill);\n }\n\n .dropdown-toggle:active .fill-color,\n .dropdown-toggle:focus .fill-color,\n .dropdown-toggle:hover .fill-color {\n fill: var(--linkHoverColor);\n }\n\n .active {\n border-radius: 1rem 1rem 0 0;\n background: var(--activeButtonBg);\n }\n\n .active .fill-color {\n fill: var(--activeColor);\n }\n\n span {\n display: none;\n font-size: 1.4rem;\n text-transform: uppercase;\n color: var(--loginTextColor);\n }\n\n span a {\n color: inherit;\n text-decoration: none;\n outline: 0;\n }\n\n a:hover,\n a:active,\n a:focus {\n color: var(--linkHoverColor) !important;\n outline: none !important;\n outline-offset: inherit !important;\n }\n\n @media (min-width: 890px) {\n .logged-out-toolbar {\n padding: 1rem 0.5rem;\n vertical-align: middle;\n }\n\n .active {\n background: transparent;\n }\n\n .dropdown-toggle {\n display: inline-block;\n vertical-align: middle;\n }\n\n .dropdown-toggle svg {\n height: 3rem;\n width: 3rem;\n display: block;\n }\n\n span {\n display: inline;\n vertical-align: middle;\n }\n }\n`;\n"]}
|