@internetarchive/collection-browser 0.0.1-alpha.8 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +8 -11
  2. package/demo/app-root.ts +16 -92
  3. package/dist/demo/app-root.d.ts +3 -5
  4. package/dist/demo/app-root.js +13 -83
  5. package/dist/demo/app-root.js.map +1 -1
  6. package/dist/index.d.ts +6 -0
  7. package/dist/index.js +6 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  10. package/dist/src/assets/img/icons/chevron.js +4 -0
  11. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  12. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -2
  13. package/dist/src/assets/img/icons/mediatype/account.js +6 -4
  14. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -1
  15. package/dist/src/assets/img/icons/mediatype/audio.js +7 -4
  16. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -1
  17. package/dist/src/assets/img/icons/mediatype/collection.js +7 -4
  18. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -1
  19. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  20. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  21. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  22. package/dist/src/assets/img/icons/mediatype/etree.js +10 -5
  23. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -1
  24. package/dist/src/assets/img/icons/mediatype/film.js +2 -1
  25. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -1
  26. package/dist/src/assets/img/icons/mediatype/images.js +9 -6
  27. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -1
  28. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  29. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  30. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  31. package/dist/src/assets/img/icons/mediatype/software.js +9 -6
  32. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -1
  33. package/dist/src/assets/img/icons/mediatype/texts.js +9 -6
  34. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -1
  35. package/dist/src/assets/img/icons/mediatype/tv.js +10 -5
  36. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -1
  37. package/dist/src/assets/img/icons/mediatype/video.js +10 -6
  38. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -1
  39. package/dist/src/assets/img/icons/mediatype/web.js +9 -6
  40. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -1
  41. package/dist/src/collection-browser.d.ts +53 -31
  42. package/dist/src/collection-browser.js +504 -166
  43. package/dist/src/collection-browser.js.map +1 -1
  44. package/dist/src/collection-facets.d.ts +28 -13
  45. package/dist/src/collection-facets.js +276 -160
  46. package/dist/src/collection-facets.js.map +1 -1
  47. package/dist/src/helpers.d.ts +1 -0
  48. package/dist/src/helpers.js +20 -0
  49. package/dist/src/helpers.js.map +1 -0
  50. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  51. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  52. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  53. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  54. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  55. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  56. package/dist/src/mediatype/mediatype-color.d.ts +3 -0
  57. package/dist/src/mediatype/mediatype-color.js +15 -0
  58. package/dist/src/mediatype/mediatype-color.js.map +1 -0
  59. package/dist/src/mediatype/mediatype-config.d.ts +3 -0
  60. package/dist/src/mediatype/mediatype-config.js +86 -0
  61. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  62. package/dist/src/mediatype/mediatype-display.d.ts +3 -0
  63. package/dist/src/mediatype/mediatype-display.js +86 -0
  64. package/dist/src/mediatype/mediatype-display.js.map +1 -0
  65. package/dist/src/mediatype/mediatype-icon.d.ts +10 -0
  66. package/dist/src/mediatype/mediatype-icon.js +105 -0
  67. package/dist/src/mediatype/mediatype-icon.js.map +1 -0
  68. package/dist/src/mediatype/mediatype-text.d.ts +3 -0
  69. package/dist/src/mediatype/mediatype-text.js +17 -0
  70. package/dist/src/mediatype/mediatype-text.js.map +1 -0
  71. package/dist/src/mediatype/mediatypeConfig.d.ts +3 -0
  72. package/dist/src/mediatype/mediatypeConfig.js +86 -0
  73. package/dist/src/mediatype/mediatypeConfig.js.map +1 -0
  74. package/dist/src/mediatype-icon.d.ts +2 -2
  75. package/dist/src/mediatype-icon.js +35 -46
  76. package/dist/src/mediatype-icon.js.map +1 -1
  77. package/dist/src/models.d.ts +72 -13
  78. package/dist/src/models.js +57 -1
  79. package/dist/src/models.js.map +1 -1
  80. package/dist/src/restoration-state-handler.d.ts +38 -0
  81. package/dist/src/restoration-state-handler.js +204 -0
  82. package/dist/src/restoration-state-handler.js.map +1 -0
  83. package/dist/src/sort-filter-bar/alpha-bar.d.ts +1 -1
  84. package/dist/src/sort-filter-bar/alpha-bar.js +9 -2
  85. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  86. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  87. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  88. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  89. package/dist/src/sort-filter-bar/img/list.js +1 -1
  90. package/dist/src/sort-filter-bar/img/list.js.map +1 -1
  91. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  92. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  93. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  94. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +71 -14
  95. package/dist/src/sort-filter-bar/sort-filter-bar.js +499 -216
  96. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  97. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  98. package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
  99. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  100. package/dist/src/tiles/grid/account-tile.d.ts +1 -1
  101. package/dist/src/tiles/grid/account-tile.js +5 -5
  102. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  103. package/dist/src/tiles/grid/collection-tile.js +1 -2
  104. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  105. package/dist/src/tiles/grid/icons/views.d.ts +1 -1
  106. package/dist/src/tiles/grid/icons/views.js +2 -2
  107. package/dist/src/tiles/grid/icons/views.js.map +1 -1
  108. package/dist/src/tiles/grid/item-tile.d.ts +2 -2
  109. package/dist/src/tiles/grid/item-tile.js +58 -150
  110. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  111. package/dist/src/tiles/item-image.d.ts +21 -0
  112. package/dist/src/tiles/item-image.js +215 -0
  113. package/dist/src/tiles/item-image.js.map +1 -0
  114. package/dist/src/tiles/list/account-label.d.ts +1 -0
  115. package/dist/src/tiles/list/account-label.js +7 -0
  116. package/dist/src/tiles/list/account-label.js.map +1 -0
  117. package/dist/src/tiles/list/date-label.d.ts +1 -0
  118. package/dist/src/tiles/list/date-label.js +13 -0
  119. package/dist/src/tiles/list/date-label.js.map +1 -0
  120. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  121. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  122. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  123. package/dist/src/tiles/list/tile-list-compact.d.ts +12 -0
  124. package/dist/src/tiles/list/tile-list-compact.js +203 -6
  125. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  126. package/dist/src/tiles/list/tile-list.d.ts +35 -10
  127. package/dist/src/tiles/list/tile-list.js +368 -104
  128. package/dist/src/tiles/list/tile-list.js.map +1 -1
  129. package/dist/src/tiles/loading-tile.js +1 -42
  130. package/dist/src/tiles/loading-tile.js.map +1 -1
  131. package/dist/src/tiles/mediatype-icon.d.ts +9 -0
  132. package/dist/src/tiles/mediatype-icon.js +78 -0
  133. package/dist/src/tiles/mediatype-icon.js.map +1 -0
  134. package/dist/src/tiles/tile-dispatcher.d.ts +11 -4
  135. package/dist/src/tiles/tile-dispatcher.js +56 -19
  136. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  137. package/dist/src/utils/format-date.js +2 -2
  138. package/dist/src/utils/format-date.js.map +1 -1
  139. package/dist/src/waveform-thumbnail.d.ts +7 -0
  140. package/dist/src/waveform-thumbnail.js +106 -0
  141. package/dist/src/waveform-thumbnail.js.map +1 -0
  142. package/dist/{demo/icon-provider-icon.d.ts → src/waveform-view.d.ts} +0 -0
  143. package/dist/src/waveform-view.js +2 -0
  144. package/dist/src/waveform-view.js.map +1 -0
  145. package/dist/src/your-webcomponent.d.ts +8 -0
  146. package/dist/src/your-webcomponent.js +38 -0
  147. package/dist/src/your-webcomponent.js.map +1 -0
  148. package/dist/test/collection-browser.test.d.ts +1 -0
  149. package/dist/test/collection-browser.test.js +16 -2
  150. package/dist/test/collection-browser.test.js.map +1 -1
  151. package/dist/test/mediatype-config.test.d.ts +1 -0
  152. package/dist/test/mediatype-config.test.js +17 -0
  153. package/dist/test/mediatype-config.test.js.map +1 -0
  154. package/dist/{src/assets/img/icons/eye-hidden.d.ts → test/mediatype-icon.test.d.ts} +0 -0
  155. package/dist/test/mediatype-icon.test.js +3 -0
  156. package/dist/test/mediatype-icon.test.js.map +1 -0
  157. package/dist/test/mediatypeConfig.test.d.ts +1 -0
  158. package/dist/test/mediatypeConfig.test.js +17 -0
  159. package/dist/test/mediatypeConfig.test.js.map +1 -0
  160. package/dist/test/utils/format-date.test.js +1 -1
  161. package/dist/test/utils/format-date.test.js.map +1 -1
  162. package/dist/test/your-webcomponent.test.d.ts +1 -0
  163. package/dist/test/your-webcomponent.test.js +23 -0
  164. package/dist/test/your-webcomponent.test.js.map +1 -0
  165. package/index.ts +6 -0
  166. package/local.archive.org.cert +86 -0
  167. package/local.archive.org.key +27 -0
  168. package/package.json +9 -5
  169. package/src/assets/img/icons/chevron.ts +4 -0
  170. package/src/assets/img/icons/mediatype/account.ts +6 -4
  171. package/src/assets/img/icons/mediatype/audio.ts +7 -4
  172. package/src/assets/img/icons/mediatype/collection.ts +7 -4
  173. package/src/assets/img/icons/mediatype/data.ts +15 -0
  174. package/src/assets/img/icons/mediatype/etree.ts +10 -5
  175. package/src/assets/img/icons/mediatype/film.ts +2 -1
  176. package/src/assets/img/icons/mediatype/images.ts +9 -6
  177. package/src/assets/img/icons/mediatype/radio.ts +15 -0
  178. package/src/assets/img/icons/mediatype/software.ts +9 -6
  179. package/src/assets/img/icons/mediatype/texts.ts +9 -6
  180. package/src/assets/img/icons/mediatype/tv.ts +10 -5
  181. package/src/assets/img/icons/mediatype/video.ts +10 -6
  182. package/src/assets/img/icons/mediatype/web.ts +9 -6
  183. package/src/collection-browser.ts +529 -163
  184. package/src/collection-facets.ts +307 -205
  185. package/src/language-code-handler/language-code-handler.ts +64 -0
  186. package/src/language-code-handler/language-code-mapping.ts +564 -0
  187. package/src/mediatype/mediatype-config.ts +86 -0
  188. package/src/models.ts +141 -13
  189. package/src/restoration-state-handler.ts +266 -0
  190. package/src/sort-filter-bar/alpha-bar.ts +9 -3
  191. package/src/sort-filter-bar/img/compact.ts +5 -0
  192. package/src/sort-filter-bar/img/list.ts +1 -1
  193. package/src/sort-filter-bar/img/tile.ts +5 -0
  194. package/src/sort-filter-bar/sort-filter-bar.ts +557 -225
  195. package/src/tiles/collection-browser-loading-tile.ts +29 -0
  196. package/src/tiles/grid/account-tile.ts +1 -1
  197. package/src/tiles/grid/collection-tile.ts +1 -2
  198. package/src/tiles/grid/icons/views.ts +2 -2
  199. package/src/tiles/grid/item-tile.ts +57 -162
  200. package/src/tiles/item-image.ts +218 -0
  201. package/src/tiles/list/account-label.ts +6 -0
  202. package/src/tiles/list/date-label.ts +12 -0
  203. package/src/tiles/list/tile-list-compact-header.ts +77 -0
  204. package/src/tiles/list/tile-list-compact.ts +218 -0
  205. package/src/tiles/list/tile-list.ts +412 -107
  206. package/src/tiles/mediatype-icon.ts +75 -0
  207. package/src/tiles/tile-dispatcher.ts +66 -18
  208. package/src/utils/format-date.ts +2 -2
  209. package/test/collection-browser.test.ts +20 -1
  210. package/test/mediatype-config.test.ts +18 -0
  211. package/test/utils/format-date.test.ts +1 -1
  212. package/web-dev-server.config.mjs +3 -1
  213. package/dist/demo/icon-provider/icon-provider-icon.d.ts +0 -10
  214. package/dist/demo/icon-provider/icon-provider-icon.js +0 -32
  215. package/dist/demo/icon-provider/icon-provider-icon.js.map +0 -1
  216. package/dist/demo/icon-provider/icon-provider.d.ts +0 -10
  217. package/dist/demo/icon-provider/icon-provider.js +0 -9
  218. package/dist/demo/icon-provider/icon-provider.js.map +0 -1
  219. package/dist/demo/icon-provider-icon.js +0 -2
  220. package/dist/demo/icon-provider-icon.js.map +0 -1
  221. package/dist/demo/icon-provider.d.ts +0 -10
  222. package/dist/demo/icon-provider.js +0 -12
  223. package/dist/demo/icon-provider.js.map +0 -1
  224. package/dist/src/assets/img/icons/audio.d.ts +0 -1
  225. package/dist/src/assets/img/icons/audio.js +0 -9
  226. package/dist/src/assets/img/icons/audio.js.map +0 -1
  227. package/dist/src/assets/img/icons/collection.d.ts +0 -1
  228. package/dist/src/assets/img/icons/collection.js +0 -9
  229. package/dist/src/assets/img/icons/collection.js.map +0 -1
  230. package/dist/src/assets/img/icons/etree.d.ts +0 -1
  231. package/dist/src/assets/img/icons/etree.js +0 -9
  232. package/dist/src/assets/img/icons/etree.js.map +0 -1
  233. package/dist/src/assets/img/icons/eye-hidden.js +0 -2
  234. package/dist/src/assets/img/icons/eye-hidden.js.map +0 -1
  235. package/dist/src/assets/img/icons/images.d.ts +0 -1
  236. package/dist/src/assets/img/icons/images.js +0 -10
  237. package/dist/src/assets/img/icons/images.js.map +0 -1
  238. package/dist/src/assets/img/icons/mediatype/etree copy.d.ts +0 -1
  239. package/dist/src/assets/img/icons/mediatype/etree copy.js +0 -9
  240. package/dist/src/assets/img/icons/mediatype/etree copy.js.map +0 -1
  241. package/dist/src/assets/img/icons/software.d.ts +0 -1
  242. package/dist/src/assets/img/icons/software.js +0 -10
  243. package/dist/src/assets/img/icons/software.js.map +0 -1
  244. package/dist/src/assets/img/icons/texts.d.ts +0 -1
  245. package/dist/src/assets/img/icons/texts.js +0 -10
  246. package/dist/src/assets/img/icons/texts.js.map +0 -1
  247. package/dist/src/assets/img/icons/tv.d.ts +0 -1
  248. package/dist/src/assets/img/icons/tv.js +0 -9
  249. package/dist/src/assets/img/icons/tv.js.map +0 -1
  250. package/dist/src/assets/img/icons/video.d.ts +0 -1
  251. package/dist/src/assets/img/icons/video.js +0 -10
  252. package/dist/src/assets/img/icons/video.js.map +0 -1
  253. package/dist/src/assets/img/icons/web.d.ts +0 -1
  254. package/dist/src/assets/img/icons/web.js +0 -10
  255. package/dist/src/assets/img/icons/web.js.map +0 -1
  256. package/dist/src/search-handler.d.ts +0 -11
  257. package/dist/src/search-handler.js +0 -34
  258. package/dist/src/search-handler.js.map +0 -1
  259. package/src/mediatype-icon.ts +0 -83
  260. package/src/sort-filter-bar/img/grid.ts +0 -5
  261. package/src/tiles/loading-tile.ts +0 -70
