@internetarchive/collection-browser 0.2.10 → 0.2.11

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 (207) 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/mediatype/account.d.ts +1 -0
  22. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  23. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  24. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  25. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  26. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  27. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  28. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  29. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  30. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  31. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  32. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  33. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  34. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  35. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  36. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  37. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  38. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  39. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  40. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  41. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  42. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  43. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  44. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  45. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  46. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  47. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  48. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  49. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  50. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  51. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  52. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  53. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  54. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  55. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  56. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  57. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  58. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  59. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  60. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  61. package/dist/src/assets/img/icons/null-result.js +5 -0
  62. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  63. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  64. package/dist/src/assets/img/icons/restricted.js +29 -0
  65. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  66. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  67. package/dist/src/assets/img/icons/reviews.js +11 -0
  68. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  69. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  70. package/dist/src/assets/img/icons/upload.js +12 -0
  71. package/dist/src/assets/img/icons/upload.js.map +1 -0
  72. package/dist/src/assets/img/icons/views.d.ts +1 -0
  73. package/dist/src/assets/img/icons/views.js +11 -0
  74. package/dist/src/assets/img/icons/views.js.map +1 -0
  75. package/dist/src/circular-activity-indicator.d.ts +5 -0
  76. package/dist/src/circular-activity-indicator.js +66 -0
  77. package/dist/src/circular-activity-indicator.js.map +1 -0
  78. package/dist/src/collection-browser.d.ts +214 -0
  79. package/dist/src/collection-browser.js +1236 -0
  80. package/dist/src/collection-browser.js.map +1 -0
  81. package/dist/src/collection-facets.d.ts +63 -0
  82. package/dist/src/collection-facets.js +560 -0
  83. package/dist/src/collection-facets.js.map +1 -0
  84. package/dist/src/empty-placeholder.d.ts +11 -0
  85. package/dist/src/empty-placeholder.js +83 -0
  86. package/dist/src/empty-placeholder.js.map +1 -0
  87. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  88. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  89. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  90. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  91. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  92. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  93. package/dist/src/mediatype/mediatype-config.d.ts +3 -0
  94. package/dist/src/mediatype/mediatype-config.js +86 -0
  95. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  96. package/dist/src/models.d.ts +84 -0
  97. package/dist/src/models.js +58 -0
  98. package/dist/src/models.js.map +1 -0
  99. package/dist/src/restoration-state-handler.d.ts +38 -0
  100. package/dist/src/restoration-state-handler.js +204 -0
  101. package/dist/src/restoration-state-handler.js.map +1 -0
  102. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
  103. package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
  104. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  105. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  106. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  107. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  108. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  109. package/dist/src/sort-filter-bar/img/list.js +5 -0
  110. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  111. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  112. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  113. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  114. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  115. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  116. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  117. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +85 -0
  118. package/dist/src/sort-filter-bar/sort-filter-bar.js +698 -0
  119. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  120. package/dist/src/styles/item-image-styles.d.ts +8 -0
  121. package/dist/src/styles/item-image-styles.js +101 -0
  122. package/dist/src/styles/item-image-styles.js.map +1 -0
  123. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  124. package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
  125. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  126. package/dist/src/tiles/grid/account-tile.d.ts +8 -0
  127. package/dist/src/tiles/grid/account-tile.js +126 -0
  128. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  129. package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
  130. package/dist/src/tiles/grid/collection-tile.js +159 -0
  131. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  132. package/dist/src/tiles/grid/item-tile.d.ts +16 -0
  133. package/dist/src/tiles/grid/item-tile.js +174 -0
  134. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  135. package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
  136. package/dist/src/tiles/grid/tile-stats.js +134 -0
  137. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  138. package/dist/src/tiles/item-image.d.ts +31 -0
  139. package/dist/src/tiles/item-image.js +117 -0
  140. package/dist/src/tiles/item-image.js.map +1 -0
  141. package/dist/src/tiles/item-tile-image.d.ts +15 -0
  142. package/dist/src/tiles/item-tile-image.js +68 -0
  143. package/dist/src/tiles/item-tile-image.js.map +1 -0
  144. package/dist/src/tiles/list/account-label.d.ts +1 -0
  145. package/dist/src/tiles/list/account-label.js +7 -0
  146. package/dist/src/tiles/list/account-label.js.map +1 -0
  147. package/dist/src/tiles/list/date-label.d.ts +1 -0
  148. package/dist/src/tiles/list/date-label.js +13 -0
  149. package/dist/src/tiles/list/date-label.js.map +1 -0
  150. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  151. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  152. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  153. package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
  154. package/dist/src/tiles/list/tile-list-compact.js +215 -0
  155. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  156. package/dist/src/tiles/list/tile-list.d.ts +47 -0
  157. package/dist/src/tiles/list/tile-list.js +492 -0
  158. package/dist/src/tiles/list/tile-list.js.map +1 -0
  159. package/dist/src/tiles/mediatype-icon.d.ts +9 -0
  160. package/dist/src/tiles/mediatype-icon.js +82 -0
  161. package/dist/src/tiles/mediatype-icon.js.map +1 -0
  162. package/dist/src/tiles/tile-dispatcher.d.ts +35 -0
  163. package/dist/src/tiles/tile-dispatcher.js +204 -0
  164. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  165. package/dist/src/utils/format-count.d.ts +7 -0
  166. package/dist/src/utils/format-count.js +76 -0
  167. package/dist/src/utils/format-count.js.map +1 -0
  168. package/dist/src/utils/format-date.d.ts +2 -0
  169. package/dist/src/utils/format-date.js +24 -0
  170. package/dist/src/utils/format-date.js.map +1 -0
  171. package/dist/test/collection-browser.test.d.ts +1 -0
  172. package/dist/test/collection-browser.test.js +47 -0
  173. package/dist/test/collection-browser.test.js.map +1 -0
  174. package/dist/test/empty-placeholder.test.d.ts +1 -0
  175. package/dist/test/empty-placeholder.test.js +34 -0
  176. package/dist/test/empty-placeholder.test.js.map +1 -0
  177. package/dist/test/mediatype-config.test.d.ts +1 -0
  178. package/dist/test/mediatype-config.test.js +17 -0
  179. package/dist/test/mediatype-config.test.js.map +1 -0
  180. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
  181. package/dist/test/mocks/mock-collection-name-cache.js +14 -0
  182. package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
  183. package/dist/test/mocks/mock-search-responses.d.ts +3 -0
  184. package/dist/test/mocks/mock-search-responses.js +32 -0
  185. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  186. package/dist/test/mocks/mock-search-service.d.ts +8 -0
  187. package/dist/test/mocks/mock-search-service.js +16 -0
  188. package/dist/test/mocks/mock-search-service.js.map +1 -0
  189. package/dist/test/tile-stats.test.d.ts +1 -0
  190. package/dist/test/tile-stats.test.js +42 -0
  191. package/dist/test/tile-stats.test.js.map +1 -0
  192. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  193. package/dist/test/tiles/grid/item-tile.test.js +96 -0
  194. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  195. package/dist/test/utils/format-count.test.d.ts +1 -0
  196. package/dist/test/utils/format-count.test.js +24 -0
  197. package/dist/test/utils/format-count.test.js.map +1 -0
  198. package/dist/test/utils/format-date.test.d.ts +1 -0
  199. package/dist/test/utils/format-date.test.js +18 -0
  200. package/dist/test/utils/format-date.test.js.map +1 -0
  201. package/package.json +1 -1
  202. package/src/assets/img/icons/empty-query.ts +5 -0
  203. package/src/assets/img/icons/null-result.ts +5 -0
  204. package/src/collection-browser.ts +91 -61
  205. package/src/empty-placeholder.ts +79 -0
  206. package/test/collection-browser.test.ts +3 -0
  207. package/test/empty-placeholder.test.ts +46 -0
