sanity-plugin-s3-media 1.2.1 → 1.2.2

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 (205) hide show
  1. package/dist/_chunks-cjs/client.js +1 -1
  2. package/dist/_chunks-cjs/client.js.map +1 -1
  3. package/dist/_chunks-es/client.mjs +1 -1
  4. package/dist/_chunks-es/client.mjs.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +2 -2
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +1 -2
  10. package/src/asset-utils.ts +0 -16
  11. package/src/client.ts +0 -1
  12. package/src/components/Asset/S3AssetSource.tsx +0 -74
  13. package/src/components/Asset/WithReferencedAsset.tsx +0 -21
  14. package/src/components/Asset/index.ts +0 -2
  15. package/src/components/File/FileInputButton.tsx +0 -77
  16. package/src/components/File/FileInputMenuItem.tsx +0 -83
  17. package/src/components/File/index.ts +0 -2
  18. package/src/components/MediaBrowser/AssetGridVirtualized/AssetGridVirtualized.tsx +0 -86
  19. package/src/components/MediaBrowser/AssetGridVirtualized/index.ts +0 -1
  20. package/src/components/MediaBrowser/AssetMetadata/AssetMetadata.tsx +0 -88
  21. package/src/components/MediaBrowser/AssetMetadata/index.ts +0 -1
  22. package/src/components/MediaBrowser/AssetTableVirtualized/AssetTableVirtualized.tsx +0 -76
  23. package/src/components/MediaBrowser/AssetTableVirtualized/index.ts +0 -1
  24. package/src/components/MediaBrowser/ButtonAssetCopy/ButtonAssetCopy.tsx +0 -63
  25. package/src/components/MediaBrowser/ButtonAssetCopy/index.ts +0 -1
  26. package/src/components/MediaBrowser/ButtonViewGroup/ButtonViewGroup.tsx +0 -38
  27. package/src/components/MediaBrowser/ButtonViewGroup/index.ts +0 -1
  28. package/src/components/MediaBrowser/CardAsset/CardAsset.tsx +0 -285
  29. package/src/components/MediaBrowser/CardAsset/index.ts +0 -1
  30. package/src/components/MediaBrowser/CardUpload/CardUpload.tsx +0 -161
  31. package/src/components/MediaBrowser/CardUpload/index.ts +0 -1
  32. package/src/components/MediaBrowser/Controls/Controls.tsx +0 -70
  33. package/src/components/MediaBrowser/Controls/index.ts +0 -1
  34. package/src/components/MediaBrowser/Dialog/Dialog.tsx +0 -9
  35. package/src/components/MediaBrowser/Dialog/index.ts +0 -1
  36. package/src/components/MediaBrowser/DialogAssetEdit/DialogAssetEdit.tsx +0 -145
  37. package/src/components/MediaBrowser/DialogAssetEdit/index.ts +0 -1
  38. package/src/components/MediaBrowser/DialogConfirm/DialogConfirm.tsx +0 -77
  39. package/src/components/MediaBrowser/DialogConfirm/index.ts +0 -1
  40. package/src/components/MediaBrowser/Dialogs/Dialogs.tsx +0 -40
  41. package/src/components/MediaBrowser/Dialogs/index.ts +0 -1
  42. package/src/components/MediaBrowser/DocumentList/DocumentList.tsx +0 -63
  43. package/src/components/MediaBrowser/DocumentList/index.ts +0 -1
  44. package/src/components/MediaBrowser/FileAssetPreview/FileAssetPreview.tsx +0 -42
  45. package/src/components/MediaBrowser/FileAssetPreview/index.ts +0 -1
  46. package/src/components/MediaBrowser/FileIcon/FileIcon.tsx +0 -58
  47. package/src/components/MediaBrowser/FileIcon/index.ts +0 -1
  48. package/src/components/MediaBrowser/Header/Header.tsx +0 -79
  49. package/src/components/MediaBrowser/Header/index.ts +0 -1
  50. package/src/components/MediaBrowser/Image/Image.tsx +0 -38
  51. package/src/components/MediaBrowser/Image/index.ts +0 -1
  52. package/src/components/MediaBrowser/Items/Items.tsx +0 -51
  53. package/src/components/MediaBrowser/Items/index.ts +0 -1
  54. package/src/components/MediaBrowser/MediaBrowser/MediaBrowser.tsx +0 -107
  55. package/src/components/MediaBrowser/MediaBrowser/index.ts +0 -1
  56. package/src/components/MediaBrowser/Notifications/Notifications.tsx +0 -22
  57. package/src/components/MediaBrowser/Notifications/index.ts +0 -1
  58. package/src/components/MediaBrowser/OrderSelect/OrderSelect.tsx +0 -58
  59. package/src/components/MediaBrowser/OrderSelect/index.ts +0 -1
  60. package/src/components/MediaBrowser/PickedBar/PickedBar.tsx +0 -75
  61. package/src/components/MediaBrowser/PickedBar/index.ts +0 -1
  62. package/src/components/MediaBrowser/Progress/Progress.tsx +0 -37
  63. package/src/components/MediaBrowser/Progress/index.ts +0 -1
  64. package/src/components/MediaBrowser/ReduxProvider/ReduxProvider.tsx +0 -71
  65. package/src/components/MediaBrowser/ReduxProvider/index.ts +0 -1
  66. package/src/components/MediaBrowser/TableHeader/TableHeader.tsx +0 -107
  67. package/src/components/MediaBrowser/TableHeader/index.ts +0 -1
  68. package/src/components/MediaBrowser/TableHeaderItem/TableHeaderItem.tsx +0 -60
  69. package/src/components/MediaBrowser/TableHeaderItem/index.ts +0 -1
  70. package/src/components/MediaBrowser/TableRowAsset/TableRowAsset.tsx +0 -419
  71. package/src/components/MediaBrowser/TableRowAsset/index.ts +0 -1
  72. package/src/components/MediaBrowser/TableRowUpload/TableRowUpload.tsx +0 -164
  73. package/src/components/MediaBrowser/TableRowUpload/index.ts +0 -1
  74. package/src/components/MediaBrowser/TextInputSearch/TextInputSearch.tsx +0 -55
  75. package/src/components/MediaBrowser/TextInputSearch/index.ts +0 -1
  76. package/src/components/MediaBrowser/UploadDropzone/UploadDropzone.tsx +0 -161
  77. package/src/components/MediaBrowser/UploadDropzone/index.ts +0 -1
  78. package/src/components/MediaBrowser/constants.ts +0 -5
  79. package/src/components/MediaBrowser/index.ts +0 -1
  80. package/src/components/MediaBrowser/styled/GlobalStyles/GlobalStyle.tsx +0 -38
  81. package/src/components/MediaBrowser/styled/GlobalStyles/index.ts +0 -1
  82. package/src/components/S3MediaTool.tsx +0 -12
  83. package/src/components/UI/ActionsMenu.tsx +0 -68
  84. package/src/components/UI/BrowserButton.tsx +0 -70
  85. package/src/components/UI/Button.tsx +0 -96
  86. package/src/components/UI/Dialog.tsx +0 -116
  87. package/src/components/UI/MenuItem.tsx +0 -191
  88. package/src/components/UI/index.ts +0 -5
  89. package/src/components/Upload/UploadDestinationPicker.tsx +0 -83
  90. package/src/components/Upload/UploadDropDownMenu.tsx +0 -176
  91. package/src/components/Upload/UploadFileTarget.tsx +0 -265
  92. package/src/components/Upload/UploadPlaceholder.tsx +0 -146
  93. package/src/components/Upload/UploadProgress.tsx +0 -95
  94. package/src/components/Upload/UploadTargetCard.tsx +0 -383
  95. package/src/components/Upload/UploadWarning.tsx +0 -46
  96. package/src/components/Upload/index.ts +0 -5
  97. package/src/components/index.ts +0 -6
  98. package/src/config/orders.ts +0 -28
  99. package/src/constants.ts +0 -45
  100. package/src/contexts/DropzoneDispatchContext.tsx +0 -33
  101. package/src/contexts/S3AssetSourceDispatchContext.tsx +0 -37
  102. package/src/contexts/S3MediaContext.tsx +0 -114
  103. package/src/contexts/S3MediaOptionsContext.tsx +0 -33
  104. package/src/contexts/index.ts +0 -4
  105. package/src/hooks/index.ts +0 -3
  106. package/src/hooks/useKeyPress.ts +0 -37
  107. package/src/hooks/usePortalPopoverProps.ts +0 -13
  108. package/src/hooks/useTypedSelector.ts +0 -5
  109. package/src/index.ts +0 -11
  110. package/src/lib/S3AssetSource/assets.ts +0 -208
  111. package/src/lib/S3AssetSource/createAssetSource.ts +0 -28
  112. package/src/lib/S3AssetSource/index.ts +0 -2
  113. package/src/lib/S3AssetSource/readExif.ts +0 -39
  114. package/src/lib/S3AssetSource/resolveUploader.ts +0 -20
  115. package/src/lib/S3AssetSource/types.ts +0 -9
  116. package/src/lib/S3AssetSource/uploadFile.ts +0 -36
  117. package/src/lib/S3AssetSource/uploadImage.ts +0 -63
  118. package/src/lib/S3AssetSource/uploader.ts +0 -192
  119. package/src/lib/S3AssetSource/uploaders.ts +0 -19
  120. package/src/lib/S3Client/S3Client.ts +0 -139
  121. package/src/lib/S3Client/assets/AssetsClient.ts +0 -251
  122. package/src/lib/S3Client/defineCreateClient.ts +0 -22
  123. package/src/lib/S3Client/http/errors.ts +0 -115
  124. package/src/lib/S3Client/http/fetchClient.ts +0 -109
  125. package/src/lib/S3Client/http/request.ts +0 -58
  126. package/src/lib/S3Client/index.ts +0 -10
  127. package/src/lib/S3Client/types.ts +0 -83
  128. package/src/lib/S3Client/validators.ts +0 -10
  129. package/src/lib/index.ts +0 -2
  130. package/src/modules/assets/index.ts +0 -660
  131. package/src/modules/dialog/index.ts +0 -85
  132. package/src/modules/index.ts +0 -8
  133. package/src/modules/notifications/index.ts +0 -127
  134. package/src/modules/rootEpic.ts +0 -57
  135. package/src/modules/rootReducer.ts +0 -29
  136. package/src/modules/search/index.ts +0 -23
  137. package/src/modules/selected/index.ts +0 -24
  138. package/src/modules/selectors.ts +0 -16
  139. package/src/modules/uploads/actions.ts +0 -14
  140. package/src/modules/uploads/index.ts +0 -274
  141. package/src/plugin.tsx +0 -38
  142. package/src/schema/index.ts +0 -4
  143. package/src/schema/s3File/components/InvalidFileWarning.tsx +0 -40
  144. package/src/schema/s3File/components/S3FileActionsMenu.tsx +0 -167
  145. package/src/schema/s3File/components/S3FileInput.tsx +0 -263
  146. package/src/schema/s3File/components/S3FileInputAsset.tsx +0 -171
  147. package/src/schema/s3File/components/S3FileInputAssetSource.tsx +0 -87
  148. package/src/schema/s3File/components/S3FileInputPreview.tsx +0 -215
  149. package/src/schema/s3File/components/S3FileSkeleton.tsx +0 -16
  150. package/src/schema/s3File/components/index.ts +0 -1
  151. package/src/schema/s3File/index.ts +0 -1
  152. package/src/schema/s3File/s3File.ts +0 -20
  153. package/src/schema/s3File/types.ts +0 -7
  154. package/src/schema/s3FileAsset/index.ts +0 -1
  155. package/src/schema/s3FileAsset/s3FileAsset.ts +0 -93
  156. package/src/schema/s3Image/components/InvalidImageWarning.tsx +0 -41
  157. package/src/schema/s3Image/components/S3ImageActionsMenu.tsx +0 -102
  158. package/src/schema/s3Image/components/S3ImageInput.tsx +0 -426
  159. package/src/schema/s3Image/components/S3ImageInputAsset.tsx +0 -116
  160. package/src/schema/s3Image/components/S3ImageInputAssetMenu.tsx +0 -207
  161. package/src/schema/s3Image/components/S3ImageInputAssetSource.tsx +0 -78
  162. package/src/schema/s3Image/components/S3ImageInputPreview.tsx +0 -85
  163. package/src/schema/s3Image/components/S3ImagePreview.styled.tsx +0 -46
  164. package/src/schema/s3Image/components/index.ts +0 -1
  165. package/src/schema/s3Image/index.ts +0 -1
  166. package/src/schema/s3Image/s3Image.ts +0 -20
  167. package/src/schema/s3Image/types.ts +0 -7
  168. package/src/schema/s3ImageAsset/index.ts +0 -1
  169. package/src/schema/s3ImageAsset/s3ImageAsset.ts +0 -99
  170. package/src/types/asset.ts +0 -73
  171. package/src/types/browser.ts +0 -80
  172. package/src/types/exif-component.d.ts +0 -4
  173. package/src/types/file.ts +0 -5
  174. package/src/types/index.ts +0 -7
  175. package/src/types/module.ts +0 -3
  176. package/src/types/plugin.ts +0 -22
  177. package/src/types/schema.ts +0 -96
  178. package/src/types/upload.ts +0 -40
  179. package/src/utils/__tests__/asset.test.ts +0 -45
  180. package/src/utils/__tests__/basic.test.ts +0 -45
  181. package/src/utils/__tests__/mediaBrowser.test.ts +0 -62
  182. package/src/utils/__tests__/observe.test.ts +0 -18
  183. package/src/utils/__tests__/resolve.test.ts +0 -51
  184. package/src/utils/__tests__/withMaxConcurrency.test.ts +0 -34
  185. package/src/utils/accepts.ts +0 -48
  186. package/src/utils/asset/index.ts +0 -1
  187. package/src/utils/asset/parse.ts +0 -38
  188. package/src/utils/asset/paths.ts +0 -60
  189. package/src/utils/file/hashFile.ts +0 -12
  190. package/src/utils/file/index.ts +0 -1
  191. package/src/utils/imageUrlToBlob.ts +0 -31
  192. package/src/utils/index.ts +0 -9
  193. package/src/utils/isObject.ts +0 -10
  194. package/src/utils/mediaBrowser/constructFilter.ts +0 -37
  195. package/src/utils/mediaBrowser/generatePreviewBlobUrl.ts +0 -53
  196. package/src/utils/mediaBrowser/getAssetResolution.ts +0 -5
  197. package/src/utils/mediaBrowser/getDocumentAssetIds.ts +0 -33
  198. package/src/utils/mediaBrowser/getSchemeColor.ts +0 -43
  199. package/src/utils/mediaBrowser/getUniqueDocuments.ts +0 -15
  200. package/src/utils/mediaBrowser/index.ts +0 -7
  201. package/src/utils/mediaBrowser/isSupportedAssetType.ts +0 -15
  202. package/src/utils/observe.ts +0 -23
  203. package/src/utils/resolve.ts +0 -266
  204. package/src/utils/upload.ts +0 -30
  205. package/src/utils/withMaxConcurrency.ts +0 -57
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../../src/hooks/useKeyPress.ts","../../src/hooks/useTypedSelector.ts","../../src/components/UI/MenuItem.tsx","../../src/components/UI/Button.tsx","../../src/components/UI/Dialog.tsx","../../src/components/File/FileInputButton.tsx","../../src/components/File/FileInputMenuItem.tsx","../../src/contexts/DropzoneDispatchContext.tsx","../../src/contexts/S3AssetSourceDispatchContext.tsx","../../src/utils/accepts.ts","../../src/utils/file/hashFile.ts","../../src/utils/imageUrlToBlob.ts","../../src/utils/mediaBrowser/constructFilter.ts","../../src/utils/mediaBrowser/generatePreviewBlobUrl.ts","../../src/utils/mediaBrowser/getAssetResolution.ts","../../src/utils/mediaBrowser/getSchemeColor.ts","../../src/utils/mediaBrowser/getUniqueDocuments.ts","../../src/constants.ts","../../src/utils/upload.ts","../../src/utils/withMaxConcurrency.ts","../../src/lib/S3AssetSource/assets.ts","../../src/lib/S3Client/http/errors.ts","../../src/lib/S3Client/http/fetchClient.ts","../../src/lib/S3Client/http/request.ts","../../src/lib/S3Client/defineCreateClient.ts","../../src/lib/S3Client/validators.ts","../../src/lib/S3Client/assets/AssetsClient.ts","../../src/lib/S3Client/S3Client.ts","../../src/lib/S3Client/index.ts","../../src/contexts/S3MediaContext.tsx","../../src/contexts/S3MediaOptionsContext.tsx","../../src/config/orders.ts","../../src/modules/search/index.ts","../../src/modules/uploads/actions.ts","../../src/modules/assets/index.ts","../../src/modules/dialog/index.ts","../../src/modules/uploads/index.ts","../../src/modules/notifications/index.ts","../../src/modules/rootEpic.ts","../../src/modules/selected/index.ts","../../src/modules/rootReducer.ts","../../src/modules/selectors.ts","../../src/components/MediaBrowser/FileIcon/FileIcon.tsx","../../src/components/MediaBrowser/Image/Image.tsx","../../src/components/MediaBrowser/constants.ts","../../src/components/MediaBrowser/CardAsset/CardAsset.tsx","../../src/components/MediaBrowser/CardUpload/CardUpload.tsx","../../src/components/MediaBrowser/AssetGridVirtualized/AssetGridVirtualized.tsx","../../src/components/MediaBrowser/TableHeaderItem/TableHeaderItem.tsx","../../src/components/MediaBrowser/TableHeader/TableHeader.tsx","../../src/components/MediaBrowser/TableRowAsset/TableRowAsset.tsx","../../src/components/MediaBrowser/styled/GlobalStyles/GlobalStyle.tsx","../../src/components/MediaBrowser/UploadDropzone/UploadDropzone.tsx","../../src/components/Upload/UploadDropDownMenu.tsx","../../src/components/Upload/UploadPlaceholder.tsx","../../src/components/Upload/UploadProgress.tsx","../../src/components/Upload/UploadDestinationPicker.tsx","../../src/components/Upload/UploadFileTarget.tsx","../../src/components/Upload/UploadTargetCard.tsx"],"sourcesContent":["import {isHotkey} from 'is-hotkey'\nimport {type RefObject, useCallback, useEffect, useRef} from 'react'\n\nexport const useKeyPress = (hotkey: string, onPress?: () => void): RefObject<boolean> => {\n const keyPressed = useRef(false)\n\n // If pressed key is our target key then set to true\n const downHandler = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey(hotkey, e)) {\n keyPressed.current = true\n if (onPress) {\n onPress()\n }\n }\n },\n [hotkey, onPress],\n )\n\n // If released key is our target key then set to false\n const upHandler = useCallback(() => {\n keyPressed.current = false\n }, [])\n\n // Add event listeners\n useEffect(() => {\n window.addEventListener('keydown', downHandler)\n window.addEventListener('keyup', upHandler)\n // Remove event listeners on cleanup\n return () => {\n window.removeEventListener('keydown', downHandler)\n window.removeEventListener('keyup', upHandler)\n }\n }, [downHandler, upHandler])\n\n return keyPressed\n}\n","import {type TypedUseSelectorHook, useSelector} from 'react-redux'\n\nimport type {RootReducerState} from '../types'\n\nexport const useTypedSelector: TypedUseSelectorHook<RootReducerState> = useSelector\n","import {\n Badge,\n Box,\n Flex,\n Hotkeys,\n MenuItem as UIMenuItem,\n type MenuItemProps as UIMenuItemProps,\n Stack,\n Text,\n Tooltip,\n type TooltipProps,\n} from '@sanity/ui'\nimport {\n forwardRef,\n type HTMLProps,\n isValidElement,\n type JSX,\n type ReactNode,\n type Ref,\n useMemo,\n} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\n\nconst FONT_SIZE = 1\nconst SUBTITLE_FONT_SIZE = 0\n\n/* Using px value here to make title/subtitles align with icon */\nconst SubtitleText = styled(Text)`\n margin-top: 2px;\n`\n\n/** @internal */\ntype MenuItemProps = Pick<\n UIMenuItemProps,\n 'as' | 'icon' | 'iconRight' | 'pressed' | 'selected' | 'tone' | 'hotkeys'\n> & {\n badgeText?: string\n /**\n * Usage of `children` is not supported, import `MenuItem` from `@sanity/ui` instead.\n */\n children?: undefined\n /**\n * Previews should be 25x25.\n */\n preview?: ReactNode\n /**\n * Optional render callback which receives menu item content.\n */\n renderMenuItem?: (menuItemContent: JSX.Element) => ReactNode\n text?: string\n tooltipProps?: TooltipProps | null\n /**\n * Optional subtitle prop for the menu item.\n * While not recommended, it is utilized for the workspace menu button.\n */\n __unstable_subtitle?: string\n /**\n * An optional property to adjust spacing in the preview between the icon and the text.\n * Not recommended, but is applied to the workspace menu button..\n */\n __unstable_space?: number\n}\n\nconst PreviewWrapper = styled(Box)`\n height: 25px;\n width: 25px;\n overflow: hidden;\n`\n\n/**\n * Customized Sanity UI <MenuItem> that restricts usage of `children` to encourage simple,\n * single line menu items.\n *\n * The workspace menu button needed a subtitle - hence, the StudioUI MenuIten now takes a subtitle prop.\n * This is only an escape hatch for the workspace menu button and is not recommended for general use.\n *\n * It also accepts a prop to attach tooltips as well as custom badges too.\n *\n * @internal\n */\nexport const MenuItem = forwardRef(function MenuItem(\n {\n badgeText,\n children: childrenProp,\n disabled,\n hotkeys,\n icon: Icon,\n iconRight: IconRight,\n preview = null,\n renderMenuItem,\n text,\n tooltipProps,\n __unstable_subtitle,\n __unstable_space,\n ...rest\n }: MenuItemProps &\n Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'selected' | 'tabIndex' | 'size'>,\n ref: Ref<HTMLDivElement>,\n) {\n const menuItemContent = useMemo(() => {\n return (\n <Flex align=\"center\" gap={2}>\n {preview && (\n <PreviewWrapper\n style={{opacity: disabled ? 0.25 : undefined}}\n paddingRight={__unstable_space ? 1 : 0}\n >\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n {preview}\n </Flex>\n </PreviewWrapper>\n )}\n {Icon && (\n <Box paddingRight={1}>\n <Text size={FONT_SIZE}>\n {isValidElement(Icon) && Icon}\n {isValidElementType(Icon) && <Icon />}\n </Text>\n </Box>\n )}\n {text && (\n <Stack flex={1} space={__unstable_subtitle ? 1 : 2}>\n <Text size={FONT_SIZE} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n {__unstable_subtitle && (\n <SubtitleText size={SUBTITLE_FONT_SIZE} textOverflow=\"ellipsis\" weight=\"medium\" muted>\n {__unstable_subtitle}\n </SubtitleText>\n )}\n </Stack>\n )}\n {(badgeText || hotkeys || IconRight) && (\n <Flex align=\"center\" gap={3} marginLeft={3}>\n {hotkeys && <Hotkeys keys={hotkeys} style={{marginTop: -4, marginBottom: -4}} />}\n\n {badgeText && (\n <Badge fontSize={0} style={{marginTop: -4, marginBottom: -4}}>\n {badgeText}\n </Badge>\n )}\n\n {IconRight && (\n <Text size={FONT_SIZE}>\n {isValidElement(IconRight) && IconRight}\n {isValidElementType(IconRight) && <IconRight />}\n </Text>\n )}\n </Flex>\n )}\n </Flex>\n )\n }, [\n preview,\n disabled,\n __unstable_space,\n Icon,\n text,\n __unstable_subtitle,\n badgeText,\n hotkeys,\n IconRight,\n ])\n\n const children = (\n <UIMenuItem\n disabled={disabled}\n paddingLeft={preview ? 1 : 3}\n paddingRight={3}\n paddingY={preview ? 1 : 3}\n ref={ref}\n {...rest}\n >\n {typeof childrenProp === 'undefined' && typeof renderMenuItem === 'function'\n ? renderMenuItem(menuItemContent)\n : menuItemContent}\n </UIMenuItem>\n )\n\n if (tooltipProps) {\n return (\n <Tooltip content={tooltipProps?.content} portal {...tooltipProps}>\n {/* This div is needed to make the tooltip work in disabled menu items */}\n <div>{children}</div>\n </Tooltip>\n )\n }\n\n return children\n})\n","import {\n Button as UIButton,\n type ButtonProps as UIButtonProps,\n Tooltip,\n type TooltipProps,\n} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, type HTMLProps} from 'react'\nimport {styled} from 'styled-components'\n\ntype BaseButtonProps = Pick<\n UIButtonProps,\n | 'as'\n | 'icon'\n | 'iconRight'\n | 'justify'\n | 'loading'\n | 'mode'\n | 'paddingY'\n | 'paddingLeft'\n | 'selected'\n | 'tone'\n | 'type'\n | 'width'\n> & {\n size?: 'default' | 'large'\n radius?: 'full'\n}\n\ntype ButtonWithText = {\n text: string\n tooltipProps?: TooltipProps | null\n icon?: UIButtonProps['icon']\n}\n\ntype IconButton = {\n text?: undefined\n icon?: UIButtonProps['icon']\n /**\n * When using a button with an icon, tooltipProps are required to enforce consistency in UI.\n */\n tooltipProps: TooltipProps | null\n}\n\n/** @internal */\nexport type ButtonProps = BaseButtonProps & (ButtonWithText | IconButton)\n\nconst LARGE_BUTTON_PROPS = {\n space: 3,\n padding: 3,\n}\nconst DEFAULT_BUTTON_PROPS = {\n space: 2,\n padding: 2,\n}\n\nconst TooltipButtonWrapper = styled.span`\n display: inline-flex;\n`\n\nexport const Button = forwardRef(function Button(\n {\n size = 'default',\n mode = 'default',\n paddingY,\n paddingLeft,\n tone = 'default',\n tooltipProps,\n ...rest\n }: ButtonProps & Omit<HTMLProps<HTMLButtonElement>, 'as' | 'size' | 'title'>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n const sizeProps = size === 'default' ? DEFAULT_BUTTON_PROPS : LARGE_BUTTON_PROPS\n\n const children = (\n <UIButton\n {...rest}\n {...sizeProps}\n paddingY={paddingY}\n paddingLeft={paddingLeft}\n ref={ref}\n mode={mode}\n tone={tone}\n />\n )\n\n if (tooltipProps) {\n return (\n <Tooltip content={tooltipProps?.content} portal {...tooltipProps}>\n {/* This span is needed to make the tooltip work in disabled buttons */}\n <TooltipButtonWrapper>{children}</TooltipButtonWrapper>\n </Tooltip>\n )\n }\n\n return children\n})\n","import {\n Box,\n type BoxHeight,\n Button as UIButton,\n Dialog as UIDialog,\n type DialogProps as UIDialogProps,\n Flex,\n Text,\n} from '@sanity/ui'\nimport {type ComponentProps, forwardRef, type HTMLProps, type ReactNode, type Ref} from 'react'\nimport {useTranslation} from 'sanity'\n\ntype DialogProps = Pick<\n UIDialogProps,\n | '__unstable_autoFocus'\n | '__unstable_hideCloseButton'\n | 'animate'\n | 'contentRef'\n | 'header'\n | 'id'\n | 'onActivate'\n | 'onClickOutside'\n | 'onClose'\n | 'portal'\n | 'position'\n | 'scheme'\n | 'width'\n> & {\n /**\n * Dialog body height.\n * Set this to 'fill' (i.e. 100%) if you want overflow body content to be contained\n * and not trigger dynamic border visibility.\n */\n bodyHeight?: BoxHeight\n children?: ReactNode\n zOffset?: number\n footer?: {\n cancelButton?: Omit<ComponentProps<typeof UIButton>, 'fontSize' | 'padding'>\n confirmButton?: Omit<ComponentProps<typeof UIButton>, 'fontSize' | 'padding'>\n /**\n * Description to be displayed side by side with the buttons.\n */\n description?: string\n }\n /**\n * If enabled, removes all default padding from dialog content.\n */\n padding?: boolean\n}\n\n/**\n * Customized Sanity UI <Dialog> that enforces an opinionated footer layout with a max of two buttons (confirm and cancel).\n *\n * @internal\n */\nexport const Dialog = forwardRef(function Dialog(\n {\n animate = true,\n bodyHeight,\n children,\n footer,\n padding = true,\n zOffset,\n ...props\n }: DialogProps & Pick<HTMLProps<HTMLDivElement>, 'onDragEnter' | 'onDrop'>,\n ref: Ref<HTMLDivElement>,\n) {\n const {t} = useTranslation()\n\n return (\n <UIDialog\n {...props}\n animate={animate}\n zOffset={zOffset}\n ref={ref}\n footer={\n (footer?.confirmButton || footer?.cancelButton) && (\n <Flex width=\"full\" gap={3} justify=\"flex-end\" padding={3} align=\"center\">\n {footer?.description && (\n <Box flex={1} paddingLeft={1}>\n <Text size={1} muted>\n {footer.description}\n </Text>\n </Box>\n )}\n {props.onClose && (\n <UIButton\n mode=\"bleed\"\n padding={2}\n text={t('common.dialog.cancel-button.text')}\n tone=\"default\"\n onClick={props.onClose}\n data-testid=\"cancel-button\"\n {...footer.cancelButton}\n />\n )}\n {footer.confirmButton && (\n <UIButton\n mode=\"default\"\n padding={2}\n text={t('common.dialog.confirm-button.text')}\n tone=\"critical\"\n data-testid=\"confirm-button\"\n {...footer.confirmButton}\n />\n )}\n </Flex>\n )\n }\n >\n <Box height={bodyHeight} padding={padding ? 4 : 0}>\n {children}\n </Box>\n </UIDialog>\n )\n})\n","import {type ChangeEvent, type FC, type HTMLProps, useCallback, useId} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../UI'\n\ntype FileInputButtonProps = ButtonProps & {\n accept?: string\n capture?: 'user' | 'environment'\n multiple?: boolean\n onSelect?: (files: File[]) => void\n disabled?: boolean\n}\n\nconst FileButton = styled(Button).attrs({forwardedAs: 'label'})(\n () => css`\n // The underlying file input is rendered as children within a Sanity UI <Button> component.\n // The below visibly hides it by targeting the input's parent <span> element, which is\n // added by the <Button> component.\n // TODO: refactor, avoid nth-child selector usage\n & > span:nth-child(2) {\n overflow: hidden;\n overflow: clip;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n `,\n)\n\nexport const FileInputButton: FC<\n FileInputButtonProps &\n Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>\n> = (props) => {\n const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n const id = `${idProp || ''}-${useId()}`\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (onSelect && event.target.files) {\n onSelect(Array.from(event.target.files))\n }\n },\n [onSelect],\n )\n\n return (\n <FileButton\n {...rest}\n space={2}\n padding={2}\n icon={icon}\n text={text}\n htmlFor={id}\n disabled={disabled}\n >\n <input\n accept={accept}\n capture={capture}\n id={id}\n multiple={multiple}\n onChange={handleChange}\n type=\"file\"\n value=\"\"\n disabled={disabled}\n />\n </FileButton>\n )\n}\n","import {type MenuItemProps} from '@sanity/ui'\nimport React, {type ChangeEvent, type FC, type HTMLProps, useCallback, useId} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuItem} from '../UI'\n\nconst FileMenuItem = styled(MenuItem)`\n position: relative;\n\n & input {\n overflow: hidden;\n overflow: clip;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n`\n\ntype FileInputMenuItemProps = Omit<MenuItemProps, 'onSelect'> & {\n accept?: string\n capture?: 'user' | 'environment'\n multiple?: boolean\n onSelect?: (files: File[]) => void\n disabled?: boolean\n}\n\nexport const FileInputMenuItem: FC<\n FileInputMenuItemProps &\n Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>\n> = (props) => {\n const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n\n const id = `${idProp || ''}-${useId()}`\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (onSelect && event.target.files) {\n onSelect(Array.from(event.target.files))\n }\n },\n [onSelect],\n )\n\n const renderMenuItem = useCallback(\n (item: React.JSX.Element) => (\n <div>\n {item}\n {/* Visibly hidden input */}\n <input\n accept={accept}\n capture={capture}\n id={id}\n multiple={multiple}\n onChange={handleChange}\n type=\"file\"\n value=\"\"\n disabled={disabled}\n />\n </div>\n ),\n [accept, capture, disabled, handleChange, id, multiple],\n )\n\n return (\n <FileMenuItem\n {...rest}\n htmlFor={id}\n disabled={disabled}\n icon={icon}\n text={text}\n renderMenuItem={renderMenuItem}\n />\n )\n}\n","import {createContext, type FC, type PropsWithChildren, useContext} from 'react'\n\ntype ContextProps = {\n open: () => void\n}\n\ntype DropzoneDispatchProviderProps = {\n open: () => void\n}\n\nconst DropzoneDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const DropzoneDispatchProvider: FC<PropsWithChildren<DropzoneDispatchProviderProps>> = (\n props,\n) => {\n const {children, open} = props\n\n const contextValue: ContextProps = {open}\n\n return (\n <DropzoneDispatchContext.Provider value={contextValue}>\n {children}\n </DropzoneDispatchContext.Provider>\n )\n}\n\nexport const useDropzoneActions = () => {\n const context = useContext(DropzoneDispatchContext)\n if (context === undefined) {\n throw new Error('useDropzoneActions must be used within an DropzoneDispatchProvider')\n }\n return context\n}\n","import {createContext, type FC, type PropsWithChildren, useContext} from 'react'\n\nimport type {S3AssetSourceComponentProps} from '../types'\n\ntype ContextProps = {\n onSelect?: S3AssetSourceComponentProps['onSelect']\n}\n\ntype AssetBrowserDispatchProviderProps = {\n onSelect?: S3AssetSourceComponentProps['onSelect']\n}\n\nconst AssetSourceDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const AssetBrowserDispatchProvider: FC<\n PropsWithChildren<AssetBrowserDispatchProviderProps>\n> = (props) => {\n const {children, onSelect} = props\n\n const contextValue: ContextProps = {\n onSelect,\n }\n\n return (\n <AssetSourceDispatchContext.Provider value={contextValue}>\n {children}\n </AssetSourceDispatchContext.Provider>\n )\n}\n\nexport const useAssetSourceActions = () => {\n const context = useContext(AssetSourceDispatchContext)\n if (context === undefined) {\n throw new Error('useAssetSourceActions must be used within an AssetSourceDispatchProvider')\n }\n return context\n}\n","import {type FileLike} from 'sanity'\n\n/**\n * Check if the provided file type should be accepted by the input with accept attribute.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept\n *\n * Inspired by https://github.com/enyo/dropzone (MIT) (c) 2021 Matias Meno\n * Based on https://github.com/react-dropzone/attr-accept (MIT) (c) 2015 Andrey Okonetchnikov\n *\n * @param file - https://developer.mozilla.org/en-US/docs/Web/API/File\n * @param acceptedFiles - List of accepted mime types (comma-separated string or array)\n * @returns True if file is accepted, false otherwise\n */\nexport function accepts(file: FileLike, acceptedFiles: string | string[]): boolean {\n if (!file || !acceptedFiles) {\n return true\n }\n\n const acceptedFilesArray = Array.isArray(acceptedFiles)\n ? acceptedFiles // eg `['image/png', 'image/jpeg']`\n : acceptedFiles.split(',') // eg `image/png,image/jpeg`\n\n const fileName = file.name || ''\n const mimeType = (file.type || '').toLowerCase()\n const baseMimeType = mimeType.replace(/\\/.*$/, '')\n\n return acceptedFilesArray.some((type) => {\n const validType = type.trim().toLowerCase()\n\n if (validType.charAt(0) === '.') {\n if (fileName) {\n return fileName.toLowerCase().endsWith(validType)\n }\n // If we do not have a valid fileName and validType is an extension, we\n // should fail open. This happens because when hovering a file, the browser\n // does not pass the name of the file but it will pass the file name when the\n // file is dropped on the file upload input\n return true\n }\n\n if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '')\n }\n\n return mimeType === validType\n })\n}\n","import {from, type Observable} from 'rxjs'\n\nexport const hashFile = (file: File): Observable<string> => {\n return from(\n file.arrayBuffer().then((buffer) => {\n return crypto.subtle.digest('SHA-1', buffer).then((hash) => {\n const hashArray = Array.from(new Uint8Array(hash))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n })\n }),\n )\n}\n","export function imageUrlToBlob(\n imageUrl: string,\n format = 'image/jpeg',\n quality = 1,\n): Promise<Blob | null> {\n if (imageUrl.match(/^webkit-fake-url:\\/\\//)) {\n return Promise.reject(new Error('Cannot read image contents from webkit fake url'))\n }\n\n return new Promise((resolve, reject) => {\n const loader = new Image()\n\n loader.crossOrigin = 'anonymous'\n loader.referrerPolicy = 'strict-origin-when-cross-origin'\n loader.onload = () => {\n const canvas = document.createElement('canvas')\n\n canvas.width = loader.width\n canvas.height = loader.height\n const ctx = canvas.getContext('2d')\n\n ctx?.drawImage(loader, 0, 0, canvas.width, canvas.height)\n try {\n canvas.toBlob(resolve, format, quality)\n } catch (error) {\n reject(error)\n }\n }\n loader.src = imageUrl\n })\n}\n","import groq from 'groq'\n\nimport type {S3AssetType} from '../../types'\n\nexport const constructFilter = ({\n assetTypes,\n searchQuery,\n}: {\n assetTypes: S3AssetType[]\n searchQuery?: string\n}): string => {\n // Fetch asset types depending on current context.\n // Either limit to a specific type (if being used as a custom asset source) or fetch both files and images (if being used as a tool)\n // Sanity will crash if you try and insert incompatible asset types into fields!\n const documentAssetTypes = assetTypes.map((type) => `${type}Asset`)\n\n const baseFilter = groq`\n _type in ${JSON.stringify(documentAssetTypes)} && !(_id in path(\"drafts.**\"))\n `\n\n // Join separate filter fragments\n const constructedQuery = [\n // Base filter\n baseFilter,\n // Search query (if present)\n // NOTE: Currently this only searches direct fields on sanity.fileAsset/sanity.imageAsset and NOT referenced tags\n // It's possible to add this by adding the following line to the searchQuery, but it's quite slow\n // references(*[_type == \"media.tag\" && name.current == \"${searchQuery.trim()}\"]._id)\n ...(searchQuery\n ? [\n groq`[_id, altText, assetId, creditLine, description, originalFilename, title, url] match '*${searchQuery.trim()}*'`,\n ]\n : []),\n ].join(' && ')\n\n return constructedQuery\n}\n","import {from, Observable, of} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nconst PREVIEW_WIDTH = 180 // px\n\nconst createBlob = (img: HTMLImageElement): Promise<Blob | null> => {\n return new Promise((resolve) => {\n const imageAspect = img.width / img.height\n\n // Create a canvas element which we'll use to generate a low resolution preview.\n // Ensure that the canvas is at least 1 pixel high as blob generation will fail otherwise.\n const canvas: HTMLCanvasElement = document.createElement('canvas')\n canvas.width = PREVIEW_WIDTH\n canvas.height = Math.max(PREVIEW_WIDTH / imageAspect, 1)\n\n // Fail silently if we're unable to generate a preview image.\n // This can often be the case when trying to render SVGs containing `<foreignObject>` elements.\n try {\n const ctx = canvas.getContext('2d')\n ctx?.drawImage(img, 0, 0, PREVIEW_WIDTH, PREVIEW_WIDTH / imageAspect)\n canvas.toBlob(resolve, 'image/jpeg')\n } catch (err) {\n console.warn(`Unable to generate preview image:`, err)\n }\n })\n}\n\nconst createImageEl = (file: File): Promise<HTMLImageElement> => {\n return new Promise((resolve) => {\n const blobUrlLarge = window.URL.createObjectURL(file)\n const img = new Image()\n img.onload = () => {\n window.URL.revokeObjectURL(blobUrlLarge)\n resolve(img)\n }\n img.src = blobUrlLarge\n })\n}\n\nconst generatePreviewBlobUrl = async (file: File): Promise<string> => {\n const imageEl = await createImageEl(file)\n const blob = await createBlob(imageEl)\n\n if (!blob) {\n throw Error('Unable to generate file Blob')\n }\n\n return window.URL.createObjectURL(blob)\n}\n\nexport const generatePreviewBlobUrl$ = (file: File): Observable<string> => {\n return of(null).pipe(mergeMap(() => from(generatePreviewBlobUrl(file))))\n}\n","import type {S3ImageAsset} from '../../types'\n\nexport const getAssetResolution = (asset: S3ImageAsset): string => {\n return `${asset.metadata.dimensions.width}x${asset.metadata.dimensions.height}px`\n}\n","import {hues} from '@sanity/color'\nimport {studioTheme, type ThemeColorSchemeKey} from '@sanity/ui'\n\nconst SCHEME_COLORS = {\n bg: {\n dark: hues.gray[950].hex,\n light: hues.gray[50].hex,\n },\n bg2: {\n dark: hues.gray[900].hex,\n light: hues.gray[100].hex,\n },\n inputEnabledBorder: {\n dark: studioTheme.color.dark.default.input.default.enabled.border,\n light: studioTheme.color.light.default.input.default.enabled.border,\n },\n inputHoveredBorder: {\n dark: studioTheme.color.dark.default.input.default.hovered.border,\n light: studioTheme.color.light.default.input.default.hovered.border,\n },\n mutedHoveredBg: {\n dark: studioTheme.color.dark.primary.muted.primary.hovered.bg,\n light: studioTheme.color.light.primary.muted.primary.hovered.bg,\n },\n mutedHoveredFg: {\n dark: studioTheme.color.dark.primary.muted.primary.hovered.fg,\n light: studioTheme.color.light.primary.muted.primary.hovered.fg,\n },\n mutedSelectedBg: {\n dark: studioTheme.color.dark.primary.muted.primary.selected.bg,\n light: studioTheme.color.light.primary.muted.primary.selected.bg,\n },\n spotBlue: {\n dark: studioTheme.color.dark.primary.spot.blue,\n light: studioTheme.color.light.primary.spot.blue,\n },\n}\n\ntype SchemeColorKey = keyof typeof SCHEME_COLORS\n\nexport function getSchemeColor(scheme: ThemeColorSchemeKey, colorKey: SchemeColorKey): string {\n return SCHEME_COLORS[colorKey]?.[scheme]\n}\n","import type {SanityDocument} from '@sanity/client'\n\nexport function getUniqueDocuments(documents: SanityDocument[]): SanityDocument[] {\n const draftIds = documents.reduce(\n (acc: string[], doc: SanityDocument) =>\n doc._id.startsWith('drafts.') ? acc.concat(doc._id.slice(7)) : acc,\n [],\n )\n\n const filteredDocuments: SanityDocument[] = documents.filter(\n (doc: SanityDocument) => !draftIds.includes(doc._id),\n )\n\n return filteredDocuments\n}\n","import {S3AssetType} from './types'\nimport type {Order} from './types/browser'\n\nexport const UPLOAD_STATUS_KEY = '_upload'\nexport const STALE_UPLOAD_MS = 1000 * 60 * 2\n\nexport const SUPPORTED_ASSET_TYPES = [S3AssetType.FILE, S3AssetType.IMAGE]\n\nexport const ORDER_OPTIONS: (Order | null)[] = [\n {\n direction: 'desc',\n field: '_createdAt',\n },\n {\n direction: 'asc',\n field: '_createdAt',\n },\n null,\n {\n direction: 'desc',\n field: '_updatedAt',\n },\n {\n direction: 'asc',\n field: '_updatedAt',\n },\n null,\n {\n direction: 'asc',\n field: 'originalFilename',\n },\n {\n direction: 'desc',\n field: 'originalFilename',\n },\n null,\n {\n direction: 'desc',\n field: 'size',\n },\n {\n direction: 'asc',\n field: 'size',\n },\n]\n","import {type FormPatch, set, unset, type UploadProgressEvent} from 'sanity'\n\nimport {UPLOAD_STATUS_KEY} from '../constants'\n\nconst UNSET_UPLOAD_PATCH = unset([UPLOAD_STATUS_KEY])\n\nexport function createUploadEvent(patches: FormPatch[] = []): UploadProgressEvent {\n return {\n type: 'uploadProgress',\n patches,\n }\n}\n\nexport const CLEANUP_EVENT = createUploadEvent([UNSET_UPLOAD_PATCH])\n\nexport const createInitialUploadPatches = (file: File) => {\n const now = new Date().toISOString()\n const value = {\n progress: 2,\n createdAt: now,\n updatedAt: now,\n file: {name: file.name, type: file.type},\n }\n\n return [set(value, [UPLOAD_STATUS_KEY])]\n}\n\nexport const createInitialUploadEvent = (file: File) => {\n return createUploadEvent(createInitialUploadPatches(file))\n}\n","// Takes a observable-returning function and returns a new function that limits on the number of\n// concurrent observables.\nimport {Observable, Subject, Subscription} from 'rxjs'\nimport {first, mergeMap} from 'rxjs/operators'\n\nconst DEFAULT_CONCURRENCY = 4\n\nfunction remove<T>(array: Array<T>, item: T): Array<T> {\n const index = array.indexOf(item)\n if (index > -1) {\n array.splice(index, 1)\n }\n return array\n}\n\nconst createThrottler = <T>(concurrency: number = DEFAULT_CONCURRENCY) => {\n const currentSubscriptions: Array<Subscription> = []\n const pendingObservables: Array<Observable<T>> = []\n const ready$ = new Subject<Observable<T>>()\n\n function request(observable: Observable<T>): Observable<T> {\n return new Observable((observer) => {\n if (currentSubscriptions.length >= concurrency) {\n return scheduleAndWait$(observable).subscribe(observer)\n }\n const subscription = observable.subscribe(observer)\n currentSubscriptions.push(subscription)\n return () => {\n remove(currentSubscriptions, subscription)\n remove(pendingObservables, observable)\n subscription.unsubscribe()\n while (pendingObservables.length > 0 && currentSubscriptions.length < concurrency) {\n // We check length > 0, so shift() will not return undefined here\n ready$.next(pendingObservables.shift()!)\n }\n }\n })\n }\n\n function scheduleAndWait$(observable: Observable<T>): Observable<T> {\n pendingObservables.push(observable)\n return ready$.asObservable().pipe(\n first((obs) => obs === observable),\n mergeMap((obs) => obs), // Unwrap Observable<Observable<T>> to Observable<T>\n )\n }\n\n return request\n}\n\nexport const withMaxConcurrency = <A extends any[], R>(\n func: (...args: A) => Observable<R>,\n concurrency: number = DEFAULT_CONCURRENCY,\n): ((...args: A) => Observable<R>) => {\n const throttler = createThrottler<R>(concurrency)\n return (...args: A) => throttler(func(...args))\n}\n","/* eslint-disable max-params */\nimport {Observable, of} from 'rxjs'\nimport {catchError, map, mergeMap} from 'rxjs/operators'\nimport {type SanityClient, type UploadOptions} from 'sanity'\n\nimport {\n type S3Asset,\n type S3AssetDocument,\n S3AssetType,\n type S3FileAsset,\n type S3ImageAsset,\n type UploadCompleteEvent,\n type UploadEvent,\n} from '../../types'\nimport {hashFile, withMaxConcurrency} from '../../utils'\nimport type {S3Client} from '../S3Client'\n\nconst MAX_CONCURRENT_UPLOADS = 4\n\ninterface ImageDimensions {\n width: number\n height: number\n}\n\ninterface UploadAssetParams {\n sanityClient: SanityClient\n s3Client: S3Client\n assetType: S3AssetType\n file: File\n options?: UploadOptions\n}\n\nconst fetchExistingAsset = (\n client: SanityClient,\n assetType: S3AssetType,\n id: string,\n): Observable<S3ImageAsset | S3FileAsset | null> =>\n client.observable.fetch(\n '*[_type == $documentType && _id == $id][0]',\n {documentType: `${assetType}Asset`, id},\n {tag: 's3Asset.find-duplicate'},\n )\n\nconst getImageDimensions = (file: File): Observable<ImageDimensions | null> => {\n if (!file.type.startsWith('image/')) {\n return of(null)\n }\n\n return new Observable<ImageDimensions>((subscriber) => {\n const img = new Image()\n const url = URL.createObjectURL(file)\n\n const cleanup = () => URL.revokeObjectURL(url)\n\n img.onload = () => {\n subscriber.next({width: img.width, height: img.height})\n subscriber.complete()\n cleanup()\n }\n\n img.onerror = () => {\n subscriber.error(new Error('Failed to load image'))\n cleanup()\n }\n\n img.src = url\n }).pipe(catchError(() => of(null)))\n}\n\nconst getFileExtension = (filename: string): string => filename.split('.').pop() ?? ''\n\nconst buildFileName = (\n fileId: string,\n extension: string,\n dimensions: ImageDimensions | null,\n): string =>\n dimensions\n ? `${fileId}-${dimensions.width}x${dimensions.height}.${extension}`\n : `${fileId}.${extension}`\n\nconst buildDocumentId = (\n assetType: S3AssetType,\n fileId: string,\n extension: string,\n dimensions: ImageDimensions | null,\n): string =>\n assetType === S3AssetType.IMAGE && dimensions\n ? `${S3AssetType.IMAGE}-${fileId}-${dimensions.width}x${dimensions.height}-${extension}`\n : `${S3AssetType.FILE}-${fileId}-${extension}`\n\nconst buildAssetDocument = (\n assetType: S3AssetType,\n fileId: string,\n file: File,\n documentId: string,\n hash: string | undefined,\n dimensions: ImageDimensions | null,\n storeOriginalFilename: boolean,\n): S3Asset => {\n const baseDocument = {\n _id: documentId,\n _type: assetType === S3AssetType.IMAGE ? 's3ImageAsset' : 's3FileAsset',\n assetId: fileId,\n originalFilename: storeOriginalFilename ? file.name : undefined,\n sha1hash: hash,\n extension: getFileExtension(file.name),\n mimeType: file.type,\n size: file.size,\n } as S3Asset\n\n if (assetType === S3AssetType.IMAGE && dimensions) {\n return {\n ...baseDocument,\n _type: 's3ImageAsset',\n metadata: {\n _type: 's3ImageMetadata',\n dimensions: {\n _type: 's3ImageDimensions',\n height: dimensions.height,\n width: dimensions.width,\n aspectRatio: dimensions.width / dimensions.height,\n },\n },\n }\n }\n\n return baseDocument\n}\n\nconst createCompleteEvent = ({\n asset,\n exists,\n}: {\n asset: S3AssetDocument\n exists?: boolean\n}): UploadCompleteEvent => ({\n type: 'complete',\n id: asset._id,\n asset,\n exists,\n})\n\n// Main Upload Function\nconst uploadAsset = ({\n file,\n assetType,\n s3Client,\n sanityClient,\n options = {},\n}: UploadAssetParams): Observable<UploadEvent> => {\n const {storeOriginalFilename = true} = options\n const extension = getFileExtension(file.name)\n\n return hashFile(file).pipe(\n mergeMap((hash) => {\n const dimensions$ = assetType === S3AssetType.IMAGE ? getImageDimensions(file) : of(null)\n\n return dimensions$.pipe(map((dimensions) => ({hash, dimensions})))\n }),\n\n mergeMap(({hash, dimensions}) => {\n // Check for existing asset if we have a hash\n if (hash) {\n const documentId = buildDocumentId(assetType, hash, extension, dimensions)\n\n return fetchExistingAsset(sanityClient, assetType, documentId).pipe(\n map((existing) => ({existing, hash, dimensions, documentId})),\n )\n }\n\n return of({existing: null, hash, dimensions, documentId: ''})\n }),\n\n mergeMap(({existing, hash, dimensions, documentId}) => {\n // Return early if asset already exists\n if (existing) {\n return of(createCompleteEvent({asset: existing, exists: true}))\n }\n\n const fileName = buildFileName(hash, extension, dimensions)\n\n // Upload to S3 and create Sanity document\n return s3Client.observable.assets.uploadAsset({assetType, file, fileName}).pipe(\n mergeMap((event) => {\n if (event.type !== 'response') {\n return of(event as UploadEvent)\n }\n\n const document = buildAssetDocument(\n assetType,\n hash,\n file,\n documentId,\n hash || undefined,\n dimensions,\n storeOriginalFilename,\n )\n\n return sanityClient.observable\n .create<S3Asset>(document)\n .pipe(map((asset) => createCompleteEvent({asset})))\n }),\n )\n }),\n )\n}\n\nexport const uploadS3Asset = withMaxConcurrency(uploadAsset, MAX_CONCURRENT_UPLOADS)\n","import {isObject} from '../../../utils/isObject'\nimport type {Any, ErrorProps} from '../types'\n\n/**\n * Shared properties for HTTP errors (eg both ClientError and ServerError)\n * Use `isHttpError` for type narrowing and accessing response properties.\n *\n * @public\n */\nexport interface HttpError {\n statusCode: number\n message: string\n response: {\n body: unknown\n url: string\n method: string\n headers: Record<string, string>\n statusCode: number\n statusMessage: string | null\n }\n}\n\n/** @public */\nexport class ClientError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 400\n responseBody: ErrorProps['responseBody']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\n/** @public */\nexport class ServerError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 500\n responseBody: ErrorProps['responseBody']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\nfunction extractErrorProps(res: Any): ErrorProps {\n const body = res.body\n const props = {\n response: res,\n statusCode: res.statusCode,\n responseBody: stringifyBody(body, res),\n message: '',\n details: undefined as Any,\n }\n\n // Fall back early if we didn't get a JSON object returned as expected\n if (!isObject(body)) {\n props.message = httpErrorMessage(res, body)\n return props\n }\n\n // Cast to any for property access after isObject check\n const bodyObj = body as any\n const error = bodyObj.error\n\n // API/Boom style errors ({statusCode, error, message})\n if (typeof error === 'string' && typeof bodyObj.message === 'string') {\n props.message = `${error} - ${bodyObj.message}`\n return props\n }\n\n // Content Lake errors with a `error` prop being an object\n if (typeof error !== 'object' || error === null) {\n if (typeof error === 'string') {\n props.message = error\n } else if (typeof bodyObj.message === 'string') {\n props.message = bodyObj.message\n } else {\n props.message = httpErrorMessage(res, body)\n }\n return props\n }\n\n if ('description' in error && typeof error.description === 'string') {\n // Query/database errors ({error: {description, other, arb, props}})\n props.message = error.description\n props.details = error\n return props\n }\n\n // Other, more arbitrary errors\n props.message = httpErrorMessage(res, body)\n return props\n}\n\nfunction httpErrorMessage(res: Any, body: unknown) {\n const details = typeof body === 'string' ? ` (${sliceWithEllipsis(body, 100)})` : ''\n const statusMessage = res.statusMessage ? ` ${res.statusMessage}` : ''\n return `${res.method}-request to ${res.url} resulted in HTTP ${res.statusCode}${statusMessage}${details}`\n}\n\nfunction stringifyBody(body: Any, res: Any) {\n const contentType = (res.headers['content-type'] || '').toLowerCase()\n const isJson = contentType.indexOf('application/json') !== -1\n return isJson ? JSON.stringify(body, null, 2) : body\n}\n\nfunction sliceWithEllipsis(str: string, max: number) {\n return str.length > max ? `${str.slice(0, max)}…` : str\n}\n","/* eslint-disable consistent-return */\nimport {Observable} from 'rxjs'\n\nimport type {Any, HttpRequestEvent} from '../types'\nimport {ClientError, ServerError} from './errors'\n\ninterface FetchOptions extends globalThis.RequestInit {\n url?: string\n timeout?: number\n retries?: number\n retryDelay?: number\n maxRetries?: number\n body?: any\n}\n\nexport const createFetchClient = () => {\n return (options: FetchOptions): Observable<HttpRequestEvent> => {\n return new Observable((subscriber) => {\n const controller = new AbortController()\n const signal = options.signal || controller.signal\n\n const execute = async (attemptNumber = 0) => {\n try {\n // Validate required fields\n if (!options.url) {\n throw new Error('URL is required for fetch request')\n }\n\n // Set timeout\n const timeoutMs = options.timeout || 5 * 60 * 1000\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n // Prepare fetch options\n const fetchOptions: globalThis.RequestInit = {\n method: options.method || 'GET',\n headers: {\n ...(options.headers || {}),\n },\n signal,\n }\n\n // Only add Content-Type for requests with body\n if (options.body) {\n fetchOptions.body = JSON.stringify(options.body)\n ;(fetchOptions.headers as Record<string, string>)['Content-Type'] = 'application/json'\n }\n\n // Make fetch request\n const response = await fetch(options.url, fetchOptions)\n\n clearTimeout(timeoutId)\n\n // Parse JSON response\n const body = await response.json().catch(() => ({}))\n\n // Emit response event\n const event: Any = {\n type: 'response',\n method: options.method || 'GET',\n statusCode: response.status,\n statusMessage: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n body,\n url: options.url,\n }\n\n // Handle errors\n if (response.status >= 500) {\n const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3\n const shouldRetry = attemptNumber < maxRetries && [502, 503].includes(response.status)\n\n if (shouldRetry) {\n const delay = (options.retryDelay || 1000) * Math.pow(2, attemptNumber)\n await new Promise((resolve) => setTimeout(resolve, delay))\n return execute(attemptNumber + 1)\n }\n\n throw new ServerError(event)\n } else if (response.status >= 400) {\n // Retry rate limiting\n const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3\n\n if (response.status === 429 && attemptNumber < maxRetries) {\n const delay = (options.retryDelay || 1000) * Math.pow(2, attemptNumber)\n await new Promise((resolve) => setTimeout(resolve, delay))\n return execute(attemptNumber + 1)\n }\n\n throw new ClientError(event)\n }\n\n subscriber.next(event)\n subscriber.complete()\n } catch (error) {\n if (error instanceof ClientError || error instanceof ServerError) {\n subscriber.error(error)\n } else {\n subscriber.error(new Error(`HTTP request failed: ${error}`))\n }\n }\n }\n\n execute()\n\n // Cleanup function\n return () => controller.abort()\n })\n }\n}\n","import {tap} from 'rxjs/operators'\n\nimport type {Requester, RequestOptions} from '../types'\nimport {createFetchClient} from './fetchClient'\n\ntype HttpRequestConfig = {\n ignoreWarnings?: string | RegExp | Array<string | RegExp>\n}\n\n/** @internal */\nexport function defineHttpRequest(config: HttpRequestConfig = {}): Requester {\n const fetchClient = createFetchClient()\n const seen: Record<string, boolean> = {}\n\n return (options: RequestOptions) => {\n return fetchClient({\n ...options,\n timeout: options.timeout || 5 * 60 * 1000,\n maxRetries: options.maxRetries === undefined ? 3 : options.maxRetries,\n retryDelay: 1000,\n }).pipe(\n tap((event) => {\n if (event.type === 'response') {\n const warn = event.headers['x-sanity-warning']\n if (!warn) return\n\n const warnings = Array.isArray(warn) ? warn : [warn]\n warnings.forEach((msg) => {\n if (!msg || seen[msg]) return\n\n // Skip warnings that match ignore patterns\n if (shouldIgnoreWarning(msg, config)) return\n\n seen[msg] = true\n console.warn(msg)\n })\n }\n }),\n )\n }\n}\n\nfunction shouldIgnoreWarning(message: string, config: HttpRequestConfig): boolean {\n if (!config.ignoreWarnings) return false\n\n const patterns = Array.isArray(config.ignoreWarnings)\n ? config.ignoreWarnings\n : [config.ignoreWarnings]\n\n return patterns.some((pattern) => {\n if (typeof pattern === 'string') {\n return message.includes(pattern)\n } else if (pattern instanceof RegExp) {\n return pattern.test(message)\n }\n return false\n })\n}\n","import {defineHttpRequest} from './http/request'\nimport type {HttpRequest, S3ClientConfig} from './types'\n\n/**\n * Create the `requester` and `createClient` exports\n * @internal\n */\nexport default function defineCreateClientExports<\n S3ClientType,\n ClientConfigType extends S3ClientConfig,\n>(ClassConstructor: new (httpRequest: HttpRequest, config: ClientConfigType) => S3ClientType) {\n const createClient = (config: ClientConfigType) => {\n const clientRequester = defineHttpRequest()\n\n return new ClassConstructor(\n (options, requester) => (requester || clientRequester)(options),\n config,\n )\n }\n\n return {createClient}\n}\n","import {SUPPORTED_ASSET_TYPES} from '../../constants'\nimport type {S3AssetType} from '../../types'\n\nexport const validateAssetType = (type: S3AssetType): void => {\n if (SUPPORTED_ASSET_TYPES.indexOf(type) === -1) {\n throw new Error(\n `Invalid asset type: ${type}. Must be one of ${SUPPORTED_ASSET_TYPES.join(', ')}`,\n )\n }\n}\n","import {lastValueFrom, Observable} from 'rxjs'\nimport {filter} from 'rxjs/operators'\n\nimport type {S3AssetType} from '../../../types'\nimport type {ObservableS3Client, S3Client} from '../S3Client'\nimport type {HttpRequestEvent, ResponseEvent} from '../types'\nimport * as validators from '../validators'\n\nconst upload = ({\n file,\n fileName,\n client,\n assetType,\n}: {\n file: File\n fileName: string\n client: S3Client | ObservableS3Client\n assetType: S3AssetType\n}): Observable<HttpRequestEvent> => {\n validators.validateAssetType(assetType)\n\n const config = client.config()\n\n const {bucketRegion, bucketKey, getSignedUrlEndpoint, secret} = config\n\n // Validate required config fields\n if (!bucketRegion) {\n throw new Error('S3Client: Missing required config field: bucketRegion')\n }\n if (!bucketKey) {\n throw new Error('S3Client: Missing required config field: bucketKey')\n }\n if (!getSignedUrlEndpoint) {\n throw new Error('S3Client: Missing required config field: getSignedUrlEndpoint')\n }\n if (!secret) {\n throw new Error('S3Client: Missing required config field: secret')\n }\n\n if (!fileName) {\n throw new Error('S3Client: filename is required in options')\n }\n\n const fileSize = file.size || 0\n const fileType = file.type\n\n return new Observable((subscriber) => {\n const executeUpload = async () => {\n try {\n // Stage 1: Get Signed URL (0-10%)\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: 5,\n loaded: 0,\n total: fileSize,\n lengthComputable: true,\n })\n\n if (!getSignedUrlEndpoint) {\n throw new Error('getSignedUrlEndpoint is not defined')\n }\n\n // Fetch signed URL\n const signedUrlResponse = await fetch(getSignedUrlEndpoint, {\n method: 'POST',\n body: JSON.stringify({\n secret,\n fileName,\n bucketKey,\n bucketRegion,\n contentType: file.type,\n }),\n headers: {'Content-Type': 'application/json'},\n mode: 'cors',\n })\n\n const {url: signedUrl} = (await signedUrlResponse.json()) as {url: string}\n\n if (!signedUrl || !URL.canParse(signedUrl)) {\n throw new Error('Invalid signed URL received from endpoint')\n }\n\n // Stage 2: Upload to S3 (10-100%)\n const xhr = new XMLHttpRequest()\n\n xhr.upload.onprogress = (event) => {\n if (event.lengthComputable) {\n // Map 0-100% upload progress to 10-100% overall progress\n const uploadPercent = (event.loaded / event.total) * 100\n const overallPercent = 10 + uploadPercent * 0.9\n\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: overallPercent,\n loaded: event.loaded,\n total: event.total,\n lengthComputable: true,\n })\n }\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n // Upload successful, emit final progress\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: 100,\n loaded: fileSize,\n total: fileSize,\n lengthComputable: true,\n })\n\n // Emit response event\n subscriber.next({\n type: 'response',\n method: 'PUT',\n statusCode: xhr.status,\n statusMessage: xhr.statusText,\n headers: {},\n })\n\n subscriber.complete()\n } else {\n subscriber.error(new Error(`S3 upload failed: ${xhr.status} ${xhr.statusText}`))\n }\n }\n\n xhr.onerror = () => {\n subscriber.error(new Error('S3 upload failed: Network error'))\n }\n\n xhr.open('PUT', signedUrl)\n xhr.setRequestHeader('Content-Type', fileType)\n xhr.send(file)\n } catch (error) {\n subscriber.error(error)\n }\n }\n\n executeUpload()\n })\n}\n\nconst deleteAsset = ({\n fileName,\n client,\n}: {\n fileName: string\n client: S3Client | ObservableS3Client\n}): Observable<HttpRequestEvent> => {\n const config = client.config()\n\n const {deleteEndpoint, secret, bucketKey, bucketRegion} = config\n\n if (!deleteEndpoint) {\n throw new Error('S3Client: Missing required config field: deleteEndpoint')\n }\n\n if (!fileName) {\n throw new Error('S3Client: fileKey is required in options')\n }\n\n return new Observable((subscriber) => {\n const executeDelete = async () => {\n try {\n const response = await fetch(deleteEndpoint, {\n method: 'POST',\n body: JSON.stringify({\n fileKey: fileName,\n secret,\n bucketKey,\n bucketRegion,\n }),\n headers: {'Content-Type': 'application/json'},\n mode: 'cors',\n })\n\n if (!response.ok) {\n throw new Error(`S3 delete failed: ${response.status} ${response.statusText}`)\n }\n\n subscriber.next({\n type: 'response',\n method: 'POST',\n statusCode: response.status,\n statusMessage: response.statusText,\n headers: {},\n })\n\n subscriber.complete()\n } catch (error) {\n subscriber.error(error)\n }\n }\n\n executeDelete()\n })\n}\n\nexport class ObservableAssetsClient {\n #client: ObservableS3Client\n constructor(client: ObservableS3Client) {\n this.#client = client\n }\n\n uploadAsset({\n assetType,\n file,\n fileName,\n }: {\n file: File\n fileName: string\n assetType: S3AssetType\n }): Observable<HttpRequestEvent> {\n return upload({client: this.#client, file, fileName, assetType})\n }\n\n deleteAsset({fileName}: {fileName: string}): Observable<HttpRequestEvent> {\n return deleteAsset({client: this.#client, fileName})\n }\n}\n\nexport class AssetsClient {\n #client: S3Client\n constructor(client: S3Client) {\n this.#client = client\n }\n\n uploadAsset({\n assetType,\n file,\n fileName,\n }: {\n assetType: S3AssetType\n file: File\n fileName: string\n }): Promise<ResponseEvent> {\n const observable = upload({client: this.#client, assetType, file, fileName})\n\n return lastValueFrom(observable.pipe(filter((event) => event.type === 'response')))\n }\n\n deleteAsset({fileName}: {fileName: string}): Promise<ResponseEvent> {\n const observable = deleteAsset({client: this.#client, fileName})\n\n return lastValueFrom(observable.pipe(filter((event) => event.type === 'response')))\n }\n}\n","import {AssetsClient, ObservableAssetsClient} from './assets/AssetsClient'\nimport type {HttpRequest, InitializedClientConfig, S3ClientConfig} from './types'\n\n/** @public */\nexport class ObservableS3Client {\n assets: ObservableAssetsClient\n\n /**\n * Private properties\n */\n #clientConfig: InitializedClientConfig\n #httpRequest: HttpRequest\n\n constructor(httpRequest: HttpRequest, config: S3ClientConfig) {\n // Initialize with empty object cast to InitializedClientConfig\n this.#clientConfig = {} as InitializedClientConfig\n this.config(config)\n\n this.#httpRequest = httpRequest\n\n this.assets = new ObservableAssetsClient(this)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): ObservableS3Client {\n return new ObservableS3Client(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<S3ClientConfig>): this\n config(newConfig?: Partial<S3ClientConfig>): InitializedClientConfig | this {\n if (newConfig === undefined) {\n return {...this.#clientConfig}\n }\n\n // Merge config properly\n this.#clientConfig = {\n ...this.#clientConfig,\n ...newConfig,\n } as InitializedClientConfig\n\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<S3ClientConfig>): ObservableS3Client {\n const thisConfig = this.config()\n return new ObservableS3Client(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n })\n }\n}\n\n/** @public */\nexport class S3Client {\n assets: AssetsClient\n\n /**\n * Observable version of the Sanity client, with the same configuration as the promise-based one\n */\n observable: ObservableS3Client\n\n /**\n * Private properties\n */\n #clientConfig: InitializedClientConfig\n #httpRequest: HttpRequest\n\n constructor(httpRequest: HttpRequest, config: S3ClientConfig) {\n // Initialize with empty object cast to InitializedClientConfig\n this.#clientConfig = {} as InitializedClientConfig\n this.config(config)\n\n this.#httpRequest = httpRequest\n\n this.assets = new AssetsClient(this)\n\n this.observable = new ObservableS3Client(httpRequest, config)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): S3Client {\n return new S3Client(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<S3ClientConfig>): this\n config(newConfig?: Partial<S3ClientConfig>): InitializedClientConfig | this {\n if (newConfig === undefined) {\n return {...this.#clientConfig}\n }\n\n if (this.observable) {\n this.observable.config(newConfig)\n }\n\n // Merge config properly\n this.#clientConfig = {\n ...this.#clientConfig,\n ...newConfig,\n } as InitializedClientConfig\n\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<S3ClientConfig>): S3Client {\n const thisConfig = this.config()\n return new S3Client(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n })\n }\n}\n","import defineCreateClientExports from './defineCreateClient'\nimport {S3Client} from './S3Client'\nimport type {S3ClientConfig} from './types'\n\nexport {S3Client} from './S3Client'\n\nconst exp = defineCreateClientExports<S3Client, S3ClientConfig>(S3Client)\n\n/** @public */\nexport const createS3Client = exp.createClient\n","import {SettingsView, useSecrets} from '@sanity/studio-secrets'\nimport {createContext, type FC, PropsWithChildren, useCallback, useContext, useState} from 'react'\n\nimport {createS3Client, type S3Client} from '../lib'\nimport {S3AssetType, type S3Credentials} from '../types'\nimport {buildS3FileUrl, buildS3ImageUrl} from '../utils/asset/paths'\n\ntype IS3MediaContext = {\n s3Client: S3Client\n buildAssetUrl: ({assetId, assetType}: {assetId: string; assetType: S3AssetType}) => string\n}\n\nconst credentialsNamespace = 's3MediaCredentials'\n\nconst pluginConfigKeys = [\n {\n key: 'bucketRegion',\n title: 'Bucket Region',\n },\n {\n key: 'bucketKey',\n title: 'Bucket Key',\n },\n {key: 'getSignedUrlEndpoint', title: 'getSignedUrlEndpoint', description: 'test'},\n {key: 'deleteEndpoint', title: 'deleteEndpoint'},\n {key: 'cloudfrontDomain', title: 'cloudfrontDomain'},\n {key: 'secret', title: 'secret'},\n]\n\nconst S3MediaContext = createContext<IS3MediaContext>({} as IS3MediaContext)\n\nexport const S3MediaContextProvider: FC<PropsWithChildren> = (props) => {\n const {children} = props\n\n const [isCredentialsDialogDismissed, setIsCredentialsDialogDismissed] = useState(false)\n const {secrets: credentials, loading: isCredentialsLoading} =\n useSecrets<S3Credentials>(credentialsNamespace)\n\n const {bucketRegion, bucketKey, getSignedUrlEndpoint, deleteEndpoint, cloudfrontDomain, secret} =\n credentials || {}\n\n const s3AssetBaseUrl =\n cloudfrontDomain || (bucketRegion && bucketKey)\n ? cloudfrontDomain || `https://s3.${bucketRegion}.amazonaws.com/${bucketKey}`\n : null\n\n const isCredentialsDialogOpen =\n !isCredentialsDialogDismissed &&\n !isCredentialsLoading &&\n (!credentials ||\n !credentials.bucketKey ||\n !credentials.bucketRegion ||\n !credentials.getSignedUrlEndpoint ||\n !credentials.secret)\n\n const s3Client = createS3Client({\n bucketRegion,\n bucketKey,\n getSignedUrlEndpoint,\n deleteEndpoint,\n cloudfrontDomain,\n secret,\n })\n\n const buildAssetUrl = useCallback(\n ({assetId, assetType}: {assetId: string; assetType: S3AssetType}) => {\n if (!assetId || !assetType) {\n throw new Error('')\n }\n\n if (!s3AssetBaseUrl) {\n return ''\n }\n\n if (assetType === S3AssetType.IMAGE) {\n return buildS3ImageUrl(assetId, {baseUrl: s3AssetBaseUrl})\n }\n\n if (assetType === S3AssetType.FILE) {\n return buildS3FileUrl(assetId, {baseUrl: s3AssetBaseUrl})\n }\n\n throw new Error('')\n },\n [s3AssetBaseUrl],\n )\n\n return (\n <S3MediaContext.Provider value={{s3Client, buildAssetUrl}}>\n {children}\n\n {isCredentialsDialogOpen && !isCredentialsLoading ? (\n <SettingsView\n title=\"S3 Media Credentials\"\n namespace={credentialsNamespace}\n keys={pluginConfigKeys}\n onClose={() => {\n setIsCredentialsDialogDismissed(true)\n }}\n />\n ) : null}\n </S3MediaContext.Provider>\n )\n}\n\nexport const useS3MediaContext = (): IS3MediaContext => {\n const context = useContext(S3MediaContext)\n\n if (!context) {\n throw new Error('useS3MediaContext must be used within a S3MediaContextProvider')\n }\n\n return context\n}\n","import {createContext, type FC, PropsWithChildren, useContext} from 'react'\n\nimport type {S3MediaPluginOptions} from '../types'\n\ntype S3MediaOptionsContextProviderProps = {options: S3MediaPluginOptions | void}\n\nconst S3MediaOptionsContext = createContext<S3MediaPluginOptions>({\n directUploads: true,\n})\n\nexport const S3MediaOptionsContextProvider: FC<\n PropsWithChildren<S3MediaOptionsContextProviderProps>\n> = (props) => {\n const {options, children} = props\n\n const {directUploads = true, ...rest} = options || {}\n\n return (\n <S3MediaOptionsContext.Provider value={{...rest, directUploads}}>\n {children}\n </S3MediaOptionsContext.Provider>\n )\n}\n\nexport const useS3MediaOptionsContext = (): S3MediaPluginOptions => {\n const context = useContext(S3MediaOptionsContext)\n\n if (!context) {\n throw new Error('useS3MediaOptionsContext must be used within a S3MediaOptionsContextProvider')\n }\n\n return context\n}\n","import type {Order} from '../types'\n\nconst ORDER_DICTIONARY: Record<string, {asc: string; desc: string}> = {\n _createdAt: {\n asc: 'Last created: Oldest first',\n desc: 'Last created: Newest first',\n },\n _updatedAt: {\n asc: 'Last updated: Oldest first',\n desc: 'Last updated: Newest first',\n },\n mimeType: {\n asc: 'MIME type: A to Z',\n desc: 'MIME type: Z to A',\n },\n originalFilename: {\n asc: 'File name: A to Z',\n desc: 'File name: Z to A',\n },\n size: {\n asc: 'File size: Smallest first',\n desc: 'File size: Largest first',\n },\n}\n\nexport const getOrderTitle = (order: Order): string => {\n return ORDER_DICTIONARY[order.field][order.direction]\n}\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\n\ntype SearchState = {\n query: string\n}\n\nconst initialState = {\n query: '',\n} as SearchState\n\nconst searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n querySet(state, action: PayloadAction<{searchQuery: string}>) {\n state.query = action.payload?.searchQuery\n },\n },\n})\n\nexport const searchActions = {...searchSlice.actions}\n\nexport const searchReducer = searchSlice.reducer\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {S3AssetDocument} from '../../types'\n\nexport const UPLOADS_ACTIONS = {\n uploadComplete: createAction(\n 'uploads/uploadComplete',\n function prepare({asset}: {asset: S3AssetDocument}) {\n return {\n payload: {asset},\n }\n },\n ),\n}\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError} from '@sanity/client'\nimport groq from 'groq'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {concat, EMPTY, forkJoin, from, of} from 'rxjs'\nimport {\n bufferTime,\n catchError,\n debounceTime,\n filter,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators'\n\nimport {getOrderTitle} from '../../config/orders'\nimport {ORDER_OPTIONS} from '../../constants'\nimport type {AssetItem, BrowserView, Epic, HttpError, Order,RootReducerState, S3Asset, S3AssetType} from '../../types'\nimport {\n buildS3FilePath,\n buildS3ImagePath,\n constructFilter,\n isS3FileAsset,\n isS3ImageAsset,\n} from '../../utils'\nimport {searchActions} from '../search'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\n\ntype ItemError = {\n description: string\n id: string\n referencingIDs: string[]\n type: string // 'documentHasExistingReferencesError'\n}\n\nconst buildFileName = (asset: S3Asset): string => {\n if (isS3ImageAsset(asset)) {\n return buildS3ImagePath(asset._id)\n }\n\n if (isS3FileAsset(asset)) {\n return buildS3FilePath(asset._id)\n }\n\n throw new Error('Unsupported asset type')\n}\n\ntype AssetsReducerState = {\n allIds: string[]\n assetTypes: S3AssetType[]\n byIds: Record<string, AssetItem>\n fetchCount: number\n fetching: boolean\n fetchingError?: HttpError\n lastPicked?: string\n order: Order\n pageIndex: number\n pageSize: number\n view: BrowserView\n // totalCount: number\n}\n\nconst defaultOrder = ORDER_OPTIONS[0] as Order\n\nexport const initialState = {\n allIds: [],\n assetTypes: [],\n byIds: {},\n fetchCount: -1,\n fetching: false,\n fetchingError: undefined,\n lastPicked: undefined,\n order: {\n direction: defaultOrder.direction,\n field: defaultOrder.field,\n title: getOrderTitle(defaultOrder),\n },\n pageIndex: 0,\n pageSize: 100,\n // totalCount: -1,\n view: 'grid',\n} as AssetsReducerState\n\nconst assetsSlice = createSlice({\n name: 'assets',\n initialState,\n extraReducers: (builder) => {\n builder //\n .addCase(UPLOADS_ACTIONS.uploadComplete, (state, action) => {\n const {asset} = action.payload\n\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset as S3Asset,\n picked: false,\n updating: false,\n }\n })\n },\n reducers: {\n // Clear asset order\n clear(state) {\n state.allIds = []\n },\n // Remove assets and update page index\n deleteComplete(state, action: PayloadAction<{assetIds: string[]}>) {\n const {assetIds} = action.payload\n\n assetIds?.forEach((id) => {\n const deleteIndex = state.allIds.indexOf(id)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[id]\n })\n\n state.pageIndex = Math.floor(state.allIds.length / state.pageSize) - 1\n },\n deleteError(state, action: PayloadAction<{assetIds: string[]; error: ClientError}>) {\n const {assetIds, error} = action.payload\n\n const itemErrors: ItemError[] = error?.response?.body?.error?.items?.map(\n (item: any) => item.error,\n )\n\n assetIds?.forEach((id) => {\n state.byIds[id].updating = false\n })\n itemErrors?.forEach((item) => {\n state.byIds[item.id].error = item.description\n })\n },\n deleteRequest(state, action: PayloadAction<{assets: S3Asset[]; closeDialogId?: string}>) {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset?._id].updating = true\n })\n\n Object.keys(state.byIds).forEach((key) => {\n delete state.byIds[key].error\n })\n },\n deleteSkipped(state, action: PayloadAction<{assetIds: string[]; reason: string}>) {\n const {assetIds, reason} = action.payload\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]) {\n state.byIds[assetId].updating = false\n state.byIds[assetId].error = reason\n }\n })\n },\n fetchComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const assets = action.payload?.assets || []\n\n if (assets) {\n assets.forEach((asset) => {\n if (!state.allIds.includes(asset._id)) {\n state.allIds.push(asset._id)\n }\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset,\n picked: false,\n updating: false,\n }\n })\n }\n\n state.fetching = false\n state.fetchCount = assets.length || 0\n delete state.fetchingError\n },\n fetchError(state, action: PayloadAction<HttpError>) {\n const error = action.payload\n state.fetching = false\n state.fetchingError = error\n },\n fetchRequest: {\n reducer: (state, _action: PayloadAction<{params: Record<string, any>; query: string}>) => {\n state.fetching = true\n delete state.fetchingError\n },\n prepare: ({\n params = {},\n queryFilter,\n selector = ``,\n sort = groq`order(_updatedAt desc)`,\n }: {\n params?: Record<string, any>\n queryFilter: string\n replace?: boolean\n selector?: string\n sort?: string\n }) => {\n const pipe = sort || selector ? '|' : ''\n\n // Construct query\n const query = groq`\n {\n \"items\": *[${queryFilter}] {\n _id,\n _type,\n _createdAt,\n _updatedAt,\n extension,\n metadata {\n dimensions\n },\n mimeType,\n opt {\n media\n },\n originalFilename,\n size,\n source {\n name,\n id,\n url,\n },\n title,\n url\n } ${pipe} ${sort} ${selector},\n }\n `\n\n return {payload: {params, query}}\n },\n },\n insertUploads(state, action: PayloadAction<{results: Record<string, string | null>}>) {\n const {results} = action.payload\n\n Object.entries(results).forEach(([hash, assetId]) => {\n if (assetId && !state.allIds.includes(hash)) {\n state.allIds.push(assetId)\n }\n })\n },\n listenerCreateQueue(_state, _action: PayloadAction<{asset: S3Asset}>) {\n //\n },\n listenerCreateQueueComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const {assets} = action.payload\n assets?.forEach((asset) => {\n if (state.byIds[asset?._id]?.asset) {\n state.byIds[asset._id].asset = asset\n }\n })\n },\n listenerDeleteQueue(_state, _action: PayloadAction<{assetId: string}>) {\n //\n },\n listenerDeleteQueueComplete(state, action: PayloadAction<{assetIds: string[]}>) {\n const {assetIds} = action.payload\n assetIds?.forEach((assetId) => {\n const deleteIndex = state.allIds.indexOf(assetId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[assetId]\n })\n },\n listenerUpdateQueue(_state, _action: PayloadAction<{asset: S3Asset}>) {\n //\n },\n listenerUpdateQueueComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const {assets} = action.payload\n assets?.forEach((asset) => {\n if (state.byIds[asset?._id]?.asset) {\n state.byIds[asset._id].asset = asset\n }\n })\n },\n loadNextPage() {\n //\n },\n loadPageIndex(state, action: PayloadAction<{pageIndex: number}>) {\n //\n state.pageIndex = action.payload.pageIndex\n },\n orderSet(state, action: PayloadAction<{order: Order}>) {\n state.order = action.payload?.order\n state.pageIndex = 0\n },\n pick(state, action: PayloadAction<{assetId: string; picked: boolean}>) {\n const {assetId, picked} = action.payload\n\n state.byIds[assetId].picked = picked\n state.lastPicked = picked ? assetId : undefined\n },\n pickAll(state) {\n state.allIds.forEach((id) => {\n state.byIds[id].picked = true\n })\n },\n pickClear(state) {\n state.lastPicked = undefined\n Object.values(state.byIds).forEach((asset) => {\n state.byIds[asset.asset._id].picked = false\n })\n },\n pickRange(state, action: PayloadAction<{endId: string; startId: string}>) {\n const startIndex = state.allIds.findIndex((id) => id === action.payload.startId)\n const endIndex = state.allIds.findIndex((id) => id === action.payload.endId)\n\n // Sort numerically, ascending order\n const indices = [startIndex, endIndex].sort((a, b) => a - b)\n\n state.allIds.slice(indices[0], indices[1] + 1).forEach((key) => {\n state.byIds[key].picked = true\n })\n state.lastPicked = state.allIds[endIndex]\n },\n sort(state) {\n state.allIds.sort((a, b) => {\n const tagA = state.byIds[a].asset[state.order.field] as number\n const tagB = state.byIds[b].asset[state.order.field] as number\n\n if (tagA < tagB) {\n return state.order.direction === 'asc' ? -1 : 1\n } else if (tagA > tagB) {\n return state.order.direction === 'asc' ? 1 : -1\n }\n return 0\n })\n },\n updateComplete(state, action: PayloadAction<{asset: S3Asset; closeDialogId?: string}>) {\n const {asset} = action.payload\n state.byIds[asset._id].updating = false\n state.byIds[asset._id].asset = asset\n },\n updateError(state, action: PayloadAction<{asset: S3Asset; error: HttpError}>) {\n const {asset, error} = action.payload\n\n const assetId = asset?._id\n state.byIds[assetId].error = error.message\n state.byIds[assetId].updating = false\n },\n updateRequest(\n state,\n action: PayloadAction<{\n asset: S3Asset\n closeDialogId?: string\n formData: Record<string, any>\n }>,\n ) {\n const assetId = action.payload?.asset?._id\n state.byIds[assetId].updating = true\n },\n viewSet(state, action: PayloadAction<{view: BrowserView}>) {\n state.view = action.payload?.view\n },\n },\n})\n\nexport const assetsActions = {...assetsSlice.actions}\n\n// Epics\n\nexport const assetsDeleteEpic: Epic = (action$, _state$, {sanityClient, s3Client}) =>\n action$.pipe(\n filter(assetsActions.deleteRequest.match),\n mergeMap((action) => {\n const {assets} = action.payload\n const assetIds = assets.map((asset) => asset._id)\n\n return sanityClient.observable\n .fetch<\n {_id: string; referenceCount: number}[]\n >(groq`*[_id in $assetIds]{_id, \"referenceCount\": count(*[references(^._id)])}`, {assetIds})\n .pipe(\n mergeMap((referenceResults) => {\n const referenceMap = new Map(\n referenceResults.map((item) => [item._id, item.referenceCount]),\n )\n\n const blockedAssets = assets.filter((asset) => (referenceMap.get(asset._id) || 0) > 0)\n const deletableAssets = assets.filter(\n (asset) => (referenceMap.get(asset._id) || 0) === 0,\n )\n\n const blockedIds = blockedAssets.map((asset) => asset._id)\n const deletableIds = deletableAssets.map((asset) => asset._id)\n\n const blockedActions$ = blockedIds.length\n ? of(\n assetsActions.deleteSkipped({\n assetIds: blockedIds,\n reason: 'Asset has references and cannot be deleted.',\n }),\n )\n : EMPTY\n\n if (deletableAssets.length === 0) {\n return blockedActions$\n }\n\n const deleteRequests = deletableAssets.map((asset) =>\n s3Client.observable.assets.deleteAsset({fileName: buildFileName(asset)}),\n )\n\n const deleteFlow$ = forkJoin(deleteRequests).pipe(\n mergeMap(() =>\n sanityClient.observable.delete({\n query: groq`*[_id in ${JSON.stringify(deletableIds)}]`,\n }),\n ),\n mergeMap(() => of(assetsActions.deleteComplete({assetIds: deletableIds}))),\n catchError((error: ClientError) => {\n return of(assetsActions.deleteError({assetIds: deletableIds, error}))\n }),\n )\n\n return blockedIds.length ? concat(blockedActions$, deleteFlow$) : deleteFlow$\n }),\n catchError((error: ClientError) => of(assetsActions.deleteError({assetIds, error}))),\n )\n }),\n )\n\nexport const assetsFetchEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(assetsActions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action]) => {\n const params = action.payload?.params\n const query = action.payload?.query\n\n return of(action).pipe(\n mergeMap(() =>\n sanityClient.observable.fetch<{\n items: S3Asset[]\n }>(query, params),\n ),\n mergeMap((result) => {\n const {\n items,\n // totalCount\n } = result\n return of(assetsActions.fetchComplete({assets: items}))\n }),\n catchError((error: ClientError) =>\n of(\n assetsActions.fetchError({\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n }),\n ),\n ),\n )\n }),\n )\n\nexport const assetsFetchPageIndexEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.loadPageIndex.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const pageSize = state.assets.pageSize\n const start = action.payload.pageIndex * pageSize\n const end = start + pageSize\n\n // Document ID can be null when operating on pristine / unsaved drafts\n const documentId = state?.selected.document?._id\n const documentAssetIds = state?.selected?.documentAssetIds\n\n const constructedFilter = constructFilter({\n assetTypes: state.assets.assetTypes,\n searchQuery: state.search.query,\n })\n\n const params = {\n ...(documentId ? {documentId} : {}),\n documentAssetIds,\n }\n\n return of(\n assetsActions.fetchRequest({\n params,\n queryFilter: constructedFilter,\n selector: groq`[${start}...${end}]`,\n sort: groq`order(${state.assets?.order?.field} ${state.assets?.order?.direction})`,\n }),\n )\n }),\n )\n\nexport const assetsFetchNextPageEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.loadNextPage.match),\n withLatestFrom(state$),\n switchMap(([_action, state]) =>\n of(assetsActions.loadPageIndex({pageIndex: state.assets.pageIndex + 1})),\n ),\n )\n\nexport const assetsFetchAfterDeleteAllEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.deleteComplete.match),\n withLatestFrom(state$),\n switchMap(([_action, state]) => {\n if (state.assets.allIds.length === 0) {\n const nextPageIndex = Math.floor(state.assets.allIds.length / state.assets.pageSize)\n return of(assetsActions.loadPageIndex({pageIndex: nextPageIndex}))\n }\n\n return EMPTY\n }),\n )\n\nexport const assetsOrderSetEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.orderSet.match),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsSearchEpic: Epic = (action$) =>\n action$.pipe(\n ofType(searchActions.querySet.type),\n debounceTime(400),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsListenerCreateQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerCreateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assets = actions?.map((action) => action.payload.asset)\n return of(assetsActions.listenerCreateQueueComplete({assets}))\n }),\n )\n\nexport const assetsListenerDeleteQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerDeleteQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assetIds = actions?.map((action) => action.payload.assetId)\n return of(assetsActions.listenerDeleteQueueComplete({assetIds}))\n }),\n )\n\nexport const assetsListenerUpdateQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerUpdateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assets = actions?.map((action) => action.payload.asset)\n return of(assetsActions.listenerUpdateQueueComplete({assets}))\n }),\n )\n\n// Re-sort on all updates (immediate and batched listener events)\nexport const assetsSortEpic: Epic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.insertUploads.type,\n assetsActions.listenerUpdateQueueComplete.type,\n assetsActions.updateComplete.type,\n ),\n mergeMap(() => of(assetsActions.sort())),\n )\n\nexport const assetsUnpickEpic: Epic = (action$) =>\n action$.pipe(\n ofType(assetsActions.orderSet.type, assetsActions.viewSet.type, searchActions.querySet.type),\n mergeMap(() => {\n return of(assetsActions.pickClear())\n }),\n )\n\nexport const assetsUpdateEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(assetsActions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action]) => {\n const {asset, closeDialogId, formData} = action.payload\n\n return of(action).pipe(\n mergeMap(() =>\n from(\n sanityClient\n .patch(asset._id)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .set(formData)\n .commit(),\n ),\n ),\n mergeMap((updatedAsset: any) =>\n of(\n assetsActions.updateComplete({\n asset: updatedAsset,\n closeDialogId,\n }),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n assetsActions.updateError({\n asset,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\n// Selectors\n\nconst selectAssetsByIds = (state: RootReducerState) => state.assets.byIds\n\nconst selectAssetsAllIds = (state: RootReducerState) => state.assets.allIds\n\nexport const selectAssetById = createSelector(\n [\n (state: RootReducerState) => state.assets.byIds,\n (_state: RootReducerState, assetId: string) => assetId,\n ],\n (byIds, assetId) => {\n const asset = byIds[assetId]\n return asset ? asset : undefined\n },\n)\n\nconst selectAssets: Selector<RootReducerState, AssetItem[]> = createSelector(\n [selectAssetsByIds, selectAssetsAllIds],\n (byIds, allIds) => allIds.map((id) => byIds[id]),\n)\n\nexport const selectAssetsLength = createSelector([selectAssets], (assets) => assets.length)\n\nexport const selectAssetsPicked = createSelector([selectAssets], (assets) =>\n assets.filter((item) => item?.picked),\n)\n\nexport const selectAssetsPickedLength = createSelector(\n [selectAssetsPicked],\n (assetsPicked) => assetsPicked.length,\n)\n\nexport const assetsReducer = assetsSlice.reducer\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport {ofType} from 'redux-observable'\nimport {EMPTY, of} from 'rxjs'\nimport {filter, mergeMap} from 'rxjs/operators'\n\nimport type {AssetItem, Dialog, Epic} from '../../types'\nimport {assetsActions} from '../assets'\n\ntype DialogReducerState = {\n items: Dialog[]\n}\n\nconst initialState = {\n items: [],\n} as DialogReducerState\n\nconst dialogSlice = createSlice({\n name: 'dialog',\n initialState,\n reducers: {\n // Clear all dialogs\n clear(state) {\n state.items = []\n },\n // Remove dialog by id\n remove(state, action: PayloadAction<{id: string}>) {\n const id = action.payload?.id\n state.items = state.items.filter((item) => item.id !== id)\n },\n showConfirmDeleteAssets(\n state,\n action: PayloadAction<{assets: AssetItem[]; closeDialogId?: string}>,\n ) {\n const {assets, closeDialogId} = action.payload\n\n const suffix = `${assets.length} ${pluralize('asset', assets.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: assetsActions.deleteRequest({\n assets: assets.map((assetItem) => assetItem.asset),\n }),\n confirmText: `Yes, delete ${suffix}`,\n description: 'This operation cannot be reversed. Are you sure you want to continue?',\n title: `Permanently delete ${suffix}?`,\n id: 'confirm',\n headerTitle: 'Confirm deletion',\n tone: 'critical',\n type: 'confirm',\n })\n },\n showAssetEdit(state, action: PayloadAction<{assetId: string}>) {\n const {assetId} = action.payload\n state.items.push({\n assetId,\n id: assetId,\n type: 'assetEdit',\n })\n },\n },\n})\n\n// Epics\n\nexport const dialogClearOnAssetUpdateEpic: Epic = (action$) =>\n action$.pipe(\n ofType(assetsActions.deleteComplete.type, assetsActions.updateComplete.type),\n filter(\n (action: {\n payload: {closeDialogId?: string}\n }): action is PayloadAction<{closeDialogId?: string}> => !!action?.payload?.closeDialogId,\n ),\n mergeMap((action) => {\n const dialogId = action?.payload?.closeDialogId\n if (dialogId) {\n return of(dialogSlice.actions.remove({id: dialogId}))\n }\n return EMPTY\n }),\n )\n\nexport const dialogActions = {...dialogSlice.actions}\n\nexport const dialogReducer = dialogSlice.reducer\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError} from '@sanity/client'\nimport groq from 'groq'\nimport {empty, merge, of, throwError} from 'rxjs'\nimport {catchError, delay, filter, mergeMap, takeUntil, withLatestFrom} from 'rxjs/operators'\n\nimport {uploadS3Asset} from '../../lib'\nimport type {RootReducerState, S3AssetDocument, UploadProgressEvent} from '../../types'\nimport {Epic, HttpError, S3AssetType, UploadItem} from '../../types'\nimport {constructFilter, generatePreviewBlobUrl$, hashFile} from '../../utils'\nimport {assetsActions} from '../assets'\nimport {UPLOADS_ACTIONS} from './actions'\n\ntype UploadsReducerState = {\n allIds: string[]\n byIds: Record<string, UploadItem>\n}\n\nconst initialState = {\n allIds: [],\n byIds: {},\n} as UploadsReducerState\n\nconst uploadsSlice = createSlice({\n name: 'uploads',\n initialState,\n extraReducers: (builder) => {\n builder //\n .addCase(UPLOADS_ACTIONS.uploadComplete, (state, action) => {\n const {asset} = action.payload\n if (state.byIds[asset.sha1hash]) {\n state.byIds[asset.sha1hash].status = 'complete'\n }\n })\n },\n reducers: {\n checkRequest(_state, _action: PayloadAction<{assets: S3AssetDocument[]}>) {\n //\n },\n checkComplete(state, action: PayloadAction<{results: Record<string, string | null>}>) {\n const {results} = action.payload\n\n const assetHashes = Object.keys(results)\n\n assetHashes.forEach((hash) => {\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n\n if (state.byIds[hash]) {\n const blobUrl = state.byIds[hash].objectUrl\n if (blobUrl) {\n window.URL.revokeObjectURL(blobUrl)\n }\n\n delete state.byIds[hash]\n }\n })\n },\n previewReady(state, action: PayloadAction<{hash: string; blobUrl: string}>) {\n const {blobUrl, hash} = action.payload\n if (state.byIds[hash]) {\n state.byIds[hash].objectUrl = blobUrl\n }\n },\n uploadCancel(state, action: PayloadAction<{hash: string}>) {\n const {hash} = action.payload\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n if (state.byIds[hash]) {\n delete state.byIds[hash]\n }\n },\n uploadError(state, action: PayloadAction<{error: HttpError; hash: string}>) {\n const {hash} = action.payload\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[hash]\n },\n\n uploadRequest(_state, _action: PayloadAction<{file: File; forceAsAssetType?: S3AssetType}>) {\n //\n },\n uploadProgress(state, action: PayloadAction<{event: UploadProgressEvent; uploadHash: string}>) {\n const {event, uploadHash} = action.payload\n state.byIds[uploadHash].percent = event.percent\n state.byIds[uploadHash].status = 'uploading'\n },\n uploadStart(state, action: PayloadAction<{file: File; uploadItem: UploadItem}>) {\n const {uploadItem} = action.payload\n\n if (!state.allIds.includes(uploadItem.hash)) {\n state.allIds.push(uploadItem.hash)\n }\n state.byIds[uploadItem.hash] = uploadItem\n },\n },\n})\n\nexport const uploadsActions = {...uploadsSlice.actions}\n\n// Epics\n\nexport const uploadsAssetStartEpic: Epic = (action$, _state$, {sanityClient, s3Client}) =>\n action$.pipe(\n filter(uploadsActions.uploadStart.match),\n mergeMap((action) => {\n const {file, uploadItem} = action.payload\n\n return merge(\n // Generate low res preview\n of(null).pipe(\n mergeMap(() => generatePreviewBlobUrl$(file)),\n mergeMap((url) => {\n return of(\n uploadsActions.previewReady({\n blobUrl: url,\n hash: uploadItem.hash,\n }),\n )\n }),\n ),\n // Upload asset and receive progress / complete events\n of(null).pipe(\n // delay(500000), // debug uploads\n mergeMap(() =>\n uploadS3Asset({assetType: uploadItem.assetType, s3Client, sanityClient, file}),\n ),\n takeUntil(\n action$.pipe(\n filter(uploadsActions.uploadCancel.match),\n filter((v) => v.payload.hash === uploadItem.hash),\n ),\n ),\n mergeMap((event) => {\n if (event?.type === 'complete') {\n if (event.exists) {\n return throwError({\n message: 'Asset already exists',\n statusCode: 409,\n } as HttpError)\n }\n\n return of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: event.asset,\n }),\n )\n }\n if (event?.type === 'progress' && event?.stage === 'upload') {\n return of(\n uploadsActions.uploadProgress({\n event,\n uploadHash: uploadItem.hash,\n }),\n )\n }\n return empty()\n }),\n catchError((error: ClientError) =>\n of(\n uploadsActions.uploadError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n hash: uploadItem.hash,\n }),\n ),\n ),\n ),\n )\n }),\n )\n\nexport const uploadsAssetUploadEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(uploadsActions.uploadRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {file, forceAsAssetType} = action.payload\n\n return of(action).pipe(\n // Generate SHA1 hash from local file\n // This will throw in insecure contexts (non-localhost / https)\n mergeMap(() => hashFile(file)),\n // Ignore if the file exists and is currently being uploaded\n filter((hash) => {\n const exists = !!state.uploads.byIds[hash]\n return !exists\n }),\n // Dispatch start action and begin upload process\n mergeMap((hash) => {\n const assetType =\n forceAsAssetType ||\n (file.type.indexOf('image') >= 0 ? S3AssetType.IMAGE : S3AssetType.FILE)\n\n const uploadItem = {\n hash,\n _type: 'upload',\n assetType,\n name: file.name,\n size: file.size,\n status: 'queued',\n } as UploadItem\n\n return of(uploadsActions.uploadStart({file, uploadItem}))\n }),\n )\n }),\n )\n\nexport const uploadsCompleteQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(UPLOADS_ACTIONS.uploadComplete.match),\n mergeMap((action) => {\n return of(\n uploadsActions.checkRequest({\n assets: [action.payload.asset],\n }),\n )\n }),\n )\n\nexport const uploadsCheckRequestEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(uploadsActions.checkRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets} = action.payload\n\n const documentIds = assets.map((asset) => asset._id)\n\n const constructedFilter = constructFilter({\n assetTypes: state.assets.assetTypes,\n searchQuery: state.search.query,\n })\n\n const query = groq`\n *[${constructedFilter} && _id in $documentIds].sha1hash\n `\n\n return of(action).pipe(\n delay(1000), // give Sanity some time to register the recently uploaded asset\n mergeMap(() => sanityClient.observable.fetch<string[]>(query, {documentIds})),\n mergeMap((resultHashes) => {\n const checkedResults = assets.reduce((acc: Record<string, string | null>, asset) => {\n acc[asset.sha1hash] = resultHashes.includes(asset.sha1hash) ? asset._id : null\n return acc\n }, {})\n\n return of(\n uploadsActions.checkComplete({results: checkedResults}), //\n assetsActions.insertUploads({results: checkedResults}),\n )\n }),\n )\n }),\n )\n\nexport const selectUploadById = createSelector(\n [\n (state: RootReducerState) => state.uploads.byIds,\n (_state: RootReducerState, uploadId: string) => uploadId,\n ],\n (byIds, uploadId) => byIds[uploadId],\n)\n\nexport const uploadsReducer = uploadsSlice.reducer\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport {ofType} from 'redux-observable'\nimport {of} from 'rxjs'\nimport {filter, mergeMap} from 'rxjs/operators'\n\nimport type {Epic,S3ImageAsset} from '../../types'\nimport {assetsActions} from '../assets'\nimport {uploadsActions} from '../uploads'\n\ntype Notification = {\n asset?: S3ImageAsset\n status?: 'error' | 'warning' | 'success' | 'info'\n title?: string\n}\n\ntype NotificationsReducerState = {\n items: Notification[]\n}\n\nconst initialState = {\n items: [],\n} as NotificationsReducerState\n\nconst notificationsSlice = createSlice({\n name: 'notifications',\n initialState,\n reducers: {\n add(state, action: PayloadAction<Notification>) {\n const {asset, status, title} = action.payload\n state.items.push({\n asset,\n status,\n title,\n })\n },\n },\n})\n\n// Epics\n\nexport const notificationsAssetsDeleteCompleteEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteComplete.match),\n mergeMap((action) => {\n const {assetIds} = action.payload\n const deletedCount = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `${deletedCount} ${pluralize('asset', deletedCount)} deleted`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsDeleteErrorEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteError.match),\n mergeMap((action) => {\n const {assetIds} = action.payload\n const count = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title: `Unable to delete ${count} ${pluralize(\n 'asset',\n count,\n )}. Please review any asset errors and try again.`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsDeleteSkippedEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteSkipped.match),\n mergeMap((action) => {\n const {assetIds, reason} = action.payload\n const count = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'warning',\n title: `Skipped ${count} ${pluralize('asset', count)}. ${reason}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsUploadCompleteEpic: Epic = (action$) =>\n action$.pipe(\n filter(uploadsActions.checkComplete.match),\n mergeMap((action) => {\n const {results} = action.payload\n\n const count = Object.keys(results).length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Uploaded ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsGenericErrorEpic: Epic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.fetchError.type,\n assetsActions.updateError.type,\n uploadsActions.uploadError.type,\n ),\n mergeMap((action: {payload: {error: {message: string}}}) => {\n const error = action.payload?.error\n\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title: `An error occured: ${error?.message}`,\n }),\n )\n }),\n )\n\nexport const notificationsActions = {...notificationsSlice.actions}\n\nexport const notificationsReducer = notificationsSlice.reducer\n","import {combineEpics} from 'redux-observable'\n\nimport {\n assetsDeleteEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n} from './assets'\nimport {dialogClearOnAssetUpdateEpic} from './dialog'\nimport {\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteSkippedEpic,\n notificationsAssetsUploadCompleteEpic,\n notificationsGenericErrorEpic,\n} from './notifications'\nimport {\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n} from './uploads'\n\nexport const rootEpic = combineEpics(\n assetsDeleteEpic,\n assetsFetchEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n dialogClearOnAssetUpdateEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsDeleteSkippedEpic,\n notificationsAssetsUploadCompleteEpic,\n notificationsGenericErrorEpic,\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n)\n","import {createSlice} from '@reduxjs/toolkit'\nimport type {SanityDocument} from '@sanity/client'\n\nimport type {S3AssetDocument} from '../../types'\n\ntype SelectedReducerState = {\n assets: S3AssetDocument[]\n document?: SanityDocument\n documentAssetIds?: string[]\n}\n\nconst initialState = {\n assets: [],\n document: undefined,\n documentAssetIds: [],\n} as SelectedReducerState\n\nconst selectedSlice = createSlice({\n name: 'selected',\n initialState,\n reducers: {},\n})\n\nexport const selectedReducer = selectedSlice.reducer\n","import {\n type ActionFromReducersMapObject,\n combineReducers,\n type Reducer,\n type StateFromReducersMapObject,\n} from '@reduxjs/toolkit'\n\nimport {assetsReducer} from './assets'\nimport {dialogReducer} from './dialog'\nimport {notificationsReducer} from './notifications'\nimport {searchReducer} from './search'\nimport {selectedReducer} from './selected'\nimport {uploadsReducer} from './uploads'\n\nconst reducers = {\n assets: assetsReducer,\n dialog: dialogReducer,\n notifications: notificationsReducer,\n search: searchReducer,\n selected: selectedReducer,\n uploads: uploadsReducer,\n}\n\ntype ReducersMapObject = typeof reducers\n\nexport const rootReducer: Reducer<\n StateFromReducersMapObject<ReducersMapObject>,\n ActionFromReducersMapObject<ReducersMapObject>\n> = combineReducers(reducers)\n","import {createSelector} from '@reduxjs/toolkit'\n\nimport type {CardAssetData, CardUploadData,RootReducerState} from '../types'\n\nexport const selectCombinedItems = createSelector(\n [\n (state: RootReducerState) => state.assets.allIds,\n (state: RootReducerState) => state.uploads.allIds,\n ],\n (assetIds, uploadIds) => {\n const assetItems = assetIds.map((id) => ({id, type: 'asset'}) as CardAssetData)\n const uploadItems = uploadIds.map((id) => ({id, type: 'upload'}) as CardUploadData)\n const combinedItems: (CardAssetData | CardUploadData)[] = [...uploadItems, ...assetItems]\n return combinedItems\n },\n)\n","import {Box, Flex} from '@sanity/ui'\nimport {type FC, type MouseEvent} from 'react'\nimport type {DefaultExtensionType} from 'react-file-icon'\nimport {defaultStyles, FileIcon as ReactFileIcon} from 'react-file-icon'\nimport {styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {S3AssetType, type S3FileAsset} from '../../../types'\n\ntype FileIconProps = {\n extension?: string\n onClick?: (e: MouseEvent) => void\n width: string\n asset?: S3FileAsset\n}\n\n// Force react-file-icon styles\nconst Container = styled(Box)`\n text {\n font-size: 8px !important;\n font-weight: 500 !important;\n }\n`\n\nexport const FileIcon: FC<FileIconProps> = (props) => {\n const {extension, onClick, width, asset} = props\n\n const {buildAssetUrl} = useS3MediaContext()\n\n const assetUrl = asset ? buildAssetUrl({assetType: S3AssetType.FILE, assetId: asset._id}) : null\n\n return (\n <Flex align=\"center\" justify=\"center\" onClick={onClick} style={{height: '100%'}}>\n {assetUrl && asset?.mimeType.search('video') === 0 ? (\n <video\n autoPlay\n loop\n src={assetUrl}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n ) : (\n <Container style={{width}}>\n {extension ? (\n <ReactFileIcon\n extension={extension}\n {...defaultStyles[extension as DefaultExtensionType]}\n />\n ) : (\n <ReactFileIcon />\n )}\n </Container>\n )}\n </Flex>\n )\n}\n","import type {ThemeColorSchemeKey} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {getSchemeColor} from '../../../utils'\n\ntype Props = {\n onClick?: (e: MouseEvent) => void\n $showCheckerboard?: boolean\n $scheme?: ThemeColorSchemeKey\n src: string\n}\n\nexport const Image: any = styled.img<Props>`\n --checkerboard-color: ${(props) =>\n props.$scheme ? getSchemeColor(props.$scheme, 'bg2') : 'inherit'};\n\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n\n ${(props) =>\n props.$showCheckerboard &&\n css`\n background-image:\n linear-gradient(45deg, var(--checkerboard-color) 25%, transparent 25%),\n linear-gradient(-45deg, var(--checkerboard-color) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--checkerboard-color) 75%),\n linear-gradient(-45deg, transparent 75%, var(--checkerboard-color) 75%);\n background-size: 20px 20px;\n background-position:\n 0 0,\n 0 10px,\n 10px -10px,\n -10px 0;\n `}\n`\n","export const GRID_TEMPLATE_COLUMNS = {\n SMALL: '3rem 100px auto 1.5rem',\n LARGE: '3rem 100px auto 5.5rem 5.5rem 3.5rem 8.5rem 4.75rem 2rem',\n}\nexport const PANEL_HEIGHT = 32 // px\n","import {CheckmarkCircleIcon, EditIcon, WarningFilledIcon} from '@sanity/icons'\nimport {\n Box,\n Card,\n Checkbox,\n Container,\n Flex,\n Spinner,\n Text,\n type Theme,\n type ThemeColorSchemeKey,\n Tooltip,\n} from '@sanity/ui'\nimport {type FC, memo, type MouseEvent, type RefObject} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useKeyPress, useTypedSelector} from '../../../hooks'\nimport {assetsActions, dialogActions, selectAssetById} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {getSchemeColor, isS3FileAsset, isS3ImageAsset} from '../../../utils'\nimport {PANEL_HEIGHT} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\ntype CardAssetProps = {\n id: string\n selected: boolean\n}\n\nconst CardWrapper = styled(Flex)`\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n position: relative;\n width: 100%;\n`\n\nconst CardContainer = styled(Flex)<{$picked?: boolean; theme: Theme; $updating?: boolean}>(({\n $picked,\n theme,\n $updating,\n}) => {\n return css`\n border: 1px solid transparent;\n height: 100%;\n pointer-events: ${$updating ? 'none' : 'auto'};\n position: relative;\n transition: all 300ms;\n user-select: none;\n width: 100%;\n\n border: ${$picked\n ? `1px solid ${theme.sanity.color.spot.orange} !important`\n : '1px solid inherit'};\n\n ${!$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border: 1px solid var(--card-border-color);\n }\n }\n `}\n `\n})\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n height: ${PANEL_HEIGHT}px;\n transition: all 300ms;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `\n})\n\nconst BaseCardAsset: FC<CardAssetProps> = (props) => {\n const {id, selected} = props\n\n const scheme = useColorSchemeValue()\n\n // Refs\n const shiftPressed: RefObject<boolean> = useKeyPress('shift')\n\n // Redux\n const dispatch = useDispatch()\n const lastPicked = useTypedSelector((state) => state.assets.lastPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n\n const asset = item?.asset\n const error = item?.error\n const picked = item?.picked\n const updating = item?.updating\n\n const {onSelect} = useAssetSourceActions()\n\n const {buildAssetUrl} = useS3MediaContext()\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n // Callbacks\n const handleAssetClick = (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (onSelect) {\n onSelect([\n {\n kind: 'assetDocumentId',\n value: asset._id,\n },\n ])\n } else if (shiftPressed.current) {\n if (picked) {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n } else {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n }\n } else {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n }\n }\n\n const handleContextActionClick = (e: MouseEvent) => {\n e.stopPropagation()\n\n if (onSelect) {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n } else if (shiftPressed.current && !picked) {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n } else {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n }\n }\n\n const opacityContainer = updating ? 0.5 : 1\n const opacityPreview = selected || updating ? 0.25 : 1\n\n return (\n <CardWrapper padding={1}>\n <CardContainer direction=\"column\" $picked={picked} $updating={item.updating}>\n {/* Image */}\n <Box\n flex={1}\n style={{\n cursor: selected ? 'default' : 'pointer',\n position: 'relative',\n }}\n >\n <div onClick={handleAssetClick} style={{height: '100%', opacity: opacityPreview}}>\n {/* File icon */}\n {isS3FileAsset(asset) && (\n <FileIcon asset={asset} extension={asset.extension} width=\"80px\" />\n )}\n\n {/* Image */}\n {isS3ImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard\n src={buildAssetUrl({assetId: asset._id, assetType: S3AssetType.IMAGE})}\n style={{\n transition: 'opacity 1000ms',\n }}\n />\n )}\n </div>\n\n {/* Selected check icon */}\n {selected && !updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n opacity: opacityContainer,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Text size={2}>\n <CheckmarkCircleIcon />\n </Text>\n </Flex>\n )}\n\n {/* Spinner */}\n {updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Spinner />\n </Flex>\n )}\n </Box>\n\n {/* Footer */}\n <ContextActionContainer\n align=\"center\"\n onClick={handleContextActionClick}\n paddingX={1}\n $scheme={scheme}\n style={{opacity: opacityContainer}}\n >\n {onSelect ? (\n <EditIcon\n style={{\n flexShrink: 0,\n opacity: 0.5,\n }}\n />\n ) : (\n <Checkbox\n checked={picked}\n readOnly\n style={{\n flexShrink: 0,\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n )}\n\n <Box marginLeft={2}>\n <Text muted size={0} textOverflow=\"ellipsis\">\n {asset.originalFilename}\n </Text>\n </Box>\n </ContextActionContainer>\n\n {/* Error button */}\n {error && (\n <Card\n tone=\"critical\"\n padding={3}\n style={{\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text size={1}>{error}</Text>\n </Container>\n }\n placement=\"left\"\n portal\n >\n <Text size={1}>\n <WarningFilledIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Card>\n )}\n </CardContainer>\n </CardWrapper>\n )\n}\n\nexport const CardAsset = memo(BaseCardAsset)\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {filesize} from 'filesize'\nimport type {FC} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {useTypedSelector} from '../../../hooks'\nimport {selectUploadById, uploadsActions} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {getSchemeColor} from '../../../utils'\nimport {PANEL_HEIGHT} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\ntype CardUploadProps = {\n id: string\n}\n\nconst CardWrapper = styled(Flex)`\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n position: relative;\n width: 100%;\n`\n\nexport const CardUpload: FC<CardUploadProps> = (props) => {\n const {id} = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const item = useTypedSelector((state) => selectUploadById(state, id))\n\n if (!item) {\n return null\n }\n\n const fileSize = filesize(item.size, {base: 10, round: 0})\n const percentLoaded = Math.round(item.percent || 0) // (0 - 100)\n\n const isComplete = item.status === 'complete'\n const isUploading = item.status === 'uploading'\n const isQueued = item.status === 'queued'\n\n let status\n if (isComplete) {\n status = 'Verifying'\n }\n if (isUploading) {\n status = `${percentLoaded}%`\n }\n if (isQueued) {\n status = 'Queued'\n }\n\n // Callbacks\n const handleCancelUpload = () => {\n dispatch(uploadsActions.uploadCancel({hash: item.hash}))\n }\n\n return (\n <CardWrapper padding={1}>\n <Flex\n direction=\"column\"\n flex={1}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n border: '1px solid transparent',\n height: '100%',\n position: 'relative',\n }}\n >\n {/* Progress bar */}\n <div\n style={{\n background: 'var(--card-fg-color)',\n bottom: 0,\n height: '1px',\n left: 0,\n position: 'absolute',\n width: '100%',\n transform: `scaleX(${percentLoaded * 0.01})`,\n transformOrigin: 'bottom left',\n transition: 'all 1000ms ease-out',\n }}\n />\n\n <Box flex={1} style={{position: 'relative'}}>\n {item.assetType === S3AssetType.IMAGE && item?.objectUrl && (\n <Image\n draggable={false}\n $scheme={scheme}\n src={item.objectUrl}\n style={{\n opacity: 0.4,\n }}\n />\n )}\n\n {item.assetType === S3AssetType.FILE && (\n <div style={{height: '100%', opacity: 0.1}}>\n <FileIcon width=\"80px\" />\n </div>\n )}\n\n {/*\n Cancel upload button.\n Assets will only have a `complete` status _after_ it has been created on your dataset.\n As such, we also hide the cancel button when `percentLoaded === 100`, as cancelling when the asset\n has been fully uploaded (even with a status of `progress`) won't stop the asset from being created.\n */}\n {!isComplete && percentLoaded !== 100 && (\n <Flex\n align=\"center\"\n direction=\"column\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Button\n fontSize={4}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={handleCancelUpload}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n />\n </Flex>\n )}\n </Box>\n\n {/* Footer */}\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingX={2}\n style={{height: `${PANEL_HEIGHT}px`}}\n >\n <Box flex={1} marginRight={1}>\n <Text size={0} textOverflow=\"ellipsis\">\n {item.name} ({fileSize})\n </Text>\n </Box>\n <Text size={0} style={{flexShrink: 0}} weight=\"semibold\">\n {status}\n </Text>\n </Flex>\n </Flex>\n </CardWrapper>\n )\n}\n","import type {FC} from 'react'\nimport {VirtuosoGrid} from 'react-virtuoso'\nimport {styled} from 'styled-components'\n\nimport {useTypedSelector} from '../../../hooks'\nimport type {CardAssetData, CardUploadData} from '../../../types/browser'\nimport {CardAsset} from '../CardAsset'\nimport {CardUpload} from '../CardUpload'\n\ntype AssetGridVirtualizedProps = {\n items: (CardAssetData | CardUploadData)[]\n onLoadMore?: () => void\n}\n\nconst CARD_HEIGHT = 220\nconst CARD_WIDTH = 240\n\nconst VirtualCell = ({\n item,\n selected,\n}: {\n item: CardAssetData | CardUploadData\n selected: boolean\n}) => {\n if (item?.type === 'asset') {\n return <CardAsset id={item.id} selected={selected} />\n }\n\n if (item?.type === 'upload') {\n return <CardUpload id={item.id} />\n }\n\n return null\n}\n\nconst StyledItemContainer = styled.div`\n height: ${CARD_HEIGHT}px;\n width: ${CARD_WIDTH}px;\n`\n\nconst StyledListContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, ${CARD_WIDTH}px);\n grid-template-rows: repeat(auto-fill, ${CARD_HEIGHT}px);\n justify-content: center;\n margin: 0 auto;\n`\n\nexport const AssetGridVirtualized: FC<AssetGridVirtualizedProps> = (props) => {\n const {items, onLoadMore} = props\n\n // Redux\n const selectedAssets = useTypedSelector((state) => state.selected.assets)\n\n const selectedIds = (selectedAssets && selectedAssets.map((asset) => asset._id)) || []\n const totalCount = items?.length\n\n if (totalCount === 0) {\n return null\n }\n\n return (\n <VirtuosoGrid\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n\n return item?.id\n }}\n components={{\n Item: StyledItemContainer,\n List: StyledListContainer,\n }}\n endReached={onLoadMore}\n itemContent={(index) => {\n const item = items[index]\n const selected = selectedIds.includes(item?.id)\n\n return <VirtualCell item={item} selected={selected} />\n }}\n overscan={48}\n style={{overflowX: 'hidden', overflowY: 'scroll'}}\n totalCount={totalCount}\n />\n )\n}\n","import {ChevronDownIcon, ChevronUpIcon} from '@sanity/icons'\nimport {Box, Label} from '@sanity/ui'\nimport type {FC} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {useTypedSelector} from '../../../hooks'\nimport {assetsActions} from '../../../modules'\n\ntype TableHeaderItemProps = {\n field?: string\n title?: string\n}\n\nexport const TableHeaderItem: FC<TableHeaderItemProps> = (props) => {\n const {field, title} = props\n\n // Redux\n const dispatch = useDispatch()\n const order = useTypedSelector((state) => state.assets.order)\n\n const isActive = order.field === field\n\n // Callbacks\n const handleClick = () => {\n if (!field || !title) {\n return\n }\n\n if (isActive) {\n const direction = order.direction === 'asc' ? 'desc' : 'asc'\n dispatch(assetsActions.orderSet({order: {field, direction}}))\n } else {\n dispatch(assetsActions.orderSet({order: {field, direction: 'asc'}}))\n }\n }\n\n return (\n <Label muted={!field} size={0}>\n <Box\n onClick={field ? handleClick : undefined}\n style={{\n cursor: field ? 'pointer' : 'default',\n display: 'inline',\n whiteSpace: 'nowrap',\n }}\n >\n <span\n style={{\n marginRight: '0.4em',\n }}\n >\n {title}\n </span>\n\n {isActive && order?.direction === 'asc' && <ChevronUpIcon />}\n {isActive && order?.direction === 'desc' && <ChevronDownIcon />}\n </Box>\n </Label>\n )\n}\n","import {Checkbox, Flex, Grid, type ThemeColorSchemeKey, useMediaIndex} from '@sanity/ui'\nimport {type FC, type MouseEvent} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useAssetSourceActions} from '../../../contexts'\nimport {useTypedSelector} from '../../../hooks'\nimport {assetsActions, selectAssetsLength, selectAssetsPickedLength} from '../../../modules'\nimport {getSchemeColor} from '../../../utils'\nimport {GRID_TEMPLATE_COLUMNS, PANEL_HEIGHT} from '../constants'\nimport {TableHeaderItem} from '../TableHeaderItem'\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `\n})\n\nexport const TableHeader: FC = () => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const itemsLength = useTypedSelector(selectAssetsLength)\n const numPickedAssets = useTypedSelector(selectAssetsPickedLength)\n\n const mediaIndex = useMediaIndex()\n const {onSelect} = useAssetSourceActions()\n\n const allSelected = numPickedAssets === itemsLength\n\n // Callbacks\n const handleContextActionClick = (e: MouseEvent) => {\n e.stopPropagation()\n\n if (allSelected) {\n dispatch(assetsActions.pickClear())\n } else {\n dispatch(assetsActions.pickAll())\n }\n }\n\n // Note that even though we hide the table header on smaller breakpoints, we never set it to\n // `display: none`, as doing so causes issues with react-virtuoso.\n // Instead, we give it 0 height and hide it with `visibility: hidden`.\n return (\n <Grid\n style={{\n alignItems: 'center',\n background: 'var(--card-bg-color)',\n borderBottom: '1px solid var(--card-border-color)',\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridTemplateColumns: GRID_TEMPLATE_COLUMNS.LARGE,\n height: mediaIndex < 3 ? 0 : `${PANEL_HEIGHT}px`,\n letterSpacing: '0.025em',\n position: 'sticky',\n textTransform: 'uppercase',\n top: 0,\n visibility: mediaIndex < 3 ? 'hidden' : 'visible',\n width: '100%',\n zIndex: 1, // force stacking context\n }}\n >\n {onSelect ? (\n <TableHeaderItem />\n ) : (\n <ContextActionContainer\n align=\"center\"\n justify=\"center\"\n onClick={handleContextActionClick}\n $scheme={scheme}\n style={{\n height: '100%',\n position: 'relative',\n }}\n >\n <Checkbox\n checked={!fetching && allSelected}\n readOnly\n style={{\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n </ContextActionContainer>\n )}\n\n <TableHeaderItem />\n <TableHeaderItem field=\"originalFilename\" title=\"Filename\" />\n <TableHeaderItem title=\"Resolution\" />\n <TableHeaderItem field=\"mimeType\" title=\"MIME type\" />\n <TableHeaderItem field=\"size\" title=\"Size\" />\n <TableHeaderItem field=\"_updatedAt\" title=\"Last updated\" />\n <TableHeaderItem title=\"References\" />\n <TableHeaderItem />\n </Grid>\n )\n}\n","import {CheckmarkCircleIcon, EditIcon, WarningFilledIcon} from '@sanity/icons'\nimport {\n Box,\n Card,\n Checkbox,\n Container,\n Flex,\n Grid,\n Spinner,\n Text,\n type ThemeColorSchemeKey,\n Tooltip,\n useMediaIndex,\n} from '@sanity/ui'\nimport {formatRelative} from 'date-fns'\nimport {filesize} from 'filesize'\nimport {\n type FC,\n memo,\n type MouseEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue, WithReferringDocuments} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useKeyPress, useTypedSelector} from '../../../hooks'\nimport {assetsActions, dialogActions, selectAssetById} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {\n getAssetResolution,\n getSchemeColor,\n getUniqueDocuments,\n isS3FileAsset,\n isS3ImageAsset,\n} from '../../../utils'\nimport {GRID_TEMPLATE_COLUMNS} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\n// Duration (ms) to wait before reference counts (and associated listeners) are rendered\nconst REFERENCE_COUNT_VISIBILITY_DELAY = 750\n\ntype TableRowAssetProps = {\n id: string\n selected: boolean\n}\n\nconst ContainerGrid = styled<\n typeof Grid,\n {$selected?: boolean; $scheme: ThemeColorSchemeKey; $updating?: boolean}\n>(Grid)(({$scheme, $selected, $updating}) => {\n return css`\n align-items: center;\n cursor: ${$selected ? 'default' : 'pointer'};\n height: 100%;\n pointer-events: ${$updating ? 'none' : 'auto'};\n user-select: none;\n white-space: nowrap;\n\n ${!$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `}\n `\n})\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg2')};\n }\n }\n `\n})\n\n// eslint-disable-next-line complexity\nconst BaseTableRowAsset: FC<TableRowAssetProps> = (props) => {\n const {id, selected} = props\n\n const scheme = useColorSchemeValue()\n\n const shiftPressed: RefObject<boolean> = useKeyPress('shift')\n\n const [referenceCountVisible, setReferenceCountVisible] = useState(false)\n const refCountVisibleTimeout = useRef<ReturnType<typeof window.setTimeout>>(null)\n\n const dispatch = useDispatch()\n const lastPicked = useTypedSelector((state) => state.assets.lastPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n\n const mediaIndex = useMediaIndex()\n\n const {buildAssetUrl} = useS3MediaContext()\n\n const asset = item?.asset\n const error = item?.error\n const picked = item?.picked\n const updating = item?.updating\n\n const {onSelect} = useAssetSourceActions()\n\n const handleContextActionClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (onSelect) {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n } else if (shiftPressed.current && !picked) {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n } else {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n }\n },\n [asset, dispatch, lastPicked, onSelect, picked, shiftPressed],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (onSelect) {\n onSelect([{kind: 'assetDocumentId', value: asset._id}])\n } else if (shiftPressed.current) {\n if (picked) {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n } else {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n }\n } else {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n }\n },\n [asset, dispatch, lastPicked, onSelect, picked, shiftPressed],\n )\n\n const opacityCell = updating ? 0.5 : 1\n const opacityPreview = selected || updating ? 0.1 : 1\n\n // Display reference count after an initial delay to prevent over-eager fetching\n useEffect(() => {\n refCountVisibleTimeout.current = setTimeout(\n () => setReferenceCountVisible(true),\n REFERENCE_COUNT_VISIBILITY_DELAY,\n )\n return () => {\n if (refCountVisibleTimeout.current) {\n clearTimeout(refCountVisibleTimeout.current)\n }\n }\n }, [])\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n return (\n <ContainerGrid\n onClick={selected ? undefined : handleClick}\n $scheme={scheme}\n $selected={selected}\n style={{\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridRowGap: 0,\n gridTemplateColumns:\n mediaIndex < 3 ? GRID_TEMPLATE_COLUMNS.SMALL : GRID_TEMPLATE_COLUMNS.LARGE,\n gridTemplateRows: mediaIndex < 3 ? 'auto' : '1fr',\n }}\n $updating={item.updating}\n >\n {/* Picked checkbox */}\n <ContextActionContainer\n onClick={handleContextActionClick}\n $scheme={scheme}\n style={{\n alignItems: 'center',\n gridColumn: 1,\n gridRowStart: 1,\n gridRowEnd: 'span 5',\n height: '100%',\n justifyContent: 'center',\n opacity: opacityCell,\n position: 'relative',\n }}\n >\n {onSelect ? (\n <EditIcon\n style={{\n flexShrink: 0,\n opacity: 0.5,\n }}\n />\n ) : (\n <Checkbox\n checked={picked}\n readOnly\n style={{\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n )}\n </ContextActionContainer>\n\n <Box\n style={{\n gridColumn: 2,\n gridRowStart: 1,\n gridRowEnd: 'span 5',\n height: '90px',\n width: '100px',\n }}\n >\n <Flex align=\"center\" justify=\"center\" style={{height: '100%', position: 'relative'}}>\n <Box style={{height: '100%', opacity: opacityPreview, position: 'relative'}}>\n {/* File icon */}\n {isS3FileAsset(asset) && (\n <FileIcon asset={asset} extension={asset.extension} width=\"40px\" />\n )}\n\n {/* Image */}\n {isS3ImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard\n src={buildAssetUrl({assetId: asset._id, assetType: S3AssetType.IMAGE})}\n />\n )}\n </Box>\n\n {/* Spinner */}\n {updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Spinner />\n </Flex>\n )}\n\n {/* Selected check icon */}\n {selected && !updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Text size={2}>\n <CheckmarkCircleIcon />\n </Text>\n </Flex>\n )}\n </Flex>\n </Box>\n\n {/* Filename */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: 3,\n gridRow: mediaIndex < 3 ? 2 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {asset.originalFilename}\n </Text>\n </Box>\n\n {/* Resolution */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: mediaIndex < 3 ? 3 : 4,\n gridRow: mediaIndex < 3 ? 3 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {isS3ImageAsset(asset) && getAssetResolution(asset)}\n </Text>\n </Box>\n\n {/* MIME type */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 5,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {asset.mimeType}\n </Text>\n </Box>\n\n {/* Size */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 6,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {filesize(asset.size, {base: 10, round: 0})}\n </Text>\n </Box>\n\n {/* Last updated */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: mediaIndex < 3 ? 3 : 7,\n gridRow: mediaIndex < 3 ? 4 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {formatRelative(new Date(asset._updatedAt), new Date())}\n </Text>\n </Box>\n\n {/* References */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 8,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {referenceCountVisible ? (\n <WithReferringDocuments id={id}>\n {({isLoading, referringDocuments}) => {\n const uniqueDocuments = getUniqueDocuments(referringDocuments)\n return isLoading ? (\n <>-</>\n ) : (\n <>{Array.isArray(uniqueDocuments) ? uniqueDocuments.length : 0}</>\n )\n }}\n </WithReferringDocuments>\n ) : (\n <>-</>\n )}\n </Text>\n </Box>\n\n {/* Error */}\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n gridColumn: mediaIndex < 3 ? 4 : 9,\n gridRowStart: '1',\n gridRowEnd: mediaIndex < 3 ? 'span 5' : 'auto',\n opacity: opacityCell,\n }}\n >\n {/* Error button */}\n {error && (\n <Card tone=\"critical\" padding={2}>\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text size={1}>{error}</Text>\n </Container>\n }\n placement=\"left\"\n portal\n >\n <Text size={1}>\n <WarningFilledIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Card>\n )}\n </Flex>\n </ContainerGrid>\n )\n}\n\nexport const TableRowAsset = memo(BaseTableRowAsset)\n","import {createGlobalStyle, css} from 'styled-components'\n\nconst customScrollbar = css`\n ::-webkit-scrollbar {\n width: 14px;\n }\n\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n border: 4px solid rgba(0, 0, 0, 0);\n background: var(--card-border-color);\n background-clip: padding-box;\n\n &:hover {\n background: var(--card-muted-fg-color);\n background-clip: padding-box;\n }\n }\n`\n\nexport const GlobalStyle = createGlobalStyle`\n .media__custom-scrollbar {\n ${customScrollbar}\n }\n\n // @sanity/ui overrides\n\n // Custom scrollbar on Box (used in Dialogs)\n div[data-ui=\"Box\"] {\n ${customScrollbar}\n }\n\n // Dialog background color\n div[data-ui=\"Dialog\"] {\n background-color: rgba(15, 17, 18, 0.9);\n }\n\n`\n","/* eslint-disable no-empty */\nimport {white} from '@sanity/color'\nimport {Flex, Text} from '@sanity/ui'\nimport {type FC, type PropsWithChildren} from 'react'\nimport {type DropEvent, type DropzoneOptions, useDropzone} from 'react-dropzone'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {DropzoneDispatchProvider, useS3MediaOptionsContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useTypedSelector} from '../../../hooks'\nimport {notificationsActions, uploadsActions} from '../../../modules'\nimport {S3AssetType} from '../../../types'\n\nconst UploadContainer = styled.div`\n color: white;\n height: 100%;\n min-height: 100%;\n right: 0;\n top: 0;\n width: 100%;\n\n &:focus {\n outline: none;\n }\n`\n\nconst DragActiveContainer = styled.div`\n align-items: center;\n background: rgba(0, 0, 0, 0.75);\n display: flex;\n height: 100%;\n justify-content: center;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n z-index: 3;\n`\n\n// Iterate through all files and only return non-folders / packages.\n// We check for files by reading the first byte of the file\nasync function filterFiles(fileList: FileList) {\n const files = Array.from(fileList)\n\n const filteredFiles: File[] = []\n\n for (const file of files) {\n try {\n await file.slice(0, 1).arrayBuffer()\n filteredFiles.push(file)\n } catch {}\n }\n\n return filteredFiles\n}\n\nexport const UploadDropzone: FC<PropsWithChildren> = (props) => {\n const {children} = props\n\n const {directUploads} = useS3MediaOptionsContext()\n\n const {onSelect} = useAssetSourceActions()\n\n // Redux\n const dispatch = useDispatch()\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n\n const isImageAssetType = assetTypes.length === 1 && assetTypes[0] === S3AssetType.IMAGE\n\n // Callbacks\n const handleDrop = async (acceptedFiles: File[]) => {\n acceptedFiles.forEach((file) =>\n dispatch(\n uploadsActions.uploadRequest({\n file,\n forceAsAssetType: assetTypes.length === 1 ? assetTypes[0] : undefined,\n }),\n ),\n )\n }\n\n const handleDropRejected: DropzoneOptions['onDropRejected'] = (rejections) => {\n const errorCodes = rejections.flatMap(({errors}) => errors.map(({code}) => code))\n\n if (errorCodes.includes('file-too-large')) {\n dispatch(\n notificationsActions.add({\n status: 'error',\n title: 'One or more files exceed the maximum upload size.',\n }),\n )\n }\n }\n\n // Use custom file selector to obtain files on file drop + change events (excluding folders and packages)\n const handleFileGetter = async (event: DropEvent) => {\n let fileList: FileList | undefined\n if (event.type === 'drop' && 'dataTransfer' in event) {\n fileList = event?.dataTransfer?.files\n }\n if (event.type === 'change') {\n const target = event?.target as HTMLInputElement\n if (target?.files) {\n fileList = target.files\n }\n }\n\n if (!fileList) {\n return []\n }\n\n // Filter out non-folders / packages\n const files: File[] = await filterFiles(fileList)\n\n // Dispatch error if some files have been filtered out\n if (fileList?.length !== files.length) {\n dispatch(\n notificationsActions.add({\n status: 'error',\n title: `Unable to upload some items (folders and packages aren't supported)`,\n }),\n )\n }\n\n return files\n }\n\n // Limit file picking to only images if we're specifically within an image selection context (e.g. picking from image fields)\n const {getRootProps, getInputProps, isDragActive, open} = useDropzone({\n accept: isImageAssetType ? 'image/*' : '',\n getFilesFromEvent: handleFileGetter,\n noClick: true,\n // HACK: Disable drag and drop functionality when in a selecting context\n // (This is currently due to Sanity's native image input taking precedence with drag and drop)\n noDrag: !!onSelect,\n onDrop: handleDrop,\n onDropRejected: handleDropRejected,\n disabled: !directUploads,\n })\n\n return (\n <DropzoneDispatchProvider open={open}>\n <UploadContainer {...getRootProps()}>\n <input {...getInputProps()} />\n\n {isDragActive && (\n <DragActiveContainer>\n <Flex direction=\"column\" justify=\"center\" style={{color: white.hex}}>\n <Text size={3} style={{color: 'inherit'}}>\n Drop files to upload\n </Text>\n </Flex>\n </DragActiveContainer>\n )}\n\n {children}\n </UploadContainer>\n </DropzoneDispatchProvider>\n )\n}\n","import {ChevronDownIcon, UploadIcon} from '@sanity/icons'\nimport {Menu, MenuButton, type MenuButtonProps, MenuGroup, type MenuGroupProps} from '@sanity/ui'\nimport {startCase, uniqueId} from 'lodash'\nimport {type ChangeEvent, type FC, type JSX, type MouseEvent, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport type {S3AssetSource} from '../../types'\nimport {Button, MenuItem} from '../UI'\n\nconst UPLOAD_DROP_DOWN_MENU_POPOVER: MenuButtonProps['popover'] = {portal: true} as const\nconst MENU_GROUP_POPOVER: MenuGroupProps['popover'] = {\n placement: 'right-start',\n fallbackPlacements: ['left-start', 'bottom', 'top'],\n}\nconst ASSET_SOURCE_DATA_ATTRIBUTE = 'data-asset-source-name'\n\ninterface UploadDropDownMenuProps {\n accept?: string\n assetSources: S3AssetSource[]\n capture?: 'user' | 'environment'\n directUploads?: boolean\n multiple?: boolean\n onSelectFiles?: (assetSource: S3AssetSource, files: File[]) => void\n readOnly?: boolean\n renderAsMenuGroup?: boolean\n}\n\nexport const UploadDropDownMenu: FC<UploadDropDownMenuProps> = (props) => {\n const {\n accept,\n assetSources,\n capture,\n directUploads,\n multiple,\n onSelectFiles,\n readOnly,\n renderAsMenuGroup = false,\n } = props\n const {t} = useTranslation()\n\n const uniqId = useMemo(() => uniqueId(), [])\n const uploadsDisabled = readOnly || directUploads === false\n\n const createAssetSourceInputId = useCallback(\n (assetSource: S3AssetSource) => {\n return `${uniqId}-${assetSource.name}-upload-button`\n },\n [uniqId],\n )\n\n // Needed for keyboard navigation (arrow keys + enter/space)\n const handleMenuItemClick = useCallback(\n (event: MouseEvent) => {\n const assetSourceName = event.currentTarget.getAttribute(ASSET_SOURCE_DATA_ATTRIBUTE)\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return\n }\n const element = document.getElementById(createAssetSourceInputId(assetSource))\n // Test for document.activeElement to avoid clicking the button twice\n if (element && document.activeElement !== element) {\n element.click()\n }\n },\n [assetSources, createAssetSourceInputId],\n )\n\n const renderMenuItemLabel = useCallback(\n (menuItemContent: JSX.Element) => {\n const assetSourceName = menuItemContent.props[ASSET_SOURCE_DATA_ATTRIBUTE]\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return menuItemContent\n }\n return <label htmlFor={createAssetSourceInputId(assetSource)}>{menuItemContent}</label>\n },\n [assetSources, createAssetSourceInputId],\n )\n\n const renderMenuItemForAssetSource = useCallback(\n (assetSource: S3AssetSource) => {\n const inputId = createAssetSourceInputId(assetSource)\n\n return (\n <MenuItem\n key={`${inputId}-menu-button`}\n {...{[ASSET_SOURCE_DATA_ATTRIBUTE]: assetSource.name}}\n disabled={uploadsDisabled}\n htmlFor={inputId}\n icon={assetSource.icon}\n onClick={handleMenuItemClick}\n renderMenuItem={renderMenuItemLabel}\n text={assetSource.title || startCase(assetSource.name)}\n />\n )\n },\n [createAssetSourceInputId, handleMenuItemClick, renderMenuItemLabel, uploadsDisabled],\n )\n\n const handleFileInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const assetSourceName = event.target.dataset.assetSourceName\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return\n }\n if (onSelectFiles && event.target.files) {\n onSelectFiles(assetSource, Array.from(event.target.files))\n }\n event.stopPropagation()\n event.preventDefault()\n },\n [assetSources, onSelectFiles],\n )\n\n const fileInputs = useMemo(() => {\n return assetSources.map((assetSource) => {\n const _id = createAssetSourceInputId(assetSource)\n return (\n <input\n key={_id}\n accept={accept}\n capture={capture}\n id={_id}\n data-asset-source-name={assetSource.name}\n multiple={multiple}\n onChange={handleFileInputChange}\n type=\"file\"\n value=\"\"\n style={{display: 'none'}}\n />\n )\n })\n }, [accept, assetSources, capture, createAssetSourceInputId, handleFileInputChange, multiple])\n\n if (assetSources && assetSources.length > 1) {\n const menuItems = assetSources.map((assetSource) => renderMenuItemForAssetSource(assetSource))\n\n if (renderAsMenuGroup) {\n return (\n <>\n <MenuGroup\n icon={UploadIcon}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n popover={MENU_GROUP_POPOVER}\n >\n {menuItems}\n </MenuGroup>\n {fileInputs}\n </>\n )\n }\n return (\n <>\n <MenuButton\n id={`${uniqId}_upload-button`}\n button={\n <Button\n data-testid=\"file-input-upload-button-0\"\n icon={UploadIcon}\n iconRight={ChevronDownIcon}\n mode=\"bleed\"\n disabled={uploadsDisabled}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n />\n }\n menu={<Menu>{menuItems}</Menu>}\n popover={UPLOAD_DROP_DOWN_MENU_POPOVER}\n />\n {fileInputs}\n </>\n )\n }\n\n return null\n}\n","import {\n AccessDeniedIcon,\n BinaryDocumentIcon,\n ImageIcon,\n ReadOnlyIcon,\n UploadIcon,\n} from '@sanity/icons'\nimport {Flex, Text, useElementSize} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {type FC, type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {type SchemaType} from 'sanity'\nimport {useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {type S3AssetSource, S3AssetType} from '../../types'\nimport {FileInputButton} from '../File/FileInputButton'\nimport {UploadDropDownMenu} from './UploadDropDownMenu'\n\ninterface UploadPlaceholderProps {\n assetSources: S3AssetSource[]\n browse: ReactNode | undefined\n directUploads: boolean | undefined\n onUpload: ((assetSource: S3AssetSource, files: File[]) => void) | undefined\n readOnly: boolean | undefined\n schemaType: SchemaType\n type: S3AssetType\n}\n\nconst RootFlex = styled(Flex)`\n pointer-events: none;\n`\n\nexport const UploadPlaceholder: FC<UploadPlaceholderProps> = (props) => {\n const {assetSources, browse, directUploads, onUpload, readOnly, schemaType, type} = props\n\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const rect = useElementSize(rootElement)\n\n // Adjust the layout in narrow containers\n const collapsed = rect?.border && rect.border.width < 440\n\n const isFileType = type === S3AssetType.FILE\n\n const {t} = useTranslation()\n\n const assetSourcesWithUpload = useMemo(() => {\n const result: S3AssetSource[] = assetSources.filter((s) => Boolean(s.Uploader))\n\n return result\n }, [assetSources])\n\n const handleSelectFiles = useCallback(\n (assetSource: S3AssetSource, files: File[]) => {\n if (onUpload) {\n onUpload(assetSource, files)\n }\n },\n [onUpload],\n )\n\n const accept = get(schemaType, 'options.accept', isFileType ? '' : 'image/*')\n\n const uploadButton = useMemo(() => {\n switch (assetSourcesWithUpload.length) {\n case 0:\n return null\n case 1:\n return (\n <FileInputButton\n accept={accept}\n disabled={readOnly || directUploads === false}\n icon={UploadIcon}\n mode=\"bleed\"\n onSelect={(files) => {\n if (onUpload) {\n onUpload(assetSourcesWithUpload[0], files)\n }\n }}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n />\n )\n default:\n return (\n <UploadDropDownMenu\n accept={accept}\n assetSources={assetSourcesWithUpload}\n directUploads={directUploads}\n onSelectFiles={handleSelectFiles}\n readOnly={readOnly}\n />\n )\n }\n }, [accept, assetSourcesWithUpload, directUploads, handleSelectFiles, onUpload, readOnly, t])\n\n const messageIcon = useMemo(() => {\n if (readOnly) {\n return <ReadOnlyIcon />\n }\n\n if (directUploads === false) {\n return <AccessDeniedIcon />\n }\n\n return isFileType ? <BinaryDocumentIcon /> : <ImageIcon />\n }, [directUploads, isFileType, readOnly])\n\n const messageText = useMemo(() => {\n if (directUploads === false) {\n return \"Can't upload files here\"\n }\n\n if (readOnly) {\n return 'Read only'\n }\n\n return isFileType ? 'Drag or paste file here' : 'Drag or paste image here'\n }, [directUploads, readOnly, isFileType])\n\n return assetSourcesWithUpload.length === 0 ? null : (\n <Flex\n align={collapsed ? undefined : 'center'}\n direction={collapsed ? 'column' : 'row'}\n gap={4}\n justify=\"space-between\"\n paddingY={collapsed ? 1 : undefined}\n ref={setRootElement}\n >\n <Flex flex={1}>\n <RootFlex align=\"center\" gap={3} justify=\"center\" paddingLeft={1}>\n <Text muted size={1}>\n {messageIcon}\n </Text>\n\n <Text size={1} muted>\n {messageText}\n </Text>\n </RootFlex>\n </Flex>\n\n <Flex align=\"center\" gap={1} justify=\"center\" wrap=\"wrap\">\n {uploadButton}\n {browse}\n </Flex>\n </Flex>\n )\n}\n","import {Card, Code, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type FC, useEffect} from 'react'\nimport {LinearProgress, Translate, type UploadState, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {STALE_UPLOAD_MS} from '../../constants'\nimport {Button} from '../UI'\n\nconst FlexWrapper = styled(Flex)`\n box-sizing: border-box;\n text-overflow: ellipsis;\n overflow: hidden;\n overflow: clip;\n`\n\nconst LeftSection = styled(Stack)`\n position: relative;\n width: 60%;\n`\n\nconst CodeWrapper = styled(Code)`\n position: relative;\n width: 100%;\n\n code {\n overflow: hidden;\n overflow: clip;\n text-overflow: ellipsis;\n position: relative;\n max-width: 200px;\n }\n`\n\ninterface UploadProgressProps {\n uploadState: UploadState\n onCancel?: () => void\n onStale?: () => void\n}\n\nconst elapsedMs = (date: string): number => new Date().getTime() - new Date(date).getTime()\n\nexport const UploadProgress: FC<UploadProgressProps> = (props) => {\n const {uploadState, onCancel, onStale} = props\n const filename = uploadState.file.name\n\n useEffect(() => {\n if (elapsedMs(uploadState.updatedAt) > STALE_UPLOAD_MS) {\n onStale?.()\n }\n }, [uploadState.updatedAt, onStale])\n\n const {t} = useTranslation()\n\n return (\n <Card tone=\"primary\" border>\n <FlexWrapper\n padding={4}\n align=\"center\"\n justify=\"space-between\"\n height=\"fill\"\n direction=\"row\"\n gap={2}\n >\n <LeftSection>\n <Flex justify=\"center\" gap={[3, 3, 2, 2]} direction={['column', 'column', 'row']}>\n <Text size={1}>\n <Inline space={2}>\n <Translate\n t={t}\n i18nKey=\"input.files.common.upload-progress\"\n components={{\n FileName: () => <CodeWrapper size={1}>{filename ? filename : '…'}</CodeWrapper>,\n }}\n />\n </Inline>\n </Text>\n </Flex>\n\n <Card border marginTop={3} radius={5}>\n <LinearProgress value={uploadState.progress} />\n </Card>\n </LeftSection>\n\n {onCancel ? (\n <Button\n mode=\"ghost\"\n onClick={onCancel}\n text={t('input.files.common.cancel-upload')}\n tone=\"critical\"\n />\n ) : null}\n </FlexWrapper>\n </Card>\n )\n}\n","import {Box, Flex, Stack, Text, useGlobalKeyDown} from '@sanity/ui'\nimport {type FC, type MouseEvent, useCallback} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport type {S3AssetSource} from '../../types'\nimport {Button, Dialog} from '../UI'\n\ninterface UploadDestinationPickerProps {\n assetSources: S3AssetSource[]\n onSelectAssetSource?: (source: S3AssetSource | null) => void\n onClose?: () => void\n text?: string\n}\n\nexport const UploadDestinationPicker: FC<UploadDestinationPickerProps> = (props) => {\n const {assetSources, onSelectAssetSource, text, onClose} = props\n\n const assetSourcesWithUpload = assetSources.filter((s) => Boolean(s.Uploader))\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const target = event.currentTarget as HTMLElement\n const sourceName = target.getAttribute('data-asset-source-name') as string\n const assetSource = assetSources.find((source) => source.name === sourceName)\n if (assetSource && onSelectAssetSource) {\n onSelectAssetSource(assetSource)\n }\n },\n [assetSources, onSelectAssetSource],\n )\n\n useGlobalKeyDown((event) => {\n if (event.key === 'Escape') {\n if (onClose) {\n onClose()\n }\n }\n })\n\n if (assetSourcesWithUpload.length === 0) {\n return null\n }\n\n return (\n <Dialog\n onClickOutside={onClose}\n onClose={onClose}\n id=\"upload-destination-picker\"\n header={\n <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n }\n width={1}\n bodyHeight=\"stretch\"\n >\n <Box padding={2}>\n <Stack space={2}>\n {assetSourcesWithUpload.map((assetSource) => {\n const Icon = assetSource.icon\n return (\n <Button\n key={assetSource.name}\n data-asset-source-name={assetSource.name}\n mode=\"bleed\"\n onClick={handleClick}\n tone=\"default\"\n tooltipProps={null}\n >\n <Flex align=\"center\">\n {isValidElementType(Icon) && <Icon style={{fontSize: '2rem'}} />}\n <Box>\n <Text>{assetSource.title}</Text>\n </Box>\n </Flex>\n </Button>\n )\n })}\n </Stack>\n </Box>\n </Dialog>\n )\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n type ClipboardEvent,\n type ComponentType,\n type DragEvent,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport type {FileInfo} from '../../types'\nimport {imageUrlToBlob} from '../../utils'\n\nconst extractDroppedFiles = async (dataTransfer: DataTransfer): Promise<File[]> => {\n return Array.from(dataTransfer.files)\n}\n\nconst extractPastedFiles = async (clipboardData: DataTransfer): Promise<File[]> => {\n return Array.from(clipboardData.files)\n}\n\ntype CamelToKebab<S extends string> = S extends `${infer P1}${infer P2}`\n ? P2 extends Uncapitalize<P2>\n ? `${Lowercase<P1>}${CamelToKebab<P2>}`\n : `${Lowercase<P1>}-${CamelToKebab<Uncapitalize<P2>>}`\n : S\n\ntype DataAttribute<S extends string> = `data-${CamelToKebab<S>}`\n\nconst fileTargetDataAttribute: Record<DataAttribute<'isFileTarget'>, 'true'> = {\n 'data-is-file-target': 'true',\n}\n\n// this is a hack for Safari that reads pasted image(s) from an ContentEditable div instead of the onpaste event\nconst convertImagesToFilesAndClearContentEditable = (\n element: HTMLElement,\n targetFormat = 'image/jpeg',\n): Promise<File[]> => {\n if (!element.isContentEditable) {\n return Promise.reject(\n new Error(\n `Expected element to be contentEditable=\"true\". Instead found a non contenteditable ${element.tagName}`,\n ),\n )\n }\n return new Promise((resolve) => setTimeout(resolve, 10)) // add a delay so the paste event can finish\n .then(() => Array.from(element.querySelectorAll('img')))\n .then((imageElements) => {\n element.innerHTML = '' // clear\n return imageElements\n })\n .then((images) => Promise.all(images.map((img) => imageUrlToBlob(img.src))))\n .then((imageBlobs) =>\n imageBlobs.map((blob) => new File([blob!], 'pasted-image.jpg', {type: targetFormat})),\n )\n}\n\n// needed by Edge\nconst select = (el: Element) => {\n const range = document.createRange()\n range.selectNodeContents(el)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n}\n\ntype Props = {\n onFiles?: (files: File[]) => void\n onFilesOver?: (files: FileInfo[]) => void\n onFilesOut?: () => void\n pasteTarget?: HTMLElement\n disabled?: boolean\n}\n\ntype ManagedProps =\n | 'onDrop'\n | 'onDragOver'\n | 'onPaste'\n | 'onDragEnter'\n | 'onDragLeave'\n | 'onKeyDown'\n\nconst PASTE_INPUT_STYLE = {opacity: 0, position: 'absolute'} as const\n\nexport function UploadFileTarget<ComponentProps>(Component: ComponentType<ComponentProps>) {\n // eslint-disable-next-line react/display-name\n return (props: Omit<ComponentProps, ManagedProps> & Props) => {\n const {onFiles, onFilesOver, onFilesOut, pasteTarget, disabled, ...rest} = props\n const [showPasteInput, setShowPasteInput] = useState(false)\n\n const pasteInput = useRef<HTMLDivElement | null>(null)\n const ref = useRef<HTMLElement | null>(null)\n\n const enteredElements = useRef<Element[]>([])\n\n const emitFiles = useCallback(\n (files: File[]) => {\n onFiles?.(files)\n },\n [onFiles],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n !pasteTarget &&\n event.target === ref.current &&\n (event.ctrlKey || event.metaKey) &&\n event.key === 'v'\n ) {\n setShowPasteInput(true)\n }\n },\n [pasteTarget],\n )\n\n const handlePaste = useCallback(\n (event: ClipboardEvent) => {\n void extractPastedFiles(event.clipboardData)\n .then((files) => {\n if (pasteTarget) {\n return files\n }\n if (!pasteInput.current) {\n return []\n }\n return files.length > 0\n ? files\n : // Invoke Safari hack if we didn't get any files\n convertImagesToFilesAndClearContentEditable(pasteInput.current, 'image/jpeg')\n })\n .then((files) => {\n emitFiles(files)\n if (!pasteTarget) {\n setShowPasteInput(false)\n ref.current?.focus()\n }\n })\n },\n [emitFiles, pasteTarget],\n )\n\n useEffect(() => {\n if (pasteTarget) {\n const pasteTargetElementListener = (event: globalThis.ClipboardEvent) => {\n // Some applications may put both text and files on the clipboard when content is copied (Word, Excel etc).\n // If we have both text and html on the clipboard, the intention is probably to paste text, so ignore the files.\n const hasHtml = !!event.clipboardData?.getData('text/html')\n const hasText = !!event.clipboardData?.getData('text/plain')\n if (hasHtml && hasText) {\n console.warn(\n 'Clipboard contains both text and HTML, ignoring additional file data on the clipboard.',\n )\n return\n }\n handlePaste(event as unknown as ClipboardEvent)\n }\n pasteTarget.addEventListener('paste', pasteTargetElementListener)\n return () => {\n pasteTarget.removeEventListener('paste', pasteTargetElementListener)\n }\n }\n return undefined\n }, [pasteTarget, handlePaste])\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n enteredElements.current = []\n\n event.preventDefault()\n event.stopPropagation()\n const dataTransfer = event.nativeEvent.dataTransfer\n\n if (onFiles && dataTransfer) {\n void extractDroppedFiles(dataTransfer).then((files) => {\n if (files) {\n emitFiles(files)\n }\n })\n }\n onFilesOut?.()\n },\n [emitFiles, onFiles, onFilesOut],\n )\n\n const handleDragOver = useCallback(\n (event: DragEvent) => {\n if (onFiles) {\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [onFiles],\n )\n\n const handleDragEnter = useCallback(\n (event: DragEvent) => {\n const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n type: item.type,\n kind: item.kind,\n }))\n\n event.stopPropagation()\n\n if (onFilesOver && ref.current === event.currentTarget) {\n /* this is a (hackish) work around to have the drag and drop work when the file is hovered back and forth over it\n as part of the refactor and adding more components to the \"hover\" state, it didn't recognise that it just kept adding the same\n element over and over, so when it tried to remove them on the handleDragLeave, it only removed the last instance.\n */\n enteredElements.current = [...new Set(enteredElements.current), event.currentTarget]\n\n onFilesOver(fileTypes)\n }\n },\n [onFilesOver],\n )\n\n const handleDragLeave = useCallback(\n (event: DragEvent) => {\n event.stopPropagation()\n const idx = enteredElements.current.indexOf(event.currentTarget)\n if (idx > -1) {\n enteredElements.current.splice(idx, 1)\n }\n if (enteredElements.current.length === 0) {\n onFilesOut?.()\n }\n },\n [onFilesOut],\n )\n\n const prevShowPasteInput = useRef(false)\n\n useEffect(() => {\n if (!prevShowPasteInput.current && showPasteInput && pasteInput.current) {\n pasteInput.current.focus()\n select(pasteInput.current) // Needed by Edge\n } else if (prevShowPasteInput.current && !showPasteInput) {\n pasteInput.current?.focus()\n }\n prevShowPasteInput.current = showPasteInput\n }, [pasteTarget, showPasteInput])\n\n return (\n <>\n <Component\n {...(rest as ComponentProps)}\n ref={ref}\n onKeyDown={disabled ? undefined : handleKeyDown}\n onDragOver={disabled ? undefined : handleDragOver}\n onDragEnter={disabled ? undefined : handleDragEnter}\n onDragLeave={disabled ? undefined : handleDragLeave}\n onDrop={disabled ? undefined : handleDrop}\n {...fileTargetDataAttribute}\n />\n\n {!disabled && showPasteInput && (\n <div contentEditable onPaste={handlePaste} ref={pasteInput} style={PASTE_INPUT_STYLE} />\n )}\n </>\n )\n }\n}\n","import {AccessDeniedIcon, UploadIcon} from '@sanity/icons'\nimport {Box, Card, type CardTone, Flex, Inline, Layer, Text, useToast} from '@sanity/ui'\nimport {uniqBy} from 'lodash'\nimport {type FC, type ReactNode, useCallback, useMemo, useRef, useState} from 'react'\nimport {type FileLike, type InputOnSelectFileFunctionProps, type SchemaType,useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport type {FileInfo, S3AssetSource, S3FileSchemaType, S3ImageSchemaType} from '../../types'\nimport {accepts} from '../../utils'\nimport {UploadDestinationPicker} from './UploadDestinationPicker'\nimport {UploadFileTarget} from './UploadFileTarget'\n\ntype FileEntry = {\n file: File\n schemaType: SchemaType | null\n assetSource: S3AssetSource | null\n}\n\nconst StyledCard = styled(Card)`\n height: 100%;\n`\n\nconst Overlay = styled(Layer)`\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n top: -2px;\n left: -2px;\n right: -2px;\n bottom: -2px;\n background-color: var(--card-bg-color);\n opacity: 0.8;\n`\n\nconst Sticky = styled(Box)`\n position: sticky;\n top: 0;\n bottom: 0;\n margin: auto;\n`\n\nconst fileMatchesSchema = (\n file: FileLike,\n schemaType: S3FileSchemaType | S3ImageSchemaType,\n): boolean => {\n const accept = schemaType.options?.accept\n\n if (!accept) return true\n return accepts(file, accept)\n}\n\nconst getFilesAndAssetSources = ({\n files,\n schemaType,\n assetSources,\n directUploads,\n destinationName,\n}: {\n files: File[]\n schemaType: S3FileSchemaType | S3ImageSchemaType\n assetSources: S3AssetSource[]\n directUploads: boolean | undefined\n destinationName: string | null\n}): FileEntry[] => {\n if (!directUploads) {\n return files.map((file) => ({\n file,\n schemaType: null,\n assetSource: null,\n }))\n }\n\n const uploadSources = assetSources.filter((s) => Boolean(s.Uploader))\n\n return files.map((file) => {\n if (!fileMatchesSchema(file, schemaType)) {\n return {file, schemaType: null, assetSource: null}\n }\n\n const assetSource =\n uploadSources.find((source) => !destinationName || source.name === destinationName) ?? null\n\n return {\n file,\n schemaType: assetSource ? schemaType : null,\n assetSource,\n }\n })\n}\n\ntype UploadTargetCardProps = Parameters<typeof Card>['0'] & {\n directUploads: boolean | undefined\n assetSources: S3AssetSource[]\n schemaType: S3FileSchemaType | S3ImageSchemaType\n isReadOnly?: boolean\n onSetHoveringFiles?: (files: FileInfo[]) => void\n onSelectFile?: (\n props: Omit<InputOnSelectFileFunctionProps, 'assetSource'> & {assetSource: S3AssetSource},\n ) => void\n pasteTarget?: HTMLElement\n children?: ReactNode\n}\n\nconst Root = styled.div`\n position: relative;\n`\n\nexport const UploadTargetCard: FC<UploadTargetCardProps> = (props) => {\n const {\n schemaType,\n children,\n assetSources,\n isReadOnly,\n pasteTarget,\n onSelectFile,\n onSetHoveringFiles,\n tone: toneFromProps,\n directUploads,\n ...rest\n } = props\n\n const assetSourcesWithUpload = useMemo(\n () => assetSources.filter((source) => Boolean(source.Uploader)),\n [assetSources],\n )\n\n const FileTarget = UploadFileTarget(StyledCard)\n\n const {push: pushToast} = useToast()\n const {t} = useTranslation()\n\n const [filesToUpload, setFilesToUpload] = useState<File[]>([])\n const [showAssetSourceDestinationPicker, setShowAssetSourceDestinationPicker] = useState(false)\n const [tone, setTone] = useState<CardTone>(\n toneFromProps || (isReadOnly ? 'transparent' : 'default'),\n )\n\n const assetSourceDestinationName = useRef<string | null>(null)\n\n const alertRejectedFiles = useCallback(\n (rejected: FileEntry[]) => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('inputs.array.error.cannot-upload-unable-to-convert', {\n count: rejected.length,\n }),\n description: rejected.map((task, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Flex key={i} gap={2} padding={2}>\n <Box>\n <Text weight=\"medium\">{task.file.name}</Text>\n </Box>\n <Box>\n <Text size={1}>({task.file.type})</Text>\n </Box>\n </Flex>\n )),\n })\n },\n [pushToast, t],\n )\n\n // This is called after the user has dropped or pasted files and selected an asset source destination (if applicable)\n const handleUploadFiles = useCallback(\n (files: File[]) => {\n const filesAndAssetSources = getFilesAndAssetSources({\n files,\n directUploads,\n schemaType,\n assetSources,\n destinationName: assetSourceDestinationName.current,\n })\n\n const ready = filesAndAssetSources.filter((entry) => entry.assetSource !== null)\n const rejected = filesAndAssetSources.filter((entry) => entry.assetSource === null)\n\n if (rejected.length > 0) {\n alertRejectedFiles(rejected)\n }\n\n if (onSelectFile) {\n ready.forEach((entry) => {\n onSelectFile({\n assetSource: entry.assetSource!,\n schemaType: entry.schemaType!,\n file: entry.file,\n })\n })\n }\n },\n [directUploads, schemaType, assetSources, onSelectFile, alertRejectedFiles],\n )\n\n // This is called when files are dropped or pasted onto the upload target. It may show the asset source destination picker if needed.\n const handleFiles = useCallback(\n (files: File[]) => {\n if (isReadOnly) {\n return\n }\n\n const filesAndAssetSources = getFilesAndAssetSources({\n files,\n schemaType,\n destinationName: assetSourceDestinationName.current,\n assetSources,\n directUploads,\n })\n\n const ready = filesAndAssetSources.filter((entry) => entry.assetSource !== null)\n\n if (ready.length === 0) {\n alertRejectedFiles(filesAndAssetSources)\n return\n }\n\n const uniqueAssetSources = uniqBy(assetSourcesWithUpload, 'name')\n if (uniqueAssetSources.length > 1 && !assetSourceDestinationName.current) {\n setShowAssetSourceDestinationPicker(true)\n setFilesToUpload(files)\n return\n }\n setShowAssetSourceDestinationPicker(false)\n setFilesToUpload([])\n handleUploadFiles(ready.map((entry) => entry.file))\n },\n [\n isReadOnly,\n schemaType,\n assetSources,\n directUploads,\n assetSourcesWithUpload,\n handleUploadFiles,\n alertRejectedFiles,\n ],\n )\n\n const [hoveringFiles, setHoveringFiles] = useState<FileInfo[]>([])\n\n const handleFilesOver = useCallback(\n (files: FileInfo[]) => {\n if (isReadOnly) {\n return\n }\n setHoveringFiles(files)\n\n const acceptedFiles = files.filter((file) => fileMatchesSchema(file, schemaType))\n\n const rejectedFilesCount = files.length - acceptedFiles.length\n\n if (rejectedFilesCount > 0) {\n setTone('critical')\n } else if (acceptedFiles.length > 0) {\n setTone('primary')\n } else {\n setTone('default')\n }\n\n if (onSetHoveringFiles) {\n onSetHoveringFiles(files)\n }\n },\n [isReadOnly, onSetHoveringFiles, schemaType],\n )\n\n const handleFilesOut = useCallback(() => {\n if (isReadOnly) {\n return\n }\n setHoveringFiles([])\n setTone('default')\n if (onSetHoveringFiles) {\n onSetHoveringFiles([])\n }\n setFilesToUpload([])\n }, [isReadOnly, onSetHoveringFiles])\n\n // Asset sources may be returned for multiple types (file, image), we need to deduplicate them in order to show a unique list\n const assetSourcesWithUploadByName = uniqBy(assetSourcesWithUpload, 'name')\n\n const handleSetAssetSourceDestination = useCallback(\n (assetSource: S3AssetSource | null) => {\n assetSourceDestinationName.current = assetSource?.name ?? null\n if (filesToUpload.length > 0 && assetSource) {\n handleUploadFiles(filesToUpload)\n }\n setFilesToUpload([])\n setShowAssetSourceDestinationPicker(false)\n assetSourceDestinationName.current = null\n },\n [filesToUpload, handleUploadFiles],\n )\n\n const handleUploadDestinationPickerClose = useCallback(() => {\n handleFilesOver([])\n setFilesToUpload([])\n setShowAssetSourceDestinationPicker(false)\n assetSourceDestinationName.current = null\n }, [handleFilesOver])\n\n const uploadDestinationPickerText = t(\n 'inputs.files.common.placeholder.select-asset-source-upload-destination',\n {\n context: schemaType.name,\n },\n )\n\n const acceptedFiles = hoveringFiles.filter((file) => fileMatchesSchema(file, schemaType))\n\n const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n return (\n <Root>\n {showAssetSourceDestinationPicker && (\n <UploadDestinationPicker\n assetSources={assetSourcesWithUploadByName}\n onSelectAssetSource={handleSetAssetSourceDestination}\n onClose={handleUploadDestinationPickerClose}\n text={uploadDestinationPickerText}\n />\n )}\n\n <FileTarget\n {...rest}\n tone={toneFromProps || tone}\n onFiles={handleFiles}\n onFilesOver={handleFilesOver}\n onFilesOut={handleFilesOut}\n pasteTarget={pasteTarget}\n >\n {hoveringFiles.length > 0 && (\n <Overlay zOffset={10}>\n <Sticky paddingBottom={3} paddingTop={3}>\n {acceptedFiles.length > 0 ? (\n <>\n <Inline space={2}>\n <Text>\n <UploadIcon />\n </Text>\n {t('inputs.files.common.drop-message.drop-to-upload')}\n <Text />\n </Inline>\n\n {rejectedFilesCount > 0 && (\n <Box marginTop={4}>\n <Inline space={2}>\n <Text muted size={1}>\n <AccessDeniedIcon />\n </Text>\n <Text muted size={1}>\n {t(\n 'inputs.files.common.drop-message.drop-to-upload.rejected-file-message',\n {\n count: rejectedFilesCount,\n },\n )}\n </Text>\n </Inline>\n </Box>\n )}\n </>\n ) : (\n <Inline space={2}>\n <Text>\n <AccessDeniedIcon />\n </Text>\n <Text>\n {t('inputs.files.common.drop-message.drop-to-upload.no-accepted-file-message', {\n count: hoveringFiles.length,\n })}\n </Text>\n </Inline>\n )}\n </Sticky>\n </Overlay>\n )}\n {children}\n </FileTarget>\n </Root>\n )\n}\n"],"names":["useKeyPress","hotkey","onPress","$","_c","keyPressed","useRef","t0","e","isHotkey","current","downHandler","t1","Symbol","for","upHandler","t2","t3","window","addEventListener","removeEventListener","useEffect","useTypedSelector","useSelector","FONT_SIZE","SUBTITLE_FONT_SIZE","SubtitleText","styled","Text","PreviewWrapper","Box","MenuItem","forwardRef","ref","Icon","IconRight","__unstable_space","__unstable_subtitle","badgeText","childrenProp","disabled","hotkeys","renderMenuItem","rest","text","tooltipProps","children","icon","iconRight","preview","undefined","jsx","opacity","Flex","jsxs","isValidElement","isValidElementType","t4","Stack","t5","Hotkeys","marginTop","marginBottom","Badge","t6","menuItemContent","t7","t8","t9","t10","UIMenuItem","t11","content","t12","t13","Tooltip","LARGE_BUTTON_PROPS","space","padding","DEFAULT_BUTTON_PROPS","TooltipButtonWrapper","span","Button","paddingLeft","paddingY","size","mode","tone","sizeProps","UIButton","Dialog","bodyHeight","footer","props","zOffset","animate","t","useTranslation","confirmButton","cancelButton","description","onClose","UIDialog","FileButton","attrs","forwardedAs","css","FileInputButton","accept","capture","idProp","multiple","onSelect","id","useId","event","target","files","Array","from","handleChange","FileMenuItem","FileInputMenuItem","item","DropzoneDispatchContext","createContext","DropzoneDispatchProvider","open","contextValue","useDropzoneActions","context","useContext","Error","AssetSourceDispatchContext","AssetBrowserDispatchProvider","useAssetSourceActions","accepts","file","acceptedFiles","acceptedFilesArray","isArray","split","fileName","name","mimeType","type","toLowerCase","baseMimeType","replace","some","validType","trim","charAt","endsWith","hashFile","arrayBuffer","then","buffer","crypto","subtle","digest","hash","Uint8Array","map","b","toString","padStart","join","imageUrlToBlob","imageUrl","format","quality","match","Promise","reject","resolve","loader","Image","crossOrigin","referrerPolicy","onload","canvas","document","createElement","width","height","getContext","drawImage","toBlob","error","src","constructFilter","assetTypes","searchQuery","documentAssetTypes","groq","JSON","stringify","PREVIEW_WIDTH","createBlob","img","imageAspect","Math","max","err","console","warn","createImageEl","blobUrlLarge","URL","createObjectURL","revokeObjectURL","generatePreviewBlobUrl","imageEl","blob","generatePreviewBlobUrl$","of","pipe","mergeMap","getAssetResolution","asset","metadata","dimensions","SCHEME_COLORS","bg","dark","hues","gray","hex","light","bg2","inputEnabledBorder","studioTheme","color","default","input","enabled","border","inputHoveredBorder","hovered","mutedHoveredBg","primary","muted","mutedHoveredFg","fg","mutedSelectedBg","selected","spotBlue","spot","blue","getSchemeColor","scheme","colorKey","getUniqueDocuments","documents","draftIds","reduce","acc","doc","_id","startsWith","concat","slice","filter","includes","UPLOAD_STATUS_KEY","STALE_UPLOAD_MS","SUPPORTED_ASSET_TYPES","S3AssetType","FILE","IMAGE","ORDER_OPTIONS","direction","field","UNSET_UPLOAD_PATCH","unset","createUploadEvent","patches","CLEANUP_EVENT","createInitialUploadPatches","now","Date","toISOString","value","progress","createdAt","updatedAt","set","createInitialUploadEvent","DEFAULT_CONCURRENCY","remove","array","index","indexOf","splice","createThrottler","concurrency","currentSubscriptions","pendingObservables","ready$","Subject","request","observable","Observable","observer","length","scheduleAndWait$","subscribe","subscription","push","unsubscribe","next","shift","asObservable","first","obs","withMaxConcurrency","func","throttler","args","MAX_CONCURRENT_UPLOADS","fetchExistingAsset","client","assetType","fetch","documentType","tag","getImageDimensions","subscriber","url","cleanup","complete","onerror","catchError","getFileExtension","filename","pop","buildFileName","fileId","extension","buildDocumentId","buildAssetDocument","documentId","storeOriginalFilename","baseDocument","_type","assetId","originalFilename","sha1hash","aspectRatio","createCompleteEvent","exists","uploadAsset","s3Client","sanityClient","options","existing","assets","create","uploadS3Asset","ClientError","statusCode","constructor","res","extractErrorProps","message","Object","assign","ServerError","body","response","responseBody","stringifyBody","details","isObject","httpErrorMessage","bodyObj","sliceWithEllipsis","statusMessage","method","headers","str","createFetchClient","controller","AbortController","signal","execute","attemptNumber","timeoutMs","timeout","timeoutId","setTimeout","abort","fetchOptions","clearTimeout","json","catch","status","statusText","fromEntries","entries","maxRetries","delay","retryDelay","pow","defineHttpRequest","config","fetchClient","seen","tap","warnings","forEach","msg","shouldIgnoreWarning","ignoreWarnings","pattern","RegExp","test","defineCreateClientExports","ClassConstructor","createClient","clientRequester","requester","validateAssetType","upload","validators","bucketRegion","bucketKey","getSignedUrlEndpoint","secret","fileSize","fileType","executeUpload","stage","percent","loaded","total","lengthComputable","signedUrlResponse","contentType","signedUrl","canParse","xhr","XMLHttpRequest","onprogress","overallPercent","setRequestHeader","send","deleteAsset","deleteEndpoint","executeDelete","fileKey","ok","ObservableAssetsClient","AssetsClient","lastValueFrom","ObservableS3Client","httpRequest","clone","newConfig","withConfig","thisConfig","S3Client","exp","createS3Client","credentialsNamespace","pluginConfigKeys","key","title","S3MediaContext","S3MediaContextProvider","isCredentialsDialogDismissed","setIsCredentialsDialogDismissed","useState","secrets","credentials","loading","isCredentialsLoading","useSecrets","isCredentialsDialogOpen","s3AssetBaseUrl","cloudfrontDomain","buildS3ImageUrl","baseUrl","buildS3FileUrl","buildAssetUrl","SettingsView","useS3MediaContext","S3MediaOptionsContext","directUploads","S3MediaOptionsContextProvider","useS3MediaOptionsContext","ORDER_DICTIONARY","_createdAt","asc","desc","_updatedAt","getOrderTitle","order","initialState","query","searchSlice","createSlice","reducers","querySet","state","action","payload","searchActions","actions","searchReducer","reducer","UPLOADS_ACTIONS","uploadComplete","createAction","isS3ImageAsset","buildS3ImagePath","isS3FileAsset","buildS3FilePath","defaultOrder","allIds","byIds","fetchCount","fetching","fetchingError","lastPicked","pageIndex","pageSize","view","assetsSlice","extraReducers","builder","addCase","picked","updating","clear","deleteComplete","assetIds","deleteIndex","floor","deleteError","itemErrors","items","deleteRequest","keys","deleteSkipped","reason","fetchComplete","fetchError","fetchRequest","_action","prepare","params","queryFilter","selector","sort","insertUploads","results","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","listenerUpdateQueue","listenerUpdateQueueComplete","loadNextPage","loadPageIndex","orderSet","pick","pickAll","pickClear","values","pickRange","startIndex","findIndex","startId","endIndex","endId","indices","a","tagA","tagB","updateComplete","updateError","updateRequest","viewSet","assetsActions","assetsDeleteEpic","action$","_state$","referenceResults","referenceMap","Map","referenceCount","blockedAssets","get","deletableAssets","blockedIds","deletableIds","blockedActions$","EMPTY","deleteRequests","deleteFlow$","forkJoin","delete","assetsFetchEpic","state$","withLatestFrom","switchMap","result","assetsFetchPageIndexEpic","start","end","documentAssetIds","constructedFilter","search","assetsFetchNextPageEpic","assetsFetchAfterDeleteAllEpic","nextPageIndex","assetsOrderSetEpic","assetsSearchEpic","ofType","debounceTime","assetsListenerCreateQueueEpic","bufferTime","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsSortEpic","assetsUnpickEpic","assetsUpdateEpic","closeDialogId","formData","patch","setIfMissing","opt","commit","updatedAsset","selectAssetsByIds","selectAssetsAllIds","selectAssetById","createSelector","selectAssets","selectAssetsLength","selectAssetsPicked","selectAssetsPickedLength","assetsPicked","assetsReducer","dialogSlice","showConfirmDeleteAssets","suffix","pluralize","confirmCallbackAction","assetItem","confirmText","headerTitle","showAssetEdit","dialogClearOnAssetUpdateEpic","dialogId","dialogActions","dialogReducer","uploadsSlice","checkRequest","checkComplete","blobUrl","objectUrl","previewReady","uploadCancel","uploadError","uploadRequest","uploadProgress","uploadHash","uploadStart","uploadItem","uploadsActions","uploadsAssetStartEpic","merge","takeUntil","v","throwError","empty","uploadsAssetUploadEpic","forceAsAssetType","uploads","uploadsCompleteQueueEpic","uploadsCheckRequestEpic","documentIds","resultHashes","checkedResults","selectUploadById","uploadId","uploadsReducer","notificationsSlice","add","notificationsAssetsDeleteCompleteEpic","deletedCount","notificationsAssetsDeleteErrorEpic","count","notificationsAssetsDeleteSkippedEpic","notificationsAssetsUploadCompleteEpic","notificationsGenericErrorEpic","notificationsActions","notificationsReducer","rootEpic","combineEpics","selectedSlice","selectedReducer","dialog","notifications","rootReducer","combineReducers","selectCombinedItems","uploadIds","assetItems","Container","FileIcon","onClick","assetUrl","ReactFileIcon","defaultStyles","$scheme","$showCheckerboard","GRID_TEMPLATE_COLUMNS","SMALL","LARGE","PANEL_HEIGHT","CardWrapper","CardContainer","$picked","theme","$updating","sanity","orange","ContextActionContainer","BaseCardAsset","useColorSchemeValue","shiftPressed","dispatch","useDispatch","_temp","state_0","stopPropagation","kind","handleAssetClick","e_0","handleContextActionClick","opacityContainer","opacityPreview","cursor","position","transition","left","top","CheckmarkCircleIcon","Spinner","EditIcon","flexShrink","Checkbox","pointerEvents","transform","t14","t15","t16","Card","right","WarningFilledIcon","t17","CardAsset","memo","CardUpload","filesize","base","round","percentLoaded","isComplete","isUploading","isQueued","handleCancelUpload","background","bottom","transformOrigin","CloseIcon","boxShadow","CARD_HEIGHT","CARD_WIDTH","VirtualCell","StyledItemContainer","div","StyledListContainer","AssetGridVirtualized","onLoadMore","selectedAssets","_temp2","selectedIds","totalCount","Item","List","index_0","item_0","overflowX","overflowY","VirtuosoGrid","TableHeaderItem","isActive","handleClick","display","whiteSpace","marginRight","ChevronUpIcon","ChevronDownIcon","Label","TableHeader","itemsLength","numPickedAssets","mediaIndex","useMediaIndex","allSelected","alignItems","borderBottom","gridColumnGap","gridTemplateColumns","letterSpacing","textTransform","visibility","zIndex","Grid","REFERENCE_COUNT_VISIBILITY_DELAY","ContainerGrid","$selected","BaseTableRowAsset","referenceCountVisible","setReferenceCountVisible","refCountVisibleTimeout","opacityCell","gridRowGap","gridTemplateRows","gridColumn","gridRowStart","gridRowEnd","justifyContent","t18","t19","t20","t21","t22","t23","t24","t25","gridRow","t26","lineHeight","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","formatRelative","t54","t55","t56","t57","t58","t59","WithReferringDocuments","Fragment","t60","t61","t62","t63","t64","t65","t66","TableRowAsset","isLoading","referringDocuments","uniqueDocuments","customScrollbar","GlobalStyle","createGlobalStyle","UploadContainer","DragActiveContainer","filterFiles","fileList","filteredFiles","UploadDropzone","isImageAssetType","handleDrop","rejections","flatMap","_temp3","handleDropRejected","dataTransfer","handleFileGetter","getFilesFromEvent","noClick","noDrag","onDrop","onDropRejected","getRootProps","getInputProps","isDragActive","useDropzone","white","code","errors","UPLOAD_DROP_DOWN_MENU_POPOVER","portal","MENU_GROUP_POPOVER","placement","fallbackPlacements","ASSET_SOURCE_DATA_ATTRIBUTE","UploadDropDownMenu","assetSources","onSelectFiles","readOnly","renderAsMenuGroup","uniqueId","uniqId","uploadsDisabled","assetSource","createAssetSourceInputId","assetSourceName","currentTarget","getAttribute","assetSource_0","find","source","element","getElementById","activeElement","click","handleMenuItemClick","assetSourceName_0","assetSource_1","source_0","renderMenuItemLabel","assetSource_2","inputId","startCase","renderMenuItemForAssetSource","event_0","assetSourceName_1","dataset","assetSource_3","source_1","preventDefault","handleFileInputChange","assetSource_4","fileInputs","assetSource_5","menuItems","MenuGroup","UploadIcon","Menu","MenuButton","RootFlex","UploadPlaceholder","browse","onUpload","schemaType","rootElement","setRootElement","rect","useElementSize","collapsed","isFileType","assetSourcesWithUpload","handleSelectFiles","bb0","files_0","uploadButton","bb1","ReadOnlyIcon","AccessDeniedIcon","BinaryDocumentIcon","ImageIcon","messageIcon","bb2","messageText","s","Boolean","Uploader","FlexWrapper","LeftSection","CodeWrapper","Code","elapsedMs","date","getTime","UploadProgress","uploadState","onCancel","onStale","FileName","Inline","Translate","LinearProgress","UploadDestinationPicker","onSelectAssetSource","sourceName","useGlobalKeyDown","T0","T1","T2","fontSize","extractDroppedFiles","extractPastedFiles","clipboardData","fileTargetDataAttribute","convertImagesToFilesAndClearContentEditable","targetFormat","isContentEditable","querySelectorAll","imageElements","innerHTML","images","all","imageBlobs","File","tagName","select","el","range","createRange","selectNodeContents","sel","getSelection","removeAllRanges","addRange","PASTE_INPUT_STYLE","UploadFileTarget","Component","onFiles","onFilesOver","onFilesOut","pasteTarget","showPasteInput","setShowPasteInput","pasteInput","enteredElements","emitFiles","useCallback","handleKeyDown","ctrlKey","metaKey","handlePaste","focus","pasteTargetElementListener","hasHtml","getData","hasText","nativeEvent","handleDragOver","handleDragEnter","fileTypes","Set","handleDragLeave","idx","prevShowPasteInput","StyledCard","Overlay","Layer","Sticky","fileMatchesSchema","getFilesAndAssetSources","destinationName","uploadSources","Root","UploadTargetCard","isReadOnly","onSelectFile","onSetHoveringFiles","toneFromProps","FileTarget","pushToast","useToast","filesToUpload","setFilesToUpload","showAssetSourceDestinationPicker","setShowAssetSourceDestinationPicker","setTone","assetSourceDestinationName","rejected","closable","alertRejectedFiles","filesAndAssetSources","ready","rejected_0","_temp4","entry_1","entry","handleUploadFiles","filesAndAssetSources_0","ready_0","_temp5","uniqBy","_temp6","handleFiles","hoveringFiles","setHoveringFiles","files_1","handleFilesOver","handleFilesOut","assetSourcesWithUploadByName","handleSetAssetSourceDestination","handleUploadDestinationPickerClose","uploadDestinationPickerText","file_0","acceptedFiles_0","rejectedFilesCount_0","rejectedFilesCount","task","i","entry_0","entry_2","entry_3"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sources":["../../src/hooks/useKeyPress.ts","../../src/hooks/useTypedSelector.ts","../../src/components/UI/MenuItem.tsx","../../src/components/UI/Button.tsx","../../src/components/UI/Dialog.tsx","../../src/components/File/FileInputButton.tsx","../../src/components/File/FileInputMenuItem.tsx","../../src/contexts/DropzoneDispatchContext.tsx","../../src/contexts/S3AssetSourceDispatchContext.tsx","../../src/utils/accepts.ts","../../src/utils/file/hashFile.ts","../../src/utils/imageUrlToBlob.ts","../../src/utils/mediaBrowser/constructFilter.ts","../../src/utils/mediaBrowser/generatePreviewBlobUrl.ts","../../src/utils/mediaBrowser/getAssetResolution.ts","../../src/utils/mediaBrowser/getSchemeColor.ts","../../src/utils/mediaBrowser/getUniqueDocuments.ts","../../src/constants.ts","../../src/utils/upload.ts","../../src/utils/withMaxConcurrency.ts","../../src/lib/S3AssetSource/assets.ts","../../src/lib/S3Client/http/errors.ts","../../src/lib/S3Client/http/fetchClient.ts","../../src/lib/S3Client/http/request.ts","../../src/lib/S3Client/defineCreateClient.ts","../../src/lib/S3Client/validators.ts","../../src/lib/S3Client/assets/AssetsClient.ts","../../src/lib/S3Client/S3Client.ts","../../src/lib/S3Client/index.ts","../../src/contexts/S3MediaContext.tsx","../../src/contexts/S3MediaOptionsContext.tsx","../../src/config/orders.ts","../../src/modules/search/index.ts","../../src/modules/uploads/actions.ts","../../src/modules/assets/index.ts","../../src/modules/dialog/index.ts","../../src/modules/uploads/index.ts","../../src/modules/notifications/index.ts","../../src/modules/rootEpic.ts","../../src/modules/selected/index.ts","../../src/modules/rootReducer.ts","../../src/modules/selectors.ts","../../src/components/MediaBrowser/FileIcon/FileIcon.tsx","../../src/components/MediaBrowser/Image/Image.tsx","../../src/components/MediaBrowser/constants.ts","../../src/components/MediaBrowser/CardAsset/CardAsset.tsx","../../src/components/MediaBrowser/CardUpload/CardUpload.tsx","../../src/components/MediaBrowser/AssetGridVirtualized/AssetGridVirtualized.tsx","../../src/components/MediaBrowser/TableHeaderItem/TableHeaderItem.tsx","../../src/components/MediaBrowser/TableHeader/TableHeader.tsx","../../src/components/MediaBrowser/TableRowAsset/TableRowAsset.tsx","../../src/components/MediaBrowser/styled/GlobalStyles/GlobalStyle.tsx","../../src/components/MediaBrowser/UploadDropzone/UploadDropzone.tsx","../../src/components/Upload/UploadDropDownMenu.tsx","../../src/components/Upload/UploadPlaceholder.tsx","../../src/components/Upload/UploadProgress.tsx","../../src/components/Upload/UploadDestinationPicker.tsx","../../src/components/Upload/UploadFileTarget.tsx","../../src/components/Upload/UploadTargetCard.tsx"],"sourcesContent":["import {isHotkey} from 'is-hotkey'\nimport {type RefObject, useCallback, useEffect, useRef} from 'react'\n\nexport const useKeyPress = (hotkey: string, onPress?: () => void): RefObject<boolean> => {\n const keyPressed = useRef(false)\n\n // If pressed key is our target key then set to true\n const downHandler = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey(hotkey, e)) {\n keyPressed.current = true\n if (onPress) {\n onPress()\n }\n }\n },\n [hotkey, onPress],\n )\n\n // If released key is our target key then set to false\n const upHandler = useCallback(() => {\n keyPressed.current = false\n }, [])\n\n // Add event listeners\n useEffect(() => {\n window.addEventListener('keydown', downHandler)\n window.addEventListener('keyup', upHandler)\n // Remove event listeners on cleanup\n return () => {\n window.removeEventListener('keydown', downHandler)\n window.removeEventListener('keyup', upHandler)\n }\n }, [downHandler, upHandler])\n\n return keyPressed\n}\n","import {type TypedUseSelectorHook, useSelector} from 'react-redux'\n\nimport type {RootReducerState} from '../types'\n\nexport const useTypedSelector: TypedUseSelectorHook<RootReducerState> = useSelector\n","import {\n Badge,\n Box,\n Flex,\n Hotkeys,\n MenuItem as UIMenuItem,\n type MenuItemProps as UIMenuItemProps,\n Stack,\n Text,\n Tooltip,\n type TooltipProps,\n} from '@sanity/ui'\nimport {\n forwardRef,\n type HTMLProps,\n isValidElement,\n type JSX,\n type ReactNode,\n type Ref,\n useMemo,\n} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\n\nconst FONT_SIZE = 1\nconst SUBTITLE_FONT_SIZE = 0\n\n/* Using px value here to make title/subtitles align with icon */\nconst SubtitleText = styled(Text)`\n margin-top: 2px;\n`\n\n/** @internal */\ntype MenuItemProps = Pick<\n UIMenuItemProps,\n 'as' | 'icon' | 'iconRight' | 'pressed' | 'selected' | 'tone' | 'hotkeys'\n> & {\n badgeText?: string\n /**\n * Usage of `children` is not supported, import `MenuItem` from `@sanity/ui` instead.\n */\n children?: undefined\n /**\n * Previews should be 25x25.\n */\n preview?: ReactNode\n /**\n * Optional render callback which receives menu item content.\n */\n renderMenuItem?: (menuItemContent: JSX.Element) => ReactNode\n text?: string\n tooltipProps?: TooltipProps | null\n /**\n * Optional subtitle prop for the menu item.\n * While not recommended, it is utilized for the workspace menu button.\n */\n __unstable_subtitle?: string\n /**\n * An optional property to adjust spacing in the preview between the icon and the text.\n * Not recommended, but is applied to the workspace menu button..\n */\n __unstable_space?: number\n}\n\nconst PreviewWrapper = styled(Box)`\n height: 25px;\n width: 25px;\n overflow: hidden;\n`\n\n/**\n * Customized Sanity UI <MenuItem> that restricts usage of `children` to encourage simple,\n * single line menu items.\n *\n * The workspace menu button needed a subtitle - hence, the StudioUI MenuIten now takes a subtitle prop.\n * This is only an escape hatch for the workspace menu button and is not recommended for general use.\n *\n * It also accepts a prop to attach tooltips as well as custom badges too.\n *\n * @internal\n */\nexport const MenuItem = forwardRef(function MenuItem(\n {\n badgeText,\n children: childrenProp,\n disabled,\n hotkeys,\n icon: Icon,\n iconRight: IconRight,\n preview = null,\n renderMenuItem,\n text,\n tooltipProps,\n __unstable_subtitle,\n __unstable_space,\n ...rest\n }: MenuItemProps &\n Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'selected' | 'tabIndex' | 'size'>,\n ref: Ref<HTMLDivElement>,\n) {\n const menuItemContent = useMemo(() => {\n return (\n <Flex align=\"center\" gap={2}>\n {preview && (\n <PreviewWrapper\n style={{opacity: disabled ? 0.25 : undefined}}\n paddingRight={__unstable_space ? 1 : 0}\n >\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n {preview}\n </Flex>\n </PreviewWrapper>\n )}\n {Icon && (\n <Box paddingRight={1}>\n <Text size={FONT_SIZE}>\n {isValidElement(Icon) && Icon}\n {isValidElementType(Icon) && <Icon />}\n </Text>\n </Box>\n )}\n {text && (\n <Stack flex={1} space={__unstable_subtitle ? 1 : 2}>\n <Text size={FONT_SIZE} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n {__unstable_subtitle && (\n <SubtitleText size={SUBTITLE_FONT_SIZE} textOverflow=\"ellipsis\" weight=\"medium\" muted>\n {__unstable_subtitle}\n </SubtitleText>\n )}\n </Stack>\n )}\n {(badgeText || hotkeys || IconRight) && (\n <Flex align=\"center\" gap={3} marginLeft={3}>\n {hotkeys && <Hotkeys keys={hotkeys} style={{marginTop: -4, marginBottom: -4}} />}\n\n {badgeText && (\n <Badge fontSize={0} style={{marginTop: -4, marginBottom: -4}}>\n {badgeText}\n </Badge>\n )}\n\n {IconRight && (\n <Text size={FONT_SIZE}>\n {isValidElement(IconRight) && IconRight}\n {isValidElementType(IconRight) && <IconRight />}\n </Text>\n )}\n </Flex>\n )}\n </Flex>\n )\n }, [\n preview,\n disabled,\n __unstable_space,\n Icon,\n text,\n __unstable_subtitle,\n badgeText,\n hotkeys,\n IconRight,\n ])\n\n const children = (\n <UIMenuItem\n disabled={disabled}\n paddingLeft={preview ? 1 : 3}\n paddingRight={3}\n paddingY={preview ? 1 : 3}\n ref={ref}\n {...rest}\n >\n {typeof childrenProp === 'undefined' && typeof renderMenuItem === 'function'\n ? renderMenuItem(menuItemContent)\n : menuItemContent}\n </UIMenuItem>\n )\n\n if (tooltipProps) {\n return (\n <Tooltip content={tooltipProps?.content} portal {...tooltipProps}>\n {/* This div is needed to make the tooltip work in disabled menu items */}\n <div>{children}</div>\n </Tooltip>\n )\n }\n\n return children\n})\n","import {\n Button as UIButton,\n type ButtonProps as UIButtonProps,\n Tooltip,\n type TooltipProps,\n} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, type HTMLProps} from 'react'\nimport {styled} from 'styled-components'\n\ntype BaseButtonProps = Pick<\n UIButtonProps,\n | 'as'\n | 'icon'\n | 'iconRight'\n | 'justify'\n | 'loading'\n | 'mode'\n | 'paddingY'\n | 'paddingLeft'\n | 'selected'\n | 'tone'\n | 'type'\n | 'width'\n> & {\n size?: 'default' | 'large'\n radius?: 'full'\n}\n\ntype ButtonWithText = {\n text: string\n tooltipProps?: TooltipProps | null\n icon?: UIButtonProps['icon']\n}\n\ntype IconButton = {\n text?: undefined\n icon?: UIButtonProps['icon']\n /**\n * When using a button with an icon, tooltipProps are required to enforce consistency in UI.\n */\n tooltipProps: TooltipProps | null\n}\n\n/** @internal */\nexport type ButtonProps = BaseButtonProps & (ButtonWithText | IconButton)\n\nconst LARGE_BUTTON_PROPS = {\n space: 3,\n padding: 3,\n}\nconst DEFAULT_BUTTON_PROPS = {\n space: 2,\n padding: 2,\n}\n\nconst TooltipButtonWrapper = styled.span`\n display: inline-flex;\n`\n\nexport const Button = forwardRef(function Button(\n {\n size = 'default',\n mode = 'default',\n paddingY,\n paddingLeft,\n tone = 'default',\n tooltipProps,\n ...rest\n }: ButtonProps & Omit<HTMLProps<HTMLButtonElement>, 'as' | 'size' | 'title'>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n const sizeProps = size === 'default' ? DEFAULT_BUTTON_PROPS : LARGE_BUTTON_PROPS\n\n const children = (\n <UIButton\n {...rest}\n {...sizeProps}\n paddingY={paddingY}\n paddingLeft={paddingLeft}\n ref={ref}\n mode={mode}\n tone={tone}\n />\n )\n\n if (tooltipProps) {\n return (\n <Tooltip content={tooltipProps?.content} portal {...tooltipProps}>\n {/* This span is needed to make the tooltip work in disabled buttons */}\n <TooltipButtonWrapper>{children}</TooltipButtonWrapper>\n </Tooltip>\n )\n }\n\n return children\n})\n","import {\n Box,\n type BoxHeight,\n Button as UIButton,\n Dialog as UIDialog,\n type DialogProps as UIDialogProps,\n Flex,\n Text,\n} from '@sanity/ui'\nimport {type ComponentProps, forwardRef, type HTMLProps, type ReactNode, type Ref} from 'react'\nimport {useTranslation} from 'sanity'\n\ntype DialogProps = Pick<\n UIDialogProps,\n | '__unstable_autoFocus'\n | '__unstable_hideCloseButton'\n | 'animate'\n | 'contentRef'\n | 'header'\n | 'id'\n | 'onActivate'\n | 'onClickOutside'\n | 'onClose'\n | 'portal'\n | 'position'\n | 'scheme'\n | 'width'\n> & {\n /**\n * Dialog body height.\n * Set this to 'fill' (i.e. 100%) if you want overflow body content to be contained\n * and not trigger dynamic border visibility.\n */\n bodyHeight?: BoxHeight\n children?: ReactNode\n zOffset?: number\n footer?: {\n cancelButton?: Omit<ComponentProps<typeof UIButton>, 'fontSize' | 'padding'>\n confirmButton?: Omit<ComponentProps<typeof UIButton>, 'fontSize' | 'padding'>\n /**\n * Description to be displayed side by side with the buttons.\n */\n description?: string\n }\n /**\n * If enabled, removes all default padding from dialog content.\n */\n padding?: boolean\n}\n\n/**\n * Customized Sanity UI <Dialog> that enforces an opinionated footer layout with a max of two buttons (confirm and cancel).\n *\n * @internal\n */\nexport const Dialog = forwardRef(function Dialog(\n {\n animate = true,\n bodyHeight,\n children,\n footer,\n padding = true,\n zOffset,\n ...props\n }: DialogProps & Pick<HTMLProps<HTMLDivElement>, 'onDragEnter' | 'onDrop'>,\n ref: Ref<HTMLDivElement>,\n) {\n const {t} = useTranslation()\n\n return (\n <UIDialog\n {...props}\n animate={animate}\n zOffset={zOffset}\n ref={ref}\n footer={\n (footer?.confirmButton || footer?.cancelButton) && (\n <Flex width=\"full\" gap={3} justify=\"flex-end\" padding={3} align=\"center\">\n {footer?.description && (\n <Box flex={1} paddingLeft={1}>\n <Text size={1} muted>\n {footer.description}\n </Text>\n </Box>\n )}\n {props.onClose && (\n <UIButton\n mode=\"bleed\"\n padding={2}\n text={t('common.dialog.cancel-button.text')}\n tone=\"default\"\n onClick={props.onClose}\n data-testid=\"cancel-button\"\n {...footer.cancelButton}\n />\n )}\n {footer.confirmButton && (\n <UIButton\n mode=\"default\"\n padding={2}\n text={t('common.dialog.confirm-button.text')}\n tone=\"critical\"\n data-testid=\"confirm-button\"\n {...footer.confirmButton}\n />\n )}\n </Flex>\n )\n }\n >\n <Box height={bodyHeight} padding={padding ? 4 : 0}>\n {children}\n </Box>\n </UIDialog>\n )\n})\n","import {type ChangeEvent, type FC, type HTMLProps, useCallback, useId} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../UI'\n\ntype FileInputButtonProps = ButtonProps & {\n accept?: string\n capture?: 'user' | 'environment'\n multiple?: boolean\n onSelect?: (files: File[]) => void\n disabled?: boolean\n}\n\nconst FileButton = styled(Button).attrs({forwardedAs: 'label'})(\n () => css`\n // The underlying file input is rendered as children within a Sanity UI <Button> component.\n // The below visibly hides it by targeting the input's parent <span> element, which is\n // added by the <Button> component.\n // TODO: refactor, avoid nth-child selector usage\n & > span:nth-child(2) {\n overflow: hidden;\n overflow: clip;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n `,\n)\n\nexport const FileInputButton: FC<\n FileInputButtonProps &\n Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>\n> = (props) => {\n const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n const id = `${idProp || ''}-${useId()}`\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (onSelect && event.target.files) {\n onSelect(Array.from(event.target.files))\n }\n },\n [onSelect],\n )\n\n return (\n <FileButton\n {...rest}\n space={2}\n padding={2}\n icon={icon}\n text={text}\n htmlFor={id}\n disabled={disabled}\n >\n <input\n accept={accept}\n capture={capture}\n id={id}\n multiple={multiple}\n onChange={handleChange}\n type=\"file\"\n value=\"\"\n disabled={disabled}\n />\n </FileButton>\n )\n}\n","import {type MenuItemProps} from '@sanity/ui'\nimport React, {type ChangeEvent, type FC, type HTMLProps, useCallback, useId} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuItem} from '../UI'\n\nconst FileMenuItem = styled(MenuItem)`\n position: relative;\n\n & input {\n overflow: hidden;\n overflow: clip;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n`\n\ntype FileInputMenuItemProps = Omit<MenuItemProps, 'onSelect'> & {\n accept?: string\n capture?: 'user' | 'environment'\n multiple?: boolean\n onSelect?: (files: File[]) => void\n disabled?: boolean\n}\n\nexport const FileInputMenuItem: FC<\n FileInputMenuItemProps &\n Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>\n> = (props) => {\n const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n\n const id = `${idProp || ''}-${useId()}`\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (onSelect && event.target.files) {\n onSelect(Array.from(event.target.files))\n }\n },\n [onSelect],\n )\n\n const renderMenuItem = useCallback(\n (item: React.JSX.Element) => (\n <div>\n {item}\n {/* Visibly hidden input */}\n <input\n accept={accept}\n capture={capture}\n id={id}\n multiple={multiple}\n onChange={handleChange}\n type=\"file\"\n value=\"\"\n disabled={disabled}\n />\n </div>\n ),\n [accept, capture, disabled, handleChange, id, multiple],\n )\n\n return (\n <FileMenuItem\n {...rest}\n htmlFor={id}\n disabled={disabled}\n icon={icon}\n text={text}\n renderMenuItem={renderMenuItem}\n />\n )\n}\n","import {createContext, type FC, type PropsWithChildren, useContext} from 'react'\n\ntype ContextProps = {\n open: () => void\n}\n\ntype DropzoneDispatchProviderProps = {\n open: () => void\n}\n\nconst DropzoneDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const DropzoneDispatchProvider: FC<PropsWithChildren<DropzoneDispatchProviderProps>> = (\n props,\n) => {\n const {children, open} = props\n\n const contextValue: ContextProps = {open}\n\n return (\n <DropzoneDispatchContext.Provider value={contextValue}>\n {children}\n </DropzoneDispatchContext.Provider>\n )\n}\n\nexport const useDropzoneActions = () => {\n const context = useContext(DropzoneDispatchContext)\n if (context === undefined) {\n throw new Error('useDropzoneActions must be used within an DropzoneDispatchProvider')\n }\n return context\n}\n","import {createContext, type FC, type PropsWithChildren, useContext} from 'react'\n\nimport type {S3AssetSourceComponentProps} from '../types'\n\ntype ContextProps = {\n onSelect?: S3AssetSourceComponentProps['onSelect']\n}\n\ntype AssetBrowserDispatchProviderProps = {\n onSelect?: S3AssetSourceComponentProps['onSelect']\n}\n\nconst AssetSourceDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const AssetBrowserDispatchProvider: FC<\n PropsWithChildren<AssetBrowserDispatchProviderProps>\n> = (props) => {\n const {children, onSelect} = props\n\n const contextValue: ContextProps = {\n onSelect,\n }\n\n return (\n <AssetSourceDispatchContext.Provider value={contextValue}>\n {children}\n </AssetSourceDispatchContext.Provider>\n )\n}\n\nexport const useAssetSourceActions = () => {\n const context = useContext(AssetSourceDispatchContext)\n if (context === undefined) {\n throw new Error('useAssetSourceActions must be used within an AssetSourceDispatchProvider')\n }\n return context\n}\n","import {type FileLike} from 'sanity'\n\n/**\n * Check if the provided file type should be accepted by the input with accept attribute.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept\n *\n * Inspired by https://github.com/enyo/dropzone (MIT) (c) 2021 Matias Meno\n * Based on https://github.com/react-dropzone/attr-accept (MIT) (c) 2015 Andrey Okonetchnikov\n *\n * @param file - https://developer.mozilla.org/en-US/docs/Web/API/File\n * @param acceptedFiles - List of accepted mime types (comma-separated string or array)\n * @returns True if file is accepted, false otherwise\n */\nexport function accepts(file: FileLike, acceptedFiles: string | string[]): boolean {\n if (!file || !acceptedFiles) {\n return true\n }\n\n const acceptedFilesArray = Array.isArray(acceptedFiles)\n ? acceptedFiles // eg `['image/png', 'image/jpeg']`\n : acceptedFiles.split(',') // eg `image/png,image/jpeg`\n\n const fileName = file.name || ''\n const mimeType = (file.type || '').toLowerCase()\n const baseMimeType = mimeType.replace(/\\/.*$/, '')\n\n return acceptedFilesArray.some((type) => {\n const validType = type.trim().toLowerCase()\n\n if (validType.charAt(0) === '.') {\n if (fileName) {\n return fileName.toLowerCase().endsWith(validType)\n }\n // If we do not have a valid fileName and validType is an extension, we\n // should fail open. This happens because when hovering a file, the browser\n // does not pass the name of the file but it will pass the file name when the\n // file is dropped on the file upload input\n return true\n }\n\n if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '')\n }\n\n return mimeType === validType\n })\n}\n","import {from, type Observable} from 'rxjs'\n\nexport const hashFile = (file: File): Observable<string> => {\n return from(\n file.arrayBuffer().then((buffer) => {\n return crypto.subtle.digest('SHA-1', buffer).then((hash) => {\n const hashArray = Array.from(new Uint8Array(hash))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n })\n }),\n )\n}\n","export function imageUrlToBlob(\n imageUrl: string,\n format = 'image/jpeg',\n quality = 1,\n): Promise<Blob | null> {\n if (imageUrl.match(/^webkit-fake-url:\\/\\//)) {\n return Promise.reject(new Error('Cannot read image contents from webkit fake url'))\n }\n\n return new Promise((resolve, reject) => {\n const loader = new Image()\n\n loader.crossOrigin = 'anonymous'\n loader.referrerPolicy = 'strict-origin-when-cross-origin'\n loader.onload = () => {\n const canvas = document.createElement('canvas')\n\n canvas.width = loader.width\n canvas.height = loader.height\n const ctx = canvas.getContext('2d')\n\n ctx?.drawImage(loader, 0, 0, canvas.width, canvas.height)\n try {\n canvas.toBlob(resolve, format, quality)\n } catch (error) {\n reject(error)\n }\n }\n loader.src = imageUrl\n })\n}\n","import groq from 'groq'\n\nimport type {S3AssetType} from '../../types'\n\nexport const constructFilter = ({\n assetTypes,\n searchQuery,\n}: {\n assetTypes: S3AssetType[]\n searchQuery?: string\n}): string => {\n // Fetch asset types depending on current context.\n // Either limit to a specific type (if being used as a custom asset source) or fetch both files and images (if being used as a tool)\n // Sanity will crash if you try and insert incompatible asset types into fields!\n const documentAssetTypes = assetTypes.map((type) => `${type}Asset`)\n\n const baseFilter = groq`\n _type in ${JSON.stringify(documentAssetTypes)} && !(_id in path(\"drafts.**\"))\n `\n\n // Join separate filter fragments\n const constructedQuery = [\n // Base filter\n baseFilter,\n // Search query (if present)\n // NOTE: Currently this only searches direct fields on sanity.fileAsset/sanity.imageAsset and NOT referenced tags\n // It's possible to add this by adding the following line to the searchQuery, but it's quite slow\n // references(*[_type == \"media.tag\" && name.current == \"${searchQuery.trim()}\"]._id)\n ...(searchQuery\n ? [\n groq`[_id, altText, assetId, creditLine, description, originalFilename, title, url] match '*${searchQuery.trim()}*'`,\n ]\n : []),\n ].join(' && ')\n\n return constructedQuery\n}\n","import {from, Observable, of} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nconst PREVIEW_WIDTH = 180 // px\n\nconst createBlob = (img: HTMLImageElement): Promise<Blob | null> => {\n return new Promise((resolve) => {\n const imageAspect = img.width / img.height\n\n // Create a canvas element which we'll use to generate a low resolution preview.\n // Ensure that the canvas is at least 1 pixel high as blob generation will fail otherwise.\n const canvas: HTMLCanvasElement = document.createElement('canvas')\n canvas.width = PREVIEW_WIDTH\n canvas.height = Math.max(PREVIEW_WIDTH / imageAspect, 1)\n\n // Fail silently if we're unable to generate a preview image.\n // This can often be the case when trying to render SVGs containing `<foreignObject>` elements.\n try {\n const ctx = canvas.getContext('2d')\n ctx?.drawImage(img, 0, 0, PREVIEW_WIDTH, PREVIEW_WIDTH / imageAspect)\n canvas.toBlob(resolve, 'image/jpeg')\n } catch (err) {\n console.warn(`Unable to generate preview image:`, err)\n }\n })\n}\n\nconst createImageEl = (file: File): Promise<HTMLImageElement> => {\n return new Promise((resolve) => {\n const blobUrlLarge = window.URL.createObjectURL(file)\n const img = new Image()\n img.onload = () => {\n window.URL.revokeObjectURL(blobUrlLarge)\n resolve(img)\n }\n img.src = blobUrlLarge\n })\n}\n\nconst generatePreviewBlobUrl = async (file: File): Promise<string> => {\n const imageEl = await createImageEl(file)\n const blob = await createBlob(imageEl)\n\n if (!blob) {\n throw Error('Unable to generate file Blob')\n }\n\n return window.URL.createObjectURL(blob)\n}\n\nexport const generatePreviewBlobUrl$ = (file: File): Observable<string> => {\n return of(null).pipe(mergeMap(() => from(generatePreviewBlobUrl(file))))\n}\n","import type {S3ImageAsset} from '../../types'\n\nexport const getAssetResolution = (asset: S3ImageAsset): string => {\n return `${asset.metadata.dimensions.width}x${asset.metadata.dimensions.height}px`\n}\n","import {hues} from '@sanity/color'\nimport {studioTheme, type ThemeColorSchemeKey} from '@sanity/ui'\n\nconst SCHEME_COLORS = {\n bg: {\n dark: hues.gray[950].hex,\n light: hues.gray[50].hex,\n },\n bg2: {\n dark: hues.gray[900].hex,\n light: hues.gray[100].hex,\n },\n inputEnabledBorder: {\n dark: studioTheme.color.dark.default.input.default.enabled.border,\n light: studioTheme.color.light.default.input.default.enabled.border,\n },\n inputHoveredBorder: {\n dark: studioTheme.color.dark.default.input.default.hovered.border,\n light: studioTheme.color.light.default.input.default.hovered.border,\n },\n mutedHoveredBg: {\n dark: studioTheme.color.dark.primary.muted.primary.hovered.bg,\n light: studioTheme.color.light.primary.muted.primary.hovered.bg,\n },\n mutedHoveredFg: {\n dark: studioTheme.color.dark.primary.muted.primary.hovered.fg,\n light: studioTheme.color.light.primary.muted.primary.hovered.fg,\n },\n mutedSelectedBg: {\n dark: studioTheme.color.dark.primary.muted.primary.selected.bg,\n light: studioTheme.color.light.primary.muted.primary.selected.bg,\n },\n spotBlue: {\n dark: studioTheme.color.dark.primary.spot.blue,\n light: studioTheme.color.light.primary.spot.blue,\n },\n}\n\ntype SchemeColorKey = keyof typeof SCHEME_COLORS\n\nexport function getSchemeColor(scheme: ThemeColorSchemeKey, colorKey: SchemeColorKey): string {\n return SCHEME_COLORS[colorKey]?.[scheme]\n}\n","import type {SanityDocument} from '@sanity/client'\n\nexport function getUniqueDocuments(documents: SanityDocument[]): SanityDocument[] {\n const draftIds = documents.reduce(\n (acc: string[], doc: SanityDocument) =>\n doc._id.startsWith('drafts.') ? acc.concat(doc._id.slice(7)) : acc,\n [],\n )\n\n const filteredDocuments: SanityDocument[] = documents.filter(\n (doc: SanityDocument) => !draftIds.includes(doc._id),\n )\n\n return filteredDocuments\n}\n","import {S3AssetType} from './types'\nimport type {Order} from './types/browser'\n\nexport const UPLOAD_STATUS_KEY = '_upload'\nexport const STALE_UPLOAD_MS = 1000 * 60 * 2\n\nexport const SUPPORTED_ASSET_TYPES = [S3AssetType.FILE, S3AssetType.IMAGE]\n\nexport const ORDER_OPTIONS: (Order | null)[] = [\n {\n direction: 'desc',\n field: '_createdAt',\n },\n {\n direction: 'asc',\n field: '_createdAt',\n },\n null,\n {\n direction: 'desc',\n field: '_updatedAt',\n },\n {\n direction: 'asc',\n field: '_updatedAt',\n },\n null,\n {\n direction: 'asc',\n field: 'originalFilename',\n },\n {\n direction: 'desc',\n field: 'originalFilename',\n },\n null,\n {\n direction: 'desc',\n field: 'size',\n },\n {\n direction: 'asc',\n field: 'size',\n },\n]\n","import {type FormPatch, set, unset, type UploadProgressEvent} from 'sanity'\n\nimport {UPLOAD_STATUS_KEY} from '../constants'\n\nconst UNSET_UPLOAD_PATCH = unset([UPLOAD_STATUS_KEY])\n\nexport function createUploadEvent(patches: FormPatch[] = []): UploadProgressEvent {\n return {\n type: 'uploadProgress',\n patches,\n }\n}\n\nexport const CLEANUP_EVENT = createUploadEvent([UNSET_UPLOAD_PATCH])\n\nexport const createInitialUploadPatches = (file: File) => {\n const now = new Date().toISOString()\n const value = {\n progress: 2,\n createdAt: now,\n updatedAt: now,\n file: {name: file.name, type: file.type},\n }\n\n return [set(value, [UPLOAD_STATUS_KEY])]\n}\n\nexport const createInitialUploadEvent = (file: File) => {\n return createUploadEvent(createInitialUploadPatches(file))\n}\n","// Takes a observable-returning function and returns a new function that limits on the number of\n// concurrent observables.\nimport {Observable, Subject, Subscription} from 'rxjs'\nimport {first, mergeMap} from 'rxjs/operators'\n\nconst DEFAULT_CONCURRENCY = 4\n\nfunction remove<T>(array: Array<T>, item: T): Array<T> {\n const index = array.indexOf(item)\n if (index > -1) {\n array.splice(index, 1)\n }\n return array\n}\n\nconst createThrottler = <T>(concurrency: number = DEFAULT_CONCURRENCY) => {\n const currentSubscriptions: Array<Subscription> = []\n const pendingObservables: Array<Observable<T>> = []\n const ready$ = new Subject<Observable<T>>()\n\n function request(observable: Observable<T>): Observable<T> {\n return new Observable((observer) => {\n if (currentSubscriptions.length >= concurrency) {\n return scheduleAndWait$(observable).subscribe(observer)\n }\n const subscription = observable.subscribe(observer)\n currentSubscriptions.push(subscription)\n return () => {\n remove(currentSubscriptions, subscription)\n remove(pendingObservables, observable)\n subscription.unsubscribe()\n while (pendingObservables.length > 0 && currentSubscriptions.length < concurrency) {\n // We check length > 0, so shift() will not return undefined here\n ready$.next(pendingObservables.shift()!)\n }\n }\n })\n }\n\n function scheduleAndWait$(observable: Observable<T>): Observable<T> {\n pendingObservables.push(observable)\n return ready$.asObservable().pipe(\n first((obs) => obs === observable),\n mergeMap((obs) => obs), // Unwrap Observable<Observable<T>> to Observable<T>\n )\n }\n\n return request\n}\n\nexport const withMaxConcurrency = <A extends any[], R>(\n func: (...args: A) => Observable<R>,\n concurrency: number = DEFAULT_CONCURRENCY,\n): ((...args: A) => Observable<R>) => {\n const throttler = createThrottler<R>(concurrency)\n return (...args: A) => throttler(func(...args))\n}\n","/* eslint-disable max-params */\nimport {Observable, of} from 'rxjs'\nimport {catchError, map, mergeMap} from 'rxjs/operators'\nimport {type SanityClient, type UploadOptions} from 'sanity'\n\nimport {\n type S3Asset,\n type S3AssetDocument,\n S3AssetType,\n type S3FileAsset,\n type S3ImageAsset,\n type UploadCompleteEvent,\n type UploadEvent,\n} from '../../types'\nimport {hashFile, withMaxConcurrency} from '../../utils'\nimport type {S3Client} from '../S3Client'\n\nconst MAX_CONCURRENT_UPLOADS = 4\n\ninterface ImageDimensions {\n width: number\n height: number\n}\n\ninterface UploadAssetParams {\n sanityClient: SanityClient\n s3Client: S3Client\n assetType: S3AssetType\n file: File\n options?: UploadOptions\n}\n\nconst fetchExistingAsset = (\n client: SanityClient,\n assetType: S3AssetType,\n id: string,\n): Observable<S3ImageAsset | S3FileAsset | null> =>\n client.observable.fetch(\n '*[_type == $documentType && _id == $id][0]',\n {documentType: `${assetType}Asset`, id},\n {tag: 's3Asset.find-duplicate'},\n )\n\nconst getImageDimensions = (file: File): Observable<ImageDimensions | null> => {\n if (!file.type.startsWith('image/')) {\n return of(null)\n }\n\n return new Observable<ImageDimensions>((subscriber) => {\n const img = new Image()\n const url = URL.createObjectURL(file)\n\n const cleanup = () => URL.revokeObjectURL(url)\n\n img.onload = () => {\n subscriber.next({width: img.width, height: img.height})\n subscriber.complete()\n cleanup()\n }\n\n img.onerror = () => {\n subscriber.error(new Error('Failed to load image'))\n cleanup()\n }\n\n img.src = url\n }).pipe(catchError(() => of(null)))\n}\n\nconst getFileExtension = (filename: string): string => filename.split('.').pop() ?? ''\n\nconst buildFileName = (\n fileId: string,\n extension: string,\n dimensions: ImageDimensions | null,\n): string =>\n dimensions\n ? `${fileId}-${dimensions.width}x${dimensions.height}.${extension}`\n : `${fileId}.${extension}`\n\nconst buildDocumentId = (\n assetType: S3AssetType,\n fileId: string,\n extension: string,\n dimensions: ImageDimensions | null,\n): string =>\n assetType === S3AssetType.IMAGE && dimensions\n ? `${S3AssetType.IMAGE}-${fileId}-${dimensions.width}x${dimensions.height}-${extension}`\n : `${S3AssetType.FILE}-${fileId}-${extension}`\n\nconst buildAssetDocument = (\n assetType: S3AssetType,\n fileId: string,\n file: File,\n documentId: string,\n hash: string | undefined,\n dimensions: ImageDimensions | null,\n storeOriginalFilename: boolean,\n): S3Asset => {\n const baseDocument = {\n _id: documentId,\n _type: assetType === S3AssetType.IMAGE ? 's3ImageAsset' : 's3FileAsset',\n assetId: fileId,\n originalFilename: storeOriginalFilename ? file.name : undefined,\n sha1hash: hash,\n extension: getFileExtension(file.name),\n mimeType: file.type,\n size: file.size,\n } as S3Asset\n\n if (assetType === S3AssetType.IMAGE && dimensions) {\n return {\n ...baseDocument,\n _type: 's3ImageAsset',\n metadata: {\n _type: 's3ImageMetadata',\n dimensions: {\n _type: 's3ImageDimensions',\n height: dimensions.height,\n width: dimensions.width,\n aspectRatio: dimensions.width / dimensions.height,\n },\n },\n }\n }\n\n return baseDocument\n}\n\nconst createCompleteEvent = ({\n asset,\n exists,\n}: {\n asset: S3AssetDocument\n exists?: boolean\n}): UploadCompleteEvent => ({\n type: 'complete',\n id: asset._id,\n asset,\n exists,\n})\n\n// Main Upload Function\nconst uploadAsset = ({\n file,\n assetType,\n s3Client,\n sanityClient,\n options = {},\n}: UploadAssetParams): Observable<UploadEvent> => {\n const {storeOriginalFilename = true} = options\n const extension = getFileExtension(file.name)\n\n return hashFile(file).pipe(\n mergeMap((hash) => {\n const dimensions$ = assetType === S3AssetType.IMAGE ? getImageDimensions(file) : of(null)\n\n return dimensions$.pipe(map((dimensions) => ({hash, dimensions})))\n }),\n\n mergeMap(({hash, dimensions}) => {\n // Check for existing asset if we have a hash\n if (hash) {\n const documentId = buildDocumentId(assetType, hash, extension, dimensions)\n\n return fetchExistingAsset(sanityClient, assetType, documentId).pipe(\n map((existing) => ({existing, hash, dimensions, documentId})),\n )\n }\n\n return of({existing: null, hash, dimensions, documentId: ''})\n }),\n\n mergeMap(({existing, hash, dimensions, documentId}) => {\n // Return early if asset already exists\n if (existing) {\n return of(createCompleteEvent({asset: existing, exists: true}))\n }\n\n const fileName = buildFileName(hash, extension, dimensions)\n\n // Upload to S3 and create Sanity document\n return s3Client.observable.assets.uploadAsset({assetType, file, fileName}).pipe(\n mergeMap((event) => {\n if (event.type !== 'response') {\n return of(event as UploadEvent)\n }\n\n const document = buildAssetDocument(\n assetType,\n hash,\n file,\n documentId,\n hash || undefined,\n dimensions,\n storeOriginalFilename,\n )\n\n return sanityClient.observable\n .create<S3Asset>(document)\n .pipe(map((asset) => createCompleteEvent({asset})))\n }),\n )\n }),\n )\n}\n\nexport const uploadS3Asset = withMaxConcurrency(uploadAsset, MAX_CONCURRENT_UPLOADS)\n","import {isObject} from '../../../utils/isObject'\nimport type {Any, ErrorProps} from '../types'\n\n/**\n * Shared properties for HTTP errors (eg both ClientError and ServerError)\n * Use `isHttpError` for type narrowing and accessing response properties.\n *\n * @public\n */\nexport interface HttpError {\n statusCode: number\n message: string\n response: {\n body: unknown\n url: string\n method: string\n headers: Record<string, string>\n statusCode: number\n statusMessage: string | null\n }\n}\n\n/** @public */\nexport class ClientError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 400\n responseBody: ErrorProps['responseBody']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\n/** @public */\nexport class ServerError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 500\n responseBody: ErrorProps['responseBody']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\nfunction extractErrorProps(res: Any): ErrorProps {\n const body = res.body\n const props = {\n response: res,\n statusCode: res.statusCode,\n responseBody: stringifyBody(body, res),\n message: '',\n details: undefined as Any,\n }\n\n // Fall back early if we didn't get a JSON object returned as expected\n if (!isObject(body)) {\n props.message = httpErrorMessage(res, body)\n return props\n }\n\n // Cast to any for property access after isObject check\n const bodyObj = body as any\n const error = bodyObj.error\n\n // API/Boom style errors ({statusCode, error, message})\n if (typeof error === 'string' && typeof bodyObj.message === 'string') {\n props.message = `${error} - ${bodyObj.message}`\n return props\n }\n\n // Content Lake errors with a `error` prop being an object\n if (typeof error !== 'object' || error === null) {\n if (typeof error === 'string') {\n props.message = error\n } else if (typeof bodyObj.message === 'string') {\n props.message = bodyObj.message\n } else {\n props.message = httpErrorMessage(res, body)\n }\n return props\n }\n\n if ('description' in error && typeof error.description === 'string') {\n // Query/database errors ({error: {description, other, arb, props}})\n props.message = error.description\n props.details = error\n return props\n }\n\n // Other, more arbitrary errors\n props.message = httpErrorMessage(res, body)\n return props\n}\n\nfunction httpErrorMessage(res: Any, body: unknown) {\n const details = typeof body === 'string' ? ` (${sliceWithEllipsis(body, 100)})` : ''\n const statusMessage = res.statusMessage ? ` ${res.statusMessage}` : ''\n return `${res.method}-request to ${res.url} resulted in HTTP ${res.statusCode}${statusMessage}${details}`\n}\n\nfunction stringifyBody(body: Any, res: Any) {\n const contentType = (res.headers['content-type'] || '').toLowerCase()\n const isJson = contentType.indexOf('application/json') !== -1\n return isJson ? JSON.stringify(body, null, 2) : body\n}\n\nfunction sliceWithEllipsis(str: string, max: number) {\n return str.length > max ? `${str.slice(0, max)}…` : str\n}\n","/* eslint-disable consistent-return */\nimport {Observable} from 'rxjs'\n\nimport type {Any, HttpRequestEvent} from '../types'\nimport {ClientError, ServerError} from './errors'\n\ninterface FetchOptions extends globalThis.RequestInit {\n url?: string\n timeout?: number\n retries?: number\n retryDelay?: number\n maxRetries?: number\n body?: any\n}\n\nexport const createFetchClient = () => {\n return (options: FetchOptions): Observable<HttpRequestEvent> => {\n return new Observable((subscriber) => {\n const controller = new AbortController()\n const signal = options.signal || controller.signal\n\n const execute = async (attemptNumber = 0) => {\n try {\n // Validate required fields\n if (!options.url) {\n throw new Error('URL is required for fetch request')\n }\n\n // Set timeout\n const timeoutMs = options.timeout || 5 * 60 * 1000\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n // Prepare fetch options\n const fetchOptions: globalThis.RequestInit = {\n method: options.method || 'GET',\n headers: {\n ...(options.headers || {}),\n },\n signal,\n }\n\n // Only add Content-Type for requests with body\n if (options.body) {\n fetchOptions.body = JSON.stringify(options.body)\n ;(fetchOptions.headers as Record<string, string>)['Content-Type'] = 'application/json'\n }\n\n // Make fetch request\n const response = await fetch(options.url, fetchOptions)\n\n clearTimeout(timeoutId)\n\n // Parse JSON response\n const body = await response.json().catch(() => ({}))\n\n // Emit response event\n const event: Any = {\n type: 'response',\n method: options.method || 'GET',\n statusCode: response.status,\n statusMessage: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n body,\n url: options.url,\n }\n\n // Handle errors\n if (response.status >= 500) {\n const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3\n const shouldRetry = attemptNumber < maxRetries && [502, 503].includes(response.status)\n\n if (shouldRetry) {\n const delay = (options.retryDelay || 1000) * Math.pow(2, attemptNumber)\n await new Promise((resolve) => setTimeout(resolve, delay))\n return execute(attemptNumber + 1)\n }\n\n throw new ServerError(event)\n } else if (response.status >= 400) {\n // Retry rate limiting\n const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3\n\n if (response.status === 429 && attemptNumber < maxRetries) {\n const delay = (options.retryDelay || 1000) * Math.pow(2, attemptNumber)\n await new Promise((resolve) => setTimeout(resolve, delay))\n return execute(attemptNumber + 1)\n }\n\n throw new ClientError(event)\n }\n\n subscriber.next(event)\n subscriber.complete()\n } catch (error) {\n if (error instanceof ClientError || error instanceof ServerError) {\n subscriber.error(error)\n } else {\n subscriber.error(new Error(`HTTP request failed: ${error}`))\n }\n }\n }\n\n execute()\n\n // Cleanup function\n return () => controller.abort()\n })\n }\n}\n","import {tap} from 'rxjs/operators'\n\nimport type {Requester, RequestOptions} from '../types'\nimport {createFetchClient} from './fetchClient'\n\ntype HttpRequestConfig = {\n ignoreWarnings?: string | RegExp | Array<string | RegExp>\n}\n\n/** @internal */\nexport function defineHttpRequest(config: HttpRequestConfig = {}): Requester {\n const fetchClient = createFetchClient()\n const seen: Record<string, boolean> = {}\n\n return (options: RequestOptions) => {\n return fetchClient({\n ...options,\n timeout: options.timeout || 5 * 60 * 1000,\n maxRetries: options.maxRetries === undefined ? 3 : options.maxRetries,\n retryDelay: 1000,\n }).pipe(\n tap((event) => {\n if (event.type === 'response') {\n const warn = event.headers['x-sanity-warning']\n if (!warn) return\n\n const warnings = Array.isArray(warn) ? warn : [warn]\n warnings.forEach((msg) => {\n if (!msg || seen[msg]) return\n\n // Skip warnings that match ignore patterns\n if (shouldIgnoreWarning(msg, config)) return\n\n seen[msg] = true\n console.warn(msg)\n })\n }\n }),\n )\n }\n}\n\nfunction shouldIgnoreWarning(message: string, config: HttpRequestConfig): boolean {\n if (!config.ignoreWarnings) return false\n\n const patterns = Array.isArray(config.ignoreWarnings)\n ? config.ignoreWarnings\n : [config.ignoreWarnings]\n\n return patterns.some((pattern) => {\n if (typeof pattern === 'string') {\n return message.includes(pattern)\n } else if (pattern instanceof RegExp) {\n return pattern.test(message)\n }\n return false\n })\n}\n","import {defineHttpRequest} from './http/request'\nimport type {HttpRequest, S3ClientConfig} from './types'\n\n/**\n * Create the `requester` and `createClient` exports\n * @internal\n */\nexport default function defineCreateClientExports<\n S3ClientType,\n ClientConfigType extends S3ClientConfig,\n>(ClassConstructor: new (httpRequest: HttpRequest, config: ClientConfigType) => S3ClientType) {\n const createClient = (config: ClientConfigType) => {\n const clientRequester = defineHttpRequest()\n\n return new ClassConstructor(\n (options, requester) => (requester || clientRequester)(options),\n config,\n )\n }\n\n return {createClient}\n}\n","import {SUPPORTED_ASSET_TYPES} from '../../constants'\nimport type {S3AssetType} from '../../types'\n\nexport const validateAssetType = (type: S3AssetType): void => {\n if (SUPPORTED_ASSET_TYPES.indexOf(type) === -1) {\n throw new Error(\n `Invalid asset type: ${type}. Must be one of ${SUPPORTED_ASSET_TYPES.join(', ')}`,\n )\n }\n}\n","import {lastValueFrom, Observable} from 'rxjs'\nimport {filter} from 'rxjs/operators'\n\nimport type {S3AssetType} from '../../../types'\nimport type {ObservableS3Client, S3Client} from '../S3Client'\nimport type {HttpRequestEvent, ResponseEvent} from '../types'\nimport * as validators from '../validators'\n\nconst upload = ({\n file,\n fileName,\n client,\n assetType,\n}: {\n file: File\n fileName: string\n client: S3Client | ObservableS3Client\n assetType: S3AssetType\n}): Observable<HttpRequestEvent> => {\n validators.validateAssetType(assetType)\n\n const config = client.config()\n\n const {bucketRegion, bucketKey, getSignedUrlEndpoint, secret} = config\n\n // Validate required config fields\n if (!bucketRegion) {\n throw new Error('S3Client: Missing required config field: bucketRegion')\n }\n if (!bucketKey) {\n throw new Error('S3Client: Missing required config field: bucketKey')\n }\n if (!getSignedUrlEndpoint) {\n throw new Error('S3Client: Missing required config field: getSignedUrlEndpoint')\n }\n if (!secret) {\n throw new Error('S3Client: Missing required config field: secret')\n }\n\n if (!fileName) {\n throw new Error('S3Client: filename is required in options')\n }\n\n const fileSize = file.size || 0\n const fileType = file.type\n\n return new Observable((subscriber) => {\n const executeUpload = async () => {\n try {\n // Stage 1: Get Signed URL (0-10%)\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: 5,\n loaded: 0,\n total: fileSize,\n lengthComputable: true,\n })\n\n if (!getSignedUrlEndpoint) {\n throw new Error('getSignedUrlEndpoint is not defined')\n }\n\n // Fetch signed URL\n const signedUrlResponse = await fetch(getSignedUrlEndpoint, {\n method: 'POST',\n body: JSON.stringify({\n secret,\n fileName,\n bucketKey,\n bucketRegion,\n contentType: file.type,\n }),\n headers: {'Content-Type': 'application/json'},\n mode: 'cors',\n })\n\n const {url: signedUrl} = (await signedUrlResponse.json()) as {url: string}\n\n if (!signedUrl || !URL.canParse(signedUrl)) {\n throw new Error('Invalid signed URL received from endpoint')\n }\n\n // Stage 2: Upload to S3 (10-100%)\n const xhr = new XMLHttpRequest()\n\n xhr.upload.onprogress = (event) => {\n if (event.lengthComputable) {\n // Map 0-100% upload progress to 10-100% overall progress\n const uploadPercent = (event.loaded / event.total) * 100\n const overallPercent = 10 + uploadPercent * 0.9\n\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: overallPercent,\n loaded: event.loaded,\n total: event.total,\n lengthComputable: true,\n })\n }\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n // Upload successful, emit final progress\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: 100,\n loaded: fileSize,\n total: fileSize,\n lengthComputable: true,\n })\n\n // Emit response event\n subscriber.next({\n type: 'response',\n method: 'PUT',\n statusCode: xhr.status,\n statusMessage: xhr.statusText,\n headers: {},\n })\n\n subscriber.complete()\n } else {\n subscriber.error(new Error(`S3 upload failed: ${xhr.status} ${xhr.statusText}`))\n }\n }\n\n xhr.onerror = () => {\n subscriber.error(new Error('S3 upload failed: Network error'))\n }\n\n xhr.open('PUT', signedUrl)\n xhr.setRequestHeader('Content-Type', fileType)\n xhr.send(file)\n } catch (error) {\n subscriber.error(error)\n }\n }\n\n executeUpload()\n })\n}\n\nconst deleteAsset = ({\n fileName,\n client,\n}: {\n fileName: string\n client: S3Client | ObservableS3Client\n}): Observable<HttpRequestEvent> => {\n const config = client.config()\n\n const {deleteEndpoint, secret, bucketKey, bucketRegion} = config\n\n if (!deleteEndpoint) {\n throw new Error('S3Client: Missing required config field: deleteEndpoint')\n }\n\n if (!fileName) {\n throw new Error('S3Client: fileKey is required in options')\n }\n\n return new Observable((subscriber) => {\n const executeDelete = async () => {\n try {\n const response = await fetch(deleteEndpoint, {\n method: 'POST',\n body: JSON.stringify({\n fileKey: fileName,\n secret,\n bucketKey,\n bucketRegion,\n }),\n headers: {'Content-Type': 'application/json'},\n mode: 'cors',\n })\n\n if (!response.ok) {\n throw new Error(`S3 delete failed: ${response.status} ${response.statusText}`)\n }\n\n subscriber.next({\n type: 'response',\n method: 'POST',\n statusCode: response.status,\n statusMessage: response.statusText,\n headers: {},\n })\n\n subscriber.complete()\n } catch (error) {\n subscriber.error(error)\n }\n }\n\n executeDelete()\n })\n}\n\nexport class ObservableAssetsClient {\n #client: ObservableS3Client\n constructor(client: ObservableS3Client) {\n this.#client = client\n }\n\n uploadAsset({\n assetType,\n file,\n fileName,\n }: {\n file: File\n fileName: string\n assetType: S3AssetType\n }): Observable<HttpRequestEvent> {\n return upload({client: this.#client, file, fileName, assetType})\n }\n\n deleteAsset({fileName}: {fileName: string}): Observable<HttpRequestEvent> {\n return deleteAsset({client: this.#client, fileName})\n }\n}\n\nexport class AssetsClient {\n #client: S3Client\n constructor(client: S3Client) {\n this.#client = client\n }\n\n uploadAsset({\n assetType,\n file,\n fileName,\n }: {\n assetType: S3AssetType\n file: File\n fileName: string\n }): Promise<ResponseEvent> {\n const observable = upload({client: this.#client, assetType, file, fileName})\n\n return lastValueFrom(observable.pipe(filter((event) => event.type === 'response')))\n }\n\n deleteAsset({fileName}: {fileName: string}): Promise<ResponseEvent> {\n const observable = deleteAsset({client: this.#client, fileName})\n\n return lastValueFrom(observable.pipe(filter((event) => event.type === 'response')))\n }\n}\n","import {AssetsClient, ObservableAssetsClient} from './assets/AssetsClient'\nimport type {HttpRequest, InitializedClientConfig, S3ClientConfig} from './types'\n\n/** @public */\nexport class ObservableS3Client {\n assets: ObservableAssetsClient\n\n /**\n * Private properties\n */\n #clientConfig: InitializedClientConfig\n #httpRequest: HttpRequest\n\n constructor(httpRequest: HttpRequest, config: S3ClientConfig) {\n // Initialize with empty object cast to InitializedClientConfig\n this.#clientConfig = {} as InitializedClientConfig\n this.config(config)\n\n this.#httpRequest = httpRequest\n\n this.assets = new ObservableAssetsClient(this)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): ObservableS3Client {\n return new ObservableS3Client(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<S3ClientConfig>): this\n config(newConfig?: Partial<S3ClientConfig>): InitializedClientConfig | this {\n if (newConfig === undefined) {\n return {...this.#clientConfig}\n }\n\n // Merge config properly\n this.#clientConfig = {\n ...this.#clientConfig,\n ...newConfig,\n } as InitializedClientConfig\n\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<S3ClientConfig>): ObservableS3Client {\n const thisConfig = this.config()\n return new ObservableS3Client(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n })\n }\n}\n\n/** @public */\nexport class S3Client {\n assets: AssetsClient\n\n /**\n * Observable version of the Sanity client, with the same configuration as the promise-based one\n */\n observable: ObservableS3Client\n\n /**\n * Private properties\n */\n #clientConfig: InitializedClientConfig\n #httpRequest: HttpRequest\n\n constructor(httpRequest: HttpRequest, config: S3ClientConfig) {\n // Initialize with empty object cast to InitializedClientConfig\n this.#clientConfig = {} as InitializedClientConfig\n this.config(config)\n\n this.#httpRequest = httpRequest\n\n this.assets = new AssetsClient(this)\n\n this.observable = new ObservableS3Client(httpRequest, config)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): S3Client {\n return new S3Client(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<S3ClientConfig>): this\n config(newConfig?: Partial<S3ClientConfig>): InitializedClientConfig | this {\n if (newConfig === undefined) {\n return {...this.#clientConfig}\n }\n\n if (this.observable) {\n this.observable.config(newConfig)\n }\n\n // Merge config properly\n this.#clientConfig = {\n ...this.#clientConfig,\n ...newConfig,\n } as InitializedClientConfig\n\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<S3ClientConfig>): S3Client {\n const thisConfig = this.config()\n return new S3Client(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n })\n }\n}\n","import defineCreateClientExports from './defineCreateClient'\nimport {S3Client} from './S3Client'\nimport type {S3ClientConfig} from './types'\n\nexport {S3Client} from './S3Client'\n\nconst exp = defineCreateClientExports<S3Client, S3ClientConfig>(S3Client)\n\n/** @public */\nexport const createS3Client = exp.createClient\n","import {SettingsView, useSecrets} from '@sanity/studio-secrets'\nimport {createContext, type FC, PropsWithChildren, useCallback, useContext, useState} from 'react'\n\nimport {createS3Client, type S3Client} from '../lib'\nimport {S3AssetType, type S3Credentials} from '../types'\nimport {buildS3FileUrl, buildS3ImageUrl} from '../utils/asset/paths'\n\ntype IS3MediaContext = {\n s3Client: S3Client\n buildAssetUrl: ({assetId, assetType}: {assetId: string; assetType: S3AssetType}) => string\n}\n\nconst credentialsNamespace = 's3MediaCredentials'\n\nconst pluginConfigKeys = [\n {\n key: 'bucketRegion',\n title: 'Bucket Region',\n },\n {\n key: 'bucketKey',\n title: 'Bucket Key',\n },\n {key: 'getSignedUrlEndpoint', title: 'getSignedUrlEndpoint', description: 'test'},\n {key: 'deleteEndpoint', title: 'deleteEndpoint'},\n {key: 'cloudfrontDomain', title: 'cloudfrontDomain'},\n {key: 'secret', title: 'secret'},\n]\n\nconst S3MediaContext = createContext<IS3MediaContext>({} as IS3MediaContext)\n\nexport const S3MediaContextProvider: FC<PropsWithChildren> = (props) => {\n const {children} = props\n\n const [isCredentialsDialogDismissed, setIsCredentialsDialogDismissed] = useState(false)\n const {secrets: credentials, loading: isCredentialsLoading} =\n useSecrets<S3Credentials>(credentialsNamespace)\n\n const {bucketRegion, bucketKey, getSignedUrlEndpoint, deleteEndpoint, cloudfrontDomain, secret} =\n credentials || {}\n\n const s3AssetBaseUrl =\n cloudfrontDomain || (bucketRegion && bucketKey)\n ? cloudfrontDomain || `https://s3.${bucketRegion}.amazonaws.com/${bucketKey}`\n : null\n\n const isCredentialsDialogOpen =\n !isCredentialsDialogDismissed &&\n !isCredentialsLoading &&\n (!credentials ||\n !credentials.bucketKey ||\n !credentials.bucketRegion ||\n !credentials.getSignedUrlEndpoint ||\n !credentials.secret)\n\n const s3Client = createS3Client({\n bucketRegion,\n bucketKey,\n getSignedUrlEndpoint,\n deleteEndpoint,\n cloudfrontDomain,\n secret,\n })\n\n const buildAssetUrl = useCallback(\n ({assetId, assetType}: {assetId: string; assetType: S3AssetType}) => {\n if (!assetId || !assetType) {\n throw new Error('')\n }\n\n if (!s3AssetBaseUrl) {\n return ''\n }\n\n if (assetType === S3AssetType.IMAGE) {\n return buildS3ImageUrl(assetId, {baseUrl: s3AssetBaseUrl})\n }\n\n if (assetType === S3AssetType.FILE) {\n return buildS3FileUrl(assetId, {baseUrl: s3AssetBaseUrl})\n }\n\n throw new Error('')\n },\n [s3AssetBaseUrl],\n )\n\n return (\n <S3MediaContext.Provider value={{s3Client, buildAssetUrl}}>\n {children}\n\n {isCredentialsDialogOpen && !isCredentialsLoading ? (\n <SettingsView\n title=\"S3 Media Credentials\"\n namespace={credentialsNamespace}\n keys={pluginConfigKeys}\n onClose={() => {\n setIsCredentialsDialogDismissed(true)\n }}\n />\n ) : null}\n </S3MediaContext.Provider>\n )\n}\n\nexport const useS3MediaContext = (): IS3MediaContext => {\n const context = useContext(S3MediaContext)\n\n if (!context) {\n throw new Error('useS3MediaContext must be used within a S3MediaContextProvider')\n }\n\n return context\n}\n","import {createContext, type FC, PropsWithChildren, useContext} from 'react'\n\nimport type {S3MediaPluginOptions} from '../types'\n\ntype S3MediaOptionsContextProviderProps = {options: S3MediaPluginOptions | void}\n\nconst S3MediaOptionsContext = createContext<S3MediaPluginOptions>({\n directUploads: true,\n})\n\nexport const S3MediaOptionsContextProvider: FC<\n PropsWithChildren<S3MediaOptionsContextProviderProps>\n> = (props) => {\n const {options, children} = props\n\n const {directUploads = true, ...rest} = options || {}\n\n return (\n <S3MediaOptionsContext.Provider value={{...rest, directUploads}}>\n {children}\n </S3MediaOptionsContext.Provider>\n )\n}\n\nexport const useS3MediaOptionsContext = (): S3MediaPluginOptions => {\n const context = useContext(S3MediaOptionsContext)\n\n if (!context) {\n throw new Error('useS3MediaOptionsContext must be used within a S3MediaOptionsContextProvider')\n }\n\n return context\n}\n","import type {Order} from '../types'\n\nconst ORDER_DICTIONARY: Record<string, {asc: string; desc: string}> = {\n _createdAt: {\n asc: 'Last created: Oldest first',\n desc: 'Last created: Newest first',\n },\n _updatedAt: {\n asc: 'Last updated: Oldest first',\n desc: 'Last updated: Newest first',\n },\n mimeType: {\n asc: 'MIME type: A to Z',\n desc: 'MIME type: Z to A',\n },\n originalFilename: {\n asc: 'File name: A to Z',\n desc: 'File name: Z to A',\n },\n size: {\n asc: 'File size: Smallest first',\n desc: 'File size: Largest first',\n },\n}\n\nexport const getOrderTitle = (order: Order): string => {\n return ORDER_DICTIONARY[order.field][order.direction]\n}\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\n\ntype SearchState = {\n query: string\n}\n\nconst initialState = {\n query: '',\n} as SearchState\n\nconst searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n querySet(state, action: PayloadAction<{searchQuery: string}>) {\n state.query = action.payload?.searchQuery\n },\n },\n})\n\nexport const searchActions = {...searchSlice.actions}\n\nexport const searchReducer = searchSlice.reducer\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {S3AssetDocument} from '../../types'\n\nexport const UPLOADS_ACTIONS = {\n uploadComplete: createAction(\n 'uploads/uploadComplete',\n function prepare({asset}: {asset: S3AssetDocument}) {\n return {\n payload: {asset},\n }\n },\n ),\n}\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError} from '@sanity/client'\nimport groq from 'groq'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {concat, EMPTY, forkJoin, from, of} from 'rxjs'\nimport {\n bufferTime,\n catchError,\n debounceTime,\n filter,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators'\n\nimport {getOrderTitle} from '../../config/orders'\nimport {ORDER_OPTIONS} from '../../constants'\nimport type {AssetItem, BrowserView, Epic, HttpError, Order,RootReducerState, S3Asset, S3AssetType} from '../../types'\nimport {\n buildS3FilePath,\n buildS3ImagePath,\n constructFilter,\n isS3FileAsset,\n isS3ImageAsset,\n} from '../../utils'\nimport {searchActions} from '../search'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\n\ntype ItemError = {\n description: string\n id: string\n referencingIDs: string[]\n type: string // 'documentHasExistingReferencesError'\n}\n\nconst buildFileName = (asset: S3Asset): string => {\n if (isS3ImageAsset(asset)) {\n return buildS3ImagePath(asset._id)\n }\n\n if (isS3FileAsset(asset)) {\n return buildS3FilePath(asset._id)\n }\n\n throw new Error('Unsupported asset type')\n}\n\ntype AssetsReducerState = {\n allIds: string[]\n assetTypes: S3AssetType[]\n byIds: Record<string, AssetItem>\n fetchCount: number\n fetching: boolean\n fetchingError?: HttpError\n lastPicked?: string\n order: Order\n pageIndex: number\n pageSize: number\n view: BrowserView\n // totalCount: number\n}\n\nconst defaultOrder = ORDER_OPTIONS[0] as Order\n\nexport const initialState = {\n allIds: [],\n assetTypes: [],\n byIds: {},\n fetchCount: -1,\n fetching: false,\n fetchingError: undefined,\n lastPicked: undefined,\n order: {\n direction: defaultOrder.direction,\n field: defaultOrder.field,\n title: getOrderTitle(defaultOrder),\n },\n pageIndex: 0,\n pageSize: 100,\n // totalCount: -1,\n view: 'grid',\n} as AssetsReducerState\n\nconst assetsSlice = createSlice({\n name: 'assets',\n initialState,\n extraReducers: (builder) => {\n builder //\n .addCase(UPLOADS_ACTIONS.uploadComplete, (state, action) => {\n const {asset} = action.payload\n\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset as S3Asset,\n picked: false,\n updating: false,\n }\n })\n },\n reducers: {\n // Clear asset order\n clear(state) {\n state.allIds = []\n },\n // Remove assets and update page index\n deleteComplete(state, action: PayloadAction<{assetIds: string[]}>) {\n const {assetIds} = action.payload\n\n assetIds?.forEach((id) => {\n const deleteIndex = state.allIds.indexOf(id)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[id]\n })\n\n state.pageIndex = Math.floor(state.allIds.length / state.pageSize) - 1\n },\n deleteError(state, action: PayloadAction<{assetIds: string[]; error: ClientError}>) {\n const {assetIds, error} = action.payload\n\n const itemErrors: ItemError[] = error?.response?.body?.error?.items?.map(\n (item: any) => item.error,\n )\n\n assetIds?.forEach((id) => {\n state.byIds[id].updating = false\n })\n itemErrors?.forEach((item) => {\n state.byIds[item.id].error = item.description\n })\n },\n deleteRequest(state, action: PayloadAction<{assets: S3Asset[]; closeDialogId?: string}>) {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset?._id].updating = true\n })\n\n Object.keys(state.byIds).forEach((key) => {\n delete state.byIds[key].error\n })\n },\n deleteSkipped(state, action: PayloadAction<{assetIds: string[]; reason: string}>) {\n const {assetIds, reason} = action.payload\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]) {\n state.byIds[assetId].updating = false\n state.byIds[assetId].error = reason\n }\n })\n },\n fetchComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const assets = action.payload?.assets || []\n\n if (assets) {\n assets.forEach((asset) => {\n if (!state.allIds.includes(asset._id)) {\n state.allIds.push(asset._id)\n }\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset,\n picked: false,\n updating: false,\n }\n })\n }\n\n state.fetching = false\n state.fetchCount = assets.length || 0\n delete state.fetchingError\n },\n fetchError(state, action: PayloadAction<HttpError>) {\n const error = action.payload\n state.fetching = false\n state.fetchingError = error\n },\n fetchRequest: {\n reducer: (state, _action: PayloadAction<{params: Record<string, any>; query: string}>) => {\n state.fetching = true\n delete state.fetchingError\n },\n prepare: ({\n params = {},\n queryFilter,\n selector = ``,\n sort = groq`order(_updatedAt desc)`,\n }: {\n params?: Record<string, any>\n queryFilter: string\n replace?: boolean\n selector?: string\n sort?: string\n }) => {\n const pipe = sort || selector ? '|' : ''\n\n // Construct query\n const query = groq`\n {\n \"items\": *[${queryFilter}] {\n _id,\n _type,\n _createdAt,\n _updatedAt,\n extension,\n metadata {\n dimensions\n },\n mimeType,\n opt {\n media\n },\n originalFilename,\n size,\n source {\n name,\n id,\n url,\n },\n title,\n url\n } ${pipe} ${sort} ${selector},\n }\n `\n\n return {payload: {params, query}}\n },\n },\n insertUploads(state, action: PayloadAction<{results: Record<string, string | null>}>) {\n const {results} = action.payload\n\n Object.entries(results).forEach(([hash, assetId]) => {\n if (assetId && !state.allIds.includes(hash)) {\n state.allIds.push(assetId)\n }\n })\n },\n listenerCreateQueue(_state, _action: PayloadAction<{asset: S3Asset}>) {\n //\n },\n listenerCreateQueueComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const {assets} = action.payload\n assets?.forEach((asset) => {\n if (state.byIds[asset?._id]?.asset) {\n state.byIds[asset._id].asset = asset\n }\n })\n },\n listenerDeleteQueue(_state, _action: PayloadAction<{assetId: string}>) {\n //\n },\n listenerDeleteQueueComplete(state, action: PayloadAction<{assetIds: string[]}>) {\n const {assetIds} = action.payload\n assetIds?.forEach((assetId) => {\n const deleteIndex = state.allIds.indexOf(assetId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[assetId]\n })\n },\n listenerUpdateQueue(_state, _action: PayloadAction<{asset: S3Asset}>) {\n //\n },\n listenerUpdateQueueComplete(state, action: PayloadAction<{assets: S3Asset[]}>) {\n const {assets} = action.payload\n assets?.forEach((asset) => {\n if (state.byIds[asset?._id]?.asset) {\n state.byIds[asset._id].asset = asset\n }\n })\n },\n loadNextPage() {\n //\n },\n loadPageIndex(state, action: PayloadAction<{pageIndex: number}>) {\n //\n state.pageIndex = action.payload.pageIndex\n },\n orderSet(state, action: PayloadAction<{order: Order}>) {\n state.order = action.payload?.order\n state.pageIndex = 0\n },\n pick(state, action: PayloadAction<{assetId: string; picked: boolean}>) {\n const {assetId, picked} = action.payload\n\n state.byIds[assetId].picked = picked\n state.lastPicked = picked ? assetId : undefined\n },\n pickAll(state) {\n state.allIds.forEach((id) => {\n state.byIds[id].picked = true\n })\n },\n pickClear(state) {\n state.lastPicked = undefined\n Object.values(state.byIds).forEach((asset) => {\n state.byIds[asset.asset._id].picked = false\n })\n },\n pickRange(state, action: PayloadAction<{endId: string; startId: string}>) {\n const startIndex = state.allIds.findIndex((id) => id === action.payload.startId)\n const endIndex = state.allIds.findIndex((id) => id === action.payload.endId)\n\n // Sort numerically, ascending order\n const indices = [startIndex, endIndex].sort((a, b) => a - b)\n\n state.allIds.slice(indices[0], indices[1] + 1).forEach((key) => {\n state.byIds[key].picked = true\n })\n state.lastPicked = state.allIds[endIndex]\n },\n sort(state) {\n state.allIds.sort((a, b) => {\n const tagA = state.byIds[a].asset[state.order.field] as number\n const tagB = state.byIds[b].asset[state.order.field] as number\n\n if (tagA < tagB) {\n return state.order.direction === 'asc' ? -1 : 1\n } else if (tagA > tagB) {\n return state.order.direction === 'asc' ? 1 : -1\n }\n return 0\n })\n },\n updateComplete(state, action: PayloadAction<{asset: S3Asset; closeDialogId?: string}>) {\n const {asset} = action.payload\n state.byIds[asset._id].updating = false\n state.byIds[asset._id].asset = asset\n },\n updateError(state, action: PayloadAction<{asset: S3Asset; error: HttpError}>) {\n const {asset, error} = action.payload\n\n const assetId = asset?._id\n state.byIds[assetId].error = error.message\n state.byIds[assetId].updating = false\n },\n updateRequest(\n state,\n action: PayloadAction<{\n asset: S3Asset\n closeDialogId?: string\n formData: Record<string, any>\n }>,\n ) {\n const assetId = action.payload?.asset?._id\n state.byIds[assetId].updating = true\n },\n viewSet(state, action: PayloadAction<{view: BrowserView}>) {\n state.view = action.payload?.view\n },\n },\n})\n\nexport const assetsActions = {...assetsSlice.actions}\n\n// Epics\n\nexport const assetsDeleteEpic: Epic = (action$, _state$, {sanityClient, s3Client}) =>\n action$.pipe(\n filter(assetsActions.deleteRequest.match),\n mergeMap((action) => {\n const {assets} = action.payload\n const assetIds = assets.map((asset) => asset._id)\n\n return sanityClient.observable\n .fetch<\n {_id: string; referenceCount: number}[]\n >(groq`*[_id in $assetIds]{_id, \"referenceCount\": count(*[references(^._id)])}`, {assetIds})\n .pipe(\n mergeMap((referenceResults) => {\n const referenceMap = new Map(\n referenceResults.map((item) => [item._id, item.referenceCount]),\n )\n\n const blockedAssets = assets.filter((asset) => (referenceMap.get(asset._id) || 0) > 0)\n const deletableAssets = assets.filter(\n (asset) => (referenceMap.get(asset._id) || 0) === 0,\n )\n\n const blockedIds = blockedAssets.map((asset) => asset._id)\n const deletableIds = deletableAssets.map((asset) => asset._id)\n\n const blockedActions$ = blockedIds.length\n ? of(\n assetsActions.deleteSkipped({\n assetIds: blockedIds,\n reason: 'Asset has references and cannot be deleted.',\n }),\n )\n : EMPTY\n\n if (deletableAssets.length === 0) {\n return blockedActions$\n }\n\n const deleteRequests = deletableAssets.map((asset) =>\n s3Client.observable.assets.deleteAsset({fileName: buildFileName(asset)}),\n )\n\n const deleteFlow$ = forkJoin(deleteRequests).pipe(\n mergeMap(() =>\n sanityClient.observable.delete({\n query: groq`*[_id in ${JSON.stringify(deletableIds)}]`,\n }),\n ),\n mergeMap(() => of(assetsActions.deleteComplete({assetIds: deletableIds}))),\n catchError((error: ClientError) => {\n return of(assetsActions.deleteError({assetIds: deletableIds, error}))\n }),\n )\n\n return blockedIds.length ? concat(blockedActions$, deleteFlow$) : deleteFlow$\n }),\n catchError((error: ClientError) => of(assetsActions.deleteError({assetIds, error}))),\n )\n }),\n )\n\nexport const assetsFetchEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(assetsActions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action]) => {\n const params = action.payload?.params\n const query = action.payload?.query\n\n return of(action).pipe(\n mergeMap(() =>\n sanityClient.observable.fetch<{\n items: S3Asset[]\n }>(query, params),\n ),\n mergeMap((result) => {\n const {\n items,\n // totalCount\n } = result\n return of(assetsActions.fetchComplete({assets: items}))\n }),\n catchError((error: ClientError) =>\n of(\n assetsActions.fetchError({\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n }),\n ),\n ),\n )\n }),\n )\n\nexport const assetsFetchPageIndexEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.loadPageIndex.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const pageSize = state.assets.pageSize\n const start = action.payload.pageIndex * pageSize\n const end = start + pageSize\n\n // Document ID can be null when operating on pristine / unsaved drafts\n const documentId = state?.selected.document?._id\n const documentAssetIds = state?.selected?.documentAssetIds\n\n const constructedFilter = constructFilter({\n assetTypes: state.assets.assetTypes,\n searchQuery: state.search.query,\n })\n\n const params = {\n ...(documentId ? {documentId} : {}),\n documentAssetIds,\n }\n\n return of(\n assetsActions.fetchRequest({\n params,\n queryFilter: constructedFilter,\n selector: groq`[${start}...${end}]`,\n sort: groq`order(${state.assets?.order?.field} ${state.assets?.order?.direction})`,\n }),\n )\n }),\n )\n\nexport const assetsFetchNextPageEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.loadNextPage.match),\n withLatestFrom(state$),\n switchMap(([_action, state]) =>\n of(assetsActions.loadPageIndex({pageIndex: state.assets.pageIndex + 1})),\n ),\n )\n\nexport const assetsFetchAfterDeleteAllEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(assetsActions.deleteComplete.match),\n withLatestFrom(state$),\n switchMap(([_action, state]) => {\n if (state.assets.allIds.length === 0) {\n const nextPageIndex = Math.floor(state.assets.allIds.length / state.assets.pageSize)\n return of(assetsActions.loadPageIndex({pageIndex: nextPageIndex}))\n }\n\n return EMPTY\n }),\n )\n\nexport const assetsOrderSetEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.orderSet.match),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsSearchEpic: Epic = (action$) =>\n action$.pipe(\n ofType(searchActions.querySet.type),\n debounceTime(400),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsListenerCreateQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerCreateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assets = actions?.map((action) => action.payload.asset)\n return of(assetsActions.listenerCreateQueueComplete({assets}))\n }),\n )\n\nexport const assetsListenerDeleteQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerDeleteQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assetIds = actions?.map((action) => action.payload.assetId)\n return of(assetsActions.listenerDeleteQueueComplete({assetIds}))\n }),\n )\n\nexport const assetsListenerUpdateQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.listenerUpdateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const assets = actions?.map((action) => action.payload.asset)\n return of(assetsActions.listenerUpdateQueueComplete({assets}))\n }),\n )\n\n// Re-sort on all updates (immediate and batched listener events)\nexport const assetsSortEpic: Epic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.insertUploads.type,\n assetsActions.listenerUpdateQueueComplete.type,\n assetsActions.updateComplete.type,\n ),\n mergeMap(() => of(assetsActions.sort())),\n )\n\nexport const assetsUnpickEpic: Epic = (action$) =>\n action$.pipe(\n ofType(assetsActions.orderSet.type, assetsActions.viewSet.type, searchActions.querySet.type),\n mergeMap(() => {\n return of(assetsActions.pickClear())\n }),\n )\n\nexport const assetsUpdateEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(assetsActions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action]) => {\n const {asset, closeDialogId, formData} = action.payload\n\n return of(action).pipe(\n mergeMap(() =>\n from(\n sanityClient\n .patch(asset._id)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .set(formData)\n .commit(),\n ),\n ),\n mergeMap((updatedAsset: any) =>\n of(\n assetsActions.updateComplete({\n asset: updatedAsset,\n closeDialogId,\n }),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n assetsActions.updateError({\n asset,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\n// Selectors\n\nconst selectAssetsByIds = (state: RootReducerState) => state.assets.byIds\n\nconst selectAssetsAllIds = (state: RootReducerState) => state.assets.allIds\n\nexport const selectAssetById = createSelector(\n [\n (state: RootReducerState) => state.assets.byIds,\n (_state: RootReducerState, assetId: string) => assetId,\n ],\n (byIds, assetId) => {\n const asset = byIds[assetId]\n return asset ? asset : undefined\n },\n)\n\nconst selectAssets: Selector<RootReducerState, AssetItem[]> = createSelector(\n [selectAssetsByIds, selectAssetsAllIds],\n (byIds, allIds) => allIds.map((id) => byIds[id]),\n)\n\nexport const selectAssetsLength = createSelector([selectAssets], (assets) => assets.length)\n\nexport const selectAssetsPicked = createSelector([selectAssets], (assets) =>\n assets.filter((item) => item?.picked),\n)\n\nexport const selectAssetsPickedLength = createSelector(\n [selectAssetsPicked],\n (assetsPicked) => assetsPicked.length,\n)\n\nexport const assetsReducer = assetsSlice.reducer\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport {ofType} from 'redux-observable'\nimport {EMPTY, of} from 'rxjs'\nimport {filter, mergeMap} from 'rxjs/operators'\n\nimport type {AssetItem, Dialog, Epic} from '../../types'\nimport {assetsActions} from '../assets'\n\ntype DialogReducerState = {\n items: Dialog[]\n}\n\nconst initialState = {\n items: [],\n} as DialogReducerState\n\nconst dialogSlice = createSlice({\n name: 'dialog',\n initialState,\n reducers: {\n // Clear all dialogs\n clear(state) {\n state.items = []\n },\n // Remove dialog by id\n remove(state, action: PayloadAction<{id: string}>) {\n const id = action.payload?.id\n state.items = state.items.filter((item) => item.id !== id)\n },\n showConfirmDeleteAssets(\n state,\n action: PayloadAction<{assets: AssetItem[]; closeDialogId?: string}>,\n ) {\n const {assets, closeDialogId} = action.payload\n\n const suffix = `${assets.length} ${pluralize('asset', assets.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: assetsActions.deleteRequest({\n assets: assets.map((assetItem) => assetItem.asset),\n }),\n confirmText: `Yes, delete ${suffix}`,\n description: 'This operation cannot be reversed. Are you sure you want to continue?',\n title: `Permanently delete ${suffix}?`,\n id: 'confirm',\n headerTitle: 'Confirm deletion',\n tone: 'critical',\n type: 'confirm',\n })\n },\n showAssetEdit(state, action: PayloadAction<{assetId: string}>) {\n const {assetId} = action.payload\n state.items.push({\n assetId,\n id: assetId,\n type: 'assetEdit',\n })\n },\n },\n})\n\n// Epics\n\nexport const dialogClearOnAssetUpdateEpic: Epic = (action$) =>\n action$.pipe(\n ofType(assetsActions.deleteComplete.type, assetsActions.updateComplete.type),\n filter(\n (action: {\n payload: {closeDialogId?: string}\n }): action is PayloadAction<{closeDialogId?: string}> => !!action?.payload?.closeDialogId,\n ),\n mergeMap((action) => {\n const dialogId = action?.payload?.closeDialogId\n if (dialogId) {\n return of(dialogSlice.actions.remove({id: dialogId}))\n }\n return EMPTY\n }),\n )\n\nexport const dialogActions = {...dialogSlice.actions}\n\nexport const dialogReducer = dialogSlice.reducer\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError} from '@sanity/client'\nimport groq from 'groq'\nimport {empty, merge, of, throwError} from 'rxjs'\nimport {catchError, delay, filter, mergeMap, takeUntil, withLatestFrom} from 'rxjs/operators'\n\nimport {uploadS3Asset} from '../../lib'\nimport type {RootReducerState, S3AssetDocument, UploadProgressEvent} from '../../types'\nimport {Epic, HttpError, S3AssetType, UploadItem} from '../../types'\nimport {constructFilter, generatePreviewBlobUrl$, hashFile} from '../../utils'\nimport {assetsActions} from '../assets'\nimport {UPLOADS_ACTIONS} from './actions'\n\ntype UploadsReducerState = {\n allIds: string[]\n byIds: Record<string, UploadItem>\n}\n\nconst initialState = {\n allIds: [],\n byIds: {},\n} as UploadsReducerState\n\nconst uploadsSlice = createSlice({\n name: 'uploads',\n initialState,\n extraReducers: (builder) => {\n builder //\n .addCase(UPLOADS_ACTIONS.uploadComplete, (state, action) => {\n const {asset} = action.payload\n if (state.byIds[asset.sha1hash]) {\n state.byIds[asset.sha1hash].status = 'complete'\n }\n })\n },\n reducers: {\n checkRequest(_state, _action: PayloadAction<{assets: S3AssetDocument[]}>) {\n //\n },\n checkComplete(state, action: PayloadAction<{results: Record<string, string | null>}>) {\n const {results} = action.payload\n\n const assetHashes = Object.keys(results)\n\n assetHashes.forEach((hash) => {\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n\n if (state.byIds[hash]) {\n const blobUrl = state.byIds[hash].objectUrl\n if (blobUrl) {\n window.URL.revokeObjectURL(blobUrl)\n }\n\n delete state.byIds[hash]\n }\n })\n },\n previewReady(state, action: PayloadAction<{hash: string; blobUrl: string}>) {\n const {blobUrl, hash} = action.payload\n if (state.byIds[hash]) {\n state.byIds[hash].objectUrl = blobUrl\n }\n },\n uploadCancel(state, action: PayloadAction<{hash: string}>) {\n const {hash} = action.payload\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n if (state.byIds[hash]) {\n delete state.byIds[hash]\n }\n },\n uploadError(state, action: PayloadAction<{error: HttpError; hash: string}>) {\n const {hash} = action.payload\n const deleteIndex = state.allIds.indexOf(hash)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[hash]\n },\n\n uploadRequest(_state, _action: PayloadAction<{file: File; forceAsAssetType?: S3AssetType}>) {\n //\n },\n uploadProgress(state, action: PayloadAction<{event: UploadProgressEvent; uploadHash: string}>) {\n const {event, uploadHash} = action.payload\n state.byIds[uploadHash].percent = event.percent\n state.byIds[uploadHash].status = 'uploading'\n },\n uploadStart(state, action: PayloadAction<{file: File; uploadItem: UploadItem}>) {\n const {uploadItem} = action.payload\n\n if (!state.allIds.includes(uploadItem.hash)) {\n state.allIds.push(uploadItem.hash)\n }\n state.byIds[uploadItem.hash] = uploadItem\n },\n },\n})\n\nexport const uploadsActions = {...uploadsSlice.actions}\n\n// Epics\n\nexport const uploadsAssetStartEpic: Epic = (action$, _state$, {sanityClient, s3Client}) =>\n action$.pipe(\n filter(uploadsActions.uploadStart.match),\n mergeMap((action) => {\n const {file, uploadItem} = action.payload\n\n return merge(\n // Generate low res preview\n of(null).pipe(\n mergeMap(() => generatePreviewBlobUrl$(file)),\n mergeMap((url) => {\n return of(\n uploadsActions.previewReady({\n blobUrl: url,\n hash: uploadItem.hash,\n }),\n )\n }),\n ),\n // Upload asset and receive progress / complete events\n of(null).pipe(\n // delay(500000), // debug uploads\n mergeMap(() =>\n uploadS3Asset({assetType: uploadItem.assetType, s3Client, sanityClient, file}),\n ),\n takeUntil(\n action$.pipe(\n filter(uploadsActions.uploadCancel.match),\n filter((v) => v.payload.hash === uploadItem.hash),\n ),\n ),\n mergeMap((event) => {\n if (event?.type === 'complete') {\n if (event.exists) {\n return throwError({\n message: 'Asset already exists',\n statusCode: 409,\n } as HttpError)\n }\n\n return of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: event.asset,\n }),\n )\n }\n if (event?.type === 'progress' && event?.stage === 'upload') {\n return of(\n uploadsActions.uploadProgress({\n event,\n uploadHash: uploadItem.hash,\n }),\n )\n }\n return empty()\n }),\n catchError((error: ClientError) =>\n of(\n uploadsActions.uploadError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n hash: uploadItem.hash,\n }),\n ),\n ),\n ),\n )\n }),\n )\n\nexport const uploadsAssetUploadEpic: Epic = (action$, state$) =>\n action$.pipe(\n filter(uploadsActions.uploadRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {file, forceAsAssetType} = action.payload\n\n return of(action).pipe(\n // Generate SHA1 hash from local file\n // This will throw in insecure contexts (non-localhost / https)\n mergeMap(() => hashFile(file)),\n // Ignore if the file exists and is currently being uploaded\n filter((hash) => {\n const exists = !!state.uploads.byIds[hash]\n return !exists\n }),\n // Dispatch start action and begin upload process\n mergeMap((hash) => {\n const assetType =\n forceAsAssetType ||\n (file.type.indexOf('image') >= 0 ? S3AssetType.IMAGE : S3AssetType.FILE)\n\n const uploadItem = {\n hash,\n _type: 'upload',\n assetType,\n name: file.name,\n size: file.size,\n status: 'queued',\n } as UploadItem\n\n return of(uploadsActions.uploadStart({file, uploadItem}))\n }),\n )\n }),\n )\n\nexport const uploadsCompleteQueueEpic: Epic = (action$) =>\n action$.pipe(\n filter(UPLOADS_ACTIONS.uploadComplete.match),\n mergeMap((action) => {\n return of(\n uploadsActions.checkRequest({\n assets: [action.payload.asset],\n }),\n )\n }),\n )\n\nexport const uploadsCheckRequestEpic: Epic = (action$, state$, {sanityClient}) =>\n action$.pipe(\n filter(uploadsActions.checkRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets} = action.payload\n\n const documentIds = assets.map((asset) => asset._id)\n\n const constructedFilter = constructFilter({\n assetTypes: state.assets.assetTypes,\n searchQuery: state.search.query,\n })\n\n const query = groq`\n *[${constructedFilter} && _id in $documentIds].sha1hash\n `\n\n return of(action).pipe(\n delay(1000), // give Sanity some time to register the recently uploaded asset\n mergeMap(() => sanityClient.observable.fetch<string[]>(query, {documentIds})),\n mergeMap((resultHashes) => {\n const checkedResults = assets.reduce((acc: Record<string, string | null>, asset) => {\n acc[asset.sha1hash] = resultHashes.includes(asset.sha1hash) ? asset._id : null\n return acc\n }, {})\n\n return of(\n uploadsActions.checkComplete({results: checkedResults}), //\n assetsActions.insertUploads({results: checkedResults}),\n )\n }),\n )\n }),\n )\n\nexport const selectUploadById = createSelector(\n [\n (state: RootReducerState) => state.uploads.byIds,\n (_state: RootReducerState, uploadId: string) => uploadId,\n ],\n (byIds, uploadId) => byIds[uploadId],\n)\n\nexport const uploadsReducer = uploadsSlice.reducer\n","import {createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport {ofType} from 'redux-observable'\nimport {of} from 'rxjs'\nimport {filter, mergeMap} from 'rxjs/operators'\n\nimport type {Epic,S3ImageAsset} from '../../types'\nimport {assetsActions} from '../assets'\nimport {uploadsActions} from '../uploads'\n\ntype Notification = {\n asset?: S3ImageAsset\n status?: 'error' | 'warning' | 'success' | 'info'\n title?: string\n}\n\ntype NotificationsReducerState = {\n items: Notification[]\n}\n\nconst initialState = {\n items: [],\n} as NotificationsReducerState\n\nconst notificationsSlice = createSlice({\n name: 'notifications',\n initialState,\n reducers: {\n add(state, action: PayloadAction<Notification>) {\n const {asset, status, title} = action.payload\n state.items.push({\n asset,\n status,\n title,\n })\n },\n },\n})\n\n// Epics\n\nexport const notificationsAssetsDeleteCompleteEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteComplete.match),\n mergeMap((action) => {\n const {assetIds} = action.payload\n const deletedCount = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `${deletedCount} ${pluralize('asset', deletedCount)} deleted`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsDeleteErrorEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteError.match),\n mergeMap((action) => {\n const {assetIds} = action.payload\n const count = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title: `Unable to delete ${count} ${pluralize(\n 'asset',\n count,\n )}. Please review any asset errors and try again.`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsDeleteSkippedEpic: Epic = (action$) =>\n action$.pipe(\n filter(assetsActions.deleteSkipped.match),\n mergeMap((action) => {\n const {assetIds, reason} = action.payload\n const count = assetIds.length\n return of(\n notificationsSlice.actions.add({\n status: 'warning',\n title: `Skipped ${count} ${pluralize('asset', count)}. ${reason}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsUploadCompleteEpic: Epic = (action$) =>\n action$.pipe(\n filter(uploadsActions.checkComplete.match),\n mergeMap((action) => {\n const {results} = action.payload\n\n const count = Object.keys(results).length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Uploaded ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsGenericErrorEpic: Epic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.fetchError.type,\n assetsActions.updateError.type,\n uploadsActions.uploadError.type,\n ),\n mergeMap((action: {payload: {error: {message: string}}}) => {\n const error = action.payload?.error\n\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title: `An error occured: ${error?.message}`,\n }),\n )\n }),\n )\n\nexport const notificationsActions = {...notificationsSlice.actions}\n\nexport const notificationsReducer = notificationsSlice.reducer\n","import {combineEpics} from 'redux-observable'\n\nimport {\n assetsDeleteEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n} from './assets'\nimport {dialogClearOnAssetUpdateEpic} from './dialog'\nimport {\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteSkippedEpic,\n notificationsAssetsUploadCompleteEpic,\n notificationsGenericErrorEpic,\n} from './notifications'\nimport {\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n} from './uploads'\n\nexport const rootEpic = combineEpics(\n assetsDeleteEpic,\n assetsFetchEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n dialogClearOnAssetUpdateEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsDeleteSkippedEpic,\n notificationsAssetsUploadCompleteEpic,\n notificationsGenericErrorEpic,\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n)\n","import {createSlice} from '@reduxjs/toolkit'\nimport type {SanityDocument} from '@sanity/client'\n\nimport type {S3AssetDocument} from '../../types'\n\ntype SelectedReducerState = {\n assets: S3AssetDocument[]\n document?: SanityDocument\n documentAssetIds?: string[]\n}\n\nconst initialState = {\n assets: [],\n document: undefined,\n documentAssetIds: [],\n} as SelectedReducerState\n\nconst selectedSlice = createSlice({\n name: 'selected',\n initialState,\n reducers: {},\n})\n\nexport const selectedReducer = selectedSlice.reducer\n","import {\n type ActionFromReducersMapObject,\n combineReducers,\n type Reducer,\n type StateFromReducersMapObject,\n} from '@reduxjs/toolkit'\n\nimport {assetsReducer} from './assets'\nimport {dialogReducer} from './dialog'\nimport {notificationsReducer} from './notifications'\nimport {searchReducer} from './search'\nimport {selectedReducer} from './selected'\nimport {uploadsReducer} from './uploads'\n\nconst reducers = {\n assets: assetsReducer,\n dialog: dialogReducer,\n notifications: notificationsReducer,\n search: searchReducer,\n selected: selectedReducer,\n uploads: uploadsReducer,\n}\n\ntype ReducersMapObject = typeof reducers\n\nexport const rootReducer: Reducer<\n StateFromReducersMapObject<ReducersMapObject>,\n ActionFromReducersMapObject<ReducersMapObject>\n> = combineReducers(reducers)\n","import {createSelector} from '@reduxjs/toolkit'\n\nimport type {CardAssetData, CardUploadData,RootReducerState} from '../types'\n\nexport const selectCombinedItems = createSelector(\n [\n (state: RootReducerState) => state.assets.allIds,\n (state: RootReducerState) => state.uploads.allIds,\n ],\n (assetIds, uploadIds) => {\n const assetItems = assetIds.map((id) => ({id, type: 'asset'}) as CardAssetData)\n const uploadItems = uploadIds.map((id) => ({id, type: 'upload'}) as CardUploadData)\n const combinedItems: (CardAssetData | CardUploadData)[] = [...uploadItems, ...assetItems]\n return combinedItems\n },\n)\n","import {Box, Flex} from '@sanity/ui'\nimport {type FC, type MouseEvent} from 'react'\nimport type {DefaultExtensionType} from 'react-file-icon'\nimport {defaultStyles, FileIcon as ReactFileIcon} from 'react-file-icon'\nimport {styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {S3AssetType, type S3FileAsset} from '../../../types'\n\ntype FileIconProps = {\n extension?: string\n onClick?: (e: MouseEvent) => void\n width: string\n asset?: S3FileAsset\n}\n\n// Force react-file-icon styles\nconst Container = styled(Box)`\n text {\n font-size: 8px !important;\n font-weight: 500 !important;\n }\n`\n\nexport const FileIcon: FC<FileIconProps> = (props) => {\n const {extension, onClick, width, asset} = props\n\n const {buildAssetUrl} = useS3MediaContext()\n\n const assetUrl = asset ? buildAssetUrl({assetType: S3AssetType.FILE, assetId: asset._id}) : null\n\n return (\n <Flex align=\"center\" justify=\"center\" onClick={onClick} style={{height: '100%'}}>\n {assetUrl && asset?.mimeType.search('video') === 0 ? (\n <video\n autoPlay\n muted\n loop\n src={assetUrl}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n ) : (\n <Container style={{width}}>\n {extension ? (\n <ReactFileIcon\n extension={extension}\n {...defaultStyles[extension as DefaultExtensionType]}\n />\n ) : (\n <ReactFileIcon />\n )}\n </Container>\n )}\n </Flex>\n )\n}\n","import type {ThemeColorSchemeKey} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {getSchemeColor} from '../../../utils'\n\ntype Props = {\n onClick?: (e: MouseEvent) => void\n $showCheckerboard?: boolean\n $scheme?: ThemeColorSchemeKey\n src: string\n}\n\nexport const Image: any = styled.img<Props>`\n --checkerboard-color: ${(props) =>\n props.$scheme ? getSchemeColor(props.$scheme, 'bg2') : 'inherit'};\n\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n\n ${(props) =>\n props.$showCheckerboard &&\n css`\n background-image:\n linear-gradient(45deg, var(--checkerboard-color) 25%, transparent 25%),\n linear-gradient(-45deg, var(--checkerboard-color) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--checkerboard-color) 75%),\n linear-gradient(-45deg, transparent 75%, var(--checkerboard-color) 75%);\n background-size: 20px 20px;\n background-position:\n 0 0,\n 0 10px,\n 10px -10px,\n -10px 0;\n `}\n`\n","export const GRID_TEMPLATE_COLUMNS = {\n SMALL: '3rem 100px auto 1.5rem',\n LARGE: '3rem 100px auto 5.5rem 5.5rem 3.5rem 8.5rem 4.75rem 2rem',\n}\nexport const PANEL_HEIGHT = 32 // px\n","import {CheckmarkCircleIcon, EditIcon, WarningFilledIcon} from '@sanity/icons'\nimport {\n Box,\n Card,\n Checkbox,\n Container,\n Flex,\n Spinner,\n Text,\n type Theme,\n type ThemeColorSchemeKey,\n Tooltip,\n} from '@sanity/ui'\nimport {type FC, memo, type MouseEvent, type RefObject} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useKeyPress, useTypedSelector} from '../../../hooks'\nimport {assetsActions, dialogActions, selectAssetById} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {getSchemeColor, isS3FileAsset, isS3ImageAsset} from '../../../utils'\nimport {PANEL_HEIGHT} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\ntype CardAssetProps = {\n id: string\n selected: boolean\n}\n\nconst CardWrapper = styled(Flex)`\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n position: relative;\n width: 100%;\n`\n\nconst CardContainer = styled(Flex)<{$picked?: boolean; theme: Theme; $updating?: boolean}>(({\n $picked,\n theme,\n $updating,\n}) => {\n return css`\n border: 1px solid transparent;\n height: 100%;\n pointer-events: ${$updating ? 'none' : 'auto'};\n position: relative;\n transition: all 300ms;\n user-select: none;\n width: 100%;\n\n border: ${$picked\n ? `1px solid ${theme.sanity.color.spot.orange} !important`\n : '1px solid inherit'};\n\n ${!$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border: 1px solid var(--card-border-color);\n }\n }\n `}\n `\n})\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n height: ${PANEL_HEIGHT}px;\n transition: all 300ms;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `\n})\n\nconst BaseCardAsset: FC<CardAssetProps> = (props) => {\n const {id, selected} = props\n\n const scheme = useColorSchemeValue()\n\n // Refs\n const shiftPressed: RefObject<boolean> = useKeyPress('shift')\n\n // Redux\n const dispatch = useDispatch()\n const lastPicked = useTypedSelector((state) => state.assets.lastPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n\n const asset = item?.asset\n const error = item?.error\n const picked = item?.picked\n const updating = item?.updating\n\n const {onSelect} = useAssetSourceActions()\n\n const {buildAssetUrl} = useS3MediaContext()\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n // Callbacks\n const handleAssetClick = (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (onSelect) {\n onSelect([\n {\n kind: 'assetDocumentId',\n value: asset._id,\n },\n ])\n } else if (shiftPressed.current) {\n if (picked) {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n } else {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n }\n } else {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n }\n }\n\n const handleContextActionClick = (e: MouseEvent) => {\n e.stopPropagation()\n\n if (onSelect) {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n } else if (shiftPressed.current && !picked) {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n } else {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n }\n }\n\n const opacityContainer = updating ? 0.5 : 1\n const opacityPreview = selected || updating ? 0.25 : 1\n\n return (\n <CardWrapper padding={1}>\n <CardContainer direction=\"column\" $picked={picked} $updating={item.updating}>\n {/* Image */}\n <Box\n flex={1}\n style={{\n cursor: selected ? 'default' : 'pointer',\n position: 'relative',\n }}\n >\n <div onClick={handleAssetClick} style={{height: '100%', opacity: opacityPreview}}>\n {/* File icon */}\n {isS3FileAsset(asset) && (\n <FileIcon asset={asset} extension={asset.extension} width=\"80px\" />\n )}\n\n {/* Image */}\n {isS3ImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard\n src={buildAssetUrl({assetId: asset._id, assetType: S3AssetType.IMAGE})}\n style={{\n transition: 'opacity 1000ms',\n }}\n />\n )}\n </div>\n\n {/* Selected check icon */}\n {selected && !updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n opacity: opacityContainer,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Text size={2}>\n <CheckmarkCircleIcon />\n </Text>\n </Flex>\n )}\n\n {/* Spinner */}\n {updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Spinner />\n </Flex>\n )}\n </Box>\n\n {/* Footer */}\n <ContextActionContainer\n align=\"center\"\n onClick={handleContextActionClick}\n paddingX={1}\n $scheme={scheme}\n style={{opacity: opacityContainer}}\n >\n {onSelect ? (\n <EditIcon\n style={{\n flexShrink: 0,\n opacity: 0.5,\n }}\n />\n ) : (\n <Checkbox\n checked={picked}\n readOnly\n style={{\n flexShrink: 0,\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n )}\n\n <Box marginLeft={2}>\n <Text muted size={0} textOverflow=\"ellipsis\">\n {asset.originalFilename}\n </Text>\n </Box>\n </ContextActionContainer>\n\n {/* Error button */}\n {error && (\n <Card\n tone=\"critical\"\n padding={3}\n style={{\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text size={1}>{error}</Text>\n </Container>\n }\n placement=\"left\"\n portal\n >\n <Text size={1}>\n <WarningFilledIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Card>\n )}\n </CardContainer>\n </CardWrapper>\n )\n}\n\nexport const CardAsset = memo(BaseCardAsset)\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {filesize} from 'filesize'\nimport type {FC} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {useTypedSelector} from '../../../hooks'\nimport {selectUploadById, uploadsActions} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {getSchemeColor} from '../../../utils'\nimport {PANEL_HEIGHT} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\ntype CardUploadProps = {\n id: string\n}\n\nconst CardWrapper = styled(Flex)`\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n position: relative;\n width: 100%;\n`\n\nexport const CardUpload: FC<CardUploadProps> = (props) => {\n const {id} = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const item = useTypedSelector((state) => selectUploadById(state, id))\n\n if (!item) {\n return null\n }\n\n const fileSize = filesize(item.size, {base: 10, round: 0})\n const percentLoaded = Math.round(item.percent || 0) // (0 - 100)\n\n const isComplete = item.status === 'complete'\n const isUploading = item.status === 'uploading'\n const isQueued = item.status === 'queued'\n\n let status\n if (isComplete) {\n status = 'Verifying'\n }\n if (isUploading) {\n status = `${percentLoaded}%`\n }\n if (isQueued) {\n status = 'Queued'\n }\n\n // Callbacks\n const handleCancelUpload = () => {\n dispatch(uploadsActions.uploadCancel({hash: item.hash}))\n }\n\n return (\n <CardWrapper padding={1}>\n <Flex\n direction=\"column\"\n flex={1}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n border: '1px solid transparent',\n height: '100%',\n position: 'relative',\n }}\n >\n {/* Progress bar */}\n <div\n style={{\n background: 'var(--card-fg-color)',\n bottom: 0,\n height: '1px',\n left: 0,\n position: 'absolute',\n width: '100%',\n transform: `scaleX(${percentLoaded * 0.01})`,\n transformOrigin: 'bottom left',\n transition: 'all 1000ms ease-out',\n }}\n />\n\n <Box flex={1} style={{position: 'relative'}}>\n {item.assetType === S3AssetType.IMAGE && item?.objectUrl && (\n <Image\n draggable={false}\n $scheme={scheme}\n src={item.objectUrl}\n style={{\n opacity: 0.4,\n }}\n />\n )}\n\n {item.assetType === S3AssetType.FILE && (\n <div style={{height: '100%', opacity: 0.1}}>\n <FileIcon width=\"80px\" />\n </div>\n )}\n\n {/*\n Cancel upload button.\n Assets will only have a `complete` status _after_ it has been created on your dataset.\n As such, we also hide the cancel button when `percentLoaded === 100`, as cancelling when the asset\n has been fully uploaded (even with a status of `progress`) won't stop the asset from being created.\n */}\n {!isComplete && percentLoaded !== 100 && (\n <Flex\n align=\"center\"\n direction=\"column\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Button\n fontSize={4}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={handleCancelUpload}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n />\n </Flex>\n )}\n </Box>\n\n {/* Footer */}\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingX={2}\n style={{height: `${PANEL_HEIGHT}px`}}\n >\n <Box flex={1} marginRight={1}>\n <Text size={0} textOverflow=\"ellipsis\">\n {item.name} ({fileSize})\n </Text>\n </Box>\n <Text size={0} style={{flexShrink: 0}} weight=\"semibold\">\n {status}\n </Text>\n </Flex>\n </Flex>\n </CardWrapper>\n )\n}\n","import type {FC} from 'react'\nimport {VirtuosoGrid} from 'react-virtuoso'\nimport {styled} from 'styled-components'\n\nimport {useTypedSelector} from '../../../hooks'\nimport type {CardAssetData, CardUploadData} from '../../../types/browser'\nimport {CardAsset} from '../CardAsset'\nimport {CardUpload} from '../CardUpload'\n\ntype AssetGridVirtualizedProps = {\n items: (CardAssetData | CardUploadData)[]\n onLoadMore?: () => void\n}\n\nconst CARD_HEIGHT = 220\nconst CARD_WIDTH = 240\n\nconst VirtualCell = ({\n item,\n selected,\n}: {\n item: CardAssetData | CardUploadData\n selected: boolean\n}) => {\n if (item?.type === 'asset') {\n return <CardAsset id={item.id} selected={selected} />\n }\n\n if (item?.type === 'upload') {\n return <CardUpload id={item.id} />\n }\n\n return null\n}\n\nconst StyledItemContainer = styled.div`\n height: ${CARD_HEIGHT}px;\n width: ${CARD_WIDTH}px;\n`\n\nconst StyledListContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, ${CARD_WIDTH}px);\n grid-template-rows: repeat(auto-fill, ${CARD_HEIGHT}px);\n justify-content: center;\n margin: 0 auto;\n`\n\nexport const AssetGridVirtualized: FC<AssetGridVirtualizedProps> = (props) => {\n const {items, onLoadMore} = props\n\n // Redux\n const selectedAssets = useTypedSelector((state) => state.selected.assets)\n\n const selectedIds = (selectedAssets && selectedAssets.map((asset) => asset._id)) || []\n const totalCount = items?.length\n\n if (totalCount === 0) {\n return null\n }\n\n return (\n <VirtuosoGrid\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n\n return item?.id\n }}\n components={{\n Item: StyledItemContainer,\n List: StyledListContainer,\n }}\n endReached={onLoadMore}\n itemContent={(index) => {\n const item = items[index]\n const selected = selectedIds.includes(item?.id)\n\n return <VirtualCell item={item} selected={selected} />\n }}\n overscan={48}\n style={{overflowX: 'hidden', overflowY: 'scroll'}}\n totalCount={totalCount}\n />\n )\n}\n","import {ChevronDownIcon, ChevronUpIcon} from '@sanity/icons'\nimport {Box, Label} from '@sanity/ui'\nimport type {FC} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {useTypedSelector} from '../../../hooks'\nimport {assetsActions} from '../../../modules'\n\ntype TableHeaderItemProps = {\n field?: string\n title?: string\n}\n\nexport const TableHeaderItem: FC<TableHeaderItemProps> = (props) => {\n const {field, title} = props\n\n // Redux\n const dispatch = useDispatch()\n const order = useTypedSelector((state) => state.assets.order)\n\n const isActive = order.field === field\n\n // Callbacks\n const handleClick = () => {\n if (!field || !title) {\n return\n }\n\n if (isActive) {\n const direction = order.direction === 'asc' ? 'desc' : 'asc'\n dispatch(assetsActions.orderSet({order: {field, direction}}))\n } else {\n dispatch(assetsActions.orderSet({order: {field, direction: 'asc'}}))\n }\n }\n\n return (\n <Label muted={!field} size={0}>\n <Box\n onClick={field ? handleClick : undefined}\n style={{\n cursor: field ? 'pointer' : 'default',\n display: 'inline',\n whiteSpace: 'nowrap',\n }}\n >\n <span\n style={{\n marginRight: '0.4em',\n }}\n >\n {title}\n </span>\n\n {isActive && order?.direction === 'asc' && <ChevronUpIcon />}\n {isActive && order?.direction === 'desc' && <ChevronDownIcon />}\n </Box>\n </Label>\n )\n}\n","import {Checkbox, Flex, Grid, type ThemeColorSchemeKey, useMediaIndex} from '@sanity/ui'\nimport {type FC, type MouseEvent} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useAssetSourceActions} from '../../../contexts'\nimport {useTypedSelector} from '../../../hooks'\nimport {assetsActions, selectAssetsLength, selectAssetsPickedLength} from '../../../modules'\nimport {getSchemeColor} from '../../../utils'\nimport {GRID_TEMPLATE_COLUMNS, PANEL_HEIGHT} from '../constants'\nimport {TableHeaderItem} from '../TableHeaderItem'\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `\n})\n\nexport const TableHeader: FC = () => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const itemsLength = useTypedSelector(selectAssetsLength)\n const numPickedAssets = useTypedSelector(selectAssetsPickedLength)\n\n const mediaIndex = useMediaIndex()\n const {onSelect} = useAssetSourceActions()\n\n const allSelected = numPickedAssets === itemsLength\n\n // Callbacks\n const handleContextActionClick = (e: MouseEvent) => {\n e.stopPropagation()\n\n if (allSelected) {\n dispatch(assetsActions.pickClear())\n } else {\n dispatch(assetsActions.pickAll())\n }\n }\n\n // Note that even though we hide the table header on smaller breakpoints, we never set it to\n // `display: none`, as doing so causes issues with react-virtuoso.\n // Instead, we give it 0 height and hide it with `visibility: hidden`.\n return (\n <Grid\n style={{\n alignItems: 'center',\n background: 'var(--card-bg-color)',\n borderBottom: '1px solid var(--card-border-color)',\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridTemplateColumns: GRID_TEMPLATE_COLUMNS.LARGE,\n height: mediaIndex < 3 ? 0 : `${PANEL_HEIGHT}px`,\n letterSpacing: '0.025em',\n position: 'sticky',\n textTransform: 'uppercase',\n top: 0,\n visibility: mediaIndex < 3 ? 'hidden' : 'visible',\n width: '100%',\n zIndex: 1, // force stacking context\n }}\n >\n {onSelect ? (\n <TableHeaderItem />\n ) : (\n <ContextActionContainer\n align=\"center\"\n justify=\"center\"\n onClick={handleContextActionClick}\n $scheme={scheme}\n style={{\n height: '100%',\n position: 'relative',\n }}\n >\n <Checkbox\n checked={!fetching && allSelected}\n readOnly\n style={{\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n </ContextActionContainer>\n )}\n\n <TableHeaderItem />\n <TableHeaderItem field=\"originalFilename\" title=\"Filename\" />\n <TableHeaderItem title=\"Resolution\" />\n <TableHeaderItem field=\"mimeType\" title=\"MIME type\" />\n <TableHeaderItem field=\"size\" title=\"Size\" />\n <TableHeaderItem field=\"_updatedAt\" title=\"Last updated\" />\n <TableHeaderItem title=\"References\" />\n <TableHeaderItem />\n </Grid>\n )\n}\n","import {CheckmarkCircleIcon, EditIcon, WarningFilledIcon} from '@sanity/icons'\nimport {\n Box,\n Card,\n Checkbox,\n Container,\n Flex,\n Grid,\n Spinner,\n Text,\n type ThemeColorSchemeKey,\n Tooltip,\n useMediaIndex,\n} from '@sanity/ui'\nimport {formatRelative} from 'date-fns'\nimport {filesize} from 'filesize'\nimport {\n type FC,\n memo,\n type MouseEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue, WithReferringDocuments} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {useS3MediaContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useKeyPress, useTypedSelector} from '../../../hooks'\nimport {assetsActions, dialogActions, selectAssetById} from '../../../modules'\nimport {S3AssetType} from '../../../types'\nimport {\n getAssetResolution,\n getSchemeColor,\n getUniqueDocuments,\n isS3FileAsset,\n isS3ImageAsset,\n} from '../../../utils'\nimport {GRID_TEMPLATE_COLUMNS} from '../constants'\nimport {FileIcon} from '../FileIcon'\nimport {Image} from '../Image'\n\n// Duration (ms) to wait before reference counts (and associated listeners) are rendered\nconst REFERENCE_COUNT_VISIBILITY_DELAY = 750\n\ntype TableRowAssetProps = {\n id: string\n selected: boolean\n}\n\nconst ContainerGrid = styled<\n typeof Grid,\n {$selected?: boolean; $scheme: ThemeColorSchemeKey; $updating?: boolean}\n>(Grid)(({$scheme, $selected, $updating}) => {\n return css`\n align-items: center;\n cursor: ${$selected ? 'default' : 'pointer'};\n height: 100%;\n pointer-events: ${$updating ? 'none' : 'auto'};\n user-select: none;\n white-space: nowrap;\n\n ${!$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\n }\n `}\n `\n})\n\nconst ContextActionContainer = styled<typeof Flex, {$scheme: ThemeColorSchemeKey}>(Flex)(({\n $scheme,\n}) => {\n return css`\n cursor: pointer;\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg2')};\n }\n }\n `\n})\n\n// eslint-disable-next-line complexity\nconst BaseTableRowAsset: FC<TableRowAssetProps> = (props) => {\n const {id, selected} = props\n\n const scheme = useColorSchemeValue()\n\n const shiftPressed: RefObject<boolean> = useKeyPress('shift')\n\n const [referenceCountVisible, setReferenceCountVisible] = useState(false)\n const refCountVisibleTimeout = useRef<ReturnType<typeof window.setTimeout>>(null)\n\n const dispatch = useDispatch()\n const lastPicked = useTypedSelector((state) => state.assets.lastPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n\n const mediaIndex = useMediaIndex()\n\n const {buildAssetUrl} = useS3MediaContext()\n\n const asset = item?.asset\n const error = item?.error\n const picked = item?.picked\n const updating = item?.updating\n\n const {onSelect} = useAssetSourceActions()\n\n const handleContextActionClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (onSelect) {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n } else if (shiftPressed.current && !picked) {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n } else {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n }\n },\n [asset, dispatch, lastPicked, onSelect, picked, shiftPressed],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (onSelect) {\n onSelect([{kind: 'assetDocumentId', value: asset._id}])\n } else if (shiftPressed.current) {\n if (picked) {\n dispatch(assetsActions.pick({assetId: asset._id, picked: !picked}))\n } else {\n dispatch(assetsActions.pickRange({startId: lastPicked || asset._id, endId: asset._id}))\n }\n } else {\n dispatch(dialogActions.showAssetEdit({assetId: asset._id}))\n }\n },\n [asset, dispatch, lastPicked, onSelect, picked, shiftPressed],\n )\n\n const opacityCell = updating ? 0.5 : 1\n const opacityPreview = selected || updating ? 0.1 : 1\n\n // Display reference count after an initial delay to prevent over-eager fetching\n useEffect(() => {\n refCountVisibleTimeout.current = setTimeout(\n () => setReferenceCountVisible(true),\n REFERENCE_COUNT_VISIBILITY_DELAY,\n )\n return () => {\n if (refCountVisibleTimeout.current) {\n clearTimeout(refCountVisibleTimeout.current)\n }\n }\n }, [])\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n return (\n <ContainerGrid\n onClick={selected ? undefined : handleClick}\n $scheme={scheme}\n $selected={selected}\n style={{\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridRowGap: 0,\n gridTemplateColumns:\n mediaIndex < 3 ? GRID_TEMPLATE_COLUMNS.SMALL : GRID_TEMPLATE_COLUMNS.LARGE,\n gridTemplateRows: mediaIndex < 3 ? 'auto' : '1fr',\n }}\n $updating={item.updating}\n >\n {/* Picked checkbox */}\n <ContextActionContainer\n onClick={handleContextActionClick}\n $scheme={scheme}\n style={{\n alignItems: 'center',\n gridColumn: 1,\n gridRowStart: 1,\n gridRowEnd: 'span 5',\n height: '100%',\n justifyContent: 'center',\n opacity: opacityCell,\n position: 'relative',\n }}\n >\n {onSelect ? (\n <EditIcon\n style={{\n flexShrink: 0,\n opacity: 0.5,\n }}\n />\n ) : (\n <Checkbox\n checked={picked}\n readOnly\n style={{\n pointerEvents: 'none',\n transform: 'scale(0.8)',\n }}\n />\n )}\n </ContextActionContainer>\n\n <Box\n style={{\n gridColumn: 2,\n gridRowStart: 1,\n gridRowEnd: 'span 5',\n height: '90px',\n width: '100px',\n }}\n >\n <Flex align=\"center\" justify=\"center\" style={{height: '100%', position: 'relative'}}>\n <Box style={{height: '100%', opacity: opacityPreview, position: 'relative'}}>\n {/* File icon */}\n {isS3FileAsset(asset) && (\n <FileIcon asset={asset} extension={asset.extension} width=\"40px\" />\n )}\n\n {/* Image */}\n {isS3ImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard\n src={buildAssetUrl({assetId: asset._id, assetType: S3AssetType.IMAGE})}\n />\n )}\n </Box>\n\n {/* Spinner */}\n {updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Spinner />\n </Flex>\n )}\n\n {/* Selected check icon */}\n {selected && !updating && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <Text size={2}>\n <CheckmarkCircleIcon />\n </Text>\n </Flex>\n )}\n </Flex>\n </Box>\n\n {/* Filename */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: 3,\n gridRow: mediaIndex < 3 ? 2 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {asset.originalFilename}\n </Text>\n </Box>\n\n {/* Resolution */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: mediaIndex < 3 ? 3 : 4,\n gridRow: mediaIndex < 3 ? 3 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {isS3ImageAsset(asset) && getAssetResolution(asset)}\n </Text>\n </Box>\n\n {/* MIME type */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 5,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {asset.mimeType}\n </Text>\n </Box>\n\n {/* Size */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 6,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {filesize(asset.size, {base: 10, round: 0})}\n </Text>\n </Box>\n\n {/* Last updated */}\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{\n gridColumn: mediaIndex < 3 ? 3 : 7,\n gridRow: mediaIndex < 3 ? 4 : 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {formatRelative(new Date(asset._updatedAt), new Date())}\n </Text>\n </Box>\n\n {/* References */}\n <Box\n style={{\n display: mediaIndex < 3 ? 'none' : 'block',\n gridColumn: 8,\n gridRow: 'auto',\n opacity: opacityCell,\n }}\n >\n <Text muted size={1} style={{lineHeight: '2em'}} textOverflow=\"ellipsis\">\n {referenceCountVisible ? (\n <WithReferringDocuments id={id}>\n {({isLoading, referringDocuments}) => {\n const uniqueDocuments = getUniqueDocuments(referringDocuments)\n return isLoading ? (\n <>-</>\n ) : (\n <>{Array.isArray(uniqueDocuments) ? uniqueDocuments.length : 0}</>\n )\n }}\n </WithReferringDocuments>\n ) : (\n <>-</>\n )}\n </Text>\n </Box>\n\n {/* Error */}\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n gridColumn: mediaIndex < 3 ? 4 : 9,\n gridRowStart: '1',\n gridRowEnd: mediaIndex < 3 ? 'span 5' : 'auto',\n opacity: opacityCell,\n }}\n >\n {/* Error button */}\n {error && (\n <Card tone=\"critical\" padding={2}>\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text size={1}>{error}</Text>\n </Container>\n }\n placement=\"left\"\n portal\n >\n <Text size={1}>\n <WarningFilledIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Card>\n )}\n </Flex>\n </ContainerGrid>\n )\n}\n\nexport const TableRowAsset = memo(BaseTableRowAsset)\n","import {createGlobalStyle, css} from 'styled-components'\n\nconst customScrollbar = css`\n ::-webkit-scrollbar {\n width: 14px;\n }\n\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n border: 4px solid rgba(0, 0, 0, 0);\n background: var(--card-border-color);\n background-clip: padding-box;\n\n &:hover {\n background: var(--card-muted-fg-color);\n background-clip: padding-box;\n }\n }\n`\n\nexport const GlobalStyle = createGlobalStyle`\n .media__custom-scrollbar {\n ${customScrollbar}\n }\n\n // @sanity/ui overrides\n\n // Custom scrollbar on Box (used in Dialogs)\n div[data-ui=\"Box\"] {\n ${customScrollbar}\n }\n\n // Dialog background color\n div[data-ui=\"Dialog\"] {\n background-color: rgba(15, 17, 18, 0.9);\n }\n\n`\n","/* eslint-disable no-empty */\nimport {white} from '@sanity/color'\nimport {Flex, Text} from '@sanity/ui'\nimport {type FC, type PropsWithChildren} from 'react'\nimport {type DropEvent, type DropzoneOptions, useDropzone} from 'react-dropzone'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {DropzoneDispatchProvider, useS3MediaOptionsContext} from '../../../contexts'\nimport {useAssetSourceActions} from '../../../contexts/S3AssetSourceDispatchContext'\nimport {useTypedSelector} from '../../../hooks'\nimport {notificationsActions, uploadsActions} from '../../../modules'\nimport {S3AssetType} from '../../../types'\n\nconst UploadContainer = styled.div`\n color: white;\n height: 100%;\n min-height: 100%;\n right: 0;\n top: 0;\n width: 100%;\n\n &:focus {\n outline: none;\n }\n`\n\nconst DragActiveContainer = styled.div`\n align-items: center;\n background: rgba(0, 0, 0, 0.75);\n display: flex;\n height: 100%;\n justify-content: center;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n z-index: 3;\n`\n\n// Iterate through all files and only return non-folders / packages.\n// We check for files by reading the first byte of the file\nasync function filterFiles(fileList: FileList) {\n const files = Array.from(fileList)\n\n const filteredFiles: File[] = []\n\n for (const file of files) {\n try {\n await file.slice(0, 1).arrayBuffer()\n filteredFiles.push(file)\n } catch {}\n }\n\n return filteredFiles\n}\n\nexport const UploadDropzone: FC<PropsWithChildren> = (props) => {\n const {children} = props\n\n const {directUploads} = useS3MediaOptionsContext()\n\n const {onSelect} = useAssetSourceActions()\n\n // Redux\n const dispatch = useDispatch()\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n\n const isImageAssetType = assetTypes.length === 1 && assetTypes[0] === S3AssetType.IMAGE\n\n // Callbacks\n const handleDrop = async (acceptedFiles: File[]) => {\n acceptedFiles.forEach((file) =>\n dispatch(\n uploadsActions.uploadRequest({\n file,\n forceAsAssetType: assetTypes.length === 1 ? assetTypes[0] : undefined,\n }),\n ),\n )\n }\n\n const handleDropRejected: DropzoneOptions['onDropRejected'] = (rejections) => {\n const errorCodes = rejections.flatMap(({errors}) => errors.map(({code}) => code))\n\n if (errorCodes.includes('file-too-large')) {\n dispatch(\n notificationsActions.add({\n status: 'error',\n title: 'One or more files exceed the maximum upload size.',\n }),\n )\n }\n }\n\n // Use custom file selector to obtain files on file drop + change events (excluding folders and packages)\n const handleFileGetter = async (event: DropEvent) => {\n let fileList: FileList | undefined\n if (event.type === 'drop' && 'dataTransfer' in event) {\n fileList = event?.dataTransfer?.files\n }\n if (event.type === 'change') {\n const target = event?.target as HTMLInputElement\n if (target?.files) {\n fileList = target.files\n }\n }\n\n if (!fileList) {\n return []\n }\n\n // Filter out non-folders / packages\n const files: File[] = await filterFiles(fileList)\n\n // Dispatch error if some files have been filtered out\n if (fileList?.length !== files.length) {\n dispatch(\n notificationsActions.add({\n status: 'error',\n title: `Unable to upload some items (folders and packages aren't supported)`,\n }),\n )\n }\n\n return files\n }\n\n // Limit file picking to only images if we're specifically within an image selection context (e.g. picking from image fields)\n const {getRootProps, getInputProps, isDragActive, open} = useDropzone({\n accept: isImageAssetType ? 'image/*' : '',\n getFilesFromEvent: handleFileGetter,\n noClick: true,\n // HACK: Disable drag and drop functionality when in a selecting context\n // (This is currently due to Sanity's native image input taking precedence with drag and drop)\n noDrag: !!onSelect,\n onDrop: handleDrop,\n onDropRejected: handleDropRejected,\n disabled: !directUploads,\n })\n\n return (\n <DropzoneDispatchProvider open={open}>\n <UploadContainer {...getRootProps()}>\n <input {...getInputProps()} />\n\n {isDragActive && (\n <DragActiveContainer>\n <Flex direction=\"column\" justify=\"center\" style={{color: white.hex}}>\n <Text size={3} style={{color: 'inherit'}}>\n Drop files to upload\n </Text>\n </Flex>\n </DragActiveContainer>\n )}\n\n {children}\n </UploadContainer>\n </DropzoneDispatchProvider>\n )\n}\n","import {ChevronDownIcon, UploadIcon} from '@sanity/icons'\nimport {Menu, MenuButton, type MenuButtonProps, MenuGroup, type MenuGroupProps} from '@sanity/ui'\nimport {startCase, uniqueId} from 'lodash'\nimport {type ChangeEvent, type FC, type JSX, type MouseEvent, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport type {S3AssetSource} from '../../types'\nimport {Button, MenuItem} from '../UI'\n\nconst UPLOAD_DROP_DOWN_MENU_POPOVER: MenuButtonProps['popover'] = {portal: true} as const\nconst MENU_GROUP_POPOVER: MenuGroupProps['popover'] = {\n placement: 'right-start',\n fallbackPlacements: ['left-start', 'bottom', 'top'],\n}\nconst ASSET_SOURCE_DATA_ATTRIBUTE = 'data-asset-source-name'\n\ninterface UploadDropDownMenuProps {\n accept?: string\n assetSources: S3AssetSource[]\n capture?: 'user' | 'environment'\n directUploads?: boolean\n multiple?: boolean\n onSelectFiles?: (assetSource: S3AssetSource, files: File[]) => void\n readOnly?: boolean\n renderAsMenuGroup?: boolean\n}\n\nexport const UploadDropDownMenu: FC<UploadDropDownMenuProps> = (props) => {\n const {\n accept,\n assetSources,\n capture,\n directUploads,\n multiple,\n onSelectFiles,\n readOnly,\n renderAsMenuGroup = false,\n } = props\n const {t} = useTranslation()\n\n const uniqId = useMemo(() => uniqueId(), [])\n const uploadsDisabled = readOnly || directUploads === false\n\n const createAssetSourceInputId = useCallback(\n (assetSource: S3AssetSource) => {\n return `${uniqId}-${assetSource.name}-upload-button`\n },\n [uniqId],\n )\n\n // Needed for keyboard navigation (arrow keys + enter/space)\n const handleMenuItemClick = useCallback(\n (event: MouseEvent) => {\n const assetSourceName = event.currentTarget.getAttribute(ASSET_SOURCE_DATA_ATTRIBUTE)\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return\n }\n const element = document.getElementById(createAssetSourceInputId(assetSource))\n // Test for document.activeElement to avoid clicking the button twice\n if (element && document.activeElement !== element) {\n element.click()\n }\n },\n [assetSources, createAssetSourceInputId],\n )\n\n const renderMenuItemLabel = useCallback(\n (menuItemContent: JSX.Element) => {\n const assetSourceName = menuItemContent.props[ASSET_SOURCE_DATA_ATTRIBUTE]\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return menuItemContent\n }\n return <label htmlFor={createAssetSourceInputId(assetSource)}>{menuItemContent}</label>\n },\n [assetSources, createAssetSourceInputId],\n )\n\n const renderMenuItemForAssetSource = useCallback(\n (assetSource: S3AssetSource) => {\n const inputId = createAssetSourceInputId(assetSource)\n\n return (\n <MenuItem\n key={`${inputId}-menu-button`}\n {...{[ASSET_SOURCE_DATA_ATTRIBUTE]: assetSource.name}}\n disabled={uploadsDisabled}\n htmlFor={inputId}\n icon={assetSource.icon}\n onClick={handleMenuItemClick}\n renderMenuItem={renderMenuItemLabel}\n text={assetSource.title || startCase(assetSource.name)}\n />\n )\n },\n [createAssetSourceInputId, handleMenuItemClick, renderMenuItemLabel, uploadsDisabled],\n )\n\n const handleFileInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const assetSourceName = event.target.dataset.assetSourceName\n const assetSource = assetSources.find((source) => source.name === assetSourceName)\n if (!assetSource) {\n return\n }\n if (onSelectFiles && event.target.files) {\n onSelectFiles(assetSource, Array.from(event.target.files))\n }\n event.stopPropagation()\n event.preventDefault()\n },\n [assetSources, onSelectFiles],\n )\n\n const fileInputs = useMemo(() => {\n return assetSources.map((assetSource) => {\n const _id = createAssetSourceInputId(assetSource)\n return (\n <input\n key={_id}\n accept={accept}\n capture={capture}\n id={_id}\n data-asset-source-name={assetSource.name}\n multiple={multiple}\n onChange={handleFileInputChange}\n type=\"file\"\n value=\"\"\n style={{display: 'none'}}\n />\n )\n })\n }, [accept, assetSources, capture, createAssetSourceInputId, handleFileInputChange, multiple])\n\n if (assetSources && assetSources.length > 1) {\n const menuItems = assetSources.map((assetSource) => renderMenuItemForAssetSource(assetSource))\n\n if (renderAsMenuGroup) {\n return (\n <>\n <MenuGroup\n icon={UploadIcon}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n popover={MENU_GROUP_POPOVER}\n >\n {menuItems}\n </MenuGroup>\n {fileInputs}\n </>\n )\n }\n return (\n <>\n <MenuButton\n id={`${uniqId}_upload-button`}\n button={\n <Button\n data-testid=\"file-input-upload-button-0\"\n icon={UploadIcon}\n iconRight={ChevronDownIcon}\n mode=\"bleed\"\n disabled={uploadsDisabled}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n />\n }\n menu={<Menu>{menuItems}</Menu>}\n popover={UPLOAD_DROP_DOWN_MENU_POPOVER}\n />\n {fileInputs}\n </>\n )\n }\n\n return null\n}\n","import {\n AccessDeniedIcon,\n BinaryDocumentIcon,\n ImageIcon,\n ReadOnlyIcon,\n UploadIcon,\n} from '@sanity/icons'\nimport {Flex, Text, useElementSize} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {type FC, type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {type SchemaType} from 'sanity'\nimport {useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {type S3AssetSource, S3AssetType} from '../../types'\nimport {FileInputButton} from '../File/FileInputButton'\nimport {UploadDropDownMenu} from './UploadDropDownMenu'\n\ninterface UploadPlaceholderProps {\n assetSources: S3AssetSource[]\n browse: ReactNode | undefined\n directUploads: boolean | undefined\n onUpload: ((assetSource: S3AssetSource, files: File[]) => void) | undefined\n readOnly: boolean | undefined\n schemaType: SchemaType\n type: S3AssetType\n}\n\nconst RootFlex = styled(Flex)`\n pointer-events: none;\n`\n\nexport const UploadPlaceholder: FC<UploadPlaceholderProps> = (props) => {\n const {assetSources, browse, directUploads, onUpload, readOnly, schemaType, type} = props\n\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const rect = useElementSize(rootElement)\n\n // Adjust the layout in narrow containers\n const collapsed = rect?.border && rect.border.width < 440\n\n const isFileType = type === S3AssetType.FILE\n\n const {t} = useTranslation()\n\n const assetSourcesWithUpload = useMemo(() => {\n const result: S3AssetSource[] = assetSources.filter((s) => Boolean(s.Uploader))\n\n return result\n }, [assetSources])\n\n const handleSelectFiles = useCallback(\n (assetSource: S3AssetSource, files: File[]) => {\n if (onUpload) {\n onUpload(assetSource, files)\n }\n },\n [onUpload],\n )\n\n const accept = get(schemaType, 'options.accept', isFileType ? '' : 'image/*')\n\n const uploadButton = useMemo(() => {\n switch (assetSourcesWithUpload.length) {\n case 0:\n return null\n case 1:\n return (\n <FileInputButton\n accept={accept}\n disabled={readOnly || directUploads === false}\n icon={UploadIcon}\n mode=\"bleed\"\n onSelect={(files) => {\n if (onUpload) {\n onUpload(assetSourcesWithUpload[0], files)\n }\n }}\n text={t('input.files.common.upload-placeholder.file-input-button.text')}\n />\n )\n default:\n return (\n <UploadDropDownMenu\n accept={accept}\n assetSources={assetSourcesWithUpload}\n directUploads={directUploads}\n onSelectFiles={handleSelectFiles}\n readOnly={readOnly}\n />\n )\n }\n }, [accept, assetSourcesWithUpload, directUploads, handleSelectFiles, onUpload, readOnly, t])\n\n const messageIcon = useMemo(() => {\n if (readOnly) {\n return <ReadOnlyIcon />\n }\n\n if (directUploads === false) {\n return <AccessDeniedIcon />\n }\n\n return isFileType ? <BinaryDocumentIcon /> : <ImageIcon />\n }, [directUploads, isFileType, readOnly])\n\n const messageText = useMemo(() => {\n if (directUploads === false) {\n return \"Can't upload files here\"\n }\n\n if (readOnly) {\n return 'Read only'\n }\n\n return isFileType ? 'Drag or paste file here' : 'Drag or paste image here'\n }, [directUploads, readOnly, isFileType])\n\n return assetSourcesWithUpload.length === 0 ? null : (\n <Flex\n align={collapsed ? undefined : 'center'}\n direction={collapsed ? 'column' : 'row'}\n gap={4}\n justify=\"space-between\"\n paddingY={collapsed ? 1 : undefined}\n ref={setRootElement}\n >\n <Flex flex={1}>\n <RootFlex align=\"center\" gap={3} justify=\"center\" paddingLeft={1}>\n <Text muted size={1}>\n {messageIcon}\n </Text>\n\n <Text size={1} muted>\n {messageText}\n </Text>\n </RootFlex>\n </Flex>\n\n <Flex align=\"center\" gap={1} justify=\"center\" wrap=\"wrap\">\n {uploadButton}\n {browse}\n </Flex>\n </Flex>\n )\n}\n","import {Card, Code, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type FC, useEffect} from 'react'\nimport {LinearProgress, Translate, type UploadState, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {STALE_UPLOAD_MS} from '../../constants'\nimport {Button} from '../UI'\n\nconst FlexWrapper = styled(Flex)`\n box-sizing: border-box;\n text-overflow: ellipsis;\n overflow: hidden;\n overflow: clip;\n`\n\nconst LeftSection = styled(Stack)`\n position: relative;\n width: 60%;\n`\n\nconst CodeWrapper = styled(Code)`\n position: relative;\n width: 100%;\n\n code {\n overflow: hidden;\n overflow: clip;\n text-overflow: ellipsis;\n position: relative;\n max-width: 200px;\n }\n`\n\ninterface UploadProgressProps {\n uploadState: UploadState\n onCancel?: () => void\n onStale?: () => void\n}\n\nconst elapsedMs = (date: string): number => new Date().getTime() - new Date(date).getTime()\n\nexport const UploadProgress: FC<UploadProgressProps> = (props) => {\n const {uploadState, onCancel, onStale} = props\n const filename = uploadState.file.name\n\n useEffect(() => {\n if (elapsedMs(uploadState.updatedAt) > STALE_UPLOAD_MS) {\n onStale?.()\n }\n }, [uploadState.updatedAt, onStale])\n\n const {t} = useTranslation()\n\n return (\n <Card tone=\"primary\" border>\n <FlexWrapper\n padding={4}\n align=\"center\"\n justify=\"space-between\"\n height=\"fill\"\n direction=\"row\"\n gap={2}\n >\n <LeftSection>\n <Flex justify=\"center\" gap={[3, 3, 2, 2]} direction={['column', 'column', 'row']}>\n <Text size={1}>\n <Inline space={2}>\n <Translate\n t={t}\n i18nKey=\"input.files.common.upload-progress\"\n components={{\n FileName: () => <CodeWrapper size={1}>{filename ? filename : '…'}</CodeWrapper>,\n }}\n />\n </Inline>\n </Text>\n </Flex>\n\n <Card border marginTop={3} radius={5}>\n <LinearProgress value={uploadState.progress} />\n </Card>\n </LeftSection>\n\n {onCancel ? (\n <Button\n mode=\"ghost\"\n onClick={onCancel}\n text={t('input.files.common.cancel-upload')}\n tone=\"critical\"\n />\n ) : null}\n </FlexWrapper>\n </Card>\n )\n}\n","import {Box, Flex, Stack, Text, useGlobalKeyDown} from '@sanity/ui'\nimport {type FC, type MouseEvent, useCallback} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport type {S3AssetSource} from '../../types'\nimport {Button, Dialog} from '../UI'\n\ninterface UploadDestinationPickerProps {\n assetSources: S3AssetSource[]\n onSelectAssetSource?: (source: S3AssetSource | null) => void\n onClose?: () => void\n text?: string\n}\n\nexport const UploadDestinationPicker: FC<UploadDestinationPickerProps> = (props) => {\n const {assetSources, onSelectAssetSource, text, onClose} = props\n\n const assetSourcesWithUpload = assetSources.filter((s) => Boolean(s.Uploader))\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const target = event.currentTarget as HTMLElement\n const sourceName = target.getAttribute('data-asset-source-name') as string\n const assetSource = assetSources.find((source) => source.name === sourceName)\n if (assetSource && onSelectAssetSource) {\n onSelectAssetSource(assetSource)\n }\n },\n [assetSources, onSelectAssetSource],\n )\n\n useGlobalKeyDown((event) => {\n if (event.key === 'Escape') {\n if (onClose) {\n onClose()\n }\n }\n })\n\n if (assetSourcesWithUpload.length === 0) {\n return null\n }\n\n return (\n <Dialog\n onClickOutside={onClose}\n onClose={onClose}\n id=\"upload-destination-picker\"\n header={\n <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n }\n width={1}\n bodyHeight=\"stretch\"\n >\n <Box padding={2}>\n <Stack space={2}>\n {assetSourcesWithUpload.map((assetSource) => {\n const Icon = assetSource.icon\n return (\n <Button\n key={assetSource.name}\n data-asset-source-name={assetSource.name}\n mode=\"bleed\"\n onClick={handleClick}\n tone=\"default\"\n tooltipProps={null}\n >\n <Flex align=\"center\">\n {isValidElementType(Icon) && <Icon style={{fontSize: '2rem'}} />}\n <Box>\n <Text>{assetSource.title}</Text>\n </Box>\n </Flex>\n </Button>\n )\n })}\n </Stack>\n </Box>\n </Dialog>\n )\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n type ClipboardEvent,\n type ComponentType,\n type DragEvent,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport type {FileInfo} from '../../types'\nimport {imageUrlToBlob} from '../../utils'\n\nconst extractDroppedFiles = async (dataTransfer: DataTransfer): Promise<File[]> => {\n return Array.from(dataTransfer.files)\n}\n\nconst extractPastedFiles = async (clipboardData: DataTransfer): Promise<File[]> => {\n return Array.from(clipboardData.files)\n}\n\ntype CamelToKebab<S extends string> = S extends `${infer P1}${infer P2}`\n ? P2 extends Uncapitalize<P2>\n ? `${Lowercase<P1>}${CamelToKebab<P2>}`\n : `${Lowercase<P1>}-${CamelToKebab<Uncapitalize<P2>>}`\n : S\n\ntype DataAttribute<S extends string> = `data-${CamelToKebab<S>}`\n\nconst fileTargetDataAttribute: Record<DataAttribute<'isFileTarget'>, 'true'> = {\n 'data-is-file-target': 'true',\n}\n\n// this is a hack for Safari that reads pasted image(s) from an ContentEditable div instead of the onpaste event\nconst convertImagesToFilesAndClearContentEditable = (\n element: HTMLElement,\n targetFormat = 'image/jpeg',\n): Promise<File[]> => {\n if (!element.isContentEditable) {\n return Promise.reject(\n new Error(\n `Expected element to be contentEditable=\"true\". Instead found a non contenteditable ${element.tagName}`,\n ),\n )\n }\n return new Promise((resolve) => setTimeout(resolve, 10)) // add a delay so the paste event can finish\n .then(() => Array.from(element.querySelectorAll('img')))\n .then((imageElements) => {\n element.innerHTML = '' // clear\n return imageElements\n })\n .then((images) => Promise.all(images.map((img) => imageUrlToBlob(img.src))))\n .then((imageBlobs) =>\n imageBlobs.map((blob) => new File([blob!], 'pasted-image.jpg', {type: targetFormat})),\n )\n}\n\n// needed by Edge\nconst select = (el: Element) => {\n const range = document.createRange()\n range.selectNodeContents(el)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n}\n\ntype Props = {\n onFiles?: (files: File[]) => void\n onFilesOver?: (files: FileInfo[]) => void\n onFilesOut?: () => void\n pasteTarget?: HTMLElement\n disabled?: boolean\n}\n\ntype ManagedProps =\n | 'onDrop'\n | 'onDragOver'\n | 'onPaste'\n | 'onDragEnter'\n | 'onDragLeave'\n | 'onKeyDown'\n\nconst PASTE_INPUT_STYLE = {opacity: 0, position: 'absolute'} as const\n\nexport function UploadFileTarget<ComponentProps>(Component: ComponentType<ComponentProps>) {\n // eslint-disable-next-line react/display-name\n return (props: Omit<ComponentProps, ManagedProps> & Props) => {\n const {onFiles, onFilesOver, onFilesOut, pasteTarget, disabled, ...rest} = props\n const [showPasteInput, setShowPasteInput] = useState(false)\n\n const pasteInput = useRef<HTMLDivElement | null>(null)\n const ref = useRef<HTMLElement | null>(null)\n\n const enteredElements = useRef<Element[]>([])\n\n const emitFiles = useCallback(\n (files: File[]) => {\n onFiles?.(files)\n },\n [onFiles],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n !pasteTarget &&\n event.target === ref.current &&\n (event.ctrlKey || event.metaKey) &&\n event.key === 'v'\n ) {\n setShowPasteInput(true)\n }\n },\n [pasteTarget],\n )\n\n const handlePaste = useCallback(\n (event: ClipboardEvent) => {\n void extractPastedFiles(event.clipboardData)\n .then((files) => {\n if (pasteTarget) {\n return files\n }\n if (!pasteInput.current) {\n return []\n }\n return files.length > 0\n ? files\n : // Invoke Safari hack if we didn't get any files\n convertImagesToFilesAndClearContentEditable(pasteInput.current, 'image/jpeg')\n })\n .then((files) => {\n emitFiles(files)\n if (!pasteTarget) {\n setShowPasteInput(false)\n ref.current?.focus()\n }\n })\n },\n [emitFiles, pasteTarget],\n )\n\n useEffect(() => {\n if (pasteTarget) {\n const pasteTargetElementListener = (event: globalThis.ClipboardEvent) => {\n // Some applications may put both text and files on the clipboard when content is copied (Word, Excel etc).\n // If we have both text and html on the clipboard, the intention is probably to paste text, so ignore the files.\n const hasHtml = !!event.clipboardData?.getData('text/html')\n const hasText = !!event.clipboardData?.getData('text/plain')\n if (hasHtml && hasText) {\n console.warn(\n 'Clipboard contains both text and HTML, ignoring additional file data on the clipboard.',\n )\n return\n }\n handlePaste(event as unknown as ClipboardEvent)\n }\n pasteTarget.addEventListener('paste', pasteTargetElementListener)\n return () => {\n pasteTarget.removeEventListener('paste', pasteTargetElementListener)\n }\n }\n return undefined\n }, [pasteTarget, handlePaste])\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n enteredElements.current = []\n\n event.preventDefault()\n event.stopPropagation()\n const dataTransfer = event.nativeEvent.dataTransfer\n\n if (onFiles && dataTransfer) {\n void extractDroppedFiles(dataTransfer).then((files) => {\n if (files) {\n emitFiles(files)\n }\n })\n }\n onFilesOut?.()\n },\n [emitFiles, onFiles, onFilesOut],\n )\n\n const handleDragOver = useCallback(\n (event: DragEvent) => {\n if (onFiles) {\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [onFiles],\n )\n\n const handleDragEnter = useCallback(\n (event: DragEvent) => {\n const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n type: item.type,\n kind: item.kind,\n }))\n\n event.stopPropagation()\n\n if (onFilesOver && ref.current === event.currentTarget) {\n /* this is a (hackish) work around to have the drag and drop work when the file is hovered back and forth over it\n as part of the refactor and adding more components to the \"hover\" state, it didn't recognise that it just kept adding the same\n element over and over, so when it tried to remove them on the handleDragLeave, it only removed the last instance.\n */\n enteredElements.current = [...new Set(enteredElements.current), event.currentTarget]\n\n onFilesOver(fileTypes)\n }\n },\n [onFilesOver],\n )\n\n const handleDragLeave = useCallback(\n (event: DragEvent) => {\n event.stopPropagation()\n const idx = enteredElements.current.indexOf(event.currentTarget)\n if (idx > -1) {\n enteredElements.current.splice(idx, 1)\n }\n if (enteredElements.current.length === 0) {\n onFilesOut?.()\n }\n },\n [onFilesOut],\n )\n\n const prevShowPasteInput = useRef(false)\n\n useEffect(() => {\n if (!prevShowPasteInput.current && showPasteInput && pasteInput.current) {\n pasteInput.current.focus()\n select(pasteInput.current) // Needed by Edge\n } else if (prevShowPasteInput.current && !showPasteInput) {\n pasteInput.current?.focus()\n }\n prevShowPasteInput.current = showPasteInput\n }, [pasteTarget, showPasteInput])\n\n return (\n <>\n <Component\n {...(rest as ComponentProps)}\n ref={ref}\n onKeyDown={disabled ? undefined : handleKeyDown}\n onDragOver={disabled ? undefined : handleDragOver}\n onDragEnter={disabled ? undefined : handleDragEnter}\n onDragLeave={disabled ? undefined : handleDragLeave}\n onDrop={disabled ? undefined : handleDrop}\n {...fileTargetDataAttribute}\n />\n\n {!disabled && showPasteInput && (\n <div contentEditable onPaste={handlePaste} ref={pasteInput} style={PASTE_INPUT_STYLE} />\n )}\n </>\n )\n }\n}\n","import {AccessDeniedIcon, UploadIcon} from '@sanity/icons'\nimport {Box, Card, type CardTone, Flex, Inline, Layer, Text, useToast} from '@sanity/ui'\nimport {uniqBy} from 'lodash'\nimport {type FC, type ReactNode, useCallback, useMemo, useRef, useState} from 'react'\nimport {type FileLike, type InputOnSelectFileFunctionProps, type SchemaType,useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport type {FileInfo, S3AssetSource, S3FileSchemaType, S3ImageSchemaType} from '../../types'\nimport {accepts} from '../../utils'\nimport {UploadDestinationPicker} from './UploadDestinationPicker'\nimport {UploadFileTarget} from './UploadFileTarget'\n\ntype FileEntry = {\n file: File\n schemaType: SchemaType | null\n assetSource: S3AssetSource | null\n}\n\nconst StyledCard = styled(Card)`\n height: 100%;\n`\n\nconst Overlay = styled(Layer)`\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n top: -2px;\n left: -2px;\n right: -2px;\n bottom: -2px;\n background-color: var(--card-bg-color);\n opacity: 0.8;\n`\n\nconst Sticky = styled(Box)`\n position: sticky;\n top: 0;\n bottom: 0;\n margin: auto;\n`\n\nconst fileMatchesSchema = (\n file: FileLike,\n schemaType: S3FileSchemaType | S3ImageSchemaType,\n): boolean => {\n const accept = schemaType.options?.accept\n\n if (!accept) return true\n return accepts(file, accept)\n}\n\nconst getFilesAndAssetSources = ({\n files,\n schemaType,\n assetSources,\n directUploads,\n destinationName,\n}: {\n files: File[]\n schemaType: S3FileSchemaType | S3ImageSchemaType\n assetSources: S3AssetSource[]\n directUploads: boolean | undefined\n destinationName: string | null\n}): FileEntry[] => {\n if (!directUploads) {\n return files.map((file) => ({\n file,\n schemaType: null,\n assetSource: null,\n }))\n }\n\n const uploadSources = assetSources.filter((s) => Boolean(s.Uploader))\n\n return files.map((file) => {\n if (!fileMatchesSchema(file, schemaType)) {\n return {file, schemaType: null, assetSource: null}\n }\n\n const assetSource =\n uploadSources.find((source) => !destinationName || source.name === destinationName) ?? null\n\n return {\n file,\n schemaType: assetSource ? schemaType : null,\n assetSource,\n }\n })\n}\n\ntype UploadTargetCardProps = Parameters<typeof Card>['0'] & {\n directUploads: boolean | undefined\n assetSources: S3AssetSource[]\n schemaType: S3FileSchemaType | S3ImageSchemaType\n isReadOnly?: boolean\n onSetHoveringFiles?: (files: FileInfo[]) => void\n onSelectFile?: (\n props: Omit<InputOnSelectFileFunctionProps, 'assetSource'> & {assetSource: S3AssetSource},\n ) => void\n pasteTarget?: HTMLElement\n children?: ReactNode\n}\n\nconst Root = styled.div`\n position: relative;\n`\n\nexport const UploadTargetCard: FC<UploadTargetCardProps> = (props) => {\n const {\n schemaType,\n children,\n assetSources,\n isReadOnly,\n pasteTarget,\n onSelectFile,\n onSetHoveringFiles,\n tone: toneFromProps,\n directUploads,\n ...rest\n } = props\n\n const assetSourcesWithUpload = useMemo(\n () => assetSources.filter((source) => Boolean(source.Uploader)),\n [assetSources],\n )\n\n const FileTarget = UploadFileTarget(StyledCard)\n\n const {push: pushToast} = useToast()\n const {t} = useTranslation()\n\n const [filesToUpload, setFilesToUpload] = useState<File[]>([])\n const [showAssetSourceDestinationPicker, setShowAssetSourceDestinationPicker] = useState(false)\n const [tone, setTone] = useState<CardTone>(\n toneFromProps || (isReadOnly ? 'transparent' : 'default'),\n )\n\n const assetSourceDestinationName = useRef<string | null>(null)\n\n const alertRejectedFiles = useCallback(\n (rejected: FileEntry[]) => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('inputs.array.error.cannot-upload-unable-to-convert', {\n count: rejected.length,\n }),\n description: rejected.map((task, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Flex key={i} gap={2} padding={2}>\n <Box>\n <Text weight=\"medium\">{task.file.name}</Text>\n </Box>\n <Box>\n <Text size={1}>({task.file.type})</Text>\n </Box>\n </Flex>\n )),\n })\n },\n [pushToast, t],\n )\n\n // This is called after the user has dropped or pasted files and selected an asset source destination (if applicable)\n const handleUploadFiles = useCallback(\n (files: File[]) => {\n const filesAndAssetSources = getFilesAndAssetSources({\n files,\n directUploads,\n schemaType,\n assetSources,\n destinationName: assetSourceDestinationName.current,\n })\n\n const ready = filesAndAssetSources.filter((entry) => entry.assetSource !== null)\n const rejected = filesAndAssetSources.filter((entry) => entry.assetSource === null)\n\n if (rejected.length > 0) {\n alertRejectedFiles(rejected)\n }\n\n if (onSelectFile) {\n ready.forEach((entry) => {\n onSelectFile({\n assetSource: entry.assetSource!,\n schemaType: entry.schemaType!,\n file: entry.file,\n })\n })\n }\n },\n [directUploads, schemaType, assetSources, onSelectFile, alertRejectedFiles],\n )\n\n // This is called when files are dropped or pasted onto the upload target. It may show the asset source destination picker if needed.\n const handleFiles = useCallback(\n (files: File[]) => {\n if (isReadOnly) {\n return\n }\n\n const filesAndAssetSources = getFilesAndAssetSources({\n files,\n schemaType,\n destinationName: assetSourceDestinationName.current,\n assetSources,\n directUploads,\n })\n\n const ready = filesAndAssetSources.filter((entry) => entry.assetSource !== null)\n\n if (ready.length === 0) {\n alertRejectedFiles(filesAndAssetSources)\n return\n }\n\n const uniqueAssetSources = uniqBy(assetSourcesWithUpload, 'name')\n if (uniqueAssetSources.length > 1 && !assetSourceDestinationName.current) {\n setShowAssetSourceDestinationPicker(true)\n setFilesToUpload(files)\n return\n }\n setShowAssetSourceDestinationPicker(false)\n setFilesToUpload([])\n handleUploadFiles(ready.map((entry) => entry.file))\n },\n [\n isReadOnly,\n schemaType,\n assetSources,\n directUploads,\n assetSourcesWithUpload,\n handleUploadFiles,\n alertRejectedFiles,\n ],\n )\n\n const [hoveringFiles, setHoveringFiles] = useState<FileInfo[]>([])\n\n const handleFilesOver = useCallback(\n (files: FileInfo[]) => {\n if (isReadOnly) {\n return\n }\n setHoveringFiles(files)\n\n const acceptedFiles = files.filter((file) => fileMatchesSchema(file, schemaType))\n\n const rejectedFilesCount = files.length - acceptedFiles.length\n\n if (rejectedFilesCount > 0) {\n setTone('critical')\n } else if (acceptedFiles.length > 0) {\n setTone('primary')\n } else {\n setTone('default')\n }\n\n if (onSetHoveringFiles) {\n onSetHoveringFiles(files)\n }\n },\n [isReadOnly, onSetHoveringFiles, schemaType],\n )\n\n const handleFilesOut = useCallback(() => {\n if (isReadOnly) {\n return\n }\n setHoveringFiles([])\n setTone('default')\n if (onSetHoveringFiles) {\n onSetHoveringFiles([])\n }\n setFilesToUpload([])\n }, [isReadOnly, onSetHoveringFiles])\n\n // Asset sources may be returned for multiple types (file, image), we need to deduplicate them in order to show a unique list\n const assetSourcesWithUploadByName = uniqBy(assetSourcesWithUpload, 'name')\n\n const handleSetAssetSourceDestination = useCallback(\n (assetSource: S3AssetSource | null) => {\n assetSourceDestinationName.current = assetSource?.name ?? null\n if (filesToUpload.length > 0 && assetSource) {\n handleUploadFiles(filesToUpload)\n }\n setFilesToUpload([])\n setShowAssetSourceDestinationPicker(false)\n assetSourceDestinationName.current = null\n },\n [filesToUpload, handleUploadFiles],\n )\n\n const handleUploadDestinationPickerClose = useCallback(() => {\n handleFilesOver([])\n setFilesToUpload([])\n setShowAssetSourceDestinationPicker(false)\n assetSourceDestinationName.current = null\n }, [handleFilesOver])\n\n const uploadDestinationPickerText = t(\n 'inputs.files.common.placeholder.select-asset-source-upload-destination',\n {\n context: schemaType.name,\n },\n )\n\n const acceptedFiles = hoveringFiles.filter((file) => fileMatchesSchema(file, schemaType))\n\n const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n return (\n <Root>\n {showAssetSourceDestinationPicker && (\n <UploadDestinationPicker\n assetSources={assetSourcesWithUploadByName}\n onSelectAssetSource={handleSetAssetSourceDestination}\n onClose={handleUploadDestinationPickerClose}\n text={uploadDestinationPickerText}\n />\n )}\n\n <FileTarget\n {...rest}\n tone={toneFromProps || tone}\n onFiles={handleFiles}\n onFilesOver={handleFilesOver}\n onFilesOut={handleFilesOut}\n pasteTarget={pasteTarget}\n >\n {hoveringFiles.length > 0 && (\n <Overlay zOffset={10}>\n <Sticky paddingBottom={3} paddingTop={3}>\n {acceptedFiles.length > 0 ? (\n <>\n <Inline space={2}>\n <Text>\n <UploadIcon />\n </Text>\n {t('inputs.files.common.drop-message.drop-to-upload')}\n <Text />\n </Inline>\n\n {rejectedFilesCount > 0 && (\n <Box marginTop={4}>\n <Inline space={2}>\n <Text muted size={1}>\n <AccessDeniedIcon />\n </Text>\n <Text muted size={1}>\n {t(\n 'inputs.files.common.drop-message.drop-to-upload.rejected-file-message',\n {\n count: rejectedFilesCount,\n },\n )}\n </Text>\n </Inline>\n </Box>\n )}\n </>\n ) : (\n <Inline space={2}>\n <Text>\n <AccessDeniedIcon />\n </Text>\n <Text>\n {t('inputs.files.common.drop-message.drop-to-upload.no-accepted-file-message', {\n count: hoveringFiles.length,\n })}\n </Text>\n </Inline>\n )}\n </Sticky>\n </Overlay>\n )}\n {children}\n </FileTarget>\n </Root>\n )\n}\n"],"names":["useKeyPress","hotkey","onPress","$","_c","keyPressed","useRef","t0","e","isHotkey","current","downHandler","t1","Symbol","for","upHandler","t2","t3","window","addEventListener","removeEventListener","useEffect","useTypedSelector","useSelector","FONT_SIZE","SUBTITLE_FONT_SIZE","SubtitleText","styled","Text","PreviewWrapper","Box","MenuItem","forwardRef","ref","Icon","IconRight","__unstable_space","__unstable_subtitle","badgeText","childrenProp","disabled","hotkeys","renderMenuItem","rest","text","tooltipProps","children","icon","iconRight","preview","undefined","jsx","opacity","Flex","jsxs","isValidElement","isValidElementType","t4","Stack","t5","Hotkeys","marginTop","marginBottom","Badge","t6","menuItemContent","t7","t8","t9","t10","UIMenuItem","t11","content","t12","t13","Tooltip","LARGE_BUTTON_PROPS","space","padding","DEFAULT_BUTTON_PROPS","TooltipButtonWrapper","span","Button","paddingLeft","paddingY","size","mode","tone","sizeProps","UIButton","Dialog","bodyHeight","footer","props","zOffset","animate","t","useTranslation","confirmButton","cancelButton","description","onClose","UIDialog","FileButton","attrs","forwardedAs","css","FileInputButton","accept","capture","idProp","multiple","onSelect","id","useId","event","target","files","Array","from","handleChange","FileMenuItem","FileInputMenuItem","item","DropzoneDispatchContext","createContext","DropzoneDispatchProvider","open","contextValue","useDropzoneActions","context","useContext","Error","AssetSourceDispatchContext","AssetBrowserDispatchProvider","useAssetSourceActions","accepts","file","acceptedFiles","acceptedFilesArray","isArray","split","fileName","name","mimeType","type","toLowerCase","baseMimeType","replace","some","validType","trim","charAt","endsWith","hashFile","arrayBuffer","then","buffer","crypto","subtle","digest","hash","Uint8Array","map","b","toString","padStart","join","imageUrlToBlob","imageUrl","format","quality","match","Promise","reject","resolve","loader","Image","crossOrigin","referrerPolicy","onload","canvas","document","createElement","width","height","getContext","drawImage","toBlob","error","src","constructFilter","assetTypes","searchQuery","documentAssetTypes","groq","JSON","stringify","PREVIEW_WIDTH","createBlob","img","imageAspect","Math","max","err","console","warn","createImageEl","blobUrlLarge","URL","createObjectURL","revokeObjectURL","generatePreviewBlobUrl","imageEl","blob","generatePreviewBlobUrl$","of","pipe","mergeMap","getAssetResolution","asset","metadata","dimensions","SCHEME_COLORS","bg","dark","hues","gray","hex","light","bg2","inputEnabledBorder","studioTheme","color","default","input","enabled","border","inputHoveredBorder","hovered","mutedHoveredBg","primary","muted","mutedHoveredFg","fg","mutedSelectedBg","selected","spotBlue","spot","blue","getSchemeColor","scheme","colorKey","getUniqueDocuments","documents","draftIds","reduce","acc","doc","_id","startsWith","concat","slice","filter","includes","UPLOAD_STATUS_KEY","STALE_UPLOAD_MS","SUPPORTED_ASSET_TYPES","S3AssetType","FILE","IMAGE","ORDER_OPTIONS","direction","field","UNSET_UPLOAD_PATCH","unset","createUploadEvent","patches","CLEANUP_EVENT","createInitialUploadPatches","now","Date","toISOString","value","progress","createdAt","updatedAt","set","createInitialUploadEvent","DEFAULT_CONCURRENCY","remove","array","index","indexOf","splice","createThrottler","concurrency","currentSubscriptions","pendingObservables","ready$","Subject","request","observable","Observable","observer","length","scheduleAndWait$","subscribe","subscription","push","unsubscribe","next","shift","asObservable","first","obs","withMaxConcurrency","func","throttler","args","MAX_CONCURRENT_UPLOADS","fetchExistingAsset","client","assetType","fetch","documentType","tag","getImageDimensions","subscriber","url","cleanup","complete","onerror","catchError","getFileExtension","filename","pop","buildFileName","fileId","extension","buildDocumentId","buildAssetDocument","documentId","storeOriginalFilename","baseDocument","_type","assetId","originalFilename","sha1hash","aspectRatio","createCompleteEvent","exists","uploadAsset","s3Client","sanityClient","options","existing","assets","create","uploadS3Asset","ClientError","statusCode","constructor","res","extractErrorProps","message","Object","assign","ServerError","body","response","responseBody","stringifyBody","details","isObject","httpErrorMessage","bodyObj","sliceWithEllipsis","statusMessage","method","headers","str","createFetchClient","controller","AbortController","signal","execute","attemptNumber","timeoutMs","timeout","timeoutId","setTimeout","abort","fetchOptions","clearTimeout","json","catch","status","statusText","fromEntries","entries","maxRetries","delay","retryDelay","pow","defineHttpRequest","config","fetchClient","seen","tap","warnings","forEach","msg","shouldIgnoreWarning","ignoreWarnings","pattern","RegExp","test","defineCreateClientExports","ClassConstructor","createClient","clientRequester","requester","validateAssetType","upload","validators","bucketRegion","bucketKey","getSignedUrlEndpoint","secret","fileSize","fileType","executeUpload","stage","percent","loaded","total","lengthComputable","signedUrlResponse","contentType","signedUrl","canParse","xhr","XMLHttpRequest","onprogress","overallPercent","setRequestHeader","send","deleteAsset","deleteEndpoint","executeDelete","fileKey","ok","ObservableAssetsClient","AssetsClient","lastValueFrom","ObservableS3Client","httpRequest","clone","newConfig","withConfig","thisConfig","S3Client","exp","createS3Client","credentialsNamespace","pluginConfigKeys","key","title","S3MediaContext","S3MediaContextProvider","isCredentialsDialogDismissed","setIsCredentialsDialogDismissed","useState","secrets","credentials","loading","isCredentialsLoading","useSecrets","isCredentialsDialogOpen","s3AssetBaseUrl","cloudfrontDomain","buildS3ImageUrl","baseUrl","buildS3FileUrl","buildAssetUrl","SettingsView","useS3MediaContext","S3MediaOptionsContext","directUploads","S3MediaOptionsContextProvider","useS3MediaOptionsContext","ORDER_DICTIONARY","_createdAt","asc","desc","_updatedAt","getOrderTitle","order","initialState","query","searchSlice","createSlice","reducers","querySet","state","action","payload","searchActions","actions","searchReducer","reducer","UPLOADS_ACTIONS","uploadComplete","createAction","isS3ImageAsset","buildS3ImagePath","isS3FileAsset","buildS3FilePath","defaultOrder","allIds","byIds","fetchCount","fetching","fetchingError","lastPicked","pageIndex","pageSize","view","assetsSlice","extraReducers","builder","addCase","picked","updating","clear","deleteComplete","assetIds","deleteIndex","floor","deleteError","itemErrors","items","deleteRequest","keys","deleteSkipped","reason","fetchComplete","fetchError","fetchRequest","_action","prepare","params","queryFilter","selector","sort","insertUploads","results","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","listenerUpdateQueue","listenerUpdateQueueComplete","loadNextPage","loadPageIndex","orderSet","pick","pickAll","pickClear","values","pickRange","startIndex","findIndex","startId","endIndex","endId","indices","a","tagA","tagB","updateComplete","updateError","updateRequest","viewSet","assetsActions","assetsDeleteEpic","action$","_state$","referenceResults","referenceMap","Map","referenceCount","blockedAssets","get","deletableAssets","blockedIds","deletableIds","blockedActions$","EMPTY","deleteRequests","deleteFlow$","forkJoin","delete","assetsFetchEpic","state$","withLatestFrom","switchMap","result","assetsFetchPageIndexEpic","start","end","documentAssetIds","constructedFilter","search","assetsFetchNextPageEpic","assetsFetchAfterDeleteAllEpic","nextPageIndex","assetsOrderSetEpic","assetsSearchEpic","ofType","debounceTime","assetsListenerCreateQueueEpic","bufferTime","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsSortEpic","assetsUnpickEpic","assetsUpdateEpic","closeDialogId","formData","patch","setIfMissing","opt","commit","updatedAsset","selectAssetsByIds","selectAssetsAllIds","selectAssetById","createSelector","selectAssets","selectAssetsLength","selectAssetsPicked","selectAssetsPickedLength","assetsPicked","assetsReducer","dialogSlice","showConfirmDeleteAssets","suffix","pluralize","confirmCallbackAction","assetItem","confirmText","headerTitle","showAssetEdit","dialogClearOnAssetUpdateEpic","dialogId","dialogActions","dialogReducer","uploadsSlice","checkRequest","checkComplete","blobUrl","objectUrl","previewReady","uploadCancel","uploadError","uploadRequest","uploadProgress","uploadHash","uploadStart","uploadItem","uploadsActions","uploadsAssetStartEpic","merge","takeUntil","v","throwError","empty","uploadsAssetUploadEpic","forceAsAssetType","uploads","uploadsCompleteQueueEpic","uploadsCheckRequestEpic","documentIds","resultHashes","checkedResults","selectUploadById","uploadId","uploadsReducer","notificationsSlice","add","notificationsAssetsDeleteCompleteEpic","deletedCount","notificationsAssetsDeleteErrorEpic","count","notificationsAssetsDeleteSkippedEpic","notificationsAssetsUploadCompleteEpic","notificationsGenericErrorEpic","notificationsActions","notificationsReducer","rootEpic","combineEpics","selectedSlice","selectedReducer","dialog","notifications","rootReducer","combineReducers","selectCombinedItems","uploadIds","assetItems","Container","FileIcon","onClick","assetUrl","ReactFileIcon","defaultStyles","$scheme","$showCheckerboard","GRID_TEMPLATE_COLUMNS","SMALL","LARGE","PANEL_HEIGHT","CardWrapper","CardContainer","$picked","theme","$updating","sanity","orange","ContextActionContainer","BaseCardAsset","useColorSchemeValue","shiftPressed","dispatch","useDispatch","_temp","state_0","stopPropagation","kind","handleAssetClick","e_0","handleContextActionClick","opacityContainer","opacityPreview","cursor","position","transition","left","top","CheckmarkCircleIcon","Spinner","EditIcon","flexShrink","Checkbox","pointerEvents","transform","t14","t15","t16","Card","right","WarningFilledIcon","t17","CardAsset","memo","CardUpload","filesize","base","round","percentLoaded","isComplete","isUploading","isQueued","handleCancelUpload","background","bottom","transformOrigin","CloseIcon","boxShadow","CARD_HEIGHT","CARD_WIDTH","VirtualCell","StyledItemContainer","div","StyledListContainer","AssetGridVirtualized","onLoadMore","selectedAssets","_temp2","selectedIds","totalCount","Item","List","index_0","item_0","overflowX","overflowY","VirtuosoGrid","TableHeaderItem","isActive","handleClick","display","whiteSpace","marginRight","ChevronUpIcon","ChevronDownIcon","Label","TableHeader","itemsLength","numPickedAssets","mediaIndex","useMediaIndex","allSelected","alignItems","borderBottom","gridColumnGap","gridTemplateColumns","letterSpacing","textTransform","visibility","zIndex","Grid","REFERENCE_COUNT_VISIBILITY_DELAY","ContainerGrid","$selected","BaseTableRowAsset","referenceCountVisible","setReferenceCountVisible","refCountVisibleTimeout","opacityCell","gridRowGap","gridTemplateRows","gridColumn","gridRowStart","gridRowEnd","justifyContent","t18","t19","t20","t21","t22","t23","t24","t25","gridRow","t26","lineHeight","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","formatRelative","t54","t55","t56","t57","t58","t59","WithReferringDocuments","Fragment","t60","t61","t62","t63","t64","t65","t66","TableRowAsset","isLoading","referringDocuments","uniqueDocuments","customScrollbar","GlobalStyle","createGlobalStyle","UploadContainer","DragActiveContainer","filterFiles","fileList","filteredFiles","UploadDropzone","isImageAssetType","handleDrop","rejections","flatMap","_temp3","handleDropRejected","dataTransfer","handleFileGetter","getFilesFromEvent","noClick","noDrag","onDrop","onDropRejected","getRootProps","getInputProps","isDragActive","useDropzone","white","code","errors","UPLOAD_DROP_DOWN_MENU_POPOVER","portal","MENU_GROUP_POPOVER","placement","fallbackPlacements","ASSET_SOURCE_DATA_ATTRIBUTE","UploadDropDownMenu","assetSources","onSelectFiles","readOnly","renderAsMenuGroup","uniqueId","uniqId","uploadsDisabled","assetSource","createAssetSourceInputId","assetSourceName","currentTarget","getAttribute","assetSource_0","find","source","element","getElementById","activeElement","click","handleMenuItemClick","assetSourceName_0","assetSource_1","source_0","renderMenuItemLabel","assetSource_2","inputId","startCase","renderMenuItemForAssetSource","event_0","assetSourceName_1","dataset","assetSource_3","source_1","preventDefault","handleFileInputChange","assetSource_4","fileInputs","assetSource_5","menuItems","MenuGroup","UploadIcon","Menu","MenuButton","RootFlex","UploadPlaceholder","browse","onUpload","schemaType","rootElement","setRootElement","rect","useElementSize","collapsed","isFileType","assetSourcesWithUpload","handleSelectFiles","bb0","files_0","uploadButton","bb1","ReadOnlyIcon","AccessDeniedIcon","BinaryDocumentIcon","ImageIcon","messageIcon","bb2","messageText","s","Boolean","Uploader","FlexWrapper","LeftSection","CodeWrapper","Code","elapsedMs","date","getTime","UploadProgress","uploadState","onCancel","onStale","FileName","Inline","Translate","LinearProgress","UploadDestinationPicker","onSelectAssetSource","sourceName","useGlobalKeyDown","T0","T1","T2","fontSize","extractDroppedFiles","extractPastedFiles","clipboardData","fileTargetDataAttribute","convertImagesToFilesAndClearContentEditable","targetFormat","isContentEditable","querySelectorAll","imageElements","innerHTML","images","all","imageBlobs","File","tagName","select","el","range","createRange","selectNodeContents","sel","getSelection","removeAllRanges","addRange","PASTE_INPUT_STYLE","UploadFileTarget","Component","onFiles","onFilesOver","onFilesOut","pasteTarget","showPasteInput","setShowPasteInput","pasteInput","enteredElements","emitFiles","useCallback","handleKeyDown","ctrlKey","metaKey","handlePaste","focus","pasteTargetElementListener","hasHtml","getData","hasText","nativeEvent","handleDragOver","handleDragEnter","fileTypes","Set","handleDragLeave","idx","prevShowPasteInput","StyledCard","Overlay","Layer","Sticky","fileMatchesSchema","getFilesAndAssetSources","destinationName","uploadSources","Root","UploadTargetCard","isReadOnly","onSelectFile","onSetHoveringFiles","toneFromProps","FileTarget","pushToast","useToast","filesToUpload","setFilesToUpload","showAssetSourceDestinationPicker","setShowAssetSourceDestinationPicker","setTone","assetSourceDestinationName","rejected","closable","alertRejectedFiles","filesAndAssetSources","ready","rejected_0","_temp4","entry_1","entry","handleUploadFiles","filesAndAssetSources_0","ready_0","_temp5","uniqBy","_temp6","handleFiles","hoveringFiles","setHoveringFiles","files_1","handleFilesOver","handleFilesOut","assetSourcesWithUploadByName","handleSetAssetSourceDestination","handleUploadDestinationPickerClose","uploadDestinationPickerText","file_0","acceptedFiles_0","rejectedFilesCount_0","rejectedFilesCount","task","i","entry_0","entry_2","entry_3"],"mappings":"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"}