@internetarchive/collection-browser 4.5.1-alpha-webdev8221.0 → 4.5.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.
Files changed (63) 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/list/tile-list-compact-header.js +62 -62
  20. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  21. package/dist/src/tiles/list/tile-list-compact.js +123 -123
  22. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  23. package/dist/src/tiles/list/tile-list.js +310 -310
  24. package/dist/src/tiles/list/tile-list.js.map +1 -1
  25. package/dist/src/tiles/models.js.map +1 -1
  26. package/dist/src/tiles/tile-dispatcher.js +286 -286
  27. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  28. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  29. package/dist/src/utils/date-filter-field.js.map +1 -1
  30. package/dist/test/collection-browser.test.js +203 -203
  31. package/dist/test/collection-browser.test.js.map +1 -1
  32. package/dist/test/collection-facets/facet-row.test.js +31 -31
  33. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  34. package/dist/test/tiles/grid/item-tile.test.js +77 -77
  35. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  36. package/dist/test/tiles/list/tile-list.test.js +134 -134
  37. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  38. package/dist/test/tiles/tile-dispatcher.test.js +92 -92
  39. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  40. package/index.ts +29 -29
  41. package/package.json +1 -1
  42. package/src/app-root.ts +1284 -1284
  43. package/src/collection-browser.ts +3165 -3165
  44. package/src/collection-facets/facet-row.ts +309 -309
  45. package/src/collection-facets/facets-template.ts +85 -85
  46. package/src/data-source/collection-browser-data-source-interface.ts +351 -351
  47. package/src/data-source/collection-browser-data-source.ts +1474 -1474
  48. package/src/restoration-state-handler.ts +550 -550
  49. package/src/styles/tile-action-styles.ts +59 -59
  50. package/src/tiles/base-tile-component.ts +124 -124
  51. package/src/tiles/grid/item-tile.ts +347 -347
  52. package/src/tiles/list/tile-list-compact-header.ts +112 -112
  53. package/src/tiles/list/tile-list-compact.ts +278 -278
  54. package/src/tiles/list/tile-list.ts +718 -718
  55. package/src/tiles/models.ts +21 -21
  56. package/src/tiles/tile-dispatcher.ts +637 -637
  57. package/src/tiles/tile-display-value-provider.ts +133 -133
  58. package/src/utils/date-filter-field.ts +11 -11
  59. package/test/collection-browser.test.ts +2639 -2639
  60. package/test/collection-facets/facet-row.test.ts +421 -421
  61. package/test/tiles/grid/item-tile.test.ts +520 -520
  62. package/test/tiles/list/tile-list.test.ts +576 -576
  63. package/test/tiles/tile-dispatcher.test.ts +320 -320
@@ -39,45 +39,45 @@ let TileList = class TileList extends BaseTileComponent {
39
39
  this.collectionLinks = [];
40
40
  }
41
41
  render() {
42
- return html `
43
- <div id="list-line" class="${this.classSize}">
42
+ return html `
43
+ <div id="list-line" class="${this.classSize}">
44
44
  ${this.classSize === 'mobile'
45
45
  ? this.mobileTemplate
46
- : this.desktopTemplate}
47
- </div>
46
+ : this.desktopTemplate}
47
+ </div>
48
48
  `;
49
49
  }
50
50
  /**
51
51
  * Templates
52
52
  */
53
53
  get mobileTemplate() {
54
- return html `
55
- <div id="list-line-top">
56
- <div id="list-line-left">
57
- ${this.imageBlockTemplate} ${this.renderTileActions('list-detail')}
58
- </div>
59
- <div id="list-line-right">
60
- <div id="title-line">
61
- <div id="title">${this.titleTemplate}</div>
62
- ${this.iconRightTemplate}
63
- </div>
64
- </div>
65
- </div>
66
- <div id="list-line-bottom">${this.detailsTemplate}</div>
54
+ return html `
55
+ <div id="list-line-top">
56
+ <div id="list-line-left">
57
+ ${this.imageBlockTemplate} ${this.renderTileActions('list-detail')}
58
+ </div>
59
+ <div id="list-line-right">
60
+ <div id="title-line">
61
+ <div id="title">${this.titleTemplate}</div>
62
+ ${this.iconRightTemplate}
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <div id="list-line-bottom">${this.detailsTemplate}</div>
67
67
  `;
68
68
  }
