@aws-amplify/ui-react-storage 3.10.1 → 3.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +23 -15
  2. package/dist/browser.js +1 -1
  3. package/dist/{createStorageBrowser-BfRLqdUj.js → createStorageBrowser-B75dAYRb.js} +52 -55
  4. package/dist/esm/components/StorageBrowser/tasks/useProcessTasks.mjs +20 -11
  5. package/dist/esm/components/StorageBrowser/useAction/createEnhancedListHandler.mjs +20 -101
  6. package/dist/esm/components/StorageBrowser/useAction/searchItems.mjs +74 -0
  7. package/dist/esm/components/StorageBrowser/useAction/useHandler.mjs +5 -5
  8. package/dist/esm/components/StorageBrowser/useAction/useListLocationItems.mjs +1 -0
  9. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.mjs +1 -2
  10. package/dist/esm/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.mjs +1 -2
  11. package/dist/esm/components/StorageBrowser/views/LocationsView/useLocationsView.mjs +1 -2
  12. package/dist/esm/version.mjs +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/types/components/FileUploader/FileUploader.d.ts +1 -1
  15. package/dist/types/components/FileUploader/hooks/index.d.ts +2 -1
  16. package/dist/types/components/FileUploader/hooks/useFileUploader/actions.d.ts +2 -2
  17. package/dist/types/components/FileUploader/hooks/useFileUploader/index.d.ts +2 -1
  18. package/dist/types/components/FileUploader/hooks/useFileUploader/reducer.d.ts +1 -1
  19. package/dist/types/components/FileUploader/hooks/useFileUploader/types.d.ts +2 -2
  20. package/dist/types/components/FileUploader/hooks/useFileUploader/useFileUploader.d.ts +4 -3
  21. package/dist/types/components/FileUploader/hooks/useUploadFiles/index.d.ts +2 -1
  22. package/dist/types/components/FileUploader/hooks/useUploadFiles/useUploadFiles.d.ts +3 -3
  23. package/dist/types/components/FileUploader/index.d.ts +2 -2
  24. package/dist/types/components/FileUploader/types.d.ts +3 -3
  25. package/dist/types/components/FileUploader/ui/Container/index.d.ts +2 -1
  26. package/dist/types/components/FileUploader/ui/DropZone/DropZone.d.ts +1 -1
  27. package/dist/types/components/FileUploader/ui/DropZone/index.d.ts +1 -1
  28. package/dist/types/components/FileUploader/ui/DropZone/types.d.ts +1 -1
  29. package/dist/types/components/FileUploader/ui/FileList/FileControl.d.ts +1 -1
  30. package/dist/types/components/FileUploader/ui/FileList/FileDetails.d.ts +1 -1
  31. package/dist/types/components/FileUploader/ui/FileList/FileList.d.ts +1 -1
  32. package/dist/types/components/FileUploader/ui/FileList/FileRemoveButton.d.ts +1 -1
  33. package/dist/types/components/FileUploader/ui/FileList/FileStatusMessage.d.ts +1 -1
  34. package/dist/types/components/FileUploader/ui/FileList/FileThumbnail.d.ts +1 -1
  35. package/dist/types/components/FileUploader/ui/FileList/index.d.ts +1 -1
  36. package/dist/types/components/FileUploader/ui/FileList/types.d.ts +2 -2
  37. package/dist/types/components/FileUploader/ui/FileListFooter/FileListFooter.d.ts +1 -1
  38. package/dist/types/components/FileUploader/ui/FileListFooter/index.d.ts +2 -1
  39. package/dist/types/components/FileUploader/ui/FileListHeader/FileListHeader.d.ts +1 -1
  40. package/dist/types/components/FileUploader/ui/FileListHeader/index.d.ts +2 -1
  41. package/dist/types/components/FileUploader/ui/FilePicker/FilePicker.d.ts +1 -1
  42. package/dist/types/components/FileUploader/ui/FilePicker/index.d.ts +2 -1
  43. package/dist/types/components/FileUploader/ui/index.d.ts +12 -6
  44. package/dist/types/components/FileUploader/utils/displayText.d.ts +1 -1
  45. package/dist/types/components/FileUploader/utils/getInput.d.ts +3 -3
  46. package/dist/types/components/FileUploader/utils/index.d.ts +4 -2
  47. package/dist/types/components/FileUploader/utils/resolveFile.d.ts +1 -1
  48. package/dist/types/components/FileUploader/utils/uploadFile.d.ts +1 -1
  49. package/dist/types/components/StorageBrowser/ErrorBoundary/index.d.ts +2 -1
  50. package/dist/types/components/StorageBrowser/StorageBrowserAmplify.d.ts +1 -1
  51. package/dist/types/components/StorageBrowser/actions/__testUtils__/permissions.d.ts +1 -1
  52. package/dist/types/components/StorageBrowser/actions/configs/context.d.ts +1 -1
  53. package/dist/types/components/StorageBrowser/actions/configs/defaults.d.ts +1 -1
  54. package/dist/types/components/StorageBrowser/actions/configs/index.d.ts +4 -2
  55. package/dist/types/components/StorageBrowser/actions/configs/types.d.ts +2 -2
  56. package/dist/types/components/StorageBrowser/actions/configs/utils.d.ts +1 -1
  57. package/dist/types/components/StorageBrowser/actions/handlers/copy.d.ts +1 -1
  58. package/dist/types/components/StorageBrowser/actions/handlers/createFolder.d.ts +1 -1
  59. package/dist/types/components/StorageBrowser/actions/handlers/defaults.d.ts +6 -6
  60. package/dist/types/components/StorageBrowser/actions/handlers/delete.d.ts +1 -1
  61. package/dist/types/components/StorageBrowser/actions/handlers/download.d.ts +1 -1
  62. package/dist/types/components/StorageBrowser/actions/handlers/listLocationItems.d.ts +2 -2
  63. package/dist/types/components/StorageBrowser/actions/handlers/listLocations.d.ts +1 -1
  64. package/dist/types/components/StorageBrowser/actions/handlers/types.d.ts +1 -1
  65. package/dist/types/components/StorageBrowser/actions/handlers/upload.d.ts +1 -1
  66. package/dist/types/components/StorageBrowser/actions/handlers/utils.d.ts +3 -3
  67. package/dist/types/components/StorageBrowser/actions/index.d.ts +4 -2
  68. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyAuthAdapter.d.ts +1 -1
  69. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyListLocationsHandler.d.ts +1 -1
  70. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/getPaginatedLocations.d.ts +1 -1
  71. package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createLocationCredentialsHandler.d.ts +2 -2
  72. package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createManagedAuthAdapter.d.ts +1 -1
  73. package/dist/types/components/StorageBrowser/adapters/index.d.ts +1 -1
  74. package/dist/types/components/StorageBrowser/adapters/permissionParsers.d.ts +2 -2
  75. package/dist/types/components/StorageBrowser/adapters/types.d.ts +3 -3
  76. package/dist/types/components/StorageBrowser/components/ComponentsProvider.d.ts +1 -1
  77. package/dist/types/components/StorageBrowser/components/base/DropdownMenu.d.ts +1 -1
  78. package/dist/types/components/StorageBrowser/components/base/Field.d.ts +1 -1
  79. package/dist/types/components/StorageBrowser/components/base/PaginationButton.d.ts +1 -1
  80. package/dist/types/components/StorageBrowser/components/base/Table.d.ts +1 -1
  81. package/dist/types/components/StorageBrowser/components/composables/ActionDestination.d.ts +1 -1
  82. package/dist/types/components/StorageBrowser/components/composables/ActionsList.d.ts +1 -1
  83. package/dist/types/components/StorageBrowser/components/composables/DataTable/DataTable.d.ts +2 -2
  84. package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/ButtonDataCell.d.ts +1 -1
  85. package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/TextDataCell.d.ts +1 -1
  86. package/dist/types/components/StorageBrowser/components/composables/DataTable/headers/SortHeader.d.ts +1 -1
  87. package/dist/types/components/StorageBrowser/components/composables/DataTable/index.d.ts +3 -2
  88. package/dist/types/components/StorageBrowser/components/composables/DataTable/types.d.ts +8 -8
  89. package/dist/types/components/StorageBrowser/components/composables/Message.d.ts +1 -1
  90. package/dist/types/components/StorageBrowser/components/composables/context.d.ts +1 -1
  91. package/dist/types/components/StorageBrowser/components/composables/defaults.d.ts +1 -1
  92. package/dist/types/components/StorageBrowser/components/composables/index.d.ts +1 -1
  93. package/dist/types/components/StorageBrowser/components/composables/types.d.ts +20 -20
  94. package/dist/types/components/StorageBrowser/components/defaults.d.ts +1 -1
  95. package/dist/types/components/StorageBrowser/components/elements/IconElement.d.ts +2 -1
  96. package/dist/types/components/StorageBrowser/components/elements/defaults.d.ts +1 -1
  97. package/dist/types/components/StorageBrowser/components/elements/index.d.ts +4 -2
  98. package/dist/types/components/StorageBrowser/components/index.d.ts +9 -6
  99. package/dist/types/components/StorageBrowser/components/types.d.ts +1 -1
  100. package/dist/types/components/StorageBrowser/configuration/context.d.ts +1 -1
  101. package/dist/types/components/StorageBrowser/configuration/createConfigurationProvider.d.ts +1 -1
  102. package/dist/types/components/StorageBrowser/configuration/index.d.ts +1 -1
  103. package/dist/types/components/StorageBrowser/configuration/types.d.ts +3 -3
  104. package/dist/types/components/StorageBrowser/configuration/useGetActionInputCallback.d.ts +1 -1
  105. package/dist/types/components/StorageBrowser/controls/context.d.ts +1 -1
  106. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareButtonData.d.ts +1 -1
  107. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareDateData.d.ts +1 -1
  108. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareNumberData.d.ts +1 -1
  109. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareTextData.d.ts +1 -1
  110. package/dist/types/components/StorageBrowser/controls/hooks/getNavigationItems.d.ts +2 -2
  111. package/dist/types/components/StorageBrowser/controls/hooks/getNavigationParts.d.ts +1 -1
  112. package/dist/types/components/StorageBrowser/controls/hooks/useActionCancel.d.ts +1 -1
  113. package/dist/types/components/StorageBrowser/controls/hooks/useActionDestination.d.ts +1 -1
  114. package/dist/types/components/StorageBrowser/controls/hooks/useActionExit.d.ts +1 -1
  115. package/dist/types/components/StorageBrowser/controls/hooks/useActionStart.d.ts +1 -1
  116. package/dist/types/components/StorageBrowser/controls/hooks/useActionsList.d.ts +1 -1
  117. package/dist/types/components/StorageBrowser/controls/hooks/useAddFiles.d.ts +1 -1
  118. package/dist/types/components/StorageBrowser/controls/hooks/useAddFolder.d.ts +1 -1
  119. package/dist/types/components/StorageBrowser/controls/hooks/useDataRefresh.d.ts +1 -1
  120. package/dist/types/components/StorageBrowser/controls/hooks/useDataTable.d.ts +1 -1
  121. package/dist/types/components/StorageBrowser/controls/hooks/useDropZone.d.ts +1 -1
  122. package/dist/types/components/StorageBrowser/controls/hooks/useFolderNameField.d.ts +1 -1
  123. package/dist/types/components/StorageBrowser/controls/hooks/useLoadingIndicator.d.ts +1 -1
  124. package/dist/types/components/StorageBrowser/controls/hooks/useMessage.d.ts +1 -1
  125. package/dist/types/components/StorageBrowser/controls/hooks/useNavigation.d.ts +1 -1
  126. package/dist/types/components/StorageBrowser/controls/hooks/useOverwriteToggle.d.ts +1 -1
  127. package/dist/types/components/StorageBrowser/controls/hooks/usePagination.d.ts +1 -1
  128. package/dist/types/components/StorageBrowser/controls/hooks/useResolvedComposable.d.ts +1 -1
  129. package/dist/types/components/StorageBrowser/controls/hooks/useSearchField.d.ts +1 -1
  130. package/dist/types/components/StorageBrowser/controls/hooks/useSearchSubfoldersToggle.d.ts +1 -1
  131. package/dist/types/components/StorageBrowser/controls/hooks/useStatusDisplay.d.ts +1 -1
  132. package/dist/types/components/StorageBrowser/controls/hooks/useTitle.d.ts +1 -1
  133. package/dist/types/components/StorageBrowser/controls/index.d.ts +1 -1
  134. package/dist/types/components/StorageBrowser/controls/types.d.ts +4 -4
  135. package/dist/types/components/StorageBrowser/createStorageBrowser/createProvider.d.ts +1 -1
  136. package/dist/types/components/StorageBrowser/createStorageBrowser/createStorageBrowser.d.ts +1 -1
  137. package/dist/types/components/StorageBrowser/createStorageBrowser/index.d.ts +1 -1
  138. package/dist/types/components/StorageBrowser/createStorageBrowser/types.d.ts +9 -9
  139. package/dist/types/components/StorageBrowser/credentials/context.d.ts +1 -1
  140. package/dist/types/components/StorageBrowser/credentials/credentialsStore/create.d.ts +1 -1
  141. package/dist/types/components/StorageBrowser/credentials/credentialsStore/index.d.ts +1 -1
  142. package/dist/types/components/StorageBrowser/credentials/credentialsStore/registry.d.ts +2 -2
  143. package/dist/types/components/StorageBrowser/credentials/credentialsStore/store.d.ts +2 -2
  144. package/dist/types/components/StorageBrowser/credentials/credentialsStore/types.d.ts +2 -2
  145. package/dist/types/components/StorageBrowser/credentials/index.d.ts +3 -2
  146. package/dist/types/components/StorageBrowser/credentials/types.d.ts +4 -4
  147. package/dist/types/components/StorageBrowser/credentials/useCredentialsStore.d.ts +2 -2
  148. package/dist/types/components/StorageBrowser/displayText/context.d.ts +1 -1
  149. package/dist/types/components/StorageBrowser/displayText/index.d.ts +1 -1
  150. package/dist/types/components/StorageBrowser/displayText/libraries/en/copyView.d.ts +1 -1
  151. package/dist/types/components/StorageBrowser/displayText/libraries/en/createFolderView.d.ts +1 -1
  152. package/dist/types/components/StorageBrowser/displayText/libraries/en/default.d.ts +1 -1
  153. package/dist/types/components/StorageBrowser/displayText/libraries/en/deleteView.d.ts +1 -1
  154. package/dist/types/components/StorageBrowser/displayText/libraries/en/locationDetailView.d.ts +1 -1
  155. package/dist/types/components/StorageBrowser/displayText/libraries/en/locationsView.d.ts +1 -1
  156. package/dist/types/components/StorageBrowser/displayText/libraries/en/shared.d.ts +1 -1
  157. package/dist/types/components/StorageBrowser/displayText/libraries/en/uploadView.d.ts +1 -1
  158. package/dist/types/components/StorageBrowser/displayText/types.d.ts +5 -5
  159. package/dist/types/components/StorageBrowser/displayText/utils.d.ts +1 -1
  160. package/dist/types/components/StorageBrowser/files/context.d.ts +1 -1
  161. package/dist/types/components/StorageBrowser/files/types.d.ts +1 -1
  162. package/dist/types/components/StorageBrowser/files/utils.d.ts +2 -2
  163. package/dist/types/components/StorageBrowser/index.d.ts +12 -7
  164. package/dist/types/components/StorageBrowser/locationItems/context.d.ts +1 -1
  165. package/dist/types/components/StorageBrowser/locationItems/index.d.ts +2 -1
  166. package/dist/types/components/StorageBrowser/storage-internal.d.ts +2 -1
  167. package/dist/types/components/StorageBrowser/store/constants.d.ts +1 -1
  168. package/dist/types/components/StorageBrowser/store/context.d.ts +1 -1
  169. package/dist/types/components/StorageBrowser/store/index.d.ts +1 -1
  170. package/dist/types/components/StorageBrowser/store/storeReducer.d.ts +1 -1
  171. package/dist/types/components/StorageBrowser/store/types.d.ts +2 -2
  172. package/dist/types/components/StorageBrowser/store/useStoreReducer.d.ts +1 -1
  173. package/dist/types/components/StorageBrowser/store/utils.d.ts +2 -2
  174. package/dist/types/components/StorageBrowser/store/validateStoreProps.d.ts +1 -1
  175. package/dist/types/components/StorageBrowser/tasks/constants.d.ts +1 -1
  176. package/dist/types/components/StorageBrowser/tasks/index.d.ts +1 -1
  177. package/dist/types/components/StorageBrowser/tasks/types.d.ts +10 -3
  178. package/dist/types/components/StorageBrowser/tasks/useProcessTasks.d.ts +2 -2
  179. package/dist/types/components/StorageBrowser/tasks/utils.d.ts +1 -1
  180. package/dist/types/components/StorageBrowser/useAction/context.d.ts +1 -1
  181. package/dist/types/components/StorageBrowser/useAction/createEnhancedListHandler.d.ts +19 -41
  182. package/dist/types/components/StorageBrowser/useAction/index.d.ts +1 -1
  183. package/dist/types/components/StorageBrowser/useAction/searchItems.d.ts +24 -0
  184. package/dist/types/components/StorageBrowser/useAction/types.d.ts +5 -5
  185. package/dist/types/components/StorageBrowser/useAction/useAction.d.ts +1 -1
  186. package/dist/types/components/StorageBrowser/useAction/useHandler.d.ts +2 -2
  187. package/dist/types/components/StorageBrowser/useAction/useList.d.ts +3 -3
  188. package/dist/types/components/StorageBrowser/useAction/useListFolderItems.d.ts +4 -8
  189. package/dist/types/components/StorageBrowser/useAction/useListLocationItems.d.ts +5 -5
  190. package/dist/types/components/StorageBrowser/useAction/useListLocations.d.ts +4 -4
  191. package/dist/types/components/StorageBrowser/useAction/utils.d.ts +2 -2
  192. package/dist/types/components/StorageBrowser/validators/assertLocationData.d.ts +1 -1
  193. package/dist/types/components/StorageBrowser/validators/assertRegisterAuthListener.d.ts +1 -1
  194. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyView.d.ts +1 -1
  195. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.d.ts +1 -1
  196. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersMessageControl.d.ts +1 -1
  197. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersPaginationControl.d.ts +1 -1
  198. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersTableControl.d.ts +2 -2
  199. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/getDestinationPickerTableData.d.ts +1 -1
  200. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/types.d.ts +3 -3
  201. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useCopyView.d.ts +1 -1
  202. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.d.ts +2 -2
  203. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderView.d.ts +1 -1
  204. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.d.ts +1 -1
  205. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/types.d.ts +2 -2
  206. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/useCreateFolderView.d.ts +1 -1
  207. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteView.d.ts +1 -1
  208. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.d.ts +1 -1
  209. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/types.d.ts +2 -2
  210. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/useDeleteView.d.ts +1 -1
  211. package/dist/types/components/StorageBrowser/views/LocationActionView/LocationActionView.d.ts +1 -1
  212. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadView.d.ts +1 -1
  213. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadViewProvider.d.ts +1 -1
  214. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/types.d.ts +3 -3
  215. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.d.ts +1 -1
  216. package/dist/types/components/StorageBrowser/views/LocationActionView/index.d.ts +9 -5
  217. package/dist/types/components/StorageBrowser/views/LocationActionView/types.d.ts +4 -4
  218. package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailView.d.ts +1 -1
  219. package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.d.ts +1 -1
  220. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/constants.d.ts +1 -1
  221. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFileRowContent.d.ts +2 -2
  222. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFolderRowContent.d.ts +1 -1
  223. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getHeaders.d.ts +1 -1
  224. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getLocationDetailViewTableData.d.ts +4 -4
  225. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/types.d.ts +1 -1
  226. package/dist/types/components/StorageBrowser/views/LocationDetailView/index.d.ts +1 -1
  227. package/dist/types/components/StorageBrowser/views/LocationDetailView/types.d.ts +4 -4
  228. package/dist/types/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.d.ts +1 -1
  229. package/dist/types/components/StorageBrowser/views/LocationsView/LocationsView.d.ts +1 -1
  230. package/dist/types/components/StorageBrowser/views/LocationsView/LocationsViewProvider.d.ts +1 -1
  231. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getHeaders.d.ts +1 -1
  232. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getLocationsViewTableData.d.ts +3 -3
  233. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/types.d.ts +2 -2
  234. package/dist/types/components/StorageBrowser/views/LocationsView/index.d.ts +1 -1
  235. package/dist/types/components/StorageBrowser/views/LocationsView/types.d.ts +2 -2
  236. package/dist/types/components/StorageBrowser/views/LocationsView/useLocationsView.d.ts +2 -2
  237. package/dist/types/components/StorageBrowser/views/context/actionViews.d.ts +2 -2
  238. package/dist/types/components/StorageBrowser/views/context/getViews.d.ts +3 -3
  239. package/dist/types/components/StorageBrowser/views/context/primaryViews.d.ts +2 -2
  240. package/dist/types/components/StorageBrowser/views/context/types.d.ts +1 -1
  241. package/dist/types/components/StorageBrowser/views/context/views.d.ts +3 -3
  242. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/index.d.ts +1 -1
  243. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/types.d.ts +2 -2
  244. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/useResolveTableData.d.ts +2 -2
  245. package/dist/types/components/StorageBrowser/views/index.d.ts +8 -4
  246. package/dist/types/components/StorageBrowser/views/types.d.ts +5 -5
  247. package/dist/types/components/StorageBrowser/views/useView.d.ts +3 -3
  248. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/__testUtils__/tasks.d.ts +2 -2
  249. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.d.ts +1 -1
  250. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.d.ts +1 -1
  251. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/types.d.ts +4 -4
  252. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/uploadResolvers.d.ts +1 -1
  253. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/utils.d.ts +2 -2
  254. package/dist/types/components/StorageImage/index.d.ts +1 -1
  255. package/dist/types/components/StorageImage/types.d.ts +3 -3
  256. package/dist/types/components/StorageManager/StorageManager.d.ts +1 -1
  257. package/dist/types/components/StorageManager/index.d.ts +2 -2
  258. package/dist/types/components/StorageManager/types.d.ts +2 -2
  259. package/dist/types/components/StorageManager/ui/Container/index.d.ts +2 -1
  260. package/dist/types/components/StorageManager/ui/DropZone/DropZone.d.ts +1 -1
  261. package/dist/types/components/StorageManager/ui/DropZone/index.d.ts +1 -1
  262. package/dist/types/components/StorageManager/ui/DropZone/types.d.ts +1 -1
  263. package/dist/types/components/StorageManager/ui/FileList/FileControl.d.ts +1 -1
  264. package/dist/types/components/StorageManager/ui/FileList/FileDetails.d.ts +1 -1
  265. package/dist/types/components/StorageManager/ui/FileList/FileList.d.ts +1 -1
  266. package/dist/types/components/StorageManager/ui/FileList/FileRemoveButton.d.ts +1 -1
  267. package/dist/types/components/StorageManager/ui/FileList/FileStatusMessage.d.ts +1 -1
  268. package/dist/types/components/StorageManager/ui/FileList/FileThumbnail.d.ts +1 -1
  269. package/dist/types/components/StorageManager/ui/FileList/index.d.ts +1 -1
  270. package/dist/types/components/StorageManager/ui/FileList/types.d.ts +2 -2
  271. package/dist/types/components/StorageManager/ui/FileListFooter/FileListFooter.d.ts +1 -1
  272. package/dist/types/components/StorageManager/ui/FileListFooter/index.d.ts +2 -1
  273. package/dist/types/components/StorageManager/ui/FileListHeader/FileListHeader.d.ts +1 -1
  274. package/dist/types/components/StorageManager/ui/FileListHeader/index.d.ts +2 -1
  275. package/dist/types/components/StorageManager/ui/FilePicker/FilePicker.d.ts +1 -1
  276. package/dist/types/components/StorageManager/ui/FilePicker/index.d.ts +2 -1
  277. package/dist/types/components/StorageManager/ui/index.d.ts +12 -6
  278. package/dist/types/components/index.d.ts +6 -3
  279. package/dist/types/index.d.ts +4 -2
  280. package/dist/types/version.d.ts +1 -1
  281. package/package.json +6 -6
