@internetarchive/collection-browser 1.14.17-beta.5 → 1.14.18-alpha.0

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 (352) 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 +12 -11
  6. package/dist/index.js +12 -11
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/app-root.d.ts +83 -83
  9. package/dist/src/app-root.js +438 -489
  10. package/dist/src/app-root.js.map +1 -1
  11. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  13. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  15. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  16. package/dist/src/assets/img/icons/chevron.js +2 -2
  17. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  18. package/dist/src/assets/img/icons/contract.js +2 -2
  19. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  20. package/dist/src/assets/img/icons/empty-query.js +2 -2
  21. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  22. package/dist/src/assets/img/icons/expand.js +2 -2
  23. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  25. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  26. package/dist/src/assets/img/icons/eye.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  29. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  30. package/dist/src/assets/img/icons/login-required.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  59. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  60. package/dist/src/assets/img/icons/null-result.js +2 -2
  61. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  62. package/dist/src/assets/img/icons/restricted.js +2 -2
  63. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  64. package/dist/src/assets/img/icons/reviews.js +2 -2
  65. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  66. package/dist/src/assets/img/icons/upload.js +2 -2
  67. package/dist/src/assets/img/icons/views.d.ts +1 -1
  68. package/dist/src/assets/img/icons/views.js +2 -2
  69. package/dist/src/circular-activity-indicator.d.ts +5 -5
  70. package/dist/src/circular-activity-indicator.js +17 -17
  71. package/dist/src/collection-browser.d.ts +384 -406
  72. package/dist/src/collection-browser.js +1342 -1363
  73. package/dist/src/collection-browser.js.map +1 -1
  74. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  75. package/dist/src/collection-facets/facet-row.js +114 -114
  76. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  77. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  78. package/dist/src/collection-facets/facets-template.d.ts +17 -17
  79. package/dist/src/collection-facets/facets-template.js +114 -114
  80. package/dist/src/collection-facets/more-facets-content.d.ts +70 -70
  81. package/dist/src/collection-facets/more-facets-content.js +354 -369
  82. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  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/toggle-switch.d.ts +41 -41
  86. package/dist/src/collection-facets/toggle-switch.js +94 -94
  87. package/dist/src/collection-facets.d.ts +103 -103
  88. package/dist/src/collection-facets.js +513 -510
  89. package/dist/src/collection-facets.js.map +1 -1
  90. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +217 -0
  91. package/dist/src/data-source/collection-browser-data-source-interface.js +2 -0
  92. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -0
  93. package/dist/src/data-source/collection-browser-data-source.d.ts +352 -434
  94. package/dist/src/data-source/collection-browser-data-source.js +911 -800
  95. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  96. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -0
  97. package/dist/src/data-source/collection-browser-query-state.js +2 -0
  98. package/dist/src/data-source/collection-browser-query-state.js.map +1 -0
  99. package/dist/src/data-source/models.d.ts +28 -62
  100. package/dist/src/data-source/models.js +8 -1
  101. package/dist/src/data-source/models.js.map +1 -1
  102. package/dist/src/empty-placeholder.d.ts +23 -23
  103. package/dist/src/empty-placeholder.js +74 -74
  104. package/dist/src/expanded-date-picker.d.ts +43 -43
  105. package/dist/src/expanded-date-picker.js +109 -109
  106. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  107. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  108. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  109. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  110. package/dist/src/manage/manage-bar.d.ts +26 -26
  111. package/dist/src/manage/manage-bar.js +53 -53
  112. package/dist/src/manage/manage-bar.js.map +1 -1
  113. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  114. package/dist/src/mediatype/mediatype-config.js +91 -91
  115. package/dist/src/models.d.ts +197 -180
  116. package/dist/src/models.js +380 -269
  117. package/dist/src/models.js.map +1 -1
  118. package/dist/src/restoration-state-handler.d.ts +70 -70
  119. package/dist/src/restoration-state-handler.js +355 -355
  120. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  121. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  122. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  123. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  124. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  125. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  126. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  127. package/dist/src/sort-filter-bar/img/list.js +2 -2
  128. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  129. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  130. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  131. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  132. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  133. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  134. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  135. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  136. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  137. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  138. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +210 -210
  139. package/dist/src/sort-filter-bar/sort-filter-bar.js +653 -652
  140. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  141. package/dist/src/styles/item-image-styles.d.ts +8 -8
  142. package/dist/src/styles/item-image-styles.js +9 -9
  143. package/dist/src/styles/sr-only.d.ts +1 -1
  144. package/dist/src/styles/sr-only.js +2 -2
  145. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  146. package/dist/src/tiles/base-tile-component.js +63 -63
  147. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  148. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  149. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  150. package/dist/src/tiles/grid/account-tile.js +72 -72
  151. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  152. package/dist/src/tiles/grid/collection-tile.js +80 -80
  153. package/dist/src/tiles/grid/item-tile.d.ts +28 -27
  154. package/dist/src/tiles/grid/item-tile.js +162 -135
  155. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  156. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  157. package/dist/src/tiles/grid/search-tile.js +51 -51
  158. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  159. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  160. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  161. package/dist/src/tiles/grid/tile-stats.js +58 -53
  162. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  163. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  164. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  165. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  166. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  167. package/dist/src/tiles/image-block.d.ts +17 -17
  168. package/dist/src/tiles/image-block.js +73 -73
  169. package/dist/src/tiles/item-image.d.ts +39 -36
  170. package/dist/src/tiles/item-image.js +155 -127
  171. package/dist/src/tiles/item-image.js.map +1 -1
  172. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  173. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  174. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  175. package/dist/src/tiles/list/tile-list-compact.js +115 -115
  176. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  177. package/dist/src/tiles/list/tile-list.d.ts +47 -46
  178. package/dist/src/tiles/list/tile-list.js +327 -296
  179. package/dist/src/tiles/list/tile-list.js.map +1 -1
  180. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  181. package/dist/src/tiles/mediatype-icon.js +47 -47
  182. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  183. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  184. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  185. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  186. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  187. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  188. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  189. package/dist/src/tiles/text-snippet-block.js +73 -73
  190. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  191. package/dist/src/tiles/tile-dispatcher.js +232 -231
  192. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  193. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -43
  194. package/dist/src/tiles/tile-display-value-provider.js +94 -80
  195. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  196. package/dist/src/utils/analytics-events.d.ts +25 -25
  197. package/dist/src/utils/analytics-events.js +27 -27
  198. package/dist/src/utils/array-equals.d.ts +4 -4
  199. package/dist/src/utils/array-equals.js +10 -10
  200. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -0
  201. package/dist/src/utils/collapse-repeated-quotes.js +14 -0
  202. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -0
  203. package/dist/src/utils/format-count.d.ts +7 -7
  204. package/dist/src/utils/format-count.js +76 -76
  205. package/dist/src/utils/format-date.d.ts +2 -2
  206. package/dist/src/utils/format-date.js +25 -25
  207. package/dist/src/utils/format-unit-size.d.ts +2 -2
  208. package/dist/src/utils/format-unit-size.js +33 -33
  209. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  210. package/dist/src/utils/local-date-from-utc.js +15 -15
  211. package/dist/src/utils/log.d.ts +7 -0
  212. package/dist/src/utils/log.js +16 -0
  213. package/dist/src/utils/log.js.map +1 -0
  214. package/dist/src/utils/resolve-mediatype.d.ts +8 -0
  215. package/dist/src/utils/resolve-mediatype.js +24 -0
  216. package/dist/src/utils/resolve-mediatype.js.map +1 -0
  217. package/dist/src/utils/sha1.d.ts +2 -2
  218. package/dist/src/utils/sha1.js +8 -8
  219. package/dist/test/collection-browser.test.d.ts +1 -1
  220. package/dist/test/collection-browser.test.js +1211 -1149
  221. package/dist/test/collection-browser.test.js.map +1 -1
  222. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  223. package/dist/test/collection-facets/facet-row.test.js +203 -203
  224. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  225. package/dist/test/collection-facets/facets-template.test.js +105 -105
  226. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  227. package/dist/test/collection-facets/more-facets-content.test.js +133 -133
  228. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  229. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  230. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  231. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  232. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  233. package/dist/test/collection-facets.test.d.ts +2 -2
  234. package/dist/test/collection-facets.test.js +653 -648
  235. package/dist/test/collection-facets.test.js.map +1 -1
  236. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -0
  237. package/dist/test/data-source/collection-browser-data-source.test.js +80 -0
  238. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -0
  239. package/dist/test/empty-placeholder.test.d.ts +1 -1
  240. package/dist/test/empty-placeholder.test.js +63 -63
  241. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  242. package/dist/test/expanded-date-picker.test.js +95 -95
  243. package/dist/test/icon-overlay.test.d.ts +1 -1
  244. package/dist/test/icon-overlay.test.js +24 -24
  245. package/dist/test/image-block.test.d.ts +1 -1
  246. package/dist/test/image-block.test.js +48 -48
  247. package/dist/test/item-image.test.d.ts +1 -1
  248. package/dist/test/item-image.test.js +85 -86
  249. package/dist/test/item-image.test.js.map +1 -1
  250. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  251. package/dist/test/manage/manage-bar.test.js +72 -72
  252. package/dist/test/mediatype-config.test.d.ts +1 -1
  253. package/dist/test/mediatype-config.test.js +16 -16
  254. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  255. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  256. package/dist/test/mocks/mock-search-responses.d.ts +24 -21
  257. package/dist/test/mocks/mock-search-responses.js +840 -709
  258. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  259. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  260. package/dist/test/mocks/mock-search-service.js +53 -50
  261. package/dist/test/mocks/mock-search-service.js.map +1 -1
  262. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  263. package/dist/test/restoration-state-handler.test.js +270 -270
  264. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  265. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  266. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  267. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  268. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  269. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +418 -418
  270. package/dist/test/text-overlay.test.d.ts +1 -1
  271. package/dist/test/text-overlay.test.js +48 -48
  272. package/dist/test/text-snippet-block.test.d.ts +1 -1
  273. package/dist/test/text-snippet-block.test.js +57 -57
  274. package/dist/test/tile-stats.test.d.ts +1 -1
  275. package/dist/test/tile-stats.test.js +95 -33
  276. package/dist/test/tile-stats.test.js.map +1 -1
  277. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  278. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  279. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  280. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  281. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  282. package/dist/test/tiles/grid/item-tile.test.js +298 -254
  283. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  284. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  285. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  286. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  287. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -258
  288. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  289. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  290. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  291. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  292. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  293. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  294. package/dist/test/tiles/list/tile-list.test.js +283 -239
  295. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  296. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  297. package/dist/test/tiles/tile-dispatcher.test.js +106 -94
  298. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  299. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  300. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  301. package/dist/test/utils/array-equals.test.d.ts +1 -1
  302. package/dist/test/utils/array-equals.test.js +26 -26
  303. package/dist/test/utils/format-count.test.d.ts +1 -1
  304. package/dist/test/utils/format-count.test.js +23 -23
  305. package/dist/test/utils/format-date.test.d.ts +1 -1
  306. package/dist/test/utils/format-date.test.js +17 -17
  307. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  308. package/dist/test/utils/format-unit-size.test.js +17 -17
  309. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  310. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  311. package/index.ts +3 -5
  312. package/local.archive.org.cert +86 -86
  313. package/local.archive.org.key +27 -27
  314. package/package.json +3 -4
  315. package/renovate.json +6 -6
  316. package/src/app-root.ts +30 -85
  317. package/src/collection-browser.ts +112 -139
  318. package/src/collection-facets/more-facets-content.ts +0 -19
  319. package/src/collection-facets.ts +6 -4
  320. package/src/data-source/collection-browser-data-source-interface.ts +272 -0
  321. package/src/data-source/collection-browser-data-source.ts +314 -379
  322. package/src/data-source/collection-browser-query-state.ts +54 -0
  323. package/src/data-source/models.ts +8 -45
  324. package/src/manage/manage-bar.ts +1 -1
  325. package/src/models.ts +164 -3
  326. package/src/sort-filter-bar/sort-filter-bar.ts +2 -1
  327. package/src/tiles/grid/item-tile.ts +36 -1
  328. package/src/tiles/grid/tile-stats.ts +12 -7
  329. package/src/tiles/item-image.ts +28 -0
  330. package/src/tiles/list/tile-list-compact.ts +1 -1
  331. package/src/tiles/list/tile-list.ts +43 -5
  332. package/src/tiles/tile-dispatcher.ts +2 -1
  333. package/src/tiles/tile-display-value-provider.ts +20 -2
  334. package/src/utils/collapse-repeated-quotes.ts +13 -0
  335. package/src/utils/log.ts +16 -0
  336. package/src/utils/resolve-mediatype.ts +26 -0
  337. package/test/collection-browser.test.ts +161 -50
  338. package/test/collection-facets/more-facets-content.test.ts +4 -2
  339. package/test/collection-facets.test.ts +5 -0
  340. package/test/data-source/collection-browser-data-source.test.ts +103 -0
  341. package/test/item-image.test.ts +34 -36
  342. package/test/mocks/mock-search-responses.ts +144 -0
  343. package/test/mocks/mock-search-service.ts +6 -0
  344. package/test/tile-stats.test.ts +104 -0
  345. package/test/tiles/grid/item-tile.test.ts +55 -0
  346. package/test/tiles/hover/hover-pane-controller.test.ts +19 -17
  347. package/test/tiles/list/tile-list.test.ts +55 -0
  348. package/test/tiles/tile-dispatcher.test.ts +13 -0
  349. package/tsconfig.json +21 -21
  350. package/web-dev-server.config.mjs +30 -30
  351. package/web-test-runner.config.mjs +41 -41
  352. package/types/sentry.d.ts +0 -1
