@internetarchive/collection-browser 0.2.3 → 0.2.4-alpha.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 (49) hide show
  1. package/dist/src/{tiles/grid → assets/img}/icons/favorite-filled.d.ts +0 -0
  2. package/dist/src/{tiles/grid → assets/img}/icons/favorite-filled.js +0 -0
  3. package/dist/src/{tiles/grid → assets/img}/icons/favorite-filled.js.map +1 -1
  4. package/dist/src/{tiles/grid → assets/img}/icons/reviews.d.ts +0 -0
  5. package/dist/src/{tiles/grid → assets/img}/icons/reviews.js +0 -0
  6. package/dist/src/{tiles/grid → assets/img}/icons/reviews.js.map +1 -1
  7. package/dist/src/{tiles/grid → assets/img}/icons/upload.d.ts +0 -0
  8. package/dist/src/{tiles/grid → assets/img}/icons/upload.js +0 -0
  9. package/dist/src/{tiles/grid → assets/img}/icons/upload.js.map +1 -1
  10. package/dist/src/assets/img/icons/views.d.ts +1 -0
  11. package/dist/src/{tiles/grid → assets/img}/icons/views.js +1 -1
  12. package/dist/src/assets/img/icons/views.js.map +1 -0
  13. package/dist/src/mediatype/mediatype-config.js +10 -10
  14. package/dist/src/mediatype/mediatype-config.js.map +1 -1
  15. package/dist/src/tiles/grid/account-tile.d.ts +1 -0
  16. package/dist/src/tiles/grid/account-tile.js +31 -68
  17. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  18. package/dist/src/tiles/grid/item-tile.d.ts +1 -0
  19. package/dist/src/tiles/grid/item-tile.js +43 -91
  20. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  21. package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
  22. package/dist/src/tiles/grid/tile-stats.js +106 -0
  23. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  24. package/dist/src/tiles/list/tile-list-compact.d.ts +0 -1
  25. package/dist/src/tiles/list/tile-list-compact.js +0 -9
  26. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  27. package/dist/src/tiles/list/tile-list.d.ts +0 -1
  28. package/dist/src/tiles/list/tile-list.js +0 -9
  29. package/dist/src/tiles/list/tile-list.js.map +1 -1
  30. package/dist/src/tiles/mediatype-icon.js +5 -1
  31. package/dist/src/tiles/mediatype-icon.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/{tiles/grid → assets/img}/icons/favorite-filled.ts +0 -0
  34. package/src/{tiles/grid → assets/img}/icons/reviews.ts +0 -0
  35. package/src/{tiles/grid → assets/img}/icons/upload.ts +0 -0
  36. package/src/{tiles/grid → assets/img}/icons/views.ts +1 -1
  37. package/src/mediatype/mediatype-config.ts +10 -10
  38. package/src/tiles/grid/account-tile.ts +30 -67
  39. package/src/tiles/grid/item-tile.ts +46 -94
  40. package/src/tiles/grid/tile-stats.ts +104 -0
  41. package/src/tiles/list/tile-list-compact.ts +0 -9
  42. package/src/tiles/list/tile-list.ts +0 -9
  43. package/src/tiles/mediatype-icon.ts +5 -1
  44. package/dist/src/tiles/grid/icons/account.d.ts +0 -1
  45. package/dist/src/tiles/grid/icons/account.js +0 -12
  46. package/dist/src/tiles/grid/icons/account.js.map +0 -1
  47. package/dist/src/tiles/grid/icons/views.d.ts +0 -2
  48. package/dist/src/tiles/grid/icons/views.js.map +0 -1
  49. package/src/tiles/grid/icons/account.ts +0 -12
@@ -1,16 +1,13 @@
1
1
  /* eslint-disable import/no-duplicates */
2
2
  import { css, CSSResultGroup, html, LitElement, nothing } from 'lit';
3
3
  import { customElement, property } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
5
 
5
6
  import { TileModel } from '../../models';
