@scaleflex/widget-explorer 4.4.0 → 4.5.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 (564) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/style.css +2197 -0
  3. package/dist/style.min.css +1 -0
  4. package/lib/Explorer.styled.js +48 -0
  5. package/lib/components/ActionBar/ActionBar.styled.js +103 -0
  6. package/lib/components/ActionBar/DownloadWithExportButton.js +203 -0
  7. package/lib/components/ActionBar/SelectionMenu.js +111 -0
  8. package/lib/components/ActionBar/index.js +105 -0
  9. package/lib/components/AddFilesPanel/AddFiles.js +183 -0
  10. package/lib/components/AddFilesPanel/AddFiles.styled.js +137 -0
  11. package/lib/components/AddFilesPanel/index.js +59 -0
  12. package/lib/components/AiSwitcher/AiSwitcher.constants.js +1 -0
  13. package/lib/components/AiSwitcher/AiSwitcher.styled.js +24 -0
  14. package/lib/components/AiSwitcher/index.js +81 -0
  15. package/lib/components/AssetsList/AssetsList.styled.js +217 -0
  16. package/lib/components/AssetsList/GridView/FilesAccordion.js +76 -0
  17. package/lib/components/AssetsList/GridView/FilesSection/FileCell.js +260 -0
  18. package/lib/components/AssetsList/GridView/FilesSection/FileOverlayOptions.js +140 -0
  19. package/lib/components/AssetsList/GridView/FilesSection/FilesSection.styled.js +15 -0
  20. package/lib/components/AssetsList/GridView/FilesSection/index.js +31 -0
  21. package/lib/components/AssetsList/GridView/FilesSkeleton.js +47 -0
  22. package/lib/components/AssetsList/GridView/FoldersSection/FolderCell.js +239 -0
  23. package/lib/components/AssetsList/GridView/FoldersSection/FolderPreviewGrid.js +106 -0
  24. package/lib/components/AssetsList/GridView/FoldersSection/FolderTopOptions.js +70 -0
  25. package/lib/components/AssetsList/GridView/FoldersSection/index.js +23 -0
  26. package/lib/components/AssetsList/GridView/FoldersSkeleton.js +77 -0
  27. package/lib/components/AssetsList/GridView/GridView.styled.js +11 -0
  28. package/lib/components/AssetsList/GridView/SearchGridView/SearchGridView.styled.js +15 -0
  29. package/lib/components/AssetsList/GridView/SearchGridView/SearchGridViewSkeleton.js +30 -0
  30. package/lib/components/AssetsList/GridView/SearchGridView/index.js +97 -0
  31. package/lib/components/AssetsList/GridView/index.js +196 -0
  32. package/lib/components/AssetsList/ListView/AssetsSection/AssetsSectionTableHeader.js +152 -0
  33. package/lib/components/AssetsList/ListView/AssetsSection/AssetsSectionTableRow.js +333 -0
  34. package/lib/components/AssetsList/ListView/AssetsSection/index.js +99 -0
  35. package/lib/components/AssetsList/ListView/ColumnsMenu.js +89 -0
  36. package/lib/components/AssetsList/ListView/FilesAccordion.js +74 -0
  37. package/lib/components/AssetsList/ListView/FilesSkeleton.js +68 -0
  38. package/lib/components/AssetsList/ListView/FoldersSection/FoldersSectionTableHeader.js +98 -0
  39. package/lib/components/AssetsList/ListView/FoldersSection/FoldersSectionTableRow.js +156 -0
  40. package/lib/components/AssetsList/ListView/FoldersSection/index.js +54 -0
  41. package/lib/components/AssetsList/ListView/FoldersSkeleton.js +67 -0
  42. package/lib/components/AssetsList/ListView/ListView.styled.js +181 -0
  43. package/lib/components/AssetsList/ListView/ListView.utils.js +30 -0
  44. package/lib/components/AssetsList/ListView/SearchListView/index.js +109 -0
  45. package/lib/components/AssetsList/ListView/index.js +203 -0
  46. package/lib/components/AssetsList/ScrollToTop.js +70 -0
  47. package/lib/components/AssetsList/SearchView.hook.js +241 -0
  48. package/lib/components/AssetsList/__SearchTestPannel.js +238 -0
  49. package/lib/components/AssetsList/__SearchTestPannel.mock.js +1 -0
  50. package/lib/components/AssetsList/index.js +266 -0
  51. package/lib/components/AssetsList/relevanceBadge.js +15 -0
  52. package/lib/components/AssetsView/AssetsView.styled.js +25 -0
  53. package/lib/components/AssetsView/AssetsView.thunks.js +64 -0
  54. package/lib/components/AssetsView/index.js +142 -0
  55. package/lib/components/AuthExplorerView.js +79 -0
  56. package/lib/components/Breadcrumbs/BreadCrumbViews/BreadCrumbsViews.styled.js +30 -0
  57. package/lib/components/Breadcrumbs/BreadCrumbViews/index.js +32 -0
  58. package/lib/components/Breadcrumbs/Breadcrumb.js +52 -0
  59. package/lib/components/Breadcrumbs/Breadcrumbs.styled.js +81 -0
  60. package/lib/components/Breadcrumbs/BreadcrumbsSkeleton.js +12 -0
  61. package/lib/components/Breadcrumbs/index.js +187 -0
  62. package/lib/components/BulkEditPanel/BulkEdit.js +330 -0
  63. package/lib/components/BulkEditPanel/BulkEditPanel.styled.js +62 -0
  64. package/lib/components/BulkEditPanel/BulkEditPanel.utils.js +55 -0
  65. package/lib/components/BulkEditPanel/components/AssetsList/AssetsList.constants.js +29 -0
  66. package/lib/components/BulkEditPanel/components/AssetsList/AssetsList.js +148 -0
  67. package/lib/components/BulkEditPanel/components/AssetsList/AssetsList.styled.js +81 -0
  68. package/lib/components/BulkEditPanel/components/AssetsList/Columns/Columns.styled.js +99 -0
  69. package/lib/components/BulkEditPanel/components/AssetsList/Columns/FileMetadataField.js +263 -0
  70. package/lib/components/BulkEditPanel/components/AssetsList/Columns/FileTagField.js +228 -0
  71. package/lib/components/BulkEditPanel/components/AssetsList/Columns/FileTextField.js +107 -0
  72. package/lib/components/BulkEditPanel/components/AssetsList/Columns/MetadataColumn.js +142 -0
  73. package/lib/components/BulkEditPanel/components/AssetsList/Columns/TableRow.js +139 -0
  74. package/lib/components/BulkEditPanel/components/AssetsList/Columns/TagsColumn.js +58 -0
  75. package/lib/components/BulkEditPanel/components/AssetsList/Columns/TagsField.js +80 -0
  76. package/lib/components/BulkEditPanel/components/AssetsList/Columns/TextColumn.js +53 -0
  77. package/lib/components/BulkEditPanel/components/AssetsList/Columns/columns.utils.js +272 -0
  78. package/lib/components/BulkEditPanel/components/AssetsList/Columns/getActiveColumn.js +23 -0
  79. package/lib/components/BulkEditPanel/components/AssetsList/FloatyPreview.js +55 -0
  80. package/lib/components/BulkEditPanel/components/AssetsList/FloatyPreview.styled.js +21 -0
  81. package/lib/components/BulkEditPanel/components/AssetsList/TableBody.js +64 -0
  82. package/lib/components/BulkEditPanel/components/AssetsList/TableHeader.js +67 -0
  83. package/lib/components/BulkEditPanel/components/BulkEditFooter.js +33 -0
  84. package/lib/components/BulkEditPanel/components/ConfirmationModal/ConfirmationModal.js +47 -0
  85. package/lib/components/BulkEditPanel/components/ConfirmationModal/ConfirmationModal.styled.js +25 -0
  86. package/lib/components/BulkEditPanel/components/MainContent/MainContent.js +110 -0
  87. package/lib/components/BulkEditPanel/components/MainContent/MainContent.styled.js +12 -0
  88. package/lib/components/BulkEditPanel/components/MainContent/index.js +2 -0
  89. package/lib/components/BulkEditPanel/components/Sidebar/Sidebar.styled.js +53 -0
  90. package/lib/components/BulkEditPanel/components/Sidebar/Sidebar.utils.js +28 -0
  91. package/lib/components/BulkEditPanel/components/Sidebar/index.js +158 -0
  92. package/lib/components/BulkEditPanel/components/Tabs/Metadata/Metadata.js +246 -0
  93. package/lib/components/BulkEditPanel/components/Tabs/Metadata/Metadata.styled.js +17 -0
  94. package/lib/components/BulkEditPanel/components/Tabs/Tags/Tags.js +222 -0
  95. package/lib/components/BulkEditPanel/components/Tabs/Tags/Tags.mixin.js +20 -0
  96. package/lib/components/BulkEditPanel/components/Tabs/Tags/Tags.styled.js +123 -0
  97. package/lib/components/BulkEditPanel/components/Tabs/Tags/TagsContianer.js +31 -0
  98. package/lib/components/BulkEditPanel/components/Tabs/Tags/TagsPaper.js +95 -0
  99. package/lib/components/BulkEditPanel/components/Tabs/Text/Text.js +167 -0
  100. package/lib/components/BulkEditPanel/components/Tabs/Text/Text.styled.js +15 -0
  101. package/lib/components/BulkEditPanel/components/Tabs/tabs.constants.js +113 -0
  102. package/lib/components/BulkEditPanel/components/Tabs/tabs.js +43 -0
  103. package/lib/components/BulkEditPanel/components/Tabs/tabs.utils.js +239 -0
  104. package/lib/components/BulkEditPanel/index.js +28 -0
  105. package/lib/components/ContextMenu/BeforeUploadMenu/index.js +51 -0
  106. package/lib/components/ContextMenu/ContextMenu.constants.js +64 -0
  107. package/lib/components/ContextMenu/ContextMenu.hooks.js +35 -0
  108. package/lib/components/ContextMenu/ContextMenu.styled.js +107 -0
  109. package/lib/components/ContextMenu/ContextMenuContent.js +202 -0
  110. package/lib/components/ContextMenu/ContextMenuItem.js +142 -0
  111. package/lib/components/ContextMenu/FileMenu/CollaborateSection/index.js +33 -0
  112. package/lib/components/ContextMenu/FileMenu/DeleteSection/index.js +25 -0
  113. package/lib/components/ContextMenu/FileMenu/EditSection/index.js +42 -0
  114. package/lib/components/ContextMenu/FileMenu/FindSection/index.js +29 -0
  115. package/lib/components/ContextMenu/FileMenu/index.js +15 -0
  116. package/lib/components/ContextMenu/FolderMenu/CollaborateSection/index.js +17 -0
  117. package/lib/components/ContextMenu/FolderMenu/DeleteSection/index.js +41 -0
  118. package/lib/components/ContextMenu/FolderMenu/EditSection/index.js +49 -0
  119. package/lib/components/ContextMenu/FolderMenu/FindSection/index.js +49 -0
  120. package/lib/components/ContextMenu/FolderMenu/FolderMenu.utils.js +31 -0
  121. package/lib/components/ContextMenu/FolderMenu/index.js +14 -0
  122. package/lib/components/ContextMenu/MenuOptions/AddVariationOption.js +59 -0
  123. package/lib/components/ContextMenu/MenuOptions/BulkEditOption.js +47 -0
  124. package/lib/components/ContextMenu/MenuOptions/CdnLinkOption.js +54 -0
  125. package/lib/components/ContextMenu/MenuOptions/DeleteOption.js +70 -0
  126. package/lib/components/ContextMenu/MenuOptions/DownloadOption.js +88 -0
  127. package/lib/components/ContextMenu/MenuOptions/EditImageOption.js +63 -0
  128. package/lib/components/ContextMenu/MenuOptions/EditVideoOption.js +87 -0
  129. package/lib/components/ContextMenu/MenuOptions/LocateFileOption.js +45 -0
  130. package/lib/components/ContextMenu/MenuOptions/ManagaAccessOption.js +67 -0
  131. package/lib/components/ContextMenu/MenuOptions/ManageDetailsOption.js +52 -0
  132. package/lib/components/ContextMenu/MenuOptions/MoveOption.js +54 -0
  133. package/lib/components/ContextMenu/MenuOptions/PreviewOption.js +35 -0
  134. package/lib/components/ContextMenu/MenuOptions/RenameOption.js +66 -0
  135. package/lib/components/ContextMenu/MenuOptions/TransformationOption.js +63 -0
  136. package/lib/components/ContextMenu/MultipleMenu/CollaborateSection/index.js +31 -0
  137. package/lib/components/ContextMenu/MultipleMenu/DeleteSection/index.js +6 -0
  138. package/lib/components/ContextMenu/MultipleMenu/EditSection/index.js +14 -0
  139. package/lib/components/ContextMenu/MultipleMenu/FindSection/index.js +14 -0
  140. package/lib/components/ContextMenu/MultipleMenu/index.js +14 -0
  141. package/lib/components/ContextMenu/SharedMenus/DownloadFolderSubMenu.js +36 -0
  142. package/lib/components/ContextMenu/SharedMenus/DownloadSubMenu.js +70 -0
  143. package/lib/components/ContextMenu/index.js +34 -0
  144. package/lib/components/ContextMenu/utils/calculateMenuHeight.js +20 -0
  145. package/lib/components/ContextMenu/utils/calculateMenuPosition.js +42 -0
  146. package/lib/components/ContextMenu/utils/createSeparator.js +14 -0
  147. package/lib/components/ContextMenu/utils/editMedia.js +17 -0
  148. package/lib/components/ContextMenu/utils/getFileLocation.js +8 -0
  149. package/lib/components/ContextMenu/utils/getFilteredOptions.js +20 -0
  150. package/lib/components/ContextMenu/utils/getProperFolderSelections.js +7 -0
  151. package/lib/components/ContextMenu/utils/isEmptyFolderSelection.js +5 -0
  152. package/lib/components/ContextMenu/utils/isFileContextMenu.js +5 -0
  153. package/lib/components/ContextMenu/utils/isFirstFileVisibilityPublic.js +9 -0
  154. package/lib/components/ContextMenu/utils/isMenuItemVisible.js +5 -0
  155. package/lib/components/ContextMenu/utils/isMixedFiles.js +9 -0
  156. package/lib/components/ContextMenu/utils/isMultipleSelection.js +6 -0
  157. package/lib/components/ContextMenu/utils/isSeparatorHidden.js +7 -0
  158. package/lib/components/ContextMenu/utils/triggerDownload.js +45 -0
  159. package/lib/components/CropPanel/CropOptions.js +155 -0
  160. package/lib/components/CropPanel/CropPanel.constants.js +44 -0
  161. package/lib/components/CropPanel/CropPanel.styled.js +107 -0
  162. package/lib/components/CropPanel/CropPanel.utils.js +48 -0
  163. package/lib/components/CropPanel/CropPanelContent.js +209 -0
  164. package/lib/components/CropPanel/ImageOptions.js +326 -0
  165. package/lib/components/CropPanel/ImageResize.js +207 -0
  166. package/lib/components/CropPanel/Option.js +113 -0
  167. package/lib/components/CropPanel/index.js +22 -0
  168. package/lib/components/Details/Details.constants.js +75 -0
  169. package/lib/components/Details/Details.utils.js +232 -0
  170. package/lib/components/Details/DetailsSideBar.styled.js +139 -0
  171. package/lib/components/Details/EditActionButtons/EditActionButtons.styled.js +27 -0
  172. package/lib/components/Details/EditActionButtons/index.js +38 -0
  173. package/lib/components/Details/FileDetails.js +31 -0
  174. package/lib/components/Details/FileItem/CustomMetadataTab.js +50 -0
  175. package/lib/components/Details/FileItem/FileItem.styled.js +47 -0
  176. package/lib/components/Details/FileItem/GeneralTab.js +113 -0
  177. package/lib/components/Details/FileItem/SharedFileEditData.js +97 -0
  178. package/lib/components/Details/FileItem/index.js +2 -0
  179. package/lib/components/Details/FolderDetails.js +138 -0
  180. package/lib/components/Details/FolderItemList/FolderListItem.js +77 -0
  181. package/lib/components/Details/FolderItemList/index.js +62 -0
  182. package/lib/components/Details/MultiItemsDetails.js +69 -0
  183. package/lib/components/Details/MultipleItems.js +71 -0
  184. package/lib/components/Details/TabChips.js +51 -0
  185. package/lib/components/Details/TabPanels.js +42 -0
  186. package/lib/components/Details/Title.js +52 -0
  187. package/lib/components/Details/index.js +53 -0
  188. package/lib/components/DnD/Dnd.styled.js +11 -0
  189. package/lib/components/DnD/DragImage.js +61 -0
  190. package/lib/components/DnD/index.js +219 -0
  191. package/lib/components/Drawer/Drawer.styled.js +45 -0
  192. package/lib/components/Drawer/Drawer.utils.js +163 -0
  193. package/lib/components/Drawer/Resizer.js +141 -0
  194. package/lib/components/Drawer/ResizerCore.js +213 -0
  195. package/lib/components/Drawer/index.js +68 -0
  196. package/lib/components/EmptyViewPlaceholder/EmptyViewPlaceholder.styled.js +39 -0
  197. package/lib/components/EmptyViewPlaceholder/index.js +58 -0
  198. package/lib/components/ExploreView.js +46 -0
  199. package/lib/components/ExplorerUI.js +17 -0
  200. package/lib/components/ExplorerWrapper.js +114 -0
  201. package/lib/components/FacetedSearch/DrawerBody/index.js +42 -0
  202. package/lib/components/FacetedSearch/DrawerWrapper/index.js +83 -0
  203. package/lib/components/FacetedSearch/FacetedSearch.constants.js +27 -0
  204. package/lib/components/FacetedSearch/FacetedSearch.styled.js +101 -0
  205. package/lib/components/FacetedSearch/FacetedSearch.utils.js +3 -0
  206. package/lib/components/FacetedSearch/Field/Date.js +69 -0
  207. package/lib/components/FacetedSearch/Field/Placeholder.js +20 -0
  208. package/lib/components/FacetedSearch/Field/Select.js +136 -0
  209. package/lib/components/FacetedSearch/Field/Switch.js +59 -0
  210. package/lib/components/FacetedSearch/Field/index.js +27 -0
  211. package/lib/components/FacetedSearch/GroupWrapper/index.js +129 -0
  212. package/lib/components/FacetedSearch/StaticFields/Date.js +152 -0
  213. package/lib/components/FacetedSearch/index.js +12 -0
  214. package/lib/components/FileItem/FileInfo/FileInfo.styled.js +126 -0
  215. package/lib/components/FileItem/FileInfo/FileInfo.utils.js +13 -0
  216. package/lib/components/FileItem/FileInfo/FileMetadata.js +37 -0
  217. package/lib/components/FileItem/FileInfo/FileName.js +197 -0
  218. package/lib/components/FileItem/FileInfo/index.js +194 -0
  219. package/lib/components/FileItem/FileItem.mixin.js +22 -0
  220. package/lib/components/FileItem/FileItem.styled.js +54 -0
  221. package/lib/components/FileItem/FileUploadTopOptions.js +87 -0
  222. package/lib/components/FileItem/PreUploadFileThumbnail/FileThumbnail.js +61 -0
  223. package/lib/components/FileItem/PreUploadFileThumbnail/PreUploadFileThumbnail.styled.js +8 -0
  224. package/lib/components/FileItem/PreUploadFileThumbnail/index.js +27 -0
  225. package/lib/components/FileItem/index.js +164 -0
  226. package/lib/components/FileWindowPanel/Body/ActionButtons.js +70 -0
  227. package/lib/components/FileWindowPanel/Body/Body.constants.js +5 -0
  228. package/lib/components/FileWindowPanel/Body/Body.styled.js +196 -0
  229. package/lib/components/FileWindowPanel/Body/BodyFile.js +165 -0
  230. package/lib/components/FileWindowPanel/Body/Footer.js +60 -0
  231. package/lib/components/FileWindowPanel/Body/Preview.js +232 -0
  232. package/lib/components/FileWindowPanel/Body/PreviewPlaceholder.js +20 -0
  233. package/lib/components/FileWindowPanel/Body/VideoEmbed.js +80 -0
  234. package/lib/components/FileWindowPanel/Body/index.js +108 -0
  235. package/lib/components/FileWindowPanel/FileTabs/FileTabButtons.js +98 -0
  236. package/lib/components/FileWindowPanel/FileTabs/FileTabs.constants.js +50 -0
  237. package/lib/components/FileWindowPanel/FileTabs/FileTabs.styled.js +99 -0
  238. package/lib/components/FileWindowPanel/FileTabs/FileTabsList.js +91 -0
  239. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/EditableField.js +78 -0
  240. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/FieldLabel.js +40 -0
  241. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/FieldRow.js +57 -0
  242. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/FieldValue.js +20 -0
  243. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/FieldWithTooltip.js +29 -0
  244. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/GeneralSection.js +183 -0
  245. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/GeneralTab.constants.js +2 -0
  246. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/GeneralTab.styled.js +112 -0
  247. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/GeneralTabSkeleton.js +70 -0
  248. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/TableSeparator.js +10 -0
  249. package/lib/components/FileWindowPanel/FileTabs/GeneralTab/index.js +100 -0
  250. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/CustomMetadataSection.js +247 -0
  251. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/EmbeddedMetadataSection.js +31 -0
  252. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/MetadataTab.constants.js +2 -0
  253. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/MetadataTab.styled.js +134 -0
  254. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/MetadataTabSkeleton.js +70 -0
  255. package/lib/components/FileWindowPanel/FileTabs/MetadataTab/index.js +181 -0
  256. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationItem.js +78 -0
  257. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/Variations.constants.js +26 -0
  258. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/Variations.styled.js +177 -0
  259. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/Variations.thunks.js +99 -0
  260. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/Variations.utils.js +23 -0
  261. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsContent.js +92 -0
  262. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsEditModalContent.js +57 -0
  263. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsSearch.js +44 -0
  264. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsSkeleton.js +35 -0
  265. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsTabNavigator.js +41 -0
  266. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsTabs.js +40 -0
  267. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/VariationsTopOptions.js +204 -0
  268. package/lib/components/FileWindowPanel/FileTabs/VariationsTab/index.js +603 -0
  269. package/lib/components/FileWindowPanel/FileTabs/index.js +83 -0
  270. package/lib/components/FileWindowPanel/FileWindow.js +221 -0
  271. package/lib/components/FileWindowPanel/FileWindow.styled.js +19 -0
  272. package/lib/components/FileWindowPanel/FileWindow.utils.js +38 -0
  273. package/lib/components/FileWindowPanel/Header/AfterUploadActionBtns.js +69 -0
  274. package/lib/components/FileWindowPanel/Header/BeforeUploadActionBtns.js +100 -0
  275. package/lib/components/FileWindowPanel/Header/FileWindowHeader.styled.js +56 -0
  276. package/lib/components/FileWindowPanel/Header/MutualActionBtns.js +92 -0
  277. package/lib/components/FileWindowPanel/Header/index.js +109 -0
  278. package/lib/components/FileWindowPanel/index.js +60 -0
  279. package/lib/components/Filters/Filters.constants.js +358 -0
  280. package/lib/components/Filters/Filters.styled.js +235 -0
  281. package/lib/components/Filters/Filters.utils.js +536 -0
  282. package/lib/components/Filters/FiltersContext.js +59 -0
  283. package/lib/components/Filters/FiltersSkeleton.js +14 -0
  284. package/lib/components/Filters/Groups/Date/index.js +201 -0
  285. package/lib/components/Filters/Groups/Folders/FoldersSkeleton.js +43 -0
  286. package/lib/components/Filters/Groups/Folders/index.js +109 -0
  287. package/lib/components/Filters/Groups/Image/Colors.js +73 -0
  288. package/lib/components/Filters/Groups/Image/Faces.js +64 -0
  289. package/lib/components/Filters/Groups/Image/Orientations.js +64 -0
  290. package/lib/components/Filters/Groups/Image/Resolutions.js +65 -0
  291. package/lib/components/Filters/Groups/Image/Tooltip.js +14 -0
  292. package/lib/components/Filters/Groups/Image/index.js +104 -0
  293. package/lib/components/Filters/Groups/LicenseExpiry/LicenseExpiry.styled.js +17 -0
  294. package/lib/components/Filters/Groups/LicenseExpiry/index.js +97 -0
  295. package/lib/components/Filters/Groups/Metadata/Advanced/ConditionSelector.js +40 -0
  296. package/lib/components/Filters/Groups/Metadata/Advanced/ExtraRow/ConditionSelector.js +35 -0
  297. package/lib/components/Filters/Groups/Metadata/Advanced/ExtraRow/ValueSelector.js +33 -0
  298. package/lib/components/Filters/Groups/Metadata/Advanced/ExtraRow/index.js +18 -0
  299. package/lib/components/Filters/Groups/Metadata/Advanced/Field/AutoComplete.js +56 -0
  300. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Boolean.js +35 -0
  301. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Date.js +36 -0
  302. package/lib/components/Filters/Groups/Metadata/Advanced/Field/GeoPointField.js +30 -0
  303. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Numeric.js +32 -0
  304. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Select.js +55 -0
  305. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Tags.js +21 -0
  306. package/lib/components/Filters/Groups/Metadata/Advanced/Field/Text.js +39 -0
  307. package/lib/components/Filters/Groups/Metadata/Advanced/Field/index.js +52 -0
  308. package/lib/components/Filters/Groups/Metadata/Advanced/KeySelector.js +34 -0
  309. package/lib/components/Filters/Groups/Metadata/Advanced/Row.js +53 -0
  310. package/lib/components/Filters/Groups/Metadata/Advanced/index.js +48 -0
  311. package/lib/components/Filters/Groups/Metadata/Basic/Field/Date.js +45 -0
  312. package/lib/components/Filters/Groups/Metadata/Basic/Field/Field.utils.js +58 -0
  313. package/lib/components/Filters/Groups/Metadata/Basic/Field/Numeric.js +51 -0
  314. package/lib/components/Filters/Groups/Metadata/Basic/Field/OptionsPopup.js +87 -0
  315. package/lib/components/Filters/Groups/Metadata/Basic/Field/Select.js +168 -0
  316. package/lib/components/Filters/Groups/Metadata/Basic/Field/Switch.js +41 -0
  317. package/lib/components/Filters/Groups/Metadata/Basic/Field/Tags.js +38 -0
  318. package/lib/components/Filters/Groups/Metadata/Basic/Field/Text.js +57 -0
  319. package/lib/components/Filters/Groups/Metadata/Basic/Field/Uri.js +54 -0
  320. package/lib/components/Filters/Groups/Metadata/Basic/Field/index.js +46 -0
  321. package/lib/components/Filters/Groups/Metadata/Basic/GroupWrapper.js +79 -0
  322. package/lib/components/Filters/Groups/Metadata/Basic/index.js +80 -0
  323. package/lib/components/Filters/Groups/Metadata/Metadata.constants.js +42 -0
  324. package/lib/components/Filters/Groups/Metadata/Metadata.styled.js +150 -0
  325. package/lib/components/Filters/Groups/Metadata/Metadata.utils.js +160 -0
  326. package/lib/components/Filters/Groups/Metadata/MetadataFiltersContext.js +329 -0
  327. package/lib/components/Filters/Groups/Metadata/Placeholder.js +25 -0
  328. package/lib/components/Filters/Groups/Metadata/common/TagsField/TagsMenu.js +81 -0
  329. package/lib/components/Filters/Groups/Metadata/common/TagsField/TagsSearchPlaceholder.js +18 -0
  330. package/lib/components/Filters/Groups/Metadata/common/TagsField/index.js +142 -0
  331. package/lib/components/Filters/Groups/Metadata/index.js +111 -0
  332. package/lib/components/Filters/Groups/Size/index.js +125 -0
  333. package/lib/components/Filters/Groups/Tags/FilteredTags.js +62 -0
  334. package/lib/components/Filters/Groups/Tags/SelectedTags.js +51 -0
  335. package/lib/components/Filters/Groups/Tags/SuggestedTags.js +43 -0
  336. package/lib/components/Filters/Groups/Tags/index.js +146 -0
  337. package/lib/components/Filters/Groups/TypeAndFormat/Format.js +65 -0
  338. package/lib/components/Filters/Groups/TypeAndFormat/Type.js +85 -0
  339. package/lib/components/Filters/Groups/TypeAndFormat/index.js +114 -0
  340. package/lib/components/Filters/Groups/common/DateRangeField/DateRangeField.styled.js +10 -0
  341. package/lib/components/Filters/Groups/common/DateRangeField/index.js +72 -0
  342. package/lib/components/Filters/Groups/common/FilterFooter.js +67 -0
  343. package/lib/components/Filters/Groups/common/FilterOptions.js +29 -0
  344. package/lib/components/Filters/Groups/common/FilterSearch.js +22 -0
  345. package/lib/components/Filters/Groups/common/FilterSearch.styled.js +15 -0
  346. package/lib/components/Filters/Groups/common/FilterSkeleton.js +44 -0
  347. package/lib/components/Filters/Groups/common/TimeFrames.js +35 -0
  348. package/lib/components/Filters/Groups/index.js +55 -0
  349. package/lib/components/Filters/Placeholder.js +29 -0
  350. package/lib/components/Filters/hooks/useDateTypeFilterValues.js +182 -0
  351. package/lib/components/Filters/hooks/useFilters.js +78 -0
  352. package/lib/components/Filters/index.js +78 -0
  353. package/lib/components/FoldersView/FoldersTree/FoldersTree.styled.js +193 -0
  354. package/lib/components/FoldersView/FoldersTree/FoldersTree.utils.js +78 -0
  355. package/lib/components/FoldersView/FoldersTree/FoldersTreeHeader.js +52 -0
  356. package/lib/components/FoldersView/FoldersTree/FoldersTreeList.js +64 -0
  357. package/lib/components/FoldersView/FoldersTree/FoldersTreeListItem.js +270 -0
  358. package/lib/components/FoldersView/FoldersTree/FoldersTreeSearch.js +70 -0
  359. package/lib/components/FoldersView/FoldersTree/FoldersTreeSkeleton.js +23 -0
  360. package/lib/components/FoldersView/FoldersTree/NoFoldersResult.js +19 -0
  361. package/lib/components/FoldersView/FoldersTree/SearchedFoldersItem.js +113 -0
  362. package/lib/components/FoldersView/FoldersTree/index.js +163 -0
  363. package/lib/components/FoldersView/hooks/useAddFolder.js +60 -0
  364. package/lib/components/FoldersView/index.js +282 -0
  365. package/lib/components/GalleryRoleSelect/CustomRolesTab.js +47 -0
  366. package/lib/components/GalleryRoleSelect/CustomRolesTab.styled.js +10 -0
  367. package/lib/components/GalleryRoleSelect/GalleryRoleSelect.constants.js +11 -0
  368. package/lib/components/GalleryRoleSelect/GalleryRoleSelect.styled.js +132 -0
  369. package/lib/components/GalleryRoleSelect/GalleryRoleSelect.utils.js +87 -0
  370. package/lib/components/GalleryRoleSelect/StandardRolesTab.js +58 -0
  371. package/lib/components/GalleryRoleSelect/index.js +234 -0
  372. package/lib/components/HeaderBar/FacetedSearchToggleButton.js +28 -0
  373. package/lib/components/HeaderBar/HeaderBar.styled.js +25 -0
  374. package/lib/components/HeaderBar/RightSide.js +127 -0
  375. package/lib/components/HeaderBar/index.js +77 -0
  376. package/lib/components/ImageEditorPanel/index.js +33 -0
  377. package/lib/components/InfiniteScroll/InfiniteScroll.js +97 -0
  378. package/lib/components/InfiniteScroll/InfiniteScroll.styled.js +11 -0
  379. package/lib/components/Informer/index.js +9 -0
  380. package/lib/components/LoginScreen/LoginScreen.styled.js +39 -0
  381. package/lib/components/LoginScreen/index.js +133 -0
  382. package/lib/components/MainMenu/MainMenu.styled.js +12 -0
  383. package/lib/components/MainMenu/index.js +77 -0
  384. package/lib/components/Modals/AddNewFolder/AddNewFolder.hooks.js +99 -0
  385. package/lib/components/Modals/AddNewFolder/index.js +1 -0
  386. package/lib/components/Modals/ConfirmationModal/ConfirmationModal.hooks.js +101 -0
  387. package/lib/components/Modals/ConfirmationModal/index.js +1 -0
  388. package/lib/components/Modals/DeleteItems/DeleteItems.hooks.js +233 -0
  389. package/lib/components/Modals/DeleteItems/index.js +1 -0
  390. package/lib/components/Modals/DeleteModal/DeleteModal.hooks.js +87 -0
  391. package/lib/components/Modals/DeleteModal/index.js +1 -0
  392. package/lib/components/Modals/DownloadConsent/DownlaodConsent.styled.js +8 -0
  393. package/lib/components/Modals/DownloadConsent/DownloadConsent.hooks.js +90 -0
  394. package/lib/components/Modals/DownloadConsent/DownloadConsentContent.js +52 -0
  395. package/lib/components/Modals/DownloadConsent/index.js +2 -0
  396. package/lib/components/Modals/Modals.js +386 -0
  397. package/lib/components/Modals/Modals.styled.js +80 -0
  398. package/lib/components/Modals/MoveItems/MoveItems.hooks.js +88 -0
  399. package/lib/components/Modals/MoveItems/index.js +1 -0
  400. package/lib/components/Modals/TransformedDownload/PdfModalContent.js +109 -0
  401. package/lib/components/Modals/TransformedDownload/TransformedDownload.hooks.js +188 -0
  402. package/lib/components/Modals/TransformedDownload/TransformedDownload.styled.js +29 -0
  403. package/lib/components/Modals/TransformedDownload/TransformedDownload.utils.js +46 -0
  404. package/lib/components/Modals/TransformedDownload/index.js +2 -0
  405. package/lib/components/Modals/index.js +8 -0
  406. package/lib/components/NoItems/NoItems.styled.js +54 -0
  407. package/lib/components/NoItems/index.js +50 -0
  408. package/lib/components/PdftronPanel/index.js +31 -0
  409. package/lib/components/PickerPanel/PickerPanel.styled.js +41 -0
  410. package/lib/components/PickerPanel/PickerPanelContent.js +100 -0
  411. package/lib/components/PickerPanel/index.js +21 -0
  412. package/lib/components/ProgressPanel/ProgressPanel.utils.js +29 -0
  413. package/lib/components/ProgressPanel/index.js +37 -0
  414. package/lib/components/TopBar/AppliedFilterChips/AppliedFilterChips.styled.js +11 -0
  415. package/lib/components/TopBar/AppliedFilterChips/index.js +77 -0
  416. package/lib/components/TopBar/Search/ContextDropdown/ContextDropdown.styled.js +59 -0
  417. package/lib/components/TopBar/Search/ContextDropdown/ContextDropdown.utils.js +67 -0
  418. package/lib/components/TopBar/Search/ContextDropdown/index.js +170 -0
  419. package/lib/components/TopBar/Search/PrependedOptions/TempFilterRegexInput.js +133 -0
  420. package/lib/components/TopBar/Search/Search.utils.js +88 -0
  421. package/lib/components/TopBar/Search/SimilarSearchTag.js +60 -0
  422. package/lib/components/TopBar/Search/index.js +251 -0
  423. package/lib/components/TopBar/TopBar.styled.js +37 -0
  424. package/lib/components/TopBar/index.js +61 -0
  425. package/lib/components/TopSection/TopSection.styled.js +22 -0
  426. package/lib/components/TopSection/index.js +58 -0
  427. package/lib/components/UploadBar/UploadBar.styled.js +84 -0
  428. package/lib/components/UploadBar/index.js +222 -0
  429. package/lib/components/UploadStatus/index.js +20 -0
  430. package/lib/components/UploadsPanel/UploadsList/Header.js +19 -0
  431. package/lib/components/UploadsPanel/UploadsList/List.js +29 -0
  432. package/lib/components/UploadsPanel/UploadsList/PreUploadPlugins.js +22 -0
  433. package/lib/components/UploadsPanel/UploadsList/UploadsList.styled.js +64 -0
  434. package/lib/components/UploadsPanel/UploadsList/UploadsList.utils.js +17 -0
  435. package/lib/components/UploadsPanel/UploadsList/UploadsVirtualGrid.js +29 -0
  436. package/lib/components/UploadsPanel/UploadsList/index.js +55 -0
  437. package/lib/components/UploadsPanel/UploadsPanel.styled.js +24 -0
  438. package/lib/components/UploadsPanel/UploadsPanelTopBar.js +16 -0
  439. package/lib/components/UploadsPanel/index.js +36 -0
  440. package/lib/components/UrlBuilderModal/UrlBuilderModal.styled.js +9 -0
  441. package/lib/components/UrlBuilderModal/index.js +97 -0
  442. package/lib/components/Views/ErroredViewPlaceholder.js +48 -0
  443. package/lib/components/Views/Views.constants.js +29 -0
  444. package/lib/components/Views/Views.styled.js +87 -0
  445. package/lib/components/Views/index.js +100 -0
  446. package/lib/components/common/DeleteModalItemText/DeleteModalItemText.styled.js +8 -0
  447. package/lib/components/common/DeleteModalItemText/index.js +29 -0
  448. package/lib/components/common/EditDetailsButton/EditDetailsButton.styled.js +35 -0
  449. package/lib/components/common/EditDetailsButton/index.js +28 -0
  450. package/lib/components/common/ExpiryDateTooltipContent/ExpiryDateTooltipContent.styled.js +16 -0
  451. package/lib/components/common/ExpiryDateTooltipContent/index.js +29 -0
  452. package/lib/components/common/FileApprovalsInfoPopup/index.js +46 -0
  453. package/lib/components/common/FileMetadataFieldValue/CustomMetadataFieldValue.js +48 -0
  454. package/lib/components/common/FileMetadataFieldValue/FileMetadataFieldValue.styled.js +66 -0
  455. package/lib/components/common/FileMetadataFieldValue/FileMetadataFieldValue.utils.js +315 -0
  456. package/lib/components/common/FileMetadataFieldValue/GeneralMetadataFieldValue.js +120 -0
  457. package/lib/components/common/FileMetadataFieldValue/index.js +26 -0
  458. package/lib/components/common/FileMetadataFieldValue/utils/getFontInfo.js +78 -0
  459. package/lib/components/common/FolderSelector/BrowseFoldersMenu.js +114 -0
  460. package/lib/components/common/FolderSelector/FolderSearchMenu.js +45 -0
  461. package/lib/components/common/FolderSelector/FolderSelector.styled.js +41 -0
  462. package/lib/components/common/FolderSelector/index.js +186 -0
  463. package/lib/components/common/FormattedUriLink/FormattedUriLink.styled.js +15 -0
  464. package/lib/components/common/FormattedUriLink/index.js +21 -0
  465. package/lib/components/common/OriginalBadge/OriginalBadge.styled.js +17 -0
  466. package/lib/components/common/OriginalBadge/index.js +14 -0
  467. package/lib/components/common/SanitizedHtmlElement/index.js +11 -0
  468. package/lib/components/common/Sort/Sort.constants.js +61 -0
  469. package/lib/components/common/Sort/Sort.styled.js +47 -0
  470. package/lib/components/common/Sort/Sort.utils.js +14 -0
  471. package/lib/components/common/Sort/index.js +183 -0
  472. package/lib/components/common/TextWithCopyIcon/TextWithCopyIcon.styled.js +44 -0
  473. package/lib/components/common/TextWithCopyIcon/index.js +71 -0
  474. package/lib/components/common/TopBarUploadButton/index.js +40 -0
  475. package/lib/components/common/TrimmedFilePathWithLocate/TrimmedFilePathWithLocate.utils.js +3 -0
  476. package/lib/components/common/TrimmedFilePathWithLocate/index.js +34 -0
  477. package/lib/components/common/TrimmedFolderPathWithLocate/index.js +13 -0
  478. package/lib/components/common/TrimmedPathWithLocate/TrimmedPathWithLocate.styled.js +30 -0
  479. package/lib/components/common/TrimmedPathWithLocate/index.js +40 -0
  480. package/lib/components/metadata.adapter.js +365 -0
  481. package/lib/defaultLocale.js +1361 -0
  482. package/lib/hooks/index.js +16 -0
  483. package/lib/hooks/useAssetsPicker.js +274 -0
  484. package/lib/hooks/useDownloadFilesCsv.js +20 -0
  485. package/lib/hooks/useEditFileDetails.js +505 -0
  486. package/lib/hooks/useExplorer.js +6 -0
  487. package/lib/hooks/useExplorerI18n.js +10 -0
  488. package/lib/hooks/useExplorerInformer.js +10 -0
  489. package/lib/hooks/useFetchFileFolderPermissions.js +31 -0
  490. package/lib/hooks/useFetchMetadataTagsBySearchQuery.js +38 -0
  491. package/lib/hooks/useFileMetadata.js +117 -0
  492. package/lib/hooks/useFilterSearch.js +37 -0
  493. package/lib/hooks/useForcedFilters.js +39 -0
  494. package/lib/hooks/useIsOverflow.js +25 -0
  495. package/lib/hooks/useIsSmallScreen.js +20 -0
  496. package/lib/hooks/useLocateFile.js +231 -0
  497. package/lib/hooks/usePrevious.js +9 -0
  498. package/lib/hooks/useSearchSuggestions.js +168 -0
  499. package/lib/hooks/useStartUpload.js +43 -0
  500. package/lib/hooks/useToLocaleNumber.js +14 -0
  501. package/lib/hooks/useValidateFileName.js +324 -0
  502. package/lib/index.js +1616 -0
  503. package/lib/slices/common.slice.js +254 -0
  504. package/lib/slices/drag.slice.js +75 -0
  505. package/lib/slices/files.slice.js +1307 -0
  506. package/lib/slices/filters.slice.js +382 -0
  507. package/lib/slices/folders.slice.js +978 -0
  508. package/lib/slices/foldersTree.slice.js +501 -0
  509. package/lib/slices/index.js +32 -0
  510. package/lib/slices/metadata.slice.js +494 -0
  511. package/lib/slices/panels.slice.js +351 -0
  512. package/lib/slices/search.slice.js +995 -0
  513. package/lib/slices/selections.slice.js +315 -0
  514. package/lib/slices/targets.slice.js +44 -0
  515. package/lib/slices/topSection.slice.js +71 -0
  516. package/lib/slices/views.slice.js +345 -0
  517. package/lib/thunks/archive.thunks.js +175 -0
  518. package/lib/thunks/downloads.thunks.js +415 -0
  519. package/lib/thunks/items.thunks.js +274 -0
  520. package/lib/thunks/permissions.thunks.js +66 -0
  521. package/lib/thunks/uploads.thunks.js +235 -0
  522. package/lib/utils/SearchSuggestions/SearchSuggestionsMenu.js +95 -0
  523. package/lib/utils/SearchSuggestions/SuggestionMode.js +70 -0
  524. package/lib/utils/SearchSuggestions/SuggestionModeAttribute.js +87 -0
  525. package/lib/utils/SearchSuggestions/SuggestionModeExpression.js +121 -0
  526. package/lib/utils/SearchSuggestions/SuggestionModeTag.js +87 -0
  527. package/lib/utils/SearchSuggestions/SuggestionsManager.js +242 -0
  528. package/lib/utils/SearchSuggestions/constants.js +14 -0
  529. package/lib/utils/SearchSuggestions/index.js +4 -0
  530. package/lib/utils/SearchSuggestions/styled.js +12 -0
  531. package/lib/utils/availableScreenSizes.js +4 -0
  532. package/lib/utils/constants.js +14 -0
  533. package/lib/utils/convertItemsToFilesFoldersUuids.js +12 -0
  534. package/lib/utils/convertItemstoFoldersParentUuids.js +12 -0
  535. package/lib/utils/createPromise.js +9 -0
  536. package/lib/utils/createSuperFocus.js +43 -0
  537. package/lib/utils/decodeB64ToStr.js +11 -0
  538. package/lib/utils/filters.js +333 -0
  539. package/lib/utils/formatFolderPath.js +10 -0
  540. package/lib/utils/formatPinSubTitle.js +17 -0
  541. package/lib/utils/getAcquirerTitle.js +10 -0
  542. package/lib/utils/getActiveOverlayEl.js +11 -0
  543. package/lib/utils/getApiPathtype.js +10 -0
  544. package/lib/utils/getClosestStr.js +22 -0
  545. package/lib/utils/getItemUuids.js +12 -0
  546. package/lib/utils/getLabelsTotalAssetsCount.js +6 -0
  547. package/lib/utils/getMoveAndDeleteData.js +15 -0
  548. package/lib/utils/getParentFolderPath.js +4 -0
  549. package/lib/utils/getQueryStringFromUrl.js +6 -0
  550. package/lib/utils/getScrollableParent.js +15 -0
  551. package/lib/utils/getStringValueExistedInObj.js +9 -0
  552. package/lib/utils/isEmbeddableAsset.js +6 -0
  553. package/lib/utils/isFileVersion.js +9 -0
  554. package/lib/utils/mapArrayKeysToObjValues.js +33 -0
  555. package/lib/utils/mapFiltersToShownFormat.js +252 -0
  556. package/lib/utils/prepareExportedFilesLinks.js +12 -0
  557. package/lib/utils/prepareSearchUrl.js +65 -0
  558. package/lib/utils/removeBackground.js +60 -0
  559. package/lib/utils/removeExtraUrlParams.js +13 -0
  560. package/lib/utils/scrollToAndFocusItemElement.js +16 -0
  561. package/lib/utils/toggleFolderNotFoundModal.js +25 -0
  562. package/lib/utils/trapFocus.js +59 -0
  563. package/lib/utils/truncateString.js +28 -0
  564. package/package.json +8 -8