69
69
  get desktopTemplate() {
70
- return html `
71
- <div id="list-line-left">
72
- ${this.imageBlockTemplate} ${this.renderTileActions('list-detail')}
73
- </div>
74
- <div id="list-line-right">
75
- <div id="title-line">
76
- <div id="title">${this.titleTemplate}</div>
77
- ${this.iconRightTemplate}
78
- </div>
79
- ${this.detailsTemplate}
80
- </div>
70
+ return html `
71
+ <div id="list-line-left">
72
+ ${this.imageBlockTemplate} ${this.renderTileActions('list-detail')}
73
+ </div>
74
+ <div id="list-line-right">
75
+ <div id="title-line">
76
+ <div id="title">${this.titleTemplate}</div>
77
+ ${this.iconRightTemplate}
78
+ </div>
79
+ ${this.detailsTemplate}
80
+ </div>
81
81
  `;
82
82
  }
83
83
  get imageBlockTemplate() {
@@ -85,48 +85,48 @@ let TileList = class TileList extends BaseTileComponent {
85
85
  return nothing;
86
86
  const isCollection = this.model.mediatype === 'collection';
87
87
  const href = this.displayValueProvider.itemPageUrl(this.model.identifier, isCollection);
88
- return html `<a
89
- id="image-link"
90
- title=${msg(str `View ${this.model?.title}`)}
91
- href=${href}
92
- >
93
- <image-block
94
- .model=${this.model}
95
- .baseImageUrl=${this.baseImageUrl}
96
- .isCompactTile=${false}
97
- .isListTile=${true}
98
- .viewSize=${this.classSize}
99
- .loggedIn=${this.loggedIn}
100
- .suppressBlurring=${this.suppressBlurring}
101
- >
102
- </image-block>
88
+ return html `<a
89
+ id="image-link"
90
+ title=${msg(str `View ${this.model?.title}`)}
91
+ href=${href}
92
+ >
93
+ <image-block
94
+ .model=${this.model}
95
+ .baseImageUrl=${this.baseImageUrl}
96
+ .isCompactTile=${false}
97
+ .isListTile=${true}
98
+ .viewSize=${this.classSize}
99
+ .loggedIn=${this.loggedIn}
100
+ .suppressBlurring=${this.suppressBlurring}
101
+ >
102
+ </image-block>
103
103
  </a> `;
104
104
  }
105
105
  get detailsTemplate() {
106
- return html `
107
- ${this.itemLineTemplate} ${this.creatorTemplate}
108
- <div id="dates-line">
109
- ${this.datePublishedTemplate} ${this.dateSortByTemplate}
110
- ${this.webArchivesCaptureDatesTemplate}
111
- </div>
112
- <div id="views-line">
113
- ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
114
- </div>
115
- ${this.topicsTemplate} ${this.collectionsTemplate}
116
- ${this.descriptionTemplate} ${this.textSnippetsTemplate}
117
- ${this.reviewBlockTemplate}
106
+ return html `
107
+ ${this.itemLineTemplate} ${this.creatorTemplate}
108
+ <div id="dates-line">
109
+ ${this.datePublishedTemplate} ${this.dateSortByTemplate}
110
+ ${this.webArchivesCaptureDatesTemplate}
111
+ </div>
112
+ <div id="views-line">
113
+ ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
114
+ </div>
115
+ ${this.topicsTemplate} ${this.collectionsTemplate}
116
+ ${this.descriptionTemplate} ${this.textSnippetsTemplate}
117
+ ${this.reviewBlockTemplate}
118
118
  `;
119
119
  }
120
120
  // Data templates
121
121
  get iconRightTemplate() {
122
- return html `
123
- <a
124
- id="icon-right"
125
- href=${this.mediatypeURL}
126
- title=${msg(str `See more: ${this.model?.mediatype}`)}
127
- >
128
- <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>
129
- </a>
122
+ return html `
123
+ <a
124
+ id="icon-right"
125
+ href=${this.mediatypeURL}
126
+ title=${msg(str `See more: ${this.model?.mediatype}`)}
127
+ >
128
+ <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>
129
+ </a>
130
130
  `;
131
131
  }