@@ -0,0 +1,204 @@
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
+ }
16
+ render() {
17
+ return html `
18
+ <div id="container">
19
+ ${this.tileDisplayMode === 'list-header'
20
+ ? this.headerTemplate
21
+ : this.tileTemplate}
22
+ </div>
23
+ `;
24
+ }
25
+ get headerTemplate() {
26
+ const { currentWidth, sortParam, mobileBreakpoint } = this;
27
+ return html `
28
+ <tile-list-compact-header
29
+ class="header"
30
+ .currentWidth=${currentWidth}
31
+ .sortParam=${sortParam}
32
+ .mobileBreakpoint=${mobileBreakpoint}
33
+ >
34
+ </tile-list-compact-header>
35
+ `;
36
+ }
37
+ get tileTemplate() {
38
+ return html `
39
+ ${this.tileDisplayMode === 'list-detail'
40
+ ? this.tile
41
+ : this.linkTileTemplate}
42
+ `;
43
+ }
44
+ get linkTileTemplate() {
45
+ var _a, _b;
46
+ return html `
47
+ <a
48
+ href="${this.baseNavigationUrl}/details/${(_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier}"
49
+ title=${ifDefined((_b = this.model) === null || _b === void 0 ? void 0 : _b.title)}
50
+ >
51
+ ${this.tile}
52
+ </a>
53
+ `;
54
+ }
55
+ handleResize(entry) {
56
+ this.currentWidth = entry.contentRect.width;
57
+ this.currentHeight = entry.contentRect.height;
58
+ }
59
+ disconnectedCallback() {
60
+ this.stopResizeObservation(this.resizeObserver);
61
+ }
62
+ stopResizeObservation(observer) {
63
+ observer === null || observer === void 0 ? void 0 : observer.removeObserver({
64
+ handler: this,
65
+ target: this.container,
66
+ });
67
+ }
68
+ startResizeObservation() {
69
+ var _a;
70
+ this.stopResizeObservation(this.resizeObserver);
71
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.addObserver({
72
+ handler: this,
73
+ target: this.container,
74
+ });
75
+ }
76
+ updated(props) {
77
+ if (props.has('resizeObserver')) {
78
+ const previousObserver = props.get('resizeObserver');
79
+ this.stopResizeObservation(previousObserver);
80
+ this.startResizeObservation();
81
+ }
82
+ }
83
+ get tile() {
84
+ const { model, baseNavigationUrl, currentWidth, currentHeight, sortParam, mobileBreakpoint, } = this;
85
+ if (!model)
86
+ return nothing;
87
+ switch (this.tileDisplayMode) {
88
+ case 'grid':
89
+ switch (model.mediatype) {
90
+ case 'collection':
91
+ return html `<collection-tile
92
+ .model=${model}
93
+ .currentWidth=${currentWidth}
94
+ .currentHeight=${currentHeight}
95
+ >
96
+ </collection-tile>`;
97
+ case 'account':
98
+ return html `<account-tile
99
+ .model=${model}
100
+ .currentWidth=${currentWidth}
101
+ .currentHeight=${currentHeight}
102
+ ></account-tile>`;
103
+ default:
104
+ return html `<item-tile
105
+ .model=${model}
106
+ .currentWidth=${this.currentWidth}
107
+ .currentHeight=${this.currentHeight}
108
+ .collectionNameCache=${this.collectionNameCache}
109
+ .baseImageUrl=${this.baseImageUrl}
110
+ .sortParam=${sortParam}
111
+ ></item-tile>`;
112
+ }
113
+ case 'list-compact':
114
+ return html `<tile-list-compact
115
+ .model=${model}
116
+ .currentWidth=${currentWidth}
117
+ .currentHeight=${currentHeight}
118
+ .baseNavigationUrl=${baseNavigationUrl}
119
+ .sortParam=${sortParam}
120
+ .mobileBreakpoint=${mobileBreakpoint}
121
+ .baseImageUrl=${this.baseImageUrl}
122
+ ></tile-list-compact>`;
123
+ case 'list-detail':
124
+ return html `<tile-list
125
+ .model=${model}
126
+ .collectionNameCache=${this.collectionNameCache}
127
+ .currentWidth=${currentWidth}
128
+ .currentHeight=${currentHeight}
129
+ .baseNavigationUrl=${baseNavigationUrl}
130
+ .sortParam=${sortParam}
131
+ .mobileBreakpoint=${mobileBreakpoint}
132
+ .baseImageUrl=${this.baseImageUrl}
133
+ ></tile-list>`;
134
+ default:
135
+ return nothing;
136
+ }
137
+ }
138
+ static get styles() {
139
+ return css `
140
+ :host {
141
+ display: block;
142
+ height: 100%;
143
+ }
144
+
145
+ #container {
146
+ height: 100%;
147
+ }
148
+
149
+ #delete-button {
150
+ float: right;
151
+ }
152
+
153
+ a {
154
+ display: block;
155
+ height: 100%;
156
+ color: unset;
157
+ text-decoration: none;
158
+ }
159
+
160
+ a :first-child {
161
+ display: block;
162
+ height: 100%;
163
+ }
164
+ `;
165
+ }
166
+ };
167
+ __decorate([
168
+ property({ type: String })
169
+ ], TileDispatcher.prototype, "tileDisplayMode", void 0);
170
+ __decorate([
171
+ property({ type: Object })
172
+ ], TileDispatcher.prototype, "model", void 0);
173
+ __decorate([
174
+ property({ type: String })
175
+ ], TileDispatcher.prototype, "baseNavigationUrl", void 0);
176
+ __decorate([
177
+ property({ type: Number })
178
+ ], TileDispatcher.prototype, "currentWidth", void 0);
179
+ __decorate([
180
+ property({ type: Number })
181
+ ], TileDispatcher.prototype, "currentHeight", void 0);
182
+ __decorate([
183
+ property({ type: Object })
184
+ ], TileDispatcher.prototype, "resizeObserver", void 0);
185
+ __decorate([
186
+ property({ type: Object })
187
+ ], TileDispatcher.prototype, "collectionNameCache", void 0);
188
+ __decorate([
189
+ property({ type: Object })
190
+ ], TileDispatcher.prototype, "sortParam", void 0);
191
+ __decorate([
192
+ query('#container')
193
+ ], TileDispatcher.prototype, "container", void 0);
194
+ __decorate([
195
+ property({ type: Number })
196
+ ], TileDispatcher.prototype, "mobileBreakpoint", void 0);
197
+ __decorate([
198
+ property({ type: String })
199
+ ], TileDispatcher.prototype, "baseImageUrl", void 0);
200
+ TileDispatcher = __decorate([
201
+ customElement('tile-dispatcher')
202
+ ], TileDispatcher);
203
+ export { TileDispatcher };
204
+ //# 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 {\n SharedResizeObserverInterface,\n SharedResizeObserverResizeHandlerInterface,\n} from '@internetarchive/shared-resize-observer';\nimport type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport { 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 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 ></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 ></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 ></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 ></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,47 @@
1
+ /* eslint-disable import/no-duplicates */
2
+ import { expect, fixture } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import '../src/collection-browser';
5
+ import { MockSearchService } from './mocks/mock-search-service';
6
+ import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
7
+ describe('Collection Browser', () => {
8
+ it('should render with a sort bar, facets, and infinite scroller', async () => {
9
+ var _a, _b, _c;
10
+ const el = await fixture(html `<collection-browser></collection-browser>`);
11
+ el.baseQuery = 'hello';
12
+ await el.updateComplete;
13
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
14
+ const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
15
+ const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
16
+ expect(facets).to.exist;
17
+ expect(sortBar).to.exist;
18
+ expect(infiniteScroller).to.exist;
19
+ });
20
+ it('queries the search service when given a base query', async () => {
21
+ var _a;
22
+ const searchService = new MockSearchService();
23
+ const el = await fixture(html `<collection-browser
24
+ .searchService=${searchService}
25
+ ></collection-browser>`);
26
+ el.baseQuery = 'collection:foo';
27
+ await el.updateComplete;
28
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
29
+ });
30
+ it('queries for collection names after a fetch', async () => {
31
+ const searchService = new MockSearchService();
32
+ const collectionNameCache = new MockCollectionNameCache();
33
+ const el = await fixture(html `<collection-browser
34
+ .searchService=${searchService}
35
+ .collectionNameCache=${collectionNameCache}
36
+ ></collection-browser>`);
37
+ el.baseQuery = 'blahblah';
38
+ await el.updateComplete;
39
+ expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([
40
+ 'foo',
41
+ 'bar',
42
+ 'baz',
43
+ 'boop',
44
+ ]);
45
+ });
46
+ });
47
+ //# 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":"AAAA,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;;QAC5E,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2CAA2C,CAChD,CAAC;QAEF,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC;QACvB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,MAAM,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,gBAAgB,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACzB,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;;QAClE,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAE9C,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;yBACe,aAAa;6BACT,CACxB,CAAC;QAEF,EAAE,CAAC,SAAS,GAAG,gBAAgB,CAAC;QAChC,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,MAAA,aAAa,CAAC,YAAY,0CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC9C,MAAM,mBAAmB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAE1D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;yBACe,aAAa;+BACP,mBAAmB;6BACrB,CACxB,CAAC;QAEF,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC;QAC1B,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACpE,KAAK;YACL,KAAK;YACL,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,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 { 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});\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;AAE3B,OAAO,0BAA0B,CAAC;AAElC,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 { EmptyPlaceholder } from '../src/empty-placeholder';\nimport '../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
+ export {};
@@ -0,0 +1,17 @@
1
+ import { expect } from '@open-wc/testing';
2
+ import { mediatypeConfig } from '../src/mediatype/mediatype-config';
3
+ describe('mediatypeConfig', () => {
4
+ it('returns undefined', () => {
5
+ expect(mediatypeConfig['']).to.equal(undefined);
6
+ expect(mediatypeConfig.test).to.equal(undefined);
7
+ expect(mediatypeConfig.media).to.equal(undefined);
8
+ expect(mediatypeConfig.testing).to.equal(undefined);
9
+ });
10
+ it('returns audio', () => {
11
+ expect(mediatypeConfig.audio).to.exist;
12
+ expect(mediatypeConfig.audio.color).to.exist;
13
+ expect(mediatypeConfig.audio.icon).to.exist;
14
+ expect(mediatypeConfig.audio.text).to.exist;
15
+ });
16
+ });
17
+ //# sourceMappingURL=mediatype-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediatype-config.test.js","sourceRoot":"","sources":["../../test/mediatype-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { mediatypeConfig } from '../src/mediatype/mediatype-config';\n\ndescribe('mediatypeConfig', () => {\n it('returns undefined', () => {\n expect(mediatypeConfig['']).to.equal(undefined);\n expect(mediatypeConfig.test).to.equal(undefined);\n expect(mediatypeConfig.media).to.equal(undefined);\n expect(mediatypeConfig.testing).to.equal(undefined);\n });\n\n it('returns audio', () => {\n expect(mediatypeConfig.audio).to.exist;\n expect(mediatypeConfig.audio.color).to.exist;\n expect(mediatypeConfig.audio.icon).to.exist;\n expect(mediatypeConfig.audio.text).to.exist;\n });\n});\n"]}
@@ -0,0 +1,7 @@
1
+ import { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
2
+ export declare class MockCollectionNameCache implements CollectionNameCacheInterface {
3
+ collectionNamesRequested: string[];
4
+ preloadIdentifiersRequested: string[];
5
+ collectionNameFor(identifier: string): Promise<string | null>;
6
+ preloadIdentifiers(identifiers: string[]): Promise<void>;
7
+ }
@@ -0,0 +1,14 @@
1
+ export class MockCollectionNameCache {
2
+ constructor() {
3
+ this.collectionNamesRequested = [];
4
+ this.preloadIdentifiersRequested = [];
5
+ }
6
+ async collectionNameFor(identifier) {
7
+ this.collectionNamesRequested.push(identifier);
8
+ return `${identifier}-name`;
9
+ }
10
+ async preloadIdentifiers(identifiers) {
11
+ this.preloadIdentifiersRequested = identifiers;
12
+ }
13
+ }
14
+ //# sourceMappingURL=mock-collection-name-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-collection-name-cache.js","sourceRoot":"","sources":["../../../test/mocks/mock-collection-name-cache.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAApC;QACE,6BAAwB,GAAa,EAAE,CAAC;QAExC,gCAA2B,GAAa,EAAE,CAAC;IAU7C,CAAC;IARC,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,GAAG,UAAU,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAqB;QAC5C,IAAI,CAAC,2BAA2B,GAAG,WAAW,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\n\nexport class MockCollectionNameCache implements CollectionNameCacheInterface {\n collectionNamesRequested: string[] = [];\n\n preloadIdentifiersRequested: string[] = [];\n\n async collectionNameFor(identifier: string): Promise<string | null> {\n this.collectionNamesRequested.push(identifier);\n return `${identifier}-name`;\n }\n\n async preloadIdentifiers(identifiers: string[]): Promise<void> {\n this.preloadIdentifiersRequested = identifiers;\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { Result } from '@internetarchive/result-type';
2
+ import { SearchResponse, SearchServiceError } from '@internetarchive/search-service';
3
+ export declare const mockSuccessResponse: Result<SearchResponse, SearchServiceError>;
@@ -0,0 +1,32 @@
1
+ import { Metadata, } from '@internetarchive/search-service';
2
+ export const mockSuccessResponse = {
3
+ success: {
4
+ rawResponse: {},
5
+ response: {
6
+ numFound: 2,
7
+ docs: [
8
+ new Metadata({
9
+ identifier: 'foo',
10
+ collections_raw: ['foo', 'bar'],
11
+ }),
12
+ new Metadata({
13
+ identifier: 'bar',
14
+ collections_raw: ['baz', 'boop'],
15
+ }),
16
+ ],
17
+ start: 0,
18
+ },
19
+ responseHeader: {
20
+ status: 0,
21
+ QTime: 0,
22
+ params: {
23
+ query: 'collection:foo',
24
+ qin: 'collection:foo',
25
+ fields: 'identifier, collections_raw',
26
+ wt: 'foo',
27
+ start: 0,
28
+ },
29
+ },
30
+ },
31
+ };
32
+ //# sourceMappingURL=mock-search-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-search-responses.js","sourceRoot":"","sources":["../../../test/mocks/mock-search-responses.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,GAGT,MAAM,iCAAiC,CAAC;AAEzC,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,OAAO,EAAE;QACP,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE;YACR,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE;gBACJ,IAAI,QAAQ,CAAC;oBACX,UAAU,EAAE,KAAK;oBACjB,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;iBAChC,CAAC;gBACF,IAAI,QAAQ,CAAC;oBACX,UAAU,EAAE,KAAK;oBACjB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;iBACjC,CAAC;aACH;YACD,KAAK,EAAE,CAAC;SACT;QACD,cAAc,EAAE;YACd,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,MAAM,EAAE;gBACN,KAAK,EAAE,gBAAgB;gBACvB,GAAG,EAAE,gBAAgB;gBACrB,MAAM,EAAE,6BAA6B;gBACrC,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,CAAC;aACT;SACF;KACF;CACF,CAAC","sourcesContent":["import { Result } from '@internetarchive/result-type';\nimport {\n Metadata,\n SearchResponse,\n SearchServiceError,\n} from '@internetarchive/search-service';\n\nexport const mockSuccessResponse: Result<SearchResponse, SearchServiceError> = {\n success: {\n rawResponse: {},\n response: {\n numFound: 2,\n docs: [\n new Metadata({\n identifier: 'foo',\n collections_raw: ['foo', 'bar'],\n }),\n new Metadata({\n identifier: 'bar',\n collections_raw: ['baz', 'boop'],\n }),\n ],\n start: 0,\n },\n responseHeader: {\n status: 0,\n QTime: 0,\n params: {\n query: 'collection:foo',\n qin: 'collection:foo',\n fields: 'identifier, collections_raw',\n wt: 'foo',\n start: 0,\n },\n },\n },\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { Result } from '@internetarchive/result-type';
2
+ import { MetadataResponse, SearchParams, SearchResponse, SearchServiceInterface, SearchServiceError } from '@internetarchive/search-service';
3
+ export declare class MockSearchService implements SearchServiceInterface {
4
+ searchParams?: SearchParams;
5
+ search(params: SearchParams): Promise<Result<SearchResponse, SearchServiceError>>;
6
+ fetchMetadata(identifier: string): Promise<Result<MetadataResponse, SearchServiceError>>;
7
+ fetchMetadataValue<T>(identifier: string, keypath: string): Promise<Result<T, SearchServiceError>>;
8
+ }
@@ -0,0 +1,16 @@
1
+ import { mockSuccessResponse } from './mock-search-responses';
2
+ export class MockSearchService {
3
+ async search(params) {
4
+ this.searchParams = params;
5
+ return mockSuccessResponse;
6
+ }
7
+ async fetchMetadata(identifier) {
8
+ console.debug('fetchMetadata', identifier);
9
+ throw new Error('Method not implemented.');
10
+ }
11
+ async fetchMetadataValue(identifier, keypath) {
12
+ console.debug('fetchMetadataValue', identifier, keypath);
13
+ throw new Error('Method not implemented.');
14
+ }
15
+ }
16
+ //# sourceMappingURL=mock-search-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-search-service.js","sourceRoot":"","sources":["../../../test/mocks/mock-search-service.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,OAAO,iBAAiB;IAG5B,KAAK,CAAC,MAAM,CACV,MAAoB;QAEpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC3B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,UAAkB;QAElB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,UAAkB,EAClB,OAAe;QAEf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF","sourcesContent":["import { Result } from '@internetarchive/result-type';\nimport {\n MetadataResponse,\n SearchParams,\n SearchResponse,\n SearchServiceInterface,\n SearchServiceError,\n} from '@internetarchive/search-service';\nimport { mockSuccessResponse } from './mock-search-responses';\n\nexport class MockSearchService implements SearchServiceInterface {\n searchParams?: SearchParams;\n\n async search(\n params: SearchParams\n ): Promise<Result<SearchResponse, SearchServiceError>> {\n this.searchParams = params;\n return mockSuccessResponse;\n }\n\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, SearchServiceError>> {\n console.debug('fetchMetadata', identifier);\n throw new Error('Method not implemented.');\n }\n\n async fetchMetadataValue<T>(\n identifier: string,\n keypath: string\n ): Promise<Result<T, SearchServiceError>> {\n console.debug('fetchMetadataValue', identifier, keypath);\n throw new Error('Method not implemented.');\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ import '../src/tiles/grid/tile-stats';