@internetarchive/collection-browser 0.0.1-alpha.4 → 0.0.1-alpha.42

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 (221) hide show
  1. package/demo/app-root.ts +39 -160
  2. package/demo/index.html +2 -2
  3. package/dist/demo/app-root.d.ts +3 -16
  4. package/dist/demo/app-root.js +32 -143
  5. package/dist/demo/app-root.js.map +1 -1
  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/eye-closed.d.ts +2 -0
  10. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  11. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  12. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  13. package/dist/src/assets/img/icons/eye.js +5 -0
  14. package/dist/src/assets/img/icons/eye.js.map +1 -0
  15. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -2
  16. package/dist/src/assets/img/icons/mediatype/account.js +6 -4
  17. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -1
  18. package/dist/src/assets/img/icons/mediatype/audio.js +7 -4
  19. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -1
  20. package/dist/src/assets/img/icons/mediatype/collection.js +7 -4
  21. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -1
  22. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  23. package/dist/src/assets/img/icons/mediatype/data.js +16 -0
  24. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  25. package/dist/src/assets/img/icons/mediatype/etree.js +10 -5
  26. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -1
  27. package/dist/src/assets/img/icons/mediatype/film.js +2 -1
  28. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -1
  29. package/dist/src/assets/img/icons/mediatype/images.js +9 -6
  30. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -1
  31. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  32. package/dist/src/assets/img/icons/mediatype/radio.js +16 -0
  33. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  34. package/dist/src/assets/img/icons/mediatype/software.js +9 -6
  35. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -1
  36. package/dist/src/assets/img/icons/mediatype/texts.js +9 -6
  37. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -1
  38. package/dist/src/assets/img/icons/mediatype/tv.js +10 -5
  39. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -1
  40. package/dist/src/assets/img/icons/mediatype/video.js +10 -6
  41. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -1
  42. package/dist/src/assets/img/icons/mediatype/web.js +9 -6
  43. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -1
  44. package/dist/src/async-collection-name.d.ts +11 -0
  45. package/dist/src/async-collection-name.js +38 -0
  46. package/dist/src/async-collection-name.js.map +1 -0
  47. package/dist/src/collection-browser.d.ts +63 -17
  48. package/dist/src/collection-browser.js +540 -106
  49. package/dist/src/collection-browser.js.map +1 -1
  50. package/dist/src/collection-facets.d.ts +35 -6
  51. package/dist/src/collection-facets.js +384 -86
  52. package/dist/src/collection-facets.js.map +1 -1
  53. package/dist/src/collection-name-cache.d.ts +18 -0
  54. package/dist/src/collection-name-cache.js +89 -0
  55. package/dist/src/collection-name-cache.js.map +1 -0
  56. package/dist/src/language-code-handler/language-code-handler.d.ts +20 -0
  57. package/dist/src/language-code-handler/language-code-handler.js +24 -0
  58. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  59. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  60. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  61. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  62. package/dist/src/language-code-mapping.d.ts +2 -0
  63. package/dist/src/language-code-mapping.js +572 -0
  64. package/dist/src/language-code-mapping.js.map +1 -0
  65. package/dist/src/mediatype-icon.d.ts +2 -0
  66. package/dist/src/mediatype-icon.js +37 -8
  67. package/dist/src/mediatype-icon.js.map +1 -1
  68. package/dist/src/models.d.ts +72 -13
  69. package/dist/src/models.js +57 -1
  70. package/dist/src/models.js.map +1 -1
  71. package/dist/src/restoration-state-handler.d.ts +37 -0
  72. package/dist/src/restoration-state-handler.js +196 -0
  73. package/dist/src/restoration-state-handler.js.map +1 -0
  74. package/dist/src/sort-filter-bar/alpha-bar.d.ts +1 -2
  75. package/dist/src/sort-filter-bar/alpha-bar.js +19 -9
  76. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  77. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  78. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  79. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  80. package/dist/src/sort-filter-bar/img/grid.d.ts +1 -0
  81. package/dist/src/sort-filter-bar/img/grid.js +5 -0
  82. package/dist/src/sort-filter-bar/img/grid.js.map +1 -0
  83. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  84. package/dist/src/sort-filter-bar/img/list.js +5 -0
  85. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  86. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  87. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  88. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  89. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  90. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  91. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  92. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +74 -13
  93. package/dist/src/sort-filter-bar/sort-filter-bar.js +585 -149
  94. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  95. package/dist/src/tiles/grid/collection-tile.js +1 -2
  96. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  97. package/dist/src/tiles/grid/item-tile.d.ts +1 -0
  98. package/dist/src/tiles/grid/item-tile.js +79 -107
  99. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  100. package/dist/src/tiles/list/account-label.d.ts +1 -0
  101. package/dist/src/tiles/list/account-label.js +7 -0
  102. package/dist/src/tiles/list/account-label.js.map +1 -0
  103. package/dist/src/tiles/list/date-label.d.ts +1 -0
  104. package/dist/src/tiles/list/date-label.js +13 -0
  105. package/dist/src/tiles/list/date-label.js.map +1 -0
  106. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  107. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  108. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  109. package/dist/src/tiles/list/tile-list-compact.d.ts +3 -1
  110. package/dist/src/tiles/list/tile-list-compact.js +122 -37
  111. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  112. package/dist/src/tiles/list/tile-list-detail.d.ts +0 -10
  113. package/dist/src/tiles/list/tile-list-detail.js +6 -159
  114. package/dist/src/tiles/list/tile-list-detail.js.map +1 -1
  115. package/dist/src/tiles/list/tile-list.d.ts +27 -7
  116. package/dist/src/tiles/list/tile-list.js +319 -105
  117. package/dist/src/tiles/list/tile-list.js.map +1 -1
  118. package/dist/src/tiles/loading-tile.js +1 -42
  119. package/dist/src/tiles/loading-tile.js.map +1 -1
  120. package/dist/src/tiles/tile-dispatcher.d.ts +11 -3
  121. package/dist/src/tiles/tile-dispatcher.js +58 -14
  122. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  123. package/dist/src/utils/format-date.js +2 -2
  124. package/dist/src/utils/format-date.js.map +1 -1
  125. package/dist/test/{utils/format-string.test.d.ts → collection-name-cache.test.d.ts} +0 -0
  126. package/dist/test/collection-name-cache.test.js +158 -0
  127. package/dist/test/collection-name-cache.test.js.map +1 -0
  128. package/dist/test/mocks/mock-search-response.d.ts +5 -0
  129. package/dist/test/mocks/mock-search-response.js +62 -0
  130. package/dist/test/mocks/mock-search-response.js.map +1 -0
  131. package/dist/test/mocks/mock-search-service.d.ts +13 -0
  132. package/dist/test/mocks/mock-search-service.js +20 -0
  133. package/dist/test/mocks/mock-search-service.js.map +1 -0
  134. package/dist/test/utils/format-date.test.js +1 -1
  135. package/dist/test/utils/format-date.test.js.map +1 -1
  136. package/local.archive.org.cert +86 -0
  137. package/local.archive.org.key +27 -0
  138. package/package.json +10 -5
  139. package/src/assets/img/icons/chevron.ts +4 -0
  140. package/src/assets/img/icons/eye-closed.ts +5 -0
  141. package/src/assets/img/icons/eye.ts +5 -0
  142. package/src/assets/img/icons/mediatype/account.ts +6 -4
  143. package/src/assets/img/icons/mediatype/audio.ts +7 -4
  144. package/src/assets/img/icons/mediatype/collection.ts +7 -4
  145. package/src/assets/img/icons/mediatype/data.ts +16 -0
  146. package/src/assets/img/icons/mediatype/etree.ts +10 -5
  147. package/src/assets/img/icons/mediatype/film.ts +2 -1
  148. package/src/assets/img/icons/mediatype/images.ts +9 -6
  149. package/src/assets/img/icons/mediatype/radio.ts +16 -0
  150. package/src/assets/img/icons/mediatype/software.ts +9 -6
  151. package/src/assets/img/icons/mediatype/texts.ts +9 -6
  152. package/src/assets/img/icons/mediatype/tv.ts +10 -5
  153. package/src/assets/img/icons/mediatype/video.ts +10 -6
  154. package/src/assets/img/icons/mediatype/web.ts +9 -6
  155. package/src/collection-browser.ts +571 -105
  156. package/src/collection-facets.ts +428 -120
  157. package/src/language-code-handler/language-code-handler.ts +45 -0
  158. package/src/language-code-handler/language-code-mapping.ts +564 -0
  159. package/src/mediatype-icon.ts +43 -8
  160. package/src/models.ts +141 -13
  161. package/src/restoration-state-handler.ts +252 -0
  162. package/src/sort-filter-bar/alpha-bar.ts +19 -9
  163. package/src/sort-filter-bar/img/compact.ts +5 -0
  164. package/src/sort-filter-bar/img/list.ts +5 -0
  165. package/src/sort-filter-bar/img/sort-triangle.ts +5 -0
  166. package/src/sort-filter-bar/img/tile.ts +5 -0
  167. package/src/sort-filter-bar/sort-filter-bar.ts +645 -155
  168. package/src/tiles/grid/collection-tile.ts +1 -2
  169. package/src/tiles/grid/item-tile.ts +83 -120
  170. package/src/tiles/list/account-label.ts +6 -0
  171. package/src/tiles/list/date-label.ts +12 -0
  172. package/src/tiles/list/tile-list-compact-header.ts +77 -0
  173. package/src/tiles/list/tile-list-compact.ts +204 -0
  174. package/src/tiles/list/tile-list.ts +353 -109
  175. package/src/tiles/loading-tile.ts +1 -42
  176. package/src/tiles/tile-dispatcher.ts +69 -16
  177. package/src/utils/format-date.ts +2 -2
  178. package/test/utils/format-date.test.ts +1 -1
  179. package/web-dev-server.config.mjs +3 -1
  180. package/dist/src/assets/img/icons/audio.d.ts +0 -1
  181. package/dist/src/assets/img/icons/audio.js +0 -9
  182. package/dist/src/assets/img/icons/audio.js.map +0 -1
  183. package/dist/src/assets/img/icons/collection.d.ts +0 -1
  184. package/dist/src/assets/img/icons/collection.js +0 -9
  185. package/dist/src/assets/img/icons/collection.js.map +0 -1
  186. package/dist/src/assets/img/icons/etree.d.ts +0 -1
  187. package/dist/src/assets/img/icons/etree.js +0 -9
  188. package/dist/src/assets/img/icons/etree.js.map +0 -1
  189. package/dist/src/assets/img/icons/images.d.ts +0 -1
  190. package/dist/src/assets/img/icons/images.js +0 -10
  191. package/dist/src/assets/img/icons/images.js.map +0 -1
  192. package/dist/src/assets/img/icons/mediatype/etree copy.d.ts +0 -1
  193. package/dist/src/assets/img/icons/mediatype/etree copy.js +0 -9
  194. package/dist/src/assets/img/icons/mediatype/etree copy.js.map +0 -1
  195. package/dist/src/assets/img/icons/mediatype/livemusic.d.ts +0 -1
  196. package/dist/src/assets/img/icons/mediatype/livemusic.js +0 -7
  197. package/dist/src/assets/img/icons/mediatype/livemusic.js.map +0 -1
  198. package/dist/src/assets/img/icons/mediatype/photos.d.ts +0 -1
  199. package/dist/src/assets/img/icons/mediatype/photos.js +0 -7
  200. package/dist/src/assets/img/icons/mediatype/photos.js.map +0 -1
  201. package/dist/src/assets/img/icons/software.d.ts +0 -1
  202. package/dist/src/assets/img/icons/software.js +0 -10
  203. package/dist/src/assets/img/icons/software.js.map +0 -1
  204. package/dist/src/assets/img/icons/texts.d.ts +0 -1
  205. package/dist/src/assets/img/icons/texts.js +0 -10
  206. package/dist/src/assets/img/icons/texts.js.map +0 -1
  207. package/dist/src/assets/img/icons/tv.d.ts +0 -1
  208. package/dist/src/assets/img/icons/tv.js +0 -9
  209. package/dist/src/assets/img/icons/tv.js.map +0 -1
  210. package/dist/src/assets/img/icons/video.d.ts +0 -1
  211. package/dist/src/assets/img/icons/video.js +0 -10
  212. package/dist/src/assets/img/icons/video.js.map +0 -1
  213. package/dist/src/assets/img/icons/web.d.ts +0 -1
  214. package/dist/src/assets/img/icons/web.js +0 -10
  215. package/dist/src/assets/img/icons/web.js.map +0 -1
  216. package/dist/src/utils/format-string.d.ts +0 -2
  217. package/dist/src/utils/format-string.js +0 -7
  218. package/dist/src/utils/format-string.js.map +0 -1
  219. package/dist/test/utils/format-string.test.js +0 -17
  220. package/dist/test/utils/format-string.test.js.map +0 -1
  221. package/src/assets/img/icons/mediatype/foo.svg +0 -5
