@internetarchive/collection-browser 2.7.7-alpha.1 → 2.7.7

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 (488) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +3 -3
  3. package/.husky/pre-commit +4 -4
  4. package/LICENSE +661 -661
  5. package/README.md +83 -83
  6. package/dist/index.d.ts +13 -13
  7. package/dist/index.js +13 -11
  8. package/dist/index.js.map +1 -1
  9. package/dist/src/app-root.d.ts +99 -99
  10. package/dist/src/app-root.js +503 -502
  11. package/dist/src/app-root.js.map +1 -1
  12. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  13. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  14. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  15. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  16. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  17. package/dist/src/assets/img/icons/chevron.js +2 -2
  18. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  19. package/dist/src/assets/img/icons/contract.js +2 -2
  20. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  21. package/dist/src/assets/img/icons/empty-query.js +2 -2
  22. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  23. package/dist/src/assets/img/icons/expand.js +2 -2
  24. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  25. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  26. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  27. package/dist/src/assets/img/icons/eye.js +2 -2
  28. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  29. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  30. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  31. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  32. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  33. package/dist/src/assets/img/icons/filter.js +2 -2
  34. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  35. package/dist/src/assets/img/icons/login-required.js +2 -2
  36. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  37. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  38. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  39. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  40. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  41. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  42. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  43. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  44. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  45. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  46. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  47. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  48. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  49. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  50. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  51. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  52. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  53. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  54. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  55. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  56. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  57. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  58. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  59. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  60. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  61. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  62. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  63. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  64. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  65. package/dist/src/assets/img/icons/null-result.js +2 -2
  66. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  67. package/dist/src/assets/img/icons/restricted.js +2 -2
  68. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  69. package/dist/src/assets/img/icons/reviews.js +2 -2
  70. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  71. package/dist/src/assets/img/icons/upload.js +2 -2
  72. package/dist/src/assets/img/icons/views.d.ts +1 -1
  73. package/dist/src/assets/img/icons/views.js +2 -2
  74. package/dist/src/circular-activity-indicator.d.ts +5 -5
  75. package/dist/src/circular-activity-indicator.js +17 -17
  76. package/dist/src/circular-activity-indicator.js.map +1 -1
  77. package/dist/src/collection-browser.d.ts +582 -582
  78. package/dist/src/collection-browser.js +1627 -1626
  79. package/dist/src/collection-browser.js.map +1 -1
  80. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  81. package/dist/src/collection-facets/facet-row.js +118 -118
  82. package/dist/src/collection-facets/facet-row.js.map +1 -1
  83. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  84. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  85. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -1
  86. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  87. package/dist/src/collection-facets/facets-template.js +49 -49
  88. package/dist/src/collection-facets/facets-template.js.map +1 -1
  89. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  90. package/dist/src/collection-facets/more-facets-content.js +408 -406
  91. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  92. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  93. package/dist/src/collection-facets/more-facets-pagination.js +196 -197
  94. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  95. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  96. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  97. package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -1
  98. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  99. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  100. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  101. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  102. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js.map +1 -1
  103. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  104. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  105. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js.map +1 -1
  106. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  107. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  108. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  109. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -237
  110. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
  111. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  112. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  113. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
  114. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  115. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  116. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
  117. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  118. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  119. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  120. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  121. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
  122. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  123. package/dist/src/collection-facets/toggle-switch.js +94 -94
  124. package/dist/src/collection-facets/toggle-switch.js.map +1 -1
  125. package/dist/src/collection-facets.d.ts +103 -103
  126. package/dist/src/collection-facets.js +522 -521
  127. package/dist/src/collection-facets.js.map +1 -1
  128. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
  129. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  130. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
  131. package/dist/src/data-source/collection-browser-data-source.d.ts +373 -373
  132. package/dist/src/data-source/collection-browser-data-source.js +982 -981
  133. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  134. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
  135. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  136. package/dist/src/data-source/models.d.ts +28 -28
  137. package/dist/src/data-source/models.js +8 -8
  138. package/dist/src/empty-placeholder.d.ts +23 -23
  139. package/dist/src/empty-placeholder.js +88 -87
  140. package/dist/src/empty-placeholder.js.map +1 -1
  141. package/dist/src/expanded-date-picker.d.ts +43 -43
  142. package/dist/src/expanded-date-picker.js +109 -109
  143. package/dist/src/expanded-date-picker.js.map +1 -1
  144. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  145. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  146. package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
  147. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  148. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  149. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -1
  150. package/dist/src/manage/manage-bar.d.ts +35 -35
  151. package/dist/src/manage/manage-bar.js +79 -79
  152. package/dist/src/manage/manage-bar.js.map +1 -1
  153. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  154. package/dist/src/mediatype/mediatype-config.js +91 -92
  155. package/dist/src/mediatype/mediatype-config.js.map +1 -1
  156. package/dist/src/models.d.ts +219 -219
  157. package/dist/src/models.js +401 -401
  158. package/dist/src/models.js.map +1 -1
  159. package/dist/src/restoration-state-handler.d.ts +70 -70
  160. package/dist/src/restoration-state-handler.js +363 -362
  161. package/dist/src/restoration-state-handler.js.map +1 -1
  162. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  163. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  164. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -1
  165. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  166. package/dist/src/sort-filter-bar/alpha-bar.js +136 -136
  167. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  168. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  169. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  170. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  171. package/dist/src/sort-filter-bar/img/list.js +2 -2
  172. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  173. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  174. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  175. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  176. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  177. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  178. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  179. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  180. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  181. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  182. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  183. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -696
  184. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  185. package/dist/src/styles/ia-button.d.ts +2 -2
  186. package/dist/src/styles/ia-button.js +17 -17
  187. package/dist/src/styles/item-image-styles.d.ts +8 -8
  188. package/dist/src/styles/item-image-styles.js +9 -9
  189. package/dist/src/styles/sr-only.d.ts +1 -1
  190. package/dist/src/styles/sr-only.js +2 -2
  191. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  192. package/dist/src/tiles/base-tile-component.js +64 -64
  193. package/dist/src/tiles/base-tile-component.js.map +1 -1
  194. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  195. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  196. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -1
  197. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  198. package/dist/src/tiles/grid/account-tile.js +72 -72
  199. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  200. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  201. package/dist/src/tiles/grid/collection-tile.js +80 -80
  202. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  203. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  204. package/dist/src/tiles/grid/item-tile.js +160 -159
  205. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  206. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  207. package/dist/src/tiles/grid/search-tile.js +51 -51
  208. package/dist/src/tiles/grid/search-tile.js.map +1 -1
  209. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  210. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  211. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  212. package/dist/src/tiles/grid/tile-stats.js +54 -54
  213. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  214. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  215. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  216. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  217. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  218. package/dist/src/tiles/hover/tile-hover-pane.js +70 -72
  219. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
  220. package/dist/src/tiles/image-block.d.ts +18 -18
  221. package/dist/src/tiles/image-block.js +89 -89
  222. package/dist/src/tiles/image-block.js.map +1 -1
  223. package/dist/src/tiles/item-image.d.ts +39 -39
  224. package/dist/src/tiles/item-image.js +154 -154
  225. package/dist/src/tiles/item-image.js.map +1 -1
  226. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  227. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  228. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  229. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  230. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  231. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  232. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  233. package/dist/src/tiles/list/tile-list.js +326 -324
  234. package/dist/src/tiles/list/tile-list.js.map +1 -1
  235. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  236. package/dist/src/tiles/mediatype-icon.js +47 -47
  237. package/dist/src/tiles/mediatype-icon.js.map +1 -1
  238. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  239. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  240. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
  241. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  242. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  243. package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
  244. package/dist/src/tiles/review-block.d.ts +12 -12
  245. package/dist/src/tiles/review-block.js +56 -56
  246. package/dist/src/tiles/review-block.js.map +1 -1
  247. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  248. package/dist/src/tiles/text-snippet-block.js +73 -73
  249. package/dist/src/tiles/text-snippet-block.js.map +1 -1
  250. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  251. package/dist/src/tiles/tile-dispatcher.js +230 -230
  252. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  253. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  254. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  255. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  256. package/dist/src/utils/analytics-events.d.ts +28 -28
  257. package/dist/src/utils/analytics-events.js +30 -30
  258. package/dist/src/utils/array-equals.d.ts +4 -4
  259. package/dist/src/utils/array-equals.js +10 -10
  260. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  261. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  262. package/dist/src/utils/facet-utils.d.ts +83 -83
  263. package/dist/src/utils/facet-utils.js +145 -145
  264. package/dist/src/utils/facet-utils.js.map +1 -1
  265. package/dist/src/utils/format-count.d.ts +7 -7
  266. package/dist/src/utils/format-count.js +76 -75
  267. package/dist/src/utils/format-count.js.map +1 -1
  268. package/dist/src/utils/format-date.d.ts +2 -2
  269. package/dist/src/utils/format-date.js +27 -27
  270. package/dist/src/utils/format-date.js.map +1 -1
  271. package/dist/src/utils/format-unit-size.d.ts +2 -2
  272. package/dist/src/utils/format-unit-size.js +33 -33
  273. package/dist/src/utils/format-unit-size.js.map +1 -1
  274. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  275. package/dist/src/utils/local-date-from-utc.js +15 -15
  276. package/dist/src/utils/log.d.ts +7 -7
  277. package/dist/src/utils/log.js +15 -13
  278. package/dist/src/utils/log.js.map +1 -1
  279. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  280. package/dist/src/utils/resolve-mediatype.js +23 -23
  281. package/dist/src/utils/resolve-mediatype.js.map +1 -1
  282. package/dist/src/utils/sha1.d.ts +2 -2
  283. package/dist/src/utils/sha1.js +8 -8
  284. package/dist/test/collection-browser.test.d.ts +1 -1
  285. package/dist/test/collection-browser.test.js +1293 -1294
  286. package/dist/test/collection-browser.test.js.map +1 -1
  287. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  288. package/dist/test/collection-facets/facet-row.test.js +227 -230
  289. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  290. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  291. package/dist/test/collection-facets/facets-template.test.js +91 -91
  292. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  293. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  294. package/dist/test/collection-facets/more-facets-content.test.js +141 -140
  295. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  296. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  297. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -116
  298. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
  299. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  300. package/dist/test/collection-facets/toggle-switch.test.js +73 -82
  301. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
  302. package/dist/test/collection-facets.test.d.ts +2 -2
  303. package/dist/test/collection-facets.test.js +690 -689
  304. package/dist/test/collection-facets.test.js.map +1 -1
  305. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  306. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  307. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -1
  308. package/dist/test/empty-placeholder.test.d.ts +1 -1
  309. package/dist/test/empty-placeholder.test.js +63 -62
  310. package/dist/test/empty-placeholder.test.js.map +1 -1
  311. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  312. package/dist/test/expanded-date-picker.test.js +95 -95
  313. package/dist/test/expanded-date-picker.test.js.map +1 -1
  314. package/dist/test/icon-overlay.test.d.ts +1 -1
  315. package/dist/test/icon-overlay.test.js +24 -23
  316. package/dist/test/icon-overlay.test.js.map +1 -1
  317. package/dist/test/image-block.test.d.ts +1 -1
  318. package/dist/test/image-block.test.js +107 -106
  319. package/dist/test/image-block.test.js.map +1 -1
  320. package/dist/test/item-image.test.d.ts +1 -1
  321. package/dist/test/item-image.test.js +85 -84
  322. package/dist/test/item-image.test.js.map +1 -1
  323. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  324. package/dist/test/manage/manage-bar.test.js +91 -90
  325. package/dist/test/manage/manage-bar.test.js.map +1 -1
  326. package/dist/test/mediatype-config.test.d.ts +1 -1
  327. package/dist/test/mediatype-config.test.js +16 -16
  328. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  329. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  330. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  331. package/dist/test/mocks/mock-search-responses.js +942 -942
  332. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  333. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  334. package/dist/test/mocks/mock-search-service.js +54 -54
  335. package/dist/test/mocks/mock-search-service.js.map +1 -1
  336. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  337. package/dist/test/restoration-state-handler.test.js +270 -270
  338. package/dist/test/restoration-state-handler.test.js.map +1 -1
  339. package/dist/test/review-block.test.d.ts +1 -1
  340. package/dist/test/review-block.test.js +44 -43
  341. package/dist/test/review-block.test.js.map +1 -1
  342. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  343. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  344. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
  345. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  346. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  347. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
  348. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  349. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -425
  350. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  351. package/dist/test/text-overlay.test.d.ts +1 -1
  352. package/dist/test/text-overlay.test.js +38 -37
  353. package/dist/test/text-overlay.test.js.map +1 -1
  354. package/dist/test/text-snippet-block.test.d.ts +1 -1
  355. package/dist/test/text-snippet-block.test.js +57 -56
  356. package/dist/test/text-snippet-block.test.js.map +1 -1
  357. package/dist/test/tile-stats.test.d.ts +1 -1
  358. package/dist/test/tile-stats.test.js +99 -98
  359. package/dist/test/tile-stats.test.js.map +1 -1
  360. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  361. package/dist/test/tiles/grid/account-tile.test.js +76 -75
  362. package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
  363. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  364. package/dist/test/tiles/grid/collection-tile.test.js +73 -72
  365. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
  366. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  367. package/dist/test/tiles/grid/item-tile.test.js +312 -311
  368. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  369. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  370. package/dist/test/tiles/grid/search-tile.test.js +51 -50
  371. package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
  372. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  373. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  374. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  375. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  376. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  377. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
  378. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  379. package/dist/test/tiles/list/tile-list-compact.test.js +143 -142
  380. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  381. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  382. package/dist/test/tiles/list/tile-list.test.js +297 -296
  383. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  384. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  385. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  386. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  387. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  388. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  389. package/dist/test/utils/array-equals.test.d.ts +1 -1
  390. package/dist/test/utils/array-equals.test.js +26 -26
  391. package/dist/test/utils/format-count.test.d.ts +1 -1
  392. package/dist/test/utils/format-count.test.js +23 -23
  393. package/dist/test/utils/format-count.test.js.map +1 -1
  394. package/dist/test/utils/format-date.test.d.ts +1 -1
  395. package/dist/test/utils/format-date.test.js +30 -30
  396. package/dist/test/utils/format-date.test.js.map +1 -1
  397. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  398. package/dist/test/utils/format-unit-size.test.js +17 -17
  399. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  400. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  401. package/dist/test/utils/local-date-from-utc.test.js.map +1 -1
  402. package/index.html +3 -0
  403. package/local.archive.org.cert +86 -86
  404. package/local.archive.org.key +27 -27
  405. package/package.json +37 -38
  406. package/renovate.json +6 -6
  407. package/src/app-root.ts +21 -20
  408. package/src/collection-browser.ts +35 -33
  409. package/src/collection-facets/facets-template.ts +6 -7
  410. package/src/collection-facets/more-facets-content.ts +13 -11
  411. package/src/collection-facets/more-facets-pagination.ts +2 -3
  412. package/src/collection-facets/smart-facets/dedupe.ts +2 -2
  413. package/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.ts +1 -1
  414. package/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.ts +6 -6
  415. package/src/collection-facets/smart-facets/smart-facet-bar.ts +8 -6
  416. package/src/collection-facets/smart-facets/smart-facet-button.ts +3 -5
  417. package/src/collection-facets/smart-facets/smart-facet-dropdown.ts +4 -4
  418. package/src/collection-facets/smart-facets/smart-facet-heuristics.ts +1 -1
  419. package/src/collection-facets/toggle-switch.ts +2 -2
  420. package/src/collection-facets.ts +19 -18
  421. package/src/data-source/collection-browser-data-source-interface.ts +1 -5
  422. package/src/data-source/collection-browser-data-source.ts +34 -37
  423. package/src/empty-placeholder.ts +16 -19
  424. package/src/expanded-date-picker.ts +1 -1
  425. package/src/language-code-handler/language-code-handler.ts +1 -1
  426. package/src/manage/manage-bar.ts +12 -14
  427. package/src/mediatype/mediatype-config.ts +0 -1
  428. package/src/models.ts +3 -3
  429. package/src/restoration-state-handler.ts +15 -14
  430. package/src/sort-filter-bar/alpha-bar.ts +17 -16
  431. package/src/sort-filter-bar/sort-filter-bar.ts +15 -14
  432. package/src/tiles/grid/account-tile.ts +1 -1
  433. package/src/tiles/grid/collection-tile.ts +1 -1
  434. package/src/tiles/grid/item-tile.ts +9 -9
  435. package/src/tiles/grid/tile-stats.ts +4 -4
  436. package/src/tiles/hover/hover-pane-controller.ts +1 -1
  437. package/src/tiles/hover/tile-hover-pane.ts +2 -4
  438. package/src/tiles/item-image.ts +1 -1
  439. package/src/tiles/list/tile-list-compact.ts +2 -2
  440. package/src/tiles/list/tile-list.ts +24 -22
  441. package/src/tiles/tile-dispatcher.ts +5 -5
  442. package/src/tiles/tile-display-value-provider.ts +4 -4
  443. package/src/utils/facet-utils.ts +6 -6
  444. package/src/utils/format-count.ts +3 -2
  445. package/src/utils/format-date.ts +1 -1
  446. package/src/utils/format-unit-size.ts +1 -1
  447. package/src/utils/log.ts +3 -1
  448. package/test/collection-browser.test.ts +122 -123
  449. package/test/collection-facets/facet-row.test.ts +28 -31
  450. package/test/collection-facets/facets-template.test.ts +9 -9
  451. package/test/collection-facets/more-facets-content.test.ts +15 -14
  452. package/test/collection-facets/more-facets-pagination.test.ts +19 -18
  453. package/test/collection-facets/toggle-switch.test.ts +18 -28
  454. package/test/collection-facets.test.ts +37 -36
  455. package/test/data-source/collection-browser-data-source.test.ts +2 -2
  456. package/test/empty-placeholder.test.ts +7 -6
  457. package/test/expanded-date-picker.test.ts +18 -17
  458. package/test/icon-overlay.test.ts +1 -0
  459. package/test/image-block.test.ts +7 -6
  460. package/test/item-image.test.ts +1 -0
  461. package/test/manage/manage-bar.test.ts +14 -13
  462. package/test/mocks/mock-search-responses.ts +1 -2
  463. package/test/mocks/mock-search-service.ts +1 -1
  464. package/test/restoration-state-handler.test.ts +12 -12
  465. package/test/review-block.test.ts +2 -1
  466. package/test/sort-filter-bar/alpha-bar-tooltip.test.ts +1 -1
  467. package/test/sort-filter-bar/alpha-bar.test.ts +5 -5
  468. package/test/sort-filter-bar/sort-filter-bar.test.ts +39 -38
  469. package/test/text-overlay.test.ts +1 -0
  470. package/test/text-snippet-block.test.ts +6 -5
  471. package/test/tile-stats.test.ts +35 -26
  472. package/test/tiles/grid/account-tile.test.ts +3 -2
  473. package/test/tiles/grid/collection-tile.test.ts +4 -3
  474. package/test/tiles/grid/item-tile.test.ts +14 -13
  475. package/test/tiles/grid/search-tile.test.ts +2 -1
  476. package/test/tiles/hover/hover-pane-controller.test.ts +15 -15
  477. package/test/tiles/hover/tile-hover-pane.test.ts +5 -5
  478. package/test/tiles/list/tile-list-compact.test.ts +2 -1
  479. package/test/tiles/list/tile-list.test.ts +11 -10
  480. package/test/tiles/tile-dispatcher.test.ts +5 -5
  481. package/test/utils/format-count.test.ts +1 -1
  482. package/test/utils/format-date.test.ts +1 -1
  483. package/test/utils/local-date-from-utc.test.ts +1 -1
  484. package/tsconfig.json +1 -0
  485. package/web-dev-server.config.mjs +30 -30
  486. package/web-test-runner.config.mjs +41 -41
  487. package/.prettierignore +0 -1
  488. package/eslint.config.mjs +0 -53
