@aws-amplify/ui-react-storage 3.15.0 → 3.17.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 (101) hide show
  1. package/dist/browser.js +1 -1
  2. package/dist/{createStorageBrowser-CG-6mXiT.js → createStorageBrowser-De4hcP-u.js} +710 -158
  3. package/dist/esm/browser.mjs +1 -0
  4. package/dist/esm/components/StorageBrowser/ErrorBoundary/ErrorBoundary.mjs +1 -4
  5. package/dist/esm/components/StorageBrowser/actions/configs/defaults.mjs +13 -3
  6. package/dist/esm/components/StorageBrowser/actions/handlers/delete.mjs +39 -8
  7. package/dist/esm/components/StorageBrowser/components/ComponentsProvider.mjs +1 -4
  8. package/dist/esm/components/StorageBrowser/components/base/preview/DownloadButton.mjs +1 -4
  9. package/dist/esm/components/StorageBrowser/components/composables/ActionConfirmationModal.mjs +34 -0
  10. package/dist/esm/components/StorageBrowser/components/composables/defaults.mjs +2 -0
  11. package/dist/esm/components/StorageBrowser/components/elements/definitions.mjs +2 -2
  12. package/dist/esm/components/StorageBrowser/configuration/paginationContext.mjs +15 -0
  13. package/dist/esm/components/StorageBrowser/controls/ActionConfirmationModalControl.mjs +12 -0
  14. package/dist/esm/components/StorageBrowser/controls/DataTableControl.mjs +1 -4
  15. package/dist/esm/components/StorageBrowser/controls/hooks/useActionConfirmationModal.mjs +17 -0
  16. package/dist/esm/components/StorageBrowser/createStorageBrowser/StorageBrowserDefault.mjs +9 -4
  17. package/dist/esm/components/StorageBrowser/createStorageBrowser/createProvider.mjs +11 -9
  18. package/dist/esm/components/StorageBrowser/createStorageBrowser/createStorageBrowser.mjs +10 -5
  19. package/dist/esm/components/StorageBrowser/displayText/libraries/en/deleteView.mjs +117 -5
  20. package/dist/esm/components/StorageBrowser/displayText/libraries/en/locationDetailView.mjs +1 -0
  21. package/dist/esm/components/StorageBrowser/displayText/libraries/en/shared.mjs +1 -0
  22. package/dist/esm/components/StorageBrowser/locationItems/context.mjs +17 -14
  23. package/dist/esm/components/StorageBrowser/locationItems/utils.mjs +38 -0
  24. package/dist/esm/components/StorageBrowser/store/validateStoreProps.mjs +1 -1
  25. package/dist/esm/components/StorageBrowser/tasks/useProcessTasks.mjs +7 -4
  26. package/dist/esm/components/StorageBrowser/useAction/useHandler.mjs +1 -0
  27. package/dist/esm/components/StorageBrowser/useAction/useListFolderItems.mjs +1 -0
  28. package/dist/esm/components/StorageBrowser/useAction/useListLocationItems.mjs +1 -0
  29. package/dist/esm/components/StorageBrowser/useAction/utils.mjs +0 -5
  30. package/dist/esm/components/StorageBrowser/utils/validatePageSize.mjs +12 -0
  31. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyView.mjs +1 -4
  32. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.mjs +5 -4
  33. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/FoldersMessageControl.mjs +1 -4
  34. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/useCopyView.mjs +1 -4
  35. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.mjs +1 -4
  36. package/dist/esm/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderView.mjs +1 -4
  37. package/dist/esm/components/StorageBrowser/views/LocationActionView/CreateFolderView/useCreateFolderView.mjs +1 -4
  38. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteView.mjs +6 -6
  39. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.mjs +7 -6
  40. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/useDeleteView.mjs +70 -7
  41. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/utils.mjs +87 -0
  42. package/dist/esm/components/StorageBrowser/views/LocationActionView/DownloadView/DownloadView.mjs +1 -4
  43. package/dist/esm/components/StorageBrowser/views/LocationActionView/DownloadView/DownloadViewProvider.mjs +9 -0
  44. package/dist/esm/components/StorageBrowser/views/LocationActionView/DownloadView/useDownloadView.mjs +1 -4
  45. package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/UploadView.mjs +3 -6
  46. package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/UploadViewProvider.mjs +3 -0
  47. package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.mjs +11 -12
  48. package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailView.mjs +1 -4
  49. package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.mjs +2 -1
  50. package/dist/esm/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFolderRowContent.mjs +38 -27
  51. package/dist/esm/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getLocationDetailViewTableData.mjs +8 -1
  52. package/dist/esm/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.mjs +24 -20
  53. package/dist/esm/components/StorageBrowser/views/LocationsView/LocationsView.mjs +1 -4
  54. package/dist/esm/components/StorageBrowser/views/LocationsView/LocationsViewProvider.mjs +1 -4
  55. package/dist/esm/components/StorageBrowser/views/LocationsView/useLocationsView.mjs +13 -10
  56. package/dist/esm/components/StorageBrowser/views/context/actionViews.mjs +12 -8
  57. package/dist/esm/components/StorageBrowser/views/context/primaryViews.mjs +9 -4
  58. package/dist/esm/components/StorageBrowser/views/hooks/usePaginate.mjs +18 -7
  59. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/constants.mjs +10 -1
  60. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.mjs +123 -13
  61. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/utils.mjs +3 -3
  62. package/dist/esm/version.mjs +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/styles.css +83 -1
  65. package/dist/types/components/StorageBrowser/StorageBrowserAmplify.d.ts +3 -1
  66. package/dist/types/components/StorageBrowser/actions/handlers/delete.d.ts +5 -3
  67. package/dist/types/components/StorageBrowser/actions/handlers/types.d.ts +15 -1
  68. package/dist/types/components/StorageBrowser/components/composables/ActionConfirmationModal.d.ts +12 -0
  69. package/dist/types/components/StorageBrowser/components/composables/types.d.ts +2 -0
  70. package/dist/types/components/StorageBrowser/configuration/index.d.ts +2 -0
  71. package/dist/types/components/StorageBrowser/configuration/paginationContext.d.ts +12 -0
  72. package/dist/types/components/StorageBrowser/controls/ActionConfirmationModalControl.d.ts +2 -0
  73. package/dist/types/components/StorageBrowser/controls/hooks/useActionConfirmationModal.d.ts +2 -0
  74. package/dist/types/components/StorageBrowser/controls/index.d.ts +1 -0
  75. package/dist/types/components/StorageBrowser/controls/types.d.ts +4 -0
  76. package/dist/types/components/StorageBrowser/createStorageBrowser/types.d.ts +7 -1
  77. package/dist/types/components/StorageBrowser/displayText/types.d.ts +7 -0
  78. package/dist/types/components/StorageBrowser/locationItems/context.d.ts +12 -3
  79. package/dist/types/components/StorageBrowser/locationItems/index.d.ts +1 -0
  80. package/dist/types/components/StorageBrowser/locationItems/utils.d.ts +27 -0
  81. package/dist/types/components/StorageBrowser/store/types.d.ts +7 -0
  82. package/dist/types/components/StorageBrowser/tasks/types.d.ts +7 -2
  83. package/dist/types/components/StorageBrowser/utils/index.d.ts +1 -0
  84. package/dist/types/components/StorageBrowser/utils/validatePageSize.d.ts +1 -0
  85. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/types.d.ts +5 -0
  86. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/utils.d.ts +26 -0
  87. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/types.d.ts +7 -0
  88. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFolderRowContent.d.ts +4 -1
  89. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getLocationDetailViewTableData.d.ts +3 -2
  90. package/dist/types/components/StorageBrowser/views/LocationDetailView/types.d.ts +10 -3
  91. package/dist/types/components/StorageBrowser/views/LocationsView/types.d.ts +2 -2
  92. package/dist/types/components/StorageBrowser/views/hooks/usePaginate.d.ts +1 -1
  93. package/dist/types/components/StorageBrowser/views/types.d.ts +6 -0
  94. package/dist/types/components/StorageBrowser/views/utils/index.d.ts +1 -1
  95. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/constants.d.ts +1 -0
  96. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.d.ts +5 -2
  97. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/index.d.ts +1 -1
  98. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/types.d.ts +4 -0
  99. package/dist/types/index.d.ts +1 -1
  100. package/dist/types/version.d.ts +1 -1
  101. package/package.json +7 -7
