@internetarchive/collection-browser 0.2.11 → 0.2.12

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 (218) hide show
  1. package/package.json +2 -2
  2. package/renovate.json +6 -0
  3. package/src/assets/img/icons/login-required.ts +30 -0
  4. package/src/collection-browser.ts +15 -10
  5. package/src/styles/item-image-styles.ts +4 -3
  6. package/src/tiles/grid/item-tile.ts +22 -19
  7. package/src/tiles/image-block.ts +124 -0
  8. package/src/tiles/item-image.ts +3 -1
  9. package/src/tiles/list/tile-list-compact.ts +19 -56
  10. package/src/tiles/list/tile-list.ts +18 -54
  11. package/src/tiles/overlay/icon-overlay.ts +34 -0
  12. package/src/tiles/overlay/text-overlay.ts +48 -0
  13. package/src/tiles/tile-dispatcher.ts +13 -4
  14. package/test/icon-overlay.test.ts +41 -0
  15. package/test/item-image.test.ts +82 -0
  16. package/test/text-overlay.test.ts +57 -0
  17. package/test/tiles/grid/item-tile.test.ts +2 -2
  18. package/dist/index.d.ts +0 -9
  19. package/dist/index.js.map +0 -1
  20. package/dist/src/app-root.d.ts +0 -32
  21. package/dist/src/app-root.js +0 -285
  22. package/dist/src/app-root.js.map +0 -1
  23. package/dist/src/assets/img/icons/chevron.d.ts +0 -2
  24. package/dist/src/assets/img/icons/chevron.js +0 -4
  25. package/dist/src/assets/img/icons/chevron.js.map +0 -1
  26. package/dist/src/assets/img/icons/empty-query.d.ts +0 -2
  27. package/dist/src/assets/img/icons/empty-query.js +0 -5
  28. package/dist/src/assets/img/icons/empty-query.js.map +0 -1
  29. package/dist/src/assets/img/icons/eye-closed.d.ts +0 -2
  30. package/dist/src/assets/img/icons/eye-closed.js +0 -5
  31. package/dist/src/assets/img/icons/eye-closed.js.map +0 -1
  32. package/dist/src/assets/img/icons/eye.d.ts +0 -2
  33. package/dist/src/assets/img/icons/eye.js +0 -5
  34. package/dist/src/assets/img/icons/eye.js.map +0 -1
  35. package/dist/src/assets/img/icons/favorite-filled.d.ts +0 -1
  36. package/dist/src/assets/img/icons/favorite-filled.js +0 -11
  37. package/dist/src/assets/img/icons/favorite-filled.js.map +0 -1
  38. package/dist/src/assets/img/icons/mediatype/account.d.ts +0 -1
  39. package/dist/src/assets/img/icons/mediatype/account.js +0 -14
  40. package/dist/src/assets/img/icons/mediatype/account.js.map +0 -1
  41. package/dist/src/assets/img/icons/mediatype/audio.d.ts +0 -1
  42. package/dist/src/assets/img/icons/mediatype/audio.js +0 -14
  43. package/dist/src/assets/img/icons/mediatype/audio.js.map +0 -1
  44. package/dist/src/assets/img/icons/mediatype/collection.d.ts +0 -1
  45. package/dist/src/assets/img/icons/mediatype/collection.js +0 -12
  46. package/dist/src/assets/img/icons/mediatype/collection.js.map +0 -1
  47. package/dist/src/assets/img/icons/mediatype/data.d.ts +0 -1
  48. package/dist/src/assets/img/icons/mediatype/data.js +0 -15
  49. package/dist/src/assets/img/icons/mediatype/data.js.map +0 -1
  50. package/dist/src/assets/img/icons/mediatype/etree.d.ts +0 -1
  51. package/dist/src/assets/img/icons/mediatype/etree.js +0 -14
  52. package/dist/src/assets/img/icons/mediatype/etree.js.map +0 -1
  53. package/dist/src/assets/img/icons/mediatype/film.d.ts +0 -1
  54. package/dist/src/assets/img/icons/mediatype/film.js +0 -14
  55. package/dist/src/assets/img/icons/mediatype/film.js.map +0 -1
  56. package/dist/src/assets/img/icons/mediatype/images.d.ts +0 -1
  57. package/dist/src/assets/img/icons/mediatype/images.js +0 -13
  58. package/dist/src/assets/img/icons/mediatype/images.js.map +0 -1
  59. package/dist/src/assets/img/icons/mediatype/radio.d.ts +0 -1
  60. package/dist/src/assets/img/icons/mediatype/radio.js +0 -15
  61. package/dist/src/assets/img/icons/mediatype/radio.js.map +0 -1
  62. package/dist/src/assets/img/icons/mediatype/software.d.ts +0 -1
  63. package/dist/src/assets/img/icons/mediatype/software.js +0 -13
  64. package/dist/src/assets/img/icons/mediatype/software.js.map +0 -1
  65. package/dist/src/assets/img/icons/mediatype/texts.d.ts +0 -1
  66. package/dist/src/assets/img/icons/mediatype/texts.js +0 -13
  67. package/dist/src/assets/img/icons/mediatype/texts.js.map +0 -1
  68. package/dist/src/assets/img/icons/mediatype/tv.d.ts +0 -1
  69. package/dist/src/assets/img/icons/mediatype/tv.js +0 -14
  70. package/dist/src/assets/img/icons/mediatype/tv.js.map +0 -1
  71. package/dist/src/assets/img/icons/mediatype/video.d.ts +0 -1
  72. package/dist/src/assets/img/icons/mediatype/video.js +0 -14
  73. package/dist/src/assets/img/icons/mediatype/video.js.map +0 -1
  74. package/dist/src/assets/img/icons/mediatype/web.d.ts +0 -1
  75. package/dist/src/assets/img/icons/mediatype/web.js +0 -13
  76. package/dist/src/assets/img/icons/mediatype/web.js.map +0 -1
  77. package/dist/src/assets/img/icons/null-result.d.ts +0 -2
  78. package/dist/src/assets/img/icons/null-result.js +0 -5
  79. package/dist/src/assets/img/icons/null-result.js.map +0 -1
  80. package/dist/src/assets/img/icons/restricted.d.ts +0 -1
  81. package/dist/src/assets/img/icons/restricted.js +0 -29
  82. package/dist/src/assets/img/icons/restricted.js.map +0 -1
  83. package/dist/src/assets/img/icons/reviews.d.ts +0 -1
  84. package/dist/src/assets/img/icons/reviews.js +0 -11
  85. package/dist/src/assets/img/icons/reviews.js.map +0 -1
  86. package/dist/src/assets/img/icons/upload.d.ts +0 -1
  87. package/dist/src/assets/img/icons/upload.js +0 -12
  88. package/dist/src/assets/img/icons/upload.js.map +0 -1
  89. package/dist/src/assets/img/icons/views.d.ts +0 -1
  90. package/dist/src/assets/img/icons/views.js +0 -11
  91. package/dist/src/assets/img/icons/views.js.map +0 -1
  92. package/dist/src/circular-activity-indicator.d.ts +0 -5
  93. package/dist/src/circular-activity-indicator.js +0 -66
  94. package/dist/src/circular-activity-indicator.js.map +0 -1
  95. package/dist/src/collection-browser.d.ts +0 -214
  96. package/dist/src/collection-browser.js +0 -1236
  97. package/dist/src/collection-browser.js.map +0 -1
  98. package/dist/src/collection-facets.d.ts +0 -63
  99. package/dist/src/collection-facets.js +0 -560
  100. package/dist/src/collection-facets.js.map +0 -1
  101. package/dist/src/empty-placeholder.d.ts +0 -11
  102. package/dist/src/empty-placeholder.js +0 -83
  103. package/dist/src/empty-placeholder.js.map +0 -1
  104. package/dist/src/language-code-handler/language-code-handler.d.ts +0 -37
  105. package/dist/src/language-code-handler/language-code-handler.js +0 -27
  106. package/dist/src/language-code-handler/language-code-handler.js.map +0 -1
  107. package/dist/src/language-code-handler/language-code-mapping.d.ts +0 -1
  108. package/dist/src/language-code-handler/language-code-mapping.js +0 -563
  109. package/dist/src/language-code-handler/language-code-mapping.js.map +0 -1
  110. package/dist/src/mediatype/mediatype-config.d.ts +0 -3
  111. package/dist/src/mediatype/mediatype-config.js +0 -86
  112. package/dist/src/mediatype/mediatype-config.js.map +0 -1
  113. package/dist/src/models.d.ts +0 -84
  114. package/dist/src/models.js +0 -58
  115. package/dist/src/models.js.map +0 -1
  116. package/dist/src/restoration-state-handler.d.ts +0 -38
  117. package/dist/src/restoration-state-handler.js +0 -204
  118. package/dist/src/restoration-state-handler.js.map +0 -1
  119. package/dist/src/sort-filter-bar/alpha-bar.d.ts +0 -9
  120. package/dist/src/sort-filter-bar/alpha-bar.js +0 -98
  121. package/dist/src/sort-filter-bar/alpha-bar.js.map +0 -1
  122. package/dist/src/sort-filter-bar/img/compact.d.ts +0 -1
  123. package/dist/src/sort-filter-bar/img/compact.js +0 -5
  124. package/dist/src/sort-filter-bar/img/compact.js.map +0 -1
  125. package/dist/src/sort-filter-bar/img/list.d.ts +0 -1
  126. package/dist/src/sort-filter-bar/img/list.js +0 -5
  127. package/dist/src/sort-filter-bar/img/list.js.map +0 -1
  128. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +0 -1
  129. package/dist/src/sort-filter-bar/img/sort-triangle.js +0 -5
  130. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +0 -1
  131. package/dist/src/sort-filter-bar/img/tile.d.ts +0 -1
  132. package/dist/src/sort-filter-bar/img/tile.js +0 -5
  133. package/dist/src/sort-filter-bar/img/tile.js.map +0 -1
  134. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +0 -85
  135. package/dist/src/sort-filter-bar/sort-filter-bar.js +0 -698
  136. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +0 -1
  137. package/dist/src/styles/item-image-styles.d.ts +0 -8
  138. package/dist/src/styles/item-image-styles.js +0 -101
  139. package/dist/src/styles/item-image-styles.js.map +0 -1
  140. package/dist/src/tiles/collection-browser-loading-tile.d.ts +0 -5
  141. package/dist/src/tiles/collection-browser-loading-tile.js +0 -32
  142. package/dist/src/tiles/collection-browser-loading-tile.js.map +0 -1
  143. package/dist/src/tiles/grid/account-tile.d.ts +0 -8
  144. package/dist/src/tiles/grid/account-tile.js +0 -126
  145. package/dist/src/tiles/grid/account-tile.js.map +0 -1
  146. package/dist/src/tiles/grid/collection-tile.d.ts +0 -7
  147. package/dist/src/tiles/grid/collection-tile.js +0 -159
  148. package/dist/src/tiles/grid/collection-tile.js.map +0 -1
  149. package/dist/src/tiles/grid/item-tile.d.ts +0 -16
  150. package/dist/src/tiles/grid/item-tile.js +0 -174
  151. package/dist/src/tiles/grid/item-tile.js.map +0 -1
  152. package/dist/src/tiles/grid/tile-stats.d.ts +0 -10
  153. package/dist/src/tiles/grid/tile-stats.js +0 -134
  154. package/dist/src/tiles/grid/tile-stats.js.map +0 -1
  155. package/dist/src/tiles/item-image.d.ts +0 -31
  156. package/dist/src/tiles/item-image.js +0 -117
  157. package/dist/src/tiles/item-image.js.map +0 -1
  158. package/dist/src/tiles/item-tile-image.d.ts +0 -15
  159. package/dist/src/tiles/item-tile-image.js +0 -68
  160. package/dist/src/tiles/item-tile-image.js.map +0 -1
  161. package/dist/src/tiles/list/account-label.d.ts +0 -1
  162. package/dist/src/tiles/list/account-label.js +0 -7
  163. package/dist/src/tiles/list/account-label.js.map +0 -1
  164. package/dist/src/tiles/list/date-label.d.ts +0 -1
  165. package/dist/src/tiles/list/date-label.js +0 -13
  166. package/dist/src/tiles/list/date-label.js.map +0 -1
  167. package/dist/src/tiles/list/tile-list-compact-header.d.ts +0 -12
  168. package/dist/src/tiles/list/tile-list-compact-header.js +0 -84
  169. package/dist/src/tiles/list/tile-list-compact-header.js.map +0 -1
  170. package/dist/src/tiles/list/tile-list-compact.d.ts +0 -20
  171. package/dist/src/tiles/list/tile-list-compact.js +0 -215
  172. package/dist/src/tiles/list/tile-list-compact.js.map +0 -1
  173. package/dist/src/tiles/list/tile-list.d.ts +0 -47
  174. package/dist/src/tiles/list/tile-list.js +0 -492
  175. package/dist/src/tiles/list/tile-list.js.map +0 -1
  176. package/dist/src/tiles/mediatype-icon.d.ts +0 -9
  177. package/dist/src/tiles/mediatype-icon.js +0 -82
  178. package/dist/src/tiles/mediatype-icon.js.map +0 -1
  179. package/dist/src/tiles/tile-dispatcher.d.ts +0 -35
  180. package/dist/src/tiles/tile-dispatcher.js +0 -204
  181. package/dist/src/tiles/tile-dispatcher.js.map +0 -1
  182. package/dist/src/utils/format-count.d.ts +0 -7
  183. package/dist/src/utils/format-count.js +0 -76
  184. package/dist/src/utils/format-count.js.map +0 -1
  185. package/dist/src/utils/format-date.d.ts +0 -2
  186. package/dist/src/utils/format-date.js +0 -24
  187. package/dist/src/utils/format-date.js.map +0 -1
  188. package/dist/test/collection-browser.test.d.ts +0 -1
  189. package/dist/test/collection-browser.test.js +0 -47
  190. package/dist/test/collection-browser.test.js.map +0 -1
  191. package/dist/test/empty-placeholder.test.d.ts +0 -1
  192. package/dist/test/empty-placeholder.test.js +0 -34
  193. package/dist/test/empty-placeholder.test.js.map +0 -1
  194. package/dist/test/mediatype-config.test.d.ts +0 -1
  195. package/dist/test/mediatype-config.test.js +0 -17
  196. package/dist/test/mediatype-config.test.js.map +0 -1
  197. package/dist/test/mocks/mock-collection-name-cache.d.ts +0 -7
  198. package/dist/test/mocks/mock-collection-name-cache.js +0 -14
  199. package/dist/test/mocks/mock-collection-name-cache.js.map +0 -1
  200. package/dist/test/mocks/mock-search-responses.d.ts +0 -3
  201. package/dist/test/mocks/mock-search-responses.js +0 -32
  202. package/dist/test/mocks/mock-search-responses.js.map +0 -1
  203. package/dist/test/mocks/mock-search-service.d.ts +0 -8
  204. package/dist/test/mocks/mock-search-service.js +0 -16
  205. package/dist/test/mocks/mock-search-service.js.map +0 -1
  206. package/dist/test/tile-stats.test.d.ts +0 -1
  207. package/dist/test/tile-stats.test.js +0 -42
  208. package/dist/test/tile-stats.test.js.map +0 -1
  209. package/dist/test/tiles/grid/item-tile.test.d.ts +0 -1
  210. package/dist/test/tiles/grid/item-tile.test.js +0 -96
  211. package/dist/test/tiles/grid/item-tile.test.js.map +0 -1
  212. package/dist/test/utils/format-count.test.d.ts +0 -1
  213. package/dist/test/utils/format-count.test.js +0 -24
  214. package/dist/test/utils/format-count.test.js.map +0 -1
  215. package/dist/test/utils/format-date.test.d.ts +0 -1
  216. package/dist/test/utils/format-date.test.js +0 -18
  217. package/dist/test/utils/format-date.test.js.map +0 -1
  218. package/src/tiles/item-tile-image.ts +0 -61
