@internetarchive/collection-browser 4.4.0 → 4.4.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 (41) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +27 -27
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +1 -1
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/src/app-root.js +672 -672
  11. package/dist/src/app-root.js.map +1 -1
  12. package/dist/src/collection-browser.js +763 -763
  13. package/dist/src/collection-browser.js.map +1 -1
  14. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  15. package/dist/src/tiles/item-image.js +28 -28
  16. package/dist/src/tiles/item-image.js.map +1 -1
  17. package/dist/src/tiles/tile-display-value-provider.js +2 -1
  18. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  19. package/dist/test/tiles/grid/item-tile.test.js +2 -2
  20. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  21. package/dist/test/tiles/list/tile-list.test.js +2 -2
  22. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  23. package/dist/test/tiles/tile-dispatcher.test.js +14 -0
  24. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  25. package/eslint.config.mjs +53 -53
  26. package/index.html +24 -24
  27. package/local.archive.org.cert +86 -86
  28. package/local.archive.org.key +27 -27
  29. package/package.json +120 -120
  30. package/renovate.json +6 -6
  31. package/src/app-root.ts +1254 -1254
  32. package/src/collection-browser.ts +3161 -3161
  33. package/src/data-source/collection-browser-data-source.ts +1465 -1465
  34. package/src/tiles/item-image.ts +214 -214
  35. package/src/tiles/tile-display-value-provider.ts +2 -3
  36. package/test/tiles/grid/item-tile.test.ts +2 -2
  37. package/test/tiles/list/tile-list.test.ts +2 -2
  38. package/test/tiles/tile-dispatcher.test.ts +20 -0
  39. package/tsconfig.json +25 -25
  40. package/web-dev-server.config.mjs +30 -30
  41. package/web-test-runner.config.mjs +52 -52
@@ -451,32 +451,32 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
451
451
  }
452
452
  }
453
453
  render() {
454
- return html `
454
+ return html `
455
455
  ${this.showSmartFacetBar && this.placeholderType === null
456
- ? html `<smart-facet-bar
457
- .query=${this.baseQuery}
458
- .aggregations=${this.dataSource.aggregations}
459
- .selectedFacets=${this.selectedFacets}
460
- .collectionTitles=${this.dataSource.collectionTitles}
461
- .filterToggleShown=${!this.mobileView}
462
- .filterToggleActive=${this.facetPaneVisible}
463
- .label=${this.smartFacetBarLabel}
464
- @facetsChanged=${this.facetsChanged}
456
+ ? html `<smart-facet-bar
457
+ .query=${this.baseQuery}
458
+ .aggregations=${this.dataSource.aggregations}
459
+ .selectedFacets=${this.selectedFacets}
460
+ .collectionTitles=${this.dataSource.collectionTitles}
461
+ .filterToggleShown=${!this.mobileView}
462
+ .filterToggleActive=${this.facetPaneVisible}
463
+ .label=${this.smartFacetBarLabel}
464
+ @facetsChanged=${this.facetsChanged}
465
465
  @filtersToggled=${() => {
466
466
  this.facetPaneVisible = !this.facetPaneVisible;
467
467
  this.emitFacetPaneVisibilityChanged();
468
- }}
468
+ }}
469
469
  ></smart-facet-bar>`
470
- : nothing}
471
-
472
- <div
473
- id="content-container"
474
- class=${this.mobileView ? 'mobile' : 'desktop'}
475
- >
470
+ : nothing}
471
+
472
+ <div
473
+ id="content-container"
474
+ class=${this.mobileView ? 'mobile' : 'desktop'}
475
+ >
476
476
  ${this.placeholderType
477
477
  ? this.emptyPlaceholderTemplate
478
- : this.collectionBrowserTemplate}
479
- </div>
478
+ : this.collectionBrowserTemplate}
479
+ </div>
480
480
  `;
481
481
  }
482
482
  /**
@@ -520,23 +520,23 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
520
520
  * Template for the placeholder content to show when no results are available.
521
521
  */
522
522
  get emptyPlaceholderTemplate() {
523
- return html `
524
- <empty-placeholder
525
- .placeholderType=${this.placeholderType}
526
- ?isMobileView=${this.mobileView}
527
- ?isCollection=${!!this.withinCollection}
528
- .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
529
- .baseNavigationUrl=${this.baseNavigationUrl}
530
- ></empty-placeholder>
523
+ return html `
524
+ <empty-placeholder
525
+ .placeholderType=${this.placeholderType}
526
+ ?isMobileView=${this.mobileView}
527
+ ?isCollection=${!!this.withinCollection}
528
+ .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
529
+ .baseNavigationUrl=${this.baseNavigationUrl}
530
+ ></empty-placeholder>
531
531
  `;
532
532
  }
533
533
  /**
534
534
  * Top-level template for rendering the left (facets) and right (results) columns.
535
535
  */
536
536
  get collectionBrowserTemplate() {
537
- return html `
538
- <div id="left-column-scroll-sentinel"></div>
539
- ${this.leftColumnTemplate} ${this.rightColumnTemplate}
537
+ return html `
538
+ <div id="left-column-scroll-sentinel"></div>
539
+ ${this.leftColumnTemplate} ${this.rightColumnTemplate}
540
540
  `;
541
541
  }
542
542
  /**
@@ -555,33 +555,33 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
555
555
  * accordion-style facets.
556
556
  */
557
557
  get mobileLeftColumnTemplate() {
558
- return html `
559
- <div
560
- id="left-column"
561
- class="column${this.isResizeToMobile ? ' preload' : ''}"
562
- >
563
- ${this.facetTopViewSlot} ${this.resultsCountTemplate}
564
- <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
565
- </div>
558
+ return html `
559
+ <div
560
+ id="left-column"
561
+ class="column${this.isResizeToMobile ? ' preload' : ''}"
562
+ >
563
+ ${this.facetTopViewSlot} ${this.resultsCountTemplate}
564
+ <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
565
+ </div>
566
566
  `;
567
567
  }
568
568
  /**
569
569
  * Template for the desktop version of the left column, displaying the facets sidebar.
570
570
  */
571
571
  get desktopLeftColumnTemplate() {
572
- return html `
573
- <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
574
- ${this.facetTopViewSlot}
575
- <div id="facets-header-container">
576
- <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
577
- ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
578
- </div>
579
- <div id="facets-container" aria-labelledby="facets-header">
580
- ${this.facetsTemplate}
581
- <div id="facets-scroll-sentinel"></div>
582
- </div>
583
- <div id="facets-bottom-fade"></div>
584
- </div>
572
+ return html `
573
+ <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
574
+ ${this.facetTopViewSlot}
575
+ <div id="facets-header-container">
576
+ <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
577
+ ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
578
+ </div>
579
+ <div id="facets-container" aria-labelledby="facets-header">
580
+ ${this.facetsTemplate}
581
+ <div id="facets-scroll-sentinel"></div>
582
+ </div>
583
+ <div id="facets-bottom-fade"></div>
584
+ </div>
585
585
  `;
586
586
  }
587
587
  /**
@@ -589,8 +589,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
589
589
  * - mainly used to render userlists
590
590
  */
591
591
  get facetTopViewSlot() {
592
- return html `<div id="facet-top-view">
593
- <slot name="facet-top-slot"></slot>
592
+ return html `<div id="facet-top-view">
593
+ <slot name="facet-top-slot"></slot>
594
594
  </div>`;
595
595
  }
596
596
  /**
@@ -605,15 +605,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
605
605
  const resultsCount = this.totalResults?.toLocaleString();
606
606
  const resultsLabel = this.totalResults === 1 ? 'Result' : 'Results';
607
607
  // Added data-testid for Playwright testing
608
- return html `
609
- <div id="results-total" class=${classes} data-testid="results-total">
610
- <span id="big-results-count">
611
- ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
612
- </span>
613
- <span id="big-results-label">
614
- ${shouldShowSearching ? nothing : resultsLabel}
615
- </span>
616
- </div>
608
+ return html `
609
+ <div id="results-total" class=${classes} data-testid="results-total">
610
+ <span id="big-results-count">
611
+ ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
612
+ </span>
613
+ <span id="big-results-label">
614
+ ${shouldShowSearching ? nothing : resultsLabel}
615
+ </span>
616
+ </div>
617
617
  `;
618
618
  }
