@internetarchive/collection-browser 2.5.2 → 2.6.1

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 (308) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +12 -12
  6. package/dist/index.js +12 -12
  7. package/dist/src/app-root.d.ts +91 -91
  8. package/dist/src/app-root.js +487 -487
  9. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  10. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  11. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  13. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  14. package/dist/src/assets/img/icons/chevron.js +2 -2
  15. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  16. package/dist/src/assets/img/icons/contract.js +2 -2
  17. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  18. package/dist/src/assets/img/icons/empty-query.js +2 -2
  19. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  20. package/dist/src/assets/img/icons/expand.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  29. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  30. package/dist/src/assets/img/icons/login-required.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  59. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  60. package/dist/src/assets/img/icons/null-result.js +2 -2
  61. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  62. package/dist/src/assets/img/icons/restricted.js +2 -2
  63. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  64. package/dist/src/assets/img/icons/reviews.js +2 -2
  65. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  66. package/dist/src/assets/img/icons/upload.js +2 -2
  67. package/dist/src/assets/img/icons/views.d.ts +1 -1
  68. package/dist/src/assets/img/icons/views.js +2 -2
  69. package/dist/src/circular-activity-indicator.d.ts +5 -5
  70. package/dist/src/circular-activity-indicator.js +17 -17
  71. package/dist/src/collection-browser.d.ts +564 -564
  72. package/dist/src/collection-browser.js +1579 -1569
  73. package/dist/src/collection-browser.js.map +1 -1
  74. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  75. package/dist/src/collection-facets/facet-row.js +120 -117
  76. package/dist/src/collection-facets/facet-row.js.map +1 -1
  77. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  78. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  79. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  80. package/dist/src/collection-facets/facets-template.js +45 -43
  81. package/dist/src/collection-facets/facets-template.js.map +1 -1
  82. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  83. package/dist/src/collection-facets/more-facets-content.js +407 -407
  84. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  85. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  86. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  87. package/dist/src/collection-facets/toggle-switch.js +94 -94
  88. package/dist/src/collection-facets.d.ts +103 -103
  89. package/dist/src/collection-facets.js +534 -516
  90. package/dist/src/collection-facets.js.map +1 -1
  91. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
  92. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  93. package/dist/src/data-source/collection-browser-data-source.d.ts +378 -378
  94. package/dist/src/data-source/collection-browser-data-source.js +984 -985
  95. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  96. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
  97. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  98. package/dist/src/data-source/models.d.ts +28 -28
  99. package/dist/src/data-source/models.js +8 -8
  100. package/dist/src/empty-placeholder.d.ts +23 -23
  101. package/dist/src/empty-placeholder.js +92 -79
  102. package/dist/src/empty-placeholder.js.map +1 -1
  103. package/dist/src/expanded-date-picker.d.ts +43 -43
  104. package/dist/src/expanded-date-picker.js +109 -109
  105. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  106. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  107. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  108. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  109. package/dist/src/manage/manage-bar.d.ts +30 -30
  110. package/dist/src/manage/manage-bar.js +61 -61
  111. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  112. package/dist/src/mediatype/mediatype-config.js +91 -91
  113. package/dist/src/models.d.ts +211 -209
  114. package/dist/src/models.js +381 -381
  115. package/dist/src/models.js.map +1 -1
  116. package/dist/src/restoration-state-handler.d.ts +70 -70
  117. package/dist/src/restoration-state-handler.js +357 -357
  118. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  119. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  120. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  121. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  122. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  123. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  124. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  125. package/dist/src/sort-filter-bar/img/list.js +2 -2
  126. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  127. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  128. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  129. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  130. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  131. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  132. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  133. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  134. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  135. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  136. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -222
  137. package/dist/src/sort-filter-bar/sort-filter-bar.js +700 -696
  138. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  139. package/dist/src/styles/ia-button.d.ts +2 -2
  140. package/dist/src/styles/ia-button.js +16 -16
  141. package/dist/src/styles/item-image-styles.d.ts +8 -8
  142. package/dist/src/styles/item-image-styles.js +9 -9
  143. package/dist/src/styles/sr-only.d.ts +1 -1
  144. package/dist/src/styles/sr-only.js +2 -2
  145. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  146. package/dist/src/tiles/base-tile-component.js +63 -63
  147. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  148. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  149. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  150. package/dist/src/tiles/grid/account-tile.js +72 -72
  151. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  152. package/dist/src/tiles/grid/collection-tile.js +80 -80
  153. package/dist/src/tiles/grid/item-tile.d.ts +30 -30
  154. package/dist/src/tiles/grid/item-tile.js +149 -149
  155. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  156. package/dist/src/tiles/grid/search-tile.js +51 -51
  157. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  158. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  159. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  160. package/dist/src/tiles/grid/tile-stats.js +53 -53
  161. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  162. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  163. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  164. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  165. package/dist/src/tiles/image-block.d.ts +17 -17
  166. package/dist/src/tiles/image-block.js +73 -73
  167. package/dist/src/tiles/item-image.d.ts +39 -39
  168. package/dist/src/tiles/item-image.js +154 -154
  169. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  170. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  171. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  172. package/dist/src/tiles/list/tile-list-compact.js +114 -114
  173. package/dist/src/tiles/list/tile-list.d.ts +50 -50
  174. package/dist/src/tiles/list/tile-list.js +315 -315
  175. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  176. package/dist/src/tiles/mediatype-icon.js +47 -47
  177. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  178. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  179. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  180. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  181. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  182. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  183. package/dist/src/tiles/review-block.d.ts +12 -12
  184. package/dist/src/tiles/review-block.js +56 -56
  185. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  186. package/dist/src/tiles/text-snippet-block.js +73 -73
  187. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  188. package/dist/src/tiles/tile-dispatcher.js +229 -229
  189. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  190. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  191. package/dist/src/utils/analytics-events.d.ts +28 -28
  192. package/dist/src/utils/analytics-events.js +30 -30
  193. package/dist/src/utils/array-equals.d.ts +4 -4
  194. package/dist/src/utils/array-equals.js +10 -10
  195. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  196. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  197. package/dist/src/utils/facet-utils.d.ts +83 -83
  198. package/dist/src/utils/facet-utils.js +145 -145
  199. package/dist/src/utils/format-count.d.ts +7 -7
  200. package/dist/src/utils/format-count.js +76 -76
  201. package/dist/src/utils/format-date.d.ts +2 -2
  202. package/dist/src/utils/format-date.js +25 -25
  203. package/dist/src/utils/format-unit-size.d.ts +2 -2
  204. package/dist/src/utils/format-unit-size.js +33 -33
  205. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  206. package/dist/src/utils/local-date-from-utc.js +15 -15
  207. package/dist/src/utils/log.d.ts +7 -7
  208. package/dist/src/utils/log.js +15 -15
  209. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  210. package/dist/src/utils/resolve-mediatype.js +23 -23
  211. package/dist/src/utils/sha1.d.ts +2 -2
  212. package/dist/src/utils/sha1.js +8 -8
  213. package/dist/test/collection-browser.test.d.ts +1 -1
  214. package/dist/test/collection-browser.test.js +1294 -1294
  215. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  216. package/dist/test/collection-facets/facet-row.test.js +227 -227
  217. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  218. package/dist/test/collection-facets/facets-template.test.js +91 -91
  219. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  220. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  221. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  222. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  223. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  224. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  225. package/dist/test/collection-facets.test.d.ts +2 -2
  226. package/dist/test/collection-facets.test.js +652 -652
  227. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  228. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  229. package/dist/test/empty-placeholder.test.d.ts +1 -1
  230. package/dist/test/empty-placeholder.test.js +63 -63
  231. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  232. package/dist/test/expanded-date-picker.test.js +95 -95
  233. package/dist/test/icon-overlay.test.d.ts +1 -1
  234. package/dist/test/icon-overlay.test.js +24 -24
  235. package/dist/test/image-block.test.d.ts +1 -1
  236. package/dist/test/image-block.test.js +48 -48
  237. package/dist/test/item-image.test.d.ts +1 -1
  238. package/dist/test/item-image.test.js +85 -85
  239. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  240. package/dist/test/manage/manage-bar.test.js +81 -81
  241. package/dist/test/mediatype-config.test.d.ts +1 -1
  242. package/dist/test/mediatype-config.test.js +16 -16
  243. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  244. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  245. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  246. package/dist/test/mocks/mock-search-responses.js +942 -942
  247. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  248. package/dist/test/mocks/mock-search-service.js +54 -54
  249. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  250. package/dist/test/restoration-state-handler.test.js +270 -270
  251. package/dist/test/review-block.test.d.ts +1 -1
  252. package/dist/test/review-block.test.js +44 -44
  253. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  254. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  255. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  256. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  257. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  258. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  259. package/dist/test/text-overlay.test.d.ts +1 -1
  260. package/dist/test/text-overlay.test.js +48 -48
  261. package/dist/test/text-snippet-block.test.d.ts +1 -1
  262. package/dist/test/text-snippet-block.test.js +57 -57
  263. package/dist/test/tile-stats.test.d.ts +1 -1
  264. package/dist/test/tile-stats.test.js +81 -81
  265. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  266. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  267. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  268. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  269. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  270. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  271. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  272. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  273. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  274. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  275. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  276. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  277. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  278. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  279. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  280. package/dist/test/tiles/list/tile-list.test.js +297 -297
  281. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  282. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  283. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  284. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  285. package/dist/test/utils/array-equals.test.d.ts +1 -1
  286. package/dist/test/utils/array-equals.test.js +26 -26
  287. package/dist/test/utils/format-count.test.d.ts +1 -1
  288. package/dist/test/utils/format-count.test.js +23 -23
  289. package/dist/test/utils/format-date.test.d.ts +1 -1
  290. package/dist/test/utils/format-date.test.js +17 -17
  291. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  292. package/dist/test/utils/format-unit-size.test.js +17 -17
  293. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  294. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  295. package/local.archive.org.cert +86 -86
  296. package/local.archive.org.key +27 -27
  297. package/package.json +1 -1
  298. package/renovate.json +6 -6
  299. package/src/collection-browser.ts +26 -10
  300. package/src/collection-facets/facet-row.ts +3 -0
  301. package/src/collection-facets/facets-template.ts +3 -1
  302. package/src/collection-facets.ts +20 -2
  303. package/src/data-source/collection-browser-data-source.ts +1 -5
  304. package/src/empty-placeholder.ts +18 -5
  305. package/src/models.ts +8 -1
  306. package/src/sort-filter-bar/sort-filter-bar.ts +4 -0
  307. package/web-dev-server.config.mjs +30 -30
  308. package/web-test-runner.config.mjs +41 -41
