@internetarchive/collection-browser 0.0.1-alpha.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 (203) hide show
  1. package/.editorconfig +29 -0
  2. package/.github/workflows/ci.yml +26 -0
  3. package/.husky/pre-commit +4 -0
  4. package/LICENSE +661 -0
  5. package/README.md +68 -0
  6. package/demo/app-root.ts +414 -0
  7. package/demo/index.html +26 -0
  8. package/dist/demo/app-root.d.ts +43 -0
  9. package/dist/demo/app-root.js +385 -0
  10. package/dist/demo/app-root.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.js +3 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/src/assets/img/icons/audio.d.ts +1 -0
  15. package/dist/src/assets/img/icons/audio.js +9 -0
  16. package/dist/src/assets/img/icons/audio.js.map +1 -0
  17. package/dist/src/assets/img/icons/collection.d.ts +1 -0
  18. package/dist/src/assets/img/icons/collection.js +9 -0
  19. package/dist/src/assets/img/icons/collection.js.map +1 -0
  20. package/dist/src/assets/img/icons/etree.d.ts +1 -0
  21. package/dist/src/assets/img/icons/etree.js +9 -0
  22. package/dist/src/assets/img/icons/etree.js.map +1 -0
  23. package/dist/src/assets/img/icons/images.d.ts +1 -0
  24. package/dist/src/assets/img/icons/images.js +10 -0
  25. package/dist/src/assets/img/icons/images.js.map +1 -0
  26. package/dist/src/assets/img/icons/mediatype/account.d.ts +2 -0
  27. package/dist/src/assets/img/icons/mediatype/account.js +12 -0
  28. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  29. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  30. package/dist/src/assets/img/icons/mediatype/audio.js +11 -0
  31. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  32. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  33. package/dist/src/assets/img/icons/mediatype/collection.js +9 -0
  34. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  35. package/dist/src/assets/img/icons/mediatype/etree copy.d.ts +1 -0
  36. package/dist/src/assets/img/icons/mediatype/etree copy.js +9 -0
  37. package/dist/src/assets/img/icons/mediatype/etree copy.js.map +1 -0
  38. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  39. package/dist/src/assets/img/icons/mediatype/etree.js +9 -0
  40. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  41. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  42. package/dist/src/assets/img/icons/mediatype/film.js +13 -0
  43. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  44. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  45. package/dist/src/assets/img/icons/mediatype/images.js +10 -0
  46. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  47. package/dist/src/assets/img/icons/mediatype/livemusic.d.ts +1 -0
  48. package/dist/src/assets/img/icons/mediatype/livemusic.js +7 -0
  49. package/dist/src/assets/img/icons/mediatype/livemusic.js.map +1 -0
  50. package/dist/src/assets/img/icons/mediatype/photos.d.ts +1 -0
  51. package/dist/src/assets/img/icons/mediatype/photos.js +7 -0
  52. package/dist/src/assets/img/icons/mediatype/photos.js.map +1 -0
  53. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  54. package/dist/src/assets/img/icons/mediatype/software.js +10 -0
  55. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  56. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  57. package/dist/src/assets/img/icons/mediatype/texts.js +10 -0
  58. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  59. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  60. package/dist/src/assets/img/icons/mediatype/tv.js +9 -0
  61. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  62. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  63. package/dist/src/assets/img/icons/mediatype/video.js +10 -0
  64. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  65. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  66. package/dist/src/assets/img/icons/mediatype/web.js +10 -0
  67. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  68. package/dist/src/assets/img/icons/software.d.ts +1 -0
  69. package/dist/src/assets/img/icons/software.js +10 -0
  70. package/dist/src/assets/img/icons/software.js.map +1 -0
  71. package/dist/src/assets/img/icons/texts.d.ts +1 -0
  72. package/dist/src/assets/img/icons/texts.js +10 -0
  73. package/dist/src/assets/img/icons/texts.js.map +1 -0
  74. package/dist/src/assets/img/icons/tv.d.ts +1 -0
  75. package/dist/src/assets/img/icons/tv.js +9 -0
  76. package/dist/src/assets/img/icons/tv.js.map +1 -0
  77. package/dist/src/assets/img/icons/video.d.ts +1 -0
  78. package/dist/src/assets/img/icons/video.js +10 -0
  79. package/dist/src/assets/img/icons/video.js.map +1 -0
  80. package/dist/src/assets/img/icons/web.d.ts +1 -0
  81. package/dist/src/assets/img/icons/web.js +10 -0
  82. package/dist/src/assets/img/icons/web.js.map +1 -0
  83. package/dist/src/circular-activity-indicator.d.ts +5 -0
  84. package/dist/src/circular-activity-indicator.js +66 -0
  85. package/dist/src/circular-activity-indicator.js.map +1 -0
  86. package/dist/src/collection-browser.d.ts +151 -0
  87. package/dist/src/collection-browser.js +697 -0
  88. package/dist/src/collection-browser.js.map +1 -0
  89. package/dist/src/collection-facets.d.ts +34 -0
  90. package/dist/src/collection-facets.js +245 -0
  91. package/dist/src/collection-facets.js.map +1 -0
  92. package/dist/src/mediatype-icon.d.ts +9 -0
  93. package/dist/src/mediatype-icon.js +89 -0
  94. package/dist/src/mediatype-icon.js.map +1 -0
  95. package/dist/src/models.d.ts +23 -0
  96. package/dist/src/models.js +2 -0
  97. package/dist/src/models.js.map +1 -0
  98. package/dist/src/sort-filter-bar/alpha-bar.d.ts +10 -0
  99. package/dist/src/sort-filter-bar/alpha-bar.js +88 -0
  100. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  101. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +24 -0
  102. package/dist/src/sort-filter-bar/sort-filter-bar.js +257 -0
  103. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  104. package/dist/src/tiles/grid/account-tile.d.ts +7 -0
  105. package/dist/src/tiles/grid/account-tile.js +144 -0
  106. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  107. package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
  108. package/dist/src/tiles/grid/collection-tile.js +160 -0
  109. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  110. package/dist/src/tiles/grid/icons/account.d.ts +1 -0
  111. package/dist/src/tiles/grid/icons/account.js +12 -0
  112. package/dist/src/tiles/grid/icons/account.js.map +1 -0
  113. package/dist/src/tiles/grid/icons/favorite-filled.d.ts +1 -0
  114. package/dist/src/tiles/grid/icons/favorite-filled.js +11 -0
  115. package/dist/src/tiles/grid/icons/favorite-filled.js.map +1 -0
  116. package/dist/src/tiles/grid/icons/reviews.d.ts +1 -0
  117. package/dist/src/tiles/grid/icons/reviews.js +11 -0
  118. package/dist/src/tiles/grid/icons/reviews.js.map +1 -0
  119. package/dist/src/tiles/grid/icons/upload.d.ts +1 -0
  120. package/dist/src/tiles/grid/icons/upload.js +12 -0
  121. package/dist/src/tiles/grid/icons/upload.js.map +1 -0
  122. package/dist/src/tiles/grid/icons/views.d.ts +2 -0
  123. package/dist/src/tiles/grid/icons/views.js +11 -0
  124. package/dist/src/tiles/grid/icons/views.js.map +1 -0
  125. package/dist/src/tiles/grid/item-tile.d.ts +9 -0
  126. package/dist/src/tiles/grid/item-tile.js +240 -0
  127. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  128. package/dist/src/tiles/list/tile-list-compact.d.ts +16 -0
  129. package/dist/src/tiles/list/tile-list-compact.js +125 -0
  130. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  131. package/dist/src/tiles/list/tile-list-detail.d.ts +17 -0
  132. package/dist/src/tiles/list/tile-list-detail.js +181 -0
  133. package/dist/src/tiles/list/tile-list-detail.js.map +1 -0
  134. package/dist/src/tiles/list/tile-list.d.ts +21 -0
  135. package/dist/src/tiles/list/tile-list.js +229 -0
  136. package/dist/src/tiles/list/tile-list.js.map +1 -0
  137. package/dist/src/tiles/loading-tile.d.ts +5 -0
  138. package/dist/src/tiles/loading-tile.js +73 -0
  139. package/dist/src/tiles/loading-tile.js.map +1 -0
  140. package/dist/src/tiles/tile-dispatcher.d.ts +27 -0
  141. package/dist/src/tiles/tile-dispatcher.js +160 -0
  142. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  143. package/dist/src/utils/format-count.d.ts +7 -0
  144. package/dist/src/utils/format-count.js +76 -0
  145. package/dist/src/utils/format-count.js.map +1 -0
  146. package/dist/src/utils/format-date.d.ts +2 -0
  147. package/dist/src/utils/format-date.js +24 -0
  148. package/dist/src/utils/format-date.js.map +1 -0
  149. package/dist/src/utils/format-string.d.ts +2 -0
  150. package/dist/src/utils/format-string.js +7 -0
  151. package/dist/src/utils/format-string.js.map +1 -0
  152. package/dist/test/collection-browser.test.d.ts +0 -0
  153. package/dist/test/collection-browser.test.js +3 -0
  154. package/dist/test/collection-browser.test.js.map +1 -0
  155. package/dist/test/utils/format-count.test.d.ts +1 -0
  156. package/dist/test/utils/format-count.test.js +24 -0
  157. package/dist/test/utils/format-count.test.js.map +1 -0
  158. package/dist/test/utils/format-date.test.d.ts +1 -0
  159. package/dist/test/utils/format-date.test.js +18 -0
  160. package/dist/test/utils/format-date.test.js.map +1 -0
  161. package/dist/test/utils/format-string.test.d.ts +1 -0
  162. package/dist/test/utils/format-string.test.js +17 -0
  163. package/dist/test/utils/format-string.test.js.map +1 -0
  164. package/index.ts +3 -0
  165. package/package.json +95 -0
  166. package/src/assets/img/icons/mediatype/account.ts +12 -0
  167. package/src/assets/img/icons/mediatype/audio.ts +11 -0
  168. package/src/assets/img/icons/mediatype/collection.ts +9 -0
  169. package/src/assets/img/icons/mediatype/etree.ts +9 -0
  170. package/src/assets/img/icons/mediatype/film.ts +13 -0
  171. package/src/assets/img/icons/mediatype/foo.svg +5 -0
  172. package/src/assets/img/icons/mediatype/images.ts +10 -0
  173. package/src/assets/img/icons/mediatype/software.ts +10 -0
  174. package/src/assets/img/icons/mediatype/texts.ts +10 -0
  175. package/src/assets/img/icons/mediatype/tv.ts +9 -0
  176. package/src/assets/img/icons/mediatype/video.ts +10 -0
  177. package/src/assets/img/icons/mediatype/web.ts +10 -0
  178. package/src/circular-activity-indicator.ts +64 -0
  179. package/src/collection-browser.ts +756 -0
  180. package/src/collection-facets.ts +285 -0
  181. package/src/mediatype-icon.ts +83 -0
  182. package/src/models.ts +25 -0
  183. package/src/sort-filter-bar/alpha-bar.ts +86 -0
  184. package/src/sort-filter-bar/sort-filter-bar.ts +256 -0
  185. package/src/tiles/grid/account-tile.ts +141 -0
  186. package/src/tiles/grid/collection-tile.ts +157 -0
  187. package/src/tiles/grid/icons/account.ts +12 -0
  188. package/src/tiles/grid/icons/favorite-filled.ts +11 -0
  189. package/src/tiles/grid/icons/reviews.ts +11 -0
  190. package/src/tiles/grid/icons/upload.ts +12 -0
  191. package/src/tiles/grid/icons/views.ts +11 -0
  192. package/src/tiles/grid/item-tile.ts +254 -0
  193. package/src/tiles/list/tile-list.ts +227 -0
  194. package/src/tiles/loading-tile.ts +70 -0
  195. package/src/tiles/tile-dispatcher.ts +160 -0
  196. package/src/utils/format-count.ts +95 -0
  197. package/src/utils/format-date.ts +36 -0
  198. package/test/collection-browser.test.ts +1 -0
  199. package/test/utils/format-count.test.ts +32 -0
  200. package/test/utils/format-date.test.ts +22 -0
  201. package/tsconfig.json +20 -0
  202. package/web-dev-server.config.mjs +28 -0
  203. package/web-test-runner.config.mjs +41 -0
