@internetarchive/collection-browser 2.7.6-alpha.0 → 2.7.6-alpha2

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 (330) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +13 -15
  6. package/dist/index.js +13 -15
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/app-root.d.ts +99 -95
  9. package/dist/src/app-root.js +528 -494
  10. package/dist/src/app-root.js.map +1 -1
  11. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  13. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  15. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  16. package/dist/src/assets/img/icons/chevron.js +2 -2
  17. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  18. package/dist/src/assets/img/icons/contract.js +2 -2
  19. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  20. package/dist/src/assets/img/icons/empty-query.js +2 -2
  21. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  22. package/dist/src/assets/img/icons/expand.js +2 -2
  23. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  25. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  26. package/dist/src/assets/img/icons/eye.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  29. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  30. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  31. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  32. package/dist/src/assets/img/icons/filter.js +2 -2
  33. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  34. package/dist/src/assets/img/icons/login-required.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  59. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  60. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  61. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  62. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  63. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  64. package/dist/src/assets/img/icons/null-result.js +2 -2
  65. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  66. package/dist/src/assets/img/icons/restricted.js +2 -2
  67. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  68. package/dist/src/assets/img/icons/reviews.js +2 -2
  69. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  70. package/dist/src/assets/img/icons/upload.js +2 -2
  71. package/dist/src/assets/img/icons/views.d.ts +1 -1
  72. package/dist/src/assets/img/icons/views.js +2 -2
  73. package/dist/src/circular-activity-indicator.d.ts +5 -5
  74. package/dist/src/circular-activity-indicator.js +17 -17
  75. package/dist/src/collection-browser.d.ts +584 -578
  76. package/dist/src/collection-browser.js +1640 -1614
  77. package/dist/src/collection-browser.js.map +1 -1
  78. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  79. package/dist/src/collection-facets/facet-row.js +118 -118
  80. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  81. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  82. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  83. package/dist/src/collection-facets/facets-template.js +44 -44
  84. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  85. package/dist/src/collection-facets/more-facets-content.js +407 -407
  86. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  87. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  88. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  89. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  90. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  91. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  92. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  93. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  94. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  95. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  96. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  97. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  98. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  99. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
  100. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  101. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  102. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  103. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  104. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  105. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  106. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  107. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  108. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  109. package/dist/src/collection-facets/toggle-switch.js +94 -94
  110. package/dist/src/collection-facets.d.ts +103 -103
  111. package/dist/src/collection-facets.js +522 -522
  112. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
  113. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  114. package/dist/src/data-source/collection-browser-data-source.d.ts +373 -373
  115. package/dist/src/data-source/collection-browser-data-source.js +982 -982
  116. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
  117. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  118. package/dist/src/data-source/models.d.ts +28 -28
  119. package/dist/src/data-source/models.js +8 -8
  120. package/dist/src/empty-placeholder.d.ts +23 -23
  121. package/dist/src/empty-placeholder.js +79 -79
  122. package/dist/src/expanded-date-picker.d.ts +43 -43
  123. package/dist/src/expanded-date-picker.js +109 -109
  124. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  125. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  126. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  127. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  128. package/dist/src/manage/manage-bar.d.ts +71 -30
  129. package/dist/src/manage/manage-bar.js +209 -83
  130. package/dist/src/manage/manage-bar.js.map +1 -1
  131. package/dist/src/manage/remove-items-modal-content.d.ts +13 -0
  132. package/dist/src/manage/remove-items-modal-content.js +104 -0
  133. package/dist/src/manage/remove-items-modal-content.js.map +1 -0
  134. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  135. package/dist/src/mediatype/mediatype-config.js +91 -91
  136. package/dist/src/models.d.ts +219 -219
  137. package/dist/src/models.js +401 -401
  138. package/dist/src/models.js.map +1 -1
  139. package/dist/src/restoration-state-handler.d.ts +70 -70
  140. package/dist/src/restoration-state-handler.js +363 -363
  141. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  142. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  143. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  144. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  145. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  146. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  147. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  148. package/dist/src/sort-filter-bar/img/list.js +2 -2
  149. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  150. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  151. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  152. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  153. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  154. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  155. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  156. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  157. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  158. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  159. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  160. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
  161. package/dist/src/styles/ia-button.d.ts +2 -2
  162. package/dist/src/styles/ia-button.js +51 -19
  163. package/dist/src/styles/ia-button.js.map +1 -1
  164. package/dist/src/styles/item-image-styles.d.ts +8 -8
  165. package/dist/src/styles/item-image-styles.js +9 -9
  166. package/dist/src/styles/sr-only.d.ts +1 -1
  167. package/dist/src/styles/sr-only.js +2 -2
  168. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  169. package/dist/src/tiles/base-tile-component.js +64 -64
  170. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  171. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  172. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  173. package/dist/src/tiles/grid/account-tile.js +72 -72
  174. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  175. package/dist/src/tiles/grid/collection-tile.js +80 -80
  176. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  177. package/dist/src/tiles/grid/item-tile.js +158 -158
  178. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  179. package/dist/src/tiles/grid/search-tile.js +51 -51
  180. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  181. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  182. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  183. package/dist/src/tiles/grid/tile-stats.js +53 -53
  184. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  185. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  186. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  187. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  188. package/dist/src/tiles/image-block.d.ts +18 -18
  189. package/dist/src/tiles/image-block.js +89 -89
  190. package/dist/src/tiles/item-image.d.ts +39 -39
  191. package/dist/src/tiles/item-image.js +154 -154
  192. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  193. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  194. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  195. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  196. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  197. package/dist/src/tiles/list/tile-list.js +323 -323
  198. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  199. package/dist/src/tiles/mediatype-icon.js +47 -47
  200. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  201. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  202. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  203. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  204. package/dist/src/tiles/review-block.d.ts +12 -12
  205. package/dist/src/tiles/review-block.js +56 -56
  206. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  207. package/dist/src/tiles/text-snippet-block.js +73 -73
  208. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  209. package/dist/src/tiles/tile-dispatcher.js +230 -230
  210. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  211. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  212. package/dist/src/utils/analytics-events.d.ts +28 -28
  213. package/dist/src/utils/analytics-events.js +30 -30
  214. package/dist/src/utils/array-equals.d.ts +4 -4
  215. package/dist/src/utils/array-equals.js +10 -10
  216. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  217. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  218. package/dist/src/utils/facet-utils.d.ts +83 -83
  219. package/dist/src/utils/facet-utils.js +145 -145
  220. package/dist/src/utils/format-count.d.ts +7 -7
  221. package/dist/src/utils/format-count.js +76 -76
  222. package/dist/src/utils/format-date.d.ts +2 -2
  223. package/dist/src/utils/format-date.js +25 -25
  224. package/dist/src/utils/format-unit-size.d.ts +2 -2
  225. package/dist/src/utils/format-unit-size.js +33 -33
  226. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  227. package/dist/src/utils/local-date-from-utc.js +15 -15
  228. package/dist/src/utils/log.d.ts +7 -7
  229. package/dist/src/utils/log.js +15 -15
  230. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  231. package/dist/src/utils/resolve-mediatype.js +23 -23
  232. package/dist/src/utils/sha1.d.ts +2 -2
  233. package/dist/src/utils/sha1.js +8 -8
  234. package/dist/test/collection-browser.test.d.ts +1 -1
  235. package/dist/test/collection-browser.test.js +1293 -1293
  236. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  237. package/dist/test/collection-facets/facet-row.test.js +227 -227
  238. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  239. package/dist/test/collection-facets/facets-template.test.js +91 -91
  240. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  241. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  242. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  243. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  244. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  245. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  246. package/dist/test/collection-facets.test.d.ts +2 -2
  247. package/dist/test/collection-facets.test.js +690 -690
  248. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  249. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  250. package/dist/test/empty-placeholder.test.d.ts +1 -1
  251. package/dist/test/empty-placeholder.test.js +63 -63
  252. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  253. package/dist/test/expanded-date-picker.test.js +95 -95
  254. package/dist/test/icon-overlay.test.d.ts +1 -1
  255. package/dist/test/icon-overlay.test.js +24 -24
  256. package/dist/test/image-block.test.d.ts +1 -1
  257. package/dist/test/image-block.test.js +107 -107
  258. package/dist/test/item-image.test.d.ts +1 -1
  259. package/dist/test/item-image.test.js +85 -85
  260. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  261. package/dist/test/manage/manage-bar.test.js +91 -81
  262. package/dist/test/manage/manage-bar.test.js.map +1 -1
  263. package/dist/test/mediatype-config.test.d.ts +1 -1
  264. package/dist/test/mediatype-config.test.js +16 -16
  265. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  266. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  267. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  268. package/dist/test/mocks/mock-search-responses.js +942 -942
  269. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  270. package/dist/test/mocks/mock-search-service.js +54 -54
  271. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  272. package/dist/test/restoration-state-handler.test.js +270 -270
  273. package/dist/test/review-block.test.d.ts +1 -1
  274. package/dist/test/review-block.test.js +44 -44
  275. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  276. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  277. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  278. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  279. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  280. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  281. package/dist/test/text-overlay.test.d.ts +1 -1
  282. package/dist/test/text-overlay.test.js +38 -38
  283. package/dist/test/text-snippet-block.test.d.ts +1 -1
  284. package/dist/test/text-snippet-block.test.js +57 -57
  285. package/dist/test/tile-stats.test.d.ts +1 -1
  286. package/dist/test/tile-stats.test.js +81 -81
  287. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  288. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  289. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  290. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  291. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  292. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  293. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  294. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  295. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  296. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  297. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  298. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  299. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  300. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  301. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  302. package/dist/test/tiles/list/tile-list.test.js +297 -297
  303. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  304. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  305. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  306. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  307. package/dist/test/utils/array-equals.test.d.ts +1 -1
  308. package/dist/test/utils/array-equals.test.js +26 -26
  309. package/dist/test/utils/format-count.test.d.ts +1 -1
  310. package/dist/test/utils/format-count.test.js +23 -23
  311. package/dist/test/utils/format-date.test.d.ts +1 -1
  312. package/dist/test/utils/format-date.test.js +17 -17
  313. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  314. package/dist/test/utils/format-unit-size.test.js +17 -17
  315. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  316. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  317. package/index.ts +0 -2
  318. package/local.archive.org.cert +86 -86
  319. package/local.archive.org.key +27 -27
  320. package/package.json +1 -1
  321. package/renovate.json +6 -6
  322. package/src/app-root.ts +36 -0
  323. package/src/collection-browser.ts +29 -5
  324. package/src/manage/manage-bar.ts +168 -24
  325. package/src/manage/remove-items-modal-content.ts +107 -0
  326. package/src/models.ts +2 -2
  327. package/src/styles/ia-button.ts +37 -5
  328. package/test/manage/manage-bar.test.ts +12 -0
  329. package/web-dev-server.config.mjs +30 -30
  330. package/web-test-runner.config.mjs +41 -41
