@internetarchive/ia-topnav 1.4.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +147 -147
- package/demo/index.html +28 -28
- package/dist/src/data/menus.js +0 -2
- package/dist/src/data/menus.js.map +1 -1
- package/dist/src/ia-topnav.d.ts +7 -10
- package/dist/src/ia-topnav.js +95 -133
- package/dist/src/ia-topnav.js.map +1 -1
- package/dist/src/login-button.js +17 -17
- package/dist/src/login-button.js.map +1 -1
- package/dist/src/models.d.ts +0 -4
- package/dist/src/models.js.map +1 -1
- package/dist/src/primary-nav.d.ts +5 -4
- package/dist/src/primary-nav.js +98 -119
- package/dist/src/primary-nav.js.map +1 -1
- package/dist/src/styles/ia-topnav.js +82 -87
- package/dist/src/styles/ia-topnav.js.map +1 -1
- package/dist/src/styles/primary-nav.js +353 -308
- package/dist/src/styles/primary-nav.js.map +1 -1
- package/dist/test/ia-topnav.test.js +27 -69
- package/dist/test/ia-topnav.test.js.map +1 -1
- package/dist/test/primary-nav.test.js +38 -9
- package/dist/test/primary-nav.test.js.map +1 -1
- package/eslint.config.mjs +53 -53
- package/package.json +72 -72
- package/prettier.config.js +9 -9
- package/src/data/menus.ts +650 -652
- package/src/ia-topnav.ts +318 -366
- package/src/login-button.ts +78 -78
- package/src/models.ts +58 -63
- package/src/primary-nav.ts +277 -296
- package/src/styles/ia-topnav.ts +85 -90
- package/src/styles/primary-nav.ts +356 -311
- package/ssl/server.key +28 -28
- package/test/ia-topnav.test.ts +282 -343
- package/test/primary-nav.test.ts +135 -94
- package/tsconfig.json +31 -31
- package/web-dev-server.config.mjs +32 -32
- package/web-test-runner.config.mjs +41 -41
- package/dist/src/lib/location-handler.d.ts +0 -1
- package/dist/src/lib/location-handler.js +0 -5
- package/dist/src/lib/location-handler.js.map +0 -1
- package/dist/src/nav-search.d.ts +0 -19
- package/dist/src/nav-search.js +0 -127
- package/dist/src/nav-search.js.map +0 -1
- package/dist/src/search-menu.d.ts +0 -20
- package/dist/src/search-menu.js +0 -162
- package/dist/src/search-menu.js.map +0 -1
- package/dist/src/styles/nav-search.d.ts +0 -2
- package/dist/src/styles/nav-search.js +0 -136
- package/dist/src/styles/nav-search.js.map +0 -1
- package/dist/src/styles/search-menu.d.ts +0 -2
- package/dist/src/styles/search-menu.js +0 -118
- package/dist/src/styles/search-menu.js.map +0 -1
- package/dist/test/nav-search.test.d.ts +0 -1
- package/dist/test/nav-search.test.js +0 -47
- package/dist/test/nav-search.test.js.map +0 -1
- package/dist/test/search-menu.test.d.ts +0 -1
- package/dist/test/search-menu.test.js +0 -42
- package/dist/test/search-menu.test.js.map +0 -1
- package/src/lib/location-handler.ts +0 -5
- package/src/nav-search.ts +0 -117
- package/src/search-menu.ts +0 -156
- package/src/styles/nav-search.ts +0 -136
- package/src/styles/search-menu.ts +0 -118
- package/test/nav-search.test.ts +0 -70
- package/test/search-menu.test.ts +0 -58
package/dist/src/search-menu.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { html } from 'lit';
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
-
import TrackedElement from './tracked-element';
|
|
5
|
-
import searchMenuCSS from './styles/search-menu';
|
|
6
|
-
import formatUrl from './lib/format-url';
|
|
7
|
-
import { defaultTopNavConfig } from './data/menus';
|
|
8
|
-
let SearchMenu = class SearchMenu extends TrackedElement {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.baseHost = '';
|
|
12
|
-
this.config = defaultTopNavConfig;
|
|
13
|
-
this.hideSearch = false;
|
|
14
|
-
this.openMenu = '';
|
|
15
|
-
this.searchMenuOpen = false;
|
|
16
|
-
this.searchMenuAnimate = false;
|
|
17
|
-
this.selectedSearchType = '';
|
|
18
|
-
}
|
|
19
|
-
static get styles() {
|
|
20
|
-
return searchMenuCSS;
|
|
21
|
-
}
|
|
22
|
-
firstUpdated() {
|
|
23
|
-
var _a;
|
|
24
|
-
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.addEventListener('keydown', (e) => this.handleKeyDownEvent(e));
|
|
25
|
-
}
|
|
26
|
-
disconnectedCallback() {
|
|
27
|
-
var _a;
|
|
28
|
-
// Clean up event listener when the element is removed
|
|
29
|
-
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', (e) => this.handleKeyDownEvent(e));
|
|
30
|
-
}
|
|
31
|
-
handleKeyDownEvent(e) {
|
|
32
|
-
if (!this.shadowRoot)
|
|
33
|
-
return;
|
|
34
|
-
const searchTypes = this.shadowRoot.querySelectorAll('.search-menu-inner label input[type=radio]');
|
|
35
|
-
const length = searchTypes.length - 1;
|
|
36
|
-
if (!length)
|
|
37
|
-
return;
|
|
38
|
-
const searchTypeHandler = (index) => {
|
|
39
|
-
e.preventDefault();
|
|
40
|
-
const searchType = searchTypes[index];
|
|
41
|
-
searchType.checked = true;
|
|
42
|
-
searchType.dispatchEvent(new Event('change'));
|
|
43
|
-
searchType.focus();
|
|
44
|
-
};
|
|
45
|
-
if (e.key === 'Home') {
|
|
46
|
-
searchTypeHandler(0);
|
|
47
|
-
}
|
|
48
|
-
else if (e.key === 'End') {
|
|
49
|
-
searchTypeHandler(length);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
selectSearchType(e) {
|
|
53
|
-
const target = e.target;
|
|
54
|
-
this.selectedSearchType = target.value;
|
|
55
|
-
}
|
|
56
|
-
searchInChanged(e) {
|
|
57
|
-
const target = e.target;
|
|
58
|
-
this.dispatchEvent(new CustomEvent('searchInChanged', {
|
|
59
|
-
detail: {
|
|
60
|
-
searchIn: target.value,
|
|
61
|
-
},
|
|
62
|
-
}));
|
|
63
|
-
}
|
|
64
|
-
get searchTypesTemplate() {
|
|
65
|
-
const searchTypes = [
|
|
66
|
-
{
|
|
67
|
-
label: 'metadata',
|
|
68
|
-
value: '',
|
|
69
|
-
isDefault: true,
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
label: 'text contents',
|
|
73
|
-
value: 'TXT',
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
label: 'TV news captions',
|
|
77
|
-
value: 'TV',
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
label: 'radio transcripts',
|
|
81
|
-
value: 'RADIO',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
label: 'archived web sites',
|
|
85
|
-
value: 'WEB',
|
|
86
|
-
},
|
|
87
|
-
].map(({ value, label, isDefault }) => {
|
|
88
|
-
if (this.config.hiddenSearchOptions &&
|
|
89
|
-
this.config.hiddenSearchOptions.includes(value)) {
|
|
90
|
-
return html ``;
|
|
91
|
-
}
|
|
92
|
-
return html `
|
|
93
|
-
<label @click="${this.selectSearchType}">
|
|
94
|
-
<input
|
|
95
|
-
form="nav-search"
|
|
96
|
-
type="radio"
|
|
97
|
-
name="sin"
|
|
98
|
-
value="${value}"
|
|
99
|
-
?checked=${isDefault}
|
|
100
|
-
?disabled=${!this.openMenu}
|
|
101
|
-
@change=${this.searchInChanged}
|
|
102
|
-
/>
|
|
103
|
-
Search ${label}
|
|
104
|
-
</label>
|
|
105
|
-
`;
|
|
106
|
-
});
|
|
107
|
-
return searchTypes;
|
|
108
|
-
}
|
|
109
|
-
get menuClass() {
|
|
110
|
-
return this.openMenu === 'search' ? 'open' : 'closed';
|
|
111
|
-
}
|
|
112
|
-
render() {
|
|
113
|
-
if (this.hideSearch) {
|
|
114
|
-
return html ``;
|
|
115
|
-
}
|
|
116
|
-
return html `
|
|
117
|
-
<div class="menu-wrapper">
|
|
118
|
-
<div
|
|
119
|
-
class="search-menu-inner tx-slide ${this.menuClass}"
|
|
120
|
-
aria-hidden="${!this.openMenu}"
|
|
121
|
-
>
|
|
122
|
-
${this.searchTypesTemplate}
|
|
123
|
-
<a
|
|
124
|
-
class="advanced-search"
|
|
125
|
-
href="${formatUrl('/advancedsearch.php', this.baseHost)}"
|
|
126
|
-
@click=${this.trackClick}
|
|
127
|
-
tabindex=${this.openMenu ? '0' : '-1'}
|
|
128
|
-
data-event-click-tracking="${this.config
|
|
129
|
-
.eventCategory}|NavAdvancedSearch"
|
|
130
|
-
>Advanced Search</a
|
|
131
|
-
>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
`;
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
__decorate([
|
|
138
|
-
property({ type: String })
|
|
139
|
-
], SearchMenu.prototype, "baseHost", void 0);
|
|
140
|
-
__decorate([
|
|
141
|
-
property({ type: Object })
|
|
142
|
-
], SearchMenu.prototype, "config", void 0);
|
|
143
|
-
__decorate([
|
|
144
|
-
property({ type: Boolean })
|
|
145
|
-
], SearchMenu.prototype, "hideSearch", void 0);
|
|
146
|
-
__decorate([
|
|
147
|
-
property({ type: String })
|
|
148
|
-
], SearchMenu.prototype, "openMenu", void 0);
|
|
149
|
-
__decorate([
|
|
150
|
-
property({ type: Boolean })
|
|
151
|
-
], SearchMenu.prototype, "searchMenuOpen", void 0);
|
|
152
|
-
__decorate([
|
|
153
|
-
property({ type: Boolean })
|
|
154
|
-
], SearchMenu.prototype, "searchMenuAnimate", void 0);
|
|
155
|
-
__decorate([
|
|
156
|
-
property({ type: String })
|
|
157
|
-
], SearchMenu.prototype, "selectedSearchType", void 0);
|
|
158
|
-
SearchMenu = __decorate([
|
|
159
|
-
customElement('search-menu')
|
|
160
|
-
], SearchMenu);
|
|
161
|
-
export { SearchMenu };
|
|
162
|
-
//# sourceMappingURL=search-menu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-menu.js","sourceRoot":"","sources":["../../src/search-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport TrackedElement from './tracked-element';\nimport searchMenuCSS from './styles/search-menu';\nimport formatUrl from './lib/format-url';\nimport { IATopNavConfig } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('search-menu')\nexport class SearchMenu extends TrackedElement {\n @property({ type: String }) baseHost = '';\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: Boolean }) hideSearch = false;\n @property({ type: String }) openMenu = '';\n @property({ type: Boolean }) searchMenuOpen = false;\n @property({ type: Boolean }) searchMenuAnimate = false;\n @property({ type: String }) selectedSearchType = '';\n\n static get styles() {\n return searchMenuCSS;\n }\n\n firstUpdated() {\n this.shadowRoot?.addEventListener('keydown', (e) =>\n this.handleKeyDownEvent(e as KeyboardEvent),\n );\n }\n\n disconnectedCallback() {\n // Clean up event listener when the element is removed\n this.shadowRoot?.removeEventListener('keydown', (e) =>\n this.handleKeyDownEvent(e as KeyboardEvent),\n );\n }\n\n private handleKeyDownEvent(e: KeyboardEvent) {\n if (!this.shadowRoot) return;\n\n const searchTypes = this.shadowRoot.querySelectorAll(\n '.search-menu-inner label input[type=radio]',\n ) as NodeListOf<HTMLInputElement>;\n\n const length = searchTypes.length - 1;\n if (!length) return;\n\n const searchTypeHandler = (index: number) => {\n e.preventDefault();\n const searchType = searchTypes[index];\n searchType.checked = true;\n searchType.dispatchEvent(new Event('change'));\n searchType.focus();\n };\n\n if (e.key === 'Home') {\n searchTypeHandler(0);\n } else if (e.key === 'End') {\n searchTypeHandler(length);\n }\n }\n\n selectSearchType(e: Event) {\n const target = e.target as HTMLInputElement;\n this.selectedSearchType = target.value;\n }\n\n searchInChanged(e: InputEvent) {\n const target = e.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('searchInChanged', {\n detail: {\n searchIn: target.value,\n },\n }),\n );\n }\n\n get searchTypesTemplate() {\n const searchTypes = [\n {\n label: 'metadata',\n value: '',\n isDefault: true,\n },\n {\n label: 'text contents',\n value: 'TXT',\n },\n {\n label: 'TV news captions',\n value: 'TV',\n },\n {\n label: 'radio transcripts',\n value: 'RADIO',\n },\n {\n label: 'archived web sites',\n value: 'WEB',\n },\n ].map(({ value, label, isDefault }) => {\n if (\n this.config.hiddenSearchOptions &&\n this.config.hiddenSearchOptions.includes(value)\n ) {\n return html``;\n }\n return html`\n <label @click=\"${this.selectSearchType}\">\n <input\n form=\"nav-search\"\n type=\"radio\"\n name=\"sin\"\n value=\"${value}\"\n ?checked=${isDefault}\n ?disabled=${!this.openMenu}\n @change=${this.searchInChanged}\n />\n Search ${label}\n </label>\n `;\n });\n\n return searchTypes;\n }\n\n get menuClass() {\n return this.openMenu === 'search' ? 'open' : 'closed';\n }\n\n render() {\n if (this.hideSearch) {\n return html``;\n }\n\n return html`\n <div class=\"menu-wrapper\">\n <div\n class=\"search-menu-inner tx-slide ${this.menuClass}\"\n aria-hidden=\"${!this.openMenu}\"\n >\n ${this.searchTypesTemplate}\n <a\n class=\"advanced-search\"\n href=\"${formatUrl('/advancedsearch.php', this.baseHost)}\"\n @click=${this.trackClick}\n tabindex=${this.openMenu ? '0' : '-1'}\n data-event-click-tracking=\"${this.config\n .eventCategory}|NavAdvancedSearch\"\n >Advanced Search</a\n >\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { css } from 'lit';
|
|
2
|
-
export default css `
|
|
3
|
-
input[type='text'] {
|
|
4
|
-
color: var(--grey13);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
input:focus {
|
|
8
|
-
outline: none;
|
|
9
|
-
}
|
|
10
|
-
button {
|
|
11
|
-
background: none;
|
|
12
|
-
color: inherit;
|
|
13
|
-
border: none;
|
|
14
|
-
font: inherit;
|
|
15
|
-
cursor: pointer;
|
|
16
|
-
}
|
|
17
|
-
button:focus {
|
|
18
|
-
outline: none;
|
|
19
|
-
}
|
|
20
|
-
.search {
|
|
21
|
-
padding-top: 0;
|
|
22
|
-
margin-right: 0.5rem;
|
|
23
|
-
}
|
|
24
|
-
.search svg {
|
|
25
|
-
position: relative;
|
|
26
|
-
fill: var(--activeSearchColor);
|
|
27
|
-
}
|
|
28
|
-
.search-activated {
|
|
29
|
-
display: -webkit-box;
|
|
30
|
-
display: -ms-flexbox;
|
|
31
|
-
display: flex;
|
|
32
|
-
position: absolute;
|
|
33
|
-
top: 0;
|
|
34
|
-
right: 4rem;
|
|
35
|
-
bottom: 0;
|
|
36
|
-
left: 4rem;
|
|
37
|
-
z-index: 3;
|
|
38
|
-
padding: 0.5rem 0.2rem;
|
|
39
|
-
border-radius: 1rem 1rem 0 0;
|
|
40
|
-
background: var(--searchActiveBg);
|
|
41
|
-
}
|
|
42
|
-
.search-inactive {
|
|
43
|
-
display: none;
|
|
44
|
-
}
|
|
45
|
-
.search-activated .highlight,
|
|
46
|
-
.search-activated .search {
|
|
47
|
-
background: var(--searchActiveInputBg);
|
|
48
|
-
border-radius: 0.5rem;
|
|
49
|
-
}
|
|
50
|
-
.search-activated .highlight {
|
|
51
|
-
display: -webkit-box;
|
|
52
|
-
display: -ms-flexbox;
|
|
53
|
-
display: flex;
|
|
54
|
-
width: 100%;
|
|
55
|
-
margin: 0 0.5rem;
|
|
56
|
-
}
|
|
57
|
-
.search-activated .search {
|
|
58
|
-
height: 100%;
|
|
59
|
-
padding: 0;
|
|
60
|
-
margin-right: 0;
|
|
61
|
-
-ms-flex-item-align: center;
|
|
62
|
-
-ms-grid-row-align: center;
|
|
63
|
-
align-self: center;
|
|
64
|
-
}
|
|
65
|
-
.search-activated .search svg {
|
|
66
|
-
height: 3rem;
|
|
67
|
-
width: 3rem;
|
|
68
|
-
}
|
|
69
|
-
.search-activated .search-field {
|
|
70
|
-
width: 100%;
|
|
71
|
-
height: 100%;
|
|
72
|
-
box-sizing: border-box;
|
|
73
|
-
padding-left: 1rem;
|
|
74
|
-
border-radius: 0.5rem;
|
|
75
|
-
border: none;
|
|
76
|
-
font-size: 1.6rem;
|
|
77
|
-
text-align: center;
|
|
78
|
-
}
|
|
79
|
-
.search-activated .search-field:focus {
|
|
80
|
-
outline: none;
|
|
81
|
-
}
|
|
82
|
-
@keyframes fade-in {
|
|
83
|
-
0% {
|
|
84
|
-
opacity: 0;
|
|
85
|
-
}
|
|
86
|
-
100% {
|
|
87
|
-
opacity: 1;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
.fade-in {
|
|
91
|
-
animation: fade-in 0.2s forwards;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
@media (min-width: 890px) {
|
|
95
|
-
.search svg {
|
|
96
|
-
display: inline;
|
|
97
|
-
width: 2.8rem;
|
|
98
|
-
height: 2.8rem;
|
|
99
|
-
vertical-align: -14px;
|
|
100
|
-
}
|
|
101
|
-
.search path {
|
|
102
|
-
fill: var(--desktopSearchIconFill);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.search-inactive,
|
|
106
|
-
.search-activated {
|
|
107
|
-
display: block;
|
|
108
|
-
position: static;
|
|
109
|
-
padding: 1.1rem 0.2rem;
|
|
110
|
-
background: transparent;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.search-activated .highlight {
|
|
114
|
-
width: 13rem;
|
|
115
|
-
height: 2.8rem;
|
|
116
|
-
-webkit-box-orient: horizontal;
|
|
117
|
-
-webkit-box-direction: reverse;
|
|
118
|
-
-ms-flex-direction: row-reverse;
|
|
119
|
-
flex-direction: row-reverse;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.search-activated .search-field {
|
|
123
|
-
width: calc(100% - 28px);
|
|
124
|
-
height: 100%;
|
|
125
|
-
padding-left: 0;
|
|
126
|
-
font-size: 1.4rem;
|
|
127
|
-
text-align: left;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.search-activated .search svg {
|
|
131
|
-
width: 2.8rem;
|
|
132
|
-
height: 2.8rem;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
`;
|
|
136
|
-
//# sourceMappingURL=nav-search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nav-search.js","sourceRoot":"","sources":["../../../src/styles/nav-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqIjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n input[type='text'] {\n color: var(--grey13);\n }\n\n input:focus {\n outline: none;\n }\n button {\n background: none;\n color: inherit;\n border: none;\n font: inherit;\n cursor: pointer;\n }\n button:focus {\n outline: none;\n }\n .search {\n padding-top: 0;\n margin-right: 0.5rem;\n }\n .search svg {\n position: relative;\n fill: var(--activeSearchColor);\n }\n .search-activated {\n display: -webkit-box;\n display: -ms-flexbox;\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 0.2rem;\n border-radius: 1rem 1rem 0 0;\n background: var(--searchActiveBg);\n }\n .search-inactive {\n display: none;\n }\n .search-activated .highlight,\n .search-activated .search {\n background: var(--searchActiveInputBg);\n border-radius: 0.5rem;\n }\n .search-activated .highlight {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n margin: 0 0.5rem;\n }\n .search-activated .search {\n height: 100%;\n padding: 0;\n margin-right: 0;\n -ms-flex-item-align: center;\n -ms-grid-row-align: center;\n align-self: center;\n }\n .search-activated .search svg {\n height: 3rem;\n width: 3rem;\n }\n .search-activated .search-field {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n padding-left: 1rem;\n border-radius: 0.5rem;\n border: none;\n font-size: 1.6rem;\n text-align: center;\n }\n .search-activated .search-field:focus {\n outline: none;\n }\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n .fade-in {\n animation: fade-in 0.2s forwards;\n }\n\n @media (min-width: 890px) {\n .search svg {\n display: inline;\n width: 2.8rem;\n height: 2.8rem;\n vertical-align: -14px;\n }\n .search path {\n fill: var(--desktopSearchIconFill);\n }\n\n .search-inactive,\n .search-activated {\n display: block;\n position: static;\n padding: 1.1rem 0.2rem;\n background: transparent;\n }\n\n .search-activated .highlight {\n width: 13rem;\n height: 2.8rem;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n }\n\n .search-activated .search-field {\n width: calc(100% - 28px);\n height: 100%;\n padding-left: 0;\n font-size: 1.4rem;\n text-align: left;\n }\n\n .search-activated .search svg {\n width: 2.8rem;\n height: 2.8rem;\n }\n }\n`;\n"]}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { css } from 'lit';
|
|
2
|
-
export default css `
|
|
3
|
-
.menu-wrapper {
|
|
4
|
-
position: relative;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
button:focus,
|
|
8
|
-
input:focus {
|
|
9
|
-
outline-color: var(--linkColor);
|
|
10
|
-
outline-width: 0.16rem;
|
|
11
|
-
outline-style: auto;
|
|
12
|
-
outline-offset: 2px !important;
|
|
13
|
-
}
|
|
14
|
-
.search-menu-inner {
|
|
15
|
-
position: absolute;
|
|
16
|
-
right: 0;
|
|
17
|
-
left: 0;
|
|
18
|
-
z-index: 4;
|
|
19
|
-
padding: 0 4.5rem;
|
|
20
|
-
font-size: 1.6rem;
|
|
21
|
-
background-color: var(--searchMenuBg);
|
|
22
|
-
}
|
|
23
|
-
.tx-slide {
|
|
24
|
-
overflow: hidden;
|
|
25
|
-
transition-property: top;
|
|
26
|
-
transition-duration: 0.2s;
|
|
27
|
-
transition-timing-function: ease;
|
|
28
|
-
}
|
|
29
|
-
.initial,
|
|
30
|
-
.closed {
|
|
31
|
-
top: var(--topOffset, -1500px);
|
|
32
|
-
}
|
|
33
|
-
.closed {
|
|
34
|
-
transition-duration: 0.2s;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
label,
|
|
38
|
-
a {
|
|
39
|
-
padding: 1rem;
|
|
40
|
-
display: block;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.advanced-search {
|
|
44
|
-
text-decoration: underline;
|
|
45
|
-
color: inherit;
|
|
46
|
-
line-height: normal;
|
|
47
|
-
padding: 0.5rem;
|
|
48
|
-
margin-top: 5px;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.advanced-search:hover {
|
|
52
|
-
text-decoration: none;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@media (min-width: 890px) {
|
|
56
|
-
.search-menu-inner {
|
|
57
|
-
overflow: visible;
|
|
58
|
-
right: 2rem;
|
|
59
|
-
left: auto;
|
|
60
|
-
z-index: 5;
|
|
61
|
-
padding: 1rem 2rem;
|
|
62
|
-
transition: opacity 0.2s ease-in-out;
|
|
63
|
-
font-size: 1.4rem;
|
|
64
|
-
color: var(--inverseTextColor);
|
|
65
|
-
border-radius: 2px;
|
|
66
|
-
background: var(--primaryTextColor);
|
|
67
|
-
box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.15);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.search-menu-inner:after {
|
|
71
|
-
position: absolute;
|
|
72
|
-
right: 7px;
|
|
73
|
-
top: -7px;
|
|
74
|
-
width: 12px;
|
|
75
|
-
height: 7px;
|
|
76
|
-
box-sizing: border-box;
|
|
77
|
-
color: #fff;
|
|
78
|
-
content: '';
|
|
79
|
-
border-bottom: 7px solid currentColor;
|
|
80
|
-
border-left: 6px solid transparent;
|
|
81
|
-
border-right: 6px solid transparent;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.advanced-search {
|
|
85
|
-
text-decoration: none;
|
|
86
|
-
color: var(--linkColor);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.advanced-search:hover {
|
|
90
|
-
text-decoration: underline;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.initial,
|
|
94
|
-
.closed {
|
|
95
|
-
opacity: 0;
|
|
96
|
-
transition-duration: 0.2s;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.open {
|
|
100
|
-
opacity: 1;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
label {
|
|
104
|
-
padding: 0;
|
|
105
|
-
font-weight: normal;
|
|
106
|
-
margin: 0;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
label + label {
|
|
110
|
-
padding-top: 7px;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
a {
|
|
114
|
-
padding: 1rem 0 0 0;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
`;
|
|
118
|
-
//# sourceMappingURL=search-menu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-menu.js","sourceRoot":"","sources":["../../../src/styles/search-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmHjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n .menu-wrapper {\n position: relative;\n }\n\n button:focus,\n input:focus {\n outline-color: var(--linkColor);\n outline-width: 0.16rem;\n outline-style: auto;\n outline-offset: 2px !important;\n }\n .search-menu-inner {\n position: absolute;\n right: 0;\n left: 0;\n z-index: 4;\n padding: 0 4.5rem;\n font-size: 1.6rem;\n background-color: var(--searchMenuBg);\n }\n .tx-slide {\n overflow: hidden;\n transition-property: top;\n transition-duration: 0.2s;\n transition-timing-function: ease;\n }\n .initial,\n .closed {\n top: var(--topOffset, -1500px);\n }\n .closed {\n transition-duration: 0.2s;\n }\n\n label,\n a {\n padding: 1rem;\n display: block;\n }\n\n .advanced-search {\n text-decoration: underline;\n color: inherit;\n line-height: normal;\n padding: 0.5rem;\n margin-top: 5px;\n }\n\n .advanced-search:hover {\n text-decoration: none;\n }\n\n @media (min-width: 890px) {\n .search-menu-inner {\n overflow: visible;\n right: 2rem;\n left: auto;\n z-index: 5;\n padding: 1rem 2rem;\n transition: opacity 0.2s ease-in-out;\n font-size: 1.4rem;\n color: var(--inverseTextColor);\n border-radius: 2px;\n background: var(--primaryTextColor);\n box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.15);\n }\n\n .search-menu-inner:after {\n position: absolute;\n right: 7px;\n top: -7px;\n width: 12px;\n height: 7px;\n box-sizing: border-box;\n color: #fff;\n content: '';\n border-bottom: 7px solid currentColor;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n }\n\n .advanced-search {\n text-decoration: none;\n color: var(--linkColor);\n }\n\n .advanced-search:hover {\n text-decoration: underline;\n }\n\n .initial,\n .closed {\n opacity: 0;\n transition-duration: 0.2s;\n }\n\n .open {\n opacity: 1;\n }\n\n label {\n padding: 0;\n font-weight: normal;\n margin: 0;\n }\n\n label + label {\n padding-top: 7px;\n }\n\n a {\n padding: 1rem 0 0 0;\n }\n }\n`;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '../src/nav-search';
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { html, fixture, expect } from '@open-wc/testing';
|
|
2
|
-
import sinon from 'sinon';
|
|
3
|
-
import '../src/nav-search';
|
|
4
|
-
const component = html `<nav-search></nav-search>`;
|
|
5
|
-
describe('<nav-search>', () => {
|
|
6
|
-
it('defaults to closed', async () => {
|
|
7
|
-
const el = await fixture(component);
|
|
8
|
-
expect(el.open).to.be.false;
|
|
9
|
-
});
|
|
10
|
-
it('does not allow search form to submit if query empty', async () => {
|
|
11
|
-
const el = await fixture(component);
|
|
12
|
-
// const result = el.search({
|
|
13
|
-
// preventDefault: () => {},
|
|
14
|
-
// });
|
|
15
|
-
// expect(result).to.be.false;
|
|
16
|
-
});
|
|
17
|
-
it('redirects to the TV details page when search inside is TV', async () => {
|
|
18
|
-
const query = 'bananas';
|
|
19
|
-
const submitEvent = {
|
|
20
|
-
type: 'submit',
|
|
21
|
-
preventDefault: () => { },
|
|
22
|
-
};
|
|
23
|
-
const locationHandler = sinon.fake();
|
|
24
|
-
const el = await fixture(html `<nav-search .locationHandler=${locationHandler}></nav-search>`);
|
|
25
|
-
el.searchIn = 'TV';
|
|
26
|
-
await el.updateComplete;
|
|
27
|
-
// el.shadowRoot.querySelector('[name=query]').value = query;
|
|
28
|
-
// el.search(submitEvent);
|
|
29
|
-
// expect(locationHandler.callCount).to.equal(1);
|
|
30
|
-
// expect(locationHandler.firstArg).to.contain(`/details/tv?q=${query}`);
|
|
31
|
-
});
|
|
32
|
-
it('prefills the search query when present in config', async () => {
|
|
33
|
-
var _a;
|
|
34
|
-
const el = await fixture(html `<nav-search searchQuery="bananas"></nav-search>`);
|
|
35
|
-
const queryInput = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('[name="query"]');
|
|
36
|
-
expect(queryInput.value).to.equal('bananas');
|
|
37
|
-
});
|
|
38
|
-
it('conditionally renders `sin` input based on `searchIn` truthiness', async () => {
|
|
39
|
-
var _a, _b;
|
|
40
|
-
const el = await fixture(component);
|
|
41
|
-
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('[name="sin"]')).to.be.null;
|
|
42
|
-
el.searchIn = 'TV';
|
|
43
|
-
await el.updateComplete;
|
|
44
|
-
expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('[name="sin"]')).not.to.be.null;
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
//# sourceMappingURL=nav-search.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nav-search.test.js","sourceRoot":"","sources":["../../test/nav-search.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,mBAAmB,CAAC;AAG3B,MAAM,SAAS,GAAG,IAAI,CAAA,2BAA2B,CAAC;AAElD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,SAAS,CAAC,CAAC;QAE/C,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,SAAS,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,8BAA8B;QAC9B,MAAM;QAEN,8BAA8B;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,SAAS,CAAC;QACxB,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;SACzB,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,gCAAgC,eAAe,gBAAgB,CACpE,CAAC;QAEF,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEnB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,6DAA6D;QAC7D,0BAA0B;QAE1B,iDAAiD;QACjD,yEAAyE;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;;QAChE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,iDAAiD,CACtD,CAAC;QAEF,MAAM,UAAU,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAC7C,gBAAgB,CACG,CAAC;QAEtB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;;QAChF,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,SAAS,CAAC,CAAC;QAE/C,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEhE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { html, fixture, expect } from '@open-wc/testing';\nimport sinon from 'sinon';\n\nimport '../src/nav-search';\nimport { NavSearch } from '../src/nav-search';\n\nconst component = html`<nav-search></nav-search>`;\n\ndescribe('<nav-search>', () => {\n it('defaults to closed', async () => {\n const el = await fixture<NavSearch>(component);\n\n expect(el.open).to.be.false;\n });\n\n it('does not allow search form to submit if query empty', async () => {\n const el = await fixture<NavSearch>(component);\n\n // const result = el.search({\n // preventDefault: () => {},\n // });\n\n // expect(result).to.be.false;\n });\n\n it('redirects to the TV details page when search inside is TV', async () => {\n const query = 'bananas';\n const submitEvent = {\n type: 'submit',\n preventDefault: () => {},\n };\n const locationHandler = sinon.fake();\n const el = await fixture<NavSearch>(\n html`<nav-search .locationHandler=${locationHandler}></nav-search>`,\n );\n\n el.searchIn = 'TV';\n\n await el.updateComplete;\n\n // el.shadowRoot.querySelector('[name=query]').value = query;\n // el.search(submitEvent);\n\n // expect(locationHandler.callCount).to.equal(1);\n // expect(locationHandler.firstArg).to.contain(`/details/tv?q=${query}`);\n });\n\n it('prefills the search query when present in config', async () => {\n const el = await fixture<NavSearch>(\n html`<nav-search searchQuery=\"bananas\"></nav-search>`,\n );\n\n const queryInput = el.shadowRoot?.querySelector(\n '[name=\"query\"]',\n ) as HTMLInputElement;\n\n expect(queryInput.value).to.equal('bananas');\n });\n\n it('conditionally renders `sin` input based on `searchIn` truthiness', async () => {\n const el = await fixture<NavSearch>(component);\n\n expect(el.shadowRoot?.querySelector('[name=\"sin\"]')).to.be.null;\n\n el.searchIn = 'TV';\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('[name=\"sin\"]')).not.to.be.null;\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '../src/search-menu';
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { html, fixture, expect } from '@open-wc/testing';
|
|
2
|
-
import '../src/search-menu';
|
|
3
|
-
const component = html `<search-menu></search-menu>`;
|
|
4
|
-
describe('<search-menu>', () => {
|
|
5
|
-
it('sets default properties', async () => {
|
|
6
|
-
const el = await fixture(component);
|
|
7
|
-
expect(el.searchMenuOpen).to.be.false;
|
|
8
|
-
expect(el.searchMenuAnimate).to.be.false;
|
|
9
|
-
expect(el.selectedSearchType).to.equal('');
|
|
10
|
-
});
|
|
11
|
-
it('sets selected search type', async () => {
|
|
12
|
-
const el = await fixture(component);
|
|
13
|
-
const value = 'text';
|
|
14
|
-
const inputEvent = new InputEvent('input');
|
|
15
|
-
Object.defineProperty(inputEvent, 'target', {
|
|
16
|
-
value: {
|
|
17
|
-
value,
|
|
18
|
-
},
|
|
19
|
-
writable: false,
|
|
20
|
-
});
|
|
21
|
-
el.selectSearchType(inputEvent);
|
|
22
|
-
expect(el.selectedSearchType).to.equal(value);
|
|
23
|
-
});
|
|
24
|
-
it('renders with closed class if done animating', async () => {
|
|
25
|
-
var _a, _b;
|
|
26
|
-
const el = await fixture(component);
|
|
27
|
-
el.searchMenuAnimate = true;
|
|
28
|
-
await el.updateComplete;
|
|
29
|
-
expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-menu-inner')) === null || _b === void 0 ? void 0 : _b.classList.contains('closed')).to.be.true;
|
|
30
|
-
});
|
|
31
|
-
it('omits rendering of an option when hiddenSearchOptions has a value', async () => {
|
|
32
|
-
const el = await fixture(component);
|
|
33
|
-
const hiddenSearchOptions = ['WEB', 'RADIO'];
|
|
34
|
-
el.config = { hiddenSearchOptions };
|
|
35
|
-
await el.updateComplete;
|
|
36
|
-
hiddenSearchOptions.forEach((value) => {
|
|
37
|
-
var _a;
|
|
38
|
-
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`[value=${value}]`)).to.equal(null);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=search-menu.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-menu.test.js","sourceRoot":"","sources":["../../test/search-menu.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAG5B,MAAM,SAAS,GAAG,IAAI,CAAA,6BAA6B,CAAC;AAEpD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,SAAS,CAAC,CAAC;QAEhD,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC;QAErB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE;YAC1C,KAAK,EAAE;gBACL,KAAK;aACN;YACD,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEhC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;;QAC3D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,SAAS,CAAC,CAAC;QAEhD,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CACJ,MAAA,MAAA,EAAE,CAAC,UAAU,0CACT,aAAa,CAAC,oBAAoB,CAAC,0CACnC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACjC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,SAAS,CAAC,CAAC;QAChD,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7C,EAAE,CAAC,MAAM,GAAG,EAAE,mBAAmB,EAAE,CAAC;QACpC,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;YACpC,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { html, fixture, expect } from '@open-wc/testing';\n\nimport '../src/search-menu';\nimport { SearchMenu } from '../src/search-menu';\n\nconst component = html`<search-menu></search-menu>`;\n\ndescribe('<search-menu>', () => {\n it('sets default properties', async () => {\n const el = await fixture<SearchMenu>(component);\n\n expect(el.searchMenuOpen).to.be.false;\n expect(el.searchMenuAnimate).to.be.false;\n expect(el.selectedSearchType).to.equal('');\n });\n\n it('sets selected search type', async () => {\n const el = await fixture<SearchMenu>(component);\n const value = 'text';\n\n const inputEvent = new InputEvent('input');\n Object.defineProperty(inputEvent, 'target', {\n value: {\n value,\n },\n writable: false,\n });\n\n el.selectSearchType(inputEvent);\n\n expect(el.selectedSearchType).to.equal(value);\n });\n\n it('renders with closed class if done animating', async () => {\n const el = await fixture<SearchMenu>(component);\n\n el.searchMenuAnimate = true;\n await el.updateComplete;\n\n expect(\n el.shadowRoot\n ?.querySelector('.search-menu-inner')\n ?.classList.contains('closed'),\n ).to.be.true;\n });\n\n it('omits rendering of an option when hiddenSearchOptions has a value', async () => {\n const el = await fixture<SearchMenu>(component);\n const hiddenSearchOptions = ['WEB', 'RADIO'];\n\n el.config = { hiddenSearchOptions };\n await el.updateComplete;\n\n hiddenSearchOptions.forEach((value) => {\n expect(el.shadowRoot?.querySelector(`[value=${value}]`)).to.equal(null);\n });\n });\n});\n"]}
|