132
132
  get titleTemplate() {
@@ -136,8 +136,8 @@ let TileList = class TileList extends BaseTileComponent {
136
136
  // If the model has a server-specified href, use it
137
137
  // Otherwise construct a details link using the identifier
138
138
  return this.model?.href
139
- ? html `<a href="${this.baseNavigationUrl}${this.model.href}"
140
- >${this.model.title ?? this.model.identifier}</a
139
+ ? html `<a href="${this.baseNavigationUrl}${this.model.href}"
140
+ >${this.model.title ?? this.model.identifier}</a
141
141
  >`
142
142
  : this.detailsLink(this.model.identifier, this.model.title, this.model.mediatype === 'collection');
143
143
  }
@@ -154,11 +154,11 @@ let TileList = class TileList extends BaseTileComponent {
154
154
  if (!this.model?.source) {
155
155
  return nothing;
156
156
  }
157
- return html `
158
- <div id="source" class="metadata">
159
- ${this.labelTemplate(msg('Source'))}
160
- ${this.searchLink('source', this.model.source)}
161
- </div>
157
+ return html `
158
+ <div id="source" class="metadata">
159
+ ${this.labelTemplate(msg('Source'))}
160
+ ${this.searchLink('source', this.model.source)}
161
+ </div>
162
162
  `;
163
163
  }
164
164
  get volumeTemplate() {
@@ -170,23 +170,23 @@ let TileList = class TileList extends BaseTileComponent {
170
170
  get creatorTemplate() {
171
171
  // "Archivist since" if account
172
172
  if (this.model?.mediatype === 'account') {
173
- return html `
174
- <div id="creator" class="metadata">
175
- <span class="label"
176
- >${this.displayValueProvider.accountLabel ?? nothing}</span
177
- >
178
- </div>
173
+ return html `
174
+ <div id="creator" class="metadata">
175
+ <span class="label"
176
+ >${this.displayValueProvider.accountLabel ?? nothing}</span
177
+ >
178
+ </div>
179
179
  `;
180
180
  }
181
181
  // "Creator" if not account tile
182
182
  if (!this.model?.creators || this.model.creators.length === 0) {
183
183
  return nothing;
184
184
  }
185
- return html `
186
- <div id="creator" class="metadata">
187
- ${this.labelTemplate(msg('By'))}
188
- ${join(map(this.model.creators, id => this.searchLink('creator', id)), ', ')}
189
- </div>
185
+ return html `
186
+ <div id="creator" class="metadata">
187
+ ${this.labelTemplate(msg('By'))}
188
+ ${join(map(this.model.creators, id => this.searchLink('creator', id)), ', ')}
189
+ </div>
190
190
  `;
191
191
  }
192
192
  get datePublishedTemplate() {
@@ -234,22 +234,22 @@ let TileList = class TileList extends BaseTileComponent {
234
234
  if (!this.model?.subjects || this.model.subjects.length === 0) {
235
235
  return nothing;
236
236
  }
237
- return html `
238
- <div id="topics" class="metadata">
239
- ${this.labelTemplate(msg('Topics'))}
240
- ${join(map(this.model.subjects, id => this.searchLink('subject', id)), ', ')}
241
- </div>
237
+ return html `
238
+ <div id="topics" class="metadata">
239
+ ${this.labelTemplate(msg('Topics'))}
240
+ ${join(map(this.model.subjects, id => this.searchLink('subject', id)), ', ')}
241
+ </div>
242
242
  `;
243
243
  }
244
244
  get collectionsTemplate() {
245
245
  if (!this.collectionLinks || this.collectionLinks.length === 0) {
246
246
  return nothing;
247
247
  }
248
- return html `
249
- <div id="collections" class="metadata">
250
- ${this.labelTemplate(msg('Collections'))}
251
- ${join(this.collectionLinks, ', ')}
252
- </div>
248
+ return html `
249
+ <div id="collections" class="metadata">
250
+ ${this.labelTemplate(msg('Collections'))}
251
+ ${join(this.collectionLinks, ', ')}
252
+ </div>
253
253
  `;
254
254
  }
255
255
  get descriptionTemplate() {
@@ -261,22 +261,22 @@ let TileList = class TileList extends BaseTileComponent {
261
261
  if (!this.model?.review)
262
262
  return nothing;
263
263
  const { reviewtitle, reviewbody, stars } = this.model.review;
264
- return html `
265
- <review-block
266
- viewsize="list"
267
- title=${ifDefined(reviewtitle)}
268
- body=${ifDefined(reviewbody)}
269
- starRating=${ifDefined(stars)}
270
- >
271
- </review-block>
264
+ return html `
265
+ <review-block
266
+ viewsize="list"
267
+ title=${ifDefined(reviewtitle)}
268
+ body=${ifDefined(reviewbody)}
269
+ starRating=${ifDefined(stars)}
270
+ >
271
+ </review-block>
272
272
  `;
273
273
  }
274
274
  get textSnippetsTemplate() {
275
275
  if (!this.hasSnippets)
276
276
  return nothing;
277
- return html `<text-snippet-block
278
- viewsize="list"
279
- .snippets=${this.model?.snippets}
277
+ return html `<text-snippet-block
278
+ viewsize="list"
279
+ .snippets=${this.model?.snippets}
280
280
  ></text-snippet-block>`;
281
281
  }
282
282
  get hasSnippets() {
@@ -285,12 +285,12 @@ let TileList = class TileList extends BaseTileComponent {
285
285
  get webArchivesCaptureDatesTemplate() {
286
286
  if (!this.model?.captureDates || !this.model.title)
287
287
  return nothing;
288
- return html `
289
- <ul class="capture-dates">
290
- ${map(this.model.captureDates, date => html `<li>
291
- ${this.displayValueProvider.webArchivesCaptureLink(this.model.title, date)}
292
- </li>`)}
293
- </ul>
288
+ return html `
289
+ <ul class="capture-dates">
290
+ ${map(this.model.captureDates, date => html `<li>
291
+ ${this.displayValueProvider.webArchivesCaptureLink(this.model.title, date)}
292
+ </li>`)}
293
+ </ul>
294
294
  `;
295
295
  }
296
296
  // Utility functions
@@ -298,10 +298,10 @@ let TileList = class TileList extends BaseTileComponent {
298
298
  metadataTemplate(text, label = '', id) {
299
299
  if (!text)
300
300
  return nothing;
301
- return html `
302
- <div id=${ifDefined(id)} class="metadata">
303
- ${this.labelTemplate(label)} ${text}
304
- </div>
301
+ return html `
302
+ <div id=${ifDefined(id)} class="metadata">
303
+ ${this.labelTemplate(label)} ${text}
304
+ </div>
305
305
  `;
306
306
  }
307
307
  labelTemplate(label) {
@@ -316,11 +316,11 @@ let TileList = class TileList extends BaseTileComponent {
316
316
  const query = encodeURIComponent(`${field}:"${searchTerm}"`);
317
317
  // No whitespace after closing tag
318
318
  // Note: single ' for href='' to wrap " in query var gets changed back by yarn format
319
- return html `<a
320
- href="${this.baseNavigationUrl}/search?query=${query}"
321
- rel="nofollow"
322
- >
323
- ${DOMPurify.sanitize(searchTerm)}</a
319
+ return html `<a
320
+ href="${this.baseNavigationUrl}/search?query=${query}"
321
+ rel="nofollow"
322
+ >
323
+ ${DOMPurify.sanitize(searchTerm)}</a
324
324
  >`;
325
325
  }
326
326
  detailsLink(identifier, text, isCollection = false) {
@@ -409,199 +409,199 @@ let TileList = class TileList extends BaseTileComponent {
409
409
  static get styles() {
410
410
  return [
411
411
  tileActionStyles,
412
- css `
413
- html {
414
- font-size: unset;
415
- }
416
-
417
- div {
418
- font-size: 14px;
419
- }
420
-
421
- div a {
422
- text-decoration: none;
423
- }
424
-
425
- div a:link {
426
- color: var(--ia-theme-link-color, #4b64ff);
427
- }
428
-
429
- .label {
430
- font-weight: bold;
431
- }
432
-
433
- #list-line.mobile {
434
- --infiniteScrollerRowGap: 20px;
435
- --infiniteScrollerRowHeight: auto;
436
- }
437
-
438
- #list-line.desktop {
439
- --infiniteScrollerRowGap: 30px;
440
- --infiniteScrollerRowHeight: auto;
441
- }
442
-
443
- /* fields */
444
- #icon-right {
445
- width: 20px;
446
- padding-top: 5px;
447
- --iconHeight: 20px;
448
- --iconWidth: 20px;
449
- --iconTextAlign: right;
450
- margin-top: -8px;
451
- text-align: right;
452
- }
453
-
454
- #title {
455
- color: #4b64ff;
456
- text-decoration: none;
457
- font-size: 22px;
458
- font-weight: bold;
459
- /* align top of text with image */
460
- line-height: 25px;
461
- margin-top: -4px;
462
- padding-bottom: 2px;
463
- flex-grow: 1;
464
-
465
- display: -webkit-box;
466
- -webkit-box-orient: vertical;
467
- -webkit-line-clamp: 3;
468
- overflow: hidden;
469
- overflow-wrap: anywhere;
470
- }
471
-
472
- .metadata {
473
- line-height: 20px;
474
- }
475
-
476
- #description,
477
- #creator,
478
- #topics,
479
- #source {
480
- text-align: left;
481
- overflow: hidden;
482
- text-overflow: ellipsis;
483
- -webkit-box-orient: vertical;
484
- display: -webkit-box;
485
- word-break: break-word;
486
- -webkit-line-clamp: 3; /* number of lines to show */
487
- line-clamp: 3;
488
-
489
- /*
490
- * Safari doesn't always respect the line-clamping rules above,
491
- * so we add this to ensure these fields still get truncated
492
- */
493
- max-height: 60px;
494
- }
495
-
496
- #collections {
497
- display: -webkit-box;
498
- -webkit-box-orient: vertical;
499
- -webkit-line-clamp: 3;
500
- overflow: hidden;
501
- overflow-wrap: anywhere;
502
- }
503
-
504
- #collections > a {
505
- display: inline-block;
506
- }
507
-
508
- #icon {
509
- padding-top: 5px;
510
- }
511
-
512
- #description {
513
- padding-top: 10px;
514
- }
515
-
516
- /* Top level container */
517
- #list-line {
518
- display: flex;
519
- }
520
-
521
- #list-line.mobile {
522
- flex-direction: column;
523
- }
524
-
525
- #list-line.desktop {
526
- column-gap: 10px;
527
- }
528
-
529
- #list-line-top {
530
- display: flex;
531
- column-gap: 7px;
532
- }
533
-
534
- #list-line-bottom {
535
- padding-top: 4px;
536
- }
537
-
538
- #list-line-right,
539
- #list-line-top,
540
- #list-line-bottom {
541
- width: 100%;
542
- }
543
-
544
- /*
545
- * If the container becomes very tiny, don't let the thumbnail side take
546
- * up too much space. Shouldn't make a difference on ordinary viewport sizes.
547
- */
548
- #list-line-left {
549
- max-width: 25%;
550
-
551
- display: flex;
552
- flex-direction: column;
553
- row-gap: 5px;
554
- }
555
-
556
- div a:hover {
557
- text-decoration: underline;
558
- }
559
-
560
- /* Lines containing multiple div as row */
561
- #item-line,
562
- #dates-line,
563
- #views-line,
564
- #title-line {
565
- display: flex;
566
- flex-direction: row;
567
- column-gap: 10px;
568
- }
569
-
570
- /*
571
- * With the exception of the title line, allow these to wrap if
572
- * the space becomes too small to accommodate them together.
573
- *
574
- * The title line is excluded because it contains the mediatype icon
575
- * which we don't want to wrap.
576
- */
577
- #item-line,
578
- #dates-line,
579
- #views-line {
580
- flex-wrap: wrap;
581
- }
582
-
583
- .capture-dates {
584
- margin: 0;
585
- padding: 0;
586
- list-style-type: none;
587
- }
588
-
589
- .capture-dates a:link {
590
- text-decoration: none;
591
- color: var(--ia-theme-link-color, #4b64ff);
592
- }
593
- .capture-dates a:hover {
594
- text-decoration: underline;
595
- }
596
-
597
- /*
598
- * Tile-list (extended) action row sits under the thumbnail in the left
599
- * column. The image-block above already has its own bottom padding via
600
- * the parent's row-gap, so we don't need extra spacing here.
601
- */
602
- .tile-actions.list-detail {
603
- width: 100%;
604
- }
412
+ css `
413
+ html {
414
+ font-size: unset;
415
+ }
416
+
417
+ div {
418
+ font-size: 14px;
419
+ }
420
+
421
+ div a {
422
+ text-decoration: none;
423
+ }
424
+
425
+ div a:link {
426
+ color: var(--ia-theme-link-color, #4b64ff);
427
+ }
428
+
429
+ .label {
430
+ font-weight: bold;
431
+ }
432
+
433
+ #list-line.mobile {
434
+ --infiniteScrollerRowGap: 20px;
435
+ --infiniteScrollerRowHeight: auto;
436
+ }
437
+
438
+ #list-line.desktop {
439
+ --infiniteScrollerRowGap: 30px;
440
+ --infiniteScrollerRowHeight: auto;
441
+ }
442
+
443
+ /* fields */
444
+ #icon-right {
445
+ width: 20px;
446
+ padding-top: 5px;
447
+ --iconHeight: 20px;
448
+ --iconWidth: 20px;
449
+ --iconTextAlign: right;
450
+ margin-top: -8px;
451
+ text-align: right;
452
+ }
453
+
454
+ #title {
455
+ color: #4b64ff;
456
+ text-decoration: none;
457
+ font-size: 22px;
458
+ font-weight: bold;
459
+ /* align top of text with image */
460
+ line-height: 25px;
461
+ margin-top: -4px;
462
+ padding-bottom: 2px;
463
+ flex-grow: 1;
464
+
465
+ display: -webkit-box;
466
+ -webkit-box-orient: vertical;
467
+ -webkit-line-clamp: 3;
468
+ overflow: hidden;
469
+ overflow-wrap: anywhere;
470
+ }
471
+
472
+ .metadata {
473
+ line-height: 20px;
474
+ }
475
+
476
+ #description,
477
+ #creator,
478
+ #topics,
479
+ #source {
480
+ text-align: left;
481
+ overflow: hidden;
482
+ text-overflow: ellipsis;
483
+ -webkit-box-orient: vertical;
484
+ display: -webkit-box;
485
+ word-break: break-word;
486
+ -webkit-line-clamp: 3; /* number of lines to show */
487
+ line-clamp: 3;
488
+
489
+ /*
490
+ * Safari doesn't always respect the line-clamping rules above,
491
+ * so we add this to ensure these fields still get truncated
492
+ */
493
+ max-height: 60px;
494
+ }
495
+
496
+ #collections {
497
+ display: -webkit-box;
498
+ -webkit-box-orient: vertical;
499
+ -webkit-line-clamp: 3;
500
+ overflow: hidden;
501
+ overflow-wrap: anywhere;
502
+ }
503
+
504
+ #collections > a {
505
+ display: inline-block;
506
+ }
507
+
508
+ #icon {
509
+ padding-top: 5px;
510
+ }
511
+
512
+ #description {
513
+ padding-top: 10px;
514
+ }
515
+
516
+ /* Top level container */
517
+ #list-line {
518
+ display: flex;
519
+ }
520
+
521
+ #list-line.mobile {
522
+ flex-direction: column;
523
+ }
524
+
525
+ #list-line.desktop {
526
+ column-gap: 10px;
527
+ }
528
+
529
+ #list-line-top {
530
+ display: flex;
531
+ column-gap: 7px;
532
+ }
533
+
534
+ #list-line-bottom {
535
+ padding-top: 4px;
536
+ }
537
+
538
+ #list-line-right,
539
+ #list-line-top,
540
+ #list-line-bottom {
541
+ width: 100%;
542
+ }
543
+
544
+ /*
545
+ * If the container becomes very tiny, don't let the thumbnail side take
546
+ * up too much space. Shouldn't make a difference on ordinary viewport sizes.
547
+ */
548
+ #list-line-left {
549
+ max-width: 25%;
550
+
551
+ display: flex;
552
+ flex-direction: column;
553
+ row-gap: 5px;
554
+ }
555
+
556
+ div a:hover {
557
+ text-decoration: underline;
558
+ }
559
+
560
+ /* Lines containing multiple div as row */
561
+ #item-line,
562
+ #dates-line,
563
+ #views-line,
564
+ #title-line {
565
+ display: flex;
566
+ flex-direction: row;
567
+ column-gap: 10px;
568
+ }
569
+
570
+ /*
571
+ * With the exception of the title line, allow these to wrap if
572
+ * the space becomes too small to accommodate them together.
573
+ *
574
+ * The title line is excluded because it contains the mediatype icon
575
+ * which we don't want to wrap.
576
+ */
577
+ #item-line,
578
+ #dates-line,
579
+ #views-line {
580
+ flex-wrap: wrap;
581
+ }
582
+
583
+ .capture-dates {
584
+ margin: 0;
585
+ padding: 0;
586
+ list-style-type: none;
587
+ }
588
+
589
+ .capture-dates a:link {
590
+ text-decoration: none;
591
+ color: var(--ia-theme-link-color, #4b64ff);
592
+ }
593
+ .capture-dates a:hover {
594
+ text-decoration: underline;
595
+ }
596
+
597
+ /*
598
+ * Tile-list (extended) action row sits under the thumbnail in the left
599
+ * column. The image-block above already has its own bottom padding via
600
+ * the parent's row-gap, so we don't need extra spacing here.
601
+ */
602
+ .tile-actions.list-detail {
603
+ width: 100%;
604
+ }
605
605
  `,
606
606
  ];
607
607
  }