@internetarchive/collection-browser 2.7.12 → 2.7.13

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 (318) 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 +107 -107
  8. package/dist/src/app-root.js +531 -531
  9. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  10. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  11. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  13. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  14. package/dist/src/assets/img/icons/chevron.js +2 -2
  15. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  16. package/dist/src/assets/img/icons/contract.js +2 -2
  17. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  18. package/dist/src/assets/img/icons/empty-query.js +2 -2
  19. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  20. package/dist/src/assets/img/icons/expand.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  29. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  30. package/dist/src/assets/img/icons/filter.js +2 -2
  31. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  32. package/dist/src/assets/img/icons/login-required.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  59. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  60. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  61. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  62. package/dist/src/assets/img/icons/null-result.js +2 -2
  63. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  64. package/dist/src/assets/img/icons/restricted.js +2 -2
  65. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  66. package/dist/src/assets/img/icons/reviews.js +2 -2
  67. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  68. package/dist/src/assets/img/icons/upload.js +2 -2
  69. package/dist/src/assets/img/icons/views.d.ts +1 -1
  70. package/dist/src/assets/img/icons/views.js +2 -2
  71. package/dist/src/circular-activity-indicator.d.ts +5 -5
  72. package/dist/src/circular-activity-indicator.js +17 -17
  73. package/dist/src/collection-browser.d.ts +606 -606
  74. package/dist/src/collection-browser.js +1677 -1677
  75. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  76. package/dist/src/collection-facets/facet-row.js +118 -118
  77. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  78. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  79. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  80. package/dist/src/collection-facets/facets-template.js +44 -44
  81. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  82. package/dist/src/collection-facets/more-facets-content.js +407 -407
  83. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  84. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  85. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  86. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  87. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  88. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  89. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  90. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  91. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  92. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  93. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  94. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  95. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  96. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
  97. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  98. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  99. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  100. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  101. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  102. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  103. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  104. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  105. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  106. package/dist/src/collection-facets/toggle-switch.js +94 -94
  107. package/dist/src/collection-facets.d.ts +103 -103
  108. package/dist/src/collection-facets.js +522 -522
  109. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -245
  110. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  111. package/dist/src/data-source/collection-browser-data-source.d.ts +377 -377
  112. package/dist/src/data-source/collection-browser-data-source.js +1004 -1001
  113. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  114. package/dist/src/data-source/collection-browser-query-state.d.ts +44 -44
  115. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  116. package/dist/src/data-source/models.d.ts +28 -28
  117. package/dist/src/data-source/models.js +8 -8
  118. package/dist/src/empty-placeholder.d.ts +23 -23
  119. package/dist/src/empty-placeholder.js +79 -79
  120. package/dist/src/expanded-date-picker.d.ts +43 -43
  121. package/dist/src/expanded-date-picker.js +109 -109
  122. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  123. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  124. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  125. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  126. package/dist/src/manage/manage-bar.d.ts +58 -58
  127. package/dist/src/manage/manage-bar.js +159 -159
  128. package/dist/src/manage/remove-items-modal-content.d.ts +9 -9
  129. package/dist/src/manage/remove-items-modal-content.js +34 -34
  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 +228 -228
  133. package/dist/src/models.js +401 -401
  134. package/dist/src/restoration-state-handler.d.ts +70 -70
  135. package/dist/src/restoration-state-handler.js +363 -363
  136. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  137. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  138. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  139. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  140. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  141. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  142. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  143. package/dist/src/sort-filter-bar/img/list.js +2 -2
  144. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  145. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  146. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  147. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  148. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  149. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  150. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  151. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  152. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  153. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  154. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  155. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
  156. package/dist/src/styles/ia-button.d.ts +2 -2
  157. package/dist/src/styles/ia-button.js +17 -17
  158. package/dist/src/styles/item-image-styles.d.ts +8 -8
  159. package/dist/src/styles/item-image-styles.js +9 -9
  160. package/dist/src/styles/sr-only.d.ts +1 -1
  161. package/dist/src/styles/sr-only.js +2 -2
  162. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  163. package/dist/src/tiles/base-tile-component.js +64 -64
  164. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  165. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  166. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  167. package/dist/src/tiles/grid/account-tile.js +72 -72
  168. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  169. package/dist/src/tiles/grid/collection-tile.js +80 -80
  170. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  171. package/dist/src/tiles/grid/item-tile.js +158 -158
  172. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  173. package/dist/src/tiles/grid/search-tile.js +51 -51
  174. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  175. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  176. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  177. package/dist/src/tiles/grid/tile-stats.js +53 -53
  178. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  179. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  180. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  181. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  182. package/dist/src/tiles/image-block.d.ts +18 -18
  183. package/dist/src/tiles/image-block.js +89 -89
  184. package/dist/src/tiles/item-image.d.ts +39 -39
  185. package/dist/src/tiles/item-image.js +154 -154
  186. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  187. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  188. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  189. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  190. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  191. package/dist/src/tiles/list/tile-list.js +323 -323
  192. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  193. package/dist/src/tiles/mediatype-icon.js +47 -47
  194. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  195. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  196. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  197. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  198. package/dist/src/tiles/review-block.d.ts +12 -12
  199. package/dist/src/tiles/review-block.js +56 -56
  200. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  201. package/dist/src/tiles/text-snippet-block.js +73 -73
  202. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  203. package/dist/src/tiles/tile-dispatcher.js +230 -230
  204. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  205. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  206. package/dist/src/utils/analytics-events.d.ts +28 -28
  207. package/dist/src/utils/analytics-events.js +30 -30
  208. package/dist/src/utils/array-equals.d.ts +4 -4
  209. package/dist/src/utils/array-equals.js +10 -10
  210. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  211. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  212. package/dist/src/utils/facet-utils.d.ts +83 -83
  213. package/dist/src/utils/facet-utils.js +145 -145
  214. package/dist/src/utils/format-count.d.ts +7 -7
  215. package/dist/src/utils/format-count.js +76 -76
  216. package/dist/src/utils/format-date.d.ts +2 -2
  217. package/dist/src/utils/format-date.js +27 -27
  218. package/dist/src/utils/format-unit-size.d.ts +2 -2
  219. package/dist/src/utils/format-unit-size.js +33 -33
  220. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  221. package/dist/src/utils/local-date-from-utc.js +15 -15
  222. package/dist/src/utils/log.d.ts +7 -7
  223. package/dist/src/utils/log.js +15 -15
  224. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  225. package/dist/src/utils/resolve-mediatype.js +23 -23
  226. package/dist/src/utils/sha1.d.ts +2 -2
  227. package/dist/src/utils/sha1.js +8 -8
  228. package/dist/test/collection-browser.test.d.ts +1 -1
  229. package/dist/test/collection-browser.test.js +1308 -1308
  230. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  231. package/dist/test/collection-facets/facet-row.test.js +227 -227
  232. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  233. package/dist/test/collection-facets/facets-template.test.js +91 -91
  234. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  235. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  236. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  237. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  238. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  239. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  240. package/dist/test/collection-facets.test.d.ts +2 -2
  241. package/dist/test/collection-facets.test.js +690 -690
  242. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  243. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  244. package/dist/test/empty-placeholder.test.d.ts +1 -1
  245. package/dist/test/empty-placeholder.test.js +63 -63
  246. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  247. package/dist/test/expanded-date-picker.test.js +95 -95
  248. package/dist/test/icon-overlay.test.d.ts +1 -1
  249. package/dist/test/icon-overlay.test.js +24 -24
  250. package/dist/test/image-block.test.d.ts +1 -1
  251. package/dist/test/image-block.test.js +107 -107
  252. package/dist/test/item-image.test.d.ts +1 -1
  253. package/dist/test/item-image.test.js +85 -85
  254. package/dist/test/manage/manage-bar.test.d.ts +2 -2
  255. package/dist/test/manage/manage-bar.test.js +100 -100
  256. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -1
  257. package/dist/test/manage/remove-items-modal-content.test.js +45 -45
  258. package/dist/test/mediatype-config.test.d.ts +1 -1
  259. package/dist/test/mediatype-config.test.js +16 -16
  260. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  261. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  262. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  263. package/dist/test/mocks/mock-search-responses.js +942 -942
  264. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  265. package/dist/test/mocks/mock-search-service.js +54 -54
  266. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  267. package/dist/test/restoration-state-handler.test.js +270 -270
  268. package/dist/test/review-block.test.d.ts +1 -1
  269. package/dist/test/review-block.test.js +44 -44
  270. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  271. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  272. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  273. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  274. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  275. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  276. package/dist/test/text-overlay.test.d.ts +1 -1
  277. package/dist/test/text-overlay.test.js +38 -38
  278. package/dist/test/text-snippet-block.test.d.ts +1 -1
  279. package/dist/test/text-snippet-block.test.js +57 -57
  280. package/dist/test/tile-stats.test.d.ts +1 -1
  281. package/dist/test/tile-stats.test.js +81 -81
  282. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  283. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  284. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  285. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  286. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  287. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  288. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  289. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  290. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  291. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  292. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  293. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  294. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  295. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  296. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  297. package/dist/test/tiles/list/tile-list.test.js +297 -297
  298. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  299. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  300. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  301. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  302. package/dist/test/utils/array-equals.test.d.ts +1 -1
  303. package/dist/test/utils/array-equals.test.js +26 -26
  304. package/dist/test/utils/format-count.test.d.ts +1 -1
  305. package/dist/test/utils/format-count.test.js +23 -23
  306. package/dist/test/utils/format-date.test.d.ts +1 -1
  307. package/dist/test/utils/format-date.test.js +30 -30
  308. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  309. package/dist/test/utils/format-unit-size.test.js +17 -17
  310. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  311. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  312. package/local.archive.org.cert +86 -86
  313. package/local.archive.org.key +27 -27
  314. package/package.json +1 -1
  315. package/renovate.json +6 -6
  316. package/src/data-source/collection-browser-data-source.ts +5 -1
  317. package/web-dev-server.config.mjs +30 -30
  318. 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
+ }