@internetarchive/collection-browser 4.7.0 → 4.7.1-alpha-webdev9189.0

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 (391) hide show
  1. package/.husky/pre-commit +0 -0
  2. package/dist/src/collection-browser.js +24 -2
  3. package/dist/src/collection-browser.js.map +1 -1
  4. package/dist/src/sort-filter-bar/sort-filter-bar.js +1 -0
  5. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  6. package/dist/test/collection-browser.test.js +34 -0
  7. package/dist/test/collection-browser.test.js.map +1 -1
  8. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +22 -0
  9. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  10. package/package.json +18 -16
  11. package/src/collection-browser.ts +26 -4
  12. package/src/sort-filter-bar/sort-filter-bar.ts +1 -0
  13. package/test/collection-browser.test.ts +55 -0
  14. package/test/sort-filter-bar/sort-filter-bar.test.ts +29 -0
  15. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.editorconfig +0 -29
  16. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.github/workflows/ci.yml +0 -27
  17. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.github/workflows/gh-pages-main.yml +0 -39
  18. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.github/workflows/npm-publish.yml +0 -39
  19. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.github/workflows/pr-preview.yml +0 -38
  20. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.husky/pre-commit +0 -1
  21. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/.prettierignore +0 -1
  22. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/LICENSE +0 -661
  23. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/README.md +0 -84
  24. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/eslint.config.mjs +0 -53
  25. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/index.html +0 -24
  26. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/index.ts +0 -29
  27. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/local.archive.org.cert +0 -86
  28. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/local.archive.org.key +0 -27
  29. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/package.json +0 -120
  30. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/renovate.json +0 -6
  31. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/app-root.ts +0 -1284
  32. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/arrow-left.ts +0 -10
  33. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/arrow-right.ts +0 -10
  34. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/chevron.ts +0 -4
  35. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/close-circle-dark.ts +0 -5
  36. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/contract.ts +0 -9
  37. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/empty-query.ts +0 -5
  38. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/expand.ts +0 -9
  39. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/eye-closed.ts +0 -5
  40. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/eye.ts +0 -5
  41. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/favorite-filled.ts +0 -10
  42. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/favorite-unfilled.ts +0 -9
  43. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/filter.ts +0 -10
  44. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/login-required.ts +0 -18
  45. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/account.ts +0 -14
  46. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/audio.ts +0 -14
  47. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/collection.ts +0 -12
  48. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/data.ts +0 -15
  49. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/etree.ts +0 -14
  50. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/film.ts +0 -14
  51. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/images.ts +0 -13
  52. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/radio.ts +0 -15
  53. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/search.ts +0 -14
  54. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/software.ts +0 -13
  55. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/texts.ts +0 -13
  56. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/tv-commercial.ts +0 -12
  57. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/tv-fact-check.ts +0 -12
  58. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/tv-quote.ts +0 -12
  59. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/tv.ts +0 -14
  60. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/video.ts +0 -14
  61. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/mediatype/web.ts +0 -13
  62. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/null-result.ts +0 -5
  63. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/quote.ts +0 -7
  64. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/restricted.ts +0 -13
  65. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/reviews.ts +0 -11
  66. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/upload.ts +0 -12
  67. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/assets/img/icons/views.ts +0 -11
  68. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/circular-activity-indicator.ts +0 -64
  69. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-browser.ts +0 -3165
  70. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/facet-row.ts +0 -309
  71. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/facet-tombstone-row.ts +0 -40
  72. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/facets-template.ts +0 -85
  73. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/models.ts +0 -10
  74. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/more-facets-content.ts +0 -644
  75. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/more-facets-pagination.ts +0 -294
  76. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/dedupe.ts +0 -44
  77. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.ts +0 -27
  78. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/index.ts +0 -3
  79. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.ts +0 -17
  80. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.ts +0 -70
  81. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.ts +0 -79
  82. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.ts +0 -93
  83. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/models.ts +0 -36
  84. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/smart-facet-bar.ts +0 -437
  85. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/smart-facet-button.ts +0 -145
  86. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/smart-facet-dropdown.ts +0 -185
  87. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/smart-facet-equals.ts +0 -16
  88. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/smart-facets/smart-facet-heuristics.ts +0 -26
  89. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets/toggle-switch.ts +0 -174
  90. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/collection-facets.ts +0 -1013
  91. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/data-source/collection-browser-data-source-interface.ts +0 -351
  92. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/data-source/collection-browser-data-source.ts +0 -1474
  93. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/data-source/collection-browser-query-state.ts +0 -60
  94. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/data-source/models.ts +0 -56
  95. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/empty-placeholder.ts +0 -192
  96. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/expanded-date-picker.ts +0 -191
  97. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/language-code-handler/language-code-handler.ts +0 -64
  98. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/language-code-handler/language-code-mapping.ts +0 -564
  99. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/manage/manage-bar.ts +0 -276
  100. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/manage/remove-items-modal-content.ts +0 -102
  101. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/mediatype/mediatype-config.ts +0 -146
  102. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/models.ts +0 -895
  103. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/restoration-state-handler.ts +0 -550
  104. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/alpha-bar-tooltip.ts +0 -53
  105. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/alpha-bar.ts +0 -252
  106. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/compact.ts +0 -5
  107. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/list.ts +0 -5
  108. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/sort-toggle-disabled.ts +0 -15
  109. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/sort-toggle-down.ts +0 -17
  110. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/sort-toggle-up.ts +0 -17
  111. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/sort-triangle.ts +0 -5
  112. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/img/tile.ts +0 -5
  113. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/sort-filter-bar/sort-filter-bar.ts +0 -733
  114. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/styles/ia-button.ts +0 -139
  115. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/styles/item-image-styles.ts +0 -124
  116. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/styles/sr-only.ts +0 -18
  117. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/styles/tile-action-styles.ts +0 -59
  118. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/base-tile-component.ts +0 -124
  119. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/collection-browser-loading-tile.ts +0 -26
  120. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/account-tile.ts +0 -113
  121. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/collection-tile.ts +0 -184
  122. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/item-tile.ts +0 -347
  123. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/search-tile.ts +0 -90
  124. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/styles/tile-grid-shared-styles.ts +0 -130
  125. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/grid/tile-stats.ts +0 -211
  126. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/hover/hover-pane-controller.ts +0 -638
  127. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/hover/tile-hover-pane.ts +0 -184
  128. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/image-block.ts +0 -162
  129. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/item-image.ts +0 -214
  130. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/list/tile-list-compact-header.ts +0 -112
  131. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/list/tile-list-compact.ts +0 -278
  132. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/list/tile-list.ts +0 -718
  133. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/models.ts +0 -21
  134. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/overlay/icon-overlay.ts +0 -57
  135. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/overlay/text-overlay.ts +0 -79
  136. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/review-block.ts +0 -130
  137. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/text-snippet-block.ts +0 -132
  138. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/tile-dispatcher.ts +0 -637
  139. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/tile-display-value-provider.ts +0 -133
  140. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/tiles/tile-mediatype-icon.ts +0 -133
  141. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/analytics-events.ts +0 -29
  142. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/array-equals.ts +0 -8
  143. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/collapse-repeated-quotes.ts +0 -13
  144. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/date-filter-field.ts +0 -11
  145. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/facet-utils.ts +0 -183
  146. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/format-count.ts +0 -95
  147. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/format-date.ts +0 -62
  148. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/format-unit-size.ts +0 -43
  149. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/local-date-from-utc.ts +0 -15
  150. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/log.ts +0 -14
  151. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/resolve-mediatype.ts +0 -26
  152. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/src/utils/sha1.ts +0 -9
  153. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-browser.test.ts +0 -2639
  154. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets/facet-row.test.ts +0 -421
  155. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets/facets-template.test.ts +0 -139
  156. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets/more-facets-content.test.ts +0 -231
  157. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets/more-facets-pagination.test.ts +0 -201
  158. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets/toggle-switch.test.ts +0 -164
  159. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/collection-facets.test.ts +0 -928
  160. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/data-source/collection-browser-data-source.test.ts +0 -193
  161. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/empty-placeholder.test.ts +0 -88
  162. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/expanded-date-picker.test.ts +0 -201
  163. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/icon-overlay.test.ts +0 -38
  164. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/image-block.test.ts +0 -247
  165. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/item-image.test.ts +0 -220
  166. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/manage/manage-bar.test.ts +0 -347
  167. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/manage/remove-items-modal-content.test.ts +0 -81
  168. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/mediatype-config.test.ts +0 -11
  169. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/mocks/mock-analytics-handler.ts +0 -30
  170. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/mocks/mock-search-responses.ts +0 -1364
  171. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/mocks/mock-search-service.ts +0 -134
  172. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/restoration-state-handler.test.ts +0 -480
  173. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/review-block.test.ts +0 -62
  174. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/sort-filter-bar/alpha-bar-tooltip.test.ts +0 -17
  175. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/sort-filter-bar/alpha-bar.test.ts +0 -101
  176. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/sort-filter-bar/sort-filter-bar.test.ts +0 -443
  177. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/text-overlay.test.ts +0 -55
  178. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/text-snippet-block.test.ts +0 -85
  179. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tile-stats.test.ts +0 -191
  180. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/grid/account-tile.test.ts +0 -121
  181. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/grid/collection-tile.test.ts +0 -114
  182. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/grid/item-tile.test.ts +0 -520
  183. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/grid/search-tile.test.ts +0 -75
  184. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/hover/hover-pane-controller.test.ts +0 -482
  185. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/hover/tile-hover-pane.test.ts +0 -80
  186. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/list/tile-list-compact-header.test.ts +0 -43
  187. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/list/tile-list-compact.test.ts +0 -282
  188. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/list/tile-list.test.ts +0 -576
  189. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/tile-dispatcher.test.ts +0 -320
  190. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/tile-display-value-provider.test.ts +0 -172
  191. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/tiles/tile-mediatype-icon.test.ts +0 -160
  192. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/utils/array-equals.test.ts +0 -31
  193. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/utils/format-count.test.ts +0 -32
  194. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/utils/format-date.test.ts +0 -89
  195. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/utils/format-unit-size.test.ts +0 -21
  196. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/test/utils/local-date-from-utc.test.ts +0 -37
  197. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/tsconfig.json +0 -25
  198. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/types/dompurify.d.ts +0 -1
  199. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/vite.config.ts +0 -29
  200. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/web-dev-server.config.mjs +0 -30
  201. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/web-test-runner.config.mjs +0 -52
  202. package/.claude/worktrees/WEBDEV-8677-bump-field-parsers/yarn.lock +0 -5965
  203. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.editorconfig +0 -29
  204. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.github/workflows/ci.yml +0 -29
  205. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.github/workflows/gh-pages-main.yml +0 -41
  206. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.github/workflows/npm-publish.yml +0 -49
  207. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.github/workflows/pr-preview.yml +0 -40
  208. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.husky/pre-commit +0 -1
  209. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/.prettierignore +0 -1
  210. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/LICENSE +0 -661
  211. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/README.md +0 -68
  212. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/eslint.config.mjs +0 -53
  213. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/index.html +0 -24
  214. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/index.ts +0 -29
  215. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/local.archive.org.cert +0 -86
  216. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/local.archive.org.key +0 -27
  217. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/package.json +0 -129
  218. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/pnpm-lock.yaml +0 -7366
  219. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/pnpm-workspace.yaml +0 -46
  220. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/renovate.json +0 -6
  221. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/app-root.ts +0 -1284
  222. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/arrow-left.ts +0 -10
  223. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/arrow-right.ts +0 -10
  224. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/chevron.ts +0 -4
  225. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/close-circle-dark.ts +0 -5
  226. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/contract.ts +0 -9
  227. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/empty-query.ts +0 -5
  228. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/expand.ts +0 -9
  229. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/eye-closed.ts +0 -5
  230. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/eye.ts +0 -5
  231. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/favorite-filled.ts +0 -10
  232. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/favorite-unfilled.ts +0 -9
  233. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/filter.ts +0 -10
  234. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/login-required.ts +0 -18
  235. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/account.ts +0 -14
  236. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/audio.ts +0 -14
  237. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/collection.ts +0 -12
  238. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/data.ts +0 -15
  239. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/etree.ts +0 -14
  240. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/film.ts +0 -14
  241. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/images.ts +0 -13
  242. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/radio.ts +0 -15
  243. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/search.ts +0 -14
  244. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/software.ts +0 -13
  245. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/texts.ts +0 -13
  246. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/tv-commercial.ts +0 -12
  247. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/tv-fact-check.ts +0 -12
  248. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/tv-quote.ts +0 -12
  249. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/tv.ts +0 -14
  250. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/video.ts +0 -14
  251. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/mediatype/web.ts +0 -13
  252. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/null-result.ts +0 -5
  253. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/quote.ts +0 -7
  254. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/restricted.ts +0 -13
  255. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/reviews.ts +0 -11
  256. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/upload.ts +0 -12
  257. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/assets/img/icons/views.ts +0 -11
  258. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/circular-activity-indicator.ts +0 -64
  259. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-browser.ts +0 -3165
  260. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/facet-row.ts +0 -309
  261. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/facet-tombstone-row.ts +0 -40
  262. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/facets-template.ts +0 -85
  263. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/models.ts +0 -10
  264. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/more-facets-content.ts +0 -644
  265. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/more-facets-pagination.ts +0 -294
  266. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/dedupe.ts +0 -44
  267. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.ts +0 -27
  268. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/index.ts +0 -3
  269. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.ts +0 -17
  270. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.ts +0 -70
  271. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.ts +0 -79
  272. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.ts +0 -93
  273. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/models.ts +0 -36
  274. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/smart-facet-bar.ts +0 -437
  275. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/smart-facet-button.ts +0 -145
  276. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/smart-facet-dropdown.ts +0 -185
  277. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/smart-facet-equals.ts +0 -16
  278. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/smart-facets/smart-facet-heuristics.ts +0 -26
  279. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets/toggle-switch.ts +0 -174
  280. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/collection-facets.ts +0 -1013
  281. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/data-source/collection-browser-data-source-interface.ts +0 -351
  282. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/data-source/collection-browser-data-source.ts +0 -1474
  283. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/data-source/collection-browser-query-state.ts +0 -60
  284. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/data-source/models.ts +0 -56
  285. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/empty-placeholder.ts +0 -192
  286. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/expanded-date-picker.ts +0 -191
  287. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/language-code-handler/language-code-handler.ts +0 -64
  288. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/language-code-handler/language-code-mapping.ts +0 -564
  289. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/manage/manage-bar.ts +0 -276
  290. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/manage/remove-items-modal-content.ts +0 -102
  291. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/mediatype/mediatype-config.ts +0 -146
  292. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/models.ts +0 -895
  293. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/restoration-state-handler.ts +0 -550
  294. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/alpha-bar-tooltip.ts +0 -53
  295. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/alpha-bar.ts +0 -252
  296. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/compact.ts +0 -5
  297. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/list.ts +0 -5
  298. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/sort-toggle-disabled.ts +0 -15
  299. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/sort-toggle-down.ts +0 -17
  300. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/sort-toggle-up.ts +0 -17
  301. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/sort-triangle.ts +0 -5
  302. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/img/tile.ts +0 -5
  303. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/sort-filter-bar/sort-filter-bar.ts +0 -733
  304. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/styles/ia-button.ts +0 -139
  305. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/styles/item-image-styles.ts +0 -124
  306. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/styles/sr-only.ts +0 -18
  307. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/styles/tile-action-styles.ts +0 -59
  308. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/base-tile-component.ts +0 -124
  309. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/collection-browser-loading-tile.ts +0 -26
  310. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/account-tile.ts +0 -113
  311. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/collection-tile.ts +0 -184
  312. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/item-tile.ts +0 -347
  313. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/search-tile.ts +0 -90
  314. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/styles/tile-grid-shared-styles.ts +0 -130
  315. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/grid/tile-stats.ts +0 -211
  316. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/hover/hover-pane-controller.ts +0 -638
  317. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/hover/tile-hover-pane.ts +0 -184
  318. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/image-block.ts +0 -162
  319. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/item-image.ts +0 -214
  320. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/list/tile-list-compact-header.ts +0 -112
  321. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/list/tile-list-compact.ts +0 -278
  322. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/list/tile-list.ts +0 -718
  323. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/models.ts +0 -21
  324. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/overlay/icon-overlay.ts +0 -57
  325. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/overlay/text-overlay.ts +0 -79
  326. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/review-block.ts +0 -130
  327. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/text-snippet-block.ts +0 -132
  328. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/tile-dispatcher.ts +0 -637
  329. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/tile-display-value-provider.ts +0 -133
  330. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/tiles/tile-mediatype-icon.ts +0 -133
  331. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/analytics-events.ts +0 -29
  332. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/array-equals.ts +0 -8
  333. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/collapse-repeated-quotes.ts +0 -13
  334. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/date-filter-field.ts +0 -11
  335. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/facet-utils.ts +0 -183
  336. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/format-count.ts +0 -95
  337. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/format-date.ts +0 -62
  338. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/format-unit-size.ts +0 -43
  339. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/local-date-from-utc.ts +0 -15
  340. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/log.ts +0 -14
  341. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/resolve-mediatype.ts +0 -26
  342. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/src/utils/sha1.ts +0 -9
  343. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-browser.test.ts +0 -2639
  344. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets/facet-row.test.ts +0 -421
  345. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets/facets-template.test.ts +0 -139
  346. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets/more-facets-content.test.ts +0 -231
  347. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets/more-facets-pagination.test.ts +0 -201
  348. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets/toggle-switch.test.ts +0 -164
  349. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/collection-facets.test.ts +0 -928
  350. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/data-source/collection-browser-data-source.test.ts +0 -193
  351. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/empty-placeholder.test.ts +0 -88
  352. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/expanded-date-picker.test.ts +0 -201
  353. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/icon-overlay.test.ts +0 -38
  354. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/image-block.test.ts +0 -247
  355. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/item-image.test.ts +0 -220
  356. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/manage/manage-bar.test.ts +0 -347
  357. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/manage/remove-items-modal-content.test.ts +0 -81
  358. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/mediatype-config.test.ts +0 -11
  359. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/mocks/mock-analytics-handler.ts +0 -30
  360. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/mocks/mock-search-responses.ts +0 -1364
  361. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/mocks/mock-search-service.ts +0 -134
  362. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/restoration-state-handler.test.ts +0 -480
  363. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/review-block.test.ts +0 -62
  364. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/sort-filter-bar/alpha-bar-tooltip.test.ts +0 -17
  365. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/sort-filter-bar/alpha-bar.test.ts +0 -101
  366. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/sort-filter-bar/sort-filter-bar.test.ts +0 -443
  367. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/text-overlay.test.ts +0 -55
  368. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/text-snippet-block.test.ts +0 -85
  369. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tile-stats.test.ts +0 -191
  370. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/grid/account-tile.test.ts +0 -121
  371. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/grid/collection-tile.test.ts +0 -114
  372. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/grid/item-tile.test.ts +0 -520
  373. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/grid/search-tile.test.ts +0 -75
  374. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/hover/hover-pane-controller.test.ts +0 -482
  375. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/hover/tile-hover-pane.test.ts +0 -80
  376. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/list/tile-list-compact-header.test.ts +0 -43
  377. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/list/tile-list-compact.test.ts +0 -282
  378. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/list/tile-list.test.ts +0 -576
  379. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/tile-dispatcher.test.ts +0 -320
  380. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/tile-display-value-provider.test.ts +0 -172
  381. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/tiles/tile-mediatype-icon.test.ts +0 -160
  382. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/utils/array-equals.test.ts +0 -31
  383. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/utils/format-count.test.ts +0 -32
  384. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/utils/format-date.test.ts +0 -89
  385. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/utils/format-unit-size.test.ts +0 -21
  386. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/test/utils/local-date-from-utc.test.ts +0 -37
  387. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/tsconfig.json +0 -25
  388. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/types/dompurify.d.ts +0 -1
  389. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/vite.config.ts +0 -29
  390. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/web-dev-server.config.mjs +0 -30
  391. package/.claude/worktrees/WEBDEV-9127-fix-publish-dist-tag/web-test-runner.config.mjs +0 -52
