@internetarchive/collection-browser 3.3.2 → 3.3.4-alpha-webdev7761.0

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 (543) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +27 -27
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/index.d.ts +16 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/src/app-root.d.ts +105 -0
  13. package/dist/src/app-root.js +1076 -0
  14. package/dist/src/app-root.js.map +1 -0
  15. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
  16. package/dist/src/assets/img/icons/arrow-left.js +10 -0
  17. package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
  18. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
  19. package/dist/src/assets/img/icons/arrow-right.js +10 -0
  20. package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
  21. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  22. package/dist/src/assets/img/icons/chevron.js +4 -0
  23. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  24. package/dist/src/assets/img/icons/close-circle-dark.d.ts +2 -0
  25. package/dist/src/assets/img/icons/close-circle-dark.js +5 -0
  26. package/dist/src/assets/img/icons/close-circle-dark.js.map +1 -0
  27. package/dist/src/assets/img/icons/contract.d.ts +2 -0
  28. package/dist/src/assets/img/icons/contract.js +9 -0
  29. package/dist/src/assets/img/icons/contract.js.map +1 -0
  30. package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
  31. package/dist/src/assets/img/icons/empty-query.js +5 -0
  32. package/dist/src/assets/img/icons/empty-query.js.map +1 -0
  33. package/dist/src/assets/img/icons/expand.d.ts +2 -0
  34. package/dist/src/assets/img/icons/expand.js +9 -0
  35. package/dist/src/assets/img/icons/expand.js.map +1 -0
  36. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
  37. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  38. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  39. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  40. package/dist/src/assets/img/icons/eye.js +5 -0
  41. package/dist/src/assets/img/icons/eye.js.map +1 -0
  42. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
  43. package/dist/src/assets/img/icons/favorite-filled.js +10 -0
  44. package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
  45. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -0
  46. package/dist/src/assets/img/icons/favorite-unfilled.js +9 -0
  47. package/dist/src/assets/img/icons/favorite-unfilled.js.map +1 -0
  48. package/dist/src/assets/img/icons/filter.d.ts +2 -0
  49. package/dist/src/assets/img/icons/filter.js +10 -0
  50. package/dist/src/assets/img/icons/filter.js.map +1 -0
  51. package/dist/src/assets/img/icons/login-required.d.ts +1 -0
  52. package/dist/src/assets/img/icons/login-required.js +18 -0
  53. package/dist/src/assets/img/icons/login-required.js.map +1 -0
  54. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
  55. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  56. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  57. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  58. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  59. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  60. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  61. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  62. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  63. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  64. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  65. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  66. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  67. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  68. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  69. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  70. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  71. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  72. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  73. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  74. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  75. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  76. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  77. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  78. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -0
  79. package/dist/src/assets/img/icons/mediatype/search.js +14 -0
  80. package/dist/src/assets/img/icons/mediatype/search.js.map +1 -0
  81. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  82. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  83. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  84. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  85. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  86. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  87. package/dist/src/assets/img/icons/mediatype/tv-commercial.d.ts +1 -0
  88. package/dist/src/assets/img/icons/mediatype/tv-commercial.js +12 -0
  89. package/dist/src/assets/img/icons/mediatype/tv-commercial.js.map +1 -0
  90. package/dist/src/assets/img/icons/mediatype/tv-fact-check.d.ts +1 -0
  91. package/dist/src/assets/img/icons/mediatype/tv-fact-check.js +12 -0
  92. package/dist/src/assets/img/icons/mediatype/tv-fact-check.js.map +1 -0
  93. package/dist/src/assets/img/icons/mediatype/tv-quote.d.ts +1 -0
  94. package/dist/src/assets/img/icons/mediatype/tv-quote.js +12 -0
  95. package/dist/src/assets/img/icons/mediatype/tv-quote.js.map +1 -0
  96. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  97. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  98. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  99. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  100. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  101. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  102. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  103. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  104. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  105. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  106. package/dist/src/assets/img/icons/null-result.js +5 -0
  107. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  108. package/dist/src/assets/img/icons/quote.d.ts +1 -0
  109. package/dist/src/assets/img/icons/quote.js +7 -0
  110. package/dist/src/assets/img/icons/quote.js.map +1 -0
  111. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  112. package/dist/src/assets/img/icons/restricted.js +13 -0
  113. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  114. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  115. package/dist/src/assets/img/icons/reviews.js +11 -0
  116. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  117. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  118. package/dist/src/assets/img/icons/upload.js +12 -0
  119. package/dist/src/assets/img/icons/upload.js.map +1 -0
  120. package/dist/src/assets/img/icons/views.d.ts +1 -0
  121. package/dist/src/assets/img/icons/views.js +11 -0
  122. package/dist/src/assets/img/icons/views.js.map +1 -0
  123. package/dist/src/circular-activity-indicator.d.ts +5 -0
  124. package/dist/src/circular-activity-indicator.js +66 -0
  125. package/dist/src/circular-activity-indicator.js.map +1 -0
  126. package/dist/src/collection-browser.d.ts +692 -0
  127. package/dist/src/collection-browser.js +2669 -0
  128. package/dist/src/collection-browser.js.map +1 -0
  129. package/dist/src/collection-facets/facet-row.d.ts +30 -0
  130. package/dist/src/collection-facets/facet-row.js +266 -0
  131. package/dist/src/collection-facets/facet-row.js.map +1 -0
  132. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -0
  133. package/dist/src/collection-facets/facet-tombstone-row.js +43 -0
  134. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -0
  135. package/dist/src/collection-facets/facets-template.d.ts +13 -0
  136. package/dist/src/collection-facets/facets-template.js +68 -0
  137. package/dist/src/collection-facets/facets-template.js.map +1 -0
  138. package/dist/src/collection-facets/models.d.ts +9 -0
  139. package/dist/src/collection-facets/models.js +10 -0
  140. package/dist/src/collection-facets/models.js.map +1 -0
  141. package/dist/src/collection-facets/more-facets-content.d.ts +109 -0
  142. package/dist/src/collection-facets/more-facets-content.js +547 -0
  143. package/dist/src/collection-facets/more-facets-content.js.map +1 -0
  144. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -0
  145. package/dist/src/collection-facets/more-facets-pagination.js +264 -0
  146. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
  147. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -0
  148. package/dist/src/collection-facets/smart-facets/dedupe.js +35 -0
  149. package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -0
  150. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.d.ts +5 -0
  151. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.js +24 -0
  152. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.js.map +1 -0
  153. package/dist/src/collection-facets/smart-facets/heuristics/index.d.ts +3 -0
  154. package/dist/src/collection-facets/smart-facets/heuristics/index.js +4 -0
  155. package/dist/src/collection-facets/smart-facets/heuristics/index.js.map +1 -0
  156. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.d.ts +4 -0
  157. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js +14 -0
  158. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js.map +1 -0
  159. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.d.ts +6 -0
  160. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js +68 -0
  161. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js.map +1 -0
  162. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.d.ts +9 -0
  163. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js +69 -0
  164. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js.map +1 -0
  165. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.d.ts +21 -0
  166. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +76 -0
  167. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -0
  168. package/dist/src/collection-facets/smart-facets/models.d.ts +30 -0
  169. package/dist/src/collection-facets/smart-facets/models.js +2 -0
  170. package/dist/src/collection-facets/smart-facets/models.js.map +1 -0
  171. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +54 -0
  172. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +383 -0
  173. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -0
  174. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -0
  175. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +133 -0
  176. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -0
  177. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +28 -0
  178. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +172 -0
  179. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -0
  180. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -0
  181. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +13 -0
  182. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js.map +1 -0
  183. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -0
  184. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +18 -0
  185. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -0
  186. package/dist/src/collection-facets/toggle-switch.d.ts +41 -0
  187. package/dist/src/collection-facets/toggle-switch.js +174 -0
  188. package/dist/src/collection-facets/toggle-switch.js.map +1 -0
  189. package/dist/src/collection-facets.d.ts +113 -0
  190. package/dist/src/collection-facets.js +884 -0
  191. package/dist/src/collection-facets.js.map +1 -0
  192. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +270 -0
  193. package/dist/src/data-source/collection-browser-data-source-interface.js +2 -0
  194. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -0
  195. package/dist/src/data-source/collection-browser-data-source.d.ts +418 -0
  196. package/dist/src/data-source/collection-browser-data-source.js +1121 -0
  197. package/dist/src/data-source/collection-browser-data-source.js.map +1 -0
  198. package/dist/src/data-source/collection-browser-query-state.d.ts +48 -0
  199. package/dist/src/data-source/collection-browser-query-state.js +2 -0
  200. package/dist/src/data-source/collection-browser-query-state.js.map +1 -0
  201. package/dist/src/data-source/models.d.ts +43 -0
  202. package/dist/src/data-source/models.js +9 -0
  203. package/dist/src/data-source/models.js.map +1 -0
  204. package/dist/src/empty-placeholder.d.ts +23 -0
  205. package/dist/src/empty-placeholder.js +165 -0
  206. package/dist/src/empty-placeholder.js.map +1 -0
  207. package/dist/src/expanded-date-picker.d.ts +50 -0
  208. package/dist/src/expanded-date-picker.js +182 -0
  209. package/dist/src/expanded-date-picker.js.map +1 -0
  210. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  211. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  212. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  213. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  214. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  215. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  216. package/dist/src/manage/manage-bar.d.ts +58 -0
  217. package/dist/src/manage/manage-bar.js +237 -0
  218. package/dist/src/manage/manage-bar.js.map +1 -0
  219. package/dist/src/manage/remove-items-modal-content.d.ts +9 -0
  220. package/dist/src/manage/remove-items-modal-content.js +104 -0
  221. package/dist/src/manage/remove-items-modal-content.js.map +1 -0
  222. package/dist/src/mediatype/mediatype-config.d.ts +11 -0
  223. package/dist/src/mediatype/mediatype-config.js +116 -0
  224. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  225. package/dist/src/models.d.ts +298 -0
  226. package/dist/src/models.js +507 -0
  227. package/dist/src/models.js.map +1 -0
  228. package/dist/src/restoration-state-handler.d.ts +74 -0
  229. package/dist/src/restoration-state-handler.js +397 -0
  230. package/dist/src/restoration-state-handler.js.map +1 -0
  231. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -0
  232. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +60 -0
  233. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -0
  234. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -0
  235. package/dist/src/sort-filter-bar/alpha-bar.js +241 -0
  236. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  237. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  238. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  239. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  240. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  241. package/dist/src/sort-filter-bar/img/list.js +5 -0
  242. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  243. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -0
  244. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +15 -0
  245. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js.map +1 -0
  246. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -0
  247. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +17 -0
  248. package/dist/src/sort-filter-bar/img/sort-toggle-down.js.map +1 -0
  249. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -0
  250. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +17 -0
  251. package/dist/src/sort-filter-bar/img/sort-toggle-up.js.map +1 -0
  252. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  253. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  254. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  255. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  256. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  257. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  258. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +278 -0
  259. package/dist/src/sort-filter-bar/sort-filter-bar.js +1161 -0
  260. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  261. package/dist/src/styles/ia-button.d.ts +2 -0
  262. package/dist/src/styles/ia-button.js +134 -0
  263. package/dist/src/styles/ia-button.js.map +1 -0
  264. package/dist/src/styles/item-image-styles.d.ts +8 -0
  265. package/dist/src/styles/item-image-styles.js +123 -0
  266. package/dist/src/styles/item-image-styles.js.map +1 -0
  267. package/dist/src/styles/sr-only.d.ts +1 -0
  268. package/dist/src/styles/sr-only.js +18 -0
  269. package/dist/src/styles/sr-only.js.map +1 -0
  270. package/dist/src/tiles/base-tile-component.d.ts +27 -0
  271. package/dist/src/tiles/base-tile-component.js +82 -0
  272. package/dist/src/tiles/base-tile-component.js.map +1 -0
  273. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  274. package/dist/src/tiles/collection-browser-loading-tile.js +29 -0
  275. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  276. package/dist/src/tiles/grid/account-tile.d.ts +18 -0
  277. package/dist/src/tiles/grid/account-tile.js +111 -0
  278. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  279. package/dist/src/tiles/grid/collection-tile.d.ts +15 -0
  280. package/dist/src/tiles/grid/collection-tile.js +160 -0
  281. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  282. package/dist/src/tiles/grid/item-tile.d.ts +41 -0
  283. package/dist/src/tiles/grid/item-tile.js +321 -0
  284. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  285. package/dist/src/tiles/grid/search-tile.d.ts +10 -0
  286. package/dist/src/tiles/grid/search-tile.js +95 -0
  287. package/dist/src/tiles/grid/search-tile.js.map +1 -0
  288. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -0
  289. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +128 -0
  290. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -0
  291. package/dist/src/tiles/grid/tile-stats.d.ts +58 -0
  292. package/dist/src/tiles/grid/tile-stats.js +204 -0
  293. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  294. package/dist/src/tiles/hover/hover-pane-controller.d.ts +228 -0
  295. package/dist/src/tiles/hover/hover-pane-controller.js +446 -0
  296. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -0
  297. package/dist/src/tiles/hover/tile-hover-pane.d.ts +20 -0
  298. package/dist/src/tiles/hover/tile-hover-pane.js +185 -0
  299. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -0
  300. package/dist/src/tiles/image-block.d.ts +19 -0
  301. package/dist/src/tiles/image-block.js +175 -0
  302. package/dist/src/tiles/image-block.js.map +1 -0
  303. package/dist/src/tiles/item-image.d.ts +40 -0
  304. package/dist/src/tiles/item-image.js +191 -0
  305. package/dist/src/tiles/item-image.js.map +1 -0
  306. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -0
  307. package/dist/src/tiles/list/tile-list-compact-header.js +85 -0
  308. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  309. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -0
  310. package/dist/src/tiles/list/tile-list-compact.js +223 -0
  311. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  312. package/dist/src/tiles/list/tile-list.d.ts +54 -0
  313. package/dist/src/tiles/list/tile-list.js +621 -0
  314. package/dist/src/tiles/list/tile-list.js.map +1 -0
  315. package/dist/src/tiles/models.d.ts +1 -0
  316. package/dist/src/tiles/models.js +2 -0
  317. package/dist/src/tiles/models.js.map +1 -0
  318. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -0
  319. package/dist/src/tiles/overlay/icon-overlay.js +55 -0
  320. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
  321. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -0
  322. package/dist/src/tiles/overlay/text-overlay.js +74 -0
  323. package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
  324. package/dist/src/tiles/review-block.d.ts +12 -0
  325. package/dist/src/tiles/review-block.js +134 -0
  326. package/dist/src/tiles/review-block.js.map +1 -0
  327. package/dist/src/tiles/text-snippet-block.d.ts +27 -0
  328. package/dist/src/tiles/text-snippet-block.js +132 -0
  329. package/dist/src/tiles/text-snippet-block.js.map +1 -0
  330. package/dist/src/tiles/tile-dispatcher.d.ts +71 -0
  331. package/dist/src/tiles/tile-dispatcher.js +472 -0
  332. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  333. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -0
  334. package/dist/src/tiles/tile-display-value-provider.js +95 -0
  335. package/dist/src/tiles/tile-display-value-provider.js.map +1 -0
  336. package/dist/src/tiles/tile-mediatype-icon.d.ts +27 -0
  337. package/dist/src/tiles/tile-mediatype-icon.js +130 -0
  338. package/dist/src/tiles/tile-mediatype-icon.js.map +1 -0
  339. package/dist/src/utils/analytics-events.d.ts +28 -0
  340. package/dist/src/utils/analytics-events.js +31 -0
  341. package/dist/src/utils/analytics-events.js.map +1 -0
  342. package/dist/src/utils/array-equals.d.ts +4 -0
  343. package/dist/src/utils/array-equals.js +11 -0
  344. package/dist/src/utils/array-equals.js.map +1 -0
  345. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -0
  346. package/dist/src/utils/collapse-repeated-quotes.js +14 -0
  347. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -0
  348. package/dist/src/utils/facet-utils.d.ts +83 -0
  349. package/dist/src/utils/facet-utils.js +152 -0
  350. package/dist/src/utils/facet-utils.js.map +1 -0
  351. package/dist/src/utils/format-count.d.ts +7 -0
  352. package/dist/src/utils/format-count.js +76 -0
  353. package/dist/src/utils/format-count.js.map +1 -0
  354. package/dist/src/utils/format-date.d.ts +16 -0
  355. package/dist/src/utils/format-date.js +33 -0
  356. package/dist/src/utils/format-date.js.map +1 -0
  357. package/dist/src/utils/format-unit-size.d.ts +2 -0
  358. package/dist/src/utils/format-unit-size.js +34 -0
  359. package/dist/src/utils/format-unit-size.js.map +1 -0
  360. package/dist/src/utils/local-date-from-utc.d.ts +9 -0
  361. package/dist/src/utils/local-date-from-utc.js +16 -0
  362. package/dist/src/utils/local-date-from-utc.js.map +1 -0
  363. package/dist/src/utils/log.d.ts +7 -0
  364. package/dist/src/utils/log.js +14 -0
  365. package/dist/src/utils/log.js.map +1 -0
  366. package/dist/src/utils/resolve-mediatype.d.ts +8 -0
  367. package/dist/src/utils/resolve-mediatype.js +24 -0
  368. package/dist/src/utils/resolve-mediatype.js.map +1 -0
  369. package/dist/src/utils/sha1.d.ts +2 -0
  370. package/dist/src/utils/sha1.js +9 -0
  371. package/dist/src/utils/sha1.js.map +1 -0
  372. package/dist/test/collection-browser.test.d.ts +1 -0
  373. package/dist/test/collection-browser.test.js +1721 -0
  374. package/dist/test/collection-browser.test.js.map +1 -0
  375. package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
  376. package/dist/test/collection-facets/facet-row.test.js +274 -0
  377. package/dist/test/collection-facets/facet-row.test.js.map +1 -0
  378. package/dist/test/collection-facets/facets-template.test.d.ts +1 -0
  379. package/dist/test/collection-facets/facets-template.test.js +101 -0
  380. package/dist/test/collection-facets/facets-template.test.js.map +1 -0
  381. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
  382. package/dist/test/collection-facets/more-facets-content.test.js +169 -0
  383. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
  384. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
  385. package/dist/test/collection-facets/more-facets-pagination.test.js +132 -0
  386. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
  387. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -0
  388. package/dist/test/collection-facets/toggle-switch.test.js +96 -0
  389. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -0
  390. package/dist/test/collection-facets.test.d.ts +2 -0
  391. package/dist/test/collection-facets.test.js +745 -0
  392. package/dist/test/collection-facets.test.js.map +1 -0
  393. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -0
  394. package/dist/test/data-source/collection-browser-data-source.test.js +102 -0
  395. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -0
  396. package/dist/test/empty-placeholder.test.d.ts +1 -0
  397. package/dist/test/empty-placeholder.test.js +63 -0
  398. package/dist/test/empty-placeholder.test.js.map +1 -0
  399. package/dist/test/expanded-date-picker.test.d.ts +1 -0
  400. package/dist/test/expanded-date-picker.test.js +130 -0
  401. package/dist/test/expanded-date-picker.test.js.map +1 -0
  402. package/dist/test/icon-overlay.test.d.ts +1 -0
  403. package/dist/test/icon-overlay.test.js +30 -0
  404. package/dist/test/icon-overlay.test.js.map +1 -0
  405. package/dist/test/image-block.test.d.ts +1 -0
  406. package/dist/test/image-block.test.js +218 -0
  407. package/dist/test/image-block.test.js.map +1 -0
  408. package/dist/test/item-image.test.d.ts +1 -0
  409. package/dist/test/item-image.test.js +196 -0
  410. package/dist/test/item-image.test.js.map +1 -0
  411. package/dist/test/manage/manage-bar.test.d.ts +2 -0
  412. package/dist/test/manage/manage-bar.test.js +106 -0
  413. package/dist/test/manage/manage-bar.test.js.map +1 -0
  414. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -0
  415. package/dist/test/manage/remove-items-modal-content.test.js +65 -0
  416. package/dist/test/manage/remove-items-modal-content.test.js.map +1 -0
  417. package/dist/test/mediatype-config.test.d.ts +1 -0
  418. package/dist/test/mediatype-config.test.js +11 -0
  419. package/dist/test/mediatype-config.test.js.map +1 -0
  420. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -0
  421. package/dist/test/mocks/mock-analytics-handler.js +16 -0
  422. package/dist/test/mocks/mock-analytics-handler.js.map +1 -0
  423. package/dist/test/mocks/mock-search-responses.d.ts +31 -0
  424. package/dist/test/mocks/mock-search-responses.js +1241 -0
  425. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  426. package/dist/test/mocks/mock-search-service.d.ts +16 -0
  427. package/dist/test/mocks/mock-search-service.js +65 -0
  428. package/dist/test/mocks/mock-search-service.js.map +1 -0
  429. package/dist/test/restoration-state-handler.test.d.ts +1 -0
  430. package/dist/test/restoration-state-handler.test.js +343 -0
  431. package/dist/test/restoration-state-handler.test.js.map +1 -0
  432. package/dist/test/review-block.test.d.ts +1 -0
  433. package/dist/test/review-block.test.js +48 -0
  434. package/dist/test/review-block.test.js.map +1 -0
  435. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -0
  436. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +13 -0
  437. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -0
  438. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -0
  439. package/dist/test/sort-filter-bar/alpha-bar.test.js +74 -0
  440. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -0
  441. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -0
  442. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +609 -0
  443. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -0
  444. package/dist/test/text-overlay.test.d.ts +1 -0
  445. package/dist/test/text-overlay.test.js +42 -0
  446. package/dist/test/text-overlay.test.js.map +1 -0
  447. package/dist/test/text-snippet-block.test.d.ts +1 -0
  448. package/dist/test/text-snippet-block.test.js +63 -0
  449. package/dist/test/text-snippet-block.test.js.map +1 -0
  450. package/dist/test/tile-stats.test.d.ts +1 -0
  451. package/dist/test/tile-stats.test.js +128 -0
  452. package/dist/test/tile-stats.test.js.map +1 -0
  453. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -0
  454. package/dist/test/tiles/grid/account-tile.test.js +96 -0
  455. package/dist/test/tiles/grid/account-tile.test.js.map +1 -0
  456. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -0
  457. package/dist/test/tiles/grid/collection-tile.test.js +96 -0
  458. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -0
  459. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  460. package/dist/test/tiles/grid/item-tile.test.js +427 -0
  461. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  462. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -0
  463. package/dist/test/tiles/grid/search-tile.test.js +66 -0
  464. package/dist/test/tiles/grid/search-tile.test.js.map +1 -0
  465. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -0
  466. package/dist/test/tiles/hover/hover-pane-controller.test.js +329 -0
  467. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -0
  468. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -0
  469. package/dist/test/tiles/hover/tile-hover-pane.test.js +57 -0
  470. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -0
  471. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -0
  472. package/dist/test/tiles/list/tile-list-compact.test.js +251 -0
  473. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -0
  474. package/dist/test/tiles/list/tile-list.test.d.ts +1 -0
  475. package/dist/test/tiles/list/tile-list.test.js +469 -0
  476. package/dist/test/tiles/list/tile-list.test.js.map +1 -0
  477. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -0
  478. package/dist/test/tiles/tile-dispatcher.test.js +231 -0
  479. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -0
  480. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -0
  481. package/dist/test/tiles/tile-display-value-provider.test.js +142 -0
  482. package/dist/test/tiles/tile-display-value-provider.test.js.map +1 -0
  483. package/dist/test/tiles/tile-mediatype-icon.test.d.ts +1 -0
  484. package/dist/test/tiles/tile-mediatype-icon.test.js +145 -0
  485. package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -0
  486. package/dist/test/utils/array-equals.test.d.ts +1 -0
  487. package/dist/test/utils/array-equals.test.js +27 -0
  488. package/dist/test/utils/array-equals.test.js.map +1 -0
  489. package/dist/test/utils/format-count.test.d.ts +1 -0
  490. package/dist/test/utils/format-count.test.js +24 -0
  491. package/dist/test/utils/format-count.test.js.map +1 -0
  492. package/dist/test/utils/format-date.test.d.ts +1 -0
  493. package/dist/test/utils/format-date.test.js +61 -0
  494. package/dist/test/utils/format-date.test.js.map +1 -0
  495. package/dist/test/utils/format-unit-size.test.d.ts +1 -0
  496. package/dist/test/utils/format-unit-size.test.js +18 -0
  497. package/dist/test/utils/format-unit-size.test.js.map +1 -0
  498. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -0
  499. package/dist/test/utils/local-date-from-utc.test.js +27 -0
  500. package/dist/test/utils/local-date-from-utc.test.js.map +1 -0
  501. package/eslint.config.mjs +53 -53
  502. package/index.html +24 -24
  503. package/local.archive.org.cert +86 -86
  504. package/local.archive.org.key +27 -27
  505. package/package.json +118 -117
  506. package/renovate.json +6 -6
  507. package/src/collection-browser.ts +2954 -2829
  508. package/src/collection-facets/facet-row.ts +299 -296
  509. package/src/collection-facets/models.ts +10 -10
  510. package/src/collection-facets/more-facets-content.ts +639 -639
  511. package/src/collection-facets.ts +1005 -995
  512. package/src/data-source/collection-browser-data-source-interface.ts +345 -333
  513. package/src/data-source/collection-browser-data-source.ts +1441 -1401
  514. package/src/data-source/collection-browser-query-state.ts +59 -65
  515. package/src/data-source/models.ts +56 -43
  516. package/src/manage/manage-bar.ts +247 -247
  517. package/src/models.ts +866 -870
  518. package/src/restoration-state-handler.ts +542 -544
  519. package/src/tiles/base-tile-component.ts +65 -65
  520. package/src/tiles/grid/account-tile.ts +113 -113
  521. package/src/tiles/grid/collection-tile.ts +163 -163
  522. package/src/tiles/grid/item-tile.ts +340 -340
  523. package/src/tiles/grid/search-tile.ts +90 -90
  524. package/src/tiles/grid/styles/tile-grid-shared-styles.ts +130 -130
  525. package/src/tiles/hover/hover-pane-controller.ts +613 -517
  526. package/src/tiles/hover/tile-hover-pane.ts +184 -180
  527. package/src/tiles/list/tile-list-compact.ts +239 -239
  528. package/src/tiles/list/tile-list.ts +700 -700
  529. package/src/tiles/tile-dispatcher.ts +517 -490
  530. package/src/utils/format-date.ts +62 -62
  531. package/test/collection-browser.test.ts +2413 -2403
  532. package/test/collection-facets/facet-row.test.ts +375 -375
  533. package/test/collection-facets.test.ts +928 -928
  534. package/test/restoration-state-handler.test.ts +480 -510
  535. package/test/tiles/grid/item-tile.test.ts +520 -520
  536. package/test/tiles/hover/hover-pane-controller.test.ts +418 -353
  537. package/test/tiles/list/tile-list-compact.test.ts +282 -282
  538. package/test/tiles/list/tile-list.test.ts +552 -552
  539. package/test/tiles/tile-dispatcher.test.ts +283 -187
  540. package/test/utils/format-date.test.ts +89 -89
  541. package/tsconfig.json +20 -20
  542. package/web-dev-server.config.mjs +30 -30
  543. package/web-test-runner.config.mjs +41 -41
