@internetarchive/collection-browser 4.3.1-alpha-webdev8257.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/src/app-root.d.ts +0 -8
  4. package/dist/src/app-root.js +672 -698
  5. package/dist/src/app-root.js.map +1 -1
  6. package/dist/src/collection-browser.d.ts +0 -8
  7. package/dist/src/collection-browser.js +762 -779
  8. package/dist/src/collection-browser.js.map +1 -1
  9. package/dist/src/tiles/base-tile-component.d.ts +1 -17
  10. package/dist/src/tiles/base-tile-component.js +1 -48
  11. package/dist/src/tiles/base-tile-component.js.map +1 -1
  12. package/dist/src/tiles/grid/item-tile.js +138 -139
  13. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  14. package/dist/src/tiles/list/tile-list-compact-header.js +46 -66
  15. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  16. package/dist/src/tiles/list/tile-list-compact.d.ts +1 -1
  17. package/dist/src/tiles/list/tile-list-compact.js +100 -132
  18. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  19. package/dist/src/tiles/list/tile-list.d.ts +1 -1
  20. package/dist/src/tiles/list/tile-list.js +298 -316
  21. package/dist/src/tiles/list/tile-list.js.map +1 -1
  22. package/dist/src/tiles/models.d.ts +0 -14
  23. package/dist/src/tiles/models.js.map +1 -1
  24. package/dist/src/tiles/tile-dispatcher.d.ts +0 -14
  25. package/dist/src/tiles/tile-dispatcher.js +216 -319
  26. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  27. package/index.ts +28 -29
  28. package/package.json +2 -2
  29. package/src/app-root.ts +1251 -1281
  30. package/src/collection-browser.ts +3049 -3063
  31. package/src/tiles/base-tile-component.ts +65 -121
  32. package/src/tiles/grid/item-tile.ts +346 -347
  33. package/src/tiles/list/tile-list-compact-header.ts +86 -106
  34. package/src/tiles/list/tile-list-compact.ts +239 -273
  35. package/src/tiles/list/tile-list.ts +700 -718
  36. package/src/tiles/models.ts +8 -24
  37. package/src/tiles/tile-dispatcher.ts +527 -637
  38. package/dist/src/styles/tile-action-styles.d.ts +0 -14
  39. package/dist/src/styles/tile-action-styles.js +0 -52
  40. package/dist/src/styles/tile-action-styles.js.map +0 -1
  41. package/src/styles/tile-action-styles.ts +0 -52
@@ -122,13 +122,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
122
122
  * If item management UI active
123
123
  */
124
124
  this.isManageView = false;
125
- /** Action buttons to display on each tile */
126
- this.tileActions = [];
127
- /**
128
- * The simplified layout to apply to grid-mode tiles, if any. See
129
- * `LayoutType` for available options. Has no effect on list display modes.
130
- */
131
- this.tileLayoutType = 'default';
132
125
  this.manageViewLabel = 'Select items to remove';
133
126
  /** Whether to replace the default sort options with a slot for customization (default: false) */
134
127
  this.enableSortOptionsSlot = false;
@@ -413,32 +406,32 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
413
406
  }
414
407
  }
415
408
  render() {
416
- return html `
409
+ return html `
417
410
  ${this.showSmartFacetBar && this.placeholderType === null
418
- ? html `<smart-facet-bar
419
- .query=${this.baseQuery}
420
- .aggregations=${this.dataSource.aggregations}
421
- .selectedFacets=${this.selectedFacets}
422
- .collectionTitles=${this.dataSource.collectionTitles}
423
- .filterToggleShown=${!this.mobileView}
424
- .filterToggleActive=${this.facetPaneVisible}
425
- .label=${this.smartFacetBarLabel}
426
- @facetsChanged=${this.facetsChanged}
411
+ ? html `<smart-facet-bar
412
+ .query=${this.baseQuery}
413
+ .aggregations=${this.dataSource.aggregations}
414
+ .selectedFacets=${this.selectedFacets}
415
+ .collectionTitles=${this.dataSource.collectionTitles}
416
+ .filterToggleShown=${!this.mobileView}
417
+ .filterToggleActive=${this.facetPaneVisible}
418
+ .label=${this.smartFacetBarLabel}
419
+ @facetsChanged=${this.facetsChanged}
427
420
  @filtersToggled=${() => {
428
421
  this.facetPaneVisible = !this.facetPaneVisible;
429
422
  this.emitFacetPaneVisibilityChanged();
430
- }}
423
+ }}
431
424
  ></smart-facet-bar>`
432
- : nothing}
433
-
434
- <div
435
- id="content-container"
436
- class=${this.mobileView ? 'mobile' : 'desktop'}
437
- >
425
+ : nothing}
426
+
427
+ <div
428
+ id="content-container"
429
+ class=${this.mobileView ? 'mobile' : 'desktop'}
430
+ >
438
431
  ${this.placeholderType
439
432
  ? this.emptyPlaceholderTemplate
440
- : this.collectionBrowserTemplate}
441
- </div>
433
+ : this.collectionBrowserTemplate}
434
+ </div>
442
435
  `;
443
436
  }
444
437
  /**
@@ -482,23 +475,23 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
482
475
  * Template for the placeholder content to show when no results are available.
483
476
  */
484
477
  get emptyPlaceholderTemplate() {
485
- return html `
486
- <empty-placeholder
487
- .placeholderType=${this.placeholderType}
488
- ?isMobileView=${this.mobileView}
489
- ?isCollection=${!!this.withinCollection}
490
- .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
491
- .baseNavigationUrl=${this.baseNavigationUrl}
492
- ></empty-placeholder>
478
+ return html `
479
+ <empty-placeholder
480
+ .placeholderType=${this.placeholderType}
481
+ ?isMobileView=${this.mobileView}
482
+ ?isCollection=${!!this.withinCollection}
483
+ .detailMessage=${this.dataSource.queryErrorMessage ?? ''}
484
+ .baseNavigationUrl=${this.baseNavigationUrl}
485
+ ></empty-placeholder>
493
486
  `;
494
487
  }
495
488
  /**
496
489
  * Top-level template for rendering the left (facets) and right (results) columns.
497
490
  */
498
491
  get collectionBrowserTemplate() {
499
- return html `
500
- <div id="left-column-scroll-sentinel"></div>
501
- ${this.leftColumnTemplate} ${this.rightColumnTemplate}
492
+ return html `
493
+ <div id="left-column-scroll-sentinel"></div>
494
+ ${this.leftColumnTemplate} ${this.rightColumnTemplate}
502
495
  `;
503
496
  }
504
497
  /**
@@ -517,33 +510,33 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
517
510
  * accordion-style facets.
518
511
  */
519
512
  get mobileLeftColumnTemplate() {
520
- return html `
521
- <div
522
- id="left-column"
523
- class="column${this.isResizeToMobile ? ' preload' : ''}"
524
- >
525
- ${this.facetTopViewSlot} ${this.resultsCountTemplate}
526
- <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
527
- </div>
513
+ return html `
514
+ <div
515
+ id="left-column"
516
+ class="column${this.isResizeToMobile ? ' preload' : ''}"
517
+ >
518
+ ${this.facetTopViewSlot} ${this.resultsCountTemplate}
519
+ <div id="facets-header-container">${this.mobileFacetsTemplate}</div>
520
+ </div>
528
521
  `;
529
522
  }
530
523
  /**
531
524
  * Template for the desktop version of the left column, displaying the facets sidebar.
532
525
  */
533
526
  get desktopLeftColumnTemplate() {
534
- return html `
535
- <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
536
- ${this.facetTopViewSlot}
537
- <div id="facets-header-container">
538
- <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
539
- ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
540
- </div>
541
- <div id="facets-container" aria-labelledby="facets-header">
542
- ${this.facetsTemplate}
543
- <div id="facets-scroll-sentinel"></div>
544
- </div>
545
- <div id="facets-bottom-fade"></div>
546
- </div>
527
+ return html `
528
+ <div id="left-column" class="column" ?hidden=${!this.facetPaneVisible}>
529
+ ${this.facetTopViewSlot}
530
+ <div id="facets-header-container">
531
+ <h2 id="facets-header" class="sr-only">${msg('Filters')}</h2>
532
+ ${this.resultsCountTemplate} ${this.clearFiltersBtnTemplate(false)}
533
+ </div>
534
+ <div id="facets-container" aria-labelledby="facets-header">
535
+ ${this.facetsTemplate}
536
+ <div id="facets-scroll-sentinel"></div>
537
+ </div>
538
+ <div id="facets-bottom-fade"></div>
539
+ </div>
547
540
  `;
548
541
  }
