@internetarchive/collection-browser 2.7.5 → 2.7.6

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 (324) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +13 -13
  6. package/dist/index.js +13 -13
  7. package/dist/src/app-root.d.ts +99 -95
  8. package/dist/src/app-root.js +514 -494
  9. package/dist/src/app-root.js.map +1 -1
  10. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  11. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  13. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  14. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  15. package/dist/src/assets/img/icons/chevron.js +2 -2
  16. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  17. package/dist/src/assets/img/icons/contract.js +2 -2
  18. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  19. package/dist/src/assets/img/icons/empty-query.js +2 -2
  20. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  21. package/dist/src/assets/img/icons/expand.js +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  23. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  24. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  25. package/dist/src/assets/img/icons/eye.js +2 -2
  26. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  27. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  28. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  29. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  30. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  31. package/dist/src/assets/img/icons/filter.js +2 -2
  32. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  33. package/dist/src/assets/img/icons/login-required.js +2 -2
  34. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  35. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  36. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  37. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  38. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  39. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  40. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  41. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  42. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  43. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  44. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  45. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  46. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  47. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  48. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  49. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  50. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  51. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  52. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  53. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  54. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  55. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  56. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  57. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  58. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  59. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  60. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  61. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  62. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  63. package/dist/src/assets/img/icons/null-result.js +2 -2
  64. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  65. package/dist/src/assets/img/icons/restricted.js +2 -2
  66. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  67. package/dist/src/assets/img/icons/reviews.js +2 -2
  68. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  69. package/dist/src/assets/img/icons/upload.js +2 -2
  70. package/dist/src/assets/img/icons/views.d.ts +1 -1
  71. package/dist/src/assets/img/icons/views.js +2 -2
  72. package/dist/src/circular-activity-indicator.d.ts +5 -5
  73. package/dist/src/circular-activity-indicator.js +17 -17
  74. package/dist/src/collection-browser.d.ts +582 -578
  75. package/dist/src/collection-browser.js +1629 -1614
  76. package/dist/src/collection-browser.js.map +1 -1
  77. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  78. package/dist/src/collection-facets/facet-row.js +118 -118
  79. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  80. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  81. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  82. package/dist/src/collection-facets/facets-template.js +44 -44
  83. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  84. package/dist/src/collection-facets/more-facets-content.js +407 -407
  85. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  86. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  87. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  88. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  89. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  90. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  91. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  92. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  93. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  94. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  95. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  96. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  97. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  98. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
  99. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  100. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  101. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  102. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  103. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  104. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  105. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  106. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  107. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  108. package/dist/src/collection-facets/toggle-switch.js +94 -94
  109. package/dist/src/collection-facets.d.ts +103 -103
  110. package/dist/src/collection-facets.js +522 -522
  111. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
  112. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  113. package/dist/src/data-source/collection-browser-data-source.d.ts +373 -373
  114. package/dist/src/data-source/collection-browser-data-source.js +982 -982
  115. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
  116. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  117. package/dist/src/data-source/models.d.ts +28 -28
  118. package/dist/src/data-source/models.js +8 -8
  119. package/dist/src/empty-placeholder.d.ts +23 -23
  120. package/dist/src/empty-placeholder.js +79 -79
  121. package/dist/src/expanded-date-picker.d.ts +43 -43
  122. package/dist/src/expanded-date-picker.js +109 -109
  123. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  124. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  125. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  126. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  127. package/dist/src/manage/manage-bar.d.ts +35 -30
  128. package/dist/src/manage/manage-bar.js +86 -82
  129. package/dist/src/manage/manage-bar.js.map +1 -1
  130. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  131. package/dist/src/mediatype/mediatype-config.js +91 -91
  132. package/dist/src/models.d.ts +219 -219
  133. package/dist/src/models.js +401 -401
  134. package/dist/src/models.js.map +1 -1
  135. package/dist/src/restoration-state-handler.d.ts +70 -70
  136. package/dist/src/restoration-state-handler.js +363 -363
  137. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  138. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  139. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  140. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  141. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  142. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  143. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  144. package/dist/src/sort-filter-bar/img/list.js +2 -2
  145. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  146. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  147. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  148. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  149. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  150. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  151. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  152. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  153. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  154. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  155. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  156. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
  157. package/dist/src/styles/ia-button.d.ts +2 -2
  158. package/dist/src/styles/ia-button.js +51 -19
  159. package/dist/src/styles/ia-button.js.map +1 -1
  160. package/dist/src/styles/item-image-styles.d.ts +8 -8
  161. package/dist/src/styles/item-image-styles.js +9 -9
  162. package/dist/src/styles/sr-only.d.ts +1 -1
  163. package/dist/src/styles/sr-only.js +2 -2
  164. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  165. package/dist/src/tiles/base-tile-component.js +64 -64
  166. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  167. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  168. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  169. package/dist/src/tiles/grid/account-tile.js +72 -72
  170. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  171. package/dist/src/tiles/grid/collection-tile.js +80 -80
  172. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  173. package/dist/src/tiles/grid/item-tile.js +158 -158
  174. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  175. package/dist/src/tiles/grid/search-tile.js +51 -51
  176. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  177. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  178. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  179. package/dist/src/tiles/grid/tile-stats.js +53 -53
  180. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  181. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  182. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  183. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  184. package/dist/src/tiles/image-block.d.ts +18 -18
  185. package/dist/src/tiles/image-block.js +89 -89
  186. package/dist/src/tiles/item-image.d.ts +39 -39
  187. package/dist/src/tiles/item-image.js +154 -154
  188. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  189. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  190. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  191. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  192. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  193. package/dist/src/tiles/list/tile-list.js +323 -323
  194. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  195. package/dist/src/tiles/mediatype-icon.js +47 -47
  196. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  197. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  198. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  199. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  200. package/dist/src/tiles/review-block.d.ts +12 -12
  201. package/dist/src/tiles/review-block.js +56 -56
  202. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  203. package/dist/src/tiles/text-snippet-block.js +73 -73
  204. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  205. package/dist/src/tiles/tile-dispatcher.js +230 -230
  206. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  207. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  208. package/dist/src/utils/analytics-events.d.ts +28 -28
  209. package/dist/src/utils/analytics-events.js +30 -30
  210. package/dist/src/utils/array-equals.d.ts +4 -4
  211. package/dist/src/utils/array-equals.js +10 -10
  212. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  213. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  214. package/dist/src/utils/facet-utils.d.ts +83 -83
  215. package/dist/src/utils/facet-utils.js +145 -145
  216. package/dist/src/utils/format-count.d.ts +7 -7
  217. package/dist/src/utils/format-count.js +76 -76
  218. package/dist/src/utils/format-date.d.ts +2 -2
  219. package/dist/src/utils/format-date.js +25 -25
  220. package/dist/src/utils/format-unit-size.d.ts +2 -2
  221. package/dist/src/utils/format-unit-size.js +33 -33
  222. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  223. package/dist/src/utils/local-date-from-utc.js +15 -15
  224. package/dist/src/utils/log.d.ts +7 -7
  225. package/dist/src/utils/log.js +15 -15
  226. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  227. package/dist/src/utils/resolve-mediatype.js +23 -23
  228. package/dist/src/utils/sha1.d.ts +2 -2
  229. package/dist/src/utils/sha1.js +8 -8
  230. package/dist/test/collection-browser.test.d.ts +1 -1
  231. package/dist/test/collection-browser.test.js +1293 -1293
  232. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  233. package/dist/test/collection-facets/facet-row.test.js +227 -227
  234. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  235. package/dist/test/collection-facets/facets-template.test.js +91 -91
  236. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  237. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  238. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  239. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  240. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  241. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  242. package/dist/test/collection-facets.test.d.ts +2 -2
  243. package/dist/test/collection-facets.test.js +690 -690
  244. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  245. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  246. package/dist/test/empty-placeholder.test.d.ts +1 -1
  247. package/dist/test/empty-placeholder.test.js +63 -63
  248. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  249. package/dist/test/expanded-date-picker.test.js +95 -95
  250. package/dist/test/icon-overlay.test.d.ts +1 -1
  251. package/dist/test/icon-overlay.test.js +24 -24
  252. package/dist/test/image-block.test.d.ts +1 -1
  253. package/dist/test/image-block.test.js +107 -107
  254. package/dist/test/item-image.test.d.ts +1 -1
  255. package/dist/test/item-image.test.js +85 -85
  256. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  257. package/dist/test/manage/manage-bar.test.js +91 -81
  258. package/dist/test/manage/manage-bar.test.js.map +1 -1
  259. package/dist/test/mediatype-config.test.d.ts +1 -1
  260. package/dist/test/mediatype-config.test.js +16 -16
  261. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  262. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  263. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  264. package/dist/test/mocks/mock-search-responses.js +942 -942
  265. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  266. package/dist/test/mocks/mock-search-service.js +54 -54
  267. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  268. package/dist/test/restoration-state-handler.test.js +270 -270
  269. package/dist/test/review-block.test.d.ts +1 -1
  270. package/dist/test/review-block.test.js +44 -44
  271. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  272. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  273. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  274. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  275. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  276. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  277. package/dist/test/text-overlay.test.d.ts +1 -1
  278. package/dist/test/text-overlay.test.js +38 -38
  279. package/dist/test/text-snippet-block.test.d.ts +1 -1
  280. package/dist/test/text-snippet-block.test.js +57 -57
  281. package/dist/test/tile-stats.test.d.ts +1 -1
  282. package/dist/test/tile-stats.test.js +81 -81
  283. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  284. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  285. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  286. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  287. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  288. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  289. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  290. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  291. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  292. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  293. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  294. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  295. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  296. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  297. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  298. package/dist/test/tiles/list/tile-list.test.js +297 -297
  299. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  300. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  301. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  302. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  303. package/dist/test/utils/array-equals.test.d.ts +1 -1
  304. package/dist/test/utils/array-equals.test.js +26 -26
  305. package/dist/test/utils/format-count.test.d.ts +1 -1
  306. package/dist/test/utils/format-count.test.js +23 -23
  307. package/dist/test/utils/format-date.test.d.ts +1 -1
  308. package/dist/test/utils/format-date.test.js +17 -17
  309. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  310. package/dist/test/utils/format-unit-size.test.js +17 -17
  311. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  312. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  313. package/local.archive.org.cert +86 -86
  314. package/local.archive.org.key +27 -27
  315. package/package.json +1 -1
  316. package/renovate.json +6 -6
  317. package/src/app-root.ts +23 -0
  318. package/src/collection-browser.ts +18 -0
  319. package/src/manage/manage-bar.ts +28 -21
  320. package/src/models.ts +2 -2
  321. package/src/styles/ia-button.ts +37 -5
  322. package/test/manage/manage-bar.test.ts +12 -0
  323. package/web-dev-server.config.mjs +30 -30
  324. package/web-test-runner.config.mjs +41 -41