package/README.md CHANGED
@@ -1,23 +1,31 @@
1
- # Amplify UI
1
+ # Amplify UI React Storage
2
2
 
3
- Amplify UI is an open-source UI library with cloud-connected components that are endlessly customizable, accessible, and can integrate into _any_ application. Amplify UI consists of:
3
+ The React Storage package provides components for file storage and management in Amplify connected applications.
4
4
 
5
- 1. Connected components that simplify complex cloud-connected workflows, like Authenticator.
6
- 2. Primitive components that create consistency across Amplify UI and allow you to build complete applications that fit your brand, like Buttons and Badges.
7
- 3. Data-bound components that make it easy to display dynamic data, like DataStoreCollections.
8
- 4. Theming capabilities that allow you to customize the appearance of Amplify UI to match your brand.
5
+ ## Contents
9
6
 
10
- ## React Documentation
7
+ ### Core Components
11
8
 
12
- - https://ui.docs.amplify.aws/react
9
+ - `FileUploader` - Component for uploading files
10
+ - `StorageImage` - Component for displaying images from storage
11
+ - `StorageManager` - Component for managing storage
12
+ - `StorageBrowser` - Component for browsing storage
13
13
 
14
- ## Features 🚀
14
+ ### Props Types
15
15
 
16
- - **Better developer experience** Connected-components like Authenticator are being written with framework-specific implementations so that they follow framework conventions and are easier to integrate into your application.
17
- - **Endlessly customizable** Every detail of Amplify UI is customizable to match your brand. Style all of Amplify UI with themes, override components with your own, or build your own UI and use Amplify for complex state management.
18
- - **Accessible** Amplify UI components follow [WCAG](https://www.w3.org/WAI/standards-guidelines/wcag/) and [WAI-ARIA](https://www.w3.org/TR/wai-aria-1.2/) best practices and guidelines such as color contrast, keyboard navigation, accessible labels, and focus management.
19
- - **Primitive components (React only right now)** Primitive components are used in the connected components, like Authenticator, you can also customize them and use them to build the rest of your UI.
16
+ - `FileUploaderProps` - Props for FileUploader component
17
+ - `StorageImageProps` - Props for StorageImage component
18
+ - `StorageManagerProps` - Props for StorageManager component
19
+ - `StorageBrowserProps` - Props for StorageBrowser component
20
+ - `DropZoneProps` - Props for drop zone functionality
21
+ - `ContainerProps` - Props for container components
22
+ - `FileListProps` - Props for file list components
23
+ - `FilePickerProps` - Props for file picker components
24
+ - `FileListHeaderProps` - Props for file list header components
25
+ - `FileListFooterProps` - Props for file list footer components
26
+ - `FileUploaderHandle` - React.ForwardRef handle for FileUploader component
27
+ - `StorageManagerHandle` - React.ForwardRef handle for StorageManager component
20
28
 
21
- ## We love contributors!!
29
+ ## React Documentation
22
30
 
23
- See our contributing guide [CONTRIBUTING.md](/CONTRIBUTING.md) to help us scale Amplify UI!
31
+ - https://ui.docs.amplify.aws/react
package/dist/browser.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var internals = require('@aws-amplify/storage/internals');
6
6
  require('@aws-amplify/ui');
7
- var createStorageBrowser = require('./createStorageBrowser-BfRLqdUj.js');
7
+ var createStorageBrowser = require('./createStorageBrowser-B75dAYRb.js');
8
8
  require('aws-amplify/storage');
9
9
  require('react');
10
10
  require('@aws-amplify/ui-react');
@@ -32,7 +32,7 @@ function _interopNamespace(e) {
32
32
 
33
33
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
34
34
 
35
- const VERSION = '3.10.1';
35
+ const VERSION = '3.10.3';
36
36
 
37
37
  const toAccessGrantPermission = (permission) => {
38
38
  let result = '';
@@ -1359,8 +1359,6 @@ const { ActionHandlersProvider, useActionHandlers } = uiReactCore.createContextU
1359
1359
  errorMessage: '`useActionHandlers` must be called from within an `ActionHandlersProvider',
1360
1360
  });
1361
1361
 
1362
- const SEARCH_LIMIT = 10000;
1363
- const SEARCH_PAGE_SIZE = 1000;
1364
1362
  /**
1365
1363
  * Normalizes and converts a string to lower case,
1366
1364
  * handling Unicode characters and locale-specific case mappings.
@@ -1389,10 +1387,10 @@ function normalize(input) {
1389
1387
  function caseInsensitiveIncludes(input, query) {
1390
1388
  return normalize(input).includes(normalize(query));
1391
1389
  }
1392
- function searchItems({ prefix = '', list, options }) {
1390
+ function searchItems({ prefix = '', items, options, }) {
1393
1391
  const { query, filterBy, groupBy } = options;
1394
1392
  // filter keys that match `filterBy` search option
1395
- const filteredItems = list.filter((item) => {
1393
+ const filteredItems = items.filter((item) => {
1396
1394
  const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
1397
1395
  const path = item[key];
1398
1396
  const suffix = path.slice(prefix.length);
@@ -1433,7 +1431,10 @@ function searchItems({ prefix = '', list, options }) {
1433
1431
  }
1434
1432
  return Array.from(uniquePaths.values());
1435
1433
  }
1436
- const createEnhancedListHandler = (action) => {
1434
+
1435
+ const SEARCH_LIMIT = 10000;
1436
+ const SEARCH_PAGE_SIZE = 1000;
1437
+ const createEnhancedListHandler = (handler) => {
1437
1438
  return async function listActionHandler(prevState, { options, ...input }) {
1438
1439
  const { nextToken: _nextToken, refresh, reset, search, ...rest } = options ?? {};
1439
1440
  if (reset) {
@@ -1441,43 +1442,32 @@ const createEnhancedListHandler = (action) => {
1441
1442
  }
1442
1443
  // collect and filter results on `search`
1443
1444
  if (search) {
1444
- const result = [];
1445
- let nextNextToken = undefined;
1445
+ const items = [];
1446
+ let nextToken = undefined;
1446
1447
  do {
1447
- const output = (await action({
1448
+ const output = await handler({
1448
1449
  ...input,
1449
- options: {
1450
- ...rest,
1451
- pageSize: SEARCH_PAGE_SIZE,
1452
- nextToken: nextNextToken,
1453
- },
1454
- }));
1455
- result.push(...output.items);
1456
- nextNextToken = output.nextToken;
1457
- } while (nextNextToken && result.length < SEARCH_LIMIT);
1450
+ options: { ...rest, pageSize: SEARCH_PAGE_SIZE, nextToken },
1451
+ });
1452
+ items.push(...output.items);
1453
+ // eslint-disable-next-line prefer-destructuring
1454
+ nextToken = output.nextToken;
1455
+ } while (nextToken && items.length < SEARCH_LIMIT);
1458
1456
  return {
1459
- items: searchItems({
1460
- list: result,
1461
- prefix: input.prefix,
1462
- options: search,
1463
- }),
1464
- search: {
1465
- // search limit reached but we still have a next token
1466
- hasExhaustedSearch: !!nextNextToken,
1467
- },
1457
+ items: searchItems({ items, prefix: input.prefix, options: search }),
1458
+ // search limit reached but we still have a next token
1459
+ hasExhaustedSearch: !!nextToken,
1468
1460
  nextToken: undefined,
1469
1461
  };
1470
1462
  }
1471
1463
  // ignore provided `nextToken` on `refresh`
1472
1464
  const nextToken = refresh ? undefined : _nextToken;
1473
- const output = (await action({
1465
+ const output = await handler({
1474
1466
  ...input,
1475
1467
  options: { ...rest, nextToken },
1476
- }));
1477
- return {
1478
- items: [...(refresh ? [] : prevState.items), ...output.items],
1479
- nextToken: output.nextToken,
1480
- };
1468
+ });
1469
+ const items = [...(refresh ? [] : prevState.items), ...output.items];
1470
+ return { ...output, items };
1481
1471
  };
1482
1472
  };
1483
1473
 
@@ -1923,9 +1913,9 @@ const QUEUED_TASK_BASE = {
1923
1913
  progress: undefined,
1924
1914
  status: 'QUEUED',
1925
1915
  };
1926
- const isTaskHandlerInput = (input) => !!input.data;
1916
+ const isSingleTaskInput = (input) => !!input.data;
1927
1917
  function useProcessTasks(handler, options) {
1928
- const { concurrency, items, ...callbacks } = options ?? {};
1918
+ const { items, ...callbacks } = options ?? {};
1929
1919
  const callbacksRef = React__namespace["default"].useRef(callbacks);
1930
1920
  if (callbacks) {
1931
1921
  callbacksRef.current = callbacks;
@@ -1996,13 +1986,13 @@ function useProcessTasks(handler, options) {
1996
1986
  });
1997
1987
  flush();
1998
1988
  }, [createTask, flush, updateTask, items, refreshTaskData]);
1999
- const processNextTask = (_input) => {
2000
- const hasInputData = isTaskHandlerInput(_input);
2001
- if (hasInputData) {
1989
+ const processTask = (_input) => {
1990
+ const isSingleTask = isSingleTaskInput(_input);
1991
+ if (isSingleTask) {
2002
1992
  createTask(_input.data);
2003
1993
  flush();
2004
1994
  }
2005
- const { data } = hasInputData
1995
+ const { data } = isSingleTask
2006
1996
  ? _input
2007
1997
  : [...tasksRef.current.values()].find(({ status }) => status === 'QUEUED') ?? {};
2008
1998
  if (!data)
@@ -2047,10 +2037,10 @@ function useProcessTasks(handler, options) {
2047
2037
  const task = getTask();
2048
2038
  if (task && ui.isFunction(onTaskComplete))
2049
2039
  onTaskComplete(task);
2050
- // ignore process next task for single operation inputs
2051
- if (hasInputData)
2040
+ // ignore process next task for single task
2041
+ if (isSingleTask)
2052
2042
  return;
2053
- processNextTask(_input);
2043
+ processTask(_input);
2054
2044
  });
2055
2045
  updateTask(data.id, { cancel, status: 'PENDING' });
2056
2046
  };
@@ -2062,13 +2052,22 @@ function useProcessTasks(handler, options) {
2062
2052
  if (isProcessing) {
2063
2053
  return;
2064
2054
  }
2055
+ // if single task, run `processTask` once
2056
+ if (isSingleTaskInput(input)) {
2057
+ processTask(input);
2058
+ return;
2059
+ }
2060
+ const { concurrency, ...options } = input.options ?? {};
2061
+ // reconstruct `input` without `concurrency`
2062
+ const _input = { ...input, options };
2063
+ // for batch tasks, if no `concurrency` process tasks individually
2065
2064
  if (!concurrency) {
2066
- processNextTask(input);
2065
+ processTask(_input);
2067
2066
  return;
2068
2067
  }
2069
2068
  let count = 0;
2070
2069
  while (count < concurrency) {
2071
- processNextTask(input);
2070
+ processTask(_input);
2072
2071
  count++;
2073
2072
  }
2074
2073
  };
@@ -2084,10 +2083,7 @@ function useProcessTasks(handler, options) {
2084
2083
  const isOptionsWithItems = (options) => !!options?.items;
2085
2084
  const isHandleTaskInput = (value) => !!value?.data;
2086
2085
  function useHandler(handler, options) {
2087
- const [state, handleProcessing] = useProcessTasks(handler, {
2088
- ...options,
2089
- concurrency: DEFAULT_ACTION_CONCURRENCY,
2090
- });
2086
+ const [state, handleProcessing] = useProcessTasks(handler, options);
2091
2087
  const getConfig = useGetActionInput();
2092
2088
  const { reset, isProcessing, tasks, ...rest } = state;
2093
2089
  const handleDispatch = React__namespace["default"].useCallback((input) => {
@@ -2098,7 +2094,10 @@ function useHandler(handler, options) {
2098
2094
  reset();
2099
2095
  handleProcessing({
2100
2096
  config,
2101
- ...(hasData ? { data: input.data } : undefined),
2097
+ ...(hasData
2098
+ ? { data: input.data }
2099
+ : // if no `data` provided, provide `concurrency` to `options`
2100
+ { options: { concurrency: DEFAULT_ACTION_CONCURRENCY } }),
2102
2101
  });
2103
2102
  }, [getConfig, handleProcessing, reset]);
2104
2103
  if (isOptionsWithItems(options)) {
@@ -2149,6 +2148,7 @@ const useListLocationItems = () => {
2149
2148
  const enhancedHandler = React__namespace["default"].useMemo(() => createEnhancedListHandler((input) => listLocationItems({ ...input, config: getConfig() })), [getConfig, listLocationItems]);
2150
2149
  return uiReactCore.useAsyncReducer(enhancedHandler, {
2151
2150
  items: [],
2151
+ hasExhaustedSearch: false,
2152
2152
  nextToken: undefined,
2153
2153
  });
2154
2154
  };
@@ -4006,8 +4006,7 @@ const DEFAULT_REFRESH_OPTIONS = { ...DEFAULT_LIST_OPTIONS$2, refresh: true };
4006
4006
  const useFolders = ({ destination, setDestination, }) => {
4007
4007
  const { current, key } = destination;
4008
4008
  const [{ value, hasError, isLoading, message }, handleList] = useList('folderItems');
4009
- const { items, nextToken, search } = value;
4010
- const { hasExhaustedSearch = false } = search ?? {};
4009
+ const { items, nextToken, hasExhaustedSearch = false } = value;
4011
4010
  const onInitialize = React__namespace["default"].useCallback(() => {
4012
4011
  handleList({
4013
4012
  prefix: key,
@@ -4646,8 +4645,7 @@ const useLocationDetailView = (options) => {
4646
4645
  const [{ task }, handleDownload] = useAction('download');
4647
4646
  const [{ value, isLoading, hasError, message }, handleList] = useList('locationItems');
4648
4647
  // set up pagination
4649
- const { items, nextToken, search } = value;
4650
- const { hasExhaustedSearch = false } = search ?? {};
4648
+ const { items, nextToken, hasExhaustedSearch = false } = value;
4651
4649
  const onPaginate = () => {
4652
4650
  if (hasInvalidPrefix || !nextToken)
4653
4651
  return;
@@ -4982,9 +4980,8 @@ const useLocationsView = (options) => {
4982
4980
  const [state, handleList] = useList('locations');
4983
4981
  const dispatchStoreAction = useStore()[1];
4984
4982
  const { value, message, hasError, isLoading } = state;
4985
- const { items, nextToken, search } = value;
4983
+ const { items, nextToken, hasExhaustedSearch = false } = value;
4986
4984
  const hasNextToken = !!nextToken;
4987
- const { hasExhaustedSearch = false } = search ?? {};
4988
4985
  const onNavigate = options?.onNavigate;
4989
4986
  const initialValues = options?.initialValues ?? {};
4990
4987
  const listOptionsRef = React__namespace["default"].useRef({
@@ -8,9 +8,9 @@ const QUEUED_TASK_BASE = {
8
8
  progress: undefined,
9
9
  status: 'QUEUED',
10
10
  };
11
- const isTaskHandlerInput = (input) => !!input.data;
11
+ const isSingleTaskInput = (input) => !!input.data;
12
12
  function useProcessTasks(handler, options) {
13
- const { concurrency, items, ...callbacks } = options ?? {};
13
+ const { items, ...callbacks } = options ?? {};
14
14
  const callbacksRef = React__default.useRef(callbacks);
15
15
  if (callbacks) {
16
16
  callbacksRef.current = callbacks;
@@ -81,13 +81,13 @@ function useProcessTasks(handler, options) {
81
81
  });
82
82
  flush();
83
83
  }, [createTask, flush, updateTask, items, refreshTaskData]);
84
- const processNextTask = (_input) => {
85
- const hasInputData = isTaskHandlerInput(_input);
86
- if (hasInputData) {
84
+ const processTask = (_input) => {
85
+ const isSingleTask = isSingleTaskInput(_input);
86
+ if (isSingleTask) {
87
87
  createTask(_input.data);
88
88
  flush();
89
89
  }
90
- const { data } = hasInputData
90
+ const { data } = isSingleTask
91
91
  ? _input
92
92
  : [...tasksRef.current.values()].find(({ status }) => status === 'QUEUED') ?? {};
93
93
  if (!data)
@@ -132,10 +132,10 @@ function useProcessTasks(handler, options) {
132
132
  const task = getTask();
133
133
  if (task && isFunction(onTaskComplete))
134
134
  onTaskComplete(task);
135
- // ignore process next task for single operation inputs
136
- if (hasInputData)
135
+ // ignore process next task for single task
136
+ if (isSingleTask)
137
137
  return;
138
- processNextTask(_input);
138
+ processTask(_input);
139
139
  });
140
140
  updateTask(data.id, { cancel, status: 'PENDING' });
141
141
  };
@@ -147,13 +147,22 @@ function useProcessTasks(handler, options) {
147
147
  if (isProcessing) {
148
148
  return;
149
149
  }
150
+ // if single task, run `processTask` once
151
+ if (isSingleTaskInput(input)) {
152
+ processTask(input);
153
+ return;
154
+ }
155
+ const { concurrency, ...options } = input.options ?? {};
156
+ // reconstruct `input` without `concurrency`
157
+ const _input = { ...input, options };
158
+ // for batch tasks, if no `concurrency` process tasks individually
150
159
  if (!concurrency) {
151
- processNextTask(input);
160
+ processTask(_input);
152
161
  return;
153
162
  }
154
163
  let count = 0;
155
164
  while (count < concurrency) {
156
- processNextTask(input);
165
+ processTask(_input);
157
166
  count++;
158
167
  }
159
168
  };
@@ -1,78 +1,8 @@
1
+ import { searchItems } from './searchItems.mjs';
2
+
1
3
  const SEARCH_LIMIT = 10000;
2
4
  const SEARCH_PAGE_SIZE = 1000;
3
- /**
4
- * Normalizes and converts a string to lower case,
5
- * handling Unicode characters and locale-specific case mappings.
6
- * Uses NFKD to fully decompose unicode: https://unicode.org/reports/tr15/#Normalization_Forms_Table
7
- */
8
- function normalize(input) {
9
- return input
10
- .normalize('NFKD')
11
- .replace(/[\u0300-\u036f]/g, '') // remove diacritic modifiers
12
- .toLocaleLowerCase();
13
- }
14
- /**
15
- * Performs a case-insensitive check to determine if a string includes another string,
16
- * handling Unicode characters and locale-specific case mappings.
17
- *
18
- * @param {string} input - The string to search within.
19
- * @param {string} query - The substring to search for.
20
- * @returns {boolean} - Returns `true` if `query` is found in `input` (case-insensitively), otherwise `false`.
21
- *
22
- * @example
23
- * caseInsensitiveIncludes("Photos", "photo"); // true
24
- * caseInsensitiveIncludes("Hello", "HELLO"); // true
25
- * caseInsensitiveIncludes("\uFB00", "\u0046\u0046"); // ff = FF true
26
- * caseInsensitiveIncludes("Cafè", "cafe"); // true
27
- */
28
- function caseInsensitiveIncludes(input, query) {
29
- return normalize(input).includes(normalize(query));
30
- }
31
- function searchItems({ prefix = '', list, options }) {
32
- const { query, filterBy, groupBy } = options;
33
- // filter keys that match `filterBy` search option
34
- const filteredItems = list.filter((item) => {
35
- const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
36
- const path = item[key];
37
- const suffix = path.slice(prefix.length);
38
- return caseInsensitiveIncludes(suffix, query);
39
- });
40
- if (!groupBy) {
41
- return filteredItems;
42
- }
43
- // group items using the provided grouping delimiter
44
- const uniquePaths = new Map();
45
- for (const item of filteredItems) {
46
- const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
47
- const path = item[key];
48
- const components = path.split(groupBy);
49
- for (const [i, component] of components.entries()) {
50
- if (!caseInsensitiveIncludes(component, query)) {
51
- continue;
52
- }
53
- // list of components ending with match
54
- const matchedPathSegments = components.slice(0, i + 1);
55
- // create new path
56
- let matchedPath = matchedPathSegments.join(groupBy);
57
- const isFolder = matchedPath !== path;
58
- if (isFolder) {
59
- matchedPath += groupBy;
60
- }
61
- // ignore anything below the prefix for matching
62
- if (matchedPath.length > prefix.length && !uniquePaths.has(matchedPath)) {
63
- // add a new item
64
- uniquePaths.set(matchedPath, {
65
- ...item,
66
- id: crypto.randomUUID(),
67
- [key]: matchedPath,
68
- type: isFolder ? 'FOLDER' : 'FILE',
69
- });
70
- }
71
- }
72
- }
73
- return Array.from(uniquePaths.values());
74
- }
75
- const createEnhancedListHandler = (action) => {
5
+ const createEnhancedListHandler = (handler) => {
76
6
  return async function listActionHandler(prevState, { options, ...input }) {
77
7
  const { nextToken: _nextToken, refresh, reset, search, ...rest } = options ?? {};
78
8
  if (reset) {
@@ -80,44 +10,33 @@ const createEnhancedListHandler = (action) => {
80
10
  }
81
11
  // collect and filter results on `search`
82
12
  if (search) {
83
- const result = [];
84
- let nextNextToken = undefined;
13
+ const items = [];
14
+ let nextToken = undefined;
85
15
  do {
86
- const output = (await action({
16
+ const output = await handler({
87
17
  ...input,
88
- options: {
89
- ...rest,
90
- pageSize: SEARCH_PAGE_SIZE,
91
- nextToken: nextNextToken,
92
- },
93
- }));
94
- result.push(...output.items);
95
- nextNextToken = output.nextToken;
96
- } while (nextNextToken && result.length < SEARCH_LIMIT);
18
+ options: { ...rest, pageSize: SEARCH_PAGE_SIZE, nextToken },
19
+ });
20
+ items.push(...output.items);
21
+ // eslint-disable-next-line prefer-destructuring
22
+ nextToken = output.nextToken;
23
+ } while (nextToken && items.length < SEARCH_LIMIT);
97
24
  return {
98
- items: searchItems({
99
- list: result,
100
- prefix: input.prefix,
101
- options: search,
102
- }),
103
- search: {
104
- // search limit reached but we still have a next token
105
- hasExhaustedSearch: !!nextNextToken,
106
- },
25
+ items: searchItems({ items, prefix: input.prefix, options: search }),
26
+ // search limit reached but we still have a next token
27
+ hasExhaustedSearch: !!nextToken,
107
28
  nextToken: undefined,
108
29
  };
109
30
  }
110
31
  // ignore provided `nextToken` on `refresh`
111
32
  const nextToken = refresh ? undefined : _nextToken;
112
- const output = (await action({
33
+ const output = await handler({
113
34
  ...input,
114
35
  options: { ...rest, nextToken },
115
- }));
116
- return {
117
- items: [...(refresh ? [] : prevState.items), ...output.items],
118
- nextToken: output.nextToken,
119
- };
36
+ });
37
+ const items = [...(refresh ? [] : prevState.items), ...output.items];
38
+ return { ...output, items };
120
39
  };
121
40
  };
122
41
 
123
- export { SEARCH_LIMIT, SEARCH_PAGE_SIZE, createEnhancedListHandler, searchItems };
42
+ export { SEARCH_LIMIT, SEARCH_PAGE_SIZE, createEnhancedListHandler };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Normalizes and converts a string to lower case,
3
+ * handling Unicode characters and locale-specific case mappings.
4
+ * Uses NFKD to fully decompose unicode: https://unicode.org/reports/tr15/#Normalization_Forms_Table
5
+ */
6
+ function normalize(input) {
7
+ return input
8
+ .normalize('NFKD')
9
+ .replace(/[\u0300-\u036f]/g, '') // remove diacritic modifiers
10
+ .toLocaleLowerCase();
11
+ }
12
+ /**
13
+ * Performs a case-insensitive check to determine if a string includes another string,
14
+ * handling Unicode characters and locale-specific case mappings.
15
+ *
16
+ * @param {string} input - The string to search within.
17
+ * @param {string} query - The substring to search for.
18
+ * @returns {boolean} - Returns `true` if `query` is found in `input` (case-insensitively), otherwise `false`.
19
+ *
20
+ * @example
21
+ * caseInsensitiveIncludes("Photos", "photo"); // true
22
+ * caseInsensitiveIncludes("Hello", "HELLO"); // true
23
+ * caseInsensitiveIncludes("\uFB00", "\u0046\u0046"); // ff = FF true
24
+ * caseInsensitiveIncludes("Cafè", "cafe"); // true
25
+ */
26
+ function caseInsensitiveIncludes(input, query) {
27
+ return normalize(input).includes(normalize(query));
28
+ }
29
+ function searchItems({ prefix = '', items, options, }) {
30
+ const { query, filterBy, groupBy } = options;
31
+ // filter keys that match `filterBy` search option
32
+ const filteredItems = items.filter((item) => {
33
+ const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
34
+ const path = item[key];
35
+ const suffix = path.slice(prefix.length);
36
+ return caseInsensitiveIncludes(suffix, query);
37
+ });
38
+ if (!groupBy) {
39
+ return filteredItems;
40
+ }
41
+ // group items using the provided grouping delimiter
42
+ const uniquePaths = new Map();
43
+ for (const item of filteredItems) {
44
+ const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
45
+ const path = item[key];
46
+ const components = path.split(groupBy);
47
+ for (const [i, component] of components.entries()) {
48
+ if (!caseInsensitiveIncludes(component, query)) {
49
+ continue;
50
+ }
51
+ // list of components ending with match
52
+ const matchedPathSegments = components.slice(0, i + 1);
53
+ // create new path
54
+ let matchedPath = matchedPathSegments.join(groupBy);
55
+ const isFolder = matchedPath !== path;
56
+ if (isFolder) {
57
+ matchedPath += groupBy;
58
+ }
59
+ // ignore anything below the prefix for matching
60
+ if (matchedPath.length > prefix.length && !uniquePaths.has(matchedPath)) {
61
+ // add a new item
62
+ uniquePaths.set(matchedPath, {
63
+ ...item,
64
+ id: crypto.randomUUID(),
65
+ [key]: matchedPath,
66
+ type: isFolder ? 'FOLDER' : 'FILE',
67
+ });
68
+ }
69
+ }
70
+ }
71
+ return Array.from(uniquePaths.values());
72
+ }
73
+
74
+ export { searchItems };
@@ -9,10 +9,7 @@ import { useProcessTasks } from '../tasks/useProcessTasks.mjs';
9
9
  const isOptionsWithItems = (options) => !!options?.items;
10
10
  const isHandleTaskInput = (value) => !!value?.data;
11
11
  function useHandler(handler, options) {
12
- const [state, handleProcessing] = useProcessTasks(handler, {
13
- ...options,
14
- concurrency: DEFAULT_ACTION_CONCURRENCY,
15
- });
12
+ const [state, handleProcessing] = useProcessTasks(handler, options);
16
13
  const getConfig = useGetActionInput();
17
14
  const { reset, isProcessing, tasks, ...rest } = state;
18
15
  const handleDispatch = React__default.useCallback((input) => {
@@ -23,7 +20,10 @@ function useHandler(handler, options) {
23
20
  reset();
24
21
  handleProcessing({
25
22
  config,
26
- ...(hasData ? { data: input.data } : undefined),
23
+ ...(hasData
24
+ ? { data: input.data }
25
+ : // if no `data` provided, provide `concurrency` to `options`
26
+ { options: { concurrency: DEFAULT_ACTION_CONCURRENCY } }),
27
27
  });
28
28
  }, [getConfig, handleProcessing, reset]);
29
29
  if (isOptionsWithItems(options)) {
@@ -17,6 +17,7 @@ const useListLocationItems = () => {
17
17
  const enhancedHandler = React__default.useMemo(() => createEnhancedListHandler((input) => listLocationItems({ ...input, config: getConfig() })), [getConfig, listLocationItems]);
18
18
  return useAsyncReducer(enhancedHandler, {
19
19
  items: [],
20
+ hasExhaustedSearch: false,
20
21
  nextToken: undefined,
21
22
  });
22
23
  };
@@ -22,8 +22,7 @@ const DEFAULT_REFRESH_OPTIONS = { ...DEFAULT_LIST_OPTIONS, refresh: true };
22
22
  const useFolders = ({ destination, setDestination, }) => {
23
23
  const { current, key } = destination;
24
24
  const [{ value, hasError, isLoading, message }, handleList] = useList('folderItems');
25
- const { items, nextToken, search } = value;
26
- const { hasExhaustedSearch = false } = search ?? {};
25
+ const { items, nextToken, hasExhaustedSearch = false } = value;
27
26
  const onInitialize = React__default.useCallback(() => {
28
27
  handleList({
29
28
  prefix: key,
@@ -40,8 +40,7 @@ const useLocationDetailView = (options) => {
40
40
  const [{ task }, handleDownload] = useAction('download');
41
41
  const [{ value, isLoading, hasError, message }, handleList] = useList('locationItems');
42
42
  // set up pagination
43
- const { items, nextToken, search } = value;
44
- const { hasExhaustedSearch = false } = search ?? {};
43
+ const { items, nextToken, hasExhaustedSearch = false } = value;
45
44
  const onPaginate = () => {
46
45
  if (hasInvalidPrefix || !nextToken)
47
46
  return;
@@ -25,9 +25,8 @@ const useLocationsView = (options) => {
25
25
  const [state, handleList] = useList('locations');
26
26
  const dispatchStoreAction = useStore()[1];
27
27
  const { value, message, hasError, isLoading } = state;
28
- const { items, nextToken, search } = value;
28
+ const { items, nextToken, hasExhaustedSearch = false } = value;
29
29
  const hasNextToken = !!nextToken;
30
- const { hasExhaustedSearch = false } = search ?? {};
31
30
  const onNavigate = options?.onNavigate;
32
31
  const initialValues = options?.initialValues ?? {};
33
32
  const listOptionsRef = React__default.useRef({
@@ -1,3 +1,3 @@
1
- const VERSION = '3.10.1';
1
+ const VERSION = '3.10.3';
2
2
 
3
3
  export { VERSION };
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var uiReactCore = require('@aws-amplify/ui-react-core');
9
9
  var auth = require('aws-amplify/auth');
10
10
  var storage = require('aws-amplify/storage');
11
11
  var internal = require('@aws-amplify/ui-react/internal');
12
- var createStorageBrowser = require('./createStorageBrowser-BfRLqdUj.js');
12
+ var createStorageBrowser = require('./createStorageBrowser-B75dAYRb.js');
13
13
  require('@aws-amplify/storage/internals');
14
14
  require('aws-amplify');
15
15
  require('aws-amplify/utils');