@internetarchive/collection-browser 4.2.1-alpha-webdev7004.0 → 4.3.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.
Files changed (27) hide show
  1. package/dist/src/data-source/collection-browser-data-source.js +3 -3
  2. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  3. package/dist/src/tiles/list/tile-list-compact-header.js +45 -45
  4. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  5. package/dist/src/tiles/list/tile-list-compact.js +99 -99
  6. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  7. package/dist/src/tiles/list/tile-list.js +300 -299
  8. package/dist/src/tiles/list/tile-list.js.map +1 -1
  9. package/dist/src/tiles/tile-display-value-provider.d.ts +5 -0
  10. package/dist/src/tiles/tile-display-value-provider.js +9 -0
  11. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  12. package/dist/test/data-source/collection-browser-data-source.test.js +2 -2
  13. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -1
  14. package/dist/test/tiles/list/tile-list-compact-header.test.d.ts +1 -0
  15. package/dist/test/tiles/list/tile-list-compact-header.test.js +36 -0
  16. package/dist/test/tiles/list/tile-list-compact-header.test.js.map +1 -0
  17. package/dist/test/tiles/list/tile-list.test.js +147 -127
  18. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/data-source/collection-browser-data-source.ts +1465 -1465
  21. package/src/tiles/list/tile-list-compact-header.ts +86 -86
  22. package/src/tiles/list/tile-list-compact.ts +239 -239
  23. package/src/tiles/list/tile-list.ts +700 -700
  24. package/src/tiles/tile-display-value-provider.ts +134 -124
  25. package/test/data-source/collection-browser-data-source.test.ts +193 -193
  26. package/test/tiles/list/tile-list-compact-header.test.ts +43 -0
  27. package/test/tiles/list/tile-list.test.ts +576 -552
@@ -37,41 +37,41 @@ let TileList = class TileList extends BaseTileComponent {
37
37
  this.collectionLinks = [];
38
38
  }
39
39
  render() {
40
- return html `
41
- <div id="list-line" class="${this.classSize}">
40
+ return html `
41
+ <div id="list-line" class="${this.classSize}">
42
42
  ${this.classSize === 'mobile'
43
43
  ? this.mobileTemplate
44
- : this.desktopTemplate}
45
- </div>
44
+ : this.desktopTemplate}
45
+ </div>
46
46
  `;
47
47
  }
48
48
  /**
49
49
  * Templates
50
50
  */
51
51
  get mobileTemplate() {
52
- return html `
53
- <div id="list-line-top">
54
- <div id="list-line-left">${this.imageBlockTemplate}</div>
55
- <div id="list-line-right">
56
- <div id="title-line">
57
- <div id="title">${this.titleTemplate}</div>
58
- ${this.iconRightTemplate}
59
- </div>
60
- </div>
61
- </div>
62
- <div id="list-line-bottom">${this.detailsTemplate}</div>
52
+ return html `
53
+ <div id="list-line-top">
54
+ <div id="list-line-left">${this.imageBlockTemplate}</div>
55
+ <div id="list-line-right">
56
+ <div id="title-line">
57
+ <div id="title">${this.titleTemplate}</div>
58
+ ${this.iconRightTemplate}
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div id="list-line-bottom">${this.detailsTemplate}</div>
63
63
  `;
64
64
  }