549
542
  /**
@@ -551,8 +544,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
551
544
  * - mainly used to render userlists
552
545
  */
553
546
  get facetTopViewSlot() {
554
- return html `<div id="facet-top-view">
555
- <slot name="facet-top-slot"></slot>
547
+ return html `<div id="facet-top-view">
548
+ <slot name="facet-top-slot"></slot>
556
549
  </div>`;
557
550
  }
558
551
  /**
@@ -567,15 +560,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
567
560
  const resultsCount = this.totalResults?.toLocaleString();
568
561
  const resultsLabel = this.totalResults === 1 ? 'Result' : 'Results';
569
562
  // Added data-testid for Playwright testing
570
- return html `
571
- <div id="results-total" class=${classes} data-testid="results-total">
572
- <span id="big-results-count">
573
- ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
574
- </span>
575
- <span id="big-results-label">
576
- ${shouldShowSearching ? nothing : resultsLabel}
577
- </span>
578
- </div>
563
+ return html `
564
+ <div id="results-total" class=${classes} data-testid="results-total">
565
+ <span id="big-results-count">
566
+ ${shouldShowSearching ? html `Searching&hellip;` : resultsCount}
567
+ </span>
568
+ <span id="big-results-label">
569
+ ${shouldShowSearching ? nothing : resultsLabel}
570
+ </span>
571
+ </div>
579
572
  `;
580
573
  }
581
574
  /**
@@ -588,45 +581,45 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
588
581
  'full-width': !this.facetPaneVisible,
589
582
  'smart-results-spacing': !!this.showSmartResults,
590
583
  });
591
- return html `
592
- <div id="right-column" class=${rightColumnClasses}>
584
+ return html `
585
+ <div id="right-column" class=${rightColumnClasses}>
593
586
  ${this.showSmartResults
594
587
  ? html `<slot name="smart-results"></slot>`
595
- : nothing}
596
- <section id="results">
597
- <h2 class="results-section-heading">
598
- <slot name="results-heading"></slot>
599
- </h2>
600
- <div id="cb-top-view">
601
- <slot name="cb-top-slot"></slot>
602
- </div>
588
+ : nothing}
589
+ <section id="results">
590
+ <h2 class="results-section-heading">
591
+ <slot name="results-heading"></slot>
592
+ </h2>
593
+ <div id="cb-top-view">
594
+ <slot name="cb-top-slot"></slot>
595
+ </div>
603
596
  ${this.isManageView
604
597
  ? this.manageBarTemplate
605
- : this.sortFilterBarTemplate}
606
- <slot name="cb-results"></slot>
598
+ : this.sortFilterBarTemplate}
599
+ <slot name="cb-results"></slot>
607
600
  ${this.displayMode === `list-compact` && this.totalResults
608
601
  ? this.listHeaderTemplate
609
- : nothing}
610
- ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
611
- </section>
612
- </div>
602
+ : nothing}
603
+ ${this.suppressResultTiles ? nothing : this.infiniteScrollerTemplate}
604
+ </section>
605
+ </div>
613
606
  `;
614
607
  }
615
608
  /**
616
609
  * Template for the infinite scroller widget that contains the result tiles.
617
610
  */
618
611
  get infiniteScrollerTemplate() {
619
- return html `<infinite-scroller
620
- class=${this.infiniteScrollerClasses}
621
- itemCount=${this.placeholderType ? 0 : nothing}
622
- ariaLandmarkLabel="Search results"
623
- .cellProvider=${this}
624
- .placeholderCellTemplate=${this.placeholderCellTemplate}
625
- @scrollThresholdReached=${this.scrollThresholdReached}
626
- @visibleCellsChanged=${this.visibleCellsChanged}
612
+ return html `<infinite-scroller
613
+ class=${this.infiniteScrollerClasses}
614
+ itemCount=${this.placeholderType ? 0 : nothing}
615
+ ariaLandmarkLabel="Search results"
616
+ .cellProvider=${this}
617
+ .placeholderCellTemplate=${this.placeholderCellTemplate}
618
+ @scrollThresholdReached=${this.scrollThresholdReached}
619
+ @visibleCellsChanged=${this.visibleCellsChanged}
627
620
  >${this.displayMode === 'grid'
628
621
  ? html `<slot name="result-last-tile" slot="result-last-tile"></slot>`
629
- : nothing}
622
+ : nothing}
630
623
  </infinite-scroller>`;
631
624
  }
632
625
  /**
@@ -660,29 +653,29 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
660
653
  }
661
654
  // We only show relevance sort if a search query is currently defined
662
655
  sortFieldAvailability.relevance = this.isRelevanceSortAvailable;
663
- return html `
664
- <sort-filter-bar
665
- .defaultSortField=${this.defaultSortField}
666
- .defaultSortDirection=${this.defaultSortDirection}
667
- .selectedSort=${this.selectedSort}
668
- .sortDirection=${this.sortDirection}
669
- .sortFieldAvailability=${sortFieldAvailability}
670
- .displayMode=${this.displayMode}
671
- .selectedTitleFilter=${this.selectedTitleFilter}
672
- .selectedCreatorFilter=${this.selectedCreatorFilter}
673
- .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
674
- .enableSortOptionsSlot=${this.enableSortOptionsSlot}
675
- .suppressDisplayModes=${this.suppressDisplayModes}
676
- @sortChanged=${this.userChangedSort}
677
- @displayModeChanged=${this.displayModeChanged}
678
- @titleLetterChanged=${this.titleLetterSelected}
679
- @creatorLetterChanged=${this.creatorLetterSelected}
680
- >
681
- ${this.tileBlurCheckboxTemplate}
682
- <slot name="sort-options-left" slot="sort-options-left"></slot>
683
- <slot name="sort-options" slot="sort-options"></slot>
684
- <slot name="sort-options-right" slot="sort-options-right"></slot>
685
- </sort-filter-bar>
656
+ return html `
657
+ <sort-filter-bar
658
+ .defaultSortField=${this.defaultSortField}
659
+ .defaultSortDirection=${this.defaultSortDirection}
660
+ .selectedSort=${this.selectedSort}
661
+ .sortDirection=${this.sortDirection}
662
+ .sortFieldAvailability=${sortFieldAvailability}
663
+ .displayMode=${this.displayMode}
664
+ .selectedTitleFilter=${this.selectedTitleFilter}
665
+ .selectedCreatorFilter=${this.selectedCreatorFilter}
666
+ .prefixFilterCountMap=${this.dataSource.prefixFilterCountMap}
667
+ .enableSortOptionsSlot=${this.enableSortOptionsSlot}
668
+ .suppressDisplayModes=${this.suppressDisplayModes}
669
+ @sortChanged=${this.userChangedSort}
670
+ @displayModeChanged=${this.displayModeChanged}
671
+ @titleLetterChanged=${this.titleLetterSelected}
672
+ @creatorLetterChanged=${this.creatorLetterSelected}
673
+ >
674
+ ${this.tileBlurCheckboxTemplate}
675
+ <slot name="sort-options-left" slot="sort-options-left"></slot>
676
+ <slot name="sort-options" slot="sort-options"></slot>
677
+ <slot name="sort-options-right" slot="sort-options-right"></slot>
678
+ </sort-filter-bar>
686
679
  `;
687
680
  }
688
681
  /**
@@ -693,20 +686,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
693
686
  // Only show the checkbox for @archive.org users
694
687
  if (!this.dataSource.sessionContext?.is_archive_user)
695
688
  return nothing;
696
- return html `
697
- <label
698
- id="tile-blur-label"
699
- for="tile-blur-check"
700
- slot="sort-options-right"
701
- >
702
- ${msg('Blurring')}
703
- <input
704
- id="tile-blur-check"
705
- type="checkbox"
706
- ?checked=${!this.shouldSuppressTileBlurring}
707
- @change=${this.tileBlurCheckboxChanged}
708
- />
709
- </label>
689
+ return html `
690
+ <label
691
+ id="tile-blur-label"
692
+ for="tile-blur-check"
693
+ slot="sort-options-right"
694
+ >
695
+ ${msg('Blurring')}
696
+ <input
697
+ id="tile-blur-check"
698
+ type="checkbox"
699
+ ?checked=${!this.shouldSuppressTileBlurring}
700
+ @change=${this.tileBlurCheckboxChanged}
701
+ />
702
+ </label>
710
703
  `;
711
704
  }
712
705
  /**
@@ -714,27 +707,27 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
714
707
  * showing the management view. This generally replaces the sort bar when present.
715
708
  */
