@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,698 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { LitElement, html, css, nothing, } from 'lit';
3
- import { customElement, property, query, state } from 'lit/decorators.js';
4
- import { SortField, SortFieldDisplayName, } from '../models';
5
- import './alpha-bar';
6
- import { sortIcon } from './img/sort-triangle';
7
- import { tileIcon } from './img/tile';
8
- import { listIcon } from './img/list';
9
- import { compactIcon } from './img/compact';
10
- let SortFilterBar = class SortFilterBar extends LitElement {
11
- constructor() {
12
- super(...arguments);
13
- this.sortDirection = null;
14
- this.selectedSort = SortField.relevance;
15
- this.selectedTitleFilter = null;
16
- this.selectedCreatorFilter = null;
17
- this.showRelevance = true;
18
- this.alphaSelectorVisible = null;
19
- this.dateSortSelectorVisible = false;
20
- this.desktopSelectorBarWidth = 0;
21
- this.selectorBarContainerWidth = 0;
22
- this.hoveringOverDateSortOptions = false;
23
- this.boundDateSelectorEscapeListener = (e) => {
24
- if (e.key === 'Escape') {
25
- this.dateSortSelectorVisible = false;
26
- }
27
- };
28
- }
29
- render() {
30
- return html `
31
- <div id="container">
32
- <div id="sort-bar">
33
- <div id="sort-direction-container">
34
- ${this.sortDirectionSelectorTemplate}
35
- </div>
36
-
37
- <div id="sort-selector-container">
38
- ${this.mobileSortSelectorTemplate}
39
- ${this.desktopSortSelectorTemplate}
40
- </div>
41
-
42
- <div id="display-style-selector">${this.displayOptionTemplate}</div>
43
- </div>
44
-
45
- ${this.dateSortSelectorVisible && !this.mobileSelectorVisible
46
- ? this.dateSortSelector
47
- : nothing}
48
- ${this.alphaBarTemplate}
49
-
50
- <div id="bottom-shadow"></div>
51
- </div>
52
- `;
53
- }
54
- updated(changed) {
55
- if (changed.has('displayMode')) {
56
- this.displayModeChanged();
57
- }
58
- if (changed.has('selectedSort') && this.sortDirection === null) {
59
- this.sortDirection = 'desc';
60
- }
61
- if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
62
- this.alphaSelectorVisible = 'title';
63
- }
64
- if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
65
- this.alphaSelectorVisible = 'creator';
66
- }
67
- if (changed.has('dateSortSelectorVisible')) {
68
- this.setupEscapeListeners();
69
- }
70
- if (changed.has('resizeObserver')) {
71
- const oldObserver = changed.get('resizeObserver');
72
- if (oldObserver)
73
- this.disconnectResizeObserver(oldObserver);
74
- this.setupResizeObserver();
75
- }
76
- }
77
- setupEscapeListeners() {
78
- if (this.dateSortSelectorVisible) {
79
- document.addEventListener('keydown', this.boundDateSelectorEscapeListener);
80
- }
81
- else {
82
- document.removeEventListener('keydown', this.boundDateSelectorEscapeListener);
83
- }
84
- }
85
- disconnectedCallback() {
86
- if (this.resizeObserver) {
87
- this.disconnectResizeObserver(this.resizeObserver);
88
- }
89
- }
90
- disconnectResizeObserver(resizeObserver) {
91
- resizeObserver.removeObserver({
92
- target: this.sortSelectorContainer,
93
- handler: this,
94
- });
95
- resizeObserver.removeObserver({
96
- target: this.desktopSortSelector,
97
- handler: this,
98
- });
99
- }
100
- setupResizeObserver() {
101
- if (!this.resizeObserver)
102
- return;
103
- this.resizeObserver.addObserver({
104
- target: this.sortSelectorContainer,
105
- handler: this,
106
- });
107
- this.resizeObserver.addObserver({
108
- target: this.desktopSortSelector,
109
- handler: this,
110
- });
111
- }
112
- get mobileSelectorVisible() {
113
- return this.selectorBarContainerWidth - 10 < this.desktopSelectorBarWidth;
114
- }
115
- get alphaBarTemplate() {
116
- if (!['title', 'creator'].includes(this.selectedSort))
117
- return nothing;
118
- if (this.alphaSelectorVisible === null) {
119
- if (this.selectedSort === 'creator')
120
- return this.creatorSelectorBar;
121
- if (this.selectedSort === 'title')
122
- return this.titleSelectorBar;
123
- }
124
- else {
125
- return this.alphaSelectorVisible === 'creator'
126
- ? this.creatorSelectorBar
127
- : this.titleSelectorBar;
128
- }
129
- return nothing;
130
- }
131
- handleResize(entry) {
132
- if (entry.target === this.desktopSortSelector) {
133
- this.desktopSelectorBarWidth = entry.contentRect.width;
134
- }
135
- else if (entry.target === this.sortSelectorContainer) {
136
- this.selectorBarContainerWidth = entry.contentRect.width;
137
- }
138
- }
139
- get sortDirectionSelectorTemplate() {
140
- return html `
141
- <div id="sort-direction-selector">
142
- <button
143
- id="sort-ascending-btn"
144
- class="sort-button ${this.sortDirection === 'asc' ? 'selected' : ''}"
145
- ?disabled=${this.selectedSort === 'relevance'}
146
- @click=${() => {
147
- this.setSortDirections('asc');
148
- }}
149
- >
150
- ${sortIcon}
151
- </button>
152
- <button
153
- id="sort-descending-btn"
154
- class="sort-button ${this.sortDirection === 'desc' ? 'selected' : ''}"
155
- ?disabled=${this.selectedSort === 'relevance'}
156
- @click=${() => {
157
- this.setSortDirections('desc');
158
- }}
159
- >
160
- ${sortIcon}
161
- </button>
162
- </div>
163
- `;
164
- }
165
- get desktopSortSelectorTemplate() {
166
- return html `
167
- <ul
168
- id="desktop-sort-selector"
169
- class=${this.mobileSelectorVisible ? 'hidden' : 'visible'}
170
- >
171
- <li id="sort-by-text">Sort By</li>
172
- <li>
173
- ${this.showRelevance
174
- ? this.getSortDisplayOption(SortField.relevance)
175
- : nothing}
176
- </li>
177
- <li>${this.getSortDisplayOption(SortField.views)}</li>
178
- <li>
179
- ${this.getSortDisplayOption(SortField.title, {
180
- clickEvent: () => {
181
- this.alphaSelectorVisible = 'title';
182
- this.selectedCreatorFilter = null;
183
- this.dateSortSelectorVisible = false;
184
- this.setSelectedSort(SortField.title);
185
- this.emitCreatorLetterChangedEvent();
186
- },
187
- })}
188
- </li>
189
- <li>
190
- ${this.getSortDisplayOption(SortField.date, {
191
- clickEvent: () => {
192
- if (!this.dateOptionSelected)
193
- this.setSelectedSort(SortField.date);
194
- this.dateSortSelectorVisible = !this.dateSortSelectorVisible;
195
- this.alphaSelectorVisible = null;
196
- this.selectedTitleFilter = null;
197
- this.selectedCreatorFilter = null;
198
- this.emitTitleLetterChangedEvent();
199
- this.emitCreatorLetterChangedEvent();
200
- },
201
- displayName: html `${this.dateSortField}`,
202
- isSelected: () => this.dateOptionSelected,
203
- })}
204
- </li>
205
- <li>
206
- ${this.getSortDisplayOption(SortField.creator, {
207
- clickEvent: () => {
208
- this.alphaSelectorVisible = 'creator';
209
- this.selectedTitleFilter = null;
210
- this.dateSortSelectorVisible = false;
211
- this.setSelectedSort(SortField.creator);
212
- this.emitTitleLetterChangedEvent();
213
- },
214
- })}
215
- </li>
216
- </ul>
217
- `;
218
- }
219
- /**
220
- * This generates each of the sort option links.
221
- *
222
- * It manages the display value and the selected state of the option.
223
- *
224
- * @param sortField
225
- * @param options {
226
- * additionalClickEvent?: () => void; If this is provided, it will also be called when the option is clicked.
227
- * displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
228
- * isSelected?: () => boolean; A function that returns true if the option is selected. Defaults to the selectedSort === sortField.
229
- * }
230
- * @returns
231
- */
232
- getSortDisplayOption(sortField, options) {
233
- var _a, _b;
234
- const isSelected = (_a = options === null || options === void 0 ? void 0 : options.isSelected) !== null && _a !== void 0 ? _a : (() => this.selectedSort === sortField);
235
- const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SortFieldDisplayName[sortField];
236
- return html `
237
- <a
238
- href="#"
239
- @click=${(e) => {
240
- e.preventDefault();
241
- if (options === null || options === void 0 ? void 0 : options.clickEvent) {
242
- options.clickEvent(e);
243
- }
244
- else {
245
- this.alphaSelectorVisible = null;
246
- this.dateSortSelectorVisible = false;
247
- this.selectedTitleFilter = null;
248
- this.selectedCreatorFilter = null;
249
- this.setSelectedSort(sortField);
250
- this.emitTitleLetterChangedEvent();
251
- this.emitCreatorLetterChangedEvent();
252
- }
253
- }}
254
- class=${isSelected() ? 'selected' : ''}
255
- >
256
- ${displayName}
257
- </a>
258
- `;
259
- }
260
- get mobileSortSelectorTemplate() {
261
- return html `
262
- <select
263
- id="mobile-sort-selector"
264
- @change=${this.mobileSortChanged}
265
- class=${this.mobileSelectorVisible ? 'visible' : 'hidden'}
266
- >
267
- ${Object.keys(SortField).map(field => html `
268
- <option value="${field}" ?selected=${this.selectedSort === field}>
269
- ${SortFieldDisplayName[field]}
270
- </option>
271
- `)}
272
- </select>
273
- `;
274
- }
275
- mobileSortChanged(e) {
276
- const target = e.target;
277
- this.setSelectedSort(target.value);
278
- }
279
- get displayOptionTemplate() {
280
- return html `
281
- <ul>
282
- <li>
283
- <button
284
- id="grid-button"
285
- @click=${() => {
286
- this.displayMode = 'grid';
287
- }}
288
- class=${this.displayMode === 'grid' ? 'active' : ''}
289
- title="Tile view"
290
- >
291
- ${tileIcon}
292
- </button>
293
- </li>
294
- <li>
295
- <button
296
- id="grid-button"
297
- @click=${() => {
298
- this.displayMode = 'list-detail';
299
- }}
300
- class=${this.displayMode === 'list-detail' ? 'active' : ''}
301
- title="List view"
302
- >
303
- ${listIcon}
304
- </button>
305
- </li>
306
- <li>
307
- <button
308
- id="list-button"
309
- @click=${() => {
310
- this.displayMode = 'list-compact';
311
- }}
312
- class=${this.displayMode === 'list-compact' ? 'active' : ''}
313
- title="Compact list view"
314
- >
315
- ${compactIcon}
316
- </button>
317
- </li>
318
- </ul>
319
- `;
320
- }
321
- get dateSortSelector() {
322
- return html `
323
- <div
324
- id="date-sort-selector-backdrop"
325
- @keyup=${() => {
326
- this.dateSortSelectorVisible = false;
327
- }}
328
- @click=${() => {
329
- this.dateSortSelectorVisible = false;
330
- }}
331
- ></div>
332
- <div id="date-sort-selector">
333
- <ul>
334
- <li>${this.getDateSortButton(SortField.datearchived)}</li>
335
- <li>${this.getDateSortButton(SortField.date)}</li>
336
- <li>${this.getDateSortButton(SortField.datereviewed)}</li>
337
- <li>${this.getDateSortButton(SortField.dateadded)}</li>
338
- </ul>
339
- </div>
340
- `;
341
- }
342
- getDateSortButton(sortField) {
343
- return html `
344
- <button
345
- @click=${() => {
346
- this.selectDateSort(sortField);
347
- }}
348
- class=${this.selectedSort === sortField ? 'selected' : ''}
349
- >
350
- ${SortFieldDisplayName[sortField]}
351
- </button>
352
- `;
353
- }
354
- selectDateSort(sortField) {
355
- this.dateSortSelectorVisible = false;
356
- this.setSelectedSort(sortField);
357
- }
358
- setSortDirections(sortDirection) {
359
- this.sortDirection = sortDirection;
360
- this.emitSortChangedEvent();
361
- }
362
- setSelectedSort(sort) {
363
- this.selectedSort = sort;
364
- this.emitSortChangedEvent();
365
- }
366
- /**
367
- * There are four date sort options.
368
- *
369
- * This checks to see if the current sort is one of them.
370
- *
371
- * @readonly
372
- * @private
373
- * @type {boolean}
374
- * @memberof SortFilterBar
375
- */
376
- get dateOptionSelected() {
377
- const dateSortFields = [
378
- SortField.datearchived,
379
- SortField.date,
380
- SortField.datereviewed,
381
- SortField.dateadded,
382
- ];
383
- return dateSortFields.includes(this.selectedSort);
384
- }
385
- /**
386
- * The display name of the current date field
387
- *
388
- * @readonly
389
- * @private
390
- * @type {string}
391
- * @memberof SortFilterBar
392
- */
393
- get dateSortField() {
394
- var _a;
395
- const defaultSort = SortFieldDisplayName[SortField.date];
396
- const name = this.dateOptionSelected
397
- ? (_a = SortFieldDisplayName[this.selectedSort]) !== null && _a !== void 0 ? _a : defaultSort
398
- : defaultSort;
399
- return name;
400
- }
401
- get titleSelectorBar() {
402
- return html ` <alpha-bar
403
- .selectedLetter=${this.selectedTitleFilter}
404
- @letterChanged=${this.titleLetterChanged}
405
- ></alpha-bar>`;
406
- }
407
- get creatorSelectorBar() {
408
- return html ` <alpha-bar
409
- .selectedLetter=${this.selectedCreatorFilter}
410
- @letterChanged=${this.creatorLetterChanged}
411
- ></alpha-bar>`;
412
- }
413
- titleLetterChanged(e) {
414
- var _a;
415
- this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
416
- this.emitTitleLetterChangedEvent();
417
- }
418
- creatorLetterChanged(e) {
419
- var _a;
420
- this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
421
- this.emitCreatorLetterChangedEvent();
422
- }
423
- emitTitleLetterChangedEvent() {
424
- const event = new CustomEvent('titleLetterChanged', {
425
- detail: { selectedLetter: this.selectedTitleFilter },
426
- });
427
- this.dispatchEvent(event);
428
- }
429
- emitCreatorLetterChangedEvent() {
430
- const event = new CustomEvent('creatorLetterChanged', {
431
- detail: { selectedLetter: this.selectedCreatorFilter },
432
- });
433
- this.dispatchEvent(event);
434
- }
435
- displayModeChanged() {
436
- const event = new CustomEvent('displayModeChanged', {
437
- detail: { displayMode: this.displayMode },
438
- });
439
- this.dispatchEvent(event);
440
- }
441
- emitSortChangedEvent() {
442
- const event = new CustomEvent('sortChanged', {
443
- detail: {
444
- selectedSort: this.selectedSort,
445
- sortDirection: this.sortDirection,
446
- },
447
- });
448
- this.dispatchEvent(event);
449
- }
450
- };
451
- SortFilterBar.styles = css `
452
- #container {
453
- position: relative;
454
- }
455
-
456
- #sort-bar {
457
- display: flex;
458
- justify-content: space-between;
459
- border: 1px solid rgb(232, 232, 232);
460
- align-items: center;
461
- padding: 0.5rem 1.5rem;
462
- }
463
-
464
- #sort-direction-container {
465
- flex: 0;
466
- }
467
-
468
- #sort-by-text {
469
- text-transform: uppercase;
470
- }
471
-
472
- #bottom-shadow {
473
- height: 1px;
474
- width: 100%;
475
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
476
- background-color: #bbb;
477
- }
478
-
479
- ul {
480
- list-style: none;
481
- display: flex;
482
- margin: 0;
483
- padding: 0;
484
- align-items: center;
485
- }
486
-
487
- li {
488
- padding: 0;
489
- }
490
-
491
- .sort-button {
492
- background: none;
493
- color: inherit;
494
- border: none;
495
- padding: 0;
496
- cursor: pointer;
497
- outline: inherit;
498
- width: 12px;
499
- height: 12px;
500
- opacity: 0.5;
501
- }
502
-
503
- .sort-button.selected {
504
- opacity: 1;
505
- }
506
-
507
- .sort-button:disabled {
508
- opacity: 0.25;
509
- cursor: default;
510
- }
511
-
512
- #date-sort-selector {
513
- position: absolute;
514
- left: 150px;
515
- top: 45px;
516
-
517
- z-index: 1;
518
- padding: 1rem;
519
- background-color: white;
520
- border-radius: 2.5rem;
521
- border: 1px solid #404142;
522
- }
523
-
524
- #date-sort-selector button {
525
- background: none;
526
- border-radius: 15px;
527
- color: #404142;
528
- border: none;
529
- appearance: none;
530
- cursor: pointer;
531
- -webkit-appearance: none;
532
- font-size: 1.4rem;
533
- font-weight: 400;
534
- padding: 0.5rem 1.2rem;
535
- }
536
-
537
- #date-sort-selector button.selected {
538
- background-color: #404142;
539
- color: white;
540
- }
541
-
542
- #show-details {
543
- text-transform: uppercase;
544
- cursor: pointer;
545
- display: flex;
546
- }
547
-
548
- #show-details input {
549
- margin-right: 0.5rem;
550
- flex: 0 0 12px;
551
- }
552
-
553
- #sort-descending-btn {
554
- transform: rotate(180deg);
555
- }
556
-
557
- #sort-direction-selector {
558
- display: flex;
559
- flex-direction: column;
560
- gap: 3px;
561
- margin-right: 1rem;
562
- }
563
-
564
- #sort-selector-container {
565
- flex: 1;
566
- }
567
-
568
- /*
569
- we move the desktop sort selector offscreen instead of display: none
570
- because we need to observe the width of it vs its container to determine
571
- if it's wide enough to display the desktop version and if you displY: none,
572
- the width becomes 0
573
- */
574
- #desktop-sort-selector.hidden {
575
- position: absolute;
576
- top: -9999px;
577
- left: -9999px;
578
- }
579
-
580
- #mobile-sort-selector.hidden {
581
- display: none;
582
- }
583
-
584
- #date-sort-selector-backdrop {
585
- position: fixed;
586
- top: 0;
587
- left: 0;
588
- width: 100%;
589
- height: 100%;
590
- z-index: 1;
591
- background-color: rgba(255, 255, 255, 0.5);
592
- }
593
-
594
- #desktop-sort-selector {
595
- display: inline-flex;
596
- }
597
-
598
- #desktop-sort-selector li {
599
- display: flex;
600
- align-items: center;
601
- }
602
-
603
- #desktop-sort-selector li a {
604
- text-decoration: none;
605
- text-transform: uppercase;
606
- font-size: 1.4rem;
607
- color: #333;
608
- line-height: 2.5;
609
- }
610
-
611
- #desktop-sort-selector li a.selected {
612
- font-weight: bold;
613
- }
614
-
615
- #desktop-sort-selector li::after {
616
- content: '•';
617
- padding-left: 1rem;
618
- padding-right: 1rem;
619
- }
620
-
621
- #desktop-sort-selector li:first-child::after {
622
- content: '';
623
- }
624
-
625
- #desktop-sort-selector li:last-child::after {
626
- content: '';
627
- }
628
-
629
- #display-style-selector {
630
- flex: 0;
631
- }
632
-
633
- #display-style-selector button {
634
- background: none;
635
- color: inherit;
636
- border: none;
637
- appearance: none;
638
- cursor: pointer;
639
- -webkit-appearance: none;
640
- opacity: 0.5;
641
- }
642
-
643
- #display-style-selector button.active {
644
- opacity: 1;
645
- }
646
-
647
- #display-style-selector button svg {
648
- width: 24px;
649
- height: 24px;
650
- }
651
- `;
652
- __decorate([
653
- property({ type: String })
654
- ], SortFilterBar.prototype, "displayMode", void 0);
655
- __decorate([
656
- property({ type: String })
657
- ], SortFilterBar.prototype, "sortDirection", void 0);
658
- __decorate([
659
- property({ type: String })
660
- ], SortFilterBar.prototype, "selectedSort", void 0);
661
- __decorate([
662
- property({ type: String })
663
- ], SortFilterBar.prototype, "selectedTitleFilter", void 0);
664
- __decorate([
665
- property({ type: String })
666
- ], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
667
- __decorate([
668
- property({ type: Boolean })
669
- ], SortFilterBar.prototype, "showRelevance", void 0);
670
- __decorate([
671
- property({ type: Object })
672
- ], SortFilterBar.prototype, "resizeObserver", void 0);
673
- __decorate([
674
- state()
675
- ], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
676
- __decorate([
677
- state()
678
- ], SortFilterBar.prototype, "dateSortSelectorVisible", void 0);
679
- __decorate([
680
- state()
681
- ], SortFilterBar.prototype, "desktopSelectorBarWidth", void 0);
682
- __decorate([
683
- state()
684
- ], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
685
- __decorate([
686
- state()
687
- ], SortFilterBar.prototype, "hoveringOverDateSortOptions", void 0);
688
- __decorate([
689
- query('#desktop-sort-selector')
690
- ], SortFilterBar.prototype, "desktopSortSelector", void 0);
691
- __decorate([
692
- query('#sort-selector-container')
693
- ], SortFilterBar.prototype, "sortSelectorContainer", void 0);
694
- SortFilterBar = __decorate([
695
- customElement('sort-filter-bar')
696
- ], SortFilterBar);
697
- export { SortFilterBar };
698
- //# sourceMappingURL=sort-filter-bar.js.map