@@ -1,50 +1,50 @@
1
- import { __decorate } from "tslib";
2
- import { css, html, nothing } from 'lit';
3
- import { ifDefined } from 'lit/directives/if-defined.js';
4
- import { join } from 'lit/directives/join.js';
5
- import { map } from 'lit/directives/map.js';
6
- import { unsafeHTML } from 'lit/directives/unsafe-html.js';
7
- import { customElement, property, state } from 'lit/decorators.js';
8
- import { msg } from '@lit/localize';
9
- import DOMPurify from 'dompurify';
10
- import { suppressedCollections } from '../../models';
11
- import { BaseTileComponent } from '../base-tile-component';
12
- import { formatCount } from '../../utils/format-count';
13
- import { formatDate } from '../../utils/format-date';
14
- import { isFirstMillisecondOfUTCYear } from '../../utils/local-date-from-utc';
15
- import '../image-block';
16
- import '../mediatype-icon';
17
- let TileList = class TileList extends BaseTileComponent {
18
- constructor() {
19
- /*
20
- * Reactive properties inherited from BaseTileComponent:
21
- * - model?: TileModel;
22
- * - currentWidth?: number;
23
- * - currentHeight?: number;
24
- * - baseNavigationUrl?: string;
25
- * - baseImageUrl?: string;
26
- * - collectionPagePath?: string;
27
- * - sortParam: SortParam | null = null;
28
- * - creatorFilter?: string;
29
- * - mobileBreakpoint?: number;
30
- * - loggedIn = false;
31
- */
32
- super(...arguments);
33
- this.collectionLinks = [];
34
- }
35
- render() {
1
+ import { __decorate } from "tslib";
2
+ import { css, html, nothing } from 'lit';
3
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
+ import { join } from 'lit/directives/join.js';
5
+ import { map } from 'lit/directives/map.js';
6
+ import { unsafeHTML } from 'lit/directives/unsafe-html.js';
7
+ import { customElement, property, state } from 'lit/decorators.js';
8
+ import { msg } from '@lit/localize';
9
+ import DOMPurify from 'dompurify';
10
+ import { suppressedCollections } from '../../models';
11
+ import { BaseTileComponent } from '../base-tile-component';
12
+ import { formatCount } from '../../utils/format-count';
13
+ import { formatDate } from '../../utils/format-date';
14
+ import { isFirstMillisecondOfUTCYear } from '../../utils/local-date-from-utc';
15
+ import '../image-block';
16
+ import '../mediatype-icon';
17
+ let TileList = class TileList extends BaseTileComponent {
18
+ constructor() {
19
+ /*
20
+ * Reactive properties inherited from BaseTileComponent:
21
+ * - model?: TileModel;
22
+ * - currentWidth?: number;
23
+ * - currentHeight?: number;
24
+ * - baseNavigationUrl?: string;
25
+ * - baseImageUrl?: string;
26
+ * - collectionPagePath?: string;
27
+ * - sortParam: SortParam | null = null;
28
+ * - creatorFilter?: string;
29
+ * - mobileBreakpoint?: number;
30
+ * - loggedIn = false;
31
+ */
32
+ super(...arguments);
33
+ this.collectionLinks = [];
34
+ }
35
+ render() {
36
36
  return html `
37
37
  <div id="list-line" class="${this.classSize}">
38
- ${this.classSize === 'mobile'
39
- ? this.mobileTemplate
38
+ ${this.classSize === 'mobile'
39
+ ? this.mobileTemplate
40
40
  : this.desktopTemplate}
41
41
  </div>
42
- `;
43
- }
44
- /**
45
- * Templates
46
- */
47
- get mobileTemplate() {
42
+ `;
43
+ }
44
+ /**
45
+ * Templates
46
+ */
47
+ get mobileTemplate() {
48
48
  return html `
49
49
  <div id="list-line-top">
50
50
  <div id="list-line-left">${this.imageBlockTemplate}</div>
@@ -56,9 +56,9 @@ let TileList = class TileList extends BaseTileComponent {
56
56
  </div>
57
57
  </div>
58
58
  <div id="list-line-bottom">${this.detailsTemplate}</div>
59
- `;
60
- }
61
- get desktopTemplate() {
59
+ `;
60
+ }
61
+ get desktopTemplate() {
62
62
  return html `
63
63
  <div id="list-line-left">${this.imageBlockTemplate}</div>
64
64
  <div id="list-line-right">
@@ -68,13 +68,13 @@ let TileList = class TileList extends BaseTileComponent {
68
68
  </div>
69
69
  ${this.detailsTemplate}
70
70
  </div>
71
- `;
72
- }
73
- get imageBlockTemplate() {
74
- if (!this.model)
75
- return nothing;
76
- const isCollection = this.model.mediatype === 'collection';
77
- const href = this.displayValueProvider.itemPageUrl(this.model.identifier, isCollection);
71
+ `;
72
+ }
73
+ get imageBlockTemplate() {
74
+ if (!this.model)
75
+ return nothing;
76
+ const isCollection = this.model.mediatype === 'collection';
77
+ const href = this.displayValueProvider.itemPageUrl(this.model.identifier, isCollection);
78
78
  return html `<a href=${href}>
79
79
  <image-block
80
80
  .model=${this.model}
@@ -85,24 +85,25 @@ let TileList = class TileList extends BaseTileComponent {
85
85
  .loggedIn=${this.loggedIn}
86
86
  >
87
87
  </image-block>
88
- </a> `;
89
- }
90
- get detailsTemplate() {
88
+ </a> `;
89
+ }
90
+ get detailsTemplate() {
91
91
  return html `
92
92
  ${this.itemLineTemplate} ${this.creatorTemplate}
93
93
  <div id="dates-line">
94
94
  ${this.datePublishedTemplate} ${this.dateSortByTemplate}
95
+ ${this.webArchivesCaptureDatesTemplate}
95
96
  </div>
96
97
  <div id="views-line">
97
98
  ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
98
99
  </div>
99
100
  ${this.topicsTemplate} ${this.collectionsTemplate}
100
101
  ${this.descriptionTemplate} ${this.textSnippetsTemplate}
101
- `;
102
- }
103
- // Data templates
104
- get iconRightTemplate() {
105
- var _a, _b;
102
+ `;
103
+ }
104
+ // Data templates
105
+ get iconRightTemplate() {
106
+ var _a, _b;
106
107
  return html `
107
108
  <a id="icon-right" href=${this.mediatypeURL}>
108
109
  <mediatype-icon
@@ -111,268 +112,284 @@ let TileList = class TileList extends BaseTileComponent {
111
112
  >
112
113
  </mediatype-icon>
113
114
  </a>
114
- `;
115
- }
116
- get titleTemplate() {
117
- var _a, _b, _c;
118
- if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.title)) {
119
- return nothing;
120
- }
121
- // If the model has a server-specified href, use it
122
- // Otherwise construct a details link using the identifier
123
- return ((_b = this.model) === null || _b === void 0 ? void 0 : _b.href)
115
+ `;
116
+ }
117
+ get titleTemplate() {
118
+ var _a, _b, _c;
119
+ if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.title)) {
120
+ return nothing;
121
+ }
122
+ // If the model has a server-specified href, use it
123
+ // Otherwise construct a details link using the identifier
124
+ return ((_b = this.model) === null || _b === void 0 ? void 0 : _b.href)
124
125
  ? html `<a href="${this.baseNavigationUrl}${this.model.href}"
125
126
  >${(_c = this.model.title) !== null && _c !== void 0 ? _c : this.model.identifier}</a
126
- >`
127
- : this.detailsLink(this.model.identifier, this.model.title, this.model.mediatype === 'collection');
128
- }
129
- get itemLineTemplate() {
130
- const source = this.sourceTemplate;
131
- const volume = this.volumeTemplate;
132
- const issue = this.issueTemplate;
133
- if (!source && !volume && !issue) {
134
- return nothing;
135
- }
136
- return html ` <div id="item-line">${source} ${volume} ${issue}</div> `;
137
- }
138
- get sourceTemplate() {
139
- var _a;
140
- if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.source)) {
141
- return nothing;
142
- }
127
+ >`
128
+ : this.detailsLink(this.model.identifier, this.model.title, this.model.mediatype === 'collection');
129
+ }
130
+ get itemLineTemplate() {
131
+ const source = this.sourceTemplate;
132
+ const volume = this.volumeTemplate;
133
+ const issue = this.issueTemplate;
134
+ if (!source && !volume && !issue) {
135
+ return nothing;
136
+ }
137
+ return html ` <div id="item-line">${source} ${volume} ${issue}</div> `;
138
+ }
139
+ get sourceTemplate() {
140
+ var _a;
141
+ if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.source)) {
142
+ return nothing;
143
+ }
143
144
  return html `
144
145
  <div id="source" class="metadata">
145
146
  ${this.labelTemplate(msg('Source'))}
146
147
  ${this.searchLink('source', this.model.source)}
147
148
  </div>
148
- `;
149
- }
150
- get volumeTemplate() {
151
- var _a;
152
- return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.volume, msg('Volume'));
153
- }
154
- get issueTemplate() {
155
- var _a;
156
- return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.issue, msg('Issue'));
157
- }
158
- get creatorTemplate() {
159
- var _a, _b, _c;
160
- // "Archivist since" if account
161
- if (((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) === 'account') {
149
+ `;
150
+ }
151
+ get volumeTemplate() {
152
+ var _a;
153
+ return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.volume, msg('Volume'));
154
+ }
155
+ get issueTemplate() {
156
+ var _a;
157
+ return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.issue, msg('Issue'));
158
+ }
159
+ get creatorTemplate() {
160
+ var _a, _b, _c;
161
+ // "Archivist since" if account
162
+ if (((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) === 'account') {
162
163
  return html `
163
164
  <div id="creator" class="metadata">
164
165
  <span class="label"
165
166
  >${(_b = this.displayValueProvider.accountLabel) !== null && _b !== void 0 ? _b : nothing}</span
166
167
  >
167
168
  </div>
168
- `;
169
- }
170
- // "Creator" if not account tile
171
- if (!((_c = this.model) === null || _c === void 0 ? void 0 : _c.creators) || this.model.creators.length === 0) {
172
- return nothing;
173
- }
169
+ `;
170
+ }
171
+ // "Creator" if not account tile
172
+ if (!((_c = this.model) === null || _c === void 0 ? void 0 : _c.creators) || this.model.creators.length === 0) {
173
+ return nothing;
174
+ }
174
175
  return html `
175
176
  <div id="creator" class="metadata">
176
177
  ${this.labelTemplate(msg('By'))}
177
178
  ${join(map(this.model.creators, id => this.searchLink('creator', id)), ', ')}
178
179
  </div>
179
- `;
180
- }
181
- get datePublishedTemplate() {
182
- var _a;
183
- // If we're showing a date published of Jan 1 at midnight, only show the year.
184
- // This is because items with only a year for their publication date are normalized to
185
- // Jan 1 at midnight timestamps in the search engine documents.
186
- const date = (_a = this.model) === null || _a === void 0 ? void 0 : _a.datePublished;
187
- let format = 'long';
188
- if (isFirstMillisecondOfUTCYear(date)) {
189
- format = 'year-only';
190
- }
191
- return this.metadataTemplate(formatDate(date, format), msg('Published'));
192
- }
193
- // Show date label/value when sorted by date type
194
- // Except datePublished which is always shown
195
- get dateSortByTemplate() {
196
- if (this.sortParam &&
197
- (this.sortParam.field === 'addeddate' ||
198
- this.sortParam.field === 'reviewdate' ||
199
- this.sortParam.field === 'publicdate')) {
200
- return this.metadataTemplate(formatDate(this.date, 'long'), this.displayValueProvider.dateLabel);
201
- }
202
- return nothing;
203
- }
204
- get viewsTemplate() {
205
- var _a, _b, _c, _d;
206
- const viewCount = ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) === 'week'
207
- ? (_b = this.model) === null || _b === void 0 ? void 0 : _b.weeklyViewCount // weekly views
208
- : (_c = this.model) === null || _c === void 0 ? void 0 : _c.viewCount; // all-time views
209
- // when its a search-tile, we don't have any stats to show
210
- if (((_d = this.model) === null || _d === void 0 ? void 0 : _d.mediatype) === 'search') {
211
- return this.metadataTemplate('(Favorited search query)', '');
212
- }
213
- return this.metadataTemplate(`${formatCount(viewCount !== null && viewCount !== void 0 ? viewCount : 0, this.formatSize)}`, msg('Views'));
214
- }
215
- get ratingTemplate() {
216
- var _a;
217
- return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.averageRating, msg('Avg Rating'));
218
- }
219
- get reviewsTemplate() {
220
- var _a;
221
- return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.commentCount, msg('Reviews'));
222
- }
223
- get topicsTemplate() {
224
- var _a;
225
- if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.subjects) || this.model.subjects.length === 0) {
226
- return nothing;
227
- }
180
+ `;
181
+ }
182
+ get datePublishedTemplate() {
183
+ var _a;
184
+ // If we're showing a date published of Jan 1 at midnight, only show the year.
185
+ // This is because items with only a year for their publication date are normalized to
186
+ // Jan 1 at midnight timestamps in the search engine documents.
187
+ const date = (_a = this.model) === null || _a === void 0 ? void 0 : _a.datePublished;
188
+ let format = 'long';
189
+ if (isFirstMillisecondOfUTCYear(date)) {
190
+ format = 'year-only';
191
+ }
192
+ return this.metadataTemplate(formatDate(date, format), msg('Published'));
193
+ }
194
+ // Show date label/value when sorted by date type
195
+ // Except datePublished which is always shown
196
+ get dateSortByTemplate() {
197
+ if (this.sortParam &&
198
+ (this.sortParam.field === 'addeddate' ||
199
+ this.sortParam.field === 'reviewdate' ||
200
+ this.sortParam.field === 'publicdate')) {
201
+ return this.metadataTemplate(formatDate(this.date, 'long'), this.displayValueProvider.dateLabel);
202
+ }
203
+ return nothing;
204
+ }
205
+ get viewsTemplate() {
206
+ var _a, _b, _c, _d;
207
+ const viewCount = ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) === 'week'
208
+ ? (_b = this.model) === null || _b === void 0 ? void 0 : _b.weeklyViewCount // weekly views
209
+ : (_c = this.model) === null || _c === void 0 ? void 0 : _c.viewCount; // all-time views
210
+ if (viewCount == null)
211
+ return nothing;
212
+ // when its a search-tile, we don't have any stats to show
213
+ if (((_d = this.model) === null || _d === void 0 ? void 0 : _d.mediatype) === 'search') {
214
+ return this.metadataTemplate('(Favorited search query)', '');
215
+ }
216
+ return this.metadataTemplate(`${formatCount(viewCount, this.formatSize)}`, msg('Views'));
217
+ }
218
+ get ratingTemplate() {
219
+ var _a;
220
+ return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.averageRating, msg('Avg Rating'));
221
+ }
222
+ get reviewsTemplate() {
223
+ var _a;
224
+ return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.commentCount, msg('Reviews'));
225
+ }
226
+ get topicsTemplate() {
227
+ var _a;
228
+ if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.subjects) || this.model.subjects.length === 0) {
229
+ return nothing;
230
+ }
228
231
  return html `
229
232
  <div id="topics" class="metadata">
230
233
  ${this.labelTemplate(msg('Topics'))}
231
234
  ${join(map(this.model.subjects, id => this.searchLink('subject', id)), ', ')}
232
235
  </div>
233
- `;
234
- }
235
- get collectionsTemplate() {
236
- if (!this.collectionLinks || this.collectionLinks.length === 0) {
237
- return nothing;
238
- }
236
+ `;
237
+ }
238
+ get collectionsTemplate() {
239
+ if (!this.collectionLinks || this.collectionLinks.length === 0) {
240
+ return nothing;
241
+ }
239
242
  return html `
240
243
  <div id="collections" class="metadata">
241
244
  ${this.labelTemplate(msg('Collections'))}
242
245
  ${join(this.collectionLinks, ', ')}
243
246
  </div>
244
- `;
245
- }
246
- get descriptionTemplate() {
247
- var _a, _b, _c;
248
- return this.metadataTemplate(
249
- // Sanitize away any HTML tags and convert line breaks to spaces.
250
- unsafeHTML(DOMPurify.sanitize((_c = (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.description) === null || _b === void 0 ? void 0 : _b.replace(/\n/g, ' ')) !== null && _c !== void 0 ? _c : '')), '', 'description');
251
- }
252
- get textSnippetsTemplate() {
253
- var _a;
254
- if (!this.hasSnippets)
255
- return nothing;
247
+ `;
248
+ }
249
+ get descriptionTemplate() {
250
+ var _a, _b, _c;
251
+ return this.metadataTemplate(
252
+ // Sanitize away any HTML tags and convert line breaks to spaces.
253
+ unsafeHTML(DOMPurify.sanitize((_c = (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.description) === null || _b === void 0 ? void 0 : _b.replace(/\n/g, ' ')) !== null && _c !== void 0 ? _c : '')), '', 'description');
254
+ }
255
+ get textSnippetsTemplate() {
256
+ var _a;
257
+ if (!this.hasSnippets)
258
+ return nothing;
256
259
  return html `<text-snippet-block
257
260
  viewsize="list"
258
261
  .snippets=${(_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets}
259
- ></text-snippet-block>`;
260
- }
261
- get hasSnippets() {
262
- var _a, _b;
263
- return !!((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets) === null || _b === void 0 ? void 0 : _b.length);
264
- }
265
- // Utility functions
266
- // eslint-disable-next-line default-param-last
267
- metadataTemplate(text, label = '', id) {
268
- if (!text)
269
- return nothing;
262
+ ></text-snippet-block>`;
263
+ }
264
+ get hasSnippets() {
265
+ var _a, _b;
266
+ return !!((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets) === null || _b === void 0 ? void 0 : _b.length);
267
+ }
268
+ get webArchivesCaptureDatesTemplate() {
269
+ var _a;
270
+ if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.captureDates) || !this.model.title)
271
+ return nothing;
272
+ return html `
273
+ <ul class="capture-dates">
274
+ ${map(this.model.captureDates, date => html `<li>
275
+ ${this.displayValueProvider.webArchivesCaptureLink(this.model.title, date)}
276
+ </li>`)}
277
+ </ul>
278
+ `;
279
+ }
280
+ // Utility functions
281
+ // eslint-disable-next-line default-param-last
282
+ metadataTemplate(text, label = '', id) {
283
+ if (!text)
284
+ return nothing;
270
285
  return html `
271
286
  <div id=${ifDefined(id)} class="metadata">
272
287
  ${this.labelTemplate(label)} ${text}
273
288
  </div>
274
- `;
275
- }
276
- labelTemplate(label) {
277
- return html ` ${label
278
- ? html `<span class="label">${label}: </span>`
279
- : nothing}`;
280
- }
281
- searchLink(field, searchTerm) {
282
- if (!field || !searchTerm) {
283
- return nothing;
284
- }
285
- const query = encodeURIComponent(`${field}:"${searchTerm}"`);
286
- // No whitespace after closing tag
287
- // Note: single ' for href='' to wrap " in query var gets changed back by yarn format
288
- /* eslint-disable lit/no-invalid-html */
289
+ `;
290
+ }
291
+ labelTemplate(label) {
292
+ return html ` ${label
293
+ ? html `<span class="label">${label}: </span>`
294
+ : nothing}`;
295
+ }
296
+ searchLink(field, searchTerm) {
297
+ if (!field || !searchTerm) {
298
+ return nothing;
299
+ }
300
+ const query = encodeURIComponent(`${field}:"${searchTerm}"`);
301
+ // No whitespace after closing tag
302
+ // Note: single ' for href='' to wrap " in query var gets changed back by yarn format
303
+ /* eslint-disable lit/no-invalid-html */
289
304
  return html `<a
290
305
  href="${this.baseNavigationUrl}/search?query=${query}"
291
306
  rel="nofollow"
292
307
  >
293
308
  ${DOMPurify.sanitize(searchTerm)}</a
294
- >`;
295
- /* eslint-enable lit/no-invalid-html */
296
- }
297
- detailsLink(identifier, text, isCollection = false) {
298
- const linkText = text !== null && text !== void 0 ? text : identifier;
299
- const linkHref = this.displayValueProvider.itemPageUrl(identifier, isCollection);
300
- return html `<a href=${linkHref}> ${DOMPurify.sanitize(linkText)} </a>`;
301
- }
302
- /** The URL of this item's mediatype collection, if defined. */
303
- get mediatypeURL() {
304
- var _a;
305
- // NB: baseNavigationUrl can be an empty string
306
- if (this.baseNavigationUrl === undefined || !((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype))
307
- return nothing;
308
- // Need special handling for certain mediatypes that don't have a top-level collection page
309
- switch (this.model.mediatype) {
310
- case 'collection':
311
- return `${this.baseNavigationUrl}/search?query=mediatype:collection&sort=-downloads`;
312
- case 'account':
313
- return nothing;
314
- default:
315
- return this.displayValueProvider.itemPageUrl(this.model.mediatype, true);
316
- }
317
- }
318
- updated(changed) {
319
- if (changed.has('model') || changed.has('collectionTitles')) {
320
- this.buildCollectionLinks();
321
- }
322
- }
323
- async buildCollectionLinks() {
324
- var _a, _b, _c;
325
- if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.collections) || this.model.collections.length === 0) {
326
- return;
327
- }
328
- // Note: quirk of Lit: need to replace collectionLinks array,
329
- // otherwise it will not re-render. Can't simply alter the array.
330
- this.collectionLinks = [];
331
- const newCollectionLinks = [];
332
- for (const collection of this.model.collections) {
333
- // Don't include favorites or collections that are meant to be suppressed
334
- if (!suppressedCollections[collection] &&
335
- !collection.startsWith('fav-')) {
336
- newCollectionLinks.push(this.detailsLink(collection, (_c = (_b = this.collectionTitles) === null || _b === void 0 ? void 0 : _b.get(collection)) !== null && _c !== void 0 ? _c : collection, true));
337
- }
338
- }
339
- this.collectionLinks = newCollectionLinks;
340
- }
341
- /*
342
- * TODO: fix field names to match model in src/collection-browser.ts
343
- * private get dateSortSelector()
344
- * @see src/models.ts
345
- */
346
- get date() {
347
- var _a, _b, _c, _d, _e;
348
- switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
349
- case 'date':
350
- return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
351
- case 'reviewdate':
352
- return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
353
- case 'addeddate':
354
- return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
355
- default:
356
- return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
357
- }
358
- }
359
- get classSize() {
360
- if (this.mobileBreakpoint &&
361
- this.currentWidth &&
362
- this.currentWidth < this.mobileBreakpoint) {
363
- return 'mobile';
364
- }
365
- return 'desktop';
366
- }
367
- get formatSize() {
368
- if (this.mobileBreakpoint &&
369
- this.currentWidth &&
370
- this.currentWidth < this.mobileBreakpoint) {
371
- return 'short';
372
- }
373
- return 'long';
374
- }
375
- static get styles() {
309
+ >`;
310
+ /* eslint-enable lit/no-invalid-html */
311
+ }
312
+ detailsLink(identifier, text, isCollection = false) {
313
+ if (!identifier)
314
+ return nothing;
315
+ const linkText = text !== null && text !== void 0 ? text : identifier;
316
+ const linkHref = this.displayValueProvider.itemPageUrl(identifier, isCollection);
317
+ return html `<a href=${linkHref}> ${DOMPurify.sanitize(linkText)} </a>`;
318
+ }
319
+ /** The URL of this item's mediatype collection, if defined. */
320
+ get mediatypeURL() {
321
+ var _a;
322
+ // NB: baseNavigationUrl can be an empty string
323
+ if (this.baseNavigationUrl === undefined || !((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype))
324
+ return nothing;
325
+ // Need special handling for certain mediatypes that don't have a top-level collection page
326
+ switch (this.model.mediatype) {
327
+ case 'collection':
328
+ return `${this.baseNavigationUrl}/search?query=mediatype:collection&sort=-downloads`;
329
+ case 'account':
330
+ return nothing;
331
+ default:
332
+ return this.displayValueProvider.itemPageUrl(this.model.mediatype, true);
333
+ }
334
+ }
335
+ updated(changed) {
336
+ if (changed.has('model') || changed.has('collectionTitles')) {
337
+ this.buildCollectionLinks();
338
+ }
339
+ }
340
+ async buildCollectionLinks() {
341
+ var _a, _b, _c;
342
+ if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.collections) || this.model.collections.length === 0) {
343
+ return;
344
+ }
345
+ // Note: quirk of Lit: need to replace collectionLinks array,
346
+ // otherwise it will not re-render. Can't simply alter the array.
347
+ this.collectionLinks = [];
348
+ const newCollectionLinks = [];
349
+ for (const collection of this.model.collections) {
350
+ // Don't include favorites or collections that are meant to be suppressed
351
+ if (!suppressedCollections[collection] &&
352
+ !collection.startsWith('fav-')) {
353
+ newCollectionLinks.push(this.detailsLink(collection, (_c = (_b = this.collectionTitles) === null || _b === void 0 ? void 0 : _b.get(collection)) !== null && _c !== void 0 ? _c : collection, true));
354
+ }
355
+ }
356
+ this.collectionLinks = newCollectionLinks;
357
+ }
358
+ /*
359
+ * TODO: fix field names to match model in src/collection-browser.ts
360
+ * private get dateSortSelector()
361
+ * @see src/models.ts
362
+ */
363
+ get date() {
364
+ var _a, _b, _c, _d, _e;
365
+ switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
366
+ case 'date':
367
+ return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
368
+ case 'reviewdate':
369
+ return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
370
+ case 'addeddate':
371
+ return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
372
+ default:
373
+ return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
374
+ }
375
+ }
376
+ get classSize() {
377
+ if (this.mobileBreakpoint &&
378
+ this.currentWidth &&
379
+ this.currentWidth < this.mobileBreakpoint) {
380
+ return 'mobile';
381
+ }
382
+ return 'desktop';
383
+ }
384
+ get formatSize() {
385
+ if (this.mobileBreakpoint &&
386
+ this.currentWidth &&
387
+ this.currentWidth < this.mobileBreakpoint) {
388
+ return 'short';
389
+ }
390
+ return 'long';
391
+ }
392
+ static get styles() {
376
393
  return css `
377
394
  html {
378
395
  font-size: unset;
@@ -543,17 +560,31 @@ let TileList = class TileList extends BaseTileComponent {
543
560
  #views-line {
544
561
  flex-wrap: wrap;
545
562
  }
546
- `;
547
- }
548
- };
549
- __decorate([
550
- property({ type: Object })
551
- ], TileList.prototype, "collectionTitles", void 0);
552
- __decorate([
553
- state()
554
- ], TileList.prototype, "collectionLinks", void 0);
555
- TileList = __decorate([
556
- customElement('tile-list')
557
- ], TileList);
558
- export { TileList };
563
+
564
+ .capture-dates {
565
+ margin: 0;
566
+ padding: 0;
567
+ list-style-type: none;
568
+ }
569
+
570
+ .capture-dates a:link {
571
+ text-decoration: none;
572
+ color: var(--ia-theme-link-color, #4b64ff);
573
+ }
574
+ .capture-dates a:hover {
575
+ text-decoration: underline;
576
+ }
577
+ `;
578
+ }
579
+ };
580
+ __decorate([
581
+ property({ type: Object })
582
+ ], TileList.prototype, "collectionTitles", void 0);
583
+ __decorate([
584
+ state()
585
+ ], TileList.prototype, "collectionLinks", void 0);
586
+ TileList = __decorate([
587
+ customElement('tile-list')
588
+ ], TileList);
589
+ export { TileList };
559
590
  //# sourceMappingURL=tile-list.js.map