716
709
  get manageBarTemplate() {
717
- return html `
718
- <manage-bar
719
- .label=${this.manageViewLabel}
720
- .modalManager=${this.modalManager}
721
- .selectedItems=${this.dataSource.checkedTileModels}
722
- .profileElement=${this.profileElement}
723
- showSelectAll
724
- showUnselectAll
725
- ?showItemManageButton=${this.pageContext === 'search'}
726
- ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
727
- @removeItems=${this.handleRemoveItems}
728
- @manageItems=${this.handleManageItems}
729
- @selectAll=${() => this.dataSource.checkAllTiles()}
730
- @unselectAll=${() => this.dataSource.uncheckAllTiles()}
710
+ return html `
711
+ <manage-bar
712
+ .label=${this.manageViewLabel}
713
+ .modalManager=${this.modalManager}
714
+ .selectedItems=${this.dataSource.checkedTileModels}
715
+ .profileElement=${this.profileElement}
716
+ showSelectAll
717
+ showUnselectAll
718
+ ?showItemManageButton=${this.pageContext === 'search'}
719
+ ?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
720
+ @removeItems=${this.handleRemoveItems}
721
+ @manageItems=${this.handleManageItems}
722
+ @selectAll=${() => this.dataSource.checkAllTiles()}
723
+ @unselectAll=${() => this.dataSource.uncheckAllTiles()}
731
724
  @cancel=${() => {
732
725
  this.isManageView = false;
733
726
  this.dataSource.uncheckAllTiles();
734
727
  if (this.searchResultsLoading)
735
728
  this.dataSource.resetPages();
736
- }}
737
- ></manage-bar>
729
+ }}
730
+ ></manage-bar>
738
731
  `;
739
732
  }
740
733
  /**
@@ -969,15 +962,15 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
969
962
  label: target.open ? 'open' : 'closed',
970
963
  });
971
964
  };
972
- return html `
973
- <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
974
- <summary>
975
- <span class="collapser-icon">${chevronIcon}</span>
976
- <h2>${msg('Filters')}</h2>
977
- ${this.clearFiltersBtnTemplate(true)}
978
- </summary>
979
- ${this.facetsTemplate}
980
- </details>
965
+ return html `
966
+ <details id="mobile-filter-collapse" @toggle=${toggleFacetsVisible}>
967
+ <summary>
968
+ <span class="collapser-icon">${chevronIcon}</span>
969
+ <h2>${msg('Filters')}</h2>
970
+ ${this.clearFiltersBtnTemplate(true)}
971
+ </summary>
972
+ ${this.facetsTemplate}
973
+ </details>
981
974
  `;
982
975
  }