package/lib/index.js ADDED
@@ -0,0 +1,1616 @@
1
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
11
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
12
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
13
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
14
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
15
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
18
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
19
+ function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
20
+ function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }
21
+ function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }
22
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
23
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
24
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
25
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
+ import { createElement } from 'react';
27
+ import { Plugin } from '@scaleflex/widget-core';
28
+ import { BrowserRouter as Router } from 'react-router-dom';
29
+ import Informer from '@scaleflex/widget-informer';
30
+ import ThumbnailGenerator from '@scaleflex/widget-thumbnail-generator';
31
+ import getDroppedFiles from '@scaleflex/widget-utils/lib/getDroppedFiles';
32
+ import toArray from '@scaleflex/widget-utils/lib/toArray';
33
+ import Translator from '@scaleflex/widget-utils/lib/Translator';
34
+ import findAllDOMElements from '@scaleflex/widget-utils/lib/findAllDOMElements';
35
+ import { selectUploadsCount } from '@scaleflex/widget-core/lib/slices/uploads.slice';
36
+ import isEmptyObject from '@scaleflex/widget-utils/lib/isEmptyObject';
37
+ import { LIST_VIEW_COLS_IDS, VIEW_IDS, IMAGE_EDITOR_MODES, LIST_VIEW_FOLDERS_COLS_IDS, PLUGINS_IDS, LAYOUTS_IDS, FMAW_URL_QUERY_PARAMS } from '@scaleflex/widget-utils/lib/constants';
38
+ import cuid from 'cuid';
39
+ import { getFileInheritedVisibility } from '@scaleflex/widget-utils/lib/visibility';
40
+ import ExplorerUI from './components/ExplorerUI';
41
+ import defaultLocale from './defaultLocale';
42
+ import createSuperFocus from './utils/createSuperFocus';
43
+ import createPromise from './utils/createPromise';
44
+ import trapFocus from './utils/trapFocus';
45
+ import explorerReducer from './slices';
46
+ import { targetAdded, targetRemoved } from './slices/targets.slice';
47
+ import { allPanelsClosed, detailsViewToggled, facetedSearchSidebarToggled, fileWindowUpdated, selectActiveOverlayType, selectFileWindowFor, showAddFilesPanelUpdated, uploadsPanelOpened } from './slices/panels.slice';
48
+ import { /* darkModeUpdated, */accessRolesUpdated, explorerCommonStateUpdated, selectIsPluginModalHidden, explorerPluginLoadingSet, pluginModalClosing, pluginModalHidden, selectIsPluginModalClosing } from './slices/common.slice';
49
+ import { fetchFolders, folderUpdated, foldersAdded, foldersSortingUpdated, foldersStateUpdated, selectBaseFolderPath, selectCurrentFolder, selectCurrentFolderPath, selectFolderByPath, selectFolders } from './slices/folders.slice';
50
+ import { fileAdded, filesSortingUpdated, selectCurrentFileByIdOrUuid } from './slices/files.slice';
51
+ import { changeView, selectActiveView, selectIsAssetsView, viewsStateUpdated } from './slices/views.slice';
52
+ import { foldersTreeFoldersUpdated, recursivelyFetchFoldersTree } from './slices/foldersTree.slice';
53
+ import { isMetaRegionalLanguagesGroupExists } from './components/metadata.adapter';
54
+ import { metadataUpdated } from './slices/metadata.slice';
55
+ import { DEFAULT_FILTER_OPERATOR, AVAILABLE_FILTER_OPERATORS, FILTER_SECTION_KEYS } from './components/Filters/Filters.constants';
56
+ import { getMappedFilterValues } from './components/Filters/Filters.utils';
57
+ import { facetedSearchToggled } from './slices/filters.slice';
58
+ import { checkIsValidSortBy, checkIsValidSortOrder } from './components/common/Sort/Sort.utils';
59
+ import { DEFAULT_SORT_OPTION } from './components/common/Sort/Sort.constants';
60
+ import isFileVersion from './utils/isFileVersion';
61
+ import { addUploadActivity } from './thunks/uploads.thunks';
62
+
63
+ // TODO: find a way to show version of the current plugin
64
+ // why solution below isn't good?
65
+ // first import doesn't work with webpack 5 as it was deprecated
66
+ // second import fixes webpack 5 issue as it was mentioned in their docs
67
+ // but it exposes our package.json to the client and it is mentioned as security rist in mutiple places
68
+ // https://github.com/axelpale/genversion
69
+ // https://stackoverflow.com/questions/64993118/error-should-not-import-the-named-export-version-imported-as-version
70
+ // https://stackoverflow.com/questions/9153571/is-there-a-way-to-get-version-from-package-json-in-nodejs-code/10855054#10855054
71
+ // import { version } from '../package.json'
72
+ // import packageInfo from '../package.json'
73
+ var Explorer = /*#__PURE__*/function (_Plugin) {
74
+ // static VERSION = packageInfo.version
75
+
76
+ function Explorer(filerobot) {
77
+ var _defaultOptions$confi, _opts$config, _defaultOptions$confi2, _opts$config2, _opts$config3;
78
+ var _this;
79
+ var _opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
80
+ _classCallCheck(this, Explorer);
81
+ _this = _callSuper(this, Explorer, [filerobot, _opts]);
82
+ _defineProperty(_this, "isUrlPathUpdateDismissed", function () {
83
+ return _this.opts.dismissUrlPathQueryUpdate || !_this.opts.ExploreViewComponent || _this.opts.useAssetsPicker;
84
+ });
85
+ _defineProperty(_this, "pushUrlInBrowser", function (newUrl) {
86
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
87
+ // Avoiding pushing the same url so we keep the backward/forward states as they are and avoid duplicating.
88
+ if (_this.isUrlPathUpdateDismissed() || !newUrl || newUrl.toString() === window.location.toString()) {
89
+ return;
90
+ }
91
+ history.pushState(data, '', newUrl);
92
+ });
93
+ _defineProperty(_this, "replaceUrlInBrowser", function (newUrl) {
94
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
95
+ if (_this.isUrlPathUpdateDismissed() || !newUrl || newUrl.toString() === window.location.toString()) {
96
+ return;
97
+ }
98
+ history.replaceState(data, '', newUrl, true);
99
+ });
100
+ _defineProperty(_this, "replaceUrlQueryParams", function (_ref) {
101
+ var params = _ref.params,
102
+ _ref$keyPrefix = _ref.keyPrefix,
103
+ keyPrefix = _ref$keyPrefix === void 0 ? '' : _ref$keyPrefix,
104
+ _ref$keysToDelete = _ref.keysToDelete,
105
+ keysToDelete = _ref$keysToDelete === void 0 ? [] : _ref$keysToDelete,
106
+ _ref$callback = _ref.callback,
107
+ callback = _ref$callback === void 0 ? function (_key, value) {
108
+ return value;
109
+ } : _ref$callback,
110
+ _ref$push = _ref.push,
111
+ push = _ref$push === void 0 ? false : _ref$push;
112
+ if (_this.isUrlPathUpdateDismissed()) return;
113
+ var url;
114
+ if (keysToDelete.length > 0) {
115
+ url = _this._getDeletedUrlQueryParams(keysToDelete);
116
+ }
117
+ Object.keys(params || {}).forEach(function (key) {
118
+ var value = callback(key, params[key]);
119
+ url = _this._getUpdatedUrlQueryParams(["".concat(keyPrefix || '').concat(key)], [value], url);
120
+ });
121
+ if (push) {
122
+ _this.pushUrlInBrowser(url);
123
+ } else {
124
+ _this.replaceUrlInBrowser(url);
125
+ }
126
+ });
127
+ _defineProperty(_this, "getUrlQueryParam", function (key, defaultValue) {
128
+ if (_this.isUrlPathUpdateDismissed() || !key) return defaultValue;
129
+ var targetUrl = new URL(window.location);
130
+ var paramValue = targetUrl.searchParams.get("".concat(_this.opts.queryParamPrefix || '').concat(key));
131
+ return paramValue || defaultValue;
132
+ });
133
+ _defineProperty(_this, "getQueryParamsAsObject", function () {
134
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
135
+ forEachCallback = _ref2.forEachCallback,
136
+ _ref2$keyPrefix = _ref2.keyPrefix,
137
+ keyPrefix = _ref2$keyPrefix === void 0 ? '' : _ref2$keyPrefix,
138
+ _ref2$returnValueOnly = _ref2.returnValueOnly,
139
+ returnValueOnly = _ref2$returnValueOnly === void 0 ? false : _ref2$returnValueOnly;
140
+ if (_this.isUrlPathUpdateDismissed()) return [];
141
+ var targetUrl = new URL(window.location);
142
+ var params = {};
143
+ targetUrl.searchParams.forEach(function (value, key) {
144
+ var keyStartsWithPrefix = "".concat(_this.opts.queryParamPrefix).concat(keyPrefix);
145
+ if (key.startsWith(keyStartsWithPrefix)) {
146
+ var _value$match;
147
+ var filterRegex = new RegExp("(?:(?<filterKey>[a-z]*)?(?<filterOperator>".concat(AVAILABLE_FILTER_OPERATORS.join('|'), "))?(?<filterValue>.*)"), 'i');
148
+ var _ref3 = ((_value$match = value.match(filterRegex)) === null || _value$match === void 0 ? void 0 : _value$match.groups) || {},
149
+ filterKey = _ref3.filterKey,
150
+ _ref3$filterOperator = _ref3.filterOperator,
151
+ filterOperator = _ref3$filterOperator === void 0 ? DEFAULT_FILTER_OPERATOR : _ref3$filterOperator,
152
+ filterValue = _ref3.filterValue;
153
+ var mappedValue = (filterValue || value).split(',');
154
+ var sanitizedKey = key.replace(keyStartsWithPrefix, '');
155
+ params[sanitizedKey] = returnValueOnly ? mappedValue : _objectSpread(_objectSpread({}, filterKey && {
156
+ key: filterKey
157
+ }), {}, {
158
+ operator: filterOperator,
159
+ value: mappedValue
160
+ });
161
+ if (typeof forEachCallback === 'function') {
162
+ forEachCallback(params[sanitizedKey], sanitizedKey);
163
+ }
164
+ }
165
+ });
166
+ if (Array.isArray(params[FILTER_SECTION_KEYS.METADATA])) {
167
+ params[FILTER_SECTION_KEYS.METADATA] = params[FILTER_SECTION_KEYS.METADATA][0];
168
+ }
169
+ return params;
170
+ });
171
+ _defineProperty(_this, "_getUpdatedUrlQueryParams", function () {
172
+ var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
173
+ var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
174
+ var locationUrl = arguments.length > 2 ? arguments[2] : undefined;
175
+ if (_this.isUrlPathUpdateDismissed() || !keys || (keys === null || keys === void 0 ? void 0 : keys.length) === 0) return;
176
+ var url = locationUrl !== null && locationUrl !== void 0 ? locationUrl : new URL(window.location);
177
+ keys.forEach(function (key, index) {
178
+ var value = values[index];
179
+ if (value) {
180
+ url.searchParams.set("".concat(_this.opts.queryParamPrefix || '').concat(key), value);
181
+ } else {
182
+ url.searchParams["delete"]("".concat(_this.opts.queryParamPrefix || '').concat(key));
183
+ }
184
+ });
185
+ return url;
186
+ });
187
+ _defineProperty(_this, "_getDeletedUrlQueryParams", function (keys) {
188
+ if (_this.isUrlPathUpdateDismissed()) return;
189
+ var url = new URL(window.location);
190
+ var searchParamKeys = Array.from(url.searchParams.keys());
191
+
192
+ // If there is query param prefix identifier and we should remove all the keys, then let's use this for quick removing
193
+ // otherwise we are going to do loop inside another to remove the specified keys only.
194
+ if (_this.opts.queryParamPrefix && (!Array.isArray(keys) || keys.length === 0)) {
195
+ searchParamKeys.forEach(function (key) {
196
+ if (key.startsWith(_this.opts.queryParamPrefix)) {
197
+ url.searchParams["delete"](key);
198
+ }
199
+ });
200
+ } else {
201
+ var keysToRemove = keys || Object.values(FMAW_URL_QUERY_PARAMS);
202
+ keysToRemove.forEach(function (param) {
203
+ param && searchParamKeys.forEach(function (key) {
204
+ if (key.startsWith("".concat(_this.opts.queryParamPrefix || '').concat(param))) {
205
+ url.searchParams["delete"](key);
206
+ }
207
+ });
208
+ });
209
+ }
210
+ return url;
211
+ });
212
+ _defineProperty(_this, "triggerProgressPanelActivities", function (files, uploadActivityOptions) {
213
+ var progressPanelInstance = _this.filerobot.getPlugin(PLUGINS_IDS.PROGRESS_PANEL);
214
+ if (progressPanelInstance) {
215
+ files.forEach(function (file) {
216
+ _this.dispatch(addUploadActivity(_objectSpread({
217
+ file: file
218
+ }, uploadActivityOptions)));
219
+ });
220
+ }
221
+ });
222
+ _defineProperty(_this, "triggerViewEvents", function (_ref4) {
223
+ var viewItem = _ref4.viewItem,
224
+ viewSubItem = _ref4.viewSubItem;
225
+ var currentView = selectActiveView(_this.getGlobalState());
226
+ if (viewItem) {
227
+ _this.filerobot.emit('view-item-changed', {
228
+ view: currentView,
229
+ viewItem: viewItem
230
+ });
231
+ }
232
+ if (viewSubItem) {
233
+ _this.filerobot.emit('view-sub-item-changed', {
234
+ view: currentView,
235
+ viewItem: viewItem,
236
+ viewSubItem: viewSubItem
237
+ });
238
+ }
239
+ });
240
+ _defineProperty(_this, "updateViewQueryInUrl", function () {
241
+ var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
242
+ view = _ref5.view,
243
+ viewItem = _ref5.viewItem,
244
+ viewSubItem = _ref5.viewSubItem,
245
+ keysToDelete = _ref5.keysToDelete;
246
+ _this.triggerViewEvents({
247
+ viewItem: viewItem,
248
+ viewSubItem: viewSubItem
249
+ });
250
+ if (_this.isUrlPathUpdateDismissed() || !view && !viewItem && !viewSubItem) {
251
+ return;
252
+ }
253
+ var params = {};
254
+ if (view) {
255
+ params[FMAW_URL_QUERY_PARAMS.VIEW] = view === null || view === void 0 ? void 0 : view.toLowerCase();
256
+ }
257
+ if (viewItem) {
258
+ params[FMAW_URL_QUERY_PARAMS.VIEW_ITEM] = viewItem;
259
+ }
260
+ if (viewSubItem) {
261
+ params[FMAW_URL_QUERY_PARAMS.VIEW_SUB_ITEM] = viewSubItem;
262
+ }
263
+ var replaceIfFirstTimeToAdd = false;
264
+ if (!view) {
265
+ if (viewItem) {
266
+ replaceIfFirstTimeToAdd = !_this.getUrlQueryParam(FMAW_URL_QUERY_PARAMS.VIEW_ITEM);
267
+ }
268
+ if (viewSubItem) {
269
+ replaceIfFirstTimeToAdd = !_this.getUrlQueryParam(FMAW_URL_QUERY_PARAMS.VIEW_SUB_ITEM);
270
+ }
271
+ }
272
+ _this.replaceUrlQueryParams({
273
+ params: params,
274
+ keysToDelete: keysToDelete,
275
+ push: !replaceIfFirstTimeToAdd
276
+ });
277
+ });
278
+ _defineProperty(_this, "deleteUrlQueryParams", function (keys) {
279
+ if (_this.isUrlPathUpdateDismissed()) return;
280
+ var url = _this._getDeletedUrlQueryParams(keys);
281
+ _this.replaceUrlInBrowser(url);
282
+ });
283
+ /**
284
+ * Initialize the i18n translations provided (default, core and from options) and inits the i18n class's attribute.
285
+ *
286
+ */
287
+ _defineProperty(_this, "i18nInit", function () {
288
+ _this.translator = new Translator([_this.defaultLocale, _this.filerobot.locale, _this.opts.locale]);
289
+ _this.i18n = _this.translator.translate.bind(_this.translator);
290
+ _this.i18nArray = _this.translator.translateArray.bind(_this.translator);
291
+ });
292
+ /**
293
+ * Adds the provided plugin to the explorer state for possiblity to be used/called/checked through the explroer.
294
+ *
295
+ * @param {Plugin} plugin - the plugin would be added to the explorer.
296
+ * Plugin = @scaleflex/widget-core/lib/Plugin.js
297
+ * @returns {HTMLElement} this.el - the plugin's wrapper HTML element.
298
+ */
299
+ _defineProperty(_this, "addTarget", function (plugin) {
300
+ var callerPluginId = plugin.id || plugin.constructor.name;
301
+ var callerPluginName = plugin.title || callerPluginId;
302
+ var callerPluginType = plugin.type;
303
+ var callerPluginInvisible = plugin.invisible;
304
+ if (callerPluginType !== 'acquirer' && callerPluginType !== 'progressindicator' && callerPluginType !== 'editor' && callerPluginType !== 'annotator') {
305
+ var msg = 'Explorer: can only be targeted by plugins of types: acquirer, progressindicator, editor, annotator';
306
+ _this.filerobot.log(msg, 'error');
307
+ return;
308
+ }
309
+ var target = {
310
+ id: callerPluginId,
311
+ name: callerPluginName,
312
+ type: callerPluginType,
313
+ invisible: callerPluginInvisible
314
+ };
315
+ _this.dispatch(targetAdded(target));
316
+ return _this.el;
317
+ });
318
+ /**
319
+ * Removes the provided Plugin from the explorer state.
320
+ *
321
+ * @param {Plugin} plugin - The plugin to be removed from the state
322
+ * Plugin = @scaleflex/widget-core/lib/Plugin.js
323
+ */
324
+ _defineProperty(_this, "removeTarget", function (plugin) {
325
+ _this.dispatch(targetRemoved(plugin.id));
326
+ });
327
+ /**
328
+ * Hides all the opened/shown panels in case any is opened.
329
+ *
330
+ */
331
+ _defineProperty(_this, "hideAllPanels", function (cb) {
332
+ if (typeof cb === 'function') {
333
+ cb();
334
+ }
335
+ _this.dispatch(allPanelsClosed());
336
+ });
337
+ _defineProperty(_this, "hideAllPanelsAndShowAddFilesPanel", function () {
338
+ _this.dispatch(showAddFilesPanelUpdated({
339
+ show: true,
340
+ closeOthers: true
341
+ }));
342
+ });
343
+ /**
344
+ * Opens the Explorer plugin main modal which is responsible for showing the plugin.
345
+ *
346
+ * @emits {Event} explorer:modal-open
347
+ * @returns {Promise | undefined} promsie
348
+ */
349
+ _defineProperty(_this, "openModal", function () {
350
+ var _createPromise = createPromise(),
351
+ promise = _createPromise.promise,
352
+ resolve = _createPromise.resolve;
353
+ // save scroll position
354
+ _this.savedScrollPosition = window.pageYOffset;
355
+ // save active element, so we can restore focus when modal is closed
356
+ _this.savedActiveElement = document.activeElement;
357
+ if (_this.opts.disablePageScrollWhenModalOpen) {
358
+ document.body.classList.add('filerobot-Explorer-isFixed');
359
+ }
360
+ if (_this.opts.animateOpenClose && selectIsPluginModalClosing(_this.getGlobalState())) {
361
+ var _handler = function handler() {
362
+ _this.dispatch(pluginModalHidden(false));
363
+ _this.el.removeEventListener('animationend', _handler, false);
364
+ resolve();
365
+ };
366
+ _this.el.addEventListener('animationend', _handler, false);
367
+ } else {
368
+ _this.dispatch(pluginModalHidden(false));
369
+ resolve();
370
+ }
371
+ if (_this.opts.browserBackButtonCloseModal) {
372
+ _this.updateBrowserHistory();
373
+ }
374
+
375
+ // handle ESC and TAB keys in modal dialog
376
+ document.addEventListener('keydown', _this.handleKeyDownInModal);
377
+ _this.filerobot.emit('explorer:modal-open');
378
+ return promise;
379
+ });
380
+ /**
381
+ * Closes the Explorer plugin main modal.
382
+ *
383
+ * @param {Object} opts - options to be used while closing the modal.
384
+ * @emits {Event} explorer:modal-close
385
+ * @returns {Promise | undefeined} promise
386
+ */
387
+ _defineProperty(_this, "closeModal", function () {
388
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
389
+ var _opts$manualClose = opts.manualClose,
390
+ manualClose = _opts$manualClose === void 0 ? true : _opts$manualClose;
391
+ var modalEl = document.querySelector(".".concat(_this.modalClassName));
392
+ if (modalEl) {
393
+ modalEl.remove();
394
+ }
395
+ var state = _this.getGlobalState();
396
+ var isHidden = selectIsPluginModalHidden(state);
397
+ var isClosing = selectIsPluginModalClosing(state);
398
+ if (isHidden || isClosing) {
399
+ // short-circuit if animation is ongoing
400
+ return;
401
+ }
402
+ var _createPromise2 = createPromise(),
403
+ promise = _createPromise2.promise,
404
+ resolve = _createPromise2.resolve;
405
+ if (_this.opts.disablePageScrollWhenModalOpen) {
406
+ document.body.classList.remove('filerobot-Explorer-isFixed');
407
+ }
408
+ if (_this.opts.animateOpenClose) {
409
+ _this.dispatch(pluginModalClosing(true));
410
+ var _handler2 = function handler() {
411
+ _this.dispatch(pluginModalHidden(true));
412
+ _this.superFocus.cancel();
413
+ _this.savedActiveElement.focus();
414
+ _this.el.removeEventListener('animationend', _handler2, false);
415
+ resolve();
416
+ };
417
+ _this.el.addEventListener('animationend', _handler2, false);
418
+ } else {
419
+ _this.dispatch(pluginModalHidden(true));
420
+ _this.superFocus.cancel();
421
+ _this.savedActiveElement.focus();
422
+ resolve();
423
+ }
424
+
425
+ // handle ESC and TAB keys in modal dialog
426
+ document.removeEventListener('keydown', _this.handleKeyDownInModal);
427
+ if (manualClose && _this.opts.browserBackButtonCloseModal &&
428
+ // Check if the latest entry in the history state is the modal name
429
+ history.state && history.state[_this.modalName]) {
430
+ // Go back in history to clear out the entry we created (ultimately closing the modal)
431
+ history.go(-1);
432
+ }
433
+ _this.filerobot.emit('explorer:modal-close');
434
+ _this._getDeletedUrlQueryParams();
435
+ return promise;
436
+ });
437
+ /**
438
+ * Checks whether the Explorer plugin main modal is opened or not.
439
+ *
440
+ * @returns {Boolean} Anonymous - The state of the main modal whether opened or closed.
441
+ */
442
+ _defineProperty(_this, "isModalOpen", function () {
443
+ return !selectIsPluginModalHidden(_this.getGlobalState());
444
+ });
445
+ /**
446
+ * Calls the modal closing function either the function provided by the user from options or the default one.
447
+ *
448
+ * @returns {Any} Anonymous - The returned value of the user's provided closing fn. or the default closing fn.
449
+ */
450
+ _defineProperty(_this, "requestCloseModal", function () {
451
+ if (_this.opts.onRequestCloseModal) {
452
+ return _this.opts.onRequestCloseModal();
453
+ }
454
+ return _this.closeModal();
455
+ });
456
+ /**
457
+ * Sets the widget's dark mode ON/OFF.
458
+ *
459
+ * @param {Boolean} isDarkModeOn - Defines whether to turn the dark mode ON or OFF.
460
+ */
461
+ _defineProperty(_this, "setDarkModeCapability", function (isDarkModeOn) {
462
+ // TODO: enable darkMode when it is ready
463
+ // this.dispatch(darkModeUpdated(false))
464
+ });
465
+ /**
466
+ * Handles the widget's dark mode changing.
467
+ *
468
+ * @param {Event} event
469
+ */
470
+ _defineProperty(_this, "handleSystemDarkModeChange", function (event) {
471
+ var isDarkModeOnNow = event.matches;
472
+ _this.filerobot.log("[Explorer] Dark mode is ".concat(isDarkModeOnNow ? 'on' : 'off'));
473
+ _this.setDarkModeCapability(isDarkModeOnNow);
474
+ });
475
+ /**
476
+ * Adds files to the widget's state for being uploaded.
477
+ *
478
+ * @param {Array} files - Array of files objects that would be added to the widget's state.
479
+ */
480
+ _defineProperty(_this, "addFiles", function (files) {
481
+ var targetFolder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
482
+ _this.filerobot.setCoreCommonState({
483
+ fromDragging: false
484
+ });
485
+ var state = _this.getGlobalState();
486
+ var uploadToFolder = targetFolder.path ? targetFolder : selectCurrentFolder(state);
487
+ // Fallbacks to currentFolderPath in-case we have base folder path only (I think shouldn't be possible?).
488
+ var targetFolderPath = uploadToFolder.path || selectCurrentFolderPath(state);
489
+ var filesVisibility = getFileInheritedVisibility(uploadToFolder);
490
+ var descriptors = files.map(function (file) {
491
+ var localParentFoldersPath = file.relativePath ? file.relativePath.substr(0, file.relativePath.lastIndexOf('/')) // it does starts with / so no need to prepend one
492
+ : '';
493
+ return {
494
+ source: _this.id,
495
+ name: file.name,
496
+ type: file.type,
497
+ data: file,
498
+ toFolder: "".concat(targetFolderPath).concat(localParentFoldersPath),
499
+ visibility: filesVisibility
500
+ };
501
+ });
502
+ try {
503
+ if (!isEmptyObject(targetFolder)) {
504
+ _this.filerobot.setCoreCommonState({
505
+ dndTargetFolderPath: targetFolder.path,
506
+ fromDragging: true
507
+ });
508
+ }
509
+ _this.filerobot.addFiles(descriptors);
510
+ } catch (err) {
511
+ _this.filerobot.log(err);
512
+ }
513
+ });
514
+ /**
515
+ * Listens to resizing of the Explorer plugin container element.
516
+ *
517
+ * * Why make insides/inner of Explorer invisible until first ResizeObserver event is emitted?
518
+ * - ResizeOberserver doesn't emit the first resize event fast enough, users can see the jump from one .filerobot-size-- to another (e.g. in Safari)
519
+ * * Why not apply visibility property to .filerobot-Explorer-inner?
520
+ * - Because ideally, acc to specs, ResizeObserver should see invisible elements as of width 0. So even though applying invisibility to .filerobot-Explorer-inner works now, it may not work in the future.
521
+ */
522
+ _defineProperty(_this, "startListeningToResize", function () {
523
+ // Watch for Explorer container (`.filerobot-Explorer-inner`) resize
524
+ // and update containerWidth/containerHeight in plugin state accordingly.
525
+ // Emits first event on initialization.
526
+ _this.resizeObserver = new ResizeObserver(function (entries) {
527
+ var filerobotExplorerInnerEl = entries[0];
528
+ var _filerobotExplorerInn = filerobotExplorerInnerEl.contentRect,
529
+ width = _filerobotExplorerInn.width,
530
+ height = _filerobotExplorerInn.height;
531
+ _this.filerobot.log("[Explorer] resized: ".concat(width, " / ").concat(height), 'debug');
532
+ _this.setPluginCommonState({
533
+ containerWidth: width,
534
+ containerHeight: height,
535
+ areInsidesReadyToBeVisible: true
536
+ });
537
+ });
538
+ _this.resizeObserver.observe(_this.el.querySelector('.filerobot-Explorer-inner'));
539
+
540
+ // If ResizeObserver fails to emit an event telling us what size to use - default to the mobile view
541
+ _this.makeExplorerInsidesVisibleAnywayTimeout = setTimeout(function () {
542
+ var _this$getPluginCommon = _this.getPluginCommonState(),
543
+ areInsidesReadyToBeVisible = _this$getPluginCommon.areInsidesReadyToBeVisible,
544
+ isPluginModalHidden = _this$getPluginCommon.isPluginModalHidden;
545
+ var isModalAndClosed = !_this.opts.inline && isPluginModalHidden;
546
+ if (
547
+ // if ResizeObserver hasn't yet fired,
548
+ !areInsidesReadyToBeVisible &&
549
+ // and it's not due to the modal being closed
550
+ !isModalAndClosed) {
551
+ _this.filerobot.log("[Explorer] resize event didn't fire on time: defaulted to mobile layout", 'debug');
552
+ _this.setPluginCommonState({
553
+ areInsidesReadyToBeVisible: true
554
+ });
555
+ }
556
+ }, 1000);
557
+ });
558
+ /**
559
+ * Stops the tracking or listening to Explorer plugin container element resizing.
560
+ *
561
+ */
562
+ _defineProperty(_this, "stopListeningToResize", function () {
563
+ var _this$resizeObserver;
564
+ (_this$resizeObserver = _this.resizeObserver) === null || _this$resizeObserver === void 0 ? void 0 : _this$resizeObserver.disconnect();
565
+ clearTimeout(_this.makeExplorerInsidesVisibleAnywayTimeout);
566
+ });
567
+ /**
568
+ * Records whether we have been interacting with filerobot/explorer right now, which is then used to determine whether state updates should trigger a refocusing.
569
+ *
570
+ * @param {Event} event
571
+ */
572
+ _defineProperty(_this, "recordIfFocusedOnFilerobotRecently", function (event) {
573
+ var _this$el, _this$el$contains;
574
+ if ((_this$el = _this.el) !== null && _this$el !== void 0 && (_this$el$contains = _this$el.contains) !== null && _this$el$contains !== void 0 && _this$el$contains.call(_this$el, event.target)) {
575
+ _this.ifFocusedOnFilerobotRecently = true;
576
+ } else {
577
+ _this.ifFocusedOnFilerobotRecently = false;
578
+ // ___Why run this.superFocus.cancel here when it already runs in superFocusOnEachUpdate?
579
+ // Because superFocus is debounced, when we move from Filerobot to some other element on the page,
580
+ // previously run superFocus sometimes hits and moves focus back to Filerobot.
581
+ _this.superFocus.cancel();
582
+ }
583
+ });
584
+ /**
585
+ * Updates the history of the browser with the plugin's main modal's name.
586
+ *
587
+ */
588
+ _defineProperty(_this, "updateBrowserHistory", function () {
589
+ // Ensure history state does not already contain our modal name to avoid double-pushing
590
+ if (!history.state || !history.state[_this.modalName]) {
591
+ // Push to history so that the page is not lost on browser back button press
592
+ history.pushState(_objectSpread(_objectSpread({}, history.state), {}, _defineProperty({}, _this.modalName, true)), '');
593
+ }
594
+
595
+ // Listen for back button presses
596
+ window.addEventListener('popstate', _this.handlePopState, false);
597
+ });
598
+ /**
599
+ * browser's history popstate event handler fired when back button of the browser pressed.
600
+ *
601
+ * @param {Event} event
602
+ */
603
+ _defineProperty(_this, "handlePopState", function (event) {
604
+ // Close the modal if the history state no longer contains our modal name
605
+ if (_this.isModalOpen() && (!event.state || !event.state[_this.modalName])) {
606
+ _this.closeModal({
607
+ manualClose: false
608
+ });
609
+ }
610
+
611
+ // When the browser back button is pressed and filerobot is now the latest entry in the history but the modal is closed, fix the history by removing the filerobot history entry
612
+ // This occurs when another entry is added into the history state while the modal is open, and then the modal gets manually closed
613
+ if (!_this.isModalOpen() && event.state && event.state[_this.modalName]) {
614
+ history.go(-1);
615
+ }
616
+ });
617
+ /**
618
+ * Event handler for keydown inside the plugin's base/main modal
619
+ *
620
+ * @param {*} event
621
+ */
622
+ _defineProperty(_this, "handleKeyDownInModal", function (event) {
623
+ // close modal on esc key press, Escape key = 27
624
+ if (event.keyCode === 27) {
625
+ _this.handleClickOutside();
626
+ }
627
+ // trap focus on tab key press, Tab key = 9
628
+ if (event.keyCode === 9) {
629
+ trapFocus.forModal(event, selectActiveOverlayType(_this.getGlobalState()), _this.el);
630
+ }
631
+ });
632
+ /**
633
+ * Requests modal closing if the user provided closeModalOnClickOutside property with true value.
634
+ *
635
+ */
636
+ _defineProperty(_this, "handleClickOutside", function () {
637
+ if (_this.opts.closeModalOnClickOutside) {
638
+ var state = _this.getGlobalState();
639
+ var uploadsCount = selectUploadsCount(state);
640
+ if (_this.opts.preventModalOverlayClickOnUpload && uploadsCount > 0) {
641
+ _this.filerobot.info(_this.i18n('filerobotAddedUploadedFilesError'), 'warning', 3000);
642
+ } else {
643
+ _this.requestCloseModal();
644
+ }
645
+ }
646
+ });
647
+ /**
648
+ * Adds the found copies files in the clipboard on pasting them.
649
+ *
650
+ * @param {Event} event
651
+ */
652
+ _defineProperty(_this, "handlePaste", function (event) {
653
+ if (_this._isPasteAndDnDUploadDisabled() || ['TEXTAREA', 'INPUT'].includes(event.target.tagName)) {
654
+ return;
655
+ }
656
+
657
+ // 1. Let any acquirer plugin (Url/Webcam/etc.) handle pastes to the root
658
+ _this.filerobot.iteratePlugins(function (plugin) {
659
+ if (plugin.type === 'acquirer') {
660
+ // Every Plugin with .type acquirer can define handleRootPaste(event)
661
+ plugin.handleRootPaste && plugin.handleRootPaste(event);
662
+ }
663
+ });
664
+
665
+ // 2. Add all dropped files
666
+ var files = toArray(event.clipboardData.files);
667
+ if (files.length > 0) {
668
+ _this.addFiles(files);
669
+ }
670
+ });
671
+ /**
672
+ * Event handler for dragOver event for preparing the drag & drop functionality.
673
+ *
674
+ * @param {Event} event
675
+ */
676
+ _defineProperty(_this, "handleDragOver", function (event) {
677
+ if (_this._isPasteAndDnDUploadDisabled()) {
678
+ return;
679
+ }
680
+ event.preventDefault();
681
+ event.stopPropagation();
682
+ var _this$getPluginCommon2 = _this.getPluginCommonState(),
683
+ isDraggingOver = _this$getPluginCommon2.isDraggingOver;
684
+
685
+ // Add a small (+) icon on drop
686
+ event.dataTransfer.dropEffect = 'copy';
687
+ clearTimeout(_this.removeDragOverClassTimeout);
688
+ if (!isDraggingOver) _this.setPluginCommonState({
689
+ isDraggingOver: true
690
+ });
691
+ });
692
+ /**
693
+ * Event handler for dragLeave event for removing the classes shown while dragOver event.
694
+ *
695
+ * @param {Event} event
696
+ */
697
+ _defineProperty(_this, "handleDragLeave", function (event) {
698
+ if (_this._isPasteAndDnDUploadDisabled()) {
699
+ return;
700
+ }
701
+ event.preventDefault();
702
+ event.stopPropagation();
703
+ clearTimeout(_this.removeDragOverClassTimeout);
704
+ // Timeout against flickering, this solution is taken from drag-drop library. Solution with 'pointer-events: none' didn't work across browsers.
705
+ _this.removeDragOverClassTimeout = setTimeout(function () {
706
+ _this.setPluginCommonState({
707
+ isDraggingOver: false
708
+ });
709
+ }, 50);
710
+ });
711
+ /**
712
+ * Event handler for drop event for handling the adding of dropped files.
713
+ *
714
+ * @param {Event} event
715
+ */
716
+ _defineProperty(_this, "handleDrop", function (event) {
717
+ var _event$dataTransfer$f, _event$dataTransfer$i;
718
+ if (_this._isPasteAndDnDUploadDisabled()) {
719
+ return;
720
+ }
721
+ clearTimeout(_this.removeDragOverClassTimeout);
722
+
723
+ // 1. Remove dragover class
724
+ _this.setPluginCommonState({
725
+ isDraggingOver: false
726
+ });
727
+ var isNoExternalFiles = ((_event$dataTransfer$f = event.dataTransfer.files) === null || _event$dataTransfer$f === void 0 ? void 0 : _event$dataTransfer$f.length) === 0 && ((_event$dataTransfer$i = event.dataTransfer.items) === null || _event$dataTransfer$i === void 0 ? void 0 : _event$dataTransfer$i.length) === 0;
728
+ if (isNoExternalFiles) {
729
+ return;
730
+ }
731
+ event.preventDefault();
732
+ event.stopPropagation();
733
+
734
+ // 2. Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root
735
+ _this.filerobot.iteratePlugins(function (plugin) {
736
+ if (plugin.type === 'acquirer') {
737
+ // Every Plugin with .type acquirer can define handleRootDrop(event)
738
+ plugin.handleRootDrop && plugin.handleRootDrop(event);
739
+ }
740
+ });
741
+
742
+ // 3. Add all dropped files
743
+ var executedDropErrorOnce = false;
744
+ var logDropError = function logDropError(error) {
745
+ _this.filerobot.log(error, 'error');
746
+
747
+ // In practice all drop errors are most likely the same, so let's just show one to avoid overwhelming the user
748
+ if (!executedDropErrorOnce) {
749
+ _this.filerobot.info(error.message, 'error', 5000);
750
+ executedDropErrorOnce = true;
751
+ }
752
+ };
753
+ getDroppedFiles(event.dataTransfer, {
754
+ logDropError: logDropError
755
+ }).then(function (files) {
756
+ if (files.length > 0) {
757
+ _this.filerobot.log('[Explorer] Files were dropped');
758
+ _this.addFiles(files);
759
+ }
760
+ });
761
+ });
762
+ /**
763
+ * Requests thumbnails for files for being shown to the user.
764
+ *
765
+ * @param {Object} file - The object of the file that thumbnail would be generated for.
766
+ */
767
+ _defineProperty(_this, "handleRequestThumbnail", function (file) {
768
+ if (!_this.opts.waitForThumbnailsBeforeUpload) {
769
+ _this.filerobot.emit('thumbnail:request', file);
770
+ }
771
+ });
772
+ /**
773
+ * Cancels thumbnail requests when a file item component unmounts to avoid clogging up the queue when the user scrolls past many elements.
774
+ *
775
+ * @param {Object} file - the file which its thumbnail generating request should be canceled.
776
+ */
777
+ _defineProperty(_this, "handleCancelThumbnail", function (file) {
778
+ if (!_this.opts.waitForThumbnailsBeforeUpload) {
779
+ _this.filerobot.emit('thumbnail:cancel', file);
780
+ }
781
+ });
782
+ /**
783
+ * Event handler for keydown event in plugin's inline mode.
784
+ *
785
+ * @param {Event} event
786
+ */
787
+ _defineProperty(_this, "handleKeyDownInInline", function (event) {
788
+ // Trap focus on tab key press, Tab key = 9.
789
+ if (event.keyCode === 9) {
790
+ trapFocus.forInline(event, selectActiveOverlayType(_this.getGlobalState()), _this.el);
791
+ }
792
+ });
793
+ /**
794
+ * Event handler for paste event.
795
+ *
796
+ * * Why do we listen to the 'paste' event on a document instead of onPaste={props.handlePaste} prop, or this.el.addEventListener('paste')?
797
+ * - Because (at least) Chrome doesn't handle paste if focus is on some button, e.g. 'My Device'...
798
+ * Therefore, the best option is to listen to all 'paste' events, and only react to them when we are focused on our particular Filerobot instance.
799
+ * * Why do we still need onPaste={props.handlePaste} for the ExplorerUi?
800
+ * - Because if we click on the 'Drop files here' caption e.g., `document.activeElement` will be 'body'. Which means our standard determination of whether we're pasting into our Filerobot instance won't work...
801
+ * Therefore, we need a traditional onPaste={props.handlePaste} handler too.
802
+ *
803
+ * @param {Event} event
804
+ */
805
+ _defineProperty(_this, "handlePasteOnBody", function (event) {
806
+ var isFocusInOverlay = _this.el.contains(document.activeElement);
807
+ if (isFocusInOverlay) {
808
+ _this.handlePaste(event);
809
+ }
810
+ });
811
+ /**
812
+ * Public method that used on Hub to sync with burger menu.
813
+ *
814
+ * @param {string} newViewId
815
+ * @param {Object} activationOptions - optional object for providing options used in activation, ex. if the view's activation might accept an initial value to activate for example opening specific label once activating.
816
+ */
817
+ _defineProperty(_this, "changeView", function () {
818
+ var newViewId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : VIEW_IDS.FOLDERS;
819
+ var activationOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
820
+ _this.dispatch(changeView({
821
+ view: newViewId,
822
+ triggerActivate: true,
823
+ activateOptions: activationOptions
824
+ }));
825
+ });
826
+ _defineProperty(_this, "createFolderDetails", function (otherProps) {
827
+ var _otherProps$fileSize, _otherProps$fileSize2;
828
+ var createdAt = new Date().toISOString();
829
+ var folderPath = otherProps.name;
830
+ var splittedFolderPath = folderPath.split('/');
831
+ var firstFolderName = splittedFolderPath[splittedFolderPath.length - 1];
832
+ var minSplittedFolderPaths = 3;
833
+ var isUploadDirectChild = splittedFolderPath.length === minSplittedFolderPaths;
834
+ return _objectSpread(_objectSpread({}, otherProps), {}, {
835
+ count: {
836
+ files_direct: isUploadDirectChild ? 1 : 0,
837
+ files_recursive: 1
838
+ },
839
+ size: {
840
+ total_recursive_bytes: ((_otherProps$fileSize = otherProps.fileSize) === null || _otherProps$fileSize === void 0 ? void 0 : _otherProps$fileSize.bytes) || 0,
841
+ total_pretty_bytes: ((_otherProps$fileSize2 = otherProps.fileSize) === null || _otherProps$fileSize2 === void 0 ? void 0 : _otherProps$fileSize2.pretty) || 0
842
+ },
843
+ created_at: createdAt,
844
+ updated_at: createdAt,
845
+ isFolder: true,
846
+ type: 'folder',
847
+ children: [],
848
+ path: folderPath,
849
+ name: firstFolderName
850
+ });
851
+ });
852
+ /**
853
+ * Handler which is fired on file uploaded that adds the new uploaded file to the state for being shown without refresh.
854
+ *
855
+ * @param {Object} _file - upload file object.
856
+ * @param {Object} uploadResponse - The uploading process response object.
857
+ */
858
+ _defineProperty(_this, "handleFileUploaded", function (_file, response) {
859
+ var _response$body, _file$data, _currentFolder$path;
860
+ var uploadedFile = response === null || response === void 0 ? void 0 : (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.file;
861
+ if (!uploadedFile) {
862
+ return;
863
+ }
864
+ var localParentFolderPath = (_file$data = _file.data) === null || _file$data === void 0 ? void 0 : _file$data.relativePath;
865
+ var isUploadedWithParentFolder = Boolean(localParentFolderPath);
866
+ var state = _this.getGlobalState();
867
+ var folders = selectFolders(state);
868
+ var currentFolder = selectCurrentFolder(state) || {};
869
+ var isAssetsView = selectIsAssetsView(state);
870
+ var isFileWindowOpened = selectFileWindowFor(state);
871
+ var originalFile = selectCurrentFileByIdOrUuid(state, selectFileWindowFor(state));
872
+ var fileParentFolder = uploadedFile.toFolder || uploadedFile.folder || '';
873
+ var fileParentFolderPath = fileParentFolder.name || fileParentFolder || '';
874
+ var localFolderPathNoFileName = (localParentFolderPath === null || localParentFolderPath === void 0 ? void 0 : localParentFolderPath.substr(0, localParentFolderPath === null || localParentFolderPath === void 0 ? void 0 : localParentFolderPath.lastIndexOf('/'))) || '';
875
+ var targetFolderPath = fileParentFolderPath.substr(0, fileParentFolderPath.indexOf(localFolderPathNoFileName)) || selectBaseFolderPath(state) || '/';
876
+ if (isFileWindowOpened && isFileVersion({
877
+ newVersion: uploadedFile,
878
+ originalFile: originalFile
879
+ })) {
880
+ var _uploadedFile;
881
+ _this.dispatch(fileWindowUpdated({
882
+ "for": (_uploadedFile = uploadedFile) === null || _uploadedFile === void 0 ? void 0 : _uploadedFile.uuid
883
+ }));
884
+ _this.filerobot.info(_this.i18n('explorerNewVersionUploadedSuccessfully'), 'success', 3000);
885
+ }
886
+ // Set the file's visibility to the same as it's parent folder since the uploaded file is by default inherits it's parent folder visibility.
887
+ if (fileParentFolderPath === currentFolder.path) {
888
+ uploadedFile = _objectSpread(_objectSpread({}, uploadedFile), {}, {
889
+ visibility: getFileInheritedVisibility(currentFolder)
890
+ });
891
+ }
892
+
893
+ // If the file uploaded is related to the current opened folder
894
+ // or we are in assets mode (treated as current opened folder) then add it
895
+ // else if maybe the file related to a sub folder of current folder, add that sub folder inside current folder if not there.
896
+ if (fileParentFolderPath === currentFolder.path || isAssetsView) {
897
+ // In case the file is a new version of a current uploaded file then override it with the new version instead,
898
+ // otherwise add the file.
899
+ _this.dispatch(fileAdded(uploadedFile));
900
+ return;
901
+ } else if (folders[fileParentFolder.uuid]) {
902
+ var _folders$fileParentFo, _folders$fileParentFo2;
903
+ _this.dispatch(folderUpdated({
904
+ uuid: fileParentFolder.uuid,
905
+ count: {
906
+ files_direct: (((_folders$fileParentFo = folders[fileParentFolder.uuid].count) === null || _folders$fileParentFo === void 0 ? void 0 : _folders$fileParentFo.files_direct) || 0) + 1,
907
+ files_recursive: (((_folders$fileParentFo2 = folders[fileParentFolder.uuid].count) === null || _folders$fileParentFo2 === void 0 ? void 0 : _folders$fileParentFo2.files_recursive) || 0) + 1
908
+ }
909
+ }));
910
+ }
911
+ var fileDirectParentFolderPathIndex = fileParentFolderPath.indexOf('/', (currentFolder === null || currentFolder === void 0 ? void 0 : (_currentFolder$path = currentFolder.path) === null || _currentFolder$path === void 0 ? void 0 : _currentFolder$path.length) + 1 || 0);
912
+ var fileDirectParentFolderPath = fileParentFolderPath.slice(0, fileDirectParentFolderPathIndex > -1 ? fileDirectParentFolderPathIndex : undefined);
913
+ if (fileParentFolderPath && targetFolderPath === currentFolder.path && !(folders[fileParentFolder.uuid] || selectFolderByPath(state, fileDirectParentFolderPath))) {
914
+ var newFolder = [_this.createFolderDetails(_objectSpread(_objectSpread({}, fileParentFolder), {}, {
915
+ name: fileDirectParentFolderPath,
916
+ fileSize: uploadedFile.size
917
+ }))];
918
+ _this.dispatch(foldersAdded({
919
+ folders: newFolder
920
+ }));
921
+ _this.dispatch(foldersTreeFoldersUpdated({
922
+ folders: newFolder,
923
+ parentFolder: currentFolder
924
+ }));
925
+ return;
926
+ }
927
+ if (isUploadedWithParentFolder && !folders[fileParentFolder.uuid]) {
928
+ _this.dispatch(recursivelyFetchFoldersTree({
929
+ path: "/".concat(fileParentFolderPath.split('/')[1])
930
+ }));
931
+ }
932
+ });
933
+ /**
934
+ * Event handler fired after the whole upload process is done whether with success, failure or both.
935
+ *
936
+ * @param {Object} uploadResultObject
937
+ */
938
+ _defineProperty(_this, "handleComplete", function (_ref6) {
939
+ var failed = _ref6.failed,
940
+ successful = _ref6.successful;
941
+ if (_this.opts.closeAfterFinish && failed.length === 0) {
942
+ // All uploads are done
943
+ _this.requestCloseModal();
944
+ }
945
+ var currentFolderPath = selectCurrentFolderPath(_this.getGlobalState());
946
+ var folderPathsToFetch = successful.reduce(function (folderPaths, file) {
947
+ var _file$data2, _file$data3, _file$data3$relativeP;
948
+ var fileParentFolderPath = (_file$data2 = file.data) !== null && _file$data2 !== void 0 && _file$data2.relativePath ? "".concat(currentFolderPath, "/").concat((_file$data3 = file.data) === null || _file$data3 === void 0 ? void 0 : (_file$data3$relativeP = _file$data3.relativePath) === null || _file$data3$relativeP === void 0 ? void 0 : _file$data3$relativeP.split('/')[1]).replace(/\/\//g, '/') : currentFolderPath;
949
+ folderPaths.add(fileParentFolderPath);
950
+ return folderPaths;
951
+ }, new Set());
952
+ folderPathsToFetch.forEach(function (folderPath) {
953
+ _this.dispatch(fetchFolders({
954
+ path: folderPath,
955
+ withPreviews: true,
956
+ limit: 0,
957
+ offset: 0,
958
+ replaceOldFolders: false,
959
+ skipPendingDispatch: true,
960
+ id: undefined,
961
+ addFolderRequestBaseToEntities: true
962
+ }));
963
+ });
964
+ });
965
+ _defineProperty(_this, "handleUploadStart", function () {
966
+ if (_this.opts.closeAfterUploadStart && !_this.opts.inline) {
967
+ _this.requestCloseModal();
968
+ }
969
+ });
970
+ _defineProperty(_this, "updateOpts", function (_ref7) {
971
+ var _ref7$newOpts = _ref7.newOpts,
972
+ newOpts = _ref7$newOpts === void 0 ? {} : _ref7$newOpts;
973
+ _this.isDevEnv = _this.filerobot.opts.dev;
974
+ _this.container = _this.filerobot.opts.container;
975
+ _this.passOptsToState(newOpts);
976
+ if (typeof newOpts.inline !== 'undefined' && !newOpts.inline) {
977
+ _this.removeEvents();
978
+ _this.initEvents();
979
+ }
980
+ });
981
+ /**
982
+ * Initializes event handlers for different event listeners on the plugin capturing/loading.
983
+ *
984
+ */
985
+ _defineProperty(_this, "initEvents", function () {
986
+ if (!_this.el) {
987
+ return;
988
+ }
989
+
990
+ // Add the click event for modal open button/trigger.
991
+ if (_this.opts.trigger && !_this.opts.inline) {
992
+ var showModalTrigger = findAllDOMElements(_this.opts.trigger);
993
+ if (showModalTrigger) {
994
+ showModalTrigger.forEach(function (trigger) {
995
+ trigger.addEventListener('click', _this.openModal);
996
+ trigger.addEventListener('drop', _this.openModal);
997
+ });
998
+ } else {
999
+ _this.filerobot.log('Explorer modal trigger not found. Make sure `trigger` is set in Explorer options, unless you are planning to call `explorer.openModal()` method yourself', 'warning');
1000
+ }
1001
+ }
1002
+ _this.startListeningToResize();
1003
+ document.addEventListener('paste', _this.handlePasteOnBody);
1004
+ _this.filerobot.on('upload-started', _this.handleUploadStart);
1005
+ _this.filerobot.on('opts-updated', _this.updateOpts);
1006
+ _this.filerobot.on('plugin-remove', _this.removeTarget);
1007
+ _this.filerobot.on('explorer:modal-close', _this.hideAllPanels);
1008
+ _this.filerobot.on('upload-success', _this.handleFileUploaded);
1009
+ _this.filerobot.on('complete', _this.handleComplete);
1010
+ // ___Why fire on capture?
1011
+ // Because this.ifFocusedOnFilerobotRecently needs to change before onUpdate() fires.
1012
+ document.addEventListener('focus', _this.recordIfFocusedOnFilerobotRecently, true);
1013
+ document.addEventListener('click', _this.recordIfFocusedOnFilerobotRecently, true);
1014
+ if (_this.opts.inline) {
1015
+ _this.el.addEventListener('keydown', _this.handleKeyDownInInline);
1016
+ }
1017
+ if (!_this.isUrlPathUpdateDismissed()) {
1018
+ _this._replaceStateProxy = Proxy.revocable(window.history.replaceState, {
1019
+ apply: function apply(target, thisArg, args) {
1020
+ var originalReplaceStateResult = target.apply(thisArg, args);
1021
+
1022
+ // Used to differentiate from the event triggered from widget to avoid the custom event dispatching.
1023
+ var shouldDismissCustomEvent = args[3];
1024
+
1025
+ // Custom replacestate event to be dispatched we are going to use in whatever place we need to handle anything after
1026
+ // new replaceState to the URL whether from widget or external project.
1027
+ // to use => window.addEventListener('replacestate', callback)
1028
+ // to remove listening => window.removeEventListener('replacestate', callback)
1029
+ if (!shouldDismissCustomEvent) {
1030
+ var eventArgs = {
1031
+ data: args[0],
1032
+ unused: args[1],
1033
+ url: args[2]
1034
+ };
1035
+ window.dispatchEvent(new CustomEvent('replacestate', {
1036
+ detail: eventArgs
1037
+ }));
1038
+ }
1039
+ return originalReplaceStateResult;
1040
+ }
1041
+ });
1042
+ _this._replaceStateProxy.nativeFn = window.history.replaceState;
1043
+ window.history.replaceState = _this._replaceStateProxy.proxy;
1044
+ }
1045
+ });
1046
+ /**
1047
+ * Removes the event handlers assigned on the plugin's capturing/initialization.
1048
+ *
1049
+ */
1050
+ _defineProperty(_this, "removeEvents", function () {
1051
+ var showModalTrigger = findAllDOMElements(_this.opts.trigger);
1052
+ if (!_this.opts.inline && showModalTrigger) {
1053
+ showModalTrigger.forEach(function (trigger) {
1054
+ return trigger.removeEventListener('click', _this.openModal);
1055
+ });
1056
+ }
1057
+ _this.stopListeningToResize();
1058
+ document.removeEventListener('paste', _this.handlePasteOnBody);
1059
+ window.removeEventListener('popstate', _this.handlePopState, false);
1060
+ _this.filerobot.off('opts-updated', _this.updateOpts);
1061
+ _this.filerobot.off('plugin-remove', _this.removeTarget);
1062
+ _this.filerobot.off('explorer:modal-close', _this.hideAllPanels);
1063
+ _this.filerobot.off('upload-success', _this.handleFileUploaded);
1064
+ _this.filerobot.off('complete', _this.handleComplete);
1065
+ _this.filerobot.off('upload-started', _this.handleUploadStart);
1066
+ document.removeEventListener('focus', _this.recordIfFocusedOnFilerobotRecently);
1067
+ document.removeEventListener('click', _this.recordIfFocusedOnFilerobotRecently);
1068
+ if (_this.opts.inline) {
1069
+ var _this$el2;
1070
+ (_this$el2 = _this.el) === null || _this$el2 === void 0 ? void 0 : _this$el2.removeEventListener('keydown', _this.handleKeyDownInInline);
1071
+ }
1072
+ if (!_this.isUrlPathUpdateDismissed() && typeof _this._replaceStateProxy.revoke === 'function') {
1073
+ _this._replaceStateProxy.revoke();
1074
+ window.history.replaceState = _this._replaceStateProxy.nativeFn || window.history.replaceState;
1075
+ }
1076
+ });
1077
+ /**
1078
+ * Handles focusing after each state update of the plugin.
1079
+ *
1080
+ */
1081
+ _defineProperty(_this, "superFocusOnEachUpdate", function () {
1082
+ if (!_this.el) {
1083
+ return;
1084
+ }
1085
+ var isFocusInFilerobot = _this.el.contains(document.activeElement);
1086
+ // When focus is lost on the page (== focus is on body for most browsers, or focus is null for IE11)
1087
+ var isFocusNowhere = document.activeElement === document.body || document.activeElement === null;
1088
+ var isInformerHidden = _this.filerobot.getCoreState().info.isHidden;
1089
+ var isModal = !_this.opts.inline;
1090
+ if (
1091
+ // If update is connected to showing the Informer - let the screen reader calmly read it.
1092
+ isInformerHidden && (
1093
+ // If we are in a modal - always superfocus without concern for other elements on the page (user is unlikely to want to interact with the rest of the page)
1094
+ isModal ||
1095
+ // If we are already inside of Filerobot, or
1096
+ isFocusInFilerobot ||
1097
+ // If we are not focused on anything BUT we have already, at least once, focused on filerobot
1098
+ // 1. We focus when isFocusNowhere, because when the element we were focused on disappears (e.g. an overlay), - focus gets lost. If user is typing something somewhere else on the page, - focus won't be 'nowhere'.
1099
+ // 2. We only focus when focus is nowhere AND this.ifFocusedOnFilerobotRecently, to avoid focus jumps if we do something else on the page.
1100
+ // [Practical check] Without '&& this.ifFocusedOnFilerobotRecently', in Safari, in inline mode, when file is uploading, - navigate via tab to the checkbox, try to press space multiple times. Focus will jump to Filerobot.
1101
+ isFocusNowhere && _this.ifFocusedOnFilerobotRecently)) {
1102
+ _this.superFocus(_this.el, selectActiveOverlayType(_this.getGlobalState()));
1103
+ } else {
1104
+ _this.superFocus.cancel();
1105
+ }
1106
+ });
1107
+ /**
1108
+ * The function fired after each state update, debounced.
1109
+ *
1110
+ */
1111
+ _defineProperty(_this, "afterUpdate", function () {
1112
+ _this.superFocusOnEachUpdate();
1113
+ });
1114
+ /**
1115
+ * pause uploading for the provided file.
1116
+ * @param {String} fileId - The id of the file which uploading process would be canceled.
1117
+ */
1118
+ _defineProperty(_this, "pauseUpload", function (fileId) {
1119
+ _this.filerobot.pauseResume(fileId);
1120
+ });
1121
+ /**
1122
+ * retry uploading for the provided file.
1123
+ * @param {String} fileId - The id of the file which uploading process would be canceled.
1124
+ */
1125
+ _defineProperty(_this, "retryUpload", function (fileId) {
1126
+ _this.filerobot.retryUpload(fileId);
1127
+ });
1128
+ _defineProperty(_this, "removeUploadFiles", function (filesIds, keepPanelOpen) {
1129
+ _this.filerobot.removeUploads(filesIds);
1130
+ var uploadsCount = selectUploadsCount(_this.getGlobalState());
1131
+ if (uploadsCount === 0 && !keepPanelOpen) {
1132
+ _this.dispatch(uploadsPanelOpened(false));
1133
+ }
1134
+ });
1135
+ _defineProperty(_this, "checkUserPermissions", function (permissionsToCheck) {
1136
+ return _this.filerobot.checkUserPermissions(typeof permissionsToCheck === 'string' ? [permissionsToCheck] : permissionsToCheck, false);
1137
+ });
1138
+ _defineProperty(_this, "checkFileFolderPermissions", function (_ref8) {
1139
+ var _ref8$permissionsToCh = _ref8.permissionsToCheck,
1140
+ permissionsToCheck = _ref8$permissionsToCh === void 0 ? [] : _ref8$permissionsToCh,
1141
+ _ref8$permissionsList = _ref8.permissionsList,
1142
+ permissionsList = _ref8$permissionsList === void 0 ? {} : _ref8$permissionsList;
1143
+ if (!permissionsList || Object.keys(permissionsList || {}).length === 0) {
1144
+ return true;
1145
+ }
1146
+ return !permissionsToCheck.some(function (permission) {
1147
+ return permission && !(permissionsList !== null && permissionsList !== void 0 && permissionsList[permission]);
1148
+ });
1149
+ });
1150
+ _defineProperty(_this, "openFileWindow", function (fileUuid) {
1151
+ if (fileUuid) {
1152
+ _this.dispatch(fileWindowUpdated(fileUuid));
1153
+ }
1154
+ });
1155
+ _defineProperty(_this, "setOptions", function () {
1156
+ var newOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1157
+ var updatedOpts = _objectSpread({}, newOpts);
1158
+ if (updatedOpts.filters) {
1159
+ updatedOpts.filters = getMappedFilterValues(updatedOpts.filters);
1160
+ }
1161
+ _superPropGet((_this, Explorer), "setOptions", _this, 3)([updatedOpts]);
1162
+ });
1163
+ _defineProperty(_this, "mountTargetModal", function () {
1164
+ var body = document.querySelector('body');
1165
+ var newTarget = document.createElement('div');
1166
+ newTarget.className = _this.modalClassName;
1167
+ body.append(newTarget);
1168
+ _this.mount(".".concat(_this.modalClassName), _this);
1169
+ });
1170
+ _defineProperty(_this, "onMount", function () {
1171
+ var plugins = _this.opts.plugins || [];
1172
+ plugins.forEach(function (pluginId) {
1173
+ var plugin = _this.filerobot.getPlugin(pluginId);
1174
+ if (plugin) {
1175
+ plugin.mount(_this, plugin);
1176
+ }
1177
+ });
1178
+ if (!_this.opts.disableInformer) {
1179
+ _this.filerobot.use(Informer, {
1180
+ id: "".concat(_this.id, ":Informer"),
1181
+ target: _this
1182
+ });
1183
+ }
1184
+ if (!_this.opts.disableThumbnailGenerator) {
1185
+ _this.filerobot.use(ThumbnailGenerator, {
1186
+ id: "".concat(_this.id, ":ThumbnailGenerator"),
1187
+ thumbnailWidth: _this.opts.thumbnailWidth,
1188
+ waitForThumbnailsBeforeUpload: _this.opts.waitForThumbnailsBeforeUpload,
1189
+ // If we don't block on thumbnails, we can lazily generate them
1190
+ lazy: !_this.opts.waitForThumbnailsBeforeUpload
1191
+ });
1192
+ }
1193
+
1194
+ // Dark Mode / theme
1195
+ _this.darkModeMediaQuery = typeof window !== 'undefined' && window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
1196
+ var isDarkModeOnFromTheStart = _this.darkModeMediaQuery ? _this.darkModeMediaQuery.matches : false;
1197
+ _this.filerobot.log("[Explorer] Dark mode is ".concat(isDarkModeOnFromTheStart ? 'on' : 'off'));
1198
+ _this.setDarkModeCapability(isDarkModeOnFromTheStart);
1199
+ if (_this.opts.theme === 'auto') {
1200
+ _this.darkModeMediaQuery.addListener(_this.handleSystemDarkModeChange);
1201
+ }
1202
+ _this.initEvents();
1203
+ });
1204
+ _defineProperty(_this, "uninstall", function () {
1205
+ if (!_this.opts.disableInformer) {
1206
+ var informer = _this.filerobot.getPlugin("".concat(_this.id, ":Informer"));
1207
+ // Checking if this plugin exists, in case it was removed by filerobot-core
1208
+ // before the Explorer was.
1209
+ if (informer) _this.filerobot.removePlugin(informer);
1210
+ }
1211
+ if (!_this.opts.disableThumbnailGenerator) {
1212
+ var thumbnail = _this.filerobot.getPlugin("".concat(_this.id, ":ThumbnailGenerator"));
1213
+ if (thumbnail) _this.filerobot.removePlugin(thumbnail);
1214
+ }
1215
+ var plugins = _this.opts.plugins || [];
1216
+ plugins.forEach(function (pluginId) {
1217
+ var plugin = _this.filerobot.getPlugin(pluginId);
1218
+ if (plugin) plugin.unmount();
1219
+ });
1220
+ if (_this.opts.theme === 'auto') {
1221
+ _this.darkModeMediaQuery.removeListener(_this.handleSystemDarkModeChange);
1222
+ }
1223
+ if (_this.opts.disablePageScrollWhenModalOpen) {
1224
+ document.body.classList.remove('filerobot-Explorer-isFixed');
1225
+ }
1226
+ _this._getDeletedUrlQueryParams();
1227
+ _this.unmount();
1228
+ _this.removeEvents();
1229
+ // Tmp solution for resetting the loading state, as the latest state of each plugin is cached even after removing the plugin, so this is a workaround till we find a good solution for that.
1230
+ _this.dispatch(explorerPluginLoadingSet(true));
1231
+ });
1232
+ _this.id = PLUGINS_IDS.EXPLORER;
1233
+ _this.title = _this.opts.title || 'Explorer';
1234
+ _this.type = 'orchestrator';
1235
+ _this.modalName = "filerobot-Explorer-".concat(cuid());
1236
+ _this.isDevEnv = filerobot.opts.dev;
1237
+ _this.container = filerobot.opts.container;
1238
+ _this.modalClassName = 'filerobot-modal';
1239
+ _this.defaultLocale = {
1240
+ strings: defaultLocale
1241
+ };
1242
+ var defaultOptions = {
1243
+ target: '',
1244
+ trigger: '#filerobot-trigger-button',
1245
+ useAssetsPicker: false,
1246
+ assetsPickerModelTitle: 'explorerTopSectionImportFileTitle',
1247
+ disableFolderSelection: false,
1248
+ hideFolderOptions: false,
1249
+ hideDetailsSidebarButton: false,
1250
+ disableDnDActions: false,
1251
+ hideActionBarSelectionButtons: false,
1252
+ inline: false,
1253
+ width: 768,
1254
+ height: 538,
1255
+ thumbnailWidth: 280,
1256
+ thumbnailHeight: 170,
1257
+ waitForThumbnailsBeforeUpload: false,
1258
+ disableUpload: false,
1259
+ hideSearch: false,
1260
+ note: null,
1261
+ hint: null,
1262
+ closeModalOnClickOutside: false,
1263
+ preventModalOverlayClickOnUpload: false,
1264
+ closeAfterFinish: false,
1265
+ closeAfterUploadStart: false,
1266
+ disableInformer: false,
1267
+ disableThumbnailGenerator: false,
1268
+ disablePageScrollWhenModalOpen: true,
1269
+ animateOpenClose: true,
1270
+ onRequestCloseModal: function onRequestCloseModal() {
1271
+ return _this.closeModal();
1272
+ },
1273
+ browserBackButtonCloseModal: false,
1274
+ disableDownloadButton: false,
1275
+ preventDownloadDefaultBehavior: false,
1276
+ hideDownloadVariationsOption: false,
1277
+ forceDownload: false,
1278
+ hideExportCropPanel: false,
1279
+ theme: 'light',
1280
+ showGlobalRegVariants: false,
1281
+ ExploreViewComponent: null,
1282
+ showMeta: true,
1283
+ // TODO(configs): check if we still need this
1284
+ showBreadcrumbs: true,
1285
+ // TODO(configs): check if we still need this.
1286
+ showSort: true,
1287
+ disableSelectionActions: false,
1288
+ // TODO(configs): check if we still need this.
1289
+ showBar: true,
1290
+ hideDownloadButtonIcon: false,
1291
+ hideHeaderBar: false,
1292
+ hideLeftSideBar: false,
1293
+ facetedSearchEnabled: false,
1294
+ facetedSearchSidebarExpanded: true,
1295
+ activeFacetedSearchMetadataFields: [],
1296
+ onClickUploadButton: function onClickUploadButton() {},
1297
+ hideModalAfterExport: false,
1298
+ defaultFilters: {},
1299
+ // [Deprecated] Deprecated -- TODO:(docs) check type and description
1300
+ defaultSearchQuery: '',
1301
+ // [Deprecated] Deprecated
1302
+ imageEditorMode: IMAGE_EDITOR_MODES.DEFAULT,
1303
+ // Image Editor Mode
1304
+ closeAfterImageEdit: false,
1305
+ // Close the modal after image edit
1306
+ showDragDropPanel: false,
1307
+ selectedListViewCols: [
1308
+ // TODO(configs): check if we still need this as a config.
1309
+ LIST_VIEW_COLS_IDS.TYPE, LIST_VIEW_COLS_IDS.VISIBILITY,
1310
+ // LIST_VIEW_COLS_IDS.STATUS,
1311
+ LIST_VIEW_COLS_IDS.TAGS, LIST_VIEW_COLS_IDS.LABELS, LIST_VIEW_COLS_IDS.LAST_MODIFY],
1312
+ selectedListViewFoldersCols: [
1313
+ // TODO(configs): check if we still need this as a config.
1314
+ LIST_VIEW_FOLDERS_COLS_IDS.VISIBILITY, LIST_VIEW_FOLDERS_COLS_IDS.AMOUNT, LIST_VIEW_FOLDERS_COLS_IDS.LAST_MODIFY],
1315
+ videoTranscoding: {
1316
+ // TODO:(docs) check if this matches our current desc in readme
1317
+ resolution: 'auto',
1318
+ protocol: 'hls',
1319
+ filesIds: []
1320
+ },
1321
+ imageProcessor: {
1322
+ // TODO(configs): check if we still need this.
1323
+ name: '',
1324
+ values: {},
1325
+ filesIds: []
1326
+ },
1327
+ config: {
1328
+ foldersLimit: 200,
1329
+ filesLimit: 50,
1330
+ rootFolderPath: '/',
1331
+ defaultSearchSort: {
1332
+ text: {
1333
+ by: undefined,
1334
+ // just replace the `undefined` with another value acceptable search sort by value if u want to replace the default.
1335
+ order: undefined // just replace the `undefined` with another acceptable search sort order value if u want to replace the default.
1336
+ }
1337
+ },
1338
+ defaultSort: {
1339
+ by: undefined,
1340
+ // DEFAULT_SORT_OPTION.by, just replace the `undefined` with another value acceptable sort by value if u want to replace the default.
1341
+ order: undefined // DEFAULT_SORT_OPTION.order, just replace the `undefined` with another acceptable sort order value if u want to replace the default.
1342
+ },
1343
+ metadata: {
1344
+ model: null,
1345
+ store: {
1346
+ force_filling_metadata_on_upload: false,
1347
+ regional_variants_groups: []
1348
+ }
1349
+ },
1350
+ numberFormatLocale: null,
1351
+ // TODO:(docs) check type and description
1352
+ tagging: {
1353
+ enabled: false,
1354
+ autoTagging: false,
1355
+ suggestedTagsOnly: false,
1356
+ language: 'en',
1357
+ confidence: 60,
1358
+ limit: 10,
1359
+ provider: 'google',
1360
+ suggestionList: []
1361
+ },
1362
+ video: {
1363
+ // TODO:(docs) check type and description
1364
+ compression: {
1365
+ target_resolutions: [],
1366
+ // ['480', '720', '1080', '2160'],
1367
+ target_bitrate: '',
1368
+ // '500',
1369
+ target_folder: '' // '/.internal/videos/compression'
1370
+ },
1371
+ conversion: {
1372
+ target_formats: '',
1373
+ // 'WebM',
1374
+ target_resolution: '',
1375
+ // '480',
1376
+ target_folder: '' // 'internal'
1377
+ },
1378
+ transcoding: {
1379
+ protocol: '' // 'HLS'
1380
+ },
1381
+ enableEmbed: true,
1382
+ redirectToVideoSettingsPage: '' // /settings/project-settings/process-settings/video
1383
+ }
1384
+ },
1385
+ isDownloadUsageRightsEnabled: false,
1386
+ enableAIDescription: false,
1387
+ enableAIEmbed: false,
1388
+ enableFoldersStatsApiRequest: false,
1389
+ enabledManageAccess: false,
1390
+ usersAndTeams: [],
1391
+ galleryRoles: undefined,
1392
+ disableMultipleSelect: false,
1393
+ maxCountOfSelectedFiles: undefined,
1394
+ mutedFilesUuids: [],
1395
+ dismissUrlPathQueryUpdate: false,
1396
+ queryParamPrefix: 'fmaw_',
1397
+ isUploadBarAddMoreButtonHidden: false,
1398
+ layoutType: LAYOUTS_IDS.GRID,
1399
+ views: Object.values(VIEW_IDS),
1400
+ view: VIEW_IDS.FOLDERS,
1401
+ viewItem: null,
1402
+ viewSubItem: null,
1403
+ isFastToken: false,
1404
+ showResumableUploadSwitcher: false,
1405
+ useLoginMode: false,
1406
+ prefilledLoginModeEmail: null,
1407
+ downloadConsent: undefined,
1408
+ restrictedSearchContext: false,
1409
+ hideAddingComment: false,
1410
+ findAssetLocationEnabled: true,
1411
+ disableFiltersAndSearch: false,
1412
+ forceFilters: false,
1413
+ filters: undefined,
1414
+ search: undefined,
1415
+ thumbnailMetadataKeys: [],
1416
+ tags: undefined,
1417
+ permissions: undefined,
1418
+ showScaleflexCopyright: false,
1419
+ disableFileResolutionFallback: false,
1420
+ onImportFromDam: function onImportFromDam() {},
1421
+ showImportFromDamButton: false,
1422
+ defaultFieldKeyOfBulkEditPanel: '',
1423
+ hideDetailsViewButton: false,
1424
+ hideVariationsTab: false,
1425
+ hideMetadataTab: false,
1426
+ hideFileSpecsMetadataFields: false,
1427
+ variationsHideManualSubTab: false,
1428
+ variationsShowAddPresetButton: false,
1429
+ hideTopBarAddFolderButton: false
1430
+ };
1431
+
1432
+ // merge default options with the ones set by user
1433
+ _this.opts = _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), _opts), {}, {
1434
+ filters: _opts.filters ? getMappedFilterValues(_opts.filters) : defaultOptions.filters,
1435
+ views: _opts.views || defaultOptions.views,
1436
+ view: _opts.view || defaultOptions.view,
1437
+ config: _objectSpread(_objectSpread(_objectSpread({}, defaultOptions.config), _opts.config), {}, {
1438
+ tagging: _objectSpread(_objectSpread({}, (_defaultOptions$confi = defaultOptions.config) === null || _defaultOptions$confi === void 0 ? void 0 : _defaultOptions$confi.tagging), (_opts$config = _opts.config) === null || _opts$config === void 0 ? void 0 : _opts$config.tagging),
1439
+ video: _objectSpread(_objectSpread({}, (_defaultOptions$confi2 = defaultOptions.config) === null || _defaultOptions$confi2 === void 0 ? void 0 : _defaultOptions$confi2.video), (_opts$config2 = _opts.config) === null || _opts$config2 === void 0 ? void 0 : _opts$config2.video),
1440
+ metadata: _objectSpread(_objectSpread({}, defaultOptions.metadata), (_opts$config3 = _opts.config) === null || _opts$config3 === void 0 ? void 0 : _opts$config3.metadata)
1441
+ })
1442
+ });
1443
+ _this.i18nInit();
1444
+ _this.superFocus = createSuperFocus();
1445
+ _this.ifFocusedOnFilerobotRecently = false;
1446
+
1447
+ // Timeouts
1448
+ _this.makeExplorerInsidesVisibleAnywayTimeout = null;
1449
+ _this.removeDragOverClassTimeout = null;
1450
+ if (!filerobot.opts.securityTemplateId && !filerobot.opts.sassKey && !_this.opts.useLoginMode) {
1451
+ throw new Error('`securityTemplateId` or `sassKey` property is required in core for working properly.');
1452
+ }
1453
+ return _this;
1454
+ }
1455
+
1456
+ /**
1457
+ * Any state value that doesn't have a proper slice (container) then it will be stored in the common state here.
1458
+ * @param {Object} update - the object with the new values to be updated in the common state.
1459
+ */
1460
+ _inherits(Explorer, _Plugin);
1461
+ return _createClass(Explorer, [{
1462
+ key: "setPluginCommonState",
1463
+ value: function setPluginCommonState(update) {
1464
+ this.dispatch(explorerCommonStateUpdated(update));
1465
+ }
1466
+ }, {
1467
+ key: "_isPasteAndDnDUploadDisabled",
1468
+ value: function _isPasteAndDnDUploadDisabled() {
1469
+ var currentView = selectActiveView(this.getGlobalState());
1470
+ return this.opts.disableDnDActions || this.opts.disableUpload || ![VIEW_IDS.FOLDERS, VIEW_IDS.ASSETS].includes(currentView);
1471
+ }
1472
+ }, {
1473
+ key: "getPluginReducer",
1474
+ value: function getPluginReducer() {
1475
+ return explorerReducer;
1476
+ }
1477
+ }, {
1478
+ key: "dispatchIfDefined",
1479
+ value: function dispatchIfDefined(actionFn, payload) {
1480
+ var payloadType = _typeof(payload);
1481
+ if (payloadType === 'undefined') {
1482
+ return;
1483
+ }
1484
+ if (payloadType === 'object' && !Array.isArray(payload)) {
1485
+ var valuedKeys = Object.keys(payload).filter(function (key) {
1486
+ return typeof payload[key] !== 'undefined';
1487
+ });
1488
+ if (valuedKeys.length > 0) {
1489
+ var definedPayload = {};
1490
+ valuedKeys.forEach(function (key) {
1491
+ definedPayload[key] = payload[key];
1492
+ });
1493
+ this.dispatch(actionFn(definedPayload));
1494
+ }
1495
+ return;
1496
+ }
1497
+ this.dispatch(actionFn(payload));
1498
+ }
1499
+
1500
+ // First time (installing) opts will receive all the opts (default & provided to plugin)
1501
+ // After that (opts-updated) will receive the newOpts only that has provided to setOptions so we are considering this case also
1502
+ // if the value is undefined then don't consider dispatching it for avoiding changing the current state's value inappropriately.
1503
+ }, {
1504
+ key: "passOptsToState",
1505
+ value: function passOptsToState() {
1506
+ var _this$getUrlQueryPara, _metadata$store, _metadata$store2, _config$tagging;
1507
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1508
+ var isInstall = arguments.length > 1 ? arguments[1] : undefined;
1509
+ if (Object.keys(opts).length === 0) {
1510
+ return;
1511
+ }
1512
+ var config = opts.config || {};
1513
+ var allViews = Object.values(VIEW_IDS);
1514
+ var allLayouts = Object.values(LAYOUTS_IDS);
1515
+ var currentView = isInstall && ((_this$getUrlQueryPara = this.getUrlQueryParam(FMAW_URL_QUERY_PARAMS.VIEW, opts.view)) === null || _this$getUrlQueryPara === void 0 ? void 0 : _this$getUrlQueryPara.toUpperCase());
1516
+ var viewState = _objectSpread({
1517
+ layout: opts.layoutType ? allLayouts.includes(opts.layoutType) && opts.layoutType || LAYOUTS_IDS.GRID : undefined,
1518
+ list: opts.views ? opts.views.filter(function (viewId) {
1519
+ return allViews.includes(viewId);
1520
+ }) : undefined
1521
+ }, currentView && {
1522
+ activeView: opts.views ? opts.views.includes(currentView) && currentView || opts.views[0] || VIEW_IDS.FOLDERS : undefined
1523
+ });
1524
+ this.dispatchIfDefined(viewsStateUpdated, viewState);
1525
+ this.dispatchIfDefined(foldersStateUpdated, _objectSpread({
1526
+ showTree: opts.showFoldersTree && !opts.hideLeftSideBar
1527
+ }, !selectBaseFolderPath(this.getGlobalState()) && {
1528
+ baseFolderPath: config.rootFolderPath
1529
+ }));
1530
+ this.dispatchIfDefined(detailsViewToggled, opts.showDetailsView);
1531
+ this.dispatchIfDefined(facetedSearchSidebarToggled, opts.facetedSearchSidebarExpanded);
1532
+ this.dispatchIfDefined(facetedSearchToggled, opts.facetedSearchEnabled);
1533
+ var _config$metadata = config.metadata,
1534
+ metadata = _config$metadata === void 0 ? {} : _config$metadata,
1535
+ defaultSort = config.defaultSort;
1536
+ var newMetaRegionalGroups = (_metadata$store = metadata.store) === null || _metadata$store === void 0 ? void 0 : _metadata$store.regional_variants_groups;
1537
+ this.dispatchIfDefined(metadataUpdated, {
1538
+ activeFacetedSearchMetadataFields: opts.activeFacetedSearchMetadataFields,
1539
+ metaDataModel: metadata.model,
1540
+ metaRegionalGroups: newMetaRegionalGroups,
1541
+ forceFillingMetadataOnUpload: (_metadata$store2 = metadata.store) === null || _metadata$store2 === void 0 ? void 0 : _metadata$store2.force_filling_metadata_on_upload,
1542
+ showTags: ((_config$tagging = config.tagging) === null || _config$tagging === void 0 ? void 0 : _config$tagging.enabled) && isMetaRegionalLanguagesGroupExists(newMetaRegionalGroups)
1543
+ });
1544
+ var galleryRoles = opts.galleryRoles;
1545
+ if (Array.isArray(galleryRoles) && galleryRoles.length) {
1546
+ var roles = _toConsumableArray(galleryRoles);
1547
+ roles.sort(function (a, b) {
1548
+ return +a.id - +b.id;
1549
+ });
1550
+ this.dispatchIfDefined(accessRolesUpdated, {
1551
+ accessRoles: roles
1552
+ });
1553
+ }
1554
+ if (isInstall) {
1555
+ var _viewState$activeView;
1556
+ var _ref9 = defaultSort || {},
1557
+ by = _ref9.by,
1558
+ order = _ref9.order;
1559
+ var isValidSortBy = checkIsValidSortBy(by);
1560
+ var isValidSortOrder = checkIsValidSortOrder(order);
1561
+ var newSort = {
1562
+ sortBy: isValidSortBy ? by : undefined,
1563
+ order: isValidSortOrder ? order : undefined
1564
+ };
1565
+ if (isValidSortBy || isValidSortOrder) {
1566
+ this.dispatchIfDefined(filesSortingUpdated, newSort);
1567
+ this.dispatchIfDefined(foldersSortingUpdated, newSort);
1568
+
1569
+ // Change the default constant of sorting value to the provided default one to be always reused wherever needed.
1570
+ if (isValidSortBy) {
1571
+ DEFAULT_SORT_OPTION.by = by;
1572
+ }
1573
+ if (isValidSortOrder) {
1574
+ DEFAULT_SORT_OPTION.order = order;
1575
+ }
1576
+ }
1577
+ this.replaceUrlInBrowser(this._getUpdatedUrlQueryParams([FMAW_URL_QUERY_PARAMS.VIEW], [(_viewState$activeView = viewState.activeView) === null || _viewState$activeView === void 0 ? void 0 : _viewState$activeView.toLowerCase()]));
1578
+ }
1579
+ }
1580
+ }, {
1581
+ key: "passStorageToState",
1582
+ value: function passStorageToState() {}
1583
+ }, {
1584
+ key: "install",
1585
+ value: function install() {
1586
+ this.passOptsToState(this.opts, true);
1587
+ this.passStorageToState();
1588
+ var _this$opts = this.opts,
1589
+ inline = _this$opts.inline,
1590
+ closeAfterFinish = _this$opts.closeAfterFinish,
1591
+ closeAfterUploadStart = _this$opts.closeAfterUploadStart;
1592
+ if (inline && closeAfterFinish) {
1593
+ throw new Error('[Explorer] `closeAfterFinish: true` cannot be used on an inline Explorer, because an inline Explorer cannot be closed at all. Either set `inline: false`, or disable the `closeAfterFinish` option.');
1594
+ }
1595
+ if (inline && closeAfterUploadStart) {
1596
+ throw new Error('[Explorer] `closeAfterUploadStart: true` cannot be used on an inline Explorer, because an inline Explorer cannot be closed at all. Either set `inline: false`, or disable the `closeAfterUploadStart` option.');
1597
+ }
1598
+ var allowMultipleUploads = this.filerobot.opts.allowMultipleUploads;
1599
+ if (allowMultipleUploads && closeAfterFinish) {
1600
+ this.filerobot.log('[Explorer] When using `closeAfterFinish`, we recommended setting the `allowMultipleUploads` option to `false` in the Filerobot constructor.', 'warning');
1601
+ }
1602
+ var target = this.opts.target;
1603
+ if (target) {
1604
+ this.mount(target, this);
1605
+ } else {
1606
+ this.mountTargetModal();
1607
+ }
1608
+ }
1609
+ }, {
1610
+ key: "render",
1611
+ value: function render() {
1612
+ return /*#__PURE__*/createElement(Router, null, /*#__PURE__*/createElement(ExplorerUI));
1613
+ }
1614
+ }]);
1615
+ }(Plugin);
1616
+ export default Explorer;