package/dist/styles.css CHANGED
@@ -4816,6 +4816,88 @@ html[dir=rtl] .amplify-field-group__inner-start {
4816
4816
  gap: var(--amplify-components-message-dismiss-gap);
4817
4817
  }
4818
4818
 
4819
+ /* Modal component with highest specificity to override global resets */
4820
+ .amplify-modal__overlay.amplify-modal__overlay {
4821
+ position: fixed;
4822
+ top: 0;
4823
+ left: 0;
4824
+ right: 0;
4825
+ bottom: 0;
4826
+ background-color: rgba(0, 0, 0, 0.5);
4827
+ z-index: 1000;
4828
+ display: flex;
4829
+ align-items: center;
4830
+ justify-content: center;
4831
+ box-sizing: border-box;
4832
+ }
4833
+
4834
+ .amplify-modal__content.amplify-modal__content {
4835
+ background-color: var(--amplify-colors-background-primary);
4836
+ padding: var(--amplify-space-large);
4837
+ border-radius: var(--amplify-radii-medium);
4838
+ box-shadow: var(--amplify-shadows-large);
4839
+ max-width: 500px;
4840
+ width: 90%;
4841
+ box-sizing: border-box;
4842
+ }
4843
+
4844
+ .amplify-modal__header.amplify-modal__header {
4845
+ margin-bottom: var(--amplify-space-medium);
4846
+ display: flex;
4847
+ justify-content: space-between;
4848
+ align-items: center;
4849
+ }
4850
+
4851
+ .amplify-modal__title.amplify-modal__title {
4852
+ font-weight: var(--amplify-font-weights-bold);
4853
+ font-size: var(--amplify-font-sizes-large);
4854
+ margin: 0;
4855
+ }
4856
+
4857
+ .amplify-modal__close-button.amplify-modal__close-button {
4858
+ background: none;
4859
+ border: none;
4860
+ font-size: var(--amplify-font-sizes-large);
4861
+ cursor: pointer;
4862
+ padding: var(--amplify-space-xs);
4863
+ color: var(--amplify-colors-font-secondary);
4864
+ }
4865
+
4866
+ .amplify-modal__close-button.amplify-modal__close-button:hover {
4867
+ color: var(--amplify-colors-font-primary);
4868
+ }
4869
+
4870
+ .amplify-modal__body.amplify-modal__body {
4871
+ margin-bottom: var(--amplify-space-medium);
4872
+ color: var(--amplify-colors-font-primary);
4873
+ }
4874
+
4875
+ .amplify-modal__footer.amplify-modal__footer {
4876
+ display: flex;
4877
+ gap: var(--amplify-space-xs);
4878
+ justify-content: flex-end;
4879
+ }
4880
+
4881
+ .amplify-modal__list-title.amplify-modal__list-title {
4882
+ margin-bottom: var(--amplify-space-xs);
4883
+ font-weight: var(--amplify-font-weights-bold);
4884
+ box-sizing: border-box;
4885
+ }
4886
+
4887
+ .amplify-modal__list.amplify-modal__list {
4888
+ margin: var(--amplify-space-xs) 0;
4889
+ padding-left: var(--amplify-space-medium);
4890
+ max-height: 250px;
4891
+ overflow-y: auto;
4892
+ box-sizing: border-box;
4893
+ list-style: disc;
4894
+ }
4895
+
4896
+ .amplify-modal__list-item.amplify-modal__list-item {
4897
+ margin-bottom: var(--amplify-space-xxs);
4898
+ box-sizing: border-box;
4899
+ }
4900
+
4819
4901
  .amplify-pagination {
4820
4902
  list-style-type: none;
4821
4903
  }