983
976
  /**
@@ -1061,50 +1054,50 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1061
1054
  const filterByNetworkLabel = msg('Filter by Network');
1062
1055
  const filterByShowLabel = msg('Filter by Show');
1063
1056
  const shows = showEntries.map(([show]) => show);
1064
- const loadingIndicator = html `
1065
- <span slot="empty-options">
1066
- <img src="https://archive.org/images/loading.gif" />
1067
- </span>
1057
+ const loadingIndicator = html `
1058
+ <span slot="empty-options">
1059
+ <img src="https://archive.org/images/loading.gif" />
1060
+ </span>
1068
1061
  `;
1069
- const errorMessage = html `
1070
- <span slot="empty-options">
1071
- ${msg('Unable to fetch options, try again later')}
1072
- </span>
1062
+ const errorMessage = html `
1063
+ <span slot="empty-options">
1064
+ ${msg('Unable to fetch options, try again later')}
1065
+ </span>
1073
1066
  `;
1074
- return html `
1075
- <div id="tv-filters" slot="facets-top">
1076
- <ia-combo-box
1077
- id="tv-networks"
1078
- class="tv-filter-dropdown"
1079
- placeholder=${filterByNetworkLabel}
1080
- clearable
1081
- wrap-arrow-keys
1082
- sort
1083
- .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1084
- @toggle=${this.tvDropdownToggled}
1085
- @change=${this.networksDropdownChanged}
1086
- >
1087
- <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1088
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1089
- ${this.tvMapsErrored ? errorMessage : nothing}
1090
- </ia-combo-box>
1091
- <ia-combo-box
1092
- id="tv-shows"
1093
- class="tv-filter-dropdown"
1094
- placeholder=${filterByShowLabel}
1095
- max-autocomplete-entries="500"
1096
- clearable
1097
- wrap-arrow-keys
1098
- sort
1099
- .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1100
- @toggle=${this.tvDropdownToggled}
1101
- @change=${this.showsDropdownChanged}
1102
- >
1103
- <span slot="label" class="sr-only">${filterByShowLabel}</span>
1104
- ${this.tvMapsLoading ? loadingIndicator : nothing}
1105
- ${this.tvMapsErrored ? errorMessage : nothing}
1106
- </ia-combo-box>
1107
- </div>
1067
+ return html `
1068
+ <div id="tv-filters" slot="facets-top">
1069
+ <ia-combo-box
1070
+ id="tv-networks"
1071
+ class="tv-filter-dropdown"
1072
+ placeholder=${filterByNetworkLabel}
1073
+ clearable
1074
+ wrap-arrow-keys
1075
+ sort
1076
+ .options=${networks.map((n, i) => ({ id: `network-${i}`, text: n }))}
1077
+ @toggle=${this.tvDropdownToggled}
1078
+ @change=${this.networksDropdownChanged}
1079
+ >
1080
+ <span slot="label" class="sr-only">${filterByNetworkLabel}</span>
1081
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1082
+ ${this.tvMapsErrored ? errorMessage : nothing}
1083
+ </ia-combo-box>
1084
+ <ia-combo-box
1085
+ id="tv-shows"
1086
+ class="tv-filter-dropdown"
1087
+ placeholder=${filterByShowLabel}
1088
+ max-autocomplete-entries="500"
1089
+ clearable
1090
+ wrap-arrow-keys
1091
+ sort
1092
+ .options=${shows.map((s, i) => ({ id: `show-${i}`, text: s }))}
1093
+ @toggle=${this.tvDropdownToggled}
1094
+ @change=${this.showsDropdownChanged}
1095
+ >
1096
+ <span slot="label" class="sr-only">${filterByShowLabel}</span>
1097
+ ${this.tvMapsLoading ? loadingIndicator : nothing}
1098
+ ${this.tvMapsErrored ? errorMessage : nothing}
1099
+ </ia-combo-box>
1100
+ </div>
1108
1101
  `;
1109
1102
  }
1110
1103
  /**
@@ -1114,10 +1107,10 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1114
1107
  if (FACETLESS_PAGE_ELEMENTS.includes(this.profileElement))
1115
1108
  return nothing;
1116
1109
  if (this.facetLoadStrategy === 'off') {
1117
- return html `
1118
- <p class="facets-message">
1119
- ${msg('Facets are temporarily unavailable.')}
1120
- </p>
1110
+ return html `
1111
+ <p class="facets-message">
1112
+ ${msg('Facets are temporarily unavailable.')}
1113
+ </p>
1121
1114
  `;
1122
1115
  }
1123
1116
  // We switch to TV facet ordering & date picker if we are in a TV collection or showing TV search results
@@ -1126,46 +1119,46 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1126
1119
  const facetDisplayOrder = shouldUseTvInterface
1127
1120
  ? tvFacetDisplayOrder
1128
1121
  : defaultFacetDisplayOrder;
1129
- const facets = html `
1130
- <collection-facets
1131
- .collectionPagePath=${this.collectionPagePath}
1132
- .parentCollections=${this.dataSource.parentCollections}
1133
- .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1134
- .searchService=${this.searchService}
1135
- .featureFeedbackService=${this.featureFeedbackService}
1136
- .recaptchaManager=${this.recaptchaManager}
1137
- .resizeObserver=${this.resizeObserver}
1138
- .searchType=${this.searchType}
1139
- .aggregations=${this.dataSource.aggregations}
1140
- .histogramAggregation=${this.dataSource.histogramAggregation}
1141
- .minSelectedDate=${this.minSelectedDate}
1142
- .maxSelectedDate=${this.maxSelectedDate}
1143
- .selectedFacets=${this.selectedFacets}
1144
- .baseNavigationUrl=${this.baseNavigationUrl}
1145
- .collectionTitles=${this.dataSource.collectionTitles}
1146
- .tvChannelAliases=${this.dataSource.tvChannelAliases}
1147
- .showHistogramDatePicker=${this.showHistogramDatePicker}
1148
- .allowExpandingDatePicker=${!this.mobileView}
1149
- .allowDatePickerMonths=${shouldUseTvInterface}
1150
- .contentWidth=${this.contentWidth}
1151
- .query=${this.baseQuery}
1152
- .identifiers=${this.identifiers}
1153
- .filterMap=${this.dataSource.filterMap}
1154
- .isManageView=${this.isManageView}
1155
- .modalManager=${this.modalManager}
1156
- .analyticsHandler=${this.analyticsHandler}
1157
- .facetDisplayOrder=${facetDisplayOrder}
1158
- .isTvSearch=${shouldUseTvInterface}
1159
- ?collapsableFacets=${this.mobileView}
1160
- ?facetsLoading=${this.facetsLoading}
1161
- ?histogramAggregationLoading=${this.facetsLoading}
1162
- ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1163
- @facetClick=${this.facetClickHandler}
1164
- @facetsChanged=${this.facetsChanged}
1165
- @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1166
- >
1167
- ${this.tvDropdownFiltersTemplate}
1168
- </collection-facets>
1122
+ const facets = html `
1123
+ <collection-facets
1124
+ .collectionPagePath=${this.collectionPagePath}
1125
+ .parentCollections=${this.dataSource.parentCollections}
1126
+ .pageSpecifierParams=${this.dataSource.pageSpecifierParams}
1127
+ .searchService=${this.searchService}
1128
+ .featureFeedbackService=${this.featureFeedbackService}
1129
+ .recaptchaManager=${this.recaptchaManager}
1130
+ .resizeObserver=${this.resizeObserver}
1131
+ .searchType=${this.searchType}
1132
+ .aggregations=${this.dataSource.aggregations}
1133
+ .histogramAggregation=${this.dataSource.histogramAggregation}
1134
+ .minSelectedDate=${this.minSelectedDate}
1135
+ .maxSelectedDate=${this.maxSelectedDate}
1136
+ .selectedFacets=${this.selectedFacets}
1137
+ .baseNavigationUrl=${this.baseNavigationUrl}
1138
+ .collectionTitles=${this.dataSource.collectionTitles}
1139
+ .tvChannelAliases=${this.dataSource.tvChannelAliases}
1140
+ .showHistogramDatePicker=${this.showHistogramDatePicker}
1141
+ .allowExpandingDatePicker=${!this.mobileView}
1142
+ .allowDatePickerMonths=${shouldUseTvInterface}
1143
+ .contentWidth=${this.contentWidth}
1144
+ .query=${this.baseQuery}
1145
+ .identifiers=${this.identifiers}
1146
+ .filterMap=${this.dataSource.filterMap}
1147
+ .isManageView=${this.isManageView}
1148
+ .modalManager=${this.modalManager}
1149
+ .analyticsHandler=${this.analyticsHandler}
1150
+ .facetDisplayOrder=${facetDisplayOrder}
1151
+ .isTvSearch=${shouldUseTvInterface}
1152
+ ?collapsableFacets=${this.mobileView}
1153
+ ?facetsLoading=${this.facetsLoading}
1154
+ ?histogramAggregationLoading=${this.facetsLoading}
1155
+ ?suppressMediatypeFacets=${this.suppressMediatypeFacets}
1156
+ @facetClick=${this.facetClickHandler}
1157
+ @facetsChanged=${this.facetsChanged}
1158
+ @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1159
+ >
1160
+ ${this.tvDropdownFiltersTemplate}
1161
+ </collection-facets>
1169
1162
  `;
1170
1163
  // If we are using one of the opt-in facet load strategies, we may need to wrap the
1171
1164
  // desktop view facets in a <details> widget so that patrons can opt into loading them.
@@ -1173,20 +1166,20 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1173
1166
  const showDesktopOptInWidget = this.facetLoadStrategy === 'opt-in' ||
1174
1167
  (this.facetLoadStrategy === 'opt-in-or-login' && !this.loggedIn);
1175
1168
  if (showDesktopOptInWidget && !this.mobileView) {
1176
- return html `
1177
- <details
1178
- class="desktop-facets-dropdown"
1169
+ return html `
1170
+ <details
1171
+ class="desktop-facets-dropdown"
1179
1172
  @toggle=${(e) => {
1180
1173
  const target = e.target;
1181
1174
  this.collapsibleFacetsVisible = target.open;
1182
- }}
1183
- >
1184
- <summary>
1185
- <span class="collapser-icon">${chevronIcon}</span>
1186
- <h2>${msg('Filters')}</h2>
1187
- </summary>
1188
- ${facets}
1189
- </details>
1175
+ }}
1176
+ >
1177
+ <summary>
1178
+ <span class="collapser-icon">${chevronIcon}</span>
1179
+ <h2>${msg('Filters')}</h2>
1180
+ </summary>
1181
+ ${facets}
1182
+ </details>
1190
1183
  `;
1191
1184
  }
1192
1185
  // Otherwise, just render the facets component bare
@@ -1206,35 +1199,34 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1206
1199
  mobile,
1207
1200
  });
1208
1201
  const buttonText = mobile ? 'Clear all' : 'Clear all filters';
1209
- return html `
1210
- <div class="clear-filters-btn-row">
1202
+ return html `
1203
+ <div class="clear-filters-btn-row">
1211
1204
  ${mobile
1212
1205
  ? html `<span class="clear-filters-btn-separator">&nbsp;</span>`
1213
- : nothing}
1214
- <button class=${buttonClasses} @click=${this.clearFilters}>
1215
- ${buttonText}
1216
- </button>
1217
- </div>
1206
+ : nothing}
1207
+ <button class=${buttonClasses} @click=${this.clearFilters}>
1208
+ ${buttonText}
1209
+ </button>
1210
+ </div>
1218
1211
  `;
1219
1212
  }
1220
1213
  /**
1221
1214
  * Template for the table header content that appears atop the compact list view.
1222
1215
  */