@@ -1,81 +1,81 @@
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 { msg } from '@lit/localize';
5
- import '@internetarchive/ia-dropdown';
6
- import { SORT_OPTIONS, SortField, } from '../models';
7
- import './alpha-bar';
8
- import { sortUpIcon } from './img/sort-toggle-up';
9
- import { sortDownIcon } from './img/sort-toggle-down';
10
- import { sortDisabledIcon } from './img/sort-toggle-disabled';
11
- import { tileIcon } from './img/tile';
12
- import { listIcon } from './img/list';
13
- import { compactIcon } from './img/compact';
14
- import { srOnlyStyle } from '../styles/sr-only';
15
- let SortFilterBar = class SortFilterBar extends LitElement {
16
- constructor() {
17
- super(...arguments);
18
- /** The default sort direction to use if none is set */
19
- this.defaultSortDirection = null;
20
- /** The default sort field to use if none is set */
21
- this.defaultSortField = SortField.relevance;
22
- /** The current sort direction (asc/desc), or null if none is set */
23
- this.sortDirection = null;
24
- /** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
25
- this.selectedSort = SortField.default;
26
- /** The currently selected title letter filter, or null if none is set */
27
- this.selectedTitleFilter = null;
28
- /** The currently selected creator letter filter, or null if none is set */
29
- this.selectedCreatorFilter = null;
30
- /** Whether to show the Relevance sort option (default `true`) */
31
- this.showRelevance = true;
32
- /** Whether to show the Date Favorited sort option instead of Date Published/Archived/Reviewed (default `false`) */
33
- this.showDateFavorited = false;
34
- /** Whether to replace the default sort options with a slot for customization (default `false`) */
35
- this.enableSortOptionsSlot = false;
36
- /** Whether to suppress showing the three display mode options on the right of the bar (default `false`) */
37
- this.suppressDisplayModes = false;
38
- /**
39
- * The Views sort option that was most recently selected (or the default, if none has been selected yet)
40
- */
41
- this.lastSelectedViewSort = SortField.weeklyview;
42
- /**
43
- * The Date sort option that was most recently selected (or the default, if none has been selected yet)
44
- */
45
- this.lastSelectedDateSort = this.defaultDateSortField;
46
- /**
47
- * Which of the alphabet bars (title/creator) should be shown, or null if one
48
- * should not currently be rendered.
49
- */
50
- this.alphaSelectorVisible = null;
51
- /**
52
- * Whether the transparent backdrop to catch clicks outside the dropdown menu
53
- * should be rendered.
54
- */
55
- this.dropdownBackdropVisible = false;
56
- /**
57
- * The width of the desktop view sort option container, updated upon each resize.
58
- * Used for dynamically determining whether to use desktop or mobile view.
59
- */
60
- this.desktopSortContainerWidth = 0;
61
- /**
62
- * The width of the full sort bar, updated upon each resize.
63
- * Used for dynamically determining whether to use desktop or mobile view.
64
- */
65
- this.selectorBarContainerWidth = 0;
66
- this.boundSortBarSelectorEscapeListener = (e) => {
67
- if (e.key === 'Escape') {
68
- this.closeDropdowns();
69
- }
70
- };
71
- }
72
- render() {
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 { msg } from '@lit/localize';
5
+ import '@internetarchive/ia-dropdown';
6
+ import { SORT_OPTIONS, SortField, } from '../models';
7
+ import './alpha-bar';
8
+ import { sortUpIcon } from './img/sort-toggle-up';
9
+ import { sortDownIcon } from './img/sort-toggle-down';
10
+ import { sortDisabledIcon } from './img/sort-toggle-disabled';
11
+ import { tileIcon } from './img/tile';
12
+ import { listIcon } from './img/list';
13
+ import { compactIcon } from './img/compact';
14
+ import { srOnlyStyle } from '../styles/sr-only';
15
+ let SortFilterBar = class SortFilterBar extends LitElement {
16
+ constructor() {
17
+ super(...arguments);
18
+ /** The default sort direction to use if none is set */
19
+ this.defaultSortDirection = null;
20
+ /** The default sort field to use if none is set */
21
+ this.defaultSortField = SortField.relevance;
22
+ /** The current sort direction (asc/desc), or null if none is set */
23
+ this.sortDirection = null;
24
+ /** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
25
+ this.selectedSort = SortField.default;
26
+ /** The currently selected title letter filter, or null if none is set */
27
+ this.selectedTitleFilter = null;
28
+ /** The currently selected creator letter filter, or null if none is set */
29
+ this.selectedCreatorFilter = null;
30
+ /** Whether to show the Relevance sort option (default `true`) */
31
+ this.showRelevance = true;
32
+ /** Whether to show the Date Favorited sort option instead of Date Published/Archived/Reviewed (default `false`) */
33
+ this.showDateFavorited = false;
34
+ /** Whether to replace the default sort options with a slot for customization (default `false`) */
35
+ this.enableSortOptionsSlot = false;
36
+ /** Whether to suppress showing the three display mode options on the right of the bar (default `false`) */
37
+ this.suppressDisplayModes = false;
38
+ /**
39
+ * The Views sort option that was most recently selected (or the default, if none has been selected yet)
40
+ */
41
+ this.lastSelectedViewSort = SortField.weeklyview;
42
+ /**
43
+ * The Date sort option that was most recently selected (or the default, if none has been selected yet)
44
+ */
45
+ this.lastSelectedDateSort = this.defaultDateSortField;
46
+ /**
47
+ * Which of the alphabet bars (title/creator) should be shown, or null if one
48
+ * should not currently be rendered.
49
+ */
50
+ this.alphaSelectorVisible = null;
51
+ /**
52
+ * Whether the transparent backdrop to catch clicks outside the dropdown menu
53
+ * should be rendered.
54
+ */
55
+ this.dropdownBackdropVisible = false;
56
+ /**
57
+ * The width of the desktop view sort option container, updated upon each resize.
58
+ * Used for dynamically determining whether to use desktop or mobile view.
59
+ */
60
+ this.desktopSortContainerWidth = 0;
61
+ /**
62
+ * The width of the full sort bar, updated upon each resize.
63
+ * Used for dynamically determining whether to use desktop or mobile view.
64
+ */
65
+ this.selectorBarContainerWidth = 0;
66
+ this.boundSortBarSelectorEscapeListener = (e) => {
67
+ if (e.key === 'Escape') {
68
+ this.closeDropdowns();
69
+ }
70
+ };
71
+ }
72
+ render() {
73
73
  return html `
74
74
  <div id="container">
75
75
  <section id="sort-bar" aria-label="Sorting options">
76
76
  <slot name="sort-options-left"></slot>
77
77
  <div id="sort-options">
78
- ${!this.enableSortOptionsSlot
78
+ ${!this.enableSortOptionsSlot
79
79
  ? html `
80
80
  <div class="sort-direction-container">
81
81
  ${this.sortDirectionSelectorTemplate}
@@ -85,13 +85,13 @@ let SortFilterBar = class SortFilterBar extends LitElement {
85
85
  ${this.mobileSortSelectorTemplate}
86
86
  ${this.desktopSortSelectorTemplate}
87
87
  </div>
88
- `
88
+ `
89
89
  : html `<slot name="sort-options"></slot>`}
90
90
  </div>
91
91
  <slot name="sort-options-right"></slot>
92
92
 
93
- ${this.suppressDisplayModes
94
- ? nothing
93
+ ${this.suppressDisplayModes
94
+ ? nothing
95
95
  : html `<div id="display-style-selector">
96
96
  ${this.displayOptionTemplate}
97
97
  </div>`}
@@ -100,139 +100,139 @@ let SortFilterBar = class SortFilterBar extends LitElement {
100
100
  ${this.dropdownBackdropVisible ? this.dropdownBackdrop : nothing}
101
101
  ${this.alphaBarTemplate}
102
102
  </div>
103
- `;
104
- }
105
- willUpdate(changed) {
106
- if (changed.has('selectedSort') || changed.has('defaultSortField')) {
107
- // If the sort is changed from its default without a direction set,
108
- // we adopt the default sort direction for that sort type.
109
- if (this.selectedSort &&
110
- this.selectedSort !== SortField.default &&
111
- this.sortDirection === null) {
112
- const sortOption = SORT_OPTIONS[this.finalizedSortField];
113
- this.sortDirection = sortOption.defaultSortDirection;
114
- }
115
- if (this.viewOptionSelected) {
116
- this.lastSelectedViewSort = this.finalizedSortField;
117
- }
118
- else if (this.dateOptionSelected) {
119
- this.lastSelectedDateSort = this.finalizedSortField;
120
- }
121
- }
122
- // If we change which dropdown options are available, ensure the correct default becomes selected.
123
- // Currently, Date Favorited is the only dropdown option whose presence/absence can change.
124
- if (changed.has('showDateFavorited') &&
125
- changed.get('showDateFavorited') !== this.showDateFavorited) {
126
- this.lastSelectedDateSort = this.defaultDateSortField;
127
- }
128
- }
129
- updated(changed) {
130
- if (changed.has('displayMode')) {
131
- this.displayModeChanged();
132
- }
133
- if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
134
- this.alphaSelectorVisible = 'title';
135
- }
136
- if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
137
- this.alphaSelectorVisible = 'creator';
138
- }
139
- if (changed.has('dropdownBackdropVisible')) {
140
- this.setupEscapeListeners();
141
- }
142
- if (changed.has('resizeObserver') || changed.has('enableSortOptionsSlot')) {
143
- const oldObserver = changed.get('resizeObserver');
144
- if (oldObserver)
145
- this.disconnectResizeObserver(oldObserver);
146
- this.setupResizeObserver();
147
- }
148
- }
149
- setupEscapeListeners() {
150
- if (this.dropdownBackdropVisible) {
151
- document.addEventListener('keydown', this.boundSortBarSelectorEscapeListener);
152
- }
153
- else {
154
- document.removeEventListener('keydown', this.boundSortBarSelectorEscapeListener);
155
- }
156
- }
157
- connectedCallback() {
158
- var _a;
159
- (_a = super.connectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
160
- this.setupResizeObserver();
161
- }
162
- disconnectedCallback() {
163
- if (this.resizeObserver) {
164
- this.disconnectResizeObserver(this.resizeObserver);
165
- }
166
- }
167
- disconnectResizeObserver(resizeObserver) {
168
- if (this.sortSelectorContainer) {
169
- resizeObserver.removeObserver({
170
- target: this.sortSelectorContainer,
171
- handler: this,
172
- });
173
- }
174
- if (this.desktopSortContainer) {
175
- resizeObserver.removeObserver({
176
- target: this.desktopSortContainer,
177
- handler: this,
178
- });
179
- }
180
- }
181
- setupResizeObserver() {
182
- if (!this.resizeObserver)
183
- return;
184
- if (this.sortSelectorContainer) {
185
- this.resizeObserver.addObserver({
186
- target: this.sortSelectorContainer,
187
- handler: this,
188
- });
189
- }
190
- if (this.desktopSortContainer) {
191
- this.resizeObserver.addObserver({
192
- target: this.desktopSortContainer,
193
- handler: this,
194
- });
195
- }
196
- }
197
- handleResize(entry) {
198
- if (entry.target === this.desktopSortContainer) {
199
- this.desktopSortContainerWidth = entry.contentRect.width;
200
- }
201
- else if (entry.target === this.sortSelectorContainer) {
202
- this.selectorBarContainerWidth = entry.contentRect.width;
203
- }
204
- }
205
- /**
206
- * Whether to show the mobile sort bar because there is not enough space
207
- * for the desktop sort bar.
208
- */
209
- get mobileSelectorVisible() {
210
- return this.selectorBarContainerWidth - 10 < this.desktopSortContainerWidth;
211
- }
212
- /**
213
- * Template to render the alphabet bar, or `nothing` if it should not be rendered
214
- * for the current sort
215
- */
216
- get alphaBarTemplate() {
217
- if (!['title', 'creator'].includes(this.selectedSort))
218
- return nothing;
219
- if (this.alphaSelectorVisible === null) {
220
- if (this.selectedSort === 'creator')
221
- return this.creatorSelectorBar;
222
- if (this.selectedSort === 'title')
223
- return this.titleSelectorBar;
224
- }
225
- else {
226
- return this.alphaSelectorVisible === 'creator'
227
- ? this.creatorSelectorBar
228
- : this.titleSelectorBar;
229
- }
230
- return nothing;
231
- }
232
- /** Template to render the sort direction toggle button */
233
- get sortDirectionSelectorTemplate() {
234
- const oppositeSortDirectionReadable = this.sortDirection === 'asc' ? 'descending' : 'ascending';
235
- const srLabel = `Change to ${oppositeSortDirectionReadable} sort`;
103
+ `;
104
+ }
105
+ willUpdate(changed) {
106
+ if (changed.has('selectedSort') || changed.has('defaultSortField')) {
107
+ // If the sort is changed from its default without a direction set,
108
+ // we adopt the default sort direction for that sort type.
109
+ if (this.selectedSort &&
110
+ this.selectedSort !== SortField.default &&
111
+ this.sortDirection === null) {
112
+ const sortOption = SORT_OPTIONS[this.finalizedSortField];
113
+ this.sortDirection = sortOption.defaultSortDirection;
114
+ }
115
+ if (this.viewOptionSelected) {
116
+ this.lastSelectedViewSort = this.finalizedSortField;
117
+ }
118
+ else if (this.dateOptionSelected) {
119
+ this.lastSelectedDateSort = this.finalizedSortField;
120
+ }
121
+ }
122
+ // If we change which dropdown options are available, ensure the correct default becomes selected.
123
+ // Currently, Date Favorited is the only dropdown option whose presence/absence can change.
124
+ if (changed.has('showDateFavorited') &&
125
+ changed.get('showDateFavorited') !== this.showDateFavorited) {
126
+ this.lastSelectedDateSort = this.defaultDateSortField;
127
+ }
128
+ }
129
+ updated(changed) {
130
+ if (changed.has('displayMode')) {
131
+ this.displayModeChanged();
132
+ }
133
+ if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
134
+ this.alphaSelectorVisible = 'title';
135
+ }
136
+ if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
137
+ this.alphaSelectorVisible = 'creator';
138
+ }
139
+ if (changed.has('dropdownBackdropVisible')) {
140
+ this.setupEscapeListeners();
141
+ }
142
+ if (changed.has('resizeObserver') || changed.has('enableSortOptionsSlot')) {
143
+ const oldObserver = changed.get('resizeObserver');
144
+ if (oldObserver)
145
+ this.disconnectResizeObserver(oldObserver);
146
+ this.setupResizeObserver();
147
+ }
148
+ }
149
+ setupEscapeListeners() {
150
+ if (this.dropdownBackdropVisible) {
151
+ document.addEventListener('keydown', this.boundSortBarSelectorEscapeListener);
152
+ }
153
+ else {
154
+ document.removeEventListener('keydown', this.boundSortBarSelectorEscapeListener);
155
+ }
156
+ }
157
+ connectedCallback() {
158
+ var _a;
159
+ (_a = super.connectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
160
+ this.setupResizeObserver();
161
+ }
162
+ disconnectedCallback() {
163
+ if (this.resizeObserver) {
164
+ this.disconnectResizeObserver(this.resizeObserver);
165
+ }
166
+ }
167
+ disconnectResizeObserver(resizeObserver) {
168
+ if (this.sortSelectorContainer) {
169
+ resizeObserver.removeObserver({
170
+ target: this.sortSelectorContainer,
171
+ handler: this,
172
+ });
173
+ }
174
+ if (this.desktopSortContainer) {
175
+ resizeObserver.removeObserver({
176
+ target: this.desktopSortContainer,
177
+ handler: this,
178
+ });
179
+ }
180
+ }
181
+ setupResizeObserver() {
182
+ if (!this.resizeObserver)
183
+ return;
184
+ if (this.sortSelectorContainer) {
185
+ this.resizeObserver.addObserver({
186
+ target: this.sortSelectorContainer,
187
+ handler: this,
188
+ });
189
+ }
190
+ if (this.desktopSortContainer) {
191
+ this.resizeObserver.addObserver({
192
+ target: this.desktopSortContainer,
193
+ handler: this,
194
+ });
195
+ }
196
+ }
197
+ handleResize(entry) {
198
+ if (entry.target === this.desktopSortContainer) {
199
+ this.desktopSortContainerWidth = entry.contentRect.width;
200
+ }
201
+ else if (entry.target === this.sortSelectorContainer) {
202
+ this.selectorBarContainerWidth = entry.contentRect.width;
203
+ }
204
+ }
205
+ /**
206
+ * Whether to show the mobile sort bar because there is not enough space
207
+ * for the desktop sort bar.
208
+ */
209
+ get mobileSelectorVisible() {
210
+ return this.selectorBarContainerWidth - 10 < this.desktopSortContainerWidth;
211
+ }
212
+ /**
213
+ * Template to render the alphabet bar, or `nothing` if it should not be rendered
214
+ * for the current sort
215
+ */
216
+ get alphaBarTemplate() {
217
+ if (!['title', 'creator'].includes(this.selectedSort))
218
+ return nothing;
219
+ if (this.alphaSelectorVisible === null) {
220
+ if (this.selectedSort === 'creator')
221
+ return this.creatorSelectorBar;
222
+ if (this.selectedSort === 'title')
223
+ return this.titleSelectorBar;
224
+ }
225
+ else {
226
+ return this.alphaSelectorVisible === 'creator'
227
+ ? this.creatorSelectorBar
228
+ : this.titleSelectorBar;
229
+ }
230
+ return nothing;
231
+ }
232
+ /** Template to render the sort direction toggle button */
233
+ get sortDirectionSelectorTemplate() {
234
+ const oppositeSortDirectionReadable = this.sortDirection === 'asc' ? 'descending' : 'ascending';
235
+ const srLabel = `Change to ${oppositeSortDirectionReadable} sort`;
236
236
  return html `
237
237
  <button
238
238
  class="sort-direction-selector"
@@ -242,148 +242,148 @@ let SortFilterBar = class SortFilterBar extends LitElement {
242
242
  <span class="sr-only">${srLabel}</span>
243
243
  ${this.sortDirectionIcon}
244
244
  </button>
245
- `;
246
- }
247
- /** Template to render the sort direction button's icon in the correct current state */
248
- get sortDirectionIcon() {
249
- // Show a fully disabled icon for sort options without direction support
250
- if (!this.canChangeSortDirection) {
251
- return html `<div class="sort-direction-icon">${sortDisabledIcon}</div>`;
252
- }
253
- // For all other sorts, show the ascending/descending direction
245
+ `;
246
+ }
247
+ /** Template to render the sort direction button's icon in the correct current state */
248
+ get sortDirectionIcon() {
249
+ // Show a fully disabled icon for sort options without direction support
250
+ if (!this.canChangeSortDirection) {
251
+ return html `<div class="sort-direction-icon">${sortDisabledIcon}</div>`;
252
+ }
253
+ // For all other sorts, show the ascending/descending direction
254
254
  return html `
255
255
  <div class="sort-direction-icon">
256
256
  ${this.finalizedSortDirection === 'asc' ? sortUpIcon : sortDownIcon}
257
257
  </div>
258
- `;
259
- }
260
- /** The template to render all the sort options in desktop view */
261
- get desktopSortSelectorTemplate() {
258
+ `;
259
+ }
260
+ /** The template to render all the sort options in desktop view */
261
+ get desktopSortSelectorTemplate() {
262
262
  return html `
263
263
  <div
264
264
  id="desktop-sort-container"
265
265
  class=${this.mobileSelectorVisible ? 'hidden' : 'visible'}
266
266
  >
267
267
  <ul id="desktop-sort-selector">
268
- ${this.showRelevance
268
+ ${this.showRelevance
269
269
  ? html `<li>
270
- ${this.getSortDisplayOption(SortField.relevance, {
271
- onClick: () => {
272
- this.dropdownBackdropVisible = false;
273
- if (this.finalizedSortField !== SortField.relevance) {
274
- this.clearAlphaBarFilters();
275
- this.setSelectedSort(SortField.relevance);
276
- }
277
- },
270
+ ${this.getSortDisplayOption(SortField.relevance, {
271
+ onClick: () => {
272
+ this.dropdownBackdropVisible = false;
273
+ if (this.finalizedSortField !== SortField.relevance) {
274
+ this.clearAlphaBarFilters();
275
+ this.setSelectedSort(SortField.relevance);
276
+ }
277
+ },
278
278
  })}
279
- </li>`
279
+ </li>`
280
280
  : nothing}
281
281
  <li>${this.viewsDropdownTemplate}</li>
282
282
  <li>
283
- ${this.getSortDisplayOption(SortField.title, {
284
- onClick: () => {
285
- this.dropdownBackdropVisible = false;
286
- if (this.finalizedSortField !== SortField.title) {
287
- this.alphaSelectorVisible = 'title';
288
- this.selectedCreatorFilter = null;
289
- this.setSelectedSort(SortField.title);
290
- this.emitCreatorLetterChangedEvent();
291
- }
292
- },
283
+ ${this.getSortDisplayOption(SortField.title, {
284
+ onClick: () => {
285
+ this.dropdownBackdropVisible = false;
286
+ if (this.finalizedSortField !== SortField.title) {
287
+ this.alphaSelectorVisible = 'title';
288
+ this.selectedCreatorFilter = null;
289
+ this.setSelectedSort(SortField.title);
290
+ this.emitCreatorLetterChangedEvent();
291
+ }
292
+ },
293
293
  })}
294
294
  </li>
295
295
  <li>${this.dateDropdownTemplate}</li>
296
296
  <li>
297
- ${this.getSortDisplayOption(SortField.creator, {
298
- onClick: () => {
299
- this.dropdownBackdropVisible = false;
300
- if (this.finalizedSortField !== SortField.creator) {
301
- this.alphaSelectorVisible = 'creator';
302
- this.selectedTitleFilter = null;
303
- this.setSelectedSort(SortField.creator);
304
- this.emitTitleLetterChangedEvent();
305
- }
306
- },
297
+ ${this.getSortDisplayOption(SortField.creator, {
298
+ onClick: () => {
299
+ this.dropdownBackdropVisible = false;
300
+ if (this.finalizedSortField !== SortField.creator) {
301
+ this.alphaSelectorVisible = 'creator';
302
+ this.selectedTitleFilter = null;
303
+ this.setSelectedSort(SortField.creator);
304
+ this.emitTitleLetterChangedEvent();
305
+ }
306
+ },
307
307
  })}
308
308
  </li>
309
309
  </ul>
310
310
  </div>
311
- `;
312
- }
313
- /** The template to render all the sort options in mobile view */
314
- get mobileSortSelectorTemplate() {
315
- const displayedOptions = Object.values(SORT_OPTIONS)
316
- .filter(opt => opt.shownInSortBar)
317
- .filter(opt => this.showRelevance || opt.field !== SortField.relevance)
318
- .filter(opt => this.showDateFavorited || opt.field !== SortField.datefavorited);
311
+ `;
312
+ }
313
+ /** The template to render all the sort options in mobile view */
314
+ get mobileSortSelectorTemplate() {
315
+ const displayedOptions = Object.values(SORT_OPTIONS)
316
+ .filter(opt => opt.shownInSortBar)
317
+ .filter(opt => this.showRelevance || opt.field !== SortField.relevance)
318
+ .filter(opt => this.showDateFavorited || opt.field !== SortField.datefavorited);
319
319
  return html `
320
320
  <div
321
321
  id="mobile-sort-container"
322
322
  class=${this.mobileSelectorVisible ? 'visible' : 'hidden'}
323
323
  >
324
- ${this.getSortDropdown({
325
- displayName: html `${SORT_OPTIONS[this.finalizedSortField]
326
- .displayName}`,
327
- id: 'mobile-dropdown',
328
- selected: true,
329
- dropdownOptions: displayedOptions.map(opt => this.getDropdownOption(opt.field)),
330
- selectedOption: this.finalizedSortField,
331
- onOptionSelected: this.mobileSortChanged,
332
- onDropdownClick: () => {
333
- this.dropdownBackdropVisible = this.mobileDropdown.open;
334
- this.mobileDropdown.classList.toggle('open', this.mobileDropdown.open);
335
- },
324
+ ${this.getSortDropdown({
325
+ displayName: html `${SORT_OPTIONS[this.finalizedSortField]
326
+ .displayName}`,
327
+ id: 'mobile-dropdown',
328
+ selected: true,
329
+ dropdownOptions: displayedOptions.map(opt => this.getDropdownOption(opt.field)),
330
+ selectedOption: this.finalizedSortField,
331
+ onOptionSelected: this.mobileSortChanged,
332
+ onDropdownClick: () => {
333
+ this.dropdownBackdropVisible = this.mobileDropdown.open;
334
+ this.mobileDropdown.classList.toggle('open', this.mobileDropdown.open);
335
+ },
336
336
  })}
337
337
  </div>
338
- `;
339
- }
340
- /**
341
- * This generates each of the non-dropdown sort option links.
342
- *
343
- * It manages the display value and the selected state of the option.
344
- *
345
- * @param sortField
346
- * @param options {
347
- * onClick?: (e: Event) => void; If this is provided, it will also be called when the option is clicked.
348
- * displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
349
- * selected?: boolean; true if the option is selected. Defaults to the selectedSort === sortField.
350
- * }
351
- * @returns
352
- */
353
- getSortDisplayOption(sortField, options) {
354
- var _a, _b;
355
- const isSelected = (_a = options === null || options === void 0 ? void 0 : options.selected) !== null && _a !== void 0 ? _a : this.finalizedSortField === sortField;
356
- const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SORT_OPTIONS[sortField].displayName;
338
+ `;
339
+ }
340
+ /**
341
+ * This generates each of the non-dropdown sort option links.
342
+ *
343
+ * It manages the display value and the selected state of the option.
344
+ *
345
+ * @param sortField
346
+ * @param options {
347
+ * onClick?: (e: Event) => void; If this is provided, it will also be called when the option is clicked.
348
+ * displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
349
+ * selected?: boolean; true if the option is selected. Defaults to the selectedSort === sortField.
350
+ * }
351
+ * @returns
352
+ */
353
+ getSortDisplayOption(sortField, options) {
354
+ var _a, _b;
355
+ const isSelected = (_a = options === null || options === void 0 ? void 0 : options.selected) !== null && _a !== void 0 ? _a : this.finalizedSortField === sortField;
356
+ const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SORT_OPTIONS[sortField].displayName;
357
357
  return html `
358
358
  <button
359
359
  class=${isSelected ? 'selected' : nothing}
360
360
  data-title="${displayName}"
361
- @click=${(e) => {
362
- var _a;
363
- e.preventDefault();
364
- (_a = options === null || options === void 0 ? void 0 : options.onClick) === null || _a === void 0 ? void 0 : _a.call(options, e);
361
+ @click=${(e) => {
362
+ var _a;
363
+ e.preventDefault();
364
+ (_a = options === null || options === void 0 ? void 0 : options.onClick) === null || _a === void 0 ? void 0 : _a.call(options, e);
365
365
  }}
366
366
  >
367
367
  ${displayName}
368
368
  </button>
369
- `;
370
- }
371
- /**
372
- * Generates a dropdown component containing multiple grouped sort options.
373
- *
374
- * @param options.displayName The name to use for the dropdown's visible label
375
- * @param options.id The id to apply to the dropdown element
376
- * @param options.dropdownOptions An array of option objects used to populate the dropdown
377
- * @param options.selectedOption The id of the option that should be initially selected
378
- * @param options.selected A boolean indicating whether this dropdown should use its
379
- * selected appearance
380
- * @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
381
- * @param options.onDropdownClick A handler for click events on the dropdown
382
- * @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
383
- * on the dropdown's label
384
- */
385
- getSortDropdown(options) {
386
- var _a, _b, _c, _d, _e;
369
+ `;
370
+ }
371
+ /**
372
+ * Generates a dropdown component containing multiple grouped sort options.
373
+ *
374
+ * @param options.displayName The name to use for the dropdown's visible label
375
+ * @param options.id The id to apply to the dropdown element
376
+ * @param options.dropdownOptions An array of option objects used to populate the dropdown
377
+ * @param options.selectedOption The id of the option that should be initially selected
378
+ * @param options.selected A boolean indicating whether this dropdown should use its
379
+ * selected appearance
380
+ * @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
381
+ * @param options.onDropdownClick A handler for click events on the dropdown
382
+ * @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
383
+ * on the dropdown's label
384
+ */
385
+ getSortDropdown(options) {
386
+ var _a, _b, _c, _d, _e;
387
387
  return html `
388
388
  <ia-dropdown
389
389
  id=${(_a = options.id) !== null && _a !== void 0 ? _a : nothing}
@@ -402,131 +402,133 @@ let SortFilterBar = class SortFilterBar extends LitElement {
402
402
  slot="dropdown-label"
403
403
  data-title="${options.displayName.values}"
404
404
  @click=${(_e = options.onLabelInteraction) !== null && _e !== void 0 ? _e : nothing}
405
- @keydown=${options.onLabelInteraction
406
- ? (e) => {
407
- var _a;
408
- if (e.key === 'Enter' || e.key === ' ') {
409
- (_a = options.onLabelInteraction) === null || _a === void 0 ? void 0 : _a.call(options, e);
410
- }
411
- }
405
+ @keydown=${options.onLabelInteraction
406
+ ? (e) => {
407
+ var _a;
408
+ if (e.key === 'Enter' || e.key === ' ') {
409
+ (_a = options.onLabelInteraction) === null || _a === void 0 ? void 0 : _a.call(options, e);
410
+ }
411
+ }
412
412
  : nothing}
413
413
  >
414
414
  ${options.displayName}
415
415
  </span>
416
416
  </ia-dropdown>
417
- `;
418
- }
419
- /** Generates a single dropdown option object for the given sort field */
420
- getDropdownOption(sortField) {
421
- return {
422
- id: sortField,
423
- selectedHandler: () => {
424
- this.selectDropdownSortField(sortField);
425
- },
417
+ `;
418
+ }
419
+ /** Generates a single dropdown option object for the given sort field */
420
+ getDropdownOption(sortField) {
421
+ return {
422
+ id: sortField,
423
+ selectedHandler: () => {
424
+ this.selectDropdownSortField(sortField);
425
+ },
426
426
  label: html `
427
427
  <span class="dropdown-option-label">
428
428
  ${SORT_OPTIONS[sortField].displayName}
429
429
  </span>
430
- `,
431
- };
432
- }
433
- /** Handler for when any sort dropdown option is selected */
434
- dropdownOptionSelected(e) {
435
- this.dropdownBackdropVisible = false;
436
- this.clearAlphaBarFilters();
437
- const sortField = e.detail.option.id;
438
- this.setSelectedSort(sortField);
439
- if (this.viewOptionSelected) {
440
- this.lastSelectedViewSort = sortField;
441
- }
442
- else if (this.dateOptionSelected) {
443
- this.lastSelectedDateSort = sortField;
444
- }
445
- }
446
- /** The template to render for the views dropdown */
447
- get viewsDropdownTemplate() {
448
- return this.getSortDropdown({
449
- displayName: html `${this.viewSortDisplayName}`,
450
- id: 'views-dropdown',
451
- selected: this.viewOptionSelected,
452
- dropdownOptions: [
453
- this.getDropdownOption(SortField.weeklyview),
454
- this.getDropdownOption(SortField.alltimeview),
455
- ],
456
- selectedOption: this.viewOptionSelected ? this.finalizedSortField : '',
457
- onOptionSelected: this.dropdownOptionSelected,
458
- onDropdownClick: () => {
459
- this.dateDropdown.open = false;
460
- this.dropdownBackdropVisible = this.viewsDropdown.open;
461
- this.viewsDropdown.classList.toggle('open', this.viewsDropdown.open);
462
- },
463
- onLabelInteraction: (e) => {
464
- if (!this.viewsDropdown.open && !this.viewOptionSelected) {
465
- e.stopPropagation();
466
- this.clearAlphaBarFilters();
467
- this.setSelectedSort(this.lastSelectedViewSort);
468
- }
469
- },
470
- });
471
- }
472
- /** The template to render for the date dropdown */
473
- get dateDropdownTemplate() {
474
- return this.getSortDropdown({
475
- displayName: html `${this.dateSortDisplayName}`,
476
- id: 'date-dropdown',
477
- selected: this.dateOptionSelected,
478
- dropdownOptions: [
479
- ...(this.showDateFavorited
480
- ? [this.getDropdownOption(SortField.datefavorited)]
481
- : []),
482
- this.getDropdownOption(SortField.date),
483
- this.getDropdownOption(SortField.datearchived),
484
- this.getDropdownOption(SortField.datereviewed),
485
- this.getDropdownOption(SortField.dateadded),
486
- ],
487
- selectedOption: this.dateOptionSelected ? this.finalizedSortField : '',
488
- onOptionSelected: this.dropdownOptionSelected,
489
- onDropdownClick: () => {
490
- this.viewsDropdown.open = false;
491
- this.dropdownBackdropVisible = this.dateDropdown.open;
492
- this.dateDropdown.classList.toggle('open', this.dateDropdown.open);
493
- },
494
- onLabelInteraction: (e) => {
495
- if (!this.dateDropdown.open && !this.dateOptionSelected) {
496
- e.stopPropagation();
497
- this.clearAlphaBarFilters();
498
- this.setSelectedSort(this.lastSelectedDateSort);
499
- }
500
- },
501
- });
502
- }
503
- /** Handler for when a new mobile sort dropdown option is selected */
504
- mobileSortChanged(e) {
505
- this.dropdownBackdropVisible = false;
506
- const sortField = e.detail.option.id;
507
- this.setSelectedSort(sortField);
508
- this.alphaSelectorVisible = null;
509
- if (sortField !== 'title' && this.selectedTitleFilter) {
510
- this.selectedTitleFilter = null;
511
- this.emitTitleLetterChangedEvent();
512
- }
513
- if (sortField !== 'creator' && this.selectedCreatorFilter) {
514
- this.selectedCreatorFilter = null;
515
- this.emitCreatorLetterChangedEvent();
516
- }
517
- }
518
- /** Template for rendering the three display mode options */
519
- get displayOptionTemplate() {
430
+ `,
431
+ };
432
+ }
433
+ /** Handler for when any sort dropdown option is selected */
434
+ dropdownOptionSelected(e) {
435
+ this.dropdownBackdropVisible = false;
436
+ this.clearAlphaBarFilters();
437
+ const sortField = e.detail.option.id;
438
+ this.setSelectedSort(sortField);
439
+ if (this.viewOptionSelected) {
440
+ this.lastSelectedViewSort = sortField;
441
+ }
442
+ else if (this.dateOptionSelected) {
443
+ this.lastSelectedDateSort = sortField;
444
+ }
445
+ }
446
+ /** The template to render for the views dropdown */
447
+ get viewsDropdownTemplate() {
448
+ return this.getSortDropdown({
449
+ displayName: html `${this.viewSortDisplayName}`,
450
+ id: 'views-dropdown',
451
+ selected: this.viewOptionSelected,
452
+ dropdownOptions: [
453
+ this.getDropdownOption(SortField.weeklyview),
454
+ this.getDropdownOption(SortField.alltimeview),
455
+ ],
456
+ selectedOption: this.viewOptionSelected ? this.finalizedSortField : '',
457
+ onOptionSelected: this.dropdownOptionSelected,
458
+ onDropdownClick: () => {
459
+ this.dateDropdown.open = false;
460
+ this.dropdownBackdropVisible = this.viewsDropdown.open;
461
+ this.viewsDropdown.classList.toggle('open', this.viewsDropdown.open);
462
+ },
463
+ onLabelInteraction: (e) => {
464
+ if (!this.viewsDropdown.open && !this.viewOptionSelected) {
465
+ e.stopPropagation();
466
+ this.clearAlphaBarFilters();
467
+ this.setSelectedSort(this.lastSelectedViewSort);
468
+ }
469
+ },
470
+ });
471
+ }
472
+ /** The template to render for the date dropdown */
473
+ get dateDropdownTemplate() {
474
+ return this.getSortDropdown({
475
+ displayName: html `${this.dateSortDisplayName}`,
476
+ id: 'date-dropdown',
477
+ selected: this.dateOptionSelected,
478
+ dropdownOptions: [
479
+ ...(this.showDateFavorited
480
+ ? [this.getDropdownOption(SortField.datefavorited)]
481
+ : []),
482
+ this.getDropdownOption(SortField.date),
483
+ this.getDropdownOption(SortField.datearchived),
484
+ this.getDropdownOption(SortField.datereviewed),
485
+ this.getDropdownOption(SortField.dateadded),
486
+ ],
487
+ selectedOption: this.dateOptionSelected ? this.finalizedSortField : '',
488
+ onOptionSelected: this.dropdownOptionSelected,
489
+ onDropdownClick: () => {
490
+ this.viewsDropdown.open = false;
491
+ this.dropdownBackdropVisible = this.dateDropdown.open;
492
+ this.dateDropdown.classList.toggle('open', this.dateDropdown.open);
493
+ },
494
+ onLabelInteraction: (e) => {
495
+ if (!this.dateDropdown.open && !this.dateOptionSelected) {
496
+ e.stopPropagation();
497
+ this.clearAlphaBarFilters();
498
+ this.setSelectedSort(this.lastSelectedDateSort);
499
+ }
500
+ },
501
+ });
502
+ }
503
+ /** Handler for when a new mobile sort dropdown option is selected */
504
+ mobileSortChanged(e) {
505
+ this.dropdownBackdropVisible = false;
506
+ const sortField = e.detail.option.id;
507
+ this.setSelectedSort(sortField);
508
+ this.alphaSelectorVisible = null;
509
+ if (sortField !== 'title' && this.selectedTitleFilter) {
510
+ this.selectedTitleFilter = null;
511
+ this.emitTitleLetterChangedEvent();
512
+ }
513
+ if (sortField !== 'creator' && this.selectedCreatorFilter) {
514
+ this.selectedCreatorFilter = null;
515
+ this.emitCreatorLetterChangedEvent();
516
+ }
517
+ }
518
+ /** Template for rendering the three display mode options */
519
+ /** Added data-testid for Playwright testing * */
520
+ get displayOptionTemplate() {
520
521
  return html `
521
522
  <ul>
522
523
  <li>
523
524
  <button
524
525
  id="grid-button"
525
- @click=${() => {
526
- this.displayMode = 'grid';
526
+ @click=${() => {
527
+ this.displayMode = 'grid';
527
528
  }}
528
529
  class=${this.displayMode === 'grid' ? 'active' : ''}
529
530
  title="Tile view"
531
+ data-testid="grid-button"
530
532
  >
531
533
  ${tileIcon}
532
534
  </button>
@@ -534,11 +536,12 @@ let SortFilterBar = class SortFilterBar extends LitElement {
534
536
  <li>
535
537
  <button
536
538
  id="list-detail-button"
537
- @click=${() => {
538
- this.displayMode = 'list-detail';
539
+ @click=${() => {
540
+ this.displayMode = 'list-detail';
539
541
  }}
540
542
  class=${this.displayMode === 'list-detail' ? 'active' : ''}
541
543
  title="List view"
544
+ data-testid="list-detail-button"
542
545
  >
543
546
  ${listIcon}
544
547
  </button>
@@ -546,223 +549,224 @@ let SortFilterBar = class SortFilterBar extends LitElement {
546
549
  <li>
547
550
  <button
548
551
  id="list-compact-button"
549
- @click=${() => {
550
- this.displayMode = 'list-compact';
552
+ @click=${() => {
553
+ this.displayMode = 'list-compact';
551
554
  }}
552
555
  class=${this.displayMode === 'list-compact' ? 'active' : ''}
553
556
  title="Compact list view"
557
+ data-testid="list-compact-button"
554
558
  >
555
559
  ${compactIcon}
556
560
  </button>
557
561
  </li>
558
562
  </ul>
559
- `;
560
- }
561
- /**
562
- * Template for rendering the transparent backdrop to capture clicks outside the
563
- * dropdown menu while it is open.
564
- */
565
- get dropdownBackdrop() {
563
+ `;
564
+ }
565
+ /**
566
+ * Template for rendering the transparent backdrop to capture clicks outside the
567
+ * dropdown menu while it is open.
568
+ */
569
+ get dropdownBackdrop() {
566
570
  return html `
567
571
  <div
568
572
  id="sort-selector-backdrop"
569
573
  @keyup=${this.closeDropdowns}
570
574
  @click=${this.closeDropdowns}
571
575
  ></div>
572
- `;
573
- }
574
- /** Closes all of the sorting dropdown components' menus */
575
- closeDropdowns() {
576
- this.dropdownBackdropVisible = false;
577
- const allDropdowns = [
578
- this.viewsDropdown,
579
- this.dateDropdown,
580
- this.mobileDropdown,
581
- ];
582
- for (const dropdown of allDropdowns) {
583
- dropdown.open = false;
584
- dropdown.classList.remove('open');
585
- }
586
- }
587
- selectDropdownSortField(sortField) {
588
- // When a dropdown sort option is selected, we additionally need to clear the backdrop
589
- this.dropdownBackdropVisible = false;
590
- this.setSelectedSort(sortField);
591
- }
592
- clearAlphaBarFilters() {
593
- this.alphaSelectorVisible = null;
594
- this.selectedTitleFilter = null;
595
- this.selectedCreatorFilter = null;
596
- this.emitTitleLetterChangedEvent();
597
- this.emitCreatorLetterChangedEvent();
598
- }
599
- setSortDirection(sortDirection) {
600
- this.sortDirection = sortDirection;
601
- this.emitSortChangedEvent();
602
- }
603
- /** Toggles the current sort direction between 'asc' and 'desc' */
604
- toggleSortDirection() {
605
- this.setSortDirection(this.finalizedSortDirection === 'desc' ? 'asc' : 'desc');
606
- }
607
- handleSortDirectionClicked() {
608
- if (!this.sortDirection &&
609
- this.defaultSortField &&
610
- this.defaultSortDirection) {
611
- // When the sort direction is merely defaulted (not set by the user), clicking
612
- // the toggled button should "promote" the default sort to an explicitly-set one
613
- // and then toggle it as usual.
614
- this.selectedSort = this.defaultSortField;
615
- this.sortDirection = this.defaultSortDirection;
616
- }
617
- this.toggleSortDirection();
618
- }
619
- setSelectedSort(sort) {
620
- this.selectedSort = sort;
621
- // Apply this field's default sort direction
622
- const sortOption = SORT_OPTIONS[sort];
623
- this.sortDirection = sortOption.defaultSortDirection;
624
- this.emitSortChangedEvent();
625
- }
626
- /** The current sort field, or the default one if no explicit sort is set */
627
- get finalizedSortField() {
628
- return this.selectedSort === SortField.default
629
- ? this.defaultSortField
630
- : this.selectedSort;
631
- }
632
- /** The current sort direction, or the default one if no explicit direction is set */
633
- get finalizedSortDirection() {
634
- return this.sortDirection === null
635
- ? this.defaultSortDirection
636
- : this.sortDirection;
637
- }
638
- /** Whether the sort direction button should be enabled for the current sort */
639
- get canChangeSortDirection() {
640
- return SORT_OPTIONS[this.finalizedSortField].canSetDirection;
641
- }
642
- /**
643
- * There are four date sort options.
644
- *
645
- * This checks to see if the current sort is one of them.
646
- *
647
- * @readonly
648
- * @private
649
- * @type {boolean}
650
- * @memberof SortFilterBar
651
- */
652
- get dateOptionSelected() {
653
- const dateSortFields = [
654
- SortField.datefavorited,
655
- SortField.datearchived,
656
- SortField.date,
657
- SortField.datereviewed,
658
- SortField.dateadded,
659
- ];
660
- return dateSortFields.includes(this.finalizedSortField);
661
- }
662
- /**
663
- * There are two view sort options.
664
- *
665
- * This checks to see if the current sort is one of them.
666
- *
667
- * @readonly
668
- * @private
669
- * @type {boolean}
670
- * @memberof SortFilterBar
671
- */
672
- get viewOptionSelected() {
673
- const viewSortFields = [
674
- SortField.alltimeview,
675
- SortField.weeklyview,
676
- ];
677
- return viewSortFields.includes(this.finalizedSortField);
678
- }
679
- /**
680
- * The default field for the date sort dropdown.
681
- * This is Date Favorited when that option is available, or Date Published otherwise.
682
- */
683
- get defaultDateSortField() {
684
- return this.showDateFavorited ? SortField.datefavorited : SortField.date;
685
- }
686
- /**
687
- * The display name of the last selected date field
688
- *
689
- * @readonly
690
- * @private
691
- * @type {string}
692
- * @memberof SortFilterBar
693
- */
694
- get dateSortDisplayName() {
695
- return SORT_OPTIONS[this.lastSelectedDateSort].displayName;
696
- }
697
- /**
698
- * The display name of the last selected view field
699
- *
700
- * @readonly
701
- * @private
702
- * @type {string}
703
- * @memberof SortFilterBar
704
- */
705
- get viewSortDisplayName() {
706
- return SORT_OPTIONS[this.lastSelectedViewSort].displayName;
707
- }
708
- get titleSelectorBar() {
709
- var _a;
576
+ `;
577
+ }
578
+ /** Closes all of the sorting dropdown components' menus */
579
+ closeDropdowns() {
580
+ this.dropdownBackdropVisible = false;
581
+ const allDropdowns = [
582
+ this.viewsDropdown,
583
+ this.dateDropdown,
584
+ this.mobileDropdown,
585
+ ];
586
+ for (const dropdown of allDropdowns) {
587
+ dropdown.open = false;
588
+ dropdown.classList.remove('open');
589
+ }
590
+ }
591
+ selectDropdownSortField(sortField) {
592
+ // When a dropdown sort option is selected, we additionally need to clear the backdrop
593
+ this.dropdownBackdropVisible = false;
594
+ this.setSelectedSort(sortField);
595
+ }
596
+ clearAlphaBarFilters() {
597
+ this.alphaSelectorVisible = null;
598
+ this.selectedTitleFilter = null;
599
+ this.selectedCreatorFilter = null;
600
+ this.emitTitleLetterChangedEvent();
601
+ this.emitCreatorLetterChangedEvent();
602
+ }
603
+ setSortDirection(sortDirection) {
604
+ this.sortDirection = sortDirection;
605
+ this.emitSortChangedEvent();
606
+ }
607
+ /** Toggles the current sort direction between 'asc' and 'desc' */
608
+ toggleSortDirection() {
609
+ this.setSortDirection(this.finalizedSortDirection === 'desc' ? 'asc' : 'desc');
610
+ }
611
+ handleSortDirectionClicked() {
612
+ if (!this.sortDirection &&
613
+ this.defaultSortField &&
614
+ this.defaultSortDirection) {
615
+ // When the sort direction is merely defaulted (not set by the user), clicking
616
+ // the toggled button should "promote" the default sort to an explicitly-set one
617
+ // and then toggle it as usual.
618
+ this.selectedSort = this.defaultSortField;
619
+ this.sortDirection = this.defaultSortDirection;
620
+ }
621
+ this.toggleSortDirection();
622
+ }
623
+ setSelectedSort(sort) {
624
+ this.selectedSort = sort;
625
+ // Apply this field's default sort direction
626
+ const sortOption = SORT_OPTIONS[sort];
627
+ this.sortDirection = sortOption.defaultSortDirection;
628
+ this.emitSortChangedEvent();
629
+ }
630
+ /** The current sort field, or the default one if no explicit sort is set */
631
+ get finalizedSortField() {
632
+ return this.selectedSort === SortField.default
633
+ ? this.defaultSortField
634
+ : this.selectedSort;
635
+ }
636
+ /** The current sort direction, or the default one if no explicit direction is set */
637
+ get finalizedSortDirection() {
638
+ return this.sortDirection === null
639
+ ? this.defaultSortDirection
640
+ : this.sortDirection;
641
+ }
642
+ /** Whether the sort direction button should be enabled for the current sort */
643
+ get canChangeSortDirection() {
644
+ return SORT_OPTIONS[this.finalizedSortField].canSetDirection;
645
+ }
646
+ /**
647
+ * There are four date sort options.
648
+ *
649
+ * This checks to see if the current sort is one of them.
650
+ *
651
+ * @readonly
652
+ * @private
653
+ * @type {boolean}
654
+ * @memberof SortFilterBar
655
+ */
656
+ get dateOptionSelected() {
657
+ const dateSortFields = [
658
+ SortField.datefavorited,
659
+ SortField.datearchived,
660
+ SortField.date,
661
+ SortField.datereviewed,
662
+ SortField.dateadded,
663
+ ];
664
+ return dateSortFields.includes(this.finalizedSortField);
665
+ }
666
+ /**
667
+ * There are two view sort options.
668
+ *
669
+ * This checks to see if the current sort is one of them.
670
+ *
671
+ * @readonly
672
+ * @private
673
+ * @type {boolean}
674
+ * @memberof SortFilterBar
675
+ */
676
+ get viewOptionSelected() {
677
+ const viewSortFields = [
678
+ SortField.alltimeview,
679
+ SortField.weeklyview,
680
+ ];
681
+ return viewSortFields.includes(this.finalizedSortField);
682
+ }
683
+ /**
684
+ * The default field for the date sort dropdown.
685
+ * This is Date Favorited when that option is available, or Date Published otherwise.
686
+ */
687
+ get defaultDateSortField() {
688
+ return this.showDateFavorited ? SortField.datefavorited : SortField.date;
689
+ }
690
+ /**
691
+ * The display name of the last selected date field
692
+ *
693
+ * @readonly
694
+ * @private
695
+ * @type {string}
696
+ * @memberof SortFilterBar
697
+ */
698
+ get dateSortDisplayName() {
699
+ return SORT_OPTIONS[this.lastSelectedDateSort].displayName;
700
+ }
701
+ /**
702
+ * The display name of the last selected view field
703
+ *
704
+ * @readonly
705
+ * @private
706
+ * @type {string}
707
+ * @memberof SortFilterBar
708
+ */
709
+ get viewSortDisplayName() {
710
+ return SORT_OPTIONS[this.lastSelectedViewSort].displayName;
711
+ }
712
+ get titleSelectorBar() {
713
+ var _a;
710
714
  return html ` <alpha-bar
711
715
  .selectedLetter=${this.selectedTitleFilter}
712
716
  .letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.title}
713
717
  ariaLandmarkLabel="Filter by title letter"
714
718
  @letterChanged=${this.titleLetterChanged}
715
- ></alpha-bar>`;
716
- }
717
- get creatorSelectorBar() {
718
- var _a;
719
+ ></alpha-bar>`;
720
+ }
721
+ get creatorSelectorBar() {
722
+ var _a;
719
723
  return html ` <alpha-bar
720
724
  .selectedLetter=${this.selectedCreatorFilter}
721
725
  .letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.creator}
722
726
  ariaLandmarkLabel="Filter by creator letter"
723
727
  @letterChanged=${this.creatorLetterChanged}
724
- ></alpha-bar>`;
725
- }
726
- titleLetterChanged(e) {
727
- var _a;
728
- this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
729
- this.emitTitleLetterChangedEvent();
730
- }
731
- creatorLetterChanged(e) {
732
- var _a;
733
- this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
734
- this.emitCreatorLetterChangedEvent();
735
- }
736
- emitTitleLetterChangedEvent() {
737
- const event = new CustomEvent('titleLetterChanged', {
738
- detail: { selectedLetter: this.selectedTitleFilter },
739
- });
740
- this.dispatchEvent(event);
741
- }
742
- emitCreatorLetterChangedEvent() {
743
- const event = new CustomEvent('creatorLetterChanged', {
744
- detail: { selectedLetter: this.selectedCreatorFilter },
745
- });
746
- this.dispatchEvent(event);
747
- }
748
- displayModeChanged() {
749
- const event = new CustomEvent('displayModeChanged', {
750
- detail: { displayMode: this.displayMode },
751
- });
752
- this.dispatchEvent(event);
753
- }
754
- emitSortChangedEvent() {
755
- const event = new CustomEvent('sortChanged', {
756
- detail: {
757
- selectedSort: this.selectedSort,
758
- sortDirection: this.sortDirection,
759
- },
760
- });
761
- this.dispatchEvent(event);
762
- }
763
- static get styles() {
764
- return [
765
- srOnlyStyle,
728
+ ></alpha-bar>`;
729
+ }
730
+ titleLetterChanged(e) {
731
+ var _a;
732
+ this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
733
+ this.emitTitleLetterChangedEvent();
734
+ }
735
+ creatorLetterChanged(e) {
736
+ var _a;
737
+ this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
738
+ this.emitCreatorLetterChangedEvent();
739
+ }
740
+ emitTitleLetterChangedEvent() {
741
+ const event = new CustomEvent('titleLetterChanged', {
742
+ detail: { selectedLetter: this.selectedTitleFilter },
743
+ });
744
+ this.dispatchEvent(event);
745
+ }
746
+ emitCreatorLetterChangedEvent() {
747
+ const event = new CustomEvent('creatorLetterChanged', {
748
+ detail: { selectedLetter: this.selectedCreatorFilter },
749
+ });
750
+ this.dispatchEvent(event);
751
+ }
752
+ displayModeChanged() {
753
+ const event = new CustomEvent('displayModeChanged', {
754
+ detail: { displayMode: this.displayMode },
755
+ });
756
+ this.dispatchEvent(event);
757
+ }
758
+ emitSortChangedEvent() {
759
+ const event = new CustomEvent('sortChanged', {
760
+ detail: {
761
+ selectedSort: this.selectedSort,
762
+ sortDirection: this.sortDirection,
763
+ },
764
+ });
765
+ this.dispatchEvent(event);
766
+ }
767
+ static get styles() {
768
+ return [
769
+ srOnlyStyle,
766
770
  css `
767
771
  #container {
768
772
  position: relative;
@@ -993,84 +997,84 @@ let SortFilterBar = class SortFilterBar extends LitElement {
993
997
  white-space: nowrap;
994
998
  user-select: none;
995
999
  }
996
- `,
997
- ];
998
- }
999
- };
1000
- __decorate([
1001
- property({ type: String })
1002
- ], SortFilterBar.prototype, "displayMode", void 0);
1003
- __decorate([
1004
- property({ type: String })
1005
- ], SortFilterBar.prototype, "defaultSortDirection", void 0);
1006
- __decorate([
1007
- property({ type: String })
1008
- ], SortFilterBar.prototype, "defaultSortField", void 0);
1009
- __decorate([
1010
- property({ type: String })
1011
- ], SortFilterBar.prototype, "sortDirection", void 0);
1012
- __decorate([
1013
- property({ type: String })
1014
- ], SortFilterBar.prototype, "selectedSort", void 0);
1015
- __decorate([
1016
- property({ type: String })
1017
- ], SortFilterBar.prototype, "selectedTitleFilter", void 0);
1018
- __decorate([
1019
- property({ type: String })
1020
- ], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
1021
- __decorate([
1022
- property({ type: Boolean })
1023
- ], SortFilterBar.prototype, "showRelevance", void 0);
1024
- __decorate([
1025
- property({ type: Boolean })
1026
- ], SortFilterBar.prototype, "showDateFavorited", void 0);
1027
- __decorate([
1028
- property({ type: Boolean, reflect: true })
1029
- ], SortFilterBar.prototype, "enableSortOptionsSlot", void 0);
1030
- __decorate([
1031
- property({ type: Boolean, reflect: true })
1032
- ], SortFilterBar.prototype, "suppressDisplayModes", void 0);
1033
- __decorate([
1034
- property({ type: Object })
1035
- ], SortFilterBar.prototype, "prefixFilterCountMap", void 0);
1036
- __decorate([
1037
- property({ type: Object })
1038
- ], SortFilterBar.prototype, "resizeObserver", void 0);
1039
- __decorate([
1040
- state()
1041
- ], SortFilterBar.prototype, "lastSelectedViewSort", void 0);
1042
- __decorate([
1043
- state()
1044
- ], SortFilterBar.prototype, "lastSelectedDateSort", void 0);
1045
- __decorate([
1046
- state()
1047
- ], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
1048
- __decorate([
1049
- state()
1050
- ], SortFilterBar.prototype, "dropdownBackdropVisible", void 0);
1051
- __decorate([
1052
- state()
1053
- ], SortFilterBar.prototype, "desktopSortContainerWidth", void 0);
1054
- __decorate([
1055
- state()
1056
- ], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
1057
- __decorate([
1058
- query('#desktop-sort-container')
1059
- ], SortFilterBar.prototype, "desktopSortContainer", void 0);
1060
- __decorate([
1061
- query('#sort-selector-container')
1062
- ], SortFilterBar.prototype, "sortSelectorContainer", void 0);
1063
- __decorate([
1064
- query('#views-dropdown')
1065
- ], SortFilterBar.prototype, "viewsDropdown", void 0);
1066
- __decorate([
1067
- query('#date-dropdown')
1068
- ], SortFilterBar.prototype, "dateDropdown", void 0);
1069
- __decorate([
1070
- query('#mobile-dropdown')
1071
- ], SortFilterBar.prototype, "mobileDropdown", void 0);
1072
- SortFilterBar = __decorate([
1073
- customElement('sort-filter-bar')
1074
- ], SortFilterBar);
1075
- export { SortFilterBar };
1000
+ `,
1001
+ ];
1002
+ }
1003
+ };
1004
+ __decorate([
1005
+ property({ type: String })
1006
+ ], SortFilterBar.prototype, "displayMode", void 0);
1007
+ __decorate([
1008
+ property({ type: String })
1009
+ ], SortFilterBar.prototype, "defaultSortDirection", void 0);
1010
+ __decorate([
1011
+ property({ type: String })
1012
+ ], SortFilterBar.prototype, "defaultSortField", void 0);
1013
+ __decorate([
1014
+ property({ type: String })
1015
+ ], SortFilterBar.prototype, "sortDirection", void 0);
1016
+ __decorate([
1017
+ property({ type: String })
1018
+ ], SortFilterBar.prototype, "selectedSort", void 0);
1019
+ __decorate([
1020
+ property({ type: String })
1021
+ ], SortFilterBar.prototype, "selectedTitleFilter", void 0);
1022
+ __decorate([
1023
+ property({ type: String })
1024
+ ], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
1025
+ __decorate([
1026
+ property({ type: Boolean })
1027
+ ], SortFilterBar.prototype, "showRelevance", void 0);
1028
+ __decorate([
1029
+ property({ type: Boolean })
1030
+ ], SortFilterBar.prototype, "showDateFavorited", void 0);
1031
+ __decorate([
1032
+ property({ type: Boolean, reflect: true })
1033
+ ], SortFilterBar.prototype, "enableSortOptionsSlot", void 0);
1034
+ __decorate([
1035
+ property({ type: Boolean, reflect: true })
1036
+ ], SortFilterBar.prototype, "suppressDisplayModes", void 0);
1037
+ __decorate([
1038
+ property({ type: Object })
1039
+ ], SortFilterBar.prototype, "prefixFilterCountMap", void 0);
1040
+ __decorate([
1041
+ property({ type: Object })
1042
+ ], SortFilterBar.prototype, "resizeObserver", void 0);
1043
+ __decorate([
1044
+ state()
1045
+ ], SortFilterBar.prototype, "lastSelectedViewSort", void 0);
1046
+ __decorate([
1047
+ state()
1048
+ ], SortFilterBar.prototype, "lastSelectedDateSort", void 0);
1049
+ __decorate([
1050
+ state()
1051
+ ], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
1052
+ __decorate([
1053
+ state()
1054
+ ], SortFilterBar.prototype, "dropdownBackdropVisible", void 0);
1055
+ __decorate([
1056
+ state()
1057
+ ], SortFilterBar.prototype, "desktopSortContainerWidth", void 0);
1058
+ __decorate([
1059
+ state()
1060
+ ], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
1061
+ __decorate([
1062
+ query('#desktop-sort-container')
1063
+ ], SortFilterBar.prototype, "desktopSortContainer", void 0);
1064
+ __decorate([
1065
+ query('#sort-selector-container')
1066
+ ], SortFilterBar.prototype, "sortSelectorContainer", void 0);
1067
+ __decorate([
1068
+ query('#views-dropdown')
1069
+ ], SortFilterBar.prototype, "viewsDropdown", void 0);
1070
+ __decorate([
1071
+ query('#date-dropdown')
1072
+ ], SortFilterBar.prototype, "dateDropdown", void 0);
1073
+ __decorate([
1074
+ query('#mobile-dropdown')
1075
+ ], SortFilterBar.prototype, "mobileDropdown", void 0);
1076
+ SortFilterBar = __decorate([
1077
+ customElement('sort-filter-bar')
1078
+ ], SortFilterBar);
1079
+ export { SortFilterBar };
1076
1080
  //# sourceMappingURL=sort-filter-bar.js.map