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