1223
1216
  get listHeaderTemplate() {
1224
- return html `
1225
- <div id="list-header">
1226
- <tile-dispatcher
1227
- .tileDisplayMode=${'list-header'}
1228
- .resizeObserver=${this.resizeObserver}
1229
- .sortParam=${this.sortParam}
1230
- .defaultSortParam=${this.defaultSortParam}
1231
- .mobileBreakpoint=${this.mobileBreakpoint}
1232
- .loggedIn=${this.loggedIn}
1233
- .suppressBlurring=${this.shouldSuppressTileBlurring}
1234
- .tileActions=${this.tileActions}
1235
- >
1236
- </tile-dispatcher>
1237
- </div>
1217
+ return html `
1218
+ <div id="list-header">
1219
+ <tile-dispatcher
1220
+ .tileDisplayMode=${'list-header'}
1221
+ .resizeObserver=${this.resizeObserver}
1222
+ .sortParam=${this.sortParam}
1223
+ .defaultSortParam=${this.defaultSortParam}
1224
+ .mobileBreakpoint=${this.mobileBreakpoint}
1225
+ .loggedIn=${this.loggedIn}
1226
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
1227
+ >
1228
+ </tile-dispatcher>
1229
+ </div>
1238
1230
  `;
1239
1231
  }
1240
1232
  /**
@@ -1354,8 +1346,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1354
1346
  if (changed.has('displayMode') ||
1355
1347
  changed.has('baseNavigationUrl') ||
1356
1348
  changed.has('baseImageUrl') ||
1357
- changed.has('loggedIn') ||
1358
- changed.has('tileActions')) {
1349
+ changed.has('loggedIn')) {
1359
1350
  this.infiniteScroller?.reload();
1360
1351
  }
1361
1352
  if (changed.has('profileElement')) {
@@ -1965,30 +1956,28 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1965
1956
  const isRadioSearch = this.searchType === SearchType.RADIO;
1966
1957
  const { isTVCollection, isRadioCollection } = this;
1967
1958
  const shouldUseLocalTime = isTVSearch || isRadioSearch || isTVCollection || isRadioCollection;
1968
- return html `
1969
- <tile-dispatcher
1970
- .collectionPagePath=${this.collectionPagePath}
1971
- .baseNavigationUrl=${this.baseNavigationUrl}
1972
- .baseImageUrl=${this.baseImageUrl}
1973
- .model=${model}
1974
- .tileDisplayMode=${this.displayMode}
1975
- .resizeObserver=${this.resizeObserver}
1976
- .collectionTitles=${this.dataSource.collectionTitles}
1977
- .sortParam=${this.sortParam}
1978
- .defaultSortParam=${this.defaultSortParam}
1979
- .creatorFilter=${this.selectedCreatorFilter}
1980
- .mobileBreakpoint=${this.mobileBreakpoint}
1981
- .loggedIn=${this.loggedIn}
1982
- .suppressBlurring=${this.shouldSuppressTileBlurring}
1983
- .isManageView=${this.isManageView}
1984
- .tileActions=${this.tileActions}
1985
- .layoutType=${this.tileLayoutType}
1986
- ?showTvClips=${isTVSearch || isTVCollection}
1987
- ?enableHoverPane=${true}
1988
- ?useLocalTime=${shouldUseLocalTime}
1989
- @resultSelected=${(e) => this.resultSelected(e)}
1990
- >
1991
- </tile-dispatcher>
1959
+ return html `
1960
+ <tile-dispatcher
1961
+ .collectionPagePath=${this.collectionPagePath}
1962
+ .baseNavigationUrl=${this.baseNavigationUrl}
1963
+ .baseImageUrl=${this.baseImageUrl}
1964
+ .model=${model}
1965
+ .tileDisplayMode=${this.displayMode}
1966
+ .resizeObserver=${this.resizeObserver}
1967
+ .collectionTitles=${this.dataSource.collectionTitles}
1968
+ .sortParam=${this.sortParam}
1969
+ .defaultSortParam=${this.defaultSortParam}
1970
+ .creatorFilter=${this.selectedCreatorFilter}
1971
+ .mobileBreakpoint=${this.mobileBreakpoint}
1972
+ .loggedIn=${this.loggedIn}
1973
+ .suppressBlurring=${this.shouldSuppressTileBlurring}
1974
+ .isManageView=${this.isManageView}
1975
+ ?showTvClips=${isTVSearch || isTVCollection}
1976
+ ?enableHoverPane=${true}
1977
+ ?useLocalTime=${shouldUseLocalTime}
1978
+ @resultSelected=${(e) => this.resultSelected(e)}
1979
+ >
1980
+ </tile-dispatcher>
1992
1981
  `;
1993
1982
  }