@@ -1,85 +1,86 @@
1
- import { __decorate } from "tslib";
2
- import { css, html, LitElement, nothing, } from 'lit';
3
- import { repeat } from 'lit/directives/repeat.js';
4
- import { customElement, property, state } from 'lit/decorators.js';
5
- import { updateSelectedFacetBucket } from '../../utils/facet-utils';
6
- import { SmartQueryHeuristicGroup } from './smart-facet-heuristics';
7
- import { smartFacetEquals } from './smart-facet-equals';
8
- import { dedupe } from './dedupe';
9
- import filterIcon from '../../assets/img/icons/filter';
10
- import './smart-facet-button';
11
- import './smart-facet-dropdown';
12
- import { log } from '../../utils/log';
13
- const fieldPrefixes = {
14
- collection: 'Collection: ',
15
- creator: 'By: ',
16
- subject: 'About: ',
17
- };
18
- function capitalize(str) {
19
- return str.charAt(0).toUpperCase() + str.slice(1);
20
- }
21
- let SmartFacetBar = class SmartFacetBar extends LitElement {
22
- constructor() {
23
- super(...arguments);
24
- this.filterToggleActive = false;
25
- this.heuristicRecs = [];
26
- this.smartFacets = [];
27
- }
28
- //
29
- // COMPONENT LIFECYCLE METHODS
30
- //
31
- render() {
1
+ /* eslint-disable no-continue */
2
+ import { __decorate } from "tslib";
3
+ import { css, html, LitElement, nothing, } from 'lit';
4
+ import { repeat } from 'lit/directives/repeat.js';
5
+ import { customElement, property, state } from 'lit/decorators.js';
6
+ import { updateSelectedFacetBucket } from '../../utils/facet-utils';
7
+ import { SmartQueryHeuristicGroup } from './smart-facet-heuristics';
8
+ import { smartFacetEquals } from './smart-facet-equals';
9
+ import { dedupe } from './dedupe';
10
+ import filterIcon from '../../assets/img/icons/filter';
11
+ import './smart-facet-button';
12
+ import './smart-facet-dropdown';
13
+ import { log } from '../../utils/log';
14
+ const fieldPrefixes = {
15
+ collection: 'Collection: ',
16
+ creator: 'By: ',
17
+ subject: 'About: ',
18
+ };
19
+ function capitalize(str) {
20
+ return str.charAt(0).toUpperCase() + str.slice(1);
21
+ }
22
+ let SmartFacetBar = class SmartFacetBar extends LitElement {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.filterToggleActive = false;
26
+ this.heuristicRecs = [];
27
+ this.smartFacets = [];
28
+ }
29
+ //
30
+ // COMPONENT LIFECYCLE METHODS
31
+ //
32
+ render() {
32
33
  return html `
33
34
  <div id="smart-facets-container">
34
35
  ${this.filtersToggleTemplate}
35
36
  ${repeat(this.smartFacets, f => `${f[0].label}|${f[0].facets[0].facetType}|${f[0].facets[0].bucketKey}`, facet => this.makeSmartFacet(facet))}
36
37
  </div>
37
- `;
38
- }
39
- willUpdate(changed) {
40
- let shouldUpdateSmartFacets = false;
41
- if (changed.has('query')) {
42
- log('query change', changed.get('query'), this.query);
43
- this.lastAggregations = undefined;
44
- shouldUpdateSmartFacets = true;
45
- }
46
- if (changed.has('aggregations') &&
47
- !this.lastAggregations &&
48
- this.aggregations &&
49
- Object.keys(this.aggregations).length > 0) {
50
- log('aggs change', changed.get('aggregations'), this.aggregations);
51
- this.lastAggregations = this.aggregations;
52
- shouldUpdateSmartFacets = true;
53
- }
54
- if (shouldUpdateSmartFacets) {
55
- log('should update smart facets, doing so...');
56
- this.updateSmartFacets();
57
- }
58
- }
59
- async updateSmartFacets() {
60
- log('updating smart facets');
61
- if (this.query) {
62
- this.heuristicRecs =
63
- await new SmartQueryHeuristicGroup().getRecommendedFacets(this.query);
64
- log('heuristic recs are', this.heuristicRecs);
65
- this.smartFacets = dedupe(this.facetsToDisplay);
66
- log('smart facets are', this.smartFacets);
67
- }
68
- }
69
- //
70
- // OTHER METHODS
71
- //
72
- makeSmartFacet(facets) {
73
- if (facets.length === 0) {
74
- return nothing;
75
- }
76
- if (facets.length === 1) {
77
- return this.smartFacetButton(facets[0]);
78
- }
79
- return this.smartFacetDropdown(facets);
80
- }
81
- smartFacetButton(facet) {
82
- var _a;
38
+ `;
39
+ }
40
+ willUpdate(changed) {
41
+ let shouldUpdateSmartFacets = false;
42
+ if (changed.has('query')) {
43
+ log('query change', changed.get('query'), this.query);
44
+ this.lastAggregations = undefined;
45
+ shouldUpdateSmartFacets = true;
46
+ }
47
+ if (changed.has('aggregations') &&
48
+ !this.lastAggregations &&
49
+ this.aggregations &&
50
+ Object.keys(this.aggregations).length > 0) {
51
+ log('aggs change', changed.get('aggregations'), this.aggregations);
52
+ this.lastAggregations = this.aggregations;
53
+ shouldUpdateSmartFacets = true;
54
+ }
55
+ if (shouldUpdateSmartFacets) {
56
+ log('should update smart facets, doing so...');
57
+ this.updateSmartFacets();
58
+ }
59
+ }
60
+ async updateSmartFacets() {
61
+ log('updating smart facets');
62
+ if (this.query) {
63
+ this.heuristicRecs =
64
+ await new SmartQueryHeuristicGroup().getRecommendedFacets(this.query);
65
+ log('heuristic recs are', this.heuristicRecs);
66
+ this.smartFacets = dedupe(this.facetsToDisplay);
67
+ log('smart facets are', this.smartFacets);
68
+ }
69
+ }
70
+ //
71
+ // OTHER METHODS
72
+ //
73
+ makeSmartFacet(facets) {
74
+ if (facets.length === 0) {
75
+ return nothing;
76
+ }
77
+ if (facets.length === 1) {
78
+ return this.smartFacetButton(facets[0]);
79
+ }
80
+ return this.smartFacetDropdown(facets);
81
+ }
82
+ smartFacetButton(facet) {
83
+ var _a;
83
84
  return html `
84
85
  <smart-facet-button
85
86
  .facetInfo=${facet}
@@ -87,9 +88,9 @@ let SmartFacetBar = class SmartFacetBar extends LitElement {
87
88
  .selected=${(_a = facet.selected) !== null && _a !== void 0 ? _a : false}
88
89
  @facetClick=${this.facetClicked}
89
90
  ></smart-facet-button>
90
- `;
91
- }
92
- smartFacetDropdown(facets) {
91
+ `;
92
+ }
93
+ smartFacetDropdown(facets) {
93
94
  return html `
94
95
  <smart-facet-dropdown
95
96
  .facetInfo=${facets}
@@ -98,9 +99,9 @@ let SmartFacetBar = class SmartFacetBar extends LitElement {
98
99
  @facetClick=${this.facetDropdownClicked}
99
100
  @dropdownClick=${this.onDropdownClick}
100
101
  ></smart-facet-dropdown>
101
- `;
102
- }
103
- get filtersToggleTemplate() {
102
+ `;
103
+ }
104
+ get filtersToggleTemplate() {
104
105
  return html `
105
106
  <button
106
107
  id="filters-toggle"
@@ -110,129 +111,131 @@ let SmartFacetBar = class SmartFacetBar extends LitElement {
110
111
  >
111
112
  ${filterIcon}
112
113
  </button>
113
- `;
114
- }
115
- get facetsToDisplay() {
116
- const facets = [];
117
- if (this.heuristicRecs.length > 0) {
118
- for (const rec of this.heuristicRecs) {
119
- facets.push([rec]);
120
- }
121
- }
122
- if (this.lastAggregations) {
123
- const keys = [
124
- 'mediatype',
125
- 'year',
126
- 'language',
127
- 'creator',
128
- 'subject',
129
- 'collection',
130
- ];
131
- for (const key of keys) {
132
- const agg = this.lastAggregations[key];
133
- if (!agg)
134
- continue;
135
- if (agg.buckets.length === 0)
136
- continue;
137
- if (['lending', 'year_histogram'].includes(key))
138
- continue;
139
- if (typeof agg.buckets[0] === 'number')
140
- continue;
141
- if (key === 'mediatype' &&
142
- this.selectedFacets &&
143
- Object.values(this.selectedFacets.mediatype).some(bucket => bucket.state !== 'none')) {
144
- continue;
145
- }
146
- const facetType = key;
147
- const buckets = agg.buckets;
148
- const unusedBuckets = buckets.filter(b => {
149
- var _a;
150
- const selectedFacetBucket = (_a = this.selectedFacets) === null || _a === void 0 ? void 0 : _a[facetType][b.key];
151
- if (selectedFacetBucket && selectedFacetBucket.state !== 'none') {
152
- return false;
153
- }
154
- return true;
155
- });
156
- if (facetType === 'mediatype') {
157
- facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])], [this.toSmartFacet(facetType, [unusedBuckets[1]])]);
158
- }
159
- else if (facetType === 'collection' || facetType === 'subject') {
160
- const topBuckets = unusedBuckets.slice(0, 5);
161
- facets.push(topBuckets.map(b => this.toSmartFacet(facetType, [b])));
162
- }
163
- else {
164
- facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])]);
165
- }
166
- }
167
- }
168
- return facets;
169
- }
170
- toSmartFacet(facetType, buckets) {
171
- return {
172
- facets: buckets.map(bucket => {
173
- var _a;
174
- let displayText = capitalize(bucket.key.toString());
175
- if (facetType === 'collection') {
176
- const title = (_a = this.collectionTitles) === null || _a === void 0 ? void 0 : _a.get(bucket.key.toString());
177
- if (title)
178
- displayText = title;
179
- }
180
- return {
181
- facetType,
182
- bucketKey: bucket.key.toString(),
183
- displayText,
184
- };
185
- }),
186
- };
187
- }
188
- facetClicked(e) {
189
- if (!e.detail.smartFacet.selected) {
190
- this.smartFacets = [
191
- [{ ...e.detail.smartFacet, selected: true }],
192
- ...this.smartFacets.filter(f => f[0] !== e.detail.smartFacet),
193
- ];
194
- }
195
- for (const facet of e.detail.details) {
196
- this.selectedFacets = updateSelectedFacetBucket(this.selectedFacets, facet.facetType, facet.bucket, true);
197
- }
198
- const event = new CustomEvent('facetsChanged', {
199
- detail: this.selectedFacets,
200
- });
201
- this.dispatchEvent(event);
202
- }
203
- facetDropdownClicked(e) {
204
- if (this.smartFacets.find(sf => smartFacetEquals(sf[0], e.detail.smartFacet))) {
205
- return;
206
- }
207
- this.smartFacets = [
208
- [{ ...e.detail.smartFacet, selected: true }],
209
- ...this.smartFacets,
210
- ];
211
- for (const facet of e.detail.details) {
212
- this.selectedFacets = updateSelectedFacetBucket(this.selectedFacets, facet.facetType, facet.bucket, true);
213
- }
214
- const event = new CustomEvent('facetsChanged', {
215
- detail: this.selectedFacets,
216
- });
217
- this.dispatchEvent(event);
218
- }
219
- onDropdownClick(e) {
220
- var _a;
221
- log('smart bar: onDropdownClick', e.detail);
222
- (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('smart-facet-dropdown').forEach(dropdown => {
223
- if (dropdown !== e.detail) {
224
- log('closing', dropdown);
225
- dropdown.close();
226
- }
227
- });
228
- }
229
- filterToggleClicked() {
230
- this.dispatchEvent(new CustomEvent('filtersToggled'));
231
- }
232
- //
233
- // STYLES
234
- //
235
- static get styles() {
114
+ `;
115
+ }
116
+ get facetsToDisplay() {
117
+ const facets = [];
118
+ if (this.heuristicRecs.length > 0) {
119
+ for (const rec of this.heuristicRecs) {
120
+ facets.push([rec]);
121
+ }
122
+ }
123
+ if (this.lastAggregations) {
124
+ const keys = [
125
+ 'mediatype',
126
+ 'year',
127
+ 'language',
128
+ 'creator',
129
+ 'subject',
130
+ 'collection',
131
+ ];
132
+ for (const key of keys) {
133
+ const agg = this.lastAggregations[key];
134
+ if (!agg)
135
+ continue;
136
+ if (agg.buckets.length === 0)
137
+ continue;
138
+ if (['lending', 'year_histogram'].includes(key))
139
+ continue;
140
+ if (typeof agg.buckets[0] === 'number')
141
+ continue;
142
+ if (key === 'mediatype' &&
143
+ this.selectedFacets &&
144
+ Object.values(this.selectedFacets.mediatype).some(bucket => bucket.state !== 'none')) {
145
+ continue;
146
+ }
147
+ const facetType = key;
148
+ const buckets = agg.buckets;
149
+ const unusedBuckets = buckets.filter(b => {
150
+ var _a;
151
+ const selectedFacetBucket = (_a = this.selectedFacets) === null || _a === void 0 ? void 0 : _a[facetType][b.key];
152
+ if (selectedFacetBucket && selectedFacetBucket.state !== 'none') {
153
+ return false;
154
+ }
155
+ return true;
156
+ });
157
+ if (facetType === 'mediatype') {
158
+ facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])], [this.toSmartFacet(facetType, [unusedBuckets[1]])]);
159
+ }
160
+ else if (facetType === 'collection' || facetType === 'subject') {
161
+ const topBuckets = unusedBuckets.slice(0, 5);
162
+ facets.push(topBuckets.map(b => this.toSmartFacet(facetType, [b])));
163
+ }
164
+ else {
165
+ facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])]);
166
+ }
167
+ }
168
+ }
169
+ return facets;
170
+ }
171
+ toSmartFacet(facetType, buckets
172
+ // prefix = true
173
+ ) {
174
+ return {
175
+ facets: buckets.map(bucket => {
176
+ var _a;
177
+ let displayText = capitalize(bucket.key.toString());
178
+ if (facetType === 'collection') {
179
+ const title = (_a = this.collectionTitles) === null || _a === void 0 ? void 0 : _a.get(bucket.key.toString());
180
+ if (title)
181
+ displayText = title;
182
+ }
183
+ return {
184
+ facetType,
185
+ bucketKey: bucket.key.toString(),
186
+ displayText,
187
+ };
188
+ }),
189
+ };
190
+ }
191
+ facetClicked(e) {
192
+ if (!e.detail.smartFacet.selected) {
193
+ this.smartFacets = [
194
+ [{ ...e.detail.smartFacet, selected: true }],
195
+ ...this.smartFacets.filter(f => f[0] !== e.detail.smartFacet),
196
+ ];
197
+ }
198
+ for (const facet of e.detail.details) {
199
+ this.selectedFacets = updateSelectedFacetBucket(this.selectedFacets, facet.facetType, facet.bucket, true);
200
+ }
201
+ const event = new CustomEvent('facetsChanged', {
202
+ detail: this.selectedFacets,
203
+ });
204
+ this.dispatchEvent(event);
205
+ }
206
+ facetDropdownClicked(e) {
207
+ if (this.smartFacets.find(sf => smartFacetEquals(sf[0], e.detail.smartFacet))) {
208
+ return;
209
+ }
210
+ this.smartFacets = [
211
+ [{ ...e.detail.smartFacet, selected: true }],
212
+ ...this.smartFacets,
213
+ ];
214
+ for (const facet of e.detail.details) {
215
+ this.selectedFacets = updateSelectedFacetBucket(this.selectedFacets, facet.facetType, facet.bucket, true);
216
+ }
217
+ const event = new CustomEvent('facetsChanged', {
218
+ detail: this.selectedFacets,
219
+ });
220
+ this.dispatchEvent(event);
221
+ }
222
+ onDropdownClick(e) {
223
+ var _a;
224
+ log('smart bar: onDropdownClick', e.detail);
225
+ (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('smart-facet-dropdown').forEach(dropdown => {
226
+ if (dropdown !== e.detail) {
227
+ log('closing', dropdown);
228
+ dropdown.close();
229
+ }
230
+ });
231
+ }
232
+ filterToggleClicked() {
233
+ this.dispatchEvent(new CustomEvent('filtersToggled'));
234
+ }
235
+ //
236
+ // STYLES
237
+ //
238
+ static get styles() {
236
239
  return css `
237
240
  #smart-facets-container {
238
241
  display: flex;
@@ -266,35 +269,35 @@ let SmartFacetBar = class SmartFacetBar extends LitElement {
266
269
  filter: invert(1);
267
270
  vertical-align: text-bottom;
268
271
  }
269
- `;
270
- }
271
- };
272
- __decorate([
273
- property({ type: String })
274
- ], SmartFacetBar.prototype, "query", void 0);
275
- __decorate([
276
- property({ type: Object })
277
- ], SmartFacetBar.prototype, "aggregations", void 0);
278
- __decorate([
279
- property({ type: Object })
280
- ], SmartFacetBar.prototype, "selectedFacets", void 0);
281
- __decorate([
282
- property({ type: Object })
283
- ], SmartFacetBar.prototype, "collectionTitles", void 0);
284
- __decorate([
285
- property({ type: Boolean })
286
- ], SmartFacetBar.prototype, "filterToggleActive", void 0);
287
- __decorate([
288
- state()
289
- ], SmartFacetBar.prototype, "heuristicRecs", void 0);
290
- __decorate([
291
- state()
292
- ], SmartFacetBar.prototype, "smartFacets", void 0);
293
- __decorate([
294
- state()
295
- ], SmartFacetBar.prototype, "lastAggregations", void 0);
296
- SmartFacetBar = __decorate([
297
- customElement('smart-facet-bar')
298
- ], SmartFacetBar);
299
- export { SmartFacetBar };
272
+ `;
273
+ }
274
+ };
275
+ __decorate([
276
+ property({ type: String })
277
+ ], SmartFacetBar.prototype, "query", void 0);
278
+ __decorate([
279
+ property({ type: Object })
280
+ ], SmartFacetBar.prototype, "aggregations", void 0);
281
+ __decorate([
282
+ property({ type: Object })
283
+ ], SmartFacetBar.prototype, "selectedFacets", void 0);
284
+ __decorate([
285
+ property({ type: Object })
286
+ ], SmartFacetBar.prototype, "collectionTitles", void 0);
287
+ __decorate([
288
+ property({ type: Boolean })
289
+ ], SmartFacetBar.prototype, "filterToggleActive", void 0);
290
+ __decorate([
291
+ state()
292
+ ], SmartFacetBar.prototype, "heuristicRecs", void 0);
293
+ __decorate([
294
+ state()
295
+ ], SmartFacetBar.prototype, "smartFacets", void 0);
296
+ __decorate([
297
+ state()
298
+ ], SmartFacetBar.prototype, "lastAggregations", void 0);
299
+ SmartFacetBar = __decorate([
300
+ customElement('smart-facet-bar')
301
+ ], SmartFacetBar);
302
+ export { SmartFacetBar };
300
303
  //# sourceMappingURL=smart-facet-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"smart-facet-bar.js","sourceRoot":"","sources":["../../../../src/collection-facets/smart-facets/smart-facet-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n html,\n LitElement,\n TemplateResult,\n CSSResultGroup,\n nothing,\n PropertyValues,\n} from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { Aggregation, Bucket } from '@internetarchive/search-service';\nimport type { CollectionTitles } from '../../data-source/models';\nimport type { FacetOption, SelectedFacets } from '../../models';\nimport { updateSelectedFacetBucket } from '../../utils/facet-utils';\nimport { SmartQueryHeuristicGroup } from './smart-facet-heuristics';\nimport type { SmartFacetDropdown } from './smart-facet-dropdown';\nimport type { SmartFacet, SmartFacetEvent } from './models';\nimport { smartFacetEquals } from './smart-facet-equals';\nimport { dedupe } from './dedupe';\nimport filterIcon from '../../assets/img/icons/filter';\n\nimport './smart-facet-button';\nimport './smart-facet-dropdown';\nimport { log } from '../../utils/log';\n\nconst fieldPrefixes: Partial<Record<FacetOption, string>> = {\n collection: 'Collection: ',\n creator: 'By: ',\n subject: 'About: ',\n};\n\nfunction capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n@customElement('smart-facet-bar')\nexport class SmartFacetBar extends LitElement {\n @property({ type: String }) query?: string;\n\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\n\n @property({ type: Object }) selectedFacets?: SelectedFacets;\n\n /** The map from collection identifiers to their titles */\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n @property({ type: Boolean }) filterToggleActive = false;\n\n @state() private heuristicRecs: SmartFacet[] = [];\n\n @state() private smartFacets: SmartFacet[][] = [];\n\n @state() private lastAggregations?: Record<string, Aggregation>;\n\n //\n // COMPONENT LIFECYCLE METHODS\n //\n\n render() {\n return html`\n <div id=\"smart-facets-container\">\n ${this.filtersToggleTemplate}\n ${repeat(\n this.smartFacets,\n f =>\n `${f[0].label}|${f[0].facets[0].facetType}|${f[0].facets[0].bucketKey}`,\n facet => this.makeSmartFacet(facet),\n )}\n </div>\n `;\n }\n\n protected willUpdate(changed: PropertyValues): void {\n let shouldUpdateSmartFacets = false;\n\n if (changed.has('query')) {\n log('query change', changed.get('query'), this.query);\n this.lastAggregations = undefined;\n shouldUpdateSmartFacets = true;\n }\n\n if (\n changed.has('aggregations') &&\n !this.lastAggregations &&\n this.aggregations &&\n Object.keys(this.aggregations).length > 0\n ) {\n log('aggs change', changed.get('aggregations'), this.aggregations);\n this.lastAggregations = this.aggregations;\n shouldUpdateSmartFacets = true;\n }\n\n if (shouldUpdateSmartFacets) {\n log('should update smart facets, doing so...');\n this.updateSmartFacets();\n }\n }\n\n private async updateSmartFacets(): Promise<void> {\n log('updating smart facets');\n if (this.query) {\n this.heuristicRecs =\n await new SmartQueryHeuristicGroup().getRecommendedFacets(this.query);\n log('heuristic recs are', this.heuristicRecs);\n this.smartFacets = dedupe(this.facetsToDisplay);\n log('smart facets are', this.smartFacets);\n }\n }\n\n //\n // OTHER METHODS\n //\n\n private makeSmartFacet(facets: SmartFacet[]) {\n if (facets.length === 0) {\n return nothing;\n }\n if (facets.length === 1) {\n return this.smartFacetButton(facets[0]);\n }\n return this.smartFacetDropdown(facets);\n }\n\n private smartFacetButton(facet: SmartFacet) {\n return html`\n <smart-facet-button\n .facetInfo=${facet}\n .labelPrefix=${fieldPrefixes[facet.facets[0].facetType]}\n .selected=${facet.selected ?? false}\n @facetClick=${this.facetClicked}\n ></smart-facet-button>\n `;\n }\n\n private smartFacetDropdown(facets: SmartFacet[]) {\n return html`\n <smart-facet-dropdown\n .facetInfo=${facets}\n .labelPrefix=${fieldPrefixes[facets[0].facets[0].facetType]}\n .activeFacetRef=${facets[0].facets[0]}\n @facetClick=${this.facetDropdownClicked}\n @dropdownClick=${this.onDropdownClick}\n ></smart-facet-dropdown>\n `;\n }\n\n private get filtersToggleTemplate(): TemplateResult {\n return html`\n <button\n id=\"filters-toggle\"\n class=${this.filterToggleActive ? 'active' : ''}\n title=\"${this.filterToggleActive ? 'Hide' : 'Show'} filters pane\"\n @click=${this.filterToggleClicked}\n >\n ${filterIcon}\n </button>\n `;\n }\n\n private get facetsToDisplay(): SmartFacet[][] {\n const facets: SmartFacet[][] = [];\n\n if (this.heuristicRecs.length > 0) {\n for (const rec of this.heuristicRecs) {\n facets.push([rec]);\n }\n }\n\n if (this.lastAggregations) {\n const keys = [\n 'mediatype',\n 'year',\n 'language',\n 'creator',\n 'subject',\n 'collection',\n ];\n for (const key of keys) {\n const agg = this.lastAggregations[key];\n if (!agg) continue;\n if (agg.buckets.length === 0) continue;\n if (['lending', 'year_histogram'].includes(key)) continue;\n if (typeof agg.buckets[0] === 'number') continue;\n\n if (\n key === 'mediatype' &&\n this.selectedFacets &&\n Object.values(this.selectedFacets.mediatype).some(\n bucket => bucket.state !== 'none',\n )\n ) {\n continue;\n }\n\n const facetType = key as FacetOption;\n const buckets = agg.buckets as Bucket[];\n\n const unusedBuckets = buckets.filter(b => {\n const selectedFacetBucket = this.selectedFacets?.[facetType][b.key];\n if (selectedFacetBucket && selectedFacetBucket.state !== 'none') {\n return false;\n }\n return true;\n });\n\n if (facetType === 'mediatype') {\n facets.push(\n [this.toSmartFacet(facetType, [unusedBuckets[0]])],\n [this.toSmartFacet(facetType, [unusedBuckets[1]])],\n );\n } else if (facetType === 'collection' || facetType === 'subject') {\n const topBuckets = unusedBuckets.slice(0, 5);\n facets.push(topBuckets.map(b => this.toSmartFacet(facetType, [b])));\n } else {\n facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])]);\n }\n }\n }\n\n return facets;\n }\n\n private toSmartFacet(\n facetType: FacetOption,\n buckets: Bucket[],\n // prefix = true\n ): SmartFacet {\n return {\n facets: buckets.map(bucket => {\n let displayText = capitalize(bucket.key.toString());\n if (facetType === 'collection') {\n const title = this.collectionTitles?.get(bucket.key.toString());\n if (title) displayText = title;\n }\n\n return {\n facetType,\n bucketKey: bucket.key.toString(),\n displayText,\n };\n }),\n } as SmartFacet;\n }\n\n private facetClicked(e: CustomEvent<SmartFacetEvent>): void {\n if (!e.detail.smartFacet.selected) {\n this.smartFacets = [\n [{ ...e.detail.smartFacet, selected: true }],\n ...this.smartFacets.filter(f => f[0] !== e.detail.smartFacet),\n ];\n }\n\n for (const facet of e.detail.details) {\n this.selectedFacets = updateSelectedFacetBucket(\n this.selectedFacets,\n facet.facetType,\n facet.bucket,\n true,\n );\n }\n\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private facetDropdownClicked(e: CustomEvent<SmartFacetEvent>): void {\n if (\n this.smartFacets.find(sf => smartFacetEquals(sf[0], e.detail.smartFacet))\n ) {\n return;\n }\n\n this.smartFacets = [\n [{ ...e.detail.smartFacet, selected: true }],\n ...this.smartFacets,\n ];\n\n for (const facet of e.detail.details) {\n this.selectedFacets = updateSelectedFacetBucket(\n this.selectedFacets,\n facet.facetType,\n facet.bucket,\n true,\n );\n }\n\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private onDropdownClick(e: CustomEvent<SmartFacetDropdown>): void {\n log('smart bar: onDropdownClick', e.detail);\n this.shadowRoot\n ?.querySelectorAll('smart-facet-dropdown')\n .forEach(dropdown => {\n if (dropdown !== e.detail) {\n log('closing', dropdown);\n (dropdown as SmartFacetDropdown).close();\n }\n });\n }\n\n private filterToggleClicked(): void {\n this.dispatchEvent(new CustomEvent('filtersToggled'));\n }\n\n //\n // STYLES\n //\n\n static get styles(): CSSResultGroup {\n return css`\n #smart-facets-container {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 5px;\n padding: 10px 0;\n }\n\n #filters-toggle {\n margin: 0;\n border: 0;\n padding: 5px 10px;\n border-radius: 15px;\n background: #194880;\n color: white;\n font-size: 1.6rem;\n font-family: inherit;\n text-decoration: none;\n box-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n cursor: pointer;\n }\n\n #filters-toggle.active {\n background: #09294d;\n box-shadow: -1px -1px rgba(0, 0, 0, 0.1);\n }\n\n #filters-toggle > svg {\n width: 15px;\n filter: invert(1);\n vertical-align: text-bottom;\n }\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"smart-facet-bar.js","sourceRoot":"","sources":["../../../../src/collection-facets/smart-facets/smart-facet-bar.ts"],"names":[],"mappings":"AAAA,gCAAgC;;AAEhC,OAAO,EACL,GAAG,EACH,IAAI,EACJ,UAAU,EAGV,OAAO,GAER,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAInE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,UAAU,MAAM,+BAA+B,CAAC;AAEvD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,aAAa,GAAyC;IAC1D,UAAU,EAAE,cAAc;IAC1B,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAGD,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,UAAU;IAA7C;;QAW+B,uBAAkB,GAAG,KAAK,CAAC;QAEvC,kBAAa,GAAiB,EAAE,CAAC;QAEjC,gBAAW,GAAmB,EAAE,CAAC;IA4SpD,CAAC;IAxSC,EAAE;IACF,8BAA8B;IAC9B,EAAE;IAEF,MAAM;QACJ,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,qBAAqB;UAC1B,MAAM,CACN,IAAI,CAAC,WAAW,EAChB,CAAC,CAAC,EAAE,CACF,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EACzE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CACpC;;KAEJ,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAuB;QAC1C,IAAI,uBAAuB,GAAG,KAAK,CAAC;QAEpC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACxB,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,uBAAuB,GAAG,IAAI,CAAC;SAChC;QAED,IACE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B,CAAC,IAAI,CAAC,gBAAgB;YACtB,IAAI,CAAC,YAAY;YACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EACzC;YACA,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC1C,uBAAuB,GAAG,IAAI,CAAC;SAChC;QAED,IAAI,uBAAuB,EAAE;YAC3B,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,aAAa;gBAChB,MAAM,IAAI,wBAAwB,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxE,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChD,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,EAAE;IACF,gBAAgB;IAChB,EAAE;IAEM,cAAc,CAAC,MAAoB;QACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,gBAAgB,CAAC,KAAiB;;QACxC,OAAO,IAAI,CAAA;;qBAEM,KAAK;uBACH,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC3C,MAAA,KAAK,CAAC,QAAQ,mCAAI,KAAK;sBACrB,IAAI,CAAC,YAAY;;KAElC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,MAAoB;QAC7C,OAAO,IAAI,CAAA;;qBAEM,MAAM;uBACJ,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;0BACzC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;sBACvB,IAAI,CAAC,oBAAoB;yBACtB,IAAI,CAAC,eAAe;;KAExC,CAAC;IACJ,CAAC;IAED,IAAY,qBAAqB;QAC/B,OAAO,IAAI,CAAA;;;gBAGC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;iBACtC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;iBACzC,IAAI,CAAC,mBAAmB;;UAE/B,UAAU;;KAEf,CAAC;IACJ,CAAC;IAED,IAAY,eAAe;QACzB,MAAM,MAAM,GAAmB,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACpB;SACF;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,IAAI,GAAG;gBACX,WAAW;gBACX,MAAM;gBACN,UAAU;gBACV,SAAS;gBACT,SAAS;gBACT,YAAY;aACb,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,SAAS;gBACnB,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACvC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC1D,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;oBAAE,SAAS;gBAEjD,IACE,GAAG,KAAK,WAAW;oBACnB,IAAI,CAAC,cAAc;oBACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAClC,EACD;oBACA,SAAS;iBACV;gBAED,MAAM,SAAS,GAAG,GAAkB,CAAC;gBACrC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAmB,CAAC;gBAExC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;;oBACvC,MAAM,mBAAmB,GAAG,MAAA,IAAI,CAAC,cAAc,0CAAG,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpE,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,KAAK,KAAK,MAAM,EAAE;wBAC/D,OAAO,KAAK,CAAC;qBACd;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,IAAI,SAAS,KAAK,WAAW,EAAE;oBAC7B,MAAM,CAAC,IAAI,CACT,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAClD,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;iBACH;qBAAM,IAAI,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,SAAS,EAAE;oBAChE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrE;qBAAM;oBACL,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjE;aACF;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY,CAClB,SAAsB,EACtB,OAAiB;IACjB,gBAAgB;;QAEhB,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;;gBAC3B,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpD,IAAI,SAAS,KAAK,YAAY,EAAE;oBAC9B,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAChE,IAAI,KAAK;wBAAE,WAAW,GAAG,KAAK,CAAC;iBAChC;gBAED,OAAO;oBACL,SAAS;oBACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;oBAChC,WAAW;iBACZ,CAAC;YACJ,CAAC,CAAC;SACW,CAAC;IAClB,CAAC;IAEO,YAAY,CAAC,CAA+B;QAClD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,WAAW,GAAG;gBACjB,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC5C,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;aAC9D,CAAC;SACH;QAED,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAC7C,IAAI,CAAC,cAAc,EACnB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,IAAI,CACL,CAAC;SACH;QAED,MAAM,KAAK,GAAG,IAAI,WAAW,CAAiB,eAAe,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,cAAc;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,oBAAoB,CAAC,CAA+B;QAC1D,IACE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EACzE;YACA,OAAO;SACR;QAED,IAAI,CAAC,WAAW,GAAG;YACjB,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5C,GAAG,IAAI,CAAC,WAAW;SACpB,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAC7C,IAAI,CAAC,cAAc,EACnB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,IAAI,CACL,CAAC;SACH;QAED,MAAM,KAAK,GAAG,IAAI,WAAW,CAAiB,eAAe,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,cAAc;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,eAAe,CAAC,CAAkC;;QACxD,GAAG,CAAC,4BAA4B,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAA,IAAI,CAAC,UAAU,0CACX,gBAAgB,CAAC,sBAAsB,EACxC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,IAAI,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE;gBACzB,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACxB,QAA+B,CAAC,KAAK,EAAE,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,EAAE;IACF,SAAS;IACT,EAAE;IAEF,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCT,CAAC;IACJ,CAAC;CACF,CAAA;AA1T6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAgB;AAEf;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mDAA4C;AAE3C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAiC;AAI5D;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDACS;AAEP;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yDAA4B;AAE/C;IAAR,KAAK,EAAE;oDAA0C;AAEzC;IAAR,KAAK,EAAE;kDAA0C;AAEzC;IAAR,KAAK,EAAE;uDAAwD;AAjBrD,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CA2TzB;SA3TY,aAAa","sourcesContent":["/* eslint-disable no-continue */\n\nimport {\n css,\n html,\n LitElement,\n TemplateResult,\n CSSResultGroup,\n nothing,\n PropertyValues,\n} from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { Aggregation, Bucket } from '@internetarchive/search-service';\nimport type { CollectionTitles } from '../../data-source/models';\nimport type { FacetOption, SelectedFacets } from '../../models';\nimport { updateSelectedFacetBucket } from '../../utils/facet-utils';\nimport { SmartQueryHeuristicGroup } from './smart-facet-heuristics';\nimport type { SmartFacetDropdown } from './smart-facet-dropdown';\nimport type { SmartFacet, SmartFacetEvent } from './models';\nimport { smartFacetEquals } from './smart-facet-equals';\nimport { dedupe } from './dedupe';\nimport filterIcon from '../../assets/img/icons/filter';\n\nimport './smart-facet-button';\nimport './smart-facet-dropdown';\nimport { log } from '../../utils/log';\n\nconst fieldPrefixes: Partial<Record<FacetOption, string>> = {\n collection: 'Collection: ',\n creator: 'By: ',\n subject: 'About: ',\n};\n\nfunction capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n@customElement('smart-facet-bar')\nexport class SmartFacetBar extends LitElement {\n @property({ type: String }) query?: string;\n\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\n\n @property({ type: Object }) selectedFacets?: SelectedFacets;\n\n /** The map from collection identifiers to their titles */\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n @property({ type: Boolean }) filterToggleActive = false;\n\n @state() private heuristicRecs: SmartFacet[] = [];\n\n @state() private smartFacets: SmartFacet[][] = [];\n\n @state() private lastAggregations?: Record<string, Aggregation>;\n\n //\n // COMPONENT LIFECYCLE METHODS\n //\n\n render() {\n return html`\n <div id=\"smart-facets-container\">\n ${this.filtersToggleTemplate}\n ${repeat(\n this.smartFacets,\n f =>\n `${f[0].label}|${f[0].facets[0].facetType}|${f[0].facets[0].bucketKey}`,\n facet => this.makeSmartFacet(facet)\n )}\n </div>\n `;\n }\n\n protected willUpdate(changed: PropertyValues): void {\n let shouldUpdateSmartFacets = false;\n\n if (changed.has('query')) {\n log('query change', changed.get('query'), this.query);\n this.lastAggregations = undefined;\n shouldUpdateSmartFacets = true;\n }\n\n if (\n changed.has('aggregations') &&\n !this.lastAggregations &&\n this.aggregations &&\n Object.keys(this.aggregations).length > 0\n ) {\n log('aggs change', changed.get('aggregations'), this.aggregations);\n this.lastAggregations = this.aggregations;\n shouldUpdateSmartFacets = true;\n }\n\n if (shouldUpdateSmartFacets) {\n log('should update smart facets, doing so...');\n this.updateSmartFacets();\n }\n }\n\n private async updateSmartFacets(): Promise<void> {\n log('updating smart facets');\n if (this.query) {\n this.heuristicRecs =\n await new SmartQueryHeuristicGroup().getRecommendedFacets(this.query);\n log('heuristic recs are', this.heuristicRecs);\n this.smartFacets = dedupe(this.facetsToDisplay);\n log('smart facets are', this.smartFacets);\n }\n }\n\n //\n // OTHER METHODS\n //\n\n private makeSmartFacet(facets: SmartFacet[]) {\n if (facets.length === 0) {\n return nothing;\n }\n if (facets.length === 1) {\n return this.smartFacetButton(facets[0]);\n }\n return this.smartFacetDropdown(facets);\n }\n\n private smartFacetButton(facet: SmartFacet) {\n return html`\n <smart-facet-button\n .facetInfo=${facet}\n .labelPrefix=${fieldPrefixes[facet.facets[0].facetType]}\n .selected=${facet.selected ?? false}\n @facetClick=${this.facetClicked}\n ></smart-facet-button>\n `;\n }\n\n private smartFacetDropdown(facets: SmartFacet[]) {\n return html`\n <smart-facet-dropdown\n .facetInfo=${facets}\n .labelPrefix=${fieldPrefixes[facets[0].facets[0].facetType]}\n .activeFacetRef=${facets[0].facets[0]}\n @facetClick=${this.facetDropdownClicked}\n @dropdownClick=${this.onDropdownClick}\n ></smart-facet-dropdown>\n `;\n }\n\n private get filtersToggleTemplate(): TemplateResult {\n return html`\n <button\n id=\"filters-toggle\"\n class=${this.filterToggleActive ? 'active' : ''}\n title=\"${this.filterToggleActive ? 'Hide' : 'Show'} filters pane\"\n @click=${this.filterToggleClicked}\n >\n ${filterIcon}\n </button>\n `;\n }\n\n private get facetsToDisplay(): SmartFacet[][] {\n const facets: SmartFacet[][] = [];\n\n if (this.heuristicRecs.length > 0) {\n for (const rec of this.heuristicRecs) {\n facets.push([rec]);\n }\n }\n\n if (this.lastAggregations) {\n const keys = [\n 'mediatype',\n 'year',\n 'language',\n 'creator',\n 'subject',\n 'collection',\n ];\n for (const key of keys) {\n const agg = this.lastAggregations[key];\n if (!agg) continue;\n if (agg.buckets.length === 0) continue;\n if (['lending', 'year_histogram'].includes(key)) continue;\n if (typeof agg.buckets[0] === 'number') continue;\n\n if (\n key === 'mediatype' &&\n this.selectedFacets &&\n Object.values(this.selectedFacets.mediatype).some(\n bucket => bucket.state !== 'none'\n )\n ) {\n continue;\n }\n\n const facetType = key as FacetOption;\n const buckets = agg.buckets as Bucket[];\n\n const unusedBuckets = buckets.filter(b => {\n const selectedFacetBucket = this.selectedFacets?.[facetType][b.key];\n if (selectedFacetBucket && selectedFacetBucket.state !== 'none') {\n return false;\n }\n return true;\n });\n\n if (facetType === 'mediatype') {\n facets.push(\n [this.toSmartFacet(facetType, [unusedBuckets[0]])],\n [this.toSmartFacet(facetType, [unusedBuckets[1]])]\n );\n } else if (facetType === 'collection' || facetType === 'subject') {\n const topBuckets = unusedBuckets.slice(0, 5);\n facets.push(topBuckets.map(b => this.toSmartFacet(facetType, [b])));\n } else {\n facets.push([this.toSmartFacet(facetType, [unusedBuckets[0]])]);\n }\n }\n }\n\n return facets;\n }\n\n private toSmartFacet(\n facetType: FacetOption,\n buckets: Bucket[]\n // prefix = true\n ): SmartFacet {\n return {\n facets: buckets.map(bucket => {\n let displayText = capitalize(bucket.key.toString());\n if (facetType === 'collection') {\n const title = this.collectionTitles?.get(bucket.key.toString());\n if (title) displayText = title;\n }\n\n return {\n facetType,\n bucketKey: bucket.key.toString(),\n displayText,\n };\n }),\n } as SmartFacet;\n }\n\n private facetClicked(e: CustomEvent<SmartFacetEvent>): void {\n if (!e.detail.smartFacet.selected) {\n this.smartFacets = [\n [{ ...e.detail.smartFacet, selected: true }],\n ...this.smartFacets.filter(f => f[0] !== e.detail.smartFacet),\n ];\n }\n\n for (const facet of e.detail.details) {\n this.selectedFacets = updateSelectedFacetBucket(\n this.selectedFacets,\n facet.facetType,\n facet.bucket,\n true\n );\n }\n\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private facetDropdownClicked(e: CustomEvent<SmartFacetEvent>): void {\n if (\n this.smartFacets.find(sf => smartFacetEquals(sf[0], e.detail.smartFacet))\n ) {\n return;\n }\n\n this.smartFacets = [\n [{ ...e.detail.smartFacet, selected: true }],\n ...this.smartFacets,\n ];\n\n for (const facet of e.detail.details) {\n this.selectedFacets = updateSelectedFacetBucket(\n this.selectedFacets,\n facet.facetType,\n facet.bucket,\n true\n );\n }\n\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private onDropdownClick(e: CustomEvent<SmartFacetDropdown>): void {\n log('smart bar: onDropdownClick', e.detail);\n this.shadowRoot\n ?.querySelectorAll('smart-facet-dropdown')\n .forEach(dropdown => {\n if (dropdown !== e.detail) {\n log('closing', dropdown);\n (dropdown as SmartFacetDropdown).close();\n }\n });\n }\n\n private filterToggleClicked(): void {\n this.dispatchEvent(new CustomEvent('filtersToggled'));\n }\n\n //\n // STYLES\n //\n\n static get styles(): CSSResultGroup {\n return css`\n #smart-facets-container {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 5px;\n padding: 10px 0;\n }\n\n #filters-toggle {\n margin: 0;\n border: 0;\n padding: 5px 10px;\n border-radius: 15px;\n background: #194880;\n color: white;\n font-size: 1.6rem;\n font-family: inherit;\n text-decoration: none;\n box-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n cursor: pointer;\n }\n\n #filters-toggle.active {\n background: #09294d;\n box-shadow: -1px -1px rgba(0, 0, 0, 0.1);\n }\n\n #filters-toggle > svg {\n width: 15px;\n filter: invert(1);\n vertical-align: text-bottom;\n }\n `;\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { LitElement, CSSResultGroup, nothing } from 'lit';
2
- import type { SmartFacet } from './models';
3
- export declare class SmartFacetButton extends LitElement {
4
- facetInfo?: SmartFacet;
5
- labelPrefix?: string;
6
- selected: boolean;
7
- render(): import("lit").TemplateResult<1> | typeof nothing;
8
- private get href();
9
- private facetClicked;
10
- static get styles(): CSSResultGroup;
11
- }
1
+ import { LitElement, CSSResultGroup, nothing } from 'lit';
2
+ import type { SmartFacet } from './models';
3
+ export declare class SmartFacetButton extends LitElement {
4
+ facetInfo?: SmartFacet;
5
+ labelPrefix?: string;
6
+ selected: boolean;
7
+ render(): import("lit-html").TemplateResult<1> | typeof nothing;
8
+ private get href();
9
+ private facetClicked;
10
+ static get styles(): CSSResultGroup;
11
+ }