@internetarchive/collection-browser 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) 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 +4 -4
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/src/app-root.js +614 -614
  13. package/dist/src/app-root.js.map +1 -1
  14. package/dist/src/collection-browser.js +764 -764
  15. package/dist/src/collection-browser.js.map +1 -1
  16. package/dist/src/collection-facets/more-facets-content.js +121 -121
  17. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  18. package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
  19. package/dist/src/models.js.map +1 -1
  20. package/dist/src/tiles/grid/collection-tile.js +89 -89
  21. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  22. package/dist/src/tiles/grid/item-tile.js +138 -138
  23. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  24. package/dist/src/tiles/hover/hover-pane-controller.js +28 -28
  25. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  26. package/dist/src/tiles/models.js.map +1 -1
  27. package/dist/src/tiles/tile-dispatcher.js +216 -216
  28. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  29. package/dist/test/collection-browser.test.js +189 -189
  30. package/dist/test/collection-browser.test.js.map +1 -1
  31. package/eslint.config.mjs +53 -53
  32. package/index.html +24 -24
  33. package/index.ts +28 -27
  34. package/local.archive.org.cert +86 -86
  35. package/local.archive.org.key +27 -27
  36. package/package.json +121 -121
  37. package/renovate.json +6 -6
  38. package/src/app-root.ts +1166 -1166
  39. package/src/collection-browser.ts +3075 -3075
  40. package/src/collection-facets/more-facets-content.ts +644 -644
  41. package/src/data-source/collection-browser-query-state.ts +59 -59
  42. package/src/models.ts +873 -873
  43. package/src/tiles/grid/collection-tile.ts +184 -184
  44. package/src/tiles/grid/item-tile.ts +346 -346
  45. package/src/tiles/hover/hover-pane-controller.ts +627 -627
  46. package/src/tiles/models.ts +8 -8
  47. package/src/tiles/tile-dispatcher.ts +518 -518
  48. package/test/collection-browser.test.ts +2413 -2413
  49. package/tsconfig.json +25 -25
  50. package/web-dev-server.config.mjs +30 -30
  51. package/web-test-runner.config.mjs +52 -52
@@ -379,32 +379,32 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
379
379
  }
380
380
  }
381
381
  render() {
382
- return html `
382
+ return html `
383
383
  ${this.showSmartFacetBar && this.placeholderType === null
384
- ? html `<smart-facet-bar
385
- .query=${this.baseQuery}
386
- .aggregations=${this.dataSource.aggregations}
387
- .selectedFacets=${this.selectedFacets}
388
- .collectionTitles=${this.dataSource.collectionTitles}
389
- .filterToggleShown=${!this.mobileView}
390
- .filterToggleActive=${this.facetPaneVisible}
391
- .label=${this.smartFacetBarLabel}
392
- @facetsChanged=${this.facetsChanged}
384
+ ? html `<smart-facet-bar
385
+ .query=${this.baseQuery}
386
+ .aggregations=${this.dataSource.aggregations}
387
+ .selectedFacets=${this.selectedFacets}
388
+ .collectionTitles=${this.dataSource.collectionTitles}
389
+ .filterToggleShown=${!this.mobileView}
390
+ .filterToggleActive=${this.facetPaneVisible}
391
+ .label=${this.smartFacetBarLabel}
392
+ @facetsChanged=${this.facetsChanged}
393
393
  @filtersToggled=${() => {
394
394
  this.facetPaneVisible = !this.facetPaneVisible;
395
395
  this.emitFacetPaneVisibilityChanged();
396
- }}
396
+ }}
397
397
  ></smart-facet-bar>`
398
- : nothing}
399
-
400
- <div
401
- id="content-container"
402
- class=${this.mobileView ? 'mobile' : 'desktop'}
403
- >
398
+ : nothing}
399
+
400
+ <div
401
+ id="content-container"
402
+ class=${this.mobileView ? 'mobile' : 'desktop'}
403
+ >
404
404
  ${this.placeholderType
405
405
  ? this.emptyPlaceholderTemplate
406
- : this.collectionBrowserTemplate}
407
- </div>
406
+ : this.collectionBrowserTemplate}
407
+ </div>
408
408
  `;
409
409
  }
410
410
  /**
@@ -448,23 +448,23 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
448
448
  * Template for the placeholder content to show when no results are available.
449
449
  */
450
450
  get emptyPlaceholderTemplate() {
451
- return html `
452
- <empty-placeholder
453
- .placeholderType=${this.placeholderType}
454
- ?isMobileView=${this.mobileView}
455
- ?isCollection=${!!this.withinCollection}
456
- .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
457
- .baseNavigationUrl=${this.baseNavigationUrl}
458
- ></empty-placeholder>
451
+ return html `
452
+ <empty-placeholder
453
+ .placeholderType=${this.placeholderType}
454
+ ?isMobileView=${this.mobileView}
455
+ ?isCollection=${!!this.withinCollection}
456
+ .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
457
+ .baseNavigationUrl=${this.baseNavigationUrl}
458
+ ></empty-placeholder>
459
459
  `;
460
460
  }
461
461
  /**
462
462
  * Top-level template for rendering the left (facets) and right (results) columns.
463
463
  */
464
464
  get collectionBrowserTemplate() {
465
- return html `
466
- <div id="left-column-scroll-sentinel"></div>
467
- ${this.leftColumnTemplate} ${this.rightColumnTemplate}
465
+ return html `
466
+ <div id="left-column-scroll-sentinel"></div>
467
+ ${this.leftColumnTemplate} ${this.rightColumnTemplate}
468
468
  `;
469
469
  }
470
470
  /**
@@ -483,33 +483,33 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
483
483
  * accordion-style facets.
484
484
  */
485
485
  get mobileLeftColumnTemplate() {
486
- return html `
487
- <div
488
- id="left-column"
489
- class="column${this.isResizeToMobile ? ' preload' : ''}"
490
- >
491
- ${this.facetTopViewSlot} ${this.resultsCountTemplate}
492
- <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
493
- </div>
486
+ return html `
487
+ <div
488
+ id="left-column"
489
+ class="column${this.isResizeToMobile ? ' preload' : ''}"
490
+ >
491
+ ${this.facetTopViewSlot} ${this.resultsCountTemplate}
492
+ <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
493
+ </div>
494
494
  `;
495
495
  }
496
496
  /**
497
497
  * Template for the desktop version of the left column, displaying the facets sidebar.
498
498
  */
499
499
  get desktopLeftColumnTemplate() {
500
- return html `
501
- <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
502
- ${this.facetTopViewSlot}
503
- <div id="facets-header-container">
504
- <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
505
- ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
506
- </div>
507
- <div id="facets-container" aria-labelledby="facets-header">
508
- ${this.facetsTemplate}
509
- <div id="facets-scroll-sentinel"></div>
510
- </div>
511
- <div id="facets-bottom-fade"></div>
512
- </div>
500
+ return html `
501
+ <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
502
+ ${this.facetTopViewSlot}
503
+ <div id="facets-header-container">
504
+ <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
505
+ ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
506
+ </div>
507
+ <div id="facets-container" aria-labelledby="facets-header">
508
+ ${this.facetsTemplate}
509
+ <div id="facets-scroll-sentinel"></div>
510
+ </div>
511
+ <div id="facets-bottom-fade"></div>
512
+ </div>
513
513
  `;
514
514
  }
515
515
  /**
@@ -517,8 +517,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
517
517
  * - mainly used to render userlists
518
518
  */
