@internetarchive/collection-browser 0.4.4-alpha → 0.4.4

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 (75) hide show
  1. package/dist/src/app-root.js +17 -2
  2. package/dist/src/app-root.js.map +1 -1
  3. package/dist/src/collection-browser.d.ts +2 -40
  4. package/dist/src/collection-browser.js +45 -118
  5. package/dist/src/collection-browser.js.map +1 -1
  6. package/dist/src/sort-filter-bar/sort-filter-bar.js +11 -1
  7. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  8. package/dist/src/styles/item-image-styles.js +5 -1
  9. package/dist/src/styles/item-image-styles.js.map +1 -1
  10. package/dist/src/tiles/grid/item-tile.js +15 -2
  11. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  12. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +6 -6
  13. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
  14. package/dist/src/tiles/grid/tile-stats.js +15 -7
  15. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  16. package/dist/src/tiles/hover/hover-pane-controller.d.ts +197 -0
  17. package/dist/src/tiles/hover/hover-pane-controller.js +349 -0
  18. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -0
  19. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -0
  20. package/dist/src/tiles/hover/tile-hover-pane.js +88 -0
  21. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -0
  22. package/dist/src/tiles/image-block.js +4 -0
  23. package/dist/src/tiles/image-block.js.map +1 -1
  24. package/dist/src/tiles/list/date-label.js +3 -3
  25. package/dist/src/tiles/list/date-label.js.map +1 -1
  26. package/dist/src/tiles/list/tile-list-compact-header.js +4 -3
  27. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  28. package/dist/src/tiles/list/tile-list-compact.js +15 -5
  29. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  30. package/dist/src/tiles/list/tile-list.d.ts +2 -0
  31. package/dist/src/tiles/list/tile-list.js +63 -5
  32. package/dist/src/tiles/list/tile-list.js.map +1 -1
  33. package/dist/src/tiles/text-snippet-block.js +4 -4
  34. package/dist/src/tiles/text-snippet-block.js.map +1 -1
  35. package/dist/src/tiles/tile-dispatcher.d.ts +21 -2
  36. package/dist/src/tiles/tile-dispatcher.js +79 -9
  37. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  38. package/dist/test/collection-browser.test.js +6 -72
  39. package/dist/test/collection-browser.test.js.map +1 -1
  40. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +64 -0
  41. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  42. package/dist/test/tiles/grid/account-tile.test.js +1 -1
  43. package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
  44. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -0
  45. package/dist/test/tiles/hover/hover-pane-controller.test.js +279 -0
  46. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -0
  47. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -0
  48. package/dist/test/tiles/hover/tile-hover-pane.test.js +14 -0
  49. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -0
  50. package/dist/test/tiles/list/tile-list.test.js +46 -1
  51. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  52. package/index.html +1 -0
  53. package/package.json +2 -2
  54. package/src/app-root.ts +17 -2
  55. package/src/collection-browser.ts +42 -140
  56. package/src/sort-filter-bar/sort-filter-bar.ts +12 -1
  57. package/src/styles/item-image-styles.ts +5 -1
  58. package/src/tiles/grid/item-tile.ts +15 -2
  59. package/src/tiles/grid/styles/tile-grid-shared-styles.ts +6 -6
  60. package/src/tiles/grid/tile-stats.ts +15 -7
  61. package/src/tiles/hover/hover-pane-controller.ts +469 -0
  62. package/src/tiles/hover/tile-hover-pane.ts +79 -0
  63. package/src/tiles/image-block.ts +4 -0
  64. package/src/tiles/list/date-label.ts +3 -3
  65. package/src/tiles/list/tile-list-compact-header.ts +4 -3
  66. package/src/tiles/list/tile-list-compact.ts +15 -5
  67. package/src/tiles/list/tile-list.ts +67 -5
  68. package/src/tiles/text-snippet-block.ts +4 -4
  69. package/src/tiles/tile-dispatcher.ts +95 -7
  70. package/test/collection-browser.test.ts +7 -101
  71. package/test/sort-filter-bar/sort-filter-bar.test.ts +89 -0
  72. package/test/tiles/grid/account-tile.test.ts +1 -1
  73. package/test/tiles/hover/hover-pane-controller.test.ts +349 -0
  74. package/test/tiles/hover/tile-hover-pane.test.ts +19 -0
  75. package/test/tiles/list/tile-list.test.ts +58 -1