@@ -1,8 +1,20 @@
1
1
  import { msg } from '@lit/localize';
2
- import { LitElement, html, css, TemplateResult, CSSResultGroup } from 'lit';
2
+ import {
3
+ LitElement,
4
+ html,
5
+ css,
6
+ TemplateResult,
7
+ CSSResultGroup,
8
+ PropertyValues,
9
+ } from 'lit';
3
10
  import { customElement, property } from 'lit/decorators.js';
4
11
  import { when } from 'lit/directives/when.js';
12
+ import {
13
+ ModalConfig,
14
+ type ModalManagerInterface,
15
+ } from '@internetarchive/modal-manager';
5
16
  import iaButtonStyle from '../styles/ia-button';
17
+ import './remove-items-modal-content';
6
18
 
7
19
  export interface ManageableItem {
8
20
  identifier: string;
@@ -17,6 +29,21 @@ export class ManageBar extends LitElement {
17
29
  */
18
30
  @property({ type: String }) label = msg('Select items to remove');
19
31
 
32
+ /**
33
+ * Specifies the context in which the collection browser is being used
34
+ */
35
+ @property({ type: String }) activeTabId?: string;
36
+
37
+ /**
38
+ * The shared modal manager component for displaying modal dialogs on this page
39
+ */
40
+ @property({ type: Object }) modalManager?: ModalManagerInterface;
41
+
42
+ /**
43
+ * Array of items that have been selected for management
44
+ */
45
+ @property({ type: Object }) selectedItems: Array<ManageableItem> = [];
46
+
20
47
  /**
21
48
  * Whether to show the "Select All" button (default false)
22
49
  */
@@ -27,11 +54,33 @@ export class ManageBar extends LitElement {
27
54
  */
28
55
  @property({ type: Boolean }) showUnselectAll = false;
29
56
 
57
+ /**
58
+ * Item removal failure message, if any
59
+ */
60
+ @property({ type: Boolean }) isItemDeleted = true;
61
+
62
+ /**
63
+ * Whether to show "Item Manager the items" button (default false)
64
+ */
65
+ @property({ type: Boolean }) showManageButton = false;
66
+
30
67
  /**
31
68
  * Whether to active delete button for selectable items
32
69
  */
33
70
  @property({ type: Boolean }) removeAllowed = false;
34
71
 
72
+ updated(changed: PropertyValues): void {
73
+ if (changed.has('isItemDeleted')) {
74
+ console.log(this.isItemDeleted)
75
+ if (this.isItemDeleted === false) {
76
+ this.showRemoveItemsErrorModal();
77
+ } else {
78
+ this.modalManager?.closeModal();
79
+ this.modalManager?.classList.remove('remove-items');
80
+ }
81
+ }
82
+ }
83
+
35
84
  render(): TemplateResult {
36
85
  return html`
37
86
  <div class="manage-container">
@@ -43,15 +92,25 @@ export class ManageBar extends LitElement {
43
92
  <button
44
93
  class="ia-button danger"
45
94
  ?disabled=${!this.removeAllowed}
46
- @click=${this.removeClicked}
95
+ @click=${this.showRemoveItemsModal}
47
96
  >
48
97
  ${msg('Remove selected items')}
49
98
  </button>
99
+ ${when(
100
+ this.showManageButton,
101
+ () => html` <button
102
+ class="ia-button warning"
103
+ ?disabled=${!this.removeAllowed}
104
+ @click=${this.manageItemsClicked}
105
+ >
106
+ ${msg('Item Manager the items')}
107
+ </button>`
108
+ )}
50
109
  <div class="selection-buttons">
51
110
  ${when(
52
111
  this.showSelectAll,
53
112
  () => html` <button
54
- class="link-styled select-all-btn"
113
+ class="ia-button link select-all-btn"
55
114
  @click=${this.selectAllClicked}
56
115
  >
57
116
  ${msg('Select all')}
@@ -60,7 +119,7 @@ export class ManageBar extends LitElement {
60
119
  ${when(
61
120
  this.showUnselectAll,
62
121
  () => html` <button
63
- class="link-styled unselect-all-btn"
122
+ class="ia-button link unselect-all-btn"
64
123
  @click=${this.unselectAllClicked}
65
124
  >
66
125
  ${msg('Unselect all')}
@@ -76,10 +135,19 @@ export class ManageBar extends LitElement {
76
135
  this.dispatchEvent(new CustomEvent('cancel'));
77
136
  }
78
137
 
79
- private removeClicked(): void {
138
+ /**
139
+ * Shows a modal dialog confirming the list of items to be removed
140
+ * @param items Which items to list in the modal
141
+ */
142
+ private removeItemsClicked(): void {
143
+ this.showRemoveItemsProcessingModal();
80
144
  this.dispatchEvent(new CustomEvent('removeItems'));
81
145
  }
82
146
 
147
+ private manageItemsClicked(): void {
148
+ this.dispatchEvent(new CustomEvent('manageItems'));
149
+ }
150
+
83
151
  private selectAllClicked(): void {
84
152
  this.dispatchEvent(new CustomEvent('selectAll'));
85
153
  }
@@ -88,6 +156,95 @@ export class ManageBar extends LitElement {
88
156
  this.dispatchEvent(new CustomEvent('unselectAll'));
89
157
  }
90
158
 
159
+ /**
160
+ * Shows a modal dialog confirming the list of items to be removed
161
+ * @param items Which items to list in the modal
162
+ */
163
+ private showRemoveItemsModal(): void {
164
+ const delayMessage =
165
+ this.activeTabId === 'uploads'
166
+ ? msg(
167
+ 'Note: it may take a few minutes for these items to stop appearing in your uploads list.'
168
+ )
169
+ : undefined;
170
+
171
+ const customModalContent = html`
172
+ <remove-items-modal-content
173
+ .items=${this.selectedItems}
174
+ .message=${delayMessage}
175
+ @confirm=${() => this.removeItemsClicked()}
176
+ ></remove-items-modal-content>
177
+ `;
178
+
179
+ const config = new ModalConfig({
180
+ showProcessingIndicator: false,
181
+ processingImageMode: 'processing',
182
+ bodyColor: '#fff',
183
+ headerColor: '#194880',
184
+ showHeaderLogo: false,
185
+ closeOnBackdropClick: true,
186
+ title: html`${msg('Are you sure you want to remove these items?')}`,
187
+ });
188
+
189
+ this.modalManager?.classList.add('remove-items');
190
+ this.modalManager?.showModal({
191
+ config,
192
+ customModalContent,
193
+ userClosedModalCallback: () => {
194
+ this.modalManager?.classList.remove('remove-items');
195
+ },
196
+ });
197
+ }
198
+
199
+ /**
200
+ * Shows a modal dialog indicating that item removal is being processed
201
+ */
202
+ private showRemoveItemsProcessingModal(): void {
203
+ const config = new ModalConfig({
204
+ showProcessingIndicator: true,
205
+ processingImageMode: 'processing',
206
+ bodyColor: '#fff',
207
+ headerColor: '#194880',
208
+ showHeaderLogo: false,
209
+ closeOnBackdropClick: true,
210
+ title: html`${msg('Removing selected items...')}`,
211
+ });
212
+
213
+ this.modalManager?.classList.add('remove-items');
214
+ this.modalManager?.showModal({
215
+ config,
216
+ userClosedModalCallback: () => {
217
+ this.modalManager?.classList.remove('remove-items');
218
+ },
219
+ });
220
+ }
221
+
222
+ /**
223
+ * Shows a modal dialog indicating that an error occurred while removing items
224
+ */
225
+ private showRemoveItemsErrorModal(): void {
226
+ const config = new ModalConfig({
227
+ showProcessingIndicator: false,
228
+ processingImageMode: 'processing',
229
+ bodyColor: '#fff',
230
+ headerColor: '#691916',
231
+ showHeaderLogo: false,
232
+ closeOnBackdropClick: true,
233
+ title: html`${msg('Error: unable to remove items')}`,
234
+ message: html`${msg(
235
+ 'An error occurred while removing items. Please try again in a few minutes.',
236
+ )}`,
237
+ });
238
+
239
+ this.modalManager?.classList.add('remove-items');
240
+ this.modalManager?.showModal({
241
+ config,
242
+ userClosedModalCallback: () => {
243
+ this.modalManager?.classList.remove('remove-items');
244
+ },
245
+ });
246
+ }
247
+
91
248
  static get styles(): CSSResultGroup {
92
249
  return css`
93
250
  ${iaButtonStyle}
@@ -108,33 +265,20 @@ export class ManageBar extends LitElement {
108
265
 
109
266
  .manage-buttons {
110
267
  display: flex;
268
+ flex-wrap: wrap;
111
269
  align-items: center;
112
270
  column-gap: 5px;
113
271
  }
114
272
 
273
+ .selection-buttons {
274
+ display: inherit;
275
+ }
276
+
115
277
  .ia-button,
116
278
  button {
117
279
  padding: 6px 12px;
118
280
  font-size: 1.4rem;
119
- }
120
-
121
- .ia-button.danger:disabled {
122
- opacity: 0.5;
123
- }
124
-
125
- button.link-styled {
126
- margin: 0;
127
- padding: 6px;
128
- border: 0;
129
- appearance: none;
130
- background: none;
131
- color: var(--ia-theme-link-color, #4b64ff);
132
- font: inherit;
133
- text-decoration: none;
134
- cursor: pointer;
135
- }
136
- button.link-styled:hover {
137
- text-decoration: underline;
281
+ margin: 3px 0;
138
282
  }
139
283
  `;
140
284
  }
@@ -0,0 +1,107 @@
1
+ import { LitElement, html, css, nothing, TemplateResult, CSSResult } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+ import { msg } from '@lit/localize';
4
+ import { map } from 'lit/directives/map.js';
5
+
6
+ export interface ManageableItem {
7
+ identifier: string;
8
+ title?: string;
9
+ date?: string;
10
+ }
11
+
12
+ @customElement('remove-items-modal-content')
13
+ export class RemoveItemsModalContent extends LitElement {
14
+ @property({ type: Object }) items: ManageableItem[] = [];
15
+
16
+ @property({ type: String }) message?: string;
17
+
18
+ render(): TemplateResult {
19
+ return html`
20
+ <ul>
21
+ ${map(
22
+ this.items,
23
+ ({ title, date }) => html`
24
+ <li>
25
+ <span class="item-title">${title ?? '[untitled]'}</span>
26
+ <span class="item-date">${date ?? ''}</span>
27
+ </li>
28
+ `
29
+ )}
30
+ </ul>
31
+ ${this.message ? html`<p class="message">${this.message}</p>` : nothing}
32
+ <div class="button-bar">
33
+ <button class="remove-items-btn" @click=${this.removeItemsBtnClicked}>
34
+ ${msg('Remove items')}
35
+ </button>
36
+ </div>
37
+ `;
38
+ }
39
+
40
+ private removeItemsBtnClicked(): void {
41
+ this.dispatchEvent(
42
+ new CustomEvent<{ items: ManageableItem[] }>('confirm', {
43
+ detail: {
44
+ items: this.items,
45
+ },
46
+ })
47
+ );
48
+ }
49
+
50
+ static get styles(): CSSResult {
51
+ return css`
52
+ ul {
53
+ margin: 0;
54
+ padding: 0 10px;
55
+ font-size: 1.4rem;
56
+ list-style-type: none;
57
+ max-height: min(400px, 40vh);
58
+ overflow-y: auto;
59
+ }
60
+
61
+ li {
62
+ display: flex;
63
+ justify-content: space-between;
64
+ padding: 2px 0;
65
+ }
66
+ li:not(:last-of-type) {
67
+ border-bottom: 1px solid rgb(232, 232, 232);
68
+ }
69
+
70
+ .item-title {
71
+ word-break: break-word;
72
+ }
73
+
74
+ .item-date {
75
+ white-space: nowrap;
76
+ }
77
+
78
+ .message {
79
+ font-size: 1.4rem;
80
+ padding: 5px 10px;
81
+ }
82
+
83
+ .button-bar {
84
+ display: flex;
85
+ justify-content: center;
86
+ margin: 10px 5px;
87
+ }
88
+
89
+ .remove-items-btn {
90
+ margin-bottom: 10px;
91
+ padding: 10px;
92
+ border: 1px solid var(--primaryErrorCTABorder, #d43f3a);
93
+ border-radius: 4px;
94
+ color: white;
95
+ background: var(--primaryErrorCTAFill, #d9534f);
96
+ appearance: none;
97
+ cursor: pointer;
98
+ }
99
+ .remove-items-btn:hover {
100
+ background: rgba(var(--primaryErrorCTAFillRGB, 229, 28, 38), 0.9);
101
+ }
102
+ .remove-items-btn:active {
103
+ background: rgba(var(--primaryErrorCTAFillRGB, 229, 28, 38), 0.7);
104
+ }
105
+ `;
106
+ }
107
+ }
package/src/models.ts CHANGED
@@ -236,9 +236,9 @@ export type TileDisplayMode =
236
236
  /**
237
237
  * This is mainly used to set the cookies for the collection display mode.
238
238
  *
239
- * It allows the user to set different modes for different contexts (collection page, search page, etc).
239
+ * It allows the user to set different modes for different contexts (collection page, search page, profile page etc).
240
240
  */
241
- export type CollectionBrowserContext = 'collection' | 'search';
241
+ export type CollectionBrowserContext = 'collection' | 'search' | 'profile';
242
242
 
243
243
  /**
244
244
  * The sort fields shown in the sort filter bar
@@ -16,8 +16,9 @@ const darkButtonFillColor = css`var(--secondaryCTAFill, #333)`;
16
16
  const darkButtonFillColorRGB = css`var(--secondaryCTAFillRGB, 51, 51, 51)`; // RBG format of --secondaryCTAFill
17
17
  const darkButtonBorderColor = css`var(--primaryCTABorder, #979797)`;
18
18
 
19
- const warningButtonBGColor = css`#ee8950`;
20
- const warningButtonBorderColor = css`#ec7939`;
19
+ const warningButtonFillColor = css`var(---primaryWarningFill, #ee8950)`;
20
+ const warningButtonFillColorRGB = css`var(--primaryWarningFillRGB, 238, 137, 80)`; // RBG format of --primaryWarningFill
21
+ const warningButtonBorderColor = css`var(--primaryWarningBorder, #ec7939)`;
21
22
 
22
23
  export default css`
23
24
  .ia-button {
@@ -58,9 +59,12 @@ export default css`
58
59
  .ia-button.transparent {
59
60
  background-color: transparent;
60
61
  }
61
- .ia-button.warning {
62
- background-color: ${warningButtonBGColor}
63
- border-color: ${warningButtonBorderColor};
62
+
63
+ .ia-button.primary:disabled,
64
+ .ia-button.danger:disabled,
65
+ .ia-button.warning:disabled,
66
+ .ia-button.dark:disabled {
67
+ opacity: 0.5;
64
68
  }
65
69
 
66
70
  .ia-button.primary {
@@ -91,6 +95,20 @@ export default css`
91
95
  background-color: rgba(${dangerButtonFillColorRGB}, 0.7);
92
96
  }
93
97
 
98
+ .ia-button.warning {
99
+ background-color: ${warningButtonFillColor};
100
+ border-color: ${warningButtonBorderColor};
101
+ }
102
+ .ia-button.warning:hover {
103
+ background-color: rgba(${warningButtonFillColorRGB}, 0.9);
104
+ }
105
+ .ia-button.warning:focus-visible {
106
+ background-color: rgba(${warningButtonFillColorRGB}, 0.8);
107
+ }
108
+ .ia-button.warning:active {
109
+ background-color: rgba(${warningButtonFillColorRGB}, 0.7);
110
+ }
111
+
94
112
  .ia-button.dark {
95
113
  background-color: ${darkButtonFillColor};
96
114
  border-color: ${darkButtonBorderColor};
@@ -104,4 +122,18 @@ export default css`
104
122
  .ia-button.dark:active {
105
123
  background-color: rgba(${darkButtonFillColorRGB}, 0.7);
106
124
  }
125
+
126
+ .ia-button.link {
127
+ margin: 0;
128
+ padding: 6px;
129
+ border: 0;
130
+ appearance: none;
131
+ background: none;
132
+ color: var(--ia-theme-link-color, #4b64ff);
133
+ text-decoration: none;
134
+ cursor: pointer;
135
+ }
136
+ .ia-button.link:hover {
137
+ text-decoration: underline;
138
+ }
107
139
  `;
@@ -31,6 +31,18 @@ describe('Manage bar', () => {
31
31
  expect(el.shadowRoot?.querySelector('.unselect-all-btn')).not.to.exist;
32
32
  });
33
33
 
34
+ it('does not render item manager button except /search/ page', async () => {
35
+ const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);
36
+ expect(el.shadowRoot?.querySelector('.ia-button.warning')).not.to.exist;
37
+ });
38
+
39
+ it('render item manager button for /search/ page', async () => {
40
+ const el = await fixture<ManageBar>(
41
+ html`<manage-bar .pageContext=${'search'}></manage-bar>`
42
+ );
43
+ expect(el.shadowRoot?.querySelector('.ia-button.warning')).to.exist;
44
+ });
45
+
34
46
  it('includes Select All button when requested', async () => {
35
47
  const el = await fixture<ManageBar>(
36
48
  html`<manage-bar showSelectAll></manage-bar>`
@@ -1,30 +1,30 @@
1
- // import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
2
-
3
- /** Use Hot Module replacement by adding --hmr to the start command */
4
- const hmr = process.argv.includes('--hmr');
5
-
6
- export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
7
- nodeResolve: true,
8
- open: '/',
9
- watch: !hmr,
10
-
11
- /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
12
- // esbuildTarget: 'auto'
13
-
14
- /** Set appIndex to enable SPA routing */
15
- // appIndex: 'demo/index.html',
16
-
17
- /** Confgure bare import resolve plugin */
18
- // nodeResolve: {
19
- // exportConditions: ['browser', 'development']
20
- // },
21
-
22
- plugins: [
23
- /** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
24
- // hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
25
- ],
26
-
27
- http2: true,
28
- sslCert: './local.archive.org.cert',
29
- sslKey: './local.archive.org.key',
30
- });
1
+ // import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
2
+
3
+ /** Use Hot Module replacement by adding --hmr to the start command */
4
+ const hmr = process.argv.includes('--hmr');
5
+
6
+ export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
7
+ nodeResolve: true,
8
+ open: '/',
9
+ watch: !hmr,
10
+
11
+ /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
12
+ // esbuildTarget: 'auto'
13
+
14
+ /** Set appIndex to enable SPA routing */
15
+ // appIndex: 'demo/index.html',
16
+
17
+ /** Confgure bare import resolve plugin */
18
+ // nodeResolve: {
19
+ // exportConditions: ['browser', 'development']
20
+ // },
21
+
22
+ plugins: [
23
+ /** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
24
+ // hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
25
+ ],
26
+
27
+ http2: true,
28
+ sslCert: './local.archive.org.cert',
29
+ sslKey: './local.archive.org.key',
30
+ });
@@ -1,41 +1,41 @@
1
- // import { playwrightLauncher } from '@web/test-runner-playwright';
2
-
3
- const filteredLogs = ['Running in dev mode', 'lit-html is in dev mode'];
4
-
5
- export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
6
- /** Test files to run */
7
- files: 'dist/test/**/*.test.js',
8
-
9
- /** Resolve bare module imports */
10
- nodeResolve: {
11
- exportConditions: ['browser', 'development'],
12
- },
13
-
14
- /** Filter out lit dev mode logs */
15
- filterBrowserLogs(log) {
16
- for (const arg of log.args) {
17
- if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) {
18
- return false;
19
- }
20
- }
21
- return true;
22
- },
23
-
24
- /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
25
- // esbuildTarget: 'auto',
26
-
27
- /** Amount of browsers to run concurrently */
28
- // concurrentBrowsers: 2,
29
-
30
- /** Amount of test files per browser to test concurrently */
31
- // concurrency: 1,
32
-
33
- /** Browsers to run tests on */
34
- // browsers: [
35
- // playwrightLauncher({ product: 'chromium' }),
36
- // playwrightLauncher({ product: 'firefox' }),
37
- // playwrightLauncher({ product: 'webkit' }),
38
- // ],
39
-
40
- // See documentation for all available options
41
- });
1
+ // import { playwrightLauncher } from '@web/test-runner-playwright';
2
+
3
+ const filteredLogs = ['Running in dev mode', 'lit-html is in dev mode'];
4
+
5
+ export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
6
+ /** Test files to run */
7
+ files: 'dist/test/**/*.test.js',
8
+
9
+ /** Resolve bare module imports */
10
+ nodeResolve: {
11
+ exportConditions: ['browser', 'development'],
12
+ },
13
+
14
+ /** Filter out lit dev mode logs */
15
+ filterBrowserLogs(log) {
16
+ for (const arg of log.args) {
17
+ if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) {
18
+ return false;
19
+ }
20
+ }
21
+ return true;
22
+ },
23
+
24
+ /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
25
+ // esbuildTarget: 'auto',
26
+
27
+ /** Amount of browsers to run concurrently */
28
+ // concurrentBrowsers: 2,
29
+
30
+ /** Amount of test files per browser to test concurrently */
31
+ // concurrency: 1,
32
+
33
+ /** Browsers to run tests on */
34
+ // browsers: [
35
+ // playwrightLauncher({ product: 'chromium' }),
36
+ // playwrightLauncher({ product: 'firefox' }),
37
+ // playwrightLauncher({ product: 'webkit' }),
38
+ // ],
39
+
40
+ // See documentation for all available options
41
+ });