6
- import { formatCount } from '../../utils/format-count';
7
-
8
- import { favoriteFilledIcon } from './icons/favorite-filled';
9
- import { reviewsIcon } from './icons/reviews';
10
- import viewsIcon from './icons/views';
11
7
 
12
8
  import '../mediatype-icon';
13
9
  import '../item-image';
10
+ import './tile-stats';
14
11
 
15
12
  @customElement('item-tile')
16
13
  export class ItemTile extends LitElement {
@@ -19,84 +16,74 @@ export class ItemTile extends LitElement {
19
16
  @property({ type: String }) baseImageUrl?: string;
20
17
 
21
18
  render() {
22
- const itemTitle = this.model?.title || nothing;
19
+ const itemTitle = this.model?.title;
23
20
  const itemCreator = this.model?.creator;
24
21
  return html`
25
22
  <div id="container">
26
- <div id="title-image-container">
27
- <h1 id="item-title" title=${itemTitle}>${itemTitle}</h1>
28
- <div id="item-image-container">
29
- <item-image .model=${this.model} .baseImageUrl=${this.baseImageUrl}>
30
- </item-image>
31
- </div>
32
- <div class="item-creator">
33
- <div class="truncated">
34
- ${itemCreator
35
- ? html`<span>by&nbsp;${itemCreator}</span>`
36
- : nothing}
37
- </div>
23
+ <div id="inner-wrapper">
24
+ <div class="title-wrapper">
25
+ <h1 id="item-title" title=${ifDefined(itemTitle)}>${itemTitle}</h1>
38
26
  </div>
39
- </div>
40
27
 
41
- <div class="hr"></div>
42
-
43
- <div id="item-stats-container">
44
- <div id="stats-holder">
45
- <div class="col">
46
- <mediatype-icon
47
- .mediatype=${this.model?.mediatype}
48
- .collection=${this.model?.collections}
49
- style="--iconHeight:25px; --iconWidth:25px;"
50
- >
51
- </mediatype-icon>
52
- </div>
53
- <div class="col">
54
- ${viewsIcon}
55
- <p class="status-text">
56
- ${formatCount(this.model?.viewCount, 'short', 'short')}
57
- </p>
28
+ <div class="image-wrapper">
29
+ <div id="item-image-container">
30
+ <item-image
31
+ .model=${this.model}
32
+ .baseImageUrl=${this.baseImageUrl}>
33
+ </item-image>
58
34
  </div>
59
- <div class="col">
60
- ${favoriteFilledIcon}
61
- <p class="status-text">
62
- ${formatCount(this.model?.itemCount, 'short', 'short')}
63
- </p>
64
- </div>
65
- <div class="col">
66
- ${reviewsIcon}
67
- <p class="status-text">
68
- ${formatCount(this.model?.favCount, 'short', 'short')}
69
- </p>
35
+ <div class="item-creator">
36
+ <div class="truncated">
37
+ ${
38
+ itemCreator
39
+ ? html`<span>by&nbsp;${itemCreator}</span>`
40
+ : nothing
41
+ }
42
+ </div>
70
43
  </div>
71
44
  </div>
72
45
  </div>
46
+
47
+ <tile-stats
48
+ .mediatype=${this.model?.mediatype}
49
+ .viewCount=${this.model?.viewCount}
50
+ .favCount=${this.model?.favCount}
51
+ .commentCount=${this.model?.commentCount}>
52
+ </tile-stats>
53
+ </div>
73
54
  </div>
74
55
  `;
75
56
  }
76
57
 
77
58
  static get styles(): CSSResultGroup {
78
- const cornerRadiusCss = css`var(--collectionTileCornerRadius, 4px)`;
79
-
80
59
  return css`
81
60
  #container {
82
61
  background-color: #ffffff;
83
- border-radius: ${cornerRadiusCss};
62
+ border-radius: var(--collectionTileCornerRadius, 4px);
84
63
  box-shadow: 1px 1px 2px 0px;
85
64
  display: flex;
86
65
  flex-direction: column;
87
66
  height: 100%;
88
- position: relative;
89
67
  }
90
68
 
91
- #title-image-container {
92
- display: flex;
93
- flex: 1;
94
- flex-direction: column;
95
- padding: 0.5rem 0.5rem 0 0.5rem;
69
+ #inner-wrapper {
70
+ padding-top: 5px;
71
+ padding-left: 5px;
72
+ padding-right: 5px;
73
+ }
74
+
75
+ .title-wrapper {
76
+ flex-shrink: 0;
77
+ }
78
+
79
+ .image-wrapper {
80
+ flex-grow: 1;
96
81
  }
97
82
 
98
83
  #item-title {
84
+ flex: 1;
99
85
  color: #2c2c2c;
86
+ min-width: 0; /* Important for long words! */
100
87
  font-size: 1.6rem;
101
88
  text-align: center;
102
89
  margin-top: 0rem;
@@ -104,6 +91,7 @@ export class ItemTile extends LitElement {
104
91
  overflow: hidden;
105
92
  text-overflow: ellipsis;
106
93
  display: -webkit-box;
94
+ word-wrap: break-word;
107
95
  -webkit-line-clamp: 2;
108
96
  -webkit-box-orient: vertical;
109
97
  line-height: 2rem;
@@ -114,6 +102,7 @@ export class ItemTile extends LitElement {
114
102
  display: flex;
115
103
  justify-content: center;
116
104
  flex: 1;
105
+ height: 16rem;
117
106
  }
118
107
 
119
108
  .hidden {
@@ -139,6 +128,7 @@ export class ItemTile extends LitElement {
139
128
  align-items: flex-end; /* Important to start text from bottom */
140
129
  height: 3rem;
141
130
  padding-top: 1rem;
131
+ margin-top: 5px;
142
132
  }
143
133
 
144
134
  .truncated {
@@ -158,44 +148,6 @@ export class ItemTile extends LitElement {
158
148
  line-height: 2rem;
159
149
  text-align: center;
160
150
  }
161
-
162
- .hr {
163
- border: 0.5px solid #ccc;
164
- }
165
-
166
- #item-stats-container {
167
- align-items: center;
168
- display: flex;
169
- height: 5.5rem;
170
- padding-left: 1rem;
171
- padding-right: 0.5rem;
172
- }
173
-
174
- #stats-holder {
175
- align-items: center;
176
- display: flex;
177
- flex: 1;
178
- justify-content: space-evenly;
179
- text-align: center;
180
- width: 100%;
181
- }
182
-
183
- svg {
184
- height: 10px;
185
- width: 10px;
186
- }
187
-
188
- .status-text {
189
- font-size: 14px;
190
- color: #2c2c2c;
191
- margin: auto;
192
- display: block;
193
- text-align: center;
194
- }
195
-
196
- .col {
197
- width: 25%;
198
- }
199
151
  `;
200
152
  }
201
153
  }
@@ -0,0 +1,104 @@
1
+ import { css, CSSResultGroup, html, LitElement } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+
4
+ import { favoriteFilledIcon } from '../../assets/img/icons/favorite-filled';
5
+ import { reviewsIcon } from '../../assets/img/icons/reviews';
6
+ import { uploadIcon } from '../../assets/img/icons/upload';
7
+ import { viewsIcon } from '../../assets/img/icons/views';
8
+
9
+ import { formatCount } from '../../utils/format-count';
10
+
11
+ @customElement('tile-stats')
12
+ export class TileStats extends LitElement {
13
+ @property({ type: String }) mediatype?: string;
14
+
15
+ @property({ type: Number }) itemCount?: number;
16
+
17
+ @property({ type: Number }) viewCount?: number;
18
+
19
+ @property({ type: Number }) favCount?: number;
20
+
21
+ @property({ type: Number }) commentCount?: number;
22
+
23
+ render() {
24
+ console.log('tile-stats here')
25
+ return html`
26
+ <div class="stats-wrapper">
27
+ <div id="stats-holder">
28
+ <div class="col">
29
+ <mediatype-icon
30
+ .mediatype=${this.mediatype}
31
+ style="--iconHeight:25px; --iconWidth:25px;"
32
+ >
33
+ </mediatype-icon>
34
+ </div>
35
+ <div class="col">
36
+ ${this.mediatype === 'account' ? uploadIcon : viewsIcon}
37
+ <p class="status-text">
38
+ ${formatCount(
39
+ this.mediatype === 'account' ? this.itemCount : this.viewCount,
40
+ 'short',
41
+ 'short'
42
+ )}
43
+ </p>
44
+ </div>
45
+ <div class="col">
46
+ ${favoriteFilledIcon}
47
+ <p class="status-text">
48
+ ${formatCount(this.favCount, 'short', 'short')}
49
+ </p>
50
+ </div>
51
+ <div class="col">
52
+ ${reviewsIcon}
53
+ <p class="status-text">
54
+ ${formatCount(this.commentCount, 'short', 'short')}
55
+ </p>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ `;
60
+ }
61
+
62
+ static get styles(): CSSResultGroup {
63
+ return css`
64
+ .stats-wrapper {
65
+ height: 35px;
66
+ flex-shrink: 0;
67
+ }
68
+
69
+ #stats-holder {
70
+ border-top: 1px solid #bbb;
71
+ align-items: center;
72
+ display: flex;
73
+ flex: 1;
74
+ justify-content: space-evenly;
75
+ text-align: center;
76
+ width: 100%;
77
+ padding-top: 5px;
78
+ padding-bottom: 5px;
79
+ }
80
+
81
+ .col {
82
+ width: 25%;
83
+ height: 25px;
84
+ }
85
+
86
+ svg {
87
+ height: 10px;
88
+ width: 10px;
89
+ display: block;
90
+ margin: auto;
91
+ }
92
+
93
+ .status-text {
94
+ font-size: 14px;
95
+ height: 15px;
96
+ color: #2c2c2c;
97
+ line-height: 20px;
98
+ margin: auto;
99
+ display: block;
100
+ text-align: center;
101
+ }
102
+ `;
103
+ }
104
+ }
@@ -45,7 +45,6 @@ export class TileListCompact extends LitElement {
45
45
  <mediatype-icon
46
46
  .mediatype=${this.model?.mediatype}
47
47
  .collections=${this.model?.collections}
48
- style="--iconCustomFillColor: ${ifDefined(this.collectionColor)}"
49
48
  >
50
49
  </mediatype-icon>
51
50
  </div>
@@ -56,14 +55,6 @@ export class TileListCompact extends LitElement {
56
55
  `;
57
56
  }
58
57
 
59
- // Only in list, not tile
60
- private get collectionColor() {
61
- if (this.model?.mediatype !== 'collection') {
62
- return undefined;
63
- }
64
- return '#4666FF';
65
- }
66
-
67
58
  private get imageTemplate() {
68
59
  if (!this.model?.identifier) {
69
60
  return nothing;
@@ -159,21 +159,12 @@ export class TileList extends LitElement {
159
159
  <mediatype-icon
160
160
  .mediatype=${this.model?.mediatype}
161
161
  .collections=${this.model?.collections}
162
- style="--iconCustomFillColor: ${ifDefined(this.collectionColor)}"
163
162
  >
164
163
  </mediatype-icon>
165
164
  </div>
166
165
  `;
167
166
  }
168
167
 
169
- // Only in list, not tile
170
- private get collectionColor() {
171
- if (this.model?.mediatype !== 'collection') {
172
- return undefined;
173
- }
174
- return '#4666FF';
175
- }
176
-
177
168
  private get titleTemplate() {
178
169
  if (!this.model?.title) {
179
170
  return nothing;
@@ -50,6 +50,10 @@ export class MediatypeIcon extends LitElement {
50
50
 
51
51
  static get styles(): CSSResultGroup {
52
52
  return css`
53
+ #icon {
54
+ height: var(--iconHeight, 25px);
55
+ }
56
+
53
57
  .status-text {
54
58
  font-size: 14px;
55
59
  color: #2c2c2c;
@@ -68,7 +72,7 @@ export class MediatypeIcon extends LitElement {
68
72
  }
69
73
 
70
74
  .fill-color {
71
- fill: var(--iconCustomFillColor, var(--iconFillColor, '#000000'));
75
+ fill: var(--iconFillColor, '#000000');
72
76
  }
73
77
  `;
74
78
  }
@@ -1 +0,0 @@
1
- export declare const accountIcon: import("lit-html").TemplateResult<2>;
@@ -1,12 +0,0 @@
1
- import { svg } from 'lit';
2
- export const accountIcon = svg `
3
- <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
4
- <path
5
- d="m89.6854559 79.6500588c1.7300364 6.4823648 2.180423 13.3122689 3.3145441 20.3499412h-86c.5683151-15.8558542 2.98334063-30.7849367 15.1676149-41.6581341 22.9948067-20.518674 59.250299-9.0032844 67.517841 21.3081929zm-40.0998307-79.6500588c10.872402.0493248 19.9700408 9.25722341 19.917959 20.1421788-.0829413 11.042868-8.9616237 19.8492523-20.0602807 19.8578212-11.1181198 0-19.9397193-8.7904706-19.9397193-19.8908727-.0327543-11.11998815 9.0125781-20.17487063 20.082041-20.1091273z"
6
- fill="#333"
7
- fill-rule="evenodd"
8
- />
9
- <title>Icon of a person</title>
10
- </svg>
11
- `;
12
- //# sourceMappingURL=account.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../../src/tiles/grid/icons/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;CAS7B,CAAC","sourcesContent":["import { svg } from 'lit';\n\nexport const accountIcon = svg`\n <svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m89.6854559 79.6500588c1.7300364 6.4823648 2.180423 13.3122689 3.3145441 20.3499412h-86c.5683151-15.8558542 2.98334063-30.7849367 15.1676149-41.6581341 22.9948067-20.518674 59.250299-9.0032844 67.517841 21.3081929zm-40.0998307-79.6500588c10.872402.0493248 19.9700408 9.25722341 19.917959 20.1421788-.0829413 11.042868-8.9616237 19.8492523-20.0602807 19.8578212-11.1181198 0-19.9397193-8.7904706-19.9397193-19.8908727-.0327543-11.11998815 9.0125781-20.17487063 20.082041-20.1091273z\"\n fill=\"#333\"\n fill-rule=\"evenodd\"\n />\n <title>Icon of a person</title>\n </svg>\n`;\n"]}
@@ -1,2 +0,0 @@
1
- declare const _default: import("lit-html").TemplateResult<2>;
2
- export default _default;
@@ -1 +0,0 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../../src/tiles/grid/icons/views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;CAQjB,CAAC","sourcesContent":["import { svg } from 'lit';\n\nexport default svg`\n <svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n 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\"\n fill=\"#333\"\n />\n <title>Eye icon</title>\n </svg>\n`;\n"]}
@@ -1,12 +0,0 @@
1
- import { svg } from 'lit';
2
-
3
- export const accountIcon = svg`
4
- <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
5
- <path
6
- d="m89.6854559 79.6500588c1.7300364 6.4823648 2.180423 13.3122689 3.3145441 20.3499412h-86c.5683151-15.8558542 2.98334063-30.7849367 15.1676149-41.6581341 22.9948067-20.518674 59.250299-9.0032844 67.517841 21.3081929zm-40.0998307-79.6500588c10.872402.0493248 19.9700408 9.25722341 19.917959 20.1421788-.0829413 11.042868-8.9616237 19.8492523-20.0602807 19.8578212-11.1181198 0-19.9397193-8.7904706-19.9397193-19.8908727-.0327543-11.11998815 9.0125781-20.17487063 20.082041-20.1091273z"
7
- fill="#333"
8
- fill-rule="evenodd"
9
- />
10
- <title>Icon of a person</title>
11
- </svg>
12
- `;