@@ -8,7 +8,7 @@ import {
8
8
  nothing,
9
9
  } from 'lit';
10
10
  import { customElement, property, query, state } from 'lit/decorators.js';
11
- import { ifDefined } from 'lit/directives/if-defined.js';
11
+ import { classMap } from 'lit/directives/class-map.js';
12
12
 
13
13
  import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
14
14
  import type {
@@ -272,7 +272,7 @@ export class CollectionBrowser
272
272
  goToPage(pageNumber: number) {
273
273
  this.initialPageNumber = pageNumber;
274
274
  this.pagesToRender = pageNumber;
275
- this.scrollToPage(pageNumber);
275
+ return this.scrollToPage(pageNumber);
276
276
  }
277
277
 
278
278
  clearFilters() {
@@ -328,6 +328,7 @@ export class CollectionBrowser
328
328
  .placeholderType=${this.placeholderType}
329
329
  ?isMobileView=${this.mobileView}
330
330
  ></empty-placeholder>
331
+ ${this.infiniteScrollerTemplate}
331
332
  `;
332
333
  }
333
334
 
@@ -371,7 +372,8 @@ export class CollectionBrowser
371
372
 
372
373
  private get infiniteScrollerTemplate() {
373
374
  return html`<infinite-scroller
374
- class="${ifDefined(this.displayMode)}"
375
+ class=${this.infiniteScrollerClasses}
376
+ itemCount=${this.placeholderType ? 0 : nothing}
375
377
  .cellProvider=${this}
376
378
  .placeholderCellTemplate=${this.placeholderCellTemplate}
377
379
  @scrollThresholdReached=${this.scrollThresholdReached}
@@ -379,6 +381,13 @@ export class CollectionBrowser
379
381
  ></infinite-scroller>`;
380
382
  }
381
383
 
384
+ private get infiniteScrollerClasses() {
385
+ return classMap({
386
+ [this.displayMode ?? '']: !!this.displayMode,
387
+ hidden: !!this.placeholderType,
388
+ });
389
+ }
390
+
382
391
  private get sortFilterBarTemplate() {
383
392
  return html`
384
393
  <sort-filter-bar
@@ -514,10 +523,6 @@ export class CollectionBrowser
514
523
  this.selectedCreatorFilter = e.detail.selectedLetter;
515
524
  }
516
525
 
517
- private get facetDataLoading(): boolean {
518
- return this.facetsLoading || this.fullYearAggregationLoading;
519
- }
520
-
521
526
  private get mobileFacetsTemplate() {
522
527
  return html`
523
528
  <div id="mobile-filter-collapse">
@@ -560,8 +565,8 @@ export class CollectionBrowser
560
565
  .filterMap=${this.filterMap}
561
566
  .modalManager=${this.modalManager}
562
567
  ?collapsableFacets=${this.mobileView}
563
- ?facetsLoading=${this.facetDataLoading}
564
- ?fullYearAggregationLoading=${this.fullYearAggregationLoading}
568
+ ?facetsLoading=${this.facetsLoading}
569
+ ?fullYearAggregationLoading=${this.facetsLoading}
565
570
  .onFacetClick=${this.facetClickHandler}
566
571
  .analyticsHandler=${this.analyticsHandler}
567
572
  >
@@ -812,12 +817,7 @@ export class CollectionBrowser
812
817
  this.historyPopOccurred = false;
813
818
  }
814
819
 
815
- await Promise.all([
816
- this.doInitialPageFetch(),
817
- this.fetchFacets(),
818
- // Only fetch histogram data separately if we need it b/c of date filters
819
- this.shouldRequestYearHistogram && this.fetchFullYearHistogram(),
820
- ]);
820
+ await Promise.all([this.doInitialPageFetch(), this.fetchFacets()]);
821
821
  }
822
822
 
823
823
  private setupStateRestorationObserver() {
@@ -995,22 +995,6 @@ export class CollectionBrowser
995
995
  return fullQuery;
996
996
  }
997
997
 
998
- /** The full query without any year facets or date range clauses */
999
- private get fullQueryWithoutDates(): string | undefined {
1000
- if (!this.baseQuery) return undefined;
1001
- let fullQuery = this.baseQuery;
1002
-
1003
- const { facetQueryWithoutYear, sortFilterQueries } = this;
1004
-
1005
- if (facetQueryWithoutYear) {
1006
- fullQuery += ` AND ${facetQueryWithoutYear}`;
1007
- }
1008
- if (sortFilterQueries) {
1009
- fullQuery += ` AND ${sortFilterQueries}`;
1010
- }
1011
- return fullQuery;
1012
- }
1013
-
1014
998
  /**
1015
999
  * Generates a query string for the given facets
1016
1000
  *
@@ -1027,24 +1011,6 @@ export class CollectionBrowser
1027
1011
  return this.joinFacetClauses(facetClauses);
1028
1012
  }
1029
1013
 
1030
- /**
1031
- * Generates a query string for the currently selected facets, excluding 'year' facets.
1032
- *
1033
- * Example: `mediatype:("collection" OR "audio" OR -"etree") AND subject:("foo" OR -"bar")`
1034
- */
1035
- private get facetQueryWithoutYear(): string | undefined {
1036
- if (!this.selectedFacets) return undefined;
1037
- const facetClauses = [];
1038
- for (const [facetName, facetValues] of Object.entries(
1039
- this.selectedFacets
1040
- )) {
1041
- if (facetName !== 'year') {
1042
- facetClauses.push(this.buildFacetClause(facetName, facetValues));
1043
- }
1044
- }
1045
- return this.joinFacetClauses(facetClauses);
1046
- }
1047
-
1048
1014
  /**
1049
1015
  * Builds an OR-joined facet clause for the given facet name and values.
1050
1016
  *
@@ -1174,99 +1140,30 @@ export class CollectionBrowser
1174
1140
 
1175
1141
  this.aggregations = results?.success?.response.aggregations;
1176
1142
 
1177
- // If we're not fetching year histogram data separately, set it from the newly-fetched aggregations
1178
- if (!this.shouldRequestYearHistogram) {
1179
- this.fullYearsHistogramAggregation =
1180
- results?.success?.response?.aggregations?.year_histogram ??
1181
- results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
1182
- }
1183
- }
1184
-
1185
- /**
1186
- * If we haven't changed the query, we don't need to fetch the full year histogram
1187
- *
1188
- * @private
1189
- * @type {string}
1190
- * @memberof CollectionBrowser
1191
- */
1192
- private previousFullQueryNoDate?: string;
1193
-
1194
- /**
1195
- * The query key is a string that uniquely identifies the current query
1196
- * without the date range.
1197
- *
1198
- * If this doesn't change, we don't need to re-fetch the histogram date range
1199
- */
1200
- private get fullQueryNoDateKey() {
1201
- return `${this.fullQueryWithoutDates}-${this.searchType}-${this.sortParam?.field}-${this.sortParam?.direction}`;
1202
- }
1203
-
1204
- /**
1205
- * This method is similar to fetching the facets above,
1206
- * but only fetching the year histogram. There is a subtle difference
1207
- * in how you have to fetch the year histogram where you can't use the
1208
- * advanced JSON syntax like the other aggregations. It's a special
1209
- * case that @ximm put it place.
1210
- */
1211
- private async fetchFullYearHistogram(): Promise<void> {
1212
- const { fullQueryNoDateKey } = this;
1213
- if (
1214
- !this.fullQueryWithoutDates ||
1215
- fullQueryNoDateKey === this.previousFullQueryNoDate
1216
- ) {
1217
- return;
1218
- }
1219
- this.previousFullQueryNoDate = fullQueryNoDateKey;
1220
-
1221
- const aggregations = {
1222
- simpleParams: ['year'],
1223
- };
1224
-
1225
- const params = {
1226
- query: this.fullQueryWithoutDates,
1227
- aggregations,
1228
- rows: 0,
1229
- };
1230
-
1231
- this.fullYearAggregationLoading = true;
1232
- const results = await this.searchService?.search(params, this.searchType);
1233
- this.fullYearAggregationLoading = false;
1234
-
1235
1143
  this.fullYearsHistogramAggregation =
1236
1144
  results?.success?.response?.aggregations?.year_histogram ??
1237
1145
  results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
1238
1146
  }
1239
1147
 
1240
- /**
1241
- * We only want to send a separate request for the year_histogram data
1242
- * if (a) the date picker component is enabled and (b) there is a year facet or date-range filter applied.
1243
- *
1244
- * Otherwise, we should just be using the histogram data supplied by the "normal" facet request.
1245
- */
1246
- private get shouldRequestYearHistogram() {
1247
- const datePickerEnabled = this.showHistogramDatePicker;
1248
- const hasDateRange = !!this.dateRangeQueryClause;
1249
- const hasYearFacet =
1250
- Object.keys(this.selectedFacets?.year ?? {}).length > 0;
1251
- return datePickerEnabled && (hasDateRange || hasYearFacet);
1252
- }
1253
-
1254
- private scrollToPage(pageNumber: number) {
1255
- const cellIndexToScrollTo = this.pageSize * (pageNumber - 1);
1256
- // without this setTimeout, Safari just pauses until the `fetchPage` is complete
1257
- // then scrolls to the cell
1258
- setTimeout(() => {
1259
- this.isScrollingToCell = true;
1260
- this.infiniteScroller.scrollToCell(cellIndexToScrollTo, true);
1261
- // This timeout is to give the scroll animation time to finish
1262
- // then updating the infinite scroller once we're done scrolling
1263
- // There's no scroll animation completion callback so we're
1264
- // giving it 0.5s to finish.
1148
+ private scrollToPage(pageNumber: number): Promise<void> {
1149
+ return new Promise(resolve => {
1150
+ const cellIndexToScrollTo = this.pageSize * (pageNumber - 1);
1151
+ // without this setTimeout, Safari just pauses until the `fetchPage` is complete
1152
+ // then scrolls to the cell
1265
1153
  setTimeout(() => {
1266
- this.isScrollingToCell = false;
1267
- this.infiniteScroller.reload();
1268
- }, 500);
1269
- }, 0);
1154
+ this.isScrollingToCell = true;
1155
+ this.infiniteScroller?.scrollToCell(cellIndexToScrollTo, true);
1156
+ // This timeout is to give the scroll animation time to finish
1157
+ // then updating the infinite scroller once we're done scrolling
1158
+ // There's no scroll animation completion callback so we're
1159
+ // giving it 0.5s to finish.
1160
+ setTimeout(() => {
1161
+ this.isScrollingToCell = false;
1162
+ this.infiniteScroller?.reload();
1163
+ resolve();
1164
+ }, 500);
1165
+ }, 0);
1166
+ });
1270
1167
  }
1271
1168
 
1272
1169
  /**
@@ -1363,7 +1260,9 @@ export class CollectionBrowser
1363
1260
  // temporary estimates based on pages rendered so far).
1364
1261
  if (results.length < this.pageSize) {
1365
1262
  this.endOfDataReached = true;
1366
- this.infiniteScroller.itemCount = this.totalResults;
1263
+ if (this.infiniteScroller) {
1264
+ this.infiniteScroller.itemCount = this.totalResults;
1265
+ }
1367
1266
  }
1368
1267
  this.pageFetchesInProgress[pageFetchQueryKey]?.delete(pageNumber);
1369
1268
  this.searchResultsLoading = false;
@@ -1465,7 +1364,7 @@ export class CollectionBrowser
1465
1364
  const visiblePages = this.currentVisiblePageNumbers;
1466
1365
  const needsReload = visiblePages.includes(pageNumber);
1467
1366
  if (needsReload) {
1468
- this.infiniteScroller.reload();
1367
+ this.infiniteScroller?.reload();
1469
1368
  }
1470
1369
  }
1471
1370
 
@@ -1590,6 +1489,7 @@ export class CollectionBrowser
1590
1489
  .sortParam=${this.sortParam}
1591
1490
  .mobileBreakpoint=${this.mobileBreakpoint}
1592
1491
  .loggedIn=${this.loggedIn}
1492
+ ?enableHoverPane=${true}
1593
1493
  @resultSelected=${(e: CustomEvent) => this.resultSelected(e)}
1594
1494
  >
1595
1495
  </tile-dispatcher>
@@ -1659,13 +1559,11 @@ export class CollectionBrowser
1659
1559
  position: relative;
1660
1560
  border-left: 1px solid rgb(232, 232, 232);
1661
1561
  padding-left: 1rem;
1662
- margin-bottom: 1.5rem; // add space in the bottom of infinite scroller
1663
1562
  }
1664
1563
 
1665
1564
  .mobile #right-column {
1666
1565
  border-left: none;
1667
1566
  padding: 0;
1668
- margin-bottom: 1.5rem;
1669
1567
  }
1670
1568
 
1671
1569
  #left-column {
@@ -1806,5 +1704,9 @@ export class CollectionBrowser
1806
1704
  );
1807
1705
  --infiniteScrollerCellMaxWidth: var(--collectionBrowserCellMaxWidth, 1fr);
1808
1706
  }
1707
+
1708
+ infinite-scroller.hidden {
1709
+ display: none;
1710
+ }
1809
1711
  `;
1810
1712
  }
@@ -380,7 +380,18 @@ export class SortFilterBar
380
380
 
381
381
  private mobileSortChanged(e: Event) {
382
382
  const target = e.target as HTMLSelectElement;
383
- this.setSelectedSort(target.value as SortField);
383
+ const sortField = target.value as SortField;
384
+ this.setSelectedSort(sortField);
385
+
386
+ this.alphaSelectorVisible = null;
387
+ if (sortField !== 'title' && this.selectedTitleFilter) {
388
+ this.selectedTitleFilter = null;
389
+ this.emitTitleLetterChangedEvent();
390
+ }
391
+ if (sortField !== 'creator' && this.selectedCreatorFilter) {
392
+ this.selectedCreatorFilter = null;
393
+ this.emitCreatorLetterChangedEvent();
394
+ }
384
395
  }
385
396
 
386
397
  private get displayOptionTemplate() {
@@ -16,6 +16,10 @@ export const baseItemImageStyles = css`
16
16
  position: relative;
17
17
  }
18
18
 
19
+ .list-box img {
20
+ border-radius: 0;
21
+ }
22
+
19
23
  .contain {
20
24
  object-fit: contain;
21
25
  object-position: center;
@@ -40,7 +44,7 @@ export const baseItemImageStyles = css`
40
44
  height: 160px;
41
45
  }
42
46
 
43
- .collection-image {
47
+ :not(.list-box) > .collection-image {
44
48
  object-fit: cover;
45
49
  border-radius: 8px;
46
50
  width: 100%;
@@ -83,7 +83,6 @@ export class ItemTile extends LitElement {
83
83
  private get imageBlockTemplate(): TemplateResult {
84
84
  return html`
85
85
  <image-block
86
- class=${this.hasSnippets ? 'has-snippets' : nothing}
87
86
  .model=${this.model}
88
87
  .baseImageUrl=${this.baseImageUrl}
89
88
  .loggedIn=${this.loggedIn}
@@ -174,7 +173,21 @@ export class ItemTile extends LitElement {
174
173
 
175
174
  text-snippet-block {
176
175
  --containerLeftMargin: 5px;
177
- --containerTopMargin: 10px;
176
+ --containerTopMargin: 5px;
177
+ }
178
+
179
+ /**
180
+ * iOS Safari long-press on tiles (to bring up hover pane)
181
+ * gets messy without this
182
+ */
183
+ @media screen and (pointer: coarse) and (hover: none) {
184
+ .container {
185
+ -webkit-touch-callout: none;
186
+ }
187
+
188
+ .truncated {
189
+ -webkit-touch-callout: default;
190
+ }
178
191
  }
179
192
  `,
180
193
  ];
@@ -13,6 +13,7 @@ export const baseTileStyles = css`
13
13
  border: 1px #2c2c2c;
14
14
  border-radius: ${tileCornerRadius};
15
15
  box-shadow: 1px 1px 2px 0;
16
+ box-sizing: border-box;
16
17
  height: 100%;
17
18
  display: flex;
18
19
  flex-direction: column;
@@ -21,7 +22,6 @@ export const baseTileStyles = css`
21
22
 
22
23
  image-block {
23
24
  display: block;
24
- margin-bottom: 5px;
25
25
  position: relative;
26
26
  text-align: center;
27
27
  }
@@ -35,14 +35,14 @@ export const baseTileStyles = css`
35
35
  }
36
36
 
37
37
  .item-info {
38
+ display: flex;
39
+ flex-direction: column;
40
+ row-gap: 5px;
38
41
  flex-grow: 1;
39
42
  }
40
43
 
41
44
  #title {
42
- flex-shrink: 0;
43
- padding-left: 5px;
44
- padding-right: 5px;
45
- margin-bottom: 10px;
45
+ padding: 0 5px;
46
46
  }
47
47
 
48
48
  .created-by,
@@ -52,7 +52,7 @@ export const baseTileStyles = css`
52
52
  display: flex;
53
53
  justify-content: left;
54
54
  align-items: flex-end; /* Important to start text from bottom */
55
- padding: 0 5px 5px 5px;
55
+ padding: 0 5px;
56
56
  }
57
57
 
58
58
  .truncated {
@@ -63,7 +63,7 @@ export class TileStats extends LitElement {
63
63
  ${formattedFavCount}
64
64
  </p>
65
65
  </li>
66
- <li class="col" title="${formattedReviewCount} reviews">
66
+ <li class="col reviews" title="${formattedReviewCount} reviews">
67
67
  ${reviewsIcon}
68
68
  <p class="status-text">
69
69
  <span class="sr-only">Reviews:</span>
@@ -92,25 +92,33 @@ export class TileStats extends LitElement {
92
92
  }
93
93
 
94
94
  svg {
95
- height: 10px;
96
- width: 10px;
95
+ height: 13px;
96
+ width: 13px;
97
97
  display: block;
98
98
  margin: auto;
99
99
  pointer-events: none;
100
100
  }
101
101
 
102
+ /* Make the reviews icon slightly smaller/lower, for even visual weight */
103
+ .reviews svg {
104
+ height: 11px;
105
+ width: 11px;
106
+ margin-top: 2px;
107
+ }
108
+
102
109
  .item-stats {
103
- height: 35px;
110
+ height: 30px;
104
111
  padding-left: 5px;
105
112
  padding-right: 5px;
106
113
  font-family: 'Helvetica Neue', ui-sans-serif, system-ui, sans-serif;
114
+ text-align: center;
107
115
  }
108
116
 
109
117
  #stats-row {
110
118
  display: flex;
119
+ justify-content: space-between;
111
120
  flex-wrap: wrap;
112
121
  width: 100%;
113
- padding-top: 5px;
114
122
  padding-bottom: 5px;
115
123
  }
116
124
 
@@ -126,7 +134,7 @@ export class TileStats extends LitElement {
126
134
  }
127
135
 
128
136
  .col {
129
- width: 25%;
137
+ min-width: 15px;
130
138
  height: 25px;
131
139
  }
132
140
 
@@ -134,7 +142,7 @@ export class TileStats extends LitElement {
134
142
  font-size: 14px;
135
143
  height: 15px;
136
144
  color: #2c2c2c;
137
- line-height: 20px;
145
+ line-height: 17px;
138
146
  margin: auto;
139
147
  display: block;
140
148
  text-align: center;