@@ -0,0 +1,1161 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css, nothing, } from 'lit';
3
+ import { customElement, property, query, state } from 'lit/decorators.js';
4
+ import { msg } from '@lit/localize';
5
+ import '@internetarchive/ia-dropdown';
6
+ import { ALL_DATE_SORT_FIELDS, ALL_VIEWS_SORT_FIELDS, defaultSortAvailability, SORT_OPTIONS, SortField, } from '../models';
7
+ import './alpha-bar';
8
+ import { sortUpIcon } from './img/sort-toggle-up';
9
+ import { sortDownIcon } from './img/sort-toggle-down';
10
+ import { sortDisabledIcon } from './img/sort-toggle-disabled';
11
+ import { tileIcon } from './img/tile';
12
+ import { listIcon } from './img/list';
13
+ import { compactIcon } from './img/compact';
14
+ import { srOnlyStyle } from '../styles/sr-only';
15
+ let SortFilterBar = class SortFilterBar extends LitElement {
16
+ constructor() {
17
+ super(...arguments);
18
+ /** The default sort direction to use if none is set */
19
+ this.defaultSortDirection = null;
20
+ /** The default sort field to use if none is set */
21
+ this.defaultSortField = SortField.relevance;
22
+ /** Which view sort option to expose by default. */
23
+ this.defaultViewSort = SortField.weeklyview;
24
+ /** Which date sort option to expose by default */
25
+ this.defaultDateSort = SortField.date;
26
+ /** The current sort direction (asc/desc), or null if none is set */
27
+ this.sortDirection = null;
28
+ /** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
29
+ this.selectedSort = SortField.default;
30
+ /** The currently selected title letter filter, or null if none is set */
31
+ this.selectedTitleFilter = null;
32
+ /** The currently selected creator letter filter, or null if none is set */
33
+ this.selectedCreatorFilter = null;
34
+ /**
35
+ * Map defining which sortable fields should be included on the sort bar.
36
+ *
37
+ * E.g.,
38
+ * ```
39
+ * {
40
+ * [SortField.relevance]: true,
41
+ * [SortField.date]: false,
42
+ * [SortField.title]: true,
43
+ * ...
44
+ * }
45
+ * ```
46
+ */
47
+ this.sortFieldAvailability = defaultSortAvailability;
48
+ /** Whether to replace the default sort options with a slot for customization (default `false`) */
49
+ this.enableSortOptionsSlot = false;
50
+ /** Whether to suppress showing the three display mode options on the right of the bar (default `false`) */
51
+ this.suppressDisplayModes = false;
52
+ /**
53
+ * The Views sort option that was most recently selected (or the default, if none has been selected yet)
54
+ */
55
+ this.lastSelectedViewSort = this.defaultViewSort;
56
+ /**
57
+ * The Date sort option that was most recently selected (or the default, if none has been selected yet)
58
+ */
59
+ this.lastSelectedDateSort = this.defaultDateSort;
60
+ /**
61
+ * Which of the alphabet bars (title/creator) should be shown, or null if one
62
+ * should not currently be rendered.
63
+ */
64
+ this.alphaSelectorVisible = null;
65
+ /**
66
+ * Whether the transparent backdrop to catch clicks outside the dropdown menu
67
+ * should be rendered.
68
+ */
69
+ this.dropdownBackdropVisible = false;
70
+ /**
71
+ * The width of the desktop view sort option container, updated upon each resize.
72
+ * Used for dynamically determining whether to use desktop or mobile view.
73
+ */
74
+ this.desktopSortContainerWidth = 0;
75
+ /**
76
+ * The width of the full sort bar, updated upon each resize.
77
+ * Used for dynamically determining whether to use desktop or mobile view.
78
+ */
79
+ this.selectorBarContainerWidth = 0;
80
+ this.boundSortBarSelectorEscapeListener = (e) => {
81
+ if (e.key === 'Escape') {
82
+ this.closeDropdowns();
83
+ }
84
+ };
85
+ }
86
+ render() {
87
+ return html `
88
+ <div id="container">
89
+ <section id="sort-bar" aria-label="Sorting options">
90
+ <slot name="sort-options-left"></slot>
91
+ <div id="sort-options">
92
+ ${!this.enableSortOptionsSlot
93
+ ? html `
94
+ <div class="sort-direction-container">
95
+ ${this.sortDirectionSelectorTemplate}
96
+ </div>
97
+ <span class="sort-by-text">${msg('Sort by:')}</span>
98
+ <div id="sort-selector-container">
99
+ ${this.mobileSortSelectorTemplate}
100
+ ${this.desktopSortSelectorTemplate}
101
+ </div>
102
+ `
103
+ : html `<slot name="sort-options"></slot>`}
104
+ </div>
105
+ <slot name="sort-options-right"></slot>
106
+
107
+ ${this.suppressDisplayModes
108
+ ? nothing
109
+ : html `<div id="display-style-selector">
110
+ ${this.displayOptionTemplate}
111
+ </div>`}
112
+ </section>
113
+
114
+ ${this.dropdownBackdropVisible ? this.dropdownBackdrop : nothing}
115
+ ${this.alphaBarTemplate}
116
+ </div>
117
+ `;
118
+ }
119
+ willUpdate(changed) {
120
+ if (changed.has('selectedSort') || changed.has('defaultSortField')) {
121
+ // If the sort is changed from its default without a direction set,
122
+ // we adopt the default sort direction for that sort type.
123
+ if (this.selectedSort &&
124
+ this.selectedSort !== SortField.default &&
125
+ this.sortDirection === null) {
126
+ const sortOption = SORT_OPTIONS[this.finalizedSortField];
127
+ this.sortDirection = sortOption.defaultSortDirection;
128
+ }
129
+ if (this.viewOptionSelected) {
130
+ this.lastSelectedViewSort = this.finalizedSortField;
131
+ }
132
+ else if (this.dateOptionSelected) {
133
+ this.lastSelectedDateSort = this.finalizedSortField;
134
+ }
135
+ }
136
+ // If we change which dropdown options are defaulted, update the default selections
137
+ if (changed.has('defaultViewSort')) {
138
+ this.lastSelectedViewSort = this.defaultViewSort;
139
+ }
140
+ if (changed.has('defaultDateSort')) {
141
+ this.lastSelectedDateSort = this.defaultDateSort;
142
+ }
143
+ }
144
+ updated(changed) {
145
+ if (changed.has('displayMode')) {
146
+ this.displayModeChanged();
147
+ }
148
+ if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
149
+ this.alphaSelectorVisible = 'title';
150
+ }
151
+ if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
152
+ this.alphaSelectorVisible = 'creator';
153
+ }
154
+ if (changed.has('dropdownBackdropVisible')) {
155
+ this.setupEscapeListeners();
156
+ }
157
+ if (changed.has('resizeObserver') || changed.has('enableSortOptionsSlot')) {
158
+ const oldObserver = changed.get('resizeObserver');
159
+ if (oldObserver)
160
+ this.disconnectResizeObserver(oldObserver);
161
+ this.setupResizeObserver();
162
+ }
163
+ }
164
+ setupEscapeListeners() {
165
+ if (this.dropdownBackdropVisible) {
166
+ document.addEventListener('keydown', this.boundSortBarSelectorEscapeListener);
167
+ }
168
+ else {
169
+ document.removeEventListener('keydown', this.boundSortBarSelectorEscapeListener);
170
+ }
171
+ }
172
+ connectedCallback() {
173
+ var _a;
174
+ (_a = super.connectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
175
+ this.setupResizeObserver();
176
+ }
177
+ disconnectedCallback() {
178
+ if (this.resizeObserver) {
179
+ this.disconnectResizeObserver(this.resizeObserver);
180
+ }
181
+ }
182
+ disconnectResizeObserver(resizeObserver) {
183
+ if (this.sortSelectorContainer) {
184
+ resizeObserver.removeObserver({
185
+ target: this.sortSelectorContainer,
186
+ handler: this,
187
+ });
188
+ }
189
+ if (this.desktopSortContainer) {
190
+ resizeObserver.removeObserver({
191
+ target: this.desktopSortContainer,
192
+ handler: this,
193
+ });
194
+ }
195
+ }
196
+ setupResizeObserver() {
197
+ if (!this.resizeObserver)
198
+ return;
199
+ if (this.sortSelectorContainer) {
200
+ this.resizeObserver.addObserver({
201
+ target: this.sortSelectorContainer,
202
+ handler: this,
203
+ });
204
+ }
205
+ if (this.desktopSortContainer) {
206
+ this.resizeObserver.addObserver({
207
+ target: this.desktopSortContainer,
208
+ handler: this,
209
+ });
210
+ }
211
+ }
212
+ handleResize(entry) {
213
+ if (entry.target === this.desktopSortContainer) {
214
+ this.desktopSortContainerWidth = entry.contentRect.width;
215
+ }
216
+ else if (entry.target === this.sortSelectorContainer) {
217
+ this.selectorBarContainerWidth = entry.contentRect.width;
218
+ }
219
+ }
220
+ /**
221
+ * Whether to show the mobile sort bar because there is not enough space
222
+ * for the desktop sort bar.
223
+ */
224
+ get mobileSelectorVisible() {
225
+ return this.selectorBarContainerWidth - 10 < this.desktopSortContainerWidth;
226
+ }
227
+ /**
228
+ * Template to render the alphabet bar, or `nothing` if it should not be rendered
229
+ * for the current sort
230
+ */
231
+ get alphaBarTemplate() {
232
+ if (!['title', 'creator'].includes(this.selectedSort))
233
+ return nothing;
234
+ if (this.alphaSelectorVisible === null) {
235
+ if (this.selectedSort === 'creator')
236
+ return this.creatorSelectorBar;
237
+ if (this.selectedSort === 'title')
238
+ return this.titleSelectorBar;
239
+ }
240
+ else {
241
+ return this.alphaSelectorVisible === 'creator'
242
+ ? this.creatorSelectorBar
243
+ : this.titleSelectorBar;
244
+ }
245
+ return nothing;
246
+ }
247
+ /** Template to render the sort direction toggle button */
248
+ get sortDirectionSelectorTemplate() {
249
+ const oppositeSortDirectionReadable = this.sortDirection === 'asc' ? 'descending' : 'ascending';
250
+ const srLabel = `Change to ${oppositeSortDirectionReadable} sort`;
251
+ return html `
252
+ <button
253
+ class="sort-direction-selector"
254
+ ?disabled=${!this.canChangeSortDirection}
255
+ @click=${this.handleSortDirectionClicked}
256
+ >
257
+ <span class="sr-only">${srLabel}</span>
258
+ ${this.sortDirectionIcon}
259
+ </button>
260
+ `;
261
+ }
262
+ /** Template to render the sort direction button's icon in the correct current state */
263
+ get sortDirectionIcon() {
264
+ // Show a fully disabled icon for sort options without direction support
265
+ if (!this.canChangeSortDirection) {
266
+ return html `<div class="sort-direction-icon">${sortDisabledIcon}</div>`;
267
+ }
268
+ // For all other sorts, show the ascending/descending direction
269
+ return html `
270
+ <div class="sort-direction-icon">
271
+ ${this.finalizedSortDirection === 'asc' ? sortUpIcon : sortDownIcon}
272
+ </div>
273
+ `;
274
+ }
275
+ /** The template to render all the sort options in desktop view */
276
+ get desktopSortSelectorTemplate() {
277
+ return html `
278
+ <div
279
+ id="desktop-sort-container"
280
+ class=${this.mobileSelectorVisible ? 'hidden' : 'visible'}
281
+ >
282
+ <ul id="desktop-sort-selector">
283
+ <li>${this.relevanceSortSelectorTemplate}</li>
284
+ <li>${this.allViewsSortOptionsTemplate}</li>
285
+ <li>${this.titleSortSelectorTemplate}</li>
286
+ <li>${this.allDateSortOptionsTemplate}</li>
287
+ <li>${this.creatorSortSelectorTemplate}</li>
288
+ </ul>
289
+ </div>
290
+ `;
291
+ }
292
+ /** The template to render all the sort options in mobile view */
293
+ get mobileSortSelectorTemplate() {
294
+ const displayedOptions = Object.values(SORT_OPTIONS).filter(opt => opt.shownInSortBar && this.sortFieldAvailability[opt.field]);
295
+ return html `
296
+ <div
297
+ id="mobile-sort-container"
298
+ class=${this.mobileSelectorVisible ? 'visible' : 'hidden'}
299
+ >
300
+ ${this.getSortDropdown({
301
+ displayName: SORT_OPTIONS[this.finalizedSortField].displayName,
302
+ id: 'mobile-dropdown',
303
+ selected: true,
304
+ dropdownOptions: displayedOptions.map(opt => this.getDropdownOption(opt.field)),
305
+ selectedOption: this.finalizedSortField,
306
+ onOptionSelected: this.mobileSortChanged,
307
+ onDropdownClick: () => {
308
+ this.dropdownBackdropVisible = this.mobileDropdown.open;
309
+ this.mobileDropdown.classList.toggle('open', this.mobileDropdown.open);
310
+ },
311
+ })}
312
+ </div>
313
+ `;
314
+ }
315
+ /**
316
+ * This generates each of the non-dropdown sort option buttons.
317
+ *
318
+ * It manages the display value and the selected state of the option.
319
+ *
320
+ * @param sortField Which sort field the button represents
321
+ * @param options Additional options:
322
+ * - `onSelected?: (e: Event) => void;` If this is provided, it will also be called when the option is selected.
323
+ * Default is to clear any selected alphabetical filters.
324
+ */
325
+ getSortSelectorButton(sortField, options) {
326
+ var _a;
327
+ const isSelected = this.finalizedSortField === sortField;
328
+ const displayName = SORT_OPTIONS[sortField].displayName;
329
+ const onSelected = (_a = options === null || options === void 0 ? void 0 : options.onSelected) !== null && _a !== void 0 ? _a : (() => this.clearAlphaBarFilters());
330
+ return html `
331
+ <button
332
+ class=${isSelected ? 'selected' : ''}
333
+ data-title=${displayName}
334
+ @click=${(e) => {
335
+ e.preventDefault();
336
+ this.dropdownBackdropVisible = false;
337
+ if (this.finalizedSortField !== sortField) {
338
+ onSelected === null || onSelected === void 0 ? void 0 : onSelected(e);
339
+ this.setSelectedSort(sortField);
340
+ }
341
+ }}
342
+ >
343
+ ${displayName}
344
+ </button>
345
+ `;
346
+ }
347
+ /**
348
+ * Generates a dropdown component containing multiple grouped sort options.
349
+ *
350
+ * @param options.displayName The name to use for the dropdown's visible label
351
+ * @param options.id The id to apply to the dropdown element
352
+ * @param options.dropdownOptions An array of option objects used to populate the dropdown
353
+ * @param options.selectedOption The id of the option that should be initially selected
354
+ * @param options.selected A boolean indicating whether this dropdown should use its
355
+ * selected appearance
356
+ * @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
357
+ * @param options.onDropdownClick A handler for click events on the dropdown
358
+ * @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
359
+ * on the dropdown's label
360
+ */
361
+ getSortDropdown(options) {
362
+ var _a, _b, _c, _d;
363
+ return html `
364
+ <ia-dropdown
365
+ id=${options.id}
366
+ class=${options.selected ? 'selected' : ''}
367
+ displayCaret
368
+ closeOnSelect
369
+ includeSelectedOption
370
+ .openViaButton=${options.selected}
371
+ .options=${options.dropdownOptions}
372
+ .selectedOption=${(_a = options.selectedOption) !== null && _a !== void 0 ? _a : ''}
373
+ @optionSelected=${(_b = options.onOptionSelected) !== null && _b !== void 0 ? _b : nothing}
374
+ @click=${(_c = options.onDropdownClick) !== null && _c !== void 0 ? _c : nothing}
375
+ >
376
+ <span
377
+ class="dropdown-label"
378
+ slot="dropdown-label"
379
+ data-title=${options.displayName}
380
+ @click=${(_d = options.onLabelInteraction) !== null && _d !== void 0 ? _d : nothing}
381
+ @keydown=${options.onLabelInteraction
382
+ ? (e) => {
383
+ var _a;
384
+ if (e.key === 'Enter' || e.key === ' ') {
385
+ (_a = options.onLabelInteraction) === null || _a === void 0 ? void 0 : _a.call(options, e);
386
+ }
387
+ }
388
+ : nothing}
389
+ >
390
+ ${options.displayName}
391
+ </span>
392
+ </ia-dropdown>
393
+ `;
394
+ }
395
+ /** Generates a single dropdown option object for the given sort field */
396
+ getDropdownOption(sortField) {
397
+ return {
398
+ id: sortField,
399
+ selectedHandler: () => {
400
+ this.selectDropdownSortField(sortField);
401
+ },
402
+ label: html `
403
+ <span class="dropdown-option-label">
404
+ ${SORT_OPTIONS[sortField].displayName}
405
+ </span>
406
+ `,
407
+ };
408
+ }
409
+ /** Handler for when any sort dropdown option is selected */
410
+ dropdownOptionSelected(e) {
411
+ this.dropdownBackdropVisible = false;
412
+ this.clearAlphaBarFilters();
413
+ const sortField = e.detail.option.id;
414
+ this.setSelectedSort(sortField);
415
+ if (this.viewOptionSelected) {
416
+ this.lastSelectedViewSort = sortField;
417
+ }
418
+ else if (this.dateOptionSelected) {
419
+ this.lastSelectedDateSort = sortField;
420
+ }
421
+ }
422
+ //
423
+ // SORT OPTION TEMPLATES
424
+ //
425
+ /**
426
+ * Template for the Relevance sort selector button, or `nothing` if the relevance
427
+ * field is not available for display.
428
+ */
429
+ get relevanceSortSelectorTemplate() {
430
+ if (!this.sortFieldAvailability.relevance)
431
+ return nothing;
432
+ return this.getSortSelectorButton(SortField.relevance);
433
+ }
434
+ /**
435
+ * Template for the Views sort selector button.
436
+ * This is shown instead of the views dropdown when only a single views sort field
437
+ * is available.
438
+ */
439
+ get viewsSortSelectorTemplate() {
440
+ const { availableViewsFields } = this;
441
+ if (availableViewsFields.length < 1)
442
+ return nothing;
443
+ return this.getSortSelectorButton(availableViewsFields[0]);
444
+ }
445
+ /**
446
+ * Template for the Title sort selector button, or `nothing` if the title field is
447
+ * not available for display.
448
+ */
449
+ get titleSortSelectorTemplate() {
450
+ if (!this.sortFieldAvailability.title)
451
+ return nothing;
452
+ return this.getSortSelectorButton(SortField.title, {
453
+ onSelected: () => {
454
+ this.alphaSelectorVisible = 'title';
455
+ this.selectedCreatorFilter = null;
456
+ this.emitCreatorLetterChangedEvent();
457
+ },
458
+ });
459
+ }
460
+ /**
461
+ * Template for the Date sort selector button.
462
+ * This is shown instead of the dates dropdown when only a single date sort field
463
+ * is available.
464
+ */
465
+ get dateSortSelectorTemplate() {
466
+ const { availableDateFields } = this;
467
+ if (availableDateFields.length < 1)
468
+ return nothing;
469
+ return this.getSortSelectorButton(availableDateFields[0]);
470
+ }
471
+ /**
472
+ * Template for the Creator sort selector button, or `nothing` if the creator field
473
+ * is not available for display.
474
+ */
475
+ get creatorSortSelectorTemplate() {
476
+ if (!this.sortFieldAvailability.creator)
477
+ return nothing;
478
+ return this.getSortSelectorButton(SortField.creator, {
479
+ onSelected: () => {
480
+ this.alphaSelectorVisible = 'creator';
481
+ this.selectedTitleFilter = null;
482
+ this.emitTitleLetterChangedEvent();
483
+ },
484
+ });
485
+ }
486
+ /**
487
+ * Template for the Views dropdown, shown when 2+ views sort fields are available.
488
+ */
489
+ get viewsDropdownTemplate() {
490
+ const displayedOptions = ALL_VIEWS_SORT_FIELDS.filter(field => this.sortFieldAvailability[field]).map(field => this.getDropdownOption(field));
491
+ return this.getSortDropdown({
492
+ displayName: this.viewSortDisplayName,
493
+ id: 'views-dropdown',
494
+ selected: this.viewOptionSelected,
495
+ dropdownOptions: displayedOptions,
496
+ selectedOption: this.viewOptionSelected ? this.finalizedSortField : '',
497
+ onOptionSelected: this.dropdownOptionSelected,
498
+ onDropdownClick: () => {
499
+ if (this.dateDropdown)
500
+ this.dateDropdown.open = false;
501
+ const viewsDropdown = this.viewsDropdown;
502
+ this.dropdownBackdropVisible = viewsDropdown.open;
503
+ viewsDropdown.classList.toggle('open', viewsDropdown.open);
504
+ },
505
+ onLabelInteraction: (e) => {
506
+ var _a;
507
+ if (!((_a = this.viewsDropdown) === null || _a === void 0 ? void 0 : _a.open) && !this.viewOptionSelected) {
508
+ e.stopPropagation();
509
+ this.clearAlphaBarFilters();
510
+ this.setSelectedSort(this.lastSelectedViewSort);
511
+ }
512
+ },
513
+ });
514
+ }
515
+ /**
516
+ * Template for the Date dropdown, shown when 2+ date sort fields are available.
517
+ */
518
+ get dateDropdownTemplate() {
519
+ const displayedOptions = ALL_DATE_SORT_FIELDS.filter(field => this.sortFieldAvailability[field]).map(field => this.getDropdownOption(field));
520
+ return this.getSortDropdown({
521
+ displayName: this.dateSortDisplayName,
522
+ id: 'date-dropdown',
523
+ selected: this.dateOptionSelected,
524
+ dropdownOptions: displayedOptions,
525
+ selectedOption: this.dateOptionSelected ? this.finalizedSortField : '',
526
+ onOptionSelected: this.dropdownOptionSelected,
527
+ onDropdownClick: () => {
528
+ if (this.viewsDropdown)
529
+ this.viewsDropdown.open = false;
530
+ const dateDropdown = this.dateDropdown;
531
+ this.dropdownBackdropVisible = dateDropdown.open;
532
+ dateDropdown.classList.toggle('open', dateDropdown.open);
533
+ },
534
+ onLabelInteraction: (e) => {
535
+ var _a;
536
+ if (!((_a = this.dateDropdown) === null || _a === void 0 ? void 0 : _a.open) && !this.dateOptionSelected) {
537
+ e.stopPropagation();
538
+ this.clearAlphaBarFilters();
539
+ this.setSelectedSort(this.lastSelectedDateSort);
540
+ }
541
+ },
542
+ });
543
+ }
544
+ /**
545
+ * Provides the appropriate template to use for Views sorting, depending on how many
546
+ * views sort fields are available.
547
+ */
548
+ get allViewsSortOptionsTemplate() {
549
+ const numViewsSortOptions = this.availableViewsFields.length;
550
+ switch (numViewsSortOptions) {
551
+ case 0:
552
+ return nothing;
553
+ case 1:
554
+ return this.viewsSortSelectorTemplate;
555
+ default:
556
+ return this.viewsDropdownTemplate;
557
+ }
558
+ }
559
+ /**
560
+ * Provides the appropriate template to use for Date sorting, depending on how many
561
+ * date sort fields are available.
562
+ */
563
+ get allDateSortOptionsTemplate() {
564
+ const numDateSortOptions = this.availableDateFields.length;
565
+ switch (numDateSortOptions) {
566
+ case 0:
567
+ return nothing;
568
+ case 1:
569
+ return this.dateSortSelectorTemplate;
570
+ default:
571
+ return this.dateDropdownTemplate;
572
+ }
573
+ }
574
+ /** Handler for when a new mobile sort dropdown option is selected */
575
+ mobileSortChanged(e) {
576
+ this.dropdownBackdropVisible = false;
577
+ const sortField = e.detail.option.id;
578
+ this.setSelectedSort(sortField);
579
+ this.alphaSelectorVisible = null;
580
+ if (sortField !== 'title' && this.selectedTitleFilter) {
581
+ this.selectedTitleFilter = null;
582
+ this.emitTitleLetterChangedEvent();
583
+ }
584
+ if (sortField !== 'creator' && this.selectedCreatorFilter) {
585
+ this.selectedCreatorFilter = null;
586
+ this.emitCreatorLetterChangedEvent();
587
+ }
588
+ }
589
+ /** Template for rendering the three display mode options */
590
+ /** Added data-testid for Playwright testing * */
591
+ get displayOptionTemplate() {
592
+ return html `
593
+ <ul>
594
+ <li>
595
+ <button
596
+ id="grid-button"
597
+ @click=${() => {
598
+ this.displayMode = 'grid';
599
+ }}
600
+ class=${this.displayMode === 'grid' ? 'active' : ''}
601
+ title="Tile view"
602
+ data-testid="grid-button"
603
+ >
604
+ ${tileIcon}
605
+ </button>
606
+ </li>
607
+ <li>
608
+ <button
609
+ id="list-detail-button"
610
+ @click=${() => {
611
+ this.displayMode = 'list-detail';
612
+ }}
613
+ class=${this.displayMode === 'list-detail' ? 'active' : ''}
614
+ title="List view"
615
+ data-testid="list-detail-button"
616
+ >
617
+ ${listIcon}
618
+ </button>
619
+ </li>
620
+ <li>
621
+ <button
622
+ id="list-compact-button"
623
+ @click=${() => {
624
+ this.displayMode = 'list-compact';
625
+ }}
626
+ class=${this.displayMode === 'list-compact' ? 'active' : ''}
627
+ title="Compact list view"
628
+ data-testid="list-compact-button"
629
+ >
630
+ ${compactIcon}
631
+ </button>
632
+ </li>
633
+ </ul>
634
+ `;
635
+ }
636
+ /**
637
+ * Template for rendering the transparent backdrop to capture clicks outside the
638
+ * dropdown menu while it is open.
639
+ */
640
+ get dropdownBackdrop() {
641
+ return html `
642
+ <div
643
+ id="sort-selector-backdrop"
644
+ @keyup=${this.closeDropdowns}
645
+ @click=${this.closeDropdowns}
646
+ ></div>
647
+ `;
648
+ }
649
+ /** Closes all of the sorting dropdown components' menus */
650
+ closeDropdowns() {
651
+ this.dropdownBackdropVisible = false;
652
+ const allDropdowns = [
653
+ this.viewsDropdown,
654
+ this.dateDropdown,
655
+ this.mobileDropdown,
656
+ ];
657
+ for (const dropdown of allDropdowns) {
658
+ if (!dropdown)
659
+ continue;
660
+ dropdown.open = false;
661
+ dropdown.classList.remove('open');
662
+ }
663
+ }
664
+ selectDropdownSortField(sortField) {
665
+ // When a dropdown sort option is selected, we additionally need to clear the backdrop
666
+ this.dropdownBackdropVisible = false;
667
+ this.setSelectedSort(sortField);
668
+ }
669
+ clearAlphaBarFilters() {
670
+ this.alphaSelectorVisible = null;
671
+ this.selectedTitleFilter = null;
672
+ this.selectedCreatorFilter = null;
673
+ this.emitTitleLetterChangedEvent();
674
+ this.emitCreatorLetterChangedEvent();
675
+ }
676
+ setSortDirection(sortDirection) {
677
+ this.sortDirection = sortDirection;
678
+ this.emitSortChangedEvent();
679
+ }
680
+ /** Toggles the current sort direction between 'asc' and 'desc' */
681
+ toggleSortDirection() {
682
+ this.setSortDirection(this.finalizedSortDirection === 'desc' ? 'asc' : 'desc');
683
+ }
684
+ handleSortDirectionClicked() {
685
+ if (!this.sortDirection &&
686
+ this.defaultSortField &&
687
+ this.defaultSortDirection) {
688
+ // When the sort direction is merely defaulted (not set by the user), clicking
689
+ // the toggled button should "promote" the default sort to an explicitly-set one
690
+ // and then toggle it as usual.
691
+ this.selectedSort = this.defaultSortField;
692
+ this.sortDirection = this.defaultSortDirection;
693
+ }
694
+ this.toggleSortDirection();
695
+ }
696
+ setSelectedSort(sort) {
697
+ this.selectedSort = sort;
698
+ // Apply this field's default sort direction
699
+ const sortOption = SORT_OPTIONS[sort];
700
+ this.sortDirection = sortOption.defaultSortDirection;
701
+ this.emitSortChangedEvent();
702
+ }
703
+ /** The current sort field, or the default one if no explicit sort is set */
704
+ get finalizedSortField() {
705
+ return this.selectedSort === SortField.default
706
+ ? this.defaultSortField
707
+ : this.selectedSort;
708
+ }
709
+ /** The current sort direction, or the default one if no explicit direction is set */
710
+ get finalizedSortDirection() {
711
+ return this.sortDirection === null
712
+ ? this.defaultSortDirection
713
+ : this.sortDirection;
714
+ }
715
+ /** Whether the sort direction button should be enabled for the current sort */
716
+ get canChangeSortDirection() {
717
+ return SORT_OPTIONS[this.finalizedSortField].canSetDirection;
718
+ }
719
+ /**
720
+ * There are four date sort options.
721
+ *
722
+ * This checks to see if the current sort is one of them.
723
+ *
724
+ * @readonly
725
+ * @private
726
+ * @type {boolean}
727
+ * @memberof SortFilterBar
728
+ */
729
+ get dateOptionSelected() {
730
+ const dateSortFields = [
731
+ SortField.datefavorited,
732
+ SortField.datearchived,
733
+ SortField.date,
734
+ SortField.datereviewed,
735
+ SortField.dateadded,
736
+ ];
737
+ return dateSortFields.includes(this.finalizedSortField);
738
+ }
739
+ /**
740
+ * There are two view sort options.
741
+ *
742
+ * This checks to see if the current sort is one of them.
743
+ *
744
+ * @readonly
745
+ * @private
746
+ * @type {boolean}
747
+ * @memberof SortFilterBar
748
+ */
749
+ get viewOptionSelected() {
750
+ const viewSortFields = [
751
+ SortField.alltimeview,
752
+ SortField.weeklyview,
753
+ ];
754
+ return viewSortFields.includes(this.finalizedSortField);
755
+ }
756
+ /**
757
+ * The display name of the last selected date field
758
+ *
759
+ * @readonly
760
+ * @private
761
+ * @type {string}
762
+ * @memberof SortFilterBar
763
+ */
764
+ get dateSortDisplayName() {
765
+ return SORT_OPTIONS[this.lastSelectedDateSort].displayName;
766
+ }
767
+ /**
768
+ * The display name of the last selected view field
769
+ *
770
+ * @readonly
771
+ * @private
772
+ * @type {string}
773
+ * @memberof SortFilterBar
774
+ */
775
+ get viewSortDisplayName() {
776
+ return SORT_OPTIONS[this.lastSelectedViewSort].displayName;
777
+ }
778
+ /**
779
+ * Array of all the views sorts that should be shown
780
+ */
781
+ get availableViewsFields() {
782
+ return ALL_VIEWS_SORT_FIELDS.filter(field => this.sortFieldAvailability[field]);
783
+ }
784
+ /**
785
+ * Array of all the date sorts that should be shown
786
+ */
787
+ get availableDateFields() {
788
+ return ALL_DATE_SORT_FIELDS.filter(field => this.sortFieldAvailability[field]);
789
+ }
790
+ get titleSelectorBar() {
791
+ var _a;
792
+ return html ` <alpha-bar
793
+ .selectedLetter=${this.selectedTitleFilter}
794
+ .letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.title}
795
+ ariaLandmarkLabel="Filter by title letter"
796
+ @letterChanged=${this.titleLetterChanged}
797
+ ></alpha-bar>`;
798
+ }
799
+ get creatorSelectorBar() {
800
+ var _a;
801
+ return html ` <alpha-bar
802
+ .selectedLetter=${this.selectedCreatorFilter}
803
+ .letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.creator}
804
+ ariaLandmarkLabel="Filter by creator letter"
805
+ @letterChanged=${this.creatorLetterChanged}
806
+ ></alpha-bar>`;
807
+ }
808
+ titleLetterChanged(e) {
809
+ var _a;
810
+ this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
811
+ this.emitTitleLetterChangedEvent();
812
+ }
813
+ creatorLetterChanged(e) {
814
+ var _a;
815
+ this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
816
+ this.emitCreatorLetterChangedEvent();
817
+ }
818
+ emitTitleLetterChangedEvent() {
819
+ const event = new CustomEvent('titleLetterChanged', {
820
+ detail: { selectedLetter: this.selectedTitleFilter },
821
+ });
822
+ this.dispatchEvent(event);
823
+ }
824
+ emitCreatorLetterChangedEvent() {
825
+ const event = new CustomEvent('creatorLetterChanged', {
826
+ detail: { selectedLetter: this.selectedCreatorFilter },
827
+ });
828
+ this.dispatchEvent(event);
829
+ }
830
+ displayModeChanged() {
831
+ const event = new CustomEvent('displayModeChanged', {
832
+ detail: { displayMode: this.displayMode },
833
+ });
834
+ this.dispatchEvent(event);
835
+ }
836
+ emitSortChangedEvent() {
837
+ const event = new CustomEvent('sortChanged', {
838
+ detail: {
839
+ selectedSort: this.selectedSort,
840
+ sortDirection: this.sortDirection,
841
+ },
842
+ });
843
+ this.dispatchEvent(event);
844
+ }
845
+ static get styles() {
846
+ return [
847
+ srOnlyStyle,
848
+ css `
849
+ #container {
850
+ position: relative;
851
+ }
852
+
853
+ #sort-bar {
854
+ display: flex;
855
+ justify-content: flex-start;
856
+ align-items: center;
857
+ border-bottom: 1px solid #2c2c2c;
858
+ font-size: 1.4rem;
859
+ }
860
+
861
+ #sort-options {
862
+ display: flex;
863
+ align-items: center;
864
+ flex-grow: 1;
865
+ }
866
+
867
+ ul {
868
+ list-style: none;
869
+ display: flex;
870
+ align-items: center;
871
+ margin: 0;
872
+ padding: 0;
873
+ }
874
+
875
+ li {
876
+ padding: 0;
877
+ }
878
+
879
+ .sort-by-text {
880
+ margin-right: 5px;
881
+ font-weight: bold;
882
+ white-space: nowrap;
883
+ }
884
+
885
+ .sort-direction-container {
886
+ display: flex;
887
+ align-self: stretch;
888
+ flex: 0;
889
+ margin: 0 5px;
890
+ }
891
+
892
+ .sort-direction-selector {
893
+ padding: 0;
894
+ border: none;
895
+ appearance: none;
896
+ background: transparent;
897
+ cursor: pointer;
898
+ }
899
+
900
+ .sort-direction-selector:disabled {
901
+ cursor: default;
902
+ }
903
+
904
+ .sort-direction-icon {
905
+ display: flex;
906
+ align-items: center;
907
+ background: none;
908
+ color: inherit;
909
+ border: none;
910
+ padding: 0;
911
+ outline: inherit;
912
+ width: 14px;
913
+ height: 14px;
914
+ }
915
+
916
+ .sort-direction-icon > svg {
917
+ flex: 1;
918
+ }
919
+
920
+ #date-sort-selector,
921
+ #view-sort-selector {
922
+ position: absolute;
923
+ left: 150px;
924
+ top: 45px;
925
+
926
+ z-index: 1;
927
+ padding: 1rem;
928
+ background-color: white;
929
+ border-radius: 2.5rem;
930
+ border: 1px solid #404142;
931
+ }
932
+
933
+ #sort-selector-container {
934
+ flex: 1;
935
+ display: flex;
936
+ justify-content: flex-start;
937
+ align-items: center;
938
+ }
939
+
940
+ #desktop-sort-container,
941
+ #mobile-sort-container {
942
+ display: flex;
943
+ justify-content: flex-start;
944
+ align-items: center;
945
+ }
946
+
947
+ /*
948
+ we move the desktop sort selector offscreen instead of display: none
949
+ because we need to observe the width of it vs its container to determine
950
+ if it's wide enough to display the desktop version and if you display: none,
951
+ the width becomes 0
952
+ */
953
+ #desktop-sort-container.hidden {
954
+ position: absolute;
955
+ top: -9999px;
956
+ left: -9999px;
957
+ visibility: hidden;
958
+ }
959
+
960
+ #mobile-sort-container.hidden {
961
+ display: none;
962
+ }
963
+
964
+ #sort-selector-backdrop {
965
+ position: fixed;
966
+ top: 0;
967
+ left: 0;
968
+ width: 100vw;
969
+ height: 100vh;
970
+ z-index: 1;
971
+ background-color: transparent;
972
+ }
973
+
974
+ #desktop-sort-selector {
975
+ display: inline-flex;
976
+ }
977
+
978
+ #desktop-sort-selector li {
979
+ display: flex;
980
+ align-items: center;
981
+ padding-left: 5px;
982
+ padding-right: 5px;
983
+ }
984
+
985
+ #desktop-sort-selector li a {
986
+ padding: 0 5px;
987
+ text-decoration: none;
988
+ color: #333;
989
+ line-height: 2;
990
+ }
991
+
992
+ #desktop-sort-selector li button {
993
+ padding: 0px 5px;
994
+ border: none;
995
+ background: none;
996
+ font-family: inherit;
997
+ font-size: inherit;
998
+ color: #333;
999
+ line-height: 2;
1000
+ cursor: pointer;
1001
+ appearance: none;
1002
+ }
1003
+
1004
+ #desktop-sort-selector li button.selected {
1005
+ font-weight: bold;
1006
+ }
1007
+
1008
+ /**
1009
+ * Fix to not shift the sort-bar options when get selected
1010
+ */
1011
+ #desktop-sort-selector li button::before,
1012
+ #desktop-sort-selector .dropdown-label::before {
1013
+ display: block;
1014
+ content: attr(data-title);
1015
+ font-weight: bold;
1016
+ height: 0;
1017
+ overflow: hidden;
1018
+ visibility: hidden;
1019
+ }
1020
+
1021
+ #display-style-selector {
1022
+ flex: 0;
1023
+ }
1024
+
1025
+ #display-style-selector button {
1026
+ background: none;
1027
+ color: inherit;
1028
+ border: none;
1029
+ appearance: none;
1030
+ cursor: pointer;
1031
+ -webkit-appearance: none;
1032
+ fill: #bbbbbb;
1033
+ }
1034
+
1035
+ #display-style-selector button.active {
1036
+ fill: var(--ia-theme-primary-text-color, #2c2c2c);
1037
+ }
1038
+
1039
+ #display-style-selector button svg {
1040
+ width: 24px;
1041
+ height: 24px;
1042
+ }
1043
+
1044
+ ia-dropdown {
1045
+ --dropdownTextColor: white;
1046
+ --dropdownOffsetTop: 0;
1047
+ --dropdownBorderTopWidth: 0;
1048
+ --dropdownBorderTopLeftRadius: 0;
1049
+ --dropdownBorderTopRightRadius: 0;
1050
+ --dropdownWhiteSpace: nowrap;
1051
+ --dropdownListZIndex: 2;
1052
+ --dropdownCaretColor: var(--ia-theme-primary-text-color, #2c2c2c);
1053
+ --dropdownSelectedTextColor: white;
1054
+ --dropdownSelectedBgColor: rgba(255, 255, 255, 0.3);
1055
+ --dropdownHoverBgColor: rgba(255, 255, 255, 0.3);
1056
+ --caretHeight: 9px;
1057
+ --caretWidth: 12px;
1058
+ --caretPadding: 0 5px 0 0;
1059
+ }
1060
+ ia-dropdown.selected .dropdown-label {
1061
+ font-weight: bold;
1062
+ }
1063
+ ia-dropdown.open {
1064
+ z-index: 2;
1065
+ }
1066
+
1067
+ .dropdown-label {
1068
+ display: inline-block;
1069
+ height: 100%;
1070
+ padding-left: 5px;
1071
+ font-size: 1.4rem;
1072
+ font-family: var(--ia-theme-base-font-family);
1073
+ line-height: 2;
1074
+ color: var(--ia-theme-primary-text-color, #2c2c2c);
1075
+ white-space: nowrap;
1076
+ user-select: none;
1077
+ }
1078
+ `,
1079
+ ];
1080
+ }
1081
+ };
1082
+ __decorate([
1083
+ property({ type: String })
1084
+ ], SortFilterBar.prototype, "displayMode", void 0);
1085
+ __decorate([
1086
+ property({ type: String })
1087
+ ], SortFilterBar.prototype, "defaultSortDirection", void 0);
1088
+ __decorate([
1089
+ property({ type: String })
1090
+ ], SortFilterBar.prototype, "defaultSortField", void 0);
1091
+ __decorate([
1092
+ property({ type: String })
1093
+ ], SortFilterBar.prototype, "defaultViewSort", void 0);
1094
+ __decorate([
1095
+ property({ type: String })
1096
+ ], SortFilterBar.prototype, "defaultDateSort", void 0);
1097
+ __decorate([
1098
+ property({ type: String })
1099
+ ], SortFilterBar.prototype, "sortDirection", void 0);
1100
+ __decorate([
1101
+ property({ type: String })
1102
+ ], SortFilterBar.prototype, "selectedSort", void 0);
1103
+ __decorate([
1104
+ property({ type: String })
1105
+ ], SortFilterBar.prototype, "selectedTitleFilter", void 0);
1106
+ __decorate([
1107
+ property({ type: String })
1108
+ ], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
1109
+ __decorate([
1110
+ property({ type: Object })
1111
+ ], SortFilterBar.prototype, "sortFieldAvailability", void 0);
1112
+ __decorate([
1113
+ property({ type: Boolean, reflect: true })
1114
+ ], SortFilterBar.prototype, "enableSortOptionsSlot", void 0);
1115
+ __decorate([
1116
+ property({ type: Boolean, reflect: true })
1117
+ ], SortFilterBar.prototype, "suppressDisplayModes", void 0);
1118
+ __decorate([
1119
+ property({ type: Object })
1120
+ ], SortFilterBar.prototype, "prefixFilterCountMap", void 0);
1121
+ __decorate([
1122
+ property({ type: Object })
1123
+ ], SortFilterBar.prototype, "resizeObserver", void 0);
1124
+ __decorate([
1125
+ state()
1126
+ ], SortFilterBar.prototype, "lastSelectedViewSort", void 0);
1127
+ __decorate([
1128
+ state()
1129
+ ], SortFilterBar.prototype, "lastSelectedDateSort", void 0);
1130
+ __decorate([
1131
+ state()
1132
+ ], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
1133
+ __decorate([
1134
+ state()
1135
+ ], SortFilterBar.prototype, "dropdownBackdropVisible", void 0);
1136
+ __decorate([
1137
+ state()
1138
+ ], SortFilterBar.prototype, "desktopSortContainerWidth", void 0);
1139
+ __decorate([
1140
+ state()
1141
+ ], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
1142
+ __decorate([
1143
+ query('#desktop-sort-container')
1144
+ ], SortFilterBar.prototype, "desktopSortContainer", void 0);
1145
+ __decorate([
1146
+ query('#sort-selector-container')
1147
+ ], SortFilterBar.prototype, "sortSelectorContainer", void 0);
1148
+ __decorate([
1149
+ query('#views-dropdown')
1150
+ ], SortFilterBar.prototype, "viewsDropdown", void 0);
1151
+ __decorate([
1152
+ query('#date-dropdown')
1153
+ ], SortFilterBar.prototype, "dateDropdown", void 0);
1154
+ __decorate([
1155
+ query('#mobile-dropdown')
1156
+ ], SortFilterBar.prototype, "mobileDropdown", void 0);
1157
+ SortFilterBar = __decorate([
1158
+ customElement('sort-filter-bar')
1159
+ ], SortFilterBar);
1160
+ export { SortFilterBar };
1161
+ //# sourceMappingURL=sort-filter-bar.js.map