dbf-mirador 4.2.3

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 (384) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +133 -0
  3. package/dist/CommentSharp-B0J_-jEq.js +325 -0
  4. package/dist/CommentSharp-B0J_-jEq.js.map +1 -0
  5. package/dist/FailedImageContext-aQXnWSHN.js +318 -0
  6. package/dist/FailedImageContext-aQXnWSHN.js.map +1 -0
  7. package/dist/PluginHook-CFw_6P5c.js +54 -0
  8. package/dist/PluginHook-CFw_6P5c.js.map +1 -0
  9. package/dist/WindowCanvasNavigationControls-CUX723BQ.js +242 -0
  10. package/dist/WindowCanvasNavigationControls-CUX723BQ.js.map +1 -0
  11. package/dist/action-types-DjIbTE-A.js +74 -0
  12. package/dist/action-types-DjIbTE-A.js.map +1 -0
  13. package/dist/canvas-C8oHvXFN.js +41 -0
  14. package/dist/canvas-C8oHvXFN.js.map +1 -0
  15. package/dist/canvases-gRqhr-IH.js +3154 -0
  16. package/dist/canvases-gRqhr-IH.js.map +1 -0
  17. package/dist/createSvgIcon-Cwt8YPfm.js +2 -0
  18. package/dist/getters-COus7Mvg.js +2066 -0
  19. package/dist/getters-COus7Mvg.js.map +1 -0
  20. package/dist/index.module-CbBRf_R8.js +403 -0
  21. package/dist/index.module-CbBRf_R8.js.map +1 -0
  22. package/dist/mirador.es.js +39600 -0
  23. package/dist/mirador.es.js.map +1 -0
  24. package/dist/mirador.min.js +334 -0
  25. package/dist/mirador.min.js.map +1 -0
  26. package/dist/react-error-boundary.esm-B_pT-oCS.js +67 -0
  27. package/dist/react-error-boundary.esm-B_pT-oCS.js.map +1 -0
  28. package/dist/visuallyHidden-DmYvwNdU.js +98 -0
  29. package/dist/visuallyHidden-DmYvwNdU.js.map +1 -0
  30. package/dist/window-zelwU7wz.js +138 -0
  31. package/dist/window-zelwU7wz.js.map +1 -0
  32. package/package.json +138 -0
  33. package/src/components/AccessTokenSender.jsx +34 -0
  34. package/src/components/AnnotationSettings.jsx +31 -0
  35. package/src/components/AnnotationsOverlay.jsx +328 -0
  36. package/src/components/App.jsx +34 -0
  37. package/src/components/AppProviders.jsx +129 -0
  38. package/src/components/AttributionPanel.jsx +78 -0
  39. package/src/components/AudioViewer.jsx +39 -0
  40. package/src/components/BackgroundPluginArea.jsx +9 -0
  41. package/src/components/Branding.jsx +33 -0
  42. package/src/components/CanvasAnnotations.jsx +125 -0
  43. package/src/components/CanvasInfo.jsx +46 -0
  44. package/src/components/CanvasLayers.jsx +367 -0
  45. package/src/components/ChangeThemeDialog.jsx +65 -0
  46. package/src/components/CollapsibleSection.jsx +53 -0
  47. package/src/components/CollectionDialog.jsx +236 -0
  48. package/src/components/CollectionInfo.jsx +48 -0
  49. package/src/components/CompanionArea.jsx +140 -0
  50. package/src/components/CompanionWindow.jsx +228 -0
  51. package/src/components/CompanionWindowFactory.jsx +38 -0
  52. package/src/components/CompanionWindowSection.jsx +11 -0
  53. package/src/components/CustomPanel.jsx +22 -0
  54. package/src/components/ErrorContent.jsx +65 -0
  55. package/src/components/ErrorDialog.jsx +47 -0
  56. package/src/components/FullScreenButton.jsx +47 -0
  57. package/src/components/GalleryView.jsx +36 -0
  58. package/src/components/GalleryViewThumbnail.jsx +160 -0
  59. package/src/components/IIIFAuthentication.jsx +144 -0
  60. package/src/components/IIIFDropTarget.jsx +168 -0
  61. package/src/components/IIIFIFrameCommunication.jsx +45 -0
  62. package/src/components/IIIFResourceLabel.jsx +26 -0
  63. package/src/components/IIIFThumbnail.jsx +214 -0
  64. package/src/components/ImageFailureMessage.jsx +42 -0
  65. package/src/components/LabelValueMetadata.jsx +46 -0
  66. package/src/components/LanguageSettings.jsx +46 -0
  67. package/src/components/LayersPanel.jsx +24 -0
  68. package/src/components/LocalePicker.jsx +56 -0
  69. package/src/components/ManifestForm.jsx +79 -0
  70. package/src/components/ManifestInfo.jsx +67 -0
  71. package/src/components/ManifestListItem.jsx +209 -0
  72. package/src/components/ManifestListItemError.jsx +53 -0
  73. package/src/components/ManifestRelatedLinks.jsx +154 -0
  74. package/src/components/MinimalWindow.jsx +104 -0
  75. package/src/components/MiradorMenuButton.jsx +71 -0
  76. package/src/components/MosaicRenderPreview.jsx +16 -0
  77. package/src/components/NestedMenu.jsx +42 -0
  78. package/src/components/NewBrowserWindow.jsx +34 -0
  79. package/src/components/OpenSeadragonComponent.jsx +258 -0
  80. package/src/components/OpenSeadragonTileSource.jsx +105 -0
  81. package/src/components/OpenSeadragonViewer.jsx +161 -0
  82. package/src/components/PluginHook.jsx +27 -0
  83. package/src/components/PrimaryWindow.jsx +115 -0
  84. package/src/components/SanitizedHtml.jsx +37 -0
  85. package/src/components/ScrollIndicatedDialogContent.jsx +60 -0
  86. package/src/components/ScrollTo.jsx +61 -0
  87. package/src/components/SearchHit.jsx +220 -0
  88. package/src/components/SearchPanel.jsx +80 -0
  89. package/src/components/SearchPanelControls.jsx +174 -0
  90. package/src/components/SearchPanelNavigation.jsx +84 -0
  91. package/src/components/SearchResults.jsx +138 -0
  92. package/src/components/SelectCollection.jsx +44 -0
  93. package/src/components/SidebarIndexItem.jsx +11 -0
  94. package/src/components/SidebarIndexList.jsx +73 -0
  95. package/src/components/SidebarIndexTableOfContents.jsx +170 -0
  96. package/src/components/SidebarIndexThumbnail.jsx +22 -0
  97. package/src/components/TextViewer.jsx +37 -0
  98. package/src/components/ThumbnailCanvasGrouping.jsx +122 -0
  99. package/src/components/ThumbnailNavigation.jsx +231 -0
  100. package/src/components/VideoViewer.jsx +35 -0
  101. package/src/components/ViewerInfo.jsx +55 -0
  102. package/src/components/ViewerNavigation.jsx +72 -0
  103. package/src/components/Window.jsx +150 -0
  104. package/src/components/WindowAuthenticationBar.jsx +176 -0
  105. package/src/components/WindowCanvasNavigationControls.jsx +91 -0
  106. package/src/components/WindowList.jsx +71 -0
  107. package/src/components/WindowListButton.jsx +57 -0
  108. package/src/components/WindowSideBar.jsx +48 -0
  109. package/src/components/WindowSideBarAnnotationsPanel.jsx +51 -0
  110. package/src/components/WindowSideBarButtons.jsx +151 -0
  111. package/src/components/WindowSideBarCanvasPanel.jsx +165 -0
  112. package/src/components/WindowSideBarCollectionPanel.jsx +179 -0
  113. package/src/components/WindowSideBarInfoPanel.jsx +67 -0
  114. package/src/components/WindowThumbnailSettings.jsx +130 -0
  115. package/src/components/WindowTopBar.jsx +125 -0
  116. package/src/components/WindowTopBarPluginArea.jsx +8 -0
  117. package/src/components/WindowTopBarPluginMenu.jsx +78 -0
  118. package/src/components/WindowTopBarTitle.jsx +73 -0
  119. package/src/components/WindowTopMenu.jsx +81 -0
  120. package/src/components/WindowTopMenuButton.jsx +49 -0
  121. package/src/components/WindowViewSettings.jsx +95 -0
  122. package/src/components/WindowViewer.jsx +26 -0
  123. package/src/components/Workspace.jsx +124 -0
  124. package/src/components/WorkspaceAdd.jsx +221 -0
  125. package/src/components/WorkspaceAddButton.jsx +73 -0
  126. package/src/components/WorkspaceArea.jsx +66 -0
  127. package/src/components/WorkspaceControlPanel.jsx +85 -0
  128. package/src/components/WorkspaceControlPanelButtons.jsx +20 -0
  129. package/src/components/WorkspaceDialog.jsx +11 -0
  130. package/src/components/WorkspaceElastic.jsx +88 -0
  131. package/src/components/WorkspaceElasticWindow.jsx +79 -0
  132. package/src/components/WorkspaceExport.jsx +99 -0
  133. package/src/components/WorkspaceImport.jsx +89 -0
  134. package/src/components/WorkspaceMenu.jsx +126 -0
  135. package/src/components/WorkspaceMenuButton.jsx +42 -0
  136. package/src/components/WorkspaceMosaic.jsx +149 -0
  137. package/src/components/WorkspaceOptionsButton.jsx +35 -0
  138. package/src/components/WorkspaceOptionsMenu.jsx +112 -0
  139. package/src/components/WorkspaceSelectionDialog.jsx +165 -0
  140. package/src/components/ZoomControls.jsx +57 -0
  141. package/src/components/icons/BookViewIcon.jsx +14 -0
  142. package/src/components/icons/CanvasIndexIcon.jsx +14 -0
  143. package/src/components/icons/GalleryViewIcon.jsx +17 -0
  144. package/src/components/icons/MiradorIcon.jsx +14 -0
  145. package/src/components/icons/RestoreZoomIcon.jsx +15 -0
  146. package/src/components/icons/ThumbnailNavigationBottomIcon.jsx +15 -0
  147. package/src/components/icons/ThumbnailNavigationRightIcon.jsx +16 -0
  148. package/src/components/icons/WindowMaxIcon.jsx +15 -0
  149. package/src/components/icons/WindowMinIcon.jsx +15 -0
  150. package/src/components/icons/WindowOptionsIcon.jsx +16 -0
  151. package/src/components/icons/WorkspaceTypeElasticIcon.jsx +157 -0
  152. package/src/components/icons/WorkspaceTypeMosaicIcon.jsx +162 -0
  153. package/src/components/icons/index.js +27 -0
  154. package/src/components/index.js +108 -0
  155. package/src/config/css-ns.js +10 -0
  156. package/src/config/index.js +2 -0
  157. package/src/config/settings.js +607 -0
  158. package/src/containers/AnnotationSettings.js +27 -0
  159. package/src/containers/AnnotationsOverlay.js +51 -0
  160. package/src/containers/AppProviders.js +20 -0
  161. package/src/containers/AttributionPanel.js +20 -0
  162. package/src/containers/AudioViewer.js +16 -0
  163. package/src/containers/BackgroundPluginArea.js +4 -0
  164. package/src/containers/Branding.js +4 -0
  165. package/src/containers/CanvasAnnotations.js +32 -0
  166. package/src/containers/CanvasInfo.js +20 -0
  167. package/src/containers/CanvasLayers.js +25 -0
  168. package/src/containers/ChangeThemeDialog.js +29 -0
  169. package/src/containers/CollapsibleSection.js +3 -0
  170. package/src/containers/CollectionDialog.js +48 -0
  171. package/src/containers/CollectionInfo.js +29 -0
  172. package/src/containers/CompanionArea.js +22 -0
  173. package/src/containers/CompanionWindow.js +40 -0
  174. package/src/containers/CompanionWindowFactory.js +23 -0
  175. package/src/containers/CustomPanel.js +13 -0
  176. package/src/containers/ErrorContent.js +20 -0
  177. package/src/containers/ErrorDialog.js +28 -0
  178. package/src/containers/FullScreenButton.js +22 -0
  179. package/src/containers/GalleryView.js +23 -0
  180. package/src/containers/GalleryViewThumbnail.js +51 -0
  181. package/src/containers/IIIFAuthentication.js +86 -0
  182. package/src/containers/IIIFThumbnail.js +17 -0
  183. package/src/containers/LabelValueMetadata.js +14 -0
  184. package/src/containers/LanguageSettings.js +26 -0
  185. package/src/containers/LayersPanel.js +16 -0
  186. package/src/containers/LocalePicker.js +3 -0
  187. package/src/containers/ManifestForm.js +16 -0
  188. package/src/containers/ManifestInfo.js +29 -0
  189. package/src/containers/ManifestListItem.js +52 -0
  190. package/src/containers/ManifestListItemError.js +15 -0
  191. package/src/containers/ManifestRelatedLinks.js +28 -0
  192. package/src/containers/MinimalWindow.js +25 -0
  193. package/src/containers/MiradorMenuButton.js +7 -0
  194. package/src/containers/MosaicRenderPreview.js +14 -0
  195. package/src/containers/OpenSeadragonViewer.js +59 -0
  196. package/src/containers/PrimaryWindow.js +27 -0
  197. package/src/containers/SanitizedHtml.js +3 -0
  198. package/src/containers/ScrollIndicatedDialogContent.js +3 -0
  199. package/src/containers/SearchHit.js +71 -0
  200. package/src/containers/SearchPanel.js +23 -0
  201. package/src/containers/SearchPanelControls.js +36 -0
  202. package/src/containers/SearchPanelNavigation.js +39 -0
  203. package/src/containers/SearchResults.js +38 -0
  204. package/src/containers/SelectCollection.js +24 -0
  205. package/src/containers/SidebarIndexItem.js +8 -0
  206. package/src/containers/SidebarIndexList.js +28 -0
  207. package/src/containers/SidebarIndexTableOfContents.js +31 -0
  208. package/src/containers/SidebarIndexThumbnail.js +18 -0
  209. package/src/containers/TextViewer.js +19 -0
  210. package/src/containers/ThumbnailCanvasGrouping.js +29 -0
  211. package/src/containers/ThumbnailNavigation.js +48 -0
  212. package/src/containers/VideoViewer.js +16 -0
  213. package/src/containers/ViewerInfo.js +30 -0
  214. package/src/containers/ViewerNavigation.js +31 -0
  215. package/src/containers/Window.js +45 -0
  216. package/src/containers/WindowAuthenticationBar.js +7 -0
  217. package/src/containers/WindowCanvasNavigationControls.js +15 -0
  218. package/src/containers/WindowList.js +30 -0
  219. package/src/containers/WindowListButton.js +15 -0
  220. package/src/containers/WindowSideBar.js +20 -0
  221. package/src/containers/WindowSideBarAnnotationsPanel.js +23 -0
  222. package/src/containers/WindowSideBarButtons.js +75 -0
  223. package/src/containers/WindowSideBarCanvasPanel.js +50 -0
  224. package/src/containers/WindowSideBarCollectionPanel.js +48 -0
  225. package/src/containers/WindowSideBarInfoPanel.js +35 -0
  226. package/src/containers/WindowThumbnailSettings.js +31 -0
  227. package/src/containers/WindowTopBar.js +39 -0
  228. package/src/containers/WindowTopBarPluginArea.js +8 -0
  229. package/src/containers/WindowTopBarPluginMenu.js +7 -0
  230. package/src/containers/WindowTopBarTitle.js +17 -0
  231. package/src/containers/WindowTopMenu.js +28 -0
  232. package/src/containers/WindowTopMenuButton.js +7 -0
  233. package/src/containers/WindowViewSettings.js +30 -0
  234. package/src/containers/WindowViewer.js +10 -0
  235. package/src/containers/Workspace.js +36 -0
  236. package/src/containers/WorkspaceAdd.js +27 -0
  237. package/src/containers/WorkspaceAddButton.js +30 -0
  238. package/src/containers/WorkspaceArea.js +21 -0
  239. package/src/containers/WorkspaceControlPanel.js +10 -0
  240. package/src/containers/WorkspaceControlPanelButtons.js +7 -0
  241. package/src/containers/WorkspaceElastic.js +41 -0
  242. package/src/containers/WorkspaceElasticWindow.js +36 -0
  243. package/src/containers/WorkspaceExport.js +18 -0
  244. package/src/containers/WorkspaceImport.js +19 -0
  245. package/src/containers/WorkspaceMenu.js +30 -0
  246. package/src/containers/WorkspaceMenuButton.js +10 -0
  247. package/src/containers/WorkspaceMosaic.js +32 -0
  248. package/src/containers/WorkspaceOptionsButton.js +7 -0
  249. package/src/containers/WorkspaceOptionsMenu.js +3 -0
  250. package/src/containers/WorkspaceSelectionDialog.js +26 -0
  251. package/src/containers/ZoomControls.js +26 -0
  252. package/src/containers/index.js +94 -0
  253. package/src/contexts/FailedImageContext.js +8 -0
  254. package/src/contexts/FailedImageProvider.jsx +34 -0
  255. package/src/contexts/FullScreenContext.js +5 -0
  256. package/src/contexts/LocaleContext.js +5 -0
  257. package/src/contexts/OpenSeadragonViewerContext.js +5 -0
  258. package/src/contexts/WorkspaceContext.js +5 -0
  259. package/src/contexts/index.js +4 -0
  260. package/src/extend/PluginContext.js +5 -0
  261. package/src/extend/PluginProvider.jsx +22 -0
  262. package/src/extend/index.js +9 -0
  263. package/src/extend/pluginMapping.js +44 -0
  264. package/src/extend/pluginPreprocessing.js +45 -0
  265. package/src/extend/pluginValidation.js +58 -0
  266. package/src/extend/usePlugins.js +13 -0
  267. package/src/extend/withPlugins.jsx +46 -0
  268. package/src/hooks/index.js +4 -0
  269. package/src/hooks/useCanvasWorldService.js +10 -0
  270. package/src/hooks/useThumbnailService.js +8 -0
  271. package/src/i18n.js +71 -0
  272. package/src/index.js +18 -0
  273. package/src/init.js +20 -0
  274. package/src/lib/AnnotationFactory.js +23 -0
  275. package/src/lib/AnnotationItem.js +123 -0
  276. package/src/lib/AnnotationList.js +31 -0
  277. package/src/lib/AnnotationPage.js +41 -0
  278. package/src/lib/AnnotationResource.js +122 -0
  279. package/src/lib/CanvasAnnotationDisplay.js +148 -0
  280. package/src/lib/CanvasGroupings.js +55 -0
  281. package/src/lib/CanvasWorld.js +214 -0
  282. package/src/lib/CompanionWindowRegistry.js +23 -0
  283. package/src/lib/FullScreenHandle.jsx +76 -0
  284. package/src/lib/MiradorCanvas.js +211 -0
  285. package/src/lib/MiradorManifest.js +44 -0
  286. package/src/lib/MiradorViewer.jsx +53 -0
  287. package/src/lib/MosaicLayout.js +77 -0
  288. package/src/lib/OpenSeadragonCanvasOverlay.js +114 -0
  289. package/src/lib/ThumbnailFactory.js +310 -0
  290. package/src/lib/TruncatedHit.js +34 -0
  291. package/src/lib/asArray.js +11 -0
  292. package/src/lib/htmlRules.js +28 -0
  293. package/src/lib/iiif.js +12 -0
  294. package/src/lib/index.js +23 -0
  295. package/src/lib/readImageMetadata.js +21 -0
  296. package/src/lib/svgShapesToPath.js +49 -0
  297. package/src/locales/README.md +60 -0
  298. package/src/locales/ar/translation.json +141 -0
  299. package/src/locales/bg/translation.json +164 -0
  300. package/src/locales/de/translation.json +169 -0
  301. package/src/locales/en/translation.json +170 -0
  302. package/src/locales/et/translation.json +164 -0
  303. package/src/locales/fa/translation.json +164 -0
  304. package/src/locales/fr/translation.json +158 -0
  305. package/src/locales/hr/translation.json +164 -0
  306. package/src/locales/hu/translation.json +166 -0
  307. package/src/locales/it/translation.json +162 -0
  308. package/src/locales/ja/translation.json +156 -0
  309. package/src/locales/kr/translation.json +162 -0
  310. package/src/locales/lt/translation.json +153 -0
  311. package/src/locales/nbNo/translation.json +162 -0
  312. package/src/locales/nl/translation.json +139 -0
  313. package/src/locales/pl/translation.json +162 -0
  314. package/src/locales/ptBr/translation.json +133 -0
  315. package/src/locales/sr/translation.json +155 -0
  316. package/src/locales/sv/translation.json +157 -0
  317. package/src/locales/ta/translation.json +167 -0
  318. package/src/locales/vi/translation.json +156 -0
  319. package/src/locales/zhCn/translation.json +163 -0
  320. package/src/locales/zhTw/translation.json +163 -0
  321. package/src/plugins/OSDReferences.js +15 -0
  322. package/src/plugins/index.js +1 -0
  323. package/src/state/actions/action-types.js +76 -0
  324. package/src/state/actions/annotation.js +123 -0
  325. package/src/state/actions/auth.js +109 -0
  326. package/src/state/actions/canvas.js +65 -0
  327. package/src/state/actions/catalog.js +22 -0
  328. package/src/state/actions/companionWindow.js +107 -0
  329. package/src/state/actions/config.js +49 -0
  330. package/src/state/actions/elasticLayout.js +10 -0
  331. package/src/state/actions/errors.js +22 -0
  332. package/src/state/actions/index.js +19 -0
  333. package/src/state/actions/infoResponse.js +90 -0
  334. package/src/state/actions/layers.js +14 -0
  335. package/src/state/actions/manifest.js +65 -0
  336. package/src/state/actions/search.js +97 -0
  337. package/src/state/actions/window.js +209 -0
  338. package/src/state/actions/workspace.js +84 -0
  339. package/src/state/createPluggableStore.js +24 -0
  340. package/src/state/createStore.js +33 -0
  341. package/src/state/index.js +21 -0
  342. package/src/state/reducers/accessTokens.js +59 -0
  343. package/src/state/reducers/annotations.js +48 -0
  344. package/src/state/reducers/auth.js +43 -0
  345. package/src/state/reducers/catalog.js +30 -0
  346. package/src/state/reducers/companionWindows.js +49 -0
  347. package/src/state/reducers/config.js +39 -0
  348. package/src/state/reducers/elasticLayout.js +29 -0
  349. package/src/state/reducers/errors.js +51 -0
  350. package/src/state/reducers/index.js +15 -0
  351. package/src/state/reducers/infoResponses.js +61 -0
  352. package/src/state/reducers/layers.js +23 -0
  353. package/src/state/reducers/manifests.js +52 -0
  354. package/src/state/reducers/rootReducer.js +44 -0
  355. package/src/state/reducers/search.js +145 -0
  356. package/src/state/reducers/utils.js +45 -0
  357. package/src/state/reducers/viewers.js +42 -0
  358. package/src/state/reducers/windows.js +185 -0
  359. package/src/state/reducers/workspace.js +111 -0
  360. package/src/state/sagas/annotations.js +48 -0
  361. package/src/state/sagas/app.js +56 -0
  362. package/src/state/sagas/auth.js +151 -0
  363. package/src/state/sagas/iiif.js +233 -0
  364. package/src/state/sagas/index.js +30 -0
  365. package/src/state/sagas/windows.js +293 -0
  366. package/src/state/selectors/annotations.js +138 -0
  367. package/src/state/selectors/auth.js +100 -0
  368. package/src/state/selectors/canvases.js +260 -0
  369. package/src/state/selectors/companionWindows.js +182 -0
  370. package/src/state/selectors/config.js +100 -0
  371. package/src/state/selectors/getters.js +90 -0
  372. package/src/state/selectors/index.js +17 -0
  373. package/src/state/selectors/layers.js +79 -0
  374. package/src/state/selectors/manifests.js +433 -0
  375. package/src/state/selectors/ranges.js +147 -0
  376. package/src/state/selectors/searches.js +249 -0
  377. package/src/state/selectors/sequences.js +134 -0
  378. package/src/state/selectors/thumbnails.js +28 -0
  379. package/src/state/selectors/utils.js +18 -0
  380. package/src/state/selectors/viewer.js +19 -0
  381. package/src/state/selectors/windows.js +98 -0
  382. package/src/state/selectors/workspace.js +52 -0
  383. package/src/state/selectors/wrappers.js +15 -0
  384. package/src/styles/react-mosaic-component.js +288 -0
