@internetarchive/collection-browser 4.8.0 → 4.8.1-webdev-9227.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +33 -0
  2. package/dist/src/collection-browser.d.ts +2 -1
  3. package/dist/src/collection-browser.js +7 -7
  4. package/dist/src/collection-browser.js.map +1 -1
  5. package/dist/src/collection-facets/facet-row-template.d.ts +1 -1
  6. package/dist/src/collection-facets/facet-row-template.js +10 -6
  7. package/dist/src/collection-facets/facet-row-template.js.map +1 -1
  8. package/dist/src/collection-facets/facet-row.js +3 -1
  9. package/dist/src/collection-facets/facet-row.js.map +1 -1
  10. package/dist/src/collection-facets/more-facets-content.js +6 -5
  11. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  12. package/dist/src/collection-facets/more-facets-scroller.js +3 -2
  13. package/dist/src/collection-facets/more-facets-scroller.js.map +1 -1
  14. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js +13 -4
  15. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js.map +1 -1
  16. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +6 -2
  17. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
  18. package/dist/src/collection-facets.js +6 -5
  19. package/dist/src/collection-facets.js.map +1 -1
  20. package/dist/src/empty-placeholder.d.ts +7 -7
  21. package/dist/src/empty-placeholder.js +29 -15
  22. package/dist/src/empty-placeholder.js.map +1 -1
  23. package/dist/src/expanded-date-picker.js +3 -2
  24. package/dist/src/expanded-date-picker.js.map +1 -1
  25. package/dist/src/locales/es.d.ts +205 -0
  26. package/dist/src/locales/es.js +220 -0
  27. package/dist/src/locales/es.js.map +1 -0
  28. package/dist/src/manage/manage-bar.d.ts +3 -2
  29. package/dist/src/manage/manage-bar.js +15 -16
  30. package/dist/src/manage/manage-bar.js.map +1 -1
  31. package/dist/src/manage/remove-items-modal-content.js +3 -2
  32. package/dist/src/manage/remove-items-modal-content.js.map +1 -1
  33. package/dist/src/mediatype/mediatype-config.js +55 -18
  34. package/dist/src/mediatype/mediatype-config.js.map +1 -1
  35. package/dist/src/models.js +120 -40
  36. package/dist/src/models.js.map +1 -1
  37. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +6 -2
  38. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -1
  39. package/dist/src/sort-filter-bar/alpha-bar.js +5 -2
  40. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  41. package/dist/src/sort-filter-bar/sort-filter-bar.js +9 -8
  42. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  43. package/dist/src/tiles/grid/account-tile.js +3 -2
  44. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  45. package/dist/src/tiles/grid/collection-tile.js +9 -6
  46. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  47. package/dist/src/tiles/grid/item-tile.js +8 -7
  48. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  49. package/dist/src/tiles/grid/tile-stats.js +6 -3
  50. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  51. package/dist/src/tiles/list/tile-list-compact-header.js +3 -2
  52. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  53. package/dist/src/tiles/list/tile-list-compact.js +3 -1
  54. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  55. package/dist/src/tiles/list/tile-list.js +4 -3
  56. package/dist/src/tiles/list/tile-list.js.map +1 -1
  57. package/dist/src/tiles/overlay/text-overlay.js +3 -1
  58. package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
  59. package/dist/src/tiles/review-block.js +3 -2
  60. package/dist/src/tiles/review-block.js.map +1 -1
  61. package/dist/src/tiles/tile-dispatcher.d.ts +2 -1
  62. package/dist/src/tiles/tile-dispatcher.js +6 -5
  63. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  64. package/dist/src/tiles/tile-mediatype-icon.js +3 -1
  65. package/dist/src/tiles/tile-mediatype-icon.js.map +1 -1
  66. package/dist/src/utils/format-unit-size.d.ts +1 -1
  67. package/dist/src/utils/format-unit-size.js +20 -18
  68. package/dist/src/utils/format-unit-size.js.map +1 -1
  69. package/locales/es.d.ts +1 -0
  70. package/locales/es.js +1 -0
  71. package/package.json +13 -1
  72. package/.editorconfig +0 -29
  73. package/.github/workflows/ci.yml +0 -29
  74. package/.github/workflows/gh-pages-main.yml +0 -41
  75. package/.github/workflows/npm-publish.yml +0 -42
  76. package/.github/workflows/pr-preview.yml +0 -40
  77. package/.husky/pre-commit +0 -1
  78. package/.prettierignore +0 -1
  79. package/dist/test/collection-browser.test.d.ts +0 -1
  80. package/dist/test/collection-browser.test.js +0 -1815
  81. package/dist/test/collection-browser.test.js.map +0 -1
  82. package/dist/test/collection-facets/facet-row.test.d.ts +0 -1
  83. package/dist/test/collection-facets/facet-row.test.js +0 -291
  84. package/dist/test/collection-facets/facet-row.test.js.map +0 -1
  85. package/dist/test/collection-facets/facets-template.test.d.ts +0 -1
  86. package/dist/test/collection-facets/facets-template.test.js +0 -95
  87. package/dist/test/collection-facets/facets-template.test.js.map +0 -1
  88. package/dist/test/collection-facets/more-facets-content.test.d.ts +0 -1
  89. package/dist/test/collection-facets/more-facets-content.test.js +0 -509
  90. package/dist/test/collection-facets/more-facets-content.test.js.map +0 -1
  91. package/dist/test/collection-facets/more-facets-scroller.test.d.ts +0 -1
  92. package/dist/test/collection-facets/more-facets-scroller.test.js +0 -288
  93. package/dist/test/collection-facets/more-facets-scroller.test.js.map +0 -1
  94. package/dist/test/collection-facets/page-window.test.d.ts +0 -1
  95. package/dist/test/collection-facets/page-window.test.js +0 -175
  96. package/dist/test/collection-facets/page-window.test.js.map +0 -1
  97. package/dist/test/collection-facets/toggle-switch.test.d.ts +0 -1
  98. package/dist/test/collection-facets/toggle-switch.test.js +0 -99
  99. package/dist/test/collection-facets/toggle-switch.test.js.map +0 -1
  100. package/dist/test/collection-facets.test.d.ts +0 -2
  101. package/dist/test/collection-facets.test.js +0 -728
  102. package/dist/test/collection-facets.test.js.map +0 -1
  103. package/dist/test/data-source/collection-browser-data-source.test.d.ts +0 -1
  104. package/dist/test/data-source/collection-browser-data-source.test.js +0 -154
  105. package/dist/test/data-source/collection-browser-data-source.test.js.map +0 -1
  106. package/dist/test/empty-placeholder.test.d.ts +0 -1
  107. package/dist/test/empty-placeholder.test.js +0 -57
  108. package/dist/test/empty-placeholder.test.js.map +0 -1
  109. package/dist/test/expanded-date-picker.test.d.ts +0 -1
  110. package/dist/test/expanded-date-picker.test.js +0 -124
  111. package/dist/test/expanded-date-picker.test.js.map +0 -1
  112. package/dist/test/icon-overlay.test.d.ts +0 -1
  113. package/dist/test/icon-overlay.test.js +0 -31
  114. package/dist/test/icon-overlay.test.js.map +0 -1
  115. package/dist/test/image-block.test.d.ts +0 -1
  116. package/dist/test/image-block.test.js +0 -208
  117. package/dist/test/image-block.test.js.map +0 -1
  118. package/dist/test/item-image.test.d.ts +0 -1
  119. package/dist/test/item-image.test.js +0 -187
  120. package/dist/test/item-image.test.js.map +0 -1
  121. package/dist/test/manage/manage-bar.test.d.ts +0 -3
  122. package/dist/test/manage/manage-bar.test.js +0 -216
  123. package/dist/test/manage/manage-bar.test.js.map +0 -1
  124. package/dist/test/manage/remove-items-modal-content.test.d.ts +0 -1
  125. package/dist/test/manage/remove-items-modal-content.test.js +0 -60
  126. package/dist/test/manage/remove-items-modal-content.test.js.map +0 -1
  127. package/dist/test/mediatype-config.test.d.ts +0 -1
  128. package/dist/test/mediatype-config.test.js +0 -11
  129. package/dist/test/mediatype-config.test.js.map +0 -1
  130. package/dist/test/mocks/mock-analytics-handler.d.ts +0 -10
  131. package/dist/test/mocks/mock-analytics-handler.js +0 -16
  132. package/dist/test/mocks/mock-analytics-handler.js.map +0 -1
  133. package/dist/test/mocks/mock-search-responses.d.ts +0 -37
  134. package/dist/test/mocks/mock-search-responses.js +0 -1293
  135. package/dist/test/mocks/mock-search-responses.js.map +0 -1
  136. package/dist/test/mocks/mock-search-service.d.ts +0 -16
  137. package/dist/test/mocks/mock-search-service.js +0 -65
  138. package/dist/test/mocks/mock-search-service.js.map +0 -1
  139. package/dist/test/restoration-state-handler.test.d.ts +0 -1
  140. package/dist/test/restoration-state-handler.test.js +0 -335
  141. package/dist/test/restoration-state-handler.test.js.map +0 -1
  142. package/dist/test/review-block.test.d.ts +0 -1
  143. package/dist/test/review-block.test.js +0 -46
  144. package/dist/test/review-block.test.js.map +0 -1
  145. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +0 -1
  146. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +0 -12
  147. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +0 -1
  148. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +0 -1
  149. package/dist/test/sort-filter-bar/alpha-bar.test.js +0 -68
  150. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +0 -1
  151. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +0 -1
  152. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +0 -304
  153. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +0 -1
  154. package/dist/test/text-overlay.test.d.ts +0 -1
  155. package/dist/test/text-overlay.test.js +0 -43
  156. package/dist/test/text-overlay.test.js.map +0 -1
  157. package/dist/test/text-snippet-block.test.d.ts +0 -1
  158. package/dist/test/text-snippet-block.test.js +0 -58
  159. package/dist/test/text-snippet-block.test.js.map +0 -1
  160. package/dist/test/tile-stats.test.d.ts +0 -1
  161. package/dist/test/tile-stats.test.js +0 -167
  162. package/dist/test/tile-stats.test.js.map +0 -1
  163. package/dist/test/tiles/grid/account-tile.test.d.ts +0 -1
  164. package/dist/test/tiles/grid/account-tile.test.js +0 -96
  165. package/dist/test/tiles/grid/account-tile.test.js.map +0 -1
  166. package/dist/test/tiles/grid/collection-tile.test.d.ts +0 -1
  167. package/dist/test/tiles/grid/collection-tile.test.js +0 -90
  168. package/dist/test/tiles/grid/collection-tile.test.js.map +0 -1
  169. package/dist/test/tiles/grid/item-tile.test.d.ts +0 -1
  170. package/dist/test/tiles/grid/item-tile.test.js +0 -400
  171. package/dist/test/tiles/grid/item-tile.test.js.map +0 -1
  172. package/dist/test/tiles/grid/search-tile.test.d.ts +0 -1
  173. package/dist/test/tiles/grid/search-tile.test.js +0 -62
  174. package/dist/test/tiles/grid/search-tile.test.js.map +0 -1
  175. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +0 -1
  176. package/dist/test/tiles/hover/hover-pane-controller.test.js +0 -351
  177. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +0 -1
  178. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +0 -1
  179. package/dist/test/tiles/hover/tile-hover-pane.test.js +0 -53
  180. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +0 -1
  181. package/dist/test/tiles/list/tile-list-compact-header.test.d.ts +0 -1
  182. package/dist/test/tiles/list/tile-list-compact-header.test.js +0 -36
  183. package/dist/test/tiles/list/tile-list-compact-header.test.js.map +0 -1
  184. package/dist/test/tiles/list/tile-list-compact.test.d.ts +0 -1
  185. package/dist/test/tiles/list/tile-list-compact.test.js +0 -237
  186. package/dist/test/tiles/list/tile-list-compact.test.js.map +0 -1
  187. package/dist/test/tiles/list/tile-list.test.d.ts +0 -1
  188. package/dist/test/tiles/list/tile-list.test.js +0 -460
  189. package/dist/test/tiles/list/tile-list.test.js.map +0 -1
  190. package/dist/test/tiles/tile-dispatcher.test.d.ts +0 -1
  191. package/dist/test/tiles/tile-dispatcher.test.js +0 -246
  192. package/dist/test/tiles/tile-dispatcher.test.js.map +0 -1
  193. package/dist/test/tiles/tile-display-value-provider.test.d.ts +0 -1
  194. package/dist/test/tiles/tile-display-value-provider.test.js +0 -142
  195. package/dist/test/tiles/tile-display-value-provider.test.js.map +0 -1
  196. package/dist/test/tiles/tile-mediatype-icon.test.d.ts +0 -1
  197. package/dist/test/tiles/tile-mediatype-icon.test.js +0 -133
  198. package/dist/test/tiles/tile-mediatype-icon.test.js.map +0 -1
  199. package/dist/test/utils/array-equals.test.d.ts +0 -1
  200. package/dist/test/utils/array-equals.test.js +0 -27
  201. package/dist/test/utils/array-equals.test.js.map +0 -1
  202. package/dist/test/utils/format-count.test.d.ts +0 -1
  203. package/dist/test/utils/format-count.test.js +0 -24
  204. package/dist/test/utils/format-count.test.js.map +0 -1
  205. package/dist/test/utils/format-date.test.d.ts +0 -1
  206. package/dist/test/utils/format-date.test.js +0 -61
  207. package/dist/test/utils/format-date.test.js.map +0 -1
  208. package/dist/test/utils/format-unit-size.test.d.ts +0 -1
  209. package/dist/test/utils/format-unit-size.test.js +0 -18
  210. package/dist/test/utils/format-unit-size.test.js.map +0 -1
  211. package/dist/test/utils/local-date-from-utc.test.d.ts +0 -1
  212. package/dist/test/utils/local-date-from-utc.test.js +0 -27
  213. package/dist/test/utils/local-date-from-utc.test.js.map +0 -1
  214. package/dist/test/utils/normalize-filter-text.test.d.ts +0 -1
  215. package/dist/test/utils/normalize-filter-text.test.js +0 -69
  216. package/dist/test/utils/normalize-filter-text.test.js.map +0 -1
  217. package/docs/design/column-virtualization.md +0 -214
  218. package/eslint.config.mjs +0 -53
  219. package/index.html +0 -24
  220. package/index.ts +0 -29
  221. package/local.archive.org.cert +0 -86
  222. package/local.archive.org.key +0 -27
  223. package/pnpm-workspace.yaml +0 -30
  224. package/renovate.json +0 -6
  225. package/src/app-root.ts +0 -1282
  226. package/src/assets/img/icons/arrow-left.ts +0 -10
  227. package/src/assets/img/icons/arrow-right.ts +0 -10
  228. package/src/assets/img/icons/check.ts +0 -5
  229. package/src/assets/img/icons/chevron.ts +0 -4
  230. package/src/assets/img/icons/close-circle-dark.ts +0 -5
  231. package/src/assets/img/icons/contract.ts +0 -9
  232. package/src/assets/img/icons/empty-query.ts +0 -5
  233. package/src/assets/img/icons/expand.ts +0 -9
  234. package/src/assets/img/icons/eye-closed.ts +0 -5
  235. package/src/assets/img/icons/eye.ts +0 -5
  236. package/src/assets/img/icons/favorite-filled.ts +0 -10
  237. package/src/assets/img/icons/favorite-unfilled.ts +0 -9
  238. package/src/assets/img/icons/filter.ts +0 -10
  239. package/src/assets/img/icons/login-required.ts +0 -18
  240. package/src/assets/img/icons/mediatype/account.ts +0 -14
  241. package/src/assets/img/icons/mediatype/audio.ts +0 -14
  242. package/src/assets/img/icons/mediatype/collection.ts +0 -12
  243. package/src/assets/img/icons/mediatype/data.ts +0 -15
  244. package/src/assets/img/icons/mediatype/etree.ts +0 -14
  245. package/src/assets/img/icons/mediatype/film.ts +0 -14
  246. package/src/assets/img/icons/mediatype/images.ts +0 -13
  247. package/src/assets/img/icons/mediatype/radio.ts +0 -15
  248. package/src/assets/img/icons/mediatype/search.ts +0 -14
  249. package/src/assets/img/icons/mediatype/software.ts +0 -13
  250. package/src/assets/img/icons/mediatype/texts.ts +0 -13
  251. package/src/assets/img/icons/mediatype/tv-commercial.ts +0 -12
  252. package/src/assets/img/icons/mediatype/tv-fact-check.ts +0 -12
  253. package/src/assets/img/icons/mediatype/tv-quote.ts +0 -12
  254. package/src/assets/img/icons/mediatype/tv.ts +0 -14
  255. package/src/assets/img/icons/mediatype/video.ts +0 -14
  256. package/src/assets/img/icons/mediatype/web.ts +0 -13
  257. package/src/assets/img/icons/null-result.ts +0 -5
  258. package/src/assets/img/icons/quote.ts +0 -7
  259. package/src/assets/img/icons/restricted.ts +0 -13
  260. package/src/assets/img/icons/reviews.ts +0 -11
  261. package/src/assets/img/icons/upload.ts +0 -12
  262. package/src/assets/img/icons/views.ts +0 -11
  263. package/src/circular-activity-indicator.ts +0 -64
  264. package/src/collection-browser.ts +0 -3165
  265. package/src/collection-facets/facet-row-template.ts +0 -242
  266. package/src/collection-facets/facet-row.ts +0 -122
  267. package/src/collection-facets/facet-tombstone-row.ts +0 -40
  268. package/src/collection-facets/facets-template.ts +0 -85
  269. package/src/collection-facets/models.ts +0 -16
  270. package/src/collection-facets/more-facets-content.ts +0 -951
  271. package/src/collection-facets/more-facets-scroller.ts +0 -485
  272. package/src/collection-facets/page-window.ts +0 -247
  273. package/src/collection-facets/smart-facets/dedupe.ts +0 -44
  274. package/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.ts +0 -27
  275. package/src/collection-facets/smart-facets/heuristics/index.ts +0 -3
  276. package/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.ts +0 -17
  277. package/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.ts +0 -70
  278. package/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.ts +0 -79
  279. package/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.ts +0 -93
  280. package/src/collection-facets/smart-facets/models.ts +0 -36
  281. package/src/collection-facets/smart-facets/smart-facet-bar.ts +0 -437
  282. package/src/collection-facets/smart-facets/smart-facet-button.ts +0 -145
  283. package/src/collection-facets/smart-facets/smart-facet-dropdown.ts +0 -185
  284. package/src/collection-facets/smart-facets/smart-facet-equals.ts +0 -16
  285. package/src/collection-facets/smart-facets/smart-facet-heuristics.ts +0 -26
  286. package/src/collection-facets/toggle-switch.ts +0 -175
  287. package/src/collection-facets.ts +0 -1013
  288. package/src/data-source/collection-browser-data-source-interface.ts +0 -351
  289. package/src/data-source/collection-browser-data-source.ts +0 -1474
  290. package/src/data-source/collection-browser-query-state.ts +0 -60
  291. package/src/data-source/models.ts +0 -56
  292. package/src/empty-placeholder.ts +0 -192
  293. package/src/expanded-date-picker.ts +0 -191
  294. package/src/language-code-handler/language-code-handler.ts +0 -64
  295. package/src/language-code-handler/language-code-mapping.ts +0 -564
  296. package/src/manage/manage-bar.ts +0 -276
  297. package/src/manage/remove-items-modal-content.ts +0 -102
  298. package/src/mediatype/mediatype-config.ts +0 -146
  299. package/src/models.ts +0 -912
  300. package/src/restoration-state-handler.ts +0 -550
  301. package/src/sort-filter-bar/alpha-bar-tooltip.ts +0 -53
  302. package/src/sort-filter-bar/alpha-bar.ts +0 -252
  303. package/src/sort-filter-bar/img/compact.ts +0 -5
  304. package/src/sort-filter-bar/img/list.ts +0 -5
  305. package/src/sort-filter-bar/img/sort-toggle-disabled.ts +0 -15
  306. package/src/sort-filter-bar/img/sort-toggle-down.ts +0 -17
  307. package/src/sort-filter-bar/img/sort-toggle-up.ts +0 -17
  308. package/src/sort-filter-bar/img/sort-triangle.ts +0 -5
  309. package/src/sort-filter-bar/img/tile.ts +0 -5
  310. package/src/sort-filter-bar/sort-filter-bar.ts +0 -733
  311. package/src/styles/ia-button.ts +0 -139
  312. package/src/styles/item-image-styles.ts +0 -124
  313. package/src/styles/sr-only.ts +0 -18
  314. package/src/styles/tile-action-styles.ts +0 -59
  315. package/src/tiles/base-tile-component.ts +0 -124
  316. package/src/tiles/collection-browser-loading-tile.ts +0 -26
  317. package/src/tiles/grid/account-tile.ts +0 -113
  318. package/src/tiles/grid/collection-tile.ts +0 -184
  319. package/src/tiles/grid/item-tile.ts +0 -347
  320. package/src/tiles/grid/search-tile.ts +0 -90
  321. package/src/tiles/grid/styles/tile-grid-shared-styles.ts +0 -130
  322. package/src/tiles/grid/tile-stats.ts +0 -211
  323. package/src/tiles/hover/hover-pane-controller.ts +0 -638
  324. package/src/tiles/hover/tile-hover-pane.ts +0 -184
  325. package/src/tiles/image-block.ts +0 -162
  326. package/src/tiles/item-image.ts +0 -214
  327. package/src/tiles/list/tile-list-compact-header.ts +0 -112
  328. package/src/tiles/list/tile-list-compact.ts +0 -278
  329. package/src/tiles/list/tile-list.ts +0 -718
  330. package/src/tiles/models.ts +0 -21
  331. package/src/tiles/overlay/icon-overlay.ts +0 -57
  332. package/src/tiles/overlay/text-overlay.ts +0 -79
  333. package/src/tiles/review-block.ts +0 -130
  334. package/src/tiles/text-snippet-block.ts +0 -132
  335. package/src/tiles/tile-dispatcher.ts +0 -637
  336. package/src/tiles/tile-display-value-provider.ts +0 -133
  337. package/src/tiles/tile-mediatype-icon.ts +0 -133
  338. package/src/utils/analytics-events.ts +0 -29
  339. package/src/utils/array-equals.ts +0 -8
  340. package/src/utils/collapse-repeated-quotes.ts +0 -13
  341. package/src/utils/date-filter-field.ts +0 -11
  342. package/src/utils/facet-utils.ts +0 -183
  343. package/src/utils/format-count.ts +0 -95
  344. package/src/utils/format-date.ts +0 -62
  345. package/src/utils/format-unit-size.ts +0 -43
  346. package/src/utils/local-date-from-utc.ts +0 -15
  347. package/src/utils/log.ts +0 -14
  348. package/src/utils/normalize-filter-text.ts +0 -54
  349. package/src/utils/resolve-mediatype.ts +0 -26
  350. package/src/utils/sha1.ts +0 -9
  351. package/test/collection-browser.test.ts +0 -2639
  352. package/test/collection-facets/facet-row.test.ts +0 -421
  353. package/test/collection-facets/facets-template.test.ts +0 -139
  354. package/test/collection-facets/more-facets-content.test.ts +0 -716
  355. package/test/collection-facets/more-facets-scroller.test.ts +0 -401
  356. package/test/collection-facets/page-window.test.ts +0 -208
  357. package/test/collection-facets/toggle-switch.test.ts +0 -164
  358. package/test/collection-facets.test.ts +0 -928
  359. package/test/data-source/collection-browser-data-source.test.ts +0 -193
  360. package/test/empty-placeholder.test.ts +0 -88
  361. package/test/expanded-date-picker.test.ts +0 -201
  362. package/test/icon-overlay.test.ts +0 -38
  363. package/test/image-block.test.ts +0 -247
  364. package/test/item-image.test.ts +0 -220
  365. package/test/manage/manage-bar.test.ts +0 -347
  366. package/test/manage/remove-items-modal-content.test.ts +0 -81
  367. package/test/mediatype-config.test.ts +0 -11
  368. package/test/mocks/mock-analytics-handler.ts +0 -30
  369. package/test/mocks/mock-search-responses.ts +0 -1420
  370. package/test/mocks/mock-search-service.ts +0 -136
  371. package/test/restoration-state-handler.test.ts +0 -480
  372. package/test/review-block.test.ts +0 -62
  373. package/test/sort-filter-bar/alpha-bar-tooltip.test.ts +0 -17
  374. package/test/sort-filter-bar/alpha-bar.test.ts +0 -101
  375. package/test/sort-filter-bar/sort-filter-bar.test.ts +0 -443
  376. package/test/text-overlay.test.ts +0 -55
  377. package/test/text-snippet-block.test.ts +0 -85
  378. package/test/tile-stats.test.ts +0 -191
  379. package/test/tiles/grid/account-tile.test.ts +0 -121
  380. package/test/tiles/grid/collection-tile.test.ts +0 -114
  381. package/test/tiles/grid/item-tile.test.ts +0 -520
  382. package/test/tiles/grid/search-tile.test.ts +0 -75
  383. package/test/tiles/hover/hover-pane-controller.test.ts +0 -482
  384. package/test/tiles/hover/tile-hover-pane.test.ts +0 -80
  385. package/test/tiles/list/tile-list-compact-header.test.ts +0 -43
  386. package/test/tiles/list/tile-list-compact.test.ts +0 -282
  387. package/test/tiles/list/tile-list.test.ts +0 -576
  388. package/test/tiles/tile-dispatcher.test.ts +0 -320
  389. package/test/tiles/tile-display-value-provider.test.ts +0 -172
  390. package/test/tiles/tile-mediatype-icon.test.ts +0 -160
  391. package/test/utils/array-equals.test.ts +0 -31
  392. package/test/utils/format-count.test.ts +0 -32
  393. package/test/utils/format-date.test.ts +0 -89
  394. package/test/utils/format-unit-size.test.ts +0 -21
  395. package/test/utils/local-date-from-utc.test.ts +0 -37
  396. package/test/utils/normalize-filter-text.test.ts +0 -87
  397. package/tsconfig.json +0 -25
  398. package/types/dompurify.d.ts +0 -1
  399. package/vite.config.ts +0 -29
  400. package/web-dev-server.config.mjs +0 -30
  401. package/web-test-runner.config.mjs +0 -57