519
519
  get facetTopViewSlot() {
520
- return html `<div id="facet-top-view">
521
- <slot name="facet-top-slot"></slot>
520
+ return html `<div id="facet-top-view">
521
+ <slot name="facet-top-slot"></slot>
522
522
  </div>`;
523
523
  }
524
524
  /**
@@ -533,15 +533,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
533
533
  const resultsCount = this.totalResults?.toLocaleString();
534
534
  const resultsLabel = this.totalResults === 1 ? 'Result' : 'Results';
535
535
  // Added data-testid for Playwright testing
536
- return html `
537
- <div id="results-total" class=${classes} data-testid="results-total">
538
- <span id="big-results-count">
539
- ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
540
- </span>
541
- <span id="big-results-label">
542
- ${shouldShowSearching ? nothing : resultsLabel}
543
- </span>
544
- </div>
536
+ return html `
537
+ <div id="results-total" class=${classes} data-testid="results-total">
538
+ <span id="big-results-count">
539
+ ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
540
+ </span>
541
+ <span id="big-results-label">
542
+ ${shouldShowSearching ? nothing : resultsLabel}
543
+ </span>
544
+ </div>
545
545
  `;
546
546
  }
547
547
  /**
@@ -554,45 +554,45 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
554
554
  'full-width': !this.facetPaneVisible,
555
555
  'smart-results-spacing': !!this.showSmartResults,
556
556
  });
557
- return html `
558
- <div id="right-column" class=${rightColumnClasses}>
557
+ return html `
558
+ <div id="right-column" class=${rightColumnClasses}>
559
559
  ${this.showSmartResults
560
560
  ? html `<slot name="smart-results"></slot>`
561
- : nothing}
562
- <section id="results">
563
- <h2 class="results-section-heading">
564
- <slot name="results-heading"></slot>
565
- </h2>
566
- <div id="cb-top-view">
567
- <slot name="cb-top-slot"></slot>
568
- </div>
561
+ : nothing}
562
+ <section id="results">
563
+ <h2 class="results-section-heading">
564
+ <slot name="results-heading"></slot>
565
+ </h2>
566
+ <div id="cb-top-view">
567
+ <slot name="cb-top-slot"></slot>
568
+ </div>
569
569
  ${this.isManageView
570
570
  ? this.manageBarTemplate
571
- : this.sortFilterBarTemplate}
572
- <slot name="cb-results"></slot>
571
+ : this.sortFilterBarTemplate}
572
+ <slot name="cb-results"></slot>
573
573
  ${this.displayMode === `list-compact` && this.totalResults
574
574
  ? this.listHeaderTemplate
575
- : nothing}
576
- ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
577
- </section>
578
- </div>
575
+ : nothing}
576
+ ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
577
+ </section>
578
+ </div>
579
579
  `;
580
580
  }
581
581
  /**
582
582
  * Template for the infinite scroller widget that contains the result tiles.
583
583
  */
584
584
  get infiniteScrollerTemplate() {
585
- return html `<infinite-scroller
586
- class=${this.infiniteScrollerClasses}
587
- itemCount=${this.placeholderType ? 0 : nothing}
588
- ariaLandmarkLabel="Search results"
589
- .cellProvider=${this}
590
- .placeholderCellTemplate=${this.placeholderCellTemplate}
591
- @scrollThresholdReached=${this.scrollThresholdReached}
592
- @visibleCellsChanged=${this.visibleCellsChanged}
585
+ return html `<infinite-scroller
586
+ class=${this.infiniteScrollerClasses}
587
+ itemCount=${this.placeholderType ? 0 : nothing}
588
+ ariaLandmarkLabel="Search results"
589
+ .cellProvider=${this}
590
+ .placeholderCellTemplate=${this.placeholderCellTemplate}
591
+ @scrollThresholdReached=${this.scrollThresholdReached}
592
+ @visibleCellsChanged=${this.visibleCellsChanged}
593
593
  >${this.displayMode === 'grid'
594
594
  ? html `<slot name="result-last-tile" slot="result-last-tile"></slot>`
595
- : nothing}
595
+ : nothing}
596
596
  </infinite-scroller>`;
597
597
  }
598
598
  /**
@@ -631,32 +631,32 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
631
631
  }
632
632
  // We only show relevance sort if a search query is currently defined
633
633
  sortFieldAvailability.relevance = this.isRelevanceSortAvailable;
634
- return html `
635
- <sort-filter-bar
636
- .defaultSortField=${this.defaultSortField}
637
- .defaultSortDirection=${this.defaultSortDirection}
638
- .defaultViewSort=${defaultViewSort}
639
- .defaultDateSort=${defaultDateSort}
640
- .selectedSort=${this.selectedSort}
641
- .sortDirection=${this.sortDirection}
642
- .sortFieldAvailability=${sortFieldAvailability}
643
- .displayMode=${this.displayMode}
644
- .selectedTitleFilter=${this.selectedTitleFilter}
645
- .selectedCreatorFilter=${this.selectedCreatorFilter}
646
- .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
647
- .resizeObserver=${this.resizeObserver}
648
- .enableSortOptionsSlot=${this.enableSortOptionsSlot}
649
- .suppressDisplayModes=${this.suppressDisplayModes}
650
- @sortChanged=${this.userChangedSort}
651
- @displayModeChanged=${this.displayModeChanged}
652
- @titleLetterChanged=${this.titleLetterSelected}
653
- @creatorLetterChanged=${this.creatorLetterSelected}
654
- >
655
- ${this.tileBlurCheckboxTemplate}
656
- <slot name="sort-options-left" slot="sort-options-left"></slot>
657
- <slot name="sort-options" slot="sort-options"></slot>
658
- <slot name="sort-options-right" slot="sort-options-right"></slot>
659
- </sort-filter-bar>
634
+ return html `
635
+ <sort-filter-bar
636
+ .defaultSortField=${this.defaultSortField}
637
+ .defaultSortDirection=${this.defaultSortDirection}
638
+ .defaultViewSort=${defaultViewSort}
639
+ .defaultDateSort=${defaultDateSort}
640
+ .selectedSort=${this.selectedSort}
641
+ .sortDirection=${this.sortDirection}
642
+ .sortFieldAvailability=${sortFieldAvailability}
643
+ .displayMode=${this.displayMode}
644
+ .selectedTitleFilter=${this.selectedTitleFilter}
645
+ .selectedCreatorFilter=${this.selectedCreatorFilter}
646
+ .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
647
+ .resizeObserver=${this.resizeObserver}
648
+ .enableSortOptionsSlot=${this.enableSortOptionsSlot}
649
+ .suppressDisplayModes=${this.suppressDisplayModes}
650
+ @sortChanged=${this.userChangedSort}
651
+ @displayModeChanged=${this.displayModeChanged}
652
+ @titleLetterChanged=${this.titleLetterSelected}
653
+ @creatorLetterChanged=${this.creatorLetterSelected}
654
+ >
655
+ ${this.tileBlurCheckboxTemplate}
656
+ <slot name="sort-options-left" slot="sort-options-left"></slot>
657
+ <slot name="sort-options" slot="sort-options"></slot>
658
+ <slot name="sort-options-right" slot="sort-options-right"></slot>
659
+ </sort-filter-bar>
660
660
  `;
661
661
  }
662
662
  /**
@@ -667,20 +667,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
667
667
  // Only show the checkbox for @archive.org users
668
668
  if (!this.dataSource.sessionContext?.is_archive_user)
669
669
  return nothing;
670
- return html `
671
- <label
672
- id="tile-blur-label"
673
- for="tile-blur-check"
674
- slot="sort-options-right"
675
- >
676
- ${msg('Blurring')}
677
- <input
678
- id="tile-blur-check"
679
- type="checkbox"
680
- ?checked=${!this.shouldSuppressTileBlurring}
681
- @change=${this.tileBlurCheckboxChanged}
682
- />
683
- </label>
670
+ return html `
671
+ <label
672
+ id="tile-blur-label"
673
+ for="tile-blur-check"
674
+ slot="sort-options-right"
675
+ >
676
+ ${msg('Blurring')}
677
+ <input
678
+ id="tile-blur-check"
679
+ type="checkbox"
680
+ ?checked=${!this.shouldSuppressTileBlurring}
681
+ @change=${this.tileBlurCheckboxChanged}
682
+ />
683
+ </label>
684
684
  `;
685
685
  }
686
686
  /**
@@ -706,27 +706,27 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
706
706
  * showing the management view. This generally replaces the sort bar when present.
707
707
  */
