@internetarchive/collection-browser 4.5.1-alpha-webdev8221.0 → 4.5.2

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.
Files changed (69) hide show
  1. package/dist/index.js.map +1 -1
  2. package/dist/src/app-root.js +683 -683
  3. package/dist/src/app-root.js.map +1 -1
  4. package/dist/src/collection-browser.js +766 -766
  5. package/dist/src/collection-browser.js.map +1 -1
  6. package/dist/src/collection-facets/facet-row.js +143 -143
  7. package/dist/src/collection-facets/facet-row.js.map +1 -1
  8. package/dist/src/collection-facets/facets-template.js +24 -24
  9. package/dist/src/collection-facets/facets-template.js.map +1 -1
  10. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
  11. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  12. package/dist/src/restoration-state-handler.js.map +1 -1
  13. package/dist/src/styles/tile-action-styles.js +43 -43
  14. package/dist/src/styles/tile-action-styles.js.map +1 -1
  15. package/dist/src/tiles/base-tile-component.js +11 -11
  16. package/dist/src/tiles/base-tile-component.js.map +1 -1
  17. package/dist/src/tiles/grid/item-tile.js +138 -138
  18. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  19. package/dist/src/tiles/hover/hover-pane-controller.js +31 -29
  20. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  21. package/dist/src/tiles/list/tile-list-compact-header.js +62 -62
  22. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  23. package/dist/src/tiles/list/tile-list-compact.js +123 -123
  24. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  25. package/dist/src/tiles/list/tile-list.js +310 -310
  26. package/dist/src/tiles/list/tile-list.js.map +1 -1
  27. package/dist/src/tiles/models.js.map +1 -1
  28. package/dist/src/tiles/tile-dispatcher.js +286 -286
  29. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  30. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  31. package/dist/src/utils/date-filter-field.js.map +1 -1
  32. package/dist/test/collection-browser.test.js +203 -203
  33. package/dist/test/collection-browser.test.js.map +1 -1
  34. package/dist/test/collection-facets/facet-row.test.js +31 -31
  35. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  36. package/dist/test/tiles/grid/item-tile.test.js +77 -77
  37. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  38. package/dist/test/tiles/hover/hover-pane-controller.test.js +54 -27
  39. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  40. package/dist/test/tiles/list/tile-list.test.js +134 -134
  41. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  42. package/dist/test/tiles/tile-dispatcher.test.js +92 -92
  43. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  44. package/index.ts +29 -29
  45. package/package.json +1 -1
  46. package/src/app-root.ts +1284 -1284
  47. package/src/collection-browser.ts +3165 -3165
  48. package/src/collection-facets/facet-row.ts +309 -309
  49. package/src/collection-facets/facets-template.ts +85 -85
  50. package/src/data-source/collection-browser-data-source-interface.ts +351 -351
  51. package/src/data-source/collection-browser-data-source.ts +1474 -1474
  52. package/src/restoration-state-handler.ts +550 -550
  53. package/src/styles/tile-action-styles.ts +59 -59
  54. package/src/tiles/base-tile-component.ts +124 -124
  55. package/src/tiles/grid/item-tile.ts +347 -347
  56. package/src/tiles/hover/hover-pane-controller.ts +630 -628
  57. package/src/tiles/list/tile-list-compact-header.ts +112 -112
  58. package/src/tiles/list/tile-list-compact.ts +278 -278
  59. package/src/tiles/list/tile-list.ts +718 -718
  60. package/src/tiles/models.ts +21 -21
  61. package/src/tiles/tile-dispatcher.ts +637 -637
  62. package/src/tiles/tile-display-value-provider.ts +133 -133
  63. package/src/utils/date-filter-field.ts +11 -11
  64. package/test/collection-browser.test.ts +2639 -2639
  65. package/test/collection-facets/facet-row.test.ts +421 -421
  66. package/test/tiles/grid/item-tile.test.ts +520 -520
  67. package/test/tiles/hover/hover-pane-controller.test.ts +454 -418
  68. package/test/tiles/list/tile-list.test.ts +576 -576
  69. package/test/tiles/tile-dispatcher.test.ts +320 -320