619
619
  /**
@@ -626,47 +626,47 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
626
626
  'full-width': !this.facetPaneVisible,
627
627
  'smart-results-spacing': !!this.showSmartResults,
628
628
  });
629
- return html `
630
- <div id="right-column" class=${rightColumnClasses}>
629
+ return html `
630
+ <div id="right-column" class=${rightColumnClasses}>
631
631
  ${this.showSmartResults
632
632
  ? html `<slot name="smart-results"></slot>`
633
- : nothing}
634
- <section id="results">
635
- <h2 class="results-section-heading">
636
- <slot name="results-heading"></slot>
637
- </h2>
638
- <div id="cb-top-view">
639
- <slot name="cb-top-slot"></slot>
640
- </div>
633
+ : nothing}
634
+ <section id="results">
635
+ <h2 class="results-section-heading">
636
+ <slot name="results-heading"></slot>
637
+ </h2>
638
+ <div id="cb-top-view">
639
+ <slot name="cb-top-slot"></slot>
640
+ </div>
641
641
  ${this.isManageView
642
642
  ? this.manageBarTemplate
643
- : this.sortFilterBarTemplate}
644
- <slot name="cb-results"></slot>
643
+ : this.sortFilterBarTemplate}
644
+ <slot name="cb-results"></slot>
645
645
  ${this.displayMode === `list-compact` && this.totalResults
646
646
  ? this.listHeaderTemplate
647
- : nothing}
648
- ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
649
- </section>
650
- </div>
647
+ : nothing}
648
+ ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
649
+ </section>
650
+ </div>
651
651
  `;
652
652
  }
653
653
  /**
654
654
  * Template for the infinite scroller widget that contains the result tiles.
655
655
  */
656
656
  get infiniteScrollerTemplate() {
657
- return html `<infinite-scroller
658
- class=${this.infiniteScrollerClasses}
659
- itemCount=${this.placeholderType ? 0 : nothing}
660
- ariaLandmarkLabel="Search results"
661
- .estimatedCellHeight=${this.estimatedTileHeight}
662
- .minBufferMarginCells=${this.pageSize}
663
- .cellProvider=${this}
664
- .placeholderCellTemplate=${this.placeholderCellTemplate}
665
- @scrollThresholdReached=${this.scrollThresholdReached}
666
- @visibleCellsChanged=${this.visibleCellsChanged}
657
+ return html `<infinite-scroller
658
+ class=${this.infiniteScrollerClasses}
659
+ itemCount=${this.placeholderType ? 0 : nothing}
660
+ ariaLandmarkLabel="Search results"
661
+ .estimatedCellHeight=${this.estimatedTileHeight}
662
+ .minBufferMarginCells=${this.pageSize}
663
+ .cellProvider=${this}
664
+ .placeholderCellTemplate=${this.placeholderCellTemplate}
665
+ @scrollThresholdReached=${this.scrollThresholdReached}
666
+ @visibleCellsChanged=${this.visibleCellsChanged}
667
667
  >${this.displayMode === 'grid'
668
668
  ? html `<slot name="result-last-tile" slot="result-last-tile"></slot>`
669
- : nothing}
669
+ : nothing}
670
670
  </infinite-scroller>`;
671
671
  }
672
672
  /**
@@ -718,29 +718,29 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
718
718
  }
719
719
  // We only show relevance sort if a search query is currently defined
720
720
  sortFieldAvailability.relevance = this.isRelevanceSortAvailable;
721
- return html `
722
- <sort-filter-bar
723
- .defaultSortField=${this.defaultSortField}
724
- .defaultSortDirection=${this.defaultSortDirection}
725
- .selectedSort=${this.selectedSort}
726
- .sortDirection=${this.sortDirection}
727
- .sortFieldAvailability=${sortFieldAvailability}
728
- .displayMode=${this.displayMode}
729
- .selectedTitleFilter=${this.selectedTitleFilter}
730
- .selectedCreatorFilter=${this.selectedCreatorFilter}
731
- .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
732
- .enableSortOptionsSlot=${this.enableSortOptionsSlot}
733
- .suppressDisplayModes=${this.suppressDisplayModes}
734
- @sortChanged=${this.userChangedSort}
735
- @displayModeChanged=${this.displayModeChanged}
736
- @titleLetterChanged=${this.titleLetterSelected}
737
- @creatorLetterChanged=${this.creatorLetterSelected}
738
- >
739
- ${this.tileBlurCheckboxTemplate}
740
- <slot name="sort-options-left" slot="sort-options-left"></slot>
741
- <slot name="sort-options" slot="sort-options"></slot>
742
- <slot name="sort-options-right" slot="sort-options-right"></slot>
743
- </sort-filter-bar>
721
+ return html `
722
+ <sort-filter-bar
723
+ .defaultSortField=${this.defaultSortField}
724
+ .defaultSortDirection=${this.defaultSortDirection}
725
+ .selectedSort=${this.selectedSort}
726
+ .sortDirection=${this.sortDirection}
727
+ .sortFieldAvailability=${sortFieldAvailability}
728
+ .displayMode=${this.displayMode}
729
+ .selectedTitleFilter=${this.selectedTitleFilter}
730
+ .selectedCreatorFilter=${this.selectedCreatorFilter}
731
+ .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
732
+ .enableSortOptionsSlot=${this.enableSortOptionsSlot}
733
+ .suppressDisplayModes=${this.suppressDisplayModes}
734
+ @sortChanged=${this.userChangedSort}
735
+ @displayModeChanged=${this.displayModeChanged}
736
+ @titleLetterChanged=${this.titleLetterSelected}
737
+ @creatorLetterChanged=${this.creatorLetterSelected}
738
+ >
739
+ ${this.tileBlurCheckboxTemplate}
740
+ <slot name="sort-options-left" slot="sort-options-left"></slot>
741
+ <slot name="sort-options" slot="sort-options"></slot>
742
+ <slot name="sort-options-right" slot="sort-options-right"></slot>
743
+ </sort-filter-bar>
744
744
  `;
745
745
  }
746
746
  /**
@@ -751,20 +751,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
751
751
  // Only show the checkbox for @archive.org users
752
752
  if (!this.dataSource.sessionContext?.is_archive_user)
753
753
  return nothing;
754
- return html `
755
- <label
756
- id="tile-blur-label"
757
- for="tile-blur-check"
758
- slot="sort-options-right"
759
- >
760
- ${msg('Blurring')}
761
- <input
762
- id="tile-blur-check"
763
- type="checkbox"
764
- ?checked=${!this.shouldSuppressTileBlurring}
765
- @change=${this.tileBlurCheckboxChanged}
766
- />
767
- </label>
754
+ return html `
755
+ <label
756
+ id="tile-blur-label"
757
+ for="tile-blur-check"
758
+ slot="sort-options-right"
759
+ >
760
+ ${msg('Blurring')}
761
+ <input
762
+ id="tile-blur-check"
763
+ type="checkbox"
764
+ ?checked=${!this.shouldSuppressTileBlurring}
765
+ @change=${this.tileBlurCheckboxChanged}
766
+ />
767
+ </label>
768
768
  `;
769
769
  }
770
770
  /**
@@ -772,27 +772,27 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
772
772
  * showing the management view. This generally replaces the sort bar when present.
773
773
  */
