@internetarchive/collection-browser 1.14.17-beta.5 → 1.14.18-alpha.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 (352) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +12 -11
  6. package/dist/index.js +12 -11
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/app-root.d.ts +83 -83
  9. package/dist/src/app-root.js +438 -489
  10. package/dist/src/app-root.js.map +1 -1
  11. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  13. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  15. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  16. package/dist/src/assets/img/icons/chevron.js +2 -2
  17. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  18. package/dist/src/assets/img/icons/contract.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/expand.d.ts +2 -2
  22. package/dist/src/assets/img/icons/expand.js +2 -2
  23. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  25. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  26. package/dist/src/assets/img/icons/eye.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  29. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  30. package/dist/src/assets/img/icons/login-required.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  59. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  60. package/dist/src/assets/img/icons/null-result.js +2 -2
  61. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  62. package/dist/src/assets/img/icons/restricted.js +2 -2
  63. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  64. package/dist/src/assets/img/icons/reviews.js +2 -2
  65. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  66. package/dist/src/assets/img/icons/upload.js +2 -2
  67. package/dist/src/assets/img/icons/views.d.ts +1 -1
  68. package/dist/src/assets/img/icons/views.js +2 -2
  69. package/dist/src/circular-activity-indicator.d.ts +5 -5
  70. package/dist/src/circular-activity-indicator.js +17 -17
  71. package/dist/src/collection-browser.d.ts +384 -406
  72. package/dist/src/collection-browser.js +1342 -1363
  73. package/dist/src/collection-browser.js.map +1 -1
  74. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  75. package/dist/src/collection-facets/facet-row.js +114 -114
  76. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  77. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  78. package/dist/src/collection-facets/facets-template.d.ts +17 -17
  79. package/dist/src/collection-facets/facets-template.js +114 -114
  80. package/dist/src/collection-facets/more-facets-content.d.ts +70 -70
  81. package/dist/src/collection-facets/more-facets-content.js +354 -369
  82. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  83. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  84. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  85. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  86. package/dist/src/collection-facets/toggle-switch.js +94 -94
  87. package/dist/src/collection-facets.d.ts +103 -103
  88. package/dist/src/collection-facets.js +513 -510
  89. package/dist/src/collection-facets.js.map +1 -1
  90. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +217 -0
  91. package/dist/src/data-source/collection-browser-data-source-interface.js +2 -0
  92. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -0
  93. package/dist/src/data-source/collection-browser-data-source.d.ts +352 -434
  94. package/dist/src/data-source/collection-browser-data-source.js +911 -800
  95. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  96. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -0
  97. package/dist/src/data-source/collection-browser-query-state.js +2 -0
  98. package/dist/src/data-source/collection-browser-query-state.js.map +1 -0
  99. package/dist/src/data-source/models.d.ts +28 -62
  100. package/dist/src/data-source/models.js +8 -1
  101. package/dist/src/data-source/models.js.map +1 -1
  102. package/dist/src/empty-placeholder.d.ts +23 -23
  103. package/dist/src/empty-placeholder.js +74 -74
  104. package/dist/src/expanded-date-picker.d.ts +43 -43
  105. package/dist/src/expanded-date-picker.js +109 -109
  106. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  107. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  108. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  109. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  110. package/dist/src/manage/manage-bar.d.ts +26 -26
  111. package/dist/src/manage/manage-bar.js +53 -53
  112. package/dist/src/manage/manage-bar.js.map +1 -1
  113. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  114. package/dist/src/mediatype/mediatype-config.js +91 -91
  115. package/dist/src/models.d.ts +197 -180
  116. package/dist/src/models.js +380 -269
  117. package/dist/src/models.js.map +1 -1
  118. package/dist/src/restoration-state-handler.d.ts +70 -70
  119. package/dist/src/restoration-state-handler.js +355 -355
  120. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  121. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  122. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  123. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  124. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  125. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  126. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  127. package/dist/src/sort-filter-bar/img/list.js +2 -2
  128. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  129. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  130. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  131. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  132. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  133. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  134. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  135. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  136. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  137. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  138. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +210 -210
  139. package/dist/src/sort-filter-bar/sort-filter-bar.js +653 -652
  140. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  141. package/dist/src/styles/item-image-styles.d.ts +8 -8
  142. package/dist/src/styles/item-image-styles.js +9 -9
  143. package/dist/src/styles/sr-only.d.ts +1 -1
  144. package/dist/src/styles/sr-only.js +2 -2
  145. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  146. package/dist/src/tiles/base-tile-component.js +63 -63
  147. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  148. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  149. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  150. package/dist/src/tiles/grid/account-tile.js +72 -72
  151. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  152. package/dist/src/tiles/grid/collection-tile.js +80 -80
  153. package/dist/src/tiles/grid/item-tile.d.ts +28 -27
  154. package/dist/src/tiles/grid/item-tile.js +162 -135
  155. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  156. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  157. package/dist/src/tiles/grid/search-tile.js +51 -51
  158. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  159. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  160. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  161. package/dist/src/tiles/grid/tile-stats.js +58 -53
  162. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  163. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  164. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  165. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  166. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  167. package/dist/src/tiles/image-block.d.ts +17 -17
  168. package/dist/src/tiles/image-block.js +73 -73
  169. package/dist/src/tiles/item-image.d.ts +39 -36
  170. package/dist/src/tiles/item-image.js +155 -127
  171. package/dist/src/tiles/item-image.js.map +1 -1
  172. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  173. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  174. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  175. package/dist/src/tiles/list/tile-list-compact.js +115 -115
  176. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  177. package/dist/src/tiles/list/tile-list.d.ts +47 -46
  178. package/dist/src/tiles/list/tile-list.js +327 -296
  179. package/dist/src/tiles/list/tile-list.js.map +1 -1
  180. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  181. package/dist/src/tiles/mediatype-icon.js +47 -47
  182. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  183. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  184. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  185. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  186. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  187. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  188. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  189. package/dist/src/tiles/text-snippet-block.js +73 -73
  190. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  191. package/dist/src/tiles/tile-dispatcher.js +232 -231
  192. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  193. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -43
  194. package/dist/src/tiles/tile-display-value-provider.js +94 -80
  195. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  196. package/dist/src/utils/analytics-events.d.ts +25 -25
  197. package/dist/src/utils/analytics-events.js +27 -27
  198. package/dist/src/utils/array-equals.d.ts +4 -4
  199. package/dist/src/utils/array-equals.js +10 -10
  200. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -0
  201. package/dist/src/utils/collapse-repeated-quotes.js +14 -0
  202. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -0
  203. package/dist/src/utils/format-count.d.ts +7 -7
  204. package/dist/src/utils/format-count.js +76 -76
  205. package/dist/src/utils/format-date.d.ts +2 -2
  206. package/dist/src/utils/format-date.js +25 -25
  207. package/dist/src/utils/format-unit-size.d.ts +2 -2
  208. package/dist/src/utils/format-unit-size.js +33 -33
  209. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  210. package/dist/src/utils/local-date-from-utc.js +15 -15
  211. package/dist/src/utils/log.d.ts +7 -0
  212. package/dist/src/utils/log.js +16 -0
  213. package/dist/src/utils/log.js.map +1 -0
  214. package/dist/src/utils/resolve-mediatype.d.ts +8 -0
  215. package/dist/src/utils/resolve-mediatype.js +24 -0
  216. package/dist/src/utils/resolve-mediatype.js.map +1 -0
  217. package/dist/src/utils/sha1.d.ts +2 -2
  218. package/dist/src/utils/sha1.js +8 -8
  219. package/dist/test/collection-browser.test.d.ts +1 -1
  220. package/dist/test/collection-browser.test.js +1211 -1149
  221. package/dist/test/collection-browser.test.js.map +1 -1
  222. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  223. package/dist/test/collection-facets/facet-row.test.js +203 -203
  224. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  225. package/dist/test/collection-facets/facets-template.test.js +105 -105
  226. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  227. package/dist/test/collection-facets/more-facets-content.test.js +133 -133
  228. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  229. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  230. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  231. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  232. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  233. package/dist/test/collection-facets.test.d.ts +2 -2
  234. package/dist/test/collection-facets.test.js +653 -648
  235. package/dist/test/collection-facets.test.js.map +1 -1
  236. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -0
  237. package/dist/test/data-source/collection-browser-data-source.test.js +80 -0
  238. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -0
  239. package/dist/test/empty-placeholder.test.d.ts +1 -1
  240. package/dist/test/empty-placeholder.test.js +63 -63
  241. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  242. package/dist/test/expanded-date-picker.test.js +95 -95
  243. package/dist/test/icon-overlay.test.d.ts +1 -1
  244. package/dist/test/icon-overlay.test.js +24 -24
  245. package/dist/test/image-block.test.d.ts +1 -1
  246. package/dist/test/image-block.test.js +48 -48
  247. package/dist/test/item-image.test.d.ts +1 -1
  248. package/dist/test/item-image.test.js +85 -86
  249. package/dist/test/item-image.test.js.map +1 -1
  250. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  251. package/dist/test/manage/manage-bar.test.js +72 -72
  252. package/dist/test/mediatype-config.test.d.ts +1 -1
  253. package/dist/test/mediatype-config.test.js +16 -16
  254. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  255. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  256. package/dist/test/mocks/mock-search-responses.d.ts +24 -21
  257. package/dist/test/mocks/mock-search-responses.js +840 -709
  258. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  259. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  260. package/dist/test/mocks/mock-search-service.js +53 -50
  261. package/dist/test/mocks/mock-search-service.js.map +1 -1
  262. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  263. package/dist/test/restoration-state-handler.test.js +270 -270
  264. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  265. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  266. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  267. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  268. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  269. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +418 -418
  270. package/dist/test/text-overlay.test.d.ts +1 -1
  271. package/dist/test/text-overlay.test.js +48 -48
  272. package/dist/test/text-snippet-block.test.d.ts +1 -1
  273. package/dist/test/text-snippet-block.test.js +57 -57
  274. package/dist/test/tile-stats.test.d.ts +1 -1
  275. package/dist/test/tile-stats.test.js +95 -33
  276. package/dist/test/tile-stats.test.js.map +1 -1
  277. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  278. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  279. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  280. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  281. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  282. package/dist/test/tiles/grid/item-tile.test.js +298 -254
  283. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  284. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  285. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  286. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  287. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -258
  288. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  289. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  290. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  291. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  292. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  293. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  294. package/dist/test/tiles/list/tile-list.test.js +283 -239
  295. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  296. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  297. package/dist/test/tiles/tile-dispatcher.test.js +106 -94
  298. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  299. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  300. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  301. package/dist/test/utils/array-equals.test.d.ts +1 -1
  302. package/dist/test/utils/array-equals.test.js +26 -26
  303. package/dist/test/utils/format-count.test.d.ts +1 -1
  304. package/dist/test/utils/format-count.test.js +23 -23
  305. package/dist/test/utils/format-date.test.d.ts +1 -1
  306. package/dist/test/utils/format-date.test.js +17 -17
  307. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  308. package/dist/test/utils/format-unit-size.test.js +17 -17
  309. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  310. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  311. package/index.ts +3 -5
  312. package/local.archive.org.cert +86 -86
  313. package/local.archive.org.key +27 -27
  314. package/package.json +3 -4
  315. package/renovate.json +6 -6
  316. package/src/app-root.ts +30 -85
  317. package/src/collection-browser.ts +112 -139
  318. package/src/collection-facets/more-facets-content.ts +0 -19
  319. package/src/collection-facets.ts +6 -4
  320. package/src/data-source/collection-browser-data-source-interface.ts +272 -0
  321. package/src/data-source/collection-browser-data-source.ts +314 -379
  322. package/src/data-source/collection-browser-query-state.ts +54 -0
  323. package/src/data-source/models.ts +8 -45
  324. package/src/manage/manage-bar.ts +1 -1
  325. package/src/models.ts +164 -3
  326. package/src/sort-filter-bar/sort-filter-bar.ts +2 -1
  327. package/src/tiles/grid/item-tile.ts +36 -1
  328. package/src/tiles/grid/tile-stats.ts +12 -7
  329. package/src/tiles/item-image.ts +28 -0
  330. package/src/tiles/list/tile-list-compact.ts +1 -1
  331. package/src/tiles/list/tile-list.ts +43 -5
  332. package/src/tiles/tile-dispatcher.ts +2 -1
  333. package/src/tiles/tile-display-value-provider.ts +20 -2
  334. package/src/utils/collapse-repeated-quotes.ts +13 -0
  335. package/src/utils/log.ts +16 -0
  336. package/src/utils/resolve-mediatype.ts +26 -0
  337. package/test/collection-browser.test.ts +161 -50
  338. package/test/collection-facets/more-facets-content.test.ts +4 -2
  339. package/test/collection-facets.test.ts +5 -0
  340. package/test/data-source/collection-browser-data-source.test.ts +103 -0
  341. package/test/item-image.test.ts +34 -36
  342. package/test/mocks/mock-search-responses.ts +144 -0
  343. package/test/mocks/mock-search-service.ts +6 -0
  344. package/test/tile-stats.test.ts +104 -0
  345. package/test/tiles/grid/item-tile.test.ts +55 -0
  346. package/test/tiles/hover/hover-pane-controller.test.ts +19 -17
  347. package/test/tiles/list/tile-list.test.ts +55 -0
  348. package/test/tiles/tile-dispatcher.test.ts +13 -0
  349. package/tsconfig.json +21 -21
  350. package/web-dev-server.config.mjs +30 -30
  351. package/web-test-runner.config.mjs +41 -41
  352. package/types/sentry.d.ts +0 -1
