@internetarchive/ia-topnav 1.3.8 → 1.3.10-webdev-7394.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 (393) hide show
  1. package/.prettierignore +1 -0
  2. package/README.md +7 -7
  3. package/demo/app-root.ts +186 -0
  4. package/demo/index.html +27 -0
  5. package/dist/demo/app-root.d.ts +8 -0
  6. package/dist/demo/app-root.js +181 -0
  7. package/dist/demo/app-root.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +3 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/src/assets/img/hamburger.d.ts +7 -0
  12. package/dist/src/assets/img/hamburger.js +51 -0
  13. package/dist/src/assets/img/hamburger.js.map +1 -0
  14. package/dist/src/assets/img/ia-icon.d.ts +7 -0
  15. package/dist/src/assets/img/ia-icon.js +33 -0
  16. package/dist/src/assets/img/ia-icon.js.map +1 -0
  17. package/dist/src/assets/img/icon-audio.d.ts +2 -0
  18. package/dist/src/assets/img/icon-audio.js +28 -0
  19. package/dist/src/assets/img/icon-audio.js.map +1 -0
  20. package/dist/src/assets/img/icon-close.d.ts +2 -0
  21. package/dist/src/assets/img/icon-close.js +20 -0
  22. package/dist/src/assets/img/icon-close.js.map +1 -0
  23. package/dist/src/assets/img/icon-donate-unpadded.d.ts +2 -0
  24. package/dist/src/assets/img/icon-donate-unpadded.js +19 -0
  25. package/dist/src/assets/img/icon-donate-unpadded.js.map +1 -0
  26. package/dist/src/assets/img/icon-donate.d.ts +2 -0
  27. package/dist/src/assets/img/icon-donate.js +18 -0
  28. package/dist/src/assets/img/icon-donate.js.map +1 -0
  29. package/dist/src/assets/img/icon-ellipses.d.ts +2 -0
  30. package/dist/src/assets/img/icon-ellipses.js +19 -0
  31. package/dist/src/assets/img/icon-ellipses.js.map +1 -0
  32. package/dist/src/assets/img/icon-ia-logo.d.ts +2 -0
  33. package/dist/src/assets/img/icon-ia-logo.js +30 -0
  34. package/dist/src/assets/img/icon-ia-logo.js.map +1 -0
  35. package/dist/src/assets/img/icon-images.d.ts +2 -0
  36. package/dist/src/assets/img/icon-images.js +19 -0
  37. package/dist/src/assets/img/icon-images.js.map +1 -0
  38. package/dist/src/assets/img/icon-search.d.ts +2 -0
  39. package/dist/src/assets/img/icon-search.js +19 -0
  40. package/dist/src/assets/img/icon-search.js.map +1 -0
  41. package/dist/src/assets/img/icon-software.d.ts +2 -0
  42. package/dist/src/assets/img/icon-software.js +18 -0
  43. package/dist/src/assets/img/icon-software.js.map +1 -0
  44. package/dist/src/assets/img/icon-texts.d.ts +2 -0
  45. package/dist/src/assets/img/icon-texts.js +18 -0
  46. package/dist/src/assets/img/icon-texts.js.map +1 -0
  47. package/dist/src/assets/img/icon-upload-unpadded.d.ts +2 -0
  48. package/dist/src/assets/img/icon-upload-unpadded.js +18 -0
  49. package/dist/src/assets/img/icon-upload-unpadded.js.map +1 -0
  50. package/dist/src/assets/img/icon-upload.d.ts +2 -0
  51. package/dist/src/assets/img/icon-upload.js +21 -0
  52. package/dist/src/assets/img/icon-upload.js.map +1 -0
  53. package/dist/src/assets/img/icon-user.d.ts +2 -0
  54. package/dist/src/assets/img/icon-user.js +19 -0
  55. package/dist/src/assets/img/icon-user.js.map +1 -0
  56. package/dist/src/assets/img/icon-video.d.ts +2 -0
  57. package/dist/src/assets/img/icon-video.js +19 -0
  58. package/dist/src/assets/img/icon-video.js.map +1 -0
  59. package/dist/src/assets/img/icon-web.d.ts +2 -0
  60. package/dist/src/assets/img/icon-web.js +19 -0
  61. package/dist/src/assets/img/icon-web.js.map +1 -0
  62. package/dist/src/assets/img/icon.d.ts +5 -0
  63. package/dist/src/assets/img/icon.js +17 -0
  64. package/dist/src/assets/img/icon.js.map +1 -0
  65. package/dist/src/assets/img/icons.d.ts +18 -0
  66. package/dist/src/assets/img/icons.js +33 -0
  67. package/dist/src/assets/img/icons.js.map +1 -0
  68. package/dist/src/assets/img/wordmark-stacked.d.ts +2 -0
  69. package/dist/src/assets/img/wordmark-stacked.js +13 -0
  70. package/dist/src/assets/img/wordmark-stacked.js.map +1 -0
  71. package/dist/src/data/menus.d.ts +20 -0
  72. package/dist/src/data/menus.js +668 -0
  73. package/dist/src/data/menus.js.map +1 -0
  74. package/dist/src/desktop-subnav.d.ts +11 -0
  75. package/dist/src/desktop-subnav.js +55 -0
  76. package/dist/src/desktop-subnav.js.map +1 -0
  77. package/dist/src/dropdown-menu.d.ts +19 -0
  78. package/dist/src/dropdown-menu.js +115 -0
  79. package/dist/src/dropdown-menu.js.map +1 -0
  80. package/dist/src/ia-topnav.d.ts +68 -0
  81. package/dist/src/ia-topnav.js +315 -0
  82. package/dist/src/ia-topnav.js.map +1 -0
  83. package/dist/src/lib/formatUrl.d.ts +2 -0
  84. package/dist/src/lib/formatUrl.js +2 -0
  85. package/dist/src/lib/formatUrl.js.map +1 -0
  86. package/dist/src/lib/keyboard-navigation.d.ts +50 -0
  87. package/dist/src/lib/keyboard-navigation.js +136 -0
  88. package/dist/src/lib/keyboard-navigation.js.map +1 -0
  89. package/dist/src/lib/location-handler.d.ts +1 -0
  90. package/dist/src/lib/location-handler.js +5 -0
  91. package/dist/src/lib/location-handler.js.map +1 -0
  92. package/dist/src/lib/makeBooleanString.d.ts +2 -0
  93. package/dist/src/lib/makeBooleanString.js +12 -0
  94. package/dist/src/lib/makeBooleanString.js.map +1 -0
  95. package/dist/src/lib/query-handler.d.ts +4 -0
  96. package/dist/src/lib/query-handler.js +7 -0
  97. package/dist/src/lib/query-handler.js.map +1 -0
  98. package/dist/src/lib/toSentenceCase.d.ts +2 -0
  99. package/dist/src/lib/toSentenceCase.js +10 -0
  100. package/dist/src/lib/toSentenceCase.js.map +1 -0
  101. package/dist/src/login-button.d.ts +16 -0
  102. package/dist/src/login-button.js +83 -0
  103. package/dist/src/login-button.js.map +1 -0
  104. package/dist/src/media-button.d.ts +24 -0
  105. package/dist/src/media-button.js +119 -0
  106. package/dist/src/media-button.js.map +1 -0
  107. package/dist/src/media-menu.d.ts +20 -0
  108. package/dist/src/media-menu.js +148 -0
  109. package/dist/src/media-menu.js.map +1 -0
  110. package/dist/src/media-slider.d.ts +15 -0
  111. package/dist/src/media-slider.js +139 -0
  112. package/dist/src/media-slider.js.map +1 -0
  113. package/dist/src/media-subnav.d.ts +18 -0
  114. package/dist/src/media-subnav.js +126 -0
  115. package/dist/src/media-subnav.js.map +1 -0
  116. package/dist/src/models.d.ts +51 -0
  117. package/dist/src/models.js +25 -0
  118. package/dist/src/models.js.map +1 -0
  119. package/dist/src/more-slider.d.ts +10 -0
  120. package/dist/src/more-slider.js +50 -0
  121. package/dist/src/more-slider.js.map +1 -0
  122. package/dist/src/nav-search.d.ts +19 -0
  123. package/dist/src/nav-search.js +123 -0
  124. package/dist/src/nav-search.js.map +1 -0
  125. package/dist/src/primary-nav.d.ts +45 -0
  126. package/dist/src/primary-nav.js +280 -0
  127. package/dist/src/primary-nav.js.map +1 -0
  128. package/dist/src/save-page-form.d.ts +10 -0
  129. package/dist/src/save-page-form.js +63 -0
  130. package/dist/src/save-page-form.js.map +1 -0
  131. package/dist/src/search-menu.d.ts +20 -0
  132. package/dist/src/search-menu.js +162 -0
  133. package/dist/src/search-menu.js.map +1 -0
  134. package/dist/src/signed-out-dropdown.d.ts +4 -0
  135. package/dist/src/signed-out-dropdown.js +15 -0
  136. package/dist/src/signed-out-dropdown.js.map +1 -0
  137. package/dist/src/styles/base.d.ts +1 -0
  138. package/dist/src/styles/base.js +48 -0
  139. package/dist/src/styles/base.js.map +1 -0
  140. package/dist/src/styles/desktop-subnav.d.ts +2 -0
  141. package/dist/src/styles/desktop-subnav.js +37 -0
  142. package/dist/src/styles/desktop-subnav.js.map +1 -0
  143. package/dist/src/styles/dropdown-menu.d.ts +2 -0
  144. package/dist/src/styles/dropdown-menu.js +170 -0
  145. package/dist/src/styles/dropdown-menu.js.map +1 -0
  146. package/dist/src/styles/ia-topnav.d.ts +2 -0
  147. package/dist/src/styles/ia-topnav.js +87 -0
  148. package/dist/src/styles/ia-topnav.js.map +1 -0
  149. package/dist/src/styles/login-button.d.ts +2 -0
  150. package/dist/src/styles/login-button.js +82 -0
  151. package/dist/src/styles/login-button.js.map +1 -0
  152. package/dist/src/styles/media-button.d.ts +2 -0
  153. package/dist/src/styles/media-button.js +156 -0
  154. package/dist/src/styles/media-button.js.map +1 -0
  155. package/dist/src/styles/media-menu.d.ts +2 -0
  156. package/dist/src/styles/media-menu.js +66 -0
  157. package/dist/src/styles/media-menu.js.map +1 -0
  158. package/dist/src/styles/media-slider.d.ts +2 -0
  159. package/dist/src/styles/media-slider.js +81 -0
  160. package/dist/src/styles/media-slider.js.map +1 -0
  161. package/dist/src/styles/media-subnav.d.ts +2 -0
  162. package/dist/src/styles/media-subnav.js +159 -0
  163. package/dist/src/styles/media-subnav.js.map +1 -0
  164. package/dist/src/styles/more-slider.d.ts +2 -0
  165. package/dist/src/styles/more-slider.js +15 -0
  166. package/dist/src/styles/more-slider.js.map +1 -0
  167. package/dist/src/styles/nav-search.d.ts +2 -0
  168. package/dist/src/styles/nav-search.js +136 -0
  169. package/dist/src/styles/nav-search.js.map +1 -0
  170. package/dist/src/styles/primary-nav.d.ts +2 -0
  171. package/dist/src/styles/primary-nav.js +310 -0
  172. package/dist/src/styles/primary-nav.js.map +1 -0
  173. package/dist/src/styles/save-page-form.d.ts +2 -0
  174. package/dist/src/styles/save-page-form.js +54 -0
  175. package/dist/src/styles/save-page-form.js.map +1 -0
  176. package/dist/src/styles/search-menu.d.ts +2 -0
  177. package/dist/src/styles/search-menu.js +105 -0
  178. package/dist/src/styles/search-menu.js.map +1 -0
  179. package/dist/src/styles/signed-out-dropdown.d.ts +2 -0
  180. package/dist/src/styles/signed-out-dropdown.js +31 -0
  181. package/dist/src/styles/signed-out-dropdown.js.map +1 -0
  182. package/dist/src/styles/user-menu.d.ts +2 -0
  183. package/dist/src/styles/user-menu.js +31 -0
  184. package/dist/src/styles/user-menu.js.map +1 -0
  185. package/dist/src/styles/wayback-search.d.ts +2 -0
  186. package/dist/src/styles/wayback-search.js +48 -0
  187. package/dist/src/styles/wayback-search.js.map +1 -0
  188. package/dist/src/styles/wayback-slider.d.ts +2 -0
  189. package/dist/src/styles/wayback-slider.js +33 -0
  190. package/dist/src/styles/wayback-slider.js.map +1 -0
  191. package/dist/src/tracked-element.d.ts +5 -0
  192. package/dist/src/tracked-element.js +30 -0
  193. package/dist/src/tracked-element.js.map +1 -0
  194. package/dist/src/user-menu.d.ts +10 -0
  195. package/dist/src/user-menu.js +60 -0
  196. package/dist/src/user-menu.js.map +1 -0
  197. package/dist/src/wayback-search.d.ts +4 -0
  198. package/dist/src/wayback-search.js +14 -0
  199. package/dist/src/wayback-search.js.map +1 -0
  200. package/dist/src/wayback-slider.d.ts +18 -0
  201. package/dist/src/wayback-slider.js +99 -0
  202. package/dist/src/wayback-slider.js.map +1 -0
  203. package/dist/test/assets/img/hamburger.test.d.ts +1 -0
  204. package/dist/test/assets/img/hamburger.test.js +13 -0
  205. package/dist/test/assets/img/hamburger.test.js.map +1 -0
  206. package/dist/test/assets/img/user.test.d.ts +1 -0
  207. package/dist/test/assets/img/user.test.js +12 -0
  208. package/dist/test/assets/img/user.test.js.map +1 -0
  209. package/dist/test/data/menus.test.d.ts +1 -0
  210. package/dist/test/data/menus.test.js +11 -0
  211. package/dist/test/data/menus.test.js.map +1 -0
  212. package/dist/test/dropdown-menu.test.d.ts +1 -0
  213. package/dist/test/dropdown-menu.test.js +20 -0
  214. package/dist/test/dropdown-menu.test.js.map +1 -0
  215. package/dist/test/ia-icon.test.d.ts +1 -0
  216. package/dist/test/ia-icon.test.js +11 -0
  217. package/dist/test/ia-icon.test.js.map +1 -0
  218. package/dist/test/ia-topnav.test.d.ts +1 -0
  219. package/dist/test/ia-topnav.test.js +232 -0
  220. package/dist/test/ia-topnav.test.js.map +1 -0
  221. package/dist/test/login-button.test.d.ts +1 -0
  222. package/dist/test/login-button.test.js +14 -0
  223. package/dist/test/login-button.test.js.map +1 -0
  224. package/dist/test/media-button.test.d.ts +1 -0
  225. package/dist/test/media-button.test.js +13 -0
  226. package/dist/test/media-button.test.js.map +1 -0
  227. package/dist/test/media-menu.test.d.ts +1 -0
  228. package/dist/test/media-menu.test.js +27 -0
  229. package/dist/test/media-menu.test.js.map +1 -0
  230. package/dist/test/media-slider.test.d.ts +1 -0
  231. package/dist/test/media-slider.test.js +47 -0
  232. package/dist/test/media-slider.test.js.map +1 -0
  233. package/dist/test/more-slider.test.d.ts +1 -0
  234. package/dist/test/more-slider.test.js +17 -0
  235. package/dist/test/more-slider.test.js.map +1 -0
  236. package/dist/test/nav-search.test.d.ts +1 -0
  237. package/dist/test/nav-search.test.js +47 -0
  238. package/dist/test/nav-search.test.js.map +1 -0
  239. package/dist/test/primary-nav.test.d.ts +1 -0
  240. package/dist/test/primary-nav.test.js +65 -0
  241. package/dist/test/primary-nav.test.js.map +1 -0
  242. package/dist/test/save-page-form.test.d.ts +1 -0
  243. package/dist/test/save-page-form.test.js +47 -0
  244. package/dist/test/save-page-form.test.js.map +1 -0
  245. package/dist/test/search-menu.test.d.ts +1 -0
  246. package/dist/test/search-menu.test.js +42 -0
  247. package/dist/test/search-menu.test.js.map +1 -0
  248. package/dist/test/user-menu.test.d.ts +1 -0
  249. package/dist/test/user-menu.test.js +28 -0
  250. package/dist/test/user-menu.test.js.map +1 -0
  251. package/dist/test/wayback-slider.test.d.ts +1 -0
  252. package/dist/test/wayback-slider.test.js +80 -0
  253. package/dist/test/wayback-slider.test.js.map +1 -0
  254. package/eslint.config.mjs +53 -0
  255. package/package.json +47 -37
  256. package/prettier.config.js +9 -0
  257. package/src/assets/img/hamburger.ts +49 -0
  258. package/src/assets/img/{ia-icon.js → ia-icon.ts} +7 -16
  259. package/src/assets/img/{icon-audio.js → icon-audio.ts} +7 -2
  260. package/src/assets/img/icon-close.ts +20 -0
  261. package/src/assets/img/icon-donate-unpadded.ts +19 -0
  262. package/src/assets/img/icon-donate.ts +18 -0
  263. package/src/assets/img/icon-ellipses.ts +19 -0
  264. package/src/assets/img/icon-ia-logo.ts +30 -0
  265. package/src/assets/img/icon-images.ts +19 -0
  266. package/src/assets/img/icon-search.ts +19 -0
  267. package/src/assets/img/icon-software.ts +18 -0
  268. package/src/assets/img/icon-texts.ts +18 -0
  269. package/src/assets/img/{icon-upload-unpadded.js → icon-upload-unpadded.ts} +6 -2
  270. package/src/assets/img/icon-upload.ts +21 -0
  271. package/src/assets/img/icon-user.ts +19 -0
  272. package/src/assets/img/icon-video.ts +19 -0
  273. package/src/assets/img/icon-web.ts +19 -0
  274. package/src/assets/img/icon.ts +8 -0
  275. package/src/assets/img/icons.ts +33 -0
  276. package/src/assets/img/{wordmark-stacked.js → wordmark-stacked.ts} +1 -1
  277. package/src/data/{menus.js → menus.ts} +172 -135
  278. package/src/desktop-subnav.ts +49 -0
  279. package/src/dropdown-menu.ts +105 -0
  280. package/src/{ia-topnav.js → ia-topnav.ts} +130 -127
  281. package/src/lib/formatUrl.ts +2 -0
  282. package/src/lib/{keyboard-navigation.js → keyboard-navigation.ts} +53 -23
  283. package/src/lib/location-handler.ts +5 -0
  284. package/src/lib/makeBooleanString.ts +12 -0
  285. package/src/lib/query-handler.ts +7 -0
  286. package/src/lib/toSentenceCase.ts +10 -0
  287. package/src/{login-button.js → login-button.ts} +27 -31
  288. package/src/{media-button.js → media-button.ts} +39 -49
  289. package/src/media-menu.ts +143 -0
  290. package/src/{media-slider.js → media-slider.ts} +53 -41
  291. package/src/media-subnav.ts +132 -0
  292. package/src/models.ts +114 -0
  293. package/src/more-slider.ts +42 -0
  294. package/src/nav-search.ts +113 -0
  295. package/src/primary-nav.ts +266 -0
  296. package/src/save-page-form.ts +59 -0
  297. package/src/search-menu.ts +156 -0
  298. package/src/signed-out-dropdown.ts +11 -0
  299. package/src/styles/{base.js → base.ts} +2 -2
  300. package/src/styles/{desktop-subnav.js → desktop-subnav.ts} +2 -2
  301. package/src/styles/{dropdown-menu.js → dropdown-menu.ts} +4 -2
  302. package/src/styles/{ia-topnav.js → ia-topnav.ts} +1 -1
  303. package/src/styles/{login-button.js → login-button.ts} +1 -1
  304. package/src/styles/{media-button.js → media-button.ts} +2 -2
  305. package/src/styles/{media-menu.js → media-menu.ts} +1 -1
  306. package/src/styles/{media-slider.js → media-slider.ts} +1 -1
  307. package/src/styles/media-subnav.ts +159 -0
  308. package/src/styles/{more-slider.js → more-slider.ts} +1 -1
  309. package/src/styles/{nav-search.js → nav-search.ts} +2 -2
  310. package/src/styles/{primary-nav.js → primary-nav.ts} +4 -5
  311. package/src/styles/{save-page-form.js → save-page-form.ts} +7 -7
  312. package/src/styles/{search-menu.js → search-menu.ts} +1 -1
  313. package/src/styles/{signed-out-dropdown.js → signed-out-dropdown.ts} +1 -1
  314. package/src/styles/{user-menu.js → user-menu.ts} +1 -1
  315. package/src/styles/{wayback-search.js → wayback-search.ts} +3 -3
  316. package/src/styles/wayback-slider.ts +33 -0
  317. package/src/tracked-element.ts +32 -0
  318. package/src/user-menu.ts +57 -0
  319. package/src/wayback-search.ts +10 -0
  320. package/src/wayback-slider.ts +88 -0
  321. package/ssl/server.crt +22 -0
  322. package/ssl/server.key +28 -0
  323. package/test/assets/img/hamburger.test.ts +18 -0
  324. package/test/assets/img/user.test.ts +15 -0
  325. package/test/data/menus.test.ts +15 -0
  326. package/test/{dropdown-menu.test.js → dropdown-menu.test.ts} +4 -4
  327. package/test/{ia-icon.test.js → ia-icon.test.ts} +6 -4
  328. package/test/ia-topnav.test.ts +344 -0
  329. package/test/login-button.test.ts +19 -0
  330. package/test/media-button.test.ts +19 -0
  331. package/test/{media-menu.test.js → media-menu.test.ts} +14 -12
  332. package/test/media-slider.test.ts +63 -0
  333. package/test/more-slider.test.ts +21 -0
  334. package/test/nav-search.test.ts +70 -0
  335. package/test/primary-nav.test.ts +110 -0
  336. package/test/save-page-form.test.ts +62 -0
  337. package/test/{search-menu.test.js → search-menu.test.ts} +19 -10
  338. package/test/{user-menu.test.js → user-menu.test.ts} +10 -9
  339. package/test/wayback-slider.test.ts +97 -0
  340. package/tsconfig.json +31 -0
  341. package/web-dev-server.config.mjs +32 -0
  342. package/web-test-runner.config.mjs +41 -0
  343. package/.eslintrc +0 -16
  344. package/index.d.ts +0 -109
  345. package/src/assets/img/hamburger.js +0 -38
  346. package/src/assets/img/icon-close.js +0 -16
  347. package/src/assets/img/icon-donate-unpadded.js +0 -16
  348. package/src/assets/img/icon-donate.js +0 -15
  349. package/src/assets/img/icon-ellipses.js +0 -15
  350. package/src/assets/img/icon-ia-logo.js +0 -22
  351. package/src/assets/img/icon-images.js +0 -15
  352. package/src/assets/img/icon-search.js +0 -15
  353. package/src/assets/img/icon-software.js +0 -15
  354. package/src/assets/img/icon-texts.js +0 -15
  355. package/src/assets/img/icon-upload.js +0 -15
  356. package/src/assets/img/icon-user.js +0 -15
  357. package/src/assets/img/icon-video.js +0 -15
  358. package/src/assets/img/icon-web.js +0 -15
  359. package/src/assets/img/icon.js +0 -18
  360. package/src/assets/img/icons.js +0 -33
  361. package/src/desktop-subnav.js +0 -45
  362. package/src/dropdown-menu.js +0 -110
  363. package/src/lib/formatUrl.js +0 -1
  364. package/src/lib/location-handler.js +0 -5
  365. package/src/lib/query-handler.js +0 -7
  366. package/src/lib/toSentenceCase.js +0 -8
  367. package/src/media-menu.js +0 -154
  368. package/src/media-subnav.js +0 -112
  369. package/src/more-slider.js +0 -33
  370. package/src/nav-search.js +0 -111
  371. package/src/primary-nav.js +0 -258
  372. package/src/save-page-form.js +0 -59
  373. package/src/search-menu.js +0 -145
  374. package/src/signed-out-dropdown.js +0 -10
  375. package/src/styles/media-subnav.js +0 -156
  376. package/src/styles/wayback-slider.js +0 -30
  377. package/src/tracked-element.js +0 -29
  378. package/src/user-menu.js +0 -56
  379. package/src/wayback-search.js +0 -18
  380. package/src/wayback-slider.js +0 -87
  381. package/test/assets/img/hamburger.test.js +0 -15
  382. package/test/assets/img/user.test.js +0 -15
  383. package/test/data/menus.test.js +0 -19
  384. package/test/ia-topnav.test.js +0 -273
  385. package/test/login-button.test.js +0 -15
  386. package/test/media-button.test.js +0 -19
  387. package/test/media-slider.test.js +0 -57
  388. package/test/more-slider.test.js +0 -13
  389. package/test/nav-search.test.js +0 -61
  390. package/test/primary-nav.test.js +0 -82
  391. package/test/save-page-form.test.js +0 -35
  392. package/test/wayback-slider.test.js +0 -80
  393. /package/{index.js → index.ts} +0 -0