@@ -1,309 +1,309 @@
1
- import {
2
- css,
3
- html,
4
- LitElement,
5
- TemplateResult,
6
- CSSResultGroup,
7
- nothing,
8
- } from 'lit';
9
- import { customElement, property } from 'lit/decorators.js';
10
- import eyeIcon from '../assets/img/icons/eye';
11
- import eyeClosedIcon from '../assets/img/icons/eye-closed';
12
- import type {
13
- FacetOption,
14
- FacetBucket,
15
- FacetEventDetails,
16
- FacetState,
17
- } from '../models';
18
- import type { CollectionTitles } from '../data-source/models';
19
- import { srOnlyStyle } from '../styles/sr-only';
20
-
21
- @customElement('facet-row')
22
- export class FacetRow extends LitElement {
23
- //
24
- // UI STATE
25
- //
26
-
27
- /** The name of the facet group to which this facet belongs (e.g., "mediatype") */
28
- @property({ type: String }) facetType?: FacetOption;
29
-
30
- /** The facet bucket containing details about the state, count, and key for this row */
31
- @property({ type: Object }) bucket?: FacetBucket;
32
-
33
- /**
34
- * Whether to omit the negative/hide button from this facet row if possible.
35
- * Has no effect if the facet bucket is itself hidden, in which case the hide
36
- * button *must* be shown to represent the state accurately.
37
- */
38
- @property({ type: Boolean, reflect: true }) omitHideButton = false;
39
-
40
- /** The collection name cache for converting collection identifiers to titles */
41
- @property({ type: Object })
42
- collectionTitles?: CollectionTitles;
43
-
44
- //
45
- // COMPONENT LIFECYCLE METHODS
46
- //
47
-
48
- render() {
49
- return html`${this.facetRowTemplate}`;
50
- }
51
-
52
- //
53
- // TEMPLATE GETTERS
54
- //
55
-
56
- /**
57
- * Template for the full facet row, including the positive/negative checks,
58
- * the display name, and the count.
59
- */
60
- private get facetRowTemplate(): TemplateResult | typeof nothing {
61
- const { bucket, facetType } = this;
62
- if (!bucket || !facetType) return nothing;
63
-
64
- const showOnlyCheckboxId = `${facetType}:${bucket.key}-show-only`;
65
- const negativeCheckboxId = `${facetType}:${bucket.key}-negative`;
66
-
67
- const extraNoteSpan = bucket.extraNote
68
- ? html`<span class="facet-note">${bucket.extraNote}</span>`
69
- : nothing;
70
-
71
- // For collections, we render the collection title as a link.
72
- // For other facet types, we just have a static value to use.
73
- const bucketTextDisplay =
74
- facetType !== 'collection'
75
- ? html`${bucket.displayText ?? bucket.key} ${extraNoteSpan}`
76
- : html`<a href="/details/${bucket.key}">
77
- ${this.collectionTitles?.get(bucket.key) ?? bucket.key}
78
- </a> `;
79
-
80
- const bucketCountText =
81
- bucket.count > 0 ? bucket.count.toLocaleString() : '';
82
-
83
- const facetHidden = bucket.state === 'hidden';
84
- const facetSelected = bucket.state === 'selected';
85
-
86
- const titleText = `${facetType}: ${bucket.displayText ?? bucket.key}`;
87
- const onlyShowText = facetSelected
88
- ? `Show all ${facetType}s`
89
- : `Only show ${titleText}`;
90
- const hideText = `Hide ${titleText}`;
91
- const unhideText = `Unhide ${titleText}`;
92
- const showHideText = facetHidden ? unhideText : hideText;
93
- const ariaLabel = `${titleText}, ${bucket.count} results`;
94
-
95
- // Added data-testid for Playwright testing
96
- return html`
97
- <div class="facet-row-container">
98
- <div class="facet-checkboxes">
99
- <input
100
- type="checkbox"
101
- .name=${facetType}
102
- .value=${bucket.key}
103
- @click=${(e: Event) => {
104
- this.facetClicked(e, false);
105
- }}
106
- .checked=${facetSelected}
107
- class="select-facet-checkbox"
108
- title=${onlyShowText}
109
- id=${showOnlyCheckboxId}
110
- data-testid=${showOnlyCheckboxId}
111
- />
112
- <div
113
- class="hide-facet-container"
114
- ?hidden=${this.omitHideButton && !facetHidden}
115
- >
116
- <input
117
- type="checkbox"
118
- id=${negativeCheckboxId}
119
- .name=${facetType}
120
- .value=${bucket.key}
121
- @click=${(e: Event) => {
122
- this.facetClicked(e, true);
123
- }}
124
- .checked=${facetHidden}
125
- class="hide-facet-checkbox"
126
- />
127
- <label
128
- for=${negativeCheckboxId}
129
- class="hide-facet-icon${facetHidden ? ' active' : ''}"
130
- title=${showHideText}
131
- data-testid=${negativeCheckboxId}
132
- >
133
- <span class="sr-only">${showHideText}</span>
134
- <span class="eye eye-open">${eyeIcon}</span>
135
- <span class="eye eye-closed">${eyeClosedIcon}</span>
136
- </label>
137
- </div>
138
- </div>
139
- <label
140
- for=${showOnlyCheckboxId}
141
- class="facet-info-display"
142
- title=${onlyShowText}
143
- aria-label=${ariaLabel}
144
- >
145
- <div class="facet-title">${bucketTextDisplay}</div>
146
- <div class="facet-count">${bucketCountText}</div>
147
- </label>
148
- </div>
149
- `;
150
- }
151
-
152
- //
153
- // EVENT HANDLERS & DISPATCHERS
154
- //
155
-
156
- /**
157
- * Handler for whenever this facet is clicked & its state changes
158
- */
159
- private facetClicked(e: Event, negative: boolean) {
160
- const { bucket, facetType } = this;
161
- if (!bucket || !facetType) return;
162
-
163
- const target = e.target as HTMLInputElement;
164
- const { checked } = target;
165
- this.bucket = {
166
- ...bucket,
167
- state: FacetRow.getFacetState(checked, negative),
168
- };
169
-
170
- this.dispatchFacetClickEvent({
171
- facetType,
172
- bucket: this.bucket,
173
- negative,
174
- });
175
- }
176
-
177
- /**
178
- * Emits a `facetClick` event with details about this facet & its current state
179
- */
180
- private dispatchFacetClickEvent(detail: FacetEventDetails) {
181
- const event = new CustomEvent<FacetEventDetails>('facetClick', {
182
- detail,
183
- });
184
- this.dispatchEvent(event);
185
- }
186
-
187
- //
188
- // OTHER METHODS
189
- //
190
-
191
- /**
192
- * Returns the composed facet state corresponding to a positive or negative facet's checked state
193
- */
194
- static getFacetState(checked: boolean, negative: boolean): FacetState {
195
- let state: FacetState;
196
- if (checked) {
197
- state = negative ? 'hidden' : 'selected';
198
- } else {
199
- state = 'none';
200
- }
201
- return state;
202
- }
203
-
204
- //
205
- // STYLES
206
- //
207
-
208
- static get styles(): CSSResultGroup {
209
- const facetRowBorderTop = css`var(--facet-row-border-top, 1px solid transparent)`;
210
- const facetRowBorderBottom = css`var(--facet-row-border-bottom, 1px solid transparent)`;
211
- const checkboxHeight = css`15px`;
212
-
213
- const ownCss = css`
214
- .facet-checkboxes {
215
- margin: 0 5px 0 0;
216
- display: flex;
217
- height: ${checkboxHeight};
218
- }
219
- .facet-checkboxes input:first-child {
220
- margin-right: 5px;
221
- }
222
- .facet-checkboxes input {
223
- height: ${checkboxHeight};
224
- width: ${checkboxHeight};
225
- margin: 0;
226
- }
227
- .facet-row-container {
228
- display: flex;
229
- font-weight: 500;
230
- font-size: 1.2rem;
231
- margin: 0 auto;
232
- padding: 0.25rem 0;
233
- height: auto;
234
- border-top: ${facetRowBorderTop};
235
- border-bottom: ${facetRowBorderBottom};
236
- }
237
- .facet-info-display {
238
- display: flex;
239
- flex: 1 1 0%;
240
- cursor: pointer;
241
- flex-wrap: wrap;
242
- }
243
- .facet-title {
244
- word-break: break-word;
245
- display: inline-block;
246
- flex: 1 1 0%;
247
- }
248
- .facet-note {
249
- color: #bbb;
250
- }
251
- .facet-count {
252
- text-align: right;
253
- }
254
- .select-facet-checkbox {
255
- cursor: pointer;
256
- display: inline-block;
257
- }
258
- .hide-facet-checkbox {
259
- position: absolute;
260
- clip: rect(0, 0, 0, 0);
261
- pointer-events: none;
262
- }
263
- .hide-facet-checkbox:focus-visible + .hide-facet-icon {
264
- outline-style: auto;
265
- outline-offset: 2px;
266
- }
267
- .hide-facet-icon {
268
- width: ${checkboxHeight};
269
- height: ${checkboxHeight};
270
- cursor: pointer;
271
- display: flex;
272
- }
273
- .eye {
274
- width: ${checkboxHeight};
275
- height: ${checkboxHeight};
276
- opacity: 0.3;
277
- }
278
- .hide-facet-icon:hover .eye,
279
- .active .eye {
280
- opacity: 1;
281
- }
282
- .hide-facet-icon:hover .eye-open,
283
- .hide-facet-icon .eye-closed {
284
- display: none;
285
- }
286
- .hide-facet-icon:hover .eye-closed,
287
- .hide-facet-icon.active .eye-closed {
288
- display: inline;
289
- }
290
- .hide-facet-icon.active .eye-open {
291
- display: none;
292
- }
293
- .sorting-icon {
294
- cursor: pointer;
295
- }
296
-
297
- a:link,
298
- a:visited {
299
- text-decoration: none;
300
- color: var(--ia-theme-link-color, #4b64ff);
301
- }
302
- a:hover {
303
- text-decoration: underline;
304
- }
305
- `;
306
-
307
- return [srOnlyStyle, ownCss];
308
- }
309
- }
1
+ import {
2
+ css,
3
+ html,
4
+ LitElement,
5
+ TemplateResult,
6
+ CSSResultGroup,
7
+ nothing,
8
+ } from 'lit';
9
+ import { customElement, property } from 'lit/decorators.js';
10
+ import eyeIcon from '../assets/img/icons/eye';
11
+ import eyeClosedIcon from '../assets/img/icons/eye-closed';
12
+ import type {
13
+ FacetOption,
14
+ FacetBucket,
15
+ FacetEventDetails,
16
+ FacetState,
17
+ } from '../models';
18
+ import type { CollectionTitles } from '../data-source/models';
19
+ import { srOnlyStyle } from '../styles/sr-only';
20
+
21
+ @customElement('facet-row')
22
+ export class FacetRow extends LitElement {
23
+ //
24
+ // UI STATE
25
+ //
26
+
27
+ /** The name of the facet group to which this facet belongs (e.g., "mediatype") */
28
+ @property({ type: String }) facetType?: FacetOption;
29
+
30
+ /** The facet bucket containing details about the state, count, and key for this row */
31
+ @property({ type: Object }) bucket?: FacetBucket;
32
+
33
+ /**
34
+ * Whether to omit the negative/hide button from this facet row if possible.
35
+ * Has no effect if the facet bucket is itself hidden, in which case the hide
36
+ * button *must* be shown to represent the state accurately.
37
+ */
38
+ @property({ type: Boolean, reflect: true }) omitHideButton = false;
39
+
40
+ /** The collection name cache for converting collection identifiers to titles */
41
+ @property({ type: Object })
42
+ collectionTitles?: CollectionTitles;
43
+
44
+ //
45
+ // COMPONENT LIFECYCLE METHODS
46
+ //
47
+
48
+ render() {
49
+ return html`${this.facetRowTemplate}`;
50
+ }
51
+
52
+ //
53
+ // TEMPLATE GETTERS
54
+ //
55
+
56
+ /**
57
+ * Template for the full facet row, including the positive/negative checks,
58
+ * the display name, and the count.
59
+ */
60
+ private get facetRowTemplate(): TemplateResult | typeof nothing {
61
+ const { bucket, facetType } = this;
62
+ if (!bucket || !facetType) return nothing;
63
+
64
+ const showOnlyCheckboxId = `${facetType}:${bucket.key}-show-only`;
65
+ const negativeCheckboxId = `${facetType}:${bucket.key}-negative`;
66
+
67
+ const extraNoteSpan = bucket.extraNote
68
+ ? html`<span class="facet-note">${bucket.extraNote}</span>`
69
+ : nothing;
70
+
71
+ // For collections, we render the collection title as a link.
72
+ // For other facet types, we just have a static value to use.
73
+ const bucketTextDisplay =
74
+ facetType !== 'collection'
75
+ ? html`${bucket.displayText ?? bucket.key} ${extraNoteSpan}`
76
+ : html`<a href="/details/${bucket.key}">
77
+ ${this.collectionTitles?.get(bucket.key) ?? bucket.key}
78
+ </a> `;
79
+
80
+ const bucketCountText =
81
+ bucket.count > 0 ? bucket.count.toLocaleString() : '';
82
+
83
+ const facetHidden = bucket.state === 'hidden';
84
+ const facetSelected = bucket.state === 'selected';
85
+
86
+ const titleText = `${facetType}: ${bucket.displayText ?? bucket.key}`;
87
+ const onlyShowText = facetSelected
88
+ ? `Show all ${facetType}s`
89
+ : `Only show ${titleText}`;
90
+ const hideText = `Hide ${titleText}`;
91
+ const unhideText = `Unhide ${titleText}`;
92
+ const showHideText = facetHidden ? unhideText : hideText;
93
+ const ariaLabel = `${titleText}, ${bucket.count} results`;
94
+
95
+ // Added data-testid for Playwright testing
96
+ return html`
97
+ <div class="facet-row-container">
98
+ <div class="facet-checkboxes">
99
+ <input
100
+ type="checkbox"
101
+ .name=${facetType}
102
+ .value=${bucket.key}
103
+ @click=${(e: Event) => {
104
+ this.facetClicked(e, false);
105
+ }}
106
+ .checked=${facetSelected}
107
+ class="select-facet-checkbox"
108
+ title=${onlyShowText}
109
+ id=${showOnlyCheckboxId}
110
+ data-testid=${showOnlyCheckboxId}
111
+ />
112
+ <div
113
+ class="hide-facet-container"
114
+ ?hidden=${this.omitHideButton && !facetHidden}
115
+ >
116
+ <input
117
+ type="checkbox"
118
+ id=${negativeCheckboxId}
119
+ .name=${facetType}
120
+ .value=${bucket.key}
121
+ @click=${(e: Event) => {
122
+ this.facetClicked(e, true);
123
+ }}
124
+ .checked=${facetHidden}
125
+ class="hide-facet-checkbox"
126
+ />
127
+ <label
128
+ for=${negativeCheckboxId}
129
+ class="hide-facet-icon${facetHidden ? ' active' : ''}"
130
+ title=${showHideText}
131
+ data-testid=${negativeCheckboxId}
132
+ >
133
+ <span class="sr-only">${showHideText}</span>
134
+ <span class="eye eye-open">${eyeIcon}</span>
135
+ <span class="eye eye-closed">${eyeClosedIcon}</span>
136
+ </label>
137
+ </div>
138
+ </div>
139
+ <label
140
+ for=${showOnlyCheckboxId}
141
+ class="facet-info-display"
142
+ title=${onlyShowText}
143
+ aria-label=${ariaLabel}
144
+ >
145
+ <div class="facet-title">${bucketTextDisplay}</div>
146
+ <div class="facet-count">${bucketCountText}</div>
147
+ </label>
148
+ </div>
149
+ `;
150
+ }
151
+
152
+ //
153
+ // EVENT HANDLERS & DISPATCHERS
154
+ //
155
+
156
+ /**
157
+ * Handler for whenever this facet is clicked & its state changes
158
+ */
159
+ private facetClicked(e: Event, negative: boolean) {
160
+ const { bucket, facetType } = this;
161
+ if (!bucket || !facetType) return;
162
+
163
+ const target = e.target as HTMLInputElement;
164
+ const { checked } = target;
165
+ this.bucket = {
166
+ ...bucket,
167
+ state: FacetRow.getFacetState(checked, negative),
168
+ };
169
+
170
+ this.dispatchFacetClickEvent({
171
+ facetType,
172
+ bucket: this.bucket,
173
+ negative,
174
+ });
175
+ }
176
+
177
+ /**
178
+ * Emits a `facetClick` event with details about this facet & its current state
179
+ */
180
+ private dispatchFacetClickEvent(detail: FacetEventDetails) {
181
+ const event = new CustomEvent<FacetEventDetails>('facetClick', {
182
+ detail,
183
+ });
184
+ this.dispatchEvent(event);
185
+ }
186
+
187
+ //
188
+ // OTHER METHODS
189
+ //
190
+
191
+ /**
192
+ * Returns the composed facet state corresponding to a positive or negative facet's checked state
193
+ */
194
+ static getFacetState(checked: boolean, negative: boolean): FacetState {
195
+ let state: FacetState;
196
+ if (checked) {
197
+ state = negative ? 'hidden' : 'selected';
198
+ } else {
199
+ state = 'none';
200
+ }
201
+ return state;
202
+ }
203
+
204
+ //
205
+ // STYLES
206
+ //
207
+
208
+ static get styles(): CSSResultGroup {
209
+ const facetRowBorderTop = css`var(--facet-row-border-top, 1px solid transparent)`;
210
+ const facetRowBorderBottom = css`var(--facet-row-border-bottom, 1px solid transparent)`;
211
+ const checkboxHeight = css`15px`;
212
+
213
+ const ownCss = css`
214
+ .facet-checkboxes {
215
+ margin: 0 5px 0 0;
216
+ display: flex;
217
+ height: ${checkboxHeight};
218
+ }
219
+ .facet-checkboxes input:first-child {
220
+ margin-right: 5px;
221
+ }
222
+ .facet-checkboxes input {
223
+ height: ${checkboxHeight};
224
+ width: ${checkboxHeight};
225
+ margin: 0;
226
+ }
227
+ .facet-row-container {
228
+ display: flex;
229
+ font-weight: 500;
230
+ font-size: 1.2rem;
231
+ margin: 0 auto;
232
+ padding: 0.25rem 0;
233
+ height: auto;
234
+ border-top: ${facetRowBorderTop};
235
+ border-bottom: ${facetRowBorderBottom};
236
+ }
237
+ .facet-info-display {
238
+ display: flex;
239
+ flex: 1 1 0%;
240
+ cursor: pointer;
241
+ flex-wrap: wrap;
242
+ }
243
+ .facet-title {
244
+ word-break: break-word;
245
+ display: inline-block;
246
+ flex: 1 1 0%;
247
+ }
248
+ .facet-note {
249
+ color: #bbb;
250
+ }
251
+ .facet-count {
252
+ text-align: right;
253
+ }
254
+ .select-facet-checkbox {
255
+ cursor: pointer;
256
+ display: inline-block;
257
+ }
258
+ .hide-facet-checkbox {
259
+ position: absolute;
260
+ clip: rect(0, 0, 0, 0);
261
+ pointer-events: none;
262
+ }
263
+ .hide-facet-checkbox:focus-visible + .hide-facet-icon {
264
+ outline-style: auto;
265
+ outline-offset: 2px;
266
+ }
267
+ .hide-facet-icon {
268
+ width: ${checkboxHeight};
269
+ height: ${checkboxHeight};
270
+ cursor: pointer;
271
+ display: flex;
272
+ }
273
+ .eye {
274
+ width: ${checkboxHeight};
275
+ height: ${checkboxHeight};
276
+ opacity: 0.3;
277
+ }
278
+ .hide-facet-icon:hover .eye,
279
+ .active .eye {
280
+ opacity: 1;
281
+ }
282
+ .hide-facet-icon:hover .eye-open,
283
+ .hide-facet-icon .eye-closed {
284
+ display: none;
285
+ }
286
+ .hide-facet-icon:hover .eye-closed,
287
+ .hide-facet-icon.active .eye-closed {
288
+ display: inline;
289
+ }
290
+ .hide-facet-icon.active .eye-open {
291
+ display: none;
292
+ }
293
+ .sorting-icon {
294
+ cursor: pointer;
295
+ }
296
+
297
+ a:link,
298
+ a:visited {
299
+ text-decoration: none;
300
+ color: var(--ia-theme-link-color, #4b64ff);
301
+ }
302
+ a:hover {
303
+ text-decoration: underline;
304
+ }
305
+ `;
306
+
307
+ return [srOnlyStyle, ownCss];
308
+ }
309
+ }