@@ -1,434 +1,352 @@
1
- import type { ReactiveController, ReactiveControllerHost } from 'lit';
2
- import { AccountExtraInfo, Aggregation, CollectionExtraInfo, FilterMap, PageElementMap, SearchParams } from '@internetarchive/search-service';
3
- import { type PrefixFilterType, type TileModel, PrefixFilterCounts } from '../models';
4
- import type { CollectionBrowserSearchInterface, CollectionTitles, PageSpecifierParams } from './models';
5
- declare type RequestKind = 'full' | 'hits' | 'aggregations';
6
- export interface CollectionBrowserDataSourceInterface extends ReactiveController {
7
- /**
8
- * How many tile models are present in this data source
9
- */
10
- readonly size: number;
11
- /**
12
- * Whether the host has a valid set of properties for performing a search.
13
- * For instance, on the search page this requires a valid search service and a
14
- * non-empty query, while collection pages allow searching with an empty query
15
- * for MDS but not FTS.
16
- */
17
- readonly canPerformSearch: boolean;
18
- /**
19
- * A string key compactly representing the current full search state, which can
20
- * be used to determine, e.g., when a new search is required or whether an arriving
21
- * response is outdated.
22
- */
23
- readonly pageFetchQueryKey: string;
24
- /**
25
- * Similar to `pageFetchQueryKey`, but excluding properties that do not affect
26
- * the validity of a set of facets (e.g., sort).
27
- */
28
- readonly facetFetchQueryKey: string;
29
- /**
30
- * An object representing any collection- or profile-specific properties to be passed along
31
- * to the search service, specifying the exact page/tab to fetch results for.
32
- */
33
- readonly pageSpecifierParams: PageSpecifierParams | null;
34
- /**
35
- * A FilterMap object representing all filters applied to the current search,
36
- * including any facets, letter filters, and date ranges.
37
- */
38
- readonly filterMap: FilterMap;
39
- /**
40
- * The full set of aggregations retrieved for the current search.
41
- */
42
- readonly aggregations?: Record<string, Aggregation>;
43
- /**
44
- * The `year_histogram` aggregation retrieved for the current search.
45
- */
46
- readonly yearHistogramAggregation?: Aggregation;
47
- /**
48
- * A map from collection identifiers that appear on hits or aggregations for the
49
- * current search, to their human-readable collection titles.
50
- */
51
- readonly collectionTitles: CollectionTitles;
52
- /**
53
- * The "extra info" package provided by the PPS for collection pages, including details
54
- * used to populate the target collection header & About tab content.
55
- */
56
- readonly collectionExtraInfo?: CollectionExtraInfo;
57
- /**
58
- * The "extra info" package provided by the PPS for profile pages, including details
59
- * used to populate the profile header.
60
- */
61
- readonly accountExtraInfo?: AccountExtraInfo;
62
- /**
63
- * The set of requested page elements for profile pages, if applicable. These represent
64
- * any content specific to the current profile tab.
65
- */
66
- readonly pageElements?: PageElementMap;
67
- /**
68
- * An array of the current target collection's parent collections. Should include *all*
69
- * ancestors in the collection hierarchy, not just the immediate parent.
70
- */
71
- readonly parentCollections?: string[];
72
- /**
73
- * An object storing result counts for the current search bucketed by letter prefix.
74
- * Keys are the result field on which the prefixes are considered (e.g., title/creator)
75
- * and values are a Record mapping letters to their counts.
76
- */
77
- readonly prefixFilterCountMap: Partial<Record<PrefixFilterType, PrefixFilterCounts>>;
78
- /**
79
- * An array of all the tile models whose management checkboxes are checked
80
- */
81
- readonly checkedTileModels: TileModel[];
82
- /**
83
- * An array of all the tile models whose management checkboxes are unchecked
84
- */
85
- readonly uncheckedTileModels: TileModel[];
86
- /**
87
- * Adds the given page of tile models to the data source.
88
- * If the given page number already exists, that page will be overwritten.
89
- * @param pageNum Which page number to add (indexed starting from 1)
90
- * @param pageTiles The array of tile models for the new page
91
- */
92
- addPage(pageNum: number, pageTiles: TileModel[]): void;
93
- /**
94
- * Returns the given page of tile models from the data source.
95
- * @param pageNum Which page number to get (indexed starting from 1)
96
- */
97
- getPage(pageNum: number): TileModel[];
98
- /**
99
- * Returns the full set of paged tile models stored in this data source.
100
- */
101
- getAllPages(): Record<string, TileModel[]>;
102
- /**
103
- * Whether the data source contains any tiles for the given page number.
104
- * @param pageNum Which page number to query (indexed starting from 1)
105
- */
106
- hasPage(pageNum: number): boolean;
107
- /**
108
- * Returns the single tile model appearing at the given index in the
109
- * data source, with respect to the current page size. Returns `undefined` if
110
- * the corresponding page is not present on the data source or if it does not
111
- * contain a tile model at the corresponding index.
112
- * @param index The 0-based index (within the full data source) of the tile to get
113
- */
114
- getTileModelAt(index: number): TileModel | undefined;
115
- /**
116
- * Returns the first numeric tile index corresponding to the given tile model object,
117
- * or -1 if the given tile model is not present.
118
- * @param tile The tile model to search for in the data source
119
- */
120
- indexOf(tile: TileModel): number;
121
- /**
122
- * Requests that the data source fire a backend request for the given page of results.
123
- * @param pageNum Which page number to fetch results for
124
- * @param numInitialPages How many pages should be batched together on an initial fetch
125
- */
126
- fetchPage(pageNum: number, numInitialPages?: number): Promise<void>;
127
- /**
128
- * Requests that the data source update its prefix bucket result counts for the given
129
- * type of prefix filter.
130
- * @param filterType Which prefixable field to update the buckets for (e.g., title/creator)
131
- */
132
- updatePrefixFilterCounts(filterType: PrefixFilterType): Promise<void>;
133
- /**
134
- * Changes the page size used by the data source, discarding any previously-fetched pages.
135
- *
136
- * **Note: this operation will reset any data stored in the data source!**
137
- * @param pageSize
138
- */
139
- setPageSize(pageSize: number): void;
140
- /**
141
- * Resets the data source to its empty state, with no result pages, aggregations, etc.
142
- */
143
- reset(): void;
144
- /**
145
- * Notifies the data source that a query change has occurred, which may trigger a data
146
- * reset & new fetches.
147
- */
148
- handleQueryChange(): void;
149
- /**
150
- * Applies the given map function to all of the tile models in every page of the data
151
- * source.
152
- * @param callback A callback function to apply on each tile model, as with Array.map
153
- */
154
- map(callback: (model: TileModel, index: number, array: TileModel[]) => TileModel): void;
155
- /**
156
- * Checks every tile's management checkbox
157
- */
158
- checkAllTiles(): void;
159
- /**
160
- * Unchecks every tile's management checkbox
161
- */
162
- uncheckAllTiles(): void;
163
- /**
164
- * Removes all tile models that are currently checked & adjusts the paging
165
- * of the data source to account for any new gaps in the data.
166
- */
167
- removeCheckedTiles(): void;
168
- }
169
- export declare class CollectionBrowserDataSource implements CollectionBrowserDataSourceInterface {
170
- /** The host element to which this controller should attach listeners */
171
- private readonly host;
172
- /** Default size of result pages */
173
- private pageSize;
174
- private pages;
175
- private offset;
176
- private numTileModels;
177
- /**
178
- * Maps the full query key to the pages being fetched for that query
179
- */
180
- private pageFetchesInProgress;
181
- totalResults: number;
182
- endOfDataReached: boolean;
183
- /**
184
- * @inheritdoc
185
- */
186
- aggregations?: Record<string, Aggregation>;
187
- /**
188
- * @inheritdoc
189
- */
190
- yearHistogramAggregation?: Aggregation;
191
- /**
192
- * @inheritdoc
193
- */
194
- collectionTitles: Map<string, string>;
195
- /**
196
- * @inheritdoc
197
- */
198
- collectionExtraInfo?: CollectionExtraInfo;
199
- /**
200
- * @inheritdoc
201
- */
202
- accountExtraInfo?: AccountExtraInfo;
203
- /**
204
- * @inheritdoc
205
- */
206
- pageElements?: PageElementMap;
207
- /**
208
- * @inheritdoc
209
- */
210
- parentCollections?: string[];
211
- /**
212
- * @inheritdoc
213
- */
214
- prefixFilterCountMap: Partial<Record<PrefixFilterType, PrefixFilterCounts>>;
215
- constructor(
216
- /** The host element to which this controller should attach listeners */
217
- host: ReactiveControllerHost & CollectionBrowserSearchInterface,
218
- /** Default size of result pages */
219
- pageSize: number);
220
- /**
221
- * @inheritdoc
222
- */
223
- get size(): number;
224
- /**
225
- * @inheritdoc
226
- */
227
- addPage(pageNum: number, pageTiles: TileModel[]): void;
228
- /**
229
- * @inheritdoc
230
- */
231
- getPage(pageNum: number): TileModel[];
232
- /**
233
- * @inheritdoc
234
- */
235
- getAllPages(): Record<string, TileModel[]>;
236
- /**
237
- * @inheritdoc
238
- */
239
- hasPage(pageNum: number): boolean;
240
- /**
241
- * @inheritdoc
242
- */
243
- getTileModelAt(index: number): TileModel | undefined;
244
- /**
245
- * @inheritdoc
246
- */
247
- indexOf(tile: TileModel): number;
248
- /**
249
- * @inheritdoc
250
- */
251
- setPageSize(pageSize: number): void;
252
- /**
253
- * @inheritdoc
254
- */
255
- reset(): void;
256
- /**
257
- * @inheritdoc
258
- */
259
- handleQueryChange(): Promise<void>;
260
- /**
261
- * @inheritdoc
262
- */
263
- map(callback: (model: TileModel, index: number, array: TileModel[]) => TileModel): void;
264
- /**
265
- * @inheritdoc
266
- */
267
- checkAllTiles: () => void;
268
- /**
269
- * @inheritdoc
270
- */
271
- uncheckAllTiles: () => void;
272
- /**
273
- * @inheritdoc
274
- */
275
- removeCheckedTiles: () => void;
276
- /**
277
- * @inheritdoc
278
- */
279
- get checkedTileModels(): TileModel[];
280
- /**
281
- * @inheritdoc
282
- */
283
- get uncheckedTileModels(): TileModel[];
284
- /**
285
- * Returns a flattened, filtered array of all the tile models in the data source
286
- * for which the given predicate returns a truthy value.
287
- *
288
- * @param predicate A callback function to apply on each tile model, as with Array.filter
289
- * @returns A filtered array of tile models satisfying the predicate
290
- */
291
- private getFilteredTileModels;
292
- /**
293
- * @inheritdoc
294
- */
295
- get canPerformSearch(): boolean;
296
- /**
297
- * The query key is a string that uniquely identifies the current search.
298
- * It consists of:
299
- * - The current base query
300
- * - The current collection/profile target & page element
301
- * - The current search type
302
- * - Any currently-applied facets
303
- * - Any currently-applied date range
304
- * - Any currently-applied prefix filters
305
- * - The current sort options
306
- *
307
- * This lets us keep track of queries so we don't persist data that's
308
- * no longer relevant.
309
- */
310
- get pageFetchQueryKey(): string;
311
- /**
312
- * Similar to `pageFetchQueryKey` above, but excludes sort fields since they
313
- * are not relevant in determining aggregation queries.
314
- */
315
- get facetFetchQueryKey(): string;
316
- /**
317
- * Constructs a search service FilterMap object from the combination of
318
- * all the currently-applied filters. This includes any facets, letter
319
- * filters, and date range.
320
- */
321
- get filterMap(): FilterMap;
322
- /**
323
- * Produces a compact unique ID for a search request that can help with debugging
324
- * on the backend by making related requests easier to trace through different services.
325
- * (e.g., tying the hits/aggregations requests for the same page back to a single hash).
326
- *
327
- * @param params The search service parameters for the request
328
- * @param kind The kind of request (hits-only, aggregations-only, or both)
329
- * @returns A Promise resolving to the uid to apply to the request
330
- */
331
- requestUID(params: SearchParams, kind: RequestKind): Promise<string>;
332
- /**
333
- * @inheritdoc
334
- */
335
- get pageSpecifierParams(): PageSpecifierParams | null;
336
- /**
337
- * The full query, including year facets and date range clauses
338
- */
339
- private get fullQuery();
340
- /**
341
- * Generates a query string representing the current set of applied facets
342
- *
343
- * Example: `mediatype:("collection" OR "audio" OR -"etree") AND year:("2000" OR "2001")`
344
- */
345
- private get facetQuery();
346
- private get dateRangeQueryClause();
347
- private get sortFilterQueries();
348
- /**
349
- * Returns a query clause identifying the currently selected title filter,
350
- * e.g., `firstTitle:X`.
351
- */
352
- private get titleQuery();
353
- /**
354
- * Returns a query clause identifying the currently selected creator filter,
355
- * e.g., `firstCreator:X`.
356
- */
357
- private get creatorQuery();
358
- /**
359
- * Builds an OR-joined facet clause for the given facet name and values.
360
- *
361
- * E.g., for name `subject` and values
362
- * `{ foo: { state: 'selected' }, bar: { state: 'hidden' } }`
363
- * this will produce the clause
364
- * `subject:("foo" OR -"bar")`.
365
- *
366
- * @param facetName The facet type (e.g., 'collection')
367
- * @param facetValues The facet buckets, mapped by their keys
368
- */
369
- private buildFacetClause;
370
- /**
371
- * Handles some special pre-request normalization steps for certain facet types
372
- * that require them.
373
- *
374
- * @param facetName The name of the facet type (e.g., 'language')
375
- * @param facetValues An array of values for that facet type
376
- */
377
- private prepareFacetForFetch;
378
- /**
379
- * Takes an array of facet clauses, and combines them into a
380
- * full AND-joined facet query string. Empty clauses are ignored.
381
- */
382
- private joinFacetClauses;
383
- /**
384
- * Fires a backend request to fetch a set of aggregations (representing UI facets) for
385
- * the current search state.
386
- */
387
- private fetchFacets;
388
- /**
389
- * Performs the initial page fetch(es) for the current search state.
390
- */
391
- private doInitialPageFetch;
392
- /**
393
- * Fetches one or more pages of results and updates the data source.
394
- *
395
- * @param pageNumber The page number to fetch
396
- * @param numInitialPages If this is an initial page fetch (`pageNumber = 1`),
397
- * specifies how many pages to batch together in one request. Ignored
398
- * if `pageNumber != 1`, defaulting to a single page.
399
- */
400
- fetchPage(pageNumber: number, numInitialPages?: number): Promise<void>;
401
- /**
402
- * Update the datasource from the fetch response
403
- *
404
- * @param pageNumber
405
- * @param results
406
- */
407
- private addTilesToDataSource;
408
- /**
409
- * Returns the mediatype string for the given search result, taking into account
410
- * the special `favorited_search` hit type.
411
- * @param result The search result to extract a mediatype from
412
- */
413
- private getMediatype;
414
- /**
415
- * Returns the input string, but removing one set of quotes from all instances of
416
- * ""clauses wrapped in two sets of quotes"". This assumes the quotes are already
417
- * URL-encoded.
418
- *
419
- * This should be a temporary measure to address the fact that the __href__ field
420
- * sometimes acquires extra quotation marks during query rewriting. Once there is a
421
- * full Lucene parser in place that handles quoted queries correctly, this can likely
422
- * be removed.
423
- */
424
- private collapseRepeatedQuotes;
425
- /**
426
- * Fetches the aggregation buckets for the given prefix filter type.
427
- */
428
- private fetchPrefixFilterBuckets;
429
- /**
430
- * Fetches and caches the prefix filter counts for the given filter type.
431
- */
432
- updatePrefixFilterCounts(filterType: PrefixFilterType): Promise<void>;
433
- }
434
- export {};
1
+ import type { ReactiveControllerHost } from 'lit';
2
+ import { AccountExtraInfo, Aggregation, CollectionExtraInfo, FilterMap, PageElementMap, SearchParams } from '@internetarchive/search-service';
3
+ import { type PrefixFilterType, TileModel, PrefixFilterCounts, RequestKind } from '../models';
4
+ import { type PageSpecifierParams } from './models';
5
+ import type { CollectionBrowserDataSourceInterface } from './collection-browser-data-source-interface';
6
+ import type { CollectionBrowserSearchInterface } from './collection-browser-query-state';
7
+ export declare class CollectionBrowserDataSource implements CollectionBrowserDataSourceInterface {
8
+ /** The host element to which this controller should attach listeners */
9
+ private readonly host;
10
+ /** Default size of result pages */
11
+ private pageSize;
12
+ /**
13
+ * All pages of tile models that have been fetched so far, indexed by their page
14
+ * number (with the first being page 1).
15
+ */
16
+ private pages;
17
+ /**
18
+ * Tile offset to apply when looking up tiles in the pages, in order to maintain
19
+ * page alignment after tiles are removed.
20
+ */
21
+ private offset;
22
+ /**
23
+ * Total number of tile models stored in this data source's pages
24
+ */
25
+ private numTileModels;
26
+ /**
27
+ * A set of fetch IDs that are valid for the current query state
28
+ */
29
+ private fetchesInProgress;
30
+ /**
31
+ * A record of the query key used for the last search.
32
+ * If this changes, we need to load new results.
33
+ */
34
+ private previousQueryKey;
35
+ /**
36
+ * Whether the initial page of search results for the current query state
37
+ * is presently being fetched.
38
+ */
39
+ private searchResultsLoading;
40
+ /**
41
+ * Whether the facets (aggregations) for the current query state are
42
+ * presently being fetched.
43
+ */
44
+ private facetsLoading;
45
+ /**
46
+ * Whether further query changes should be ignored and not trigger fetches
47
+ */
48
+ private suppressFetches;
49
+ /**
50
+ * @inheritdoc
51
+ */
52
+ totalResults: number;
53
+ /**
54
+ * @inheritdoc
55
+ */
56
+ endOfDataReached: boolean;
57
+ /**
58
+ * @inheritdoc
59
+ */
60
+ queryInitialized: boolean;
61
+ /**
62
+ * @inheritdoc
63
+ */
64
+ aggregations?: Record<string, Aggregation>;
65
+ /**
66
+ * @inheritdoc
67
+ */
68
+ yearHistogramAggregation?: Aggregation;
69
+ /**
70
+ * @inheritdoc
71
+ */
72
+ collectionTitles: Map<string, string>;
73
+ /**
74
+ * @inheritdoc
75
+ */
76
+ collectionExtraInfo?: CollectionExtraInfo;
77
+ /**
78
+ * @inheritdoc
79
+ */
80
+ accountExtraInfo?: AccountExtraInfo;
81
+ /**
82
+ * @inheritdoc
83
+ */
84
+ pageElements?: PageElementMap;
85
+ /**
86
+ * @inheritdoc
87
+ */
88
+ parentCollections?: string[];
89
+ /**
90
+ * @inheritdoc
91
+ */
92
+ prefixFilterCountMap: Partial<Record<PrefixFilterType, PrefixFilterCounts>>;
93
+ /**
94
+ * @inheritdoc
95
+ */
96
+ queryErrorMessage?: string;
97
+ /**
98
+ * Internal property to store the `resolve` function for the most recent
99
+ * `initialSearchComplete` promise, allowing us to resolve it at the appropriate time.
100
+ */
101
+ private _initialSearchCompleteResolver;
102
+ /**
103
+ * Internal property to store the private value backing the `initialSearchComplete` getter.
104
+ */
105
+ private _initialSearchCompletePromise;
106
+ /**
107
+ * @inheritdoc
108
+ */
109
+ get initialSearchComplete(): Promise<boolean>;
110
+ constructor(
111
+ /** The host element to which this controller should attach listeners */
112
+ host: ReactiveControllerHost & CollectionBrowserSearchInterface,
113
+ /** Default size of result pages */
114
+ pageSize?: number);
115
+ hostConnected(): void;
116
+ hostUpdate(): void;
117
+ /**
118
+ * Returns whether this data source is the one currently installed on the host component.
119
+ */
120
+ private get activeOnHost();
121
+ /**
122
+ * @inheritdoc
123
+ */
124
+ get size(): number;
125
+ /**
126
+ * @inheritdoc
127
+ */
128
+ reset(): void;
129
+ /**
130
+ * @inheritdoc
131
+ */
132
+ addPage(pageNum: number, pageTiles: TileModel[]): void;
133
+ /**
134
+ * @inheritdoc
135
+ */
136
+ getPage(pageNum: number): TileModel[];
137
+ /**
138
+ * @inheritdoc
139
+ */
140
+ getAllPages(): Record<string, TileModel[]>;
141
+ /**
142
+ * @inheritdoc
143
+ */
144
+ hasPage(pageNum: number): boolean;
145
+ /**
146
+ * @inheritdoc
147
+ */
148
+ getTileModelAt(index: number): TileModel | undefined;
149
+ /**
150
+ * @inheritdoc
151
+ */
152
+ indexOf(tile: TileModel): number;
153
+ /**
154
+ * @inheritdoc
155
+ */
156
+ getPageSize(): number;
157
+ /**
158
+ * @inheritdoc
159
+ */
160
+ setPageSize(pageSize: number): void;
161
+ /**
162
+ * @inheritdoc
163
+ */
164
+ setFetchesSuppressed(suppressed: boolean): void;
165
+ /**
166
+ * @inheritdoc
167
+ */
168
+ handleQueryChange(): Promise<void>;
169
+ /**
170
+ * @inheritdoc
171
+ */
172
+ map(callback: (model: TileModel, index: number, array: TileModel[]) => TileModel): void;
173
+ /**
174
+ * @inheritdoc
175
+ */
176
+ checkAllTiles: () => void;
177
+ /**
178
+ * @inheritdoc
179
+ */
180
+ uncheckAllTiles: () => void;
181
+ /**
182
+ * @inheritdoc
183
+ */
184
+ removeCheckedTiles: () => void;
185
+ /**
186
+ * @inheritdoc
187
+ */
188
+ get checkedTileModels(): TileModel[];
189
+ /**
190
+ * @inheritdoc
191
+ */
192
+ get uncheckedTileModels(): TileModel[];
193
+ /**
194
+ * Returns a flattened, filtered array of all the tile models in the data source
195
+ * for which the given predicate returns a truthy value.
196
+ *
197
+ * @param predicate A callback function to apply on each tile model, as with Array.filter
198
+ * @returns A filtered array of tile models satisfying the predicate
199
+ */
200
+ private getFilteredTileModels;
201
+ /**
202
+ * @inheritdoc
203
+ */
204
+ get canPerformSearch(): boolean;
205
+ /**
206
+ * Sets the state for whether the initial set of search results for the
207
+ * current query is loading
208
+ */
209
+ private setSearchResultsLoading;
210
+ /**
211
+ * Sets the state for whether the facets for a query is loading
212
+ */
213
+ private setFacetsLoading;
214
+ /**
215
+ * Requests that the host perform an update, provided this data
216
+ * source is actively installed on it.
217
+ */
218
+ private requestHostUpdate;
219
+ /**
220
+ * Requests that the host refresh its visible tiles, provided this
221
+ * data source is actively installed on it.
222
+ */
223
+ private refreshVisibleResults;
224
+ /**
225
+ * The query key is a string that uniquely identifies the current search.
226
+ * It consists of:
227
+ * - The current base query
228
+ * - The current collection/profile target & page element
229
+ * - The current search type
230
+ * - Any currently-applied facets
231
+ * - Any currently-applied date range
232
+ * - Any currently-applied prefix filters
233
+ * - The current sort options
234
+ *
235
+ * This lets us internally keep track of queries so we don't persist data that's
236
+ * no longer relevant. Not meant to be human-readable.
237
+ */
238
+ get pageFetchQueryKey(): string;
239
+ /**
240
+ * Similar to `pageFetchQueryKey` above, but excludes sort fields since they
241
+ * are not relevant in determining aggregation queries.
242
+ */
243
+ get facetFetchQueryKey(): string;
244
+ /**
245
+ * Constructs a search service FilterMap object from the combination of
246
+ * all the currently-applied filters. This includes any facets, letter
247
+ * filters, and date range.
248
+ */
249
+ get filterMap(): FilterMap;
250
+ /**
251
+ * Produces a compact unique ID for a search request that can help with debugging
252
+ * on the backend by making related requests easier to trace through different services.
253
+ * (e.g., tying the hits/aggregations requests for the same page back to a single hash).
254
+ *
255
+ * @param params The search service parameters for the request
256
+ * @param kind The kind of request (hits-only, aggregations-only, or both)
257
+ * @returns A Promise resolving to the uid to apply to the request
258
+ */
259
+ requestUID(params: SearchParams, kind: RequestKind): Promise<string>;
260
+ /**
261
+ * @inheritdoc
262
+ */
263
+ get pageSpecifierParams(): PageSpecifierParams | null;
264
+ /**
265
+ * The full query, including year facets and date range clauses
266
+ */
267
+ private get fullQuery();
268
+ /**
269
+ * Generates a query string representing the current set of applied facets
270
+ *
271
+ * Example: `mediatype:("collection" OR "audio" OR -"etree") AND year:("2000" OR "2001")`
272
+ */
273
+ private get facetQuery();
274
+ private get dateRangeQueryClause();
275
+ private get sortFilterQueries();
276
+ /**
277
+ * Returns a query clause identifying the currently selected title filter,
278
+ * e.g., `firstTitle:X`.
279
+ */
280
+ private get titleQuery();
281
+ /**
282
+ * Returns a query clause identifying the currently selected creator filter,
283
+ * e.g., `firstCreator:X`.
284
+ */
285
+ private get creatorQuery();
286
+ /**
287
+ * Builds an OR-joined facet clause for the given facet name and values.
288
+ *
289
+ * E.g., for name `subject` and values
290
+ * `{ foo: { state: 'selected' }, bar: { state: 'hidden' } }`
291
+ * this will produce the clause
292
+ * `subject:("foo" OR -"bar")`.
293
+ *
294
+ * @param facetName The facet type (e.g., 'collection')
295
+ * @param facetValues The facet buckets, mapped by their keys
296
+ */
297
+ private buildFacetClause;
298
+ /**
299
+ * Handles some special pre-request normalization steps for certain facet types
300
+ * that require them.
301
+ *
302
+ * @param facetName The name of the facet type (e.g., 'language')
303
+ * @param facetValues An array of values for that facet type
304
+ */
305
+ private prepareFacetForFetch;
306
+ /**
307
+ * Takes an array of facet clauses, and combines them into a
308
+ * full AND-joined facet query string. Empty clauses are ignored.
309
+ */
310
+ private joinFacetClauses;
311
+ /**
312
+ * Fires a backend request to fetch a set of aggregations (representing UI facets) for
313
+ * the current search state.
314
+ */
315
+ private fetchFacets;
316
+ /**
317
+ * Performs the initial page fetch(es) for the current search state.
318
+ */
319
+ private doInitialPageFetch;
320
+ /**
321
+ * Fetches one or more pages of results and updates the data source.
322
+ *
323
+ * @param pageNumber The page number to fetch
324
+ * @param numInitialPages If this is an initial page fetch (`pageNumber = 1`),
325
+ * specifies how many pages to batch together in one request. Ignored
326
+ * if `pageNumber != 1`, defaulting to a single page.
327
+ */
328
+ fetchPage(pageNumber: number, numInitialPages?: number): Promise<void>;
329
+ /**
330
+ * Update the datasource from the fetch response
331
+ *
332
+ * @param pageNumber
333
+ * @param results
334
+ */
335
+ private addTilesToDataSource;
336
+ /**
337
+ * Fetches the aggregation buckets for the given prefix filter type.
338
+ */
339
+ private fetchPrefixFilterBuckets;
340
+ /**
341
+ * Fetches and caches the prefix filter counts for the given filter type.
342
+ */
343
+ updatePrefixFilterCounts(filterType: PrefixFilterType): Promise<void>;
344
+ /**
345
+ * @inheritdoc
346
+ */
347
+ updatePrefixFiltersForCurrentSort(): Promise<void>;
348
+ /**
349
+ * @inheritdoc
350
+ */
351
+ refreshLetterCounts(): void;
352
+ }