708
708
  get manageBarTemplate() {
709
- return html `
710
- <manage-bar
711
- .label=${this.manageViewLabel}
712
- .modalManager=${this.modalManager}
713
- .selectedItems=${this.dataSource.checkedTileModels}
714
- .manageViewModalMsg=${this.manageViewModalMsg}
715
- showSelectAll
716
- showUnselectAll
717
- ?showItemManageButton=${this.pageContext === 'search'}
718
- ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
719
- @removeItems=${this.handleRemoveItems}
720
- @manageItems=${this.handleManageItems}
721
- @selectAll=${() => this.dataSource.checkAllTiles()}
722
- @unselectAll=${() => this.dataSource.uncheckAllTiles()}
709
+ return html `
710
+ <manage-bar
711
+ .label=${this.manageViewLabel}
712
+ .modalManager=${this.modalManager}
713
+ .selectedItems=${this.dataSource.checkedTileModels}
714
+ .manageViewModalMsg=${this.manageViewModalMsg}
715
+ showSelectAll
716
+ showUnselectAll
717
+ ?showItemManageButton=${this.pageContext === 'search'}
718
+ ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
719
+ @removeItems=${this.handleRemoveItems}
720
+ @manageItems=${this.handleManageItems}
721
+ @selectAll=${() => this.dataSource.checkAllTiles()}
722
+ @unselectAll=${() => this.dataSource.uncheckAllTiles()}
723
723
  @cancel=${() => {
724
724
  this.isManageView = false;
725
725
  this.dataSource.uncheckAllTiles();
726
726
  if (this.searchResultsLoading)
727
727
  this.dataSource.resetPages();
728
- }}
729
- ></manage-bar>
728
+ }}
729
+ ></manage-bar>
730
730
  `;
731
731
  }
732
732
  /**
@@ -961,15 +961,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
961
961
  label: target.open ? 'open' : 'closed',
962
962
  });
963
963
  };
964
- return html `
965
- <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
966
- <summary>
967
- <span class="collapser-icon">${chevronIcon}</span>
968
- <h2>${msg('Filters')}</h2>
969
- ${this.clearFiltersBtnTemplate(true)}
970
- </summary>
971
- ${this.facetsTemplate}
972
- </details>
964
+ return html `
965
+ <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
966
+ <summary>
967
+ <span class="collapser-icon">${chevronIcon}</span>
968
+ <h2>${msg('Filters')}</h2>
969
+ ${this.clearFiltersBtnTemplate(true)}
970
+ </summary>
971
+ ${this.facetsTemplate}
972
+ </details>
973
973
  `;
974
974
  }
