@internetarchive/collection-browser 3.3.2 → 3.3.3

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 (532) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +27 -27
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/index.d.ts +16 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/src/app-root.d.ts +105 -0
  13. package/dist/src/app-root.js +1076 -0
  14. package/dist/src/app-root.js.map +1 -0
  15. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
  16. package/dist/src/assets/img/icons/arrow-left.js +10 -0
  17. package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
  18. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
  19. package/dist/src/assets/img/icons/arrow-right.js +10 -0
  20. package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
  21. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  22. package/dist/src/assets/img/icons/chevron.js +4 -0
  23. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  24. package/dist/src/assets/img/icons/close-circle-dark.d.ts +2 -0
  25. package/dist/src/assets/img/icons/close-circle-dark.js +5 -0
  26. package/dist/src/assets/img/icons/close-circle-dark.js.map +1 -0
  27. package/dist/src/assets/img/icons/contract.d.ts +2 -0
  28. package/dist/src/assets/img/icons/contract.js +9 -0
  29. package/dist/src/assets/img/icons/contract.js.map +1 -0
  30. package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
  31. package/dist/src/assets/img/icons/empty-query.js +5 -0
  32. package/dist/src/assets/img/icons/empty-query.js.map +1 -0
  33. package/dist/src/assets/img/icons/expand.d.ts +2 -0
  34. package/dist/src/assets/img/icons/expand.js +9 -0
  35. package/dist/src/assets/img/icons/expand.js.map +1 -0
  36. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
  37. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  38. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  39. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  40. package/dist/src/assets/img/icons/eye.js +5 -0
  41. package/dist/src/assets/img/icons/eye.js.map +1 -0
  42. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
  43. package/dist/src/assets/img/icons/favorite-filled.js +10 -0
  44. package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
  45. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -0
  46. package/dist/src/assets/img/icons/favorite-unfilled.js +9 -0
  47. package/dist/src/assets/img/icons/favorite-unfilled.js.map +1 -0
  48. package/dist/src/assets/img/icons/filter.d.ts +2 -0
  49. package/dist/src/assets/img/icons/filter.js +10 -0
  50. package/dist/src/assets/img/icons/filter.js.map +1 -0
  51. package/dist/src/assets/img/icons/login-required.d.ts +1 -0
  52. package/dist/src/assets/img/icons/login-required.js +18 -0
  53. package/dist/src/assets/img/icons/login-required.js.map +1 -0
  54. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
  55. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  56. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  57. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  58. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  59. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  60. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  61. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  62. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  63. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  64. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  65. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  66. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  67. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  68. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  69. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  70. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  71. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  72. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  73. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  74. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  75. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  76. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  77. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  78. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -0
  79. package/dist/src/assets/img/icons/mediatype/search.js +14 -0
  80. package/dist/src/assets/img/icons/mediatype/search.js.map +1 -0
  81. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  82. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  83. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  84. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  85. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  86. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  87. package/dist/src/assets/img/icons/mediatype/tv-commercial.d.ts +1 -0
  88. package/dist/src/assets/img/icons/mediatype/tv-commercial.js +12 -0
  89. package/dist/src/assets/img/icons/mediatype/tv-commercial.js.map +1 -0
  90. package/dist/src/assets/img/icons/mediatype/tv-fact-check.d.ts +1 -0
  91. package/dist/src/assets/img/icons/mediatype/tv-fact-check.js +12 -0
  92. package/dist/src/assets/img/icons/mediatype/tv-fact-check.js.map +1 -0
  93. package/dist/src/assets/img/icons/mediatype/tv-quote.d.ts +1 -0
  94. package/dist/src/assets/img/icons/mediatype/tv-quote.js +12 -0
  95. package/dist/src/assets/img/icons/mediatype/tv-quote.js.map +1 -0
  96. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  97. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  98. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  99. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  100. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  101. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  102. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  103. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  104. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  105. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  106. package/dist/src/assets/img/icons/null-result.js +5 -0
  107. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  108. package/dist/src/assets/img/icons/quote.d.ts +1 -0
  109. package/dist/src/assets/img/icons/quote.js +7 -0
  110. package/dist/src/assets/img/icons/quote.js.map +1 -0
  111. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  112. package/dist/src/assets/img/icons/restricted.js +13 -0
  113. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  114. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  115. package/dist/src/assets/img/icons/reviews.js +11 -0
  116. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  117. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  118. package/dist/src/assets/img/icons/upload.js +12 -0
  119. package/dist/src/assets/img/icons/upload.js.map +1 -0
  120. package/dist/src/assets/img/icons/views.d.ts +1 -0
  121. package/dist/src/assets/img/icons/views.js +11 -0
  122. package/dist/src/assets/img/icons/views.js.map +1 -0
  123. package/dist/src/circular-activity-indicator.d.ts +5 -0
  124. package/dist/src/circular-activity-indicator.js +66 -0
  125. package/dist/src/circular-activity-indicator.js.map +1 -0
  126. package/dist/src/collection-browser.d.ts +684 -0
  127. package/dist/src/collection-browser.js +2567 -0
  128. package/dist/src/collection-browser.js.map +1 -0
  129. package/dist/src/collection-facets/facet-row.d.ts +30 -0
  130. package/dist/src/collection-facets/facet-row.js +265 -0
  131. package/dist/src/collection-facets/facet-row.js.map +1 -0
  132. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -0
  133. package/dist/src/collection-facets/facet-tombstone-row.js +43 -0
  134. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -0
  135. package/dist/src/collection-facets/facets-template.d.ts +13 -0
  136. package/dist/src/collection-facets/facets-template.js +68 -0
  137. package/dist/src/collection-facets/facets-template.js.map +1 -0
  138. package/dist/src/collection-facets/models.d.ts +9 -0
  139. package/dist/src/collection-facets/models.js +10 -0
  140. package/dist/src/collection-facets/models.js.map +1 -0
  141. package/dist/src/collection-facets/more-facets-content.d.ts +109 -0
  142. package/dist/src/collection-facets/more-facets-content.js +547 -0
  143. package/dist/src/collection-facets/more-facets-content.js.map +1 -0
  144. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -0
  145. package/dist/src/collection-facets/more-facets-pagination.js +264 -0
  146. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
  147. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -0
  148. package/dist/src/collection-facets/smart-facets/dedupe.js +35 -0
  149. package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -0
  150. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.d.ts +5 -0
  151. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.js +24 -0
  152. package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.js.map +1 -0
  153. package/dist/src/collection-facets/smart-facets/heuristics/index.d.ts +3 -0
  154. package/dist/src/collection-facets/smart-facets/heuristics/index.js +4 -0
  155. package/dist/src/collection-facets/smart-facets/heuristics/index.js.map +1 -0
  156. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.d.ts +4 -0
  157. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js +14 -0
  158. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js.map +1 -0
  159. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.d.ts +6 -0
  160. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js +68 -0
  161. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js.map +1 -0
  162. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.d.ts +9 -0
  163. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js +69 -0
  164. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js.map +1 -0
  165. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.d.ts +21 -0
  166. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +76 -0
  167. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -0
  168. package/dist/src/collection-facets/smart-facets/models.d.ts +30 -0
  169. package/dist/src/collection-facets/smart-facets/models.js +2 -0
  170. package/dist/src/collection-facets/smart-facets/models.js.map +1 -0
  171. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +54 -0
  172. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +383 -0
  173. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -0
  174. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -0
  175. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +133 -0
  176. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -0
  177. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +28 -0
  178. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +172 -0
  179. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -0
  180. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -0
  181. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +13 -0
  182. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js.map +1 -0
  183. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -0
  184. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +18 -0
  185. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -0
  186. package/dist/src/collection-facets/toggle-switch.d.ts +41 -0
  187. package/dist/src/collection-facets/toggle-switch.js +174 -0
  188. package/dist/src/collection-facets/toggle-switch.js.map +1 -0
  189. package/dist/src/collection-facets.d.ts +113 -0
  190. package/dist/src/collection-facets.js +872 -0
  191. package/dist/src/collection-facets.js.map +1 -0
  192. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +261 -0
  193. package/dist/src/data-source/collection-browser-data-source-interface.js +2 -0
  194. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -0
  195. package/dist/src/data-source/collection-browser-data-source.d.ts +400 -0
  196. package/dist/src/data-source/collection-browser-data-source.js +1103 -0
  197. package/dist/src/data-source/collection-browser-data-source.js.map +1 -0
  198. package/dist/src/data-source/collection-browser-query-state.d.ts +49 -0
  199. package/dist/src/data-source/collection-browser-query-state.js +2 -0
  200. package/dist/src/data-source/collection-browser-query-state.js.map +1 -0
  201. package/dist/src/data-source/models.d.ts +32 -0
  202. package/dist/src/data-source/models.js +9 -0
  203. package/dist/src/data-source/models.js.map +1 -0
  204. package/dist/src/empty-placeholder.d.ts +23 -0
  205. package/dist/src/empty-placeholder.js +165 -0
  206. package/dist/src/empty-placeholder.js.map +1 -0
  207. package/dist/src/expanded-date-picker.d.ts +50 -0
  208. package/dist/src/expanded-date-picker.js +182 -0
  209. package/dist/src/expanded-date-picker.js.map +1 -0
  210. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  211. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  212. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  213. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  214. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  215. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  216. package/dist/src/manage/manage-bar.d.ts +58 -0
  217. package/dist/src/manage/manage-bar.js +237 -0
  218. package/dist/src/manage/manage-bar.js.map +1 -0
  219. package/dist/src/manage/remove-items-modal-content.d.ts +9 -0
  220. package/dist/src/manage/remove-items-modal-content.js +104 -0
  221. package/dist/src/manage/remove-items-modal-content.js.map +1 -0
  222. package/dist/src/mediatype/mediatype-config.d.ts +11 -0
  223. package/dist/src/mediatype/mediatype-config.js +116 -0
  224. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  225. package/dist/src/models.d.ts +302 -0
  226. package/dist/src/models.js +511 -0
  227. package/dist/src/models.js.map +1 -0
  228. package/dist/src/restoration-state-handler.d.ts +75 -0
  229. package/dist/src/restoration-state-handler.js +403 -0
  230. package/dist/src/restoration-state-handler.js.map +1 -0
  231. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -0
  232. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +60 -0
  233. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -0
  234. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -0
  235. package/dist/src/sort-filter-bar/alpha-bar.js +241 -0
  236. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  237. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  238. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  239. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  240. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  241. package/dist/src/sort-filter-bar/img/list.js +5 -0
  242. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  243. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -0
  244. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +15 -0
  245. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js.map +1 -0
  246. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -0
  247. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +17 -0
  248. package/dist/src/sort-filter-bar/img/sort-toggle-down.js.map +1 -0
  249. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -0
  250. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +17 -0
  251. package/dist/src/sort-filter-bar/img/sort-toggle-up.js.map +1 -0
  252. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  253. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  254. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  255. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  256. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  257. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  258. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +278 -0
  259. package/dist/src/sort-filter-bar/sort-filter-bar.js +1161 -0
  260. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  261. package/dist/src/styles/ia-button.d.ts +2 -0
  262. package/dist/src/styles/ia-button.js +134 -0
  263. package/dist/src/styles/ia-button.js.map +1 -0
  264. package/dist/src/styles/item-image-styles.d.ts +8 -0
  265. package/dist/src/styles/item-image-styles.js +123 -0
  266. package/dist/src/styles/item-image-styles.js.map +1 -0
  267. package/dist/src/styles/sr-only.d.ts +1 -0
  268. package/dist/src/styles/sr-only.js +18 -0
  269. package/dist/src/styles/sr-only.js.map +1 -0
  270. package/dist/src/tiles/base-tile-component.d.ts +27 -0
  271. package/dist/src/tiles/base-tile-component.js +82 -0
  272. package/dist/src/tiles/base-tile-component.js.map +1 -0
  273. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  274. package/dist/src/tiles/collection-browser-loading-tile.js +29 -0
  275. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  276. package/dist/src/tiles/grid/account-tile.d.ts +18 -0
  277. package/dist/src/tiles/grid/account-tile.js +111 -0
  278. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  279. package/dist/src/tiles/grid/collection-tile.d.ts +15 -0
  280. package/dist/src/tiles/grid/collection-tile.js +160 -0
  281. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  282. package/dist/src/tiles/grid/item-tile.d.ts +41 -0
  283. package/dist/src/tiles/grid/item-tile.js +321 -0
  284. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  285. package/dist/src/tiles/grid/search-tile.d.ts +10 -0
  286. package/dist/src/tiles/grid/search-tile.js +95 -0
  287. package/dist/src/tiles/grid/search-tile.js.map +1 -0
  288. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -0
  289. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +128 -0
  290. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -0
  291. package/dist/src/tiles/grid/tile-stats.d.ts +58 -0
  292. package/dist/src/tiles/grid/tile-stats.js +204 -0
  293. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  294. package/dist/src/tiles/hover/hover-pane-controller.d.ts +228 -0
  295. package/dist/src/tiles/hover/hover-pane-controller.js +446 -0
  296. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -0
  297. package/dist/src/tiles/hover/tile-hover-pane.d.ts +20 -0
  298. package/dist/src/tiles/hover/tile-hover-pane.js +185 -0
  299. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -0
  300. package/dist/src/tiles/image-block.d.ts +19 -0
  301. package/dist/src/tiles/image-block.js +175 -0
  302. package/dist/src/tiles/image-block.js.map +1 -0
  303. package/dist/src/tiles/item-image.d.ts +40 -0
  304. package/dist/src/tiles/item-image.js +191 -0
  305. package/dist/src/tiles/item-image.js.map +1 -0
  306. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -0
  307. package/dist/src/tiles/list/tile-list-compact-header.js +85 -0
  308. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  309. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -0
  310. package/dist/src/tiles/list/tile-list-compact.js +223 -0
  311. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  312. package/dist/src/tiles/list/tile-list.d.ts +54 -0
  313. package/dist/src/tiles/list/tile-list.js +621 -0
  314. package/dist/src/tiles/list/tile-list.js.map +1 -0
  315. package/dist/src/tiles/models.d.ts +1 -0
  316. package/dist/src/tiles/models.js +2 -0
  317. package/dist/src/tiles/models.js.map +1 -0
  318. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -0
  319. package/dist/src/tiles/overlay/icon-overlay.js +55 -0
  320. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
  321. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -0
  322. package/dist/src/tiles/overlay/text-overlay.js +74 -0
  323. package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
  324. package/dist/src/tiles/review-block.d.ts +12 -0
  325. package/dist/src/tiles/review-block.js +134 -0
  326. package/dist/src/tiles/review-block.js.map +1 -0
  327. package/dist/src/tiles/text-snippet-block.d.ts +27 -0
  328. package/dist/src/tiles/text-snippet-block.js +132 -0
  329. package/dist/src/tiles/text-snippet-block.js.map +1 -0
  330. package/dist/src/tiles/tile-dispatcher.d.ts +71 -0
  331. package/dist/src/tiles/tile-dispatcher.js +472 -0
  332. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  333. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -0
  334. package/dist/src/tiles/tile-display-value-provider.js +95 -0
  335. package/dist/src/tiles/tile-display-value-provider.js.map +1 -0
  336. package/dist/src/tiles/tile-mediatype-icon.d.ts +27 -0
  337. package/dist/src/tiles/tile-mediatype-icon.js +130 -0
  338. package/dist/src/tiles/tile-mediatype-icon.js.map +1 -0
  339. package/dist/src/utils/analytics-events.d.ts +28 -0
  340. package/dist/src/utils/analytics-events.js +31 -0
  341. package/dist/src/utils/analytics-events.js.map +1 -0
  342. package/dist/src/utils/array-equals.d.ts +4 -0
  343. package/dist/src/utils/array-equals.js +11 -0
  344. package/dist/src/utils/array-equals.js.map +1 -0
  345. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -0
  346. package/dist/src/utils/collapse-repeated-quotes.js +14 -0
  347. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -0
  348. package/dist/src/utils/facet-utils.d.ts +83 -0
  349. package/dist/src/utils/facet-utils.js +152 -0
  350. package/dist/src/utils/facet-utils.js.map +1 -0
  351. package/dist/src/utils/format-count.d.ts +7 -0
  352. package/dist/src/utils/format-count.js +76 -0
  353. package/dist/src/utils/format-count.js.map +1 -0
  354. package/dist/src/utils/format-date.d.ts +16 -0
  355. package/dist/src/utils/format-date.js +33 -0
  356. package/dist/src/utils/format-date.js.map +1 -0
  357. package/dist/src/utils/format-unit-size.d.ts +2 -0
  358. package/dist/src/utils/format-unit-size.js +34 -0
  359. package/dist/src/utils/format-unit-size.js.map +1 -0
  360. package/dist/src/utils/local-date-from-utc.d.ts +9 -0
  361. package/dist/src/utils/local-date-from-utc.js +16 -0
  362. package/dist/src/utils/local-date-from-utc.js.map +1 -0
  363. package/dist/src/utils/log.d.ts +7 -0
  364. package/dist/src/utils/log.js +14 -0
  365. package/dist/src/utils/log.js.map +1 -0
  366. package/dist/src/utils/resolve-mediatype.d.ts +8 -0
  367. package/dist/src/utils/resolve-mediatype.js +24 -0
  368. package/dist/src/utils/resolve-mediatype.js.map +1 -0
  369. package/dist/src/utils/sha1.d.ts +2 -0
  370. package/dist/src/utils/sha1.js +9 -0
  371. package/dist/src/utils/sha1.js.map +1 -0
  372. package/dist/test/collection-browser.test.d.ts +1 -0
  373. package/dist/test/collection-browser.test.js +1711 -0
  374. package/dist/test/collection-browser.test.js.map +1 -0
  375. package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
  376. package/dist/test/collection-facets/facet-row.test.js +274 -0
  377. package/dist/test/collection-facets/facet-row.test.js.map +1 -0
  378. package/dist/test/collection-facets/facets-template.test.d.ts +1 -0
  379. package/dist/test/collection-facets/facets-template.test.js +101 -0
  380. package/dist/test/collection-facets/facets-template.test.js.map +1 -0
  381. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
  382. package/dist/test/collection-facets/more-facets-content.test.js +169 -0
  383. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
  384. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
  385. package/dist/test/collection-facets/more-facets-pagination.test.js +132 -0
  386. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
  387. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -0
  388. package/dist/test/collection-facets/toggle-switch.test.js +96 -0
  389. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -0
  390. package/dist/test/collection-facets.test.d.ts +2 -0
  391. package/dist/test/collection-facets.test.js +745 -0
  392. package/dist/test/collection-facets.test.js.map +1 -0
  393. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -0
  394. package/dist/test/data-source/collection-browser-data-source.test.js +102 -0
  395. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -0
  396. package/dist/test/empty-placeholder.test.d.ts +1 -0
  397. package/dist/test/empty-placeholder.test.js +63 -0
  398. package/dist/test/empty-placeholder.test.js.map +1 -0
  399. package/dist/test/expanded-date-picker.test.d.ts +1 -0
  400. package/dist/test/expanded-date-picker.test.js +130 -0
  401. package/dist/test/expanded-date-picker.test.js.map +1 -0
  402. package/dist/test/icon-overlay.test.d.ts +1 -0
  403. package/dist/test/icon-overlay.test.js +30 -0
  404. package/dist/test/icon-overlay.test.js.map +1 -0
  405. package/dist/test/image-block.test.d.ts +1 -0
  406. package/dist/test/image-block.test.js +218 -0
  407. package/dist/test/image-block.test.js.map +1 -0
  408. package/dist/test/item-image.test.d.ts +1 -0
  409. package/dist/test/item-image.test.js +196 -0
  410. package/dist/test/item-image.test.js.map +1 -0
  411. package/dist/test/manage/manage-bar.test.d.ts +2 -0
  412. package/dist/test/manage/manage-bar.test.js +106 -0
  413. package/dist/test/manage/manage-bar.test.js.map +1 -0
  414. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -0
  415. package/dist/test/manage/remove-items-modal-content.test.js +65 -0
  416. package/dist/test/manage/remove-items-modal-content.test.js.map +1 -0
  417. package/dist/test/mediatype-config.test.d.ts +1 -0
  418. package/dist/test/mediatype-config.test.js +11 -0
  419. package/dist/test/mediatype-config.test.js.map +1 -0
  420. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -0
  421. package/dist/test/mocks/mock-analytics-handler.js +16 -0
  422. package/dist/test/mocks/mock-analytics-handler.js.map +1 -0
  423. package/dist/test/mocks/mock-search-responses.d.ts +31 -0
  424. package/dist/test/mocks/mock-search-responses.js +1241 -0
  425. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  426. package/dist/test/mocks/mock-search-service.d.ts +16 -0
  427. package/dist/test/mocks/mock-search-service.js +65 -0
  428. package/dist/test/mocks/mock-search-service.js.map +1 -0
  429. package/dist/test/restoration-state-handler.test.d.ts +1 -0
  430. package/dist/test/restoration-state-handler.test.js +375 -0
  431. package/dist/test/restoration-state-handler.test.js.map +1 -0
  432. package/dist/test/review-block.test.d.ts +1 -0
  433. package/dist/test/review-block.test.js +48 -0
  434. package/dist/test/review-block.test.js.map +1 -0
  435. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -0
  436. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +13 -0
  437. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -0
  438. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -0
  439. package/dist/test/sort-filter-bar/alpha-bar.test.js +74 -0
  440. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -0
  441. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -0
  442. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +609 -0
  443. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -0
  444. package/dist/test/text-overlay.test.d.ts +1 -0
  445. package/dist/test/text-overlay.test.js +42 -0
  446. package/dist/test/text-overlay.test.js.map +1 -0
  447. package/dist/test/text-snippet-block.test.d.ts +1 -0
  448. package/dist/test/text-snippet-block.test.js +63 -0
  449. package/dist/test/text-snippet-block.test.js.map +1 -0
  450. package/dist/test/tile-stats.test.d.ts +1 -0
  451. package/dist/test/tile-stats.test.js +128 -0
  452. package/dist/test/tile-stats.test.js.map +1 -0
  453. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -0
  454. package/dist/test/tiles/grid/account-tile.test.js +96 -0
  455. package/dist/test/tiles/grid/account-tile.test.js.map +1 -0
  456. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -0
  457. package/dist/test/tiles/grid/collection-tile.test.js +96 -0
  458. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -0
  459. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  460. package/dist/test/tiles/grid/item-tile.test.js +427 -0
  461. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  462. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -0
  463. package/dist/test/tiles/grid/search-tile.test.js +66 -0
  464. package/dist/test/tiles/grid/search-tile.test.js.map +1 -0
  465. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -0
  466. package/dist/test/tiles/hover/hover-pane-controller.test.js +329 -0
  467. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -0
  468. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -0
  469. package/dist/test/tiles/hover/tile-hover-pane.test.js +57 -0
  470. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -0
  471. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -0
  472. package/dist/test/tiles/list/tile-list-compact.test.js +251 -0
  473. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -0
  474. package/dist/test/tiles/list/tile-list.test.d.ts +1 -0
  475. package/dist/test/tiles/list/tile-list.test.js +469 -0
  476. package/dist/test/tiles/list/tile-list.test.js.map +1 -0
  477. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -0
  478. package/dist/test/tiles/tile-dispatcher.test.js +231 -0
  479. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -0
  480. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -0
  481. package/dist/test/tiles/tile-display-value-provider.test.js +142 -0
  482. package/dist/test/tiles/tile-display-value-provider.test.js.map +1 -0
  483. package/dist/test/tiles/tile-mediatype-icon.test.d.ts +1 -0
  484. package/dist/test/tiles/tile-mediatype-icon.test.js +145 -0
  485. package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -0
  486. package/dist/test/utils/array-equals.test.d.ts +1 -0
  487. package/dist/test/utils/array-equals.test.js +27 -0
  488. package/dist/test/utils/array-equals.test.js.map +1 -0
  489. package/dist/test/utils/format-count.test.d.ts +1 -0
  490. package/dist/test/utils/format-count.test.js +24 -0
  491. package/dist/test/utils/format-count.test.js.map +1 -0
  492. package/dist/test/utils/format-date.test.d.ts +1 -0
  493. package/dist/test/utils/format-date.test.js +61 -0
  494. package/dist/test/utils/format-date.test.js.map +1 -0
  495. package/dist/test/utils/format-unit-size.test.d.ts +1 -0
  496. package/dist/test/utils/format-unit-size.test.js +18 -0
  497. package/dist/test/utils/format-unit-size.test.js.map +1 -0
  498. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -0
  499. package/dist/test/utils/local-date-from-utc.test.js +27 -0
  500. package/dist/test/utils/local-date-from-utc.test.js.map +1 -0
  501. package/eslint.config.mjs +53 -53
  502. package/index.html +24 -24
  503. package/local.archive.org.cert +86 -86
  504. package/local.archive.org.key +27 -27
  505. package/package.json +118 -117
  506. package/renovate.json +6 -6
  507. package/src/collection-browser.ts +2829 -2829
  508. package/src/collection-facets/more-facets-content.ts +639 -639
  509. package/src/collection-facets.ts +994 -995
  510. package/src/data-source/collection-browser-data-source.ts +1401 -1401
  511. package/src/data-source/collection-browser-query-state.ts +65 -65
  512. package/src/data-source/models.ts +43 -43
  513. package/src/tiles/base-tile-component.ts +65 -65
  514. package/src/tiles/grid/account-tile.ts +113 -113
  515. package/src/tiles/grid/collection-tile.ts +163 -163
  516. package/src/tiles/grid/item-tile.ts +340 -340
  517. package/src/tiles/hover/hover-pane-controller.ts +613 -517
  518. package/src/tiles/hover/tile-hover-pane.ts +184 -180
  519. package/src/tiles/list/tile-list-compact.ts +239 -239
  520. package/src/tiles/list/tile-list.ts +700 -700
  521. package/src/tiles/tile-dispatcher.ts +517 -490
  522. package/src/utils/format-date.ts +62 -62
  523. package/test/collection-browser.test.ts +2403 -2403
  524. package/test/tiles/grid/item-tile.test.ts +520 -520
  525. package/test/tiles/hover/hover-pane-controller.test.ts +418 -353
  526. package/test/tiles/list/tile-list-compact.test.ts +282 -282
  527. package/test/tiles/list/tile-list.test.ts +552 -552
  528. package/test/tiles/tile-dispatcher.test.ts +283 -187
  529. package/test/utils/format-date.test.ts +89 -89
  530. package/tsconfig.json +20 -20
  531. package/web-dev-server.config.mjs +30 -30
  532. package/web-test-runner.config.mjs +41 -41
