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,100 @@
1
+ import { createSelector } from 'reselect';
2
+ import { Utils } from 'manifesto.js';
3
+ import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
4
+ import { getConfig } from './config';
5
+ import { getVisibleCanvases, selectInfoResponses } from './canvases';
6
+ import { getMiradorCanvasWrapper } from './wrappers';
7
+ import { getIiifResourceImageService } from '../../lib/iiif';
8
+
9
+ /**
10
+ * Returns the authentification profile from the configuration
11
+ * @param {object} state
12
+ * @returns {Array}
13
+ */
14
+ export const getAuthProfiles = createSelector([getConfig], ({ auth: { serviceProfiles = [] } = {} }) => serviceProfiles);
15
+
16
+ /**
17
+ * Returns access tokens from the state
18
+ * @param {object} state
19
+ * @returns {object}
20
+ */
21
+ export const getAccessTokens = (state) => miradorSlice(state).accessTokens || EMPTY_OBJECT;
22
+
23
+ /**
24
+ * Return the authentification data from the state
25
+ * @param {object} state
26
+ * @returns {object}
27
+ */
28
+ export const getAuth = (state) => miradorSlice(state).auth || EMPTY_OBJECT;
29
+
30
+ /**
31
+ * Returns current authentification services based on state and windowId
32
+ * @param {object} state
33
+ * @param {string} windowId
34
+ * @returns {Array}
35
+ */
36
+ export const selectCurrentAuthServices = createSelector(
37
+ [
38
+ getVisibleCanvases,
39
+ selectInfoResponses,
40
+ getAuthProfiles,
41
+ getAuth,
42
+ getMiradorCanvasWrapper,
43
+ (state, { iiifResources }) => iiifResources,
44
+ ],
45
+ // eslint-disable-next-line max-params
46
+ (canvases, infoResponses = {}, serviceProfiles, auth, getMiradorCanvas, iiifResources) => {
47
+ let currentAuthResources = iiifResources;
48
+
49
+ if (!currentAuthResources && canvases) {
50
+ currentAuthResources = canvases.flatMap((c) => {
51
+ const miradorCanvas = getMiradorCanvas(c);
52
+ const images = miradorCanvas.iiifImageResources;
53
+
54
+ return images.map((i) => {
55
+ const iiifImageService = getIiifResourceImageService(i);
56
+
57
+ const infoResponse = infoResponses[iiifImageService.id];
58
+ if (infoResponse && infoResponse.json) {
59
+ return { ...infoResponse.json, options: {} };
60
+ }
61
+
62
+ return iiifImageService;
63
+ });
64
+ });
65
+ }
66
+
67
+ if (!currentAuthResources) return EMPTY_ARRAY;
68
+ if (currentAuthResources.length === 0) return EMPTY_ARRAY;
69
+
70
+ const currentAuthServices = currentAuthResources.map((resource) => {
71
+ let lastAttemptedService;
72
+ const services = Utils.getServices(resource);
73
+
74
+ for (const authProfile of serviceProfiles) {
75
+ const profiledAuthServices = services.filter((p) => authProfile.profile === p.getProfile());
76
+
77
+ for (const service of profiledAuthServices) {
78
+ lastAttemptedService = service;
79
+
80
+ if (!auth[service.id] || auth[service.id].isFetching || auth[service.id].ok) {
81
+ return service;
82
+ }
83
+ }
84
+ }
85
+
86
+ return lastAttemptedService;
87
+ });
88
+
89
+ return Object.values(
90
+ currentAuthServices.reduce((h, service) => {
91
+ if (service && !h[service.id]) {
92
+ // eslint-disable-next-line no-param-reassign
93
+ h[service.id] = service;
94
+ }
95
+
96
+ return h;
97
+ }, {}),
98
+ );
99
+ },
100
+ );
@@ -0,0 +1,260 @@
1
+ import { createSelector } from 'reselect';
2
+ import CanvasGroupings from '../../lib/CanvasGroupings';
3
+ import { getIiifResourceImageService } from '../../lib/iiif';
4
+ import { getMiradorCanvasWrapper } from './wrappers';
5
+ import { miradorSlice, EMPTY_ARRAY } from './utils';
6
+ import { getWindow } from './getters';
7
+ import { getSequence } from './sequences';
8
+ import { getWindowViewType } from './windows';
9
+ import { getManifestLocale, getDestructuredMetadata } from './manifests';
10
+
11
+ /**
12
+ * Returns the info response.
13
+ * @param {object} state
14
+ * @returns {object}
15
+ */
16
+ export const selectInfoResponses = (state) => miradorSlice(state).infoResponses;
17
+
18
+ export const getCanvases = createSelector([getSequence], (sequence) => (sequence && sequence.getCanvases()) || EMPTY_ARRAY);
19
+
20
+ /**
21
+ * Return the canvas selected by an id
22
+ * @param {object} state
23
+ * @param {object} props
24
+ * @param {string} props.canvasId
25
+ * @returns {object}
26
+ */
27
+ export const getCanvas = createSelector([getSequence, (state, { canvasId }) => canvasId], (sequence, canvasId) => {
28
+ if (!sequence || !canvasId) return undefined;
29
+
30
+ return sequence.getCanvasById(canvasId);
31
+ });
32
+
33
+ /**
34
+ * Returns the current canvas.
35
+ * @param {object} state
36
+ * @param {object} props
37
+ * @param {string} props.windowId
38
+ * @returns {object|undefined}
39
+ */
40
+ export const getCurrentCanvas = createSelector([getSequence, getWindow], (sequence, window) => {
41
+ if (!sequence || !window) return undefined;
42
+
43
+ if (!window.canvasId) return sequence.getCanvasByIndex(0);
44
+
45
+ return sequence.getCanvasById(window.canvasId);
46
+ });
47
+
48
+ /**
49
+ * Returns the visible canvas ids.
50
+ * @param {object} state
51
+ * @param {object} props
52
+ * @param {string} props.windowId
53
+ * @returns {Array}
54
+ */
55
+ export const getVisibleCanvasIds = createSelector(
56
+ [getWindow],
57
+ (window) => (window && (window.visibleCanvases || (window.canvasId && [window.canvasId]))) || EMPTY_ARRAY,
58
+ );
59
+
60
+ /**
61
+ * Returns the visible canvses.
62
+ * @param {object} state
63
+ * @param {object} props
64
+ * @param {string} props.windowId
65
+ * @returns {Array}
66
+ */
67
+ export const getVisibleCanvases = createSelector([getVisibleCanvasIds, getCanvases], (canvasIds, canvases) =>
68
+ (canvases || []).filter((c) => canvasIds.includes(c.id)),
69
+ );
70
+
71
+ /**
72
+ * Return the current canvases grouped by how they'll appear in the viewer.
73
+ * For book view returns groups of 2, for single returns 1.
74
+ * @param {object} state
75
+ * @param {object} props
76
+ * @param {string} props.manifestId
77
+ * @param {string} props.windowId
78
+ * @returns {Array}
79
+ */
80
+ export const getCanvasGroupings = createSelector(
81
+ [getCanvases, getWindowViewType],
82
+ (canvases, view) => canvases && new CanvasGroupings(canvases, view).groupings(),
83
+ );
84
+
85
+ /**
86
+ * Return the current canvases selected in a window.
87
+ * For book view returns 2, for single returns 1.
88
+ * @param {object} state
89
+ * @param {object} props
90
+ * @param {string} props.manifestId
91
+ * @param {string} props.windowId
92
+ * @param {string} props.canvasId
93
+ * @returns {Array}
94
+ */
95
+ export const getCanvasGrouping = createSelector(
96
+ [getCanvasGroupings, (state, { canvasId }) => canvasId],
97
+ (groupings, canvasId) => (groupings && groupings.find((group) => group.some((c) => c.id === canvasId))) || EMPTY_ARRAY,
98
+ );
99
+
100
+ /**
101
+ * Return the next canvas(es) for a window.
102
+ * For book view returns 2, for single returns 1.
103
+ * @param {object} state
104
+ * @param {object} props
105
+ * @param {string} props.manifestId
106
+ * @param {string} props.windowId
107
+ * @returns {Array}
108
+ */
109
+ export const getNextCanvasGrouping = createSelector([getCanvasGroupings, getCurrentCanvas], (groupings, canvas, view) => {
110
+ if (!groupings || !canvas) return undefined;
111
+ const currentGroupIndex = groupings.findIndex((group) => group.some((c) => c.id === canvas.id));
112
+
113
+ if (currentGroupIndex < 0 || currentGroupIndex + 1 >= groupings.length) return undefined;
114
+ const newGroup = groupings[currentGroupIndex + 1];
115
+
116
+ return newGroup;
117
+ });
118
+
119
+ /**
120
+ * Return the previous canvas(es) for a window.
121
+ * For book view returns 2, for single returns 1.
122
+ * @param {object} state
123
+ * @param {object} props
124
+ * @param {string} props.manifestId
125
+ * @param {string} props.windowId
126
+ * @returns {Array}
127
+ */
128
+ export const getPreviousCanvasGrouping = createSelector([getCanvasGroupings, getCurrentCanvas], (groupings, canvas, view) => {
129
+ if (!groupings || !canvas) return undefined;
130
+
131
+ const currentGroupIndex = groupings.findIndex((group) => group.some((c) => c.id === canvas.id));
132
+
133
+ if (currentGroupIndex < 1) return undefined;
134
+ const newGroup = groupings[currentGroupIndex - 1];
135
+
136
+ return newGroup;
137
+ });
138
+
139
+ /**
140
+ * Return canvas label, or alternatively return the given index + 1 to be displayed.
141
+ * @param {object} state
142
+ * @param {object} props
143
+ * @param {string} props.canvasId
144
+ * @param {string} props.manifestId
145
+ * @returns {string|number}
146
+ */
147
+ export const getCanvasLabel = createSelector(
148
+ [getCanvas, getManifestLocale],
149
+ (canvas, locale) => canvas && (canvas.getLabel().length > 0 ? canvas.getLabel().getValue(locale) : String(canvas.index + 1)),
150
+ );
151
+
152
+ /**
153
+ * Return canvas metadata in a label / value structure
154
+ * @param {object} state
155
+ * @param {object} props
156
+ * @param {string} props.canvasId
157
+ * @param {string} props.windowId
158
+ * @returns {Array[Object]}
159
+ */
160
+ export const getCanvasMetadata = createSelector(
161
+ [getCanvas, getManifestLocale],
162
+ (canvas, locale) => canvas && getDestructuredMetadata(canvas, locale),
163
+ );
164
+
165
+ /**
166
+ * Return canvas description.
167
+ * @param {object} canvas
168
+ * @param {string} companionWindowId
169
+ */
170
+ export const getCanvasDescription = createSelector([getCanvas], (canvas) => canvas && canvas.getProperty('description'));
171
+
172
+ /**
173
+ * Return visible non tiled canvas resources.
174
+ * @param {object}
175
+ * @param {string} windowId
176
+ * @returns {Array}
177
+ */
178
+ export const getVisibleCanvasNonTiledResources = createSelector(
179
+ [getVisibleCanvases, getMiradorCanvasWrapper],
180
+ (canvases, getMiradorCanvas) =>
181
+ canvases
182
+ .flatMap((canvas) => getMiradorCanvas(canvas).imageResources)
183
+ .filter((resource) => !getIiifResourceImageService(resource)),
184
+ );
185
+
186
+ /**
187
+ * Returns visible canvas text resources.
188
+ * @param {object} state
189
+ * @param {string} windowId
190
+ * @return {Array}
191
+ */
192
+ export const getVisibleCanvasTextResources = createSelector(
193
+ [getVisibleCanvases, getMiradorCanvasWrapper],
194
+ (canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).textResources),
195
+ );
196
+
197
+ /**
198
+ * Returns visible canvas video resources.
199
+ * @param {object} state
200
+ * @param {string} windowId
201
+ * @return {Array}
202
+ */
203
+ export const getVisibleCanvasVideoResources = createSelector(
204
+ [getVisibleCanvases, getMiradorCanvasWrapper],
205
+ (canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).videoResources),
206
+ );
207
+
208
+ /**
209
+ * Returns visible canvas captions.
210
+ * @param {object} state
211
+ * @param {string} windowId
212
+ * @return {Array}
213
+ */
214
+ export const getVisibleCanvasCaptions = createSelector(
215
+ [getVisibleCanvases, getMiradorCanvasWrapper],
216
+ (canvases, getMiradorCanvas) =>
217
+ canvases.flatMap((canvas) => {
218
+ const miradorCanvas = getMiradorCanvas(canvas);
219
+ // prefer v3, fallback to v2, which can also be an empty array if no captions exist.
220
+ if (miradorCanvas.v3VttContent.length) return miradorCanvas.v3VttContent;
221
+ return miradorCanvas.v2VttContent;
222
+ }),
223
+ );
224
+
225
+ /**
226
+ * Returns visible canvas audio resources.
227
+ * @param {object} state
228
+ * @param {string} windowId
229
+ * @return {Array}
230
+ */
231
+ export const getVisibleCanvasAudioResources = createSelector(
232
+ [getVisibleCanvases, getMiradorCanvasWrapper],
233
+ (canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).audioResources),
234
+ );
235
+
236
+ /**
237
+ * Returns info response.
238
+ * @param {object} state
239
+ * @param {object} props
240
+ * @param {string} props.windowId
241
+ * @param {string} props.canvasId
242
+ * @param {string} props.infoId
243
+ * @returns {object|undefined}
244
+ */
245
+ export const selectInfoResponse = createSelector(
246
+ [(state, { infoId }) => infoId, getCanvas, getMiradorCanvasWrapper, selectInfoResponses],
247
+ (infoId, canvas, getMiradorCanvas, infoResponses) => {
248
+ let iiifServiceId = infoId;
249
+
250
+ if (!infoId) {
251
+ if (!canvas) return undefined;
252
+ const image = getMiradorCanvas(canvas).iiifImageResources[0];
253
+ iiifServiceId = image && getIiifResourceImageService(image)?.id;
254
+ }
255
+
256
+ return (
257
+ iiifServiceId && infoResponses[iiifServiceId] && !infoResponses[iiifServiceId].isFetching && infoResponses[iiifServiceId]
258
+ );
259
+ },
260
+ );
@@ -0,0 +1,182 @@
1
+ import { createSelector } from 'reselect';
2
+ import groupBy from 'lodash/groupBy';
3
+ import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
4
+ import { getWindow, getWindows } from './getters';
5
+
6
+ /**
7
+ * Returns companion windows.
8
+ * @param {object} state
9
+ * @returns {object}
10
+ */
11
+ export function getCompanionWindows(state) {
12
+ return miradorSlice(state).companionWindows || EMPTY_OBJECT;
13
+ }
14
+
15
+ /**
16
+ * Returns the companion window.
17
+ * @param {object} state
18
+ * @param {object} props
19
+ * @param {string} props.companionWindowId
20
+ * @returns {object|undefined}
21
+ */
22
+ export const getCompanionWindow = createSelector(
23
+ [getCompanionWindows, (state, { companionWindowId }) => companionWindowId],
24
+ (companionWindows, companionWindowId) => companionWindowId && companionWindows[companionWindowId],
25
+ );
26
+
27
+ /**
28
+ * Returns the companion window locale.
29
+ * @param {object} state
30
+ * @param {object} props
31
+ * @param {string} props.companionWindowId
32
+ * @returns {string|undefined}
33
+ */
34
+ export const getCompanionWindowLocale = createSelector(
35
+ [getCompanionWindow],
36
+ (companionWindow) => companionWindow && companionWindow.locale,
37
+ );
38
+
39
+ /**
40
+ * Return position of thumbnail navigation in a certain window.
41
+ * @param {object} state
42
+ * @param {object} props
43
+ * @param {string} props.windowId
44
+ * @returns {string|undefined}
45
+ */
46
+ export const getThumbnailNavigationPosition = createSelector(
47
+ [getWindow, getCompanionWindows],
48
+ (window, companionWindows) =>
49
+ window && companionWindows[window.thumbnailNavigationId] && companionWindows[window.thumbnailNavigationId].position,
50
+ );
51
+
52
+ /**
53
+ * Return companion window ids from a window.
54
+ * @param {string} windowId
55
+ * @returns {Array}
56
+ */
57
+ const getCompanionWindowIndexByWindowAndPosition = createSelector(
58
+ [getWindows, getCompanionWindows],
59
+ (windows, companionWindows) =>
60
+ (Object.keys(windows) || []).reduce(
61
+ (obj, id) => ({
62
+ ...obj,
63
+ [id]: groupBy(
64
+ windows[id].companionWindowIds || EMPTY_ARRAY,
65
+ (cwid) => companionWindows[cwid] && companionWindows[cwid].position,
66
+ ),
67
+ }),
68
+ {},
69
+ ),
70
+ );
71
+
72
+ /**
73
+ * Return companion window ids from a window.
74
+ * @param {string} windowId
75
+ * @returns {Array}
76
+ */
77
+ const getCompanionWindowsByWindowAndPosition = createSelector([getWindows, getCompanionWindows], (windows, companionWindows) =>
78
+ (Object.keys(windows) || []).reduce(
79
+ (obj, id) => ({
80
+ ...obj,
81
+ [id]: groupBy(
82
+ (windows[id].companionWindowIds || EMPTY_ARRAY).map((cwid) => companionWindows[cwid]),
83
+ (cw) => cw.position,
84
+ ),
85
+ }),
86
+ {},
87
+ ),
88
+ );
89
+
90
+ /**
91
+ * Return companion windows of a window.
92
+ * @param {object} state
93
+ * @param {string} windowId
94
+ * @returns {Array}
95
+ */
96
+ const getCompanionWindowsOfWindow = createSelector(
97
+ [(state, { windowId }) => windowId, getCompanionWindowsByWindowAndPosition],
98
+ (windowId, companionWindows) => companionWindows[windowId] || EMPTY_OBJECT,
99
+ );
100
+
101
+ /**
102
+ * Return companion windows ids of a window.
103
+ * @param {object} state
104
+ * @param {string} windowId
105
+ * @returns {Array}
106
+ */
107
+ const getCompanionWindowIdsOfWindow = createSelector(
108
+ [(state, { windowId }) => windowId, getCompanionWindowIndexByWindowAndPosition],
109
+ (windowId, companionWindowIds) => companionWindowIds[windowId] || EMPTY_OBJECT,
110
+ );
111
+
112
+ /**
113
+ * Return the companion window string from state in a given windowId and position.
114
+ * @param {object} state
115
+ * @param {string} windowId
116
+ * @param {string} position
117
+ * @returns {string}
118
+ */
119
+ export const getCompanionWindowsForPosition = createSelector(
120
+ [getCompanionWindowsOfWindow, (state, { position }) => position],
121
+ (companionWindows, position) => companionWindows[position] || EMPTY_ARRAY,
122
+ );
123
+
124
+ /**
125
+ * Return the companion window string from state in a given windowId and content type.
126
+ * @param {object} state
127
+ * @param {string} windowId
128
+ * @param {string} position
129
+ * @returns {string}
130
+ */
131
+ export const getCompanionWindowsForContent = createSelector(
132
+ [getCompanionWindowsOfWindow, (state, { content }) => content],
133
+ (companionWindows, content) => [].concat(...Object.values(companionWindows)).filter((w) => w.content === content),
134
+ );
135
+
136
+ /**
137
+ * Returns companion window ids for position.
138
+ * @param {object} state
139
+ * @param {object} props
140
+ * @param {string} props.windowId
141
+ * @param {string} props.position
142
+ * @returns {Array}
143
+ */
144
+ export const getCompanionWindowIdsForPosition = createSelector(
145
+ [getCompanionWindowIdsOfWindow, (state, { position }) => position],
146
+ (companionWindowIds, position) => companionWindowIds[position] || EMPTY_ARRAY,
147
+ );
148
+
149
+ /**
150
+ * Returns the visibility of the companion area.
151
+ * @param {object} state
152
+ * @param {string} position
153
+ * @returns {boolean}
154
+ */
155
+ export const getCompanionAreaVisibility = createSelector([(state, { position }) => position, getWindow], (position, window) => {
156
+ if (!window) return false;
157
+ const { companionAreaOpen, sideBarOpen } = window;
158
+ if (position !== 'left') return true;
159
+ return !!(companionAreaOpen && sideBarOpen);
160
+ });
161
+
162
+ /**
163
+ * Returns the dimensions.
164
+ * @param {object} state
165
+ * @param {string} companionWindowId
166
+ * @returns {object} containing height and width
167
+ */
168
+ export const selectCompanionWindowDimensions = createSelector([getCompanionWindowsOfWindow], (companionWindows) => {
169
+ let width = 0;
170
+ let height = 0;
171
+ [].concat(...Object.values(companionWindows)).forEach((cw) => {
172
+ if (cw.position.match(/right/)) {
173
+ width += 235;
174
+ }
175
+
176
+ if (cw.position.match(/bottom/)) {
177
+ height += 201;
178
+ }
179
+ });
180
+
181
+ return { height, width };
182
+ });
@@ -0,0 +1,100 @@
1
+ import { createSelector } from 'reselect';
2
+ import deepmerge from 'deepmerge';
3
+ import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
4
+ import { getWorkspace } from './getters';
5
+
6
+ /**
7
+ * Returns the config from the redux state.
8
+ * @param {object} state
9
+ * @returns {object} containing config
10
+ */
11
+ export function getConfig(state) {
12
+ const slice = miradorSlice(state || {});
13
+ return slice.config || EMPTY_OBJECT;
14
+ }
15
+
16
+ /**
17
+ * Extract an exportable version of state using the configuration from the config.
18
+ * @param {object} state
19
+ * @returns {object} containing exportable state
20
+ */
21
+ export function getExportableState(state) {
22
+ const exportConfig = getConfig(state).export;
23
+
24
+ return Object.entries(exportConfig).reduce((acc, [stem, value]) => {
25
+ if (value === true) {
26
+ // eslint-disable-next-line no-param-reassign
27
+ acc[stem] = state[stem];
28
+ } else if (value.filter) {
29
+ // eslint-disable-next-line no-param-reassign
30
+ acc[stem] = Object.entries(state[stem])
31
+ .filter(value.filter)
32
+ .reduce((stemAcc, [k, v]) => {
33
+ // eslint-disable-next-line no-param-reassign
34
+ stemAcc[k] = v;
35
+ return stemAcc;
36
+ }, {});
37
+ }
38
+ return acc;
39
+ }, {});
40
+ }
41
+
42
+ /**
43
+ * Return languages from config (in state) and indicate which is currently set.
44
+ * @param {object} state
45
+ * @returns {Array} [ {locale: 'de', label: 'Deutsch', current: true}, ... ]
46
+ */
47
+ export const getLanguagesFromConfigWithCurrent = createSelector([getConfig], ({ availableLanguages, language }) =>
48
+ Object.keys(availableLanguages).map((key) => ({
49
+ current: key === language,
50
+ label: availableLanguages[key],
51
+ locale: key,
52
+ })),
53
+ );
54
+
55
+ /**
56
+ * Returns if showZoomControls is set in the config.
57
+ * @param {object} state
58
+ * @returns {boolean}
59
+ */
60
+ export const getShowZoomControlsConfig = createSelector([getWorkspace, getConfig], (workspace, config) =>
61
+ workspace.showZoomControls === undefined ? config.workspace.showZoomControls : workspace.showZoomControls,
62
+ );
63
+
64
+ /**
65
+ * Returns the theme from the config.
66
+ * @param {object} state
67
+ * @returns {object} {palette: {...}, typography: {...}, overrides: {...}, ...}
68
+ */
69
+ export const getTheme = createSelector([getConfig], ({ theme, themes, selectedTheme }) =>
70
+ deepmerge(theme, themes[selectedTheme] || {}),
71
+ );
72
+
73
+ /**
74
+ * Returns the theme ids from the config.
75
+ * @param {object} state
76
+ * @returns {Array} ['dark', 'light']
77
+ */
78
+ export const getThemeIds = createSelector([getConfig], ({ themes }) => Object.keys(themes));
79
+
80
+ /* @deprecated */
81
+ export const getContainerId = createSelector([getConfig], ({ id }) => id);
82
+
83
+ /**
84
+ * Returns the theme direction from the config.
85
+ * @param {object} state
86
+ * @returns {string}
87
+ */
88
+ export const getThemeDirection = createSelector([getConfig], ({ theme }) => theme.direction || 'ltr');
89
+ /**
90
+ * Returns the requests configurations from the config.
91
+ * @param {object} state
92
+ * @returns {object} {preprocessor: [...], postprocessor: [...]}
93
+ */
94
+ export const getRequestsConfig = createSelector([getConfig], ({ requests }) => requests || EMPTY_OBJECT);
95
+ /**
96
+ * Returns the thumbnails configurations from the config.
97
+ * @param {object} state
98
+ * @returns {object} {preprocessor: [...], postprocessor: [...]}
99
+ */
100
+ export const getThumbnailsConfig = createSelector([getConfig], ({ thumbnails }) => thumbnails || EMPTY_OBJECT);