@internetarchive/collection-browser 2.5.2 → 2.6.1

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