@@ -0,0 +1,90 @@
1
+ import { createSelector } from 'reselect';
2
+ import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
3
+
4
+ /**
5
+ * Returns the manifest titles for all open windows.
6
+ * @param {object} state
7
+ * @returns {Array} containing manifests ids.
8
+ */
9
+ export function getWindowManifests(state) {
10
+ return Object.values(miradorSlice(state).windows).map((window) => window.manifestId);
11
+ }
12
+
13
+ /**
14
+ * Returns the opened windows.
15
+ * @param {object} state
16
+ * @returns {object} {id: {canvasId: {...}, ...}, ...}
17
+ */
18
+ export function getWindows(state) {
19
+ return miradorSlice(state).windows || EMPTY_OBJECT;
20
+ }
21
+
22
+ /**
23
+ * Returns a window based on a given windowId.
24
+ * @param {object} state
25
+ * @param {object} props
26
+ * @param {string} props.windowId
27
+ * @returns {object|undefined}
28
+ */
29
+ export function getWindow(state, { windowId }) {
30
+ return getWindows(state)[windowId];
31
+ }
32
+
33
+ /**
34
+ * Returns the viewer for a given window.
35
+ * @param {object} state
36
+ * @param {object} props
37
+ * @param {string} props.windowId
38
+ * @returns {object|undefined} {flip: false, rotation: 0, x: 1, y: 2, zoom: 0.5}
39
+ */
40
+ export const getViewer = createSelector(
41
+ [(state) => miradorSlice(state).viewers, (state, { windowId }) => windowId],
42
+ (viewers, windowId) => viewers[windowId],
43
+ );
44
+
45
+ /**
46
+ * Returns the workspace.
47
+ * @param {object} state
48
+ * @returns {object}
49
+ */
50
+ export function getWorkspace(state) {
51
+ return miradorSlice(state).workspace;
52
+ }
53
+
54
+ /**
55
+ * Returns the windowIds.
56
+ * @param {object} state
57
+ * @returns {Array}
58
+ */
59
+ export const getWindowIds = createSelector([getWorkspace], ({ windowIds }) => windowIds || EMPTY_ARRAY);
60
+
61
+ /**
62
+ * Returns all manifests including manifest information.
63
+ * @param {object} state
64
+ * @returns {object}
65
+ */
66
+ export function getManifests(state) {
67
+ return miradorSlice(state).manifests || EMPTY_OBJECT;
68
+ }
69
+
70
+ /**
71
+ * Get the relevant manifest information for a given manifest.
72
+ * @param {object} state
73
+ * @param {object} props
74
+ * @param {string} props.manifestId
75
+ * @param {string} props.windowId
76
+ * @returns {object}
77
+ */
78
+ export function getManifest(state, { manifestId, windowId }) {
79
+ const manifests = getManifests(state);
80
+ return manifests && manifests[manifestId || (windowId && (getWindow(state, { windowId }) || EMPTY_OBJECT).manifestId)];
81
+ }
82
+
83
+ /**
84
+ * Get the opened catalog.
85
+ * @param {object} state
86
+ * @returns {object} containing manifestIds for the manifests in the catalog
87
+ */
88
+ export function getCatalog(state) {
89
+ return miradorSlice(state).catalog || EMPTY_OBJECT;
90
+ }
@@ -0,0 +1,17 @@
1
+ export * from './annotations';
2
+ export * from './canvases';
3
+ export * from './companionWindows';
4
+ export * from './config';
5
+ export * from './getters';
6
+ export * from './manifests';
7
+ export * from './windows';
8
+ export * from './workspace';
9
+ export * from './searches';
10
+ export * from './ranges';
11
+ export * from './layers';
12
+ export * from './sequences';
13
+ export * from './auth';
14
+ export * from './utils';
15
+ export * from './viewer';
16
+ export * from './thumbnails';
17
+ export * from './wrappers';
@@ -0,0 +1,79 @@
1
+ import { createSelector } from 'reselect';
2
+ import { getMiradorCanvasWrapper } from './wrappers';
3
+ import { getCanvas, getVisibleCanvasIds } from './canvases';
4
+ import { miradorSlice, EMPTY_ARRAY } from './utils';
5
+
6
+ /**
7
+ * Get the image layers from a canvas.
8
+ * @param {object} state
9
+ * @param {object} props
10
+ * @param {string} props.canvasId
11
+ * @param {string} props.windowId
12
+ * @param {string} props.companionWindowId
13
+ * @returns {Array}
14
+ */
15
+ export const getCanvasLayers = createSelector([getCanvas, getMiradorCanvasWrapper], (canvas, getMiradorCanvas) => {
16
+ if (!canvas) return [];
17
+ return getMiradorCanvas(canvas).imageResources;
18
+ });
19
+
20
+ export const getLayersForWindow = createSelector(
21
+ [(state) => miradorSlice(state).layers, (state, { windowId }) => windowId],
22
+ (layers, windowId) => (layers ? layers[windowId] || EMPTY_ARRAY : EMPTY_ARRAY),
23
+ );
24
+
25
+ /**
26
+ * Get the layer state for a particular canvas.
27
+ * @param {object} state
28
+ * @param {string} windowId
29
+ * @returns {object}
30
+ */
31
+ export const getLayers = createSelector(
32
+ [getLayersForWindow, (state, { canvasId }) => canvasId],
33
+ (layers, canvasId) => layers[canvasId],
34
+ );
35
+
36
+ /**
37
+ * Returns a list of canvas layers, sorted by the layer state configuration.
38
+ * @param {object} state
39
+ * @param {object} props
40
+ * @param {string} props.companionWindowId
41
+ * @returns {Array}
42
+ */
43
+ export const getSortedLayers = createSelector([getCanvasLayers, getLayers], (canvasLayers, layerConfig) => {
44
+ if (!layerConfig) return canvasLayers;
45
+
46
+ const sorted = canvasLayers.sort((a, b) => {
47
+ if (
48
+ layerConfig[a.id] &&
49
+ layerConfig[a.id].index !== undefined &&
50
+ layerConfig[b.id] &&
51
+ layerConfig[b.id].index !== undefined
52
+ ) {
53
+ return layerConfig[a.id].index - layerConfig[b.id].index;
54
+ }
55
+
56
+ // sort a layer with index data above layers without
57
+ if (layerConfig[a.id] && layerConfig[a.id].index !== undefined) return -1;
58
+ if (layerConfig[b.id] && layerConfig[b.id].index !== undefined) return 1;
59
+
60
+ return 0;
61
+ });
62
+
63
+ return sorted;
64
+ });
65
+
66
+ /**
67
+ * Get all the layer configuration for visible canvases.
68
+ * @param {object} state
69
+ * @param {object} props
70
+ * @param {string} props.windowId
71
+ * @returns {object}
72
+ */
73
+ export const getLayersForVisibleCanvases = createSelector([getVisibleCanvasIds, getLayersForWindow], (canvasIds, layers) =>
74
+ canvasIds.reduce((acc, canvasId) => {
75
+ // eslint-disable-next-line no-param-reassign
76
+ acc[canvasId] = layers[canvasId];
77
+ return acc;
78
+ }, {}),
79
+ );
@@ -0,0 +1,433 @@
1
+ import { createSelector } from 'reselect';
2
+ import { PropertyValue, Utils, Resource } from 'manifesto.js';
3
+ import asArray from '../../lib/asArray';
4
+ import { getCompanionWindowLocale } from './companionWindows';
5
+ import { getManifest } from './getters';
6
+ import { getConfig } from './config';
7
+ import { getThumbnailFactory } from './thumbnails';
8
+
9
+ /** */
10
+ function createManifestoInstance(json, locale) {
11
+ if (!json) return undefined;
12
+ // Use structuredClone to create a deep copy and prevent Manifesto from mutating the json
13
+ const manifestoObject = Utils.parseManifest(structuredClone(json), locale ? { locale } : undefined);
14
+ if (manifestoObject) {
15
+ // Local patching of Manifesto so that when its a Collection, it behaves similarly
16
+ if (typeof manifestoObject.getSequences != 'function') {
17
+ manifestoObject.getSequences = () => [];
18
+ }
19
+ return manifestoObject;
20
+ }
21
+ return undefined;
22
+ }
23
+
24
+ /** */
25
+ export const getLocale = createSelector(
26
+ [getCompanionWindowLocale, getConfig, (state, { locale }) => locale],
27
+ (companionWindowLocale, config = {}, locale) => locale || companionWindowLocale || config.language || config.fallbackLanguages,
28
+ );
29
+
30
+ const defaultManifestStatus = Object.freeze({ missing: true });
31
+
32
+ /**
33
+ * Convenience selector to get a manifest (or placeholder).
34
+ * @param {object} state
35
+ * @param {object} props
36
+ * @param {string} props.windowId
37
+ * @returns {object} {error: null: id: string, isFetching: boolean, json: {...}}
38
+ */
39
+ export const getManifestStatus = createSelector([getManifest], (manifest) => manifest || defaultManifestStatus);
40
+
41
+ /**
42
+ * Convenience selector to get a manifest loading error
43
+ * @param {object} state
44
+ * @param {object} props
45
+ * @param {string} props.manifestId
46
+ * @returns {string|null}
47
+ */
48
+ export const getManifestError = createSelector([getManifest], (manifest) => manifest && manifest.error);
49
+
50
+ /** Instantiate a manifesto instance */
51
+ const getContextualManifestoInstance = createSelector(
52
+ getManifest,
53
+ (manifest) => manifest && createManifestoInstance(manifest.json),
54
+ );
55
+
56
+ /**
57
+ * Instantiate a manifesto instance
58
+ * @param {object} state
59
+ * @param {object} props
60
+ * @param {string} props.manifestId
61
+ * @returns {object}
62
+ */
63
+ export const getManifestoInstance = createSelector(
64
+ getContextualManifestoInstance,
65
+ (state, { json }) => json,
66
+ (manifesto, manifestJson) => (manifestJson && createManifestoInstance(manifestJson)) || manifesto,
67
+ );
68
+
69
+ export const getManifestLocale = createSelector(
70
+ [getManifestoInstance, getLocale],
71
+ (manifest, locale) =>
72
+ locale ?? (manifest && manifest.options && manifest.options.locale && manifest.options.locale.replace(/-.*$/, '')),
73
+ );
74
+
75
+ /** */
76
+ function getProperty(property) {
77
+ return createSelector([getManifestoInstance], (manifest) => manifest && manifest.getProperty(property));
78
+ }
79
+
80
+ /**
81
+ * Return the IIIF v3 provider of a manifest or null.
82
+ * @param {object} state
83
+ * @param {object} props
84
+ * @param {string} props.manifestId
85
+ * @param {string} props.windowId
86
+ * @returns {string|null}
87
+ */
88
+ export const getManifestProviderName = createSelector(
89
+ [getProperty('provider'), getManifestLocale],
90
+ (provider, locale) => provider && provider[0].label && PropertyValue.parse(provider[0].label).getValue(locale),
91
+ );
92
+
93
+ const EMPTY_LOGO_OPTS = Object.freeze({});
94
+
95
+ /**
96
+ * Return the IIIF v3 provider logo.
97
+ * @param {object} state
98
+ * @param {object} props
99
+ * @returns {string|null}
100
+ */
101
+ export const getProviderLogo = createSelector(
102
+ [getProperty('provider'), (state) => getThumbnailFactory(state, EMPTY_LOGO_OPTS)],
103
+ (provider, thumbnailFactory) => {
104
+ const logo = provider && provider[0] && provider[0].logo && provider[0].logo[0];
105
+ if (!logo) return null;
106
+ return thumbnailFactory.get(new Resource(logo))?.url;
107
+ },
108
+ );
109
+
110
+ /**
111
+ * Get the logo for a manifest.
112
+ * @param {object} state
113
+ * @param {object} props
114
+ * @returns {string|null}
115
+ */
116
+ export const getManifestLogo = createSelector(
117
+ [getManifestoInstance, getProviderLogo],
118
+ (manifest, v3logo) => v3logo || (manifest && manifest.getLogo()),
119
+ );
120
+
121
+ /**
122
+ * Return the IIIF v3 homepage of a manifest or null.
123
+ * @param {object} state
124
+ * @param {object} props
125
+ * @param {string} props.manifestId
126
+ * @param {string} props.windowId
127
+ * @returns {string|null}
128
+ */
129
+ export const getManifestHomepage = createSelector(
130
+ [getProperty('homepage'), getManifestLocale],
131
+ (homepages, locale) =>
132
+ homepages &&
133
+ asArray(homepages).map((homepage) => ({
134
+ label: PropertyValue.parse(homepage.label).getValue(locale),
135
+ value: homepage.id || homepage['@id'],
136
+ })),
137
+ );
138
+
139
+ /**
140
+ * Return the IIIF v3 renderings of a manifest or null.
141
+ * @param {object} state
142
+ * @param {object} props
143
+ * @param {string} props.manifestId
144
+ * @param {string} props.windowId
145
+ * @returns {string|null}
146
+ */
147
+ export const getManifestRenderings = createSelector(
148
+ [getManifestoInstance, getManifestLocale],
149
+ (manifest, locale) =>
150
+ manifest &&
151
+ manifest.getRenderings().map((rendering) => ({
152
+ label: rendering.getLabel().getValue(locale),
153
+ value: rendering.id,
154
+ })),
155
+ );
156
+
157
+ /**
158
+ * Return the IIIF v2/v3 seeAlso data from a manifest or null.
159
+ * @param {object} state
160
+ * @param {object} props
161
+ * @param {string} props.manifestId
162
+ * @param {string} props.windowId
163
+ * @returns {string|null}
164
+ */
165
+ export const getManifestSeeAlso = createSelector(
166
+ [getProperty('seeAlso'), getManifestLocale],
167
+ (seeAlso, locale) =>
168
+ seeAlso &&
169
+ asArray(seeAlso).map((related) => ({
170
+ format: related.format,
171
+ label: PropertyValue.parse(related.label).getValue(locale),
172
+ value: related.id || related['@id'],
173
+ })),
174
+ );
175
+
176
+ /**
177
+ * Return the IIIF v2/v3 seeAlso data from a manifest or null.
178
+ * @param {object} state
179
+ * @param {object} props
180
+ * @param {string} props.manifestId
181
+ * @param {string} props.windowId
182
+ * @returns {string|null}
183
+ * @deprecated This does not actually return the content of "related" and
184
+ * might be removed in a future version.
185
+ * @see getManifestSeeAlso
186
+ */
187
+ export const getManifestRelatedContent = getManifestSeeAlso;
188
+
189
+ /**
190
+ * Return the IIIF v2 realated links manifest or null
191
+ * @param {object} state
192
+ * @param {object} props
193
+ * @param {string} props.manifestId
194
+ * @param {string} props.windowId
195
+ * @returns {string|null}
196
+ */
197
+ export const getManifestRelated = createSelector(
198
+ [getProperty('related'), getManifestLocale],
199
+ (relatedLinks, locale) =>
200
+ relatedLinks &&
201
+ asArray(relatedLinks).map((related) =>
202
+ typeof related === 'string'
203
+ ? {
204
+ value: related,
205
+ }
206
+ : {
207
+ format: related.format,
208
+ label: PropertyValue.parse(related.label).getValue(locale),
209
+ value: related.id || related['@id'],
210
+ },
211
+ ),
212
+ );
213
+
214
+ /**
215
+ * Return the IIIF requiredStatement (v3) or attribution (v2) data from a manifest or null
216
+ * @param {object} state
217
+ * @param {object} props
218
+ * @param {string} props.manifestId
219
+ * @param {string} props.windowId
220
+ * @returns {string|null}
221
+ */
222
+ export const getRequiredStatement = createSelector(
223
+ [getLocale, getManifestoInstance],
224
+ (locale, manifest) =>
225
+ manifest &&
226
+ asArray(manifest.getRequiredStatement()).flatMap((labelValuePair) => {
227
+ const values = labelValuePair?.getValues(locale) ?? [];
228
+ if (!values.length) {
229
+ return [];
230
+ }
231
+ const labels = labelValuePair?.getLabels(locale) ?? [];
232
+ return Array.from({ length: Math.max(labels.length, values.length) }, (_, idx) => idx)
233
+ .filter((idx) => values[idx])
234
+ .map((idx) => ({
235
+ label: labels[idx] ?? null,
236
+ values: [values[idx]],
237
+ }));
238
+ }),
239
+ );
240
+
241
+ /**
242
+ * Return the IIIF v2 rights (v3) or license (v2) data from a manifest or null
243
+ * @param {object} state
244
+ * @param {object} props
245
+ * @param {string} props.manifestId
246
+ * @param {string} props.windowId
247
+ * @returns {string|null}
248
+ */
249
+ export const getRights = createSelector(
250
+ [getProperty('rights'), getProperty('license'), getManifestLocale],
251
+ (rights, license, locale) => {
252
+ const data = rights || license;
253
+ return asArray(PropertyValue.parse(data).getValues(locale));
254
+ },
255
+ );
256
+
257
+ /**
258
+ * Return the supplied thumbnail for a manifest or null.
259
+ * @param {object} state
260
+ * @param {object} props
261
+ * @param {string} props.manifestId
262
+ * @param {string} props.windowId
263
+ * @returns {string|null}
264
+ */
265
+ export function getManifestThumbnail(state, props) {
266
+ const manifest = getManifestoInstance(state, props);
267
+ const thumbnailFactory = getThumbnailFactory(state, 80, 120);
268
+ if (!manifest) return undefined;
269
+ const thumbnail = thumbnailFactory.get(manifest);
270
+ return thumbnail && thumbnail.url;
271
+ }
272
+
273
+ /**
274
+ * Return manifest title.
275
+ * @param {object} state
276
+ * @param {object} props
277
+ * @param {string} props.manifestId
278
+ * @param {string} props.windowId
279
+ * @returns {string}
280
+ */
281
+ export const getManifestTitle = createSelector(
282
+ [getManifestoInstance, getManifestLocale],
283
+ (manifest, locale) => manifest && manifest.getLabel().getValue(locale),
284
+ );
285
+
286
+ /**
287
+ * Return manifest description (IIIF v2) -- distinct from any description field nested under metadata.
288
+ * @param {object} state
289
+ * @param {object} props
290
+ * @param {string} props.manifestId
291
+ * @param {string} props.windowId
292
+ * @returns {string|null}
293
+ */
294
+ export const getManifestDescription = createSelector(
295
+ [getLocale, getManifestoInstance],
296
+ (locale, manifest) => manifest && manifest.getDescription().getValue(locale),
297
+ );
298
+
299
+ /**
300
+ * Return manifest summary (IIIF v3).
301
+ * @param {object} state
302
+ * @param {object} props
303
+ * @param {string} props.manifestId
304
+ * @param {string} props.windowId
305
+ * @return {string|null}
306
+ */
307
+ export const getManifestSummary = createSelector(
308
+ [getProperty('summary'), getManifestLocale],
309
+ (summary, locale) => summary && PropertyValue.parse(summary).getValue(locale),
310
+ );
311
+
312
+ /**
313
+ * Return manifest title.
314
+ * @param {object} state
315
+ * @param {object} props
316
+ * @param {string} props.manifestId
317
+ * @param {string} props.windowId
318
+ * @returns {string}
319
+ */
320
+ export const getManifestUrl = createSelector([getManifestoInstance], (manifest) => manifest && manifest.id);
321
+
322
+ /**
323
+ * Return metadata in a label / value structure
324
+ * This is a potential seam for pulling the i18n locale from
325
+ * state and plucking out the appropriate language.
326
+ * For now we're just getting the first.
327
+ * @param {object} Manifesto IIIF Resource (e.g. canvas, manifest)
328
+ * @param iiifResource
329
+ * @returns {Array[Object]}
330
+ */
331
+ export function getDestructuredMetadata(iiifResource, locale = undefined) {
332
+ return (
333
+ iiifResource &&
334
+ iiifResource.getMetadata().map((labelValuePair) => ({
335
+ label: labelValuePair.getLabel(locale),
336
+ values: labelValuePair.getValues(locale),
337
+ }))
338
+ );
339
+ }
340
+
341
+ /**
342
+ * Return manifest metadata in a label / value structure
343
+ * @param {object} state
344
+ * @param {object} props
345
+ * @param {string} props.manifestId
346
+ * @param {string} props.windowId
347
+ * @returns {Array[Object]}
348
+ */
349
+ export const getManifestMetadata = createSelector(
350
+ [getManifestoInstance, getManifestLocale],
351
+ (manifest, locale) => manifest && getDestructuredMetadata(manifest, locale),
352
+ );
353
+
354
+ /** */
355
+ function getLocalesForStructure(item) {
356
+ const languages = new Set([]);
357
+
358
+ /** Extract language indicators from IIIF v2 or v3 manifests */
359
+ const extractLanguage = (i) => {
360
+ if (!(i && typeof i === 'object')) return;
361
+
362
+ // IIIF v2 pattern
363
+ if (i['@language'] && i['@value']) {
364
+ languages.add(i['@language']);
365
+ return;
366
+ }
367
+
368
+ // IIIF v3 pattern
369
+ Object.keys(i).forEach((key) => {
370
+ languages.add(key);
371
+ });
372
+ };
373
+
374
+ if (Array.isArray(item)) {
375
+ item.forEach((i) => extractLanguage(i));
376
+ } else {
377
+ extractLanguage(item);
378
+ }
379
+
380
+ return [...languages];
381
+ }
382
+
383
+ /** */
384
+ function getLocales(resource) {
385
+ if (!resource) return [];
386
+
387
+ const metadata = resource.getProperty('metadata') || [];
388
+ const languages = {};
389
+
390
+ for (let i = 0; i < metadata.length; i += 1) {
391
+ const item = metadata[i];
392
+ getLocalesForStructure(item.label).forEach((l) => {
393
+ languages[l] = true;
394
+ });
395
+ getLocalesForStructure(item.value).forEach((l) => {
396
+ languages[l] = true;
397
+ });
398
+ }
399
+ return Object.keys(languages);
400
+ }
401
+
402
+ export const getMetadataLocales = createSelector([getManifestoInstance], (manifest) => getLocales(manifest));
403
+
404
+ /**
405
+ * Returns manifest search service.
406
+ * @param {object} state
407
+ * @param {object} props
408
+ * @param {string} props.manifestId
409
+ * @returns {string|null}
410
+ */
411
+ export const getManifestSearchService = createSelector([getManifestoInstance], (manifest) => {
412
+ if (!manifest) return null;
413
+ const searchService =
414
+ manifest.getService('http://iiif.io/api/search/0/search') || manifest.getService('http://iiif.io/api/search/1/search');
415
+ if (searchService) return searchService;
416
+ return null;
417
+ });
418
+
419
+ /**
420
+ * Returns manifest autocomplete service.
421
+ * @param {object} state
422
+ * @param {object} props
423
+ * @param {string} props.manifestId
424
+ * @returns {string|null}
425
+ */
426
+ export const getManifestAutocompleteService = createSelector([getManifestSearchService], (searchService) => {
427
+ const autocompleteService =
428
+ searchService &&
429
+ (searchService.getService('http://iiif.io/api/search/0/autocomplete') ||
430
+ searchService.getService('http://iiif.io/api/search/1/autocomplete'));
431
+
432
+ return autocompleteService && autocompleteService;
433
+ });