975
975
  /**
@@ -1053,50 +1053,50 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1053
1053
  const filterByNetworkLabel = msg('Filter by Network');
1054
1054
  const filterByShowLabel = msg('Filter by Show');
1055
1055
  const shows = showEntries.map(([show]) => show);
1056
- const loadingIndicator = html `
1057
- <span slot="empty-options">
1058
- <img src="https://archive.org/images/loading.gif" />
1059
- </span>
1056
+ const loadingIndicator = html `
1057
+ <span slot="empty-options">
1058
+ <img src="https://archive.org/images/loading.gif" />
1059
+ </span>
1060
1060
  `;
1061
- const errorMessage = html `
1062
- <span slot="empty-options">
1063
- ${msg('Unable to fetch options, try again later')}
1064
- </span>
1061
+ const errorMessage = html `
1062
+ <span slot="empty-options">
1063
+ ${msg('Unable to fetch options, try again later')}
1064
+ </span>
1065
1065
  `;
1066
- return html `
1067
- <div id="tv-filters" slot="facets-top">
1068
- <ia-combo-box
1069
- id="tv-networks"
1070
- class="tv-filter-dropdown"
1071
- placeholder=${filterByNetworkLabel}
1072
- clearable
1073
- wrap-arrow-keys
1074
- sort
1075
- .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1076
- @toggle=${this.tvDropdownToggled}
1077
- @change=${this.networksDropdownChanged}
1078
- >
1079
- <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1080
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1081
- ${this.tvMapsErrored ? errorMessage : nothing}
1082
- </ia-combo-box>
1083
- <ia-combo-box
1084
- id="tv-shows"
1085
- class="tv-filter-dropdown"
1086
- placeholder=${filterByShowLabel}
1087
- max-autocomplete-entries="500"
1088
- clearable
1089
- wrap-arrow-keys
1090
- sort
1091
- .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1092
- @toggle=${this.tvDropdownToggled}
1093
- @change=${this.showsDropdownChanged}
1094
- >
1095
- <span slot="label" class="sr-only">${filterByShowLabel}</span>
1096
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1097
- ${this.tvMapsErrored ? errorMessage : nothing}
1098
- </ia-combo-box>
1099
- </div>
1066
+ return html `
1067
+ <div id="tv-filters" slot="facets-top">
1068
+ <ia-combo-box
1069
+ id="tv-networks"
1070
+ class="tv-filter-dropdown"
1071
+ placeholder=${filterByNetworkLabel}
1072
+ clearable
1073
+ wrap-arrow-keys
1074
+ sort
1075
+ .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1076
+ @toggle=${this.tvDropdownToggled}
1077
+ @change=${this.networksDropdownChanged}
1078
+ >
1079
+ <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1080
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1081
+ ${this.tvMapsErrored ? errorMessage : nothing}
1082
+ </ia-combo-box>
1083
+ <ia-combo-box
1084
+ id="tv-shows"
1085
+ class="tv-filter-dropdown"
1086
+ placeholder=${filterByShowLabel}
1087
+ max-autocomplete-entries="500"
1088
+ clearable
1089
+ wrap-arrow-keys
1090
+ sort
1091
+ .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1092
+ @toggle=${this.tvDropdownToggled}
1093
+ @change=${this.showsDropdownChanged}
1094
+ >
1095
+ <span slot="label" class="sr-only">${filterByShowLabel}</span>
1096
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1097
+ ${this.tvMapsErrored ? errorMessage : nothing}
1098
+ </ia-combo-box>
1099
+ </div>
1100
1100
  `;
1101
1101
  }
1102
1102
  /**
@@ -1106,10 +1106,10 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1106
1106
  if (FACETLESS_PAGE_ELEMENTS.includes(this.profileElement))
1107
1107
  return nothing;
1108
1108
  if (this.facetLoadStrategy === 'off') {
1109
- return html `
1110
- <p class="facets-message">
1111
- ${msg('Facets are temporarily unavailable.')}
1112
- </p>
1109
+ return html `
1110
+ <p class="facets-message">
1111
+ ${msg('Facets are temporarily unavailable.')}
1112
+ </p>
1113
1113
  `;
1114
1114
  }
1115
1115
  // We switch to TV facet ordering & date picker if we are in a TV collection or showing TV search results
@@ -1118,46 +1118,46 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1118
1118
  const facetDisplayOrder = shouldUseTvInterface
1119
1119
  ? tvFacetDisplayOrder
1120
1120
  : defaultFacetDisplayOrder;
1121
- const facets = html `
1122
- <collection-facets
1123
- .collectionPagePath=${this.collectionPagePath}
1124
- .parentCollections=${this.dataSource.parentCollections}
1125
- .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1126
- .searchService=${this.searchService}
1127
- .featureFeedbackService=${this.featureFeedbackService}
1128
- .recaptchaManager=${this.recaptchaManager}
1129
- .resizeObserver=${this.resizeObserver}
1130
- .searchType=${this.searchType}
1131
- .aggregations=${this.dataSource.aggregations}
1132
- .histogramAggregation=${this.dataSource.histogramAggregation}
1133
- .minSelectedDate=${this.minSelectedDate}
1134
- .maxSelectedDate=${this.maxSelectedDate}
1135
- .selectedFacets=${this.selectedFacets}
1136
- .baseNavigationUrl=${this.baseNavigationUrl}
1137
- .collectionTitles=${this.dataSource.collectionTitles}
1138
- .tvChannelAliases=${this.dataSource.tvChannelAliases}
1139
- .showHistogramDatePicker=${this.showHistogramDatePicker}
1140
- .allowExpandingDatePicker=${!this.mobileView}
1141
- .allowDatePickerMonths=${shouldUseTvInterface}
1142
- .contentWidth=${this.contentWidth}
1143
- .query=${this.baseQuery}
1144
- .identifiers=${this.identifiers}
1145
- .filterMap=${this.dataSource.filterMap}
1146
- .isManageView=${this.isManageView}
1147
- .modalManager=${this.modalManager}
1148
- .analyticsHandler=${this.analyticsHandler}
1149
- .facetDisplayOrder=${facetDisplayOrder}
1150
- .isTvSearch=${shouldUseTvInterface}
1151
- ?collapsableFacets=${this.mobileView}
1152
- ?facetsLoading=${this.facetsLoading}
1153
- ?histogramAggregationLoading=${this.facetsLoading}
1154
- ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1155
- @facetClick=${this.facetClickHandler}
1156
- @facetsChanged=${this.facetsChanged}
1157
- @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1158
- >
1159
- ${this.tvDropdownFiltersTemplate}
1160
- </collection-facets>
1121
+ const facets = html `
1122
+ <collection-facets
1123
+ .collectionPagePath=${this.collectionPagePath}
1124
+ .parentCollections=${this.dataSource.parentCollections}
1125
+ .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1126
+ .searchService=${this.searchService}
1127
+ .featureFeedbackService=${this.featureFeedbackService}
1128
+ .recaptchaManager=${this.recaptchaManager}
1129
+ .resizeObserver=${this.resizeObserver}
1130
+ .searchType=${this.searchType}
1131
+ .aggregations=${this.dataSource.aggregations}
1132
+ .histogramAggregation=${this.dataSource.histogramAggregation}
1133
+ .minSelectedDate=${this.minSelectedDate}
1134
+ .maxSelectedDate=${this.maxSelectedDate}
1135
+ .selectedFacets=${this.selectedFacets}
1136
+ .baseNavigationUrl=${this.baseNavigationUrl}
1137
+ .collectionTitles=${this.dataSource.collectionTitles}
1138
+ .tvChannelAliases=${this.dataSource.tvChannelAliases}
1139
+ .showHistogramDatePicker=${this.showHistogramDatePicker}
1140
+ .allowExpandingDatePicker=${!this.mobileView}
1141
+ .allowDatePickerMonths=${shouldUseTvInterface}
1142
+ .contentWidth=${this.contentWidth}
1143
+ .query=${this.baseQuery}
1144
+ .identifiers=${this.identifiers}
1145
+ .filterMap=${this.dataSource.filterMap}
1146
+ .isManageView=${this.isManageView}
1147
+ .modalManager=${this.modalManager}
1148
+ .analyticsHandler=${this.analyticsHandler}
1149
+ .facetDisplayOrder=${facetDisplayOrder}
1150
+ .isTvSearch=${shouldUseTvInterface}
1151
+ ?collapsableFacets=${this.mobileView}
1152
+ ?facetsLoading=${this.facetsLoading}
1153
+ ?histogramAggregationLoading=${this.facetsLoading}
1154
+ ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1155
+ @facetClick=${this.facetClickHandler}
1156
+ @facetsChanged=${this.facetsChanged}
1157
+ @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1158
+ >
1159
+ ${this.tvDropdownFiltersTemplate}
1160
+ </collection-facets>
1161
1161
  `;
1162
1162
  // If we are using one of the opt-in facet load strategies, we may need to wrap the
1163
1163
  // desktop view facets in a <details> widget so that patrons can opt into loading them.
@@ -1165,20 +1165,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1165
1165
  const showDesktopOptInWidget = this.facetLoadStrategy === 'opt-in' ||
1166
1166
  (this.facetLoadStrategy === 'opt-in-or-login' && !this.loggedIn);
1167
1167
  if (showDesktopOptInWidget && !this.mobileView) {
1168
- return html `
1169
- <details
1170
- class="desktop-facets-dropdown"
1168
+ return html `
1169
+ <details
1170
+ class="desktop-facets-dropdown"
1171
1171
  @toggle=${(e) => {
1172
1172
  const target = e.target;
1173
1173
  this.collapsibleFacetsVisible = target.open;
1174
- }}
1175
- >
1176
- <summary>
1177
- <span class="collapser-icon">${chevronIcon}</span>
1178
- <h2>${msg('Filters')}</h2>
1179
- </summary>
1180
- ${facets}
1181
- </details>
1174
+ }}
1175
+ >
1176
+ <summary>
1177
+ <span class="collapser-icon">${chevronIcon}</span>
1178
+ <h2>${msg('Filters')}</h2>
1179
+ </summary>
1180
+ ${facets}
1181
+ </details>
1182
1182
  `;
1183
1183
  }
1184
1184
  // Otherwise, just render the facets component bare
@@ -1198,34 +1198,34 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1198
1198
  mobile,
1199
1199
  });
1200
1200
  const buttonText = mobile ? 'Clear all' : 'Clear all filters';
1201
- return html `
1202
- <div class="clear-filters-btn-row">
1201
+ return html `
1202
+ <div class="clear-filters-btn-row">
1203
1203
  ${mobile
1204
1204
  ? html `<span class="clear-filters-btn-separator">&nbsp;</span>`
1205
- : nothing}
1206
- <button class=${buttonClasses} @click=${this.clearFilters}>
1207
- ${buttonText}
1208
- </button>
1209
- </div>
1205
+ : nothing}
1206
+ <button class=${buttonClasses} @click=${this.clearFilters}>
1207
+ ${buttonText}
1208
+ </button>
1209
+ </div>
1210
1210
  `;
1211
1211
  }
1212
1212
  /**
1213
1213
  * Template for the table header content that appears atop the compact list view.
1214
1214
  */