65
65
  get desktopTemplate() {
66
- return html `
67
- <div id="list-line-left">${this.imageBlockTemplate}</div>
68
- <div id="list-line-right">
69
- <div id="title-line">
70
- <div id="title">${this.titleTemplate}</div>
71
- ${this.iconRightTemplate}
72
- </div>
73
- ${this.detailsTemplate}
74
- </div>
66
+ return html `
67
+ <div id="list-line-left">${this.imageBlockTemplate}</div>
68
+ <div id="list-line-right">
69
+ <div id="title-line">
70
+ <div id="title">${this.titleTemplate}</div>
71
+ ${this.iconRightTemplate}
72
+ </div>
73
+ ${this.detailsTemplate}
74
+ </div>
75
75
  `;
76
76
  }
77
77
  get imageBlockTemplate() {
@@ -79,48 +79,48 @@ let TileList = class TileList extends BaseTileComponent {
79
79
  return nothing;
80
80
  const isCollection = this.model.mediatype === 'collection';
81
81
  const href = this.displayValueProvider.itemPageUrl(this.model.identifier, isCollection);
82
- return html `<a
83
- id="image-link"
84
- title=${msg(str `View ${this.model?.title}`)}
85
- href=${href}
86
- >
87
- <image-block
88
- .model=${this.model}
89
- .baseImageUrl=${this.baseImageUrl}
90
- .isCompactTile=${false}
91
- .isListTile=${true}
92
- .viewSize=${this.classSize}
93
- .loggedIn=${this.loggedIn}
94
- .suppressBlurring=${this.suppressBlurring}
95
- >
96
- </image-block>
82
+ return html `<a
83
+ id="image-link"
84
+ title=${msg(str `View ${this.model?.title}`)}
85
+ href=${href}
86
+ >
87
+ <image-block
88
+ .model=${this.model}
89
+ .baseImageUrl=${this.baseImageUrl}
90
+ .isCompactTile=${false}
91
+ .isListTile=${true}
92
+ .viewSize=${this.classSize}
93
+ .loggedIn=${this.loggedIn}
94
+ .suppressBlurring=${this.suppressBlurring}
95
+ >
96
+ </image-block>
97
97
  </a> `;
98
98
  }
99
99
  get detailsTemplate() {
100
- return html `
101
- ${this.itemLineTemplate} ${this.creatorTemplate}
102
- <div id="dates-line">
103
- ${this.datePublishedTemplate} ${this.dateSortByTemplate}
104
- ${this.webArchivesCaptureDatesTemplate}
105
- </div>
106
- <div id="views-line">
107
- ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
108
- </div>
109
- ${this.topicsTemplate} ${this.collectionsTemplate}
110
- ${this.descriptionTemplate} ${this.textSnippetsTemplate}
111
- ${this.reviewBlockTemplate}
100
+ return html `
101
+ ${this.itemLineTemplate} ${this.creatorTemplate}
102
+ <div id="dates-line">
103
+ ${this.datePublishedTemplate} ${this.dateSortByTemplate}
104
+ ${this.webArchivesCaptureDatesTemplate}
105
+ </div>
106
+ <div id="views-line">
107
+ ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
108
+ </div>
109
+ ${this.topicsTemplate} ${this.collectionsTemplate}
110
+ ${this.descriptionTemplate} ${this.textSnippetsTemplate}
111
+ ${this.reviewBlockTemplate}
112
112
  `;
113
113
  }
114
114
  // Data templates
115
115
  get iconRightTemplate() {
116
- return html `
117
- <a
118
- id="icon-right"
119
- href=${this.mediatypeURL}
120
- title=${msg(str `See more: ${this.model?.mediatype}`)}
121
- >
122
- <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>
123
- </a>
116
+ return html `
117
+ <a
118
+ id="icon-right"
119
+ href=${this.mediatypeURL}
120
+ title=${msg(str `See more: ${this.model?.mediatype}`)}
121
+ >
122
+ <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>
123
+ </a>
124
124
  `;
125
125
  }