@@ -1,45 +1,45 @@
1
- // If the query contains X word but Y facet isn't selected, recommend facet Y
2
- export class QueryKeywordsHeuristic {
3
- async getRecommendedFacets(query) {
4
- const recommendations = [];
5
- for (const [keyword, facets] of Object.entries(QueryKeywordsHeuristic.KEYWORDS)) {
6
- if (query.includes(keyword)) {
7
- recommendations.push(...facets);
8
- }
9
- }
10
- return recommendations;
11
- }
12
- }
13
- QueryKeywordsHeuristic.KEYWORDS = {
14
- text: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
15
- book: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
16
- pdf: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
17
- epub: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
18
- audio: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
19
- song: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
20
- music: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
21
- listen: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
22
- podcast: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
23
- radio: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
24
- stream: [
25
- { facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] },
26
- { facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] },
27
- ],
28
- video: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
29
- movie: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
30
- film: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
31
- image: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
32
- photo: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
33
- picture: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
34
- software: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
35
- app: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
36
- program: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
37
- game: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
38
- etree: [{ facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] }],
39
- concert: [{ facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] }],
40
- 'live music': [
41
- { facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] },
42
- ],
43
- dataset: [{ facets: [{ facetType: 'mediatype', bucketKey: 'data' }] }],
44
- };
1
+ // If the query contains X word but Y facet isn't selected, recommend facet Y
2
+ export class QueryKeywordsHeuristic {
3
+ async getRecommendedFacets(query) {
4
+ const recommendations = [];
5
+ for (const [keyword, facets] of Object.entries(QueryKeywordsHeuristic.KEYWORDS)) {
6
+ if (query.includes(keyword)) {
7
+ recommendations.push(...facets);
8
+ }
9
+ }
10
+ return recommendations;
11
+ }
12
+ }
13
+ QueryKeywordsHeuristic.KEYWORDS = {
14
+ text: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
15
+ book: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
16
+ pdf: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
17
+ epub: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
18
+ audio: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
19
+ song: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
20
+ music: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
21
+ listen: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
22
+ podcast: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
23
+ radio: [{ facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] }],
24
+ stream: [
25
+ { facets: [{ facetType: 'mediatype', bucketKey: 'audio' }] },
26
+ { facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] },
27
+ ],
28
+ video: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
29
+ movie: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
30
+ film: [{ facets: [{ facetType: 'mediatype', bucketKey: 'movies' }] }],
31
+ image: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
32
+ photo: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
33
+ picture: [{ facets: [{ facetType: 'mediatype', bucketKey: 'image' }] }],
34
+ software: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
35
+ app: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
36
+ program: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
37
+ game: [{ facets: [{ facetType: 'mediatype', bucketKey: 'software' }] }],
38
+ etree: [{ facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] }],
39
+ concert: [{ facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] }],
40
+ 'live music': [
41
+ { facets: [{ facetType: 'mediatype', bucketKey: 'etree' }] },
42
+ ],
43
+ dataset: [{ facets: [{ facetType: 'mediatype', bucketKey: 'data' }] }],
44
+ };
45
45
  //# sourceMappingURL=query-keywords-heuristic.js.map
