@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,437 +0,0 @@
1
- import {
2
- css,
3
- html,
4
- LitElement,
5
- TemplateResult,
6
- CSSResultGroup,
7
- nothing,
8
- PropertyValues,
9
- } from 'lit';
10
- import { repeat } from 'lit/directives/repeat.js';
11
- import { customElement, property, state } from 'lit/decorators.js';
12
- import type { Aggregation, Bucket } from '@internetarchive/search-service';
13
- import type { CollectionTitles } from '../../data-source/models';
14
- import type {
15
- FacetEventDetails,
16
- FacetOption,
17
- FacetState,
18
- SelectedFacets,
19
- } from '../../models';
20
- import { updateSelectedFacetBucket } from '../../utils/facet-utils';
21
- import { SmartQueryHeuristicGroup } from './smart-facet-heuristics';
22
- import type { SmartFacetDropdown } from './smart-facet-dropdown';
23
- import type { SmartFacet, SmartFacetEvent } from './models';
24
- import { smartFacetEquals } from './smart-facet-equals';
25
- import { dedupe } from './dedupe';
26
- import { log } from '../../utils/log';
27
- import filterIcon from '../../assets/img/icons/filter';
28
-
29
- import './smart-facet-button';
30
- import './smart-facet-dropdown';
31
-
32
- const fieldPrefixes: Partial<Record<FacetOption, string>> = {
33
- collection: 'Collection: ',
34
- creator: 'By: ',
35
- subject: 'About: ',
36
- };
37
-
38
- function capitalize(str: string) {
39
- return str.charAt(0).toUpperCase() + str.slice(1);
40
- }
41
-
42
- @customElement('smart-facet-bar')
43
- export class SmartFacetBar extends LitElement {
44
- @property({ type: String }) query?: string;
45
-
46
- @property({ type: Object }) aggregations?: Record<string, Aggregation>;
47
-
48
- @property({ type: Object }) selectedFacets?: SelectedFacets;
49
-
50
- /** The map from collection identifiers to their titles */
51
- @property({ type: Object })
52
- collectionTitles?: CollectionTitles;
53
-
54
- @property({ type: Boolean }) filterToggleShown = false;
55
-
56
- @property({ type: Boolean }) filterToggleActive = false;
57
-
58
- @property({ type: String }) label?: string;
59
-
60
- @state() private heuristicRecs: SmartFacet[] = [];
61
-
62
- @state() private smartFacets: SmartFacet[][] = [];
63
-
64
- @state() private lastAggregations?: Record<string, Aggregation>;
65
-
66
- //
67
- // COMPONENT LIFECYCLE METHODS
68
- //
69
-
70
- render() {
71
- if (!this.query) return nothing;
72
-
73
- const shouldShowLabel = !!this.label && this.smartFacets.length > 0;
74
- return html`
75
- <div id="smart-facets-container">
76
- ${this.filtersToggleTemplate}
77
- ${shouldShowLabel
78
- ? html`<p id="filters-label">${this.label}</p>`
79
- : nothing}
80
- ${repeat(
81
- this.smartFacets,
82
- f =>
83
- `${f[0].label}|${f[0].facets[0].facetType}|${f[0].facets[0].bucketKey}`,
84
- facet => this.makeSmartFacet(facet),
85
- )}
86
- </div>
87
- `;
88
- }
89
-
90
- protected willUpdate(changed: PropertyValues): void {
91
- let shouldUpdateSmartFacets = false;
92
-
93
- if (changed.has('query')) {
94
- log('query change', changed.get('query'), this.query);
95
- this.lastAggregations = undefined;
96
- shouldUpdateSmartFacets = true;
97
- }
98
-
99
- if (
100
- changed.has('aggregations') &&
101
- !this.lastAggregations &&
102
- this.aggregations &&
103
- Object.keys(this.aggregations).length > 0
104
- ) {
105
- log('aggs change', changed.get('aggregations'), this.aggregations);
106
- this.lastAggregations = this.aggregations;
107
- shouldUpdateSmartFacets = true;
108
- }
109
-
110
- if (shouldUpdateSmartFacets) {
111
- log('should update smart facets, doing so...');
112
- this.updateSmartFacets();
113
- }
114
- }
115
-
116
- refresh(): void {
117
- this.lastAggregations = this.aggregations;
118
- this.updateSmartFacets();
119
- }
120
-
121
- deselectAll(): void {
122
- for (const sf of this.smartFacets) {
123
- for (const facet of sf) {
124
- facet.selected = false;
125
- }
126
- }
127
- this.requestUpdate();
128
- }
129
-
130
- private async updateSmartFacets(): Promise<void> {
131
- log('updating smart facets');
132
- if (this.query) {
133
- this.heuristicRecs =
134
- await new SmartQueryHeuristicGroup().getRecommendedFacets(this.query);
135
- log('heuristic recs are', this.heuristicRecs);
136
- this.smartFacets = dedupe(this.facetsToDisplay);
137
- log('smart facets are', this.smartFacets);
138
- }
139
- }
140
-
141
- //
142
- // OTHER METHODS
143
- //
144
-
145
- private makeSmartFacet(facets: SmartFacet[]) {
146
- if (facets.length === 0) {
147
- return nothing;
148
- }
149
- if (facets.length === 1) {
150
- return this.smartFacetButton(facets[0]);
151
- }
152
- return this.smartFacetDropdown(facets);
153
- }
154
-
155
- private smartFacetButton(facet: SmartFacet) {
156
- return html`
157
- <smart-facet-button
158
- .facetInfo=${facet}
159
- .labelPrefix=${fieldPrefixes[facet.facets[0].facetType]}
160
- .selected=${facet.selected ?? false}
161
- @facetClick=${this.facetClicked}
162
- ></smart-facet-button>
163
- `;
164
- }
165
-
166
- private smartFacetDropdown(facets: SmartFacet[]) {
167
- return html`
168
- <smart-facet-dropdown
169
- .facetInfo=${facets}
170
- .labelPrefix=${fieldPrefixes[facets[0].facets[0].facetType]}
171
- .activeFacetRef=${facets[0].facets[0]}
172
- @facetClick=${this.dropdownOptionClicked}
173
- @dropdownClick=${this.dropdownClicked}
174
- ></smart-facet-dropdown>
175
- `;
176
- }
177
-
178
- private get filtersToggleTemplate(): TemplateResult | typeof nothing {
179
- if (!this.filterToggleShown) return nothing;
180
-
181
- return html`
182
- <button
183
- id="filters-toggle"
184
- class=${this.filterToggleActive ? 'active' : ''}
185
- title="${this.filterToggleActive ? 'Hide' : 'Show'} filters pane"
186
- @click=${this.filterToggleClicked}
187
- >
188
- ${filterIcon}
189
- </button>
190
- `;
191
- }
192
-
193
- private get facetsToDisplay(): SmartFacet[][] {
194
- const facets: SmartFacet[][] = [];
195
-
196
- if (this.heuristicRecs.length > 0) {
197
- for (const rec of this.heuristicRecs) {
198
- // Suppress mediatype-only facets for now.
199
- if (rec.facets.length === 1 && rec.facets[0].facetType === 'mediatype')
200
- continue;
201
-
202
- facets.push([rec]);
203
- }
204
- }
205
-
206
- if (this.lastAggregations) {
207
- const keys = [
208
- 'mediatype',
209
- 'year',
210
- 'language',
211
- 'creator',
212
- 'subject',
213
- 'collection',
214
- ];
215
- for (const key of keys) {
216
- const agg = this.lastAggregations[key];
217
- if (!agg) continue;
218
- if (agg.buckets.length === 0) continue;
219
- if (['lending', 'year_histogram', 'date_histogram'].includes(key))
220
- continue;
221
- if (typeof agg.buckets[0] === 'number') continue;
222
-
223
- if (
224
- key === 'mediatype' &&
225
- this.selectedFacets &&
226
- Object.values(this.selectedFacets.mediatype ?? {}).some(
227
- bucket => bucket.state !== 'none',
228
- )
229
- ) {
230
- continue;
231
- }
232
-
233
- const facetType = key as FacetOption;
234
- const buckets = agg.buckets as Bucket[];
235
-
236
- const unusedBuckets = buckets.filter(b => {
237
- const selectedFacetBucket = this.selectedFacets?.[facetType]?.[b.key];
238
- if (selectedFacetBucket && selectedFacetBucket.state !== 'none') {
239
- return false;
240
- }
241
- return true;
242
- });
243
-
244
- if (facetType === 'mediatype') {
245
- continue;
246
- // Don't include mediatype bubbles
247
- } else if (facetType === 'collection' || facetType === 'subject') {
248
- const topBuckets = unusedBuckets.slice(0, 5);
249
- facets.push(topBuckets.map(b => this.toSmartFacet(facetType, [b])));
250
- } else {
251
- facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])]);
252
- }
253
- }
254
- }
255
-
256
- return facets;
257
- }
258
-
259
- private toSmartFacet(
260
- facetType: FacetOption,
261
- buckets: Bucket[],
262
- // prefix = true
263
- ): SmartFacet {
264
- return {
265
- facets: buckets.map(bucket => {
266
- let displayText = capitalize(bucket.key.toString());
267
- if (facetType === 'collection') {
268
- const title = this.collectionTitles?.get(bucket.key.toString());
269
- if (title) displayText = title;
270
- }
271
-
272
- return {
273
- facetType,
274
- bucketKey: bucket.key.toString(),
275
- displayText,
276
- };
277
- }),
278
- } as SmartFacet;
279
- }
280
-
281
- /**
282
- * Toggles the state of the given smart facet, and updates the selected facets accordingly.
283
- */
284
- private toggleSmartFacet(
285
- facet: SmartFacet,
286
- details: FacetEventDetails[],
287
- ): void {
288
- let newState: FacetState;
289
- if (facet.selected) {
290
- // When deselected, leave the smart facet where it is
291
- newState = 'none';
292
- this.smartFacets = this.smartFacets.map(f => {
293
- if (f[0] === facet) return [{ ...facet, selected: false }];
294
- return f;
295
- });
296
- } else {
297
- // When selected, move the toggled smart facet to the front of the list
298
- newState = 'selected';
299
- this.smartFacets = [
300
- [{ ...facet, selected: true }],
301
- ...this.smartFacets.filter(f => f[0] !== facet),
302
- ];
303
- }
304
-
305
- this.updateSelectedFacets(
306
- details.map(facet => ({
307
- ...facet,
308
- bucket: {
309
- ...facet.bucket,
310
- state: newState,
311
- },
312
- })),
313
- );
314
- }
315
-
316
- /**
317
- * Updates the selected facet buckets for each of the given facets,
318
- * and emits a `facetsChanged` event to notify parent components of
319
- * the new state.
320
- */
321
- private updateSelectedFacets(facets: FacetEventDetails[]): void {
322
- for (const facet of facets) {
323
- this.selectedFacets = updateSelectedFacetBucket(
324
- this.selectedFacets,
325
- facet.facetType,
326
- facet.bucket,
327
- true,
328
- );
329
- }
330
-
331
- const event = new CustomEvent<SelectedFacets>('facetsChanged', {
332
- detail: this.selectedFacets,
333
- });
334
- this.dispatchEvent(event);
335
- }
336
-
337
- /**
338
- * Handler for when a smart facet button is clicked
339
- */
340
- private facetClicked(e: CustomEvent<SmartFacetEvent>): void {
341
- this.toggleSmartFacet(e.detail.smartFacet, e.detail.details);
342
- }
343
-
344
- /**
345
- * Handler for when an option in a smart facet dropdown menu is selected
346
- */
347
- private dropdownOptionClicked(e: CustomEvent<SmartFacetEvent>): void {
348
- const existingFacet = this.smartFacets.find(
349
- sf => sf.length === 1 && smartFacetEquals(sf[0], e.detail.smartFacet),
350
- );
351
- if (existingFacet) {
352
- // The facet already exists outside the dropdown, so just select it there
353
- this.toggleSmartFacet(existingFacet[0], e.detail.details);
354
- return;
355
- }
356
-
357
- // Otherwise, prepend a new smart facet for the selected option
358
- this.smartFacets = [
359
- [{ ...e.detail.smartFacet, selected: true }],
360
- ...this.smartFacets,
361
- ];
362
-
363
- this.updateSelectedFacets(e.detail.details);
364
- }
365
-
366
- /**
367
- * Handler for when any dropdown is clicked (whether button, caret, or menu item)
368
- */
369
- private dropdownClicked(e: CustomEvent<SmartFacetDropdown>): void {
370
- log('smart bar: onDropdownClick', e.detail);
371
- this.shadowRoot
372
- ?.querySelectorAll('smart-facet-dropdown')
373
- .forEach(dropdown => {
374
- if (dropdown !== e.detail) {
375
- log('closing', dropdown);
376
- (dropdown as SmartFacetDropdown).close();
377
- }
378
- });
379
- }
380
-
381
- private filterToggleClicked(): void {
382
- this.dispatchEvent(new CustomEvent('filtersToggled'));
383
- }
384
-
385
- //
386
- // STYLES
387
- //
388
-
389
- static get styles(): CSSResultGroup {
390
- return css`
391
- #smart-facets-container {
392
- display: flex;
393
- align-items: center;
394
- gap: 5px 10px;
395
- padding: 10px 0;
396
- white-space: nowrap;
397
- overflow: scroll hidden;
398
- scrollbar-width: none;
399
- }
400
-
401
- #filters-toggle {
402
- margin: 0;
403
- border: 0;
404
- padding: 5px 8px;
405
- border-radius: 5px;
406
- background: white;
407
- color: #2c2c2c;
408
- border: 1px solid #194880;
409
- font-size: 1.4rem;
410
- font-family: inherit;
411
- text-decoration: none;
412
- cursor: pointer;
413
- }
414
-
415
- #filters-toggle.active {
416
- background: #194880;
417
- color: white;
418
- }
419
-
420
- #filters-toggle > svg {
421
- width: 12px;
422
- filter: invert(0.16667);
423
- vertical-align: -1px;
424
- }
425
-
426
- #filters-toggle.active > svg {
427
- filter: invert(1);
428
- }
429
-
430
- #filters-label {
431
- font-size: 1.4rem;
432
- font-weight: var(--smartFacetLabelFontWeight, normal);
433
- margin: 0 -5px 0 0;
434
- }
435
- `;
436
- }
437
- }
@@ -1,145 +0,0 @@
1
- import { css, html, LitElement, CSSResultGroup, nothing } from 'lit';
2
- import { customElement, property } from 'lit/decorators.js';
3
- import {
4
- mediatypeConfig,
5
- MediatypeConfigKey,
6
- } from '../../mediatype/mediatype-config';
7
- import type { SmartFacet, SmartFacetEvent } from './models';
8
-
9
- import closeCircleDark from '../../assets/img/icons/close-circle-dark';
10
-
11
- function capitalize(str?: string): string | undefined {
12
- if (!str) return str;
13
- return str.charAt(0).toLocaleUpperCase() + str.slice(1);
14
- }
15
-
16
- @customElement('smart-facet-button')
17
- export class SmartFacetButton extends LitElement {
18
- @property({ type: Object }) facetInfo?: SmartFacet;
19
-
20
- @property({ type: String }) labelPrefix?: string;
21
-
22
- @property({ type: Boolean }) selected = false;
23
-
24
- //
25
- // COMPONENT LIFECYCLE METHODS
26
- //
27
-
28
- render() {
29
- if (!this.facetInfo) return nothing;
30
-
31
- const isSingleFacet = this.facetInfo.facets.length === 1;
32
- const firstFacet = this.facetInfo.facets[0];
33
-
34
- const displayText = capitalize(
35
- (this.labelPrefix ? `${this.labelPrefix} ` : '') +
36
- (this.facetInfo.label ??
37
- firstFacet.displayText ??
38
- firstFacet.bucketKey),
39
- );
40
- if (!displayText) return nothing;
41
-
42
- const icon =
43
- isSingleFacet && firstFacet.facetType === 'mediatype'
44
- ? mediatypeConfig[firstFacet.bucketKey as MediatypeConfigKey].icon
45
- : nothing;
46
-
47
- return html`
48
- <a
49
- class="smart-facet-button ${this.selected ? 'selected' : ''}"
50
- href=${this.href}
51
- @click=${this.facetClicked}
52
- >
53
- ${icon} ${displayText}
54
- ${this.selected
55
- ? html`<span class="unselect-button">${closeCircleDark}</span>`
56
- : nothing}
57
- </a>
58
- `;
59
- }
60
-
61
- //
62
- // OTHER METHODS
63
- //
64
-
65
- private get href(): string {
66
- const url = new URL(window.location.href);
67
- if (this.facetInfo) {
68
- for (const facet of this.facetInfo.facets) {
69
- url.searchParams.append(
70
- 'and[]',
71
- encodeURIComponent(`${facet.facetType}:"${facet.bucketKey}"`),
72
- );
73
- }
74
- }
75
- return url.toString();
76
- }
77
-
78
- private facetClicked(e: Event): void {
79
- e.preventDefault();
80
- if (!this.facetInfo) return;
81
-
82
- this.selected = !this.selected;
83
-
84
- this.dispatchEvent(
85
- new CustomEvent<SmartFacetEvent>('facetClick', {
86
- detail: {
87
- smartFacet: this.facetInfo,
88
- details: this.facetInfo.facets.map(f => ({
89
- facetType: f.facetType,
90
- bucket: {
91
- key: f.bucketKey,
92
- count: 0,
93
- state: this.selected ? 'selected' : 'none',
94
- },
95
- negative: false,
96
- })),
97
- },
98
- }),
99
- );
100
- }
101
-
102
- //
103
- // STYLES
104
- //
105
-
106
- static get styles(): CSSResultGroup {
107
- return css`
108
- .smart-facet-button {
109
- display: inline-flex;
110
- align-items: center;
111
- column-gap: 5px;
112
- padding: 5px 5px;
113
- border-radius: 5px;
114
- background: white;
115
- color: #2c2c2c;
116
- border: 1px solid #194880;
117
- font-size: 1.4rem;
118
- font-family: inherit;
119
- line-height: normal;
120
- text-decoration: none;
121
- }
122
-
123
- .smart-facet-button.selected {
124
- background: #194880;
125
- color: white;
126
- }
127
-
128
- .unselect-button > svg {
129
- width: 10px;
130
- height: 10px;
131
- filter: invert(1);
132
- }
133
-
134
- .smart-facet-button > svg {
135
- width: 12px;
136
- height: 12px;
137
- filter: invert(0.16667);
138
- }
139
-
140
- .smart-facet-button.selected > svg {
141
- filter: invert(1);
142
- }
143
- `;
144
- }
145
- }