@internetarchive/ia-topnav 1.4.1-alpha-webdev8259.10 → 1.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../../src/styles/primary-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2WjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n button:focus,\n input:focus {\n outline: none;\n }\n\n nav {\n position: relative;\n display: flex;\n height: 4rem;\n grid-template-areas: 'hamburger empty heart search user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem 4rem;\n -ms-grid-rows: 100%;\n grid-template-rows: 100%;\n background: var(--primaryNavBg);\n border-bottom: 1px solid var(--primaryNavBottomBorder);\n }\n\n nav.hide-search {\n grid-template-areas: 'hamburger empty heart user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem;\n }\n\n .right-side-section {\n display: flex;\n margin-left: auto;\n user-select: none;\n }\n button {\n background: none;\n color: inherit;\n border: none;\n font: inherit;\n cursor: pointer;\n }\n\n .branding {\n position: static;\n float: left;\n margin: 0 !important;\n padding: 0 5px 0 10px;\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0);\n }\n\n slot,\n .branding {\n display: flex;\n justify-content: left;\n align-items: center;\n }\n\n media-menu {\n flex: 1;\n justify-self: stretch;\n }\n\n .ia-logo {\n height: 3rem;\n width: 2.7rem;\n display: inline-block;\n }\n .ia-wordmark {\n height: 3rem;\n width: 9.5rem;\n }\n .ia-logo,\n .ia-wordmark {\n margin-right: 5px;\n }\n\n .hamburger {\n -ms-grid-row: 1;\n -ms-grid-column: 1;\n grid-area: hamburger;\n padding: 0;\n }\n .hamburger svg {\n height: 4rem;\n width: 4rem;\n fill: var(--activeColor);\n }\n\n .mobile-donate-link {\n display: inline-block;\n }\n .mobile-donate-link svg {\n height: 4rem;\n width: 4rem;\n }\n .mobile-donate-link .fill-color {\n fill: rgb(255, 0, 0);\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n overflow: hidden;\n white-space: nowrap;\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n user-select: none;\n }\n\n .search-trigger {\n padding: 0;\n }\n .search-trigger svg {\n height: 4rem;\n width: 4rem;\n }\n .search-trigger .fill-color {\n fill: var(--iconFill);\n }\n\n .search-activated {\n position: relative;\n z-index: 3;\n }\n\n .search-container {\n display: none;\n }\n\n .search-container.open {\n display: flex;\n position: absolute;\n top: 0;\n right: 4rem;\n bottom: 0;\n left: 4rem;\n z-index: 3;\n padding: 0.5rem;\n border-radius: 1rem 1rem 0 0;\n background: var(--primaryNavBg);\n align-items: center;\n animation: fade-in 0.2s forwards;\n }\n\n .search-container ::slotted(*) {\n display: block;\n }\n\n .search-container slot {\n width: 100%;\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n .upload {\n display: none;\n }\n\n .upload span {\n display: none;\n }\n\n .upload svg {\n height: 3rem;\n width: 3rem;\n }\n\n .screen-name {\n display: none;\n font-size: 1.3rem;\n vertical-align: middle;\n text-transform: uppercase;\n }\n\n .user-menu {\n color: var(--lightTextColor);\n padding: 0.5rem;\n height: 100%;\n }\n\n button.user-menu:hover,\n button.user-menu:focus {\n color: var(--linkHoverColor);\n outline: none;\n }\n\n .user-menu.active {\n border-radius: 1rem 1rem 0 0;\n background: var(--activeButtonBg);\n }\n\n .user-menu img {\n display: block;\n width: 3rem;\n height: 3rem;\n }\n\n .link-home {\n text-decoration: none;\n display: inline-flex;\n }\n a.link-home:focus,\n a.link-home:focus-visible {\n outline-offset: 1px;\n }\n\n @media only screen and (min-width: 890px) and (max-device-width: 905px) {\n .branding.second-logo {\n padding-right: 0;\n }\n }\n\n @media (min-width: 906px) {\n .branding.second-logo {\n padding-right: 20px;\n }\n }\n\n @media (max-width: 889px) {\n slot[name='opt-sec-logo'] {\n display: none;\n }\n\n .right-side-section {\n display: initial;\n }\n .right-side-section .user-info {\n float: right;\n }\n }\n\n @media (min-width: 890px) {\n :host {\n --userIconWidth: 3.2rem;\n --userIconHeight: 3.2rem;\n }\n\n nav {\n display: flex;\n z-index: 4;\n height: 5rem;\n padding-right: 1.5rem;\n }\n\n slot[name='opt-sec-logo-mobile'] {\n display: none;\n }\n\n .ia-logo,\n .ia-wordmark {\n margin-right: 10px;\n }\n\n .hamburger,\n .search-trigger,\n .mobile-donate-link {\n display: none;\n }\n\n .user-info {\n display: block;\n float: right;\n vertical-align: middle;\n height: 100%;\n }\n\n .user-info .user-menu img {\n height: 3rem;\n width: 3rem;\n margin-right: 0.5rem;\n }\n\n .user-menu {\n padding: 1rem 0.5rem;\n }\n .user-menu.active {\n background: transparent;\n }\n\n .user-menu img {\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.5rem;\n }\n\n .upload {\n display: block;\n padding: 1rem 0.5rem;\n float: right;\n font-size: 1.4rem;\n text-transform: uppercase;\n text-decoration: none;\n color: var(--lightTextColor);\n }\n .upload:active,\n .upload:focus,\n .upload:hover {\n color: var(--linkHoverColor);\n }\n .upload:focus-visible {\n outline: none;\n }\n\n .upload svg {\n vertical-align: middle;\n fill: var(--iconFill);\n }\n\n .upload:hover svg,\n .upload:focus svg,\n .upload:active svg {\n fill: var(--linkHoverColor);\n }\n\n nav-search {\n float: right;\n margin-left: 1rem;\n }\n\n .search-container,\n .search-container.open {\n display: flex;\n position: static;\n top: auto;\n right: auto;\n bottom: auto;\n left: auto;\n align-items: center;\n padding: 0 0 0 1rem;\n background: transparent;\n border-radius: 0;\n z-index: auto;\n }\n\n .search-container slot {\n width: auto;\n }\n }\n\n @media (min-width: 990px) {\n .screen-name {\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 165px;\n }\n\n .upload span {\n display: inline-block;\n vertical-align: middle;\n }\n }\n`;\n"]}
1
+ {"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../../src/styles/primary-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoTjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n button:focus,\n input:focus {\n outline: none;\n }\n\n nav {\n position: relative;\n display: flex;\n height: 4rem;\n grid-template-areas: 'hamburger empty heart search user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem 4rem;\n -ms-grid-rows: 100%;\n grid-template-rows: 100%;\n background: var(--primaryNavBg);\n border-bottom: 1px solid var(--primaryNavBottomBorder);\n }\n\n nav.hide-search {\n grid-template-areas: 'hamburger empty heart user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem;\n }\n\n .right-side-section {\n display: flex;\n margin-left: auto;\n user-select: none;\n }\n button {\n background: none;\n color: inherit;\n border: none;\n font: inherit;\n cursor: pointer;\n }\n\n .branding {\n position: static;\n float: left;\n margin: 0 !important;\n padding: 0 5px 0 10px;\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0);\n }\n\n slot,\n .branding {\n display: flex;\n justify-content: left;\n align-items: center;\n }\n\n media-menu {\n flex: 1;\n justify-self: stretch;\n }\n\n .ia-logo {\n height: 3rem;\n width: 2.7rem;\n display: inline-block;\n }\n .ia-wordmark {\n height: 3rem;\n width: 9.5rem;\n }\n .ia-logo,\n .ia-wordmark {\n margin-right: 5px;\n }\n\n .hamburger {\n -ms-grid-row: 1;\n -ms-grid-column: 1;\n grid-area: hamburger;\n padding: 0;\n }\n .hamburger svg {\n height: 4rem;\n width: 4rem;\n fill: var(--activeColor);\n }\n\n .mobile-donate-link {\n display: inline-block;\n }\n .mobile-donate-link svg {\n height: 4rem;\n width: 4rem;\n }\n .mobile-donate-link .fill-color {\n fill: rgb(255, 0, 0);\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n overflow: hidden;\n white-space: nowrap;\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n user-select: none;\n }\n\n .search-trigger {\n padding: 0;\n }\n .search-trigger svg {\n height: 4rem;\n width: 4rem;\n }\n .search-trigger .fill-color {\n fill: var(--iconFill);\n }\n\n .search-activated {\n position: relative;\n z-index: 3;\n }\n\n .upload {\n display: none;\n }\n\n .upload span {\n display: none;\n }\n\n .upload svg {\n height: 3rem;\n width: 3rem;\n }\n\n .screen-name {\n display: none;\n font-size: 1.3rem;\n vertical-align: middle;\n text-transform: uppercase;\n }\n\n .user-menu {\n color: var(--lightTextColor);\n padding: 0.5rem;\n height: 100%;\n }\n\n button.user-menu:hover,\n button.user-menu:focus {\n color: var(--linkHoverColor);\n outline: none;\n }\n\n .user-menu.active {\n border-radius: 1rem 1rem 0 0;\n background: var(--activeButtonBg);\n }\n\n .user-menu img {\n display: block;\n width: 3rem;\n height: 3rem;\n }\n\n .link-home {\n text-decoration: none;\n display: inline-flex;\n }\n a.link-home:focus,\n a.link-home:focus-visible {\n outline-offset: 1px;\n }\n\n @media only screen and (min-width: 890px) and (max-device-width: 905px) {\n .branding.second-logo {\n padding-right: 0;\n }\n }\n\n @media (min-width: 906px) {\n .branding.second-logo {\n padding-right: 20px;\n }\n }\n\n @media (max-width: 889px) {\n slot[name='opt-sec-logo'] {\n display: none;\n }\n\n .right-side-section {\n display: initial;\n }\n .right-side-section .user-info {\n float: right;\n }\n }\n\n @media (min-width: 890px) {\n :host {\n --userIconWidth: 3.2rem;\n --userIconHeight: 3.2rem;\n }\n\n nav {\n display: flex;\n z-index: 4;\n height: 5rem;\n padding-right: 1.5rem;\n }\n\n slot[name='opt-sec-logo-mobile'] {\n display: none;\n }\n\n .ia-logo,\n .ia-wordmark {\n margin-right: 10px;\n }\n\n .hamburger,\n .search-trigger,\n .mobile-donate-link {\n display: none;\n }\n\n .user-info {\n display: block;\n float: right;\n vertical-align: middle;\n height: 100%;\n }\n\n .user-info .user-menu img {\n height: 3rem;\n width: 3rem;\n margin-right: 0.5rem;\n }\n\n .user-menu {\n padding: 1rem 0.5rem;\n }\n .user-menu.active {\n background: transparent;\n }\n\n .user-menu img {\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.5rem;\n }\n\n .upload {\n display: block;\n padding: 1rem 0.5rem;\n float: right;\n font-size: 1.4rem;\n text-transform: uppercase;\n text-decoration: none;\n color: var(--lightTextColor);\n }\n .upload:active,\n .upload:focus,\n .upload:hover {\n color: var(--linkHoverColor);\n }\n .upload:focus-visible {\n outline: none;\n }\n\n .upload svg {\n vertical-align: middle;\n fill: var(--iconFill);\n }\n\n .upload:hover svg,\n .upload:focus svg,\n .upload:active svg {\n fill: var(--linkHoverColor);\n }\n\n nav-search {\n float: right;\n margin-left: 1rem;\n }\n }\n\n @media (min-width: 990px) {\n .screen-name {\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 165px;\n }\n\n .upload span {\n display: inline-block;\n vertical-align: middle;\n }\n }\n`;\n"]}
@@ -1,5 +1,29 @@
1
1
  import { html, fixture, expect, oneEvent, fixtureCleanup, elementUpdated, } from '@open-wc/testing';
2
2
  import '../src/ia-topnav';
3
+ // const container = (
4
+ // {
5
+ // username = '',
6
+ // screenName = '',
7
+ // config = {},
8
+ // localLinks = true,
9
+ // secondIdentitySlotMode = '',
10
+ // }: {
11
+ // username?: string;
12
+ // screenName?: string;
13
+ // config?: IATopNavConfig;
14
+ // localLinks: boolean;
15
+ // secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;
16
+ // } = {
17
+ // localLinks: true,
18
+ // },
19
+ // ) =>
20
+ // html`<ia-topnav
21
+ // .screenName=${screenName}
22
+ // username=${username}
23
+ // ?localLinks=${localLinks}
24
+ // .config=${config}
25
+ // .secondIdentitySlotMode=${secondIdentitySlotMode}
26
+ // ></ia-topnav>`;
3
27
  const verifyClosed = (instance) => {
4
28
  expect(instance.mediaSliderOpen).to.be.false;
5
29
  expect(instance.selectedMenuOption).to.equal('');
@@ -12,6 +36,20 @@ afterEach(() => {
12
36
  fixtureCleanup();
13
37
  });
14
38
  describe('<ia-topnav>', () => {
39
+ it('assigns a value to "search in" from outside event', async () => {
40
+ var _a;
41
+ const el = await fixture(html ` <ia-topnav></ia-topnav>`);
42
+ const query = 'atari';
43
+ const searchMenu = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('search-menu');
44
+ const inputEvent = new InputEvent('input');
45
+ Object.defineProperty(inputEvent, 'target', {
46
+ value: { value: query },
47
+ writable: false,
48
+ });
49
+ searchMenu === null || searchMenu === void 0 ? void 0 : searchMenu.searchInChanged(inputEvent);
50
+ await el.updateComplete;
51
+ expect(el.searchIn).to.equal(query);
52
+ });
15
53
  it('dispatches an analyticsClick event when trackClick event fired', async () => {
16
54
  const el = await fixture(html ` <ia-topnav></ia-topnav>`);
17
55
  const clickEvent = new MouseEvent('click');
@@ -22,6 +60,17 @@ describe('<ia-topnav>', () => {
22
60
  const response = await oneEvent(el, 'trackClick');
23
61
  expect(response).to.exist;
24
62
  });
63
+ it('dispatches an analyticsSubmit event when trackSubmit event fired', async () => {
64
+ var _a, _b, _c, _d, _e;
65
+ const el = await fixture(html ` <ia-topnav></ia-topnav>`);
66
+ const submitEvent = new Event('submit');
67
+ const form = (_e = (_d = (_c = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('primary-nav')) === null || _b === void 0 ? void 0 : _b.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('nav-search')) === null || _d === void 0 ? void 0 : _d.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelector('form');
68
+ form === null || form === void 0 ? void 0 : form.addEventListener('submit', (e) => e.preventDefault());
69
+ (form === null || form === void 0 ? void 0 : form.querySelector('[name=query]')).value = 'atari';
70
+ setTimeout(() => form === null || form === void 0 ? void 0 : form.dispatchEvent(submitEvent));
71
+ const response = await oneEvent(el, 'trackSubmit');
72
+ expect(response).to.exist;
73
+ });
25
74
  it('closes all menus when close-layer clicked', async () => {
26
75
  const el = await fixture(html ` <ia-topnav></ia-topnav>`);
27
76
  el.openMenu = 'media';
@@ -86,6 +135,13 @@ describe('<ia-topnav>', () => {
86
135
  await el.updateComplete;
87
136
  expect(el.selectedMenuOption).to.equal('');
88
137
  });
138
+ it('toggles search menu tabindex when dropdown open', async () => {
139
+ var _a, _b;
140
+ const el = await fixture(html ` <ia-topnav></ia-topnav>`);
141
+ el.openMenu = 'search';
142
+ await el.updateComplete;
143
+ expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('search-menu')) === null || _b === void 0 ? void 0 : _b.getAttribute('tabindex')).to.equal('');
144
+ });
89
145
  it('toggles user menu tabindex when dropdown open', async () => {
90
146
  var _a, _b;
91
147
  const el = await fixture(html ` <ia-topnav username="shaneriley" ?localLinks=${false}></ia-topnav>`);
@@ -131,6 +187,7 @@ describe('<ia-topnav>', () => {
131
187
  'primary-nav',
132
188
  'media-slider',
133
189
  'desktop-subnav',
190
+ 'search-menu',
134
191
  ];
135
192
  componentSelectors.forEach((selector) => {
136
193
  var _a;
@@ -151,22 +208,6 @@ describe('<ia-topnav>', () => {
151
208
  expect(signedOutDropdown.baseHost).to.equal('https://archive.org');
152
209
  });
153
210
  });
154
- describe('search slot', () => {
155
- it('forwards search slot to primary-nav', async () => {
156
- var _a;
157
- const el = await fixture(html `<ia-topnav></ia-topnav>`);
158
- await el.updateComplete;
159
- const primaryNav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('primary-nav');
160
- const slot = primaryNav === null || primaryNav === void 0 ? void 0 : primaryNav.querySelector('slot[name="search"]');
161
- expect(slot).to.exist;
162
- });
163
- it('does not render search-menu', async () => {
164
- var _a;
165
- const el = await fixture(html `<ia-topnav></ia-topnav>`);
166
- await el.updateComplete;
167
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('search-menu')).to.not.exist;
168
- });
169
- });
170
211
  describe('slot pass throughs', () => {
171
212
  describe('slot for <primary-nav>', () => {
172
213
  it('opens a slot with `secondIdentitySlotMode`', async () => {
@@ -177,11 +218,12 @@ describe('<ia-topnav>', () => {
177
218
  screenName="somesuperlongscreenname"
178
219
  secondIdentitySlotMode="allow"
179
220
  ></ia-topnav>`);
180
- const slot = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('primary-nav')) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="opt-sec-logo"]');
221
+ const slot = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('primary-nav')) === null || _b === void 0 ? void 0 : _b.querySelector('slot');
181
222
  expect(slot).to.exist;
223
+ expect(slot === null || slot === void 0 ? void 0 : slot.getAttribute('name')).to.equal('opt-sec-logo');
182
224
  el.secondIdentitySlotMode = '';
183
225
  await elementUpdated(el);
184
- const noSlot = (_d = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('primary-nav')) === null || _d === void 0 ? void 0 : _d.querySelector('slot[name="opt-sec-logo"]');
226
+ const noSlot = (_d = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('primary-nav')) === null || _d === void 0 ? void 0 : _d.querySelector('slot');
185
227
  expect(noSlot).to.not.exist;
186
228
  });
187
229
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ia-topnav.test.js","sourceRoot":"","sources":["../../test/ia-topnav.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n fixture,\n expect,\n oneEvent,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/ia-topnav';\nimport { IATopNav } from '../src/ia-topnav';\nimport { SignedOutDropdown } from '../src/signed-out-dropdown';\nimport UserMenu from '../src/user-menu';\n\nconst verifyClosed = (instance: IATopNav) => {\n expect(instance.mediaSliderOpen).to.be.false;\n expect(instance.selectedMenuOption).to.equal('');\n};\n\nconst verifyOpened = (instance: IATopNav, mediatype: string) => {\n expect(instance.mediaSliderOpen).to.be.true;\n expect(instance.selectedMenuOption).to.equal(mediatype);\n};\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<ia-topnav>', () => {\n it('dispatches an analyticsClick event when trackClick event fired', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() =>\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.hamburger')\n ?.dispatchEvent(clickEvent),\n );\n const response = await oneEvent(el, 'trackClick');\n\n expect(response).to.exist;\n });\n\n it('closes all menus when close-layer clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'texts';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n el.closeMenus();\n await el.updateComplete;\n\n expect(el.mediaSliderOpen).to.be.false;\n expect(el.openMenu).to.equal('');\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('sets media slider to closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.mediaSliderOpen = true;\n el.selectedMenuOption = 'foo';\n el.closeMediaSlider();\n\n verifyClosed(el);\n });\n\n it('toggles media slider visibility and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n el.openMediaSlider();\n\n verifyOpened(el, mediatype);\n });\n\n it('closes media slider if selected menu type is the open menu type', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyClosed(el);\n });\n\n it('opens media slider menu and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyOpened(el, mediatype);\n });\n\n it('closes slider when menu closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'foo';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n\n const event = new CustomEvent('menuToggled', {\n detail: {\n menuName: '',\n },\n });\n\n el.menuToggled(event);\n await el.updateComplete;\n\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('toggles user menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"shaneriley\" ?localLinks=${false}></ia-topnav>`,\n );\n\n el.openMenu = 'user';\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('user-menu')?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles signed out menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'login';\n await el.updateComplete;\n\n expect(\n el.shadowRoot\n ?.querySelector('signed-out-dropdown')\n ?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles search menu when search toggle button clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.search-trigger') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('search');\n });\n\n it('toggles user menu when search user avatar clicked', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav\n username=\"shaneriley\"\n screenName=\"shaneriley\"\n ?localLinks=${false}\n ></ia-topnav>`,\n );\n\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.user-menu') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('user');\n });\n\n it('uses localLinks for archive.org logo link', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const logoLink = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.link-home');\n expect(logoLink?.getAttribute('href')).to.match(/\\/\\/archive\\.org/);\n });\n\n describe('sets localLinks properly', async () => {\n it('uses localLinks to archive.org links on common child components', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const componentSelectors = [\n 'primary-nav',\n 'media-slider',\n 'desktop-subnav',\n ];\n componentSelectors.forEach((selector) => {\n const component = el.shadowRoot?.querySelector(selector) as unknown as {\n baseHost: string;\n };\n expect(component?.baseHost).to.equal('https://archive.org');\n });\n });\n\n it('uses localLinks to archive.org links on the signed out dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'signed-out-dropdown',\n ) as SignedOutDropdown;\n expect(signedOutDropdown?.baseHost).to.equal('https://archive.org');\n });\n\n it('uses localLinks to archive.org links on the user dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"foopey\" ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'user-menu',\n ) as UserMenu;\n expect(signedOutDropdown.baseHost).to.equal('https://archive.org');\n });\n });\n\n describe('search slot', () => {\n it('forwards search slot to primary-nav', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n const primaryNav = el.shadowRoot?.querySelector('primary-nav');\n const slot = primaryNav?.querySelector('slot[name=\"search\"]');\n expect(slot).to.exist;\n });\n\n it('does not render search-menu', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('search-menu')).to.not.exist;\n });\n });\n\n describe('slot pass throughs', () => {\n describe('slot for <primary-nav>', () => {\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<IATopNav>(\n html`<ia-topnav\n ?localLinks=${false}\n username=\"boop\"\n screenName=\"somesuperlongscreenname\"\n secondIdentitySlotMode=\"allow\"\n ></ia-topnav>`,\n );\n\n const slot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(slot).to.exist;\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(noSlot).to.not.exist;\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"ia-topnav.test.js","sourceRoot":"","sources":["../../test/ia-topnav.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,kBAAkB,CAAC;AAM1B,sBAAsB;AACtB,MAAM;AACN,qBAAqB;AACrB,uBAAuB;AACvB,mBAAmB;AACnB,yBAAyB;AACzB,mCAAmC;AACnC,SAAS;AACT,yBAAyB;AACzB,2BAA2B;AAC3B,+BAA+B;AAC/B,2BAA2B;AAC3B,+DAA+D;AAC/D,UAAU;AACV,wBAAwB;AACxB,OAAO;AACP,OAAO;AACP,oBAAoB;AACpB,gCAAgC;AAChC,2BAA2B;AAC3B,gCAAgC;AAChC,wBAAwB;AACxB,wDAAwD;AACxD,oBAAoB;AAEpB,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAE,EAAE;IAC1C,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;IAC7D,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,SAAS,CAAC,GAAG,EAAE;IACb,cAAc,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;;QACjE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC;QACtB,MAAM,UAAU,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAC7C,aAAa,CACA,CAAC;QAEhB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE;YAC1C,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,eAAe,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QAE3C,UAAU,CAAC,GAAG,EAAE;;YACd,OAAA,MAAA,MAAA,MAAA,MAAA,EAAE,CAAC,UAAU,0CACT,aAAa,CAAC,aAAa,CAAC,0CAC5B,UAAU,0CAAE,aAAa,CAAC,YAAY,CAAC,0CACvC,aAAa,CAAC,UAAU,CAAC,CAAA;SAAA,CAC9B,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAElD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;;QAChF,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,EAAE,CAAC,UAAU,0CACtB,aAAa,CAAC,aAAa,CAAC,0CAC5B,UAAU,0CAAE,aAAa,CAAC,YAAY,CAAC,0CACvC,UAAU,0CAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC,cAAc,CAAsB,CAAA,CAAC,KAAK,GAAG,OAAO,CAAC;QAC1E,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAEnD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QAEnE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC;QACtB,EAAE,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAChC,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,EAAE,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QAEnE,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;QAC1B,EAAE,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC9B,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEtB,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,KAAK,CAAC;QAExB,EAAE,CAAC,kBAAkB,GAAG,SAAS,CAAC;QAClC,EAAE,CAAC,eAAe,EAAE,CAAC;QAErB,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,KAAK,CAAC;QAExB,EAAE,CAAC,kBAAkB,GAAG,SAAS,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACjD,MAAM,EAAE;gBACN,SAAS;aACV;SACF,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE5B,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,KAAK,CAAC;QAExB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACjD,MAAM,EAAE;gBACN,SAAS;aACV;SACF,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE5B,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QAEnE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC;QACtB,EAAE,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC9B,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE;YAC3C,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;;QAC/D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QAEnE,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CACJ,MAAA,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,aAAa,CAAC,0CAAE,YAAY,CAAC,UAAU,CAAC,CACtE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;;QAC7D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,iDAAiD,KAAK,eAAe,CAC1E,CAAC;QAEF,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC;QACrB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CACJ,MAAA,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,WAAW,CAAC,0CAAE,YAAY,CAAC,UAAU,CAAC,CACpE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;;QACnE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QAEnE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC;QACtB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CACJ,MAAA,MAAA,EAAE,CAAC,UAAU,0CACT,aAAa,CAAC,qBAAqB,CAAC,0CACpC,YAAY,CAAC,UAAU,CAAC,CAC7B,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;;QACrE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,IAAI,CAAA,0BAA0B,CAAC,CAAC;QACnE,CACE,MAAA,MAAA,MAAA,EAAE,CAAC,UAAU,0CACT,aAAa,CAAC,aAAa,CAAC,0CAC5B,UAAU,0CAAE,aAAa,CAAC,iBAAiB,CAChD,CAAA,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;;QACjE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;;;sBAGY,KAAK;oBACP,CAMf,CAAC;QAEF,CACE,MAAA,MAAA,MAAA,EAAE,CAAC,UAAU,0CACT,aAAa,CAAC,aAAa,CAAC,0CAC5B,UAAU,0CAAE,aAAa,CAAC,YAAY,CAC3C,CAAA,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;;QACzD,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2BAA2B,KAAK,eAAe,CACpD,CAAC;QACF,MAAM,QAAQ,GAAG,MAAA,MAAA,MAAA,EAAE,CAAC,UAAU,0CAC1B,aAAa,CAAC,aAAa,CAAC,0CAC5B,UAAU,0CAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAC9C,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2BAA2B,KAAK,eAAe,CACpD,CAAC;YACF,MAAM,kBAAkB,GAAG;gBACzB,aAAa;gBACb,cAAc;gBACd,gBAAgB;gBAChB,aAAa;aACd,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;gBACtC,MAAM,SAAS,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,QAAQ,CAEtD,CAAC;gBACF,MAAM,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;;YAC/E,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2BAA2B,KAAK,eAAe,CACpD,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CACpD,qBAAqB,CACD,CAAC;YACvB,MAAM,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;;YACzE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,6CAA6C,KAAK,eAAe,CACtE,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CACpD,WAAW,CACA,CAAC;YACd,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACtC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;;gBAC1D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;0BACY,KAAK;;;;wBAIP,CACf,CAAC;gBAEF,MAAM,IAAI,GAAG,MAAA,MAAA,EAAE,CAAC,UAAU,0CACtB,aAAa,CAAC,aAAa,CAAC,0CAC5B,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBACtB,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAE5D,EAAE,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBAC/B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAA,MAAA,EAAE,CAAC,UAAU,0CACxB,aAAa,CAAC,aAAa,CAAC,0CAC5B,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n html,\n fixture,\n expect,\n oneEvent,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/ia-topnav';\nimport { IATopNav } from '../src/ia-topnav';\nimport { SearchMenu } from '../src/search-menu';\nimport { SignedOutDropdown } from '../src/signed-out-dropdown';\nimport UserMenu from '../src/user-menu';\n\n// const container = (\n// {\n// username = '',\n// screenName = '',\n// config = {},\n// localLinks = true,\n// secondIdentitySlotMode = '',\n// }: {\n// username?: string;\n// screenName?: string;\n// config?: IATopNavConfig;\n// localLinks: boolean;\n// secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;\n// } = {\n// localLinks: true,\n// },\n// ) =>\n// html`<ia-topnav\n// .screenName=${screenName}\n// username=${username}\n// ?localLinks=${localLinks}\n// .config=${config}\n// .secondIdentitySlotMode=${secondIdentitySlotMode}\n// ></ia-topnav>`;\n\nconst verifyClosed = (instance: IATopNav) => {\n expect(instance.mediaSliderOpen).to.be.false;\n expect(instance.selectedMenuOption).to.equal('');\n};\n\nconst verifyOpened = (instance: IATopNav, mediatype: string) => {\n expect(instance.mediaSliderOpen).to.be.true;\n expect(instance.selectedMenuOption).to.equal(mediatype);\n};\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<ia-topnav>', () => {\n it('assigns a value to \"search in\" from outside event', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const query = 'atari';\n const searchMenu = el.shadowRoot?.querySelector(\n 'search-menu',\n ) as SearchMenu;\n\n const inputEvent = new InputEvent('input');\n Object.defineProperty(inputEvent, 'target', {\n value: { value: query },\n writable: false,\n });\n\n searchMenu?.searchInChanged(inputEvent);\n await el.updateComplete;\n\n expect(el.searchIn).to.equal(query);\n });\n\n it('dispatches an analyticsClick event when trackClick event fired', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() =>\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.hamburger')\n ?.dispatchEvent(clickEvent),\n );\n const response = await oneEvent(el, 'trackClick');\n\n expect(response).to.exist;\n });\n\n it('dispatches an analyticsSubmit event when trackSubmit event fired', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const submitEvent = new Event('submit');\n const form = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('nav-search')\n ?.shadowRoot?.querySelector('form');\n\n form?.addEventListener('submit', (e) => e.preventDefault());\n (form?.querySelector('[name=query]') as HTMLInputElement).value = 'atari';\n setTimeout(() => form?.dispatchEvent(submitEvent));\n const response = await oneEvent(el, 'trackSubmit');\n\n expect(response).to.exist;\n });\n\n it('closes all menus when close-layer clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'texts';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n el.closeMenus();\n await el.updateComplete;\n\n expect(el.mediaSliderOpen).to.be.false;\n expect(el.openMenu).to.equal('');\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('sets media slider to closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.mediaSliderOpen = true;\n el.selectedMenuOption = 'foo';\n el.closeMediaSlider();\n\n verifyClosed(el);\n });\n\n it('toggles media slider visibility and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n el.openMediaSlider();\n\n verifyOpened(el, mediatype);\n });\n\n it('closes media slider if selected menu type is the open menu type', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyClosed(el);\n });\n\n it('opens media slider menu and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyOpened(el, mediatype);\n });\n\n it('closes slider when menu closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'foo';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n\n const event = new CustomEvent('menuToggled', {\n detail: {\n menuName: '',\n },\n });\n\n el.menuToggled(event);\n await el.updateComplete;\n\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('toggles search menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'search';\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('search-menu')?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles user menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"shaneriley\" ?localLinks=${false}></ia-topnav>`,\n );\n\n el.openMenu = 'user';\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('user-menu')?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles signed out menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'login';\n await el.updateComplete;\n\n expect(\n el.shadowRoot\n ?.querySelector('signed-out-dropdown')\n ?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles search menu when search toggle button clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.search-trigger') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('search');\n });\n\n it('toggles user menu when search user avatar clicked', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav\n username=\"shaneriley\"\n screenName=\"shaneriley\"\n ?localLinks=${false}\n ></ia-topnav>`,\n // container({\n // username: 'shaneriley',\n // screenName: 'shaneriley',\n // localLinks: false,\n // }),\n );\n\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.user-menu') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('user');\n });\n\n it('uses localLinks for archive.org logo link', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const logoLink = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.link-home');\n expect(logoLink?.getAttribute('href')).to.match(/\\/\\/archive\\.org/);\n });\n\n describe('sets localLinks properly', async () => {\n it('uses localLinks to archive.org links on common child components', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const componentSelectors = [\n 'primary-nav',\n 'media-slider',\n 'desktop-subnav',\n 'search-menu',\n ];\n componentSelectors.forEach((selector) => {\n const component = el.shadowRoot?.querySelector(selector) as unknown as {\n baseHost: string;\n };\n expect(component?.baseHost).to.equal('https://archive.org');\n });\n });\n\n it('uses localLinks to archive.org links on the signed out dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'signed-out-dropdown',\n ) as SignedOutDropdown;\n expect(signedOutDropdown?.baseHost).to.equal('https://archive.org');\n });\n\n it('uses localLinks to archive.org links on the user dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"foopey\" ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'user-menu',\n ) as UserMenu;\n expect(signedOutDropdown.baseHost).to.equal('https://archive.org');\n });\n });\n\n describe('slot pass throughs', () => {\n describe('slot for <primary-nav>', () => {\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<IATopNav>(\n html`<ia-topnav\n ?localLinks=${false}\n username=\"boop\"\n screenName=\"somesuperlongscreenname\"\n secondIdentitySlotMode=\"allow\"\n ></ia-topnav>`,\n );\n\n const slot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot');\n expect(slot).to.exist;\n expect(slot?.getAttribute('name')).to.equal('opt-sec-logo');\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot');\n expect(noSlot).to.not.exist;\n });\n });\n });\n});\n"]}
@@ -20,7 +20,7 @@ describe('<primary-nav>', () => {
20
20
  }));
21
21
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('login-button')).to.not.be.undefined;
22
22
  });
23
- it('does not render search trigger or search slot if hideSearch true', async () => {
23
+ it('does not render search menu toggle and search form if hideSearch true', async () => {
24
24
  var _a, _b;
25
25
  const el = await fixture(component({
26
26
  baseHost: 'archive.org',
@@ -29,36 +29,7 @@ describe('<primary-nav>', () => {
29
29
  hideSearch: true,
30
30
  }));
31
31
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-trigger')).to.equal(null);
32
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.search-container')).to.not.exist;
33
- });
34
- it('renders search slot container', async () => {
35
- var _a, _b;
36
- const el = await fixture(component({
37
- baseHost: 'archive.org',
38
- username: 'testuser',
39
- screenName: 'testuser',
40
- }));
41
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-container')).to.exist;
42
- const slot = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="search"]');
43
- expect(slot).to.exist;
44
- });
45
- it('renders search trigger button for mobile toggle', async () => {
46
- var _a;
47
- const el = await fixture(component({
48
- baseHost: 'archive.org',
49
- username: 'testuser',
50
- screenName: 'testuser',
51
- }));
52
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-trigger')).to.exist;
53
- });
54
- it('does not render nav-search', async () => {
55
- var _a;
56
- const el = await fixture(component({
57
- baseHost: 'archive.org',
58
- username: 'testuser',
59
- screenName: 'testuser',
60
- }));
61
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('nav-search')).to.not.exist;
32
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('nav-search')).to.equal(null);
62
33
  });
63
34
  it('opens a slot with `secondIdentitySlotMode`', async () => {
64
35
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"primary-nav.test.js","sourceRoot":"","sources":["../../test/primary-nav.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n fixture,\n expect,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/primary-nav';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from '../src/models';\nimport { PrimaryNav } from '../src/primary-nav';\n\nconst component = ({\n baseHost = 'archive.org',\n username = '',\n screenName = '',\n hideSearch = false,\n config = {},\n secondIdentitySlotMode = 'allow',\n}: {\n baseHost?: string;\n username?: string;\n screenName?: string;\n hideSearch?: boolean;\n config?: IATopNavConfig;\n secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;\n}) =>\n html` <primary-nav\n .baseHost=${baseHost}\n .username=${username}\n .screenName=${screenName}\n ?hideSearch=${hideSearch}\n .config=${config}\n .secondIdentitySlotMode=${secondIdentitySlotMode}\n ></primary-nav>`;\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<primary-nav>', () => {\n it('renders the login link when no username present', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: '',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('login-button')).to.not.be.undefined;\n });\n\n it('does not render search trigger or search slot if hideSearch true', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'shaneriley',\n screenName: 'shaneriley',\n hideSearch: true,\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-trigger')).to.equal(null);\n expect(el.shadowRoot?.querySelector('.search-container')).to.not.exist;\n });\n\n it('renders search slot container', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-container')).to.exist;\n\n const slot = el.shadowRoot?.querySelector<HTMLSlotElement>(\n 'slot[name=\"search\"]',\n );\n expect(slot).to.exist;\n });\n\n it('renders search trigger button for mobile toggle', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-trigger')).to.exist;\n });\n\n it('does not render nav-search', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('nav-search')).to.not.exist;\n });\n\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'boop',\n screenName: 'somesuperlongscreenname',\n secondIdentitySlotMode: 'allow',\n }),\n );\n\n const brandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(brandingBlock?.getAttribute('class')).to.contain(\n 'branding second-logo',\n );\n\n const slot = brandingBlock?.querySelector('slot');\n expect(slot).to.exist;\n expect(slot?.getAttribute('name')).to.equal('opt-sec-logo');\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlotBrandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(noSlotBrandingBlock?.getAttribute('class')).to.contain('branding');\n\n const noSlot = noSlotBrandingBlock?.querySelector('slot');\n expect(noSlot).to.not.exist;\n });\n});\n"]}
1
+ {"version":3,"file":"primary-nav.test.js","sourceRoot":"","sources":["../../test/primary-nav.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,oBAAoB,CAAC;AAI5B,MAAM,SAAS,GAAG,CAAC,EACjB,QAAQ,GAAG,aAAa,EACxB,QAAQ,GAAG,EAAE,EACb,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,EAAE,EACX,sBAAsB,GAAG,OAAO,GAQjC,EAAE,EAAE,CACH,IAAI,CAAA;gBACU,QAAQ;gBACR,QAAQ;kBACN,UAAU;kBACV,UAAU;cACd,MAAM;8BACU,sBAAsB;kBAClC,CAAC;AAEnB,SAAS,CAAC,GAAG,EAAE;IACb,cAAc,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;;QAC/D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,SAAS,CAAC;YACR,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,EAAE;SACb,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;;QACrF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,SAAS,CAAC;YACR,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,IAAI;SACjB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;;QAC1D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,SAAS,CAAC;YACR,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,yBAAyB;YACrC,sBAAsB,EAAE,OAAO;SAChC,CAAC,CACH,CAAC;QAEF,MAAM,aAAa,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QACnE,MAAM,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CACrD,sBAAsB,CACvB,CAAC;QAEF,MAAM,IAAI,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACtB,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAE5D,EAAE,CAAC,sBAAsB,GAAG,EAAE,CAAC;QAC/B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,mBAAmB,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QACzE,MAAM,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n html,\n fixture,\n expect,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/primary-nav';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from '../src/models';\nimport { PrimaryNav } from '../src/primary-nav';\n\nconst component = ({\n baseHost = 'archive.org',\n username = '',\n screenName = '',\n hideSearch = false,\n config = {},\n secondIdentitySlotMode = 'allow',\n}: {\n baseHost?: string;\n username?: string;\n screenName?: string;\n hideSearch?: boolean;\n config?: IATopNavConfig;\n secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;\n}) =>\n html` <primary-nav\n .baseHost=${baseHost}\n .username=${username}\n .screenName=${screenName}\n ?hideSearch=${hideSearch}\n .config=${config}\n .secondIdentitySlotMode=${secondIdentitySlotMode}\n ></primary-nav>`;\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<primary-nav>', () => {\n it('renders the login link when no username present', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: '',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('login-button')).to.not.be.undefined;\n });\n\n it('does not render search menu toggle and search form if hideSearch true', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'shaneriley',\n screenName: 'shaneriley',\n hideSearch: true,\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-trigger')).to.equal(null);\n expect(el.shadowRoot?.querySelector('nav-search')).to.equal(null);\n });\n\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'boop',\n screenName: 'somesuperlongscreenname',\n secondIdentitySlotMode: 'allow',\n }),\n );\n\n const brandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(brandingBlock?.getAttribute('class')).to.contain(\n 'branding second-logo',\n );\n\n const slot = brandingBlock?.querySelector('slot');\n expect(slot).to.exist;\n expect(slot?.getAttribute('name')).to.equal('opt-sec-logo');\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlotBrandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(noSlotBrandingBlock?.getAttribute('class')).to.contain('branding');\n\n const noSlot = noSlotBrandingBlock?.querySelector('slot');\n expect(noSlot).to.not.exist;\n });\n});\n"]}
package/eslint.config.mjs CHANGED
@@ -1,53 +1,53 @@
1
- import typescriptEslint from '@typescript-eslint/eslint-plugin';
2
- import html from 'eslint-plugin-html';
3
- import tsParser from '@typescript-eslint/parser';
4
- import path from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import js from '@eslint/js';
7
- import { FlatCompat } from '@eslint/eslintrc';
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = path.dirname(__filename);
11
- const compat = new FlatCompat({
12
- baseDirectory: __dirname,
13
- recommendedConfig: js.configs.recommended,
14
- allConfig: js.configs.all,
15
- });
16
-
17
- export default [
18
- ...compat.extends('plugin:@typescript-eslint/recommended'),
19
- {
20
- plugins: {
21
- '@typescript-eslint': typescriptEslint,
22
- html,
23
- },
24
-
25
- languageOptions: {
26
- parser: tsParser,
27
- },
28
-
29
- settings: {
30
- 'import/resolver': {
31
- node: {
32
- extensions: ['.ts', '.tsx'],
33
- moduleDirectory: ['node_modules', 'src', 'demo'],
34
- },
35
- },
36
- },
37
-
38
- rules: {
39
- '@typescript-eslint/no-unsafe-function-type': 'warn',
40
- '@typescript-eslint/no-unused-vars': 'warn',
41
- '@typescript-eslint/no-explicit-any': 'warn',
42
- },
43
- },
44
- {
45
- ignores: ['**/*.js', '**/*.mjs'],
46
- },
47
- {
48
- files: ['**/*.test.ts'],
49
- rules: {
50
- '@typescript-eslint/no-unused-expressions': 'off',
51
- },
52
- },
53
- ];
1
+ import typescriptEslint from '@typescript-eslint/eslint-plugin';
2
+ import html from 'eslint-plugin-html';
3
+ import tsParser from '@typescript-eslint/parser';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import js from '@eslint/js';
7
+ import { FlatCompat } from '@eslint/eslintrc';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const compat = new FlatCompat({
12
+ baseDirectory: __dirname,
13
+ recommendedConfig: js.configs.recommended,
14
+ allConfig: js.configs.all,
15
+ });
16
+
17
+ export default [
18
+ ...compat.extends('plugin:@typescript-eslint/recommended'),
19
+ {
20
+ plugins: {
21
+ '@typescript-eslint': typescriptEslint,
22
+ html,
23
+ },
24
+
25
+ languageOptions: {
26
+ parser: tsParser,
27
+ },
28
+
29
+ settings: {
30
+ 'import/resolver': {
31
+ node: {
32
+ extensions: ['.ts', '.tsx'],
33
+ moduleDirectory: ['node_modules', 'src', 'demo'],
34
+ },
35
+ },
36
+ },
37
+
38
+ rules: {
39
+ '@typescript-eslint/no-unsafe-function-type': 'warn',
40
+ '@typescript-eslint/no-unused-vars': 'warn',
41
+ '@typescript-eslint/no-explicit-any': 'warn',
42
+ },
43
+ },
44
+ {
45
+ ignores: ['**/*.js', '**/*.mjs'],
46
+ },
47
+ {
48
+ files: ['**/*.test.ts'],
49
+ rules: {
50
+ '@typescript-eslint/no-unused-expressions': 'off',
51
+ },
52
+ },
53
+ ];
package/package.json CHANGED
@@ -1,72 +1,72 @@
1
- {
2
- "name": "@internetarchive/ia-topnav",
3
- "version": "1.4.1-alpha-webdev8259.10",
4
- "description": "Top nav for Internet Archive",
5
- "license": "AGPL-3.0-only",
6
- "main": "dist/index.js",
7
- "module": "dist/index.js",
8
- "types": "dist/index.d.ts",
9
- "type": "module",
10
- "publishConfig": {
11
- "access": "public"
12
- },
13
- "scripts": {
14
- "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
15
- "prepare": "rimraf dist && tsc && husky install",
16
- "build": "tsc",
17
- "lint": "eslint . && prettier \"**/*.ts\" --check",
18
- "format": "eslint . --fix && prettier \"**/*.ts\" --write",
19
- "circular": "madge --circular --extensions ts .",
20
- "test": "tsc && npm run lint && npm run circular && wtr --coverage",
21
- "test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
22
- "ghpages:build": "rimraf ghpages && npm run prepare && vite build",
23
- "ghpages:publish": "npm run ghpages:prepare -e $(git branch --show-current)",
24
- "ghpages:prepare": "npm run ghpages:build && touch ghpages/.nojekyll && npm run ghpages:generate",
25
- "ghpages:generate": "gh-pages -t -d ghpages -m \"Build for $(git log --pretty=format:\"%h %an %ai %s\" -n1) [skip ci]\""
26
- },
27
- "dependencies": {
28
- "@internetarchive/ia-styles": "^1.0.0",
29
- "@internetarchive/ia-wayback-search": "^1.0.4",
30
- "lit": "^2.8.0"
31
- },
32
- "devDependencies": {
33
- "@open-wc/eslint-config": "^12.0.3",
34
- "@open-wc/testing": "^4.0.0",
35
- "@types/mocha": "^10.0.10",
36
- "@typescript-eslint/eslint-plugin": "^8.19.1",
37
- "@typescript-eslint/parser": "^8.19.1",
38
- "@web/dev-server": "^0.4.6",
39
- "@web/test-runner": "^0.20.0",
40
- "concurrently": "^9.1.2",
41
- "eslint": "^9.24.0",
42
- "eslint-config-prettier": "^10.1.1",
43
- "eslint-plugin-html": "^8.1.2",
44
- "eslint-plugin-import": "^2.31.0",
45
- "eslint-plugin-lit": "^2.0.0",
46
- "eslint-plugin-lit-a11y": "^4.1.4",
47
- "eslint-plugin-no-only-tests": "^3.3.0",
48
- "eslint-plugin-wc": "^3.0.0",
49
- "gh-pages": "^6.3.0",
50
- "husky": "^9.1.7",
51
- "madge": "^8.0.0",
52
- "prettier": "^3.4.2",
53
- "rimraf": "^6.0.1",
54
- "sinon": "^20.0.0",
55
- "ts-lit-plugin": "^2.0.2",
56
- "tslib": "^2.8.1",
57
- "typescript": "^5.7.2",
58
- "vite": "^6.0.7"
59
- },
60
- "husky": {
61
- "hooks": {
62
- "pre-commit": "lint-staged"
63
- }
64
- },
65
- "lint-staged": {
66
- "*.ts": [
67
- "eslint --fix",
68
- "prettier --write",
69
- "git add"
70
- ]
71
- }
72
- }
1
+ {
2
+ "name": "@internetarchive/ia-topnav",
3
+ "version": "1.4.1",
4
+ "description": "Top nav for Internet Archive",
5
+ "license": "AGPL-3.0-only",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "type": "module",
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "scripts": {
14
+ "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
15
+ "prepare": "rimraf dist && tsc && husky install",
16
+ "build": "tsc",
17
+ "lint": "eslint . && prettier \"**/*.ts\" --check",
18
+ "format": "eslint . --fix && prettier \"**/*.ts\" --write",
19
+ "circular": "madge --circular --extensions ts .",
20
+ "test": "tsc && npm run lint && npm run circular && wtr --coverage",
21
+ "test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
22
+ "ghpages:build": "rimraf ghpages && npm run prepare && vite build",
23
+ "ghpages:publish": "npm run ghpages:prepare -e $(git branch --show-current)",
24
+ "ghpages:prepare": "npm run ghpages:build && touch ghpages/.nojekyll && npm run ghpages:generate",
25
+ "ghpages:generate": "gh-pages -t -d ghpages -m \"Build for $(git log --pretty=format:\"%h %an %ai %s\" -n1) [skip ci]\""
26
+ },
27
+ "dependencies": {
28
+ "@internetarchive/ia-styles": "^1.0.0",
29
+ "@internetarchive/ia-wayback-search": "^1.0.4",
30
+ "lit": "^2.8.0"
31
+ },
32
+ "devDependencies": {
33
+ "@open-wc/eslint-config": "^12.0.3",
34
+ "@open-wc/testing": "^4.0.0",
35
+ "@types/mocha": "^10.0.10",
36
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
37
+ "@typescript-eslint/parser": "^8.19.1",
38
+ "@web/dev-server": "^0.4.6",
39
+ "@web/test-runner": "^0.20.0",
40
+ "concurrently": "^9.1.2",
41
+ "eslint": "^9.24.0",
42
+ "eslint-config-prettier": "^10.1.1",
43
+ "eslint-plugin-html": "^8.1.2",
44
+ "eslint-plugin-import": "^2.31.0",
45
+ "eslint-plugin-lit": "^2.0.0",
46
+ "eslint-plugin-lit-a11y": "^4.1.4",
47
+ "eslint-plugin-no-only-tests": "^3.3.0",
48
+ "eslint-plugin-wc": "^3.0.0",
49
+ "gh-pages": "^6.3.0",
50
+ "husky": "^9.1.7",
51
+ "madge": "^8.0.0",
52
+ "prettier": "^3.4.2",
53
+ "rimraf": "^6.0.1",
54
+ "sinon": "^20.0.0",
55
+ "ts-lit-plugin": "^2.0.2",
56
+ "tslib": "^2.8.1",
57
+ "typescript": "^5.7.2",
58
+ "vite": "^6.0.7"
59
+ },
60
+ "husky": {
61
+ "hooks": {
62
+ "pre-commit": "lint-staged"
63
+ }
64
+ },
65
+ "lint-staged": {
66
+ "*.ts": [
67
+ "eslint --fix",
68
+ "prettier --write",
69
+ "git add"
70
+ ]
71
+ }
72
+ }
@@ -1,9 +1,9 @@
1
- /**
2
- * @see https://prettier.io/docs/configuration
3
- * @type {import("prettier").Config}
4
- */
5
- const config = {
6
- singleQuote: true,
7
- };
8
-
9
- export default config;
1
+ /**
2
+ * @see https://prettier.io/docs/configuration
3
+ * @type {import("prettier").Config}
4
+ */
5
+ const config = {
6
+ singleQuote: true,
7
+ };
8
+
9
+ export default config;
package/src/data/menus.ts CHANGED
@@ -638,7 +638,7 @@ export function buildTopNavMenus(
638
638
  ],
639
639
  signedOut: [
640
640
  {
641
- url: `${baseHost}/account/signup`,
641
+ url: `${baseHost}/signup`,
642
642
  title: 'Sign up for free',
643
643
  analyticsEvent: 'AvatarMenu-Signup',
644
644
  },