@internetarchive/collection-browser 0.4.11 → 0.4.13-alpha.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 (279) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +26 -26
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/LICENSE +661 -661
  8. package/README.md +83 -83
  9. package/dist/index.d.ts +9 -9
  10. package/dist/index.js +9 -9
  11. package/dist/src/app-root.d.ts +50 -50
  12. package/dist/src/app-root.js +278 -278
  13. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  15. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  16. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  17. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  18. package/dist/src/assets/img/icons/chevron.js +2 -2
  19. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  20. package/dist/src/assets/img/icons/empty-query.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  28. package/dist/src/assets/img/icons/login-required.js +2 -2
  29. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  30. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  55. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  56. package/dist/src/assets/img/icons/null-result.js +2 -2
  57. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  58. package/dist/src/assets/img/icons/restricted.js +2 -2
  59. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  60. package/dist/src/assets/img/icons/reviews.js +2 -2
  61. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  62. package/dist/src/assets/img/icons/upload.js +2 -2
  63. package/dist/src/assets/img/icons/views.d.ts +1 -1
  64. package/dist/src/assets/img/icons/views.js +2 -2
  65. package/dist/src/circular-activity-indicator.d.ts +5 -5
  66. package/dist/src/circular-activity-indicator.js +17 -17
  67. package/dist/src/collection-browser.d.ts +280 -279
  68. package/dist/src/collection-browser.js +1178 -1156
  69. package/dist/src/collection-browser.js.map +1 -1
  70. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  71. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  72. package/dist/src/collection-facets/facets-template.d.ts +16 -16
  73. package/dist/src/collection-facets/facets-template.js +125 -125
  74. package/dist/src/collection-facets/more-facets-content.d.ts +76 -75
  75. package/dist/src/collection-facets/more-facets-content.js +354 -377
  76. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  77. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  78. package/dist/src/collection-facets/more-facets-pagination.js +197 -195
  79. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  80. package/dist/src/collection-facets/toggle-switch.d.ts +41 -0
  81. package/dist/src/collection-facets/toggle-switch.js +184 -0
  82. package/dist/src/collection-facets/toggle-switch.js.map +1 -0
  83. package/dist/src/collection-facets.d.ts +81 -81
  84. package/dist/src/collection-facets.js +376 -385
  85. package/dist/src/collection-facets.js.map +1 -1
  86. package/dist/src/empty-placeholder.d.ts +13 -11
  87. package/dist/src/empty-placeholder.js +80 -44
  88. package/dist/src/empty-placeholder.js.map +1 -1
  89. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  90. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  91. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  92. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  93. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  94. package/dist/src/mediatype/mediatype-config.js +85 -85
  95. package/dist/src/models.d.ts +119 -115
  96. package/dist/src/models.js +136 -125
  97. package/dist/src/models.js.map +1 -1
  98. package/dist/src/restoration-state-handler.d.ts +45 -45
  99. package/dist/src/restoration-state-handler.js +230 -230
  100. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  101. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +25 -26
  102. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -1
  103. package/dist/src/sort-filter-bar/alpha-bar.d.ts +20 -20
  104. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  105. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  106. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  107. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  108. package/dist/src/sort-filter-bar/img/list.js +3 -3
  109. package/dist/src/sort-filter-bar/img/list.js.map +1 -1
  110. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -0
  111. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +15 -0
  112. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js.map +1 -0
  113. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -0
  114. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +17 -0
  115. package/dist/src/sort-filter-bar/img/sort-toggle-down.js.map +1 -0
  116. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -0
  117. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +17 -0
  118. package/dist/src/sort-filter-bar/img/sort-toggle-up.js.map +1 -0
  119. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  120. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  121. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  122. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  123. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +189 -108
  124. package/dist/src/sort-filter-bar/sort-filter-bar.js +708 -614
  125. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  126. package/dist/src/styles/item-image-styles.d.ts +8 -8
  127. package/dist/src/styles/item-image-styles.js +9 -9
  128. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  129. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  130. package/dist/src/tiles/grid/account-tile.d.ts +20 -20
  131. package/dist/src/tiles/grid/account-tile.js +64 -64
  132. package/dist/src/tiles/grid/collection-tile.d.ts +17 -17
  133. package/dist/src/tiles/grid/collection-tile.js +71 -71
  134. package/dist/src/tiles/grid/item-tile.d.ts +32 -32
  135. package/dist/src/tiles/grid/item-tile.js +130 -126
  136. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  137. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  138. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +7 -7
  139. package/dist/src/tiles/grid/tile-stats.d.ts +11 -10
  140. package/dist/src/tiles/grid/tile-stats.js +44 -40
  141. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  142. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  143. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  144. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  145. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  146. package/dist/src/tiles/image-block.d.ts +17 -17
  147. package/dist/src/tiles/image-block.js +72 -72
  148. package/dist/src/tiles/item-image.d.ts +35 -35
  149. package/dist/src/tiles/item-image.js +117 -117
  150. package/dist/src/tiles/list/account-label.d.ts +1 -1
  151. package/dist/src/tiles/list/account-label.js +6 -6
  152. package/dist/src/tiles/list/date-label.d.ts +1 -1
  153. package/dist/src/tiles/list/date-label.js +12 -12
  154. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
  155. package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
  156. package/dist/src/tiles/list/tile-list-compact.d.ts +22 -21
  157. package/dist/src/tiles/list/tile-list-compact.js +114 -101
  158. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  159. package/dist/src/tiles/list/tile-list.d.ts +55 -55
  160. package/dist/src/tiles/list/tile-list.js +304 -301
  161. package/dist/src/tiles/list/tile-list.js.map +1 -1
  162. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  163. package/dist/src/tiles/mediatype-icon.js +47 -47
  164. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  165. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  166. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  167. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  168. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  169. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  170. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  171. package/dist/src/tiles/text-snippet-block.js +73 -73
  172. package/dist/src/tiles/tile-dispatcher.d.ts +58 -58
  173. package/dist/src/tiles/tile-dispatcher.js +194 -194
  174. package/dist/src/utils/analytics-events.d.ts +22 -22
  175. package/dist/src/utils/analytics-events.js +24 -24
  176. package/dist/src/utils/format-count.d.ts +7 -7
  177. package/dist/src/utils/format-count.js +76 -76
  178. package/dist/src/utils/format-date.d.ts +2 -2
  179. package/dist/src/utils/format-date.js +23 -23
  180. package/dist/src/utils/format-unit-size.d.ts +2 -2
  181. package/dist/src/utils/format-unit-size.js +33 -33
  182. package/dist/test/collection-browser.test.d.ts +1 -1
  183. package/dist/test/collection-browser.test.js +584 -584
  184. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  185. package/dist/test/collection-facets/facets-template.test.js +62 -62
  186. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  187. package/dist/test/collection-facets/more-facets-content.test.js +114 -114
  188. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  189. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  190. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -0
  191. package/dist/test/collection-facets/toggle-switch.test.js +87 -0
  192. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -0
  193. package/dist/test/collection-facets.test.d.ts +2 -2
  194. package/dist/test/collection-facets.test.js +460 -460
  195. package/dist/test/empty-placeholder.test.d.ts +1 -1
  196. package/dist/test/empty-placeholder.test.js +33 -33
  197. package/dist/test/icon-overlay.test.d.ts +1 -1
  198. package/dist/test/icon-overlay.test.js +24 -24
  199. package/dist/test/image-block.test.d.ts +1 -1
  200. package/dist/test/image-block.test.js +48 -48
  201. package/dist/test/item-image.test.d.ts +1 -1
  202. package/dist/test/item-image.test.js +84 -84
  203. package/dist/test/mediatype-config.test.d.ts +1 -1
  204. package/dist/test/mediatype-config.test.js +16 -16
  205. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  206. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  207. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -7
  208. package/dist/test/mocks/mock-collection-name-cache.js +13 -13
  209. package/dist/test/mocks/mock-search-responses.d.ts +12 -12
  210. package/dist/test/mocks/mock-search-responses.js +341 -341
  211. package/dist/test/mocks/mock-search-service.d.ts +13 -13
  212. package/dist/test/mocks/mock-search-service.js +40 -40
  213. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  214. package/dist/test/restoration-state-handler.test.js +125 -125
  215. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  216. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  217. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  218. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  219. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  220. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +372 -199
  221. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  222. package/dist/test/text-overlay.test.d.ts +1 -1
  223. package/dist/test/text-overlay.test.js +48 -48
  224. package/dist/test/text-snippet-block.test.d.ts +1 -1
  225. package/dist/test/text-snippet-block.test.js +57 -57
  226. package/dist/test/tile-stats.test.d.ts +1 -1
  227. package/dist/test/tile-stats.test.js +33 -33
  228. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  229. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  230. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  231. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  232. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  233. package/dist/test/tiles/grid/item-tile.test.js +158 -158
  234. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  235. package/dist/test/tiles/hover/hover-pane-controller.test.js +257 -257
  236. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  237. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  238. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  239. package/dist/test/tiles/list/tile-list-compact.test.js +104 -92
  240. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  241. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  242. package/dist/test/tiles/list/tile-list.test.js +175 -163
  243. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  244. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  245. package/dist/test/tiles/tile-dispatcher.test.js +67 -67
  246. package/dist/test/utils/format-count.test.d.ts +1 -1
  247. package/dist/test/utils/format-count.test.js +23 -23
  248. package/dist/test/utils/format-date.test.d.ts +1 -1
  249. package/dist/test/utils/format-date.test.js +17 -17
  250. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  251. package/dist/test/utils/format-unit-size.test.js +17 -17
  252. package/local.archive.org.cert +86 -86
  253. package/local.archive.org.key +27 -27
  254. package/package.json +4 -3
  255. package/renovate.json +6 -6
  256. package/src/collection-browser.ts +28 -1
  257. package/src/collection-facets/more-facets-content.ts +25 -48
  258. package/src/collection-facets/more-facets-pagination.ts +5 -3
  259. package/src/collection-facets/toggle-switch.ts +184 -0
  260. package/src/collection-facets.ts +1 -10
  261. package/src/empty-placeholder.ts +53 -7
  262. package/src/models.ts +23 -8
  263. package/src/sort-filter-bar/alpha-bar-tooltip.ts +1 -2
  264. package/src/sort-filter-bar/img/list.ts +1 -1
  265. package/src/sort-filter-bar/img/sort-toggle-disabled.ts +15 -0
  266. package/src/sort-filter-bar/img/sort-toggle-down.ts +17 -0
  267. package/src/sort-filter-bar/img/sort-toggle-up.ts +17 -0
  268. package/src/sort-filter-bar/sort-filter-bar.ts +433 -303
  269. package/src/tiles/grid/item-tile.ts +6 -1
  270. package/src/tiles/grid/tile-stats.ts +3 -1
  271. package/src/tiles/list/tile-list-compact.ts +15 -2
  272. package/src/tiles/list/tile-list.ts +3 -0
  273. package/test/collection-facets/toggle-switch.test.ts +154 -0
  274. package/test/sort-filter-bar/sort-filter-bar.test.ts +377 -101
  275. package/test/tiles/list/tile-list-compact.test.ts +14 -0
  276. package/test/tiles/list/tile-list.test.ts +14 -0
  277. package/tsconfig.json +21 -21
  278. package/web-dev-server.config.mjs +30 -30
  279. package/web-test-runner.config.mjs +41 -41