@@ -0,0 +1,16 @@
1
+ import TrackedElement from './tracked-element';
2
+ import { IATopNavConfig } from './models';
3
+ export declare class LoginButton extends TrackedElement {
4
+ baseHost: string;
5
+ config: IATopNavConfig;
6
+ openMenu: string;
7
+ private dropdownTabIndex;
8
+ static get styles(): import("lit").CSSResult;
9
+ get signupPath(): string;
10
+ get loginPath(): string;
11
+ get analyticsEvent(): string;
12
+ get menuOpened(): boolean;
13
+ get avatarClass(): string;
14
+ toggleDropdown(e: Event): void;
15
+ render(): import("lit").TemplateResult<1>;
16
+ }
@@ -0,0 +1,83 @@
1
+ import { __decorate } from "tslib";
2
+ import { html } from 'lit';
3
+ import TrackedElement from './tracked-element';
4
+ import icons from './assets/img/icons';
5
+ import loginButtonCSS from './styles/login-button';
6
+ import formatUrl from './lib/formatUrl';
7
+ import { customElement, property, state } from 'lit/decorators.js';
8
+ import { defaultTopNavConfig } from './data/menus';
9
+ let LoginButton = class LoginButton extends TrackedElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.baseHost = '';
13
+ this.config = defaultTopNavConfig;
14
+ this.openMenu = '';
15
+ this.dropdownTabIndex = '';
16
+ }
17
+ static get styles() {
18
+ return loginButtonCSS;
19
+ }
20
+ get signupPath() {
21
+ return formatUrl('/account/signup', this.baseHost);
22
+ }
23
+ get loginPath() {
24
+ return formatUrl('/account/login', this.baseHost);
25
+ }
26
+ get analyticsEvent() {
27
+ var _a;
28
+ return `${(_a = this.config) === null || _a === void 0 ? void 0 : _a.eventCategory}|NavLoginIcon`;
29
+ }
30
+ get menuOpened() {
31
+ return this.openMenu === 'login';
32
+ }
33
+ get avatarClass() {
34
+ return `dropdown-toggle${this.menuOpened ? ' active' : ''}`;
35
+ }
36
+ toggleDropdown(e) {
37
+ e.preventDefault();
38
+ this.trackClick(e);
39
+ this.dropdownTabIndex = this.menuOpened ? '' : '-1';
40
+ this.dispatchEvent(new CustomEvent('menuToggled', {
41
+ bubbles: true,
42
+ composed: true,
43
+ detail: {
44
+ menuName: 'login',
45
+ },
46
+ }));
47
+ }
48
+ render() {
49
+ return html `
50
+ <div class="logged-out-toolbar">
51
+ <a
52
+ class="${this.avatarClass}"
53
+ @click=${this.toggleDropdown}
54
+ data-event-click-tracking="${this.analyticsEvent}"
55
+ >
56
+ ${icons.user}
57
+ </a>
58
+ <span>
59
+ <a href="${this.signupPath}">Sign up</a>
60
+ |
61
+ <a href="${this.loginPath}">Log in</a>
62
+ </span>
63
+ </div>
64
+ `;
65
+ }
66
+ };
67
+ __decorate([
68
+ property({ type: String })
69
+ ], LoginButton.prototype, "baseHost", void 0);
70
+ __decorate([
71
+ property({ type: Object })
72
+ ], LoginButton.prototype, "config", void 0);
73
+ __decorate([
74
+ property({ type: String })
75
+ ], LoginButton.prototype, "openMenu", void 0);
76
+ __decorate([
77
+ state()
78
+ ], LoginButton.prototype, "dropdownTabIndex", void 0);
79
+ LoginButton = __decorate([
80
+ customElement('login-button')
81
+ ], LoginButton);
82
+ export { LoginButton };
83
+ //# sourceMappingURL=login-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-button.js","sourceRoot":"","sources":["../../src/login-button.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAG5C,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,cAAc;IAAxC;;QACuB,aAAQ,GAAG,EAAE,CAAC;QACd,WAAM,GAAmB,mBAAmB,CAAC;QAC7C,aAAQ,GAAG,EAAE,CAAC;QAEzB,qBAAgB,GAAG,EAAE,CAAC;IA2DzC,CAAC;IAzDC,MAAM,KAAK,MAAM;QACf,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,SAAS;QACX,OAAO,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,cAAc;;QAChB,OAAO,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,aAAa,eAAe,CAAC;IACtD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC;IACnC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,kBAAkB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,cAAc,CAAC,CAAQ;QACrB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,aAAa,EAAE;YAC7B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,QAAQ,EAAE,OAAO;aAClB;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;mBAGI,IAAI,CAAC,WAAW;mBAChB,IAAI,CAAC,cAAc;uCACC,IAAI,CAAC,cAAc;;YAE9C,KAAK,CAAC,IAAI;;;qBAGD,IAAI,CAAC,UAAU;;qBAEf,IAAI,CAAC,SAAS;;;KAG9B,CAAC;IACJ,CAAC;CACF,CAAA;AA/D6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAe;AACd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAA8C;AAC7C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAe;AAEzB;IAAhB,KAAK,EAAE;qDAA+B;AAL5B,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAgEvB","sourcesContent":["import { html } from 'lit';\nimport TrackedElement from './tracked-element';\nimport icons from './assets/img/icons';\nimport loginButtonCSS from './styles/login-button';\nimport formatUrl from './lib/formatUrl';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { IATopNavConfig } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('login-button')\nexport class LoginButton extends TrackedElement {\n @property({ type: String }) baseHost = '';\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) openMenu = '';\n\n @state() private dropdownTabIndex = '';\n\n static get styles() {\n return loginButtonCSS;\n }\n\n get signupPath() {\n return formatUrl('/account/signup', this.baseHost);\n }\n\n get loginPath() {\n return formatUrl('/account/login', this.baseHost);\n }\n\n get analyticsEvent() {\n return `${this.config?.eventCategory}|NavLoginIcon`;\n }\n\n get menuOpened() {\n return this.openMenu === 'login';\n }\n\n get avatarClass() {\n return `dropdown-toggle${this.menuOpened ? ' active' : ''}`;\n }\n\n toggleDropdown(e: Event) {\n e.preventDefault();\n this.trackClick(e);\n this.dropdownTabIndex = this.menuOpened ? '' : '-1';\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n bubbles: true,\n composed: true,\n detail: {\n menuName: 'login',\n },\n }),\n );\n }\n\n render() {\n return html`\n <div class=\"logged-out-toolbar\">\n <a\n class=\"${this.avatarClass}\"\n @click=${this.toggleDropdown}\n data-event-click-tracking=\"${this.analyticsEvent}\"\n >\n ${icons.user}\n </a>\n <span>\n <a href=\"${this.signupPath}\">Sign up</a>\n |\n <a href=\"${this.loginPath}\">Log in</a>\n </span>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { TemplateResult } from 'lit';
2
+ import TrackedElement from './tracked-element';
3
+ import { IATopNavConfig } from './models';
4
+ export declare class MediaButton extends TrackedElement {
5
+ config: IATopNavConfig;
6
+ icon: string;
7
+ href: string;
8
+ label: string;
9
+ mediatype: string;
10
+ openMenu: string;
11
+ selected: boolean;
12
+ followable: boolean;
13
+ static get styles(): import("lit").CSSResult;
14
+ static get icons(): Record<string, TemplateResult>;
15
+ onClick(e: Event): void;
16
+ dispatchMenuToggledEvent(): void;
17
+ dispatchMediaTypeSelectedEvent(): void;
18
+ get buttonClass(): "" | "selected";
19
+ get tooltipPrefix(): "Collapse" | "Expand";
20
+ get iconClass(): "" | "active";
21
+ get analyticsEvent(): string;
22
+ get menuItem(): TemplateResult<1>;
23
+ render(): TemplateResult<1>;
24
+ }
@@ -0,0 +1,119 @@
1
+ var MediaButton_1;
2
+ import { __decorate } from "tslib";
3
+ import { html } from 'lit';
4
+ import TrackedElement from './tracked-element';
5
+ import icons from './assets/img/icons';
6
+ import toSentenceCase from './lib/toSentenceCase';
7
+ import mediaButtonCSS from './styles/media-button';
8
+ import { customElement, property } from 'lit/decorators.js';
9
+ import { defaultTopNavConfig } from './data/menus';
10
+ let MediaButton = MediaButton_1 = class MediaButton extends TrackedElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.config = defaultTopNavConfig;
14
+ this.icon = '';
15
+ this.href = '';
16
+ this.label = '';
17
+ this.mediatype = '';
18
+ this.openMenu = '';
19
+ this.selected = false;
20
+ this.followable = false;
21
+ }
22
+ static get styles() {
23
+ return mediaButtonCSS;
24
+ }
25
+ static get icons() {
26
+ return icons;
27
+ }
28
+ onClick(e) {
29
+ this.trackClick(e);
30
+ e.preventDefault();
31
+ // On desktop viewport widths, the media subnav is always visible. To
32
+ // ensure the media subnav is open on mobile if the viewport is
33
+ // resized, the openMenu needs to be set to 'media'.
34
+ if (this.openMenu !== 'media') {
35
+ this.dispatchMenuToggledEvent();
36
+ }
37
+ this.dispatchMediaTypeSelectedEvent();
38
+ }
39
+ dispatchMenuToggledEvent() {
40
+ this.dispatchEvent(new CustomEvent('menuToggled', {
41
+ bubbles: true,
42
+ composed: true,
43
+ detail: {
44
+ menuName: 'media',
45
+ },
46
+ }));
47
+ }
48
+ dispatchMediaTypeSelectedEvent() {
49
+ this.dispatchEvent(new CustomEvent('mediaTypeSelected', {
50
+ bubbles: true,
51
+ composed: true,
52
+ detail: {
53
+ mediatype: this.mediatype,
54
+ },
55
+ }));
56
+ }
57
+ get buttonClass() {
58
+ return this.selected ? 'selected' : '';
59
+ }
60
+ get tooltipPrefix() {
61
+ return this.selected ? 'Collapse' : 'Expand';
62
+ }
63
+ get iconClass() {
64
+ return this.selected ? 'active' : '';
65
+ }
66
+ get analyticsEvent() {
67
+ return `${this.config.eventCategory}|NavMenu${toSentenceCase(this.mediatype)}`;
68
+ }
69
+ get menuItem() {
70
+ return html `
71
+ <span class="icon ${this.iconClass}">
72
+ ${MediaButton_1.icons[this.icon]}
73
+ </span>
74
+ <span class="label">${this.label}</span>
75
+ `;
76
+ }
77
+ render() {
78
+ return html `
79
+ <a
80
+ href="${this.href}"
81
+ class="menu-item ${this.mediatype} ${this.buttonClass}"
82
+ @click=${this.followable ? this.trackClick : this.onClick}
83
+ data-event-click-tracking="${this.analyticsEvent}"
84
+ title="${this.tooltipPrefix} ${this.mediatype} menu"
85
+ >
86
+ ${this.menuItem}
87
+ </a>
88
+ `;
89
+ }
90
+ };
91
+ __decorate([
92
+ property({ type: Object })
93
+ ], MediaButton.prototype, "config", void 0);
94
+ __decorate([
95
+ property({ type: String })
96
+ ], MediaButton.prototype, "icon", void 0);
97
+ __decorate([
98
+ property({ type: String })
99
+ ], MediaButton.prototype, "href", void 0);
100
+ __decorate([
101
+ property({ type: String })
102
+ ], MediaButton.prototype, "label", void 0);
103
+ __decorate([
104
+ property({ type: String })
105
+ ], MediaButton.prototype, "mediatype", void 0);
106
+ __decorate([
107
+ property({ type: String })
108
+ ], MediaButton.prototype, "openMenu", void 0);
109
+ __decorate([
110
+ property({ type: Boolean })
111
+ ], MediaButton.prototype, "selected", void 0);
112
+ __decorate([
113
+ property({ type: Boolean })
114
+ ], MediaButton.prototype, "followable", void 0);
115
+ MediaButton = MediaButton_1 = __decorate([
116
+ customElement('media-button')
117
+ ], MediaButton);
118
+ export { MediaButton };
119
+ //# sourceMappingURL=media-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-button.js","sourceRoot":"","sources":["../../src/media-button.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from 'lit';\nimport TrackedElement from './tracked-element';\nimport icons from './assets/img/icons';\nimport toSentenceCase from './lib/toSentenceCase';\nimport mediaButtonCSS from './styles/media-button';\nimport { customElement, property } from 'lit/decorators.js';\nimport { IATopNavConfig } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('media-button')\nexport class MediaButton extends TrackedElement {\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) icon = '';\n @property({ type: String }) href = '';\n @property({ type: String }) label = '';\n @property({ type: String }) mediatype = '';\n @property({ type: String }) openMenu = '';\n @property({ type: Boolean }) selected = false;\n @property({ type: Boolean }) followable = false;\n\n static get styles() {\n return mediaButtonCSS;\n }\n\n static get icons(): Record<string, TemplateResult> {\n return icons;\n }\n\n onClick(e: Event) {\n this.trackClick(e);\n e.preventDefault();\n // On desktop viewport widths, the media subnav is always visible. To\n // ensure the media subnav is open on mobile if the viewport is\n // resized, the openMenu needs to be set to 'media'.\n if (this.openMenu !== 'media') {\n this.dispatchMenuToggledEvent();\n }\n this.dispatchMediaTypeSelectedEvent();\n }\n\n dispatchMenuToggledEvent() {\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n bubbles: true,\n composed: true,\n detail: {\n menuName: 'media',\n },\n }),\n );\n }\n\n dispatchMediaTypeSelectedEvent() {\n this.dispatchEvent(\n new CustomEvent('mediaTypeSelected', {\n bubbles: true,\n composed: true,\n detail: {\n mediatype: this.mediatype,\n },\n }),\n );\n }\n\n get buttonClass() {\n return this.selected ? 'selected' : '';\n }\n\n get tooltipPrefix() {\n return this.selected ? 'Collapse' : 'Expand';\n }\n\n get iconClass() {\n return this.selected ? 'active' : '';\n }\n\n get analyticsEvent() {\n return `${this.config.eventCategory}|NavMenu${toSentenceCase(this.mediatype)}`;\n }\n\n get menuItem() {\n return html`\n <span class=\"icon ${this.iconClass}\">\n ${MediaButton.icons[this.icon]}\n </span>\n <span class=\"label\">${this.label}</span>\n `;\n }\n\n render() {\n return html`\n <a\n href=\"${this.href}\"\n class=\"menu-item ${this.mediatype} ${this.buttonClass}\"\n @click=${this.followable ? this.trackClick : this.onClick}\n data-event-click-tracking=\"${this.analyticsEvent}\"\n title=\"${this.tooltipPrefix} ${this.mediatype} menu\"\n >\n ${this.menuItem}\n </a>\n `;\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ import './media-button';
3
+ import { MediaButton } from './media-button';
4
+ import { IATopNavConfig } from './models';
5
+ export declare class MediaMenu extends LitElement {
6
+ baseHost: string;
7
+ config: IATopNavConfig;
8
+ openMenu: string;
9
+ selectedMenuOption: string;
10
+ currentTab: {
11
+ moveTo: string;
12
+ } | undefined;
13
+ mediaButtons?: MediaButton[];
14
+ static get styles(): import("lit").CSSResult;
15
+ updated(props: PropertyValues): void;
16
+ get mediaMenuOptionsTemplate(): import("lit").TemplateResult<1>[];
17
+ get menuOpened(): boolean;
18
+ get menuClass(): "closed" | "open";
19
+ render(): import("lit").TemplateResult<1>;
20
+ }
@@ -0,0 +1,148 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import { customElement, property, queryAll } from 'lit/decorators.js';
4
+ import { defaultTopNavConfig } from './data/menus';
5
+ import formatUrl from './lib/formatUrl';
6
+ import './media-button';
7
+ import mediaMenuCSS from './styles/media-menu';
8
+ const menuSelection = [
9
+ {
10
+ icon: 'web',
11
+ menu: 'web',
12
+ href: 'https://web.archive.org',
13
+ label: 'Wayback Machine',
14
+ },
15
+ {
16
+ icon: 'texts',
17
+ menu: 'texts',
18
+ href: '/details/texts',
19
+ label: 'Texts',
20
+ },
21
+ {
22
+ icon: 'video',
23
+ menu: 'video',
24
+ href: '/details/movies',
25
+ label: 'Video',
26
+ },
27
+ {
28
+ icon: 'audio',
29
+ menu: 'audio',
30
+ href: '/details/audio',
31
+ label: 'Audio',
32
+ },
33
+ {
34
+ icon: 'software',
35
+ menu: 'software',
36
+ href: '/details/software',
37
+ label: 'Software',
38
+ },
39
+ {
40
+ icon: 'images',
41
+ menu: 'images',
42
+ href: '/details/image',
43
+ label: 'Images',
44
+ },
45
+ {
46
+ icon: 'donate',
47
+ menu: 'donate',
48
+ href: '/donate/',
49
+ label: 'Donate',
50
+ followable: true,
51
+ },
52
+ {
53
+ icon: 'ellipses',
54
+ menu: 'more',
55
+ href: '/about/',
56
+ label: 'More',
57
+ },
58
+ ];
59
+ let MediaMenu = class MediaMenu extends LitElement {
60
+ constructor() {
61
+ super(...arguments);
62
+ this.baseHost = '';
63
+ this.config = defaultTopNavConfig;
64
+ this.openMenu = '';
65
+ this.selectedMenuOption = '';
66
+ }
67
+ static get styles() {
68
+ return mediaMenuCSS;
69
+ }
70
+ updated(props) {
71
+ var _a;
72
+ if (props.has('currentTab')) {
73
+ const mediaButtons = Array.from((_a = this.mediaButtons) !== null && _a !== void 0 ? _a : []);
74
+ mediaButtons.map((button, index) => {
75
+ var _a, _b, _c, _d;
76
+ const linkItem = (_a = button.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('a.menu-item');
77
+ if (linkItem) {
78
+ if (linkItem.classList.contains(`${this.selectedMenuOption}`)) {
79
+ linkItem.classList.remove('selected');
80
+ linkItem.blur();
81
+ const newFocusIndex = ((_b = this.currentTab) === null || _b === void 0 ? void 0 : _b.moveTo) === 'next' ? index + 1 : index - 1;
82
+ ((_d = (_c = mediaButtons[newFocusIndex]) === null || _c === void 0 ? void 0 : _c.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('a.menu-item')).focus();
83
+ }
84
+ }
85
+ });
86
+ }
87
+ }
88
+ get mediaMenuOptionsTemplate() {
89
+ const buttons = menuSelection.map(({ icon, menu, label, href, followable }) => {
90
+ const selected = this.selectedMenuOption === menu;
91
+ return html `
92
+ <media-button
93
+ .config=${this.config}
94
+ .icon=${icon}
95
+ .href=${formatUrl(href, this.baseHost)}
96
+ ?followable=${followable}
97
+ .label=${label}
98
+ .mediatype=${menu}
99
+ .openMenu=${this.openMenu}
100
+ .selected=${selected}
101
+ .selectedMenuOption=${this.selectedMenuOption}
102
+ data-mediatype="${menu}"
103
+ ></media-button>
104
+ `;
105
+ });
106
+ return buttons;
107
+ }
108
+ get menuOpened() {
109
+ return this.openMenu === 'media';
110
+ }
111
+ get menuClass() {
112
+ return this.menuOpened ? 'open' : 'closed';
113
+ }
114
+ render() {
115
+ return html `
116
+ <div class="media-menu-container ${this.menuClass}">
117
+ <div class="overflow-clip">
118
+ <nav class="media-menu-inner" aria-expanded="${this.menuOpened}">
119
+ <div class="menu-group">${this.mediaMenuOptionsTemplate}</div>
120
+ </nav>
121
+ </div>
122
+ </div>
123
+ `;
124
+ }
125
+ };
126
+ __decorate([
127
+ property({ type: String })
128
+ ], MediaMenu.prototype, "baseHost", void 0);
129
+ __decorate([
130
+ property({ type: Object })
131
+ ], MediaMenu.prototype, "config", void 0);
132
+ __decorate([
133
+ property({ type: String })
134
+ ], MediaMenu.prototype, "openMenu", void 0);
135
+ __decorate([
136
+ property({ type: String })
137
+ ], MediaMenu.prototype, "selectedMenuOption", void 0);
138
+ __decorate([
139
+ property({ type: Object })
140
+ ], MediaMenu.prototype, "currentTab", void 0);
141
+ __decorate([
142
+ queryAll('media-button')
143
+ ], MediaMenu.prototype, "mediaButtons", void 0);
144
+ MediaMenu = __decorate([
145
+ customElement('media-menu')
146
+ ], MediaMenu);
147
+ export { MediaMenu };
148
+ //# sourceMappingURL=media-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-menu.js","sourceRoot":"","sources":["../../src/media-menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkB,IAAI,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,gBAAgB,CAAC;AAGxB,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAE/C,MAAM,aAAa,GAAG;IACpB;QACE,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,iBAAiB;KACzB;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;KACf;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,OAAO;KACf;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;KACf;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,UAAU;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;KACd;CACF,CAAC;AAGK,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QACuB,aAAQ,GAAG,EAAE,CAAC;QACd,WAAM,GAAmB,mBAAmB,CAAC;QAC7C,aAAQ,GAAG,EAAE,CAAC;QACd,uBAAkB,GAAG,EAAE,CAAC;IA2EtD,CAAC;IAtEC,MAAM,KAAK,MAAM;QACf,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,KAAqB;;QAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,YAAY,mCAAI,EAAE,CAAC,CAAC;YAEzD,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;;gBACjC,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,UAAU,0CAAE,aAAa,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;wBAC9D,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBACrC,QAAwB,CAAC,IAAI,EAAE,CAAC;wBAEjC,MAAM,aAAa,GACjB,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,MAAK,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;wBAC7D,CACE,MAAA,MAAA,YAAY,CAAC,aAAa,CAAC,0CAAE,UAAU,0CAAE,aAAa,CACpD,aAAa,CAEhB,CAAA,CAAC,KAAK,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,wBAAwB;QAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAC/B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC;YAClD,OAAO,IAAI,CAAA;;sBAEG,IAAI,CAAC,MAAM;oBACb,IAAI;oBACJ,SAAS,CAAC,IAAyB,EAAE,IAAI,CAAC,QAAQ,CAAC;0BAC7C,UAAU;qBACf,KAAK;yBACD,IAAI;wBACL,IAAI,CAAC,QAAQ;wBACb,QAAQ;kCACE,IAAI,CAAC,kBAAkB;8BAC3B,IAAI;;SAEzB,CAAC;QACJ,CAAC,CACF,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;yCAC0B,IAAI,CAAC,SAAS;;yDAEE,IAAI,CAAC,UAAU;sCAClC,IAAI,CAAC,wBAAwB;;;;KAI9D,CAAC;IACJ,CAAC;CACF,CAAA;AA9E6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAAe;AACd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAA8C;AAC7C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAAe;AACd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAyB;AACxB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAA4C;AAE7C;IAAzB,QAAQ,CAAC,cAAc,CAAC;+CAA8B;AAP5C,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CA+ErB","sourcesContent":["import { LitElement, PropertyValues, html } from 'lit';\nimport { customElement, property, queryAll } from 'lit/decorators.js';\n\nimport { defaultTopNavConfig } from './data/menus';\nimport formatUrl from './lib/formatUrl';\nimport './media-button';\nimport { MediaButton } from './media-button';\nimport { IATopNavConfig } from './models';\nimport mediaMenuCSS from './styles/media-menu';\n\nconst menuSelection = [\n {\n icon: 'web',\n menu: 'web',\n href: 'https://web.archive.org',\n label: 'Wayback Machine',\n },\n {\n icon: 'texts',\n menu: 'texts',\n href: '/details/texts',\n label: 'Texts',\n },\n {\n icon: 'video',\n menu: 'video',\n href: '/details/movies',\n label: 'Video',\n },\n {\n icon: 'audio',\n menu: 'audio',\n href: '/details/audio',\n label: 'Audio',\n },\n {\n icon: 'software',\n menu: 'software',\n href: '/details/software',\n label: 'Software',\n },\n {\n icon: 'images',\n menu: 'images',\n href: '/details/image',\n label: 'Images',\n },\n {\n icon: 'donate',\n menu: 'donate',\n href: '/donate/',\n label: 'Donate',\n followable: true,\n },\n {\n icon: 'ellipses',\n menu: 'more',\n href: '/about/',\n label: 'More',\n },\n];\n\n@customElement('media-menu')\nexport class MediaMenu extends LitElement {\n @property({ type: String }) baseHost = '';\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) openMenu = '';\n @property({ type: String }) selectedMenuOption = '';\n @property({ type: Object }) currentTab: { moveTo: string } | undefined;\n\n @queryAll('media-button') mediaButtons?: MediaButton[];\n\n static get styles() {\n return mediaMenuCSS;\n }\n\n updated(props: PropertyValues) {\n if (props.has('currentTab')) {\n const mediaButtons = Array.from(this.mediaButtons ?? []);\n\n mediaButtons.map((button, index) => {\n const linkItem = button.shadowRoot?.querySelector('a.menu-item');\n if (linkItem) {\n if (linkItem.classList.contains(`${this.selectedMenuOption}`)) {\n linkItem.classList.remove('selected');\n (linkItem as HTMLElement).blur();\n\n const newFocusIndex =\n this.currentTab?.moveTo === 'next' ? index + 1 : index - 1;\n (\n mediaButtons[newFocusIndex]?.shadowRoot?.querySelector(\n 'a.menu-item',\n ) as HTMLElement\n ).focus();\n }\n }\n });\n }\n }\n\n get mediaMenuOptionsTemplate() {\n const buttons = menuSelection.map(\n ({ icon, menu, label, href, followable }) => {\n const selected = this.selectedMenuOption === menu;\n return html`\n <media-button\n .config=${this.config}\n .icon=${icon}\n .href=${formatUrl(href as string & Location, this.baseHost)}\n ?followable=${followable}\n .label=${label}\n .mediatype=${menu}\n .openMenu=${this.openMenu}\n .selected=${selected}\n .selectedMenuOption=${this.selectedMenuOption}\n data-mediatype=\"${menu}\"\n ></media-button>\n `;\n },\n );\n return buttons;\n }\n\n get menuOpened() {\n return this.openMenu === 'media';\n }\n\n get menuClass() {\n return this.menuOpened ? 'open' : 'closed';\n }\n\n render() {\n return html`\n <div class=\"media-menu-container ${this.menuClass}\">\n <div class=\"overflow-clip\">\n <nav class=\"media-menu-inner\" aria-expanded=\"${this.menuOpened}\">\n <div class=\"menu-group\">${this.mediaMenuOptionsTemplate}</div>\n </nav>\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ import './media-subnav';
3
+ import { IATopNavConfig, IATopNavMenuConfig } from './models';
4
+ export declare class MediaSlider extends LitElement {
5
+ baseHost: string;
6
+ config: IATopNavConfig;
7
+ mediaSliderOpen: boolean;
8
+ menus: IATopNavMenuConfig;
9
+ selectedMenuOption: string;
10
+ private previousKeydownListener;
11
+ static get styles(): import("lit").CSSResult;
12
+ updated(props: PropertyValues): void;
13
+ shouldUpdate(): boolean;
14
+ render(): import("lit").TemplateResult<1>;
15
+ }
@@ -0,0 +1,139 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import './media-subnav';
4
+ import mediaSliderCSS from './styles/media-slider';
5
+ import KeyboardNavigation from './lib/keyboard-navigation';
6
+ import { customElement, property } from 'lit/decorators.js';
7
+ import { buildTopNavMenus, defaultTopNavConfig } from './data/menus';
8
+ let MediaSlider = class MediaSlider extends LitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.baseHost = '';
12
+ this.config = defaultTopNavConfig;
13
+ this.mediaSliderOpen = false;
14
+ this.menus = buildTopNavMenus();
15
+ this.selectedMenuOption = 'texts';
16
+ }
17
+ static get styles() {
18
+ return mediaSliderCSS;
19
+ }
20
+ updated(props) {
21
+ var _a;
22
+ if (props.has('selectedMenuOption') && this.selectedMenuOption) {
23
+ const container = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.has-focused'); //?.shadowRoot;
24
+ if (container) {
25
+ const keyboardNavigation = new KeyboardNavigation(container, this.selectedMenuOption);
26
+ this.addEventListener('keydown', keyboardNavigation.handleKeyDown);
27
+ if (this.previousKeydownListener) {
28
+ this.removeEventListener('keydown', this.previousKeydownListener);
29
+ }
30
+ this.previousKeydownListener = keyboardNavigation.handleKeyDown;
31
+ }
32
+ }
33
+ }
34
+ shouldUpdate() {
35
+ const scrollPane = this.shadowRoot
36
+ ? this.shadowRoot.querySelector('.information-menu')
37
+ : null;
38
+ if (scrollPane) {
39
+ scrollPane.scrollTop = 0;
40
+ }
41
+ return true;
42
+ }
43
+ render() {
44
+ const sliderDetailsClass = this.mediaSliderOpen ? 'open' : 'closed';
45
+ return html `
46
+ <div class="media-slider-container">
47
+ <div class="overflow-clip ${sliderDetailsClass}">
48
+ <div class="information-menu ${sliderDetailsClass}">
49
+ <div class="info-box">
50
+ <media-subnav
51
+ .baseHost=${this.baseHost}
52
+ .config=${this.config}
53
+ class="${this.selectedMenuOption === 'audio'
54
+ ? 'has-focused'
55
+ : 'hidden'}"
56
+ menu="audio"
57
+ .menuItems=${this.menus.audio}
58
+ ></media-subnav>
59
+ <media-subnav
60
+ .baseHost=${this.baseHost}
61
+ .config=${this.config}
62
+ class="${this.selectedMenuOption === 'images'
63
+ ? 'has-focused'
64
+ : 'hidden'}"
65
+ menu="images"
66
+ .menuItems=${this.menus.images}
67
+ ></media-subnav>
68
+ <media-subnav
69
+ .baseHost=${this.baseHost}
70
+ .config=${this.config}
71
+ class="${this.selectedMenuOption === 'software'
72
+ ? 'has-focused'
73
+ : 'hidden'}"
74
+ menu="software"
75
+ .menuItems=${this.menus.software}
76
+ ></media-subnav>
77
+ <media-subnav
78
+ .baseHost=${this.baseHost}
79
+ .config=${this.config}
80
+ class="${this.selectedMenuOption === 'texts'
81
+ ? 'has-focused'
82
+ : 'hidden'}"
83
+ menu="texts"
84
+ .menuItems=${this.menus.texts}
85
+ ></media-subnav>
86
+ <media-subnav
87
+ .baseHost=${this.baseHost}
88
+ .config=${this.config}
89
+ class="${this.selectedMenuOption === 'video'
90
+ ? 'has-focused'
91
+ : 'hidden'}"
92
+ menu="video"
93
+ .menuItems=${this.menus.video}
94
+ ></media-subnav>
95
+ <media-subnav
96
+ .baseHost=${this.baseHost}
97
+ .config=${this.config}
98
+ class="${this.selectedMenuOption === 'web'
99
+ ? 'has-focused'
100
+ : 'hidden'}"
101
+ menu="web"
102
+ .menuItems=${this.menus.web}
103
+ ></media-subnav>
104
+ <media-subnav
105
+ .baseHost=${this.baseHost}
106
+ .config=${this.config}
107
+ class="${this.selectedMenuOption === 'more'
108
+ ? 'has-focused'
109
+ : 'hidden'}"
110
+ menu="more"
111
+ .menuItems=${this.menus.web}
112
+ ></media-subnav>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ `;
118
+ }
119
+ };
120
+ __decorate([
121
+ property({ type: String })
122
+ ], MediaSlider.prototype, "baseHost", void 0);
123
+ __decorate([
124
+ property({ type: Object })
125
+ ], MediaSlider.prototype, "config", void 0);
126
+ __decorate([
127
+ property({ type: Boolean })
128
+ ], MediaSlider.prototype, "mediaSliderOpen", void 0);
129
+ __decorate([
130
+ property({ type: Object })
131
+ ], MediaSlider.prototype, "menus", void 0);
132
+ __decorate([
133
+ property({ type: String })
134
+ ], MediaSlider.prototype, "selectedMenuOption", void 0);
135
+ MediaSlider = __decorate([
136
+ customElement('media-slider')
137
+ ], MediaSlider);
138
+ export { MediaSlider };
139
+ //# sourceMappingURL=media-slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-slider.js","sourceRoot":"","sources":["../../src/media-slider.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyValues, html } from 'lit';\nimport './media-subnav';\nimport mediaSliderCSS from './styles/media-slider';\nimport KeyboardNavigation from './lib/keyboard-navigation';\nimport { customElement, property } from 'lit/decorators.js';\nimport { IATopNavConfig, IATopNavMenuConfig } from './models';\nimport { buildTopNavMenus, defaultTopNavConfig } from './data/menus';\n\n@customElement('media-slider')\nexport class MediaSlider extends LitElement {\n @property({ type: String }) baseHost = '';\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: Boolean }) mediaSliderOpen = false;\n @property({ type: Object }) menus: IATopNavMenuConfig = buildTopNavMenus();\n @property({ type: String }) selectedMenuOption = 'texts';\n\n private previousKeydownListener: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((this: HTMLElement, ev: KeyboardEvent) => any) | undefined;\n\n static get styles() {\n return mediaSliderCSS;\n }\n\n updated(props: PropertyValues) {\n if (props.has('selectedMenuOption') && this.selectedMenuOption) {\n const container = this.shadowRoot?.querySelector('.has-focused'); //?.shadowRoot;\n\n if (container) {\n const keyboardNavigation = new KeyboardNavigation(\n container as HTMLElement,\n this.selectedMenuOption,\n );\n this.addEventListener('keydown', keyboardNavigation.handleKeyDown);\n if (this.previousKeydownListener) {\n this.removeEventListener('keydown', this.previousKeydownListener);\n }\n this.previousKeydownListener = keyboardNavigation.handleKeyDown;\n }\n }\n }\n\n shouldUpdate() {\n const scrollPane = this.shadowRoot\n ? this.shadowRoot.querySelector('.information-menu')\n : null;\n\n if (scrollPane) {\n scrollPane.scrollTop = 0;\n }\n return true;\n }\n\n render() {\n const sliderDetailsClass = this.mediaSliderOpen ? 'open' : 'closed';\n\n return html`\n <div class=\"media-slider-container\">\n <div class=\"overflow-clip ${sliderDetailsClass}\">\n <div class=\"information-menu ${sliderDetailsClass}\">\n <div class=\"info-box\">\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'audio'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"audio\"\n .menuItems=${this.menus.audio}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'images'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"images\"\n .menuItems=${this.menus.images}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'software'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"software\"\n .menuItems=${this.menus.software}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'texts'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"texts\"\n .menuItems=${this.menus.texts}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'video'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"video\"\n .menuItems=${this.menus.video}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'web'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"web\"\n .menuItems=${this.menus.web}\n ></media-subnav>\n <media-subnav\n .baseHost=${this.baseHost}\n .config=${this.config}\n class=\"${this.selectedMenuOption === 'more'\n ? 'has-focused'\n : 'hidden'}\"\n menu=\"more\"\n .menuItems=${this.menus.web}\n ></media-subnav>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import TrackedElement from './tracked-element';
2
+ import './wayback-slider';
3
+ import './more-slider';
4
+ import { IATopNavConfig, IATopNavLink, IATopNavMediaMenu } from './models';
5
+ export declare class MediaSubnav extends TrackedElement {
6
+ baseHost: string;
7
+ config: IATopNavConfig;
8
+ menu: '' | 'web' | 'more' | 'audio' | 'images' | 'software' | 'texts' | 'video';
9
+ menuItems: IATopNavMediaMenu;
10
+ private links;
11
+ static get styles(): import("lit").CSSResult[];
12
+ shouldUpdate(): boolean;
13
+ static get defaultLinks(): IATopNavMediaMenu;
14
+ analyticsEvent(title: string): string;
15
+ get iconLinks(): import("lit").TemplateResult<1>[];
16
+ renderLinks(links: IATopNavLink[]): import("lit").TemplateResult<1>[];
17
+ render(): import("lit").TemplateResult<1>;
18
+ }