@@ -1,5 +1,5 @@
1
- import type { SmartQueryHeuristic, SmartFacet } from '../models';
2
- export declare class WikidataHeuristic implements SmartQueryHeuristic {
3
- private static readonly ENTITIES;
4
- getRecommendedFacets(query: string): Promise<SmartFacet[]>;
5
- }
1
+ import type { SmartQueryHeuristic, SmartFacet } from '../models';
2
+ export declare class WikidataHeuristic implements SmartQueryHeuristic {
3
+ private static readonly ENTITIES;
4
+ getRecommendedFacets(query: string): Promise<SmartFacet[]>;
5
+ }
@@ -1,173 +1,173 @@
1
- // If wikidata describes the top query result as X, recommend facet Y, e.g.:
2
- // X Y
3
- // written work mt:texts
4
- // film mt:movies
5
- // author mt:texts and creator:<query>
6
- // filmmaker mt:movies and creator:<query>
7
- // photographer mt:image and creator:<query>
8
- // visual artist mt:image and creator:<query>
9
- // etc.
10
- export class WikidataHeuristic {
11
- async getRecommendedFacets(query) {
12
- var _a;
13
- const recommendations = [];
14
- try {
15
- const urlQuery = encodeURIComponent(query);
16
- const wikidataResponse = await fetch(`https://www.wikidata.org/w/api.php?action=wbsearchentities&search=${urlQuery}&format=json&language=en&uselang=en&origin=*&type=item&limit=5`);
17
- const searchResults = await wikidataResponse.json();
18
- for (const [keyword, facets] of Object.entries(WikidataHeuristic.ENTITIES)) {
19
- const keywordRegex = new RegExp(`\\b${keyword}\\b`);
20
- if (keywordRegex.test((_a = searchResults.search[0]) === null || _a === void 0 ? void 0 : _a.description)) {
21
- const entityName = searchResults.search[0].label;
22
- recommendations.push(...facets.map(sf => {
23
- var _a;
24
- return ({
25
- label: (_a = sf.label) === null || _a === void 0 ? void 0 : _a.replace('__QUERY', entityName),
26
- facets: sf.facets.map(f => {
27
- var _a;
28
- const replaced = {
29
- ...f,
30
- bucketKey: f.bucketKey.replace('__QUERY', query),
31
- };
32
- if (f.displayText) {
33
- replaced.displayText = (_a = replaced.displayText) === null || _a === void 0 ? void 0 : _a.replace('__QUERY', entityName);
34
- }
35
- return replaced;
36
- }),
37
- });
38
- }));
39
- }
40
- }
41
- return recommendations;
42
- }
43
- catch (err) {
44
- return [];
45
- }
46
- }
47
- }
48
- WikidataHeuristic.ENTITIES = {
49
- 'written work': [
50
- { facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] },
51
- ],
52
- literature: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
53
- book: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
54
- novel: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
55
- filmmaker: [
56
- {
57
- label: 'Films by __QUERY',
58
- facets: [
59
- { facetType: 'mediatype', bucketKey: 'movies' },
60
- { facetType: 'creator', bucketKey: '__QUERY' },
61
- ],
62
- },
63
- ],
64
- author: [
65
- {
66
- label: 'Writing by __QUERY',
67
- facets: [
68
- { facetType: 'mediatype', bucketKey: 'texts' },
69
- { facetType: 'creator', bucketKey: '__QUERY' },
70
- ],
71
- },
72
- ],
73
- writer: [
74
- {
75
- label: 'Writing by __QUERY',
76
- facets: [
77
- { facetType: 'mediatype', bucketKey: 'texts' },
78
- { facetType: 'creator', bucketKey: '__QUERY' },
79
- ],
80
- },
81
- ],
82
- poet: [
83
- {
84
- label: 'Writing by __QUERY',
85
- facets: [
86
- { facetType: 'mediatype', bucketKey: 'texts' },
87
- { facetType: 'creator', bucketKey: '__QUERY' },
88
- ],
89
- },
90
- ],
91
- photographer: [
92
- {
93
- label: 'Images by __QUERY',
94
- facets: [
95
- { facetType: 'mediatype', bucketKey: 'image' },
96
- { facetType: 'creator', bucketKey: '__QUERY' },
97
- ],
98
- },
99
- ],
100
- painter: [
101
- {
102
- label: 'Images by __QUERY',
103
- facets: [
104
- { facetType: 'mediatype', bucketKey: 'image' },
105
- { facetType: 'creator', bucketKey: '__QUERY' },
106
- ],
107
- },
108
- ],
109
- 'visual artist': [
110
- {
111
- label: 'Images by __QUERY',
112
- facets: [
113
- { facetType: 'mediatype', bucketKey: 'image' },
114
- { facetType: 'creator', bucketKey: '__QUERY' },
115
- ],
116
- },
117
- ],
118
- 'graphic artist': [
119
- {
120
- label: 'Images by __QUERY',
121
- facets: [
122
- { facetType: 'mediatype', bucketKey: 'image' },
123
- { facetType: 'creator', bucketKey: '__QUERY' },
124
- ],
125
- },
126
- ],
127
- singer: [
128
- {
129
- label: 'Music by __QUERY',
130
- facets: [
131
- { facetType: 'mediatype', bucketKey: 'audio' },
132
- { facetType: 'creator', bucketKey: '__QUERY' },
133
- ],
134
- },
135
- ],
136
- songwriter: [
137
- {
138
- label: 'Music by __QUERY',
139
- facets: [
140
- { facetType: 'mediatype', bucketKey: 'audio' },
141
- { facetType: 'creator', bucketKey: '__QUERY' },
142
- ],
143
- },
144
- ],
145
- musician: [
146
- {
147
- label: 'Music by __QUERY',
148
- facets: [
149
- { facetType: 'mediatype', bucketKey: 'audio' },
150
- { facetType: 'creator', bucketKey: '__QUERY' },
151
- ],
152
- },
153
- ],
154
- composer: [
155
- {
156
- label: 'Music by __QUERY',
157
- facets: [
158
- { facetType: 'mediatype', bucketKey: 'audio' },
159
- { facetType: 'creator', bucketKey: '__QUERY' },
160
- ],
161
- },
162
- ],
163
- pianist: [
164
- {
165
- label: 'Music by __QUERY',
166
- facets: [
167
- { facetType: 'mediatype', bucketKey: 'audio' },
168
- { facetType: 'creator', bucketKey: '__QUERY' },
169
- ],
170
- },
171
- ],
172
- };
1
+ // If wikidata describes the top query result as X, recommend facet Y, e.g.:
2
+ // X Y
3
+ // written work mt:texts
4
+ // film mt:movies
5
+ // author mt:texts and creator:<query>
6
+ // filmmaker mt:movies and creator:<query>
7
+ // photographer mt:image and creator:<query>
8
+ // visual artist mt:image and creator:<query>
9
+ // etc.
10
+ export class WikidataHeuristic {
11
+ async getRecommendedFacets(query) {
12
+ var _a;
13
+ const recommendations = [];
14
+ try {
15
+ const urlQuery = encodeURIComponent(query);
16
+ const wikidataResponse = await fetch(`https://www.wikidata.org/w/api.php?action=wbsearchentities&search=${urlQuery}&format=json&language=en&uselang=en&origin=*&type=item&limit=5`);
17
+ const searchResults = await wikidataResponse.json();
18
+ for (const [keyword, facets] of Object.entries(WikidataHeuristic.ENTITIES)) {
19
+ const keywordRegex = new RegExp(`\\b${keyword}\\b`);
20
+ if (keywordRegex.test((_a = searchResults.search[0]) === null || _a === void 0 ? void 0 : _a.description)) {
21
+ const entityName = searchResults.search[0].label;
22
+ recommendations.push(...facets.map(sf => {
23
+ var _a;
24
+ return ({
25
+ label: (_a = sf.label) === null || _a === void 0 ? void 0 : _a.replace('__QUERY', entityName),
26
+ facets: sf.facets.map(f => {
27
+ var _a;
28
+ const replaced = {
29
+ ...f,
30
+ bucketKey: f.bucketKey.replace('__QUERY', query),
31
+ };
32
+ if (f.displayText) {
33
+ replaced.displayText = (_a = replaced.displayText) === null || _a === void 0 ? void 0 : _a.replace('__QUERY', entityName);
34
+ }
35
+ return replaced;
36
+ }),
37
+ });
38
+ }));
39
+ }
40
+ }
41
+ return recommendations;
42
+ }
43
+ catch (err) {
44
+ return [];
45
+ }
46
+ }
47
+ }
48
+ WikidataHeuristic.ENTITIES = {
49
+ 'written work': [
50
+ { facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] },
51
+ ],
52
+ literature: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
53
+ book: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
54
+ novel: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
55
+ filmmaker: [
56
+ {
57
+ label: 'Films by __QUERY',
58
+ facets: [
59
+ { facetType: 'mediatype', bucketKey: 'movies' },
60
+ { facetType: 'creator', bucketKey: '__QUERY' },
61
+ ],
62
+ },
63
+ ],
64
+ author: [
65
+ {
66
+ label: 'Writing by __QUERY',
67
+ facets: [
68
+ { facetType: 'mediatype', bucketKey: 'texts' },
69
+ { facetType: 'creator', bucketKey: '__QUERY' },
70
+ ],
71
+ },
72
+ ],
73
+ writer: [
74
+ {
75
+ label: 'Writing by __QUERY',
76
+ facets: [
77
+ { facetType: 'mediatype', bucketKey: 'texts' },
78
+ { facetType: 'creator', bucketKey: '__QUERY' },
79
+ ],
80
+ },
81
+ ],
82
+ poet: [
83
+ {
84
+ label: 'Writing by __QUERY',
85
+ facets: [
86
+ { facetType: 'mediatype', bucketKey: 'texts' },
87
+ { facetType: 'creator', bucketKey: '__QUERY' },
88
+ ],
89
+ },
90
+ ],
91
+ photographer: [
92
+ {
93
+ label: 'Images by __QUERY',
94
+ facets: [
95
+ { facetType: 'mediatype', bucketKey: 'image' },
96
+ { facetType: 'creator', bucketKey: '__QUERY' },
97
+ ],
98
+ },
99
+ ],
100
+ painter: [
101
+ {
102
+ label: 'Images by __QUERY',
103
+ facets: [
104
+ { facetType: 'mediatype', bucketKey: 'image' },
105
+ { facetType: 'creator', bucketKey: '__QUERY' },
106
+ ],
107
+ },
108
+ ],
109
+ 'visual artist': [
110
+ {
111
+ label: 'Images by __QUERY',
112
+ facets: [
113
+ { facetType: 'mediatype', bucketKey: 'image' },
114
+ { facetType: 'creator', bucketKey: '__QUERY' },
115
+ ],
116
+ },
117
+ ],
118
+ 'graphic artist': [
119
+ {
120
+ label: 'Images by __QUERY',
121
+ facets: [
122
+ { facetType: 'mediatype', bucketKey: 'image' },
123
+ { facetType: 'creator', bucketKey: '__QUERY' },
124
+ ],
125
+ },
126
+ ],
127
+ singer: [
128
+ {
129
+ label: 'Music by __QUERY',
130
+ facets: [
131
+ { facetType: 'mediatype', bucketKey: 'audio' },
132
+ { facetType: 'creator', bucketKey: '__QUERY' },
133
+ ],
134
+ },
135
+ ],
136
+ songwriter: [
137
+ {
138
+ label: 'Music by __QUERY',
139
+ facets: [
140
+ { facetType: 'mediatype', bucketKey: 'audio' },
141
+ { facetType: 'creator', bucketKey: '__QUERY' },
142
+ ],
143
+ },
144
+ ],
145
+ musician: [
146
+ {
147
+ label: 'Music by __QUERY',
148
+ facets: [
149
+ { facetType: 'mediatype', bucketKey: 'audio' },
150
+ { facetType: 'creator', bucketKey: '__QUERY' },
151
+ ],
152
+ },
153
+ ],
154
+ composer: [
155
+ {
156
+ label: 'Music by __QUERY',
157
+ facets: [
158
+ { facetType: 'mediatype', bucketKey: 'audio' },
159
+ { facetType: 'creator', bucketKey: '__QUERY' },
160
+ ],
161
+ },
162
+ ],
163
+ pianist: [
164
+ {
165
+ label: 'Music by __QUERY',
166
+ facets: [
167
+ { facetType: 'mediatype', bucketKey: 'audio' },
168
+ { facetType: 'creator', bucketKey: '__QUERY' },
169
+ ],
170
+ },
171
+ ],
172
+ };
173
173
  //# sourceMappingURL=wikidata-heuristic.js.map