@@ -0,0 +1,29 @@
1
+ import { css, html, LitElement } from 'lit';
2
+ import { customElement } from 'lit/decorators.js';
3
+
4
+ @customElement('collection-browser-loading-tile')
5
+ export class CollectionBrowserLoadingTile extends LitElement {
6
+ render() {
7
+ return html` <div id="container"></div> `;
8
+ }
9
+
10
+ static get styles() {
11
+ return css`
12
+ :host {
13
+ display: block;
14
+ height: 100%;
15
+ }
16
+
17
+ #container {
18
+ background: linear-gradient(
19
+ to right,
20
+ rgba(25, 69, 154, 0.1),
21
+ rgb(105, 161, 234, 0.2)
22
+ );
23
+ background-size: 100% 100%;
24
+ display: block;
25
+ height: 100%;
26
+ }
27
+ `;
28
+ }
29
+ }
@@ -8,7 +8,7 @@ import { reviewsIcon } from './icons/reviews';
8
8
  import { uploadIcon } from './icons/upload';
9
9
 
10
10
  @customElement('account-tile')
11
- export class UserTile extends LitElement {
11
+ export class AccountTile extends LitElement {
12
12
  @property({ type: Object }) model?: TileModel;
13
13
 
14
14
  render() {
@@ -1,10 +1,9 @@
1
- import { localized, msg } from '@lit/localize';
1
+ import { msg } from '@lit/localize';
2
2
  import { css, CSSResultGroup, html, LitElement } from 'lit';
3
3
  import { customElement, property } from 'lit/decorators.js';
4
4
  import { collectionIcon } from '../../assets/img/icons/mediatype/collection';
5
5
  import { TileModel } from '../../models';
6
6
 
7
- @localized()
8
7
  @customElement('collection-tile')
9
8
  export class CollectionTile extends LitElement {
10
9
  @property({ type: Object }) model?: TileModel;
@@ -1,6 +1,6 @@
1
- import { html } from 'lit';
1
+ import { svg } from 'lit';
2
2
 
3
- export default html`
3
+ export default svg`
4
4
  <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
5
5
  <path
6
6
  d="m98 50.5704143c-.2830293-.471515-.671154-1.1088947-1.1643742-1.9121392s-1.6003642-2.3617474-3.3214321-4.6755089c-1.7210678-2.3137614-3.522258-4.5325939-5.4035703-6.6564975-1.8813124-2.1239037-4.2828993-4.473133-7.2047606-7.0476881-2.9218612-2.5745551-5.8895067-4.7933876-8.9029363-6.6564976-3.0134295-1.86311-6.4628491-3.4330878-10.3482587-4.7099336-3.8854095-1.2768458-7.7822651-1.9142256-11.6905667-1.9121443-3.9083017.0020914-7.8051573.6154781-11.6905668 1.8401652-3.8854096 1.2246871-7.3702078 2.8301329-10.4543947 4.8163375-3.0841869 1.9862045-6.0278997 4.1695691-8.8311384 6.5500937s-5.2048256 4.7652219-7.2047605 7.1540919c-1.99993501 2.38887-3.75430043 4.5722346-5.26309632 6.5500938s-2.63883199 3.583305-3.39010829 4.8163374l-1.13003609 1.8401602c.2830293.4715149.67115403 1.1088946 1.16437421 1.9121391.49322017.8032445 1.5878776 2.3617475 3.28397229 4.6755089s3.47439274 4.521119 5.3348942 6.6220728c1.8605014 2.1009538 4.2506422 4.4387083 7.1704224 7.0132633 2.9197801 2.5745551 5.8874256 4.7819127 8.9029363 6.6220729 3.0155106 1.8401601 6.4774168 3.398663 10.3857184 4.6755088 3.9083017 1.2768458 7.8176438 1.9142256 11.7280266 1.9121443 3.9103827-.0020914 7.7957922-.6154781 11.6562286-1.8401652s7.3337886-2.818658 10.4200566-4.7819127 6.0299808-4.1351444 8.8311384-6.515669 5.2152311-4.7652219 7.2422203-7.1540919 3.8052873-4.5607597 5.3348942-6.515669c1.5296068-1.9549093 2.6721295-3.5488802 3.427568-4.7819127zm-24.5142913 0c0 6.467683-2.3079374 12.0152859-6.9238123 16.6428087s-10.1495139 6.9412843-16.600917 6.9412843c-6.4992683 0-12.0453939-2.3137615-16.6383767-6.9412843s-6.8894742-10.1751257-6.8894742-16.6428087 2.2964914-12.003811 6.8894742-16.608384 10.1391084-6.9068595 16.6383767-6.9068595c6.4534842 0 11.9871232 2.3022865 16.600917 6.9068595s6.9217312 10.140701 6.9238123 16.608384zm-23.5247293-10.552755c2.8261308 0 5.2870289 1.0619518 7.3826944 3.1858555 2.0956655 2.1239036 3.1434982 4.5795368 3.1434982 7.3668995 0 2.8332624-1.0478327 5.2888956-3.1434982 7.3668995-2.0956655 2.078004-4.5565636 3.1170059-7.3826944 3.1170059-2.873996 0-5.3348941-1.0264838-7.3826944-3.0794516-2.0478002-2.0529677-3.0717003-4.5200758-3.0717003-7.4013243 0-2.8332624 1.0239001-5.3003705 3.0717003-7.4013243 2.0478003-2.1009538 4.5086984-3.1514307 7.3826944-3.1514307z"
@@ -1,90 +1,74 @@
1
+ /* eslint-disable import/no-duplicates */
1
2
  import { css, CSSResultGroup, html, LitElement } from 'lit';
2
3
  import { customElement, property } from 'lit/decorators.js';
4
+
3
5
  import { TileModel } from '../../models';
4
6
  import { formatCount } from '../../utils/format-count';
5
7
 
6
- import '../../mediatype-icon';
7
-
8
8
  import { favoriteFilledIcon } from './icons/favorite-filled';
9
9
  import { reviewsIcon } from './icons/reviews';
10
10
  import viewsIcon from './icons/views';
11
11
 
12
+ import '../mediatype-icon';
13
+ import '../item-image';
14
+
12
15
  @customElement('item-tile')
13
16
  export class ItemTile extends LitElement {
14
17
  @property({ type: Object }) model?: TileModel;
15
18
 
16
19
  @property({ type: String }) baseNavigationUrl?: string;
17
20
 
18
- get renderItemImageView() {
19
- const imgSrcUrl = `${this.baseNavigationUrl}/services/img/${this.model?.identifier}`;
20
- const containsDeemphasize = this.model?.collections.includes('deemphasize');
21
- return !containsDeemphasize
22
- ? html`<div
23
- id="item-image"
24
- style="background-image:url(${imgSrcUrl})"
25
- ></div>`
26
- : html`<div id="item-image-box">
27
- <div
28
- id="item-image-deemphasize"
29
- style="background-image:url(${imgSrcUrl})"
30
- ></div>
31
- <div class="tile-action no-preview">Content may be inappropriate</div>
32
- </div>`;
33
- }
34
-
35
21
  render() {
36
- const imgSrcUrl = `${this.baseNavigationUrl}/services/img/${this.model?.collections[0]}`;
37
22
  const itemTitle = this.model?.title || '';
38
23
  const itemCreator = this.model?.creator || '-';
39
24
 
40
25
  return html`
41
26
  <div id="container">
42
- <div id="stealth-popup">
43
- <div id="collection-image" style="background-image:url(${imgSrcUrl})"></div>
44
- <p id="collection-name">${this.model?.collections[0]}</p>
45
- </div>
46
27
  <div id="title-image-container">
47
- <p id="item-title" title=${itemTitle}>
48
- ${this.model?.title}
49
- </p>
28
+ <h1 id="item-title" title=${itemTitle}>${this.model?.title}</h1>
50
29
  <div id="item-image-container">
51
- ${this.renderItemImageView}
30
+ <item-image
31
+ .model=${this.model}
32
+ .baseNavigationUrl=${this.baseNavigationUrl}
33
+ >
34
+ </item-image>
52
35
  </div>
53
36
  <div class="item-creator">
54
- <span id="text-by">By:</span>
55
- <span>${itemCreator}</span>
37
+ <div class="truncated">
38
+ <span><strong>By:&nbsp;</strong>${itemCreator}</span>
39
+ </div>
56
40
  </div>
57
41
  </div>
42
+
43
+ <div class="hr"></div>
44
+
58
45
  <div id="item-stats-container">
59
46
  <div id="stats-holder">
60
47
  <div class="col">
61
- <mediatype-icon mediatype="${
62
- this.model?.mediatype
63
- }" showText="true">
48
+ <mediatype-icon
49
+ .mediatype=${this.model?.mediatype}
50
+ .collection=${this.model?.collections}
51
+ style="--iconHeight:25px; --iconWidth:25px;"
52
+ >
53
+ </mediatype-icon>
64
54
  </div>
65
55
  <div class="col">
66
56
  ${viewsIcon}
67
- <p class="status-text">${formatCount(
68
- this.model?.viewCount,
69
- 'short',
70
- 'short'
71
- )}</p>
57
+ <p class="status-text">
58
+ ${formatCount(this.model?.viewCount, 'short', 'short')}
59
+ </p>
72
60
  </div>
73
61
  <div class="col">
74
62
  ${favoriteFilledIcon}
75
- <p class="status-text">${formatCount(
76
- this.model?.itemCount,
77
- 'short',
78
- 'short'
79
- )}</p>
63
+ <p class="status-text">
64
+ ${formatCount(this.model?.itemCount, 'short', 'short')}
65
+ </p>
80
66
  </div>
81
67
  <div class="col">
82
68
  ${reviewsIcon}
83
- <p class="status-text">${formatCount(
84
- this.model?.favCount,
85
- 'short',
86
- 'short'
87
- )}</p>
69
+ <p class="status-text">
70
+ ${formatCount(this.model?.favCount, 'short', 'short')}
71
+ </p>
88
72
  </div>
89
73
  </div>
90
74
  </div>
@@ -103,18 +87,18 @@ export class ItemTile extends LitElement {
103
87
  display: flex;
104
88
  flex-direction: column;
105
89
  height: 100%;
90
+ position: relative;
106
91
  }
107
92
 
108
93
  #title-image-container {
109
94
  display: flex;
110
95
  flex: 1;
111
96
  flex-direction: column;
112
- padding: 0.5rem;
97
+ padding: 0.5rem 0.5rem 0 0.5rem;
113
98
  }
114
99
 
115
100
  #item-title {
116
- font-weight: bold;
117
- color: #000000;
101
+ color: #2c2c2c;
118
102
  font-size: 1.6rem;
119
103
  text-align: center;
120
104
  margin-top: 0rem;
@@ -134,59 +118,6 @@ export class ItemTile extends LitElement {
134
118
  flex: 1;
135
119
  }
136
120
 
137
- #item-image {
138
- width: 16rem;
139
- height: 16rem;
140
- border-radius: 0.8rem;
141
- overflow: hidden;
142
- box-shadow: 1px 1px 2px 0px;
143
- object-fit: cover;
144
- background-position: center;
145
- background-size: cover;
146
- }
147
-
148
- #item-image-box {
149
- width: 16rem;
150
- height: 16rem;
151
- border-radius: 0.8rem;
152
- overflow: hidden;
153
- box-shadow: 1px 1px 2px 0px;
154
- border: 5px solid #0000000;
155
- position: relative;
156
- display: flex;
157
- }
158
-
159
- #item-image-deemphasize {
160
- width: 16rem;
161
- height: 16rem;
162
- object-fit: cover;
163
- background-position: center;
164
- background-size: cover;
165
- filter: blur(15px);
166
- position: absolute;
167
- z-index: 1;
168
- }
169
-
170
- .tile-action {
171
- border: 2px solid currentColor;
172
- border-radius: 1px;
173
- padding: 5px;
174
- font-weight: 500;
175
- width: auto;
176
- position: absolute;
177
- z-index: 2;
178
- display: flex;
179
- top: 5.5rem;
180
- }
181
-
182
- .no-preview {
183
- background-color: #fffecb;
184
- color: #000000;
185
- font-size: 1.4rem;
186
- line-height: 2rem;
187
- text-align: center;
188
- }
189
-
190
121
  .hidden {
191
122
  display: none;
192
123
  }
@@ -205,21 +136,33 @@ export class ItemTile extends LitElement {
205
136
  }
206
137
 
207
138
  .item-creator {
208
- color: #000000;
209
- display: -webkit-box;
210
- font-size: 1.4rem;
139
+ display: flex;
140
+ justify-content: center;
141
+ align-items: flex-end; /* Important to start text from bottom */
211
142
  height: 3rem;
212
- margin: 0px;
213
- overflow: hidden;
214
- padding: 0.5rem;
215
- text-align: center;
216
- text-overflow: ellipsis;
143
+ padding-top: 1rem;
144
+ }
145
+
146
+ .truncated {
147
+ flex: 1;
148
+ min-width: 0; /* Important for long words! */
149
+ }
150
+
151
+ .truncated span {
152
+ font-size: 1.4rem;
153
+ color: #2c2c2c;
217
154
  -webkit-line-clamp: 2;
155
+ text-overflow: ellipsis;
156
+ overflow: hidden;
157
+ display: -webkit-box;
218
158
  -webkit-box-orient: vertical;
159
+ word-wrap: break-word;
160
+ line-height: 2rem;
161
+ text-align: center;
219
162
  }
220
163
 
221
- #text-by {
222
- font-weight: bold;
164
+ .hr {
165
+ border: 0.5px solid #ccc;
223
166
  }
224
167
 
225
168
  #item-stats-container {
@@ -255,54 +198,6 @@ export class ItemTile extends LitElement {
255
198
  .col {
256
199
  width: 25%;
257
200
  }
258
-
259
- #container:hover #stealth-popup {
260
- margin-top: -30px;
261
- visiblity: visible;
262
- opacity: 1;
263
- }
264
-
265
- #stealth-popup {
266
- transition: margin-top 0.3s ease, opacity 0.3s ease;
267
- position: absolute;
268
- visiblity: hidden;
269
- z-index: 1;
270
- opacity: 0;
271
- color: black;
272
- margin-top: -15px;
273
- margin-left: -15px;
274
- text-align: left;
275
- display: flex;
276
- align-items: center;
277
- }
278
-
279
- #collection-image {
280
- transition: opacity 0.3s ease;
281
- width: 4.5rem;
282
- height: 4.5rem;
283
- border-radius: 22px;
284
- box-shadow: 0px 0px 10px #ccc;
285
- background-color: white;
286
- border: 2px solid #ddd;
287
- overflow: hidden;
288
- background-size: cover;
289
- background-repeat: no-repeat;
290
- background-position: center center;
291
- }
292
-
293
- #collection-name {
294
- width: 160px;
295
- line-height: 1;
296
- max-height: 25px;
297
- font-size: 12px;
298
- font-weight: bold;
299
- display: -webkit-box;
300
- -webkit-box-orient: vertical;
301
- -webkit-line-clamp: 2;
302
- overflow: hidden;
303
- bottom: 20px;
304
- padding: 1rem;
305
- }
306
201
  `;
307
202
  }
308
203
  }
@@ -0,0 +1,218 @@
1
+ import {
2
+ css,
3
+ CSSResultGroup,
4
+ html,
5
+ nothing,
6
+ PropertyValues,
7
+ LitElement,
8
+ } from 'lit';
9
+ import { customElement, property, query, state } from 'lit/decorators.js';
10
+ import { ifDefined } from 'lit/directives/if-defined.js';
11
+
12
+ import { TileModel } from '../models';
13
+
14
+ @customElement('item-image')
15
+ export class ItemImage extends LitElement {
16
+ @property({ type: Object }) model?: TileModel;
17
+
18
+ @property({ type: String }) baseNavigationUrl?: string;
19
+
20
+ @property({ type: Boolean }) isListTile = false;
21
+
22
+ @state() private isDeemphasize = false;
23
+
24
+ @query('.item-image') private itemImageWaveform!: HTMLImageElement;
25
+
26
+ protected updated(changed: PropertyValues): void {
27
+ if (changed.has('model')) {
28
+ this.setDeemphsize();
29
+ }
30
+ }
31
+
32
+ private setDeemphsize() {
33
+ this.isDeemphasize =
34
+ this.model?.collections.includes('deemphasize') ?? false;
35
+ }
36
+
37
+ render() {
38
+ return html`
39
+ <div class=${ifDefined(this.imageBoxClass)}>
40
+ ${this.model?.mediatype === 'audio'
41
+ ? this.waveformTemplate
42
+ : this.backgroundImageTemplate}
43
+ ${this.tileActionTemplate}
44
+ </div>
45
+ `;
46
+ }
47
+
48
+ private get imageSrc() {
49
+ return `${this.baseNavigationUrl}/services/img/${this.model?.identifier}`;
50
+ }
51
+
52
+ // Templates
53
+ private get backgroundImageTemplate() {
54
+ return html`
55
+ <div
56
+ class=${this.imageClass}
57
+ style="background-image:url(${this.imageSrc})"
58
+ ></div>
59
+ `;
60
+ }
61
+
62
+ private get waveformTemplate() {
63
+ return html`
64
+ <div class="box" id=${this.randomGradient}>
65
+ <img
66
+ class="item-image"
67
+ src="${this.imageSrc}"
68
+ alt="${ifDefined(this.model?.identifier)}"
69
+ @load=${this.onLoadItemImageCheck}
70
+ />
71
+ </div>
72
+ `;
73
+ }
74
+
75
+ private get tileActionTemplate() {
76
+ if (!this.isDeemphasize) {
77
+ return nothing;
78
+ }
79
+ return html`
80
+ <div class="tile-action no-preview">Content may be inappropriate</div>
81
+ `;
82
+ }
83
+
84
+ private onLoadItemImageCheck() {
85
+ const aspectRatio =
86
+ this.itemImageWaveform.naturalWidth /
87
+ this.itemImageWaveform.naturalHeight;
88
+ if (aspectRatio === 4) {
89
+ this.itemImageWaveform.classList.add('waveform');
90
+ }
91
+ }
92
+
93
+ // Classes
94
+ private get imageClass() {
95
+ return `item-image ${this.isDeemphasize ? 'deemphasize' : 'default'}`;
96
+ }
97
+
98
+ private get imageBoxClass() {
99
+ return this.isDeemphasize ? 'item-image-box' : undefined;
100
+ }
101
+
102
+ private get randomGradient() {
103
+ return `grad${Math.floor(Math.random() * (6 - 1) + 1)}`;
104
+ }
105
+
106
+ static get styles(): CSSResultGroup {
107
+ return css`
108
+ .item-image-box {
109
+ width: 16rem;
110
+ height: 16rem;
111
+ overflow: hidden;
112
+ position: relative;
113
+ box-shadow: 1px 1px 2px 0px;
114
+ display: flex;
115
+ }
116
+
117
+ .item-image {
118
+ width: 16rem;
119
+ height: 16rem;
120
+ object-fit: cover;
121
+ background-repeat: no-repeat;
122
+ background-position: center center;
123
+ position: relative;
124
+ -webkit-appearance: none;
125
+ overflow: visible;
126
+ }
127
+
128
+ .waveform {
129
+ mix-blend-mode: screen;
130
+ }
131
+
132
+ .default {
133
+ background-size: contain;
134
+ filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.8));
135
+ }
136
+
137
+ .deemphasize {
138
+ background-size: cover;
139
+ filter: blur(15px);
140
+ z-index: 1;
141
+ }
142
+
143
+ .tile-action {
144
+ border: 1px solid currentColor;
145
+ border-radius: 1px;
146
+ padding: 5px;
147
+ font-weight: 500;
148
+ width: auto;
149
+ position: absolute;
150
+ z-index: 2;
151
+ display: flex;
152
+ top: 5.5rem;
153
+ }
154
+
155
+ .no-preview {
156
+ background-color: #fffecb;
157
+ color: #2c2c2c;
158
+ font-size: 1.4rem;
159
+ line-height: 2rem;
160
+ text-align: center;
161
+ }
162
+
163
+ #grad1 {
164
+ background: linear-gradient(
165
+ hsl(300, 80%, 55%),
166
+ hsl(330, 80%, 33%) 35%,
167
+ hsl(330, 80%, 22%) 70%,
168
+ hsl(0, 0%, 0%)
169
+ );
170
+ }
171
+
172
+ #grad2 {
173
+ background: linear-gradient(
174
+ hsl(200, 80%, 55%),
175
+ hsl(230, 80%, 33%) 35%,
176
+ hsl(230, 80%, 22%) 70%,
177
+ hsl(0, 0%, 0%)
178
+ );
179
+ }
180
+
181
+ #grad3 {
182
+ background: linear-gradient(
183
+ hsl(160, 80%, 55%),
184
+ hsl(190, 80%, 33%) 35%,
185
+ hsl(190, 80%, 22%) 70%,
186
+ hsl(0, 0%, 0%)
187
+ );
188
+ }
189
+
190
+ #grad4 {
191
+ background: linear-gradient(
192
+ hsl(250, 80%, 55%),
193
+ hsl(280, 80%, 33%) 35%,
194
+ hsl(280, 80%, 22%) 70%,
195
+ hsl(0, 0%, 0%)
196
+ );
197
+ }
198
+
199
+ #grad5 {
200
+ background: linear-gradient(
201
+ hsl(280, 80%, 55%),
202
+ hsl(310, 80%, 33%) 35%,
203
+ hsl(310, 80%, 22%) 70%,
204
+ hsl(0, 0%, 0%)
205
+ );
206
+ }
207
+
208
+ #grad6 {
209
+ background: linear-gradient(
210
+ hsl(340, 80%, 55%),
211
+ hsl(0, 80%, 33%) 35%,
212
+ hsl(0, 80%, 22%) 70%,
213
+ hsl(0, 0%, 0%)
214
+ );
215
+ }
216
+ `;
217
+ }
218
+ }
@@ -0,0 +1,6 @@
1
+ export function accountLabel(date: Date | undefined): string {
2
+ if (!date) {
3
+ return '';
4
+ }
5
+ return `Archivist since ${date.getFullYear()}`;
6
+ }
@@ -0,0 +1,12 @@
1
+ export function dateLabel(sortField: string | undefined): string {
2
+ switch (sortField) {
3
+ case 'date':
4
+ return 'Published';
5
+ case 'reviewdate':
6
+ return 'Reviewed';
7
+ case 'addeddate':
8
+ return 'Added';
9
+ default:
10
+ return 'Archived';
11
+ }
12
+ }
@@ -0,0 +1,77 @@
1
+ import { css, html, LitElement } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+ import { SortParam } from '@internetarchive/search-service';
4
+ import { dateLabel } from './date-label';
5
+ import { TileModel } from '../../models';
6
+
7
+ @customElement('tile-list-compact-header')
8
+ export class TileListCompactHeader extends LitElement {
9
+ @property({ type: Object }) model?: TileModel;
10
+
11
+ @property({ type: Number }) currentWidth?: number;
12
+
13
+ @property({ type: Object }) sortParam: SortParam | null = null;
14
+
15
+ @property({ type: Number }) mobileBreakpoint?: number;
16
+
17
+ render() {
18
+ return html`
19
+ <div id="list-line-header" class="${this.classSize}">
20
+ <div id="thumb"></div>
21
+ <div id="title">Title</div>
22
+ <div id="creator">Creator</div>
23
+ <div id="date">${dateLabel(this.sortParam?.field)}</div>
24
+ <div id="icon"></div>
25
+ <div id="views">Views</div>
26
+ </div>
27
+ `;
28
+ }
29
+
30
+ private get classSize(): string {
31
+ if (
32
+ this.mobileBreakpoint &&
33
+ this.currentWidth &&
34
+ this.currentWidth < this.mobileBreakpoint
35
+ ) {
36
+ return 'mobile';
37
+ }
38
+ return 'desktop';
39
+ }
40
+
41
+ static get styles() {
42
+ return css`
43
+ html {
44
+ font-size: unset;
45
+ }
46
+
47
+ div {
48
+ font-size: 14px;
49
+ font-weight: bold;
50
+ line-height: 20px;
51
+ }
52
+
53
+ .mobile #views {
54
+ display: none;
55
+ }
56
+
57
+ #views {
58
+ text-align: right;
59
+ }
60
+
61
+ #list-line-header {
62
+ display: grid;
63
+ column-gap: 10px;
64
+ align-items: flex-end;
65
+ padding-bottom: 2px;
66
+ }
67
+
68
+ #list-line-header.mobile {
69
+ grid-template-columns: 36px 3fr 2fr 91px;
70
+ }
71
+
72
+ #list-line-header.desktop {
73
+ grid-template-columns: 51px 3fr 2fr 100px 20px 60px;
74
+ }
75
+ `;
76
+ }
77
+ }