@ai-matrx/media 0.8.0 → 0.9.1

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 (185) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/files/engine/api/assets.d.ts +223 -0
  3. package/dist/files/engine/api/assets.js +124 -0
  4. package/dist/files/engine/api/assets.js.map +1 -0
  5. package/dist/files/engine/api/direct.d.ts +43 -0
  6. package/dist/files/engine/api/direct.js +73 -0
  7. package/dist/files/engine/api/direct.js.map +1 -0
  8. package/dist/files/engine/api/fileOrganization.d.ts +34 -0
  9. package/dist/files/engine/api/fileOrganization.js +38 -0
  10. package/dist/files/engine/api/fileOrganization.js.map +1 -0
  11. package/dist/files/engine/api/files.d.ts +249 -0
  12. package/dist/files/engine/api/files.js +231 -0
  13. package/dist/files/engine/api/files.js.map +1 -0
  14. package/dist/files/engine/api/folders.d.ts +63 -0
  15. package/dist/files/engine/api/folders.js +56 -0
  16. package/dist/files/engine/api/folders.js.map +1 -0
  17. package/dist/files/engine/api/office.d.ts +27 -0
  18. package/dist/files/engine/api/office.js +19 -0
  19. package/dist/files/engine/api/office.js.map +1 -0
  20. package/dist/files/engine/api/permissions.d.ts +37 -0
  21. package/dist/files/engine/api/permissions.js +109 -0
  22. package/dist/files/engine/api/permissions.js.map +1 -0
  23. package/dist/files/engine/api/versions.d.ts +26 -0
  24. package/dist/files/engine/api/versions.js +37 -0
  25. package/dist/files/engine/api/versions.js.map +1 -0
  26. package/dist/files/engine/cache/idb-store.d.ts +95 -0
  27. package/dist/files/engine/cache/idb-store.js +172 -0
  28. package/dist/files/engine/cache/idb-store.js.map +1 -0
  29. package/dist/files/engine/cache/policy.d.ts +14 -0
  30. package/dist/files/engine/cache/policy.js +40 -0
  31. package/dist/files/engine/cache/policy.js.map +1 -0
  32. package/dist/files/engine/cache/register-service-worker.d.ts +57 -0
  33. package/dist/files/engine/cache/register-service-worker.js +80 -0
  34. package/dist/files/engine/cache/register-service-worker.js.map +1 -0
  35. package/dist/files/engine/db-types.d.ts +48865 -0
  36. package/dist/files/engine/db-types.js +1 -0
  37. package/dist/files/engine/db-types.js.map +1 -0
  38. package/dist/files/engine/filesDb.d.ts +1913 -0
  39. package/dist/files/engine/filesDb.js +28 -0
  40. package/dist/files/engine/filesDb.js.map +1 -0
  41. package/dist/files/engine/handler/handler.d.ts +82 -0
  42. package/dist/files/engine/handler/handler.js +124 -0
  43. package/dist/files/engine/handler/handler.js.map +1 -0
  44. package/dist/files/engine/handler/hooks/useFile.d.ts +17 -0
  45. package/dist/files/engine/handler/hooks/useFile.js +75 -0
  46. package/dist/files/engine/handler/hooks/useFile.js.map +1 -0
  47. package/dist/files/engine/handler/hooks/useFileUpload.d.ts +76 -0
  48. package/dist/files/engine/handler/hooks/useFileUpload.js +67 -0
  49. package/dist/files/engine/handler/hooks/useFileUpload.js.map +1 -0
  50. package/dist/files/engine/handler/input/normalize.d.ts +14 -0
  51. package/dist/files/engine/handler/input/normalize.js +365 -0
  52. package/dist/files/engine/handler/input/normalize.js.map +1 -0
  53. package/dist/files/engine/handler/intelligence/access.d.ts +35 -0
  54. package/dist/files/engine/handler/intelligence/access.js +85 -0
  55. package/dist/files/engine/handler/intelligence/access.js.map +1 -0
  56. package/dist/files/engine/handler/intelligence/magic-bytes.d.ts +21 -0
  57. package/dist/files/engine/handler/intelligence/magic-bytes.js +67 -0
  58. package/dist/files/engine/handler/intelligence/magic-bytes.js.map +1 -0
  59. package/dist/files/engine/handler/output/target.d.ts +19 -0
  60. package/dist/files/engine/handler/output/target.js +222 -0
  61. package/dist/files/engine/handler/output/target.js.map +1 -0
  62. package/dist/files/engine/handler/resolver.d.ts +34 -0
  63. package/dist/files/engine/handler/resolver.js +133 -0
  64. package/dist/files/engine/handler/resolver.js.map +1 -0
  65. package/dist/files/engine/handler/types.d.ts +367 -0
  66. package/dist/files/engine/handler/types.js +1 -0
  67. package/dist/files/engine/handler/types.js.map +1 -0
  68. package/dist/files/engine/handler/upload.d.ts +32 -0
  69. package/dist/files/engine/handler/upload.js +295 -0
  70. package/dist/files/engine/handler/upload.js.map +1 -0
  71. package/dist/files/engine/handler/utils/classify.d.ts +14 -0
  72. package/dist/files/engine/handler/utils/classify.js +27 -0
  73. package/dist/files/engine/handler/utils/classify.js.map +1 -0
  74. package/dist/files/engine/handler/utils/prefer-locator.d.ts +32 -0
  75. package/dist/files/engine/handler/utils/prefer-locator.js +34 -0
  76. package/dist/files/engine/handler/utils/prefer-locator.js.map +1 -0
  77. package/dist/files/engine/handler/utils/python-base.d.ts +129 -0
  78. package/dist/files/engine/handler/utils/python-base.js +60 -0
  79. package/dist/files/engine/handler/utils/python-base.js.map +1 -0
  80. package/dist/files/engine/hooks/blob-cache.d.ts +130 -0
  81. package/dist/files/engine/hooks/blob-cache.js +162 -0
  82. package/dist/files/engine/hooks/blob-cache.js.map +1 -0
  83. package/dist/files/engine/hooks/office-extraction-cache.d.ts +28 -0
  84. package/dist/files/engine/hooks/office-extraction-cache.js +67 -0
  85. package/dist/files/engine/hooks/office-extraction-cache.js.map +1 -0
  86. package/dist/files/engine/host/configure.d.ts +166 -0
  87. package/dist/files/engine/host/configure.js +31 -0
  88. package/dist/files/engine/host/configure.js.map +1 -0
  89. package/dist/files/engine/host/org.d.ts +8 -0
  90. package/dist/files/engine/host/org.js +16 -0
  91. package/dist/files/engine/host/org.js.map +1 -0
  92. package/dist/files/engine/host/python-client.d.ts +60 -0
  93. package/dist/files/engine/host/python-client.js +46 -0
  94. package/dist/files/engine/host/python-client.js.map +1 -0
  95. package/dist/files/engine/host/share-links.d.ts +20 -0
  96. package/dist/files/engine/host/share-links.js +32 -0
  97. package/dist/files/engine/host/share-links.js.map +1 -0
  98. package/dist/files/engine/host/store.d.ts +24 -0
  99. package/dist/files/engine/host/store.js +23 -0
  100. package/dist/files/engine/host/store.js.map +1 -0
  101. package/dist/files/engine/host/supabase.d.ts +3808 -0
  102. package/dist/files/engine/host/supabase.js +33 -0
  103. package/dist/files/engine/host/supabase.js.map +1 -0
  104. package/dist/files/engine/host/toast.d.ts +14 -0
  105. package/dist/files/engine/host/toast.js +20 -0
  106. package/dist/files/engine/host/toast.js.map +1 -0
  107. package/dist/files/engine/host/typed-client.d.ts +136 -0
  108. package/dist/files/engine/host/typed-client.js +66 -0
  109. package/dist/files/engine/host/typed-client.js.map +1 -0
  110. package/dist/files/engine/index.d.ts +22 -0
  111. package/dist/files/engine/index.js +49 -0
  112. package/dist/files/engine/index.js.map +1 -0
  113. package/dist/files/engine/media/our-file-sources.d.ts +39 -0
  114. package/dist/files/engine/media/our-file-sources.js +83 -0
  115. package/dist/files/engine/media/our-file-sources.js.map +1 -0
  116. package/dist/files/engine/media/signed-url.d.ts +1 -0
  117. package/dist/files/engine/media/signed-url.js +6 -0
  118. package/dist/files/engine/media/signed-url.js.map +1 -0
  119. package/dist/files/engine/redux/converters.d.ts +73 -0
  120. package/dist/files/engine/redux/converters.js +286 -0
  121. package/dist/files/engine/redux/converters.js.map +1 -0
  122. package/dist/files/engine/redux/file-hydration.d.ts +15 -0
  123. package/dist/files/engine/redux/file-hydration.js +46 -0
  124. package/dist/files/engine/redux/file-hydration.js.map +1 -0
  125. package/dist/files/engine/redux/file-tree-auth-boundary.d.ts +5 -0
  126. package/dist/files/engine/redux/file-tree-auth-boundary.js +28 -0
  127. package/dist/files/engine/redux/file-tree-auth-boundary.js.map +1 -0
  128. package/dist/files/engine/redux/file-tree-timeout.d.ts +32 -0
  129. package/dist/files/engine/redux/file-tree-timeout.js +73 -0
  130. package/dist/files/engine/redux/file-tree-timeout.js.map +1 -0
  131. package/dist/files/engine/redux/mutation-toast-middleware.d.ts +27 -0
  132. package/dist/files/engine/redux/mutation-toast-middleware.js +103 -0
  133. package/dist/files/engine/redux/mutation-toast-middleware.js.map +1 -0
  134. package/dist/files/engine/redux/realtime-middleware.d.ts +61 -0
  135. package/dist/files/engine/redux/realtime-middleware.js +431 -0
  136. package/dist/files/engine/redux/realtime-middleware.js.map +1 -0
  137. package/dist/files/engine/redux/request-ledger.d.ts +68 -0
  138. package/dist/files/engine/redux/request-ledger.js +66 -0
  139. package/dist/files/engine/redux/request-ledger.js.map +1 -0
  140. package/dist/files/engine/redux/selectors.d.ts +3254 -0
  141. package/dist/files/engine/redux/selectors.js +428 -0
  142. package/dist/files/engine/redux/selectors.js.map +1 -0
  143. package/dist/files/engine/redux/slice.d.ts +157 -0
  144. package/dist/files/engine/redux/slice.js +836 -0
  145. package/dist/files/engine/redux/slice.js.map +1 -0
  146. package/dist/files/engine/redux/thunks.d.ts +449 -0
  147. package/dist/files/engine/redux/thunks.js +1684 -0
  148. package/dist/files/engine/redux/thunks.js.map +1 -0
  149. package/dist/files/engine/redux/tree-utils.d.ts +90 -0
  150. package/dist/files/engine/redux/tree-utils.js +200 -0
  151. package/dist/files/engine/redux/tree-utils.js.map +1 -0
  152. package/dist/files/engine/support/claimsUser.d.ts +77 -0
  153. package/dist/files/engine/support/claimsUser.js +48 -0
  154. package/dist/files/engine/support/claimsUser.js.map +1 -0
  155. package/dist/files/engine/support/datetime.d.ts +6 -0
  156. package/dist/files/engine/support/datetime.js +15 -0
  157. package/dist/files/engine/support/datetime.js.map +1 -0
  158. package/dist/files/engine/support/document-visibility.d.ts +14 -0
  159. package/dist/files/engine/support/document-visibility.js +28 -0
  160. package/dist/files/engine/support/document-visibility.js.map +1 -0
  161. package/dist/files/engine/support/logger.d.ts +28 -0
  162. package/dist/files/engine/support/logger.js +36 -0
  163. package/dist/files/engine/support/logger.js.map +1 -0
  164. package/dist/files/engine/types.d.ts +1081 -0
  165. package/dist/files/engine/types.js +30 -0
  166. package/dist/files/engine/types.js.map +1 -0
  167. package/dist/files/engine/upload/cloudUpload.d.ts +182 -0
  168. package/dist/files/engine/upload/cloudUpload.js +418 -0
  169. package/dist/files/engine/upload/cloudUpload.js.map +1 -0
  170. package/dist/files/engine/upload/tusUpload.d.ts +100 -0
  171. package/dist/files/engine/upload/tusUpload.js +258 -0
  172. package/dist/files/engine/upload/tusUpload.js.map +1 -0
  173. package/dist/files/engine/upload/uploadDedupGuard.d.ts +58 -0
  174. package/dist/files/engine/upload/uploadDedupGuard.js +41 -0
  175. package/dist/files/engine/upload/uploadDedupGuard.js.map +1 -0
  176. package/dist/files/engine/upload/uploadGuardOpeners.d.ts +70 -0
  177. package/dist/files/engine/upload/uploadGuardOpeners.js +54 -0
  178. package/dist/files/engine/upload/uploadGuardOpeners.js.map +1 -0
  179. package/dist/files/engine/utils/file-types.d.ts +243 -0
  180. package/dist/files/engine/utils/file-types.js +1722 -0
  181. package/dist/files/engine/utils/file-types.js.map +1 -0
  182. package/dist/files/engine/utils/user-visible.d.ts +133 -0
  183. package/dist/files/engine/utils/user-visible.js +115 -0
  184. package/dist/files/engine/utils/user-visible.js.map +1 -0
  185. package/package.json +392 -8