@@ -1,26 +1,26 @@
1
- import type { FacetEventDetails, FacetOption } from '../../models';
2
- export interface FacetRef {
3
- facetType: FacetOption;
4
- bucketKey: string;
5
- displayText?: string;
6
- }
7
- interface LabeledSmartFacet {
8
- label: string;
9
- facets: FacetRef[];
10
- selected?: boolean;
11
- }
12
- interface UnlabeledSmartFacet {
13
- label?: string;
14
- facets: [FacetRef];
15
- selected?: boolean;
16
- }
17
- export declare type SmartFacet = LabeledSmartFacet | UnlabeledSmartFacet;
18
- export interface SmartFacetEvent {
19
- smartFacet: SmartFacet;
20
- details: FacetEventDetails[];
21
- }
22
- export declare type KeywordFacetMap = Record<string, SmartFacet[]>;
23
- export interface SmartQueryHeuristic {
24
- getRecommendedFacets(query: string): Promise<SmartFacet[]>;
25
- }
26
- export {};
1
+ import type { FacetEventDetails, FacetOption } from '../../models';
2
+ export interface FacetRef {
3
+ facetType: FacetOption;
4
+ bucketKey: string;
5
+ displayText?: string;
6
+ }
7
+ interface LabeledSmartFacet {
8
+ label: string;
9
+ facets: FacetRef[];
10
+ selected?: boolean;
11
+ }
12
+ interface UnlabeledSmartFacet {
13
+ label?: string;
14
+ facets: [FacetRef];
15
+ selected?: boolean;
16
+ }
17
+ export declare type SmartFacet = LabeledSmartFacet | UnlabeledSmartFacet;
18
+ export interface SmartFacetEvent {
19
+ smartFacet: SmartFacet;
20
+ details: FacetEventDetails[];
21
+ }
22
+ export declare type KeywordFacetMap = Record<string, SmartFacet[]>;
23
+ export interface SmartQueryHeuristic {
24
+ getRecommendedFacets(query: string): Promise<SmartFacet[]>;
25
+ }
26
+ export {};
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=models.js.map
@@ -1,31 +1,31 @@
1
- import { LitElement, TemplateResult, CSSResultGroup, PropertyValues } from 'lit';
2
- import type { Aggregation } from '@internetarchive/search-service';
3
- import type { CollectionTitles } from '../../data-source/models';
4
- import type { SelectedFacets } from '../../models';
5
- import './smart-facet-button';
6
- import './smart-facet-dropdown';
7
- export declare class SmartFacetBar extends LitElement {
8
- query?: string;
9
- aggregations?: Record<string, Aggregation>;
10
- selectedFacets?: SelectedFacets;
11
- /** The map from collection identifiers to their titles */
12
- collectionTitles?: CollectionTitles;
13
- filterToggleActive: boolean;
14
- private heuristicRecs;
15
- private smartFacets;
16
- private lastAggregations?;
17
- render(): TemplateResult<1>;
18
- protected willUpdate(changed: PropertyValues): void;
19
- private updateSmartFacets;
20
- private makeSmartFacet;
21
- private smartFacetButton;
22
- private smartFacetDropdown;
23
- private get filtersToggleTemplate();
24
- private get facetsToDisplay();
25
- private toSmartFacet;
26
- private facetClicked;
27
- private facetDropdownClicked;
28
- private onDropdownClick;
29
- private filterToggleClicked;
30
- static get styles(): CSSResultGroup;
31
- }
1
+ import { LitElement, TemplateResult, CSSResultGroup, PropertyValues } from 'lit';
2
+ import type { Aggregation } from '@internetarchive/search-service';
3
+ import type { CollectionTitles } from '../../data-source/models';
4
+ import type { SelectedFacets } from '../../models';
5
+ import './smart-facet-button';
6
+ import './smart-facet-dropdown';
7
+ export declare class SmartFacetBar extends LitElement {
8
+ query?: string;
9
+ aggregations?: Record<string, Aggregation>;
10
+ selectedFacets?: SelectedFacets;
11
+ /** The map from collection identifiers to their titles */
12
+ collectionTitles?: CollectionTitles;
13
+ filterToggleActive: boolean;
14
+ private heuristicRecs;
15
+ private smartFacets;
16
+ private lastAggregations?;
17
+ render(): TemplateResult<1>;
18
+ protected willUpdate(changed: PropertyValues): void;
19
+ private updateSmartFacets;
20
+ private makeSmartFacet;
21
+ private smartFacetButton;
22
+ private smartFacetDropdown;
23
+ private get filtersToggleTemplate();
24
+ private get facetsToDisplay();
25
+ private toSmartFacet;
26
+ private facetClicked;
27
+ private facetDropdownClicked;
28
+ private onDropdownClick;
29
+ private filterToggleClicked;
30
+ static get styles(): CSSResultGroup;
31
+ }