1215
1215
  get listHeaderTemplate() {
1216
- return html `
1217
- <div id="list-header">
1218
- <tile-dispatcher
1219
- .tileDisplayMode=${'list-header'}
1220
- .resizeObserver=${this.resizeObserver}
1221
- .sortParam=${this.sortParam}
1222
- .defaultSortParam=${this.defaultSortParam}
1223
- .mobileBreakpoint=${this.mobileBreakpoint}
1224
- .loggedIn=${this.loggedIn}
1225
- .suppressBlurring=${this.shouldSuppressTileBlurring}
1226
- >
1227
- </tile-dispatcher>
1228
- </div>
1216
+ return html `
1217
+ <div id="list-header">
1218
+ <tile-dispatcher
1219
+ .tileDisplayMode=${'list-header'}
1220
+ .resizeObserver=${this.resizeObserver}
1221
+ .sortParam=${this.sortParam}
1222
+ .defaultSortParam=${this.defaultSortParam}
1223
+ .mobileBreakpoint=${this.mobileBreakpoint}
1224
+ .loggedIn=${this.loggedIn}
1225
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
1226
+ >
1227
+ </tile-dispatcher>
1228
+ </div>
1229
1229
  `;
1230
1230
  }
1231
1231
  /**
@@ -1975,28 +1975,28 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1975
1975
  const isRadioSearch = this.searchType === SearchType.RADIO;
1976
1976
  const { isTVCollection, isRadioCollection } = this;
1977
1977
  const shouldUseLocalTime = isTVSearch || isRadioSearch || isTVCollection || isRadioCollection;
1978
- return html `
1979
- <tile-dispatcher
1980
- .collectionPagePath=${this.collectionPagePath}
1981
- .baseNavigationUrl=${this.baseNavigationUrl}
1982
- .baseImageUrl=${this.baseImageUrl}
1983
- .model=${model}
1984
- .tileDisplayMode=${this.displayMode}
1985
- .resizeObserver=${this.resizeObserver}
1986
- .collectionTitles=${this.dataSource.collectionTitles}
1987
- .sortParam=${this.sortParam}
1988
- .defaultSortParam=${this.defaultSortParam}
1989
- .creatorFilter=${this.selectedCreatorFilter}
1990
- .mobileBreakpoint=${this.mobileBreakpoint}
1991
- .loggedIn=${this.loggedIn}
1992
- .suppressBlurring=${this.shouldSuppressTileBlurring}
1993
- .isManageView=${this.isManageView}
1994
- ?showTvClips=${isTVSearch || isTVCollection}
1995
- ?enableHoverPane=${true}
1996
- ?useLocalTime=${shouldUseLocalTime}
1997
- @resultSelected=${(e) => this.resultSelected(e)}
1998
- >
1999
- </tile-dispatcher>
1978
+ return html `
1979
+ <tile-dispatcher
1980
+ .collectionPagePath=${this.collectionPagePath}
1981
+ .baseNavigationUrl=${this.baseNavigationUrl}
1982
+ .baseImageUrl=${this.baseImageUrl}
1983
+ .model=${model}
1984
+ .tileDisplayMode=${this.displayMode}
1985
+ .resizeObserver=${this.resizeObserver}
1986
+ .collectionTitles=${this.dataSource.collectionTitles}
1987
+ .sortParam=${this.sortParam}
1988
+ .defaultSortParam=${this.defaultSortParam}
1989
+ .creatorFilter=${this.selectedCreatorFilter}
1990
+ .mobileBreakpoint=${this.mobileBreakpoint}
1991
+ .loggedIn=${this.loggedIn}
1992
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
1993
+ .isManageView=${this.isManageView}
1994
+ ?showTvClips=${isTVSearch || isTVCollection}
1995
+ ?enableHoverPane=${true}
1996
+ ?useLocalTime=${shouldUseLocalTime}
1997
+ @resultSelected=${(e) => this.resultSelected(e)}
1998
+ >
1999
+ </tile-dispatcher>
2000
2000
  `;
2001
2001
  }