@@ -0,0 +1,428 @@
1
+ "use client";
2
+ import { createSelector } from "reselect";
3
+ import {
4
+ EMPTY_TREE_CHILDREN,
5
+ sortChildren as sortChildrenUtil
6
+ } from "./tree-utils.js";
7
+ const EMPTY_CLOUD_FILE_PERMISSIONS = [];
8
+ const EMPTY_CLOUD_SHARE_LINKS = [];
9
+ const EMPTY_CLOUD_FILE_VERSIONS = [];
10
+ const EMPTY_PENDING_REQUEST_IDS = [];
11
+ const selectSlice = (state) => state.cloudFiles;
12
+ const selectAllFilesMap = createSelector(
13
+ [selectSlice],
14
+ (slice) => slice.filesById
15
+ );
16
+ const selectAllFilesArray = createSelector(
17
+ [selectAllFilesMap],
18
+ (map) => Object.values(map)
19
+ );
20
+ const selectFileById = createSelector(
21
+ [selectAllFilesMap, (_state, id) => id],
22
+ (map, id) => map[id]
23
+ );
24
+ const selectFileCurrentVersion = createSelector(
25
+ [selectAllFilesMap, (_state, id) => id],
26
+ (map, id) => map[id]?.currentVersion
27
+ );
28
+ function getFileFromState(state, id) {
29
+ return state.cloudFiles.filesById[id];
30
+ }
31
+ const selectFileName = createSelector(
32
+ [selectFileById],
33
+ (record) => record?.fileName ?? null
34
+ );
35
+ const selectFilePath = createSelector(
36
+ [selectFileById],
37
+ (record) => record?.filePath ?? null
38
+ );
39
+ const selectFileVisibility = createSelector(
40
+ [selectFileById],
41
+ (record) => record?.visibility ?? "personal"
42
+ );
43
+ const selectFileIsDirty = createSelector(
44
+ [selectFileById],
45
+ (record) => record?._dirty ?? false
46
+ );
47
+ const selectFileIsLoading = createSelector(
48
+ [selectFileById],
49
+ (record) => record?._loading ?? false
50
+ );
51
+ const selectFileError = createSelector(
52
+ [selectFileById],
53
+ (record) => record?._error ?? null
54
+ );
55
+ const selectFilePendingRequestIds = createSelector(
56
+ [selectFileById],
57
+ (record) => record?._pendingRequestIds ?? EMPTY_PENDING_REQUEST_IDS
58
+ );
59
+ const selectFileDefinition = createSelector(
60
+ [selectFileById],
61
+ (record) => {
62
+ if (!record) return void 0;
63
+ const {
64
+ _dirty: _a,
65
+ _dirtyFields: _b,
66
+ _fieldHistory: _c,
67
+ _loadedFields: _d,
68
+ _loading: _e,
69
+ _error: _f,
70
+ _pendingRequestIds: _g,
71
+ ...definition
72
+ } = record;
73
+ return definition;
74
+ }
75
+ );
76
+ const selectAllFoldersMap = createSelector(
77
+ [selectSlice],
78
+ (slice) => slice.foldersById
79
+ );
80
+ const selectAllFoldersArray = createSelector(
81
+ [selectAllFoldersMap],
82
+ (map) => Object.values(map)
83
+ );
84
+ const selectFolderById = createSelector(
85
+ [selectAllFoldersMap, (_state, id) => id],
86
+ (map, id) => map[id]
87
+ );
88
+ function getFolderFromState(state, id) {
89
+ return state.cloudFiles.foldersById[id];
90
+ }
91
+ const selectFolderDefinition = createSelector(
92
+ [selectFolderById],
93
+ (record) => {
94
+ if (!record) return void 0;
95
+ const {
96
+ _dirty: _a,
97
+ _dirtyFields: _b,
98
+ _fieldHistory: _c,
99
+ _loadedFields: _d,
100
+ _loading: _e,
101
+ _error: _f,
102
+ _pendingRequestIds: _g,
103
+ ...definition
104
+ } = record;
105
+ return definition;
106
+ }
107
+ );
108
+ const selectTreeSlice = createSelector([selectSlice], (slice) => slice.tree);
109
+ const selectTreeStatus = createSelector(
110
+ [selectTreeSlice],
111
+ (tree) => tree.status
112
+ );
113
+ const selectTreeError = createSelector(
114
+ [selectTreeSlice],
115
+ (tree) => tree.error
116
+ );
117
+ const selectRootFolderIds = createSelector(
118
+ [selectTreeSlice],
119
+ (tree) => tree.rootFolderIds
120
+ );
121
+ const selectRootFileIds = createSelector(
122
+ [selectTreeSlice],
123
+ (tree) => tree.rootFileIds
124
+ );
125
+ const selectChildrenByFolderId = createSelector(
126
+ [selectTreeSlice],
127
+ (tree) => tree.childrenByFolderId
128
+ );
129
+ const selectChildrenOfFolder = createSelector(
130
+ [
131
+ selectChildrenByFolderId,
132
+ (_state, folderId) => folderId
133
+ ],
134
+ (byId, folderId) => byId[folderId] ?? EMPTY_TREE_CHILDREN
135
+ );
136
+ const selectIsFolderFullyLoaded = createSelector(
137
+ [
138
+ selectTreeSlice,
139
+ (_state, folderId) => folderId
140
+ ],
141
+ (tree, folderId) => tree.fullyLoadedFolderIds[folderId] === true
142
+ );
143
+ const selectUiSlice = createSelector([selectSlice], (slice) => slice.ui);
144
+ const selectViewMode = createSelector(
145
+ [selectUiSlice],
146
+ (ui) => ui.viewMode
147
+ );
148
+ const selectSortBy = createSelector([selectUiSlice], (ui) => ui.sortBy);
149
+ const selectSortDir = createSelector(
150
+ [selectUiSlice],
151
+ (ui) => ui.sortDir
152
+ );
153
+ const selectSort = createSelector(
154
+ [selectSortBy, selectSortDir],
155
+ (sortBy, sortDir) => ({ sortBy, sortDir })
156
+ );
157
+ const selectKindFilter = createSelector(
158
+ [selectUiSlice],
159
+ (ui) => ui.kindFilter
160
+ );
161
+ const selectDetailsLevel = createSelector(
162
+ [selectUiSlice],
163
+ (ui) => ui.detailsLevel
164
+ );
165
+ const selectColumnFilters = createSelector(
166
+ [selectUiSlice],
167
+ (ui) => ui.columnFilters
168
+ );
169
+ const selectHasActiveColumnFilters = createSelector(
170
+ [selectColumnFilters],
171
+ (cf) => cf.name.length > 0 || cf.type.length > 0 || cf.extension.length > 0 || cf.mime.length > 0 || cf.path.length > 0 || cf.owner.length > 0 || cf.modified !== "any" || cf.created !== "any" || cf.size !== "any" || cf.access !== "any" || cf.rag.length > 0
172
+ );
173
+ const selectVisibleColumns = createSelector(
174
+ [selectUiSlice],
175
+ (ui) => ui.visibleColumns
176
+ );
177
+ const selectSearchQuery = createSelector(
178
+ [selectUiSlice],
179
+ (ui) => ui.searchQuery
180
+ );
181
+ const selectChipFilter = createSelector(
182
+ [selectUiSlice],
183
+ (ui) => ui.chipFilter
184
+ );
185
+ const selectActiveFileId = createSelector(
186
+ [selectUiSlice],
187
+ (ui) => ui.activeFileId
188
+ );
189
+ const selectActiveFolderId = createSelector(
190
+ [selectUiSlice],
191
+ (ui) => ui.activeFolderId
192
+ );
193
+ const selectActiveFile = createSelector(
194
+ [selectAllFilesMap, selectActiveFileId],
195
+ (map, id) => id ? map[id] ?? null : null
196
+ );
197
+ const selectActiveFolder = createSelector(
198
+ [selectAllFoldersMap, selectActiveFolderId],
199
+ (map, id) => id ? map[id] ?? null : null
200
+ );
201
+ const selectFocusedId = createSelector(
202
+ [selectUiSlice],
203
+ (ui) => ui.focusedId
204
+ );
205
+ const selectSortedChildrenOfFolder = createSelector(
206
+ [
207
+ selectChildrenOfFolder,
208
+ selectAllFilesMap,
209
+ selectAllFoldersMap,
210
+ selectSortBy,
211
+ selectSortDir
212
+ ],
213
+ (children, filesById, foldersById, sortBy, sortDir) => sortChildrenUtil(children, filesById, foldersById, sortBy, sortDir)
214
+ );
215
+ const selectSortedRootChildren = createSelector(
216
+ [
217
+ selectRootFolderIds,
218
+ selectRootFileIds,
219
+ selectAllFilesMap,
220
+ selectAllFoldersMap,
221
+ selectSortBy,
222
+ selectSortDir
223
+ ],
224
+ (folderIds, fileIds, filesById, foldersById, sortBy, sortDir) => sortChildrenUtil(
225
+ { folderIds, fileIds },
226
+ filesById,
227
+ foldersById,
228
+ sortBy,
229
+ sortDir
230
+ )
231
+ );
232
+ const selectSelection = createSelector(
233
+ [selectSlice],
234
+ (slice) => slice.selection
235
+ );
236
+ const selectIsSelected = createSelector(
237
+ [selectSelection, (_s, id) => id],
238
+ (selection, id) => selection.selectedIds.includes(id)
239
+ );
240
+ const selectSelectedCount = createSelector(
241
+ [selectSelection],
242
+ (selection) => selection.selectedIds.length
243
+ );
244
+ const selectVersionsForFile = createSelector(
245
+ [selectSlice, (_s, fileId) => fileId],
246
+ (slice, fileId) => slice.versionsByFileId[fileId] ?? EMPTY_CLOUD_FILE_VERSIONS
247
+ );
248
+ const selectPermissionsForResource = createSelector(
249
+ [selectSlice, (_s, resourceId) => resourceId],
250
+ (slice, resourceId) => slice.permissionsByResourceId[resourceId]
251
+ );
252
+ const selectEffectivePermissionForFile = createSelector(
253
+ [
254
+ selectFileById,
255
+ selectPermissionsForResource,
256
+ (_s, _fileId, userId) => userId
257
+ ],
258
+ (file, permissions, userId) => {
259
+ if (!file) return null;
260
+ if (file.ownerId === userId) return "admin";
261
+ const order = {
262
+ read: 1,
263
+ write: 2,
264
+ admin: 3
265
+ };
266
+ let best = file.visibility === "public" ? "read" : null;
267
+ if (!permissions) return best;
268
+ for (const perm of permissions) {
269
+ if (perm.granteeId !== userId) continue;
270
+ if (perm.expiresAt && new Date(perm.expiresAt).getTime() < Date.now())
271
+ continue;
272
+ if (!best || order[perm.permissionLevel] > order[best]) {
273
+ best = perm.permissionLevel;
274
+ }
275
+ }
276
+ return best;
277
+ }
278
+ );
279
+ const selectShareLinksForResource = createSelector(
280
+ [selectSlice, (_s, resourceId) => resourceId],
281
+ (slice, resourceId) => slice.shareLinksByResourceId[resourceId]
282
+ );
283
+ const selectActiveShareLinksForResource = createSelector(
284
+ [selectShareLinksForResource],
285
+ (links) => {
286
+ if (!links?.length) return EMPTY_CLOUD_SHARE_LINKS;
287
+ const active = links.filter((l) => l.isActive);
288
+ return active.length ? active : EMPTY_CLOUD_SHARE_LINKS;
289
+ }
290
+ );
291
+ const selectAllUploads = createSelector(
292
+ [selectSlice],
293
+ (slice) => slice.uploads
294
+ );
295
+ const selectUploadByRequestId = createSelector(
296
+ [selectAllUploads, (_s, requestId) => requestId],
297
+ (uploads, requestId) => uploads[requestId]
298
+ );
299
+ const selectActiveUploads = createSelector(
300
+ [selectAllUploads],
301
+ (uploads) => Object.values(uploads).filter(
302
+ (u) => u.status === "uploading" || u.status === "pending"
303
+ )
304
+ );
305
+ const selectVisibleUploads = createSelector(
306
+ [selectAllUploads],
307
+ (uploads) => Object.values(uploads).slice().sort((a, b) => a.startedAt - b.startedAt)
308
+ );
309
+ const selectFailedUploadsForFolderPath = createSelector(
310
+ [
311
+ selectAllUploads,
312
+ (_s, folderPath) => folderPath
313
+ ],
314
+ (uploads, folderPath) => Object.values(uploads).filter((u) => u.status === "error" && u.folderPath === folderPath).sort((a, b) => a.startedAt - b.startedAt)
315
+ );
316
+ const selectOverallUploadProgress = createSelector(
317
+ [selectActiveUploads],
318
+ (active) => {
319
+ let loaded = 0;
320
+ let total = 0;
321
+ for (const u of active) {
322
+ loaded += u.bytesUploaded;
323
+ total += u.fileSize;
324
+ }
325
+ return {
326
+ loaded,
327
+ total,
328
+ percent: total > 0 ? Math.round(loaded / total * 100) : 0
329
+ };
330
+ }
331
+ );
332
+ const selectRagStatusSlice = createSelector(
333
+ [selectSlice],
334
+ (slice) => slice.ragStatus
335
+ );
336
+ const selectRagStatuses = createSelector(
337
+ [selectRagStatusSlice],
338
+ (rag) => rag.byFileId
339
+ );
340
+ const selectRagStatusForFile = createSelector(
341
+ [selectRagStatuses, (_s, fileId) => fileId],
342
+ (byId, fileId) => byId[fileId]
343
+ );
344
+ const selectIsRagFetching = createSelector(
345
+ [selectRagStatusSlice],
346
+ (rag) => rag.isFetching
347
+ );
348
+ const selectRagLastFetchedAt = createSelector(
349
+ [selectRagStatusSlice],
350
+ (rag) => rag.lastFetchedAt
351
+ );
352
+ const selectRealtime = createSelector(
353
+ [selectSlice],
354
+ (slice) => slice.realtime
355
+ );
356
+ const selectRealtimeStatus = createSelector(
357
+ [selectRealtime],
358
+ (rt) => rt.status
359
+ );
360
+ export {
361
+ EMPTY_CLOUD_FILE_PERMISSIONS,
362
+ EMPTY_CLOUD_SHARE_LINKS,
363
+ EMPTY_TREE_CHILDREN,
364
+ getFileFromState,
365
+ getFolderFromState,
366
+ selectActiveFile,
367
+ selectActiveFileId,
368
+ selectActiveFolder,
369
+ selectActiveFolderId,
370
+ selectActiveShareLinksForResource,
371
+ selectActiveUploads,
372
+ selectAllFilesArray,
373
+ selectAllFilesMap,
374
+ selectAllFoldersArray,
375
+ selectAllFoldersMap,
376
+ selectAllUploads,
377
+ selectChildrenByFolderId,
378
+ selectChildrenOfFolder,
379
+ selectChipFilter,
380
+ selectColumnFilters,
381
+ selectDetailsLevel,
382
+ selectEffectivePermissionForFile,
383
+ selectFailedUploadsForFolderPath,
384
+ selectFileById,
385
+ selectFileCurrentVersion,
386
+ selectFileDefinition,
387
+ selectFileError,
388
+ selectFileIsDirty,
389
+ selectFileIsLoading,
390
+ selectFileName,
391
+ selectFilePath,
392
+ selectFilePendingRequestIds,
393
+ selectFileVisibility,
394
+ selectFocusedId,
395
+ selectFolderById,
396
+ selectFolderDefinition,
397
+ selectHasActiveColumnFilters,
398
+ selectIsFolderFullyLoaded,
399
+ selectIsRagFetching,
400
+ selectIsSelected,
401
+ selectKindFilter,
402
+ selectOverallUploadProgress,
403
+ selectPermissionsForResource,
404
+ selectRagLastFetchedAt,
405
+ selectRagStatusForFile,
406
+ selectRagStatuses,
407
+ selectRealtime,
408
+ selectRealtimeStatus,
409
+ selectRootFileIds,
410
+ selectRootFolderIds,
411
+ selectSearchQuery,
412
+ selectSelectedCount,
413
+ selectSelection,
414
+ selectShareLinksForResource,
415
+ selectSort,
416
+ selectSortBy,
417
+ selectSortDir,
418
+ selectSortedChildrenOfFolder,
419
+ selectSortedRootChildren,
420
+ selectTreeError,
421
+ selectTreeStatus,
422
+ selectUploadByRequestId,
423
+ selectVersionsForFile,
424
+ selectViewMode,
425
+ selectVisibleColumns,
426
+ selectVisibleUploads
427
+ };
428
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/files/engine/redux/selectors.ts"],"sourcesContent":["/**\n * features/files/redux/selectors.ts\n *\n * Memoized selectors over the cloudFiles slice. Follow the agent-shortcuts\n * pattern: every read path is wrapped in createSelector; imperative accessors\n * (for middleware / thunks) are named `get...FromState`.\n */\n\n\"use client\";\n\nimport { createSelector } from \"reselect\";\nimport {\n EMPTY_TREE_CHILDREN,\n sortChildren as sortChildrenUtil,\n} from \"./tree-utils\";\nimport type { CloudFilesState } from \"../types\";\n\n// Minimal local state shape — avoids importing from store.ts (which imports\n// this module), which would create a type-level circular dependency.\ntype StateWithCloudFiles = { cloudFiles: CloudFilesState };\nimport type {\n CloudFile,\n CloudFileRecord,\n CloudFilePermission,\n CloudFileVersion,\n CloudFolder,\n CloudFolderRecord,\n CloudShareLink,\n PermissionLevel,\n RagStatus,\n TreeChildren,\n UploadState,\n} from \"../types\";\n\n/** Stable empties — never use `?? []` in selector outputs (new ref every run → Reselect stability warnings). */\nexport const EMPTY_CLOUD_FILE_PERMISSIONS: CloudFilePermission[] = [];\nexport const EMPTY_CLOUD_SHARE_LINKS: CloudShareLink[] = [];\nconst EMPTY_CLOUD_FILE_VERSIONS: CloudFileVersion[] = [];\nconst EMPTY_PENDING_REQUEST_IDS: string[] = [];\n\n/** Re-export for consumers that import cloud-files selectors from one module. */\nexport { EMPTY_TREE_CHILDREN };\n\n// ---------------------------------------------------------------------------\n// Slice root\n// ---------------------------------------------------------------------------\n\nconst selectSlice = (state: StateWithCloudFiles) => state.cloudFiles;\n\n// ---------------------------------------------------------------------------\n// Files\n// ---------------------------------------------------------------------------\n\nexport const selectAllFilesMap = createSelector(\n [selectSlice],\n (slice) => slice.filesById,\n);\n\nexport const selectAllFilesArray = createSelector(\n [selectAllFilesMap],\n (map): CloudFileRecord[] => Object.values(map),\n);\n\nexport const selectFileById = createSelector(\n [selectAllFilesMap, (_state: StateWithCloudFiles, id: string) => id],\n (map, id): CloudFileRecord | undefined => map[id],\n);\n\n/** The file's current version number (undefined when the row is not loaded). */\nexport const selectFileCurrentVersion = createSelector(\n [selectAllFilesMap, (_state: StateWithCloudFiles, id: string) => id],\n (map, id): number | undefined => map[id]?.currentVersion,\n);\n\n/** Imperative — middleware / thunks. */\nexport function getFileFromState(\n state: StateWithCloudFiles,\n id: string,\n): CloudFileRecord | undefined {\n return state.cloudFiles.filesById[id];\n}\n\nexport const selectFileName = createSelector(\n [selectFileById],\n (record): string | null => record?.fileName ?? null,\n);\n\nexport const selectFilePath = createSelector(\n [selectFileById],\n (record): string | null => record?.filePath ?? null,\n);\n\nexport const selectFileVisibility = createSelector(\n [selectFileById],\n (record) => record?.visibility ?? \"personal\",\n);\n\nexport const selectFileIsDirty = createSelector(\n [selectFileById],\n (record): boolean => record?._dirty ?? false,\n);\n\nexport const selectFileIsLoading = createSelector(\n [selectFileById],\n (record): boolean => record?._loading ?? false,\n);\n\nexport const selectFileError = createSelector(\n [selectFileById],\n (record): string | null => record?._error ?? null,\n);\n\nexport const selectFilePendingRequestIds = createSelector(\n [selectFileById],\n (record): string[] => record?._pendingRequestIds ?? EMPTY_PENDING_REQUEST_IDS,\n);\n\n/** Strip runtime fields — for components that only render domain fields. */\nexport const selectFileDefinition = createSelector(\n [selectFileById],\n (record): CloudFile | undefined => {\n if (!record) return undefined;\n const {\n _dirty: _a,\n _dirtyFields: _b,\n _fieldHistory: _c,\n _loadedFields: _d,\n _loading: _e,\n _error: _f,\n _pendingRequestIds: _g,\n ...definition\n } = record;\n return definition;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Folders\n// ---------------------------------------------------------------------------\n\nexport const selectAllFoldersMap = createSelector(\n [selectSlice],\n (slice) => slice.foldersById,\n);\n\nexport const selectAllFoldersArray = createSelector(\n [selectAllFoldersMap],\n (map): CloudFolderRecord[] => Object.values(map),\n);\n\nexport const selectFolderById = createSelector(\n [selectAllFoldersMap, (_state: StateWithCloudFiles, id: string) => id],\n (map, id): CloudFolderRecord | undefined => map[id],\n);\n\nexport function getFolderFromState(\n state: StateWithCloudFiles,\n id: string,\n): CloudFolderRecord | undefined {\n return state.cloudFiles.foldersById[id];\n}\n\nexport const selectFolderDefinition = createSelector(\n [selectFolderById],\n (record): CloudFolder | undefined => {\n if (!record) return undefined;\n const {\n _dirty: _a,\n _dirtyFields: _b,\n _fieldHistory: _c,\n _loadedFields: _d,\n _loading: _e,\n _error: _f,\n _pendingRequestIds: _g,\n ...definition\n } = record;\n return definition;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Tree\n// ---------------------------------------------------------------------------\n\nconst selectTreeSlice = createSelector([selectSlice], (slice) => slice.tree);\n\nexport const selectTreeStatus = createSelector(\n [selectTreeSlice],\n (tree) => tree.status,\n);\n\nexport const selectTreeError = createSelector(\n [selectTreeSlice],\n (tree) => tree.error,\n);\n\nexport const selectRootFolderIds = createSelector(\n [selectTreeSlice],\n (tree) => tree.rootFolderIds,\n);\n\nexport const selectRootFileIds = createSelector(\n [selectTreeSlice],\n (tree) => tree.rootFileIds,\n);\n\nexport const selectChildrenByFolderId = createSelector(\n [selectTreeSlice],\n (tree) => tree.childrenByFolderId,\n);\n\nexport const selectChildrenOfFolder = createSelector(\n [\n selectChildrenByFolderId,\n (_state: StateWithCloudFiles, folderId: string) => folderId,\n ],\n (byId, folderId): TreeChildren => byId[folderId] ?? EMPTY_TREE_CHILDREN,\n);\n\nexport const selectIsFolderFullyLoaded = createSelector(\n [\n selectTreeSlice,\n (_state: StateWithCloudFiles, folderId: string) => folderId,\n ],\n (tree, folderId): boolean => tree.fullyLoadedFolderIds[folderId] === true,\n);\n\n// ---------------------------------------------------------------------------\n// Tree — sorted children (respects UI sort settings)\n// ---------------------------------------------------------------------------\n\nconst selectUiSlice = createSelector([selectSlice], (slice) => slice.ui);\n\nexport const selectViewMode = createSelector(\n [selectUiSlice],\n (ui) => ui.viewMode,\n);\n\n/** Primitive sort inputs — prefer these inside other selectors over `selectSort`'s object. */\nexport const selectSortBy = createSelector([selectUiSlice], (ui) => ui.sortBy);\n\nexport const selectSortDir = createSelector(\n [selectUiSlice],\n (ui) => ui.sortDir,\n);\n\nexport const selectSort = createSelector(\n [selectSortBy, selectSortDir],\n (sortBy, sortDir) => ({ sortBy, sortDir }),\n);\n\nexport const selectKindFilter = createSelector(\n [selectUiSlice],\n (ui) => ui.kindFilter,\n);\n\nexport const selectDetailsLevel = createSelector(\n [selectUiSlice],\n (ui) => ui.detailsLevel,\n);\n\nexport const selectColumnFilters = createSelector(\n [selectUiSlice],\n (ui) => ui.columnFilters,\n);\n\n/** Convenience: true iff any column filter is set away from its default. */\nexport const selectHasActiveColumnFilters = createSelector(\n [selectColumnFilters],\n (cf) =>\n cf.name.length > 0 ||\n cf.type.length > 0 ||\n cf.extension.length > 0 ||\n cf.mime.length > 0 ||\n cf.path.length > 0 ||\n cf.owner.length > 0 ||\n cf.modified !== \"any\" ||\n cf.created !== \"any\" ||\n cf.size !== \"any\" ||\n cf.access !== \"any\" ||\n cf.rag.length > 0,\n);\n\nexport const selectVisibleColumns = createSelector(\n [selectUiSlice],\n (ui) => ui.visibleColumns,\n);\n\n/** Tree-wide search box value (mirrors the URL `?q=…`). */\nexport const selectSearchQuery = createSelector(\n [selectUiSlice],\n (ui) => ui.searchQuery,\n);\n\n/** Active sticky chip (Recents / Starred); null when no chip is active. */\nexport const selectChipFilter = createSelector(\n [selectUiSlice],\n (ui) => ui.chipFilter,\n);\n\nexport const selectActiveFileId = createSelector(\n [selectUiSlice],\n (ui) => ui.activeFileId,\n);\n\nexport const selectActiveFolderId = createSelector(\n [selectUiSlice],\n (ui) => ui.activeFolderId,\n);\n\nexport const selectActiveFile = createSelector(\n [selectAllFilesMap, selectActiveFileId],\n (map, id): CloudFileRecord | null => (id ? (map[id] ?? null) : null),\n);\n\nexport const selectActiveFolder = createSelector(\n [selectAllFoldersMap, selectActiveFolderId],\n (map, id): CloudFolderRecord | null => (id ? (map[id] ?? null) : null),\n);\n\n/** The id of the single item (file or folder) that has visual focus — used to\n * drive the highlight ring and scroll-into-view after create / upload. */\nexport const selectFocusedId = createSelector(\n [selectUiSlice],\n (ui) => ui.focusedId,\n);\n\nexport const selectSortedChildrenOfFolder = createSelector(\n [\n selectChildrenOfFolder,\n selectAllFilesMap,\n selectAllFoldersMap,\n selectSortBy,\n selectSortDir,\n ],\n (children, filesById, foldersById, sortBy, sortDir): TreeChildren =>\n sortChildrenUtil(children, filesById, foldersById, sortBy, sortDir),\n);\n\nexport const selectSortedRootChildren = createSelector(\n [\n selectRootFolderIds,\n selectRootFileIds,\n selectAllFilesMap,\n selectAllFoldersMap,\n selectSortBy,\n selectSortDir,\n ],\n (folderIds, fileIds, filesById, foldersById, sortBy, sortDir): TreeChildren =>\n sortChildrenUtil(\n { folderIds, fileIds },\n filesById,\n foldersById,\n sortBy,\n sortDir,\n ),\n);\n\n// ---------------------------------------------------------------------------\n// Selection\n// ---------------------------------------------------------------------------\n\nexport const selectSelection = createSelector(\n [selectSlice],\n (slice) => slice.selection,\n);\n\nexport const selectIsSelected = createSelector(\n [selectSelection, (_s: StateWithCloudFiles, id: string) => id],\n (selection, id): boolean => selection.selectedIds.includes(id),\n);\n\nexport const selectSelectedCount = createSelector(\n [selectSelection],\n (selection): number => selection.selectedIds.length,\n);\n\n// ---------------------------------------------------------------------------\n// Versions\n// ---------------------------------------------------------------------------\n\nexport const selectVersionsForFile = createSelector(\n [selectSlice, (_s: StateWithCloudFiles, fileId: string) => fileId],\n (slice, fileId): CloudFileVersion[] =>\n slice.versionsByFileId[fileId] ?? EMPTY_CLOUD_FILE_VERSIONS,\n);\n\n// ---------------------------------------------------------------------------\n// Permissions\n// ---------------------------------------------------------------------------\n\nexport const selectPermissionsForResource = createSelector(\n [selectSlice, (_s: StateWithCloudFiles, resourceId: string) => resourceId],\n (slice, resourceId): CloudFilePermission[] | undefined =>\n slice.permissionsByResourceId[resourceId],\n);\n\n/**\n * Returns the highest permission the given user has on the given file.\n * Ownership returns 'admin'; otherwise derives from the canonical\n * `public.permissions` grants (mapped into the slice) where the grantee\n * matches. Caller must provide userId.\n */\nexport const selectEffectivePermissionForFile = createSelector(\n [\n selectFileById,\n selectPermissionsForResource,\n (_s: StateWithCloudFiles, _fileId: string, userId: string) => userId,\n ],\n (file, permissions, userId): PermissionLevel | null => {\n if (!file) return null;\n if (file.ownerId === userId) return \"admin\";\n const order: Record<PermissionLevel, number> = {\n read: 1,\n write: 2,\n admin: 3,\n };\n let best: PermissionLevel | null =\n file.visibility === \"public\" ? \"read\" : null;\n if (!permissions) return best;\n for (const perm of permissions) {\n if (perm.granteeId !== userId) continue;\n if (perm.expiresAt && new Date(perm.expiresAt).getTime() < Date.now())\n continue;\n if (!best || order[perm.permissionLevel] > order[best]) {\n best = perm.permissionLevel;\n }\n }\n return best;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Share links\n// ---------------------------------------------------------------------------\n\nexport const selectShareLinksForResource = createSelector(\n [selectSlice, (_s: StateWithCloudFiles, resourceId: string) => resourceId],\n (slice, resourceId): CloudShareLink[] | undefined =>\n slice.shareLinksByResourceId[resourceId],\n);\n\nexport const selectActiveShareLinksForResource = createSelector(\n [selectShareLinksForResource],\n (links): CloudShareLink[] => {\n if (!links?.length) return EMPTY_CLOUD_SHARE_LINKS;\n const active = links.filter((l) => l.isActive);\n return active.length ? active : EMPTY_CLOUD_SHARE_LINKS;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Uploads\n// ---------------------------------------------------------------------------\n\nexport const selectAllUploads = createSelector(\n [selectSlice],\n (slice) => slice.uploads,\n);\n\nexport const selectUploadByRequestId = createSelector(\n [selectAllUploads, (_s: StateWithCloudFiles, requestId: string) => requestId],\n (uploads, requestId): UploadState | undefined => uploads[requestId],\n);\n\nexport const selectActiveUploads = createSelector(\n [selectAllUploads],\n (uploads): UploadState[] =>\n (Object.values(uploads) as UploadState[]).filter(\n (u) => u.status === \"uploading\" || u.status === \"pending\",\n ),\n);\n\n/**\n * Every tracked upload — active AND recently completed (success/error) that\n * hasn't been cleared yet — ordered oldest-first so the tray reads top-to-\n * bottom in upload order. The tray auto-dismisses successful entries after a\n * delay, so this map stays bounded. Completed entries are what let a user see\n * WHAT they just uploaded (and jump to it) instead of watching the progress\n * card vanish into a paginated list.\n */\nexport const selectVisibleUploads = createSelector(\n [selectAllUploads],\n (uploads): UploadState[] =>\n (Object.values(uploads) as UploadState[])\n .slice()\n .sort((a, b) => a.startedAt - b.startedAt),\n);\n\n/**\n * 🚨 A FAILED UPLOAD, FOUND AGAIN BY THE SURFACE THAT STARTED IT.\n *\n * `state.uploads` is one flat, app-wide map — every uploader in the app\n * shares it. A container-scoped card (the Rulebook Resources card, a chat\n * attachment tray, …) that wants \"the uploads I sent, that failed\" gives\n * itself a `folderPath` nothing else uses and reads back exactly the entries\n * that match it — see `UploadState.folderPath`. `error` entries are never\n * auto-cleared (unlike `success`/`cancelled`, see `clearCompletedUploads`),\n * so this stays populated until the caller retries or dismisses each one.\n */\nexport const selectFailedUploadsForFolderPath = createSelector(\n [\n selectAllUploads,\n (_s: StateWithCloudFiles, folderPath: string) => folderPath,\n ],\n (uploads, folderPath): UploadState[] =>\n (Object.values(uploads) as UploadState[])\n .filter((u) => u.status === \"error\" && u.folderPath === folderPath)\n .sort((a, b) => a.startedAt - b.startedAt),\n);\n\nexport const selectOverallUploadProgress = createSelector(\n [selectActiveUploads],\n (active): { loaded: number; total: number; percent: number } => {\n let loaded = 0;\n let total = 0;\n for (const u of active) {\n loaded += u.bytesUploaded;\n total += u.fileSize;\n }\n return {\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 0,\n };\n },\n);\n\n// ---------------------------------------------------------------------------\n// Knowledge status (per-file indexing)\n// ---------------------------------------------------------------------------\n\nconst selectRagStatusSlice = createSelector(\n [selectSlice],\n (slice) => slice.ragStatus,\n);\n\n/** Map of fileId → current RagStatus. Empty until the prefetch thunk runs. */\nexport const selectRagStatuses = createSelector(\n [selectRagStatusSlice],\n (rag) => rag.byFileId,\n);\n\nexport const selectRagStatusForFile = createSelector(\n [selectRagStatuses, (_s: StateWithCloudFiles, fileId: string) => fileId],\n (byId, fileId): RagStatus | undefined => byId[fileId],\n);\n\nexport const selectIsRagFetching = createSelector(\n [selectRagStatusSlice],\n (rag): boolean => rag.isFetching,\n);\n\nexport const selectRagLastFetchedAt = createSelector(\n [selectRagStatusSlice],\n (rag): number | null => rag.lastFetchedAt,\n);\n\n// ---------------------------------------------------------------------------\n// Realtime\n// ---------------------------------------------------------------------------\n\nexport const selectRealtime = createSelector(\n [selectSlice],\n (slice) => slice.realtime,\n);\n\nexport const selectRealtimeStatus = createSelector(\n [selectRealtime],\n (rt) => rt.status,\n);\n"],"mappings":"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","names":[]}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * features/files/redux/slice.ts
3
+ *
4
+ * Normalized cloud-files slice. Pattern: copied from
5
+ * features/agents/redux/agent-shortcuts/slice.ts — dirty-tracking via
6
+ * FieldFlags, optimistic + rollback via _fieldHistory, RTK reducers only
7
+ * (async logic lives in thunks.ts).
8
+ */
9
+ import type { CloudFile, CloudFileFieldSnapshot, CloudFilePermission, CloudFileRecord, CloudFilesState, CloudFileVersion, CloudFolder, CloudFolderFieldSnapshot, CloudFolderRecord, CloudShareLink, AccessFilter, ChipFilter, ColumnId, DetailsLevel, KindFilter, ModifiedFilter, OwnerFilter, RagFilter, RagStatus, SelectionState, SizeFilter, SortBy, SortDirection, TreeChildren, TypeFilter, UiState, UploadStatus, ViewMode, Visibility } from "../types.js";
10
+ declare function emptyFileRecord(id: string): CloudFileRecord;
11
+ declare function emptyFolderRecord(id: string): CloudFolderRecord;
12
+ export declare const upsertFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<CloudFile>, "cloudFiles/upsertFile">, upsertFiles: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<CloudFile>[], "cloudFiles/upsertFiles">, setFileField: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
13
+ id: string;
14
+ field: keyof CloudFile;
15
+ value: CloudFile[keyof CloudFile];
16
+ }, "cloudFiles/setFileField">, resetFileField: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
17
+ id: string;
18
+ field: keyof CloudFile;
19
+ }, "cloudFiles/resetFileField">, markFileSaved: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
20
+ id: string;
21
+ }, "cloudFiles/markFileSaved">, rollbackFileOptimisticUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
22
+ id: string;
23
+ snapshot: CloudFileFieldSnapshot;
24
+ }, "cloudFiles/rollbackFileOptimisticUpdate">, removeFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
25
+ id: string;
26
+ }, "cloudFiles/removeFile">, addFilePendingRequest: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
27
+ id: string;
28
+ requestId: string;
29
+ }, "cloudFiles/addFilePendingRequest">, removeFilePendingRequest: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
30
+ id: string;
31
+ requestId: string;
32
+ }, "cloudFiles/removeFilePendingRequest">, setFileLoading: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
33
+ id: string;
34
+ loading: boolean;
35
+ }, "cloudFiles/setFileLoading">, setFileError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
36
+ id: string;
37
+ error: string | null;
38
+ }, "cloudFiles/setFileError">, upsertFolder: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<CloudFolder>, "cloudFiles/upsertFolder">, upsertFolders: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<CloudFolder>[], "cloudFiles/upsertFolders">, setFolderField: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
39
+ id: string;
40
+ field: keyof CloudFolder;
41
+ value: CloudFolder[keyof CloudFolder];
42
+ }, "cloudFiles/setFolderField">, markFolderSaved: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
43
+ id: string;
44
+ }, "cloudFiles/markFolderSaved">, rollbackFolderOptimisticUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
45
+ id: string;
46
+ snapshot: CloudFolderFieldSnapshot;
47
+ }, "cloudFiles/rollbackFolderOptimisticUpdate">, removeFolder: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
48
+ id: string;
49
+ }, "cloudFiles/removeFolder">, upsertVersionsForFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
50
+ fileId: string;
51
+ versions: CloudFileVersion[];
52
+ }, "cloudFiles/upsertVersionsForFile">, upsertPermissionsForResource: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
53
+ resourceId: string;
54
+ permissions: CloudFilePermission[];
55
+ }, "cloudFiles/upsertPermissionsForResource">, removePermissionForResource: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
56
+ resourceId: string;
57
+ granteeId: string;
58
+ granteeType?: "user" | "group";
59
+ }, "cloudFiles/removePermissionForResource">, upsertShareLinksForResource: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
60
+ resourceId: string;
61
+ shareLinks: CloudShareLink[];
62
+ }, "cloudFiles/upsertShareLinksForResource">, removeShareLink: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
63
+ linkId: string;
64
+ }, "cloudFiles/removeShareLink">, setTreeStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
65
+ status: "idle" | "loading" | "loaded" | "error";
66
+ error?: string | null;
67
+ }, "cloudFiles/setTreeStatus">, replaceTree: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
68
+ rootFolderIds: string[];
69
+ rootFileIds: string[];
70
+ childrenByFolderId: Record<string, TreeChildren>;
71
+ fullyLoadedFolderIds?: Record<string, true>;
72
+ }, "cloudFiles/replaceTree">, markFolderFullyLoaded: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
73
+ folderId: string;
74
+ }, "cloudFiles/markFolderFullyLoaded">, attachVirtualRoot: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
75
+ adapterId: string;
76
+ rootId: string;
77
+ label: string;
78
+ }, "cloudFiles/attachVirtualRoot">, attachChildToFolder: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
79
+ parentFolderId: string | null;
80
+ kind: "file" | "folder";
81
+ id: string;
82
+ }, "cloudFiles/attachChildToFolder">, detachChildFromFolder: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
83
+ parentFolderId: string | null;
84
+ kind: "file" | "folder";
85
+ id: string;
86
+ }, "cloudFiles/detachChildFromFolder">, setSelection: import("@reduxjs/toolkit").ActionCreatorWithPayload<SelectionState, "cloudFiles/setSelection">, clearSelection: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/clearSelection">, toggleSelection: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
87
+ id: string;
88
+ }, "cloudFiles/toggleSelection">, setViewMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<ViewMode, "cloudFiles/setViewMode">, setSort: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
89
+ sortBy: SortBy;
90
+ sortDir: SortDirection;
91
+ }, "cloudFiles/setSort">, setKindFilter: import("@reduxjs/toolkit").ActionCreatorWithPayload<KindFilter, "cloudFiles/setKindFilter">, setDetailsLevel: import("@reduxjs/toolkit").ActionCreatorWithPayload<DetailsLevel, "cloudFiles/setDetailsLevel">, setColumnFilter: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
92
+ column: "name";
93
+ value: string;
94
+ } | {
95
+ column: "type";
96
+ value: TypeFilter;
97
+ } | {
98
+ column: "extension";
99
+ value: string;
100
+ } | {
101
+ column: "mime";
102
+ value: string;
103
+ } | {
104
+ column: "path";
105
+ value: string;
106
+ } | {
107
+ column: "owner";
108
+ value: OwnerFilter;
109
+ } | {
110
+ column: "modified";
111
+ value: ModifiedFilter;
112
+ } | {
113
+ column: "created";
114
+ value: ModifiedFilter;
115
+ } | {
116
+ column: "size";
117
+ value: SizeFilter;
118
+ } | {
119
+ column: "access";
120
+ value: AccessFilter;
121
+ } | {
122
+ column: "rag";
123
+ value: RagFilter;
124
+ }, "cloudFiles/setColumnFilter">, clearColumnFilters: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/clearColumnFilters">, setColumnVisibility: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
125
+ column: ColumnId;
126
+ visible: boolean;
127
+ }, "cloudFiles/setColumnVisibility">, resetColumnVisibility: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/resetColumnVisibility">, setActiveFileId: import("@reduxjs/toolkit").ActionCreatorWithPayload<string | null, "cloudFiles/setActiveFileId">, setActiveFolderId: import("@reduxjs/toolkit").ActionCreatorWithPayload<string | null, "cloudFiles/setActiveFolderId">, setSearchQuery: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "cloudFiles/setSearchQuery">, setChipFilter: import("@reduxjs/toolkit").ActionCreatorWithPayload<ChipFilter | null, "cloudFiles/setChipFilter">, setUiBatch: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<UiState>, "cloudFiles/setUiBatch">, setFocusedId: import("@reduxjs/toolkit").ActionCreatorWithPayload<string | null, "cloudFiles/setFocusedId">, trackUploadStart: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
128
+ requestId: string;
129
+ fileName: string;
130
+ fileSize: number;
131
+ parentFolderId: string | null;
132
+ folderPath?: string | null;
133
+ }, "cloudFiles/trackUploadStart">, updateUploadProgress: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
134
+ requestId: string;
135
+ bytesUploaded: number;
136
+ }, "cloudFiles/updateUploadProgress">, updateUploadStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
137
+ requestId: string;
138
+ status: UploadStatus;
139
+ fileId?: string | null;
140
+ error?: string | null;
141
+ }, "cloudFiles/updateUploadStatus">, clearUpload: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
142
+ requestId: string;
143
+ }, "cloudFiles/clearUpload">, clearCompletedUploads: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/clearCompletedUploads">, setRagStatusForFile: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
144
+ fileId: string;
145
+ status: RagStatus;
146
+ }, "cloudFiles/setRagStatusForFile">, setRagStatusBatch: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
147
+ entries: Record<string, RagStatus>;
148
+ }, "cloudFiles/setRagStatusBatch">, setRagStatusFetching: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "cloudFiles/setRagStatusFetching">, clearRagStatuses: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/clearRagStatuses">, setRealtimeStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
149
+ status: CloudFilesState["realtime"]["status"];
150
+ userId?: string | null;
151
+ error?: string | null;
152
+ }, "cloudFiles/setRealtimeStatus">, touchRealtime: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/touchRealtime">, resetCloudFilesState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cloudFiles/resetCloudFilesState">;
153
+ export declare const cloudFilesReducer: import("@reduxjs/toolkit").Reducer<CloudFilesState>;
154
+ declare const _default: import("@reduxjs/toolkit").Reducer<CloudFilesState>;
155
+ export default _default;
156
+ export { emptyFileRecord, emptyFolderRecord };
157
+ export type { Visibility };