@internetarchive/collection-browser 0.2.15 → 0.2.16

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 (222) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/src/app-root.d.ts +32 -0
  4. package/dist/src/app-root.js +285 -0
  5. package/dist/src/app-root.js.map +1 -0
  6. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  7. package/dist/src/assets/img/icons/chevron.js +4 -0
  8. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  9. package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
  10. package/dist/src/assets/img/icons/empty-query.js +5 -0
  11. package/dist/src/assets/img/icons/empty-query.js.map +1 -0
  12. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
  13. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  14. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  15. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  16. package/dist/src/assets/img/icons/eye.js +5 -0
  17. package/dist/src/assets/img/icons/eye.js.map +1 -0
  18. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
  19. package/dist/src/assets/img/icons/favorite-filled.js +11 -0
  20. package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
  21. package/dist/src/assets/img/icons/login-required.d.ts +1 -0
  22. package/dist/src/assets/img/icons/login-required.js +30 -0
  23. package/dist/src/assets/img/icons/login-required.js.map +1 -0
  24. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
  25. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  26. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  27. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  28. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  29. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  30. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  31. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  32. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  33. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  34. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  35. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  36. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  37. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  38. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  39. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  40. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  41. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  42. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  43. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  44. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  46. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  47. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  48. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  49. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  50. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  52. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  53. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  54. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  55. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  56. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  57. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  58. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  59. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  60. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  61. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  62. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  63. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  64. package/dist/src/assets/img/icons/null-result.js +5 -0
  65. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  66. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  67. package/dist/src/assets/img/icons/restricted.js +29 -0
  68. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  69. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  70. package/dist/src/assets/img/icons/reviews.js +11 -0
  71. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  72. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  73. package/dist/src/assets/img/icons/upload.js +12 -0
  74. package/dist/src/assets/img/icons/upload.js.map +1 -0
  75. package/dist/src/assets/img/icons/views.d.ts +1 -0
  76. package/dist/src/assets/img/icons/views.js +11 -0
  77. package/dist/src/assets/img/icons/views.js.map +1 -0
  78. package/dist/src/circular-activity-indicator.d.ts +5 -0
  79. package/dist/src/circular-activity-indicator.js +66 -0
  80. package/dist/src/circular-activity-indicator.js.map +1 -0
  81. package/dist/src/collection-browser.d.ts +214 -0
  82. package/dist/src/collection-browser.js +1242 -0
  83. package/dist/src/collection-browser.js.map +1 -0
  84. package/dist/src/collection-facets.d.ts +63 -0
  85. package/dist/src/collection-facets.js +560 -0
  86. package/dist/src/collection-facets.js.map +1 -0
  87. package/dist/src/empty-placeholder.d.ts +11 -0
  88. package/dist/src/empty-placeholder.js +83 -0
  89. package/dist/src/empty-placeholder.js.map +1 -0
  90. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  91. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  92. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  93. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  94. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  95. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  96. package/dist/src/mediatype/mediatype-config.d.ts +3 -0
  97. package/dist/src/mediatype/mediatype-config.js +86 -0
  98. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  99. package/dist/src/models.d.ts +85 -0
  100. package/dist/src/models.js +62 -0
  101. package/dist/src/models.js.map +1 -0
  102. package/dist/src/restoration-state-handler.d.ts +38 -0
  103. package/dist/src/restoration-state-handler.js +204 -0
  104. package/dist/src/restoration-state-handler.js.map +1 -0
  105. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
  106. package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
  107. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  108. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  109. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  110. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  111. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  112. package/dist/src/sort-filter-bar/img/list.js +5 -0
  113. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  114. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  115. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  116. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  117. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  118. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  119. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  120. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +107 -0
  121. package/dist/src/sort-filter-bar/sort-filter-bar.js +782 -0
  122. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  123. package/dist/src/styles/item-image-styles.d.ts +8 -0
  124. package/dist/src/styles/item-image-styles.js +102 -0
  125. package/dist/src/styles/item-image-styles.js.map +1 -0
  126. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  127. package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
  128. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  129. package/dist/src/tiles/grid/account-tile.d.ts +8 -0
  130. package/dist/src/tiles/grid/account-tile.js +126 -0
  131. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  132. package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
  133. package/dist/src/tiles/grid/collection-tile.js +159 -0
  134. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  135. package/dist/src/tiles/grid/item-tile.d.ts +21 -0
  136. package/dist/src/tiles/grid/item-tile.js +183 -0
  137. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  138. package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
  139. package/dist/src/tiles/grid/tile-stats.js +134 -0
  140. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  141. package/dist/src/tiles/image-block.d.ts +17 -0
  142. package/dist/src/tiles/image-block.js +136 -0
  143. package/dist/src/tiles/image-block.js.map +1 -0
  144. package/dist/src/tiles/item-image.d.ts +31 -0
  145. package/dist/src/tiles/item-image.js +118 -0
  146. package/dist/src/tiles/item-image.js.map +1 -0
  147. package/dist/src/tiles/list/account-label.d.ts +1 -0
  148. package/dist/src/tiles/list/account-label.js +7 -0
  149. package/dist/src/tiles/list/account-label.js.map +1 -0
  150. package/dist/src/tiles/list/date-label.d.ts +1 -0
  151. package/dist/src/tiles/list/date-label.js +13 -0
  152. package/dist/src/tiles/list/date-label.js.map +1 -0
  153. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  154. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  155. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  156. package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
  157. package/dist/src/tiles/list/tile-list-compact.js +180 -0
  158. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  159. package/dist/src/tiles/list/tile-list.d.ts +48 -0
  160. package/dist/src/tiles/list/tile-list.js +455 -0
  161. package/dist/src/tiles/list/tile-list.js.map +1 -0
  162. package/dist/src/tiles/mediatype-icon.d.ts +9 -0
  163. package/dist/src/tiles/mediatype-icon.js +82 -0
  164. package/dist/src/tiles/mediatype-icon.js.map +1 -0
  165. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -0
  166. package/dist/src/tiles/overlay/icon-overlay.js +43 -0
  167. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
  168. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -0
  169. package/dist/src/tiles/overlay/text-overlay.js +57 -0
  170. package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
  171. package/dist/src/tiles/tile-dispatcher.d.ts +36 -0
  172. package/dist/src/tiles/tile-dispatcher.js +215 -0
  173. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  174. package/dist/src/utils/format-count.d.ts +7 -0
  175. package/dist/src/utils/format-count.js +76 -0
  176. package/dist/src/utils/format-count.js.map +1 -0
  177. package/dist/src/utils/format-date.d.ts +2 -0
  178. package/dist/src/utils/format-date.js +24 -0
  179. package/dist/src/utils/format-date.js.map +1 -0
  180. package/dist/test/collection-browser.test.d.ts +1 -0
  181. package/dist/test/collection-browser.test.js +82 -0
  182. package/dist/test/collection-browser.test.js.map +1 -0
  183. package/dist/test/empty-placeholder.test.d.ts +1 -0
  184. package/dist/test/empty-placeholder.test.js +34 -0
  185. package/dist/test/empty-placeholder.test.js.map +1 -0
  186. package/dist/test/icon-overlay.test.d.ts +1 -0
  187. package/dist/test/icon-overlay.test.js +31 -0
  188. package/dist/test/icon-overlay.test.js.map +1 -0
  189. package/dist/test/item-image.test.d.ts +1 -0
  190. package/dist/test/item-image.test.js +73 -0
  191. package/dist/test/item-image.test.js.map +1 -0
  192. package/dist/test/mediatype-config.test.d.ts +1 -0
  193. package/dist/test/mediatype-config.test.js +17 -0
  194. package/dist/test/mediatype-config.test.js.map +1 -0
  195. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
  196. package/dist/test/mocks/mock-collection-name-cache.js +14 -0
  197. package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
  198. package/dist/test/mocks/mock-search-responses.d.ts +3 -0
  199. package/dist/test/mocks/mock-search-responses.js +32 -0
  200. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  201. package/dist/test/mocks/mock-search-service.d.ts +8 -0
  202. package/dist/test/mocks/mock-search-service.js +16 -0
  203. package/dist/test/mocks/mock-search-service.js.map +1 -0
  204. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -0
  205. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +122 -0
  206. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -0
  207. package/dist/test/text-overlay.test.d.ts +1 -0
  208. package/dist/test/text-overlay.test.js +48 -0
  209. package/dist/test/text-overlay.test.js.map +1 -0
  210. package/dist/test/tile-stats.test.d.ts +1 -0
  211. package/dist/test/tile-stats.test.js +42 -0
  212. package/dist/test/tile-stats.test.js.map +1 -0
  213. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  214. package/dist/test/tiles/grid/item-tile.test.js +96 -0
  215. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  216. package/dist/test/utils/format-count.test.d.ts +1 -0
  217. package/dist/test/utils/format-count.test.js +24 -0
  218. package/dist/test/utils/format-count.test.js.map +1 -0
  219. package/dist/test/utils/format-date.test.d.ts +1 -0
  220. package/dist/test/utils/format-date.test.js +18 -0
  221. package/dist/test/utils/format-date.test.js.map +1 -0
  222. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ let TextOverlay = class TextOverlay extends LitElement {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.loggedIn = false;
8
+ this.loginRequired = false;
9
+ }
10
+ render() {
11
+ return html ` <div class="overlay no-preview">${this.textDisplay}</div> `;
12
+ }
13
+ get textDisplay() {
14
+ return this.loginRequired && !this.loggedIn
15
+ ? 'Log in\nto view this item'
16
+ : 'Content may be inappropriate';
17
+ }
18
+ static get styles() {
19
+ return css `
20
+ :host {
21
+ align-items: center;
22
+ display: flex;
23
+ }
24
+
25
+ .overlay {
26
+ border: 1px solid #2c2c2c;
27
+ border-radius: 1px;
28
+ position: absolute;
29
+ right: 0;
30
+ left: 0;
31
+ width: auto;
32
+ height: auto;
33
+ padding: 5px;
34
+ }
35
+
36
+ .no-preview {
37
+ background-color: #fffecb;
38
+ color: #2c2c2c;
39
+ font-size: 1.4rem;
40
+ line-height: 2rem;
41
+ text-align: center;
42
+ white-space: pre-wrap; // for the newline character
43
+ }
44
+ `;
45
+ }
46
+ };
47
+ __decorate([
48
+ property({ type: Boolean })
49
+ ], TextOverlay.prototype, "loggedIn", void 0);
50
+ __decorate([
51
+ property({ type: Boolean })
52
+ ], TextOverlay.prototype, "loginRequired", void 0);
53
+ TextOverlay = __decorate([
54
+ customElement('text-overlay')
55
+ ], TextOverlay);
56
+ export { TextOverlay };
57
+ //# sourceMappingURL=text-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-overlay.js","sourceRoot":"","sources":["../../../../src/tiles/overlay/text-overlay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAkB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,UAAU;IAA3C;;QAC+B,aAAQ,GAAG,KAAK,CAAC;QAEjB,kBAAa,GAAG,KAAK,CAAC;IAwCrD,CAAC;IAtCC,MAAM;QACJ,OAAO,IAAI,CAAA,oCAAoC,IAAI,CAAC,WAAW,SAAS,CAAC;IAC3E,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ;YACzC,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,8BAA8B,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT,CAAC;IACJ,CAAC;CACF,CAAA;AA1C8B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAEjB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kDAAuB;AAHxC,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA2CvB;SA3CY,WAAW","sourcesContent":["import { css, CSSResultGroup, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('text-overlay')\nexport class TextOverlay extends LitElement {\n @property({ type: Boolean }) loggedIn = false;\n\n @property({ type: Boolean }) loginRequired = false;\n\n render() {\n return html` <div class=\"overlay no-preview\">${this.textDisplay}</div> `;\n }\n\n private get textDisplay() {\n return this.loginRequired && !this.loggedIn\n ? 'Log in\\nto view this item'\n : 'Content may be inappropriate';\n }\n\n static get styles(): CSSResultGroup {\n return css`\n :host {\n align-items: center;\n display: flex;\n }\n\n .overlay {\n border: 1px solid #2c2c2c;\n border-radius: 1px;\n position: absolute;\n right: 0;\n left: 0;\n width: auto;\n height: auto;\n padding: 5px;\n }\n\n .no-preview {\n background-color: #fffecb;\n color: #2c2c2c;\n font-size: 1.4rem;\n line-height: 2rem;\n text-align: center;\n white-space: pre-wrap; // for the newline character\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ import type { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
3
+ import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
4
+ import type { SortParam } from '@internetarchive/search-service';
5
+ import type { TileDisplayMode, TileModel } from '../models';
6
+ import './grid/collection-tile';
7
+ import './grid/item-tile';
8
+ import './grid/account-tile';
9
+ import './list/tile-list';
10
+ import './list/tile-list-compact';
11
+ import './list/tile-list-compact-header';
12
+ export declare class TileDispatcher extends LitElement implements SharedResizeObserverResizeHandlerInterface {
13
+ tileDisplayMode?: TileDisplayMode;
14
+ model?: TileModel;
15
+ baseNavigationUrl?: string;
16
+ currentWidth?: number;
17
+ currentHeight?: number;
18
+ resizeObserver?: SharedResizeObserverInterface;
19
+ collectionNameCache?: CollectionNameCacheInterface;
20
+ sortParam: SortParam | null;
21
+ private container;
22
+ mobileBreakpoint?: number;
23
+ baseImageUrl?: string;
24
+ loggedIn: boolean;
25
+ render(): import("lit-html").TemplateResult<1>;
26
+ private get headerTemplate();
27
+ private get tileTemplate();
28
+ private get linkTileTemplate();
29
+ handleResize(entry: ResizeObserverEntry): void;
30
+ disconnectedCallback(): void;
31
+ private stopResizeObservation;
32
+ private startResizeObservation;
33
+ updated(props: PropertyValues): void;
34
+ private get tile();
35
+ static get styles(): import("lit").CSSResult;
36
+ }
@@ -0,0 +1,215 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement, nothing } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import './grid/collection-tile';
6
+ import './grid/item-tile';
7
+ import './grid/account-tile';
8
+ import './list/tile-list';
9
+ import './list/tile-list-compact';
10
+ import './list/tile-list-compact-header';
11
+ let TileDispatcher = class TileDispatcher extends LitElement {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.sortParam = null;
15
+ this.loggedIn = false;
16
+ }
17
+ render() {
18
+ return html `
19
+ <div id="container">
20
+ ${this.tileDisplayMode === 'list-header'
21
+ ? this.headerTemplate
22
+ : this.tileTemplate}
23
+ </div>
24
+ `;
25
+ }
26
+ get headerTemplate() {
27
+ const { currentWidth, sortParam, mobileBreakpoint } = this;
28
+ return html `
29
+ <tile-list-compact-header
30
+ class="header"
31
+ .currentWidth=${currentWidth}
32
+ .sortParam=${sortParam}
33
+ .mobileBreakpoint=${mobileBreakpoint}
34
+ >
35
+ </tile-list-compact-header>
36
+ `;
37
+ }
38
+ get tileTemplate() {
39
+ return html `
40
+ ${this.tileDisplayMode === 'list-detail'
41
+ ? this.tile
42
+ : this.linkTileTemplate}
43
+ `;
44
+ }
45
+ get linkTileTemplate() {
46
+ var _a, _b;
47
+ return html `
48
+ <a
49
+ href="${this.baseNavigationUrl}/details/${(_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier}"
50
+ title=${ifDefined((_b = this.model) === null || _b === void 0 ? void 0 : _b.title)}
51
+ >
52
+ ${this.tile}
53
+ </a>
54
+ `;
55
+ }
56
+ handleResize(entry) {
57
+ this.currentWidth = entry.contentRect.width;
58
+ this.currentHeight = entry.contentRect.height;
59
+ }
60
+ disconnectedCallback() {
61
+ this.stopResizeObservation(this.resizeObserver);
62
+ }
63
+ stopResizeObservation(observer) {
64
+ observer === null || observer === void 0 ? void 0 : observer.removeObserver({
65
+ handler: this,
66
+ target: this.container,
67
+ });
68
+ }
69
+ startResizeObservation() {
70
+ var _a;
71
+ this.stopResizeObservation(this.resizeObserver);
72
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.addObserver({
73
+ handler: this,
74
+ target: this.container,
75
+ });
76
+ }
77
+ updated(props) {
78
+ if (props.has('resizeObserver')) {
79
+ const previousObserver = props.get('resizeObserver');
80
+ this.stopResizeObservation(previousObserver);
81
+ this.startResizeObservation();
82
+ }
83
+ }
84
+ get tile() {
85
+ const { model, baseNavigationUrl, currentWidth, currentHeight, sortParam, mobileBreakpoint, } = this;
86
+ if (!model)
87
+ return nothing;
88
+ switch (this.tileDisplayMode) {
89
+ case 'grid':
90
+ switch (model.mediatype) {
91
+ case 'collection':
92
+ return html `<collection-tile
93
+ .model=${model}
94
+ .currentWidth=${currentWidth}
95
+ .currentHeight=${currentHeight}
96
+ >
97
+ </collection-tile>`;
98
+ case 'account':
99
+ return html `<account-tile
100
+ .model=${model}
101
+ .currentWidth=${currentWidth}
102
+ .currentHeight=${currentHeight}
103
+ >
104
+ </account-tile>`;
105
+ default:
106
+ return html `<item-tile
107
+ .model=${model}
108
+ .currentWidth=${this.currentWidth}
109
+ .currentHeight=${this.currentHeight}
110
+ .collectionNameCache=${this.collectionNameCache}
111
+ .baseImageUrl=${this.baseImageUrl}
112
+ .sortParam=${sortParam}
113
+ .loggedIn=${this.loggedIn}
114
+ >
115
+ </item-tile>`;
116
+ }
117
+ case 'list-compact':
118
+ return html `<tile-list-compact
119
+ .model=${model}
120
+ .currentWidth=${currentWidth}
121
+ .currentHeight=${currentHeight}
122
+ .baseNavigationUrl=${baseNavigationUrl}
123
+ .sortParam=${sortParam}
124
+ .mobileBreakpoint=${mobileBreakpoint}
125
+ .baseImageUrl=${this.baseImageUrl}
126
+ .loggedIn=${this.loggedIn}
127
+ >
128
+ </tile-list-compact>`;
129
+ case 'list-detail':
130
+ return html `<tile-list
131
+ .model=${model}
132
+ .collectionNameCache=${this.collectionNameCache}
133
+ .currentWidth=${currentWidth}
134
+ .currentHeight=${currentHeight}
135
+ .baseNavigationUrl=${baseNavigationUrl}
136
+ .sortParam=${sortParam}
137
+ .mobileBreakpoint=${mobileBreakpoint}
138
+ .baseImageUrl=${this.baseImageUrl}
139
+ .loggedIn=${this.loggedIn}
140
+ >
141
+ </tile-list>`;
142
+ default:
143
+ return nothing;
144
+ }
145
+ }
146
+ static get styles() {
147
+ return css `
148
+ :host {
149
+ display: block;
150
+ height: 100%;
151
+ }
152
+
153
+ #container {
154
+ height: 100%;
155
+ }
156
+
157
+ #delete-button {
158
+ float: right;
159
+ }
160
+
161
+ a {
162
+ display: block;
163
+ height: 100%;
164
+ color: unset;
165
+ text-decoration: none;
166
+ }
167
+
168
+ a :first-child {
169
+ display: block;
170
+ height: 100%;
171
+ }
172
+ `;
173
+ }
174
+ };
175
+ __decorate([
176
+ property({ type: String })
177
+ ], TileDispatcher.prototype, "tileDisplayMode", void 0);
178
+ __decorate([
179
+ property({ type: Object })
180
+ ], TileDispatcher.prototype, "model", void 0);
181
+ __decorate([
182
+ property({ type: String })
183
+ ], TileDispatcher.prototype, "baseNavigationUrl", void 0);
184
+ __decorate([
185
+ property({ type: Number })
186
+ ], TileDispatcher.prototype, "currentWidth", void 0);
187
+ __decorate([
188
+ property({ type: Number })
189
+ ], TileDispatcher.prototype, "currentHeight", void 0);
190
+ __decorate([
191
+ property({ type: Object })
192
+ ], TileDispatcher.prototype, "resizeObserver", void 0);
193
+ __decorate([
194
+ property({ type: Object })
195
+ ], TileDispatcher.prototype, "collectionNameCache", void 0);
196
+ __decorate([
197
+ property({ type: Object })
198
+ ], TileDispatcher.prototype, "sortParam", void 0);
199
+ __decorate([
200
+ query('#container')
201
+ ], TileDispatcher.prototype, "container", void 0);
202
+ __decorate([
203
+ property({ type: Number })
204
+ ], TileDispatcher.prototype, "mobileBreakpoint", void 0);
205
+ __decorate([
206
+ property({ type: String })
207
+ ], TileDispatcher.prototype, "baseImageUrl", void 0);
208
+ __decorate([
209
+ property({ type: Boolean })
210
+ ], TileDispatcher.prototype, "loggedIn", void 0);
211
+ TileDispatcher = __decorate([
212
+ customElement('tile-dispatcher')
213
+ ], TileDispatcher);
214
+ export { TileDispatcher };
215
+ //# sourceMappingURL=tile-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-dispatcher.js","sourceRoot":"","sources":["../../../src/tiles/tile-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, nothing, PropertyValues } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type {\n SharedResizeObserverInterface,\n SharedResizeObserverResizeHandlerInterface,\n} from '@internetarchive/shared-resize-observer';\nimport type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport type { SortParam } from '@internetarchive/search-service';\nimport type { TileDisplayMode, TileModel } from '../models';\nimport './grid/collection-tile';\nimport './grid/item-tile';\nimport './grid/account-tile';\nimport './list/tile-list';\nimport './list/tile-list-compact';\nimport './list/tile-list-compact-header';\n\n@customElement('tile-dispatcher')\nexport class TileDispatcher\n extends LitElement\n implements SharedResizeObserverResizeHandlerInterface\n{\n @property({ type: String }) tileDisplayMode?: TileDisplayMode;\n\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 }) resizeObserver?: SharedResizeObserverInterface;\n\n @property({ type: Object })\n collectionNameCache?: CollectionNameCacheInterface;\n\n @property({ type: Object }) sortParam: SortParam | null = null;\n\n @query('#container') private container!: HTMLDivElement;\n\n @property({ type: Number }) mobileBreakpoint?: number;\n\n @property({ type: String }) baseImageUrl?: string;\n\n @property({ type: Boolean }) loggedIn = false;\n\n render() {\n return html`\n <div id=\"container\">\n ${this.tileDisplayMode === 'list-header'\n ? this.headerTemplate\n : this.tileTemplate}\n </div>\n `;\n }\n\n private get headerTemplate() {\n const { currentWidth, sortParam, mobileBreakpoint } = this;\n return html`\n <tile-list-compact-header\n class=\"header\"\n .currentWidth=${currentWidth}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n >\n </tile-list-compact-header>\n `;\n }\n\n private get tileTemplate() {\n return html`\n ${this.tileDisplayMode === 'list-detail'\n ? this.tile\n : this.linkTileTemplate}\n `;\n }\n\n private get linkTileTemplate() {\n return html`\n <a\n href=\"${this.baseNavigationUrl}/details/${this.model?.identifier}\"\n title=${ifDefined(this.model?.title)}\n >\n ${this.tile}\n </a>\n `;\n }\n\n handleResize(entry: ResizeObserverEntry): void {\n this.currentWidth = entry.contentRect.width;\n this.currentHeight = entry.contentRect.height;\n }\n\n disconnectedCallback(): void {\n this.stopResizeObservation(this.resizeObserver);\n }\n\n private stopResizeObservation(observer?: SharedResizeObserverInterface) {\n observer?.removeObserver({\n handler: this,\n target: this.container,\n });\n }\n\n private startResizeObservation() {\n this.stopResizeObservation(this.resizeObserver);\n this.resizeObserver?.addObserver({\n handler: this,\n target: this.container,\n });\n }\n\n updated(props: PropertyValues) {\n if (props.has('resizeObserver')) {\n const previousObserver = props.get(\n 'resizeObserver'\n ) as SharedResizeObserverInterface;\n this.stopResizeObservation(previousObserver);\n this.startResizeObservation();\n }\n }\n\n private get tile() {\n const {\n model,\n baseNavigationUrl,\n currentWidth,\n currentHeight,\n sortParam,\n mobileBreakpoint,\n } = this;\n\n if (!model) return nothing;\n\n switch (this.tileDisplayMode) {\n case 'grid':\n switch (model.mediatype) {\n case 'collection':\n return html`<collection-tile\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n >\n </collection-tile>`;\n case 'account':\n return html`<account-tile\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n >\n </account-tile>`;\n default:\n return html`<item-tile\n .model=${model}\n .currentWidth=${this.currentWidth}\n .currentHeight=${this.currentHeight}\n .collectionNameCache=${this.collectionNameCache}\n .baseImageUrl=${this.baseImageUrl}\n .sortParam=${sortParam}\n .loggedIn=${this.loggedIn}\n >\n </item-tile>`;\n }\n case 'list-compact':\n return html`<tile-list-compact\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n >\n </tile-list-compact>`;\n case 'list-detail':\n return html`<tile-list\n .model=${model}\n .collectionNameCache=${this.collectionNameCache}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n >\n </tile-list>`;\n default:\n return nothing;\n }\n }\n\n static get styles() {\n return css`\n :host {\n display: block;\n height: 100%;\n }\n\n #container {\n height: 100%;\n }\n\n #delete-button {\n float: right;\n }\n\n a {\n display: block;\n height: 100%;\n color: unset;\n text-decoration: none;\n }\n\n a :first-child {\n display: block;\n height: 100%;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare type NumberFormat = 'short' | 'long';
2
+ export declare type LabelFormat = 'short' | 'long';
3
+ /**
4
+ * Format a "count" number into short "icon" or longer text string.
5
+ * For positive numbers only.
6
+ */
7
+ export declare function formatCount(count: number | undefined, numberFormat?: NumberFormat, labelFormat?: LabelFormat, locale?: string): string;
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Replaces Petabox www/common/Util::number_format()
3
+ * For positive numbers only.
4
+ */
5
+ import { msg, str } from '@lit/localize';
6
+ /**
7
+ * Return the magnitude of a number.
8
+ */
9
+ function magnitude(number, numberFormat) {
10
+ let divisor = 1;
11
+ if (number >= 1000000000) {
12
+ divisor = 1000000000;
13
+ }
14
+ else if (number >= 1000000) {
15
+ divisor = 1000000;
16
+ }
17
+ else if (number >= 1000 && numberFormat === 'short') {
18
+ divisor = 1000;
19
+ }
20
+ return divisor;
21
+ }
22
+ /**
23
+ * Round a number given passed magnitude.
24
+ * Significant digits of value less than 10 get a decimal.
25
+ */
26
+ function round(number = 0, divisor) {
27
+ const result = number / divisor;
28
+ const roundToOne = result < 10;
29
+ let rounded = 0;
30
+ if (roundToOne) {
31
+ rounded = Math.round((result + Number.EPSILON) * 10) / 10;
32
+ }
33
+ else {
34
+ rounded = Math.round(result);
35
+ }
36
+ return rounded;
37
+ }
38
+ /**
39
+ * Return a label for a number and format.
40
+ */
41
+ function labelize(rounded, divisor, format, locale) {
42
+ switch (divisor) {
43
+ case 1000000000:
44
+ if (format === 'short') {
45
+ return msg(str `${rounded}B`);
46
+ }
47
+ return msg(str `${rounded} billion`);
48
+ case 1000000:
49
+ if (format === 'short') {
50
+ return msg(str `${rounded}M`);
51
+ }
52
+ return msg(str `${rounded} million`);
53
+ case 1000:
54
+ if (format === 'short') {
55
+ return msg(str `${rounded}K`);
56
+ }
57
+ return msg(str `${rounded} thousand`);
58
+ default:
59
+ return new Intl.NumberFormat(locale).format(rounded);
60
+ }
61
+ }
62
+ /**
63
+ * Format a "count" number into short "icon" or longer text string.
64
+ * For positive numbers only.
65
+ */
66
+ export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
67
+ // Return blank if undefined
68
+ const number = count !== null && count !== void 0 ? count : -1;
69
+ if (number < 0) {
70
+ return '';
71
+ }
72
+ const divisor = magnitude(number, numberFormat);
73
+ const rounded = round(number, divisor);
74
+ return labelize(rounded, divisor, labelFormat, locale);
75
+ }
76
+ //# sourceMappingURL=format-count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-count.js","sourceRoot":"","sources":["../../../src/utils/format-count.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAUzC;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,YAA0B;IAC3D,IAAI,OAAO,GAAY,CAAC,CAAC;IACzB,IAAI,MAAM,IAAI,UAAa,EAAE;QAC3B,OAAO,GAAG,UAAa,CAAC;KACzB;SAAM,IAAI,MAAM,IAAI,OAAS,EAAE;QAC9B,OAAO,GAAG,OAAS,CAAC;KACrB;SAAM,IAAI,MAAM,IAAI,IAAK,IAAI,YAAY,KAAK,OAAO,EAAE;QACtD,OAAO,GAAG,IAAK,CAAC;KACjB;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,SAAiB,CAAC,EAAE,OAAgB;IACjD,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAW,CAAC,CAAC;IACxB,IAAI,UAAU,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;KAC3D;SAAM;QACL,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC9B;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CACf,OAAe,EACf,OAAgB,EAChB,MAAmB,EACnB,MAAc;IAEd,QAAQ,OAAO,EAAE;QACf,KAAK,UAAa;YAChB,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,UAAU,CAAC,CAAC;QACtC,KAAK,OAAS;YACZ,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,UAAU,CAAC,CAAC;QACtC,KAAK,IAAK;YACR,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,WAAW,CAAC,CAAC;QAEvC;YACE,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACxD;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAyB,EACzB,eAA6B,MAAM,EACnC,cAA2B,OAAO,EAClC,SAAiB,OAAO;IAExB,4BAA4B;IAC5B,MAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC","sourcesContent":["/*\n * Replaces Petabox www/common/Util::number_format()\n * For positive numbers only.\n */\nimport { msg, str } from '@lit/localize';\n\nexport type NumberFormat =\n | 'short' // 1.2 [K | thousand]\n | 'long'; // 1,200 [No label for numbers < 1,000,000]\nexport type LabelFormat =\n | 'short' // [1.2]K\n | 'long'; // [1.2] thousand\ntype Divisor = 1_000_000_000 | 1_000_000 | 1_000 | 1;\n\n/**\n * Return the magnitude of a number.\n */\nfunction magnitude(number: number, numberFormat: NumberFormat): Divisor {\n let divisor: Divisor = 1;\n if (number >= 1_000_000_000) {\n divisor = 1_000_000_000;\n } else if (number >= 1_000_000) {\n divisor = 1_000_000;\n } else if (number >= 1_000 && numberFormat === 'short') {\n divisor = 1_000;\n }\n return divisor;\n}\n\n/**\n * Round a number given passed magnitude.\n * Significant digits of value less than 10 get a decimal.\n */\nfunction round(number: number = 0, divisor: Divisor): number {\n const result = number / divisor;\n const roundToOne = result < 10;\n let rounded: number = 0;\n if (roundToOne) {\n rounded = Math.round((result + Number.EPSILON) * 10) / 10;\n } else {\n rounded = Math.round(result);\n }\n return rounded;\n}\n\n/**\n * Return a label for a number and format.\n */\nfunction labelize(\n rounded: number,\n divisor: Divisor,\n format: LabelFormat,\n locale: string\n): string {\n switch (divisor) {\n case 1_000_000_000:\n if (format === 'short') {\n return msg(str`${rounded}B`);\n }\n return msg(str`${rounded} billion`);\n case 1_000_000:\n if (format === 'short') {\n return msg(str`${rounded}M`);\n }\n return msg(str`${rounded} million`);\n case 1_000:\n if (format === 'short') {\n return msg(str`${rounded}K`);\n }\n return msg(str`${rounded} thousand`);\n\n default:\n return new Intl.NumberFormat(locale).format(rounded);\n }\n}\n\n/**\n * Format a \"count\" number into short \"icon\" or longer text string.\n * For positive numbers only.\n */\nexport function formatCount(\n count: number | undefined,\n numberFormat: NumberFormat = 'long',\n labelFormat: LabelFormat = 'short',\n locale: string = 'en-US'\n): string {\n // Return blank if undefined\n const number = count ?? -1;\n if (number < 0) {\n return '';\n }\n const divisor = magnitude(number, numberFormat);\n const rounded = round(number, divisor);\n return labelize(rounded, divisor, labelFormat, locale);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare type DateFormat = 'short' | 'long';
2
+ export declare function formatDate(date: Date | undefined, format?: DateFormat, locale?: string): string;
@@ -0,0 +1,24 @@
1
+ export function formatDate(date, format = 'short', locale = 'en-US') {
2
+ // Return blank if undefined
3
+ if (!date)
4
+ return '';
5
+ const options = {
6
+ timeZone: 'UTC', // Override browser timezone
7
+ };
8
+ switch (format) {
9
+ case 'short':
10
+ options.month = 'short';
11
+ options.year = 'numeric';
12
+ break;
13
+ case 'long':
14
+ options.year = 'numeric';
15
+ options.month = 'short';
16
+ options.day = '2-digit';
17
+ break;
18
+ default:
19
+ break;
20
+ }
21
+ const dateFormatter = new Intl.DateTimeFormat(locale, options);
22
+ return dateFormatter.format(date);
23
+ }
24
+ //# sourceMappingURL=format-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../../src/utils/format-date.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,UAAU,CACxB,IAAsB,EACtB,SAAqB,OAAO,EAC5B,SAAiB,OAAO;IAExB,4BAA4B;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,OAAO,GAA+B;QAC1C,QAAQ,EAAE,KAAK,EAAE,4BAA4B;KAC9C,CAAC;IACF,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;YACxB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;YACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;YACxB,MAAM;QACR;YACE,MAAM;KACT;IAED,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/*\n * Display date\n * Override browser timezone to always display same date as in data\n */\nexport type DateFormat =\n | 'short' // Dec 2020\n | 'long'; // Dec 20, 2020\n\nexport function formatDate(\n date: Date | undefined,\n format: DateFormat = 'short',\n locale: string = 'en-US'\n): string {\n // Return blank if undefined\n if (!date) return '';\n\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC', // Override browser timezone\n };\n switch (format) {\n case 'short':\n options.month = 'short';\n options.year = 'numeric';\n break;\n case 'long':\n options.year = 'numeric';\n options.month = 'short';\n options.day = '2-digit';\n break;\n default:\n break;\n }\n\n const dateFormatter = new Intl.DateTimeFormat(locale, options);\n return dateFormatter.format(date);\n}\n"]}
@@ -0,0 +1 @@
1
+ import '../src/collection-browser';
@@ -0,0 +1,82 @@
1
+ /* eslint-disable import/no-duplicates */
2
+ import { expect, fixture } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import sinon from 'sinon';
5
+ import '../src/collection-browser';
6
+ import { MockSearchService } from './mocks/mock-search-service';
7
+ import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
8
+ describe('Collection Browser', () => {
9
+ it('should render with a sort bar, facets, and infinite scroller', async () => {
10
+ var _a, _b, _c;
11
+ const el = await fixture(html `<collection-browser></collection-browser>`);
12
+ el.baseQuery = 'hello';
13
+ await el.updateComplete;
14
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
15
+ const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
16
+ const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
17
+ expect(facets).to.exist;
18
+ expect(sortBar).to.exist;
19
+ expect(infiniteScroller).to.exist;
20
+ });
21
+ it('queries the search service when given a base query', async () => {
22
+ var _a;
23
+ const searchService = new MockSearchService();
24
+ const el = await fixture(html `<collection-browser
25
+ .searchService=${searchService}
26
+ ></collection-browser>`);
27
+ el.baseQuery = 'collection:foo';
28
+ await el.updateComplete;
29
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
30
+ });
31
+ it('queries for collection names after a fetch', async () => {
32
+ const searchService = new MockSearchService();
33
+ const collectionNameCache = new MockCollectionNameCache();
34
+ const el = await fixture(html `<collection-browser
35
+ .searchService=${searchService}
36
+ .collectionNameCache=${collectionNameCache}
37
+ ></collection-browser>`);
38
+ el.baseQuery = 'blahblah';
39
+ await el.updateComplete;
40
+ expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([
41
+ 'foo',
42
+ 'bar',
43
+ 'baz',
44
+ 'boop',
45
+ ]);
46
+ });
47
+ it('refreshes when certain properties change', async () => {
48
+ var _a;
49
+ const searchService = new MockSearchService();
50
+ const collectionNameCache = new MockCollectionNameCache();
51
+ const el = await fixture(html `<collection-browser
52
+ .searchService=${searchService}
53
+ .collectionNameCache=${collectionNameCache}
54
+ ></collection-browser>`);
55
+ const infiniteScrollerRefreshSpy = sinon.spy();
56
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
57
+ infiniteScroller.reload = infiniteScrollerRefreshSpy;
58
+ expect(infiniteScrollerRefreshSpy.called).to.be.false;
59
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
60
+ // testing: `loggedIn`
61
+ el.loggedIn = true;
62
+ await el.updateComplete;
63
+ expect(infiniteScrollerRefreshSpy.called).to.be.true;
64
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);
65
+ el.loggedIn = false;
66
+ await el.updateComplete;
67
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);
68
+ // testing: `displayMode`
69
+ el.displayMode = 'list-compact';
70
+ await el.updateComplete;
71
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);
72
+ // testing: `baseNavigationUrl`
73
+ el.baseNavigationUrl = 'https://funtestsite.com';
74
+ await el.updateComplete;
75
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);
76
+ // testing: `baseImageUrl`
77
+ el.baseImageUrl = 'https://funtestsiteforimages.com';
78
+ await el.updateComplete;
79
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);
80
+ });
81
+ });
82
+ //# sourceMappingURL=collection-browser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-browser.test.js","sourceRoot":"","sources":["../../test/collection-browser.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { InfiniteScroller } from '@internetarchive/infinite-scroller';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport { MockSearchService } from './mocks/mock-search-service';\nimport { MockCollectionNameCache } from './mocks/mock-collection-name-cache';\n\ndescribe('Collection Browser', () => {\n it('should render with a sort bar, facets, and infinite scroller', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.baseQuery = 'hello';\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector('collection-facets');\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n expect(facets).to.exist;\n expect(sortBar).to.exist;\n expect(infiniteScroller).to.exist;\n });\n\n it('queries the search service when given a base query', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n });\n\n it('queries for collection names after a fetch', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n\n el.baseQuery = 'blahblah';\n await el.updateComplete;\n\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\n 'foo',\n 'bar',\n 'baz',\n 'boop',\n ]);\n });\n it('refreshes when certain properties change', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n const infiniteScrollerRefreshSpy = sinon.spy();\n\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n (infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;\n expect(infiniteScrollerRefreshSpy.called).to.be.false;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);\n\n // testing: `loggedIn`\n el.loggedIn = true;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.called).to.be.true;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);\n\n el.loggedIn = false;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);\n\n // testing: `displayMode`\n el.displayMode = 'list-compact';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);\n\n // testing: `baseNavigationUrl`\n el.baseNavigationUrl = 'https://funtestsite.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);\n\n // testing: `baseImageUrl`\n el.baseImageUrl = 'https://funtestsiteforimages.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ import '../src/empty-placeholder';
@@ -0,0 +1,34 @@
1
+ /* eslint-disable import/no-duplicates */
2
+ import { expect, fixture } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import '../src/empty-placeholder';
5
+ describe('Empty Placeholder', () => {
6
+ it('should render with empty-query placeholder', async () => {
7
+ var _a, _b, _c;
8
+ const el = await fixture(html `<empty-placeholder></empty-placeholder>`);
9
+ el.placeholderType = 'empty-query';
10
+ await el.updateComplete;
11
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.empty-query')).to.exist;
12
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.null-result')).to.not.exist;
13
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller')).to.not.exist;
14
+ });
15
+ it('should render with null-result placeholder', async () => {
16
+ var _a, _b, _c;
17
+ const el = await fixture(html `<empty-placeholder></empty-placeholder>`);
18
+ el.placeholderType = 'null-result';
19
+ await el.updateComplete;
20
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.null-result')).to.exist;
21
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.empty-query')).to.not.exist;
22
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('collection-facets')).to.not.exist;
23
+ });
24
+ it('should not render any empty placeholder', async () => {
25
+ var _a, _b, _c;
26
+ const el = await fixture(html `<empty-placeholder></empty-placeholder>`);
27
+ el.placeholderType = null;
28
+ await el.updateComplete;
29
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.empty-query')).to.not.exist;
30
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.null-result')).to.not.exist;
31
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('collection-facets')).to.not.exist;
32
+ });
33
+ });
34
+ //# sourceMappingURL=empty-placeholder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-placeholder.test.js","sourceRoot":"","sources":["../../test/empty-placeholder.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,0BAA0B,CAAC;AAIlC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;;QAC1D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yCAAyC,CAC9C,CAAC;QAEF,EAAE,CAAC,eAAe,GAAG,aAAa,CAAC;QACnC,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;;QAC1D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yCAAyC,CAC9C,CAAC;QAEF,EAAE,CAAC,eAAe,GAAG,aAAa,CAAC;QACnC,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;;QACvD,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yCAAyC,CAC9C,CAAC;QAEF,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport '../src/empty-placeholder';\n\nimport type { EmptyPlaceholder } from '../src/empty-placeholder';\n\ndescribe('Empty Placeholder', () => {\n it('should render with empty-query placeholder', async () => {\n const el = await fixture<EmptyPlaceholder>(\n html`<empty-placeholder></empty-placeholder>`\n );\n\n el.placeholderType = 'empty-query';\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.empty-query')).to.exist;\n expect(el.shadowRoot?.querySelector('.null-result')).to.not.exist;\n expect(el.shadowRoot?.querySelector('infinite-scroller')).to.not.exist;\n });\n\n it('should render with null-result placeholder', async () => {\n const el = await fixture<EmptyPlaceholder>(\n html`<empty-placeholder></empty-placeholder>`\n );\n\n el.placeholderType = 'null-result';\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.null-result')).to.exist;\n expect(el.shadowRoot?.querySelector('.empty-query')).to.not.exist;\n expect(el.shadowRoot?.querySelector('collection-facets')).to.not.exist;\n });\n\n it('should not render any empty placeholder', async () => {\n const el = await fixture<EmptyPlaceholder>(\n html`<empty-placeholder></empty-placeholder>`\n );\n\n el.placeholderType = null;\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.empty-query')).to.not.exist;\n expect(el.shadowRoot?.querySelector('.null-result')).to.not.exist;\n expect(el.shadowRoot?.querySelector('collection-facets')).to.not.exist;\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ import '../src/tiles/overlay/icon-overlay';