2002
2002
  /**
@@ -2031,479 +2031,479 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
2031
2031
  static get styles() {
2032
2032
  return [
2033
2033
  srOnlyStyle,
2034
- css `
2035
- :host {
2036
- display: block;
2037
- --leftColumnWidth: 18rem;
2038
- --leftColumnPaddingTop: 2rem;
2039
- --leftColumnPaddingRight: 2.5rem;
2040
- }
2041
-
2042
- #facet-top-view {
2043
- display: flex;
2044
- }
2045
-
2046
- /**
2047
- * When page width resizes from desktop to mobile, use this class to
2048
- * disable expand/collapse transition when loading.
2049
- */
2050
- .preload * {
2051
- transition: none !important;
2052
- -webkit-transition: none !important;
2053
- -moz-transition: none !important;
2054
- -ms-transition: none !important;
2055
- -o-transition: none !important;
2056
- }
2057
-
2058
- #content-container {
2059
- display: flex;
2060
- }
2061
-
2062
- empty-placeholder {
2063
- margin-top: var(--placeholderMarginTop, 0);
2064
- }
2065
-
2066
- .collapser-icon {
2067
- display: inline-block;
2068
- }
2069
-
2070
- .collapser-icon svg {
2071
- display: inline-block;
2072
- width: 12px;
2073
- height: 12px;
2074
- transition: transform 0.2s ease-out;
2075
- }
2076
-
2077
- #mobile-filter-collapse {
2078
- width: 100%;
2079
- }
2080
-
2081
- #mobile-filter-collapse > summary {
2082
- cursor: pointer;
2083
- list-style: none;
2084
- }
2085
-
2086
- #mobile-filter-collapse[open] > summary {
2087
- margin-bottom: 10px;
2088
- }
2089
-
2090
- #mobile-filter-collapse h2 {
2091
- display: inline-block;
2092
- margin: 0;
2093
- font-size: 2rem;
2094
- }
2095
-
2096
- #mobile-filter-collapse[open] svg {
2097
- transform: rotate(90deg);
2098
- }
2099
-
2100
- #content-container.mobile {
2101
- display: block;
2102
- }
2103
-
2104
- #right-column {
2105
- flex: 1;
2106
- position: relative;
2107
- min-height: 90vh;
2108
- border-right: 1px solid rgb(232, 232, 232);
2109
- margin-top: var(--rightColumnMarginTop, 0);
2110
- padding-top: var(--rightColumnPaddingTop, 2rem);
2111
- background: #fff;
2112
- }
2113
-
2114
- #left-column:not([hidden]) + #right-column {
2115
- border-left: 1px solid rgb(232, 232, 232);
2116
- }
2117
-
2118
- #right-column.smart-results-spacing {
2119
- padding-top: 0.5rem;
2120
- border-right: none;
2121
- background: transparent;
2122
- min-width: 0;
2123
- }
2124
-
2125
- #results {
2126
- background: #fff;
2127
- padding-left: 1rem;
2128
- padding-right: 1rem;
2129
- }
2130
-
2131
- #right-column.smart-results-spacing #results {
2132
- border-radius: 10px 10px 0px 0px;
2133
- padding-top: 0.5rem;
2134
- margin-top: 1rem;
2135
- }
2136
-
2137
- .mobile #right-column {
2138
- border-left: none;
2139
- }
2140
-
2141
- .mobile #results {
2142
- padding: 5px 5px 0;
2143
- }
2144
-
2145
- #left-column {
2146
- width: var(--leftColumnWidth, 18rem);
2147
- /* Prevents Safari from shrinking col at first draw */
2148
- min-width: var(--leftColumnWidth, 18rem);
2149
- padding-top: var(--leftColumnPaddingTop, 2rem);
2150
- /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2151
- padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2152
- border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2153
- z-index: 1;
2154
- }
2155
-
2156
- .desktop #left-column {
2157
- top: 0;
2158
- position: sticky;
2159
- height: calc(100vh - 2rem);
2160
- max-height: calc(100vh - 2rem);
2161
- overflow-x: hidden;
2162
- overflow-y: scroll;
2163
-
2164
- /*
2165
- * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2166
- * does at least give us a tiny bit of control over width & color.
2167
- */
2168
- scrollbar-width: thin;
2169
- scrollbar-color: transparent transparent;
2170
- }
2171
- .desktop #left-column:hover {
2172
- scrollbar-color: auto;
2173
- }
2174
- .desktop #left-column::-webkit-scrollbar {
2175
- appearance: none;
2176
- width: 6px;
2177
- }
2178
- .desktop #left-column::-webkit-scrollbar-button {
2179
- height: 3px;
2180
- background: transparent;
2181
- }
2182
- .desktop #left-column::-webkit-scrollbar-corner {
2183
- background: transparent;
2184
- }
2185
- .desktop #left-column::-webkit-scrollbar-thumb {
2186
- border-radius: 4px;
2187
- }
2188
- .desktop #left-column:hover::-webkit-scrollbar-thumb {
2189
- background: rgba(0, 0, 0, 0.15);
2190
- }
2191
- .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2192
- background: rgba(0, 0, 0, 0.2);
2193
- }
2194
- .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2195
- background: rgba(0, 0, 0, 0.3);
2196
- }
2197
-
2198
- #facets-bottom-fade {
2199
- background: linear-gradient(
2200
- to bottom,
2201
- #fbfbfd00 0%,
2202
- #fbfbfdc0 50%,
2203
- #fbfbfd 80%,
2204
- #fbfbfd 100%
2205
- );
2206
- position: fixed;
2207
- bottom: 0;
2208
- height: 50px;
2209
- /* Wide enough to cover the content, but leave the scrollbar uncovered */
2210
- width: calc(
2211
- var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2212
- );
2213
- z-index: 2;
2214
- pointer-events: none;
2215
- transition: height 0.1s ease;
2216
- }
2217
- #facets-bottom-fade.hidden {
2218
- height: 0;
2219
- }
2220
-
2221
- .facets-message {
2222
- font-size: 1.4rem;
2223
- }
2224
-
2225
- .desktop-facets-dropdown > summary {
2226
- cursor: pointer;
2227
- list-style: none;
2228
- }
2229
-
2230
- .desktop-facets-dropdown h2 {
2231
- display: inline-block;
2232
- margin: 0;
2233
- font-size: 1.6rem;
2234
- }
2235
-
2236
- .desktop-facets-dropdown[open] > summary {
2237
- margin-bottom: 10px;
2238
- }
2239
-
2240
- .desktop-facets-dropdown[open] svg {
2241
- transform: rotate(90deg);
2242
- }
2243
-
2244
- .desktop #left-column-scroll-sentinel {
2245
- width: 1px;
2246
- height: 100vh;
2247
- background: transparent;
2248
- }
2249
-
2250
- .desktop #facets-scroll-sentinel {
2251
- width: 1px;
2252
- height: 1px;
2253
- background: transparent;
2254
- }
2255
-
2256
- #facets-header-container {
2257
- display: flex;
2258
- justify-content: space-between;
2259
- align-items: flex-start;
2260
- clear: both;
2261
- }
2262
-
2263
- .desktop #facets-header-container {
2264
- flex-wrap: wrap;
2265
- }
2266
-
2267
- .mobile #left-column {
2268
- width: 100%;
2269
- min-width: 0;
2270
- padding: 5px 0;
2271
- border: 0;
2272
- }
2273
-
2274
- .clear-filters-btn-row {
2275
- display: inline-block;
2276
- }
2277
-
2278
- .desktop .clear-filters-btn-row {
2279
- width: 100%;
2280
- }
2281
-
2282
- .clear-filters-btn {
2283
- display: inline-block;
2284
- appearance: none;
2285
- margin: 0;
2286
- padding: 0;
2287
- border: 0;
2288
- background: none;
2289
- color: var(--ia-theme-link-color);
2290
- font-size: 1.4rem;
2291
- font-family: inherit;
2292
- cursor: pointer;
2293
- }
2294
-
2295
- .clear-filters-btn:hover {
2296
- text-decoration: underline;
2297
- }
2298
-
2299
- .clear-filters-btn-separator {
2300
- display: inline-block;
2301
- margin-left: 5px;
2302
- border-left: 1px solid #2c2c2c;
2303
- font-size: 1.4rem;
2304
- line-height: 1.3rem;
2305
- }
2306
-
2307
- #tv-filters {
2308
- margin-bottom: 15px;
2309
- }
2310
-
2311
- #tv-shows {
2312
- --comboBoxListWidth: 300px;
2313
- }
2314
-
2315
- .tv-filter-dropdown {
2316
- display: block;
2317
- font-size: 14px;
2318
- margin-left: 1px;
2319
- margin-bottom: 5px;
2320
- }
2321
-
2322
- .tv-filter-dropdown::part(combo-box) {
2323
- outline-offset: 1px;
2324
- }
2325
-
2326
- .tv-filter-dropdown::part(option) {
2327
- line-height: 1.1;
2328
- padding: 7px;
2329
- }
2330
-
2331
- .tv-filter-dropdown::part(clear-button) {
2332
- flex: 0 0 26px;
2333
- --combo-box-clear-icon-size: 14px;
2334
- }
2335
-
2336
- .tv-filter-dropdown::part(icon) {
2337
- width: 1.4rem;
2338
- height: 1.4rem;
2339
- }
2340
-
2341
- #facets-container {
2342
- position: relative;
2343
- max-height: 0;
2344
- transition: max-height 0.2s ease-in-out;
2345
- z-index: 1;
2346
- margin-top: var(--facetsContainerMarginTop, 3rem);
2347
- padding-bottom: 2rem;
2348
- }
2349
-
2350
- .desktop #facets-container {
2351
- width: 18rem;
2352
- }
2353
-
2354
- .mobile #facets-container {
2355
- overflow: hidden;
2356
- padding-bottom: 0;
2357
- padding-left: 10px;
2358
- padding-right: 10px;
2359
- }
2360
-
2361
- #facets-container.expanded {
2362
- max-height: 2000px;
2363
- }
2364
-
2365
- .results-section-heading {
2366
- margin: 0.5rem 0.3rem;
2367
- font-size: 2rem;
2368
- line-height: 25px;
2369
- }
2370
-
2371
- #results-total {
2372
- display: flex;
2373
- align-items: baseline;
2374
- }
2375
-
2376
- #results-total:not(.filtered) {
2377
- padding-bottom: 2rem;
2378
- }
2379
-
2380
- .mobile #results-total {
2381
- position: absolute;
2382
- right: 10px;
2383
- }
2384
-
2385
- #big-results-count {
2386
- font-size: 2.4rem;
2387
- font-weight: 500;
2388
- margin-right: 5px;
2389
- }
2390
-
2391
- .mobile #big-results-count {
2392
- font-size: 2rem;
2393
- }
2394
-
2395
- #big-results-label {
2396
- font-size: 1.4rem;
2397
- font-weight: 200;
2398
- }
2399
-
2400
- #list-header {
2401
- max-height: 4.2rem;
2402
- }
2403
-
2404
- .loading-cover {
2405
- position: absolute;
2406
- top: 0;
2407
- left: 0;
2408
- width: 100%;
2409
- height: 100%;
2410
- display: flex;
2411
- justify-content: center;
2412
- z-index: 1;
2413
- padding-top: 50px;
2414
- }
2415
-
2416
- #tile-blur-label {
2417
- display: flex;
2418
- align-items: center;
2419
- column-gap: 5px;
2420
- }
2421
-
2422
- #tile-blur-check {
2423
- margin: 0 5px 0 0;
2424
- width: 15px;
2425
- }
2426
-
2427
- circular-activity-indicator {
2428
- width: 30px;
2429
- height: 30px;
2430
- }
2431
-
2432
- sort-filter-bar {
2433
- display: block;
2434
- margin-bottom: 4rem;
2435
- }
2436
-
2437
- infinite-scroller {
2438
- display: block;
2439
- --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2440
- --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2441
- }
2442
-
2443
- infinite-scroller.list-compact {
2444
- --infiniteScrollerCellMinWidth: var(
2445
- --collectionBrowserCellMinWidth,
2446
- 100%
2447
- );
2448
- --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2449
- --infiniteScrollerCellMaxHeight: 56px;
2450
- --infiniteScrollerRowGap: 10px;
2451
- }
2452
-
2453
- infinite-scroller.list-detail {
2454
- --infiniteScrollerCellMinWidth: var(
2455
- --collectionBrowserCellMinWidth,
2456
- 100%
2457
- );
2458
- --infiniteScrollerCellMinHeight: var(
2459
- --collectionBrowserCellMinHeight,
2460
- 5rem
2461
- );
2462
- /*
2463
- 30px in spec, compensating for a -4px margin
2464
- to align title with top of item image
2465
- src/tiles/list/tile-list.ts
2466
- */
2467
- --infiniteScrollerRowGap: 34px;
2468
- }
2469
-
2470
- .mobile infinite-scroller.list-detail {
2471
- --infiniteScrollerRowGap: 24px;
2472
- }
2473
-
2474
- infinite-scroller.grid {
2475
- --infiniteScrollerCellMinWidth: var(
2476
- --collectionBrowserCellMinWidth,
2477
- 17rem
2478
- );
2479
- --infiniteScrollerCellMaxWidth: var(
2480
- --collectionBrowserCellMaxWidth,
2481
- 1fr
2482
- );
2483
- }
2484
-
2485
- /* Allow tiles to shrink a bit further at smaller viewport widths */
2486
- @media screen and (max-width: 880px) {
2487
- infinite-scroller.grid {
2488
- --infiniteScrollerCellMinWidth: var(
2489
- --collectionBrowserCellMinWidth,
2490
- 15rem
2491
- );
2492
- }
2493
- }
2494
- /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2495
- @media screen and (max-width: 360px) {
2496
- infinite-scroller.grid {
2497
- --infiniteScrollerCellMinWidth: var(
2498
- --collectionBrowserCellMinWidth,
2499
- 12rem
2500
- );
2501
- }
2502
- }
2503
-
2504
- infinite-scroller.hidden {
2505
- display: none;
2506
- }
2034
+ css `
2035
+ :host {
2036
+ display: block;
2037
+ --leftColumnWidth: 18rem;
2038
+ --leftColumnPaddingTop: 2rem;
2039
+ --leftColumnPaddingRight: 2.5rem;
2040
+ }
2041
+
2042
+ #facet-top-view {
2043
+ display: flex;
2044
+ }
2045
+
2046
+ /**
2047
+ * When page width resizes from desktop to mobile, use this class to
2048
+ * disable expand/collapse transition when loading.
2049
+ */
2050
+ .preload * {
2051
+ transition: none !important;
2052
+ -webkit-transition: none !important;
2053
+ -moz-transition: none !important;
2054
+ -ms-transition: none !important;
2055
+ -o-transition: none !important;
2056
+ }
2057
+
2058
+ #content-container {
2059
+ display: flex;
2060
+ }
2061
+
2062
+ empty-placeholder {
2063
+ margin-top: var(--placeholderMarginTop, 0);
2064
+ }
2065
+
2066
+ .collapser-icon {
2067
+ display: inline-block;
2068
+ }
2069
+
2070
+ .collapser-icon svg {
2071
+ display: inline-block;
2072
+ width: 12px;
2073
+ height: 12px;
2074
+ transition: transform 0.2s ease-out;
2075
+ }
2076
+
2077
+ #mobile-filter-collapse {
2078
+ width: 100%;
2079
+ }
2080
+
2081
+ #mobile-filter-collapse > summary {
2082
+ cursor: pointer;
2083
+ list-style: none;
2084
+ }
2085
+
2086
+ #mobile-filter-collapse[open] > summary {
2087
+ margin-bottom: 10px;
2088
+ }
2089
+
2090
+ #mobile-filter-collapse h2 {
2091
+ display: inline-block;
2092
+ margin: 0;
2093
+ font-size: 2rem;
2094
+ }
2095
+
2096
+ #mobile-filter-collapse[open] svg {
2097
+ transform: rotate(90deg);
2098
+ }
2099
+
2100
+ #content-container.mobile {
2101
+ display: block;
2102
+ }
2103
+
2104
+ #right-column {
2105
+ flex: 1;
2106
+ position: relative;
2107
+ min-height: 90vh;
2108
+ border-right: 1px solid rgb(232, 232, 232);
2109
+ margin-top: var(--rightColumnMarginTop, 0);
2110
+ padding-top: var(--rightColumnPaddingTop, 2rem);
2111
+ background: #fff;
2112
+ }
2113
+
2114
+ #left-column:not([hidden]) + #right-column {
2115
+ border-left: 1px solid rgb(232, 232, 232);
2116
+ }
2117
+
2118
+ #right-column.smart-results-spacing {
2119
+ padding-top: 0.5rem;
2120
+ border-right: none;
2121
+ background: transparent;
2122
+ min-width: 0;
2123
+ }
2124
+
2125
+ #results {
2126
+ background: #fff;
2127
+ padding-left: 1rem;
2128
+ padding-right: 1rem;
2129
+ }
2130
+
2131
+ #right-column.smart-results-spacing #results {
2132
+ border-radius: 10px 10px 0px 0px;
2133
+ padding-top: 0.5rem;
2134
+ margin-top: 1rem;
2135
+ }
2136
+
2137
+ .mobile #right-column {
2138
+ border-left: none;
2139
+ }
2140
+
2141
+ .mobile #results {
2142
+ padding: 5px 5px 0;
2143
+ }
2144
+
2145
+ #left-column {
2146
+ width: var(--leftColumnWidth, 18rem);
2147
+ /* Prevents Safari from shrinking col at first draw */
2148
+ min-width: var(--leftColumnWidth, 18rem);
2149
+ padding-top: var(--leftColumnPaddingTop, 2rem);
2150
+ /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2151
+ padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2152
+ border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2153
+ z-index: 1;
2154
+ }
2155
+
2156
+ .desktop #left-column {
2157
+ top: 0;
2158
+ position: sticky;
2159
+ height: calc(100vh - 2rem);
2160
+ max-height: calc(100vh - 2rem);
2161
+ overflow-x: hidden;
2162
+ overflow-y: scroll;
2163
+
2164
+ /*
2165
+ * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2166
+ * does at least give us a tiny bit of control over width & color.
2167
+ */
2168
+ scrollbar-width: thin;
2169
+ scrollbar-color: transparent transparent;
2170
+ }
2171
+ .desktop #left-column:hover {
2172
+ scrollbar-color: auto;
2173
+ }
2174
+ .desktop #left-column::-webkit-scrollbar {
2175
+ appearance: none;
2176
+ width: 6px;
2177
+ }
2178
+ .desktop #left-column::-webkit-scrollbar-button {
2179
+ height: 3px;
2180
+ background: transparent;
2181
+ }
2182
+ .desktop #left-column::-webkit-scrollbar-corner {
2183
+ background: transparent;
2184
+ }
2185
+ .desktop #left-column::-webkit-scrollbar-thumb {
2186
+ border-radius: 4px;
2187
+ }
2188
+ .desktop #left-column:hover::-webkit-scrollbar-thumb {
2189
+ background: rgba(0, 0, 0, 0.15);
2190
+ }
2191
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2192
+ background: rgba(0, 0, 0, 0.2);
2193
+ }
2194
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2195
+ background: rgba(0, 0, 0, 0.3);
2196
+ }
2197
+
2198
+ #facets-bottom-fade {
2199
+ background: linear-gradient(
2200
+ to bottom,
2201
+ #fbfbfd00 0%,
2202
+ #fbfbfdc0 50%,
2203
+ #fbfbfd 80%,
2204
+ #fbfbfd 100%
2205
+ );
2206
+ position: fixed;
2207
+ bottom: 0;
2208
+ height: 50px;
2209
+ /* Wide enough to cover the content, but leave the scrollbar uncovered */
2210
+ width: calc(
2211
+ var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2212
+ );
2213
+ z-index: 2;
2214
+ pointer-events: none;
2215
+ transition: height 0.1s ease;
2216
+ }
2217
+ #facets-bottom-fade.hidden {
2218
+ height: 0;
2219
+ }
2220
+
2221
+ .facets-message {
2222
+ font-size: 1.4rem;
2223
+ }
2224
+
2225
+ .desktop-facets-dropdown > summary {
2226
+ cursor: pointer;
2227
+ list-style: none;
2228
+ }
2229
+
2230
+ .desktop-facets-dropdown h2 {
2231
+ display: inline-block;
2232
+ margin: 0;
2233
+ font-size: 1.6rem;
2234
+ }
2235
+
2236
+ .desktop-facets-dropdown[open] > summary {
2237
+ margin-bottom: 10px;
2238
+ }
2239
+
2240
+ .desktop-facets-dropdown[open] svg {
2241
+ transform: rotate(90deg);
2242
+ }
2243
+
2244
+ .desktop #left-column-scroll-sentinel {
2245
+ width: 1px;
2246
+ height: 100vh;
2247
+ background: transparent;
2248
+ }
2249
+
2250
+ .desktop #facets-scroll-sentinel {
2251
+ width: 1px;
2252
+ height: 1px;
2253
+ background: transparent;
2254
+ }
2255
+
2256
+ #facets-header-container {
2257
+ display: flex;
2258
+ justify-content: space-between;
2259
+ align-items: flex-start;
2260
+ clear: both;
2261
+ }
2262
+
2263
+ .desktop #facets-header-container {
2264
+ flex-wrap: wrap;
2265
+ }
2266
+
2267
+ .mobile #left-column {
2268
+ width: 100%;
2269
+ min-width: 0;
2270
+ padding: 5px 0;
2271
+ border: 0;
2272
+ }
2273
+
2274
+ .clear-filters-btn-row {
2275
+ display: inline-block;
2276
+ }
2277
+
2278
+ .desktop .clear-filters-btn-row {
2279
+ width: 100%;
2280
+ }
2281
+
2282
+ .clear-filters-btn {
2283
+ display: inline-block;
2284
+ appearance: none;
2285
+ margin: 0;
2286
+ padding: 0;
2287
+ border: 0;
2288
+ background: none;
2289
+ color: var(--ia-theme-link-color);
2290
+ font-size: 1.4rem;
2291
+ font-family: inherit;
2292
+ cursor: pointer;
2293
+ }
2294
+
2295
+ .clear-filters-btn:hover {
2296
+ text-decoration: underline;
2297
+ }
2298
+
2299
+ .clear-filters-btn-separator {
2300
+ display: inline-block;
2301
+ margin-left: 5px;
2302
+ border-left: 1px solid #2c2c2c;
2303
+ font-size: 1.4rem;
2304
+ line-height: 1.3rem;
2305
+ }
2306
+
2307
+ #tv-filters {
2308
+ margin-bottom: 15px;
2309
+ }
2310
+
2311
+ #tv-shows {
2312
+ --comboBoxListWidth: 300px;
2313
+ }
2314
+
2315
+ .tv-filter-dropdown {
2316
+ display: block;
2317
+ font-size: 14px;
2318
+ margin-left: 1px;
2319
+ margin-bottom: 5px;
2320
+ }
2321
+
2322
+ .tv-filter-dropdown::part(combo-box) {
2323
+ outline-offset: 1px;
2324
+ }
2325
+
2326
+ .tv-filter-dropdown::part(option) {
2327
+ line-height: 1.1;
2328
+ padding: 7px;
2329
+ }
2330
+
2331
+ .tv-filter-dropdown::part(clear-button) {
2332
+ flex: 0 0 26px;
2333
+ --combo-box-clear-icon-size: 14px;
2334
+ }
2335
+
2336
+ .tv-filter-dropdown::part(icon) {
2337
+ width: 1.4rem;
2338
+ height: 1.4rem;
2339
+ }
2340
+
2341
+ #facets-container {
2342
+ position: relative;
2343
+ max-height: 0;
2344
+ transition: max-height 0.2s ease-in-out;
2345
+ z-index: 1;
2346
+ margin-top: var(--facetsContainerMarginTop, 3rem);
2347
+ padding-bottom: 2rem;
2348
+ }
2349
+
2350
+ .desktop #facets-container {
2351
+ width: 18rem;
2352
+ }
2353
+
2354
+ .mobile #facets-container {
2355
+ overflow: hidden;
2356
+ padding-bottom: 0;
2357
+ padding-left: 10px;
2358
+ padding-right: 10px;
2359
+ }
2360
+
2361
+ #facets-container.expanded {
2362
+ max-height: 2000px;
2363
+ }
2364
+
2365
+ .results-section-heading {
2366
+ margin: 0.5rem 0.3rem;
2367
+ font-size: 2rem;
2368
+ line-height: 25px;
2369
+ }
2370
+
2371
+ #results-total {
2372
+ display: flex;
2373
+ align-items: baseline;
2374
+ }
2375
+
2376
+ #results-total:not(.filtered) {
2377
+ padding-bottom: 2rem;
2378
+ }
2379
+
2380
+ .mobile #results-total {
2381
+ position: absolute;
2382
+ right: 10px;
2383
+ }
2384
+
2385
+ #big-results-count {
2386
+ font-size: 2.4rem;
2387
+ font-weight: 500;
2388
+ margin-right: 5px;
2389
+ }
2390
+
2391
+ .mobile #big-results-count {
2392
+ font-size: 2rem;
2393
+ }
2394
+
2395
+ #big-results-label {
2396
+ font-size: 1.4rem;
2397
+ font-weight: 200;
2398
+ }
2399
+
2400
+ #list-header {
2401
+ max-height: 4.2rem;
2402
+ }
2403
+
2404
+ .loading-cover {
2405
+ position: absolute;
2406
+ top: 0;
2407
+ left: 0;
2408
+ width: 100%;
2409
+ height: 100%;
2410
+ display: flex;
2411
+ justify-content: center;
2412
+ z-index: 1;
2413
+ padding-top: 50px;
2414
+ }
2415
+
2416
+ #tile-blur-label {
2417
+ display: flex;
2418
+ align-items: center;
2419
+ column-gap: 5px;
2420
+ }
2421
+
2422
+ #tile-blur-check {
2423
+ margin: 0 5px 0 0;
2424
+ width: 15px;
2425
+ }
2426
+
2427
+ circular-activity-indicator {
2428
+ width: 30px;
2429
+ height: 30px;
2430
+ }
2431
+
2432
+ sort-filter-bar {
2433
+ display: block;
2434
+ margin-bottom: 4rem;
2435
+ }
2436
+
2437
+ infinite-scroller {
2438
+ display: block;
2439
+ --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2440
+ --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2441
+ }
2442
+
2443
+ infinite-scroller.list-compact {
2444
+ --infiniteScrollerCellMinWidth: var(
2445
+ --collectionBrowserCellMinWidth,
2446
+ 100%
2447
+ );
2448
+ --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2449
+ --infiniteScrollerCellMaxHeight: 56px;
2450
+ --infiniteScrollerRowGap: 10px;
2451
+ }
2452
+
2453
+ infinite-scroller.list-detail {
2454
+ --infiniteScrollerCellMinWidth: var(
2455
+ --collectionBrowserCellMinWidth,
2456
+ 100%
2457
+ );
2458
+ --infiniteScrollerCellMinHeight: var(
2459
+ --collectionBrowserCellMinHeight,
2460
+ 5rem
2461
+ );
2462
+ /*
2463
+ 30px in spec, compensating for a -4px margin
2464
+ to align title with top of item image
2465
+ src/tiles/list/tile-list.ts
2466
+ */
2467
+ --infiniteScrollerRowGap: 34px;
2468
+ }
2469
+
2470
+ .mobile infinite-scroller.list-detail {
2471
+ --infiniteScrollerRowGap: 24px;
2472
+ }
2473
+
2474
+ infinite-scroller.grid {
2475
+ --infiniteScrollerCellMinWidth: var(
2476
+ --collectionBrowserCellMinWidth,
2477
+ 17rem
2478
+ );
2479
+ --infiniteScrollerCellMaxWidth: var(
2480
+ --collectionBrowserCellMaxWidth,
2481
+ 1fr
2482
+ );
2483
+ }
2484
+
2485
+ /* Allow tiles to shrink a bit further at smaller viewport widths */
2486
+ @media screen and (max-width: 880px) {
2487
+ infinite-scroller.grid {
2488
+ --infiniteScrollerCellMinWidth: var(
2489
+ --collectionBrowserCellMinWidth,
2490
+ 15rem
2491
+ );
2492
+ }
2493
+ }
2494
+ /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2495
+ @media screen and (max-width: 360px) {
2496
+ infinite-scroller.grid {
2497
+ --infiniteScrollerCellMinWidth: var(
2498
+ --collectionBrowserCellMinWidth,
2499
+ 12rem
2500
+ );
2501
+ }
2502
+ }
2503
+
2504
+ infinite-scroller.hidden {
2505
+ display: none;
2506
+ }
2507
2507
  `,
2508
2508
  ];
2509
2509
  }