774
774
  get manageBarTemplate() {
775
- return html `
776
- <manage-bar
777
- .label=${this.manageViewLabel}
778
- .modalManager=${this.modalManager}
779
- .selectedItems=${this.dataSource.checkedTileModels}
780
- .profileElement=${this.profileElement}
781
- showSelectAll
782
- showUnselectAll
783
- ?showItemManageButton=${this.pageContext === 'search'}
784
- ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
785
- @removeItems=${this.handleRemoveItems}
786
- @manageItems=${this.handleManageItems}
787
- @selectAll=${() => this.dataSource.checkAllTiles()}
788
- @unselectAll=${() => this.dataSource.uncheckAllTiles()}
775
+ return html `
776
+ <manage-bar
777
+ .label=${this.manageViewLabel}
778
+ .modalManager=${this.modalManager}
779
+ .selectedItems=${this.dataSource.checkedTileModels}
780
+ .profileElement=${this.profileElement}
781
+ showSelectAll
782
+ showUnselectAll
783
+ ?showItemManageButton=${this.pageContext === 'search'}
784
+ ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
785
+ @removeItems=${this.handleRemoveItems}
786
+ @manageItems=${this.handleManageItems}
787
+ @selectAll=${() => this.dataSource.checkAllTiles()}
788
+ @unselectAll=${() => this.dataSource.uncheckAllTiles()}
789
789
  @cancel=${() => {
790
790
  this.isManageView = false;
791
791
  this.dataSource.uncheckAllTiles();
792
792
  if (this.searchResultsLoading)
793
793
  this.dataSource.resetPages();
794
- }}
795
- ></manage-bar>
794
+ }}
795
+ ></manage-bar>
796
796
  `;
797
797
  }
798
798
  /**
@@ -1027,15 +1027,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1027
1027
  label: target.open ? 'open' : 'closed',
1028
1028
  });
1029
1029
  };
1030
- return html `
1031
- <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
1032
- <summary>
1033
- <span class="collapser-icon">${chevronIcon}</span>
1034
- <h2>${msg('Filters')}</h2>
1035
- ${this.clearFiltersBtnTemplate(true)}
1036
- </summary>
1037
- ${this.facetsTemplate}
1038
- </details>
1030
+ return html `
1031
+ <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
1032
+ <summary>
1033
+ <span class="collapser-icon">${chevronIcon}</span>
1034
+ <h2>${msg('Filters')}</h2>
1035
+ ${this.clearFiltersBtnTemplate(true)}
1036
+ </summary>
1037
+ ${this.facetsTemplate}
1038
+ </details>
1039
1039
  `;
1040
1040
  }
