@internetarchive/elements 0.2.3-alpha-webdev8378.0 → 0.2.3-alpha-webdev8378.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.d.ts +2 -32
- package/dist/src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.d.ts.map +1 -1
- package/dist/src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.js +4 -96
- package/dist/src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.js.map +1 -1
- package/dist/src/elements/ia-dropdown-search-bar/models.d.ts +0 -7
- package/dist/src/elements/ia-dropdown-search-bar/models.d.ts.map +1 -1
- package/dist/src/elements/ia-dropdown-search-bar/models.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
-
import type {
|
|
2
|
+
import type { SearchCategory } from './models.js';
|
|
3
3
|
import '@internetarchive/ia-clearable-text-input';
|
|
4
4
|
import '@internetarchive/ia-dropdown';
|
|
5
5
|
import '../../elements/ia-status-indicator/ia-status-indicator.js';
|
|
6
6
|
export declare class IADropdownSearchBar extends LitElement {
|
|
7
|
-
/** ID used for the special Advanced Search dropdown option */
|
|
8
|
-
static readonly ADVANCED_SEARCH_OPTION_ID = "__advanced_search__";
|
|
9
7
|
/** The query that appears in the search bar */
|
|
10
8
|
query?: string;
|
|
11
9
|
/** Dropdown menu options (tab IDs + labels) */
|
|
12
10
|
categories: SearchCategory[];
|
|
13
11
|
/** The currently selected dropdown category ID */
|
|
14
12
|
selectedCategory?: string;
|
|
15
|
-
/** The base URL for internal navigation within the site */
|
|
16
|
-
navBaseUrl?: string;
|
|
17
|
-
/**
|
|
18
|
-
* Where to display the Advanced Search option:
|
|
19
|
-
* - `link` (default): as a text link below the search bar
|
|
20
|
-
* - `dropdown`: as an item at the bottom of the category dropdown
|
|
21
|
-
* - `none`: hidden entirely
|
|
22
|
-
*/
|
|
23
|
-
advancedSearchStyle: AdvancedSearchStyle;
|
|
24
13
|
/** Placeholder text for the search input */
|
|
25
14
|
placeholder: string;
|
|
26
15
|
/** Whether to use the mobile layout */
|
|
@@ -50,11 +39,6 @@ export declare class IADropdownSearchBar extends LitElement {
|
|
|
50
39
|
* expected by `ia-dropdown`.
|
|
51
40
|
*/
|
|
52
41
|
private get dropdownOptions();
|
|
53
|
-
/**
|
|
54
|
-
* Builds the Advanced Search URL using the given query string and the
|
|
55
|
-
* provided `navBaseUrl`. Returns `undefined` if no `navBaseUrl` is set.
|
|
56
|
-
*/
|
|
57
|
-
private buildAdvancedSearchUrl;
|
|
58
42
|
/**
|
|
59
43
|
* The display label for the currently selected category.
|
|
60
44
|
*/
|
|
@@ -64,15 +48,9 @@ export declare class IADropdownSearchBar extends LitElement {
|
|
|
64
48
|
*/
|
|
65
49
|
private get spacedQuery();
|
|
66
50
|
/**
|
|
67
|
-
* Template for
|
|
68
|
-
* (Advanced Search link and any slotted content).
|
|
51
|
+
* Template for any slotted search links beneath the search bar
|
|
69
52
|
*/
|
|
70
53
|
private get searchLinksTemplate();
|
|
71
|
-
/**
|
|
72
|
-
* Template for the "Advanced Search" link, built from `navBaseUrl` and
|
|
73
|
-
* the current query. Only rendered when `advancedSearchStyle` is `'link'`.
|
|
74
|
-
*/
|
|
75
|
-
private get advancedSearchTemplate();
|
|
76
54
|
/**
|
|
77
55
|
* Handler for when the search bar's clear button is pressed.
|
|
78
56
|
*/
|
|
@@ -88,14 +66,6 @@ export declare class IADropdownSearchBar extends LitElement {
|
|
|
88
66
|
* pattern). The parent also binds this property and may re-set it on re-render.
|
|
89
67
|
*/
|
|
90
68
|
private handleCategorySelected;
|
|
91
|
-
/**
|
|
92
|
-
* Navigates the browser to the Advanced Search page with the current query.
|
|
93
|
-
*/
|
|
94
|
-
private navigateToAdvancedSearch;
|
|
95
|
-
/**
|
|
96
|
-
* Handler for clicks on the advanced search link/option
|
|
97
|
-
*/
|
|
98
|
-
private advancedSearchClicked;
|
|
99
69
|
/**
|
|
100
70
|
* Emits a `searchRequested` event with the current query and category.
|
|
101
71
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ia-dropdown-search-bar.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,UAAU,EAAW,cAAc,EAAE,MAAM,KAAK,CAAC;AAIrE,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"ia-dropdown-search-bar.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,UAAU,EAAW,cAAc,EAAE,MAAM,KAAK,CAAC;AAIrE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,UAAU,CAAC;AAKlB,OAAO,0CAA0C,CAAC;AAClD,OAAO,8BAA8B,CAAC;AACtC,OAAO,uDAAuD,CAAC;AAU/D,qBACa,mBAAoB,SAAQ,UAAU;IACjD,+CAA+C;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAE3C,+CAA+C;IACpB,UAAU,EAAE,cAAc,EAAE,CAAM;IAE7D,kDAAkD;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEtD,4CAA4C;IAChB,WAAW,SAAiB;IAExD,uCAAuC;IACV,aAAa,UAAS;IAEnD,0EAA0E;IAC7C,YAAY,UAAS;IAElD,8DAA8D;IACjC,OAAO,UAAS;IAG7C,OAAO,CAAC,WAAW,CAAwB;IAE3C,8EAA8E;IAC9E,OAAO,KAAK,gBAAgB,GAE3B;IAED,MAAM,IAAI,cAAc;IAgBxB;;OAEG;IACH,OAAO,KAAK,gBAAgB,GAkB3B;IAED;;OAEG;IACH,OAAO,KAAK,eAAe,GAe1B;IAED;;OAEG;IACH,OAAO,KAAK,oBAAoB,GAkB/B;IAED;;;OAGG;IACH,OAAO,KAAK,eAAe,GAK1B;IAED;;OAEG;IACH,OAAO,KAAK,qBAAqB,GAGhC;IAED;;OAEG;IACH,OAAO,KAAK,WAAW,GAEtB;IAED;;OAEG;IACH,OAAO,KAAK,mBAAmB,GAgB9B;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B,MAAM,KAAK,MAAM,8BAsKhB;CACF"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var IADropdownSearchBar_1;
|
|
2
1
|
import { __decorate } from "tslib";
|
|
3
2
|
import { msg } from '@lit/localize';
|
|
4
3
|
import { css, html, LitElement, nothing } from 'lit';
|
|
@@ -12,22 +11,14 @@ import '../../elements/ia-status-indicator/ia-status-indicator.js';
|
|
|
12
11
|
* Event names emitted by this component
|
|
13
12
|
*/
|
|
14
13
|
const Events = {
|
|
15
|
-
AdvancedSearchClicked: 'advancedSearchClicked',
|
|
16
14
|
CategoryChanged: 'categoryChanged',
|
|
17
15
|
SearchRequested: 'searchRequested',
|
|
18
16
|
};
|
|
19
|
-
let IADropdownSearchBar =
|
|
17
|
+
let IADropdownSearchBar = class IADropdownSearchBar extends LitElement {
|
|
20
18
|
constructor() {
|
|
21
19
|
super(...arguments);
|
|
22
20
|
/** Dropdown menu options (tab IDs + labels) */
|
|
23
21
|
this.categories = [];
|
|
24
|
-
/**
|
|
25
|
-
* Where to display the Advanced Search option:
|
|
26
|
-
* - `link` (default): as a text link below the search bar
|
|
27
|
-
* - `dropdown`: as an item at the bottom of the category dropdown
|
|
28
|
-
* - `none`: hidden entirely
|
|
29
|
-
*/
|
|
30
|
-
this.advancedSearchStyle = 'link';
|
|
31
22
|
/** Placeholder text for the search input */
|
|
32
23
|
this.placeholder = msg('Search');
|
|
33
24
|
/** Whether to use the mobile layout */
|
|
@@ -122,31 +113,10 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
122
113
|
* expected by `ia-dropdown`.
|
|
123
114
|
*/
|
|
124
115
|
get dropdownOptions() {
|
|
125
|
-
|
|
116
|
+
return this.categories.map((cat) => ({
|
|
126
117
|
id: cat.id,
|
|
127
118
|
label: html `<span>${cat.label}</span>`,
|
|
128
119
|
}));
|
|
129
|
-
if (this.advancedSearchStyle === 'dropdown' &&
|
|
130
|
-
this.navBaseUrl !== undefined) {
|
|
131
|
-
options.push({
|
|
132
|
-
id: IADropdownSearchBar_1.ADVANCED_SEARCH_OPTION_ID,
|
|
133
|
-
// Add a separator border above the Advanced Search option
|
|
134
|
-
label: html `<span style="border-top: 1px solid #999;">
|
|
135
|
-
${msg('Go to Advanced Search...')}
|
|
136
|
-
</span>`,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
return options;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Builds the Advanced Search URL using the given query string and the
|
|
143
|
-
* provided `navBaseUrl`. Returns `undefined` if no `navBaseUrl` is set.
|
|
144
|
-
*/
|
|
145
|
-
buildAdvancedSearchUrl(query) {
|
|
146
|
-
if (this.navBaseUrl === undefined)
|
|
147
|
-
return undefined;
|
|
148
|
-
const queryArg = query ? `?q=${encodeURIComponent(query)}` : '';
|
|
149
|
-
return `${this.navBaseUrl}/advancedsearch.php${queryArg}`;
|
|
150
120
|
}
|
|
151
121
|
/**
|
|
152
122
|
* The display label for the currently selected category.
|
|
@@ -162,8 +132,7 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
162
132
|
return this.query?.replace(/\+/g, ' ') ?? '';
|
|
163
133
|
}
|
|
164
134
|
/**
|
|
165
|
-
* Template for
|
|
166
|
-
* (Advanced Search link and any slotted content).
|
|
135
|
+
* Template for any slotted search links beneath the search bar
|
|
167
136
|
*/
|
|
168
137
|
get searchLinksTemplate() {
|
|
169
138
|
return html `
|
|
@@ -175,7 +144,6 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
175
144
|
class=${this.useMobileView ? 'mobile' : nothing}
|
|
176
145
|
>
|
|
177
146
|
<slot name="search-links-top"></slot>
|
|
178
|
-
${this.advancedSearchTemplate}
|
|
179
147
|
<div id="search-links-end">
|
|
180
148
|
<slot name="search-links"></slot>
|
|
181
149
|
</div>
|
|
@@ -183,25 +151,6 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
183
151
|
</div>
|
|
184
152
|
`;
|
|
185
153
|
}
|
|
186
|
-
/**
|
|
187
|
-
* Template for the "Advanced Search" link, built from `navBaseUrl` and
|
|
188
|
-
* the current query. Only rendered when `advancedSearchStyle` is `'link'`.
|
|
189
|
-
*/
|
|
190
|
-
get advancedSearchTemplate() {
|
|
191
|
-
if (this.advancedSearchStyle !== 'link')
|
|
192
|
-
return nothing;
|
|
193
|
-
const href = this.buildAdvancedSearchUrl(this.query ?? '');
|
|
194
|
-
if (!href)
|
|
195
|
-
return nothing;
|
|
196
|
-
return html `<a
|
|
197
|
-
id="advanced-search-link"
|
|
198
|
-
part="advanced-search-link"
|
|
199
|
-
href=${href}
|
|
200
|
-
@click=${this.advancedSearchClicked}
|
|
201
|
-
>
|
|
202
|
-
${msg('Advanced Search')}
|
|
203
|
-
</a>`;
|
|
204
|
-
}
|
|
205
154
|
/**
|
|
206
155
|
* Handler for when the search bar's clear button is pressed.
|
|
207
156
|
*/
|
|
@@ -224,10 +173,6 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
224
173
|
*/
|
|
225
174
|
handleCategorySelected(e) {
|
|
226
175
|
const newCategoryId = e.detail.option.id;
|
|
227
|
-
if (newCategoryId === IADropdownSearchBar_1.ADVANCED_SEARCH_OPTION_ID) {
|
|
228
|
-
this.navigateToAdvancedSearch();
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
176
|
if (newCategoryId === this.resolvedCategory)
|
|
232
177
|
return;
|
|
233
178
|
this.selectedCategory = newCategoryId;
|
|
@@ -237,26 +182,6 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
237
182
|
detail: newCategoryId,
|
|
238
183
|
}));
|
|
239
184
|
}
|
|
240
|
-
/**
|
|
241
|
-
* Navigates the browser to the Advanced Search page with the current query.
|
|
242
|
-
*/
|
|
243
|
-
navigateToAdvancedSearch() {
|
|
244
|
-
// Schedule a re-render so ia-dropdown resets its internal selectedOption
|
|
245
|
-
// back to the real category (in case navigation is delayed or prevented)
|
|
246
|
-
this.requestUpdate();
|
|
247
|
-
const query = this.searchInput?.value ?? this.query ?? '';
|
|
248
|
-
const href = this.buildAdvancedSearchUrl(query);
|
|
249
|
-
if (!href)
|
|
250
|
-
return;
|
|
251
|
-
this.advancedSearchClicked();
|
|
252
|
-
window.location.href = href;
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Handler for clicks on the advanced search link/option
|
|
256
|
-
*/
|
|
257
|
-
advancedSearchClicked() {
|
|
258
|
-
this.dispatchEvent(new CustomEvent(Events.AdvancedSearchClicked));
|
|
259
|
-
}
|
|
260
185
|
/**
|
|
261
186
|
* Emits a `searchRequested` event with the current query and category.
|
|
262
187
|
*/
|
|
@@ -400,19 +325,10 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
400
325
|
margin-bottom: 2px;
|
|
401
326
|
}
|
|
402
327
|
|
|
403
|
-
#advanced-search-link {
|
|
404
|
-
margin-left: auto;
|
|
405
|
-
padding-left: 5px;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
328
|
#search-links-end {
|
|
409
329
|
display: contents;
|
|
410
330
|
}
|
|
411
331
|
|
|
412
|
-
.mobile #advanced-search-link {
|
|
413
|
-
margin-left: 0;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
332
|
.mobile #search-links-end {
|
|
417
333
|
display: flex;
|
|
418
334
|
margin-left: auto;
|
|
@@ -444,8 +360,6 @@ let IADropdownSearchBar = IADropdownSearchBar_1 = class IADropdownSearchBar exte
|
|
|
444
360
|
return [themeStyles, ownStyles];
|
|
445
361
|
}
|
|
446
362
|
};
|
|
447
|
-
/** ID used for the special Advanced Search dropdown option */
|
|
448
|
-
IADropdownSearchBar.ADVANCED_SEARCH_OPTION_ID = '__advanced_search__';
|
|
449
363
|
__decorate([
|
|
450
364
|
property({ type: String })
|
|
451
365
|
], IADropdownSearchBar.prototype, "query", void 0);
|
|
@@ -455,12 +369,6 @@ __decorate([
|
|
|
455
369
|
__decorate([
|
|
456
370
|
property({ type: String })
|
|
457
371
|
], IADropdownSearchBar.prototype, "selectedCategory", void 0);
|
|
458
|
-
__decorate([
|
|
459
|
-
property({ type: String })
|
|
460
|
-
], IADropdownSearchBar.prototype, "navBaseUrl", void 0);
|
|
461
|
-
__decorate([
|
|
462
|
-
property({ type: String })
|
|
463
|
-
], IADropdownSearchBar.prototype, "advancedSearchStyle", void 0);
|
|
464
372
|
__decorate([
|
|
465
373
|
property({ type: String })
|
|
466
374
|
], IADropdownSearchBar.prototype, "placeholder", void 0);
|
|
@@ -476,7 +384,7 @@ __decorate([
|
|
|
476
384
|
__decorate([
|
|
477
385
|
query('#search-input')
|
|
478
386
|
], IADropdownSearchBar.prototype, "searchInput", void 0);
|
|
479
|
-
IADropdownSearchBar =
|
|
387
|
+
IADropdownSearchBar = __decorate([
|
|
480
388
|
customElement('ia-dropdown-search-bar')
|
|
481
389
|
], IADropdownSearchBar);
|
|
482
390
|
export { IADropdownSearchBar };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ia-dropdown-search-bar.js","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import { msg } from '@lit/localize';\r\nimport { css, html, LitElement, nothing, TemplateResult } from 'lit';\r\nimport { customElement, property, query } from 'lit/decorators.js';\r\nimport type { IaClearableTextInput } from '@internetarchive/ia-clearable-text-input';\r\nimport type { optionInterface } from '@internetarchive/ia-dropdown';\r\nimport type {\r\n AdvancedSearchStyle,\r\n SearchCategory,\r\n SearchRequestedDetail,\r\n} from './models';\r\n\r\nimport themeStyles from '@src/themes/theme-styles';\r\nimport searchIcon from './search.svg';\r\n\r\nimport '@internetarchive/ia-clearable-text-input';\r\nimport '@internetarchive/ia-dropdown';\r\nimport '@src/elements/ia-status-indicator/ia-status-indicator';\r\n\r\n/**\r\n * Event names emitted by this component\r\n */\r\nconst Events = {\r\n AdvancedSearchClicked: 'advancedSearchClicked',\r\n CategoryChanged: 'categoryChanged',\r\n SearchRequested: 'searchRequested',\r\n};\r\n\r\n@customElement('ia-dropdown-search-bar')\r\nexport class IADropdownSearchBar extends LitElement {\r\n /** ID used for the special Advanced Search dropdown option */\r\n static readonly ADVANCED_SEARCH_OPTION_ID = '__advanced_search__';\r\n\r\n /** The query that appears in the search bar */\r\n @property({ type: String }) query?: string;\r\n\r\n /** Dropdown menu options (tab IDs + labels) */\r\n @property({ type: Array }) categories: SearchCategory[] = [];\r\n\r\n /** The currently selected dropdown category ID */\r\n @property({ type: String }) selectedCategory?: string;\r\n\r\n /** The base URL for internal navigation within the site */\r\n @property({ type: String }) navBaseUrl?: string;\r\n\r\n /**\r\n * Where to display the Advanced Search option:\r\n * - `link` (default): as a text link below the search bar\r\n * - `dropdown`: as an item at the bottom of the category dropdown\r\n * - `none`: hidden entirely\r\n */\r\n @property({ type: String }) advancedSearchStyle: AdvancedSearchStyle = 'link';\r\n\r\n /** Placeholder text for the search input */\r\n @property({ type: String }) placeholder = msg('Search');\r\n\r\n /** Whether to use the mobile layout */\r\n @property({ type: Boolean }) useMobileView = false;\r\n\r\n /** Whether to hide the category dropdown to the left of the search bar */\r\n @property({ type: Boolean }) hideDropdown = false;\r\n\r\n /** Whether the search button should show its loading state */\r\n @property({ type: Boolean }) loading = false;\r\n\r\n @query('#search-input')\r\n private searchInput!: IaClearableTextInput;\r\n\r\n /** The effective selected category, falling back to the first in the list. */\r\n private get resolvedCategory(): string {\r\n return this.selectedCategory ?? this.categories[0]?.id ?? '';\r\n }\r\n\r\n render(): TemplateResult {\r\n return html`\r\n <div id=\"container\" part=\"container\" role=\"search\">\r\n <div\r\n id=\"main-bar\"\r\n part=\"main-bar\"\r\n class=${this.hideDropdown ? 'no-dropdown' : nothing}\r\n >\r\n ${this.hideDropdown ? nothing : this.dropdownTemplate}\r\n ${this.textBoxTemplate} ${this.searchButtonTemplate}\r\n </div>\r\n ${this.searchLinksTemplate}\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the category dropdown on the left side of the search bar.\r\n */\r\n private get dropdownTemplate(): TemplateResult {\r\n return html`\r\n <ia-dropdown\r\n id=\"category-dropdown\"\r\n part=\"category-dropdown\"\r\n displayCaret\r\n includeSelectedOption\r\n closeOnSelect\r\n closeOnEscape\r\n closeOnBackdropClick\r\n openViaButton\r\n .selectedOption=${this.resolvedCategory}\r\n .options=${this.dropdownOptions}\r\n @optionSelected=${this.handleCategorySelected}\r\n >\r\n <span slot=\"dropdown-label\">${this.selectedCategoryLabel}</span>\r\n </ia-dropdown>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the main text entry box of the search bar.\r\n */\r\n private get textBoxTemplate(): TemplateResult {\r\n return html`\r\n <ia-clearable-text-input\r\n id=\"search-input\"\r\n part=\"search-input\"\r\n .value=${this.spacedQuery}\r\n placeholder=${this.placeholder}\r\n clearButtonScreenReaderLabel=${msg('Clear search query')}\r\n screenReaderLabel=${msg(\r\n 'Search the Archive. Filters and Advanced Search available below.',\r\n )}\r\n @clear=${this.searchFieldCleared}\r\n @submit=${this.handleSubmit}\r\n ></ia-clearable-text-input>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the \"magnifying glass\" search button to the right of the search bar.\r\n */\r\n private get searchButtonTemplate(): TemplateResult {\r\n return html`\r\n <button\r\n id=\"search-button\"\r\n part=\"search-button\"\r\n class=${this.loading ? 'loading' : nothing}\r\n type=\"button\"\r\n aria-label=${msg('Search')}\r\n @click=${this.handleSubmit}\r\n >\r\n ${this.loading\r\n ? html`<ia-status-indicator\r\n mode=\"loading\"\r\n class=\"search-button-loading-icon\"\r\n ></ia-status-indicator>`\r\n : html`<img src=${searchIcon} alt=\"\" />`}\r\n </button>\r\n `;\r\n }\r\n\r\n /**\r\n * Converts the `categories` array into the `optionInterface[]` format\r\n * expected by `ia-dropdown`.\r\n */\r\n private get dropdownOptions(): optionInterface[] {\r\n const options: optionInterface[] = this.categories.map((cat) => ({\r\n id: cat.id,\r\n label: html`<span>${cat.label}</span>`,\r\n }));\r\n\r\n if (\r\n this.advancedSearchStyle === 'dropdown' &&\r\n this.navBaseUrl !== undefined\r\n ) {\r\n options.push({\r\n id: IADropdownSearchBar.ADVANCED_SEARCH_OPTION_ID,\r\n // Add a separator border above the Advanced Search option\r\n label: html`<span style=\"border-top: 1px solid #999;\">\r\n ${msg('Go to Advanced Search...')}\r\n </span>`,\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n /**\r\n * Builds the Advanced Search URL using the given query string and the\r\n * provided `navBaseUrl`. Returns `undefined` if no `navBaseUrl` is set.\r\n */\r\n private buildAdvancedSearchUrl(query: string): string | undefined {\r\n if (this.navBaseUrl === undefined) return undefined;\r\n const queryArg = query ? `?q=${encodeURIComponent(query)}` : '';\r\n return `${this.navBaseUrl}/advancedsearch.php${queryArg}`;\r\n }\r\n\r\n /**\r\n * The display label for the currently selected category.\r\n */\r\n private get selectedCategoryLabel(): string {\r\n const match = this.categories.find((c) => c.id === this.resolvedCategory);\r\n return match?.label ?? this.resolvedCategory;\r\n }\r\n\r\n /**\r\n * The current search query with +'s replaced by spaces.\r\n */\r\n private get spacedQuery(): string {\r\n return this.query?.replace(/\\+/g, ' ') ?? '';\r\n }\r\n\r\n /**\r\n * Template for the search links area beneath the search bar\r\n * (Advanced Search link and any slotted content).\r\n */\r\n private get searchLinksTemplate(): TemplateResult {\r\n return html`\r\n <div id=\"search-links-area\">\r\n <slot name=\"before-search-links\"></slot>\r\n <div\r\n id=\"search-links\"\r\n part=\"search-links\"\r\n class=${this.useMobileView ? 'mobile' : nothing}\r\n >\r\n <slot name=\"search-links-top\"></slot>\r\n ${this.advancedSearchTemplate}\r\n <div id=\"search-links-end\">\r\n <slot name=\"search-links\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the \"Advanced Search\" link, built from `navBaseUrl` and\r\n * the current query. Only rendered when `advancedSearchStyle` is `'link'`.\r\n */\r\n private get advancedSearchTemplate(): TemplateResult | typeof nothing {\r\n if (this.advancedSearchStyle !== 'link') return nothing;\r\n\r\n const href = this.buildAdvancedSearchUrl(this.query ?? '');\r\n if (!href) return nothing;\r\n\r\n return html`<a\r\n id=\"advanced-search-link\"\r\n part=\"advanced-search-link\"\r\n href=${href}\r\n @click=${this.advancedSearchClicked}\r\n >\r\n ${msg('Advanced Search')}\r\n </a>`;\r\n }\r\n\r\n /**\r\n * Handler for when the search bar's clear button is pressed.\r\n */\r\n private searchFieldCleared(): void {\r\n if (this.query) {\r\n this.emitSearchRequested();\r\n }\r\n }\r\n\r\n /**\r\n * Handler for Enter key or search button click.\r\n */\r\n private handleSubmit(): void {\r\n this.emitSearchRequested();\r\n }\r\n\r\n /**\r\n * Handler for when the user selects a category from the dropdown.\r\n *\r\n * Sets `selectedCategory` locally for immediate visual feedback (semi-controlled\r\n * pattern). The parent also binds this property and may re-set it on re-render.\r\n */\r\n private handleCategorySelected(\r\n e: CustomEvent<{ option: optionInterface }>,\r\n ): void {\r\n const newCategoryId = e.detail.option.id;\r\n\r\n if (newCategoryId === IADropdownSearchBar.ADVANCED_SEARCH_OPTION_ID) {\r\n this.navigateToAdvancedSearch();\r\n return;\r\n }\r\n\r\n if (newCategoryId === this.resolvedCategory) return;\r\n\r\n this.selectedCategory = newCategoryId;\r\n\r\n // On next tick, focus the text input bar (seemingly fails in Safari without the delay)\r\n setTimeout(() => this.searchInput.focus());\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<string>(Events.CategoryChanged, {\r\n detail: newCategoryId,\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Navigates the browser to the Advanced Search page with the current query.\r\n */\r\n private navigateToAdvancedSearch(): void {\r\n // Schedule a re-render so ia-dropdown resets its internal selectedOption\r\n // back to the real category (in case navigation is delayed or prevented)\r\n this.requestUpdate();\r\n\r\n const query = this.searchInput?.value ?? this.query ?? '';\r\n const href = this.buildAdvancedSearchUrl(query);\r\n if (!href) return;\r\n\r\n this.advancedSearchClicked();\r\n window.location.href = href;\r\n }\r\n\r\n /**\r\n * Handler for clicks on the advanced search link/option\r\n */\r\n private advancedSearchClicked(): void {\r\n this.dispatchEvent(new CustomEvent(Events.AdvancedSearchClicked));\r\n }\r\n\r\n /**\r\n * Emits a `searchRequested` event with the current query and category.\r\n */\r\n private emitSearchRequested(): void {\r\n this.dispatchEvent(\r\n new CustomEvent<SearchRequestedDetail>(Events.SearchRequested, {\r\n detail: {\r\n query: this.searchInput.value,\r\n category: this.resolvedCategory,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n static get styles() {\r\n const ownStyles = css`\r\n :host {\r\n --search-bar-height--: var(--search-bar-height, 30px);\r\n --search-bar-width--: var(--search-bar-width, 300px);\r\n --search-bar-internal-padding--: var(--padding-sm, 5px);\r\n --clear-button-offset--: var(--clear-button-offset, 0);\r\n }\r\n\r\n #container {\r\n display: inline-block;\r\n width: var(--search-bar-width--);\r\n }\r\n\r\n #main-bar {\r\n display: flex;\r\n height: var(--search-bar-height--, 30px);\r\n margin-bottom: 10px;\r\n flex: 1;\r\n }\r\n\r\n #category-dropdown {\r\n display: flex;\r\n flex-shrink: 0;\r\n height: 100%;\r\n box-sizing: border-box;\r\n\r\n background-color: #f5f5f7;\r\n border: 1px solid #999;\r\n border-radius: 5px 0 0 5px;\r\n\r\n --dropdownMainButtonPadding: 0 var(--search-bar-internal-padding--, 5px);\r\n --dropdownBgColor: #2c2c2c;\r\n --dropdownTextColor: #fff;\r\n --dropdownBorderColor: #ddd;\r\n --dropdownCaretColor: var(--ia-theme-primary-text-color, #2c2c2c);\r\n --dropdownHoverBgColor: rgba(255, 255, 255, 0.3);\r\n --dropdownHoverTextColor: #fff;\r\n --dropdownSelectedBgColor: rgba(255, 255, 255, 0.3);\r\n --dropdownSelectedTextColor: #fff;\r\n --dropdownWhiteSpace: nowrap;\r\n --dropdownOffsetTop: 2px;\r\n --caretHeight: 8px;\r\n --caretWidth: 12px;\r\n --caretPadding: 0 0 0 5px;\r\n --dropdownFontSize: inherit;\r\n --dropdownBorderRadius: 4px;\r\n --buttonSlotPaddingRight: 0;\r\n --dropdownTextAlign: left;\r\n }\r\n\r\n #category-dropdown [slot='dropdown-label'] {\r\n color: var(--ia-theme-primary-text-color, #2c2c2c);\r\n font-size: inherit;\r\n font-family: inherit;\r\n white-space: nowrap;\r\n }\r\n\r\n .no-dropdown #search-input {\r\n border-left: 1px solid #999;\r\n border-radius: 5px 0 0 5px;\r\n overflow: hidden;\r\n }\r\n\r\n #search-input {\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n border-top: 1px solid #999;\r\n border-bottom: 1px solid #999;\r\n font-size: inherit;\r\n\r\n --input-height: calc(var(--search-bar-height--) - 2px);\r\n --input-padding: 0 var(--search-bar-internal-padding--, 5px);\r\n --input-background-color: var(\r\n --ia-theme-secondary-background-color,\r\n #fff\r\n );\r\n --input-border-radius: 0;\r\n --input-border-width: 0;\r\n --input-box-shadow: none;\r\n --input-focused-box-shadow: none;\r\n --input-font-size: auto;\r\n --clear-button-top: var(--clear-button-offset--, 0);\r\n --clear-button-right: 2px;\r\n }\r\n\r\n #search-button {\r\n appearance: none;\r\n box-sizing: border-box;\r\n border-radius: 0 5px 5px 0;\r\n background-color: var(--ia-theme-secondary-background-color, #fff);\r\n border: 1px solid #999;\r\n border-left: 0;\r\n padding: 0 var(--search-bar-internal-padding--, 5px) 0 5px;\r\n min-width: 30px;\r\n height: 100%;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n }\r\n\r\n #search-button img {\r\n width: 18px;\r\n height: 18px;\r\n }\r\n\r\n .search-button-loading-icon {\r\n --icon-width: 20px;\r\n margin-top: 2px;\r\n }\r\n\r\n #search-links-area {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n margin-top: 5px;\r\n font-size: inherit;\r\n }\r\n\r\n #search-links {\r\n display: flex;\r\n column-gap: 10px;\r\n width: 100%;\r\n }\r\n\r\n #search-links > a:not(:last-child) {\r\n margin-bottom: 2px;\r\n }\r\n\r\n #advanced-search-link {\r\n margin-left: auto;\r\n padding-left: 5px;\r\n }\r\n\r\n #search-links-end {\r\n display: contents;\r\n }\r\n\r\n .mobile #advanced-search-link {\r\n margin-left: 0;\r\n }\r\n\r\n .mobile #search-links-end {\r\n display: flex;\r\n margin-left: auto;\r\n column-gap: 10px;\r\n }\r\n\r\n a:link {\r\n text-decoration: none;\r\n display: block;\r\n flex: 0 1 auto;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n white-space: nowrap;\r\n }\r\n\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n a:visited {\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n\r\n ::slotted(#action-bar-spacing) {\r\n --iconLabelGutterWidth: 3px;\r\n margin-top: -4px; /* Better icon alignment */\r\n height: fit-content;\r\n }\r\n `;\r\n\r\n return [themeStyles, ownStyles];\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ia-dropdown-search-bar.js","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/ia-dropdown-search-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import { msg } from '@lit/localize';\r\nimport { css, html, LitElement, nothing, TemplateResult } from 'lit';\r\nimport { customElement, property, query } from 'lit/decorators.js';\r\nimport type { IaClearableTextInput } from '@internetarchive/ia-clearable-text-input';\r\nimport type { optionInterface } from '@internetarchive/ia-dropdown';\r\nimport type {\r\n SearchCategory,\r\n SearchRequestedDetail,\r\n} from './models';\r\n\r\nimport themeStyles from '@src/themes/theme-styles';\r\nimport searchIcon from './search.svg';\r\n\r\nimport '@internetarchive/ia-clearable-text-input';\r\nimport '@internetarchive/ia-dropdown';\r\nimport '@src/elements/ia-status-indicator/ia-status-indicator';\r\n\r\n/**\r\n * Event names emitted by this component\r\n */\r\nconst Events = {\r\n CategoryChanged: 'categoryChanged',\r\n SearchRequested: 'searchRequested',\r\n};\r\n\r\n@customElement('ia-dropdown-search-bar')\r\nexport class IADropdownSearchBar extends LitElement {\r\n /** The query that appears in the search bar */\r\n @property({ type: String }) query?: string;\r\n\r\n /** Dropdown menu options (tab IDs + labels) */\r\n @property({ type: Array }) categories: SearchCategory[] = [];\r\n\r\n /** The currently selected dropdown category ID */\r\n @property({ type: String }) selectedCategory?: string;\r\n\r\n /** Placeholder text for the search input */\r\n @property({ type: String }) placeholder = msg('Search');\r\n\r\n /** Whether to use the mobile layout */\r\n @property({ type: Boolean }) useMobileView = false;\r\n\r\n /** Whether to hide the category dropdown to the left of the search bar */\r\n @property({ type: Boolean }) hideDropdown = false;\r\n\r\n /** Whether the search button should show its loading state */\r\n @property({ type: Boolean }) loading = false;\r\n\r\n @query('#search-input')\r\n private searchInput!: IaClearableTextInput;\r\n\r\n /** The effective selected category, falling back to the first in the list. */\r\n private get resolvedCategory(): string {\r\n return this.selectedCategory ?? this.categories[0]?.id ?? '';\r\n }\r\n\r\n render(): TemplateResult {\r\n return html`\r\n <div id=\"container\" part=\"container\" role=\"search\">\r\n <div\r\n id=\"main-bar\"\r\n part=\"main-bar\"\r\n class=${this.hideDropdown ? 'no-dropdown' : nothing}\r\n >\r\n ${this.hideDropdown ? nothing : this.dropdownTemplate}\r\n ${this.textBoxTemplate} ${this.searchButtonTemplate}\r\n </div>\r\n ${this.searchLinksTemplate}\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the category dropdown on the left side of the search bar.\r\n */\r\n private get dropdownTemplate(): TemplateResult {\r\n return html`\r\n <ia-dropdown\r\n id=\"category-dropdown\"\r\n part=\"category-dropdown\"\r\n displayCaret\r\n includeSelectedOption\r\n closeOnSelect\r\n closeOnEscape\r\n closeOnBackdropClick\r\n openViaButton\r\n .selectedOption=${this.resolvedCategory}\r\n .options=${this.dropdownOptions}\r\n @optionSelected=${this.handleCategorySelected}\r\n >\r\n <span slot=\"dropdown-label\">${this.selectedCategoryLabel}</span>\r\n </ia-dropdown>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the main text entry box of the search bar.\r\n */\r\n private get textBoxTemplate(): TemplateResult {\r\n return html`\r\n <ia-clearable-text-input\r\n id=\"search-input\"\r\n part=\"search-input\"\r\n .value=${this.spacedQuery}\r\n placeholder=${this.placeholder}\r\n clearButtonScreenReaderLabel=${msg('Clear search query')}\r\n screenReaderLabel=${msg(\r\n 'Search the Archive. Filters and Advanced Search available below.',\r\n )}\r\n @clear=${this.searchFieldCleared}\r\n @submit=${this.handleSubmit}\r\n ></ia-clearable-text-input>\r\n `;\r\n }\r\n\r\n /**\r\n * Template for the \"magnifying glass\" search button to the right of the search bar.\r\n */\r\n private get searchButtonTemplate(): TemplateResult {\r\n return html`\r\n <button\r\n id=\"search-button\"\r\n part=\"search-button\"\r\n class=${this.loading ? 'loading' : nothing}\r\n type=\"button\"\r\n aria-label=${msg('Search')}\r\n @click=${this.handleSubmit}\r\n >\r\n ${this.loading\r\n ? html`<ia-status-indicator\r\n mode=\"loading\"\r\n class=\"search-button-loading-icon\"\r\n ></ia-status-indicator>`\r\n : html`<img src=${searchIcon} alt=\"\" />`}\r\n </button>\r\n `;\r\n }\r\n\r\n /**\r\n * Converts the `categories` array into the `optionInterface[]` format\r\n * expected by `ia-dropdown`.\r\n */\r\n private get dropdownOptions(): optionInterface[] {\r\n return this.categories.map((cat) => ({\r\n id: cat.id,\r\n label: html`<span>${cat.label}</span>`,\r\n }));\r\n }\r\n\r\n /**\r\n * The display label for the currently selected category.\r\n */\r\n private get selectedCategoryLabel(): string {\r\n const match = this.categories.find((c) => c.id === this.resolvedCategory);\r\n return match?.label ?? this.resolvedCategory;\r\n }\r\n\r\n /**\r\n * The current search query with +'s replaced by spaces.\r\n */\r\n private get spacedQuery(): string {\r\n return this.query?.replace(/\\+/g, ' ') ?? '';\r\n }\r\n\r\n /**\r\n * Template for any slotted search links beneath the search bar\r\n */\r\n private get searchLinksTemplate(): TemplateResult {\r\n return html`\r\n <div id=\"search-links-area\">\r\n <slot name=\"before-search-links\"></slot>\r\n <div\r\n id=\"search-links\"\r\n part=\"search-links\"\r\n class=${this.useMobileView ? 'mobile' : nothing}\r\n >\r\n <slot name=\"search-links-top\"></slot>\r\n <div id=\"search-links-end\">\r\n <slot name=\"search-links\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Handler for when the search bar's clear button is pressed.\r\n */\r\n private searchFieldCleared(): void {\r\n if (this.query) {\r\n this.emitSearchRequested();\r\n }\r\n }\r\n\r\n /**\r\n * Handler for Enter key or search button click.\r\n */\r\n private handleSubmit(): void {\r\n this.emitSearchRequested();\r\n }\r\n\r\n /**\r\n * Handler for when the user selects a category from the dropdown.\r\n *\r\n * Sets `selectedCategory` locally for immediate visual feedback (semi-controlled\r\n * pattern). The parent also binds this property and may re-set it on re-render.\r\n */\r\n private handleCategorySelected(\r\n e: CustomEvent<{ option: optionInterface }>,\r\n ): void {\r\n const newCategoryId = e.detail.option.id;\r\n if (newCategoryId === this.resolvedCategory) return;\r\n\r\n this.selectedCategory = newCategoryId;\r\n\r\n // On next tick, focus the text input bar (seemingly fails in Safari without the delay)\r\n setTimeout(() => this.searchInput.focus());\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<string>(Events.CategoryChanged, {\r\n detail: newCategoryId,\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Emits a `searchRequested` event with the current query and category.\r\n */\r\n private emitSearchRequested(): void {\r\n this.dispatchEvent(\r\n new CustomEvent<SearchRequestedDetail>(Events.SearchRequested, {\r\n detail: {\r\n query: this.searchInput.value,\r\n category: this.resolvedCategory,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n static get styles() {\r\n const ownStyles = css`\r\n :host {\r\n --search-bar-height--: var(--search-bar-height, 30px);\r\n --search-bar-width--: var(--search-bar-width, 300px);\r\n --search-bar-internal-padding--: var(--padding-sm, 5px);\r\n --clear-button-offset--: var(--clear-button-offset, 0);\r\n }\r\n\r\n #container {\r\n display: inline-block;\r\n width: var(--search-bar-width--);\r\n }\r\n\r\n #main-bar {\r\n display: flex;\r\n height: var(--search-bar-height--, 30px);\r\n margin-bottom: 10px;\r\n flex: 1;\r\n }\r\n\r\n #category-dropdown {\r\n display: flex;\r\n flex-shrink: 0;\r\n height: 100%;\r\n box-sizing: border-box;\r\n\r\n background-color: #f5f5f7;\r\n border: 1px solid #999;\r\n border-radius: 5px 0 0 5px;\r\n\r\n --dropdownMainButtonPadding: 0 var(--search-bar-internal-padding--, 5px);\r\n --dropdownBgColor: #2c2c2c;\r\n --dropdownTextColor: #fff;\r\n --dropdownBorderColor: #ddd;\r\n --dropdownCaretColor: var(--ia-theme-primary-text-color, #2c2c2c);\r\n --dropdownHoverBgColor: rgba(255, 255, 255, 0.3);\r\n --dropdownHoverTextColor: #fff;\r\n --dropdownSelectedBgColor: rgba(255, 255, 255, 0.3);\r\n --dropdownSelectedTextColor: #fff;\r\n --dropdownWhiteSpace: nowrap;\r\n --dropdownOffsetTop: 2px;\r\n --caretHeight: 8px;\r\n --caretWidth: 12px;\r\n --caretPadding: 0 0 0 5px;\r\n --dropdownFontSize: inherit;\r\n --dropdownBorderRadius: 4px;\r\n --buttonSlotPaddingRight: 0;\r\n --dropdownTextAlign: left;\r\n }\r\n\r\n #category-dropdown [slot='dropdown-label'] {\r\n color: var(--ia-theme-primary-text-color, #2c2c2c);\r\n font-size: inherit;\r\n font-family: inherit;\r\n white-space: nowrap;\r\n }\r\n\r\n .no-dropdown #search-input {\r\n border-left: 1px solid #999;\r\n border-radius: 5px 0 0 5px;\r\n overflow: hidden;\r\n }\r\n\r\n #search-input {\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n border-top: 1px solid #999;\r\n border-bottom: 1px solid #999;\r\n font-size: inherit;\r\n\r\n --input-height: calc(var(--search-bar-height--) - 2px);\r\n --input-padding: 0 var(--search-bar-internal-padding--, 5px);\r\n --input-background-color: var(\r\n --ia-theme-secondary-background-color,\r\n #fff\r\n );\r\n --input-border-radius: 0;\r\n --input-border-width: 0;\r\n --input-box-shadow: none;\r\n --input-focused-box-shadow: none;\r\n --input-font-size: auto;\r\n --clear-button-top: var(--clear-button-offset--, 0);\r\n --clear-button-right: 2px;\r\n }\r\n\r\n #search-button {\r\n appearance: none;\r\n box-sizing: border-box;\r\n border-radius: 0 5px 5px 0;\r\n background-color: var(--ia-theme-secondary-background-color, #fff);\r\n border: 1px solid #999;\r\n border-left: 0;\r\n padding: 0 var(--search-bar-internal-padding--, 5px) 0 5px;\r\n min-width: 30px;\r\n height: 100%;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n }\r\n\r\n #search-button img {\r\n width: 18px;\r\n height: 18px;\r\n }\r\n\r\n .search-button-loading-icon {\r\n --icon-width: 20px;\r\n margin-top: 2px;\r\n }\r\n\r\n #search-links-area {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n margin-top: 5px;\r\n font-size: inherit;\r\n }\r\n\r\n #search-links {\r\n display: flex;\r\n column-gap: 10px;\r\n width: 100%;\r\n }\r\n\r\n #search-links > a:not(:last-child) {\r\n margin-bottom: 2px;\r\n }\r\n\r\n #search-links-end {\r\n display: contents;\r\n }\r\n\r\n .mobile #search-links-end {\r\n display: flex;\r\n margin-left: auto;\r\n column-gap: 10px;\r\n }\r\n\r\n a:link {\r\n text-decoration: none;\r\n display: block;\r\n flex: 0 1 auto;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n white-space: nowrap;\r\n }\r\n\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n a:visited {\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n\r\n ::slotted(#action-bar-spacing) {\r\n --iconLabelGutterWidth: 3px;\r\n margin-top: -4px; /* Better icon alignment */\r\n height: fit-content;\r\n }\r\n `;\r\n\r\n return [themeStyles, ownStyles];\r\n }\r\n}\r\n"]}
|
|
@@ -13,11 +13,4 @@ export type SearchRequestedDetail = {
|
|
|
13
13
|
query: string;
|
|
14
14
|
category: string;
|
|
15
15
|
};
|
|
16
|
-
/**
|
|
17
|
-
* Options for where to display Advanced Search:
|
|
18
|
-
* - `link` (default): as a text link below the search bar
|
|
19
|
-
* - `dropdown`: as an item at the bottom of the category dropdown
|
|
20
|
-
* - `none`: hidden entirely
|
|
21
|
-
*/
|
|
22
|
-
export type AdvancedSearchStyle = 'link' | 'dropdown' | 'none';
|
|
23
16
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/models.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * A category to include in the dropdown. Consists of an internal `id` string that is\r\n * emitted on selection, an a human-readable `label` to display in the dropdown.\r\n */\r\nexport type SearchCategory = {\r\n id: string;\r\n label: string;\r\n};\r\n\r\n/**\r\n * Detail object emitted with `searchRequested` events.\r\n */\r\nexport type SearchRequestedDetail = {\r\n query: string;\r\n category: string;\r\n};\r\n
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/elements/ia-dropdown-search-bar/models.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * A category to include in the dropdown. Consists of an internal `id` string that is\r\n * emitted on selection, an a human-readable `label` to display in the dropdown.\r\n */\r\nexport type SearchCategory = {\r\n id: string;\r\n label: string;\r\n};\r\n\r\n/**\r\n * Detail object emitted with `searchRequested` events.\r\n */\r\nexport type SearchRequestedDetail = {\r\n query: string;\r\n category: string;\r\n};\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@internetarchive/elements",
|
|
3
|
-
"version": "0.2.3-alpha-webdev8378.
|
|
3
|
+
"version": "0.2.3-alpha-webdev8378.1",
|
|
4
4
|
"description": "A web component library from the Internet Archive.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"types": "./dist/src/elements/index.d.ts",
|