@@ -1,108 +1,189 @@
1
- import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
- import type { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
3
- import { CollectionDisplayMode, PrefixFilterCounts, PrefixFilterType, SortField } from '../models';
4
- import './alpha-bar';
5
- declare type AlphaSelector = 'creator' | 'title';
6
- export declare class SortFilterBar extends LitElement implements SharedResizeObserverResizeHandlerInterface {
7
- displayMode?: CollectionDisplayMode;
8
- sortDirection: 'asc' | 'desc' | null;
9
- selectedSort: SortField;
10
- selectedTitleFilter: string | null;
11
- selectedCreatorFilter: string | null;
12
- showRelevance: boolean;
13
- prefixFilterCountMap?: Record<PrefixFilterType, PrefixFilterCounts>;
14
- resizeObserver?: SharedResizeObserverInterface;
15
- alphaSelectorVisible: AlphaSelector | null;
16
- dateSortSelectorVisible: boolean;
17
- viewSortSelectorVisible: boolean;
18
- desktopSelectorBarWidth: number;
19
- selectorBarContainerWidth: number;
20
- hoveringOverDateSortOptions: boolean;
21
- private desktopSortSelector;
22
- private sortSelectorContainer;
23
- render(): TemplateResult<1>;
24
- updated(changed: PropertyValues): void;
25
- private setupEscapeListeners;
26
- private boundSortBarSelectorEscapeListener;
27
- disconnectedCallback(): void;
28
- private disconnectResizeObserver;
29
- private setupResizeObserver;
30
- private get mobileSelectorVisible();
31
- private get alphaBarTemplate();
32
- handleResize(entry: ResizeObserverEntry): void;
33
- private get sortDirectionSelectorTemplate();
34
- private get desktopSortSelectorTemplate();
35
- /**
36
- * This generates each of the sort option links.
37
- *
38
- * It manages the display value and the selected state of the option.
39
- *
40
- * @param sortField
41
- * @param options {
42
- * additionalClickEvent?: () => void; If this is provided, it will also be called when the option is clicked.
43
- * displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
44
- * isSelected?: () => boolean; A function that returns true if the option is selected. Defaults to the selectedSort === sortField.
45
- * }
46
- * @returns
47
- */
48
- private getSortDisplayOption;
49
- private get mobileSortSelectorTemplate();
50
- private mobileSortChanged;
51
- private get displayOptionTemplate();
52
- private get dateSortSelector();
53
- private get viewSortSelector();
54
- private getDateSortButton;
55
- private selectDateSort;
56
- private setSortDirections;
57
- private setSelectedSort;
58
- /**
59
- * There are four date sort options.
60
- *
61
- * This checks to see if the current sort is one of them.
62
- *
63
- * @readonly
64
- * @private
65
- * @type {boolean}
66
- * @memberof SortFilterBar
67
- */
68
- private get dateOptionSelected();
69
- /**
70
- * There are two view sort options.
71
- *
72
- * This checks to see if the current sort is one of them.
73
- *
74
- * @readonly
75
- * @private
76
- * @type {boolean}
77
- * @memberof SortFilterBar
78
- */
79
- private get viewOptionSelected();
80
- /**
81
- * The display name of the current date field
82
- *
83
- * @readonly
84
- * @private
85
- * @type {string}
86
- * @memberof SortFilterBar
87
- */
88
- private get dateSortField();
89
- /**
90
- * The display name of the current view field
91
- *
92
- * @readonly
93
- * @private
94
- * @type {string}
95
- * @memberof SortFilterBar
96
- */
97
- private get viewSortField();
98
- private get titleSelectorBar();
99
- private get creatorSelectorBar();
100
- private titleLetterChanged;
101
- private creatorLetterChanged;
102
- private emitTitleLetterChangedEvent;
103
- private emitCreatorLetterChangedEvent;
104
- private displayModeChanged;
105
- private emitSortChangedEvent;
106
- static styles: import("lit").CSSResult;
107
- }
108
- export {};
1
+ import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ import type { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
3
+ import '@internetarchive/ia-dropdown';
4
+ import { CollectionDisplayMode, PrefixFilterCounts, PrefixFilterType, SortField } from '../models';
5
+ import './alpha-bar';
6
+ declare type AlphaSelector = 'creator' | 'title';
7
+ export declare class SortFilterBar extends LitElement implements SharedResizeObserverResizeHandlerInterface {
8
+ /** Which display mode the tiles are being rendered with (grid/list-detail/list-compact) */
9
+ displayMode?: CollectionDisplayMode;
10
+ /** The current sort direction (asc/desc), or null if none is set */
11
+ sortDirection: 'asc' | 'desc' | null;
12
+ /** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
13
+ selectedSort: SortField;
14
+ /** The currently selected title letter filter, or null if none is set */
15
+ selectedTitleFilter: string | null;
16
+ /** The currently selected creator letter filter, or null if none is set */
17
+ selectedCreatorFilter: string | null;
18
+ /** Whether to show the Relevance sort option (default `true`) */
19
+ showRelevance: boolean;
20
+ /** Maps of result counts for letters on the alphabet bar, for each letter filter type */
21
+ prefixFilterCountMap?: Record<PrefixFilterType, PrefixFilterCounts>;
22
+ resizeObserver?: SharedResizeObserverInterface;
23
+ /**
24
+ * Which of the alphabet bars (title/creator) should be shown, or null if one
25
+ * should not currently be rendered.
26
+ */
27
+ alphaSelectorVisible: AlphaSelector | null;
28
+ /**
29
+ * Whether the transparent backdrop to catch clicks outside the dropdown menu
30
+ * should be rendered.
31
+ */
32
+ dropdownBackdropVisible: boolean;
33
+ /**
34
+ * The width of the desktop view sort option container, updated upon each resize.
35
+ * Used for dynamically determining whether to use desktop or mobile view.
36
+ */
37
+ desktopSortContainerWidth: number;
38
+ /**
39
+ * The width of the full sort bar, updated upon each resize.
40
+ * Used for dynamically determining whether to use desktop or mobile view.
41
+ */
42
+ selectorBarContainerWidth: number;
43
+ /**
44
+ * The container for all the desktop view's sort options.
45
+ * Used for dynamically determining whether to use desktop or mobile view.
46
+ */
47
+ private desktopSortContainer;
48
+ /**
49
+ * The container for the full sort bar.
50
+ * Used for dynamically determining whether to use desktop or mobile view.
51
+ */
52
+ private sortSelectorContainer;
53
+ /** The dropdown component containing options for weekly and all-time views */
54
+ private viewsDropdown;
55
+ /** The dropdown component containing the four date options */
56
+ private dateDropdown;
57
+ /** The single, consolidated dropdown component shown in mobile view */
58
+ private mobileDropdown;
59
+ render(): TemplateResult<1>;
60
+ updated(changed: PropertyValues): void;
61
+ private setupEscapeListeners;
62
+ private boundSortBarSelectorEscapeListener;
63
+ disconnectedCallback(): void;
64
+ private disconnectResizeObserver;
65
+ private setupResizeObserver;
66
+ handleResize(entry: ResizeObserverEntry): void;
67
+ /**
68
+ * Whether to show the mobile sort bar because there is not enough space
69
+ * for the desktop sort bar.
70
+ */
71
+ private get mobileSelectorVisible();
72
+ /**
73
+ * Template to render the alphabet bar, or `nothing` if it should not be rendered
74
+ * for the current sort
75
+ */
76
+ private get alphaBarTemplate();
77
+ /** Template to render the sort direction toggle button */
78
+ private get sortDirectionSelectorTemplate();
79
+ /** Template to render the sort direction button's icon in the correct current state */
80
+ private get sortDirectionIcon();
81
+ /** The template to render all the sort options in desktop view */
82
+ private get desktopSortSelectorTemplate();
83
+ /** The template to render all the sort options in mobile view */
84
+ private get mobileSortSelectorTemplate();
85
+ /**
86
+ * This generates each of the non-dropdown sort option links.
87
+ *
88
+ * It manages the display value and the selected state of the option.
89
+ *
90
+ * @param sortField
91
+ * @param options {
92
+ * onClick?: (e: Event) => void; If this is provided, it will also be called when the option is clicked.
93
+ * displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
94
+ * isSelected?: () => boolean; A function that returns true if the option is selected. Defaults to the selectedSort === sortField.
95
+ * }
96
+ * @returns
97
+ */
98
+ private getSortDisplayOption;
99
+ /**
100
+ * Generates a dropdown component containing multiple grouped sort options.
101
+ *
102
+ * @param options.displayName The name to use for the dropdown's visible label
103
+ * @param options.id The id to apply to the dropdown element
104
+ * @param options.dropdownOptions An array of option objects used to populate the dropdown
105
+ * @param options.selectedOption The id of the option that should be initially selected
106
+ * @param options.isSelected A function returning a boolean indicating whether this dropdown
107
+ * should use its selected appearance
108
+ * @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
109
+ * @param options.onDropdownClick A handler for click events on the dropdown
110
+ * @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
111
+ * on the dropdown's label
112
+ */
113
+ private getSortDropdown;
114
+ /** Generates a single dropdown option object for the given sort field */
115
+ private getDropdownOption;
116
+ /** Handler for when any sort dropdown option is selected */
117
+ private dropdownOptionSelected;
118
+ /** The template to render for the views dropdown */
119
+ private get viewsDropdownTemplate();
120
+ /** The template to render for the date dropdown */
121
+ private get dateDropdownTemplate();
122
+ /** Handler for when a new mobile sort dropdown option is selected */
123
+ private mobileSortChanged;
124
+ /** Template for rendering the three display mode options */
125
+ private get displayOptionTemplate();
126
+ /**
127
+ * Template for rendering the transparent backdrop to capture clicks outside the
128
+ * dropdown menu while it is open.
129
+ */
130
+ private get dropdownBackdrop();
131
+ /** Closes all of the sorting dropdown components' menus */
132
+ private closeDropdowns;
133
+ private selectDropdownSortField;
134
+ private clearAlphaBarFilters;
135
+ private setSortDirection;
136
+ /** Toggles the current sort direction between 'asc' and 'desc' */
137
+ private toggleSortDirection;
138
+ private setSelectedSort;
139
+ /**
140
+ * There are four date sort options.
141
+ *
142
+ * This checks to see if the current sort is one of them.
143
+ *
144
+ * @readonly
145
+ * @private
146
+ * @type {boolean}
147
+ * @memberof SortFilterBar
148
+ */
149
+ private get dateOptionSelected();
150
+ /**
151
+ * There are two view sort options.
152
+ *
153
+ * This checks to see if the current sort is one of them.
154
+ *
155
+ * @readonly
156
+ * @private
157
+ * @type {boolean}
158
+ * @memberof SortFilterBar
159
+ */
160
+ private get viewOptionSelected();
161
+ /**
162
+ * The display name of the current date field
163
+ *
164
+ * @readonly
165
+ * @private
166
+ * @type {string}
167
+ * @memberof SortFilterBar
168
+ */
169
+ private get dateSortField();
170
+ /**
171
+ * The display name of the current view field
172
+ *
173
+ * @readonly
174
+ * @private
175
+ * @type {string}
176
+ * @memberof SortFilterBar
177
+ */
178
+ private get viewSortField();
179
+ private get titleSelectorBar();
180
+ private get creatorSelectorBar();
181
+ private titleLetterChanged;
182
+ private creatorLetterChanged;
183
+ private emitTitleLetterChangedEvent;
184
+ private emitCreatorLetterChangedEvent;
185
+ private displayModeChanged;
186
+ private emitSortChangedEvent;
187
+ static styles: import("lit").CSSResult;
188
+ }
189
+ export {};