@@ -1,560 +0,0 @@
1
- import { __decorate } from "tslib";
2
- /* eslint-disable import/no-duplicates */
3
- import { css, html, LitElement, nothing, } from 'lit';
4
- import { customElement, property, state } from 'lit/decorators.js';
5
- import { repeat } from 'lit/directives/repeat.js';
6
- import '@internetarchive/histogram-date-range';
7
- import '@internetarchive/feature-feedback';
8
- import '@internetarchive/collection-name-cache';
9
- import eyeIcon from './assets/img/icons/eye';
10
- import eyeClosedIcon from './assets/img/icons/eye-closed';
11
- import chevronIcon from './assets/img/icons/chevron';
12
- import { defaultSelectedFacets, } from './models';
13
- const facetDisplayOrder = [
14
- 'mediatype',
15
- 'year',
16
- 'subject',
17
- 'collection',
18
- 'creator',
19
- 'language',
20
- ];
21
- const aggregationToFacetOption = {
22
- subjectSorter: 'subject',
23
- mediatypeSorter: 'mediatype',
24
- languageSorter: 'language',
25
- creatorSorter: 'creator',
26
- collection: 'collection',
27
- year: 'year',
28
- };
29
- const facetTitles = {
30
- subject: 'Subject',
31
- mediatype: 'Media Type',
32
- language: 'Language',
33
- creator: 'Creator',
34
- collection: 'Collection',
35
- year: 'Year',
36
- };
37
- let CollectionFacets = class CollectionFacets extends LitElement {
38
- constructor() {
39
- super(...arguments);
40
- this.facetsLoading = false;
41
- this.fullYearAggregationLoading = false;
42
- this.collapsableFacets = false;
43
- this.showHistogramDatePicker = false;
44
- this.openFacets = {
45
- subject: false,
46
- mediatype: false,
47
- language: false,
48
- creator: false,
49
- collection: false,
50
- year: false,
51
- };
52
- }
53
- render() {
54
- return html `
55
- <div id="container" class="${this.facetsLoading ? 'loading' : ''}">
56
- ${this.showHistogramDatePicker && this.fullYearsHistogramAggregation
57
- ? html `
58
- <div class="facet-group">
59
- <h1>Year Published <feature-feedback></feature-feedback></h1>
60
- ${this.histogramTemplate}
61
- </div>
62
- `
63
- : nothing}
64
- ${this.mergedFacets.map(facetGroup => this.getFacetGroupTemplate(facetGroup))}
65
- </div>
66
- `;
67
- }
68
- updated(changed) {
69
- if (changed.has('selectedFacets')) {
70
- this.dispatchFacetsChangedEvent();
71
- }
72
- }
73
- dispatchFacetsChangedEvent() {
74
- const event = new CustomEvent('facetsChanged', {
75
- detail: this.selectedFacets,
76
- });
77
- this.dispatchEvent(event);
78
- }
79
- get currentYearsHistogramAggregation() {
80
- var _a;
81
- return (_a = this.aggregations) === null || _a === void 0 ? void 0 : _a.year_histogram;
82
- }
83
- get histogramTemplate() {
84
- const { fullYearsHistogramAggregation } = this;
85
- return html `
86
- <histogram-date-range
87
- .minDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.first_bucket_key}
88
- .maxDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.last_bucket_key}
89
- .minSelectedDate=${this.minSelectedDate}
90
- .maxSelectedDate=${this.maxSelectedDate}
91
- .updateDelay=${100}
92
- missingDataMessage="..."
93
- .width=${180}
94
- .bins=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.buckets}
95
- @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
96
- ></histogram-date-range>
97
- `;
98
- }
99
- histogramDateRangeUpdated(e) {
100
- const { minDate, maxDate } = e.detail;
101
- const event = new CustomEvent('histogramDateRangeUpdated', {
102
- detail: { minDate, maxDate },
103
- });
104
- this.dispatchEvent(event);
105
- }
106
- /**
107
- * Combines the selected facets with the aggregations to create a single list of facets
108
- */
109
- get mergedFacets() {
110
- const facetGroups = [];
111
- facetDisplayOrder.forEach(facetKey => {
112
- var _a;
113
- const selectedFacetGroup = this.selectedFacetGroups.find(group => group.key === facetKey);
114
- const aggregateFacetGroup = this.aggregationFacetGroups.find(group => group.key === facetKey);
115
- // if the user selected a facet, but it's not in the aggregation, we add it as-is
116
- if (selectedFacetGroup && !aggregateFacetGroup) {
117
- facetGroups.push(selectedFacetGroup);
118
- return;
119
- }
120
- // if we don't have an aggregate facet group, don't add this to the list
121
- if (!aggregateFacetGroup)
122
- return;
123
- // start with either the selected group if we have one, or the aggregate group
124
- const facetGroup = selectedFacetGroup !== null && selectedFacetGroup !== void 0 ? selectedFacetGroup : aggregateFacetGroup;
125
- // attach the counts to the selected buckets
126
- const bucketsWithCount = (_a = selectedFacetGroup === null || selectedFacetGroup === void 0 ? void 0 : selectedFacetGroup.buckets.map(bucket => {
127
- const selectedBucket = aggregateFacetGroup.buckets.find(b => b.key === bucket.key);
128
- return selectedBucket
129
- ? {
130
- ...bucket,
131
- count: selectedBucket.count,
132
- }
133
- : bucket;
134
- })) !== null && _a !== void 0 ? _a : [];
135
- // append any additional buckets that were not selected
136
- aggregateFacetGroup.buckets.forEach(bucket => {
137
- const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);
138
- if (existingBucket)
139
- return;
140
- bucketsWithCount.push(bucket);
141
- });
142
- facetGroup.buckets = bucketsWithCount.splice(0, 5);
143
- facetGroups.push(facetGroup);
144
- });
145
- return facetGroups;
146
- }
147
- /**
148
- * Converts the selected facets to a `FacetGroup` array,
149
- * which is easier to work with
150
- */
151
- get selectedFacetGroups() {
152
- if (!this.selectedFacets)
153
- return [];
154
- const facetGroups = Object.entries(this.selectedFacets).map(([key, selectedFacets]) => {
155
- const option = key;
156
- const title = facetTitles[option];
157
- const buckets = Object.entries(selectedFacets).map(([value, facetState]) => {
158
- var _a, _b;
159
- let displayText = value;
160
- // for selected languages, we store the language code instead of the
161
- // display name, so look up the name from the mapping
162
- if (option === 'language') {
163
- displayText =
164
- (_b = (_a = this.languageCodeHandler) === null || _a === void 0 ? void 0 : _a.getLanguageNameFromCodeString(value)) !== null && _b !== void 0 ? _b : value;
165
- }
166
- return {
167
- displayText,
168
- key: value,
169
- count: 0,
170
- state: facetState,
171
- };
172
- });
173
- return {
174
- title,
175
- key: option,
176
- buckets,
177
- };
178
- });
179
- return facetGroups;
180
- }
181
- /**
182
- * Converts the raw `aggregations` to `FacetGroups`, which are easier to use
183
- */
184
- get aggregationFacetGroups() {
185
- var _a;
186
- const facetGroups = [];
187
- Object.entries((_a = this.aggregations) !== null && _a !== void 0 ? _a : []).forEach(([key, buckets]) => {
188
- // the year_histogram data is in a different format so can't be handled here
189
- if (key === 'year_histogram')
190
- return;
191
- const option = this.getFacetOptionFromKey(key);
192
- const title = facetTitles[option];
193
- const castedBuckets = buckets.buckets;
194
- const facetBuckets = castedBuckets.map(bucket => {
195
- var _a, _b;
196
- let bucketKey = bucket.key;
197
- // for languages, we need to search by language code instead of the
198
- // display name, which is what we get from the search engine result
199
- if (option === 'language') {
200
- // const languageCodeKey = languageToCodeMap[bucket.key];
201
- bucketKey =
202
- (_b = (_a = this.languageCodeHandler) === null || _a === void 0 ? void 0 : _a.getCodeStringFromLanguageName(`${bucket.key}`)) !== null && _b !== void 0 ? _b : bucket.key;
203
- // bucketKey = languageCodeKey ?? bucket.key;
204
- }
205
- return {
206
- displayText: `${bucket.key}`,
207
- key: `${bucketKey}`,
208
- count: bucket.doc_count,
209
- state: 'none',
210
- };
211
- });
212
- const group = {
213
- title,
214
- key: option,
215
- buckets: facetBuckets,
216
- };
217
- facetGroups.push(group);
218
- });
219
- return facetGroups;
220
- }
221
- /**
222
- * Generate the template for a facet group with a header and the collapsible
223
- * chevron for the mobile view
224
- */
225
- getFacetGroupTemplate(facetGroup) {
226
- if (facetGroup.buckets.length === 0)
227
- return nothing;
228
- const { key } = facetGroup;
229
- const isOpen = this.openFacets[key];
230
- const collapser = html `
231
- <span class="collapser ${isOpen ? 'open' : ''}"> ${chevronIcon} </span>
232
- `;
233
- return html `
234
- <div class="facet-group ${this.collapsableFacets ? 'mobile' : ''}">
235
- <h1
236
- @click=${() => {
237
- const newOpenFacets = { ...this.openFacets };
238
- newOpenFacets[key] = !isOpen;
239
- this.openFacets = newOpenFacets;
240
- }}
241
- @keyup=${() => {
242
- const newOpenFacets = { ...this.openFacets };
243
- newOpenFacets[key] = !isOpen;
244
- this.openFacets = newOpenFacets;
245
- }}
246
- >
247
- ${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}
248
- </h1>
249
- <div class="facet-group-content ${isOpen ? 'open' : ''}">
250
- ${this.getFacetTemplate(facetGroup)}
251
- </div>
252
- </div>
253
- `;
254
- }
255
- /**
256
- * Generate the list template for each bucket in a facet group
257
- */
258
- getFacetTemplate(facetGroup) {
259
- const bucketsNoFavorites = facetGroup.buckets.filter(bucket => bucket.key.startsWith('fav-') === false);
260
- const bucketsMaxSix = bucketsNoFavorites.slice(0, 6);
261
- return html `
262
- <ul class="facet-list">
263
- ${repeat(bucketsMaxSix, bucket => `${facetGroup.key}:${bucket.key}`, bucket => {
264
- var _a, _b;
265
- const showOnlyCheckboxId = `${facetGroup.key}:${bucket.key}-show-only`;
266
- const negativeCheckboxId = `${facetGroup.key}:${bucket.key}-negative`;
267
- // for collections, we need to asynchronously load the collection name
268
- // so we use the `async-collection-name` widget and for the rest, we have
269
- // a static value to use
270
- const bucketTextDisplay = facetGroup.key !== 'collection'
271
- ? html `${(_a = bucket.displayText) !== null && _a !== void 0 ? _a : bucket.key}`
272
- : html `
273
- <async-collection-name
274
- .collectionNameCache=${this.collectionNameCache}
275
- .identifier=${bucket.key}
276
- placeholder="-"
277
- ></async-collection-name>
278
- `;
279
- const facetHidden = bucket.state === 'hidden';
280
- const facetSelected = bucket.state === 'selected';
281
- const titleText = `${facetGroup.key}: ${(_b = bucket.displayText) !== null && _b !== void 0 ? _b : bucket.key}`;
282
- const onlyShowText = facetSelected
283
- ? `Show all ${facetGroup.key}s`
284
- : `Only show ${titleText}`;
285
- const hideText = `Hide ${titleText}`;
286
- const unhideText = `Unhide ${titleText}`;
287
- const showHideText = facetHidden ? unhideText : hideText;
288
- return html `
289
- <li>
290
- <div class="facet-row">
291
- <div class="facet-checkbox">
292
- <input
293
- type="checkbox"
294
- .name=${facetGroup.key}
295
- .value=${bucket.key}
296
- @click=${(e) => {
297
- this.facetClicked(e, bucket, false);
298
- }}
299
- .checked=${facetSelected}
300
- class="select-facet-checkbox"
301
- title=${onlyShowText}
302
- id=${showOnlyCheckboxId}
303
- />
304
- <input
305
- type="checkbox"
306
- id=${negativeCheckboxId}
307
- .name=${facetGroup.key}
308
- .value=${bucket.key}
309
- @click=${(e) => {
310
- this.facetClicked(e, bucket, true);
311
- }}
312
- .checked=${facetHidden}
313
- class="hide-facet-checkbox"
314
- />
315
- <label
316
- for=${negativeCheckboxId}
317
- class="hide-facet-icon${facetHidden ? ' active' : ''}"
318
- title=${showHideText}
319
- >
320
- <span class="eye">${eyeIcon}</span>
321
- <span class="eye-closed">${eyeClosedIcon}</span>
322
- </label>
323
- </div>
324
-
325
- <label
326
- for=${showOnlyCheckboxId}
327
- class="facet-info-display"
328
- title=${onlyShowText}
329
- >
330
- <div class="facet-title">${bucketTextDisplay}</div>
331
- <div class="facet-count">${bucket.count}</div>
332
- </label>
333
- </div>
334
- </li>
335
- `;
336
- })}
337
- </ul>
338
- `;
339
- }
340
- facetClicked(e, bucket, negative) {
341
- const target = e.target;
342
- const { checked, name, value } = target;
343
- if (checked) {
344
- this.facetChecked(name, value, negative);
345
- }
346
- else {
347
- this.facetUnchecked(name, value);
348
- }
349
- }
350
- facetChecked(key, value, negative) {
351
- const { selectedFacets } = this;
352
- let newFacets;
353
- if (selectedFacets) {
354
- newFacets = {
355
- ...selectedFacets,
356
- };
357
- }
358
- else {
359
- newFacets = defaultSelectedFacets;
360
- }
361
- newFacets[key][value] = negative ? 'hidden' : 'selected';
362
- this.selectedFacets = newFacets;
363
- }
364
- facetUnchecked(key, value) {
365
- const { selectedFacets } = this;
366
- let newFacets;
367
- if (selectedFacets) {
368
- newFacets = {
369
- ...selectedFacets,
370
- };
371
- }
372
- else {
373
- newFacets = defaultSelectedFacets;
374
- }
375
- delete newFacets[key][value];
376
- this.selectedFacets = newFacets;
377
- }
378
- /**
379
- * Parse the aggregate key title into the human readable title
380
- *
381
- * Example: user_aggs__terms__field:mediatypeSorter__size:6 => Media Type
382
- *
383
- * @param key
384
- * @returns
385
- */
386
- getFacetOptionFromKey(key) {
387
- const parts = key.split('__');
388
- const fieldNamePart = parts[2];
389
- const fieldName = fieldNamePart.split(':')[1];
390
- const facetMatch = Object.entries(aggregationToFacetOption).find(([key2]) => fieldName.includes(key2));
391
- const option = facetMatch === null || facetMatch === void 0 ? void 0 : facetMatch[1];
392
- if (!option)
393
- throw new Error(`Could not find facet option for key: ${key}`);
394
- return option;
395
- }
396
- static get styles() {
397
- return css `
398
- #container.loading {
399
- opacity: 0.5;
400
- }
401
-
402
- .collapser {
403
- display: inline-block;
404
- cursor: pointer;
405
- width: 10px;
406
- height: 10px;
407
- }
408
-
409
- .collapser svg {
410
- transition: transform 0.2s ease-in-out;
411
- }
412
-
413
- .collapser.open svg {
414
- transform: rotate(90deg);
415
- }
416
-
417
- .facet-group {
418
- margin-bottom: 2rem;
419
- }
420
-
421
- .facet-group h1 {
422
- margin-bottom: 0.7rem;
423
- }
424
-
425
- .facet-group.mobile h1 {
426
- cursor: pointer;
427
- }
428
-
429
- .facet-group-content {
430
- transition: max-height 0.2s ease-in-out;
431
- }
432
-
433
- .facet-group.mobile .facet-group-content {
434
- max-height: 0;
435
- overflow: hidden;
436
- }
437
-
438
- .facet-group.mobile .facet-group-content.open {
439
- max-height: 2000px;
440
- }
441
-
442
- h1 {
443
- font-size: 1.4rem;
444
- font-weight: 200;
445
- border-bottom: 1px solid rgb(232, 232, 232);
446
- padding-bottom: 3px;
447
- margin: 0;
448
- }
449
-
450
- ul.facet-list {
451
- list-style: none;
452
- margin: 0;
453
- padding: 0;
454
- }
455
-
456
- ul.facet-list li {
457
- margin-bottom: 0.2rem;
458
- }
459
-
460
- .facet-checkbox {
461
- margin-right: 0.5rem;
462
- display: flex;
463
- align-items: center;
464
- }
465
-
466
- .facet-row {
467
- display: flex;
468
- align-items: start;
469
- font-weight: 500;
470
- font-size: 1.2rem;
471
- }
472
-
473
- .facet-info-display {
474
- display: flex;
475
- flex: 1;
476
- cursor: pointer;
477
- }
478
-
479
- .facet-title {
480
- flex: 1;
481
- }
482
-
483
- .facet-count {
484
- margin-left: 0.5rem;
485
- }
486
-
487
- .select-facet-checkbox {
488
- cursor: pointer;
489
- margin-right: 5px;
490
- }
491
-
492
- .hide-facet-checkbox {
493
- display: none;
494
- }
495
-
496
- .hide-facet-icon {
497
- width: 15px;
498
- height: 15px;
499
- cursor: pointer;
500
- opacity: 0.3;
501
- }
502
- .hide-facet-icon:hover,
503
- .active {
504
- opacity: 1;
505
- }
506
- .hide-facet-icon:hover .eye,
507
- .hide-facet-icon .eye-closed {
508
- display: none;
509
- }
510
- .hide-facet-icon:hover .eye-closed,
511
- .hide-facet-icon.active .eye-closed {
512
- display: inline;
513
- }
514
- .hide-facet-icon.active .eye {
515
- display: none;
516
- }
517
- `;
518
- }
519
- };
520
- __decorate([
521
- property({ type: Object })
522
- ], CollectionFacets.prototype, "aggregations", void 0);
523
- __decorate([
524
- property({ type: Object })
525
- ], CollectionFacets.prototype, "fullYearsHistogramAggregation", void 0);
526
- __decorate([
527
- property({ type: String })
528
- ], CollectionFacets.prototype, "minSelectedDate", void 0);
529
- __decorate([
530
- property({ type: String })
531
- ], CollectionFacets.prototype, "maxSelectedDate", void 0);
532
- __decorate([
533
- property({ type: Boolean })
534
- ], CollectionFacets.prototype, "facetsLoading", void 0);
535
- __decorate([
536
- property({ type: Boolean })
537
- ], CollectionFacets.prototype, "fullYearAggregationLoading", void 0);
538
- __decorate([
539
- property({ type: Object })
540
- ], CollectionFacets.prototype, "selectedFacets", void 0);
541
- __decorate([
542
- property({ type: Boolean })
543
- ], CollectionFacets.prototype, "collapsableFacets", void 0);
544
- __decorate([
545
- property({ type: Boolean })
546
- ], CollectionFacets.prototype, "showHistogramDatePicker", void 0);
547
- __decorate([
548
- property({ type: Object })
549
- ], CollectionFacets.prototype, "languageCodeHandler", void 0);
550
- __decorate([
551
- property({ type: Object })
552
- ], CollectionFacets.prototype, "collectionNameCache", void 0);
553
- __decorate([
554
- state()
555
- ], CollectionFacets.prototype, "openFacets", void 0);
556
- CollectionFacets = __decorate([
557
- customElement('collection-facets')
558
- ], CollectionFacets);
559
- export { CollectionFacets };
560
- //# sourceMappingURL=collection-facets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection-facets.js","sourceRoot":"","sources":["../../src/collection-facets.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport {\n css,\n html,\n LitElement,\n PropertyValues,\n nothing,\n TemplateResult,\n} from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { Aggregation, Bucket } from '@internetarchive/search-service';\nimport '@internetarchive/histogram-date-range';\nimport '@internetarchive/feature-feedback';\nimport '@internetarchive/collection-name-cache';\nimport { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport eyeIcon from './assets/img/icons/eye';\nimport eyeClosedIcon from './assets/img/icons/eye-closed';\nimport chevronIcon from './assets/img/icons/chevron';\nimport {\n FacetOption,\n SelectedFacets,\n FacetGroup,\n FacetBucket,\n defaultSelectedFacets,\n} from './models';\nimport { LanguageCodeHandlerInterface } from './language-code-handler/language-code-handler';\n\nconst facetDisplayOrder: FacetOption[] = [\n 'mediatype',\n 'year',\n 'subject',\n 'collection',\n 'creator',\n 'language',\n];\n\nconst aggregationToFacetOption: Record<string, FacetOption> = {\n subjectSorter: 'subject',\n mediatypeSorter: 'mediatype',\n languageSorter: 'language',\n creatorSorter: 'creator',\n collection: 'collection',\n year: 'year',\n};\n\nconst facetTitles: Record<FacetOption, string> = {\n subject: 'Subject',\n mediatype: 'Media Type',\n language: 'Language',\n creator: 'Creator',\n collection: 'Collection',\n year: 'Year',\n};\n\n@customElement('collection-facets')\nexport class CollectionFacets extends LitElement {\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\n\n @property({ type: Object }) fullYearsHistogramAggregation?: Aggregation;\n\n @property({ type: String }) minSelectedDate?: string;\n\n @property({ type: String }) maxSelectedDate?: string;\n\n @property({ type: Boolean }) facetsLoading = false;\n\n @property({ type: Boolean }) fullYearAggregationLoading = false;\n\n @property({ type: Object }) selectedFacets?: SelectedFacets;\n\n @property({ type: Boolean }) collapsableFacets = false;\n\n @property({ type: Boolean }) showHistogramDatePicker = false;\n\n @property({ type: Object })\n languageCodeHandler?: LanguageCodeHandlerInterface;\n\n @property({ type: Object })\n collectionNameCache?: CollectionNameCacheInterface;\n\n @state() openFacets: Record<FacetOption, boolean> = {\n subject: false,\n mediatype: false,\n language: false,\n creator: false,\n collection: false,\n year: false,\n };\n\n render() {\n return html`\n <div id=\"container\" class=\"${this.facetsLoading ? 'loading' : ''}\">\n ${this.showHistogramDatePicker && this.fullYearsHistogramAggregation\n ? html`\n <div class=\"facet-group\">\n <h1>Year Published <feature-feedback></feature-feedback></h1>\n ${this.histogramTemplate}\n </div>\n `\n : nothing}\n ${this.mergedFacets.map(facetGroup =>\n this.getFacetGroupTemplate(facetGroup)\n )}\n </div>\n `;\n }\n\n updated(changed: PropertyValues) {\n if (changed.has('selectedFacets')) {\n this.dispatchFacetsChangedEvent();\n }\n }\n\n private dispatchFacetsChangedEvent() {\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private get currentYearsHistogramAggregation(): Aggregation | undefined {\n return this.aggregations?.year_histogram;\n }\n\n private get histogramTemplate() {\n const { fullYearsHistogramAggregation } = this;\n return html`\n <histogram-date-range\n .minDate=${fullYearsHistogramAggregation?.first_bucket_key}\n .maxDate=${fullYearsHistogramAggregation?.last_bucket_key}\n .minSelectedDate=${this.minSelectedDate}\n .maxSelectedDate=${this.maxSelectedDate}\n .updateDelay=${100}\n missingDataMessage=\"...\"\n .width=${180}\n .bins=${fullYearsHistogramAggregation?.buckets as number[]}\n @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}\n ></histogram-date-range>\n `;\n }\n\n private histogramDateRangeUpdated(\n e: CustomEvent<{\n minDate: string;\n maxDate: string;\n }>\n ) {\n const { minDate, maxDate } = e.detail;\n const event = new CustomEvent('histogramDateRangeUpdated', {\n detail: { minDate, maxDate },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * Combines the selected facets with the aggregations to create a single list of facets\n */\n private get mergedFacets(): FacetGroup[] {\n const facetGroups: FacetGroup[] = [];\n\n facetDisplayOrder.forEach(facetKey => {\n const selectedFacetGroup = this.selectedFacetGroups.find(\n group => group.key === facetKey\n );\n const aggregateFacetGroup = this.aggregationFacetGroups.find(\n group => group.key === facetKey\n );\n\n // if the user selected a facet, but it's not in the aggregation, we add it as-is\n if (selectedFacetGroup && !aggregateFacetGroup) {\n facetGroups.push(selectedFacetGroup);\n return;\n }\n\n // if we don't have an aggregate facet group, don't add this to the list\n if (!aggregateFacetGroup) return;\n\n // start with either the selected group if we have one, or the aggregate group\n const facetGroup = selectedFacetGroup ?? aggregateFacetGroup;\n\n // attach the counts to the selected buckets\n const bucketsWithCount =\n selectedFacetGroup?.buckets.map(bucket => {\n const selectedBucket = aggregateFacetGroup.buckets.find(\n b => b.key === bucket.key\n );\n return selectedBucket\n ? {\n ...bucket,\n count: selectedBucket.count,\n }\n : bucket;\n }) ?? [];\n\n // append any additional buckets that were not selected\n aggregateFacetGroup.buckets.forEach(bucket => {\n const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);\n if (existingBucket) return;\n bucketsWithCount.push(bucket);\n });\n facetGroup.buckets = bucketsWithCount.splice(0, 5);\n\n facetGroups.push(facetGroup);\n });\n\n return facetGroups;\n }\n\n /**\n * Converts the selected facets to a `FacetGroup` array,\n * which is easier to work with\n */\n private get selectedFacetGroups(): FacetGroup[] {\n if (!this.selectedFacets) return [];\n\n const facetGroups: FacetGroup[] = Object.entries(this.selectedFacets).map(\n ([key, selectedFacets]) => {\n const option = key as FacetOption;\n const title = facetTitles[option];\n\n const buckets: FacetBucket[] = Object.entries(selectedFacets).map(\n ([value, facetState]) => {\n let displayText = value;\n // for selected languages, we store the language code instead of the\n // display name, so look up the name from the mapping\n if (option === 'language') {\n displayText =\n this.languageCodeHandler?.getLanguageNameFromCodeString(\n value\n ) ?? value;\n }\n return {\n displayText,\n key: value,\n count: 0,\n state: facetState,\n };\n }\n );\n\n return {\n title,\n key: option,\n buckets,\n };\n }\n );\n\n return facetGroups;\n }\n\n /**\n * Converts the raw `aggregations` to `FacetGroups`, which are easier to use\n */\n private get aggregationFacetGroups(): FacetGroup[] {\n const facetGroups: FacetGroup[] = [];\n Object.entries(this.aggregations ?? []).forEach(([key, buckets]) => {\n // the year_histogram data is in a different format so can't be handled here\n if (key === 'year_histogram') return;\n const option = this.getFacetOptionFromKey(key);\n const title = facetTitles[option];\n const castedBuckets = buckets.buckets as Bucket[];\n const facetBuckets: FacetBucket[] = castedBuckets.map(bucket => {\n let bucketKey = bucket.key;\n // for languages, we need to search by language code instead of the\n // display name, which is what we get from the search engine result\n if (option === 'language') {\n // const languageCodeKey = languageToCodeMap[bucket.key];\n bucketKey =\n this.languageCodeHandler?.getCodeStringFromLanguageName(\n `${bucket.key}`\n ) ?? bucket.key;\n // bucketKey = languageCodeKey ?? bucket.key;\n }\n return {\n displayText: `${bucket.key}`,\n key: `${bucketKey}`,\n count: bucket.doc_count,\n state: 'none',\n };\n });\n const group: FacetGroup = {\n title,\n key: option,\n buckets: facetBuckets,\n };\n facetGroups.push(group);\n });\n return facetGroups;\n }\n\n /**\n * Generate the template for a facet group with a header and the collapsible\n * chevron for the mobile view\n */\n private getFacetGroupTemplate(\n facetGroup: FacetGroup\n ): TemplateResult | typeof nothing {\n if (facetGroup.buckets.length === 0) return nothing;\n const { key } = facetGroup;\n const isOpen = this.openFacets[key];\n const collapser = html`\n <span class=\"collapser ${isOpen ? 'open' : ''}\"> ${chevronIcon} </span>\n `;\n\n return html`\n <div class=\"facet-group ${this.collapsableFacets ? 'mobile' : ''}\">\n <h1\n @click=${() => {\n const newOpenFacets = { ...this.openFacets };\n newOpenFacets[key] = !isOpen;\n this.openFacets = newOpenFacets;\n }}\n @keyup=${() => {\n const newOpenFacets = { ...this.openFacets };\n newOpenFacets[key] = !isOpen;\n this.openFacets = newOpenFacets;\n }}\n >\n ${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}\n </h1>\n <div class=\"facet-group-content ${isOpen ? 'open' : ''}\">\n ${this.getFacetTemplate(facetGroup)}\n </div>\n </div>\n `;\n }\n\n /**\n * Generate the list template for each bucket in a facet group\n */\n private getFacetTemplate(facetGroup: FacetGroup): TemplateResult {\n const bucketsNoFavorites = facetGroup.buckets.filter(\n bucket => bucket.key.startsWith('fav-') === false\n );\n const bucketsMaxSix = bucketsNoFavorites.slice(0, 6);\n\n return html`\n <ul class=\"facet-list\">\n ${repeat(\n bucketsMaxSix,\n bucket => `${facetGroup.key}:${bucket.key}`,\n bucket => {\n const showOnlyCheckboxId = `${facetGroup.key}:${bucket.key}-show-only`;\n const negativeCheckboxId = `${facetGroup.key}:${bucket.key}-negative`;\n\n // for collections, we need to asynchronously load the collection name\n // so we use the `async-collection-name` widget and for the rest, we have\n // a static value to use\n const bucketTextDisplay =\n facetGroup.key !== 'collection'\n ? html`${bucket.displayText ?? bucket.key}`\n : html`\n <async-collection-name\n .collectionNameCache=${this.collectionNameCache}\n .identifier=${bucket.key}\n placeholder=\"-\"\n ></async-collection-name>\n `;\n\n const facetHidden = bucket.state === 'hidden';\n const facetSelected = bucket.state === 'selected';\n\n const titleText = `${facetGroup.key}: ${\n bucket.displayText ?? bucket.key\n }`;\n const onlyShowText = facetSelected\n ? `Show all ${facetGroup.key}s`\n : `Only show ${titleText}`;\n const hideText = `Hide ${titleText}`;\n const unhideText = `Unhide ${titleText}`;\n const showHideText = facetHidden ? unhideText : hideText;\n\n return html`\n <li>\n <div class=\"facet-row\">\n <div class=\"facet-checkbox\">\n <input\n type=\"checkbox\"\n .name=${facetGroup.key}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, bucket, false);\n }}\n .checked=${facetSelected}\n class=\"select-facet-checkbox\"\n title=${onlyShowText}\n id=${showOnlyCheckboxId}\n />\n <input\n type=\"checkbox\"\n id=${negativeCheckboxId}\n .name=${facetGroup.key}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, bucket, true);\n }}\n .checked=${facetHidden}\n class=\"hide-facet-checkbox\"\n />\n <label\n for=${negativeCheckboxId}\n class=\"hide-facet-icon${facetHidden ? ' active' : ''}\"\n title=${showHideText}\n >\n <span class=\"eye\">${eyeIcon}</span>\n <span class=\"eye-closed\">${eyeClosedIcon}</span>\n </label>\n </div>\n\n <label\n for=${showOnlyCheckboxId}\n class=\"facet-info-display\"\n title=${onlyShowText}\n >\n <div class=\"facet-title\">${bucketTextDisplay}</div>\n <div class=\"facet-count\">${bucket.count}</div>\n </label>\n </div>\n </li>\n `;\n }\n )}\n </ul>\n `;\n }\n\n private facetClicked(e: Event, bucket: FacetBucket, negative: boolean) {\n const target = e.target as HTMLInputElement;\n const { checked, name, value } = target;\n if (checked) {\n this.facetChecked(name as FacetOption, value, negative);\n } else {\n this.facetUnchecked(name as FacetOption, value);\n }\n }\n\n private facetChecked(key: FacetOption, value: string, negative: boolean) {\n const { selectedFacets } = this;\n let newFacets: SelectedFacets;\n if (selectedFacets) {\n newFacets = {\n ...selectedFacets,\n };\n } else {\n newFacets = defaultSelectedFacets;\n }\n newFacets[key][value] = negative ? 'hidden' : 'selected';\n this.selectedFacets = newFacets;\n }\n\n private facetUnchecked(key: FacetOption, value: string) {\n const { selectedFacets } = this;\n let newFacets: SelectedFacets;\n if (selectedFacets) {\n newFacets = {\n ...selectedFacets,\n };\n } else {\n newFacets = defaultSelectedFacets;\n }\n delete newFacets[key][value];\n this.selectedFacets = newFacets;\n }\n\n /**\n * Parse the aggregate key title into the human readable title\n *\n * Example: user_aggs__terms__field:mediatypeSorter__size:6 => Media Type\n *\n * @param key\n * @returns\n */\n private getFacetOptionFromKey(key: string): FacetOption {\n const parts = key.split('__');\n const fieldNamePart = parts[2];\n const fieldName = fieldNamePart.split(':')[1];\n const facetMatch = Object.entries(aggregationToFacetOption).find(([key2]) =>\n fieldName.includes(key2)\n );\n const option = facetMatch?.[1];\n if (!option) throw new Error(`Could not find facet option for key: ${key}`);\n return option;\n }\n\n static get styles() {\n return css`\n #container.loading {\n opacity: 0.5;\n }\n\n .collapser {\n display: inline-block;\n cursor: pointer;\n width: 10px;\n height: 10px;\n }\n\n .collapser svg {\n transition: transform 0.2s ease-in-out;\n }\n\n .collapser.open svg {\n transform: rotate(90deg);\n }\n\n .facet-group {\n margin-bottom: 2rem;\n }\n\n .facet-group h1 {\n margin-bottom: 0.7rem;\n }\n\n .facet-group.mobile h1 {\n cursor: pointer;\n }\n\n .facet-group-content {\n transition: max-height 0.2s ease-in-out;\n }\n\n .facet-group.mobile .facet-group-content {\n max-height: 0;\n overflow: hidden;\n }\n\n .facet-group.mobile .facet-group-content.open {\n max-height: 2000px;\n }\n\n h1 {\n font-size: 1.4rem;\n font-weight: 200;\n border-bottom: 1px solid rgb(232, 232, 232);\n padding-bottom: 3px;\n margin: 0;\n }\n\n ul.facet-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n ul.facet-list li {\n margin-bottom: 0.2rem;\n }\n\n .facet-checkbox {\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n }\n\n .facet-row {\n display: flex;\n align-items: start;\n font-weight: 500;\n font-size: 1.2rem;\n }\n\n .facet-info-display {\n display: flex;\n flex: 1;\n cursor: pointer;\n }\n\n .facet-title {\n flex: 1;\n }\n\n .facet-count {\n margin-left: 0.5rem;\n }\n\n .select-facet-checkbox {\n cursor: pointer;\n margin-right: 5px;\n }\n\n .hide-facet-checkbox {\n display: none;\n }\n\n .hide-facet-icon {\n width: 15px;\n height: 15px;\n cursor: pointer;\n opacity: 0.3;\n }\n .hide-facet-icon:hover,\n .active {\n opacity: 1;\n }\n .hide-facet-icon:hover .eye,\n .hide-facet-icon .eye-closed {\n display: none;\n }\n .hide-facet-icon:hover .eye-closed,\n .hide-facet-icon.active .eye-closed {\n display: inline;\n }\n .hide-facet-icon.active .eye {\n display: none;\n }\n `;\n }\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { LitElement, CSSResultGroup, nothing } from 'lit';
2
- export declare type PlaceholderType = 'empty-query' | 'null-result' | null;
3
- export declare class EmptyPlaceholder extends LitElement {
4
- placeholderType: PlaceholderType;
5
- isMobileView?: false;
6
- render(): import("lit-html").TemplateResult<1> | typeof nothing;
7
- private get placeholderTemplate();
8
- private get emptyQueryTemplate();
9
- private get nullResultTemplate();
10
- static get styles(): CSSResultGroup;
11
- }