126
126
  get titleTemplate() {
@@ -130,8 +130,8 @@ let TileList = class TileList extends BaseTileComponent {
130
130
  // If the model has a server-specified href, use it
131
131
  // Otherwise construct a details link using the identifier
132
132
  return this.model?.href
133
- ? html `<a href="${this.baseNavigationUrl}${this.model.href}"
134
- >${this.model.title ?? this.model.identifier}</a
133
+ ? html `<a href="${this.baseNavigationUrl}${this.model.href}"
134
+ >${this.model.title ?? this.model.identifier}</a
135
135
  >`
136
136
  : this.detailsLink(this.model.identifier, this.model.title, this.model.mediatype === 'collection');
137
137
  }
@@ -148,11 +148,11 @@ let TileList = class TileList extends BaseTileComponent {
148
148
  if (!this.model?.source) {
149
149
  return nothing;
150
150
  }
151
- return html `
152
- <div id="source" class="metadata">
153
- ${this.labelTemplate(msg('Source'))}
154
- ${this.searchLink('source', this.model.source)}
155
- </div>
151
+ return html `
152
+ <div id="source" class="metadata">
153
+ ${this.labelTemplate(msg('Source'))}
154
+ ${this.searchLink('source', this.model.source)}
155
+ </div>
156
156
  `;
157
157
  }
158
158
  get volumeTemplate() {
@@ -164,23 +164,23 @@ let TileList = class TileList extends BaseTileComponent {
164
164
  get creatorTemplate() {
165
165
  // "Archivist since" if account
166
166
  if (this.model?.mediatype === 'account') {
167
- return html `
168
- <div id="creator" class="metadata">
169
- <span class="label"
170
- >${this.displayValueProvider.accountLabel ?? nothing}</span
171
- >
172
- </div>
167
+ return html `
168
+ <div id="creator" class="metadata">
169
+ <span class="label"
170
+ >${this.displayValueProvider.accountLabel ?? nothing}</span
171
+ >
172
+ </div>
173
173
  `;
174
174
  }
175
175
  // "Creator" if not account tile
176
176
  if (!this.model?.creators || this.model.creators.length === 0) {
177
177
  return nothing;
178
178
  }
179
- return html `
180
- <div id="creator" class="metadata">
181
- ${this.labelTemplate(msg('By'))}
182
- ${join(map(this.model.creators, id => this.searchLink('creator', id)), ', ')}
183
- </div>
179
+ return html `
180
+ <div id="creator" class="metadata">
181
+ ${this.labelTemplate(msg('By'))}
182
+ ${join(map(this.model.creators, id => this.searchLink('creator', id)), ', ')}
183
+ </div>
184
184
  `;
185
185
  }
186
186
  get datePublishedTemplate() {
@@ -206,7 +206,8 @@ let TileList = class TileList extends BaseTileComponent {
206
206
  return nothing;
207
207
  }
208
208
  get viewsTemplate() {
209
- const viewCount = this.effectiveSort?.field === 'week'
209
+ const isWeeklySort = this.effectiveSort?.field === 'week';
210
+ const viewCount = isWeeklySort
210
211
  ? this.model?.weeklyViewCount // weekly views
211
212
  : this.model?.viewCount; // all-time views
212
213
  if (viewCount == null)
@@ -215,7 +216,7 @@ let TileList = class TileList extends BaseTileComponent {
215
216
  if (this.model?.mediatype === 'search') {
216
217
  return this.metadataTemplate('(Favorited search query)', '');
217
218
  }
218
- return this.metadataTemplate(`${formatCount(viewCount, this.formatSize)}`, msg('Views'));
219
+ return this.metadataTemplate(`${formatCount(viewCount, this.formatSize)}`, this.displayValueProvider.viewsLabel);
219
220
  }
220
221
  get ratingTemplate() {
221
222
  return this.metadataTemplate(this.model?.averageRating, msg('Avg Rating'));
@@ -227,22 +228,22 @@ let TileList = class TileList extends BaseTileComponent {
227
228
  if (!this.model?.subjects || this.model.subjects.length === 0) {
228
229
  return nothing;
229
230
  }
230
- return html `
231
- <div id="topics" class="metadata">
232
- ${this.labelTemplate(msg('Topics'))}
233
- ${join(map(this.model.subjects, id => this.searchLink('subject', id)), ', ')}
234
- </div>
231
+ return html `
232
+ <div id="topics" class="metadata">
233
+ ${this.labelTemplate(msg('Topics'))}
234
+ ${join(map(this.model.subjects, id => this.searchLink('subject', id)), ', ')}
235
+ </div>
235
236
  `;
236
237
  }
237
238
  get collectionsTemplate() {
238
239
  if (!this.collectionLinks || this.collectionLinks.length === 0) {
239
240
  return nothing;
240
241
  }
241
- return html `
242
- <div id="collections" class="metadata">
243
- ${this.labelTemplate(msg('Collections'))}
244
- ${join(this.collectionLinks, ', ')}
245
- </div>
242
+ return html `
243
+ <div id="collections" class="metadata">
244
+ ${this.labelTemplate(msg('Collections'))}
245
+ ${join(this.collectionLinks, ', ')}
246
+ </div>
246
247
  `;
247
248
  }
248
249
  get descriptionTemplate() {
@@ -254,22 +255,22 @@ let TileList = class TileList extends BaseTileComponent {
254
255
  if (!this.model?.review)
255
256
  return nothing;
256
257
  const { reviewtitle, reviewbody, stars } = this.model.review;
257
- return html `
258
- <review-block
259
- viewsize="list"
260
- title=${ifDefined(reviewtitle)}
261
- body=${ifDefined(reviewbody)}
262
- starRating=${ifDefined(stars)}
263
- >
264
- </review-block>
258
+ return html `
259
+ <review-block
260
+ viewsize="list"
261
+ title=${ifDefined(reviewtitle)}
262
+ body=${ifDefined(reviewbody)}
263
+ starRating=${ifDefined(stars)}
264
+ >
265
+ </review-block>
265
266
  `;
266
267
  }
267
268
  get textSnippetsTemplate() {
268
269
  if (!this.hasSnippets)
269
270
  return nothing;
270
- return html `<text-snippet-block
271
- viewsize="list"
272
- .snippets=${this.model?.snippets}
271
+ return html `<text-snippet-block
272
+ viewsize="list"
273
+ .snippets=${this.model?.snippets}
273
274
  ></text-snippet-block>`;
274
275
  }
275
276
  get hasSnippets() {
@@ -278,12 +279,12 @@ let TileList = class TileList extends BaseTileComponent {
278
279
  get webArchivesCaptureDatesTemplate() {
279
280
  if (!this.model?.captureDates || !this.model.title)
280
281
  return nothing;
281
- return html `
282
- <ul class="capture-dates">
283
- ${map(this.model.captureDates, date => html `<li>
284
- ${this.displayValueProvider.webArchivesCaptureLink(this.model.title, date)}
285
- </li>`)}
286
- </ul>
282
+ return html `
283
+ <ul class="capture-dates">
284
+ ${map(this.model.captureDates, date => html `<li>
285
+ ${this.displayValueProvider.webArchivesCaptureLink(this.model.title, date)}
286
+ </li>`)}
287
+ </ul>
287
288
  `;
288
289
  }
289
290
  // Utility functions
@@ -291,10 +292,10 @@ let TileList = class TileList extends BaseTileComponent {
291
292
  metadataTemplate(text, label = '', id) {
292
293
  if (!text)
293
294
  return nothing;
294
- return html `
295
- <div id=${ifDefined(id)} class="metadata">
296
- ${this.labelTemplate(label)} ${text}
297
- </div>
295
+ return html `
296
+ <div id=${ifDefined(id)} class="metadata">
297
+ ${this.labelTemplate(label)} ${text}
298
+ </div>
298
299
  `;
299
300
  }
300
301
  labelTemplate(label) {
@@ -309,11 +310,11 @@ let TileList = class TileList extends BaseTileComponent {
309
310
  const query = encodeURIComponent(`${field}:"${searchTerm}"`);
310
311
  // No whitespace after closing tag
311
312
  // Note: single ' for href='' to wrap " in query var gets changed back by yarn format
312
- return html `<a
313
- href="${this.baseNavigationUrl}/search?query=${query}"
314
- rel="nofollow"
315
- >
316
- ${DOMPurify.sanitize(searchTerm)}</a
313
+ return html `<a
314
+ href="${this.baseNavigationUrl}/search?query=${query}"
315
+ rel="nofollow"
316
+ >
317
+ ${DOMPurify.sanitize(searchTerm)}</a
317
318
  >`;
318
319
  }
319
320
  detailsLink(identifier, text, isCollection = false) {
@@ -400,190 +401,190 @@ let TileList = class TileList extends BaseTileComponent {
400
401
  return 'long';
401
402
  }
402
403
  static get styles() {
403
- return css `
404
- html {
405
- font-size: unset;
406
- }
407
-
408
- div {
409
- font-size: 14px;
410
- }
411
-
412
- div a {
413
- text-decoration: none;
414
- }
415
-
416
- div a:link {
417
- color: var(--ia-theme-link-color, #4b64ff);
418
- }
419
-
420
- .label {
421
- font-weight: bold;
422
- }
423
-
424
- #list-line.mobile {
425
- --infiniteScrollerRowGap: 20px;
426
- --infiniteScrollerRowHeight: auto;
427
- }
428
-
429
- #list-line.desktop {
430
- --infiniteScrollerRowGap: 30px;
431
- --infiniteScrollerRowHeight: auto;
432
- }
433
-
434
- /* fields */
435
- #icon-right {
436
- width: 20px;
437
- padding-top: 5px;
438
- --iconHeight: 20px;
439
- --iconWidth: 20px;
440
- --iconTextAlign: right;
441
- margin-top: -8px;
442
- text-align: right;
443
- }
444
-
445
- #title {
446
- color: #4b64ff;
447
- text-decoration: none;
448
- font-size: 22px;
449
- font-weight: bold;
450
- /* align top of text with image */
451
- line-height: 25px;
452
- margin-top: -4px;
453
- padding-bottom: 2px;
454
- flex-grow: 1;
455
-
456
- display: -webkit-box;
457
- -webkit-box-orient: vertical;
458
- -webkit-line-clamp: 3;
459
- overflow: hidden;
460
- overflow-wrap: anywhere;
461
- }
462
-
463
- .metadata {
464
- line-height: 20px;
465
- }
466
-
467
- #description,
468
- #creator,
469
- #topics,
470
- #source {
471
- text-align: left;
472
- overflow: hidden;
473
- text-overflow: ellipsis;
474
- -webkit-box-orient: vertical;
475
- display: -webkit-box;
476
- word-break: break-word;
477
- -webkit-line-clamp: 3; /* number of lines to show */
478
- line-clamp: 3;
479
-
480
- /*
481
- * Safari doesn't always respect the line-clamping rules above,
482
- * so we add this to ensure these fields still get truncated
483
- */
484
- max-height: 60px;
485
- }
486
-
487
- #collections {
488
- display: -webkit-box;
489
- -webkit-box-orient: vertical;
490
- -webkit-line-clamp: 3;
491
- overflow: hidden;
492
- overflow-wrap: anywhere;
493
- }
494
-
495
- #collections > a {
496
- display: inline-block;
497
- }
498
-
499
- #icon {
500
- padding-top: 5px;
501
- }
502
-
503
- #description {
504
- padding-top: 10px;
505
- }
506
-
507
- /* Top level container */
508
- #list-line {
509
- display: flex;
510
- }
511
-
512
- #list-line.mobile {
513
- flex-direction: column;
514
- }
515
-
516
- #list-line.desktop {
517
- column-gap: 10px;
518
- }
519
-
520
- #list-line-top {
521
- display: flex;
522
- column-gap: 7px;
523
- }
524
-
525
- #list-line-bottom {
526
- padding-top: 4px;
527
- }
528
-
529
- #list-line-right,
530
- #list-line-top,
531
- #list-line-bottom {
532
- width: 100%;
533
- }
534
-
535
- /*
536
- * If the container becomes very tiny, don't let the thumbnail side take
537
- * up too much space. Shouldn't make a difference on ordinary viewport sizes.
538
- */
539
- #list-line-left {
540
- max-width: 25%;
541
-
542
- display: flex;
543
- flex-direction: column;
544
- row-gap: 5px;
545
- }
546
-
547
- div a:hover {
548
- text-decoration: underline;
549
- }
550
-
551
- /* Lines containing multiple div as row */
552
- #item-line,
553
- #dates-line,
554
- #views-line,
555
- #title-line {
556
- display: flex;
557
- flex-direction: row;
558
- column-gap: 10px;
559
- }
560
-
561
- /*
562
- * With the exception of the title line, allow these to wrap if
563
- * the space becomes too small to accommodate them together.
564
- *
565
- * The title line is excluded because it contains the mediatype icon
566
- * which we don't want to wrap.
567
- */
568
- #item-line,
569
- #dates-line,
570
- #views-line {
571
- flex-wrap: wrap;
572
- }
573
-
574
- .capture-dates {
575
- margin: 0;
576
- padding: 0;
577
- list-style-type: none;
578
- }
579
-
580
- .capture-dates a:link {
581
- text-decoration: none;
582
- color: var(--ia-theme-link-color, #4b64ff);
583
- }
584
- .capture-dates a:hover {
585
- text-decoration: underline;
586
- }
404
+ return css `
405
+ html {
406
+ font-size: unset;
407
+ }
408
+
409
+ div {
410
+ font-size: 14px;
411
+ }
412
+
413
+ div a {
414
+ text-decoration: none;
415
+ }
416
+
417
+ div a:link {
418
+ color: var(--ia-theme-link-color, #4b64ff);
419
+ }
420
+
421
+ .label {
422
+ font-weight: bold;
423
+ }
424
+
425
+ #list-line.mobile {
426
+ --infiniteScrollerRowGap: 20px;
427
+ --infiniteScrollerRowHeight: auto;
428
+ }
429
+
430
+ #list-line.desktop {
431
+ --infiniteScrollerRowGap: 30px;
432
+ --infiniteScrollerRowHeight: auto;
433
+ }
434
+
435
+ /* fields */
436
+ #icon-right {
437
+ width: 20px;
438
+ padding-top: 5px;
439
+ --iconHeight: 20px;
440
+ --iconWidth: 20px;
441
+ --iconTextAlign: right;
442
+ margin-top: -8px;
443
+ text-align: right;
444
+ }
445
+
446
+ #title {
447
+ color: #4b64ff;
448
+ text-decoration: none;
449
+ font-size: 22px;
450
+ font-weight: bold;
451
+ /* align top of text with image */
452
+ line-height: 25px;
453
+ margin-top: -4px;
454
+ padding-bottom: 2px;
455
+ flex-grow: 1;
456
+
457
+ display: -webkit-box;
458
+ -webkit-box-orient: vertical;
459
+ -webkit-line-clamp: 3;
460
+ overflow: hidden;
461
+ overflow-wrap: anywhere;
462
+ }
463
+
464
+ .metadata {
465
+ line-height: 20px;
466
+ }
467
+
468
+ #description,
469
+ #creator,
470
+ #topics,
471
+ #source {
472
+ text-align: left;
473
+ overflow: hidden;
474
+ text-overflow: ellipsis;
475
+ -webkit-box-orient: vertical;
476
+ display: -webkit-box;
477
+ word-break: break-word;
478
+ -webkit-line-clamp: 3; /* number of lines to show */
479
+ line-clamp: 3;
480
+
481
+ /*
482
+ * Safari doesn't always respect the line-clamping rules above,
483
+ * so we add this to ensure these fields still get truncated
484
+ */
485
+ max-height: 60px;
486
+ }
487
+
488
+ #collections {
489
+ display: -webkit-box;
490
+ -webkit-box-orient: vertical;
491
+ -webkit-line-clamp: 3;
492
+ overflow: hidden;
493
+ overflow-wrap: anywhere;
494
+ }
495
+
496
+ #collections > a {
497
+ display: inline-block;
498
+ }
499
+
500
+ #icon {
501
+ padding-top: 5px;
502
+ }
503
+
504
+ #description {
505
+ padding-top: 10px;
506
+ }
507
+
508
+ /* Top level container */
509
+ #list-line {
510
+ display: flex;
511
+ }
512
+
513
+ #list-line.mobile {
514
+ flex-direction: column;
515
+ }
516
+
517
+ #list-line.desktop {
518
+ column-gap: 10px;
519
+ }
520
+
521
+ #list-line-top {
522
+ display: flex;
523
+ column-gap: 7px;
524
+ }
525
+
526
+ #list-line-bottom {
527
+ padding-top: 4px;
528
+ }
529
+
530
+ #list-line-right,
531
+ #list-line-top,
532
+ #list-line-bottom {
533
+ width: 100%;
534
+ }
535
+
536
+ /*
537
+ * If the container becomes very tiny, don't let the thumbnail side take
538
+ * up too much space. Shouldn't make a difference on ordinary viewport sizes.
539
+ */
540
+ #list-line-left {
541
+ max-width: 25%;
542
+
543
+ display: flex;
544
+ flex-direction: column;
545
+ row-gap: 5px;
546
+ }
547
+
548
+ div a:hover {
549
+ text-decoration: underline;
550
+ }
551
+
552
+ /* Lines containing multiple div as row */
553
+ #item-line,
554
+ #dates-line,
555
+ #views-line,
556
+ #title-line {
557
+ display: flex;
558
+ flex-direction: row;
559
+ column-gap: 10px;
560
+ }
561
+
562
+ /*
563
+ * With the exception of the title line, allow these to wrap if
564
+ * the space becomes too small to accommodate them together.
565
+ *
566
+ * The title line is excluded because it contains the mediatype icon
567
+ * which we don't want to wrap.
568
+ */
569
+ #item-line,
570
+ #dates-line,
571
+ #views-line {
572
+ flex-wrap: wrap;
573
+ }
574
+
575
+ .capture-dates {
576
+ margin: 0;
577
+ padding: 0;
578
+ list-style-type: none;
579
+ }
580
+
581
+ .capture-dates a:link {
582
+ text-decoration: none;
583
+ color: var(--ia-theme-link-color, #4b64ff);
584
+ }
585
+ .capture-dates a:hover {
586
+ text-decoration: underline;
587
+ }
587
588
  `;
588
589
  }
589
590
  };