1041
1041
  /**
@@ -1119,50 +1119,50 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1119
1119
  const filterByNetworkLabel = msg('Filter by Network');
1120
1120
  const filterByShowLabel = msg('Filter by Show');
1121
1121
  const shows = showEntries.map(([show]) => show);
1122
- const loadingIndicator = html `
1123
- <span slot="empty-options">
1124
- <img src="https://archive.org/images/loading.gif" />
1125
- </span>
1122
+ const loadingIndicator = html `
1123
+ <span slot="empty-options">
1124
+ <img src="https://archive.org/images/loading.gif" />
1125
+ </span>
1126
1126
  `;
1127
- const errorMessage = html `
1128
- <span slot="empty-options">
1129
- ${msg('Unable to fetch options, try again later')}
1130
- </span>
1127
+ const errorMessage = html `
1128
+ <span slot="empty-options">
1129
+ ${msg('Unable to fetch options, try again later')}
1130
+ </span>
1131
1131
  `;
1132
- return html `
1133
- <div id="tv-filters" slot="facets-top">
1134
- <ia-combo-box
1135
- id="tv-networks"
1136
- class="tv-filter-dropdown"
1137
- placeholder=${filterByNetworkLabel}
1138
- clearable
1139
- wrap-arrow-keys
1140
- sort
1141
- .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1142
- @toggle=${this.tvDropdownToggled}
1143
- @change=${this.networksDropdownChanged}
1144
- >
1145
- <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1146
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1147
- ${this.tvMapsErrored ? errorMessage : nothing}
1148
- </ia-combo-box>
1149
- <ia-combo-box
1150
- id="tv-shows"
1151
- class="tv-filter-dropdown"
1152
- placeholder=${filterByShowLabel}
1153
- max-autocomplete-entries="500"
1154
- clearable
1155
- wrap-arrow-keys
1156
- sort
1157
- .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1158
- @toggle=${this.tvDropdownToggled}
1159
- @change=${this.showsDropdownChanged}
1160
- >
1161
- <span slot="label" class="sr-only">${filterByShowLabel}</span>
1162
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1163
- ${this.tvMapsErrored ? errorMessage : nothing}
1164
- </ia-combo-box>
1165
- </div>
1132
+ return html `
1133
+ <div id="tv-filters" slot="facets-top">
1134
+ <ia-combo-box
1135
+ id="tv-networks"
1136
+ class="tv-filter-dropdown"
1137
+ placeholder=${filterByNetworkLabel}
1138
+ clearable
1139
+ wrap-arrow-keys
1140
+ sort
1141
+ .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1142
+ @toggle=${this.tvDropdownToggled}
1143
+ @change=${this.networksDropdownChanged}
1144
+ >
1145
+ <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1146
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1147
+ ${this.tvMapsErrored ? errorMessage : nothing}
1148
+ </ia-combo-box>
1149
+ <ia-combo-box
1150
+ id="tv-shows"
1151
+ class="tv-filter-dropdown"
1152
+ placeholder=${filterByShowLabel}
1153
+ max-autocomplete-entries="500"
1154
+ clearable
1155
+ wrap-arrow-keys
1156
+ sort
1157
+ .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1158
+ @toggle=${this.tvDropdownToggled}
1159
+ @change=${this.showsDropdownChanged}
1160
+ >
1161
+ <span slot="label" class="sr-only">${filterByShowLabel}</span>
1162
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1163
+ ${this.tvMapsErrored ? errorMessage : nothing}
1164
+ </ia-combo-box>
1165
+ </div>
1166
1166
  `;
1167
1167
  }
1168
1168
  /**
@@ -1172,10 +1172,10 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1172
1172
  if (FACETLESS_PAGE_ELEMENTS.includes(this.profileElement))
1173
1173
  return nothing;
1174
1174
  if (this.facetLoadStrategy === 'off') {
1175
- return html `
1176
- <p class="facets-message">
1177
- ${msg('Facets are temporarily unavailable.')}
1178
- </p>
1175
+ return html `
1176
+ <p class="facets-message">
1177
+ ${msg('Facets are temporarily unavailable.')}
1178
+ </p>
1179
1179
  `;
1180
1180
  }
1181
1181
  // We switch to TV facet ordering & date picker if we are in a TV collection or showing TV search results
@@ -1184,46 +1184,46 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1184
1184
  const facetDisplayOrder = shouldUseTvInterface
1185
1185
  ? tvFacetDisplayOrder
1186
1186
  : defaultFacetDisplayOrder;
1187
- const facets = html `
1188
- <collection-facets
1189
- .collectionPagePath=${this.collectionPagePath}
1190
- .parentCollections=${this.dataSource.parentCollections}
1191
- .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1192
- .searchService=${this.searchService}
1193
- .featureFeedbackService=${this.featureFeedbackService}
1194
- .recaptchaManager=${this.recaptchaManager}
1195
- .resizeObserver=${this.resizeObserver}
1196
- .searchType=${this.searchType}
1197
- .aggregations=${this.dataSource.aggregations}
1198
- .histogramAggregation=${this.dataSource.histogramAggregation}
1199
- .minSelectedDate=${this.minSelectedDate}
1200
- .maxSelectedDate=${this.maxSelectedDate}
1201
- .selectedFacets=${this.selectedFacets}
1202
- .baseNavigationUrl=${this.baseNavigationUrl}
1203
- .collectionTitles=${this.dataSource.collectionTitles}
1204
- .tvChannelAliases=${this.dataSource.tvChannelAliases}
1205
- .showHistogramDatePicker=${this.showHistogramDatePicker}
1206
- .allowExpandingDatePicker=${!this.mobileView}
1207
- .allowDatePickerMonths=${shouldUseTvInterface}
1208
- .contentWidth=${this.contentWidth}
1209
- .query=${this.baseQuery}
1210
- .identifiers=${this.identifiers}
1211
- .filterMap=${this.dataSource.filterMap}
1212
- .isManageView=${this.isManageView}
1213
- .modalManager=${this.modalManager}
1214
- .analyticsHandler=${this.analyticsHandler}
1215
- .facetDisplayOrder=${facetDisplayOrder}
1216
- .isTvSearch=${shouldUseTvInterface}
1217
- ?collapsableFacets=${this.mobileView}
1218
- ?facetsLoading=${this.facetsLoading}
1219
- ?histogramAggregationLoading=${this.facetsLoading}
1220
- ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1221
- @facetClick=${this.facetClickHandler}
1222
- @facetsChanged=${this.facetsChanged}
1223
- @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1224
- >
1225
- ${this.tvDropdownFiltersTemplate}
1226
- </collection-facets>
1187
+ const facets = html `
1188
+ <collection-facets
1189
+ .collectionPagePath=${this.collectionPagePath}
1190
+ .parentCollections=${this.dataSource.parentCollections}
1191
+ .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1192
+ .searchService=${this.searchService}
1193
+ .featureFeedbackService=${this.featureFeedbackService}
1194
+ .recaptchaManager=${this.recaptchaManager}
1195
+ .resizeObserver=${this.resizeObserver}
1196
+ .searchType=${this.searchType}
1197
+ .aggregations=${this.dataSource.aggregations}
1198
+ .histogramAggregation=${this.dataSource.histogramAggregation}
1199
+ .minSelectedDate=${this.minSelectedDate}
1200
+ .maxSelectedDate=${this.maxSelectedDate}
1201
+ .selectedFacets=${this.selectedFacets}
1202
+ .baseNavigationUrl=${this.baseNavigationUrl}
1203
+ .collectionTitles=${this.dataSource.collectionTitles}
1204
+ .tvChannelAliases=${this.dataSource.tvChannelAliases}
1205
+ .showHistogramDatePicker=${this.showHistogramDatePicker}
1206
+ .allowExpandingDatePicker=${!this.mobileView}
1207
+ .allowDatePickerMonths=${shouldUseTvInterface}
1208
+ .contentWidth=${this.contentWidth}
1209
+ .query=${this.baseQuery}
1210
+ .identifiers=${this.identifiers}
1211
+ .filterMap=${this.dataSource.filterMap}
1212
+ .isManageView=${this.isManageView}
1213
+ .modalManager=${this.modalManager}
1214
+ .analyticsHandler=${this.analyticsHandler}
1215
+ .facetDisplayOrder=${facetDisplayOrder}
1216
+ .isTvSearch=${shouldUseTvInterface}
1217
+ ?collapsableFacets=${this.mobileView}
1218
+ ?facetsLoading=${this.facetsLoading}
1219
+ ?histogramAggregationLoading=${this.facetsLoading}
1220
+ ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1221
+ @facetClick=${this.facetClickHandler}
1222
+ @facetsChanged=${this.facetsChanged}
1223
+ @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1224
+ >
1225
+ ${this.tvDropdownFiltersTemplate}
1226
+ </collection-facets>
1227
1227
  `;
1228
1228
  // If we are using one of the opt-in facet load strategies, we may need to wrap the
1229
1229
  // desktop view facets in a <details> widget so that patrons can opt into loading them.
@@ -1231,20 +1231,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1231
1231
  const showDesktopOptInWidget = this.facetLoadStrategy === 'opt-in' ||
1232
1232
  (this.facetLoadStrategy === 'opt-in-or-login' && !this.loggedIn);
1233
1233
  if (showDesktopOptInWidget && !this.mobileView) {
1234
- return html `
1235
- <details
1236
- class="desktop-facets-dropdown"
1234
+ return html `
1235
+ <details
1236
+ class="desktop-facets-dropdown"
1237
1237
  @toggle=${(e) => {
1238
1238
  const target = e.target;
1239
1239
  this.collapsibleFacetsVisible = target.open;
1240
- }}
1241
- >
1242
- <summary>
1243
- <span class="collapser-icon">${chevronIcon}</span>
1244
- <h2>${msg('Filters')}</h2>
1245
- </summary>
1246
- ${facets}
1247
- </details>
1240
+ }}
1241
+ >
1242
+ <summary>
1243
+ <span class="collapser-icon">${chevronIcon}</span>
1244
+ <h2>${msg('Filters')}</h2>
1245
+ </summary>
1246
+ ${facets}
1247
+ </details>
1248
1248
  `;
1249
1249
  }
1250
1250
  // Otherwise, just render the facets component bare
@@ -1264,34 +1264,34 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1264
1264
  mobile,
1265
1265
  });
1266
1266
  const buttonText = mobile ? 'Clear all' : 'Clear all filters';
1267
- return html `
1268
- <div class="clear-filters-btn-row">
1267
+ return html `
1268
+ <div class="clear-filters-btn-row">
1269
1269
  ${mobile
1270
1270
  ? html `<span class="clear-filters-btn-separator">&nbsp;</span>`
1271
- : nothing}
1272
- <button class=${buttonClasses} @click=${this.clearFilters}>
1273
- ${buttonText}
1274
- </button>
1275
- </div>
1271
+ : nothing}
1272
+ <button class=${buttonClasses} @click=${this.clearFilters}>
1273
+ ${buttonText}
1274
+ </button>
1275
+ </div>
1276
1276
  `;
1277
1277
  }
1278
1278
  /**
1279
1279
  * Template for the table header content that appears atop the compact list view.
1280
1280
  */