1994
1983
  /**
@@ -2023,479 +2012,479 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
2023
2012
  static get styles() {
2024
2013
  return [
2025
2014
  srOnlyStyle,
2026
- css `
2027
- :host {
2028
- display: block;
2029
- --leftColumnWidth: 18rem;
2030
- --leftColumnPaddingTop: 2rem;
2031
- --leftColumnPaddingRight: 2.5rem;
2032
- }
2033
-
2034
- #facet-top-view {
2035
- display: flex;
2036
- }
2037
-
2038
- /**
2039
- * When page width resizes from desktop to mobile, use this class to
2040
- * disable expand/collapse transition when loading.
2041
- */
2042
- .preload * {
2043
- transition: none !important;
2044
- -webkit-transition: none !important;
2045
- -moz-transition: none !important;
2046
- -ms-transition: none !important;
2047
- -o-transition: none !important;
2048
- }
2049
-
2050
- #content-container {
2051
- display: flex;
2052
- }
2053
-
2054
- empty-placeholder {
2055
- margin-top: var(--placeholderMarginTop, 0);
2056
- }
2057
-
2058
- .collapser-icon {
2059
- display: inline-block;
2060
- }
2061
-
2062
- .collapser-icon svg {
2063
- display: inline-block;
2064
- width: 12px;
2065
- height: 12px;
2066
- transition: transform 0.2s ease-out;
2067
- }
2068
-
2069
- #mobile-filter-collapse {
2070
- width: 100%;
2071
- }
2072
-
2073
- #mobile-filter-collapse > summary {
2074
- cursor: pointer;
2075
- list-style: none;
2076
- }
2077
-
2078
- #mobile-filter-collapse[open] > summary {
2079
- margin-bottom: 10px;
2080
- }
2081
-
2082
- #mobile-filter-collapse h2 {
2083
- display: inline-block;
2084
- margin: 0;
2085
- font-size: 2rem;
2086
- }
2087
-
2088
- #mobile-filter-collapse[open] svg {
2089
- transform: rotate(90deg);
2090
- }
2091
-
2092
- #content-container.mobile {
2093
- display: block;
2094
- }
2095
-
2096
- #right-column {
2097
- flex: 1;
2098
- position: relative;
2099
- min-height: 90vh;
2100
- border-right: 1px solid rgb(232, 232, 232);
2101
- margin-top: var(--rightColumnMarginTop, 0);
2102
- padding-top: var(--rightColumnPaddingTop, 2rem);
2103
- background: #fff;
2104
- }
2105
-
2106
- #left-column:not([hidden]) + #right-column {
2107
- border-left: 1px solid rgb(232, 232, 232);
2108
- }
2109
-
2110
- #right-column.smart-results-spacing {
2111
- padding-top: 0.5rem;
2112
- border-right: none;
2113
- background: transparent;
2114
- min-width: 0;
2115
- }
2116
-
2117
- #results {
2118
- background: #fff;
2119
- padding-left: 1rem;
2120
- padding-right: 1rem;
2121
- }
2122
-
2123
- #right-column.smart-results-spacing #results {
2124
- border-radius: 10px 10px 0px 0px;
2125
- padding-top: 0.5rem;
2126
- margin-top: 1rem;
2127
- }
2128
-
2129
- .mobile #right-column {
2130
- border-left: none;
2131
- }
2132
-
2133
- .mobile #results {
2134
- padding: 5px 5px 0;
2135
- }
2136
-
2137
- #left-column {
2138
- width: var(--leftColumnWidth, 18rem);
2139
- /* Prevents Safari from shrinking col at first draw */
2140
- min-width: var(--leftColumnWidth, 18rem);
2141
- padding-top: var(--leftColumnPaddingTop, 2rem);
2142
- /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2143
- padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2144
- border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2145
- z-index: 1;
2146
- }
2147
-
2148
- .desktop #left-column {
2149
- top: 0;
2150
- position: sticky;
2151
- height: calc(100vh - 2rem);
2152
- max-height: calc(100vh - 2rem);
2153
- overflow-x: hidden;
2154
- overflow-y: scroll;
2155
-
2156
- /*
2157
- * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2158
- * does at least give us a tiny bit of control over width & color.
2159
- */
2160
- scrollbar-width: thin;
2161
- scrollbar-color: transparent transparent;
2162
- }
2163
- .desktop #left-column:hover {
2164
- scrollbar-color: auto;
2165
- }
2166
- .desktop #left-column::-webkit-scrollbar {
2167
- appearance: none;
2168
- width: 6px;
2169
- }
2170
- .desktop #left-column::-webkit-scrollbar-button {
2171
- height: 3px;
2172
- background: transparent;
2173
- }
2174
- .desktop #left-column::-webkit-scrollbar-corner {
2175
- background: transparent;
2176
- }
2177
- .desktop #left-column::-webkit-scrollbar-thumb {
2178
- border-radius: 4px;
2179
- }
2180
- .desktop #left-column:hover::-webkit-scrollbar-thumb {
2181
- background: rgba(0, 0, 0, 0.15);
2182
- }
2183
- .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2184
- background: rgba(0, 0, 0, 0.2);
2185
- }
2186
- .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2187
- background: rgba(0, 0, 0, 0.3);
2188
- }
2189
-
2190
- #facets-bottom-fade {
2191
- background: linear-gradient(
2192
- to bottom,
2193
- #fbfbfd00 0%,
2194
- #fbfbfdc0 50%,
2195
- #fbfbfd 80%,
2196
- #fbfbfd 100%
2197
- );
2198
- position: fixed;
2199
- bottom: 0;
2200
- height: 50px;
2201
- /* Wide enough to cover the content, but leave the scrollbar uncovered */
2202
- width: calc(
2203
- var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2204
- );
2205
- z-index: 2;
2206
- pointer-events: none;
2207
- transition: height 0.1s ease;
2208
- }
2209
- #facets-bottom-fade.hidden {
2210
- height: 0;
2211
- }
2212
-
2213
- .facets-message {
2214
- font-size: 1.4rem;
2215
- }
2216
-
2217
- .desktop-facets-dropdown > summary {
2218
- cursor: pointer;
2219
- list-style: none;
2220
- }
2221
-
2222
- .desktop-facets-dropdown h2 {
2223
- display: inline-block;
2224
- margin: 0;
2225
- font-size: 1.6rem;
2226
- }
2227
-
2228
- .desktop-facets-dropdown[open] > summary {
2229
- margin-bottom: 10px;
2230
- }
2231
-
2232
- .desktop-facets-dropdown[open] svg {
2233
- transform: rotate(90deg);
2234
- }
2235
-
2236
- .desktop #left-column-scroll-sentinel {
2237
- width: 1px;
2238
- height: 100vh;
2239
- background: transparent;
2240
- }
2241
-
2242
- .desktop #facets-scroll-sentinel {
2243
- width: 1px;
2244
- height: 1px;
2245
- background: transparent;
2246
- }
2247
-
2248
- #facets-header-container {
2249
- display: flex;
2250
- justify-content: space-between;
2251
- align-items: flex-start;
2252
- clear: both;
2253
- }
2254
-
2255
- .desktop #facets-header-container {
2256
- flex-wrap: wrap;
2257
- }
2258
-
2259
- .mobile #left-column {
2260
- width: 100%;
2261
- min-width: 0;
2262
- padding: 5px 0;
2263
- border: 0;
2264
- }
2265
-
2266
- .clear-filters-btn-row {
2267
- display: inline-block;
2268
- }
2269
-
2270
- .desktop .clear-filters-btn-row {
2271
- width: 100%;
2272
- }
2273
-
2274
- .clear-filters-btn {
2275
- display: inline-block;
2276
- appearance: none;
2277
- margin: 0;
2278
- padding: 0;
2279
- border: 0;
2280
- background: none;
2281
- color: var(--ia-theme-link-color);
2282
- font-size: 1.4rem;
2283
- font-family: inherit;
2284
- cursor: pointer;
2285
- }
2286
-
2287
- .clear-filters-btn:hover {
2288
- text-decoration: underline;
2289
- }
2290
-
2291
- .clear-filters-btn-separator {
2292
- display: inline-block;
2293
- margin-left: 5px;
2294
- border-left: 1px solid #2c2c2c;
2295
- font-size: 1.4rem;
2296
- line-height: 1.3rem;
2297
- }
2298
-
2299
- #tv-filters {
2300
- margin-bottom: 15px;
2301
- }
2302
-
2303
- #tv-shows {
2304
- --comboBoxListWidth: 300px;
2305
- }
2306
-
2307
- .tv-filter-dropdown {
2308
- display: block;
2309
- font-size: 14px;
2310
- margin-left: 1px;
2311
- margin-bottom: 5px;
2312
- }
2313
-
2314
- .tv-filter-dropdown::part(combo-box) {
2315
- outline-offset: 1px;
2316
- }
2317
-
2318
- .tv-filter-dropdown::part(option) {
2319
- line-height: 1.1;
2320
- padding: 7px;
2321
- }
2322
-
2323
- .tv-filter-dropdown::part(clear-button) {
2324
- flex: 0 0 26px;
2325
- --combo-box-clear-icon-size: 14px;
2326
- }
2327
-
2328
- .tv-filter-dropdown::part(icon) {
2329
- width: 1.4rem;
2330
- height: 1.4rem;
2331
- }
2332
-
2333
- #facets-container {
2334
- position: relative;
2335
- max-height: 0;
2336
- transition: max-height 0.2s ease-in-out;
2337
- z-index: 1;
2338
- margin-top: var(--facetsContainerMarginTop, 3rem);
2339
- padding-bottom: 2rem;
2340
- }
2341
-
2342
- .desktop #facets-container {
2343
- width: 18rem;
2344
- }
2345
-
2346
- .mobile #facets-container {
2347
- overflow: hidden;
2348
- padding-bottom: 0;
2349
- padding-left: 10px;
2350
- padding-right: 10px;
2351
- }
2352
-
2353
- #facets-container.expanded {
2354
- max-height: 2000px;
2355
- }
2356
-
2357
- .results-section-heading {
2358
- margin: 0.5rem 0.3rem;
2359
- font-size: 2rem;
2360
- line-height: 25px;
2361
- }
2362
-
2363
- #results-total {
2364
- display: flex;
2365
- align-items: baseline;
2366
- }
2367
-
2368
- #results-total:not(.filtered) {
2369
- padding-bottom: 2rem;
2370
- }
2371
-
2372
- .mobile #results-total {
2373
- position: absolute;
2374
- right: 10px;
2375
- }
2376
-
2377
- #big-results-count {
2378
- font-size: 2.4rem;
2379
- font-weight: 500;
2380
- margin-right: 5px;
2381
- }
2382
-
2383
- .mobile #big-results-count {
2384
- font-size: 2rem;
2385
- }
2386
-
2387
- #big-results-label {
2388
- font-size: 1.4rem;
2389
- font-weight: 200;
2390
- }
2391
-
2392
- #list-header {
2393
- max-height: 4.2rem;
2394
- }
2395
-
2396
- .loading-cover {
2397
- position: absolute;
2398
- top: 0;
2399
- left: 0;
2400
- width: 100%;
2401
- height: 100%;
2402
- display: flex;
2403
- justify-content: center;
2404
- z-index: 1;
2405
- padding-top: 50px;
2406
- }
2407
-
2408
- #tile-blur-label {
2409
- display: flex;
2410
- align-items: center;
2411
- column-gap: 5px;
2412
- }
2413
-
2414
- #tile-blur-check {
2415
- margin: 0 5px 0 0;
2416
- width: 15px;
2417
- }
2418
-
2419
- circular-activity-indicator {
2420
- width: 30px;
2421
- height: 30px;
2422
- }
2423
-
2424
- sort-filter-bar {
2425
- display: block;
2426
- margin-bottom: 4rem;
2427
- }
2428
-
2429
- infinite-scroller {
2430
- display: block;
2431
- --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2432
- --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2433
- }
2434
-
2435
- infinite-scroller.list-compact {
2436
- --infiniteScrollerCellMinWidth: var(
2437
- --collectionBrowserCellMinWidth,
2438
- 100%
2439
- );
2440
- --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2441
- --infiniteScrollerCellMaxHeight: 56px;
2442
- --infiniteScrollerRowGap: 10px;
2443
- }
2444
-
2445
- infinite-scroller.list-detail {
2446
- --infiniteScrollerCellMinWidth: var(
2447
- --collectionBrowserCellMinWidth,
2448
- 100%
2449
- );
2450
- --infiniteScrollerCellMinHeight: var(
2451
- --collectionBrowserCellMinHeight,
2452
- 5rem
2453
- );
2454
- /*
2455
- 30px in spec, compensating for a -4px margin
2456
- to align title with top of item image
2457
- src/tiles/list/tile-list.ts
2458
- */
2459
- --infiniteScrollerRowGap: 34px;
2460
- }
2461
-
2462
- .mobile infinite-scroller.list-detail {
2463
- --infiniteScrollerRowGap: 24px;
2464
- }
2465
-
2466
- infinite-scroller.grid {
2467
- --infiniteScrollerCellMinWidth: var(
2468
- --collectionBrowserCellMinWidth,
2469
- 17rem
2470
- );
2471
- --infiniteScrollerCellMaxWidth: var(
2472
- --collectionBrowserCellMaxWidth,
2473
- 1fr
2474
- );
2475
- }
2476
-
2477
- /* Allow tiles to shrink a bit further at smaller viewport widths */
2478
- @media screen and (max-width: 880px) {
2479
- infinite-scroller.grid {
2480
- --infiniteScrollerCellMinWidth: var(
2481
- --collectionBrowserCellMinWidth,
2482
- 15rem
2483
- );
2484
- }
2485
- }
2486
- /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2487
- @media screen and (max-width: 360px) {
2488
- infinite-scroller.grid {
2489
- --infiniteScrollerCellMinWidth: var(
2490
- --collectionBrowserCellMinWidth,
2491
- 12rem
2492
- );
2493
- }
2494
- }
2495
-
2496
- infinite-scroller.hidden {
2497
- display: none;
2498
- }
2015
+ css `
2016
+ :host {
2017
+ display: block;
2018
+ --leftColumnWidth: 18rem;
2019
+ --leftColumnPaddingTop: 2rem;
2020
+ --leftColumnPaddingRight: 2.5rem;
2021
+ }
2022
+
2023
+ #facet-top-view {
2024
+ display: flex;
2025
+ }
2026
+
2027
+ /**
2028
+ * When page width resizes from desktop to mobile, use this class to
2029
+ * disable expand/collapse transition when loading.
2030
+ */
2031
+ .preload * {
2032
+ transition: none !important;
2033
+ -webkit-transition: none !important;
2034
+ -moz-transition: none !important;
2035
+ -ms-transition: none !important;
2036
+ -o-transition: none !important;
2037
+ }
2038
+
2039
+ #content-container {
2040
+ display: flex;
2041
+ }
2042
+
2043
+ empty-placeholder {
2044
+ margin-top: var(--placeholderMarginTop, 0);
2045
+ }
2046
+
2047
+ .collapser-icon {
2048
+ display: inline-block;
2049
+ }
2050
+
2051
+ .collapser-icon svg {
2052
+ display: inline-block;
2053
+ width: 12px;
2054
+ height: 12px;
2055
+ transition: transform 0.2s ease-out;
2056
+ }
2057
+
2058
+ #mobile-filter-collapse {
2059
+ width: 100%;
2060
+ }
2061
+
2062
+ #mobile-filter-collapse > summary {
2063
+ cursor: pointer;
2064
+ list-style: none;
2065
+ }
2066
+
2067
+ #mobile-filter-collapse[open] > summary {
2068
+ margin-bottom: 10px;
2069
+ }
2070
+
2071
+ #mobile-filter-collapse h2 {
2072
+ display: inline-block;
2073
+ margin: 0;
2074
+ font-size: 2rem;
2075
+ }
2076
+
2077
+ #mobile-filter-collapse[open] svg {
2078
+ transform: rotate(90deg);
2079
+ }
2080
+
2081
+ #content-container.mobile {
2082
+ display: block;
2083
+ }
2084
+
2085
+ #right-column {
2086
+ flex: 1;
2087
+ position: relative;
2088
+ min-height: 90vh;
2089
+ border-right: 1px solid rgb(232, 232, 232);
2090
+ margin-top: var(--rightColumnMarginTop, 0);
2091
+ padding-top: var(--rightColumnPaddingTop, 2rem);
2092
+ background: #fff;
2093
+ }
2094
+
2095
+ #left-column:not([hidden]) + #right-column {
2096
+ border-left: 1px solid rgb(232, 232, 232);
2097
+ }
2098
+
2099
+ #right-column.smart-results-spacing {
2100
+ padding-top: 0.5rem;
2101
+ border-right: none;
2102
+ background: transparent;
2103
+ min-width: 0;
2104
+ }
2105
+
2106
+ #results {
2107
+ background: #fff;
2108
+ padding-left: 1rem;
2109
+ padding-right: 1rem;
2110
+ }
2111
+
2112
+ #right-column.smart-results-spacing #results {
2113
+ border-radius: 10px 10px 0px 0px;
2114
+ padding-top: 0.5rem;
2115
+ margin-top: 1rem;
2116
+ }
2117
+
2118
+ .mobile #right-column {
2119
+ border-left: none;
2120
+ }
2121
+
2122
+ .mobile #results {
2123
+ padding: 5px 5px 0;
2124
+ }
2125
+
2126
+ #left-column {
2127
+ width: var(--leftColumnWidth, 18rem);
2128
+ /* Prevents Safari from shrinking col at first draw */
2129
+ min-width: var(--leftColumnWidth, 18rem);
2130
+ padding-top: var(--leftColumnPaddingTop, 2rem);
2131
+ /* Reduced padding by 0.2rem to add the invisible border in the rule below */
2132
+ padding-right: calc(var(--leftColumnPaddingRight, 2.5rem) - 0.2rem);
2133
+ border-right: 0.2rem solid transparent; /* Pads to the right of the scrollbar a bit */
2134
+ z-index: 1;
2135
+ }
2136
+
2137
+ .desktop #left-column {
2138
+ top: 0;
2139
+ position: sticky;
2140
+ height: calc(100vh - 2rem);
2141
+ max-height: calc(100vh - 2rem);
2142
+ overflow-x: hidden;
2143
+ overflow-y: scroll;
2144
+
2145
+ /*
2146
+ * Firefox doesn't support any of the -webkit-scrollbar stuff below, but
2147
+ * does at least give us a tiny bit of control over width & color.
2148
+ */
2149
+ scrollbar-width: thin;
2150
+ scrollbar-color: transparent transparent;
2151
+ }
2152
+ .desktop #left-column:hover {
2153
+ scrollbar-color: auto;
2154
+ }
2155
+ .desktop #left-column::-webkit-scrollbar {
2156
+ appearance: none;
2157
+ width: 6px;
2158
+ }
2159
+ .desktop #left-column::-webkit-scrollbar-button {
2160
+ height: 3px;
2161
+ background: transparent;
2162
+ }
2163
+ .desktop #left-column::-webkit-scrollbar-corner {
2164
+ background: transparent;
2165
+ }
2166
+ .desktop #left-column::-webkit-scrollbar-thumb {
2167
+ border-radius: 4px;
2168
+ }
2169
+ .desktop #left-column:hover::-webkit-scrollbar-thumb {
2170
+ background: rgba(0, 0, 0, 0.15);
2171
+ }
2172
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:hover {
2173
+ background: rgba(0, 0, 0, 0.2);
2174
+ }
2175
+ .desktop #left-column:hover::-webkit-scrollbar-thumb:active {
2176
+ background: rgba(0, 0, 0, 0.3);
2177
+ }
2178
+
2179
+ #facets-bottom-fade {
2180
+ background: linear-gradient(
2181
+ to bottom,
2182
+ #fbfbfd00 0%,
2183
+ #fbfbfdc0 50%,
2184
+ #fbfbfd 80%,
2185
+ #fbfbfd 100%
2186
+ );
2187
+ position: fixed;
2188
+ bottom: 0;
2189
+ height: 50px;
2190
+ /* Wide enough to cover the content, but leave the scrollbar uncovered */
2191
+ width: calc(
2192
+ var(--leftColumnWidth) + var(--leftColumnPaddingRight) - 10px
2193
+ );
2194
+ z-index: 2;
2195
+ pointer-events: none;
2196
+ transition: height 0.1s ease;
2197
+ }
2198
+ #facets-bottom-fade.hidden {
2199
+ height: 0;
2200
+ }
2201
+
2202
+ .facets-message {
2203
+ font-size: 1.4rem;
2204
+ }
2205
+
2206
+ .desktop-facets-dropdown > summary {
2207
+ cursor: pointer;
2208
+ list-style: none;
2209
+ }
2210
+
2211
+ .desktop-facets-dropdown h2 {
2212
+ display: inline-block;
2213
+ margin: 0;
2214
+ font-size: 1.6rem;
2215
+ }
2216
+
2217
+ .desktop-facets-dropdown[open] > summary {
2218
+ margin-bottom: 10px;
2219
+ }
2220
+
2221
+ .desktop-facets-dropdown[open] svg {
2222
+ transform: rotate(90deg);
2223
+ }
2224
+
2225
+ .desktop #left-column-scroll-sentinel {
2226
+ width: 1px;
2227
+ height: 100vh;
2228
+ background: transparent;
2229
+ }
2230
+
2231
+ .desktop #facets-scroll-sentinel {
2232
+ width: 1px;
2233
+ height: 1px;
2234
+ background: transparent;
2235
+ }
2236
+
2237
+ #facets-header-container {
2238
+ display: flex;
2239
+ justify-content: space-between;
2240
+ align-items: flex-start;
2241
+ clear: both;
2242
+ }
2243
+
2244
+ .desktop #facets-header-container {
2245
+ flex-wrap: wrap;
2246
+ }
2247
+
2248
+ .mobile #left-column {
2249
+ width: 100%;
2250
+ min-width: 0;
2251
+ padding: 5px 0;
2252
+ border: 0;
2253
+ }
2254
+
2255
+ .clear-filters-btn-row {
2256
+ display: inline-block;
2257
+ }
2258
+
2259
+ .desktop .clear-filters-btn-row {
2260
+ width: 100%;
2261
+ }
2262
+
2263
+ .clear-filters-btn {
2264
+ display: inline-block;
2265
+ appearance: none;
2266
+ margin: 0;
2267
+ padding: 0;
2268
+ border: 0;
2269
+ background: none;
2270
+ color: var(--ia-theme-link-color);
2271
+ font-size: 1.4rem;
2272
+ font-family: inherit;
2273
+ cursor: pointer;
2274
+ }
2275
+
2276
+ .clear-filters-btn:hover {
2277
+ text-decoration: underline;
2278
+ }
2279
+
2280
+ .clear-filters-btn-separator {
2281
+ display: inline-block;
2282
+ margin-left: 5px;
2283
+ border-left: 1px solid #2c2c2c;
2284
+ font-size: 1.4rem;
2285
+ line-height: 1.3rem;
2286
+ }
2287
+
2288
+ #tv-filters {
2289
+ margin-bottom: 15px;
2290
+ }
2291
+
2292
+ #tv-shows {
2293
+ --comboBoxListWidth: 300px;
2294
+ }
2295
+
2296
+ .tv-filter-dropdown {
2297
+ display: block;
2298
+ font-size: 14px;
2299
+ margin-left: 1px;
2300
+ margin-bottom: 5px;
2301
+ }
2302
+
2303
+ .tv-filter-dropdown::part(combo-box) {
2304
+ outline-offset: 1px;
2305
+ }
2306
+
2307
+ .tv-filter-dropdown::part(option) {
2308
+ line-height: 1.1;
2309
+ padding: 7px;
2310
+ }
2311
+
2312
+ .tv-filter-dropdown::part(clear-button) {
2313
+ flex: 0 0 26px;
2314
+ --combo-box-clear-icon-size: 14px;
2315
+ }
2316
+
2317
+ .tv-filter-dropdown::part(icon) {
2318
+ width: 1.4rem;
2319
+ height: 1.4rem;
2320
+ }
2321
+
2322
+ #facets-container {
2323
+ position: relative;
2324
+ max-height: 0;
2325
+ transition: max-height 0.2s ease-in-out;
2326
+ z-index: 1;
2327
+ margin-top: var(--facetsContainerMarginTop, 3rem);
2328
+ padding-bottom: 2rem;
2329
+ }
2330
+
2331
+ .desktop #facets-container {
2332
+ width: 18rem;
2333
+ }
2334
+
2335
+ .mobile #facets-container {
2336
+ overflow: hidden;
2337
+ padding-bottom: 0;
2338
+ padding-left: 10px;
2339
+ padding-right: 10px;
2340
+ }
2341
+
2342
+ #facets-container.expanded {
2343
+ max-height: 2000px;
2344
+ }
2345
+
2346
+ .results-section-heading {
2347
+ margin: 0.5rem 0.3rem;
2348
+ font-size: 2rem;
2349
+ line-height: 25px;
2350
+ }
2351
+
2352
+ #results-total {
2353
+ display: flex;
2354
+ align-items: baseline;
2355
+ }
2356
+
2357
+ #results-total:not(.filtered) {
2358
+ padding-bottom: 2rem;
2359
+ }
2360
+
2361
+ .mobile #results-total {
2362
+ position: absolute;
2363
+ right: 10px;
2364
+ }
2365
+
2366
+ #big-results-count {
2367
+ font-size: 2.4rem;
2368
+ font-weight: 500;
2369
+ margin-right: 5px;
2370
+ }
2371
+
2372
+ .mobile #big-results-count {
2373
+ font-size: 2rem;
2374
+ }
2375
+
2376
+ #big-results-label {
2377
+ font-size: 1.4rem;
2378
+ font-weight: 200;
2379
+ }
2380
+
2381
+ #list-header {
2382
+ max-height: 4.2rem;
2383
+ }
2384
+
2385
+ .loading-cover {
2386
+ position: absolute;
2387
+ top: 0;
2388
+ left: 0;
2389
+ width: 100%;
2390
+ height: 100%;
2391
+ display: flex;
2392
+ justify-content: center;
2393
+ z-index: 1;
2394
+ padding-top: 50px;
2395
+ }
2396
+
2397
+ #tile-blur-label {
2398
+ display: flex;
2399
+ align-items: center;
2400
+ column-gap: 5px;
2401
+ }
2402
+
2403
+ #tile-blur-check {
2404
+ margin: 0 5px 0 0;
2405
+ width: 15px;
2406
+ }
2407
+
2408
+ circular-activity-indicator {
2409
+ width: 30px;
2410
+ height: 30px;
2411
+ }
2412
+
2413
+ sort-filter-bar {
2414
+ display: block;
2415
+ margin-bottom: 4rem;
2416
+ }
2417
+
2418
+ infinite-scroller {
2419
+ display: block;
2420
+ --infiniteScrollerRowGap: var(--collectionBrowserRowGap, 1.7rem);
2421
+ --infiniteScrollerColGap: var(--collectionBrowserColGap, 1.7rem);
2422
+ }
2423
+
2424
+ infinite-scroller.list-compact {
2425
+ --infiniteScrollerCellMinWidth: var(
2426
+ --collectionBrowserCellMinWidth,
2427
+ 100%
2428
+ );
2429
+ --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2430
+ --infiniteScrollerCellMaxHeight: 56px;
2431
+ --infiniteScrollerRowGap: 10px;
2432
+ }
2433
+
2434
+ infinite-scroller.list-detail {
2435
+ --infiniteScrollerCellMinWidth: var(
2436
+ --collectionBrowserCellMinWidth,
2437
+ 100%
2438
+ );
2439
+ --infiniteScrollerCellMinHeight: var(
2440
+ --collectionBrowserCellMinHeight,
2441
+ 5rem
2442
+ );
2443
+ /*
2444
+ 30px in spec, compensating for a -4px margin
2445
+ to align title with top of item image
2446
+ src/tiles/list/tile-list.ts
2447
+ */
2448
+ --infiniteScrollerRowGap: 34px;
2449
+ }
2450
+
2451
+ .mobile infinite-scroller.list-detail {
2452
+ --infiniteScrollerRowGap: 24px;
2453
+ }
2454
+
2455
+ infinite-scroller.grid {
2456
+ --infiniteScrollerCellMinWidth: var(
2457
+ --collectionBrowserCellMinWidth,
2458
+ 17rem
2459
+ );
2460
+ --infiniteScrollerCellMaxWidth: var(
2461
+ --collectionBrowserCellMaxWidth,
2462
+ 1fr
2463
+ );
2464
+ }
2465
+
2466
+ /* Allow tiles to shrink a bit further at smaller viewport widths */
2467
+ @media screen and (max-width: 880px) {
2468
+ infinite-scroller.grid {
2469
+ --infiniteScrollerCellMinWidth: var(
2470
+ --collectionBrowserCellMinWidth,
2471
+ 15rem
2472
+ );
2473
+ }
2474
+ }
2475
+ /* At very small widths, maintain a 2-tile layout as far as it can reasonably go */
2476
+ @media screen and (max-width: 360px) {
2477
+ infinite-scroller.grid {
2478
+ --infiniteScrollerCellMinWidth: var(
2479
+ --collectionBrowserCellMinWidth,
2480
+ 12rem
2481
+ );
2482
+ }
2483
+ }
2484
+
2485
+ infinite-scroller.hidden {
2486
+ display: none;
2487
+ }
2499
2488
  `,
2500
2489
  ];
2501
2490
  }
@@ -2644,12 +2633,6 @@ __decorate([
2644
2633
  __decorate([
2645
2634
  property({ type: Boolean })
2646
2635
  ], CollectionBrowser.prototype, "isManageView", void 0);
2647
- __decorate([
2648
- property({ type: Array })
2649
- ], CollectionBrowser.prototype, "tileActions", void 0);
2650
- __decorate([
2651
- property({ type: String })
2652
- ], CollectionBrowser.prototype, "tileLayoutType", void 0);
2653
2636
  __decorate([
2654
2637
  property({ type: String })
2655
2638
  ], CollectionBrowser.prototype, "manageViewLabel", void 0);