@internetarchive/ia-topnav 2.0.1 → 2.1.0-alpha-webdev8170.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/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.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.js +66 -66
- package/dist/src/ia-topnav.js.map +1 -1
- package/dist/src/login-button.js +17 -17
- package/dist/src/login-button.js.map +1 -1
- package/dist/src/models.d.ts +9 -0
- package/dist/src/models.js +9 -1
- package/dist/src/models.js.map +1 -1
- package/dist/src/primary-nav.js +89 -89
- package/dist/src/primary-nav.js.map +1 -1
- package/dist/src/signed-out-dropdown.js.map +1 -1
- package/dist/src/styles/base.js +2 -1
- package/dist/src/styles/base.js.map +1 -1
- package/dist/src/styles/dropdown-menu.js +170 -169
- package/dist/src/styles/dropdown-menu.js.map +1 -1
- package/dist/src/styles/ia-topnav.js +2 -1
- package/dist/src/styles/ia-topnav.js.map +1 -1
- package/dist/src/styles/login-button.js +2 -1
- package/dist/src/styles/login-button.js.map +1 -1
- package/dist/src/styles/media-button.js +2 -1
- package/dist/src/styles/media-button.js.map +1 -1
- package/dist/src/styles/media-menu.js +3 -2
- package/dist/src/styles/media-menu.js.map +1 -1
- package/dist/src/styles/media-slider.js +3 -2
- package/dist/src/styles/media-slider.js.map +1 -1
- package/dist/src/styles/media-subnav.js +2 -1
- package/dist/src/styles/media-subnav.js.map +1 -1
- package/dist/src/styles/primary-nav.js +4 -3
- package/dist/src/styles/primary-nav.js.map +1 -1
- package/dist/src/styles/save-page-form.js +2 -1
- package/dist/src/styles/save-page-form.js.map +1 -1
- package/dist/src/styles/wayback-search.js +2 -1
- package/dist/src/styles/wayback-search.js.map +1 -1
- package/dist/src/styles/wayback-slider.js +2 -1
- package/dist/src/styles/wayback-slider.js.map +1 -1
- package/dist/src/user-menu.js +13 -13
- package/dist/src/user-menu.js.map +1 -1
- package/index.ts +2 -2
- package/package.json +1 -1
- package/src/dropdown-menu.ts +132 -132
- package/src/ia-topnav.ts +332 -332
- package/src/login-button.ts +89 -89
- package/src/models.ts +10 -0
- package/src/primary-nav.ts +300 -300
- package/src/signed-out-dropdown.ts +11 -11
- package/src/styles/base.ts +2 -1
- package/src/styles/dropdown-menu.ts +173 -172
- package/src/styles/ia-topnav.ts +2 -1
- package/src/styles/login-button.ts +2 -1
- package/src/styles/media-button.ts +2 -1
- package/src/styles/media-menu.ts +3 -2
- package/src/styles/media-slider.ts +3 -2
- package/src/styles/media-subnav.ts +2 -1
- package/src/styles/primary-nav.ts +4 -3
- package/src/styles/save-page-form.ts +2 -1
- package/src/styles/wayback-search.ts +2 -1
- package/src/styles/wayback-slider.ts +2 -1
- package/src/user-menu.ts +31 -31
package/src/login-button.ts
CHANGED
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { html } from 'lit';
|
|
2
|
-
import TrackedElement from './tracked-element';
|
|
3
|
-
import icons from './assets/img/icons';
|
|
4
|
-
import loginButtonCSS from './styles/login-button';
|
|
5
|
-
import formatUrl from './lib/format-url';
|
|
6
|
-
import { makeBooleanString } from './lib/make-boolean-string';
|
|
7
|
-
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
8
|
-
import { IATopNavConfig } from './models';
|
|
9
|
-
import { defaultTopNavConfig } from './data/menus';
|
|
10
|
-
|
|
11
|
-
@customElement('login-button')
|
|
12
|
-
export class LoginButton extends TrackedElement {
|
|
13
|
-
@property({ type: String }) baseHost = '';
|
|
14
|
-
@property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;
|
|
15
|
-
@property({ type: String }) openMenu = '';
|
|
16
|
-
|
|
17
|
-
@query('button.logged-out-menu') private toggleButton?: HTMLButtonElement;
|
|
18
|
-
|
|
19
|
-
@state() private dropdownTabIndex = '';
|
|
20
|
-
|
|
21
|
-
static get styles() {
|
|
22
|
-
return loginButtonCSS;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Distance (px) from this element's right edge to the right edge of the dropdown toggle icon. */
|
|
26
|
-
getDropdownToggleOffset(): number {
|
|
27
|
-
if (!this.toggleButton) return 0;
|
|
28
|
-
return (
|
|
29
|
-
this.getBoundingClientRect().right -
|
|
30
|
-
this.toggleButton.getBoundingClientRect().right
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
get signupPath() {
|
|
35
|
-
return formatUrl('/signup', this.baseHost);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get loginPath() {
|
|
39
|
-
return formatUrl('/login', this.baseHost);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
get analyticsEvent() {
|
|
43
|
-
return `${this.config?.eventCategory}|NavLoginIcon`;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
get menuOpened(): boolean {
|
|
47
|
-
return this.openMenu === 'login';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
get avatarClass() {
|
|
51
|
-
return `dropdown-toggle${this.menuOpened ? ' active' : ''}`;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
toggleDropdown(e: Event) {
|
|
55
|
-
e.preventDefault();
|
|
56
|
-
this.trackClick(e);
|
|
57
|
-
this.dropdownTabIndex = this.menuOpened ? '' : '-1';
|
|
58
|
-
this.dispatchEvent(
|
|
59
|
-
new CustomEvent('menuToggled', {
|
|
60
|
-
bubbles: true,
|
|
61
|
-
composed: true,
|
|
62
|
-
detail: {
|
|
63
|
-
menuName: 'login',
|
|
64
|
-
},
|
|
65
|
-
}),
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
render() {
|
|
70
|
-
return html`
|
|
71
|
-
<div class="logged-out-toolbar">
|
|
72
|
-
<button
|
|
73
|
-
class="logged-out-menu ${this.avatarClass}"
|
|
74
|
-
@click=${this.toggleDropdown}
|
|
75
|
-
data-event-click-tracking="${this.analyticsEvent}"
|
|
76
|
-
aria-label="Toggle login menu"
|
|
77
|
-
aria-expanded="${makeBooleanString(this.menuOpened)}"
|
|
78
|
-
>
|
|
79
|
-
${icons.user}
|
|
80
|
-
</button>
|
|
81
|
-
<span>
|
|
82
|
-
<a href="${this.signupPath}">Sign up</a>
|
|
83
|
-
|
|
|
84
|
-
<a href="${this.loginPath}">Log in</a>
|
|
85
|
-
</span>
|
|
86
|
-
</div>
|
|
87
|
-
`;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import TrackedElement from './tracked-element';
|
|
3
|
+
import icons from './assets/img/icons';
|
|
4
|
+
import loginButtonCSS from './styles/login-button';
|
|
5
|
+
import formatUrl from './lib/format-url';
|
|
6
|
+
import { makeBooleanString } from './lib/make-boolean-string';
|
|
7
|
+
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
8
|
+
import { IATopNavConfig } from './models';
|
|
9
|
+
import { defaultTopNavConfig } from './data/menus';
|
|
10
|
+
|
|
11
|
+
@customElement('login-button')
|
|
12
|
+
export class LoginButton extends TrackedElement {
|
|
13
|
+
@property({ type: String }) baseHost = '';
|
|
14
|
+
@property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;
|
|
15
|
+
@property({ type: String }) openMenu = '';
|
|
16
|
+
|
|
17
|
+
@query('button.logged-out-menu') private toggleButton?: HTMLButtonElement;
|
|
18
|
+
|
|
19
|
+
@state() private dropdownTabIndex = '';
|
|
20
|
+
|
|
21
|
+
static get styles() {
|
|
22
|
+
return loginButtonCSS;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Distance (px) from this element's right edge to the right edge of the dropdown toggle icon. */
|
|
26
|
+
getDropdownToggleOffset(): number {
|
|
27
|
+
if (!this.toggleButton) return 0;
|
|
28
|
+
return (
|
|
29
|
+
this.getBoundingClientRect().right -
|
|
30
|
+
this.toggleButton.getBoundingClientRect().right
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get signupPath() {
|
|
35
|
+
return formatUrl('/signup', this.baseHost);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get loginPath() {
|
|
39
|
+
return formatUrl('/login', this.baseHost);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
get analyticsEvent() {
|
|
43
|
+
return `${this.config?.eventCategory}|NavLoginIcon`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get menuOpened(): boolean {
|
|
47
|
+
return this.openMenu === 'login';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get avatarClass() {
|
|
51
|
+
return `dropdown-toggle${this.menuOpened ? ' active' : ''}`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
toggleDropdown(e: Event) {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
this.trackClick(e);
|
|
57
|
+
this.dropdownTabIndex = this.menuOpened ? '' : '-1';
|
|
58
|
+
this.dispatchEvent(
|
|
59
|
+
new CustomEvent('menuToggled', {
|
|
60
|
+
bubbles: true,
|
|
61
|
+
composed: true,
|
|
62
|
+
detail: {
|
|
63
|
+
menuName: 'login',
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
render() {
|
|
70
|
+
return html`
|
|
71
|
+
<div class="logged-out-toolbar">
|
|
72
|
+
<button
|
|
73
|
+
class="logged-out-menu ${this.avatarClass}"
|
|
74
|
+
@click=${this.toggleDropdown}
|
|
75
|
+
data-event-click-tracking="${this.analyticsEvent}"
|
|
76
|
+
aria-label="Toggle login menu"
|
|
77
|
+
aria-expanded="${makeBooleanString(this.menuOpened)}"
|
|
78
|
+
>
|
|
79
|
+
${icons.user}
|
|
80
|
+
</button>
|
|
81
|
+
<span>
|
|
82
|
+
<a href="${this.signupPath}">Sign up</a>
|
|
83
|
+
|
|
|
84
|
+
<a href="${this.loginPath}">Log in</a>
|
|
85
|
+
</span>
|
|
86
|
+
</div>
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
}
|
package/src/models.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pixel width at which ia-topnav switches from mobile to desktop layout.
|
|
3
|
+
* Desktop styles apply at `min-width: TOPNAV_MOBILE_BREAKPOINT px`.
|
|
4
|
+
* Mobile styles apply at `max-width: (TOPNAV_MOBILE_BREAKPOINT - 1) px`.
|
|
5
|
+
*
|
|
6
|
+
* Exported so that host applications can derive their own media queries from
|
|
7
|
+
* this value rather than hard-coding it independently.
|
|
8
|
+
*/
|
|
9
|
+
export const TOPNAV_MOBILE_BREAKPOINT = 890;
|
|
10
|
+
|
|
1
11
|
export interface IATopNavConfig {
|
|
2
12
|
/**
|
|
3
13
|
* Google Analytics event category
|