1281
1281
  get listHeaderTemplate() {
1282
- return html `
1283
- <div id="list-header">
1284
- <tile-dispatcher
1285
- .tileDisplayMode=${'list-header'}
1286
- .resizeObserver=${this.resizeObserver}
1287
- .sortParam=${this.sortParam}
1288
- .defaultSortParam=${this.defaultSortParam}
1289
- .mobileBreakpoint=${this.mobileBreakpoint}
1290
- .loggedIn=${this.loggedIn}
1291
- .suppressBlurring=${this.shouldSuppressTileBlurring}
1292
- >
1293
- </tile-dispatcher>
1294
- </div>
1282
+ return html `
1283
+ <div id="list-header">
1284
+ <tile-dispatcher
1285
+ .tileDisplayMode=${'list-header'}
1286
+ .resizeObserver=${this.resizeObserver}
1287
+ .sortParam=${this.sortParam}
1288
+ .defaultSortParam=${this.defaultSortParam}
1289
+ .mobileBreakpoint=${this.mobileBreakpoint}
1290
+ .loggedIn=${this.loggedIn}
1291
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
1292
+ >
1293
+ </tile-dispatcher>
1294
+ </div>
1295
1295
  `;
1296
1296
  }
1297
1297
  /**
@@ -2049,28 +2049,28 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
2049
2049
  const isRadioSearch = this.searchType === SearchType.RADIO;
2050
2050
  const { isTVCollection, isRadioCollection } = this;
2051
2051
  const shouldUseLocalTime = isTVSearch || isRadioSearch || isTVCollection || isRadioCollection;
2052
- return html `
2053
- <tile-dispatcher
2054
- .collectionPagePath=${this.collectionPagePath}
2055
- .baseNavigationUrl=${this.baseNavigationUrl}
2056
- .baseImageUrl=${this.baseImageUrl}
2057
- .model=${model}
2058
- .tileDisplayMode=${this.displayMode}
2059
- .resizeObserver=${this.resizeObserver}
2060
- .collectionTitles=${this.dataSource.collectionTitles}
2061
- .sortParam=${this.sortParam}
2062
- .defaultSortParam=${this.defaultSortParam}
2063
- .creatorFilter=${this.selectedCreatorFilter}
2064
- .mobileBreakpoint=${this.mobileBreakpoint}
2065
- .loggedIn=${this.loggedIn}
2066
- .suppressBlurring=${this.shouldSuppressTileBlurring}
2067
- .isManageView=${this.isManageView}
2068
- ?showTvClips=${isTVSearch || isTVCollection}
2069
- ?enableHoverPane=${true}
2070
- ?useLocalTime=${shouldUseLocalTime}
2071
- @resultSelected=${(e) => this.resultSelected(e)}
2072
- >
2073
- </tile-dispatcher>
2052
+ return html `
2053
+ <tile-dispatcher
2054
+ .collectionPagePath=${this.collectionPagePath}
2055
+ .baseNavigationUrl=${this.baseNavigationUrl}
2056
+ .baseImageUrl=${this.baseImageUrl}
2057
+ .model=${model}
2058
+ .tileDisplayMode=${this.displayMode}
2059
+ .resizeObserver=${this.resizeObserver}
2060
+ .collectionTitles=${this.dataSource.collectionTitles}
2061
+ .sortParam=${this.sortParam}
2062
+ .defaultSortParam=${this.defaultSortParam}
2063
+ .creatorFilter=${this.selectedCreatorFilter}
2064
+ .mobileBreakpoint=${this.mobileBreakpoint}
2065
+ .loggedIn=${this.loggedIn}
2066
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
2067
+ .isManageView=${this.isManageView}
2068
+ ?showTvClips=${isTVSearch || isTVCollection}
2069
+ ?enableHoverPane=${true}
2070
+ ?useLocalTime=${shouldUseLocalTime}
2071
+ @resultSelected=${(e) => this.resultSelected(e)}
2072
+ >
2073
+ </tile-dispatcher>
2074
2074
  `;
2075
2075
  }