@@ -0,0 +1,181 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { formatCount } from '../../utils/format-count';
5
+ import { formatDate } from '../../utils/format-date';
6
+ import '../../mediatype-icon';
7
+ /*
8
+ at 750 creator, title trimmed
9
+ at 530
10
+ */
11
+ let TileListDetail = class TileListDetail extends LitElement {
12
+ render() {
13
+ var _a, _b, _c, _d, _e;
14
+ return html `
15
+ <div id="list-detail-1" class="${this.classSize}">
16
+ <div id="views">
17
+ ${formatCount((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.viewCount) !== null && _b !== void 0 ? _b : 0, this.formatSize)}
18
+ </div>
19
+ <div id="title">${(_c = this.model) === null || _c === void 0 ? void 0 : _c.title}</div>
20
+ <div id="date">${formatDate(this.date, this.formatSize)}</div>
21
+ <div id="creator">${(_d = this.model) === null || _d === void 0 ? void 0 : _d.creator}</div>
22
+ <div id="icon">
23
+ <mediatype-icon .mediatype=${(_e = this.model) === null || _e === void 0 ? void 0 : _e.mediatype}></mediatype-icon>
24
+ </div>
25
+ </div>
26
+ <div id="list-detail-2" class="${this.classSize}">
27
+ <div></div>
28
+ <div id="details">${this.description()}</div>
29
+ <div></div>
30
+ </div>
31
+ `;
32
+ }
33
+ description() {
34
+ var _a, _b;
35
+ if ((_a = this.model) === null || _a === void 0 ? void 0 : _a.description) {
36
+ return html `
37
+ <div id="description">
38
+ <div id="description">${(_b = this.model) === null || _b === void 0 ? void 0 : _b.description}</div>
39
+ </div>
40
+ `;
41
+ }
42
+ return html ``;
43
+ }
44
+ /*
45
+ * TODO: fix field names to match model in src/collection-browser.ts
46
+ * private get dateSortSelector()
47
+ * @see src/models.ts
48
+ */
49
+ get date() {
50
+ var _a, _b, _c, _d, _e;
51
+ switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
52
+ case 'date':
53
+ return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
54
+ case 'reviewdate':
55
+ return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
56
+ case 'addeddate':
57
+ return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
58
+ default:
59
+ return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
60
+ }
61
+ }
62
+ get classSize() {
63
+ var _a;
64
+ return ((_a = this.currentWidth) !== null && _a !== void 0 ? _a : 531) < 530 ? 'mobile' : 'desktop';
65
+ }
66
+ get formatSize() {
67
+ var _a;
68
+ return ((_a = this.currentWidth) !== null && _a !== void 0 ? _a : 531) < 530 ? 'short' : 'long';
69
+ }
70
+ static get styles() {
71
+ return css `
72
+ .mobile div {
73
+ font-size: 11px;
74
+ }
75
+ .desktop div {
76
+ font-size: 14px;
77
+ }
78
+
79
+ #list-detail-1 {
80
+ display: grid;
81
+ column-gap: 10px;
82
+ line-height: 1.42857143;
83
+ border-top: 1px solid #ddd !important;
84
+ padding-top: 5px;
85
+ align-items: center;
86
+ }
87
+
88
+ #list-detail-1.mobile {
89
+ grid-template-columns: 33px 3fr 30px 2fr 29.5px;
90
+ }
91
+ #list-detail-1.desktop {
92
+ grid-template-columns: 60px 3fr 90px 2fr 29.5px;
93
+ }
94
+
95
+ #list-detail-1:hover #title {
96
+ text-decoration: underline;
97
+ }
98
+
99
+ #list-detail-2 {
100
+ display: grid;
101
+ column-gap: 10px;
102
+ line-height: 1.42857143;
103
+ align-items: center;
104
+ }
105
+
106
+ #list-detail-2.mobile {
107
+ grid-template-columns: 33px auto 29.5px;
108
+ }
109
+
110
+ #list-detail-2.desktop {
111
+ grid-template-columns: 60px auto 29.5px;
112
+ }
113
+
114
+ #title {
115
+ color: #4b64ff;
116
+ text-decoration: none;
117
+ }
118
+
119
+ /*
120
+ #details {
121
+ /*
122
+ max-height:3rem;
123
+ overflow:hidden;
124
+ }
125
+ */
126
+ #description {
127
+ overflow: hidden;
128
+ font-size: 12px;
129
+ overflow-y: ellipsis;
130
+ -webkit-line-clamp: 2;
131
+ -webkit-box-orient: vertical;
132
+ display: -webkit-box;
133
+ word-break: break-word;
134
+ -webkit-line-clamp: 3; /* number of lines to show */
135
+ line-clamp: 3;
136
+ -webkit-box-orient: vertical;
137
+ text-align: left;
138
+ }
139
+
140
+ #title,
141
+ #creator #description {
142
+ text-overflow: ellipsis;
143
+ overflow: hidden;
144
+ white-space: nowrap;
145
+ }
146
+
147
+ #views,
148
+ #date {
149
+ text-align: right;
150
+ }
151
+
152
+ #views,
153
+ #details {
154
+ color: #767676;
155
+ }
156
+ #icon {
157
+ padding-right: 6px;
158
+ }
159
+ `;
160
+ }
161
+ };
162
+ __decorate([
163
+ property({ type: Object })
164
+ ], TileListDetail.prototype, "model", void 0);
165
+ __decorate([
166
+ property({ type: String })
167
+ ], TileListDetail.prototype, "baseNavigationUrl", void 0);
168
+ __decorate([
169
+ property({ type: Number })
170
+ ], TileListDetail.prototype, "currentWidth", void 0);
171
+ __decorate([
172
+ property({ type: Number })
173
+ ], TileListDetail.prototype, "currentHeight", void 0);
174
+ __decorate([
175
+ property({ type: Object })
176
+ ], TileListDetail.prototype, "sortParam", void 0);
177
+ TileListDetail = __decorate([
178
+ customElement('tile-list-detail')
179
+ ], TileListDetail);
180
+ export { TileListDetail };
181
+ //# sourceMappingURL=tile-list-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-list-detail.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list-detail.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAc,MAAM,yBAAyB,CAAC;AACjE,OAAO,sBAAsB,CAAC;AAE9B;;;EAGE;AAGF,IAAa,cAAc,GAA3B,MAAa,cAAe,SAAQ,UAAU;IAW5C,MAAM;;QACJ,OAAO,IAAI,CAAA;uCACwB,IAAI,CAAC,SAAS;;YAEzC,WAAW,CAAC,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,SAAS,mCAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;;0BAE1C,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK;yBAClB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;4BACnC,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO;;uCAER,MAAA,IAAI,CAAC,KAAK,0CAAE,SAAS;;;uCAGrB,IAAI,CAAC,SAAS;;4BAEzB,IAAI,CAAC,WAAW,EAAE;;;KAGzC,CAAC;IACJ,CAAC;IAEO,WAAW;;QACjB,IAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,WAAW,EAAE;YAC3B,OAAO,IAAI,CAAA;;kCAEiB,MAAA,IAAI,CAAC,KAAK,0CAAE,WAAW;;OAElD,CAAC;SACH;QACD,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,IAAY,IAAI;;QACd,QAAQ,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE;YAC7B,KAAK,MAAM;gBACT,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,aAAa,CAAC;YACnC,KAAK,YAAY;gBACf,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,YAAY,CAAC;YAClC,KAAK,WAAW;gBACd,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,SAAS,CAAC;YAC/B;gBACE,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,YAAY,CAAC,CAAC,aAAa;SACjD;IACH,CAAC;IAED,IAAY,SAAS;;QACnB,OAAO,CAAC,MAAA,IAAI,CAAC,YAAY,mCAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,IAAY,UAAU;;QACpB,OAAO,CAAC,MAAA,IAAI,CAAC,YAAY,mCAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwFT,CAAC;IACJ,CAAC;CACF,CAAA;AA/J6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAmB;AAElB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAA4B;AAE3B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAuB;AAEtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAwB;AAEvB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAuB;AATvC,cAAc;IAD1B,aAAa,CAAC,kBAAkB,CAAC;GACrB,cAAc,CAgK1B;SAhKY,cAAc","sourcesContent":["import { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { SortParam } from '@internetarchive/search-service';\nimport { TileModel } from '../../models';\nimport { formatCount, NumberFormat } from '../../utils/format-count';\nimport { formatDate, DateFormat } from '../../utils/format-date';\nimport '../../mediatype-icon';\n\n/*\nat 750 creator, title trimmed\nat 530\n*/\n\n@customElement('tile-list-detail')\nexport class TileListDetail extends LitElement {\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseNavigationUrl?: string;\n\n @property({ type: Number }) currentWidth?: number;\n\n @property({ type: Number }) currentHeight?: number;\n\n @property({ type: Object }) sortParam?: SortParam;\n\n render() {\n return html`\n <div id=\"list-detail-1\" class=\"${this.classSize}\">\n <div id=\"views\">\n ${formatCount(this.model?.viewCount ?? 0, this.formatSize)}\n </div>\n <div id=\"title\">${this.model?.title}</div>\n <div id=\"date\">${formatDate(this.date, this.formatSize)}</div>\n <div id=\"creator\">${this.model?.creator}</div>\n <div id=\"icon\">\n <mediatype-icon .mediatype=${this.model?.mediatype}></mediatype-icon>\n </div>\n </div>\n <div id=\"list-detail-2\" class=\"${this.classSize}\">\n <div></div>\n <div id=\"details\">${this.description()}</div>\n <div></div>\n </div>\n `;\n }\n\n private description() {\n if (this.model?.description) {\n return html`\n <div id=\"description\">\n <div id=\"description\">${this.model?.description}</div>\n </div>\n `;\n }\n return html``;\n }\n\n /*\n * TODO: fix field names to match model in src/collection-browser.ts\n * private get dateSortSelector()\n * @see src/models.ts\n */\n private get date(): Date | undefined {\n switch (this.sortParam?.field) {\n case 'date':\n return this.model?.datePublished;\n case 'reviewdate':\n return this.model?.dateReviewed;\n case 'addeddate':\n return this.model?.dateAdded;\n default:\n return this.model?.dateArchived; // publicdate\n }\n }\n\n private get classSize(): string {\n return (this.currentWidth ?? 531) < 530 ? 'mobile' : 'desktop';\n }\n\n private get formatSize(): DateFormat | NumberFormat {\n return (this.currentWidth ?? 531) < 530 ? 'short' : 'long';\n }\n\n static get styles() {\n return css`\n .mobile div {\n font-size: 11px;\n }\n .desktop div {\n font-size: 14px;\n }\n\n #list-detail-1 {\n display: grid;\n column-gap: 10px;\n line-height: 1.42857143;\n border-top: 1px solid #ddd !important;\n padding-top: 5px;\n align-items: center;\n }\n\n #list-detail-1.mobile {\n grid-template-columns: 33px 3fr 30px 2fr 29.5px;\n }\n #list-detail-1.desktop {\n grid-template-columns: 60px 3fr 90px 2fr 29.5px;\n }\n\n #list-detail-1:hover #title {\n text-decoration: underline;\n }\n\n #list-detail-2 {\n display: grid;\n column-gap: 10px;\n line-height: 1.42857143;\n align-items: center;\n }\n\n #list-detail-2.mobile {\n grid-template-columns: 33px auto 29.5px;\n }\n\n #list-detail-2.desktop {\n grid-template-columns: 60px auto 29.5px;\n }\n\n #title {\n color: #4b64ff;\n text-decoration: none;\n }\n\n /*\n #details {\n /*\n max-height:3rem;\n overflow:hidden;\n }\n*/\n #description {\n overflow: hidden;\n font-size: 12px;\n overflow-y: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n word-break: break-word;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n -webkit-box-orient: vertical;\n text-align: left;\n }\n\n #title,\n #creator #description {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n #views,\n #date {\n text-align: right;\n }\n\n #views,\n #details {\n color: #767676;\n }\n #icon {\n padding-right: 6px;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { LitElement } from 'lit';
2
+ import { SortParam } from '@internetarchive/search-service';
3
+ import { CollectionDisplayMode, TileModel } from '../../models';
4
+ import '../../mediatype-icon';
5
+ export declare class TileList extends LitElement {
6
+ model?: TileModel;
7
+ baseNavigationUrl?: string;
8
+ currentWidth?: number;
9
+ currentHeight?: number;
10
+ sortParam?: SortParam;
11
+ displayMode: CollectionDisplayMode;
12
+ render(): import("lit-html").TemplateResult<1>;
13
+ private detail;
14
+ private description;
15
+ private topic;
16
+ private source;
17
+ private get date();
18
+ private get classSize();
19
+ private get formatSize();
20
+ static get styles(): import("lit").CSSResult;
21
+ }
@@ -0,0 +1,229 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import DOMPurify from 'dompurify';
5
+ import { formatCount } from '../../utils/format-count';
6
+ import { formatDate } from '../../utils/format-date';
7
+ import '../../mediatype-icon';
8
+ /*
9
+ at 750 creator, title trimmed
10
+ at 530
11
+ */
12
+ let TileList = class TileList extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.displayMode = 'list-compact';
16
+ }
17
+ // private HtmlSanitizer = HtmlSanitizer();
18
+ render() {
19
+ var _a, _b, _c, _d, _e;
20
+ return html `
21
+ <div id="list-line" class="${this.classSize}">
22
+ <div id="views">
23
+ ${formatCount((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.viewCount) !== null && _b !== void 0 ? _b : 0, this.formatSize)}
24
+ </div>
25
+ <div id="title">${(_c = this.model) === null || _c === void 0 ? void 0 : _c.title}</div>
26
+ <div id="date">${formatDate(this.date, this.formatSize)}</div>
27
+ <div id="creator">${(_d = this.model) === null || _d === void 0 ? void 0 : _d.creator}</div>
28
+ <div id="icon">
29
+ <mediatype-icon .mediatype=${(_e = this.model) === null || _e === void 0 ? void 0 : _e.mediatype}></mediatype-icon>
30
+ </div>
31
+ </div>
32
+ ${this.displayMode === 'list-detail' ? this.detail() : html ``}
33
+ `;
34
+ }
35
+ detail() {
36
+ const descriptionHtml = this.description();
37
+ const topicHtml = this.topic();
38
+ const sourceHtml = this.source();
39
+ if (descriptionHtml || topicHtml || sourceHtml) {
40
+ return html `
41
+ <div id="list-detail" class="${this.classSize}">
42
+ <div></div>
43
+ <div id="details">${descriptionHtml} ${topicHtml} ${sourceHtml}</div>
44
+ <div></div>
45
+ </div>
46
+ `;
47
+ }
48
+ return html ``;
49
+ }
50
+ description() {
51
+ var _a, _b;
52
+ if ((_a = this.model) === null || _a === void 0 ? void 0 : _a.description) {
53
+ const description = DOMPurify.sanitize(`${(_b = this.model) === null || _b === void 0 ? void 0 : _b.description}`);
54
+ return html ` <div id="description">${description}</div> `;
55
+ }
56
+ return html ``;
57
+ }
58
+ topic() {
59
+ var _a, _b;
60
+ if ((_a = this.model) === null || _a === void 0 ? void 0 : _a.subject) {
61
+ return html ` <div id="topic">Topic: ${(_b = this.model) === null || _b === void 0 ? void 0 : _b.subject}</div> `;
62
+ }
63
+ return html ``;
64
+ }
65
+ source() {
66
+ var _a, _b;
67
+ if ((_a = this.model) === null || _a === void 0 ? void 0 : _a.source) {
68
+ return html ` <div id="source">Source: ${(_b = this.model) === null || _b === void 0 ? void 0 : _b.source}</div> `;
69
+ }
70
+ return html ``;
71
+ }
72
+ /*
73
+ * TODO: fix field names to match model in src/collection-browser.ts
74
+ * private get dateSortSelector()
75
+ * @see src/models.ts
76
+ */
77
+ get date() {
78
+ var _a, _b, _c, _d, _e;
79
+ switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
80
+ case 'date':
81
+ return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
82
+ case 'reviewdate':
83
+ return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
84
+ case 'addeddate':
85
+ return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
86
+ default:
87
+ return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
88
+ }
89
+ }
90
+ get classSize() {
91
+ var _a;
92
+ return ((_a = this.currentWidth) !== null && _a !== void 0 ? _a : 531) < 530 ? 'mobile' : 'desktop';
93
+ }
94
+ get formatSize() {
95
+ var _a;
96
+ return ((_a = this.currentWidth) !== null && _a !== void 0 ? _a : 531) < 530 ? 'short' : 'long';
97
+ }
98
+ static get styles() {
99
+ return css `
100
+ .mobile div {
101
+ font-size: 11px;
102
+ }
103
+ .desktop div {
104
+ font-size: 14px;
105
+ }
106
+
107
+ /* fields */
108
+
109
+ #title {
110
+ color: #4b64ff;
111
+ text-decoration: none;
112
+ }
113
+
114
+ #title,
115
+ #creator,
116
+ #topic,
117
+ #source {
118
+ text-overflow: ellipsis;
119
+ overflow: hidden;
120
+ }
121
+
122
+ #title,
123
+ #creator {
124
+ white-space: nowrap;
125
+ }
126
+
127
+ #views,
128
+ #date {
129
+ text-align: right;
130
+ }
131
+
132
+ #views,
133
+ #details {
134
+ color: #767676;
135
+ }
136
+
137
+ #icon {
138
+ padding-right: 6px;
139
+ }
140
+
141
+ .desktop #description,
142
+ .desktop #topic,
143
+ .desktop #source {
144
+ font-size: 12px;
145
+ }
146
+
147
+ .mobile #description,
148
+ .mobile #topic,
149
+ .mobile #source {
150
+ font-size: 11px;
151
+ }
152
+
153
+ #description {
154
+ overflow: hidden;
155
+ text-overflow: ellipsis;
156
+ -webkit-line-clamp: 2;
157
+ -webkit-box-orient: vertical;
158
+ display: -webkit-box;
159
+ word-break: break-word;
160
+ -webkit-line-clamp: 3; /* number of lines to show */
161
+ line-clamp: 3;
162
+ -webkit-box-orient: vertical;
163
+ text-align: left;
164
+ }
165
+
166
+ /* list-line */
167
+
168
+ #list-line {
169
+ display: grid;
170
+ column-gap: 10px;
171
+ line-height: 1.42857143;
172
+ border-top: 1px solid #ddd !important;
173
+ padding-top: 5px;
174
+ align-items: center;
175
+ }
176
+
177
+ #list-line.mobile {
178
+ grid-template-columns: 33px 3fr 30px 2fr 29.5px;
179
+ }
180
+ #list-line.desktop {
181
+ grid-template-columns: 60px 3fr 90px 2fr 29.5px;
182
+ }
183
+
184
+ #list-line:hover #title {
185
+ text-decoration: underline;
186
+ }
187
+
188
+ /* list-detail */
189
+
190
+ #list-detail {
191
+ display: grid;
192
+ column-gap: 10px;
193
+ line-height: 1.42857143;
194
+ align-items: center;
195
+ }
196
+
197
+ #list-detail.mobile {
198
+ grid-template-columns: 33px auto 29.5px;
199
+ }
200
+
201
+ #list-detail.desktop {
202
+ grid-template-columns: 60px auto 29.5px;
203
+ }
204
+ `;
205
+ }
206
+ };
207
+ __decorate([
208
+ property({ type: Object })
209
+ ], TileList.prototype, "model", void 0);
210
+ __decorate([
211
+ property({ type: String })
212
+ ], TileList.prototype, "baseNavigationUrl", void 0);
213
+ __decorate([
214
+ property({ type: Number })
215
+ ], TileList.prototype, "currentWidth", void 0);
216
+ __decorate([
217
+ property({ type: Number })
218
+ ], TileList.prototype, "currentHeight", void 0);
219
+ __decorate([
220
+ property({ type: Object })
221
+ ], TileList.prototype, "sortParam", void 0);
222
+ __decorate([
223
+ property({ type: String })
224
+ ], TileList.prototype, "displayMode", void 0);
225
+ TileList = __decorate([
226
+ customElement('tile-list')
227
+ ], TileList);
228
+ export { TileList };
229
+ //# sourceMappingURL=tile-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-list.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { SortParam } from '@internetarchive/search-service';\nimport DOMPurify from 'dompurify';\n// import * as HtmlSanitizer from '@jitbit/htmlsanitizer';\n// import sanitizeHtml from 'sanitize-html';\n// - error\n// import DOMPurify from 'dompurify';\n// - no types\nimport { CollectionDisplayMode, TileModel } from '../../models';\nimport { formatCount, NumberFormat } from '../../utils/format-count';\nimport { formatDate, DateFormat } from '../../utils/format-date';\nimport '../../mediatype-icon';\n\n/*\nat 750 creator, title trimmed\nat 530\n*/\n\n@customElement('tile-list')\nexport class TileList extends LitElement {\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseNavigationUrl?: string;\n\n @property({ type: Number }) currentWidth?: number;\n\n @property({ type: Number }) currentHeight?: number;\n\n @property({ type: Object }) sortParam?: SortParam;\n\n @property({ type: String }) displayMode: CollectionDisplayMode =\n 'list-compact';\n\n // private HtmlSanitizer = HtmlSanitizer();\n\n render() {\n return html`\n <div id=\"list-line\" class=\"${this.classSize}\">\n <div id=\"views\">\n ${formatCount(this.model?.viewCount ?? 0, this.formatSize)}\n </div>\n <div id=\"title\">${this.model?.title}</div>\n <div id=\"date\">${formatDate(this.date, this.formatSize)}</div>\n <div id=\"creator\">${this.model?.creator}</div>\n <div id=\"icon\">\n <mediatype-icon .mediatype=${this.model?.mediatype}></mediatype-icon>\n </div>\n </div>\n ${this.displayMode === 'list-detail' ? this.detail() : html``}\n `;\n }\n\n private detail() {\n const descriptionHtml = this.description();\n const topicHtml = this.topic();\n const sourceHtml = this.source();\n\n if (descriptionHtml || topicHtml || sourceHtml) {\n return html`\n <div id=\"list-detail\" class=\"${this.classSize}\">\n <div></div>\n <div id=\"details\">${descriptionHtml} ${topicHtml} ${sourceHtml}</div>\n <div></div>\n </div>\n `;\n }\n return html``;\n }\n\n private description() {\n if (this.model?.description) {\n const description = DOMPurify.sanitize(`${this.model?.description}`);\n return html` <div id=\"description\">${description}</div> `;\n }\n return html``;\n }\n\n private topic() {\n if (this.model?.subject) {\n return html` <div id=\"topic\">Topic: ${this.model?.subject}</div> `;\n }\n return html``;\n }\n\n private source() {\n if (this.model?.source) {\n return html` <div id=\"source\">Source: ${this.model?.source}</div> `;\n }\n return html``;\n }\n\n /*\n * TODO: fix field names to match model in src/collection-browser.ts\n * private get dateSortSelector()\n * @see src/models.ts\n */\n private get date(): Date | undefined {\n switch (this.sortParam?.field) {\n case 'date':\n return this.model?.datePublished;\n case 'reviewdate':\n return this.model?.dateReviewed;\n case 'addeddate':\n return this.model?.dateAdded;\n default:\n return this.model?.dateArchived; // publicdate\n }\n }\n\n private get classSize(): string {\n return (this.currentWidth ?? 531) < 530 ? 'mobile' : 'desktop';\n }\n\n private get formatSize(): DateFormat | NumberFormat {\n return (this.currentWidth ?? 531) < 530 ? 'short' : 'long';\n }\n\n static get styles() {\n return css`\n .mobile div {\n font-size: 11px;\n }\n .desktop div {\n font-size: 14px;\n }\n\n /* fields */\n\n #title {\n color: #4b64ff;\n text-decoration: none;\n }\n\n #title,\n #creator,\n #topic,\n #source {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n #title,\n #creator {\n white-space: nowrap;\n }\n\n #views,\n #date {\n text-align: right;\n }\n\n #views,\n #details {\n color: #767676;\n }\n\n #icon {\n padding-right: 6px;\n }\n\n .desktop #description,\n .desktop #topic,\n .desktop #source {\n font-size: 12px;\n }\n\n .mobile #description,\n .mobile #topic,\n .mobile #source {\n font-size: 11px;\n }\n\n #description {\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n word-break: break-word;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n -webkit-box-orient: vertical;\n text-align: left;\n }\n\n /* list-line */\n\n #list-line {\n display: grid;\n column-gap: 10px;\n line-height: 1.42857143;\n border-top: 1px solid #ddd !important;\n padding-top: 5px;\n align-items: center;\n }\n\n #list-line.mobile {\n grid-template-columns: 33px 3fr 30px 2fr 29.5px;\n }\n #list-line.desktop {\n grid-template-columns: 60px 3fr 90px 2fr 29.5px;\n }\n\n #list-line:hover #title {\n text-decoration: underline;\n }\n\n /* list-detail */\n\n #list-detail {\n display: grid;\n column-gap: 10px;\n line-height: 1.42857143;\n align-items: center;\n }\n\n #list-detail.mobile {\n grid-template-columns: 33px auto 29.5px;\n }\n\n #list-detail.desktop {\n grid-template-columns: 60px auto 29.5px;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class LoadingTile extends LitElement {
3
+ render(): import("lit-html").TemplateResult<1>;
4
+ static get styles(): import("lit").CSSResult;
5
+ }
@@ -0,0 +1,73 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ let LoadingTile = class LoadingTile extends LitElement {
5
+ render() {
6
+ return html ` <div id="container"></div> `;
7
+ }
8
+ static get styles() {
9
+ return css `
10
+ :host {
11
+ display: block;
12
+ height: 100%;
13
+ }
14
+
15
+ #container {
16
+ background: linear-gradient(
17
+ to right,
18
+ rgba(25, 69, 154, 0.1),
19
+ rgb(105, 161, 234, 0.2)
20
+ );
21
+ background-size: 400% 400%;
22
+
23
+ -webkit-animation: AnimationName 4s ease infinite;
24
+ -moz-animation: AnimationName 4s ease infinite;
25
+ animation: AnimationName 4s ease infinite;
26
+
27
+ display: block;
28
+ height: 100%;
29
+ }
30
+
31
+ @-webkit-keyframes AnimationName {
32
+ 0% {
33
+ background-position: 0% 50%;
34
+ }
35
+ 50% {
36
+ background-position: 100% 50%;
37
+ }
38
+ 100% {
39
+ background-position: 0% 50%;
40
+ }
41
+ }
42
+
43
+ @-moz-keyframes AnimationName {
44
+ 0% {
45
+ background-position: 0% 50%;
46
+ }
47
+ 50% {
48
+ background-position: 100% 50%;
49
+ }
50
+ 100% {
51
+ background-position: 0% 50%;
52
+ }
53
+ }
54
+
55
+ @keyframes AnimationName {
56
+ 0% {
57
+ background-position: 0% 50%;
58
+ }
59
+ 50% {
60
+ background-position: 100% 50%;
61
+ }
62
+ 100% {
63
+ background-position: 0% 50%;
64
+ }
65
+ }
66
+ `;
67
+ }
68
+ };
69
+ LoadingTile = __decorate([
70
+ customElement('loading-tile')
71
+ ], LoadingTile);
72
+ export { LoadingTile };
73
+ //# sourceMappingURL=loading-tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-tile.js","sourceRoot":"","sources":["../../../src/tiles/loading-tile.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,UAAU;IACzC,MAAM;QACJ,OAAO,IAAI,CAAA,8BAA8B,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyDT,CAAC;IACJ,CAAC;CACF,CAAA;AAjEY,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAiEvB;SAjEY,WAAW","sourcesContent":["import { css, html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('loading-tile')\nexport class LoadingTile extends LitElement {\n render() {\n return html` <div id=\"container\"></div> `;\n }\n\n static get styles() {\n return css`\n :host {\n display: block;\n height: 100%;\n }\n\n #container {\n background: linear-gradient(\n to right,\n rgba(25, 69, 154, 0.1),\n rgb(105, 161, 234, 0.2)\n );\n background-size: 400% 400%;\n\n -webkit-animation: AnimationName 4s ease infinite;\n -moz-animation: AnimationName 4s ease infinite;\n animation: AnimationName 4s ease infinite;\n\n display: block;\n height: 100%;\n }\n\n @-webkit-keyframes AnimationName {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n\n @-moz-keyframes AnimationName {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n\n @keyframes AnimationName {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ import { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
3
+ import { SortParam } from '@internetarchive/search-service';
4
+ import type { CollectionDisplayMode, TileModel } from '../models';
5
+ import './grid/collection-tile';
6
+ import './grid/item-tile';
7
+ import './grid/account-tile';
8
+ import './list/tile-list';
9
+ export declare class TileDispatcher extends LitElement implements SharedResizeObserverResizeHandlerInterface {
10
+ displayMode: CollectionDisplayMode;
11
+ model?: TileModel;
12
+ baseNavigationUrl?: string;
13
+ showDeleteButton: boolean;
14
+ currentWidth?: number;
15
+ currentHeight?: number;
16
+ resizeObserver?: SharedResizeObserverInterface;
17
+ sortParam?: SortParam;
18
+ private container;
19
+ render(): import("lit-html").TemplateResult<1>;
20
+ handleResize(entry: ResizeObserverEntry): void;
21
+ disconnectedCallback(): void;
22
+ private stopResizeObservation;
23
+ private startResizeObservation;
24
+ updated(props: PropertyValues): void;
25
+ private get tile();
26
+ static get styles(): import("lit").CSSResult;
27
+ }