@@ -7024,7 +7106,6 @@ html[dir=rtl] .amplify-field-group__inner-start {
7024
7106
  animation-timing-function: linear;
7025
7107
  animation-name: spin;
7026
7108
  }
7027
-
7028
7109
  @keyframes spin {
7029
7110
  0% {
7030
7111
  transform: rotate(0deg);
@@ -7036,6 +7117,7 @@ html[dir=rtl] .amplify-field-group__inner-start {
7036
7117
  transform: rotate(360deg);
7037
7118
  }
7038
7119
  }
7120
+
7039
7121
  .amplify-ai-conversation {
7040
7122
  display: flex;
7041
7123
  flex-direction: column;
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
- import type { StorageBrowserProps as StorageBrowserPropsBase } from './createStorageBrowser';
2
+ import type { StorageBrowserProps as StorageBrowserPropsBase, StorageBrowserProviderProps as StorageBrowserProviderPropsBase } from './createStorageBrowser';
3
3
  export interface StorageBrowserProps extends StorageBrowserPropsBase {
4
4
  }
5
+ export interface StorageBrowserProviderProps extends StorageBrowserProviderPropsBase {
6
+ }
5
7
  export declare function StorageBrowser(props: StorageBrowserProps): React.JSX.Element;
@@ -1,8 +1,10 @@
1
- import type { OptionalFileData, TaskHandler, TaskHandlerOptions, TaskHandlerInput, TaskHandlerOutput, TaskData } from './types';
1
+ import type { TaskHandler, TaskHandlerOptions, TaskHandlerInput, TaskHandlerOutput, TaskData, OptionalFileData } from './types';
2
2
  export interface DeleteHandlerOptions extends TaskHandlerOptions {
3
3
  }
4
- export interface DeleteHandlerData extends OptionalFileData, TaskData {
5
- fileKey: string;
4
+ export interface DeleteHandlerData extends Omit<OptionalFileData, 'type'>, TaskData {
5
+ fileKey?: string;
6
+ type?: 'FILE' | 'FOLDER';
7
+ totalCount?: number | null;
6
8
  }
7
9
  export interface DeleteHandlerInput extends TaskHandlerInput<DeleteHandlerData, DeleteHandlerOptions> {
8
10
  }
@@ -79,7 +79,11 @@ export interface TaskHandlerOptions {
79
79
  onProgress?: (data: {
80
80
  key: string;
81
81
  id: string;
82
- }, progress: number | undefined, state?: TaskStatus) => void;
82
+ }, progressDetails: number | undefined | {
83
+ progress?: number;
84
+ successCount?: number;
85
+ failureCount?: number;
86
+ }, state?: TaskStatus) => void;
83
87
  }
84
88
  export interface TaskHandlerInput<TData extends TaskData = TaskData, TOptions extends TaskHandlerOptions = TaskHandlerOptions> {
85
89
  config: ActionInputConfig;
@@ -105,6 +109,16 @@ export interface TaskResult<TStatus, TValue> {
105
109
  * task result value (if any)
106
110
  */
107
111
  value?: TValue;
112
+ /**
113
+ * Number of items successfully processed during the operation
114
+ * @example 150 // out of 200 total items
115
+ */
116
+ successCount?: number;
117
+ /**
118
+ * Number of items that failed during the operation
119
+ * @example 5 // out of 200 total items
120
+ */
121
+ failureCount?: number;
108
122
  }
109
123
  export interface TaskHandlerOutput<K = any> {
110
124
  cancel?: () => void;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export interface ActionConfirmationModalProps {
3
+ isOpen: boolean;
4
+ title: string;
5
+ message: string;
6
+ content?: React.ReactNode;
7
+ onConfirm: () => void;
8
+ onCancel: () => void;
9
+ confirmLabel: string;
10
+ cancelLabel: string;
11
+ }
12
+ export declare const ActionConfirmationModal: ({ isOpen, title, message, content, onConfirm, onCancel, confirmLabel, cancelLabel, }: ActionConfirmationModalProps) => React.JSX.Element | null;
@@ -1,4 +1,5 @@
1
1
  import type { ActionCancelProps } from './ActionCancel';
2
+ import type { ActionConfirmationModalProps } from './ActionConfirmationModal';
2
3
  import type { ActionDestinationProps } from './ActionDestination';
3
4
  import type { ActionExitProps } from './ActionExit';
4
5
  import type { ActionStartProps } from './ActionStart';
@@ -21,6 +22,7 @@ import type { TitleProps } from './Title';
21
22
  import type { FilePreviewProps } from './FilePreview';
22
23
  export interface Composables {
23
24
  ActionCancel: React.ComponentType<ActionCancelProps>;
25
+ ActionConfirmationModal: React.ComponentType<ActionConfirmationModalProps>;
24
26
  ActionDestination: React.ComponentType<ActionDestinationProps>;
25
27
  ActionExit: React.ComponentType<ActionExitProps>;
26
28
  ActionStart: React.ComponentType<ActionStartProps>;
@@ -1,3 +1,5 @@
1
1
  export { createConfigurationProvider } from './createConfigurationProvider';
2
2
  export { useGetActionInput } from './context';
3
3
  export type { GetActionInput } from './types';
4
+ export { usePaginationConfig, PaginationConfigProvider, } from './paginationContext';
5
+ export type { PaginationConfig } from './paginationContext';
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export interface PaginationConfig {
3
+ pageSize: number;
4
+ }
5
+ export declare const usePaginationConfig: (params?: {
6
+ errorMessage?: string | undefined;
7
+ } | undefined) => PaginationConfig, PaginationConfigContext: React.Context<PaginationConfig>;
8
+ export interface PaginationConfigProviderProps {
9
+ children?: React.ReactNode;
10
+ pageSize?: number;
11
+ }
12
+ export declare function PaginationConfigProvider({ children, pageSize, }: PaginationConfigProviderProps): React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ActionConfirmationModalControl: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { ActionConfirmationModalProps } from '../../components/composables/ActionConfirmationModal';
2
+ export declare const useActionConfirmationModal: () => ActionConfirmationModalProps;
@@ -1,4 +1,5 @@
1
1
  export { ActionCancelControl } from './ActionCancelControl';
2
+ export { ActionConfirmationModalControl } from './ActionConfirmationModalControl';
2
3
  export { ActionDestinationControl } from './ActionDestinationControl';
3
4
  export { ActionExitControl } from './ActionExitControl';
4
5
  export { ActionsListControl } from './ActionsListControl';
@@ -1,5 +1,6 @@
1
1
  import type { FileData, LocationData } from '../actions';
2
2
  import type { ActionListItem, Composables, DataTableProps, DataTableSortHeader, MessageProps } from '../components';
3
+ import type { ActionConfirmationModalProps } from '../components/composables/ActionConfirmationModal';
3
4
  import type { LocationState } from '../store';
4
5
  import type { StatusCounts } from '../tasks';
5
6
  import type { FilePreviewState } from '../views/hooks/useFilePreview';
@@ -53,6 +54,7 @@ export interface ControlsContext {
53
54
  location?: LocationState;
54
55
  overwriteToggleLabel?: string;
55
56
  message?: MessageProps;
57
+ confirmationModal?: Omit<ActionConfirmationModalProps, 'onConfirm' | 'onCancel'>;
56
58
  paginationData?: PaginationData;
57
59
  searchPlaceholder?: string;
58
60
  searchQuery?: string;
@@ -91,5 +93,7 @@ export interface ControlsContext {
91
93
  onToggleOverwrite?: () => void;
92
94
  onToggleSearchSubfolders?: () => void;
93
95
  onValidateFolderName?: (value: string) => void;
96
+ onConfirmationModalConfirm?: () => void;
97
+ onConfirmationModalCancel?: () => void;
94
98
  }
95
99
  export {};
@@ -245,12 +245,18 @@ export interface StorageBrowserProps<TActionType = string, TViews = {}> {
245
245
  * @description accepts default top level `views` overrides and custom `views` defined by the `actions` parameter of `createStorageBrowser`
246
246
  */
247
247
  views?: StorageBrowserViews<TActionType, TViews>;
248
+ /**
249
+ * @description Number of items to display per page in listings
250
+ * @default 100
251
+ * @minimum 1
252
+ */
253
+ pageSize?: number;
248
254
  }
249
255
  /**
250
256
  * @description `StorageBrowser.Provider` component properties
251
257
  * @template TViews Optional type of custom action view components.
252
258
  */
253
- export interface StorageBrowserProviderProps<TViews = {}> extends StoreProviderProps, Pick<StorageBrowserProps, 'defaultValue' | 'displayText' | 'onValueChange' | 'value'> {
259
+ export interface StorageBrowserProviderProps<TViews = {}> extends StoreProviderProps, Pick<StorageBrowserProps, 'defaultValue' | 'displayText' | 'onValueChange' | 'value' | 'pageSize'> {
254
260
  /**
255
261
  * @description accepts custom action views rendered by `LocationActionView`
256
262
  */
@@ -73,6 +73,7 @@ export interface DefaultLocationDetailViewDisplayText extends DefaultListViewDis
73
73
  } | undefined;
74
74
  searchSubfoldersToggleLabel: string;
75
75
  selectFileLabel: string;
76
+ selectFolderLabel: string;
76
77
  selectAllFilesLabel: string;
77
78
  tableColumnLastModifiedHeader: string;
78
79
  tableColumnNameHeader: string;
@@ -115,6 +116,7 @@ export interface DefaultActionViewDisplayText<T extends TaskData = TaskData> {
115
116
  tableColumnNameHeader: string;
116
117
  tableColumnTypeHeader: string;
117
118
  tableColumnSizeHeader: string;
119
+ tableColumnProgressHeader?: string;
118
120
  }
119
121
  export interface DefaultCreateFolderViewDisplayText extends Omit<DefaultActionViewDisplayText<CreateFolderHandlerData>, `${'tableColumn' | 'statusDisplay'}${string}`> {
120
122
  folderNameLabel: string;
@@ -144,6 +146,11 @@ export interface DefaultDeleteViewDisplayText extends DefaultActionViewDisplayTe
144
146
  * @deprecated `DeleteView` does not render a "progress" header
145
147
  */
146
148
  tableColumnProgressHeader?: string;
149
+ confirmationModalTitle: string;
150
+ confirmationModalConfirmLabel: string;
151
+ confirmationModalCancelLabel: string;
152
+ confirmationModalMessage: string;
153
+ confirmationModalFolderListTitle: string;
147
154
  }
148
155
  export interface DefaultDownloadViewDisplayText extends DefaultActionViewDisplayText<DownloadHandlerData> {
149
156
  tableColumnProgressHeader: string;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import type { FileData, FileDataItem } from '../actions';
2
+ import type { FileDataItem, LocationItemData } from '../actions';
3
3
  export declare const DEFAULT_STATE: LocationItemsState;
4
4
  export type LocationItemsAction = {
5
5
  type: 'SET_LOCATION_ITEMS';
6
- items?: FileData[];
6
+ items?: LocationItemData[];
7
7
  } | {
8
8
  type: 'REMOVE_LOCATION_ITEM';
9
9
  id: string;
@@ -11,7 +11,16 @@ export type LocationItemsAction = {
11
11
  type: 'RESET_LOCATION_ITEMS';
12
12
  };
13
13
  export interface LocationItemsState {
14
- fileDataItems: FileDataItem[] | undefined;
14
+ /**
15
+ * Selected items (files and folders)
16
+ * Replaces fileDataItems to support mixed selections
17
+ */
18
+ dataItems?: LocationItemData[];
19
+ /**
20
+ * @deprecated Use dataItems instead
21
+ * Will be removed in v4.0.0
22
+ */
23
+ fileDataItems?: FileDataItem[];
15
24
  }
16
25
  export type HandleLocationItemsAction = (event: LocationItemsAction) => void;
17
26
  export type LocationItemStateContext = [
@@ -1,2 +1,3 @@
1
1
  export type { LocationItemsAction, LocationItemsProviderProps, LocationItemsState, } from './context';
2
2
  export { LocationItemsProvider, useLocationItems } from './context';
3
+ export { getSelectedFiles, getSelectedFolders, hasSelectedFolders, getSelectionSummary, } from './utils';
@@ -0,0 +1,27 @@
1
+ import type { LocationItemData } from '../actions';
2
+ /**
3
+ * Selection utility functions for LocationItems
4
+ */
5
+ /**
6
+ * Get selected files from dataItems
7
+ */
8
+ export declare const getSelectedFiles: (dataItems?: LocationItemData[]) => LocationItemData[];
9
+ /**
10
+ * Get selected folders from dataItems
11
+ */
12
+ export declare const getSelectedFolders: (dataItems?: LocationItemData[]) => LocationItemData[];
13
+ /**
14
+ * Check if selection contains folders
15
+ */
16
+ export declare const hasSelectedFolders: (dataItems?: LocationItemData[]) => boolean;
17
+ /**
18
+ * Get selection summary
19
+ */
20
+ export declare const getSelectionSummary: (dataItems?: LocationItemData[]) => {
21
+ total: number;
22
+ files: number;
23
+ folders: number;
24
+ hasFiles: boolean;
25
+ hasFolders: boolean;
26
+ isMixed: boolean;
27
+ };
@@ -54,6 +54,13 @@ export interface StoreProviderProps {
54
54
  * @deprecated
55
55
  */
56
56
  path?: string;
57
+ /**
58
+ * @description Number of items to display per page in listings
59
+ * @default 100
60
+ * @minimum 1
61
+ * @maximum 1000
62
+ */
63
+ pageSize?: number;
57
64
  }
58
65
  export type StoreActionType = {
59
66
  type: 'CHANGE_ACTION_TYPE';
@@ -13,7 +13,11 @@ export interface ProcessTasksOptions<TTask extends Task, TItems = []> {
13
13
  onTaskCancel?: (task: TTask) => void;
14
14
  onTaskComplete?: (task: TTask) => void;
15
15
  onTaskError?: (task: TTask, error: unknown) => void;
16
- onTaskProgress?: (task: TTask, progress: number | undefined) => void;
16
+ onTaskProgress?: (task: TTask, progressDetails: number | {
17
+ progress?: number;
18
+ successCount?: number;
19
+ failureCount?: number;
20
+ }) => void;
17
21
  onTaskSuccess?: (task: TTask, value: TTask['value'] | undefined) => void;
18
22
  onTaskRemove?: (task: TTask) => void;
19
23
  }
@@ -27,7 +31,8 @@ export interface Task<TData = unknown, TValue = any> extends TaskResult<TaskStat
27
31
  */
28
32
  data: TData & TaskData;
29
33
  /**
30
- * task progress
34
+ * task progress (0-1 representing completion percentage)
35
+ * @example 0.75 // 75% complete
31
36
  */
32
37
  progress?: number;
33
38
  /**
@@ -0,0 +1 @@
1
+ export { validatePageSize } from './validatePageSize';
@@ -0,0 +1 @@
1
+ export declare const validatePageSize: (pageSize: number | undefined) => number;
@@ -1,6 +1,10 @@
1
1
  import type { DeleteHandlerData, LocationData } from '../../../actions';
2
+ import type { ActionConfirmationModalProps } from '../../../components/composables/ActionConfirmationModal';
2
3
  import type { ActionViewType, ActionViewProps, ActionViewState } from '../types';
3
4
  export interface DeleteViewState extends ActionViewState<DeleteHandlerData> {
5
+ onConfirmDelete: () => void;
6
+ onCancelConfirmation: () => void;
7
+ confirmationModal: Omit<ActionConfirmationModalProps, 'onConfirm' | 'onCancel'>;
4
8
  }
5
9
  export interface DeleteViewProps extends ActionViewProps {
6
10
  }
@@ -10,6 +14,7 @@ export interface DeleteViewProviderProps extends DeleteViewState {
10
14
  export interface DeleteViewType extends ActionViewType<DeleteHandlerData, DeleteViewProps> {
11
15
  Provider: (props: DeleteViewProviderProps) => React.JSX.Element;
12
16
  Cancel: () => React.JSX.Element | null;
17
+ ConfirmationModal: (props: ActionConfirmationModalProps) => React.JSX.Element;
13
18
  Exit: () => React.JSX.Element | null;
14
19
  Message: () => React.JSX.Element | null;
15
20
  Start: () => React.JSX.Element | null;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import type { ActionInputConfig, LocationItemData } from '../../../actions';
3
+ import type { ActionConfirmationModalProps } from '../../../components/composables/ActionConfirmationModal';
4
+ export declare const getFolderName: (folderKey: string) => string;
5
+ /**
6
+ * Creates JSX content showing a list of folders to be deleted
7
+ */
8
+ export declare const createFolderListContent: (folders: LocationItemData[], folderListTitle: string) => React.JSX.Element;
9
+ export declare const createDeleteConfirmationModalProps: ({ items, showConfirmation, displayText, }: {
10
+ items: LocationItemData[];
11
+ showConfirmation: boolean;
12
+ displayText: {
13
+ confirmationModalTitle: string;
14
+ confirmationModalConfirmLabel: string;
15
+ confirmationModalCancelLabel: string;
16
+ confirmationModalMessage: string;
17
+ confirmationModalFolderListTitle: string;
18
+ };
19
+ }) => Omit<ActionConfirmationModalProps, 'onConfirm' | 'onCancel'>;
20
+ /**
21
+ * Count the total number of files in a folder with pagination and limits
22
+ * @param folderKey - The folder path to count files in
23
+ * @param config - Storage configuration
24
+ * @returns Promise<number | string> - File count or "5000+" if exceeds limit
25
+ */
26
+ export declare const countFilesInFolder: (folderKey: string, config: ActionInputConfig) => Promise<number | string>;
@@ -13,6 +13,12 @@ export interface UploadViewState extends ActionViewState<UploadHandlerData> {
13
13
  invalidFiles: FileItems | undefined;
14
14
  }
15
15
  export interface UploadViewProps extends ActionViewProps, Partial<UploadViewState> {
16
+ /**
17
+ * @description Number of items to display per page in task listings
18
+ * @default 100
19
+ * @minimum 1
20
+ */
21
+ pageSize?: number;
16
22
  }
17
23
  export interface UploadViewProviderProps extends UploadViewState {
18
24
  children?: React.ReactNode;
@@ -37,4 +43,5 @@ export interface UploadViewType extends ActionViewType<UploadHandlerData, Upload
37
43
  }
38
44
  export interface UseUploadViewOptions {
39
45
  onExit?: (location?: LocationData) => void;
46
+ pageSize?: number;
40
47
  }
@@ -1,6 +1,9 @@
1
1
  import type { DataTableProps } from '../../../components';
2
- export declare const getFolderRowContent: ({ itemSubPath, rowId, onNavigate, }: {
2
+ export declare const getFolderRowContent: ({ itemSubPath, rowId, isSelected, selectFolderLabel, onNavigate, onSelect, }: {
3
3
  itemSubPath: string;
4
4
  rowId: string;
5
+ isSelected: boolean;
6
+ selectFolderLabel: string;
5
7
  onNavigate: () => void;
8
+ onSelect: () => void;
6
9
  }) => DataTableProps['rows'][number]['content'];
@@ -2,7 +2,7 @@ import type { FileData, FileDataItem, LocationData, LocationItemData } from '../
2
2
  import type { DataTableProps } from '../../../components';
3
3
  import type { DefaultLocationDetailViewDisplayText } from '../../../displayText/types';
4
4
  import type { LocationState } from '../../../store';
5
- export declare const getLocationDetailViewTableData: ({ filePreviewEnabled, activeFile, onSelectActiveFile, areAllFilesSelected, displayText, location, fileDataItems, hasFiles, pageItems, selectFileLabel, selectAllFilesLabel, getDateDisplayValue, onDownload, onNavigate, onSelect, onSelectAll, }: {
5
+ export declare const getLocationDetailViewTableData: ({ filePreviewEnabled, activeFile, onSelectActiveFile, areAllFilesSelected, displayText, location, fileDataItems, dataItems, hasFiles, pageItems, selectFileLabel, selectAllFilesLabel, getDateDisplayValue, onDownload, onNavigate, onSelect, onSelectAll, }: {
6
6
  filePreviewEnabled: boolean;
7
7
  activeFile: FileData | undefined;
8
8
  onSelectActiveFile: (arg: FileData) => void;
@@ -10,6 +10,7 @@ export declare const getLocationDetailViewTableData: ({ filePreviewEnabled, acti
10
10
  displayText: DefaultLocationDetailViewDisplayText;
11
11
  location: LocationState;
12
12
  fileDataItems?: FileData[] | undefined;
13
+ dataItems?: LocationItemData[] | undefined;
13
14
  hasFiles: boolean;
14
15
  pageItems: LocationItemData[];
15
16
  selectFileLabel: string;
@@ -17,6 +18,6 @@ export declare const getLocationDetailViewTableData: ({ filePreviewEnabled, acti
17
18
  getDateDisplayValue: (date: Date) => string;
18
19
  onDownload: (fileItem: FileDataItem) => void;
19
20
  onNavigate: (location: LocationData, path?: string) => void;
20
- onSelect: (isSelected: boolean, fileItem: FileData) => void;
21
+ onSelect: (isSelected: boolean, item: LocationItemData) => void;
21
22
  onSelectAll: () => void;
22
23
  }) => DataTableProps;
@@ -11,6 +11,13 @@ export interface LocationDetailViewState {
11
11
  activeFileHasPrev: boolean;
12
12
  actionType: string | undefined;
13
13
  downloadErrorMessage: string | undefined;
14
+ /**
15
+ * Selected items (files and folders)
16
+ */
17
+ dataItems: LocationItemData[] | undefined;
18
+ /**
19
+ * @deprecated Use dataItems instead. Will be removed in v4.0.0
20
+ */
14
21
  fileDataItems: FileDataItem[] | undefined;
15
22
  hasDownloadError: boolean;
16
23
  hasError: boolean;
@@ -33,7 +40,7 @@ export interface LocationDetailViewState {
33
40
  onSearchClear: () => void;
34
41
  onSearchQueryChange: (value: string) => void;
35
42
  onRetryFilePreview: () => void;
36
- onSelect: (isSelected: boolean, fileItem: FileData) => void;
43
+ onSelect: (isSelected: boolean, item: LocationItemData) => void;
37
44
  onSelectActiveFile: (file?: FileData | 'prev' | 'next') => void;
38
45
  onToggleSearchSubfolders: () => void;
39
46
  onToggleSelectAll: () => void;
@@ -72,7 +79,7 @@ export interface LocationDetailViewType {
72
79
  Title: () => React.JSX.Element | null;
73
80
  FilePreview: (props: FilePreviewProps) => React.JSX.Element | null;
74
81
  }
75
- interface InitialValues {
82
+ export interface InitialValues {
76
83
  pageSize?: number;
77
84
  delimiter?: string;
78
85
  }
@@ -81,5 +88,5 @@ export interface UseLocationDetailViewOptions {
81
88
  onActionSelect?: (actionType: string) => void;
82
89
  onExit?: () => void;
83
90
  onNavigate?: (location: LocationData, path?: string) => void;
91
+ pageSize?: number;
84
92
  }
85
- export {};
@@ -35,11 +35,11 @@ export interface LocationsViewType {
35
35
  Search: () => React.JSX.Element | null;
36
36
  Title: () => React.JSX.Element | null;
37
37
  }
38
- interface InitialValues {
38
+ export interface InitialValues {
39
39
  pageSize?: number;
40
40
  }
41
41
  export interface UseLocationsViewOptions {
42
42
  initialValues?: InitialValues;
43
43
  onNavigate?: (location: LocationData) => void;
44
+ pageSize?: number;
44
45
  }
45
- export {};
@@ -9,7 +9,7 @@ interface UsePaginateInput<T> {
9
9
  items?: T[];
10
10
  onPaginate?: (page?: number) => void;
11
11
  page?: number;
12
- pageSize?: number;
12
+ pageSize: number;
13
13
  }
14
14
  export declare const usePaginate: <T>({ items, onPaginate, page, pageSize, }: UsePaginateInput<T>) => UsePaginateState<T>;
15
15
  export {};
@@ -13,6 +13,12 @@ export interface ListViewState<T = any> {
13
13
  pageItems: T[];
14
14
  }
15
15
  export interface ListViewProps extends ActionViewProps, Partial<ListViewState> {
16
+ /**
17
+ * @description Number of items to display per page in listings
18
+ * @default 100
19
+ * @minimum 1
20
+ */
21
+ pageSize?: number;
16
22
  }
17
23
  export type StorageBrowserViews<T = string, K = {}> = Partial<PrimaryViews<T> & DefaultActionViews & K>;
18
24
  export interface PrimaryViews<T = string> {
@@ -1 +1 @@
1
- export { COPY_TABLE_RESOLVERS, FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_RESOLVERS, UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS, DOWNLOAD_TABLE_KEYS, DOWNLOAD_TABLE_RESOLVERS, } from './tableResolvers';
1
+ export { COPY_TABLE_RESOLVERS, FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_KEYS, DELETE_TABLE_RESOLVERS, UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS, DOWNLOAD_TABLE_KEYS, DOWNLOAD_TABLE_RESOLVERS, } from './tableResolvers';
@@ -19,3 +19,4 @@ export declare const STATUS_ICONS: {
19
19
  readonly QUEUED: "action-queued";
20
20
  };
21
21
  export declare const FILE_DATA_ITEM_TABLE_KEYS: readonly ["name", "folder", "type", "size", "status", "cancel"];
22
+ export declare const DELETE_TABLE_KEYS: readonly ["name", "folder", "type", "size", "status", "progress", "cancel"];
@@ -1,2 +1,5 @@
1
- import type { FileDataTaskTableResolvers } from './types';
2
- export declare const DELETE_TABLE_RESOLVERS: FileDataTaskTableResolvers;
1
+ import type { DeleteTableResolvers, DeleteTableKey, DeleteActionTask, DeleteTableResolverProps } from './types';
2
+ import type { CellData } from '../../hooks/useResolveTableData/types';
3
+ import type { DataTableButtonDataCell, WithKey } from '../../../components';
4
+ export declare const getCancelCellContent: (data: WithKey<CellData<DeleteTableResolverProps, DeleteActionTask>, DeleteTableKey>) => DataTableButtonDataCell['content'];
5
+ export declare const DELETE_TABLE_RESOLVERS: DeleteTableResolvers;
@@ -2,4 +2,4 @@ export { COPY_TABLE_RESOLVERS } from './copyResolvers';
2
2
  export { DELETE_TABLE_RESOLVERS } from './deleteResolvers';
3
3
  export { DOWNLOAD_TABLE_KEYS, DOWNLOAD_TABLE_RESOLVERS, } from './downloadResolvers';
4
4
  export { UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS } from './uploadResolvers';
5
- export { FILE_DATA_ITEM_TABLE_KEYS } from './constants';
5
+ export { FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_KEYS } from './constants';
@@ -30,15 +30,19 @@ export interface UploadTableResolverProps extends ActionTableResolverProps<Uploa
30
30
  }
31
31
  export type FileDataTaskTableResolverProps = CopyTableResolverProps | DeleteTableResolverProps;
32
32
  export type ActionTableKey = 'name' | 'folder' | 'type' | 'size' | 'status' | 'cancel';
33
+ export type DeleteTableKey = ActionTableKey | 'progress';
33
34
  export type UploadTableKey = ActionTableKey | 'progress';
34
35
  export type DownloadTableKey = ActionTableKey | 'progress';
35
36
  export interface FileDataTaskTableResolvers extends DataTableResolvers<ActionTableKey, FileDataTaskTableResolverProps, FileDataTask> {
36
37
  }
38
+ export interface DeleteTableResolvers extends DataTableResolvers<DeleteTableKey, DeleteTableResolverProps, DeleteActionTask> {
39
+ }
37
40
  export interface UploadTableResolvers extends DataTableResolvers<UploadTableKey, UploadTableResolverProps, UploadActionTask> {
38
41
  }
39
42
  export interface DownloadTableResolvers extends DataTableResolvers<DownloadTableKey, DownloadTableResolverProps, DownloadActionTask> {
40
43
  }
41
44
  export type GetFileDataCell = FileDataTaskTableResolvers['getCell'];
45
+ export type GetDeleteCell = DeleteTableResolvers['getCell'];
42
46
  export type GetDownloadCell = DownloadTableResolvers['getCell'];
43
47
  export type GetUploadCell = UploadTableResolvers['getCell'];
44
48
  export {};
@@ -1,4 +1,4 @@
1
1
  export type { FileUploaderHandle, FileUploaderProps, StorageImageProps, StorageManagerHandle, StorageManagerProps, DropZoneProps, ContainerProps, FileListProps, FilePickerProps, FileListHeaderProps, FileListFooterProps, } from './components';
2
2
  export { FileUploader, StorageImage, StorageManager } from './components';
3
- export type { StorageBrowserProps } from './components/StorageBrowser/StorageBrowserAmplify';
3
+ export type { StorageBrowserProps, StorageBrowserProviderProps, } from './components/StorageBrowser/StorageBrowserAmplify';
4
4
  export { StorageBrowser } from './components/StorageBrowser/StorageBrowserAmplify';