2076
2076
  /**
@@ -2105,479 +2105,479 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
2105
2105
  static get styles() {
2106
2106
  return [
2107
2107
  srOnlyStyle,
2108
- css `
2109
- :host {
2110
- display: block;
2111
- --leftColumnWidth: 18rem;
2112
- --leftColumnPaddingTop: 2rem;
2113
- --leftColumnPaddingRight: 2.5rem;
2114
- }
2115
-
2116
- #facet-top-view {
2117
- display: flex;
2118
- }
2119
-
2120
- /**
2121
- * When page width resizes from desktop to mobile, use this class to
2122
- * disable expand/collapse transition when loading.
2123
- */
2124
- .preload * {
2125
- transition: none !important;
2126
- -webkit-transition: none !important;
2127
- -moz-transition: none !important;
2128
- -ms-transition: none !important;
2129
- -o-transition: none !important;
2130
- }
2131
-
2132
- #content-container {
2133
- display: flex;
2134
- }
2135
-
2136
- empty-placeholder {
2137
- margin-top: var(--placeholderMarginTop, 0);
2138
- }
2139
-
2140
- .collapser-icon {
2141
- display: inline-block;
2142
- }
2143
-
2144
- .collapser-icon svg {
2145
- display: inline-block;
2146
- width: 12px;
2147
- height: 12px;
2148
- transition: transform 0.2s ease-out;
2149
- }
2150
-
2151
- #mobile-filter-collapse {
2152
- width: 100%;
2153
- }
2154
-
2155
- #mobile-filter-collapse > summary {
2156
- cursor: pointer;
2157
- list-style: none;
2158
- }
2159
-
2160
- #mobile-filter-collapse[open] > summary {
2161
- margin-bottom: 10px;
2162
- }
2163
-
2164
- #mobile-filter-collapse h2 {
2165
- display: inline-block;
2166
- margin: 0;
2167
- font-size: 2rem;
2168
- }
2169
-
2170
- #mobile-filter-collapse[open] svg {
2171
- transform: rotate(90deg);
2172
- }
2173
-
2174
- #content-container.mobile {
2175
- display: block;
2176
- }
2177
-
2178
- #right-column {
2179
- flex: 1;
2180
- position: relative;
2181
- min-height: 90vh;
2182
- border-right: 1px solid rgb(232, 232, 232);
2183
- margin-top: var(--rightColumnMarginTop, 0);
2184
- padding-top: var(--rightColumnPaddingTop, 2rem);
2185
- background: #fff;
2186
- }
2187
-
2188
- #left-column:not([hidden]) + #right-column {
2189
- border-left: 1px solid rgb(232, 232, 232);
2190
- }
2191
-
2192
- #right-column.smart-results-spacing {
2193
- padding-top: 0.5rem;
2194
- border-right: none;
2195
- background: transparent;
2196
- min-width: 0;
2197
- }
2198
-
2199
- #results {
2200
- background: #fff;
2201
- padding-left: 1rem;
2202
- padding-right: 1rem;
2203
- }
2204
-
2205
- #right-column.smart-results-spacing #results {
2206
- border-radius: 10px 10px 0px 0px;
2207
- padding-top: 0.5rem;
2208
- margin-top: 1rem;
2209
- }
2210
-
2211
- .mobile #right-column {
2212
- border-left: none;
2213
- }
2214
-
2215
- .mobile #results {
2216
- padding: 5px 5px 0;
2217
- }
2218
-
2219
- #left-column {
2220
- width: var(--leftColumnWidth, 18rem);
2221
- /* Prevents Safari from shrinking col at first draw */
2222
- min-width: var(--leftColumnWidth, 18rem);
2223
- padding-top: var(--leftColumnPaddingTop, 2rem);
2224
- /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2225
- padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2226
- border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2227
- z-index: 1;
2228
- }
2229
-
2230
- .desktop #left-column {
2231
- top: 0;
2232
- position: sticky;
2233
- height: calc(100vh - 2rem);
2234
- max-height: calc(100vh - 2rem);
2235
- overflow-x: hidden;
2236
- overflow-y: scroll;
2237
-
2238
- /*
2239
- * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2240
- * does at least give us a tiny bit of control over width & color.
2241
- */
2242
- scrollbar-width: thin;
2243
- scrollbar-color: transparent transparent;
2244
- }
2245
- .desktop #left-column:hover {
2246
- scrollbar-color: auto;
2247
- }
2248
- .desktop #left-column::-webkit-scrollbar {
2249
- appearance: none;
2250
- width: 6px;
2251
- }
2252
- .desktop #left-column::-webkit-scrollbar-button {
2253
- height: 3px;
2254
- background: transparent;
2255
- }
2256
- .desktop #left-column::-webkit-scrollbar-corner {
2257
- background: transparent;
2258
- }
2259
- .desktop #left-column::-webkit-scrollbar-thumb {
2260
- border-radius: 4px;
2261
- }
2262
- .desktop #left-column:hover::-webkit-scrollbar-thumb {
2263
- background: rgba(0, 0, 0, 0.15);
2264
- }
2265
- .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2266
- background: rgba(0, 0, 0, 0.2);
2267
- }
2268
- .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2269
- background: rgba(0, 0, 0, 0.3);
2270
- }
2271
-
2272
- #facets-bottom-fade {
2273
- background: linear-gradient(
2274
- to bottom,
2275
- #fbfbfd00 0%,
2276
- #fbfbfdc0 50%,
2277
- #fbfbfd 80%,
2278
- #fbfbfd 100%
2279
- );
2280
- position: fixed;
2281
- bottom: 0;
2282
- height: 50px;
2283
- /* Wide enough to cover the content, but leave the scrollbar uncovered */
2284
- width: calc(
2285
- var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2286
- );
2287
- z-index: 2;
2288
- pointer-events: none;
2289
- transition: height 0.1s ease;
2290
- }
2291
- #facets-bottom-fade.hidden {
2292
- height: 0;
2293
- }
2294
-
2295
- .facets-message {
2296
- font-size: 1.4rem;
2297
- }
2298
-
2299
- .desktop-facets-dropdown > summary {
2300
- cursor: pointer;
2301
- list-style: none;
2302
- }
2303
-
2304
- .desktop-facets-dropdown h2 {
2305
- display: inline-block;
2306
- margin: 0;
2307
- font-size: 1.6rem;
2308
- }
2309
-
2310
- .desktop-facets-dropdown[open] > summary {
2311
- margin-bottom: 10px;
2312
- }
2313
-
2314
- .desktop-facets-dropdown[open] svg {
2315
- transform: rotate(90deg);
2316
- }
2317
-
2318
- .desktop #left-column-scroll-sentinel {
2319
- width: 1px;
2320
- height: 100vh;
2321
- background: transparent;
2322
- }
2323
-
2324
- .desktop #facets-scroll-sentinel {
2325
- width: 1px;
2326
- height: 1px;
2327
- background: transparent;
2328
- }
2329
-
2330
- #facets-header-container {
2331
- display: flex;
2332
- justify-content: space-between;
2333
- align-items: flex-start;
2334
- clear: both;
2335
- }
2336
-
2337
- .desktop #facets-header-container {
2338
- flex-wrap: wrap;
2339
- }
2340
-
2341
- .mobile #left-column {
2342
- width: 100%;
2343
- min-width: 0;
2344
- padding: 5px 0;
2345
- border: 0;
2346
- }
2347
-
2348
- .clear-filters-btn-row {
2349
- display: inline-block;
2350
- }
2351
-
2352
- .desktop .clear-filters-btn-row {
2353
- width: 100%;
2354
- }
2355
-
2356
- .clear-filters-btn {
2357
- display: inline-block;
2358
- appearance: none;
2359
- margin: 0;
2360
- padding: 0;
2361
- border: 0;
2362
- background: none;
2363
- color: var(--ia-theme-link-color);
2364
- font-size: 1.4rem;
2365
- font-family: inherit;
2366
- cursor: pointer;
2367
- }
2368
-
2369
- .clear-filters-btn:hover {
2370
- text-decoration: underline;
2371
- }
2372
-
2373
- .clear-filters-btn-separator {
2374
- display: inline-block;
2375
- margin-left: 5px;
2376
- border-left: 1px solid #2c2c2c;
2377
- font-size: 1.4rem;
2378
- line-height: 1.3rem;
2379
- }
2380
-
2381
- #tv-filters {
2382
- margin-bottom: 15px;
2383
- }
2384
-
2385
- #tv-shows {
2386
- --comboBoxListWidth: 300px;
2387
- }
2388
-
2389
- .tv-filter-dropdown {
2390
- display: block;
2391
- font-size: 14px;
2392
- margin-left: 1px;
2393
- margin-bottom: 5px;
2394
- }
2395
-
2396
- .tv-filter-dropdown::part(combo-box) {
2397
- outline-offset: 1px;
2398
- }
2399
-
2400
- .tv-filter-dropdown::part(option) {
2401
- line-height: 1.1;
2402
- padding: 7px;
2403
- }
2404
-
2405
- .tv-filter-dropdown::part(clear-button) {
2406
- flex: 0 0 26px;
2407
- --combo-box-clear-icon-size: 14px;
2408
- }
2409
-
2410
- .tv-filter-dropdown::part(icon) {
2411
- width: 1.4rem;
2412
- height: 1.4rem;
2413
- }
2414
-
2415
- #facets-container {
2416
- position: relative;
2417
- max-height: 0;
2418
- transition: max-height 0.2s ease-in-out;
2419
- z-index: 1;
2420
- margin-top: var(--facetsContainerMarginTop, 3rem);
2421
- padding-bottom: 2rem;
2422
- }
2423
-
2424
- .desktop #facets-container {
2425
- width: 18rem;
2426
- }
2427
-
2428
- .mobile #facets-container {
2429
- overflow: hidden;
2430
- padding-bottom: 0;
2431
- padding-left: 10px;
2432
- padding-right: 10px;
2433
- }
2434
-
2435
- #facets-container.expanded {
2436
- max-height: 2000px;
2437
- }
2438
-
2439
- .results-section-heading {
2440
- margin: 0.5rem 0.3rem;
2441
- font-size: 2rem;
2442
- line-height: 25px;
2443
- }
2444
-
2445
- #results-total {
2446
- display: flex;
2447
- align-items: baseline;
2448
- }
2449
-
2450
- #results-total:not(.filtered) {
2451
- padding-bottom: 2rem;
2452
- }
2453
-
2454
- .mobile #results-total {
2455
- position: absolute;
2456
- right: 10px;
2457
- }
2458
-
2459
- #big-results-count {
2460
- font-size: 2.4rem;
2461
- font-weight: 500;
2462
- margin-right: 5px;
2463
- }
2464
-
2465
- .mobile #big-results-count {
2466
- font-size: 2rem;
2467
- }
2468
-
2469
- #big-results-label {
2470
- font-size: 1.4rem;
2471
- font-weight: 200;
2472
- }
2473
-
2474
- #list-header {
2475
- max-height: 4.2rem;
2476
- }
2477
-
2478
- .loading-cover {
2479
- position: absolute;
2480
- top: 0;
2481
- left: 0;
2482
- width: 100%;
2483
- height: 100%;
2484
- display: flex;
2485
- justify-content: center;
2486
- z-index: 1;
2487
- padding-top: 50px;
2488
- }
2489
-
2490
- #tile-blur-label {
2491
- display: flex;
2492
- align-items: center;
2493
- column-gap: 5px;
2494
- }
2495
-
2496
- #tile-blur-check {
2497
- margin: 0 5px 0 0;
2498
- width: 15px;
2499
- }
2500
-
2501
- circular-activity-indicator {
2502
- width: 30px;
2503
- height: 30px;
2504
- }
2505
-
2506
- sort-filter-bar {
2507
- display: block;
2508
- margin-bottom: 4rem;
2509
- }
2510
-
2511
- infinite-scroller {
2512
- display: block;
2513
- --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2514
- --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2515
- }
2516
-
2517
- infinite-scroller.list-compact {
2518
- --infiniteScrollerCellMinWidth: var(
2519
- --collectionBrowserCellMinWidth,
2520
- 100%
2521
- );
2522
- --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2523
- --infiniteScrollerCellMaxHeight: 56px;
2524
- --infiniteScrollerRowGap: 10px;
2525
- }
2526
-
2527
- infinite-scroller.list-detail {
2528
- --infiniteScrollerCellMinWidth: var(
2529
- --collectionBrowserCellMinWidth,
2530
- 100%
2531
- );
2532
- --infiniteScrollerCellMinHeight: var(
2533
- --collectionBrowserCellMinHeight,
2534
- 5rem
2535
- );
2536
- /*
2537
- 30px in spec, compensating for a -4px margin
2538
- to align title with top of item image
2539
- src/tiles/list/tile-list.ts
2540
- */
2541
- --infiniteScrollerRowGap: 34px;
2542
- }
2543
-
2544
- .mobile infinite-scroller.list-detail {
2545
- --infiniteScrollerRowGap: 24px;
2546
- }
2547
-
2548
- infinite-scroller.grid {
2549
- --infiniteScrollerCellMinWidth: var(
2550
- --collectionBrowserCellMinWidth,
2551
- 17rem
2552
- );
2553
- --infiniteScrollerCellMaxWidth: var(
2554
- --collectionBrowserCellMaxWidth,
2555
- 1fr
2556
- );
2557
- }
2558
-
2559
- /* Allow tiles to shrink a bit further at smaller viewport widths */
2560
- @media screen and (max-width: 880px) {
2561
- infinite-scroller.grid {
2562
- --infiniteScrollerCellMinWidth: var(
2563
- --collectionBrowserCellMinWidth,
2564
- 15rem
2565
- );
2566
- }
2567
- }
2568
- /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2569
- @media screen and (max-width: 360px) {
2570
- infinite-scroller.grid {
2571
- --infiniteScrollerCellMinWidth: var(
2572
- --collectionBrowserCellMinWidth,
2573
- 12rem
2574
- );
2575
- }
2576
- }
2577
-
2578
- infinite-scroller.hidden {
2579
- display: none;
2580
- }
2108
+ css `
2109
+ :host {
2110
+ display: block;
2111
+ --leftColumnWidth: 18rem;
2112
+ --leftColumnPaddingTop: 2rem;
2113
+ --leftColumnPaddingRight: 2.5rem;
2114
+ }
2115
+
2116
+ #facet-top-view {
2117
+ display: flex;
2118
+ }
2119
+
2120
+ /**
2121
+ * When page width resizes from desktop to mobile, use this class to
2122
+ * disable expand/collapse transition when loading.
2123
+ */
2124
+ .preload * {
2125
+ transition: none !important;
2126
+ -webkit-transition: none !important;
2127
+ -moz-transition: none !important;
2128
+ -ms-transition: none !important;
2129
+ -o-transition: none !important;
2130
+ }
2131
+
2132
+ #content-container {
2133
+ display: flex;
2134
+ }
2135
+
2136
+ empty-placeholder {
2137
+ margin-top: var(--placeholderMarginTop, 0);
2138
+ }
2139
+
2140
+ .collapser-icon {
2141
+ display: inline-block;
2142
+ }
2143
+
2144
+ .collapser-icon svg {
2145
+ display: inline-block;
2146
+ width: 12px;
2147
+ height: 12px;
2148
+ transition: transform 0.2s ease-out;
2149
+ }
2150
+
2151
+ #mobile-filter-collapse {
2152
+ width: 100%;
2153
+ }
2154
+
2155
+ #mobile-filter-collapse > summary {
2156
+ cursor: pointer;
2157
+ list-style: none;
2158
+ }
2159
+
2160
+ #mobile-filter-collapse[open] > summary {
2161
+ margin-bottom: 10px;
2162
+ }
2163
+
2164
+ #mobile-filter-collapse h2 {
2165
+ display: inline-block;
2166
+ margin: 0;
2167
+ font-size: 2rem;
2168
+ }
2169
+
2170
+ #mobile-filter-collapse[open] svg {
2171
+ transform: rotate(90deg);
2172
+ }
2173
+
2174
+ #content-container.mobile {
2175
+ display: block;
2176
+ }
2177
+
2178
+ #right-column {
2179
+ flex: 1;
2180
+ position: relative;
2181
+ min-height: 90vh;
2182
+ border-right: 1px solid rgb(232, 232, 232);
2183
+ margin-top: var(--rightColumnMarginTop, 0);
2184
+ padding-top: var(--rightColumnPaddingTop, 2rem);
2185
+ background: #fff;
2186
+ }
2187
+
2188
+ #left-column:not([hidden]) + #right-column {
2189
+ border-left: 1px solid rgb(232, 232, 232);
2190
+ }
2191
+
2192
+ #right-column.smart-results-spacing {
2193
+ padding-top: 0.5rem;
2194
+ border-right: none;
2195
+ background: transparent;
2196
+ min-width: 0;
2197
+ }
2198
+
2199
+ #results {
2200
+ background: #fff;
2201
+ padding-left: 1rem;
2202
+ padding-right: 1rem;
2203
+ }
2204
+
2205
+ #right-column.smart-results-spacing #results {
2206
+ border-radius: 10px 10px 0px 0px;
2207
+ padding-top: 0.5rem;
2208
+ margin-top: 1rem;
2209
+ }
2210
+
2211
+ .mobile #right-column {
2212
+ border-left: none;
2213
+ }
2214
+
2215
+ .mobile #results {
2216
+ padding: 5px 5px 0;
2217
+ }
2218
+
2219
+ #left-column {
2220
+ width: var(--leftColumnWidth, 18rem);
2221
+ /* Prevents Safari from shrinking col at first draw */
2222
+ min-width: var(--leftColumnWidth, 18rem);
2223
+ padding-top: var(--leftColumnPaddingTop, 2rem);
2224
+ /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2225
+ padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2226
+ border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2227
+ z-index: 1;
2228
+ }
2229
+
2230
+ .desktop #left-column {
2231
+ top: 0;
2232
+ position: sticky;
2233
+ height: calc(100vh - 2rem);
2234
+ max-height: calc(100vh - 2rem);
2235
+ overflow-x: hidden;
2236
+ overflow-y: scroll;
2237
+
2238
+ /*
2239
+ * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2240
+ * does at least give us a tiny bit of control over width & color.
2241
+ */
2242
+ scrollbar-width: thin;
2243
+ scrollbar-color: transparent transparent;
2244
+ }
2245
+ .desktop #left-column:hover {
2246
+ scrollbar-color: auto;
2247
+ }
2248
+ .desktop #left-column::-webkit-scrollbar {
2249
+ appearance: none;
2250
+ width: 6px;
2251
+ }
2252
+ .desktop #left-column::-webkit-scrollbar-button {
2253
+ height: 3px;
2254
+ background: transparent;
2255
+ }
2256
+ .desktop #left-column::-webkit-scrollbar-corner {
2257
+ background: transparent;
2258
+ }
2259
+ .desktop #left-column::-webkit-scrollbar-thumb {
2260
+ border-radius: 4px;
2261
+ }
2262
+ .desktop #left-column:hover::-webkit-scrollbar-thumb {
2263
+ background: rgba(0, 0, 0, 0.15);
2264
+ }
2265
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2266
+ background: rgba(0, 0, 0, 0.2);
2267
+ }
2268
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2269
+ background: rgba(0, 0, 0, 0.3);
2270
+ }
2271
+
2272
+ #facets-bottom-fade {
2273
+ background: linear-gradient(
2274
+ to bottom,
2275
+ #fbfbfd00 0%,
2276
+ #fbfbfdc0 50%,
2277
+ #fbfbfd 80%,
2278
+ #fbfbfd 100%
2279
+ );
2280
+ position: fixed;
2281
+ bottom: 0;
2282
+ height: 50px;
2283
+ /* Wide enough to cover the content, but leave the scrollbar uncovered */
2284
+ width: calc(
2285
+ var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2286
+ );
2287
+ z-index: 2;
2288
+ pointer-events: none;
2289
+ transition: height 0.1s ease;
2290
+ }
2291
+ #facets-bottom-fade.hidden {
2292
+ height: 0;
2293
+ }
2294
+
2295
+ .facets-message {
2296
+ font-size: 1.4rem;
2297
+ }
2298
+
2299
+ .desktop-facets-dropdown > summary {
2300
+ cursor: pointer;
2301
+ list-style: none;
2302
+ }
2303
+
2304
+ .desktop-facets-dropdown h2 {
2305
+ display: inline-block;
2306
+ margin: 0;
2307
+ font-size: 1.6rem;
2308
+ }
2309
+
2310
+ .desktop-facets-dropdown[open] > summary {
2311
+ margin-bottom: 10px;
2312
+ }
2313
+
2314
+ .desktop-facets-dropdown[open] svg {
2315
+ transform: rotate(90deg);
2316
+ }
2317
+
2318
+ .desktop #left-column-scroll-sentinel {
2319
+ width: 1px;
2320
+ height: 100vh;
2321
+ background: transparent;
2322
+ }
2323
+
2324
+ .desktop #facets-scroll-sentinel {
2325
+ width: 1px;
2326
+ height: 1px;
2327
+ background: transparent;
2328
+ }
2329
+
2330
+ #facets-header-container {
2331
+ display: flex;
2332
+ justify-content: space-between;
2333
+ align-items: flex-start;
2334
+ clear: both;
2335
+ }
2336
+
2337
+ .desktop #facets-header-container {
2338
+ flex-wrap: wrap;
2339
+ }
2340
+
2341
+ .mobile #left-column {
2342
+ width: 100%;
2343
+ min-width: 0;
2344
+ padding: 5px 0;
2345
+ border: 0;
2346
+ }
2347
+
2348
+ .clear-filters-btn-row {
2349
+ display: inline-block;
2350
+ }
2351
+
2352
+ .desktop .clear-filters-btn-row {
2353
+ width: 100%;
2354
+ }
2355
+
2356
+ .clear-filters-btn {
2357
+ display: inline-block;
2358
+ appearance: none;
2359
+ margin: 0;
2360
+ padding: 0;
2361
+ border: 0;
2362
+ background: none;
2363
+ color: var(--ia-theme-link-color);
2364
+ font-size: 1.4rem;
2365
+ font-family: inherit;
2366
+ cursor: pointer;
2367
+ }
2368
+
2369
+ .clear-filters-btn:hover {
2370
+ text-decoration: underline;
2371
+ }
2372
+
2373
+ .clear-filters-btn-separator {
2374
+ display: inline-block;
2375
+ margin-left: 5px;
2376
+ border-left: 1px solid #2c2c2c;
2377
+ font-size: 1.4rem;
2378
+ line-height: 1.3rem;
2379
+ }
2380
+
2381
+ #tv-filters {
2382
+ margin-bottom: 15px;
2383
+ }
2384
+
2385
+ #tv-shows {
2386
+ --comboBoxListWidth: 300px;
2387
+ }
2388
+
2389
+ .tv-filter-dropdown {
2390
+ display: block;
2391
+ font-size: 14px;
2392
+ margin-left: 1px;
2393
+ margin-bottom: 5px;
2394
+ }
2395
+
2396
+ .tv-filter-dropdown::part(combo-box) {
2397
+ outline-offset: 1px;
2398
+ }
2399
+
2400
+ .tv-filter-dropdown::part(option) {
2401
+ line-height: 1.1;
2402
+ padding: 7px;
2403
+ }
2404
+
2405
+ .tv-filter-dropdown::part(clear-button) {
2406
+ flex: 0 0 26px;
2407
+ --combo-box-clear-icon-size: 14px;
2408
+ }
2409
+
2410
+ .tv-filter-dropdown::part(icon) {
2411
+ width: 1.4rem;
2412
+ height: 1.4rem;
2413
+ }
2414
+
2415
+ #facets-container {
2416
+ position: relative;
2417
+ max-height: 0;
2418
+ transition: max-height 0.2s ease-in-out;
2419
+ z-index: 1;
2420
+ margin-top: var(--facetsContainerMarginTop, 3rem);
2421
+ padding-bottom: 2rem;
2422
+ }
2423
+
2424
+ .desktop #facets-container {
2425
+ width: 18rem;
2426
+ }
2427
+
2428
+ .mobile #facets-container {
2429
+ overflow: hidden;
2430
+ padding-bottom: 0;
2431
+ padding-left: 10px;
2432
+ padding-right: 10px;
2433
+ }
2434
+
2435
+ #facets-container.expanded {
2436
+ max-height: 2000px;
2437
+ }
2438
+
2439
+ .results-section-heading {
2440
+ margin: 0.5rem 0.3rem;
2441
+ font-size: 2rem;
2442
+ line-height: 25px;
2443
+ }
2444
+
2445
+ #results-total {
2446
+ display: flex;
2447
+ align-items: baseline;
2448
+ }
2449
+
2450
+ #results-total:not(.filtered) {
2451
+ padding-bottom: 2rem;
2452
+ }
2453
+
2454
+ .mobile #results-total {
2455
+ position: absolute;
2456
+ right: 10px;
2457
+ }
2458
+
2459
+ #big-results-count {
2460
+ font-size: 2.4rem;
2461
+ font-weight: 500;
2462
+ margin-right: 5px;
2463
+ }
2464
+
2465
+ .mobile #big-results-count {
2466
+ font-size: 2rem;
2467
+ }
2468
+
2469
+ #big-results-label {
2470
+ font-size: 1.4rem;
2471
+ font-weight: 200;
2472
+ }
2473
+
2474
+ #list-header {
2475
+ max-height: 4.2rem;
2476
+ }
2477
+
2478
+ .loading-cover {
2479
+ position: absolute;
2480
+ top: 0;
2481
+ left: 0;
2482
+ width: 100%;
2483
+ height: 100%;
2484
+ display: flex;
2485
+ justify-content: center;
2486
+ z-index: 1;
2487
+ padding-top: 50px;
2488
+ }
2489
+
2490
+ #tile-blur-label {
2491
+ display: flex;
2492
+ align-items: center;
2493
+ column-gap: 5px;
2494
+ }
2495
+
2496
+ #tile-blur-check {
2497
+ margin: 0 5px 0 0;
2498
+ width: 15px;
2499
+ }
2500
+
2501
+ circular-activity-indicator {
2502
+ width: 30px;
2503
+ height: 30px;
2504
+ }
2505
+
2506
+ sort-filter-bar {
2507
+ display: block;
2508
+ margin-bottom: 4rem;
2509
+ }
2510
+
2511
+ infinite-scroller {
2512
+ display: block;
2513
+ --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2514
+ --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2515
+ }
2516
+
2517
+ infinite-scroller.list-compact {
2518
+ --infiniteScrollerCellMinWidth: var(
2519
+ --collectionBrowserCellMinWidth,
2520
+ 100%
2521
+ );
2522
+ --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2523
+ --infiniteScrollerCellMaxHeight: 56px;
2524
+ --infiniteScrollerRowGap: 10px;
2525
+ }
2526
+
2527
+ infinite-scroller.list-detail {
2528
+ --infiniteScrollerCellMinWidth: var(
2529
+ --collectionBrowserCellMinWidth,
2530
+ 100%
2531
+ );
2532
+ --infiniteScrollerCellMinHeight: var(
2533
+ --collectionBrowserCellMinHeight,
2534
+ 5rem
2535
+ );
2536
+ /*
2537
+ 30px in spec, compensating for a -4px margin
2538
+ to align title with top of item image
2539
+ src/tiles/list/tile-list.ts
2540
+ */
2541
+ --infiniteScrollerRowGap: 34px;
2542
+ }
2543
+
2544
+ .mobile infinite-scroller.list-detail {
2545
+ --infiniteScrollerRowGap: 24px;
2546
+ }
2547
+
2548
+ infinite-scroller.grid {
2549
+ --infiniteScrollerCellMinWidth: var(
2550
+ --collectionBrowserCellMinWidth,
2551
+ 17rem
2552
+ );
2553
+ --infiniteScrollerCellMaxWidth: var(
2554
+ --collectionBrowserCellMaxWidth,
2555
+ 1fr
2556
+ );
2557
+ }
2558
+
2559
+ /* Allow tiles to shrink a bit further at smaller viewport widths */
2560
+ @media screen and (max-width: 880px) {
2561
+ infinite-scroller.grid {
2562
+ --infiniteScrollerCellMinWidth: var(
2563
+ --collectionBrowserCellMinWidth,
2564
+ 15rem
2565
+ );
2566
+ }
2567
+ }
2568
+ /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2569
+ @media screen and (max-width: 360px) {
2570
+ infinite-scroller.grid {
2571
+ --infiniteScrollerCellMinWidth: var(
2572
+ --collectionBrowserCellMinWidth,
2573
+ 12rem
2574
+ );
2575
+ }
2576
+ }
2577
+
2578
+ infinite-scroller.hidden {
2579
+ display: none;
2580
+ }
2581
2581
  `,
2582
2582
  ];
2583
2583
  }