@internetarchive/elements 1.1.3-webdev-9241.0 → 1.1.3
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 +2 -2
- package/dist/src/elements/ia-radio-player/ia-radio-player.d.ts +2 -0
- package/dist/src/elements/ia-radio-player/ia-radio-player.d.ts.map +1 -1
- package/dist/src/elements/ia-radio-player/ia-radio-player.js +6 -1
- package/dist/src/elements/ia-radio-player/ia-radio-player.js.map +1 -1
- package/dist/src/elements/ia-status-indicator/ia-status-indicator.d.ts +16 -1
- package/dist/src/elements/ia-status-indicator/ia-status-indicator.d.ts.map +1 -1
- package/dist/src/elements/ia-status-indicator/ia-status-indicator.js +136 -8
- package/dist/src/elements/ia-status-indicator/ia-status-indicator.js.map +1 -1
- package/package.json +3 -5
- package/dist/src/elements/ia-topnav/assets/img/icon-audio.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-audio.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-audio.js +0 -28
- package/dist/src/elements/ia-topnav/assets/img/icon-audio.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-close.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-close.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-close.js +0 -20
- package/dist/src/elements/ia-topnav/assets/img/icon-close.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-donate-unpadded.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-donate-unpadded.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-donate-unpadded.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-donate-unpadded.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-donate.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-donate.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-donate.js +0 -18
- package/dist/src/elements/ia-topnav/assets/img/icon-donate.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-ellipses.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-ellipses.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-ellipses.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-ellipses.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-ia-logo.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-ia-logo.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-ia-logo.js +0 -30
- package/dist/src/elements/ia-topnav/assets/img/icon-ia-logo.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-images.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-images.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-images.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-images.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-search.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-search.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-search.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-search.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-software.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-software.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-software.js +0 -18
- package/dist/src/elements/ia-topnav/assets/img/icon-software.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-texts.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-texts.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-texts.js +0 -18
- package/dist/src/elements/ia-topnav/assets/img/icon-texts.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-upload-unpadded.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-upload-unpadded.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-upload-unpadded.js +0 -18
- package/dist/src/elements/ia-topnav/assets/img/icon-upload-unpadded.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-upload.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-upload.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-upload.js +0 -21
- package/dist/src/elements/ia-topnav/assets/img/icon-upload.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-user.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-user.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-user.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-user.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-video.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-video.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-video.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-video.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-web.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/icon-web.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon-web.js +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icon-web.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon.d.ts +0 -6
- package/dist/src/elements/ia-topnav/assets/img/icon.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icon.js +0 -17
- package/dist/src/elements/ia-topnav/assets/img/icon.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icons.d.ts +0 -19
- package/dist/src/elements/ia-topnav/assets/img/icons.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/icons.js +0 -33
- package/dist/src/elements/ia-topnav/assets/img/icons.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/wayback-logo.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/wayback-logo.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/wayback-logo.js +0 -21
- package/dist/src/elements/ia-topnav/assets/img/wayback-logo.js.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/wordmark-stacked.d.ts +0 -3
- package/dist/src/elements/ia-topnav/assets/img/wordmark-stacked.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/assets/img/wordmark-stacked.js +0 -13
- package/dist/src/elements/ia-topnav/assets/img/wordmark-stacked.js.map +0 -1
- package/dist/src/elements/ia-topnav/data/menus.d.ts +0 -17
- package/dist/src/elements/ia-topnav/data/menus.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/data/menus.js +0 -680
- package/dist/src/elements/ia-topnav/data/menus.js.map +0 -1
- package/dist/src/elements/ia-topnav/dropdown-menu.d.ts +0 -21
- package/dist/src/elements/ia-topnav/dropdown-menu.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/dropdown-menu.js +0 -315
- package/dist/src/elements/ia-topnav/dropdown-menu.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-desktop-subnav.d.ts +0 -11
- package/dist/src/elements/ia-topnav/ia-topnav-desktop-subnav.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-desktop-subnav.js +0 -89
- package/dist/src/elements/ia-topnav/ia-topnav-desktop-subnav.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-icon-hamburger.d.ts +0 -6
- package/dist/src/elements/ia-topnav/ia-topnav-icon-hamburger.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-icon-hamburger.js +0 -47
- package/dist/src/elements/ia-topnav/ia-topnav-icon-hamburger.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-login-button.d.ts +0 -20
- package/dist/src/elements/ia-topnav/ia-topnav-login-button.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-login-button.js +0 -183
- package/dist/src/elements/ia-topnav/ia-topnav-login-button.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-button.d.ts +0 -31
- package/dist/src/elements/ia-topnav/ia-topnav-media-button.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-button.js +0 -287
- package/dist/src/elements/ia-topnav/ia-topnav-media-button.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-menu.d.ts +0 -21
- package/dist/src/elements/ia-topnav/ia-topnav-media-menu.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-menu.js +0 -222
- package/dist/src/elements/ia-topnav/ia-topnav-media-menu.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-slider.d.ts +0 -16
- package/dist/src/elements/ia-topnav/ia-topnav-media-slider.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-slider.js +0 -221
- package/dist/src/elements/ia-topnav/ia-topnav-media-slider.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-subnav.d.ts +0 -20
- package/dist/src/elements/ia-topnav/ia-topnav-media-subnav.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-media-subnav.js +0 -285
- package/dist/src/elements/ia-topnav/ia-topnav-media-subnav.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-more-slider.d.ts +0 -12
- package/dist/src/elements/ia-topnav/ia-topnav-more-slider.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-more-slider.js +0 -65
- package/dist/src/elements/ia-topnav/ia-topnav-more-slider.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-primary-nav.d.ts +0 -53
- package/dist/src/elements/ia-topnav/ia-topnav-primary-nav.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-primary-nav.js +0 -653
- package/dist/src/elements/ia-topnav/ia-topnav-primary-nav.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-save-page-form.d.ts +0 -12
- package/dist/src/elements/ia-topnav/ia-topnav-save-page-form.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-save-page-form.js +0 -128
- package/dist/src/elements/ia-topnav/ia-topnav-save-page-form.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-signed-out-dropdown.d.ts +0 -4
- package/dist/src/elements/ia-topnav/ia-topnav-signed-out-dropdown.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-signed-out-dropdown.js +0 -10
- package/dist/src/elements/ia-topnav/ia-topnav-signed-out-dropdown.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-user-menu.d.ts +0 -7
- package/dist/src/elements/ia-topnav/ia-topnav-user-menu.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-user-menu.js +0 -39
- package/dist/src/elements/ia-topnav/ia-topnav-user-menu.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-search.d.ts +0 -10
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-search.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-search.js +0 -64
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-search.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-slider.d.ts +0 -20
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-slider.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-slider.js +0 -131
- package/dist/src/elements/ia-topnav/ia-topnav-wayback-slider.js.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav.d.ts +0 -85
- package/dist/src/elements/ia-topnav/ia-topnav.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/ia-topnav.js +0 -434
- package/dist/src/elements/ia-topnav/ia-topnav.js.map +0 -1
- package/dist/src/elements/ia-topnav/lib/helpers.d.ts +0 -13
- package/dist/src/elements/ia-topnav/lib/helpers.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/lib/helpers.js +0 -24
- package/dist/src/elements/ia-topnav/lib/helpers.js.map +0 -1
- package/dist/src/elements/ia-topnav/lib/keyboard-navigation.d.ts +0 -46
- package/dist/src/elements/ia-topnav/lib/keyboard-navigation.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/lib/keyboard-navigation.js +0 -136
- package/dist/src/elements/ia-topnav/lib/keyboard-navigation.js.map +0 -1
- package/dist/src/elements/ia-topnav/models.d.ts +0 -59
- package/dist/src/elements/ia-topnav/models.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/models.js +0 -10
- package/dist/src/elements/ia-topnav/models.js.map +0 -1
- package/dist/src/elements/ia-topnav/subnav-list-styles.d.ts +0 -2
- package/dist/src/elements/ia-topnav/subnav-list-styles.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/subnav-list-styles.js +0 -49
- package/dist/src/elements/ia-topnav/subnav-list-styles.js.map +0 -1
- package/dist/src/elements/ia-topnav/tracked-element.d.ts +0 -6
- package/dist/src/elements/ia-topnav/tracked-element.d.ts.map +0 -1
- package/dist/src/elements/ia-topnav/tracked-element.js +0 -29
- package/dist/src/elements/ia-topnav/tracked-element.js.map +0 -1
- package/dist/src/elements/ia-wayback-search-form/ia-wayback-search-form.d.ts +0 -24
- package/dist/src/elements/ia-wayback-search-form/ia-wayback-search-form.d.ts.map +0 -1
- package/dist/src/elements/ia-wayback-search-form/ia-wayback-search-form.js +0 -240
- package/dist/src/elements/ia-wayback-search-form/ia-wayback-search-form.js.map +0 -1
- package/dist/src/elements/index.d.ts +0 -41
- package/dist/src/elements/index.d.ts.map +0 -1
- package/dist/src/elements/index.js +0 -41
- package/dist/src/elements/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-navigation.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-topnav/lib/keyboard-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACrC,iBAAiB,EAAE,WAAW,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;gBACS,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAY9D;;;OAGG;IACH,oBAAoB,IAAI,WAAW,EAAE;IA8CrC;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,aAAa;IA6BlC;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM;IAS1B;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,aAAa;IAWjC;;OAEG;IACH,aAAa;IAQb;;OAEG;IACH,SAAS;IAMT;;;OAGG;IACH,yBAAyB,CAAC,UAAU,GAAE,OAAe;CAYtD"}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
export default class KeyboardNavigation {
|
|
2
|
-
/**
|
|
3
|
-
* Constructor for the KeyboardNavigation class.
|
|
4
|
-
* @param {HTMLElement} elementsContainer - The container element that holds the focusable elements.
|
|
5
|
-
* @param {string} menuOption - The type of menu option ('web' or 'usermenu').
|
|
6
|
-
*/
|
|
7
|
-
constructor(elementsContainer, menuOption) {
|
|
8
|
-
this.elementsContainer = elementsContainer;
|
|
9
|
-
this.menuOption = menuOption;
|
|
10
|
-
this.focusableElements = this.getFocusableElements();
|
|
11
|
-
this.focusedIndex = 0; // always start from first element
|
|
12
|
-
if (menuOption !== 'search') {
|
|
13
|
-
this.focusableElements[this.focusedIndex]?.focus();
|
|
14
|
-
}
|
|
15
|
-
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Gets an array of focusable elements within the container.
|
|
19
|
-
* @returns {HTMLElement[]} An array of focusable elements.
|
|
20
|
-
*/
|
|
21
|
-
getFocusableElements() {
|
|
22
|
-
const focusableTagSelectors = 'a[href], button, input, [tabindex]';
|
|
23
|
-
const isFocusable = (el) => !el.hasAttribute('disabled') &&
|
|
24
|
-
el.getAttribute('aria-hidden') !== 'true' &&
|
|
25
|
-
el.getAttribute('tabindex') !== '-1';
|
|
26
|
-
let elements;
|
|
27
|
-
if (this.menuOption === 'web') {
|
|
28
|
-
// wayback focusable elements
|
|
29
|
-
const waybackSlider = this.elementsContainer.querySelector('ia-topnav-wayback-slider')?.shadowRoot;
|
|
30
|
-
const waybackSearch = waybackSlider?.querySelector('ia-topnav-wayback-search');
|
|
31
|
-
const waybackSearchElements = Array.from(waybackSearch?.shadowRoot?.querySelectorAll(focusableTagSelectors) ??
|
|
32
|
-
[]);
|
|
33
|
-
const normalElements = Array.from(waybackSlider?.querySelectorAll(focusableTagSelectors) ?? []);
|
|
34
|
-
// wayback save-form focusable elements
|
|
35
|
-
const savePageForm = waybackSlider?.querySelector('ia-topnav-save-page-form');
|
|
36
|
-
const savePageFormElements = Array.from(savePageForm?.shadowRoot?.querySelectorAll(focusableTagSelectors) ?? []);
|
|
37
|
-
elements = [
|
|
38
|
-
...waybackSearchElements,
|
|
39
|
-
...normalElements,
|
|
40
|
-
...savePageFormElements,
|
|
41
|
-
];
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
elements = this.elementsContainer.querySelectorAll(focusableTagSelectors);
|
|
45
|
-
}
|
|
46
|
-
return Array.from(elements ?? []).filter(isFocusable);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Handles keyboard events and focuses the appropriate element.
|
|
50
|
-
* @param {KeyboardEvent} event - The keyboard event object.
|
|
51
|
-
*/
|
|
52
|
-
handleKeyDown(event) {
|
|
53
|
-
const target = event.composedPath()[0];
|
|
54
|
-
// Ignore events from editable fields
|
|
55
|
-
if (target instanceof HTMLInputElement ||
|
|
56
|
-
target instanceof HTMLTextAreaElement ||
|
|
57
|
-
target.isContentEditable) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const { key } = event;
|
|
61
|
-
const isArrowKey = [
|
|
62
|
-
'ArrowDown',
|
|
63
|
-
'ArrowRight',
|
|
64
|
-
'ArrowUp',
|
|
65
|
-
'ArrowLeft',
|
|
66
|
-
].includes(key);
|
|
67
|
-
const isTabKey = key === 'Tab';
|
|
68
|
-
if (isArrowKey) {
|
|
69
|
-
this.handleArrowKey(key);
|
|
70
|
-
event.preventDefault();
|
|
71
|
-
}
|
|
72
|
-
else if (isTabKey) {
|
|
73
|
-
this.handleTabKey(event);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Handles arrow key events and focuses the next or previous element for topnav sub-nav and usermenu
|
|
78
|
-
* @param {string} key - The key that was pressed ('ArrowDown', 'ArrowRight', 'ArrowUp', or 'ArrowLeft').
|
|
79
|
-
*/
|
|
80
|
-
handleArrowKey(key) {
|
|
81
|
-
const isDownOrRight = ['ArrowDown', 'ArrowRight'].includes(key);
|
|
82
|
-
if (isDownOrRight) {
|
|
83
|
-
this.focusNext();
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.focusPrevious();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Handles the Tab key event and focuses the next or previous menu item.
|
|
91
|
-
* @param {KeyboardEvent} event - The keyboard event object.
|
|
92
|
-
*/
|
|
93
|
-
handleTabKey(event) {
|
|
94
|
-
const isShiftPressed = event.shiftKey;
|
|
95
|
-
this.emitFocusToOtherMenuItems(isShiftPressed);
|
|
96
|
-
this.focusableElements[this.focusedIndex]?.blur();
|
|
97
|
-
if (!['search'].includes(this.menuOption)) {
|
|
98
|
-
event.preventDefault();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Focuses the previous focusable element in the container.
|
|
103
|
-
*/
|
|
104
|
-
focusPrevious() {
|
|
105
|
-
if (this.focusableElements.length === 0)
|
|
106
|
-
return;
|
|
107
|
-
this.focusedIndex =
|
|
108
|
-
(this.focusedIndex - 1 + this.focusableElements.length) %
|
|
109
|
-
this.focusableElements.length;
|
|
110
|
-
this.focusableElements[this.focusedIndex]?.focus();
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Focuses the next focusable element in the container.
|
|
114
|
-
*/
|
|
115
|
-
focusNext() {
|
|
116
|
-
if (this.focusableElements.length === 0)
|
|
117
|
-
return;
|
|
118
|
-
this.focusedIndex = (this.focusedIndex + 1) % this.focusableElements.length;
|
|
119
|
-
this.focusableElements[this.focusedIndex]?.focus();
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Focuses the other parent menu items based on the provided flag.
|
|
123
|
-
* @param {boolean} isPrevious - A flag indicating whether to focus the previous menu item.
|
|
124
|
-
*/
|
|
125
|
-
emitFocusToOtherMenuItems(isPrevious = false) {
|
|
126
|
-
this.elementsContainer.dispatchEvent(new CustomEvent('focusToOtherMenuItem', {
|
|
127
|
-
bubbles: true,
|
|
128
|
-
composed: true,
|
|
129
|
-
detail: {
|
|
130
|
-
mediatype: this.menuOption,
|
|
131
|
-
moveTo: isPrevious ? 'prev' : 'next',
|
|
132
|
-
},
|
|
133
|
-
}));
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=keyboard-navigation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-navigation.js","sourceRoot":"","sources":["../../../../../src/elements/ia-topnav/lib/keyboard-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["export default class KeyboardNavigation {\n elementsContainer: HTMLElement;\n menuOption: string;\n focusableElements: HTMLElement[];\n focusedIndex: number;\n\n /**\n * Constructor for the KeyboardNavigation class.\n * @param {HTMLElement} elementsContainer - The container element that holds the focusable elements.\n * @param {string} menuOption - The type of menu option ('web' or 'usermenu').\n */\n constructor(elementsContainer: HTMLElement, menuOption: string) {\n this.elementsContainer = elementsContainer;\n this.menuOption = menuOption;\n this.focusableElements = this.getFocusableElements();\n this.focusedIndex = 0; // always start from first element\n\n if (menuOption !== 'search') {\n this.focusableElements[this.focusedIndex]?.focus();\n }\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n /**\n * Gets an array of focusable elements within the container.\n * @returns {HTMLElement[]} An array of focusable elements.\n */\n getFocusableElements(): HTMLElement[] {\n const focusableTagSelectors = 'a[href], button, input, [tabindex]';\n\n const isFocusable = (el: Element) =>\n !el.hasAttribute('disabled') &&\n el.getAttribute('aria-hidden') !== 'true' &&\n el.getAttribute('tabindex') !== '-1';\n\n let elements;\n if (this.menuOption === 'web') {\n // wayback focusable elements\n const waybackSlider = this.elementsContainer.querySelector(\n 'ia-topnav-wayback-slider',\n )?.shadowRoot;\n const waybackSearch = waybackSlider?.querySelector(\n 'ia-topnav-wayback-search',\n );\n const waybackSearchElements = Array.from(\n waybackSearch?.shadowRoot?.querySelectorAll(focusableTagSelectors) ??\n [],\n );\n\n const normalElements = Array.from(\n waybackSlider?.querySelectorAll(focusableTagSelectors) ?? [],\n );\n\n // wayback save-form focusable elements\n const savePageForm = waybackSlider?.querySelector(\n 'ia-topnav-save-page-form',\n );\n const savePageFormElements = Array.from(\n savePageForm?.shadowRoot?.querySelectorAll(focusableTagSelectors) ?? [],\n );\n\n elements = [\n ...waybackSearchElements,\n ...normalElements,\n ...savePageFormElements,\n ];\n } else {\n elements = this.elementsContainer.querySelectorAll(focusableTagSelectors);\n }\n\n return Array.from(elements ?? []).filter(isFocusable) as HTMLElement[];\n }\n\n /**\n * Handles keyboard events and focuses the appropriate element.\n * @param {KeyboardEvent} event - The keyboard event object.\n */\n handleKeyDown(event: KeyboardEvent) {\n const target = event.composedPath()[0] as HTMLElement;\n\n // Ignore events from editable fields\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target.isContentEditable\n ) {\n return;\n }\n\n const { key } = event;\n const isArrowKey = [\n 'ArrowDown',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowLeft',\n ].includes(key);\n const isTabKey = key === 'Tab';\n\n if (isArrowKey) {\n this.handleArrowKey(key);\n event.preventDefault();\n } else if (isTabKey) {\n this.handleTabKey(event);\n }\n }\n\n /**\n * Handles arrow key events and focuses the next or previous element for topnav sub-nav and usermenu\n * @param {string} key - The key that was pressed ('ArrowDown', 'ArrowRight', 'ArrowUp', or 'ArrowLeft').\n */\n handleArrowKey(key: string) {\n const isDownOrRight = ['ArrowDown', 'ArrowRight'].includes(key);\n if (isDownOrRight) {\n this.focusNext();\n } else {\n this.focusPrevious();\n }\n }\n\n /**\n * Handles the Tab key event and focuses the next or previous menu item.\n * @param {KeyboardEvent} event - The keyboard event object.\n */\n handleTabKey(event: KeyboardEvent) {\n const isShiftPressed = event.shiftKey;\n\n this.emitFocusToOtherMenuItems(isShiftPressed);\n\n this.focusableElements[this.focusedIndex]?.blur();\n if (!['search'].includes(this.menuOption)) {\n event.preventDefault();\n }\n }\n\n /**\n * Focuses the previous focusable element in the container.\n */\n focusPrevious() {\n if (this.focusableElements.length === 0) return;\n this.focusedIndex =\n (this.focusedIndex - 1 + this.focusableElements.length) %\n this.focusableElements.length;\n this.focusableElements[this.focusedIndex]?.focus();\n }\n\n /**\n * Focuses the next focusable element in the container.\n */\n focusNext() {\n if (this.focusableElements.length === 0) return;\n this.focusedIndex = (this.focusedIndex + 1) % this.focusableElements.length;\n this.focusableElements[this.focusedIndex]?.focus();\n }\n\n /**\n * Focuses the other parent menu items based on the provided flag.\n * @param {boolean} isPrevious - A flag indicating whether to focus the previous menu item.\n */\n emitFocusToOtherMenuItems(isPrevious: boolean = false) {\n this.elementsContainer.dispatchEvent(\n new CustomEvent('focusToOtherMenuItem', {\n bubbles: true,\n composed: true,\n detail: {\n mediatype: this.menuOption,\n moveTo: isPrevious ? 'prev' : 'next',\n },\n }),\n );\n }\n}\n"]}
|
|
@@ -1,59 +0,0 @@
|
|
|
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 declare const TOPNAV_MOBILE_BREAKPOINT = 890;
|
|
10
|
-
export interface IATopNavConfig {
|
|
11
|
-
/**
|
|
12
|
-
* Google Analytics event category
|
|
13
|
-
*/
|
|
14
|
-
eventCategory?: string;
|
|
15
|
-
/**
|
|
16
|
-
* Copy to display for number of pages archived at the top of the Wayback search form
|
|
17
|
-
*
|
|
18
|
-
* ie. "425 billion"
|
|
19
|
-
*/
|
|
20
|
-
waybackPagesArchived?: string;
|
|
21
|
-
/**
|
|
22
|
-
* Map from dropdown item ids to any callout text that should be applied beside them
|
|
23
|
-
*/
|
|
24
|
-
callouts?: Record<string, string>;
|
|
25
|
-
}
|
|
26
|
-
export interface IATopNavLink {
|
|
27
|
-
title: string;
|
|
28
|
-
url?: string;
|
|
29
|
-
class?: string;
|
|
30
|
-
icon?: string;
|
|
31
|
-
analyticsEvent?: string;
|
|
32
|
-
external?: boolean;
|
|
33
|
-
}
|
|
34
|
-
export interface IATopNavMediaMenu {
|
|
35
|
-
heading: string;
|
|
36
|
-
iconLinks: IATopNavLink[];
|
|
37
|
-
featuredLinks: IATopNavLink[];
|
|
38
|
-
links: IATopNavLink[];
|
|
39
|
-
mobileAppsLinks: IATopNavLink[];
|
|
40
|
-
browserExtensionsLinks: IATopNavLink[];
|
|
41
|
-
archiveItLinks: IATopNavLink[];
|
|
42
|
-
}
|
|
43
|
-
export interface IATopNavMenuConfig {
|
|
44
|
-
audio: IATopNavMediaMenu;
|
|
45
|
-
images: IATopNavMediaMenu;
|
|
46
|
-
more: IATopNavMediaMenu;
|
|
47
|
-
signedOut: IATopNavLink[];
|
|
48
|
-
software: IATopNavMediaMenu;
|
|
49
|
-
texts: IATopNavMediaMenu;
|
|
50
|
-
user: IATopNavLink[];
|
|
51
|
-
userAdmin: IATopNavLink[];
|
|
52
|
-
userAdminFlags: IATopNavLink[];
|
|
53
|
-
userAdminBiblio: IATopNavLink[];
|
|
54
|
-
userAdminUploader: IATopNavLink[];
|
|
55
|
-
video: IATopNavMediaMenu;
|
|
56
|
-
web: IATopNavMediaMenu;
|
|
57
|
-
}
|
|
58
|
-
export type IATopNavSecondIdentitySlotMode = 'allow' | '';
|
|
59
|
-
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,sBAAsB,EAAE,YAAY,EAAE,CAAC;IACvC,cAAc,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,MAAM,8BAA8B,GAAG,OAAO,GAAG,EAAE,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
-
//# sourceMappingURL=models.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC","sourcesContent":["/**\n * The pixel width at which ia-topnav switches from mobile to desktop layout.\n * Desktop styles apply at `min-width: TOPNAV_MOBILE_BREAKPOINT px`.\n * Mobile styles apply at `max-width: (TOPNAV_MOBILE_BREAKPOINT - 1) px`.\n *\n * Exported so that host applications can derive their own media queries from\n * this value rather than hard-coding it independently.\n */\nexport const TOPNAV_MOBILE_BREAKPOINT = 890;\n\nexport 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 * 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 userAdminBiblio: IATopNavLink[];\n userAdminUploader: IATopNavLink[];\n video: IATopNavMediaMenu;\n web: IATopNavMediaMenu;\n}\n\nexport type IATopNavSecondIdentitySlotMode = 'allow' | '';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subnav-list-styles.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/subnav-list-styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,yBA6CzB,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { css } from 'lit';
|
|
2
|
-
import { TOPNAV_MOBILE_BREAKPOINT } from './models.js';
|
|
3
|
-
export const subnavListCSS = css `
|
|
4
|
-
h4 {
|
|
5
|
-
font-size: 1.6rem;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
a {
|
|
9
|
-
text-decoration: none;
|
|
10
|
-
color: var(--activeColor);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
ul {
|
|
14
|
-
padding: 0;
|
|
15
|
-
margin: 0;
|
|
16
|
-
list-style: none;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
li + li {
|
|
20
|
-
padding-top: 1.5rem;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@media (min-width: ${TOPNAV_MOBILE_BREAKPOINT}px) {
|
|
24
|
-
h4 {
|
|
25
|
-
margin: 0 0 1rem 0;
|
|
26
|
-
font-weight: 100;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
ul {
|
|
30
|
-
font-size: 1.3rem;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
li {
|
|
34
|
-
padding-bottom: 0.5rem;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
li + li {
|
|
38
|
-
padding-top: 0;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
li a {
|
|
42
|
-
display: block;
|
|
43
|
-
overflow: hidden;
|
|
44
|
-
white-space: nowrap;
|
|
45
|
-
text-overflow: ellipsis;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
`;
|
|
49
|
-
//# sourceMappingURL=subnav-list-styles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subnav-list-styles.js","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/subnav-list-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;uBAoBT,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;CAyB9C,CAAC","sourcesContent":["import { css } from 'lit';\nimport { TOPNAV_MOBILE_BREAKPOINT } from './models';\n\nexport const subnavListCSS = css`\n h4 {\n font-size: 1.6rem;\n }\n\n a {\n text-decoration: none;\n color: var(--activeColor);\n }\n\n ul {\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n li + li {\n padding-top: 1.5rem;\n }\n\n @media (min-width: ${TOPNAV_MOBILE_BREAKPOINT}px) {\n h4 {\n margin: 0 0 1rem 0;\n font-weight: 100;\n }\n\n ul {\n font-size: 1.3rem;\n }\n\n li {\n padding-bottom: 0.5rem;\n }\n\n li + li {\n padding-top: 0;\n }\n\n li a {\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n`;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/tracked-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;IACpD,UAAU,CAAC,CAAC,EAAE,KAAK;IAcnB,WAAW,CAAC,CAAC,EAAE,KAAK;CAcrB"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
export default class TrackedElement extends LitElement {
|
|
3
|
-
trackClick(e) {
|
|
4
|
-
const event = e.currentTarget?.dataset?.eventClickTracking;
|
|
5
|
-
if (event === undefined)
|
|
6
|
-
return;
|
|
7
|
-
this.dispatchEvent(new CustomEvent('trackClick', {
|
|
8
|
-
bubbles: true,
|
|
9
|
-
composed: true,
|
|
10
|
-
detail: {
|
|
11
|
-
event,
|
|
12
|
-
},
|
|
13
|
-
}));
|
|
14
|
-
}
|
|
15
|
-
trackSubmit(e) {
|
|
16
|
-
const event = e.currentTarget?.dataset
|
|
17
|
-
?.eventSubmitTracking;
|
|
18
|
-
if (event === undefined)
|
|
19
|
-
return;
|
|
20
|
-
this.dispatchEvent(new CustomEvent('trackSubmit', {
|
|
21
|
-
bubbles: true,
|
|
22
|
-
composed: true,
|
|
23
|
-
detail: {
|
|
24
|
-
event,
|
|
25
|
-
},
|
|
26
|
-
}));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=tracked-element.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-element.js","sourceRoot":"","sources":["../../../../src/elements/ia-topnav/tracked-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;IACpD,UAAU,CAAC,CAAQ;QACjB,MAAM,KAAK,GAAI,CAAC,CAAC,aAA6B,EAAE,OAAO,EAAE,kBAAkB,CAAC;QAC5E,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,YAAY,EAAE;YAC5B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,KAAK;aACN;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,CAAQ;QAClB,MAAM,KAAK,GAAI,CAAC,CAAC,aAA6B,EAAE,OAAO;YACrD,EAAE,mBAAmB,CAAC;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,aAAa,EAAE;YAC7B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,KAAK;aACN;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { LitElement } from 'lit';\n\nexport default class TrackedElement extends LitElement {\n trackClick(e: Event) {\n const event = (e.currentTarget as HTMLElement)?.dataset?.eventClickTracking;\n if (event === undefined) return;\n this.dispatchEvent(\n new CustomEvent('trackClick', {\n bubbles: true,\n composed: true,\n detail: {\n event,\n },\n }),\n );\n }\n\n trackSubmit(e: Event) {\n const event = (e.currentTarget as HTMLElement)?.dataset\n ?.eventSubmitTracking;\n if (event === undefined) return;\n this.dispatchEvent(\n new CustomEvent('trackSubmit', {\n bubbles: true,\n composed: true,\n detail: {\n event,\n },\n }),\n );\n }\n}\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { CSSResultGroup, LitElement } from 'lit';
|
|
2
|
-
/**
|
|
3
|
-
* A Wayback Machine search form: a line about how many pages the Wayback
|
|
4
|
-
* Machine holds, its logo, and a URL or keyword field.
|
|
5
|
-
*
|
|
6
|
-
* Submitting calls `queryHandler.performQuery` with what was typed, which by
|
|
7
|
-
* default goes to the Wayback Machine's results for it, and fires
|
|
8
|
-
* `waybackSearchSubmitted`.
|
|
9
|
-
*/
|
|
10
|
-
export declare class IAWaybackSearchForm extends LitElement {
|
|
11
|
-
queryHandler: {
|
|
12
|
-
performQuery: (query: string) => void;
|
|
13
|
-
};
|
|
14
|
-
/** How many pages the Wayback Machine holds. Blank shows a localized default. */
|
|
15
|
-
waybackPagesArchived: string;
|
|
16
|
-
private urlInput;
|
|
17
|
-
render(): import("lit").TemplateResult<1>;
|
|
18
|
-
handleSubmit(e: Event): void;
|
|
19
|
-
emitWaybackSearchSubmitted(query: string): void;
|
|
20
|
-
emitWaybackMachineStatsLinkClicked(): void;
|
|
21
|
-
emitWaybackMachineLogoLinkClicked(): void;
|
|
22
|
-
static get styles(): CSSResultGroup;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=ia-wayback-search-form.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ia-wayback-search-form.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-wayback-search-form/ia-wayback-search-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAa5D;;;;;;;GAOG;AACH,qBAEa,mBAAoB,SAAQ,UAAU;IACrB,YAAY,EAAE;QACxC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACvC,CAGC;IAEF,iFAAiF;IACrD,oBAAoB,SAAM;IAEvC,OAAO,CAAC,QAAQ,CAAoB;IAEnD,MAAM;IAuCN,YAAY,CAAC,CAAC,EAAE,KAAK;IAOrB,0BAA0B,CAAC,KAAK,EAAE,MAAM;IAUxC,kCAAkC;IAIlC,iCAAiC;IAIjC,MAAM,KAAK,MAAM,IAAI,cAAc,CA6IlC;CACF"}
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { css, LitElement, html } from 'lit';
|
|
3
|
-
import { property, query } from 'lit/decorators.js';
|
|
4
|
-
import { customElement } from '../../util/custom-element.js';
|
|
5
|
-
import { localized, msg } from '@lit/localize';
|
|
6
|
-
import searchIcon from '../../elements/ia-topnav/assets/img/icon-search.js';
|
|
7
|
-
import logo from '../../elements/ia-topnav/assets/img/wayback-logo.js';
|
|
8
|
-
import themeStyles from '../../themes/theme-styles.js';
|
|
9
|
-
/** Desktop styles apply at `min-width: WAYBACK_SEARCH_DESKTOP_BREAKPOINT px`. */
|
|
10
|
-
const WAYBACK_SEARCH_DESKTOP_BREAKPOINT = 890;
|
|
11
|
-
/**
|
|
12
|
-
* A Wayback Machine search form: a line about how many pages the Wayback
|
|
13
|
-
* Machine holds, its logo, and a URL or keyword field.
|
|
14
|
-
*
|
|
15
|
-
* Submitting calls `queryHandler.performQuery` with what was typed, which by
|
|
16
|
-
* default goes to the Wayback Machine's results for it, and fires
|
|
17
|
-
* `waybackSearchSubmitted`.
|
|
18
|
-
*/
|
|
19
|
-
let IAWaybackSearchForm = class IAWaybackSearchForm extends LitElement {
|
|
20
|
-
constructor() {
|
|
21
|
-
super(...arguments);
|
|
22
|
-
this.queryHandler = {
|
|
23
|
-
performQuery: (query) => (window.location.href = `https://web.archive.org/web/*/${query}`),
|
|
24
|
-
};
|
|
25
|
-
/** How many pages the Wayback Machine holds. Blank shows a localized default. */
|
|
26
|
-
this.waybackPagesArchived = '';
|
|
27
|
-
}
|
|
28
|
-
render() {
|
|
29
|
-
const pagesArchived = this.waybackPagesArchived || msg('1 trillion');
|
|
30
|
-
return html `
|
|
31
|
-
<form method="post" @submit=${this.handleSubmit}>
|
|
32
|
-
<p>
|
|
33
|
-
${msg(html `Search the history of more than ${pagesArchived}
|
|
34
|
-
<a
|
|
35
|
-
@click=${this.emitWaybackMachineStatsLinkClicked}
|
|
36
|
-
data-event-click-tracking="TopNav|WaybackMachineStatsLink"
|
|
37
|
-
href="https://blog.archive.org/2016/10/23/defining-web-pages-web-sites-and-web-captures/"
|
|
38
|
-
>web pages</a
|
|
39
|
-
>
|
|
40
|
-
on the Internet.`)}
|
|
41
|
-
</p>
|
|
42
|
-
<fieldset>
|
|
43
|
-
<a
|
|
44
|
-
@click=${this.emitWaybackMachineLogoLinkClicked}
|
|
45
|
-
data-event-click-tracking="TopNav|WaybackMachineLogoLink"
|
|
46
|
-
aria-label=${msg('Visit the Wayback Machine')}
|
|
47
|
-
href="https://web.archive.org"
|
|
48
|
-
>${logo}</a
|
|
49
|
-
>
|
|
50
|
-
<div class="search-field">
|
|
51
|
-
<input
|
|
52
|
-
type="text"
|
|
53
|
-
aria-label=${msg('Search the Wayback Machine')}
|
|
54
|
-
name="url"
|
|
55
|
-
id="url"
|
|
56
|
-
placeholder=${msg('Enter URL or keywords')}
|
|
57
|
-
/>
|
|
58
|
-
${searchIcon}
|
|
59
|
-
</div>
|
|
60
|
-
</fieldset>
|
|
61
|
-
</form>
|
|
62
|
-
`;
|
|
63
|
-
}
|
|
64
|
-
handleSubmit(e) {
|
|
65
|
-
e.preventDefault();
|
|
66
|
-
const query = this.urlInput.value;
|
|
67
|
-
this.emitWaybackSearchSubmitted(query);
|
|
68
|
-
this.queryHandler.performQuery(query);
|
|
69
|
-
}
|
|
70
|
-
emitWaybackSearchSubmitted(query) {
|
|
71
|
-
this.dispatchEvent(new CustomEvent('waybackSearchSubmitted', {
|
|
72
|
-
detail: {
|
|
73
|
-
query,
|
|
74
|
-
},
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
emitWaybackMachineStatsLinkClicked() {
|
|
78
|
-
this.dispatchEvent(new CustomEvent('waybackMachineStatsLinkClicked'));
|
|
79
|
-
}
|
|
80
|
-
emitWaybackMachineLogoLinkClicked() {
|
|
81
|
-
this.dispatchEvent(new CustomEvent('waybackMachineLogoLink'));
|
|
82
|
-
}
|
|
83
|
-
static get styles() {
|
|
84
|
-
return [
|
|
85
|
-
themeStyles,
|
|
86
|
-
css `
|
|
87
|
-
:host {
|
|
88
|
-
--wayback-search-input-text-color--: var(
|
|
89
|
-
--ia-theme-secondary-text-color,
|
|
90
|
-
#666
|
|
91
|
-
);
|
|
92
|
-
--wayback-search-input-bg--: var(
|
|
93
|
-
--ia-theme-secondary-background-color,
|
|
94
|
-
#fff
|
|
95
|
-
);
|
|
96
|
-
/*
|
|
97
|
-
* Darker than the mobile glyph, which follows --iconFill. The topnav
|
|
98
|
-
* declares this alongside its other color knobs. The literal covers
|
|
99
|
-
* mounting this search on its own, where none of those greys exist,
|
|
100
|
-
* and it has to be a literal because fill inherits: an unresolved
|
|
101
|
-
* value paints black rather than falling through to another rule.
|
|
102
|
-
*/
|
|
103
|
-
--wayback-search-desktop-icon-fill--: var(
|
|
104
|
-
--desktopSearchIconFill,
|
|
105
|
-
#333
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
font: normal 1.2rem/1.5 var(--themeFontFamily);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
form {
|
|
112
|
-
max-width: 600px;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
p {
|
|
116
|
-
margin-top: 0;
|
|
117
|
-
font-weight: 200;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
a {
|
|
121
|
-
font-weight: 500;
|
|
122
|
-
text-decoration: none;
|
|
123
|
-
color: var(--activeColor);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
fieldset {
|
|
127
|
-
padding: 0.7rem 2rem;
|
|
128
|
-
margin: 1.5rem 0;
|
|
129
|
-
box-sizing: border-box;
|
|
130
|
-
text-align: center;
|
|
131
|
-
border: none;
|
|
132
|
-
border-radius: 7px;
|
|
133
|
-
background-color: #fcf5e6;
|
|
134
|
-
box-shadow: 3px 3px 0 0 #c3ad97;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
fieldset a {
|
|
138
|
-
font-size: 0;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
img {
|
|
142
|
-
width: 100%;
|
|
143
|
-
max-width: 215px;
|
|
144
|
-
max-height: 60px;
|
|
145
|
-
margin-bottom: 1.3rem;
|
|
146
|
-
vertical-align: middle;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
input {
|
|
150
|
-
display: block;
|
|
151
|
-
width: 100%;
|
|
152
|
-
height: 3rem;
|
|
153
|
-
padding: 0.5rem 1rem 0.5rem 3rem;
|
|
154
|
-
font: normal 1.2rem/1.5 var(--themeFontFamily);
|
|
155
|
-
color: var(--wayback-search-input-text-color--);
|
|
156
|
-
box-sizing: border-box;
|
|
157
|
-
border: 1px solid var(--grey80);
|
|
158
|
-
border-radius: 2rem;
|
|
159
|
-
background: var(--wayback-search-input-bg--);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
input:focus {
|
|
163
|
-
border-color: #66afe9;
|
|
164
|
-
outline: none;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
.search-field {
|
|
168
|
-
position: relative;
|
|
169
|
-
overflow: hidden;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.search-field svg {
|
|
173
|
-
position: absolute;
|
|
174
|
-
top: 3px;
|
|
175
|
-
left: 3px;
|
|
176
|
-
width: 2.4rem;
|
|
177
|
-
height: 2.4rem;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.search-field .fill-color {
|
|
181
|
-
fill: var(--iconFill);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
@media (min-width: ${WAYBACK_SEARCH_DESKTOP_BREAKPOINT}px) {
|
|
185
|
-
form {
|
|
186
|
-
margin: 0 auto;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
p {
|
|
190
|
-
margin-bottom: 3rem;
|
|
191
|
-
font-size: 1.6rem;
|
|
192
|
-
text-align: center;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
img {
|
|
196
|
-
margin: 0;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
fieldset {
|
|
200
|
-
margin: 0 auto;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
fieldset a,
|
|
204
|
-
.search-field {
|
|
205
|
-
display: inline-block;
|
|
206
|
-
width: 49%;
|
|
207
|
-
vertical-align: middle;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
fieldset a {
|
|
211
|
-
text-align: center;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.search-field svg {
|
|
215
|
-
top: 2px;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.search-field .fill-color {
|
|
219
|
-
fill: var(--wayback-search-desktop-icon-fill--);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
`,
|
|
223
|
-
];
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
__decorate([
|
|
227
|
-
property({ type: Object })
|
|
228
|
-
], IAWaybackSearchForm.prototype, "queryHandler", void 0);
|
|
229
|
-
__decorate([
|
|
230
|
-
property({ type: String })
|
|
231
|
-
], IAWaybackSearchForm.prototype, "waybackPagesArchived", void 0);
|
|
232
|
-
__decorate([
|
|
233
|
-
query('#url')
|
|
234
|
-
], IAWaybackSearchForm.prototype, "urlInput", void 0);
|
|
235
|
-
IAWaybackSearchForm = __decorate([
|
|
236
|
-
customElement('ia-wayback-search-form'),
|
|
237
|
-
localized()
|
|
238
|
-
], IAWaybackSearchForm);
|
|
239
|
-
export { IAWaybackSearchForm };
|
|
240
|
-
//# sourceMappingURL=ia-wayback-search-form.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ia-wayback-search-form.js","sourceRoot":"","sources":["../../../../src/elements/ia-wayback-search-form/ia-wayback-search-form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAkB,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,UAAU,MAAM,gDAAgD,CAAC;AACxE,OAAO,IAAI,MAAM,iDAAiD,CAAC;AACnE,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAEnD,iFAAiF;AACjF,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAE9C;;;;;;;GAOG;AAGI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,UAAU;IAA5C;;QACuB,iBAAY,GAEpC;YACF,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE,CAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,iCAAiC,KAAK,EAAE,CAAC;SACpE,CAAC;QAEF,iFAAiF;QACrD,yBAAoB,GAAG,EAAE,CAAC;IAkNxD,CAAC;IA9MC,MAAM;QACJ,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACrE,OAAO,IAAI,CAAA;oCACqB,IAAI,CAAC,YAAY;;YAEzC,GAAG,CACH,IAAI,CAAA,mCAAmC,aAAa;;yBAEvC,IAAI,CAAC,kCAAkC;;;;;+BAKjC,CACpB;;;;qBAIU,IAAI,CAAC,iCAAiC;;yBAElC,GAAG,CAAC,2BAA2B,CAAC;;eAE1C,IAAI;;;;;2BAKQ,GAAG,CAAC,4BAA4B,CAAC;;;4BAGhC,GAAG,CAAC,uBAAuB,CAAC;;cAE1C,UAAU;;;;KAInB,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,CAAQ;QACnB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,0BAA0B,CAAC,KAAa;QACtC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,wBAAwB,EAAE;YACxC,MAAM,EAAE;gBACN,KAAK;aACN;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,kCAAkC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,iCAAiC;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO;YACL,WAAW;YACX,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAkGoB,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCvD;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA1N6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAKzB;AAG0B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iEAA2B;AAE/B;IAAtB,KAAK,CAAC,MAAM,CAAC;qDAAqC;AAXxC,mBAAmB;IAF/B,aAAa,CAAC,wBAAwB,CAAC;IACvC,SAAS,EAAE;GACC,mBAAmB,CA2N/B","sourcesContent":["import { css, CSSResultGroup, LitElement, html } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { customElement } from '@src/util/custom-element';\n\nimport { localized, msg } from '@lit/localize';\n\nimport searchIcon from '@src/elements/ia-topnav/assets/img/icon-search';\nimport logo from '@src/elements/ia-topnav/assets/img/wayback-logo';\nimport themeStyles from '@src/themes/theme-styles';\n\n/** Desktop styles apply at `min-width: WAYBACK_SEARCH_DESKTOP_BREAKPOINT px`. */\nconst WAYBACK_SEARCH_DESKTOP_BREAKPOINT = 890;\n\n/**\n * A Wayback Machine search form: a line about how many pages the Wayback\n * Machine holds, its logo, and a URL or keyword field.\n *\n * Submitting calls `queryHandler.performQuery` with what was typed, which by\n * default goes to the Wayback Machine's results for it, and fires\n * `waybackSearchSubmitted`.\n */\n@customElement('ia-wayback-search-form')\n@localized()\nexport class IAWaybackSearchForm extends LitElement {\n @property({ type: Object }) queryHandler: {\n performQuery: (query: string) => void;\n } = {\n performQuery: (query: string) =>\n (window.location.href = `https://web.archive.org/web/*/${query}`),\n };\n\n /** How many pages the Wayback Machine holds. Blank shows a localized default. */\n @property({ type: String }) waybackPagesArchived = '';\n\n @query('#url') private urlInput!: HTMLInputElement;\n\n render() {\n const pagesArchived = this.waybackPagesArchived || msg('1 trillion');\n return html`\n <form method=\"post\" @submit=${this.handleSubmit}>\n <p>\n ${msg(\n html`Search the history of more than ${pagesArchived}\n <a\n @click=${this.emitWaybackMachineStatsLinkClicked}\n data-event-click-tracking=\"TopNav|WaybackMachineStatsLink\"\n href=\"https://blog.archive.org/2016/10/23/defining-web-pages-web-sites-and-web-captures/\"\n >web pages</a\n >\n on the Internet.`,\n )}\n </p>\n <fieldset>\n <a\n @click=${this.emitWaybackMachineLogoLinkClicked}\n data-event-click-tracking=\"TopNav|WaybackMachineLogoLink\"\n aria-label=${msg('Visit the Wayback Machine')}\n href=\"https://web.archive.org\"\n >${logo}</a\n >\n <div class=\"search-field\">\n <input\n type=\"text\"\n aria-label=${msg('Search the Wayback Machine')}\n name=\"url\"\n id=\"url\"\n placeholder=${msg('Enter URL or keywords')}\n />\n ${searchIcon}\n </div>\n </fieldset>\n </form>\n `;\n }\n\n handleSubmit(e: Event) {\n e.preventDefault();\n const query = this.urlInput.value;\n this.emitWaybackSearchSubmitted(query);\n this.queryHandler.performQuery(query);\n }\n\n emitWaybackSearchSubmitted(query: string) {\n this.dispatchEvent(\n new CustomEvent('waybackSearchSubmitted', {\n detail: {\n query,\n },\n }),\n );\n }\n\n emitWaybackMachineStatsLinkClicked() {\n this.dispatchEvent(new CustomEvent('waybackMachineStatsLinkClicked'));\n }\n\n emitWaybackMachineLogoLinkClicked() {\n this.dispatchEvent(new CustomEvent('waybackMachineLogoLink'));\n }\n\n static get styles(): CSSResultGroup {\n return [\n themeStyles,\n css`\n :host {\n --wayback-search-input-text-color--: var(\n --ia-theme-secondary-text-color,\n #666\n );\n --wayback-search-input-bg--: var(\n --ia-theme-secondary-background-color,\n #fff\n );\n /*\n * Darker than the mobile glyph, which follows --iconFill. The topnav\n * declares this alongside its other color knobs. The literal covers\n * mounting this search on its own, where none of those greys exist,\n * and it has to be a literal because fill inherits: an unresolved\n * value paints black rather than falling through to another rule.\n */\n --wayback-search-desktop-icon-fill--: var(\n --desktopSearchIconFill,\n #333\n );\n\n font: normal 1.2rem/1.5 var(--themeFontFamily);\n }\n\n form {\n max-width: 600px;\n }\n\n p {\n margin-top: 0;\n font-weight: 200;\n }\n\n a {\n font-weight: 500;\n text-decoration: none;\n color: var(--activeColor);\n }\n\n fieldset {\n padding: 0.7rem 2rem;\n margin: 1.5rem 0;\n box-sizing: border-box;\n text-align: center;\n border: none;\n border-radius: 7px;\n background-color: #fcf5e6;\n box-shadow: 3px 3px 0 0 #c3ad97;\n }\n\n fieldset a {\n font-size: 0;\n }\n\n img {\n width: 100%;\n max-width: 215px;\n max-height: 60px;\n margin-bottom: 1.3rem;\n vertical-align: middle;\n }\n\n input {\n display: block;\n width: 100%;\n height: 3rem;\n padding: 0.5rem 1rem 0.5rem 3rem;\n font: normal 1.2rem/1.5 var(--themeFontFamily);\n color: var(--wayback-search-input-text-color--);\n box-sizing: border-box;\n border: 1px solid var(--grey80);\n border-radius: 2rem;\n background: var(--wayback-search-input-bg--);\n }\n\n input:focus {\n border-color: #66afe9;\n outline: none;\n }\n\n .search-field {\n position: relative;\n overflow: hidden;\n }\n\n .search-field svg {\n position: absolute;\n top: 3px;\n left: 3px;\n width: 2.4rem;\n height: 2.4rem;\n }\n\n .search-field .fill-color {\n fill: var(--iconFill);\n }\n\n @media (min-width: ${WAYBACK_SEARCH_DESKTOP_BREAKPOINT}px) {\n form {\n margin: 0 auto;\n }\n\n p {\n margin-bottom: 3rem;\n font-size: 1.6rem;\n text-align: center;\n }\n\n img {\n margin: 0;\n }\n\n fieldset {\n margin: 0 auto;\n }\n\n fieldset a,\n .search-field {\n display: inline-block;\n width: 49%;\n vertical-align: middle;\n }\n\n fieldset a {\n text-align: center;\n }\n\n .search-field svg {\n top: 2px;\n }\n\n .search-field .fill-color {\n fill: var(--wayback-search-desktop-icon-fill--);\n }\n }\n `,\n ];\n }\n}\n"]}
|