@@ -1,136 +0,0 @@
1
- import type { Result } from '@internetarchive/result-type';
2
- import type {
3
- SearchParams,
4
- SearchResponse,
5
- SearchServiceInterface,
6
- SearchServiceError,
7
- SearchType,
8
- } from '@internetarchive/search-service';
9
- import {
10
- getMockSuccessSingleResult,
11
- getMockSuccessMultipleResults,
12
- getMockSuccessSingleResultWithSort,
13
- getMockSuccessLoggedInResult,
14
- getMockSuccessNoPreviewResult,
15
- getMockSuccessLoggedInAndNoPreviewResult,
16
- getMockSuccessWithYearHistogramAggs,
17
- getMockSuccessWithDateHistogramAggs,
18
- getMockSuccessMultiLineDescription,
19
- getMockSuccessFirstTitleResult,
20
- getMockSuccessFirstCreatorResult,
21
- getMockErrorResult,
22
- getMockMalformedResult,
23
- getMockSuccessWithCollectionTitles,
24
- getMockSuccessWithChannelAliases,
25
- getMockSuccessWithCollectionAggregations,
26
- getMockSuccessExtraQuotedHref,
27
- getMockSuccessWithDefaultSort,
28
- getMockSuccessWithConciseDefaultSort,
29
- getMockSuccessWithDefaultFavSort,
30
- getMockSuccessWithParentCollections,
31
- getMockSuccessForTvCollection,
32
- getMockSuccessManyFields,
33
- getMockSuccessNoResults,
34
- getMockSuccessWithWebArchiveHits,
35
- getMockSuccessWithManyAggregations,
36
- getMockSuccessWithLargeAggregations,
37
- getMockSuccessTvFields,
38
- getMockSuccessArchiveOrgUserResult,
39
- getMockSuccessArchiveOrgUserNoBlurResult,
40
- } from './mock-search-responses';
41
-
42
- const responses: Record<
43
- string,
44
- () => Result<SearchResponse, SearchServiceError>
45
- > = {
46
- 'single-result': getMockSuccessSingleResult,
47
- years: getMockSuccessWithYearHistogramAggs,
48
- months: getMockSuccessWithDateHistogramAggs,
49
- 'multi-line-description': getMockSuccessMultiLineDescription,
50
- loggedin: getMockSuccessLoggedInResult,
51
- 'no-preview': getMockSuccessNoPreviewResult,
52
- 'loggedin-no-preview': getMockSuccessLoggedInAndNoPreviewResult,
53
- 'archive-org-user-loggedin': getMockSuccessArchiveOrgUserResult,
54
- 'archive-org-user-loggedin-noblur': getMockSuccessArchiveOrgUserNoBlurResult,
55
- 'first-title': getMockSuccessFirstTitleResult,
56
- 'first-creator': getMockSuccessFirstCreatorResult,
57
- 'collection-titles': getMockSuccessWithCollectionTitles,
58
- 'channel-aliases': getMockSuccessWithChannelAliases,
59
- 'collection-aggregations': getMockSuccessWithCollectionAggregations,
60
- 'extra-quoted-href': getMockSuccessExtraQuotedHref,
61
- 'default-sort': getMockSuccessWithDefaultSort,
62
- 'default-sort-concise': getMockSuccessWithConciseDefaultSort,
63
- 'fav-sort': getMockSuccessWithDefaultFavSort,
64
- 'parent-collections': getMockSuccessWithParentCollections,
65
- 'tv-collection': getMockSuccessForTvCollection,
66
- 'web-archive': getMockSuccessWithWebArchiveHits,
67
- 'more-facets': getMockSuccessWithManyAggregations,
68
- 'large-facets': getMockSuccessWithLargeAggregations,
69
- 'many-fields': getMockSuccessManyFields,
70
- 'tv-fields': getMockSuccessTvFields,
71
- 'no-results': getMockSuccessNoResults,
72
- error: getMockErrorResult,
73
- malformed: getMockMalformedResult,
74
- };
75
-
76
- export class MockSearchService implements SearchServiceInterface {
77
- searchParams?: SearchParams;
78
-
79
- searchType?: SearchType;
80
-
81
- asyncResponse: boolean;
82
-
83
- asyncResponseDelay: number;
84
-
85
- resultsSpy: Function;
86
-
87
- constructor({
88
- asyncResponse = false,
89
- asyncResponseDelay = 0,
90
- resultsSpy = () => {},
91
- } = {}) {
92
- this.asyncResponse = asyncResponse;
93
- this.asyncResponseDelay = asyncResponseDelay;
94
- this.resultsSpy = resultsSpy;
95
- }
96
-
97
- async search(
98
- params: SearchParams,
99
- searchType: SearchType,
100
- ): Promise<Result<SearchResponse, SearchServiceError>> {
101
- this.searchParams = params;
102
- this.searchType = searchType;
103
-
104
- if (this.asyncResponse) {
105
- // Add an artificial 1-tick delay
106
- await new Promise(res => {
107
- setTimeout(res, this.asyncResponseDelay);
108
- });
109
- }
110
-
111
- const responseKey =
112
- (this.searchParams.query || this.searchParams.pageTarget) ?? '';
113
- const resultFn: () => Result<SearchResponse, SearchServiceError> =
114
- responses[responseKey] ?? getMockSuccessMultipleResults;
115
- let result = resultFn();
116
-
117
- // with-sort query has special handling
118
- if (this.searchParams.query === 'with-sort') {
119
- result = getMockSuccessSingleResultWithSort(this.resultsSpy);
120
- }
121
-
122
- // Apply any uid param from the request
123
- if (result.success) {
124
- (result.success.request.clientParameters as any).uid = params.uid;
125
- }
126
-
127
- return result;
128
- }
129
-
130
- async itemDetails(
131
- _: string,
132
- ): Promise<Result<SearchResponse, SearchServiceError>> {
133
- // We don't currently use the itemDetails method in collection-browser
134
- throw new Error('not implemented');
135
- }
136
- }
@@ -1,480 +0,0 @@
1
- import { SearchType } from '@internetarchive/search-service';
2
- import { expect } from '@open-wc/testing';
3
- import { SortField, getDefaultSelectedFacets } from '../src/models';
4
- import { RestorationStateHandler } from '../src/restoration-state-handler';
5
-
6
- describe('Restoration state handler', () => {
7
- it('should restore query from URL', async () => {
8
- const handler = new RestorationStateHandler({ context: 'search' });
9
-
10
- const url = new URL(window.location.href);
11
- url.search = '?query=boop';
12
- window.history.replaceState({ path: url.href }, '', url.href);
13
-
14
- const restorationState = handler.getRestorationState();
15
- expect(restorationState.baseQuery).to.equal('boop');
16
- });
17
-
18
- it('should restore default search type from URL without valid sin', async () => {
19
- const handler = new RestorationStateHandler({ context: 'search' });
20
-
21
- const url = new URL(window.location.href);
22
- url.search = '?sin=foo';
23
- window.history.replaceState({ path: url.href }, '', url.href);
24
-
25
- const restorationState = handler.getRestorationState();
26
- expect(restorationState.searchType).to.equal(SearchType.DEFAULT);
27
- });
28
-
29
- it('should restore default search type if sin explicitly empty in URL', async () => {
30
- const handler = new RestorationStateHandler({ context: 'search' });
31
-
32
- const url = new URL(window.location.href);
33
- url.search = '?sin=';
34
- window.history.replaceState({ path: url.href }, '', url.href);
35
-
36
- const restorationState = handler.getRestorationState();
37
- expect(restorationState.searchType).to.equal(SearchType.DEFAULT);
38
- });
39
-
40
- it('should restore full text search type from URL', async () => {
41
- const handler = new RestorationStateHandler({ context: 'search' });
42
-
43
- const url = new URL(window.location.href);
44
- url.search = '?sin=TXT';
45
- window.history.replaceState({ path: url.href }, '', url.href);
46
-
47
- const restorationState = handler.getRestorationState();
48
- expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);
49
- });
50
-
51
- it('should restore radio search type from URL', async () => {
52
- const handler = new RestorationStateHandler({ context: 'search' });
53
-
54
- const url = new URL(window.location.href);
55
- url.search = '?sin=RADIO';
56
- window.history.replaceState({ path: url.href }, '', url.href);
57
-
58
- const restorationState = handler.getRestorationState();
59
- expect(restorationState.searchType).to.equal(SearchType.RADIO);
60
- });
61
-
62
- it('should restore TV search type from URL', async () => {
63
- const handler = new RestorationStateHandler({ context: 'search' });
64
-
65
- const url = new URL(window.location.href);
66
- url.search = '?sin=TV';
67
- window.history.replaceState({ path: url.href }, '', url.href);
68
-
69
- const restorationState = handler.getRestorationState();
70
- expect(restorationState.searchType).to.equal(SearchType.TV);
71
- });
72
-
73
- it('should restore metadata search type from URL', async () => {
74
- const handler = new RestorationStateHandler({ context: 'search' });
75
-
76
- const url = new URL(window.location.href);
77
- url.search = '?sin=MD';
78
- window.history.replaceState({ path: url.href }, '', url.href);
79
-
80
- const restorationState = handler.getRestorationState();
81
- expect(restorationState.searchType).to.equal(SearchType.METADATA);
82
- });
83
-
84
- it('should restore page number from URL', async () => {
85
- const handler = new RestorationStateHandler({ context: 'search' });
86
-
87
- const url = new URL(window.location.href);
88
- url.search = '?page=42';
89
- window.history.replaceState({ path: url.href }, '', url.href);
90
-
91
- const restorationState = handler.getRestorationState();
92
- expect(restorationState.currentPage).to.equal(42);
93
- });
94
-
95
- it('should restore selected year facets from URL', async () => {
96
- const handler = new RestorationStateHandler({ context: 'search' });
97
-
98
- const url = new URL(window.location.href);
99
- url.search = '?and[]=year:"2018"';
100
- window.history.replaceState({ path: url.href }, '', url.href);
101
-
102
- const restorationState = handler.getRestorationState();
103
- expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
104
- 'selected',
105
- );
106
- });
107
-
108
- it('should ignore unrecognized facet types in URL', async () => {
109
- const handler = new RestorationStateHandler({ context: 'search' });
110
-
111
- const url = new URL(window.location.href);
112
- url.search = '?and[]=foo:"bar"';
113
- window.history.replaceState({ path: url.href }, '', url.href);
114
-
115
- const restorationState = handler.getRestorationState();
116
- expect(restorationState.selectedFacets).to.deep.equal(
117
- getDefaultSelectedFacets(),
118
- );
119
- });
120
-
121
- it('should restore selected date range facets from URL', async () => {
122
- const handler = new RestorationStateHandler({ context: 'search' });
123
-
124
- const url = new URL(window.location.href);
125
- url.search = '?and[]=year:"2018+TO+2021"';
126
- window.history.replaceState({ path: url.href }, '', url.href);
127
-
128
- const restorationState = handler.getRestorationState();
129
- expect(restorationState.minSelectedDate).to.equal('2018');
130
- expect(restorationState.maxSelectedDate).to.equal('2021');
131
- });
132
-
133
- it('should restore creator filter from URL', async () => {
134
- const handler = new RestorationStateHandler({ context: 'search' });
135
-
136
- const url = new URL(window.location.href);
137
- url.search = '?and[]=firstCreator:F';
138
- window.history.replaceState({ path: url.href }, '', url.href);
139
-
140
- const restorationState = handler.getRestorationState();
141
- expect(restorationState.selectedCreatorFilter).to.equal('F');
142
- });
143
-
144
- it('should restore title filter from URL', async () => {
145
- const handler = new RestorationStateHandler({ context: 'search' });
146
-
147
- const url = new URL(window.location.href);
148
- url.search = '?and[]=firstTitle:F';
149
- window.history.replaceState({ path: url.href }, '', url.href);
150
-
151
- const restorationState = handler.getRestorationState();
152
- expect(restorationState.selectedTitleFilter).to.equal('F');
153
- });
154
-
155
- it('should restore other selected facets from URL', async () => {
156
- const handler = new RestorationStateHandler({ context: 'search' });
157
-
158
- const url = new URL(window.location.href);
159
- url.search = '?and[]=subject:"foo"';
160
- window.history.replaceState({ path: url.href }, '', url.href);
161
-
162
- const restorationState = handler.getRestorationState();
163
- expect(restorationState.selectedFacets.subject?.foo.state).to.equal(
164
- 'selected',
165
- );
166
- });
167
-
168
- it('should restore negative facets from URL', async () => {
169
- const handler = new RestorationStateHandler({ context: 'search' });
170
-
171
- const url = new URL(window.location.href);
172
- url.search = '?not[]=year:2018';
173
- window.history.replaceState({ path: url.href }, '', url.href);
174
-
175
- const restorationState = handler.getRestorationState();
176
- expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
177
- 'hidden',
178
- );
179
- });
180
-
181
- it('should restore multiple selected/negative facets from URL', async () => {
182
- const handler = new RestorationStateHandler({ context: 'search' });
183
-
184
- const url = new URL(window.location.href);
185
- url.search =
186
- '?and[]=collection:"foo"&and[]=collection:"bar"&not[]=collection:"baz"&not[]=collection:"boop"';
187
- window.history.replaceState({ path: url.href }, '', url.href);
188
-
189
- const restorationState = handler.getRestorationState();
190
-
191
- expect(restorationState.selectedFacets.collection?.foo.state).to.equal(
192
- 'selected',
193
- );
194
- expect(restorationState.selectedFacets.collection?.bar.state).to.equal(
195
- 'selected',
196
- );
197
-
198
- expect(restorationState.selectedFacets.collection?.baz.state).to.equal(
199
- 'hidden',
200
- );
201
- expect(restorationState.selectedFacets.collection?.boop.state).to.equal(
202
- 'hidden',
203
- );
204
- });
205
-
206
- it('negative facets take precedence if both present in URL', async () => {
207
- const handler = new RestorationStateHandler({ context: 'search' });
208
-
209
- const url = new URL(window.location.href);
210
- url.search = '?and[]=collection:"foo"&not[]=collection:"foo"';
211
- window.history.replaceState({ path: url.href }, '', url.href);
212
-
213
- const restorationState = handler.getRestorationState();
214
- expect(restorationState.selectedFacets.collection?.foo.state).to.equal(
215
- 'hidden',
216
- );
217
- });
218
-
219
- it('should restore selected facets with numbers in the square brackets', async () => {
220
- const handler = new RestorationStateHandler({ context: 'search' });
221
-
222
- const url = new URL(window.location.href);
223
- url.search = '?and[12]=subject:"foo"';
224
- window.history.replaceState({ path: url.href }, '', url.href);
225
-
226
- const restorationState = handler.getRestorationState();
227
- expect(restorationState.selectedFacets.subject?.foo.state).to.equal(
228
- 'selected',
229
- );
230
- });
231
-
232
- it('should restore negative facets with numbers in the square brackets', async () => {
233
- const handler = new RestorationStateHandler({ context: 'search' });
234
-
235
- const url = new URL(window.location.href);
236
- url.search = '?not[12]=year:2018';
237
- window.history.replaceState({ path: url.href }, '', url.href);
238
-
239
- const restorationState = handler.getRestorationState();
240
- expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
241
- 'hidden',
242
- );
243
- });
244
-
245
- it('should restore any TV clip filters from URL', async () => {
246
- const handler = new RestorationStateHandler({ context: 'search' });
247
- const url = new URL(window.location.href);
248
-
249
- // Commercials
250
- url.search = '?only_commercials=1';
251
- window.history.replaceState({ path: url.href }, '', url.href);
252
- const commercialsRestorationState = handler.getRestorationState();
253
- expect(
254
- commercialsRestorationState.selectedFacets.clip_type?.commercial.state,
255
- ).to.equal('selected');
256
-
257
- // Fact checks
258
- url.search = '?only_factchecks=1';
259
- window.history.replaceState({ path: url.href }, '', url.href);
260
- const factchecksRestorationState = handler.getRestorationState();
261
- expect(
262
- factchecksRestorationState.selectedFacets.clip_type?.['fact check'].state,
263
- ).to.equal('selected');
264
-
265
- // Quotes
266
- url.search = '?only_quotes=1';
267
- window.history.replaceState({ path: url.href }, '', url.href);
268
- const quotesRestorationState = handler.getRestorationState();
269
- expect(
270
- quotesRestorationState.selectedFacets.clip_type?.quote.state,
271
- ).to.equal('selected');
272
-
273
- // No filter param
274
- url.search = '';
275
- window.history.replaceState({ path: url.href }, '', url.href);
276
- const unfilteredRestorationState = handler.getRestorationState();
277
- expect(unfilteredRestorationState.selectedFacets.clip_type).to.deep.equal(
278
- {},
279
- );
280
- });
281
-
282
- it('should restore sort from URL (space format)', async () => {
283
- const handler = new RestorationStateHandler({ context: 'search' });
284
-
285
- const url = new URL(window.location.href);
286
- url.search = '?sort=date+desc';
287
- window.history.replaceState({ path: url.href }, '', url.href);
288
-
289
- const restorationState = handler.getRestorationState();
290
- expect(restorationState.selectedSort).to.equal('date');
291
- expect(restorationState.sortDirection).to.equal('desc');
292
- });
293
-
294
- it('should restore sort from URL (prefix format, desc)', async () => {
295
- const handler = new RestorationStateHandler({ context: 'search' });
296
-
297
- const url = new URL(window.location.href);
298
- url.search = '?sort=-date';
299
- window.history.replaceState({ path: url.href }, '', url.href);
300
-
301
- const restorationState = handler.getRestorationState();
302
- expect(restorationState.selectedSort).to.equal('date');
303
- expect(restorationState.sortDirection).to.equal('desc');
304
- });
305
-
306
- it('should restore sort from URL (prefix format, asc)', async () => {
307
- const handler = new RestorationStateHandler({ context: 'search' });
308
-
309
- const url = new URL(window.location.href);
310
- url.search = '?sort=date';
311
- window.history.replaceState({ path: url.href }, '', url.href);
312
-
313
- const restorationState = handler.getRestorationState();
314
- expect(restorationState.selectedSort).to.equal('date');
315
- expect(restorationState.sortDirection).to.equal('asc');
316
- });
317
-
318
- it('should restore sort from URL (space format)', async () => {
319
- const handler = new RestorationStateHandler({ context: 'search' });
320
-
321
- const url = new URL(window.location.href);
322
- url.search = '?sort=foo+desc';
323
- window.history.replaceState({ path: url.href }, '', url.href);
324
-
325
- const restorationState = handler.getRestorationState();
326
- expect(restorationState.selectedSort).to.equal('unrecognized');
327
- expect(restorationState.sortDirection).to.equal('desc');
328
- });
329
-
330
- it('should restore unrecognized sort from URL (prefix format)', async () => {
331
- const handler = new RestorationStateHandler({ context: 'search' });
332
-
333
- const url = new URL(window.location.href);
334
- url.search = '?sort=-foo';
335
- window.history.replaceState({ path: url.href }, '', url.href);
336
-
337
- const restorationState = handler.getRestorationState();
338
- expect(restorationState.selectedSort).to.equal('unrecognized');
339
- expect(restorationState.sortDirection).to.equal('desc');
340
- });
341
-
342
- it('should save direction to URL even for unrecognized sort fields', async () => {
343
- const url = new URL(window.location.href);
344
- url.search = '?sort=foo';
345
- window.history.replaceState({ path: url.href }, '', url.href);
346
-
347
- const handler = new RestorationStateHandler({ context: 'search' });
348
- handler.persistState({
349
- selectedSort: SortField.unrecognized,
350
- sortDirection: 'desc',
351
- selectedFacets: getDefaultSelectedFacets(),
352
- });
353
-
354
- expect(window.location.search).to.equal('?sort=-foo');
355
- });
356
-
357
- it('should keep existing direction for unrecognized sort fields when unspecified in state', async () => {
358
- const url = new URL(window.location.href);
359
- url.search = '?sort=foo+desc';
360
- window.history.replaceState({ path: url.href }, '', url.href);
361
-
362
- const handler = new RestorationStateHandler({ context: 'search' });
363
- handler.persistState({
364
- selectedSort: SortField.unrecognized,
365
- selectedFacets: getDefaultSelectedFacets(),
366
- });
367
-
368
- expect(window.location.search).to.equal('?sort=-foo');
369
- });
370
-
371
- it('should just ignore unrecognized sort fields w/ unknown formats', async () => {
372
- const url = new URL(window.location.href);
373
- url.search = '?sort=+foo';
374
- window.history.replaceState({ path: url.href }, '', url.href);
375
-
376
- const handler = new RestorationStateHandler({ context: 'search' });
377
- handler.persistState({
378
- selectedSort: SortField.unrecognized,
379
- selectedFacets: getDefaultSelectedFacets(),
380
- });
381
-
382
- expect(window.location.search).to.equal('?sort=+foo');
383
- });
384
-
385
- it('should not save current page state to the URL for page 1', async () => {
386
- const url = new URL(window.location.href);
387
- url.search = '';
388
- window.history.replaceState({ path: url.href }, '', url.href);
389
-
390
- const handler = new RestorationStateHandler({ context: 'search' });
391
- handler.persistState({
392
- currentPage: 1,
393
- selectedFacets: getDefaultSelectedFacets(),
394
- });
395
-
396
- expect(window.location.search).to.be.empty;
397
- });
398
-
399
- it('should save current page state to the URL when page > 1', async () => {
400
- const url = new URL(window.location.href);
401
- url.search = '';
402
- window.history.replaceState({ path: url.href }, '', url.href);
403
-
404
- const handler = new RestorationStateHandler({ context: 'search' });
405
- handler.persistState({
406
- currentPage: 2,
407
- selectedFacets: getDefaultSelectedFacets(),
408
- });
409
-
410
- expect(window.location.search).to.equal('?page=2');
411
- });
412
-
413
- it('should upgrade legacy search params to new ones', async () => {
414
- const url = new URL(window.location.href);
415
- url.search = '?q=foo';
416
- window.history.replaceState({ path: url.href }, '', url.href);
417
-
418
- const handler = new RestorationStateHandler({ context: 'search' });
419
- const restorationState = handler.getRestorationState();
420
- expect(restorationState.baseQuery).to.equal('foo');
421
-
422
- handler.persistState(restorationState);
423
- expect(window.location.search).to.equal('?query=foo');
424
- });
425
-
426
- it('should remove empty sin param', async () => {
427
- const url = new URL(window.location.href);
428
- url.search = '?sin=';
429
- window.history.replaceState({ path: url.href }, '', url.href);
430
-
431
- const handler = new RestorationStateHandler({ context: 'search' });
432
-
433
- handler.persistState({ selectedFacets: getDefaultSelectedFacets() });
434
- expect(window.location.search).to.equal('');
435
- });
436
-
437
- it('should persist metadata search type only when option is true', async () => {
438
- const url = new URL(window.location.href);
439
- url.search = '?sin=';
440
- window.history.replaceState({ path: url.href }, '', url.href);
441
-
442
- const handler = new RestorationStateHandler({ context: 'search' });
443
-
444
- handler.persistState(
445
- {
446
- selectedFacets: getDefaultSelectedFacets(),
447
- searchType: SearchType.METADATA,
448
- },
449
- { persistMetadataSearchType: false },
450
- );
451
- expect(window.location.search).to.equal('');
452
-
453
- handler.persistState(
454
- {
455
- selectedFacets: getDefaultSelectedFacets(),
456
- searchType: SearchType.METADATA,
457
- },
458
- { persistMetadataSearchType: true },
459
- );
460
- expect(window.location.search).to.equal('?sin=MD');
461
- });
462
-
463
- it('round trip load/persist should erase numbers in square brackets', async () => {
464
- const handler = new RestorationStateHandler({ context: 'search' });
465
-
466
- const url = new URL(window.location.href);
467
- url.search = '?and[0]=subject:"foo"';
468
- window.history.replaceState({ path: url.href }, '', url.href);
469
-
470
- // Load state from the URL and immediately persist it back to the URL
471
- const restorationState = handler.getRestorationState();
472
- handler.persistState(restorationState);
473
-
474
- // Ensure the new URL includes the "normalized" facet parameter and not the numbered one
475
- expect(decodeURIComponent(window.location.search)).to.include(
476
- 'and[]=subject:"foo"',
477
- );
478
- expect(new URL(window.location.href).searchParams.get('and[0]')).to.be.null;
479
- });
480
- });
@@ -1,62 +0,0 @@
1
- import { expect, fixture } from '@open-wc/testing';
2
- import { html } from 'lit';
3
- import type { ReviewBlock } from '../src/tiles/review-block';
4
- import '../src/tiles/review-block';
5
-
6
- describe('ReviewBlock component', () => {
7
- it('renders basic component', async () => {
8
- const el = await fixture<ReviewBlock>(
9
- html`<review-block
10
- title="Foo"
11
- body="foo bar baz"
12
- starRating="3"
13
- ></review-block>`,
14
- );
15
-
16
- el.title = 'Foo';
17
- await el.updateComplete;
18
-
19
- const container = el.shadowRoot?.querySelector('.review-container');
20
- expect(container).to.exist;
21
-
22
- const title = el.shadowRoot?.querySelector('.review-title');
23
- expect(title?.textContent?.trim()).to.equal('Foo');
24
-
25
- const body = el.shadowRoot?.querySelector('.review-body');
26
- expect(body?.textContent?.trim()).to.equal('foo bar baz');
27
-
28
- const stars = el.shadowRoot?.querySelector('.star-rating');
29
- expect(stars).to.exist;
30
- expect(stars?.querySelectorAll('svg').length).to.equal(5);
31
- expect(stars?.querySelectorAll('.unfilled-star').length).to.equal(2);
32
- });
33
-
34
- it('renders with any of title/body/stars', async () => {
35
- const el = await fixture<ReviewBlock>(html`<review-block></review-block>`);
36
-
37
- // No content if no title/body/stars
38
- expect(el.shadowRoot?.children.length).to.equal(0);
39
-
40
- el.title = 'Foo';
41
- await el.updateComplete;
42
-
43
- const title = el.shadowRoot?.querySelector('.review-title');
44
- expect(title?.textContent?.trim()).to.equal('Foo');
45
-
46
- el.title = '';
47
- el.body = 'foo bar baz';
48
- await el.updateComplete;
49
-
50
- const body = el.shadowRoot?.querySelector('.review-body');
51
- expect(body?.textContent?.trim()).to.equal('foo bar baz');
52
-
53
- el.body = '';
54
- el.starRating = 4;
55
- await el.updateComplete;
56
-
57
- const stars = el.shadowRoot?.querySelector('.star-rating');
58
- expect(stars).to.exist;
59
- expect(stars?.querySelectorAll('svg').length).to.equal(5);
60
- expect(stars?.querySelectorAll('.unfilled-star').length).to.equal(1);
61
- });
62
- });
@@ -1,17 +0,0 @@
1
- import { expect, fixture } from '@open-wc/testing';
2
- import { html } from 'lit';
3
- import type { AlphaBarTooltip } from '../../src/sort-filter-bar/alpha-bar-tooltip';
4
-
5
- import '../../src/sort-filter-bar/alpha-bar-tooltip';
6
-
7
- describe('Alphabet Filter Bar Tooltips', () => {
8
- it('renders component', async () => {
9
- const el = await fixture<AlphaBarTooltip>(
10
- html`<alpha-bar-tooltip .numResults=${42}></alpha-bar-tooltip>`,
11
- );
12
-
13
- // Should render the number of results
14
- const tooltipText = el.shadowRoot?.querySelector('#tooltip-text');
15
- expect(tooltipText?.textContent?.trim()).to.equal('42 results');
16
- });
17
- });