package/demo/app-root.ts CHANGED
@@ -1,28 +1,36 @@
1
- import { SearchService } from '@internetarchive/search-service';
1
+ import {
2
+ DefaultSearchBackend,
3
+ SearchService,
4
+ } from '@internetarchive/search-service';
5
+ import { LocalCache } from '@internetarchive/local-cache';
2
6
  import { html, css, LitElement, PropertyValues } from 'lit';
3
7
  import { customElement, query, state } from 'lit/decorators.js';
4
- import {
5
- SortDirection,
6
- SortParam,
7
- } from '@internetarchive/search-service/dist/src/search-params';
8
8
  import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
9
+ import { CollectionNameCache } from '@internetarchive/collection-name-cache';
9
10
  import type { CollectionBrowser } from '../src/collection-browser';
10
11
  import '../src/collection-browser';
11
- import { CollectionDisplayMode } from '../src/models';
12
- import { SortFilterBar } from '../src/sort-filter-bar/sort-filter-bar';
13
12
 
14
13
  @customElement('app-root')
15
14
  export class AppRoot extends LitElement {
16
- private searchService = SearchService.default;
15
+ private searchService = new SearchService(
16
+ new DefaultSearchBackend({
17
+ baseUrl: 'ia-petabox-offshoot-search.archive.org',
18
+ })
19
+ );
17
20
 
18
21
  private resizeObserver = new SharedResizeObserver();
19
22
 
23
+ private localCache = new LocalCache();
24
+
25
+ private collectionNameCache = new CollectionNameCache({
26
+ searchService: this.searchService,
27
+ localCache: this.localCache,
28
+ });
29
+
20
30
  @state() private currentPage?: number;
21
31
 
22
32
  @state() private searchQuery?: string;
23
33
 
24
- @state() private sortParam?: SortParam;
25
-
26
34
  @state() private cellWidth: number = 18;
27
35
 
28
36
  @state() private cellHeight: number = 29;
@@ -37,8 +45,6 @@ export class AppRoot extends LitElement {
37
45
 
38
46
  @query('collection-browser') private collectionBrowser!: CollectionBrowser;
39
47
 
40
- @query('sort-filter-bar') private sortFilterBar!: SortFilterBar;
41
-
42
48
  private searchPressed(e: Event) {
43
49
  e.preventDefault();
44
50
  this.searchQuery = this.baseQueryField.value;
@@ -54,90 +60,18 @@ export class AppRoot extends LitElement {
54
60
  this.collectionBrowser.goToPage(this.currentPage);
55
61
  }
56
62
 
57
- protected firstUpdated(): void {
58
- this.loadStateFromUrl();
59
- }
60
-
61
63
  protected updated(changed: PropertyValues): void {
62
64
  if (changed.has('currentPage') && this.currentPage) {
63
65
  this.pageNumberInput.value = this.currentPage.toString();
64
- this.updateUrl();
65
66
  }
66
67
 
67
68
  if (changed.has('searchQuery')) {
68
69
  this.queryUpdated();
69
70
  }
70
-
71
- if (changed.has('sortParam')) {
72
- this.sortParamUpdated();
73
- }
74
- }
75
-
76
- private loadStateFromUrl() {
77
- const url = new URL(window.location.href);
78
- const pageNumber = url.searchParams.get('page');
79
- const searchQuery = url.searchParams.get('query');
80
- const sortQuery = url.searchParams.get('sort');
81
- if (pageNumber) {
82
- const parsed = parseInt(pageNumber, 10);
83
- this.currentPage = parsed;
84
- if (parsed > 1) {
85
- this.collectionBrowser.goToPage(parsed);
86
- }
87
- } else {
88
- this.currentPage = 1;
89
- }
90
- if (searchQuery) {
91
- this.searchQuery = searchQuery;
92
- } else {
93
- this.searchQuery = 'collection:etree';
94
- }
95
- if (sortQuery) {
96
- const [field, direction] = sortQuery.split(' ');
97
- this.sortParam = new SortParam(field, direction as SortDirection);
98
- } else {
99
- this.sortParam = new SortParam('date', 'desc');
100
- }
101
71
  }
102
72
 
103
73
  private queryUpdated() {
104
74
  this.collectionBrowser.baseQuery = this.searchQuery;
105
- this.updateUrl();
106
- }
107
-
108
- private sortParamUpdated() {
109
- if (!this.sortParam) return;
110
- this.collectionBrowser.sortParam = this.sortParam;
111
- this.sortFilterBar.sortDirection = this.sortParam.direction;
112
- this.updateUrl();
113
- }
114
-
115
- private updateUrl() {
116
- const url = new URL(window.location.href);
117
- if (this.sortParam) {
118
- url.searchParams.set('sort', this.sortParam.asString);
119
- }
120
-
121
- if (this.searchQuery) {
122
- url.searchParams.set('query', this.searchQuery);
123
- }
124
-
125
- if (this.currentPage) {
126
- if (this.currentPage > 1) {
127
- url.searchParams.set('page', this.currentPage.toString());
128
- } else {
129
- url.searchParams.delete('page');
130
- }
131
- }
132
-
133
- window.history.pushState(
134
- {
135
- page: this.currentPage,
136
- query: this.searchQuery,
137
- },
138
- '',
139
- url.toString()
140
- );
141
75
  }
142
76
 
143
77
  render() {
@@ -145,7 +79,11 @@ export class AppRoot extends LitElement {
145
79
  <div id="dev-tools">
146
80
  <form @submit=${this.searchPressed}>
147
81
  Query:
148
- <input type="text" id="base-query-field" .value=${this.searchQuery} />
82
+ <input
83
+ type="text"
84
+ id="base-query-field"
85
+ .value=${this.searchQuery ?? ''}
86
+ />
149
87
  <input type="submit" value="Search" />
150
88
  </form>
151
89
 
@@ -163,13 +101,6 @@ export class AppRoot extends LitElement {
163
101
  Toggle Delete Mode
164
102
  </button>
165
103
 
166
- <sort-filter-bar
167
- @sortChanged=${this.sortChanged}
168
- @displayModeChanged=${this.displayModeChanged}
169
- @titleLetterChanged=${this.titleLetterChanged}
170
- @creatorLetterChanged=${this.creatorLetterChanged}
171
- ></sort-filter-bar>
172
-
173
104
  <div id="cell-controls">
174
105
  <div id="cell-size-control">
175
106
  <div>
@@ -238,17 +169,25 @@ export class AppRoot extends LitElement {
238
169
  </div>
239
170
  </div>
240
171
 
241
- <collection-browser
242
- .baseNavigationUrl=${'https://archive.org'}
243
- .searchService=${this.searchService}
244
- .additionalQueryClause=${this.sortFilterQueries}
245
- .resizeObserver=${this.resizeObserver}
246
- @visiblePageChanged=${this.visiblePageChanged}
247
- >
248
- </collection-browser>
172
+ <div id="collection-browser-container">
173
+ <collection-browser
174
+ .baseNavigationUrl=${'https://archive.org'}
175
+ .searchService=${this.searchService}
176
+ .resizeObserver=${this.resizeObserver}
177
+ .collectionNameCache=${this.collectionNameCache}
178
+ .showHistogramDatePicker=${true}
179
+ @visiblePageChanged=${this.visiblePageChanged}
180
+ @baseQueryChanged=${this.baseQueryChanged}
181
+ >
182
+ </collection-browser>
183
+ </div>
249
184
  `;
250
185
  }
251
186
 
187
+ private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>) {
188
+ this.searchQuery = e.detail.baseQuery;
189
+ }
190
+
252
191
  private outlineChanged(e: Event) {
253
192
  const target = e.target as HTMLInputElement;
254
193
  if (target.checked) {
@@ -263,25 +202,6 @@ export class AppRoot extends LitElement {
263
202
  }
264
203
  }
265
204
 
266
- private titleSelectorVisibilityChanged(e: CustomEvent<{ visible: boolean }>) {
267
- console.debug('titleSelectorVisibleChanged', e.detail);
268
- if (e.detail.visible) {
269
- this.sortParam = new SortParam('titleSorter', 'asc');
270
- }
271
- }
272
-
273
- private sortByViewsPressed() {
274
- this.sortParam = new SortParam('week', 'desc');
275
- }
276
-
277
- private creatorSelectorVisibilityChanged(
278
- e: CustomEvent<{ visible: boolean }>
279
- ) {
280
- if (e.detail.visible) {
281
- this.sortParam = new SortParam('creatorSorter', 'asc');
282
- }
283
- }
284
-
285
205
  private rowGapChanged(e: Event) {
286
206
  const input = e.target as HTMLInputElement;
287
207
  this.rowGap = parseFloat(input.value);
@@ -328,47 +248,6 @@ export class AppRoot extends LitElement {
328
248
  this.currentPage = pageNumber;
329
249
  }
330
250
 
331
- private sortChanged(e: CustomEvent<{ sort: SortParam }>) {
332
- this.sortParam = e.detail.sort;
333
- if ((this.currentPage ?? 1) > 1) {
334
- this.collectionBrowser.goToPage(1);
335
- }
336
- this.currentPage = 1;
337
- }
338
-
339
- private displayModeChanged(
340
- e: CustomEvent<{ displayMode: CollectionDisplayMode }>
341
- ) {
342
- this.collectionBrowser.displayMode = e.detail.displayMode;
343
- }
344
-
345
- @state() titleQuery?: string;
346
-
347
- @state() creatorQuery?: string;
348
-
349
- private get sortFilterQueries(): string {
350
- const queries = [this.titleQuery, this.creatorQuery];
351
- return queries.filter(q => q).join(' AND ');
352
- }
353
-
354
- private titleLetterChanged(e: CustomEvent<{ selectedLetter: string }>) {
355
- const letter = e.detail.selectedLetter;
356
- if (letter) {
357
- this.titleQuery = `firstTitle:${letter}`;
358
- } else {
359
- this.titleQuery = undefined;
360
- }
361
- }
362
-
363
- private creatorLetterChanged(e: CustomEvent<{ selectedLetter: string }>) {
364
- const letter = e.detail.selectedLetter;
365
- if (letter) {
366
- this.creatorQuery = `firstCreator:${letter}`;
367
- } else {
368
- this.creatorQuery = undefined;
369
- }
370
- }
371
-
372
251
  static styles = css`
373
252
  :host {
374
253
  display: block;
package/demo/index.html CHANGED
@@ -13,8 +13,8 @@
13
13
  color: #2C2C2C;
14
14
  }
15
15
  </style>
16
- <script
17
- src="https://polyfill.archive.org/v3/polyfill.min.js?features=scrollIntoView%2CElement.prototype.scrollIntoView"></script>
16
+ <!-- <script
17
+ src="https://polyfill.archive.org/v3/polyfill.min.js?features=scrollIntoView%2CElement.prototype.scrollIntoView"></script> -->
18
18
 
19
19
  </head>
20
20
  <body>
@@ -3,9 +3,10 @@ import '../src/collection-browser';
3
3
  export declare class AppRoot extends LitElement {
4
4
  private searchService;
5
5
  private resizeObserver;
6
+ private localCache;
7
+ private collectionNameCache;
6
8
  private currentPage?;
7
9
  private searchQuery?;
8
- private sortParam?;
9
10
  private cellWidth;
10
11
  private cellHeight;
11
12
  private rowGap;
@@ -13,31 +14,17 @@ export declare class AppRoot extends LitElement {
13
14
  private baseQueryField;
14
15
  private pageNumberInput;
15
16
  private collectionBrowser;
16
- private sortFilterBar;
17
17
  private searchPressed;
18
18
  private changePagePressed;
19
- protected firstUpdated(): void;
20
19
  protected updated(changed: PropertyValues): void;
21
- private loadStateFromUrl;
22
20
  private queryUpdated;
23
- private sortParamUpdated;
24
- private updateUrl;
25
21
  render(): import("lit-html").TemplateResult<1>;
22
+ private baseQueryChanged;
26
23
  private outlineChanged;
27
- private titleSelectorVisibilityChanged;
28
- private sortByViewsPressed;
29
- private creatorSelectorVisibilityChanged;
30
24
  private rowGapChanged;
31
25
  private colGapChanged;
32
26
  private widthChanged;
33
27
  private heightChanged;
34
28
  private visiblePageChanged;
35
- private sortChanged;
36
- private displayModeChanged;
37
- titleQuery?: string;
38
- creatorQuery?: string;
39
- private get sortFilterQueries();
40
- private titleLetterChanged;
41
- private creatorLetterChanged;
42
29
  static styles: import("lit").CSSResult;
43
30
  }
@@ -1,15 +1,23 @@
1
1
  import { __decorate } from "tslib";
2
- import { SearchService } from '@internetarchive/search-service';
2
+ import { DefaultSearchBackend, SearchService, } from '@internetarchive/search-service';
3
+ import { LocalCache } from '@internetarchive/local-cache';
3
4
  import { html, css, LitElement } from 'lit';
4
5
  import { customElement, query, state } from 'lit/decorators.js';
5
- import { SortParam, } from '@internetarchive/search-service/dist/src/search-params';
6
6
  import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
7
+ import { CollectionNameCache } from '@internetarchive/collection-name-cache';
7
8
  import '../src/collection-browser';
8
9
  let AppRoot = class AppRoot extends LitElement {
9
10
  constructor() {
10
11
  super(...arguments);
11
- this.searchService = SearchService.default;
12
+ this.searchService = new SearchService(new DefaultSearchBackend({
13
+ baseUrl: 'ia-petabox-offshoot-search.archive.org',
14
+ }));
12
15
  this.resizeObserver = new SharedResizeObserver();
16
+ this.localCache = new LocalCache();
17
+ this.collectionNameCache = new CollectionNameCache({
18
+ searchService: this.searchService,
19
+ localCache: this.localCache,
20
+ });
13
21
  this.cellWidth = 18;
14
22
  this.cellHeight = 29;
15
23
  this.rowGap = 1.7;
@@ -29,88 +37,28 @@ let AppRoot = class AppRoot extends LitElement {
29
37
  this.currentPage = this.pageNumberInput.valueAsNumber;
30
38
  this.collectionBrowser.goToPage(this.currentPage);
31
39
  }
32
- firstUpdated() {
33
- this.loadStateFromUrl();
34
- }
35
40
  updated(changed) {
36
41
  if (changed.has('currentPage') && this.currentPage) {
37
42
  this.pageNumberInput.value = this.currentPage.toString();
38
- this.updateUrl();
39
43
  }
40
44
  if (changed.has('searchQuery')) {
41
45
  this.queryUpdated();
42
46
  }
43
- if (changed.has('sortParam')) {
44
- this.sortParamUpdated();
45
- }
46
- }
47
- loadStateFromUrl() {
48
- const url = new URL(window.location.href);
49
- const pageNumber = url.searchParams.get('page');
50
- const searchQuery = url.searchParams.get('query');
51
- const sortQuery = url.searchParams.get('sort');
52
- if (pageNumber) {
53
- const parsed = parseInt(pageNumber, 10);
54
- this.currentPage = parsed;
55
- if (parsed > 1) {
56
- this.collectionBrowser.goToPage(parsed);
57
- }
58
- }
59
- else {
60
- this.currentPage = 1;
61
- }
62
- if (searchQuery) {
63
- this.searchQuery = searchQuery;
64
- }
65
- else {
66
- this.searchQuery = 'collection:etree';
67
- }
68
- if (sortQuery) {
69
- const [field, direction] = sortQuery.split(' ');
70
- this.sortParam = new SortParam(field, direction);
71
- }
72
- else {
73
- this.sortParam = new SortParam('date', 'desc');
74
- }
75
47
  }
76
48
  queryUpdated() {
77
49
  this.collectionBrowser.baseQuery = this.searchQuery;
78
- this.updateUrl();
79
- }
80
- sortParamUpdated() {
81
- if (!this.sortParam)
82
- return;
83
- this.collectionBrowser.sortParam = this.sortParam;
84
- this.sortFilterBar.sortDirection = this.sortParam.direction;
85
- this.updateUrl();
86
- }
87
- updateUrl() {
88
- const url = new URL(window.location.href);
89
- if (this.sortParam) {
90
- url.searchParams.set('sort', this.sortParam.asString);
91
- }
92
- if (this.searchQuery) {
93
- url.searchParams.set('query', this.searchQuery);
94
- }
95
- if (this.currentPage) {
96
- if (this.currentPage > 1) {
97
- url.searchParams.set('page', this.currentPage.toString());
98
- }
99
- else {
100
- url.searchParams.delete('page');
101
- }
102
- }
103
- window.history.pushState({
104
- page: this.currentPage,
105
- query: this.searchQuery,
106
- }, '', url.toString());
107
50
  }
108
51
  render() {
52
+ var _a;
109
53
  return html `
110
54
  <div id="dev-tools">
111
55
  <form @submit=${this.searchPressed}>
112
56
  Query:
113
- <input type="text" id="base-query-field" .value=${this.searchQuery} />
57
+ <input
58
+ type="text"
59
+ id="base-query-field"
60
+ .value=${(_a = this.searchQuery) !== null && _a !== void 0 ? _a : ''}
61
+ />
114
62
  <input type="submit" value="Search" />
115
63
  </form>
116
64
 
@@ -128,13 +76,6 @@ let AppRoot = class AppRoot extends LitElement {
128
76
  Toggle Delete Mode
129
77
  </button>
130
78
 
131
- <sort-filter-bar
132
- @sortChanged=${this.sortChanged}
133
- @displayModeChanged=${this.displayModeChanged}
134
- @titleLetterChanged=${this.titleLetterChanged}
135
- @creatorLetterChanged=${this.creatorLetterChanged}
136
- ></sort-filter-bar>
137
-
138
79
  <div id="cell-controls">
139
80
  <div id="cell-size-control">
140
81
  <div>
@@ -203,16 +144,23 @@ let AppRoot = class AppRoot extends LitElement {
203
144
  </div>
204
145
  </div>
205
146
 
206
- <collection-browser
207
- .baseNavigationUrl=${'https://archive.org'}
208
- .searchService=${this.searchService}
209
- .additionalQueryClause=${this.sortFilterQueries}
210
- .resizeObserver=${this.resizeObserver}
211
- @visiblePageChanged=${this.visiblePageChanged}
212
- >
213
- </collection-browser>
147
+ <div id="collection-browser-container">
148
+ <collection-browser
149
+ .baseNavigationUrl=${'https://archive.org'}
150
+ .searchService=${this.searchService}
151
+ .resizeObserver=${this.resizeObserver}
152
+ .collectionNameCache=${this.collectionNameCache}
153
+ .showHistogramDatePicker=${true}
154
+ @visiblePageChanged=${this.visiblePageChanged}
155
+ @baseQueryChanged=${this.baseQueryChanged}
156
+ >
157
+ </collection-browser>
158
+ </div>
214
159
  `;
215
160
  }
161
+ baseQueryChanged(e) {
162
+ this.searchQuery = e.detail.baseQuery;
163
+ }
216
164
  outlineChanged(e) {
217
165
  const target = e.target;
218
166
  if (target.checked) {
@@ -222,20 +170,6 @@ let AppRoot = class AppRoot extends LitElement {
222
170
  this.collectionBrowser.style.removeProperty('--infiniteScrollerCellOutline');
223
171
  }
224
172
  }
225
- titleSelectorVisibilityChanged(e) {
226
- console.debug('titleSelectorVisibleChanged', e.detail);
227
- if (e.detail.visible) {
228
- this.sortParam = new SortParam('titleSorter', 'asc');
229
- }
230
- }
231
- sortByViewsPressed() {
232
- this.sortParam = new SortParam('week', 'desc');
233
- }
234
- creatorSelectorVisibilityChanged(e) {
235
- if (e.detail.visible) {
236
- this.sortParam = new SortParam('creatorSorter', 'asc');
237
- }
238
- }
239
173
  rowGapChanged(e) {
240
174
  const input = e.target;
241
175
  this.rowGap = parseFloat(input.value);
@@ -263,39 +197,6 @@ let AppRoot = class AppRoot extends LitElement {
263
197
  return;
264
198
  this.currentPage = pageNumber;
265
199
  }
266
- sortChanged(e) {
267
- var _a;
268
- this.sortParam = e.detail.sort;
269
- if (((_a = this.currentPage) !== null && _a !== void 0 ? _a : 1) > 1) {
270
- this.collectionBrowser.goToPage(1);
271
- }
272
- this.currentPage = 1;
273
- }
274
- displayModeChanged(e) {
275
- this.collectionBrowser.displayMode = e.detail.displayMode;
276
- }
277
- get sortFilterQueries() {
278
- const queries = [this.titleQuery, this.creatorQuery];
279
- return queries.filter(q => q).join(' AND ');
280
- }
281
- titleLetterChanged(e) {
282
- const letter = e.detail.selectedLetter;
283
- if (letter) {
284
- this.titleQuery = `firstTitle:${letter}`;
285
- }
286
- else {
287
- this.titleQuery = undefined;
288
- }
289
- }
290
- creatorLetterChanged(e) {
291
- const letter = e.detail.selectedLetter;
292
- if (letter) {
293
- this.creatorQuery = `firstCreator:${letter}`;
294
- }
295
- else {
296
- this.creatorQuery = undefined;
297
- }
298
- }
299
200
  };
300
201
  AppRoot.styles = css `
301
202
  :host {
@@ -345,9 +246,6 @@ __decorate([
345
246
  __decorate([
346
247
  state()
347
248
  ], AppRoot.prototype, "searchQuery", void 0);
348
- __decorate([
349
- state()
350
- ], AppRoot.prototype, "sortParam", void 0);
351
249
  __decorate([
352
250
  state()
353
251
  ], AppRoot.prototype, "cellWidth", void 0);
@@ -369,15 +267,6 @@ __decorate([
369
267
  __decorate([
370
268
  query('collection-browser')
371
269
  ], AppRoot.prototype, "collectionBrowser", void 0);
372
- __decorate([
373
- query('sort-filter-bar')
374
- ], AppRoot.prototype, "sortFilterBar", void 0);
375
- __decorate([
376
- state()
377
- ], AppRoot.prototype, "titleQuery", void 0);
378
- __decorate([
379
- state()
380
- ], AppRoot.prototype, "creatorQuery", void 0);
381
270
  AppRoot = __decorate([
382
271
  customElement('app-root')
383
272
  ], AppRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchService } from '@internetarchive/search-service';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport {\n SortDirection,\n SortParam,\n} from '@internetarchive/search-service/dist/src/search-params';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport { CollectionDisplayMode } from '../src/models';\nimport { SortFilterBar } from '../src/sort-filter-bar/sort-filter-bar';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = SearchService.default;\n\n private resizeObserver = new SharedResizeObserver();\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private sortParam?: SortParam;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n @query('sort-filter-bar') private sortFilterBar!: SortFilterBar;\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n this.currentPage = 1;\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected firstUpdated(): void {\n this.loadStateFromUrl();\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n this.updateUrl();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n\n if (changed.has('sortParam')) {\n this.sortParamUpdated();\n }\n }\n\n private loadStateFromUrl() {\n const url = new URL(window.location.href);\n const pageNumber = url.searchParams.get('page');\n const searchQuery = url.searchParams.get('query');\n const sortQuery = url.searchParams.get('sort');\n if (pageNumber) {\n const parsed = parseInt(pageNumber, 10);\n this.currentPage = parsed;\n if (parsed > 1) {\n this.collectionBrowser.goToPage(parsed);\n }\n } else {\n this.currentPage = 1;\n }\n if (searchQuery) {\n this.searchQuery = searchQuery;\n } else {\n this.searchQuery = 'collection:etree';\n }\n if (sortQuery) {\n const [field, direction] = sortQuery.split(' ');\n this.sortParam = new SortParam(field, direction as SortDirection);\n } else {\n this.sortParam = new SortParam('date', 'desc');\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n this.updateUrl();\n }\n\n private sortParamUpdated() {\n if (!this.sortParam) return;\n this.collectionBrowser.sortParam = this.sortParam;\n this.sortFilterBar.sortDirection = this.sortParam.direction;\n this.updateUrl();\n }\n\n private updateUrl() {\n const url = new URL(window.location.href);\n if (this.sortParam) {\n url.searchParams.set('sort', this.sortParam.asString);\n }\n\n if (this.searchQuery) {\n url.searchParams.set('query', this.searchQuery);\n }\n\n if (this.currentPage) {\n if (this.currentPage > 1) {\n url.searchParams.set('page', this.currentPage.toString());\n } else {\n url.searchParams.delete('page');\n }\n }\n\n window.history.pushState(\n {\n page: this.currentPage,\n query: this.searchQuery,\n },\n '',\n url.toString()\n );\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input type=\"text\" id=\"base-query-field\" .value=${this.searchQuery} />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <button\n @click=${() => {\n this.collectionBrowser.showDeleteButtons =\n !this.collectionBrowser.showDeleteButtons;\n }}\n >\n Toggle Delete Mode\n </button>\n\n <sort-filter-bar\n @sortChanged=${this.sortChanged}\n @displayModeChanged=${this.displayModeChanged}\n @titleLetterChanged=${this.titleLetterChanged}\n @creatorLetterChanged=${this.creatorLetterChanged}\n ></sort-filter-bar>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .additionalQueryClause=${this.sortFilterQueries}\n .resizeObserver=${this.resizeObserver}\n @visiblePageChanged=${this.visiblePageChanged}\n >\n </collection-browser>\n `;\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private titleSelectorVisibilityChanged(e: CustomEvent<{ visible: boolean }>) {\n console.debug('titleSelectorVisibleChanged', e.detail);\n if (e.detail.visible) {\n this.sortParam = new SortParam('titleSorter', 'asc');\n }\n }\n\n private sortByViewsPressed() {\n this.sortParam = new SortParam('week', 'desc');\n }\n\n private creatorSelectorVisibilityChanged(\n e: CustomEvent<{ visible: boolean }>\n ) {\n if (e.detail.visible) {\n this.sortParam = new SortParam('creatorSorter', 'asc');\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n private sortChanged(e: CustomEvent<{ sort: SortParam }>) {\n this.sortParam = e.detail.sort;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(1);\n }\n this.currentPage = 1;\n }\n\n private displayModeChanged(\n e: CustomEvent<{ displayMode: CollectionDisplayMode }>\n ) {\n this.collectionBrowser.displayMode = e.detail.displayMode;\n }\n\n @state() titleQuery?: string;\n\n @state() creatorQuery?: string;\n\n private get sortFilterQueries(): string {\n const queries = [this.titleQuery, this.creatorQuery];\n return queries.filter(q => q).join(' AND ');\n }\n\n private titleLetterChanged(e: CustomEvent<{ selectedLetter: string }>) {\n const letter = e.detail.selectedLetter;\n if (letter) {\n this.titleQuery = `firstTitle:${letter}`;\n } else {\n this.titleQuery = undefined;\n }\n }\n\n private creatorLetterChanged(e: CustomEvent<{ selectedLetter: string }>) {\n const letter = e.detail.selectedLetter;\n if (letter) {\n this.creatorQuery = `firstCreator:${letter}`;\n } else {\n this.creatorQuery = undefined;\n }\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
1
+ {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DefaultSearchBackend,\n SearchService,\n} from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = new SearchService(\n new DefaultSearchBackend({\n baseUrl: 'ia-petabox-offshoot-search.archive.org',\n })\n );\n\n private resizeObserver = new SharedResizeObserver();\n\n private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n this.currentPage = 1;\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <button\n @click=${() => {\n this.collectionBrowser.showDeleteButtons =\n !this.collectionBrowser.showDeleteButtons;\n }}\n >\n Toggle Delete Mode\n </button>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>) {\n this.searchQuery = e.detail.baseQuery;\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit-html").TemplateResult<2>;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { svg } from 'lit';
2
+ export default svg `<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z"/></svg>
3
+ `;
4
+ //# sourceMappingURL=chevron.js.map