@@ -1,490 +1,517 @@
1
- import { css, html, nothing, PropertyValues } from 'lit';
2
- import { customElement, property, query } from 'lit/decorators.js';
3
- import { ifDefined } from 'lit/directives/if-defined.js';
4
- import { msg } from '@lit/localize';
5
- import type {
6
- SharedResizeObserverInterface,
7
- SharedResizeObserverResizeHandlerInterface,
8
- } from '@internetarchive/shared-resize-observer';
9
- import type { TileDisplayMode } from '../models';
10
- import type { CollectionTitles } from '../data-source/models';
11
- import './grid/collection-tile';
12
- import './grid/item-tile';
13
- import './grid/account-tile';
14
- import './grid/search-tile';
15
- import './hover/tile-hover-pane';
16
- import './list/tile-list';
17
- import './list/tile-list-compact';
18
- import './list/tile-list-compact-header';
19
- import type { TileHoverPane } from './hover/tile-hover-pane';
20
- import { BaseTileComponent } from './base-tile-component';
21
- import { SimpleLayoutType } from './models';
22
- import {
23
- HoverPaneController,
24
- HoverPaneControllerInterface,
25
- HoverPaneProperties,
26
- HoverPaneProviderInterface,
27
- } from './hover/hover-pane-controller';
28
-
29
- @customElement('tile-dispatcher')
30
- export class TileDispatcher
31
- extends BaseTileComponent
32
- implements
33
- SharedResizeObserverResizeHandlerInterface,
34
- HoverPaneProviderInterface
35
- {
36
- /*
37
- * Reactive properties inherited from BaseTileComponent:
38
- * - model?: TileModel;
39
- * - currentWidth?: number;
40
- * - currentHeight?: number;
41
- * - baseNavigationUrl?: string;
42
- * - baseImageUrl?: string;
43
- * - collectionPagePath?: string;
44
- * - sortParam: SortParam | null = null;
45
- * - defaultSortParam: SortParam | null = null;
46
- * - creatorFilter?: string;
47
- * - mobileBreakpoint?: number;
48
- * - loggedIn = false;
49
- * - suppressTileBlurring = false;
50
- * - useLocalTime = false;
51
- */
52
-
53
- @property({ type: String }) tileDisplayMode?: TileDisplayMode;
54
-
55
- @property({ type: Boolean }) isManageView = false;
56
-
57
- @property({ type: Object }) resizeObserver?: SharedResizeObserverInterface;
58
-
59
- @property({ type: Object })
60
- collectionTitles?: CollectionTitles;
61
-
62
- @property({ type: Boolean }) showTvClips = false;
63
-
64
- /** What type of simple layout to use in grid mode, if any */
65
- @property({ type: String }) simpleLayoutType: SimpleLayoutType = 'none';
66
-
67
- /** Whether this tile should include a hover pane at all (for applicable tile modes) */
68
- @property({ type: Boolean }) enableHoverPane = false;
69
-
70
- @property({ type: String }) manageCheckTitle = msg(
71
- 'Remove this item from the list',
72
- );
73
-
74
- private hoverPaneController?: HoverPaneControllerInterface;
75
-
76
- @query('#container')
77
- private container!: HTMLDivElement;
78
-
79
- @query('tile-hover-pane')
80
- private hoverPane?: TileHoverPane;
81
-
82
- /** Maps each display mode to whether hover panes should appear in that mode */
83
- private static readonly HOVER_PANE_DISPLAY_MODES: Record<
84
- TileDisplayMode,
85
- boolean
86
- > = {
87
- grid: true,
88
- 'list-compact': true,
89
- 'list-detail': false,
90
- 'list-header': false,
91
- };
92
-
93
- render() {
94
- const isGridMode = this.tileDisplayMode === 'grid';
95
- const hoverPaneTemplate =
96
- this.hoverPaneController?.getTemplate() ?? nothing;
97
- return html`
98
- <div id="container" class=${isGridMode ? 'hoverable' : nothing}>
99
- ${this.tileDisplayMode === 'list-header'
100
- ? this.headerTemplate
101
- : this.tileTemplate}
102
- ${this.manageCheckTemplate} ${hoverPaneTemplate}
103
- </div>
104
- `;
105
- }
106
-
107
- protected firstUpdated(): void {
108
- if (this.shouldPrepareHoverPane) {
109
- this.hoverPaneController = new HoverPaneController(this, {
110
- mobileBreakpoint: this.mobileBreakpoint,
111
- enableLongPress: false,
112
- });
113
- }
114
- }
115
-
116
- private get headerTemplate() {
117
- const { currentWidth, sortParam, defaultSortParam, mobileBreakpoint } =
118
- this;
119
- return html`
120
- <tile-list-compact-header
121
- class="header"
122
- .currentWidth=${currentWidth}
123
- .sortParam=${sortParam ?? defaultSortParam}
124
- .mobileBreakpoint=${mobileBreakpoint}
125
- >
126
- </tile-list-compact-header>
127
- `;
128
- }
129
-
130
- private get tileTemplate() {
131
- return html`
132
- ${this.tileDisplayMode === 'list-detail'
133
- ? this.tile
134
- : this.linkTileTemplate}
135
- `;
136
- }
137
-
138
- private get linkTileTemplate() {
139
- return html`
140
- <a
141
- href=${this.linkTileHref}
142
- aria-label=${this.model?.title ?? 'Untitled item'}
143
- title=${this.shouldPrepareHoverPane
144
- ? nothing // Don't show title tooltips when we have the tile info popups
145
- : ifDefined(this.model?.title)}
146
- @click=${this.handleLinkClicked}
147
- @contextmenu=${this.handleLinkContextMenu}
148
- >
149
- ${this.tile}
150
- </a>
151
- `;
152
- }
153
-
154
- private get linkTileHref(): string | typeof nothing {
155
- if (!this.model?.identifier || this.baseNavigationUrl == null)
156
- return nothing;
157
-
158
- // Use the server-specified href if available.
159
- // Otherwise, construct a details page URL from the item identifier.
160
- if (this.model.href) {
161
- return `${this.baseNavigationUrl}${this.model.href}`;
162
- }
163
-
164
- return this.displayValueProvider.itemPageUrl(
165
- this.model.identifier,
166
- this.model.mediatype === 'collection',
167
- );
168
- }
169
-
170
- private get manageCheckTemplate() {
171
- if (!this.isManageView || this.tileDisplayMode !== 'grid') return nothing;
172
-
173
- return html`
174
- <div class="manage-check">
175
- <input
176
- type="checkbox"
177
- title=${this.manageCheckTitle}
178
- .checked=${this.model?.checked}
179
- @change=${this.handleLinkClicked}
180
- />
181
- </div>
182
- `;
183
- }
184
-
185
- /**
186
- * Whether hover pane behavior should be prepared for this tile
187
- * (e.g., whether mouse listeners should be attached, etc.)
188
- */
189
- private get shouldPrepareHoverPane(): boolean {
190
- return (
191
- this.enableHoverPane &&
192
- !!this.tileDisplayMode &&
193
- TileDispatcher.HOVER_PANE_DISPLAY_MODES[this.tileDisplayMode] &&
194
- this.model?.mediatype !== 'search' && // don't show hover panes on search tiles
195
- !this.model?.captureDates // don't show hover panes on web archive tiles
196
- );
197
- }
198
-
199
- private get isHoverEnabled(): boolean {
200
- return window.matchMedia('(hover: hover)').matches;
201
- }
202
-
203
- /** @inheritdoc */
204
- getHoverPane(): TileHoverPane | undefined {
205
- return this.hoverPane;
206
- }
207
-
208
- /** @inheritdoc */
209
- getHoverPaneProps(): HoverPaneProperties {
210
- return this;
211
- }
212
-
213
- handleResize(entry: ResizeObserverEntry): void {
214
- this.currentWidth = entry.contentRect.width;
215
- this.currentHeight = entry.contentRect.height;
216
- }
217
-
218
- disconnectedCallback(): void {
219
- this.stopResizeObservation(this.resizeObserver);
220
- }
221
-
222
- private stopResizeObservation(observer?: SharedResizeObserverInterface) {
223
- observer?.removeObserver({
224
- handler: this,
225
- target: this.container,
226
- });
227
- }
228
-
229
- private startResizeObservation() {
230
- this.stopResizeObservation(this.resizeObserver);
231
- this.resizeObserver?.addObserver({
232
- handler: this,
233
- target: this.container,
234
- });
235
- }
236
-
237
- updated(props: PropertyValues) {
238
- if (props.has('resizeObserver')) {
239
- const previousObserver = props.get(
240
- 'resizeObserver',
241
- ) as SharedResizeObserverInterface;
242
- this.stopResizeObservation(previousObserver);
243
- this.startResizeObservation();
244
- }
245
- }
246
-
247
- /**
248
- * Handler for when the tile link is left-clicked. Emits the `resultSelected` event.
249
- * In manage view, it also checks/unchecks the tile.
250
- */
251
- private handleLinkClicked(e: Event): void {
252
- if (this.isManageView) {
253
- e.preventDefault();
254
- if (this.model) this.model.checked = !this.model.checked;
255
- }
256
-
257
- this.dispatchEvent(
258
- new CustomEvent('resultSelected', { detail: this.model }),
259
- );
260
- }
261
-
262
- /**
263
- * Handler for when the tile link is right-clicked.
264
- * In manage view, it opens the item in a new tab. Otherwise, does nothing.
265
- */
266
- private handleLinkContextMenu(e: Event): void {
267
- if (this.isManageView && this.linkTileHref !== nothing) {
268
- e.preventDefault();
269
- window.open(this.linkTileHref, '_blank');
270
- }
271
- }
272
-
273
- private tileInfoButtonPressed(
274
- e: CustomEvent<{ x: number; y: number }>,
275
- ): void {
276
- this.hoverPaneController?.toggleHoverPane({
277
- coords: e.detail,
278
- enableTouchBackdrop: true,
279
- });
280
- }
281
-
282
- private get tile() {
283
- const {
284
- model,
285
- collectionPagePath,
286
- baseNavigationUrl,
287
- currentWidth,
288
- currentHeight,
289
- sortParam,
290
- creatorFilter,
291
- mobileBreakpoint,
292
- defaultSortParam,
293
- } = this;
294
-
295
- if (!model) return nothing;
296
-
297
- switch (this.tileDisplayMode) {
298
- case 'grid':
299
- switch (model.mediatype) {
300
- case 'collection':
301
- return html`<collection-tile
302
- .model=${model}
303
- .collectionPagePath=${collectionPagePath}
304
- .baseImageUrl=${this.baseImageUrl}
305
- .currentWidth=${currentWidth}
306
- .currentHeight=${currentHeight}
307
- .creatorFilter=${creatorFilter}
308
- .suppressBlurring=${this.suppressBlurring}
309
- .isManageView=${this.isManageView}
310
- ?showInfoButton=${!this.isHoverEnabled}
311
- @infoButtonPressed=${this.tileInfoButtonPressed}
312
- >
313
- </collection-tile>`;
314
- case 'account':
315
- return html`<account-tile
316
- .model=${model}
317
- .collectionPagePath=${collectionPagePath}
318
- .baseImageUrl=${this.baseImageUrl}
319
- .currentWidth=${currentWidth}
320
- .currentHeight=${currentHeight}
321
- .creatorFilter=${creatorFilter}
322
- .suppressBlurring=${this.suppressBlurring}
323
- .isManageView=${this.isManageView}
324
- ?showInfoButton=${!this.isHoverEnabled}
325
- @infoButtonPressed=${this.tileInfoButtonPressed}
326
- >
327
- </account-tile>`;
328
- case 'search':
329
- return html`<search-tile
330
- .model=${model}
331
- .collectionPagePath=${collectionPagePath}
332
- .baseImageUrl=${this.baseImageUrl}
333
- .currentWidth=${currentWidth}
334
- .currentHeight=${currentHeight}
335
- .creatorFilter=${creatorFilter}
336
- .suppressBlurring=${this.suppressBlurring}
337
- .isManageView=${this.isManageView}
338
- ?showInfoButton=${false}
339
- @infoButtonPressed=${this.tileInfoButtonPressed}
340
- >
341
- </search-tile>`;
342
- default:
343
- return html`<item-tile
344
- .model=${model}
345
- .collectionPagePath=${collectionPagePath}
346
- .currentWidth=${this.currentWidth}
347
- .currentHeight=${this.currentHeight}
348
- .baseImageUrl=${this.baseImageUrl}
349
- .sortParam=${sortParam}
350
- .defaultSortParam=${defaultSortParam}
351
- .creatorFilter=${creatorFilter}
352
- .loggedIn=${this.loggedIn}
353
- .suppressBlurring=${this.suppressBlurring}
354
- .isManageView=${this.isManageView}
355
- .simpleLayoutType=${this.simpleLayoutType}
356
- ?showTvClips=${this.showTvClips}
357
- ?showInfoButton=${!this.isHoverEnabled}
358
- ?useLocalTime=${this.useLocalTime}
359
- @infoButtonPressed=${this.tileInfoButtonPressed}
360
- >
361
- </item-tile>`;
362
- }
363
- case 'list-compact':
364
- return html`<tile-list-compact
365
- .model=${model}
366
- .collectionPagePath=${collectionPagePath}
367
- .currentWidth=${currentWidth}
368
- .currentHeight=${currentHeight}
369
- .baseNavigationUrl=${baseNavigationUrl}
370
- .sortParam=${sortParam}
371
- .defaultSortParam=${defaultSortParam}
372
- .creatorFilter=${creatorFilter}
373
- .mobileBreakpoint=${mobileBreakpoint}
374
- .baseImageUrl=${this.baseImageUrl}
375
- .loggedIn=${this.loggedIn}
376
- .suppressBlurring=${this.suppressBlurring}
377
- ?useLocalTime=${this.useLocalTime}
378
- >
379
- </tile-list-compact>`;
380
- case 'list-detail':
381
- return html`<tile-list
382
- .model=${model}
383
- .collectionPagePath=${collectionPagePath}
384
- .collectionTitles=${this.collectionTitles}
385
- .currentWidth=${currentWidth}
386
- .currentHeight=${currentHeight}
387
- .baseNavigationUrl=${baseNavigationUrl}
388
- .sortParam=${sortParam}
389
- .defaultSortParam=${defaultSortParam}
390
- .creatorFilter=${creatorFilter}
391
- .mobileBreakpoint=${mobileBreakpoint}
392
- .baseImageUrl=${this.baseImageUrl}
393
- .loggedIn=${this.loggedIn}
394
- .suppressBlurring=${this.suppressBlurring}
395
- ?useLocalTime=${this.useLocalTime}
396
- >
397
- </tile-list>`;
398
- default:
399
- return nothing;
400
- }
401
- }
402
-
403
- static get styles() {
404
- return css`
405
- :host {
406
- display: block;
407
- height: 100%;
408
- }
409
-
410
- collection-tile {
411
- --tileBorderColor: #555555;
412
- --tileBackgroundColor: #666666;
413
- --imageBlockBackgroundColor: #666666;
414
- }
415
-
416
- account-tile {
417
- --tileBorderColor: #dddddd;
418
- --imageBlockBackgroundColor: #fcf5e6;
419
- }
420
-
421
- item-tile {
422
- --tileBorderColor: #dddddd;
423
- --imageBlockBackgroundColor: #f1f1f4;
424
- }
425
-
426
- search-tile {
427
- --tileBorderColor: #555555;
428
- --tileBackgroundColor: #666666;
429
- --imageBlockBackgroundColor: #666666;
430
- --iconFillColor: #2c2c2c;
431
- }
432
-
433
- #container {
434
- position: relative;
435
- height: 100%;
436
- border-radius: 4px;
437
- }
438
-
439
- #container.hoverable:hover {
440
- box-shadow: var(--tileHoverBoxShadow, 0 0 6px 2px rgba(8, 8, 32, 0.8));
441
- transition: box-shadow 0.1s ease;
442
- }
443
-
444
- a {
445
- display: block;
446
- height: 100%;
447
- color: unset;
448
- text-decoration: none;
449
- transition: transform 0.05s ease;
450
- }
451
-
452
- a :first-child {
453
- display: block;
454
- height: 100%;
455
- }
456
-
457
- .manage-check {
458
- position: absolute;
459
- right: 0;
460
- top: 0;
461
- border: 5px solid #2c2c2c;
462
- border-radius: 3px;
463
- background-color: #2c2c2c;
464
- z-index: 1;
465
- }
466
-
467
- .manage-check > input[type='checkbox'] {
468
- display: block;
469
- margin: 0;
470
- }
471
-
472
- #touch-backdrop {
473
- position: fixed;
474
- width: 100vw;
475
- height: 100vh;
476
- top: 0;
477
- left: 0;
478
- z-index: 2;
479
- background: transparent;
480
- }
481
-
482
- tile-hover-pane {
483
- position: absolute;
484
- top: 0;
485
- left: -9999px;
486
- z-index: 2;
487
- }
488
- `;
489
- }
490
- }
1
+ import { css, html, nothing, PropertyValues } from 'lit';
2
+ import { customElement, property, query } from 'lit/decorators.js';
3
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
+ import { msg } from '@lit/localize';
5
+ import type {
6
+ SharedResizeObserverInterface,
7
+ SharedResizeObserverResizeHandlerInterface,
8
+ } from '@internetarchive/shared-resize-observer';
9
+ import type { TileDisplayMode } from '../models';
10
+ import type { CollectionTitles } from '../data-source/models';
11
+ import './grid/collection-tile';
12
+ import './grid/item-tile';
13
+ import './grid/account-tile';
14
+ import './grid/search-tile';
15
+ import './hover/tile-hover-pane';
16
+ import './list/tile-list';
17
+ import './list/tile-list-compact';
18
+ import './list/tile-list-compact-header';
19
+ import type { TileHoverPane } from './hover/tile-hover-pane';
20
+ import { BaseTileComponent } from './base-tile-component';
21
+ import { SimpleLayoutType } from './models';
22
+ import {
23
+ HoverPaneController,
24
+ HoverPaneControllerInterface,
25
+ HoverPaneProperties,
26
+ HoverPaneProviderInterface,
27
+ } from './hover/hover-pane-controller';
28
+ import { srOnlyStyle } from '../styles/sr-only';
29
+
30
+ @customElement('tile-dispatcher')
31
+ export class TileDispatcher
32
+ extends BaseTileComponent
33
+ implements
34
+ SharedResizeObserverResizeHandlerInterface,
35
+ HoverPaneProviderInterface
36
+ {
37
+ /*
38
+ * Reactive properties inherited from BaseTileComponent:
39
+ * - model?: TileModel;
40
+ * - currentWidth?: number;
41
+ * - currentHeight?: number;
42
+ * - baseNavigationUrl?: string;
43
+ * - baseImageUrl?: string;
44
+ * - collectionPagePath?: string;
45
+ * - sortParam: SortParam | null = null;
46
+ * - defaultSortParam: SortParam | null = null;
47
+ * - creatorFilter?: string;
48
+ * - mobileBreakpoint?: number;
49
+ * - loggedIn = false;
50
+ * - suppressTileBlurring = false;
51
+ * - useLocalTime = false;
52
+ */
53
+
54
+ @property({ type: String }) tileDisplayMode?: TileDisplayMode;
55
+
56
+ @property({ type: Boolean }) isManageView = false;
57
+
58
+ @property({ type: Object }) resizeObserver?: SharedResizeObserverInterface;
59
+
60
+ @property({ type: Object })
61
+ collectionTitles?: CollectionTitles;
62
+
63
+ @property({ type: Boolean }) showTvClips = false;
64
+
65
+ /** What type of simple layout to use in grid mode, if any */
66
+ @property({ type: String }) simpleLayoutType: SimpleLayoutType = 'none';
67
+
68
+ /** Whether this tile should include a hover pane at all (for applicable tile modes) */
69
+ @property({ type: Boolean }) enableHoverPane = false;
70
+
71
+ @property({ type: String }) manageCheckTitle = msg(
72
+ 'Remove this item from the list',
73
+ );
74
+
75
+ private hoverPaneController?: HoverPaneControllerInterface;
76
+
77
+ @query('#container')
78
+ private container!: HTMLDivElement;
79
+
80
+ @query('tile-hover-pane')
81
+ private hoverPane?: TileHoverPane;
82
+
83
+ @query('.tile-link')
84
+ private tileLinkElement?: HTMLAnchorElement;
85
+
86
+ acquireFocus(): void {
87
+ this.tileLinkElement?.focus();
88
+ }
89
+
90
+ releaseFocus(): void {
91
+ this.tileLinkElement?.blur();
92
+ }
93
+
94
+ /** Maps each display mode to whether hover panes should appear in that mode */
95
+ private static readonly HOVER_PANE_DISPLAY_MODES: Record<
96
+ TileDisplayMode,
97
+ boolean
98
+ > = {
99
+ grid: true,
100
+ 'list-compact': true,
101
+ 'list-detail': false,
102
+ 'list-header': false,
103
+ };
104
+
105
+ render() {
106
+ const isGridMode = this.tileDisplayMode === 'grid';
107
+ const hoverPaneTemplate =
108
+ this.hoverPaneController?.getTemplate() ?? nothing;
109
+ return html`
110
+ <div id="container" class=${isGridMode ? 'hoverable' : ''}>
111
+ ${this.tileDisplayMode === 'list-header'
112
+ ? this.headerTemplate
113
+ : this.tileTemplate}
114
+ ${this.manageCheckTemplate} ${hoverPaneTemplate}
115
+ </div>
116
+ `;
117
+ }
118
+
119
+ protected firstUpdated(): void {
120
+ if (this.shouldPrepareHoverPane) {
121
+ this.hoverPaneController = new HoverPaneController(this, {
122
+ mobileBreakpoint: this.mobileBreakpoint,
123
+ enableLongPress: false,
124
+ });
125
+ }
126
+ }
127
+
128
+ private get headerTemplate() {
129
+ const { currentWidth, sortParam, defaultSortParam, mobileBreakpoint } =
130
+ this;
131
+ return html`
132
+ <tile-list-compact-header
133
+ class="header"
134
+ .currentWidth=${currentWidth}
135
+ .sortParam=${sortParam ?? defaultSortParam}
136
+ .mobileBreakpoint=${mobileBreakpoint}
137
+ >
138
+ </tile-list-compact-header>
139
+ `;
140
+ }
141
+
142
+ private get tileTemplate() {
143
+ return html`
144
+ ${this.tileDisplayMode === 'list-detail'
145
+ ? this.tile
146
+ : this.linkTileTemplate}
147
+ `;
148
+ }
149
+
150
+ private get linkTileTemplate() {
151
+ return html`
152
+ <a
153
+ href=${this.linkTileHref}
154
+ aria-label=${this.model?.title ?? 'Untitled item'}
155
+ aria-describedby="link-aria-description"
156
+ aria-haspopup=${this.shouldPrepareHoverPane ? 'dialog' : 'false'}
157
+ title=${this.shouldPrepareHoverPane
158
+ ? nothing // Don't show title tooltips when we have the tile info popups
159
+ : ifDefined(this.model?.title)}
160
+ @click=${this.handleLinkClicked}
161
+ @contextmenu=${this.handleLinkContextMenu}
162
+ class="tile-link"
163
+ >
164
+ ${this.tile}
165
+ </a>
166
+ <div id="link-aria-description" class="sr-only">
167
+ ${msg('Press Down Arrow to preview item details')}
168
+ </div>
169
+ `;
170
+ }
171
+
172
+ private get linkTileHref(): string | typeof nothing {
173
+ if (!this.model?.identifier || this.baseNavigationUrl == null)
174
+ return nothing;
175
+
176
+ // Use the server-specified href if available.
177
+ // Otherwise, construct a details page URL from the item identifier.
178
+ if (this.model.href) {
179
+ return `${this.baseNavigationUrl}${this.model.href}`;
180
+ }
181
+
182
+ return this.displayValueProvider.itemPageUrl(
183
+ this.model.identifier,
184
+ this.model.mediatype === 'collection',
185
+ );
186
+ }
187
+
188
+ private get manageCheckTemplate() {
189
+ if (!this.isManageView || this.tileDisplayMode !== 'grid') return nothing;
190
+
191
+ return html`
192
+ <div class="manage-check">
193
+ <input
194
+ type="checkbox"
195
+ title=${this.manageCheckTitle}
196
+ ?checked=${this.model?.checked}
197
+ @change=${this.handleLinkClicked}
198
+ />
199
+ </div>
200
+ `;
201
+ }
202
+
203
+ /**
204
+ * Whether hover pane behavior should be prepared for this tile
205
+ * (e.g., whether mouse listeners should be attached, etc.)
206
+ */
207
+ private get shouldPrepareHoverPane(): boolean {
208
+ return (
209
+ this.enableHoverPane &&
210
+ !!this.tileDisplayMode &&
211
+ TileDispatcher.HOVER_PANE_DISPLAY_MODES[this.tileDisplayMode] &&
212
+ this.model?.mediatype !== 'search' && // don't show hover panes on search tiles
213
+ !this.model?.captureDates // don't show hover panes on web archive tiles
214
+ );
215
+ }
216
+
217
+ private get isHoverEnabled(): boolean {
218
+ return window.matchMedia('(hover: hover)').matches;
219
+ }
220
+
221
+ /** @inheritdoc */
222
+ getHoverPane(): TileHoverPane | undefined {
223
+ return this.hoverPane;
224
+ }
225
+
226
+ /** @inheritdoc */
227
+ getHoverPaneProps(): HoverPaneProperties {
228
+ return this;
229
+ }
230
+
231
+ handleResize(entry: ResizeObserverEntry): void {
232
+ this.currentWidth = entry.contentRect.width;
233
+ this.currentHeight = entry.contentRect.height;
234
+ }
235
+
236
+ disconnectedCallback(): void {
237
+ this.stopResizeObservation(this.resizeObserver);
238
+ }
239
+
240
+ private stopResizeObservation(observer?: SharedResizeObserverInterface) {
241
+ observer?.removeObserver({
242
+ handler: this,
243
+ target: this.container,
244
+ });
245
+ }
246
+
247
+ private startResizeObservation() {
248
+ this.stopResizeObservation(this.resizeObserver);
249
+ this.resizeObserver?.addObserver({
250
+ handler: this,
251
+ target: this.container,
252
+ });
253
+ }
254
+
255
+ updated(props: PropertyValues) {
256
+ if (props.has('resizeObserver')) {
257
+ const previousObserver = props.get(
258
+ 'resizeObserver',
259
+ ) as SharedResizeObserverInterface;
260
+ this.stopResizeObservation(previousObserver);
261
+ this.startResizeObservation();
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Handler for when the tile link is left-clicked. Emits the `resultSelected` event.
267
+ * In manage view, it also checks/unchecks the tile.
268
+ */
269
+ private handleLinkClicked(e: Event): void {
270
+ if (this.isManageView) {
271
+ e.preventDefault();
272
+ if (this.model) this.model.checked = !this.model.checked;
273
+ }
274
+
275
+ this.dispatchEvent(
276
+ new CustomEvent('resultSelected', { detail: this.model }),
277
+ );
278
+ }
279
+
280
+ /**
281
+ * Handler for when the tile link is right-clicked.
282
+ * In manage view, it opens the item in a new tab. Otherwise, does nothing.
283
+ */
284
+ private handleLinkContextMenu(e: Event): void {
285
+ if (this.isManageView && this.linkTileHref !== nothing) {
286
+ e.preventDefault();
287
+ window.open(this.linkTileHref, '_blank');
288
+ }
289
+ }
290
+
291
+ private tileInfoButtonPressed(
292
+ e: CustomEvent<{ x: number; y: number }>,
293
+ ): void {
294
+ this.hoverPaneController?.toggleHoverPane({
295
+ coords: e.detail,
296
+ enableTouchBackdrop: true,
297
+ });
298
+ }
299
+
300
+ private get tile() {
301
+ const {
302
+ model,
303
+ collectionPagePath,
304
+ baseNavigationUrl,
305
+ currentWidth,
306
+ currentHeight,
307
+ sortParam,
308
+ creatorFilter,
309
+ mobileBreakpoint,
310
+ defaultSortParam,
311
+ } = this;
312
+
313
+ if (!model) return nothing;
314
+
315
+ switch (this.tileDisplayMode) {
316
+ case 'grid':
317
+ switch (model.mediatype) {
318
+ case 'collection':
319
+ return html`<collection-tile
320
+ .model=${model}
321
+ .collectionPagePath=${collectionPagePath}
322
+ .baseImageUrl=${this.baseImageUrl}
323
+ .currentWidth=${currentWidth}
324
+ .currentHeight=${currentHeight}
325
+ .creatorFilter=${creatorFilter}
326
+ .suppressBlurring=${this.suppressBlurring}
327
+ .isManageView=${this.isManageView}
328
+ ?showInfoButton=${!this.isHoverEnabled}
329
+ @infoButtonPressed=${this.tileInfoButtonPressed}
330
+ >
331
+ </collection-tile>`;
332
+ case 'account':
333
+ return html`<account-tile
334
+ .model=${model}
335
+ .collectionPagePath=${collectionPagePath}
336
+ .baseImageUrl=${this.baseImageUrl}
337
+ .currentWidth=${currentWidth}
338
+ .currentHeight=${currentHeight}
339
+ .creatorFilter=${creatorFilter}
340
+ .suppressBlurring=${this.suppressBlurring}
341
+ .isManageView=${this.isManageView}
342
+ ?showInfoButton=${!this.isHoverEnabled}
343
+ @infoButtonPressed=${this.tileInfoButtonPressed}
344
+ >
345
+ </account-tile>`;
346
+ case 'search':
347
+ return html`<search-tile
348
+ .model=${model}
349
+ .collectionPagePath=${collectionPagePath}
350
+ .baseImageUrl=${this.baseImageUrl}
351
+ .currentWidth=${currentWidth}
352
+ .currentHeight=${currentHeight}
353
+ .creatorFilter=${creatorFilter}
354
+ .suppressBlurring=${this.suppressBlurring}
355
+ .isManageView=${this.isManageView}
356
+ ?showInfoButton=${false}
357
+ @infoButtonPressed=${this.tileInfoButtonPressed}
358
+ >
359
+ </search-tile>`;
360
+ default:
361
+ return html`<item-tile
362
+ .model=${model}
363
+ .collectionPagePath=${collectionPagePath}
364
+ .currentWidth=${this.currentWidth}
365
+ .currentHeight=${this.currentHeight}
366
+ .baseImageUrl=${this.baseImageUrl}
367
+ .sortParam=${sortParam}
368
+ .defaultSortParam=${defaultSortParam}
369
+ .creatorFilter=${creatorFilter}
370
+ .loggedIn=${this.loggedIn}
371
+ .suppressBlurring=${this.suppressBlurring}
372
+ .isManageView=${this.isManageView}
373
+ .simpleLayoutType=${this.simpleLayoutType}
374
+ ?showTvClips=${this.showTvClips}
375
+ ?showInfoButton=${!this.isHoverEnabled}
376
+ ?useLocalTime=${this.useLocalTime}
377
+ @infoButtonPressed=${this.tileInfoButtonPressed}
378
+ >
379
+ </item-tile>`;
380
+ }
381
+ case 'list-compact':
382
+ return html`<tile-list-compact
383
+ .model=${model}
384
+ .collectionPagePath=${collectionPagePath}
385
+ .currentWidth=${currentWidth}
386
+ .currentHeight=${currentHeight}
387
+ .baseNavigationUrl=${baseNavigationUrl}
388
+ .sortParam=${sortParam}
389
+ .defaultSortParam=${defaultSortParam}
390
+ .creatorFilter=${creatorFilter}
391
+ .mobileBreakpoint=${mobileBreakpoint}
392
+ .baseImageUrl=${this.baseImageUrl}
393
+ .loggedIn=${this.loggedIn}
394
+ .suppressBlurring=${this.suppressBlurring}
395
+ ?useLocalTime=${this.useLocalTime}
396
+ >
397
+ </tile-list-compact>`;
398
+ case 'list-detail':
399
+ return html`<tile-list
400
+ .model=${model}
401
+ .collectionPagePath=${collectionPagePath}
402
+ .collectionTitles=${this.collectionTitles}
403
+ .currentWidth=${currentWidth}
404
+ .currentHeight=${currentHeight}
405
+ .baseNavigationUrl=${baseNavigationUrl}
406
+ .sortParam=${sortParam}
407
+ .defaultSortParam=${defaultSortParam}
408
+ .creatorFilter=${creatorFilter}
409
+ .mobileBreakpoint=${mobileBreakpoint}
410
+ .baseImageUrl=${this.baseImageUrl}
411
+ .loggedIn=${this.loggedIn}
412
+ .suppressBlurring=${this.suppressBlurring}
413
+ ?useLocalTime=${this.useLocalTime}
414
+ >
415
+ </tile-list>`;
416
+ default:
417
+ return nothing;
418
+ }
419
+ }
420
+
421
+ static get styles() {
422
+ return [
423
+ srOnlyStyle,
424
+ css`
425
+ :host {
426
+ display: block;
427
+ height: 100%;
428
+ }
429
+
430
+ collection-tile {
431
+ --tileBorderColor: #555555;
432
+ --tileBackgroundColor: #666666;
433
+ --imageBlockBackgroundColor: #666666;
434
+ }
435
+
436
+ account-tile {
437
+ --tileBorderColor: #dddddd;
438
+ --imageBlockBackgroundColor: #fcf5e6;
439
+ }
440
+
441
+ item-tile {
442
+ --tileBorderColor: #dddddd;
443
+ --imageBlockBackgroundColor: #f1f1f4;
444
+ }
445
+
446
+ search-tile {
447
+ --tileBorderColor: #555555;
448
+ --tileBackgroundColor: #666666;
449
+ --imageBlockBackgroundColor: #666666;
450
+ --iconFillColor: #2c2c2c;
451
+ }
452
+
453
+ #container {
454
+ position: relative;
455
+ height: 100%;
456
+ border-radius: 4px;
457
+ }
458
+
459
+ #container.hoverable a:focus,
460
+ #container.hoverable a:hover {
461
+ box-shadow: var(
462
+ --tileHoverBoxShadow,
463
+ 0 0 6px 2px rgba(8, 8, 32, 0.8)
464
+ );
465
+ transition: box-shadow 0.1s ease;
466
+ }
467
+
468
+ a {
469
+ display: block;
470
+ height: 100%;
471
+ color: unset;
472
+ text-decoration: none;
473
+ transition: transform 0.05s ease;
474
+ border-radius: 4px;
475
+ outline: none;
476
+ }
477
+
478
+ a :first-child {
479
+ display: block;
480
+ height: 100%;
481
+ }
482
+
483
+ .manage-check {
484
+ position: absolute;
485
+ right: 0;
486
+ top: 0;
487
+ border: 5px solid #2c2c2c;
488
+ border-radius: 3px;
489
+ background-color: #2c2c2c;
490
+ z-index: 1;
491
+ }
492
+
493
+ .manage-check > input[type='checkbox'] {
494
+ display: block;
495
+ margin: 0;
496
+ }
497
+
498
+ #touch-backdrop {
499
+ position: fixed;
500
+ width: 100vw;
501
+ height: 100vh;
502
+ top: 0;
503
+ left: 0;
504
+ z-index: 2;
505
+ background: transparent;
506
+ }
507
+
508
+ tile-hover-pane {
509
+ position: absolute;
510
+ top: 0;
511
+ left: -9999px;
512
+ z-index: 2;
513
+ }
514
+ `,
515
+ ];
516
+ }
517
+ }