@@ -1,638 +0,0 @@
1
- import type { SortParam } from '@internetarchive/search-service';
2
- import {
3
- html,
4
- HTMLTemplateResult,
5
- nothing,
6
- ReactiveController,
7
- ReactiveControllerHost,
8
- } from 'lit';
9
- import type { TileModel } from '../../models';
10
- import type { CollectionTitles } from '../../data-source/models';
11
- import { msg } from '@lit/localize';
12
-
13
- type HoverPaneState = 'hidden' | 'shown' | 'fading-out';
14
-
15
- // the anchor point of the hover pane
16
- // can be either the mouse cursor or near the host element
17
- // in the case of mouse navigation, we want it to follow the cursor
18
- // in the case of keyboard navigation, we want it to appear near the host element
19
- type HoverPanePositionAnchor = 'host' | 'cursor';
20
-
21
- export interface HoverPaneProperties {
22
- model?: TileModel;
23
- baseNavigationUrl?: string;
24
- baseImageUrl?: string;
25
- loggedIn: boolean;
26
- suppressBlurring: boolean;
27
- sortParam: SortParam | null;
28
- collectionTitles?: CollectionTitles;
29
- }
30
-
31
- export interface HoverPaneControllerOptions {
32
- offsetX?: number;
33
- offsetY?: number;
34
- enableLongPress?: boolean;
35
- showDelay?: number;
36
- hideDelay?: number;
37
- longPressDelay?: number;
38
- mobileBreakpoint?: number;
39
- }
40
-
41
- /** A common interface for providing a hover pane element. */
42
- export interface HoverPaneProviderInterface {
43
- /** Returns the provider's currently rendered hover pane element. */
44
- getHoverPane(): HTMLElement | undefined;
45
- /** Returns properties that should be passed to the hover pane. */
46
- getHoverPaneProps(): HoverPaneProperties;
47
- /** When user has keyboard navigated out of more info, we want the host to get focus */
48
- acquireFocus(): void;
49
- /** When user has keyboard navigated out of more info, we want the host to lose focus */
50
- releaseFocus(): void;
51
- }
52
-
53
- export interface ToggleHoverPaneOptions {
54
- coords: { x: number; y: number };
55
- enableTouchBackdrop?: boolean;
56
- }
57
-
58
- /**
59
- * An interface for interacting with hover pane controllers (e.g.,
60
- * to retrieve their current hover pane template).
61
- */
62
- export interface HoverPaneControllerInterface extends ReactiveController {
63
- /**
64
- * Returns the hover pane template to render based on this controller's
65
- * current state. The returned template may be `nothing` if the hover
66
- * pane should not currently be rendered.
67
- */
68
- getTemplate(): HTMLTemplateResult | typeof nothing;
69
-
70
- /**
71
- * Requests to manually toggle the state of the hover pane.
72
- * If the hover pane is already shown, it will begin fading out and then
73
- * subsequently be hidden and removed. If the hover pane is already fading
74
- * out or hidden, it will fade back in and be shown.
75
- */
76
- toggleHoverPane(options: ToggleHoverPaneOptions): void;
77
- }
78
-
79
- const clamp = (val: number, min = -Infinity, max = Infinity) =>
80
- Math.max(min, Math.min(val, max));
81
-
82
- export class HoverPaneController implements HoverPaneControllerInterface {
83
- /**
84
- * The hover pane element attached to this controller's host.
85
- */
86
- private hoverPane?: HTMLElement;
87
-
88
- /**
89
- * The properties to be passed to the hover pane element
90
- */
91
- private hoverPaneProps?: HoverPaneProperties;
92
-
93
- /**
94
- * The breakpoint (in pixels) below which the mobile interface should be used.
95
- */
96
- private mobileBreakpoint?: number = 600;
97
-
98
- /**
99
- * The number of horizontal pixels the hover pane should be offset from the
100
- * pointer position.
101
- */
102
- private offsetX: number = -10;
103
-
104
- /**
105
- * The number of vertical pixels the hover pane should be offset from the
106
- * pointer position.
107
- */
108
- private offsetY: number = 15;
109
-
110
- /**
111
- * The delay between the mouse idling within the host element and when the hover
112
- * pane should begin fading in (in milliseconds).
113
- */
114
- private showDelay: number = 300;
115
-
116
- /**
117
- * The delay between when the mouse leaves the host element and when the hover
118
- * pane should begin fading out (in milliseconds).
119
- */
120
- private hideDelay: number = 100;
121
-
122
- /**
123
- * The delay between when a touch event begins on the host element and when the
124
- * hover pane should begin fading in (in milliseconds).
125
- */
126
- private longPressDelay: number = 600;
127
-
128
- /**
129
- * Whether long press interactions should cause the hover pane to appear (when
130
- * below the mobile breakpoint).
131
- */
132
- private enableLongPress: boolean = false;
133
-
134
- /**
135
- * Used to control the current state of this provider's hover pane.
136
- * - `'hidden'` => The hover pane is not present at all.
137
- * - `'shown'` => The hover pane is either fading in or fully visible.
138
- * - `'fading-out'` => The hover pane is fading out and about to be removed.
139
- */
140
- private hoverPaneState: HoverPaneState = 'hidden';
141
-
142
- /** The timer ID for showing the hover pane */
143
- private showTimer?: number;
144
-
145
- /** The timer ID for hiding the hover pane */
146
- private hideTimer?: number;
147
-
148
- /** The timer ID for recognizing a long press event */
149
- private longPressTimer?: number;
150
-
151
- /**
152
- * Whether the touch backdrop should currently be rendered irrespective of other touch
153
- * interactions being enabled.
154
- */
155
- private forceTouchBackdrop: boolean = false;
156
-
157
- /** A record of the last mouse position on the host element, for positioning the hover pane */
158
- private lastPointerClientPos = { x: 0, y: 0 };
159
-
160
- /**
161
- * A flag to track whether the host element is being clicked by a pointer device, so that we
162
- * don't trigger unnecessary keyboard focus behaviors on click. This is needed, e.g., to prevent
163
- * the hover pane from appearing immediately at its `host` positioning on click, which can
164
- * obstruct the host element itself (due to the ordering of events fired).
165
- */
166
- private clicking = false;
167
-
168
- constructor(
169
- /** The host element to which this controller should attach listeners */
170
- private readonly host: ReactiveControllerHost &
171
- HoverPaneProviderInterface &
172
- HTMLElement,
173
- /** Options for adjusting the hover pane behavior (offsets, delays, etc.) */
174
- options: HoverPaneControllerOptions = {},
175
- ) {
176
- this.mobileBreakpoint = options.mobileBreakpoint ?? this.mobileBreakpoint;
177
- this.offsetX = options.offsetX ?? this.offsetX;
178
- this.offsetY = options.offsetY ?? this.offsetY;
179
- this.showDelay = options.showDelay ?? this.showDelay;
180
- this.hideDelay = options.hideDelay ?? this.hideDelay;
181
- this.longPressDelay = options.longPressDelay ?? this.longPressDelay;
182
- this.enableLongPress = options.enableLongPress ?? this.enableLongPress;
183
-
184
- this.host.addController(this);
185
- }
186
-
187
- hostConnected(): void {
188
- this.attachListeners();
189
- }
190
-
191
- hostDisconnected(): void {
192
- this.detachListeners();
193
- }
194
-
195
- hostUpdated(): void {
196
- this.hoverPane = this.host.getHoverPane();
197
- this.hoverPaneProps = this.host.getHoverPaneProps();
198
- }
199
-
200
- /** @inheritdoc */
201
- getTemplate(): HTMLTemplateResult | typeof nothing {
202
- this.hoverPaneProps = this.host.getHoverPaneProps();
203
-
204
- return this.shouldRenderHoverPane
205
- ? html`
206
- ${this.touchBackdropTemplate}
207
- <tile-hover-pane
208
- popover
209
- tabindex="-1"
210
- aria-describedby="tile-hover-pane-aria-description"
211
- .model=${this.hoverPaneProps?.model}
212
- .baseNavigationUrl=${this.hoverPaneProps?.baseNavigationUrl}
213
- .baseImageUrl=${this.hoverPaneProps?.baseImageUrl}
214
- .loggedIn=${this.hoverPaneProps?.loggedIn}
215
- .suppressBlurring=${this.hoverPaneProps?.suppressBlurring}
216
- .sortParam=${this.hoverPaneProps?.sortParam}
217
- .collectionTitles=${this.hoverPaneProps?.collectionTitles}
218
- .mobileBreakpoint=${this.mobileBreakpoint}
219
- .currentWidth=${window.innerWidth}
220
- ></tile-hover-pane>
221
- <div id="tile-hover-pane-aria-description" class="sr-only">
222
- ${msg('Press Up Arrow to exit item detail preview')}
223
- </div>
224
- `
225
- : nothing;
226
- }
227
-
228
- /** @inheritdoc */
229
- toggleHoverPane(options: ToggleHoverPaneOptions): void {
230
- if (this.hoverPaneState !== 'hidden') {
231
- this.fadeOutHoverPane();
232
- this.forceTouchBackdrop = false;
233
- } else {
234
- this.lastPointerClientPos = options.coords;
235
- this.forceTouchBackdrop = options.enableTouchBackdrop ?? false;
236
- this.showHoverPane();
237
- }
238
- }
239
-
240
- /**
241
- * Produces a template for the invisible touch capture backdrop that
242
- * is used to cancel the hover pane on touch devices. We want any
243
- * touch interaction on the backdrop to remove the hover pane, and
244
- * we don't want to bubble up mouse events that would otherwise
245
- * affect the state of the hover pane (e.g., fading it back in).
246
- */
247
- private get touchBackdropTemplate(): HTMLTemplateResult | typeof nothing {
248
- return this.showTouchBackdrop
249
- ? html`<div
250
- id="touch-backdrop"
251
- @touchstart=${this.handleBackdropInteraction}
252
- @touchmove=${this.handleBackdropInteraction}
253
- @touchend=${this.handleBackdropInteraction}
254
- @touchcancel=${this.handleBackdropInteraction}
255
- @mouseenter=${(e: MouseEvent) => e.stopPropagation()}
256
- @mousemove=${(e: MouseEvent) => e.stopPropagation()}
257
- @mouseleave=${(e: MouseEvent) => e.stopPropagation()}
258
- ></div>`
259
- : nothing;
260
- }
261
-
262
- private get showTouchBackdrop(): boolean {
263
- return (
264
- (this.isTouchEnabled && this.enableLongPress) || this.forceTouchBackdrop
265
- );
266
- }
267
-
268
- /** Whether to use the mobile layout */
269
- private get isMobileView(): boolean {
270
- return !!this.mobileBreakpoint && window.innerWidth < this.mobileBreakpoint;
271
- }
272
-
273
- private get isHoverEnabled(): boolean {
274
- return window.matchMedia('(hover: hover)').matches;
275
- }
276
-
277
- private get isTouchEnabled(): boolean {
278
- return (
279
- 'ontouchstart' in window &&
280
- window.matchMedia('(any-pointer: coarse)').matches
281
- );
282
- }
283
-
284
- /** Whether this controller should currently render its hover pane. */
285
- private get shouldRenderHoverPane(): boolean {
286
- return this.hoverPaneState !== 'hidden';
287
- }
288
-
289
- /**
290
- * Returns the desired top/left offsets (in pixels) for this tile's hover pane.
291
- * The desired offsets balance positioning the hover pane under the primary pointer
292
- * while preventing it from flowing outside the viewport. The returned offsets are
293
- * relative to the viewport, intended to position the pane as a popover element.
294
- *
295
- * These offsets are only valid if the hover pane is already rendered with its
296
- * correct width and height. If the hover pane is not present, the returned offsets
297
- * will simply represent the current pointer position.
298
- */
299
- private makePaneDesiredOffsets(anchor: HoverPanePositionAnchor): {
300
- top: number;
301
- left: number;
302
- } {
303
- // Try to find offsets for the hover pane that:
304
- // (a) cause it to lie entirely within the viewport, and
305
- // (b) to the extent possible, minimize the distance between the
306
- // nearest corner of the hover pane and the mouse/host element position
307
- // (with some additional offsets applied after the fact).
308
-
309
- let [left, top] = [0, 0];
310
- switch (anchor) {
311
- case 'host':
312
- const hostRect = this.host.getBoundingClientRect();
313
- // slight inset from host top left corner
314
- left = hostRect.left + 20;
315
- top = hostRect.top + 30;
316
- break;
317
- case 'cursor':
318
- left = this.lastPointerClientPos.x;
319
- top = this.lastPointerClientPos.y;
320
- break;
321
- }
322
-
323
- // Flip the hover pane according to which quadrant of the viewport the coordinates are in.
324
- // (Similar to how Wikipedia's link hover panes work)
325
- const flipHorizontal = left > window.innerWidth / 2;
326
- const flipVertical = top > window.innerHeight / 2;
327
-
328
- const hoverPaneRect = this.hoverPane?.getBoundingClientRect();
329
- if (hoverPaneRect) {
330
- // If we need to flip the hover pane, do so by subtracting its width/height from left/top
331
- if (flipHorizontal) {
332
- left -= hoverPaneRect.width;
333
- }
334
- if (flipVertical) {
335
- top -= hoverPaneRect.height;
336
- }
337
-
338
- // Apply desired offsets from the target position
339
- left += (flipHorizontal ? -1 : 1) * this.offsetX;
340
- top += (flipVertical ? -1 : 1) * this.offsetY;
341
-
342
- // On mobile view, shunt the hover pane to avoid overflowing the viewport
343
- if (this.isMobileView) {
344
- left = clamp(left, 20, window.innerWidth - hoverPaneRect.width - 20);
345
- top = clamp(top, 20, window.innerHeight - hoverPaneRect.height - 20);
346
- }
347
- }
348
-
349
- left += window.scrollX;
350
- top += window.scrollY;
351
-
352
- return { left, top };
353
- }
354
-
355
- /**
356
- * Adds to the host element all the listeners necessary to make the
357
- * hover pane functional.
358
- */
359
- private attachListeners(): void {
360
- // keyboard navigation listeners
361
- this.host.addEventListener('focus', this.handleFocus);
362
- this.host.addEventListener('blur', this.handleBlur);
363
- this.host.addEventListener('pointerdown', this.handlePointerDown);
364
- this.host.addEventListener('keyup', this.handleKeyUp);
365
- this.host.addEventListener('keydown', this.handleKeyDown);
366
-
367
- if (this.isHoverEnabled) {
368
- this.host.addEventListener('mouseenter', this.handleMouseEnter);
369
- this.host.addEventListener('mousemove', this.handleMouseMove);
370
- this.host.addEventListener('mouseleave', this.handleMouseLeave);
371
- }
372
-
373
- if (this.isTouchEnabled && this.enableLongPress) {
374
- this.host.addEventListener('touchstart', this.handleTouchStart);
375
- this.host.addEventListener('touchmove', this.handleLongPressCancel);
376
- this.host.addEventListener('touchend', this.handleLongPressCancel);
377
- this.host.addEventListener('touchcancel', this.handleLongPressCancel);
378
- this.host.addEventListener('contextmenu', this.handleContextMenu);
379
- }
380
- }
381
-
382
- /**
383
- * Removes all the hover pane listeners from the host element.
384
- */
385
- private detachListeners(): void {
386
- this.host.removeEventListener('mouseenter', this.handleMouseEnter);
387
- this.host.removeEventListener('mousemove', this.handleMouseMove);
388
- this.host.removeEventListener('mouseleave', this.handleMouseLeave);
389
- this.host.removeEventListener('touchstart', this.handleTouchStart);
390
- this.host.removeEventListener('touchmove', this.handleLongPressCancel);
391
- this.host.removeEventListener('touchend', this.handleLongPressCancel);
392
- this.host.removeEventListener('touchcancel', this.handleLongPressCancel);
393
- this.host.removeEventListener('contextmenu', this.handleContextMenu);
394
-
395
- // keyboard navigation listeners
396
- this.host.removeEventListener('focus', this.handleFocus);
397
- this.host.removeEventListener('blur', this.handleBlur);
398
- this.host.removeEventListener('keyup', this.handleKeyUp);
399
- this.host.removeEventListener('keydown', this.handleKeyDown);
400
- }
401
-
402
- private handleFocus = (): void => {
403
- if (!this.clicking && this.hoverPaneState === 'hidden') {
404
- this.showHoverPane({
405
- anchor: 'host',
406
- });
407
- }
408
- this.clicking = false;
409
- };
410
-
411
- private handleBlur = (): void => {
412
- if (this.hoverPaneState !== 'hidden') {
413
- this.fadeOutHoverPane();
414
- }
415
- };
416
-
417
- private handlePointerDown = (): void => {
418
- this.clicking = true;
419
- };
420
-
421
- private handleKeyDown = (e: KeyboardEvent): void => {
422
- if (
423
- (e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
424
- this.hoverPaneState !== 'hidden'
425
- ) {
426
- e.preventDefault();
427
- }
428
- };
429
-
430
- private handleKeyUp = (e: KeyboardEvent): void => {
431
- if (this.hoverPaneState === 'hidden' || !this.hoverPane) return;
432
- if (e.key === 'ArrowDown') {
433
- this.hoverPane.tabIndex = 1;
434
- this.hoverPane.focus();
435
- }
436
-
437
- const isArrowUp = e.key === 'ArrowUp';
438
- const isEscape = e.key === 'Escape' || e.key === 'Esc';
439
-
440
- if (isEscape) {
441
- this.fadeOutHoverPane();
442
- }
443
- if (isArrowUp || isEscape) {
444
- this.hoverPane.tabIndex = -1;
445
- this.host.acquireFocus();
446
- }
447
- };
448
-
449
- /**
450
- * Handler for the mouseenter event on the host element.
451
- */
452
- // NB: Arrow function so 'this' remains bound to the controller
453
- private handleMouseEnter = (e: MouseEvent): void => {
454
- // Delegate to the mousemove handler, as they are currently processed identically
455
- this.handleMouseMove(e);
456
- };
457
-
458
- /**
459
- * Handler for the mousemove event on the host element.
460
- * Aborts any pending hide/fade-out for the hover pane, and restarts the
461
- * timer to show it.
462
- */
463
- // NB: Arrow function so 'this' remains bound to the controller
464
- private handleMouseMove = (e: MouseEvent): void => {
465
- // The mouse is within the tile, so abort any pending removal of the hover pane
466
- clearTimeout(this.hideTimer);
467
-
468
- // If the hover pane is currently fading out, just make it fade back in where it is
469
- if (this.hoverPaneState === 'fading-out') {
470
- this.hoverPaneState = 'shown';
471
- this.hoverPane?.classList.add('fade-in');
472
- }
473
-
474
- // Restart the timer to show the hover pane anytime the mouse moves within the tile
475
- if (this.hoverPaneState === 'hidden') {
476
- this.restartShowHoverPaneTimer();
477
- this.lastPointerClientPos = { x: e.clientX, y: e.clientY };
478
- }
479
- };
480
-
481
- /**
482
- * Handler for the mouseleave event on the host element.
483
- * Hides the hover pane if present, and aborts the timer for showing it.
484
- */
485
- // NB: Arrow function so 'this' remains bound to the controller
486
- private handleMouseLeave = (): void => {
487
- this.host.releaseFocus();
488
-
489
- // Abort any timer to show the hover pane, as the mouse has left the tile
490
- clearTimeout(this.showTimer);
491
-
492
- // Hide the hover pane if it's already been shown
493
- if (this.hoverPaneState !== 'hidden') {
494
- this.hideTimer = window.setTimeout(() => {
495
- this.fadeOutHoverPane();
496
- }, this.hideDelay);
497
- }
498
- };
499
-
500
- /**
501
- * Handler for the touchstart event on the host element.
502
- * Begins the timer for recognizing a long press event.
503
- */
504
- // NB: Arrow function so 'this' remains bound to the controller
505
- private handleTouchStart = (e: TouchEvent): void => {
506
- clearTimeout(this.longPressTimer);
507
-
508
- if (e.touches.length === 1) {
509
- this.longPressTimer = window.setTimeout(() => {
510
- if (this.hoverPaneState === 'hidden') {
511
- this.showHoverPane();
512
- }
513
- }, this.longPressDelay);
514
-
515
- this.lastPointerClientPos = {
516
- x: e.touches[0].clientX,
517
- y: e.touches[0].clientY,
518
- };
519
- }
520
- };
521
-
522
- /**
523
- * Handler for events that should cancel a pending long press event
524
- * (touchmove, touchend, touchcancel). Aborts the timer for recognizing
525
- * a long press.
526
- */
527
- // NB: Arrow function so 'this' remains bound to the controller
528
- private handleLongPressCancel = (): void => {
529
- clearTimeout(this.longPressTimer);
530
- };
531
-
532
- /**
533
- * Handler for the contextmenu event, which should be suppressed during
534
- * mobile long-press events on the host element.
535
- */
536
- // NB: Arrow function so 'this' remains bound to the controller
537
- private handleContextMenu = (e: Event): void => {
538
- e.preventDefault();
539
- };
540
-
541
- /**
542
- * Immediately causes the hover pane to begin fading out, if it is present.
543
- */
544
- // NB: Arrow function so 'this' remains bound to the controller
545
- private handleBackdropInteraction = (e: Event): void => {
546
- if (this.hoverPaneState !== 'hidden') {
547
- this.fadeOutHoverPane();
548
- }
549
- e.preventDefault();
550
- e.stopPropagation();
551
- };
552
-
553
- /**
554
- * Aborts and restarts the timer for showing the hover pane.
555
- */
556
- private restartShowHoverPaneTimer(): void {
557
- clearTimeout(this.showTimer);
558
- this.showTimer = window.setTimeout(() => {
559
- this.host.acquireFocus();
560
- this.showHoverPane();
561
- }, this.showDelay);
562
- }
563
-
564
- /**
565
- * Causes this tile's hover pane to be rendered, positioned, and made visible.
566
- */
567
- private async showHoverPane(
568
- options: {
569
- anchor: HoverPanePositionAnchor;
570
- } = {
571
- anchor: 'cursor',
572
- },
573
- ): Promise<void> {
574
- this.hoverPaneState = 'shown';
575
- this.host.requestUpdate();
576
-
577
- // Wait for the state update to render the hover pane
578
- await this.host.updateComplete;
579
-
580
- // Ensure the hover pane element is still in the document before showing,
581
- // as it might have been removed by the previous update.
582
- if (!this.hoverPane?.isConnected) return;
583
-
584
- if (this.hoverPane && !this.hoverPane.matches(':popover-open')) {
585
- this.hoverPane.showPopover?.();
586
- }
587
- // Pane sizes aren't accurate until the pane's full descendant tree has
588
- // rendered. The next animation frame guarantees that to be true, but
589
- // frames are skipped when the page is not visible, so fall back to a
590
- // short timer as a backstop in such cases.
591
- await Promise.race([
592
- new Promise(resolve => {
593
- requestAnimationFrame(resolve);
594
- }),
595
- new Promise(resolve => {
596
- setTimeout(resolve, 50);
597
- }),
598
- ]);
599
-
600
- // Apply the correct positioning to the hover pane
601
- this.repositionHoverPane(options.anchor);
602
-
603
- // The hover pane is initially not visible (to avoid it shifting around
604
- // while being positioned). Since it now has the correct positioning, we
605
- // can make it visible and begin its fade-in animation.
606
- this.hoverPane?.classList.add('visible', 'fade-in');
607
- }
608
-
609
- /**
610
- * Causes this tile's hover pane to begin fading out and starts
611
- * the timer for it to be removed.
612
- */
613
- private fadeOutHoverPane(): void {
614
- this.hoverPaneState = 'fading-out';
615
- this.hoverPane?.classList.remove('fade-in');
616
-
617
- clearTimeout(this.hideTimer);
618
- this.hideTimer = window.setTimeout(() => {
619
- this.hoverPaneState = 'hidden';
620
- if (this.hoverPane) {
621
- this.hoverPane.tabIndex = -1;
622
- }
623
- this.host.requestUpdate();
624
- }, 100);
625
- }
626
-
627
- /**
628
- * Positions the hover pane with the correct offsets.
629
- */
630
- private repositionHoverPane(anchor: HoverPanePositionAnchor): void {
631
- if (!this.hoverPane) return;
632
-
633
- const { top, left } = this.makePaneDesiredOffsets(anchor);
634
-
635
- this.hoverPane.style.top = `${top}px`;
636
- this.hoverPane.style.left = `${left}px`;
637
- }
638
- }