sanity-plugin-media
6.1.16.1.2
dist/index.js.map~
dist/index.js.mapModified+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["ReactNode","createContext","useContext","useMemo","AssetSourceComponentProps","ContextProps","isMultiSelect","onSelect","Props","children","AssetSourceDispatchContext","undefined","AssetBrowserDispatchProvider","props","$","_c","t0","t1","contextValue","t2","useAssetSourceActions","context","Error","useEffect","useState","useRootPortalElement","$","_c","container","_temp","t0","t1","classList","add","document","body","appendChild","removeChild","createElement","TypedUseSelectorHook","useSelector","RootReducerState","useTypedSelector","SanityClient","useClient","useVersionedClient","$","_c","t0","Symbol","for","apiVersion","OrderDirection","ORDER_DICTIONARY","Record","asc","desc","_createdAt","_updatedAt","mimeType","originalFilename","size","getOrderTitle","field","direction","groq","SearchFacetDivider","SearchFacetInputProps","SearchFacetName","SearchFacetOperators","divider","type","inputs","Record","altText","assetTypes","field","name","operatorType","operatorTypes","title","value","creditLine","description","folder","fileName","height","inCurrentDocument","options","selectOnly","inUse","isOpaque","orientation","size","modifier","modifiers","fieldModifier","fieldName","tag","width","operators","doesNotInclude","fn","undefined","label","doesNotReference","_field","empty","_value","hideInput","equalTo","greaterThan","greaterThanOrEqualTo","includes","is","isNot","lessThan","lessThanOrEqualTo","notEmpty","references","AssetSourceComponentProps","divider","inputs","SearchFacetInputProps","SearchFacetDivider","SearchFacetGroup","OrderDirection","SUPPORTED_ASSET_TYPES","const","ORDER_OPTIONS","direction","field","FACETS","tag","inUse","inCurrentDocument","title","folder","altText","creditLine","description","isOpaque","fileName","size","type","orientation","width","height","GRID_TEMPLATE_COLUMNS","SMALL","LARGE","FOLDERS_PANEL_WIDTH","FOLDER_DOCUMENT_NAME","PANEL_HEIGHT","TAG_DOCUMENT_NAME","TAGS_PANEL_WIDTH","iif","Observable","of","throwError","delay","mergeMap","debugThrottle","throttled","source","T","pipe","v","Math","random","message","statusCode","groq","operators","TAG_DOCUMENT_NAME","AssetType","SearchFacetInputProps","buildExcludeTagsFragment","excludeTagSlugs","serializedExcludeTagSlugs","length","JSON","stringify","undefined","constructFilter","assetTypes","currentFolderId","searchFacets","searchQuery","documentAssetTypes","map","type","baseFilter","excludeTagsFragment","searchFacetFragments","reduce","acc","facet","field","modifier","modifiers","operatorType","value","operator","currentModifier","find","m","name","facetField","fieldModifier","fragment","fn","push","options","currentOptionValue","l","folderFilter","constructedQuery","trim","join","Asset","AssetRef","_ref","_type","ImageNode","asset","findImageAssets","document","Record","newAsset","assetToReplaceId","matchedTopLevelFields","Set","repointNestedImages","map","field","node","topLevelField","candidate","assetRef","hasMatchingAssetRef","_id","add","key","value","Object","entries","SanityClient","groq","from","Observable","of","throwError","mergeMap","TAG_DOCUMENT_NAME","HttpError","checkTagName","client","name","source","T","pipe","fetch","existingTagCount","message","statusCode","TagSelectOption","TagItem","getTagSelectOptions","tags","reduce","acc","val","tag","push","label","name","current","value","_id","createAction","AssetItem","HttpError","Tag","ASSETS_ACTIONS","tagsAddComplete","prepare","assets","tag","payload","tagsAddError","error","tagsAddRequest","tagsRemoveComplete","tagsRemoveError","tagsRemoveRequest","createAction","AssetItem","DIALOG_ACTIONS","showFolderCreate","prepare","parentFolderId","payload","showFolderMove","assets","folderId","showFolderRename","showTagCreate","showTagEdit","tagId","createSelector","createSlice","isAnyOf","PayloadAction","ClientError","Transaction","groq","Selector","ofType","from","Observable","of","bufferTime","catchError","filter","mergeMap","switchMap","withLatestFrom","TAG_DOCUMENT_NAME","checkTagName","debugThrottle","Asset","HttpError","MyEpic","TagSelectOption","Tag","TagItem","getTagSelectOptions","ASSETS_ACTIONS","DIALOG_ACTIONS","RootReducerState","TagsReducerState","allIds","byIds","Record","creating","creatingError","fetchCount","fetching","fetchingError","panelVisible","initialState","undefined","tagsSlice","name","extraReducers","builder","addCase","showTagCreate","state","showTagEdit","action","tagId","payload","error","addMatcher","tagsAddComplete","tagsAddError","tagsRemoveComplete","tagsRemoveError","tag","_id","updating","tagsAddRequest","tagsRemoveRequest","reducers","createComplete","assetId","includes","push","_type","picked","createError","createRequest","_action","deleteComplete","deleteIndex","indexOf","splice","deleteError","deleteRequest","Object","keys","forEach","key","fetchComplete","tags","length","fetchError","fetchRequest","reducer","query","prepare","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","tagIds","listenerUpdateQueue","listenerUpdateQueueComplete","panelVisibleSet","sort","a","b","tagA","current","tagB","updateComplete","closeDialogId","updateError","updateRequest","formData","tagsCreateEpic","action$","state$","client","pipe","actions","match","debug","badConnection","observable","create","result","message","statusCode","tagsDeleteEpic","fetch","tagName","assets","patches","map","asset","id","patch","ifRevisionID","_rev","unset","transaction","reduce","tx","delete","commit","tagsFetchEpic","items","tagsListenerCreateQueueEpic","tagsListenerDeleteQueueEpic","tagsListenerUpdateQueueEpic","tagsSortEpic","type","tagsUpdateEpic","set","updatedTag","selectTagsByIds","selectTagsAllIds","selectTags","selectTagById","selectTagSelectOptions","opt","media","acc","v","tagItem","_ref","tagsActions","PayloadAction","createSelector","createSlice","uuid","EMPTY","of","filter","mergeMap","withLatestFrom","MyEpic","SearchFacetInputProps","SearchFacetOperatorType","WithId","tagsActions","RootReducerState","SearchState","facets","query","initialState","searchSlice","name","reducers","facetsAdd","state","action","facet","push","payload","id","facetsClear","facetsRemoveByName","facetName","facetsRemoveByTag","tagId","type","operatorType","value","facetsRemoveById","facetId","facetsUpdate","modifier","find","f","facetsUpdateById","forEach","index","querySet","searchQuery","searchFacetTagUpdateEpic","action$","state$","pipe","updateComplete","match","tag","currentSearchFacetTag","search","tagItem","tags","byIds","_id","actions","label","current","selectIsSearchFacetTag","_state","searchFacets","some","searchActions","reducer","createAction","SanityAssetDocument","SanityImageAssetDocument","UPLOADS_ACTIONS","uploadComplete","prepare","asset","payload","createSelector","createSlice","PayloadAction","AttributeSet","ClientError","Patch","SanityDocument","Transaction","groq","nanoid","Selector","ofType","EMPTY","from","of","bufferTime","catchError","concatMap","debounceTime","filter","mergeMap","switchMap","withLatestFrom","getOrderTitle","ORDER_OPTIONS","debugThrottle","Asset","AssetItem","AssetType","BrowserView","HttpError","MyEpic","Order","OrderDirection","Tag","constructFilter","findImageAssets","searchActions","RootReducerState","UPLOADS_ACTIONS","ASSETS_ACTIONS","ItemError","description","id","referencingIDs","type","AssetsReducerState","allIds","assetTypes","byIds","Record","excludeTagSlugs","fetchCount","fetching","fetchingError","lastPicked","order","pageIndex","pageSize","view","defaultOrder","direction","field","initialState","undefined","title","assetsSlice","name","extraReducers","builder","addCase","uploadComplete","state","action","asset","payload","_id","_type","picked","updating","tagsAddComplete","assets","forEach","tagsAddError","tagsAddRequest","tagsRemoveComplete","tagsRemoveError","tagsRemoveRequest","reducers","clear","deleteComplete","assetIds","deleteIndex","indexOf","splice","Math","floor","length","deleteError","error","itemErrors","response","body","items","map","item","deleteRequest","closeDialogId","Object","keys","key","fetchComplete","includes","push","existing","fetchError","folderSetComplete","folderId","assetId","opt","media","folder","_ref","_weak","folderSetError","message","folderSetRequest","fetchRequest","reducer","_action","params","query","prepare","queryFilter","selector","sort","replace","pipe","insertUploads","results","entries","hash","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","listenerUpdateQueue","listenerUpdateQueueComplete","loadNextPage","loadPageIndex","orderSet","pick","pickAll","pickClear","values","pickRange","endId","startId","startIndex","findIndex","endIndex","indices","a","b","slice","tagA","tagB","updateComplete","updateError","updateImageReferences","updateImageReferencesComplete","updateRequest","formData","viewSet","assetsDeleteEpic","action$","_state$","client","assetsActions","match","observable","delete","JSON","stringify","assetsFetchEpic","state$","debug","badConnection","fetch","result","statusCode","assetsFetchPageIndexEpic","start","end","documentId","selected","document","documentAssetIds","constructedFilter","currentFolderId","folders","searchFacets","search","facets","searchQuery","assetsFetchNextPageEpic","assetsFetchAfterDeleteAllEpic","nextPageIndex","filterAssetWithoutTag","tag","tagIndex","tags","t","patchOperationTagAppend","patch","setIfMissing","append","_key","patchOperationTagUnset","ifRevisionId","_rev","unset","patchOperationFolderSet","nextPatch","set","assetsOrderSetEpic","assetsSearchEpic","facetsAdd","facetsClear","facetsRemoveById","facetsRemoveByName","facetsRemoveByTag","facetsUpdate","facetsUpdateById","querySet","assetsListenerCreateQueueEpic","actions","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsSortEpic","assetsTagsAddEpic","pickedAssets","selectAssetsPicked","pickedAssetsFiltered","transaction","reduce","tx","pickedAsset","commit","assetsTagsRemoveEpic","assetsFolderSetEpic","assetsFolderSetRefreshEpic","assetsUnpickEpic","assetsUpdateEpic","updatedAsset","assetsUpdateImageReferencesEpic","documents","patchedCount","clonedDocument","parse","assetsToReplace","patchSet","assign","originalAsset","selectAssetsByIds","selectAssetsAllIds","selectAssetById","selectAssets","selectAssetsLength","selectAssetsPickedLength","assetsPicked","createSelector","createSlice","PayloadAction","ClientError","Patch","groq","nanoid","from","of","catchError","debounceTime","filter","map","mergeMap","switchMap","withLatestFrom","FOLDER_DOCUMENT_NAME","debugThrottle","FolderDoc","FolderTreeItem","FolderTreeNode","HttpError","MyEpic","buildExcludeTagsFragment","assetsActions","RootReducerState","UPLOADS_ACTIONS","FoldersReducerState","byId","Record","childrenByParentId","rootIds","exactCountByFolderId","unfiledCount","currentFolderId","currentFolderUnfiled","panelVisible","fetching","fetchCount","fetchingError","creating","creatingError","deletingId","deleteError","renaming","renameError","initialState","undefined","indexFolders","folders","forEach","folder","_id","parentKey","parentId","push","sortByName","ids","sort","a","b","name","localeCompare","numeric","sensitivity","Object","values","foldersSlice","reducers","createComplete","state","_action","createError","action","error","payload","createRequest","currentFolderClear","currentFolderSet","folderId","currentFolderShowUnfiled","deleteComplete","deletedIds","clearedCurrentFolder","removed","Set","has","deleteRequest","fetchComplete","length","fetchError","fetchRequest","panelVisibleSet","renameComplete","renameRequest","foldersFetchEpic","action$","state$","client","pipe","actions","match","debug","badConnection","assetTypes","assets","type","excludeTagsFragment","excludeTagSlugs","excludeTagsClause","observable","fetch","count","JSON","stringify","result","f","folderIds","Boolean","message","statusCode","foldersRefreshEpic","folderSetComplete","listenerCreateQueueComplete","listenerDeleteQueueComplete","listenerUpdateQueueComplete","updateComplete","uploadComplete","foldersCurrentFolderEpic","clear","pickClear","loadPageIndex","pageIndex","patchOperationAssetFolderUnset","patch","unset","patchOperationFolderParentSet","set","parent","_ref","_type","_weak","foldersCreateEpic","trim","siblingIds","collision","some","id","toLowerCase","newId","doc","create","foldersDeleteEpic","childFolderIds","tx","transaction","asset","childFolderId","delete","commit","foldersRenameEpic","selectById","selectChildrenByParentId","selectRootIds","selectExactCountByFolderId","selectCurrentFolderId","selectCurrentFolderUnfiled","buildFolderPath","segments","cursor","seen","add","unshift","join","selectFolderPathById","_state","selectFolderTree","buildNode","children","exactCount","totalCount","reduce","sum","child","path","selectCurrentFolderSegments","chain","depth","FoldersIndex","selectFoldersIndex","selectCurrentFolderChildren","split","stack","cur","pop","kids","selectCanDeleteFolder","foldersActions","reducer","createSlice","PayloadAction","pluralize","ofType","EMPTY","of","filter","mergeMap","AssetItem","Dialog","MyEpic","Tag","assetsActions","ASSETS_ACTIONS","foldersActions","tagsActions","DIALOG_ACTIONS","DialogReducerState","items","initialState","dialogSlice","name","extraReducers","builder","addCase","showFolderCreate","state","action","parentFolderId","payload","push","id","type","showFolderMove","assets","folderId","showFolderRename","showTagCreate","showTagEdit","tagId","createComplete","item","renameComplete","reducers","clear","inlineTagCreate","assetId","tag","forEach","lastCreatedTag","label","current","value","_id","inlineTagRemove","tagIds","lastRemovedTagIds","remove","showConfirmAssetsTagAdd","assetsPicked","closeDialogId","suffix","length","confirmCallbackAction","tagsAddRequest","confirmText","title","headerTitle","tone","showConfirmAssetsTagRemove","tagsRemoveRequest","showConfirmDeleteAssets","deleteRequest","map","assetItem","asset","description","showConfirmDeleteFolder","folderName","showConfirmDeleteTag","showAllAssetsDialog","some","showAssetEdit","showSearchFacets","showFolders","showTags","dialogClearOnAssetUpdateEpic","action$","pipe","deleteComplete","folderSetComplete","updateComplete","dialogId","actions","dialogTagCreateEpic","match","dialogTagDeleteEpic","listenerDeleteQueueComplete","dialogActions","reducer","createGlobalStyle","css","customScrollbar","GlobalStyle","PropsWithChildren","createContext","useContext","useMemo","DropzoneOptions","MediaToolOptions","Locale","ContextProps","dropzone","Pick","components","createTagsOnUpload","creditLine","directUploads","excludeTagSlugs","locales","ToolOptionsContext","Props","options","ToolOptionsProvider","children","value","creditLineExcludeSources","excludeSources","Array","isArray","maxSize","maximumUploadSize","details","enabled","excludeTags","length","useToolOptions","context","Error","z","localizedStringSchema","locales","id","length","string","trim","optional","shape","Record","ZodTypeAny","locale","object","passthrough","tagOptionSchema","label","min","message","value","getAssetFormSchema","altText","creditLine","description","opt","media","tags","array","nullable","originalFilename","title","assetFormSchema","tagFormSchema","name","folderFormSchema","SanityDocument","getUniqueDocuments","documents","draftIds","reduce","acc","doc","_id","startsWith","concat","slice","filteredDocuments","filter","includes","ImageAsset","imageDprUrl","asset","options","width","height","dpi","window","devicePixelRatio","Math","round","imgH","max","undefined","imgW","urlParams","URLSearchParams","append","toString","url","FormData","Record","sanitizeFormData","formData","Object","keys","reduce","acc","key","val","constructor","Array","length","trim","Asset","FileAsset","ImageAsset","isFileAsset","asset","_type","isImageAsset","zodResolver","FieldValues","Resolver","zodFormResolver","schema","TFieldValues","Parameters","ImageAsset","getAssetResolution","asset","metadata","dimensions","width","height","PopoverProps","usePortal","usePortalPopoverProps","$","_c","portal","t0","element","animate","constrainSize","floatingBoundary","referenceBoundary","ClipboardIcon","Button","Popover","Text","copy","useEffect","useRef","useState","usePortalPopoverProps","Props","disabled","url","ButtonAssetCopy","t0","$","_c","popoverProps","refPopoverTimeout","popoverVisible","setPopoverVisible","t1","current","clearTimeout","setTimeout","handleClick","t2","t3","Symbol","for","t4","t5","t6","DownloadIcon","Box","Button","Flex","Inline","Stack","Text","format","filesize","ReactNode","Asset","AssetItem","getAssetResolution","isImageAsset","ButtonAssetCopy","Props","asset","item","Row","t0","$","_c","label","value","t1","Symbol","for","opacity","width","t2","t3","textAlign","t4","t5","AssetMetadata","props","exif","metadata","originalFilename","url","window","location","href","handleDownload","size","base","round","mimeType","t6","extension","toUpperCase","t7","t8","t9","t10","DateTimeOriginal","FNumber","FocalLength","ExposureTime","ISO","background","height","Date","t11","updating","t12","t13","t14","t15","t16","Dialog","SanityDialog","ComponentProps","props","$","_c","t0","Symbol","for","position","t1","SanityDocument","Box","Button","Card","Stack","Text","Preview","SchemaType","useSchema","useIntentLink","Props","documents","isLoading","DocumentList","t0","$","_c","schema","t1","Symbol","for","length","map","doc","_id","get","_type","t2","ReferringDocument","props","schemaType","intent","params","id","onClick","width","Box","Flex","Theme","MouseEvent","defaultStyles","FileIcon","ReactFileIcon","DefaultExtensionType","styled","css","Props","extension","onClick","e","width","Container","theme","sanity","fonts","text","family","props","$","_c","t0","Symbol","for","height","t1","t2","t3","t4","Flex","Asset","FileIcon","Props","asset","FileAssetPreview","props","$","_c","mimeType","search","t0","Symbol","for","height","t1","width","t2","url","extension","Box","Button","Text","Tooltip","format","ReactNode","Props","disabled","isValid","lastUpdated","onClick","FormSubmitButton","props","$","_c","content","t0","Symbol","for","t1","Date","t2","maxWidth","t3","window","hues","ThemeColorSchemeKey","studioTheme","SCHEME_COLORS","bg","dark","gray","hex","light","bg2","inputEnabledBorder","color","default","input","enabled","border","inputHoveredBorder","hovered","mutedHoveredBg","primary","muted","mutedHoveredFg","fg","mutedSelectedBg","selected","spotBlue","spot","blue","SchemeColorKey","getSchemeColor","scheme","colorKey","ThemeColorSchemeKey","MouseEvent","styled","css","getSchemeColor","Props","onClick","e","$showCheckerboard","$scheme","src","style","Image","img","attrs","crossOrigin","const","props","ErrorOutlineIcon","Box","Inline","Text","Tooltip","styled","Props","description","error","label","name","StyledErrorOutlineIcon","theme","color","sanity","spot","red","FormFieldInputLabel","props","$","_c","t0","t1","marginRight","t2","t3","t4","AddIcon","ChevronDownIcon","CloseIcon","Box","Card","Flex","rem","studioTheme","Text","ThemeColorSchemeKey","components","StylesConfig","Virtuoso","getSchemeColor","radius","themeRadius","space","themeSpace","reactSelectStyles","scheme","control","styles","isFocused","boxShadow","indicatorsContainer","isDisabled","opacity","input","color","fontFamily","fonts","text","family","marginLeft","menuList","multiValue","backgroundColor","borderRadius","multiValueLabel","fontSize","padding","multiValueRemove","noOptionsMessage","lineHeight","option","placeholder","valueContainer","margin","DropdownIndicator","props","$","_c","t0","Symbol","for","t1","Menu","children","MenuList","Array","isArray","height","length","index","item","t2","MultiValueLabel","MultiValueRemove","Option","data","__isNew__","marginRight","reactSelectComponents","IndicatorSeparator","Box","Controller","CreatableSelect","useColorSchemeValue","useTypedSelector","reactSelectComponents","reactSelectStyles","TagSelectOption","FormFieldInputLabel","Props","control","description","disabled","error","label","name","onCreateTag","tagName","options","value","placeholder","FormFieldInputTags","props","$","_c","scheme","creating","_temp","tagsFetching","_temp2","t0","Symbol","for","zIndex","t1","t2","t3","field","onBlur","onChange","controllerValue","_temp3","t4","state","tags","state_0","fetching","Box","TextInput","ChangeEventHandler","FocusEventHandler","Ref","FormFieldInputLabel","Props","description","disabled","error","label","name","onBlur","HTMLInputElement","onChange","placeholder","value","ref","FormFieldInputText","props","$","_c","rest","t0","t1","t2","Box","TextArea","ChangeEventHandler","FocusEventHandler","Ref","FormFieldInputLabel","Props","description","disabled","error","label","name","onBlur","HTMLTextAreaElement","onChange","placeholder","rows","value","ref","FormFieldInputTextarea","props","$","_c","rest","t0","t1","t2","FolderIcon","TrashIcon","Box","Button","Card","Flex","Stack","Tab","TabList","TabPanel","Text","useState","Control","FieldErrors","UseFormRegister","Asset","AssetFormData","Locale","TagSelectOption","FormFieldInputLabel","FormFieldInputTags","FormFieldInputText","FormFieldInputTextarea","LocalizedErrors","Record","message","toStringField","value","found","Object","values","find","v","undefined","truncateFolderPath","path","segments","split","filter","Boolean","length","slice","join","DetailsProps","formUpdating","handleCreateTag","title","control","errors","register","allTagOptions","assetTagOptions","currentAsset","folderPath","folderMissing","onChangeFolder","onRemoveFolder","creditLine","enabled","excludeSources","locales","Details","hasLocales","activeLocaleTab","setActiveLocaleTab","folderId","opt","media","folder","_ref","folderLabel","tags","minWidth","overflowX","whiteSpace","overflowY","originalFilename","map","locale","idx","id","const","altText","description","includes","name","MutationEvent","Box","Button","Card","Flex","Stack","Tab","TabList","TabPanel","Text","groq","ReactNode","useCallback","useEffect","useMemo","useRef","useState","SubmitHandler","useForm","useFormState","useDispatch","WithReferringDocuments","useColorSchemeValue","useDocumentStore","useToolOptions","getAssetFormSchema","useTypedSelector","useVersionedClient","assetsActions","selectAssetById","dialogActions","DIALOG_ACTIONS","selectFolderPathById","selectTags","selectTagSelectOptions","tagsActions","Asset","AssetFormData","DialogAssetEditProps","TagSelectOption","getTagSelectOptions","getUniqueDocuments","imageDprUrl","sanitizeFormData","isFileAsset","isImageAsset","zodFormResolver","AssetMetadata","Dialog","DocumentList","FileAssetPreview","FormSubmitButton","Image","Details","DetailsProps","renderDefaultDetails","props","Props","children","dialog","DialogAssetEdit","$","_c","t0","assetId","id","lastCreatedTag","lastRemovedTagIds","client","scheme","documentStore","dispatch","t1","state","String","assetItem","tags","assetUpdatedPrev","undefined","assetSnapshot","setAssetSnapshot","asset","tabSection","setTabSection","currentAsset","t2","allTagOptions","t3","assetTagOptions","currentFolderId","opt","media","folder","_ref","t4","state_0","currentFolderPath","creditLine","components","t5","locales","t6","details","CustomDetails","t7","imageDescription","raw","metadata","image","ImageDescription","length","makeLocaleObj","field","t8","fallback","obj","i","locale","altText","description","originalFilename","title","flattenField","_temp2","generateDefaultValues","t9","t10","t11","defaultValues","mode","resolver","control","getValues","handleSubmit","register","reset","setValue","t12","errors","isDirty","isValid","formUpdating","updating","t13","remove","handleClose","t14","showConfirmDeleteAssets","assets","closeDialogId","_id","handleDelete","t15","Symbol","for","update","result","transition","handleAssetUpdate","t16","tagName","createRequest","name","handleCreateTag","t17","showFolderMove","folderId","handleChangeFolder","t18","folderSetRequest","handleRemoveFolder","t19","bb0","isLocaleObj","_temp3","fields","_type","anyLocalized","some","f","configuredIds","Set","map","_temp4","f_0","Object","keys","k","has","hasOrphanedLocales","t20","cleanField","field_1","Array","isArray","obj_0","Record","sorted","sort","k_0","find","_temp5","configuredIds_0","_temp6","cleaned","key","val","entries","patch","set","commit","handleCleanupLocales","t21","formData","sanitizedFormData","updateRequest","_temp7","onSubmit","t22","subscriptionAsset","listen","subscribe","unsubscribe","t23","t24","t25","t26","existingTags","updatedTags","concat","shouldDirty","t27","t28","existingTags_0","updatedTags_0","filter","tag_0","includes","tag","value","t29","current","_updatedAt","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","footer","t40","t41","folderPath","folderMissing","onChangeFolder","onRemoveFolder","detailsProps","t42","t43","t44","t45","isLoading","referringDocuments","uniqueReferringDocuments","display","t46","aspectRatio","t47","t48","isOpaque","height","width","t49","t50","t51","t52","t53","_temp","v","field_0","fallback_0","values","v_0","l","v_1","l_0","_weak","createSelector","CardAssetData","CardFolderData","CardUploadData","selectCurrentFolderChildren","RootReducerState","selectCombinedItems","state","assets","allIds","uploads","assetIds","uploadIds","folderChildren","assetItems","map","id","type","folderItems","folder","folderId","name","path","totalCount","uploadItems","combinedItems","isHotkey","RefObject","useCallback","useEffect","useRef","useKeyPress","hotkey","onPress","$","_c","keyPressed","t0","e","current","downHandler","t1","Symbol","for","upHandler","t2","t3","window","addEventListener","removeEventListener","CheckmarkCircleIcon","EditIcon","WarningFilledIcon","Box","Checkbox","Container","Flex","Spinner","Text","Theme","ThemeColorSchemeKey","Tooltip","useToast","memo","MouseEvent","RefObject","useDispatch","useColorSchemeValue","styled","css","PANEL_HEIGHT","useAssetSourceActions","useKeyPress","useTypedSelector","assetsActions","selectAssetById","selectAssetsPicked","dialogActions","getSchemeColor","imageDprUrl","isFileAsset","isImageAsset","FileIcon","Image","Props","id","selected","source","CardWrapper","CardContainer","$picked","theme","$updating","sanity","color","spot","orange","ContextActionContainer","$scheme","StyledWarningOutlineIcon","red","CardAsset","props","$","_c","scheme","toast","shiftPressed","dispatch","lastPicked","_temp","assetsPicked","t0","state_0","state","item","t1","state_1","dialog","items","find","_temp2","type","assetId","undefined","dialogReplaceAssetId","asset","error","isOpaque","metadata","picked","updating","assetToReplaceId","length","_id","t2","state_2","assetToReplace","isMultiSelect","onSelect","t3","updateImageReferences","push","status","title","clear","handleReplaceAsset","t4","e","stopPropagation","kind","value","current","pickRange","startId","endId","pick","showAssetEdit","handleAssetClick","t5","e_0","handleContextActionClick","opacityContainer","opacityPreview","t6","t7","cursor","position","t8","t9","height","opacity","t10","extension","t11","width","draggable","transition","t12","t13","left","top","t14","t15","t16","t17","flexShrink","pointerEvents","transform","t18","originalFilename","t19","t20","right","t21","assets","d","Box","Card","Flex","Stack","Text","useDispatch","useColorSchemeValue","css","styled","foldersActions","getSchemeColor","Props","folderId","name","totalCount","CardWrapper","FolderCard","FolderGlyph","theme","sanity","color","spot","yellow","CardFolder","t0","$","_c","dispatch","scheme","t1","currentFolderSet","t2","t3","background","border","t4","Symbol","for","t5","lineHeight","minHeight","wordBreak","t6","t7","t8","t9","t10","t11","Observable","from","of","mergeMap","PREVIEW_WIDTH","createBlob","img","HTMLImageElement","Promise","Blob","resolve","imageAspect","width","height","canvas","HTMLCanvasElement","document","createElement","Math","max","ctx","getContext","drawImage","toBlob","err","console","warn","createImageEl","file","File","blobUrlLarge","window","URL","createObjectURL","Image","onload","revokeObjectURL","src","generatePreviewBlobUrl","imageEl","blob","Error","generatePreviewBlobUrl$","pipe","Subject","Subscription","Observable","from","first","mergeMap","DEFAULT_CONCURRENCY","remove","array","Array","T","item","index","indexOf","splice","createThrottler","concurrency","currentSubscriptions","pendingObservables","ready$","request","observable","observer","length","scheduleAndWait$","pipe","subscribe","subscription","push","unsubscribe","next","shift","asObservable","obs","withMaxConcurrency","func","args","throttler","SanityAssetDocument","SanityClient","SanityImageAssetDocument","Observable","of","throwError","map","mergeMap","HttpError","withMaxConcurrency","fetchExisting$","client","type","hash","observable","fetch","documentType","readFile$","file","File","ArrayBuffer","subscriber","reader","FileReader","onload","next","result","complete","onerror","err","error","readAsArrayBuffer","abort","hexFromBuffer","buffer","Array","prototype","call","Uint8Array","x","toString","slice","join","hashFile$","window","crypto","subtle","message","statusCode","pipe","arrayBuffer","digest","uploadSanityAsset$","assetType","existingAsset","assets","upload","extract","preserveFilename","event","asset","body","document","id","_id","uploadAsset$","createSelector","createSlice","PayloadAction","ClientError","SanityAssetDocument","SanityImageAssetDocument","groq","empty","from","merge","of","catchError","delay","filter","mergeMap","takeUntil","withLatestFrom","HttpError","MyEpic","SanityUploadProgressEvent","UploadItem","constructFilter","generatePreviewBlobUrl$","hashFile$","uploadAsset$","assetsActions","RootReducerState","UPLOADS_ACTIONS","UploadsReducerState","allIds","byIds","Record","initialState","uploadsSlice","name","extraReducers","builder","addCase","uploadComplete","state","action","asset","payload","sha1hash","status","reducers","checkRequest","_state","_action","assets","checkComplete","results","assetHashes","Object","keys","forEach","hash","deleteIndex","indexOf","splice","blobUrl","objectUrl","window","URL","revokeObjectURL","previewReady","uploadCancel","uploadError","error","uploadRequest","file","File","forceAsAssetType","uploadProgress","event","uploadHash","percent","uploadStart","uploadItem","includes","push","uploadsAssetStartEpic","action$","_state$","client","pipe","uploadsActions","match","url","assetType","v","type","folderId","patch","_id","setIfMissing","opt","set","_ref","_type","_weak","commit","stage","message","statusCode","uploadsAssetUploadEpic","state$","exists","uploads","folders","currentFolderId","size","uploadsCompleteQueueEpic","uploadsCheckRequestEpic","documentIds","map","constructedFilter","assetTypes","excludeTagSlugs","searchFacets","search","facets","searchQuery","query","observable","fetch","resultHashes","checkedResults","reduce","acc","insertUploads","selectUploadById","uploadId","actions","reducer","CloseIcon","Box","Button","Flex","Text","filesize","useDispatch","useColorSchemeValue","styled","PANEL_HEIGHT","useTypedSelector","selectUploadById","uploadsActions","getSchemeColor","FileIcon","Image","Props","id","CardWrapper","CardUpload","props","$","_c","scheme","dispatch","t0","state","item","t1","size","base","round","fileSize","percentLoaded","Math","percent","isComplete","status","isUploading","isQueued","t2","hash","uploadCancel","handleCancelUpload","t3","t4","background","border","height","position","t5","t6","bottom","left","width","transform","transformOrigin","transition","t7","Symbol","for","t8","assetType","objectUrl","opacity","t9","t10","top","boxShadow","t11","t12","t13","name","t14","flexShrink","t15","t16","t17","memo","VirtuosoGrid","styled","useTypedSelector","CardAssetData","CardFolderData","CardUploadData","CardAsset","CardFolder","CardUpload","Props","items","onLoadMore","source","CARD_HEIGHT","CARD_WIDTH","VirtualCell","t0","$","_c","item","selected","type","t1","id","folderId","name","totalCount","StyledItemContainer","div","ItemContainer","props","ref","rest","context","StyledListContainer","ListContainer","AssetGridVirtualized","selectedAssets","_temp","map","_temp2","selectedIds","length","index","t2","Symbol","for","Item","List","t3","index_0","item_0","includes","t4","overflowX","overflowY","t5","state","assets","asset","_id","Box","Text","useEffect","useRef","useState","useDispatch","useStore","useTypedSelector","assetsActions","foldersActions","searchActions","selectCombinedItems","RootReducerState","SearchFacetInputProps","WithId","isImageAsset","AssetGridVirtualized","omitFacetId","facet","id","_id","withoutId","ReplaceAssetsOverview","$","_c","dispatch","store","combinedItems","assetsById","_temp","fetchCount","_temp2","fetching","_temp3","fetchingError","_temp4","pageSize","_temp5","searchQuery","_temp6","searchFacets","_temp7","currentFolderId","_temp8","currentFolderUnfiled","_temp9","assetToReplaceId","_temp1","savedBrowserStateRef","t0","length","Boolean","awaitingRefetch","setAwaitingRefetch","t1","t2","dialog","dialog_0","folders","search","getState","query","facets","dialogItem","items","find","_temp10","current","assetId","type","undefined","folderId","folderUnfiled","querySet","facetsClear","currentFolderClear","saved","hadScope","facetsAdd","currentFolderSet","currentFolderShowUnfiled","pick","picked","t3","t4","previousIds","assets","allIds","awaitingSettle","subscribe","isFetching","listCleared","scopeActive","t5","t6","item_1","item","asset","filter","reducedItems","hasFetchedOnce","hasMorePages","isEmpty","t7","loadNextPage","t8","handleLoadMoreItems","t9","state","byIds","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","_temp0","state_8","item_0","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogAllAssetsProps","Dialog","ReplaceAssetsOverview","Props","children","dialog","DialogAllAssets","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","t3","WarningOutlineIcon","Box","Button","Flex","Stack","Text","ReactNode","useDispatch","dialogActions","DialogConfirmProps","Dialog","Props","children","dialog","DialogConfirm","props","$","_c","dispatch","t0","id","remove","handleClose","t1","closeDialogId","confirmCallbackAction","handleConfirm","t2","confirmText","tone","Footer","t3","headerTitle","Header","t4","t5","t6","title","t7","description","t8","t9","Box","Flex","Text","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","folderFormSchema","useTypedSelector","dialogActions","foldersActions","selectFolderPathById","DialogFolderCreateProps","FolderFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogFolderCreate","props","$","_c","t0","parentFolderId","id","dispatch","creating","_temp","creatingError","_temp2","t1","state_1","state","parentPath","t2","Symbol","for","name","t3","defaultValues","mode","resolver","formState","t4","handleSubmit","register","setError","errors","isDirty","isValid","t5","clear","handleClose","t6","formData","sanitizedFormData","createRequest","parentId","onSubmit","t7","t8","message","t9","Footer","t10","t11","t12","display","t13","t14","t15","t16","t17","t18","folders","state_0","Box","Button","Flex","Inline","Stack","Text","Tree","TreeItem","pluralize","ReactNode","useMemo","useState","useDispatch","useTypedSelector","assetsActions","dialogActions","selectFolderTree","DialogFolderMoveProps","FolderTreeNode","Dialog","getExpandedIdSet","folderId","byId","Record","parentId","expanded","Set","cursor","node","add","Props","children","dialog","FolderNodeProps","expandedIds","onSelect","selectedId","FolderNode","t0","$","_c","hasChildren","length","selected","id","t1","has","t2","t3","name","totalCount","t4","t5","map","childNode","t6","FolderTreeProps","folderTree","FolderTree","DialogFolderMove","dispatch","_temp","assets","setSelectedId","selectedFolder","remove","handleClose","folderSetRequest","closeDialogId","handleMove","t7","t8","t9","t10","t11","t12","t13","t14","t15","Symbol","for","maxHeight","overflowY","t16","t17","t18","t19","t20","t21","state","folders","Box","Flex","Text","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","folderFormSchema","useTypedSelector","dialogActions","foldersActions","selectFolderPathById","DialogFolderRenameProps","FolderFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogFolderRename","t0","$","_c","folderId","id","dispatch","renaming","_temp","renameError","_temp2","t1","state_1","state","folders","byId","folder","t2","state_2","folderPath","currentName","name","t3","includes","slice","lastIndexOf","parentPath","t4","t5","Symbol","for","t6","defaultValues","mode","resolver","formState","t7","handleSubmit","register","setError","errors","isDirty","isValid","t8","remove","handleClose","t9","formData","sanitizedFormData","renameRequest","onSubmit","t10","t11","message","t12","t13","t14","t15","t16","display","t17","t18","t19","t20","t21","t22","t23","state_0","AddIcon","EditIcon","FolderIcon","TrashIcon","Box","Button","Container","Flex","Inline","Label","Text","Tooltip","Tree","TreeItem","ReactNode","useMemo","useDispatch","PANEL_HEIGHT","useTypedSelector","dialogActions","DIALOG_ACTIONS","foldersActions","selectCanDeleteFolder","selectFolderTree","FolderTreeNode","getExpandedIdSet","folderId","byId","Record","parentId","expanded","Set","cursor","node","add","FolderNodeProps","currentFolderId","expandedIds","onSelect","FolderHeaderActionProps","disabled","icon","onClick","tone","tooltip","FolderHeaderAction","t0","$","_c","t1","t2","undefined","t3","t4","t5","window","FolderItemTextProps","name","totalCount","FolderItemText","Symbol","for","boxSizing","display","maxWidth","minWidth","overflow","paddingRight","position","width","alignItems","paddingLeft","gap","flexShrink","lineHeight","textOverflow","whiteSpace","t6","fontSize","opacity","right","top","transform","t7","t8","FolderNode","hasChildren","children","length","selected","id","has","map","childNode","FolderView","dispatch","_temp","_temp2","canDeleteFolder","fetching","_temp3","folderTree","currentFolder","Array","from","join","treeKey","hasFolders","currentFolderSet","handleFolderSelect","showConfirmDeleteFolder","folderName","handleFolderDelete","borderBottom","height","showFolderRename","t9","t10","showFolderCreate","parentFolderId","t11","t12","t13","t14","currentFolderClear","t15","t16","t17","t18","t19","t20","t21","t22","state","folders","state_0","state_1","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogFoldersProps","Dialog","FolderView","Props","children","dialog","DialogFolders","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","minHeight","t3","CloseIcon","Box","Flex","Label","rem","Text","ThemeColorSchemeKey","ReactNode","useDispatch","useColorSchemeValue","styled","css","searchActions","SearchFacetInputProps","WithId","getSchemeColor","Props","children","facet","Container","$scheme","theme","sanity","radius","SearchFacet","props","$","_c","scheme","dispatch","t0","id","facetsRemoveById","facetId","handleClose","t1","Symbol","for","t2","t3","t4","t5","t6","whiteSpace","t7","title","t8","t9","t10","t11","TextInput","ChangeEvent","Props","onValueChange","value","TextInputNumber","props","$","_c","remainingProps","t0","t1","t2","e","val","target","regex","test","parseInt","handleChange","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputNumberModifier","SearchFacetInputNumberProps","SearchFacetOperatorType","WithId","SearchFacet","TextInputNumber","Props","facet","SearchFacetNumber","t0","$","_c","dispatch","popoverProps","modifiers","t1","modifier","find","name","selectedModifier","t2","id","operatorType","facetsUpdateById","handleOperatorItemClick","t3","modifier_0","handleModifierClick","t4","value","handleValueChange","selectedOperatorType","t5","operatorTypes","label","map","operatorType_0","index","selected","t6","Symbol","for","maxWidth","t7","t8","t9","title","modifier_1","selected_0","t10","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputSelectListItemProps","SearchFacetInputSelectProps","SearchFacetOperatorType","WithId","SearchFacet","Props","facet","SearchFacetSelect","t0","$","_c","dispatch","popoverProps","options","t1","value","find","v","name","selectedItem","t2","option","facetsUpdate","handleListItemClick","t3","operatorType","handleOperatorItemClick","selectedOperatorType","t4","operatorTypes","label","map","operatorType_0","index","selected","t5","title","t6","t7","item","selected_0","t8","t9","t10","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","TextInput","ChangeEvent","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputStringProps","SearchFacetOperatorType","WithId","SearchFacet","Props","facet","SearchFacetString","t0","$","_c","dispatch","popoverProps","t1","id","operatorType","facetsUpdateById","handleOperatorItemClick","t2","e","value","target","handleChange","selectedOperatorType","t3","operatorTypes","label","map","operatorType_0","index","selected","t4","hideInput","maxWidth","t5","CloseIcon","Box","Card","rem","studioTheme","Text","ThemeColorSchemeKey","components","StylesConfig","Virtuoso","getSchemeColor","fonts","text","sizes","themeTextSizes","radius","themeRadius","space","themeSpace","reactSelectStyles","scheme","control","styles","isDisabled","isFocused","boxShadow","fontSize","input","color","fontFamily","family","marginLeft","menuList","padding","noOptionsMessage","lineHeight","option","backgroundColor","placeholder","paddingLeft","singleValue","alignItems","display","height","valueContainer","margin","ClearIndicator","props","$","_c","t0","Symbol","for","transform","t1","t2","Menu","children","MenuList","Array","isArray","length","index","item","NoOptionsMessage","Option","SingleValue","reactSelectComponents","DropdownIndicator","IndicatorSeparator","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","Select","useColorSchemeValue","operators","useToolOptions","usePortalPopoverProps","useTypedSelector","searchActions","selectTags","reactSelectComponents","reactSelectStyles","TagSelectOption","SearchFacetInputSearchableProps","SearchFacetOperatorType","WithId","getTagSelectOptions","SearchFacet","Props","facet","SearchFacetTags","t0","$","_c","scheme","dispatch","excludeTagSlugs","tagsAll","_temp","t1","length","filter","t","includes","tag","name","current","tags","tagsFetching","_temp2","t2","allTagOptions","popoverProps","t3","id","option","facetsUpdateById","value","handleChange","t4","operatorType","handleOperatorItemClick","selectedOperatorType","t5","operatorTypes","label","map","operatorType_0","index","selected","minWidth","t6","hideInput","width","_temp3","t7","state","state_0","fetching","Box","Flex","Inline","rem","Theme","styled","css","useTypedSelector","SearchFacetNumber","SearchFacetSelect","SearchFacetString","SearchFacetTags","Props","layout","StackContainer","theme","sanity","space","SearchFacets","props","$","_c","t0","undefined","searchFacets","_temp","t1","map","_temp2","Items","length","t2","Error","state","search","facets","facet","key","id","type","AddIcon","Button","Flex","Menu","MenuButton","MenuDivider","MenuGroup","MenuItem","useDispatch","FACETS","useToolOptions","usePortalPopoverProps","useTypedSelector","searchActions","SearchFacetDivider","SearchFacetGroup","SearchFacetInputProps","SearchFacetsControl","$","_c","dispatch","assetTypes","_temp","searchFacets","_temp2","selectedDocument","_temp3","popoverProps","creditLine","isTool","T0","T1","T2","t0","t1","t2","enabled","t3","facet","type","name","selectOnly","matchingAssetTypes","filter","assetType","includes","length","filteredFacets","_temp4","hasSearchFacets","renderMenuFacets","facets_0","t4","level","undefined","facets","map","facet_1","index_0","index","title","disabled","operatorTypes","find","v","facetsAdd","t5","placement","t6","facetsClear","t7","state","assets","state_0","search","state_1","selected","document","facet_0","previousFacet","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogSearchFacetsProps","Dialog","SearchFacets","SearchFacetsControl","Props","children","dialog","DialogSearchFacets","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","t3","Box","Flex","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","tagFormSchema","useTypedSelector","dialogActions","tagsActions","DialogTagCreateProps","TagFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogTagCreate","props","$","_c","t0","id","dispatch","creating","_temp","creatingError","_temp2","t1","Symbol","for","name","t2","defaultValues","mode","resolver","formState","t3","handleSubmit","register","setError","errors","isDirty","isValid","formUpdating","t4","clear","handleClose","t5","formData","sanitizedFormData","createRequest","onSubmit","t6","t7","message","t8","Footer","t9","t10","t11","display","t12","t13","t14","t15","t16","state","tags","state_0","MutationEvent","Box","Button","Card","Flex","Text","groq","ReactNode","useCallback","useEffect","useState","SubmitHandler","useForm","useDispatch","tagFormSchema","useTypedSelector","useVersionedClient","dialogActions","selectTagById","tagsActions","DialogTagEditProps","Tag","TagFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogTagEdit","props","$","_c","t0","id","tagId","client","dispatch","t1","state","String","tagItem","tagSnapshot","setTagSnapshot","tag","currentTag","generateDefaultValues","_temp","t2","t3","t4","Symbol","for","t5","defaultValues","mode","resolver","formState","t6","handleSubmit","register","reset","setError","errors","isDirty","isValid","formUpdating","updating","t7","remove","handleClose","t8","formData","sanitizedFormData","updateRequest","closeDialogId","_id","name","_type","current","onSubmit","t9","showConfirmDeleteTag","handleDelete","t10","update","result","transition","handleTagUpdate","t11","error","message","t12","t13","t14","subscriptionAsset","listen","subscribe","unsubscribe","t15","t16","t17","_updatedAt","Footer","t18","t19","t20","t21","display","t22","t23","t24","t25","t26","ArrowDownIcon","ArrowUpIcon","CloseIcon","EditIcon","SearchIcon","TrashIcon","Box","Button","Container","Flex","Text","Tooltip","ReactNode","useDispatch","styled","inputs","PANEL_HEIGHT","useTypedSelector","selectAssetsPicked","dialogActions","DIALOG_ACTIONS","searchActions","selectIsSearchFacetTag","SearchFacetInputSearchableProps","TagActions","TagItem","Props","actions","tag","TagContainer","ButtonContainer","TagButtonProps","disabled","icon","onClick","tone","tooltip","TagButton","props","$","_c","t0","t1","t2","window","Tag","dispatch","assetsPicked","_id","state","isSearchFacetTag","facetsRemoveByTag","tagId","handleSearchFacetTagRemove","showConfirmAssetsTagAdd","handleShowAddTagToAssetsDialog","t3","showConfirmAssetsTagRemove","handleShowRemoveTagFromAssetsDialog","t4","showConfirmDeleteTag","handleShowTagDeleteDialog","t5","showTagEdit","handleShowTagEditDialog","t6","name","current","searchFacet","value","label","facetsUpdate","operatorType","facetsAdd","facet","handleSearchFacetTagAddOrUpdate","t7","updating","t8","opacity","userSelect","t9","t10","t11","Symbol","for","flexShrink","t12","includes","t13","t14","t15","t16","t17","t18","Flex","Label","memo","useState","Virtuoso","PANEL_HEIGHT","useTypedSelector","selectAssetsPicked","TagActions","TagItem","Tag","VirtualRow","t0","$","_c","isScrolling","item","t1","Symbol","for","height","t2","t3","undefined","actions","tag","_id","TagsVirtualized","tags","assetsPicked","setIsScrolling","items","pickedTagIds","reduce","_temp2","pickedTagIdsUnique","Set","acc_0","tagId","tagIsInEveryAsset","every","assetItem","tagIndex","asset","opt","media","findIndex","tag_0","_ref","acc","appliedToAll","push","appliedToSome","tagIdsSegmented","tagsAppliedToAll","filter","tag_1","includes","map","_temp3","tagsAppliedToSome","tag_2","_temp4","tagsUnused","tag_3","_temp5","length","_temp6","index","index_0","flex","overflowX","t4","_temp","val","assetTagIds","concat","tagItem","tagItem_0","tagItem_1","tagItem_2","ComposeIcon","Box","Button","Flex","Inline","Label","useDispatch","useColorSchemeValue","PANEL_HEIGHT","useTypedSelector","DIALOG_ACTIONS","getSchemeColor","Props","allowCreate","light","title","TagViewHeader","t0","$","_c","scheme","dispatch","tagsCreating","_temp","tagsFetching","_temp2","t1","showTagCreate","handleTagCreate","t2","t3","background","borderBottom","flexShrink","height","t4","t5","opacity","t6","t7","boxShadow","t8","state","tags","creating","state_0","fetching","Box","Flex","Text","useToolOptions","useTypedSelector","selectAssetsPickedLength","selectTags","TagsVirtualized","TagViewHeader","TagView","$","_c","numPickedAssets","excludeTagSlugs","tagsAll","t0","length","filter","t","includes","tag","name","current","tags","fetching","_temp","fetchCount","_temp2","fetchComplete","hasTags","hasPicked","t1","t2","t3","t4","t5","state","state_0","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogTagsProps","Dialog","TagView","Props","children","dialog","DialogTags","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","minHeight","t3","useTypedSelector","Dialog","DialogAssetEdit","DialogAllAssets","DialogConfirm","DialogFolderCreate","DialogFolderMove","DialogFolderRename","DialogFolders","DialogSearchFacets","DialogTagCreate","DialogTagEdit","DialogTags","Dialogs","$","_c","currentDialogs","_temp","t0","renderDialogs","dialogs","index","length","dialog","childDialogs","type","state","items","useToast","useEffect","useTypedSelector","Notifications","$","_c","items","_temp","toast","t0","t1","length","lastItem","push","closable","status","title","state","notifications","PayloadAction","createSlice","DebugReducerState","badConnection","enabled","initialState","debugSlice","name","reducers","setBadConnection","state","action","payload","toggleEnabled","debugActions","actions","reducer","PayloadAction","createSlice","pluralize","AnyAction","ofType","of","bufferTime","filter","mergeMap","HttpError","ImageAsset","MyEpic","assetsActions","ASSETS_ACTIONS","foldersActions","tagsActions","uploadsActions","Notification","asset","status","title","NotificationsReducerState","items","messageFromGenericErrorPayload","payload","error","String","message","initialState","notificationsSlice","name","reducers","add","state","action","push","notificationsAssetsDeleteCompleteEpic","action$","pipe","deleteComplete","match","assetIds","deletedCount","length","actions","notificationsAssetsDeleteErrorEpic","deleteError","count","notificationsAssetsUploadCompleteEpic","checkComplete","results","Object","keys","notificationsAssetsTagsAddCompleteEpic","tagsAddComplete","assets","notificationsAssetsTagsRemoveCompleteEpic","tagsRemoveComplete","notificationsAssetsUpdateCompleteEpic","updateComplete","updatedCount","notificationsGenericErrorEpic","fetchError","type","updateError","createError","renameError","uploadError","notificationsTagCreateCompleteEpic","createComplete","notificationsTagDeleteCompleteEpic","notificationsTagUpdateCompleteEpic","notificationsFolderCreateCompleteEpic","notificationsFolderDeleteCompleteEpic","notificationsFolderRenameCompleteEpic","renameComplete","notificationsActions","reducer","createSlice","SanityAssetDocument","SanityDocument","SanityImageAssetDocument","SelectedReducerState","assets","document","documentAssetIds","initialState","undefined","selectedSlice","name","reducers","reducer","Reducer","StateFromReducersMapObject","combineReducers","combineEpics","assetsReducer","assetsDeleteEpic","assetsFetchAfterDeleteAllEpic","assetsFetchEpic","assetsFolderSetEpic","assetsFolderSetRefreshEpic","assetsFetchNextPageEpic","assetsFetchPageIndexEpic","assetsListenerCreateQueueEpic","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsOrderSetEpic","assetsSearchEpic","assetsSortEpic","assetsTagsAddEpic","assetsTagsRemoveEpic","assetsUnpickEpic","assetsUpdateEpic","assetsUpdateImageReferencesEpic","debugReducer","dialogReducer","dialogClearOnAssetUpdateEpic","dialogTagCreateEpic","dialogTagDeleteEpic","foldersReducer","foldersCurrentFolderEpic","foldersCreateEpic","foldersDeleteEpic","foldersFetchEpic","foldersRefreshEpic","foldersRenameEpic","notificationsReducer","notificationsAssetsDeleteErrorEpic","notificationsAssetsDeleteCompleteEpic","notificationsAssetsTagsAddCompleteEpic","notificationsAssetsTagsRemoveCompleteEpic","notificationsAssetsUpdateCompleteEpic","notificationsFolderCreateCompleteEpic","notificationsFolderDeleteCompleteEpic","notificationsFolderRenameCompleteEpic","notificationsGenericErrorEpic","notificationsTagCreateCompleteEpic","notificationsTagDeleteCompleteEpic","notificationsTagUpdateCompleteEpic","searchReducer","searchFacetTagUpdateEpic","selectedReducer","tagsReducer","tagsCreateEpic","tagsDeleteEpic","tagsFetchEpic","tagsListenerCreateQueueEpic","tagsListenerDeleteQueueEpic","tagsListenerUpdateQueueEpic","tagsSortEpic","tagsUpdateEpic","uploadsReducer","uploadsAssetStartEpic","uploadsAssetUploadEpic","uploadsCheckRequestEpic","uploadsCompleteQueueEpic","rootEpic","reducers","assets","debug","dialog","folders","notifications","search","selected","tags","uploads","ReducersMapObject","rootReducer","SanityDocument","isPlainObject","value","Array","isArray","getAssetIds","node","Record","acc","forEach","v","_type","_ref","push","Object","values","val","getDocumentAssetIds","document","assetIds","Set","sort","SUPPORTED_ASSET_TYPES","AssetType","isSupportedAssetType","assetType","supported","includes","AnyAction","configureStore","Store","SanityClient","ReactNode","useState","Provider","createEpicMiddleware","AssetSourceComponentProps","SanityDocument","rootEpic","rootReducer","initialState","assetsInitialState","RootReducerState","getDocumentAssetIds","isSupportedAssetType","Props","assetType","children","client","document","excludeTagSlugs","selectedAssets","createReduxStore","props","epicMiddleware","dependencies","store","reducer","middleware","getDefaultMiddleware","serializableCheck","thunk","prepend","devTools","preloadedState","assets","assetTypes","length","debug","badConnection","enabled","dialog","items","folders","byId","childrenByParentId","rootIds","exactCountByFolderId","unfiledCount","currentFolderId","currentFolderUnfiled","panelVisible","fetching","fetchCount","creating","renaming","notifications","search","facets","query","selected","documentAssetIds","tags","allIds","byIds","uploads","run","ReduxProvider","t0","$","_c","t1","t2","PortalProvider","useEffect","useRef","useDispatch","AssetSourceComponentProps","SanityDocument","useFormValue","AssetBrowserDispatchProvider","useRootPortalElement","useTypedSelector","useVersionedClient","assetsActions","dialogActions","foldersActions","tagsActions","GlobalStyle","constructFilter","Dialogs","Notifications","ReduxProvider","EditAssetDialog","t0","$","_c","assetId","onClose","dispatch","openDialogCount","_temp","hasOpenedRef","t1","t2","queryFilter","assetTypes","searchFacets","fetchRequest","params","showAssetEdit","t3","t4","current","t5","Symbol","for","EditAssetTool","props","selectedAssets","portalElement","currentDocument","client","_id","undefined","t6","t7","onSelect","t8","assetType","state","dialog","items","length","ThLargeIcon","ThListIcon","Button","Inline","useDispatch","useTypedSelector","assetsActions","ButtonViewGroup","$","_c","dispatch","view","_temp","t0","Symbol","for","whiteSpace","t1","t2","viewSet","t3","borderBottomRightRadius","borderTopRightRadius","t4","t5","t6","t7","borderBottomLeftRadius","borderTopLeftRadius","t8","t9","state","assets","SortIcon","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","getOrderTitle","ORDER_OPTIONS","usePortalPopoverProps","useTypedSelector","assetsActions","OrderSelect","$","_c","dispatch","order","_temp","popoverProps","t0","direction","field","t1","t2","map","item","index","selected","orderSet","minWidth","t3","t4","state","assets","Box","useNProgress","Props","loading","Progress","props","$","_c","t0","animationDuration","isAnimating","isFinished","progress","t1","t2","t3","opacity","transition","t4","t5","t6","height","background","position","left","top","width","t7","TagIcon","$","_c","t0","Symbol","for","CloseIcon","SearchIcon","Box","Flex","TextInput","ChangeEvent","useDispatch","useTypedSelector","searchActions","TextInputSearch","$","_c","searchQuery","_temp","dispatch","t0","e","querySet","currentTarget","value","handleChange","t1","handleClear","t2","Symbol","for","position","t3","t4","length","cursor","height","opacity","right","top","width","zIndex","t5","state","search","query","FolderIcon","Box","Button","Flex","Inline","useMediaIndex","useDispatch","useTypedSelector","dialogActions","foldersActions","tagsActions","ButtonViewGroup","OrderSelect","Progress","SearchFacets","SearchFacetsControl","TagIcon","TextInputSearch","Controls","$","_c","dispatch","fetching","_temp","foldersPanelVisible","_temp2","pageIndex","_temp3","searchFacets","_temp4","tagsPanelVisible","_temp5","mediaIndex","t0","showSearchFacets","handleShowSearchFacetDialog","t1","showFolders","handleShowFoldersDialog","t2","showTags","handleShowTagsDialog","t3","panelVisibleSet","panelVisible","toggleFoldersPanel","t4","toggleTagsPanelToggle","t5","Symbol","for","borderBottom","zIndex","t6","t7","t8","alignItems","flex","height","justifyContent","position","width","t9","minWidth","t10","t11","t12","t13","t14","whiteSpace","t15","length","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","transform","t31","t32","t33","t34","t35","t36","state","assets","state_0","folders","state_1","state_2","search","facets","state_3","tags","PlugIcon","Box","Flex","Switch","Text","Tooltip","ChangeEvent","useDispatch","useKeyPress","useTypedSelector","debugActions","DebugControls","$","_c","dispatch","badConnection","_temp","debugEnabled","_temp2","t0","e","checked","target","setBadConnection","handleChange","t1","toggleEnabled","handleToggleControls","t2","Symbol","for","bottom","left","pointerEvents","position","width","t3","t4","t5","t6","t7","t8","t9","state","debug","state_0","enabled","Box","Button","Inline","Text","useDispatch","useTypedSelector","foldersActions","selectCurrentFolderSegments","FolderBreadcrumbs","$","_c","dispatch","currentFolderId","_temp","segments","t0","Symbol","for","t1","currentFolderClear","t2","t3","segment","id","currentFolderSet","folderId","name","map","state","folders","Box","FOLDERS_PANEL_WIDTH","useTypedSelector","FolderView","FolderPanel","$","_c","foldersPanelVisible","_temp","t0","Symbol","for","position","width","t1","borderRight","height","left","overflowX","overflowY","top","state","folders","panelVisible","ReactNode","createContext","useContext","useMemo","ContextProps","open","Props","children","DropzoneDispatchContext","undefined","DropzoneDispatchProvider","props","$","_c","t0","contextValue","t1","useDropzoneActions","context","Error","ArrowRightIcon","CloseIcon","UploadIcon","Box","Button","Flex","Inline","Text","pluralize","useAssetSourceActions","useDropzoneActions","useToolOptions","useTypedSelector","Props","onClose","Header","props","$","_c","open","onSelect","assetTypes","_temp","selectedDocument","_temp2","directUploads","t0","Symbol","for","whiteSpace","t1","join","t2","t3","margin","textTransform","_type","t4","t5","length","t6","flexShrink","t7","t8","state","assets","state_0","selected","document","ChevronDownIcon","ChevronUpIcon","Box","Label","useDispatch","useTypedSelector","assetsActions","Props","field","title","TableHeaderItem","props","$","_c","dispatch","order","_temp","isActive","t0","direction","orderSet","handleClick","t1","t2","undefined","t3","t4","cursor","display","whiteSpace","t5","Symbol","for","marginRight","t6","t7","t8","t9","t10","state","assets","Checkbox","Flex","Grid","ThemeColorSchemeKey","useMediaIndex","MouseEvent","useDispatch","useColorSchemeValue","styled","css","GRID_TEMPLATE_COLUMNS","PANEL_HEIGHT","useAssetSourceActions","useTypedSelector","assetsActions","selectAssetsLength","selectAssetsPickedLength","getSchemeColor","TableHeaderItem","ContextActionContainer","$scheme","TableHeader","$","_c","scheme","dispatch","fetching","_temp","itemsLength","numPickedAssets","mediaIndex","onSelect","allSelected","t0","e","stopPropagation","pickClear","pickAll","handleContextActionClick","t1","t2","t3","t4","alignItems","background","borderBottom","gridColumnGap","gridTemplateColumns","LARGE","height","letterSpacing","position","textTransform","top","visibility","width","zIndex","t5","pointerEvents","transform","t10","t11","t12","t13","t6","t7","t8","t9","Symbol","for","t14","state","assets","CheckmarkCircleIcon","EditIcon","WarningFilledIcon","Box","Checkbox","Container","Flex","Grid","Spinner","Text","ThemeColorSchemeKey","Tooltip","useMediaIndex","formatRelative","filesize","memo","MouseEvent","RefObject","useCallback","useEffect","useRef","useState","useDispatch","WithReferringDocuments","useColorSchemeValue","styled","css","GRID_TEMPLATE_COLUMNS","useAssetSourceActions","useKeyPress","useTypedSelector","assetsActions","selectAssetById","dialogActions","getAssetResolution","getSchemeColor","getUniqueDocuments","imageDprUrl","isFileAsset","isImageAsset","FileIcon","Image","REFERENCE_COUNT_VISIBILITY_DELAY","Props","id","selected","ContainerGrid","$selected","$scheme","$updating","ContextActionContainer","StyledWarningIcon","theme","color","sanity","spot","red","TableRowAsset","props","$","_c","scheme","shiftPressed","referenceCountVisible","setReferenceCountVisible","refCountVisibleTimeout","dispatch","lastPicked","_temp","t0","state_0","state","item","mediaIndex","asset","error","isOpaque","metadata","picked","updating","isMultiSelect","onSelect","t1","e","stopPropagation","showAssetEdit","assetId","_id","current","pickRange","startId","endId","pick","handleContextActionClick","t2","e_0","kind","value","handleClick","opacityCell","opacityPreview","t3","t4","Symbol","for","setTimeout","clearTimeout","t5","undefined","t6","t7","SMALL","LARGE","t8","t9","gridColumnGap","gridRowGap","gridTemplateColumns","gridTemplateRows","t10","t11","alignItems","gridColumn","gridRowStart","gridRowEnd","height","justifyContent","opacity","position","t12","flexShrink","pointerEvents","transform","t13","t14","width","t15","t16","t17","extension","t18","t19","t20","left","top","t21","t22","t23","t24","t25","gridRow","t26","lineHeight","t27","originalFilename","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","display","t39","t40","mimeType","t41","t42","t43","t44","t45","size","base","round","t46","t47","t48","t49","t50","t51","t52","t53","_updatedAt","Date","t54","t55","t56","t57","t58","t59","_temp2","t60","t61","t62","t63","t64","t65","t66","assets","isLoading","referringDocuments","uniqueDocuments","Array","isArray","length","Box","Flex","Grid","Stack","Text","useMediaIndex","useDispatch","useColorSchemeValue","css","styled","GRID_TEMPLATE_COLUMNS","foldersActions","getSchemeColor","Props","folderId","name","totalCount","ContainerGrid","theme","sanity","color","card","enabled","bg","FolderBadge","spot","yellow","TableRowFolder","t0","$","_c","dispatch","mediaIndex","scheme","t1","currentFolderSet","t2","t3","t4","SMALL","LARGE","t5","t6","background","gridColumnGap","gridTemplateColumns","gridTemplateRows","t7","Symbol","for","t8","gridColumn","height","width","t9","t10","t11","t12","gridRow","t13","lineHeight","t14","t15","t16","t17","t18","t19","display","t20","t21","t22","t23","t24","t25","t26","t27","t28","CloseIcon","Box","Button","Flex","Grid","Stack","Text","useMediaIndex","filesize","useDispatch","useColorSchemeValue","GRID_TEMPLATE_COLUMNS","useTypedSelector","selectUploadById","uploadsActions","getSchemeColor","FileIcon","Image","Props","id","TableRowUpload","props","$","_c","scheme","dispatch","t0","state","item","mediaIndex","t1","size","base","round","fileSize","percentLoaded","Math","percent","isComplete","status","isUploading","isQueued","t2","hash","uploadCancel","handleCancelUpload","t3","t4","t5","SMALL","LARGE","t6","t7","alignItems","background","gridColumnGap","gridRowGap","gridTemplateColumns","gridTemplateRows","height","position","t8","t9","bottom","left","width","transform","transformOrigin","transition","t10","t11","t12","gridColumn","gridRowStart","gridRowEnd","t13","Symbol","for","t14","assetType","objectUrl","opacity","t15","t16","top","boxShadow","t17","t18","t19","t20","t21","t22","gridRow","marginLeft","t23","name","t24","t25","t26","t27","Box","memo","GroupedVirtuoso","useTypedSelector","CardAssetData","CardFolderData","CardUploadData","TableHeader","TableRowAsset","TableRowFolder","TableRowUpload","Props","items","onLoadMore","VirtualRow","t0","$","_c","item","selected","type","t1","Symbol","for","height","t2","id","folderId","name","totalCount","AssetTableVirtualized","props","selectedAssets","_temp","map","_temp2","selectedIds","length","index","Array","fill","t3","index_0","item_0","includes","t4","overflowX","t5","_temp3","state","assets","asset","_id","Box","Text","useMediaIndex","useEffect","useDispatch","useTypedSelector","assetsActions","foldersActions","selectCombinedItems","tagsActions","AssetGridVirtualized","AssetTableVirtualized","Items","$","_c","dispatch","fetchCount","_temp","fetching","_temp2","foldersPanelVisible","_temp3","tagsPanelVisible","_temp4","view","_temp5","combinedItems","mediaIndex","hasFetchedOnce","hasItems","length","t0","loadNextPage","handleLoadMoreItems","t1","t2","panelVisibleSet","panelVisible","isEmpty","t3","Symbol","for","width","t4","state","assets","state_0","state_1","folders","state_2","tags","state_3","Box","Button","Flex","Label","pluralize","useDispatch","useColorSchemeValue","PANEL_HEIGHT","useAssetSourceActions","useTypedSelector","assetsActions","selectAssetsPicked","dialogActions","DIALOG_ACTIONS","getSchemeColor","isImageAsset","PickedBar","$","_c","scheme","dispatch","assetsPicked","currentFolderId","_temp","isMultiSelect","onSelect","t0","length","asset","canReplace","t1","pickClear","handlePickClear","t2","showConfirmDeleteAssets","assets","handleDeletePicked","t3","_id","assetId","showAllAssetsDialog","handleReplaceImages","t4","showFolderMove","folderId","handleMovePicked","t5","folderSetRequest","handleRemovePickedFromFolder","t6","pickedAssetIds","map","_temp2","handleInsertPicked","t7","t8","background","borderBottom","height","position","width","t9","Symbol","for","color","t10","t11","t12","t13","boxShadow","t14","t15","t16","t17","t18","t19","t20","state","folders","item","kind","const","value","Box","TAGS_PANEL_WIDTH","useTypedSelector","TagView","TagsPanel","$","_c","tagsPanelVisible","_temp","t0","Symbol","for","position","width","t1","borderLeft","height","overflowX","overflowY","right","top","state","tags","panelVisible","white","Flex","Text","ReactNode","DropEvent","DropzoneOptions","useDropzone","useDispatch","styled","useAssetSourceActions","DropzoneDispatchProvider","useToolOptions","useTypedSelector","notificationsActions","uploadsActions","Props","children","UploadContainer","div","DragActiveContainer","filterFiles","fileList","FileList","files","Array","from","filteredFiles","File","file","slice","arrayBuffer","push","UploadDropzone","props","$","_c","dropzone","t0","directUploads","maxSize","onSelect","dispatch","assetTypes","_temp","isImageAssetType","length","t1","acceptedFiles","forEach","uploadRequest","forceAsAssetType","undefined","handleDrop","t2","rejections","errorCodes","flatMap","_temp3","includes","add","status","title","handleDropRejected","t3","event","type","dataTransfer","target","HTMLInputElement","handleFileGetter","t4","t5","t6","t7","accept","getFilesFromEvent","noClick","noDrag","onDrop","onDropRejected","disabled","getRootProps","getInputProps","isDragActive","open","t8","t9","t10","t11","color","hex","t12","t13","state","assets","_temp2","code","errors","map","MutationEvent","SanityClient","groq","useEffect","useDispatch","useSelector","Dispatch","AssetSourceComponentProps","inputs","FOLDER_DOCUMENT_NAME","TAG_DOCUMENT_NAME","assetsActions","foldersActions","searchActions","tagsActions","RootReducerState","Asset","Tag","getMediaTagNames","schemaType","mediaTags","options","length","unique","Set","map","t","trim","filter","Boolean","Array","from","createAssetHandler","dispatch","update","documentId","result","transition","listenerCreateQueue","asset","listenerDeleteQueue","assetId","listenerUpdateQueue","createTagHandler","tag","tagId","useBrowserInit","client","tagsByIds","state","tags","byIds","tagsFetchCount","fetchCount","tagNames","hasMediaTags","facetsClear","fetchRequest","assetSubscription","listen","subscribe","tagSubscription","folderSubscription","unsubscribe","tagFacetInput","type","resolvedTags","name","Object","values","find","item","current","NonNullable","tagItem","facetsAdd","facet","operatorType","value","label","_id","Card","Flex","PortalProvider","useState","AssetSourceComponentProps","SanityDocument","AssetBrowserDispatchProvider","useToolOptions","useVersionedClient","GlobalStyle","Controls","DebugControls","Dialogs","FolderBreadcrumbs","FolderPanel","Header","Items","Notifications","PickedBar","ReduxProvider","TagsPanel","UploadDropzone","useBrowserInit","Props","assetType","document","isMultiSelect","onClose","onSelect","selectedAssets","schemaType","BrowserContent","t0","$","_c","client","portalElement","setPortalElement","t1","t2","Symbol","for","t3","t4","t5","t6","t7","t8","position","t9","t10","Browser","props","excludeTagSlugs","Box","Portal","PortalProvider","useLayer","SyntheticEvent","AssetSourceComponentProps","SanityDocument","useFormValue","useKeyPress","useRootPortalElement","Browser","FormBuilderTool","props","$","_c","onClose","portalElement","t0","Symbol","for","currentDocument","selectionType","schemaJsonType","schemaType","jsonType","isMultiSelect","handleStopPropagation","_temp","zIndex","t1","bottom","height","left","position","top","width","t2","t3","t4","event","nativeEvent","stopImmediatePropagation","stopPropagation","Flex","Browser","Tool","$","_c","t0","Symbol","for","FolderIcon","FOLDER_DOCUMENT_NAME","title","icon","name","type","fields","to","weak","preview","select","parentName","prepare","selection","media","subtitle","undefined","TagIcon","TAG_DOCUMENT_NAME","title","icon","name","type","fields","preview","select","prepare","selection","media","current","EditIcon","ImageIcon","AssetSource","Tool","SanityTool","definePlugin","EditAssetTool","FormBuilderTool","ToolOptionsProvider","mediaFolder","mediaTag","MediaToolOptions","plugin","icon","name","title","mediaAssetSource","component","editMediaAssetSource","tool","__internalApplicationType","media","options","studio","components","layout","props","renderDefault","form","file","assetSources","prev","image","schema","types","tools","SanityClient","groq","nanoid","TAG_DOCUMENT_NAME","Tag","ApplyMediaTagsOptions","client","assetId","mediaTags","createTagsOnUpload","pendingByAsset","Map","Promise","applyMediaTags","options","chain","get","resolve","then","doApplyMediaTags","cleanup","catch","finally","delete","set","length","resolvedTags","all","map","tagName","existingTag","fetch","newTag","create","_type","name","current","validTags","filter","tag","existing","tagIds","useCdn","existingIds","Set","tagReferences","has","_id","_key","_ref","const","_weak","patch","setIfMissing","opt","append","commit","useToast","useEffect","useRef","InputProps","useToolOptions","useVersionedClient","applyMediaTags","AssetValue","_type","asset","_ref","AutoTagInputProps","mediaTags","AutoTagInput","props","$","_c","renderDefault","schemaType","value","mediaTagsProp","toast","options","client","createTagsOnUpload","prevAssetRef","undefined","isInitialMount","currentAssetRef","t0","t1","current","previousRef","length","assetId","catch","err","console","error","label","push","closable","status","title","join","t2","t3","FieldDefinitionBase","FileDefinition","ImageDefinition","WidenInitialValue","WidenValidation","AutoTagInput","ImageMediaFieldConfig","Omit","name","mediaTags","options","FileMediaFieldConfig","ImageMediaFieldResult","components","input","FileMediaFieldResult","mediaField","config","rest","Record"],"sources":["../src/contexts/AssetSourceDispatchContext.tsx","../src/hooks/useRootPortalElement.ts","../src/hooks/useTypedSelector.ts","../src/hooks/useVersionedClient.ts","../src/config/orders.ts","../src/config/searchFacets.ts","../src/constants.ts","../src/operators/debugThrottle.ts","../src/utils/constructFilter.ts","../src/utils/ReplaceImages.ts","../src/operators/checkTagName.ts","../src/utils/getTagSelectOptions.ts","../src/modules/assets/actions.ts","../src/modules/dialog/actions.ts","../src/modules/tags/index.ts","../src/modules/search/index.ts","../src/modules/uploads/actions.ts","../src/modules/assets/index.ts","../src/modules/folders/index.ts","../src/modules/dialog/index.ts","../src/styled/GlobalStyles/index.tsx","../src/contexts/ToolOptionsContext.tsx","../src/formSchema/index.ts","../src/utils/getUniqueDocuments.ts","../src/utils/imageDprUrl.ts","../src/utils/sanitizeFormData.ts","../src/utils/typeGuards.ts","../src/utils/zodFormResolver.ts","../src/utils/getAssetResolution.ts","../src/hooks/usePortalPopoverProps.ts","../src/components/ButtonAssetCopy/index.tsx","../src/components/AssetMetadata/index.tsx","../src/components/Dialog/index.tsx","../src/components/DocumentList/index.tsx","../src/components/FileIcon/index.tsx","../src/components/FileAssetPreview/index.tsx","../src/components/FormSubmitButton/index.tsx","../src/utils/getSchemeColor.ts","../src/components/Image/index.tsx","../src/components/FormFieldInputLabel/index.tsx","../src/styled/react-select/creatable.tsx","../src/components/FormFieldInputTags/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/FormFieldInputTextarea/index.tsx","../src/components/DialogAssetEdit/Details.tsx","../src/components/DialogAssetEdit/index.tsx","../src/modules/selectors.ts","../src/hooks/useKeyPress.ts","../src/components/CardAsset/index.tsx","../src/components/CardFolder/index.tsx","../src/utils/generatePreviewBlobUrl.ts","../src/utils/withMaxConcurrency.ts","../src/utils/uploadSanityAsset.ts","../src/modules/uploads/index.ts","../src/components/CardUpload/index.tsx","../src/components/AssetGridVirtualized/index.tsx","../src/components/ReplaceAssetsOverView/index.tsx","../src/components/DialogAssetsOverView/index.tsx","../src/components/DialogConfirm/index.tsx","../src/components/DialogFolderCreate/index.tsx","../src/components/DialogFolderMove/index.tsx","../src/components/DialogFolderRename/index.tsx","../src/components/FolderView/index.tsx","../src/components/DialogFolders/index.tsx","../src/components/SearchFacet/index.tsx","../src/components/TextInputNumber/index.tsx","../src/components/SearchFacetNumber/index.tsx","../src/components/SearchFacetSelect/index.tsx","../src/components/SearchFacetString/index.tsx","../src/styled/react-select/single.tsx","../src/components/SearchFacetTags/index.tsx","../src/components/SearchFacets/index.tsx","../src/components/SearchFacetsControl/index.tsx","../src/components/DialogSearchFacets/index.tsx","../src/components/DialogTagCreate/index.tsx","../src/components/DialogTagEdit/index.tsx","../src/components/Tag/index.tsx","../src/components/TagsVirtualized/index.tsx","../src/components/TagViewHeader/index.tsx","../src/components/TagView/index.tsx","../src/components/DialogTags/index.tsx","../src/components/Dialogs/index.tsx","../src/components/Notifications/index.tsx","../src/modules/debug/index.ts","../src/modules/notifications/index.ts","../src/modules/selected/index.ts","../src/modules/index.ts","../src/utils/getDocumentAssetIds.ts","../src/utils/isSupportedAssetType.ts","../src/components/ReduxProvider/index.tsx","../src/components/EditAssetTool/index.tsx","../src/components/ButtonViewGroup/index.tsx","../src/components/OrderSelect/index.tsx","../src/components/Progress/index.tsx","../src/components/TagIcon/index.tsx","../src/components/TextInputSearch/index.tsx","../src/components/Controls/index.tsx","../src/components/DebugControls/index.tsx","../src/components/FolderBreadcrumbs/index.tsx","../src/components/FolderPanel/index.tsx","../src/contexts/DropzoneDispatchContext.tsx","../src/components/Header/index.tsx","../src/components/TableHeaderItem/index.tsx","../src/components/TableHeader/index.tsx","../src/components/TableRowAsset/index.tsx","../src/components/TableRowFolder/index.tsx","../src/components/TableRowUpload/index.tsx","../src/components/AssetTableVirtualized/index.tsx","../src/components/Items/index.tsx","../src/components/PickedBar/index.tsx","../src/components/TagsPanel/index.tsx","../src/components/UploadDropzone/index.tsx","../src/components/Browser/useBrowserInit.ts","../src/components/Browser/index.tsx","../src/components/FormBuilderTool/index.tsx","../src/components/Tool/index.tsx","../src/schemas/folder.ts","../src/schemas/tag.ts","../src/plugin.tsx","../src/utils/applyMediaTags.ts","../src/components/AutoTagInputWrapper/index.tsx","../src/utils/mediaField.ts"],"sourcesContent":["import {type ReactNode, createContext, useContext, useMemo} from 'react'\nimport type {AssetSourceComponentProps} from 'sanity'\n\ntype ContextProps = {\n isMultiSelect: boolean\n onSelect?: AssetSourceComponentProps['onSelect']\n}\n\ntype Props = {\n children: ReactNode\n isMultiSelect?: boolean\n onSelect?: AssetSourceComponentProps['onSelect']\n}\n\nconst AssetSourceDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const AssetBrowserDispatchProvider = (props: Props) => {\n const {children, isMultiSelect = false, onSelect} = props\n\n const contextValue: ContextProps = useMemo(\n () => ({\n isMultiSelect,\n onSelect,\n }),\n [isMultiSelect, 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 {useEffect, useState} from 'react'\n\n/**\n * Creates a detached `.media-portal` element appended to `document.body` for the\n * lifetime of the component, used as a portal target for the plugin's dialogs\n * and overlays. The element is removed on unmount.\n */\nconst useRootPortalElement = (): HTMLDivElement => {\n const [container] = useState(() => document.createElement('div'))\n\n useEffect(() => {\n container.classList.add('media-portal')\n document.body.appendChild(container)\n return () => {\n document.body.removeChild(container)\n }\n }, [container])\n\n return container\n}\n\nexport default useRootPortalElement\n","import {type TypedUseSelectorHook, useSelector} from 'react-redux'\n\nimport type {RootReducerState} from '../modules/types'\n\nconst useTypedSelector: TypedUseSelectorHook<RootReducerState> = useSelector\n\nexport default useTypedSelector\n","import type {SanityClient} from '@sanity/client'\nimport {useClient} from 'sanity'\n\nconst useVersionedClient = (): SanityClient => useClient({apiVersion: '2025-10-02'})\n\nexport default useVersionedClient\n","import type {OrderDirection} 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 = (field: string, direction: OrderDirection): string => {\n return ORDER_DICTIONARY[field]![direction]\n}\n","import groq from 'groq'\n\nimport type {\n SearchFacetDivider,\n SearchFacetInputProps,\n SearchFacetName,\n SearchFacetOperators,\n} from '../types'\n\nexport const divider: SearchFacetDivider = {type: 'divider'}\n\nexport const inputs: Record<SearchFacetName, SearchFacetInputProps> = {\n altText: {\n assetTypes: ['file', 'image'],\n field: 'altText',\n name: 'altText',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Alt text',\n type: 'string',\n value: '',\n },\n creditLine: {\n assetTypes: ['file', 'image'],\n field: 'creditLine',\n name: 'creditLine',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Credit',\n type: 'string',\n value: '',\n },\n description: {\n assetTypes: ['file', 'image'],\n field: 'description',\n name: 'description',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Description',\n type: 'string',\n value: '',\n },\n folder: {\n assetTypes: ['file', 'image'],\n field: 'opt.media.folder._ref',\n name: 'folder',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty'],\n title: 'Folder',\n type: 'string',\n value: '',\n },\n fileName: {\n assetTypes: ['file', 'image'],\n field: 'originalFilename',\n name: 'filename',\n operatorType: 'includes',\n operatorTypes: ['includes', 'doesNotInclude'],\n title: 'File name',\n type: 'string',\n value: '',\n },\n height: {\n assetTypes: ['image'],\n field: 'metadata.dimensions.height',\n name: 'height',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'Height',\n type: 'number',\n value: 400,\n },\n inCurrentDocument: {\n assetTypes: ['file', 'image'],\n name: 'inCurrentDocument',\n operatorType: 'is',\n options: [\n {\n name: 'true',\n title: 'True',\n value: groq`_id in $documentAssetIds`,\n },\n {\n name: 'false',\n title: 'False',\n value: groq`!(_id in $documentAssetIds)`,\n },\n ],\n selectOnly: true,\n title: 'In use in current document',\n type: 'select',\n value: 'true',\n },\n inUse: {\n assetTypes: ['file', 'image'],\n name: 'inUse',\n operatorType: 'is',\n options: [\n {\n name: 'true',\n title: 'True',\n value: groq`count(*[references(^._id)]) > 0`,\n },\n {\n name: 'false',\n title: 'False',\n value: groq`count(*[references(^._id)]) == 0`,\n },\n ],\n title: 'In use',\n type: 'select',\n value: 'true',\n },\n isOpaque: {\n assetTypes: ['image'],\n field: 'metadata.isOpaque',\n name: 'isOpaque',\n operatorType: 'equalTo',\n options: [\n {\n name: 'true',\n title: 'True',\n value: `false`,\n },\n {\n name: 'false',\n title: 'False',\n value: `true`,\n },\n ],\n title: 'Has transparency',\n type: 'select',\n value: 'true',\n },\n orientation: {\n assetTypes: ['image'],\n name: 'orientation',\n operatorType: 'is',\n operatorTypes: ['is', 'isNot'],\n options: [\n {\n name: 'portrait',\n title: 'Portrait',\n value: 'metadata.dimensions.aspectRatio < 1',\n },\n {\n name: 'landscape',\n title: 'Landscape',\n value: 'metadata.dimensions.aspectRatio > 1',\n },\n {\n name: 'square',\n title: 'Square',\n value: 'metadata.dimensions.aspectRatio == 1',\n },\n ],\n title: 'Orientation',\n type: 'select',\n value: 'portrait',\n },\n size: {\n assetTypes: ['file', 'image'],\n field: 'size',\n modifier: 'kb',\n modifiers: [\n {\n name: 'kb',\n title: 'KB',\n fieldModifier: (fieldName) => `round(${fieldName} / 1000)`,\n },\n {\n name: 'mb',\n title: 'MB',\n fieldModifier: (fieldName) => `round(${fieldName} / 1000000)`,\n },\n ],\n name: 'size',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'File size',\n type: 'number',\n value: 0,\n },\n tag: {\n assetTypes: ['file', 'image'],\n field: 'opt.media.tags',\n name: 'tag',\n operatorType: 'references',\n operatorTypes: ['references', 'doesNotReference', null, 'empty', 'notEmpty'],\n title: 'Tags',\n type: 'searchable',\n },\n title: {\n assetTypes: ['file', 'image'],\n field: 'title',\n name: 'title',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Title',\n type: 'string',\n value: '',\n },\n type: {\n assetTypes: ['file', 'image'],\n name: 'type',\n operatorType: 'is',\n operatorTypes: ['is', 'isNot'],\n options: [\n {\n name: 'image',\n title: 'Image',\n value: 'mimeType match \"image*\"',\n },\n {\n name: 'video',\n title: 'Video',\n value: 'mimeType match \"video*\"',\n },\n {\n name: 'audio',\n title: 'Audio',\n value: 'mimeType match \"audio*\"',\n },\n {\n name: 'pdf',\n title: 'PDF',\n value: 'mimeType == \"application/pdf\"',\n },\n ],\n title: 'File type',\n type: 'select',\n value: 'image',\n },\n width: {\n assetTypes: ['image'],\n field: 'metadata.dimensions.width',\n name: 'width',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'Width',\n type: 'number',\n value: 400,\n },\n}\n\nexport const operators: SearchFacetOperators = {\n doesNotInclude: {\n fn: (value, field) => (value ? `!(${field} match '*${value}*')` : undefined),\n label: 'does not include',\n },\n doesNotReference: {\n fn: (value, _field) => (value ? `!references('${value}')` : undefined),\n label: 'does not include',\n },\n empty: {\n fn: (_value, field) => `!defined(${field})`,\n hideInput: true,\n label: 'is empty',\n },\n equalTo: {\n fn: (value, field) => (value ? `${field} == ${value}` : undefined),\n label: 'is equal to',\n },\n greaterThan: {\n fn: (value, field) => (value ? `${field} > ${value}` : undefined),\n label: 'is greater than',\n },\n greaterThanOrEqualTo: {\n fn: (value, field) => (value ? `${field} >= ${value}` : undefined),\n label: 'is greater than or equal to',\n },\n includes: {\n fn: (value, field) => (value ? `${field} match '*${value}*'` : undefined),\n label: 'includes',\n },\n is: {\n fn: (value, _field) => `${value}`,\n label: 'is',\n },\n isNot: {\n fn: (value, _field) => `!(${value})`,\n label: 'is not',\n },\n lessThan: {\n fn: (value, field) => (value ? `${field} < ${value}` : undefined),\n label: 'is less than',\n },\n lessThanOrEqualTo: {\n fn: (value, field) => (value ? `${field} <= ${value}` : undefined),\n label: 'is less than or equal to',\n },\n notEmpty: {\n fn: (_value, field) => `defined(${field})`,\n hideInput: true,\n label: 'is not empty',\n },\n references: {\n fn: (value, _field) => (value ? `references('${value}')` : undefined),\n label: 'includes',\n },\n}\n","import type {AssetSourceComponentProps} from 'sanity'\n\nimport {divider, inputs} from './config/searchFacets'\nimport type {\n SearchFacetInputProps,\n SearchFacetDivider,\n SearchFacetGroup,\n OrderDirection,\n} from './types'\n\nexport const SUPPORTED_ASSET_TYPES = [\n 'file',\n 'image',\n] as const satisfies AssetSourceComponentProps['assetType'][]\n\n// Sort order dropdown options\n// null values are represented as menu dividers\nexport const ORDER_OPTIONS: ({direction: OrderDirection; field: string} | null)[] = [\n {\n direction: 'desc',\n field: '_createdAt',\n },\n {\n direction: 'asc',\n field: '_createdAt',\n },\n // Divider\n null,\n {\n direction: 'desc',\n field: '_updatedAt',\n },\n {\n direction: 'asc' as OrderDirection,\n field: '_updatedAt',\n },\n // Divider\n null,\n {\n direction: 'asc',\n field: 'originalFilename',\n },\n {\n direction: 'desc',\n field: 'originalFilename',\n },\n // Divider\n null,\n {\n direction: 'desc',\n field: 'size',\n },\n {\n direction: 'asc',\n field: 'size',\n },\n]\n\nexport const FACETS: (SearchFacetDivider | SearchFacetGroup | SearchFacetInputProps)[] = [\n inputs.tag,\n divider,\n inputs.inUse,\n inputs.inCurrentDocument,\n divider,\n inputs.title,\n inputs.folder,\n inputs.altText,\n inputs.creditLine,\n inputs.description,\n divider,\n inputs.isOpaque,\n divider,\n inputs.fileName,\n inputs.size,\n inputs.type,\n divider,\n inputs.orientation,\n inputs.width,\n inputs.height,\n]\n\nexport 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 FOLDERS_PANEL_WIDTH = 260 // px\nexport const FOLDER_DOCUMENT_NAME = 'media.folder'\nexport const PANEL_HEIGHT = 32 // px\nexport const TAG_DOCUMENT_NAME = 'media.tag'\nexport const TAGS_PANEL_WIDTH = 250 // px\n","import {iif, type Observable, of, throwError} from 'rxjs'\nimport {delay, mergeMap} from 'rxjs/operators'\n\nconst debugThrottle = (throttled?: boolean) => {\n return function <T>(source: Observable<T>): Observable<T> {\n return iif(\n () => !!throttled,\n source.pipe(\n delay(3000),\n mergeMap((v) => {\n if (Math.random() > 0.5) {\n return throwError({\n message: 'Test error',\n statusCode: 500,\n })\n }\n return of(v)\n }),\n ),\n source,\n )\n }\n}\n\nexport default debugThrottle\n","import groq from 'groq'\n\nimport {operators} from '../config/searchFacets'\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {AssetType, SearchFacetInputProps} from '../types'\n\n/** GROQ fragment that excludes assets tagged with any of the given media.tag slugs. */\nexport const buildExcludeTagsFragment = (excludeTagSlugs?: string[]): string | undefined => {\n const serializedExcludeTagSlugs = excludeTagSlugs?.length\n ? JSON.stringify(excludeTagSlugs)\n : undefined\n\n return serializedExcludeTagSlugs\n ? groq`!(defined(opt.media.tags) && count(opt.media.tags[@._ref in *[_type == \"${TAG_DOCUMENT_NAME}\" && name.current in ${serializedExcludeTagSlugs}]._id]) > 0)`\n : undefined\n}\n\nconst constructFilter = ({\n assetTypes,\n currentFolderId,\n excludeTagSlugs,\n searchFacets,\n searchQuery,\n}: {\n assetTypes: AssetType[]\n currentFolderId?: string | null\n excludeTagSlugs?: string[]\n searchFacets: SearchFacetInputProps[]\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) => `sanity.${type}Asset`)\n\n const baseFilter = groq`\n _type in ${JSON.stringify(documentAssetTypes)} && !(_id in path(\"drafts.**\"))\n `\n\n const excludeTagsFragment = buildExcludeTagsFragment(excludeTagSlugs)\n\n const searchFacetFragments = searchFacets.reduce((acc: string[], facet) => {\n if (facet.type === 'number') {\n const {field, modifier, modifiers, operatorType, value} = facet\n const operator = operators[operatorType]\n\n // Get current modifier\n const currentModifier = modifiers?.find((m) => m.name === modifier)\n\n // Apply field modifier function (if present)\n const facetField = currentModifier?.fieldModifier\n ? currentModifier.fieldModifier(field)\n : field\n\n const fragment = operator.fn(value, facetField)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'searchable') {\n const {field, operatorType, value} = facet\n const operator = operators[operatorType]\n\n const fragment = operator.fn(value?.value, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'select') {\n const {field, operatorType, options, value} = facet\n const operator = operators[operatorType]\n\n const currentOptionValue = options?.find((l) => l.name === value)?.value\n\n const fragment = operator.fn(currentOptionValue, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'string') {\n const {field, operatorType, value} = facet\n const operator = operators[operatorType]\n\n const fragment = operator.fn(value, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n return acc\n }, [])\n\n // All assets (no folder selected) should not apply a folder filter. A specific\n // folder shows only assets pointing at it.\n const folderFilter: string | undefined = currentFolderId\n ? `opt.media.folder._ref == ${JSON.stringify(currentFolderId)}`\n : undefined\n\n // Join separate filter fragments\n const constructedQuery = [\n // Base filter\n baseFilter,\n ...(excludeTagsFragment ? [excludeTagsFragment] : []),\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 ...(folderFilter ? [folderFilter] : []),\n // Search facets\n ...searchFacetFragments,\n ].join(' && ')\n\n return constructedQuery\n}\n\nexport default constructFilter\n","import type {Asset} from '../types'\n\ntype AssetRef = {\n _ref?: unknown\n _type?: unknown\n}\n\ntype ImageNode = {\n _type?: unknown\n asset?: AssetRef\n}\n\n/**\n * Re-points every image asset in `document` that references `assetToReplaceId`\n * at `newAsset`, mutating the document in place, and returns one patch object\n * per affected top-level field in the form `{[field]: <full mutated field value>}`.\n *\n * Each patch carries the entire (mutated) top-level field value rather than just\n * the matched image node, so `client.patch().set()` updates the references\n * without discarding sibling data — including deeply nested image fields.\n *\n * NOTE: ported from sanity-plugin-media#236. Because of GROQ limitations the\n * matching image objects are filtered out of the document manually rather than\n * via a projection.\n */\nexport function findImageAssets(\n document: Record<string, unknown>,\n newAsset: Asset,\n assetToReplaceId: string,\n): Record<string, unknown>[] {\n const matchedTopLevelFields = new Set<string>()\n repointNestedImages(document, newAsset, assetToReplaceId, '', matchedTopLevelFields)\n return [...matchedTopLevelFields].map((field) => ({[field]: document[field]}))\n}\n\nfunction repointNestedImages(\n node: unknown,\n newAsset: Asset,\n assetToReplaceId: string,\n topLevelField: string,\n matchedTopLevelFields: Set<string>,\n): void {\n if (typeof node !== 'object' || node === null) {\n return\n }\n\n const candidate = node as ImageNode\n // Match built-in `image` nodes and custom image schema types (e.g. `mainImage`),\n // which store their type name in `_type` rather than `\"image\"`. Skip file fields.\n const assetRef = candidate.asset\n const hasMatchingAssetRef = assetRef?._type === 'reference' && assetRef._ref === assetToReplaceId\n if (hasMatchingAssetRef && candidate._type !== 'file' && assetRef) {\n assetRef._ref = newAsset._id\n if (topLevelField) {\n matchedTopLevelFields.add(topLevelField)\n }\n }\n\n for (const [key, value] of Object.entries(node as Record<string, unknown>)) {\n if (typeof value === 'object' && value !== null) {\n // Once we descend past the document root, keep attributing matches to the\n // top-level field so the patch replaces that whole field.\n repointNestedImages(\n value,\n newAsset,\n assetToReplaceId,\n topLevelField || key,\n matchedTopLevelFields,\n )\n }\n }\n}\n","import type {SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {from, Observable, of, throwError} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {HttpError} from '../types'\n\nconst checkTagName = (client: SanityClient, name: string) => {\n return function <T>(source: Observable<T>): Observable<boolean> {\n return source.pipe(\n mergeMap(() => {\n return from(\n client.fetch(groq`count(*[_type == \"${TAG_DOCUMENT_NAME}\" && name.current == $name])`, {\n name,\n }),\n ) as Observable<number>\n }),\n mergeMap((existingTagCount: number) => {\n if (existingTagCount > 0) {\n return throwError({\n message: 'Tag already exists',\n statusCode: 409,\n } satisfies HttpError)\n }\n\n return of(true)\n }),\n )\n }\n}\n\nexport default checkTagName\n","import type {TagSelectOption, TagItem} from '../types'\n\nconst getTagSelectOptions = (tags: TagItem[]): TagSelectOption[] => {\n return tags.reduce((acc: TagSelectOption[], val) => {\n const tag = val?.tag\n if (tag) {\n acc.push({\n label: tag?.name?.current,\n value: tag?._id,\n })\n }\n return acc\n }, [])\n}\n\nexport default getTagSelectOptions\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {AssetItem, HttpError, Tag} from '../../types'\n\nexport const ASSETS_ACTIONS = {\n tagsAddComplete: createAction(\n 'actions/tagsAddComplete',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsAddError: createAction(\n 'actions/tagsAddError',\n function prepare({assets, error, tag}: {assets: AssetItem[]; error: HttpError; tag: Tag}) {\n return {payload: {assets, error, tag}}\n },\n ),\n tagsAddRequest: createAction(\n 'actions/tagsAddRequest',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsRemoveComplete: createAction(\n 'actions/tagsRemoveComplete',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsRemoveError: createAction(\n 'actions/tagsRemoveError',\n function prepare({assets, error, tag}: {assets: AssetItem[]; error: HttpError; tag: Tag}) {\n return {payload: {assets, error, tag}}\n },\n ),\n tagsRemoveRequest: createAction(\n 'actions/tagsRemoveRequest',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n}\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {AssetItem} from '../../types'\n\nexport const DIALOG_ACTIONS = {\n showFolderCreate: createAction(\n 'dialog/showFolderCreate',\n function prepare({parentFolderId}: {parentFolderId?: string | null} = {}) {\n return {\n payload: {parentFolderId},\n }\n },\n ),\n showFolderMove: createAction(\n 'dialog/showFolderMove',\n function prepare({assets, folderId}: {assets: AssetItem[]; folderId?: string | null}) {\n return {\n payload: {assets, folderId},\n }\n },\n ),\n showFolderRename: createAction(\n 'dialog/showFolderRename',\n function prepare({folderId}: {folderId: string}) {\n return {\n payload: {folderId},\n }\n },\n ),\n showTagCreate: createAction('dialog/showTagCreate'),\n showTagEdit: createAction('dialog/showTagEdit', function prepare({tagId}: {tagId: string}) {\n return {\n payload: {tagId},\n }\n }),\n}\n","import {createSelector, createSlice, isAnyOf, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, Transaction} from '@sanity/client'\nimport groq from 'groq'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {from, Observable, of} from 'rxjs'\nimport {bufferTime, catchError, filter, mergeMap, switchMap, withLatestFrom} from 'rxjs/operators'\n\nimport {TAG_DOCUMENT_NAME} from '../../constants'\nimport checkTagName from '../../operators/checkTagName'\nimport debugThrottle from '../../operators/debugThrottle'\nimport type {Asset, HttpError, MyEpic, TagSelectOption, Tag, TagItem} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {DIALOG_ACTIONS} from '../dialog/actions'\nimport type {RootReducerState} from '../types'\n\ntype TagsReducerState = {\n allIds: string[]\n byIds: Record<string, TagItem>\n creating: boolean\n creatingError?: HttpError\n fetchCount: number\n fetching: boolean\n fetchingError?: HttpError\n // totalCount: number\n panelVisible: boolean\n}\n\nconst initialState = {\n allIds: [],\n byIds: {},\n creating: false,\n creatingError: undefined,\n fetchCount: -1,\n fetching: false,\n fetchingError: undefined,\n panelVisible: true,\n} as TagsReducerState\n\nconst tagsSlice = createSlice({\n name: 'tags',\n initialState,\n extraReducers: (builder) => {\n builder\n .addCase(DIALOG_ACTIONS.showTagCreate, (state) => {\n delete state.creatingError\n })\n .addCase(DIALOG_ACTIONS.showTagEdit, (state, action) => {\n const {tagId} = action.payload\n delete state.byIds[tagId]!.error\n })\n .addMatcher(\n isAnyOf(\n ASSETS_ACTIONS.tagsAddComplete,\n ASSETS_ACTIONS.tagsAddError,\n ASSETS_ACTIONS.tagsRemoveComplete,\n ASSETS_ACTIONS.tagsRemoveError,\n ),\n (state, action) => {\n const {tag} = action.payload\n state.byIds[tag._id]!.updating = false\n },\n )\n .addMatcher(\n isAnyOf(ASSETS_ACTIONS.tagsAddRequest, ASSETS_ACTIONS.tagsRemoveRequest),\n (state, action) => {\n const {tag} = action.payload\n state.byIds[tag._id]!.updating = true\n },\n )\n },\n reducers: {\n createComplete(state, action: PayloadAction<{assetId?: string; tag: Tag}>) {\n const {tag} = action.payload\n state.creating = false\n if (!state.allIds.includes(tag._id)) {\n state.allIds.push(tag._id)\n }\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n },\n createError(state, action: PayloadAction<{error: HttpError; name: string}>) {\n state.creating = false\n state.creatingError = action.payload.error\n },\n createRequest(state, _action: PayloadAction<{assetId?: string; name: string}>) {\n state.creating = true\n delete state.creatingError\n },\n deleteComplete(state, action: PayloadAction<{tagId: string}>) {\n const {tagId} = action.payload\n const deleteIndex = state.allIds.indexOf(tagId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[tagId]\n },\n deleteError(state, action: PayloadAction<{error: HttpError; tag: Tag}>) {\n const {error, tag} = action.payload\n\n const tagId = tag?._id\n state.byIds[tagId]!.error = error\n state.byIds[tagId]!.updating = false\n },\n deleteRequest(state, action: PayloadAction<{tag: Tag}>) {\n const tagId = action.payload?.tag?._id\n state.byIds[tagId]!.picked = false\n state.byIds[tagId]!.updating = true\n\n Object.keys(state.byIds).forEach((key) => {\n delete state.byIds[key]!.error\n })\n },\n fetchComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n state.allIds.push(tag._id)\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n })\n\n state.fetching = false\n state.fetchCount = tags.length || 0\n delete state.fetchingError\n },\n fetchError(state, action: PayloadAction<{error: HttpError}>) {\n const {error} = action.payload\n state.fetching = false\n state.fetchingError = error\n },\n fetchRequest: {\n reducer: (state, _action: PayloadAction<{query: string}>) => {\n state.fetching = true\n delete state.fetchingError\n },\n prepare: () => {\n // Construct query\n const query = groq`\n {\n \"items\": *[\n _type == \"${TAG_DOCUMENT_NAME}\"\n && !(_id in path(\"drafts.**\"))\n ] {\n _createdAt,\n _updatedAt,\n _id,\n _rev,\n _type,\n name\n } | order(name.current asc),\n }\n `\n return {payload: {query}}\n },\n },\n // Queue batch tag creation\n listenerCreateQueue(_state, _action: PayloadAction<{tag: Tag}>) {\n //\n },\n // Apply created tags (via sanity real-time events)\n listenerCreateQueueComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n if (!state.allIds.includes(tag._id)) {\n state.allIds.push(tag._id)\n }\n })\n },\n // Queue batch tag deletion\n listenerDeleteQueue(_state, _action: PayloadAction<{tagId: string}>) {\n //\n },\n // Apply deleted tags (via sanity real-time events)\n listenerDeleteQueueComplete(state, action: PayloadAction<{tagIds: string[]}>) {\n const {tagIds} = action.payload\n\n tagIds?.forEach((tagId) => {\n const deleteIndex = state.allIds.indexOf(tagId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[tagId]\n })\n },\n // Queue batch tag updates\n listenerUpdateQueue(_state, _action: PayloadAction<{tag: Tag}>) {\n //\n },\n // Apply updated tags (via sanity real-time events)\n listenerUpdateQueueComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n if (state.byIds[tag._id]) {\n state.byIds[tag._id]!.tag = tag\n }\n })\n },\n // Set tag panel visibility\n panelVisibleSet(state, action: PayloadAction<{panelVisible: boolean}>) {\n const {panelVisible} = action.payload\n state.panelVisible = panelVisible\n },\n // Sort all tags by name\n sort(state) {\n state.allIds.sort((a, b) => {\n const tagA = state.byIds[a]!.tag.name.current\n const tagB = state.byIds[b]!.tag.name.current\n\n if (tagA < tagB) {\n return -1\n } else if (tagA > tagB) {\n return 1\n }\n return 0\n })\n },\n updateComplete(state, action: PayloadAction<{closeDialogId?: string; tag: Tag}>) {\n const {tag} = action.payload\n state.byIds[tag._id]!.tag = tag\n state.byIds[tag._id]!.updating = false\n },\n updateError(state, action: PayloadAction<{tag: Tag; error: HttpError}>) {\n const {error, tag} = action.payload\n const tagId = tag?._id\n state.byIds[tagId]!.error = error\n state.byIds[tagId]!.updating = false\n },\n updateRequest(\n state,\n action: PayloadAction<{\n closeDialogId?: string\n formData: Record<string, any>\n tag: Tag\n }>,\n ) {\n const {tag} = action.payload\n state.byIds[tag?._id]!.updating = true\n },\n },\n})\n\n// Epics\n\n// On tag create request:\n// - async check to see if tag already exists\n// - throw if tag already exists\n// - otherwise, create new tag\nexport const tagsCreateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.createRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assetId, name} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n checkTagName(client, name),\n mergeMap(() =>\n client.observable.create({\n _type: TAG_DOCUMENT_NAME,\n name: {\n _type: 'slug',\n current: name,\n },\n }),\n ),\n mergeMap((result) => of(tagsSlice.actions.createComplete({assetId, tag: result as Tag}))),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.createError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n name,\n }),\n ),\n ),\n )\n }),\n )\n\n// On tag delete request\n// - find referenced assets\n// - remove tag from referenced assets in a sanity transaction\nexport const tagsDeleteEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.deleteRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {tag} = action.payload\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Fetch assets which reference this tag\n mergeMap(() =>\n client.observable.fetch<Asset[]>(\n groq`*[\n _type in [\"sanity.fileAsset\", \"sanity.imageAsset\"]\n && references(*[_type == \"media.tag\" && name.current == $tagName]._id)\n ] {\n _id,\n _rev,\n opt\n }`,\n {tagName: tag.name.current},\n ),\n ),\n // Create transaction which remove tag references from all matched assets and delete tag\n mergeMap((assets) => {\n const patches = assets.map((asset) => ({\n id: asset._id,\n patch: {\n // this will cause the transaction to fail if the document has been modified since it was fetched.\n ifRevisionID: asset._rev,\n unset: [`opt.media.tags[_ref == \"${tag._id}\"]`],\n },\n }))\n\n const transaction: Transaction = patches.reduce(\n (tx, patch) => tx.patch(patch.id, patch.patch),\n client.transaction(),\n )\n\n transaction.delete(tag._id)\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(tagsSlice.actions.deleteComplete({tagId: tag._id}))),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.deleteError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n\n// Async fetch tags\nexport const tagsFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const {query} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Fetch tags\n mergeMap(() =>\n client.observable.fetch<{\n items: Tag[]\n }>(query),\n ),\n // Dispatch complete action\n mergeMap((result) => {\n const {items} = result\n return of(tagsSlice.actions.fetchComplete({tags: items}))\n }),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.fetchError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag creation via sanity subscriber\nexport const tagsListenerCreateQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerCreateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tags = actions?.map((action) => action.payload.tag)\n return of(tagsSlice.actions.listenerCreateQueueComplete({tags}))\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag deletion via sanity subscriber\nexport const tagsListenerDeleteQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerDeleteQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tagIds = actions?.map((action) => action.payload.tagId)\n return of(tagsSlice.actions.listenerDeleteQueueComplete({tagIds}))\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag update via sanity subscriber\nexport const tagsListenerUpdateQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerUpdateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tags = actions?.map((action) => action.payload.tag)\n return of(tagsSlice.actions.listenerUpdateQueueComplete({tags}))\n }),\n )\n\n// On successful tag creation or updates:\n// - Re-sort all tags\nexport const tagsSortEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n tagsSlice.actions.listenerCreateQueueComplete.type,\n tagsSlice.actions.listenerUpdateQueueComplete.type,\n ),\n bufferTime(1000),\n filter((actions) => actions.length > 0),\n mergeMap(() => of(tagsSlice.actions.sort())),\n )\n\n// On tag update request\n// - check if tag name already exists\n// - throw if tag already exists\n// - otherwise, patch document\nexport const tagsUpdateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {closeDialogId, formData, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Check if tag name is available, throw early if not\n checkTagName(client, formData?.['name']?.current),\n // Patch document (Update tag)\n mergeMap(\n () =>\n from(\n client\n .patch(tag._id)\n .set({name: {_type: 'slug', current: formData?.['name'].current}})\n .commit(),\n ) as Observable<Tag>,\n ),\n // Dispatch complete action\n mergeMap((updatedTag: Tag) => {\n return of(\n tagsSlice.actions.updateComplete({\n closeDialogId,\n tag: updatedTag,\n }),\n )\n }),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.updateError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n\n// Selectors\n\nconst selectTagsByIds = (state: RootReducerState) => state.tags.byIds\n\nconst selectTagsAllIds = (state: RootReducerState) => state.tags.allIds\n\nexport const selectTags: Selector<RootReducerState, TagItem[]> = createSelector(\n [selectTagsByIds, selectTagsAllIds],\n (byIds, allIds) => allIds.map((id) => byIds[id]!),\n)\n\nexport const selectTagById = createSelector(\n [selectTagsByIds, (_state: RootReducerState, tagId: string) => tagId],\n (byIds, tagId) => byIds[tagId],\n)\n\n// TODO: use createSelector\n// Map tag references to react-select options, skipping over items with no linked tags\nexport const selectTagSelectOptions =\n (asset?: Asset) =>\n (state: RootReducerState): TagSelectOption[] | null => {\n const tags = asset?.opt?.media?.tags?.reduce((acc: TagItem[], v) => {\n const tagItem = state.tags.byIds[v._ref]\n if (tagItem?.tag) {\n acc.push(tagItem)\n }\n return acc\n }, [])\n\n if (tags && tags?.length > 0) {\n return getTagSelectOptions(tags)\n }\n\n return null\n }\n\nexport const tagsActions = {...tagsSlice.actions}\n\nexport default tagsSlice.reducer\n","import {type PayloadAction, createSelector, createSlice} from '@reduxjs/toolkit'\nimport {uuid} from '@sanity/uuid'\nimport {EMPTY, of} from 'rxjs'\nimport {filter, mergeMap, withLatestFrom} from 'rxjs/operators'\n\nimport type {MyEpic, SearchFacetInputProps, SearchFacetOperatorType, WithId} from '../../types'\nimport {tagsActions} from '../tags'\nimport type {RootReducerState} from '../types'\n\n// TODO: don't store non-serializable data in the search store\n// (The main offender is `fieldModifier` which is currently a function)\n\ntype SearchState = {\n facets: WithId<SearchFacetInputProps>[]\n query: string\n}\n\nconst initialState = {\n facets: [],\n query: '',\n} as SearchState\n\nconst searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n // Add search facet\n facetsAdd(state, action: PayloadAction<{facet: SearchFacetInputProps}>) {\n state.facets.push({...action.payload.facet, id: uuid()})\n },\n // Clear all search facets\n facetsClear(state) {\n state.facets = []\n },\n // Remove search facet by name\n facetsRemoveByName(state, action: PayloadAction<{facetName: string}>) {\n state.facets = state.facets.filter((facet) => facet.name !== action.payload.facetName)\n },\n // Remove search facet by name\n facetsRemoveByTag(state, action: PayloadAction<{tagId: string}>) {\n state.facets = state.facets.filter(\n (facet) =>\n !(\n facet.name === 'tag' &&\n facet.type === 'searchable' &&\n (facet.operatorType === 'references' || facet.operatorType === 'doesNotReference') &&\n facet.value?.value === action.payload.tagId\n ),\n )\n },\n // Remove search facet by name\n facetsRemoveById(state, action: PayloadAction<{facetId: string}>) {\n state.facets = state.facets.filter((facet) => facet.id !== action.payload.facetId)\n },\n // Update an existing search facet\n facetsUpdate(\n state,\n action: PayloadAction<{\n modifier?: string\n name: string\n operatorType?: SearchFacetOperatorType\n value?: any // TODO: type correctly\n }>,\n ) {\n const {modifier, name, operatorType, value} = action.payload\n\n const facet = state.facets.find((f) => f.name === name)\n\n if (!facet) {\n return\n }\n\n if (facet.type === 'number' && modifier) {\n facet.modifier = modifier\n }\n if (operatorType) {\n facet.operatorType = operatorType\n }\n if (typeof value !== 'undefined') {\n facet.value = value\n }\n\n state.facets = state.facets.filter((f) => f.name !== facet.name || f.id === facet.id)\n },\n // Update an existing search facet\n facetsUpdateById(\n state,\n action: PayloadAction<{\n modifier?: string\n id: string\n operatorType?: SearchFacetOperatorType\n value?: any // TODO: type correctly\n }>,\n ) {\n const {modifier, id, operatorType, value} = action.payload\n\n state.facets.forEach((facet, index) => {\n if (facet.id === id) {\n if (facet.type === 'number' && modifier) {\n facet.modifier = modifier\n }\n if (operatorType) {\n facet.operatorType = operatorType\n }\n if (typeof value !== 'undefined') {\n state.facets[index]!.value = value\n }\n }\n })\n },\n // Update existing search query\n querySet(state, action: PayloadAction<{searchQuery: string}>) {\n state.query = action.payload?.searchQuery\n },\n },\n})\n\n// Epics\n\n// On tag update success -> update existing tag search facet (if present)\nexport const searchFacetTagUpdateEpic: MyEpic = (action$, state$) =>\n action$.pipe(\n filter(tagsActions.updateComplete.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {tag} = action.payload\n\n const currentSearchFacetTag = state.search.facets?.find((facet) => facet.name === 'tag')\n const tagItem = state.tags.byIds[tag._id]\n\n if (currentSearchFacetTag?.type === 'searchable') {\n if (currentSearchFacetTag.value?.value === tag._id) {\n return of(\n searchSlice.actions.facetsUpdate({\n name: 'tag',\n value: {\n label: tagItem?.tag?.name?.current,\n value: tagItem?.tag?._id,\n },\n }),\n )\n }\n }\n\n return EMPTY\n }),\n )\n\n// Selectors\nexport const selectIsSearchFacetTag = createSelector(\n [\n (state: RootReducerState) => state.search.facets,\n (_state: RootReducerState, tagId: string) => tagId,\n ],\n (searchFacets, tagId) =>\n searchFacets.some(\n (facet) =>\n facet.name === 'tag' &&\n facet.type === 'searchable' &&\n (facet.operatorType === 'references' || facet.operatorType === 'doesNotReference') &&\n facet.value?.value === tagId,\n ),\n)\n\nexport const searchActions = {...searchSlice.actions}\n\nexport default searchSlice.reducer\n","import {createAction} from '@reduxjs/toolkit'\nimport type {SanityAssetDocument, SanityImageAssetDocument} from '@sanity/client'\n\nexport const UPLOADS_ACTIONS = {\n uploadComplete: createAction(\n 'uploads/uploadComplete',\n function prepare({asset}: {asset: SanityAssetDocument | SanityImageAssetDocument}) {\n return {\n payload: {asset},\n }\n },\n ),\n}\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {AttributeSet, ClientError, Patch, SanityDocument, Transaction} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {EMPTY, from, of} from 'rxjs'\nimport {\n bufferTime,\n catchError,\n concatMap,\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 debugThrottle from '../../operators/debugThrottle'\nimport type {\n Asset,\n AssetItem,\n AssetType,\n BrowserView,\n HttpError,\n MyEpic,\n Order,\n OrderDirection,\n Tag,\n} from '../../types'\nimport constructFilter from '../../utils/constructFilter'\nimport {findImageAssets} from '../../utils/ReplaceImages'\nimport {searchActions} from '../search'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\nimport {ASSETS_ACTIONS} from './actions'\ntype ItemError = {\n description: string\n id: string\n referencingIDs: string[]\n type: string // 'documentHasExistingReferencesError'\n}\n\nexport type AssetsReducerState = {\n allIds: string[]\n assetTypes: AssetType[]\n byIds: Record<string, AssetItem>\n excludeTagSlugs: string[]\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 {\n direction: OrderDirection\n field: string\n}\n\n/**\n * NOTE:\n * `fetchCount` returns the number of items retrieved in the most recent fetch.\n * This is a temporary workaround to be able to determine when there are no more items to retrieve.\n * Typically this would be done by deriving the total number of assets upfront, but currently such\n * queries in GROQ aren't fast enough to use on large datasets (1000s of entries).\n *\n * TODO:\n * When the query engine has been improved and above queries are faster, remove all instances of\n * of `fetchCount` and reinstate `totalCount` across the board.\n */\n\nexport const initialState = {\n allIds: [],\n assetTypes: [],\n byIds: {},\n excludeTagSlugs: [],\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.field, defaultOrder.direction),\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 Asset,\n picked: false,\n updating: false,\n }\n })\n .addCase(ASSETS_ACTIONS.tagsAddComplete, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsAddError, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsAddRequest, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = true\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveComplete, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveError, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveRequest, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = true\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 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: Asset[]; 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 fetchComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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 const existing = state.byIds[asset._id]\n // Preserve pick/updating across search refreshes (e.g. replace dialog clearing filters)\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset,\n picked: existing?.picked ?? false,\n updating: existing?.updating ?? false,\n ...(existing?.error ? {error: existing.error} : {}),\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 folderSetComplete(\n state,\n action: PayloadAction<{assetIds: string[]; folderId: string | null; closeDialogId?: string}>,\n ) {\n const {assetIds, folderId} = action.payload\n\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]?.asset) {\n state.byIds[assetId].asset.opt = state.byIds[assetId].asset.opt || {}\n state.byIds[assetId].asset.opt.media = state.byIds[assetId].asset.opt.media || {}\n state.byIds[assetId].asset.opt.media.folder = folderId\n ? {_ref: folderId, _type: 'reference', _weak: true}\n : undefined\n state.byIds[assetId].updating = false\n }\n })\n },\n folderSetError(state, action: PayloadAction<{assetIds: string[]; error: HttpError}>) {\n const {assetIds, error} = action.payload\n\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]) {\n state.byIds[assetId].error = error.message\n state.byIds[assetId].updating = false\n }\n })\n },\n folderSetRequest(\n state,\n action: PayloadAction<{\n assets: AssetItem[]\n folderId: string | null\n closeDialogId?: string\n }>,\n ) {\n action.payload.assets.forEach((asset) => {\n const item = state.byIds[asset.asset._id]\n if (item) {\n item.updating = true\n }\n })\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 altText,\n creditLine,\n description,\n extension,\n metadata {\n dimensions,\n exif,\n image,\n isOpaque,\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: Asset}>) {\n //\n },\n listenerCreateQueueComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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: Asset}>) {\n //\n },\n listenerUpdateQueueComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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 const item = state.byIds[assetId]\n if (!item) {\n return\n }\n\n item.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]\n const tagB = state.byIds[b]!.asset[state.order.field]\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: Asset; 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: Asset; 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 updateImageReferences(state, action: PayloadAction<{asset: Asset; id: string}>) {\n const {id: assetId} = action.payload\n const item = state.byIds[assetId]\n if (!item) {\n return\n }\n item.updating = true\n delete item.error\n },\n updateImageReferencesComplete(state, action: PayloadAction<{id: string}>) {\n const {id} = action.payload\n const item = state.byIds[id]\n if (!item) {\n return\n }\n item.updating = false\n delete item.error\n },\n updateRequest(\n state,\n action: PayloadAction<{asset: Asset; closeDialogId?: string; formData: Record<string, any>}>,\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\n// Epics\n\nexport const assetsDeleteEpic: MyEpic = (action$, _state$, {client}) =>\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 return of(assets).pipe(\n mergeMap(() =>\n client.observable.delete({\n query: groq`*[_id in ${JSON.stringify(assetIds)}]`,\n }),\n ),\n mergeMap(() => of(assetsActions.deleteComplete({assetIds}))),\n catchError((error: ClientError) => {\n return of(assetsActions.deleteError({assetIds, error}))\n }),\n )\n }),\n )\n\nexport const assetsFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const params = action.payload?.params\n const query = action.payload?.query\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n client.observable.fetch<{\n items: Asset[]\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: MyEpic = (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 currentFolderId: state.folders.currentFolderId,\n excludeTagSlugs: state.assets.excludeTagSlugs,\n searchFacets: state.search.facets,\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: MyEpic = (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: MyEpic = (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\nconst filterAssetWithoutTag = (tag: Tag) => (asset: AssetItem) => {\n const tagIndex = asset?.asset?.opt?.media?.tags?.findIndex((t) => t._ref === tag?._id) ?? -1\n return tagIndex < 0\n}\n\nconst patchOperationTagAppend =\n ({tag}: {tag: Tag}) =>\n (patch: Patch) =>\n patch\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .setIfMissing({'opt.media.tags': []})\n .append('opt.media.tags', [{_key: nanoid(), _ref: tag?._id, _type: 'reference', _weak: true}])\n\nconst patchOperationTagUnset =\n ({asset, tag}: {asset: AssetItem; tag: Tag}) =>\n (patch: Patch) =>\n patch.ifRevisionId(asset?.asset?._rev).unset([`opt.media.tags[_ref == \"${tag._id}\"]`])\n\nconst patchOperationFolderSet =\n ({asset, folderId}: {asset: AssetItem; folderId: string | null}) =>\n (patch: Patch) => {\n const nextPatch = patch.ifRevisionId(asset?.asset?._rev).setIfMissing({opt: {}}).setIfMissing({\n 'opt.media': {},\n })\n\n if (folderId) {\n return nextPatch.set({\n 'opt.media.folder': {_ref: folderId, _type: 'reference', _weak: true},\n })\n }\n\n return nextPatch.unset(['opt.media.folder'])\n }\n\nexport const assetsOrderSetEpic: MyEpic = (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: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n searchActions.facetsAdd.type,\n searchActions.facetsClear.type,\n searchActions.facetsRemoveById.type,\n searchActions.facetsRemoveByName.type,\n searchActions.facetsRemoveByTag.type,\n searchActions.facetsUpdate.type,\n searchActions.facetsUpdateById.type,\n searchActions.querySet.type,\n ),\n debounceTime(400),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsListenerCreateQueueEpic: MyEpic = (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: MyEpic = (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: MyEpic = (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: MyEpic = (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 assetsTagsAddEpic: MyEpic = (action$, state$, {client}) => {\n return action$.pipe(\n filter(ASSETS_ACTIONS.tagsAddRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Add tag references to all picked assets\n mergeMap(() => {\n const pickedAssets = selectAssetsPicked(state)\n\n // Filter out picked assets which already include tag\n const pickedAssetsFiltered = pickedAssets?.filter(filterAssetWithoutTag(tag))\n\n const transaction: Transaction = pickedAssetsFiltered.reduce(\n (tx, pickedAsset) => tx.patch(pickedAsset?.asset?._id, patchOperationTagAppend({tag})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(ASSETS_ACTIONS.tagsAddComplete({assets, tag}))),\n catchError((error: ClientError) =>\n of(\n ASSETS_ACTIONS.tagsAddError({\n assets,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n}\n\nexport const assetsTagsRemoveEpic: MyEpic = (action$, state$, {client}) => {\n return action$.pipe(\n filter(ASSETS_ACTIONS.tagsRemoveRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Remove tag references from all picked assets\n mergeMap(() => {\n const pickedAssets = selectAssetsPicked(state)\n\n const transaction: Transaction = pickedAssets.reduce(\n (tx, pickedAsset) =>\n tx.patch(pickedAsset?.asset?._id, patchOperationTagUnset({asset: pickedAsset, tag})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(ASSETS_ACTIONS.tagsRemoveComplete({assets, tag}))),\n catchError((error: ClientError) =>\n of(\n ASSETS_ACTIONS.tagsRemoveError({\n assets,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n}\n\nexport const assetsFolderSetEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.folderSetRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, closeDialogId, folderId} = action.payload\n const assetIds = assets.map((asset) => asset.asset._id)\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => {\n const transaction: Transaction = assets.reduce(\n (tx, asset) => tx.patch(asset.asset._id, patchOperationFolderSet({asset, folderId})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n mergeMap(() =>\n of(\n assetsActions.folderSetComplete({\n assetIds,\n closeDialogId,\n folderId,\n }),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n assetsActions.folderSetError({\n assetIds,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nexport const assetsFolderSetRefreshEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(assetsActions.folderSetComplete.match),\n mergeMap(() =>\n of(\n assetsActions.pickClear(),\n assetsActions.clear(),\n assetsActions.loadPageIndex({pageIndex: 0}),\n ),\n ),\n )\n\nexport const assetsUnpickEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.orderSet.type,\n assetsActions.viewSet.type,\n searchActions.facetsAdd.type,\n searchActions.facetsClear.type,\n searchActions.facetsRemoveById.type,\n searchActions.facetsRemoveByName.type,\n searchActions.facetsRemoveByTag.type,\n searchActions.facetsUpdate.type,\n searchActions.facetsUpdateById.type,\n searchActions.querySet.type,\n ),\n mergeMap(() => {\n return of(assetsActions.pickClear())\n }),\n )\n\nexport const assetsUpdateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {asset, closeDialogId, formData} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n from(\n client\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\nexport const assetsUpdateImageReferencesEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.updateImageReferences.match),\n withLatestFrom(state$),\n // Queue replaces so a later action still runs (exhaustMap would drop it after\n // the reducer already set `updating`, leaving a stuck spinner). Same-asset\n // double-clicks are blocked in the UI when the original is already updating.\n concatMap(([action, state]) => {\n const {asset, id} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.fetch<SanityDocument[]>(groq`*[references($id)]`, {id})),\n mergeMap((documents) => {\n // Patch every referencing document in one transaction so we never leave\n // references split across old/new assets if a later commit would fail.\n let patchedCount = 0\n const transaction: Transaction = documents.reduce((tx, document) => {\n const clonedDocument = JSON.parse(JSON.stringify(document)) as Record<string, unknown>\n const assetsToReplace = findImageAssets(clonedDocument, asset, id)\n if (assetsToReplace.length === 0) {\n return tx\n }\n patchedCount += 1\n const patchSet = Object.assign({}, ...assetsToReplace) as AttributeSet\n return tx.patch(document._id, (patch) =>\n patch.ifRevisionId(document._rev).set(patchSet),\n )\n }, client.transaction())\n\n if (patchedCount === 0) {\n return of(assetsActions.updateImageReferencesComplete({id}))\n }\n\n return from(transaction.commit()).pipe(\n mergeMap(() => of(assetsActions.updateImageReferencesComplete({id}))),\n )\n }),\n catchError((error: ClientError) => {\n // The asset marked as `updating` is the original (being replaced), keyed\n // by `id` — not the replacement `asset` that was clicked. Attach the error\n // to (and clear the spinner on) the original asset.\n const originalAsset = state.assets.byIds[id]?.asset ?? asset\n return of(\n assetsActions.updateError({\n asset: originalAsset,\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 assetsActions = {...assetsSlice.actions}\n\nexport default assetsSlice.reducer\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, Patch} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\nimport {from, of} from 'rxjs'\nimport {\n catchError,\n debounceTime,\n filter,\n map,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators'\n\nimport {FOLDER_DOCUMENT_NAME} from '../../constants'\nimport debugThrottle from '../../operators/debugThrottle'\nimport type {FolderDoc, FolderTreeItem, FolderTreeNode, HttpError, MyEpic} from '../../types'\nimport {buildExcludeTagsFragment} from '../../utils/constructFilter'\nimport {assetsActions} from '../assets'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\n\ntype FoldersReducerState = {\n byId: Record<string, FolderDoc>\n childrenByParentId: Record<string, string[]>\n rootIds: string[]\n exactCountByFolderId: Record<string, number>\n unfiledCount: number\n currentFolderId: string | null\n currentFolderUnfiled: boolean\n panelVisible: boolean\n fetching: boolean\n fetchCount: number\n fetchingError?: HttpError\n creating: boolean\n creatingError?: HttpError\n deletingId?: string\n deleteError?: HttpError\n renaming: boolean\n renameError?: HttpError\n}\n\nconst initialState: FoldersReducerState = {\n byId: {},\n childrenByParentId: {},\n rootIds: [],\n exactCountByFolderId: {},\n unfiledCount: 0,\n currentFolderId: null,\n currentFolderUnfiled: false,\n panelVisible: false,\n fetching: false,\n fetchCount: -1,\n fetchingError: undefined,\n creating: false,\n creatingError: undefined,\n deletingId: undefined,\n deleteError: undefined,\n renaming: false,\n renameError: undefined,\n}\n\nconst indexFolders = (folders: FolderDoc[]) => {\n const byId: Record<string, FolderDoc> = {}\n const childrenByParentId: Record<string, string[]> = {}\n const rootIds: string[] = []\n\n folders.forEach((folder) => {\n byId[folder._id] = folder\n })\n\n // Resolve parent ids that reference unknown folders to null (defensive — orphan folders surface at root).\n folders.forEach((folder) => {\n const parentKey = folder.parentId && byId[folder.parentId] ? folder.parentId : null\n if (parentKey === null) {\n rootIds.push(folder._id)\n } else {\n if (!childrenByParentId[parentKey]) {\n childrenByParentId[parentKey] = []\n }\n childrenByParentId[parentKey].push(folder._id)\n }\n })\n\n const sortByName = (ids: string[]) =>\n ids.sort((a, b) =>\n (byId[a]?.name || '').localeCompare(byId[b]?.name || '', undefined, {\n numeric: true,\n sensitivity: 'base',\n }),\n )\n\n sortByName(rootIds)\n Object.values(childrenByParentId).forEach((ids) => sortByName(ids))\n\n return {byId, childrenByParentId, rootIds}\n}\n\nconst foldersSlice = createSlice({\n name: 'folders',\n initialState,\n reducers: {\n createComplete(state, _action: PayloadAction<{folder: FolderDoc}>) {\n state.creating = false\n },\n createError(state, action: PayloadAction<{error: HttpError}>) {\n state.creating = false\n state.creatingError = action.payload.error\n },\n createRequest(state, _action: PayloadAction<{name: string; parentId?: string | null}>) {\n state.creating = true\n delete state.creatingError\n },\n currentFolderClear(state) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n },\n currentFolderSet(state, action: PayloadAction<{folderId: string}>) {\n state.currentFolderId = action.payload.folderId\n state.currentFolderUnfiled = false\n },\n currentFolderShowUnfiled(state) {\n state.currentFolderId = null\n state.currentFolderUnfiled = true\n },\n deleteComplete(\n state,\n action: PayloadAction<{\n folderId: string\n deletedIds: string[]\n clearedCurrentFolder?: boolean\n }>,\n ) {\n state.deletingId = undefined\n const removed = new Set(action.payload.deletedIds)\n if (state.currentFolderId && removed.has(state.currentFolderId)) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n }\n },\n deleteError(state, action: PayloadAction<{error: HttpError; folderId: string}>) {\n state.deletingId = undefined\n state.deleteError = action.payload.error\n },\n deleteRequest(state, action: PayloadAction<{folderId: string}>) {\n state.deletingId = action.payload.folderId\n delete state.deleteError\n },\n fetchComplete(\n state,\n action: PayloadAction<{\n folders: FolderDoc[]\n exactCountByFolderId: Record<string, number>\n unfiledCount: number\n clearedCurrentFolder?: boolean\n }>,\n ) {\n const {byId, childrenByParentId, rootIds} = indexFolders(action.payload.folders)\n state.byId = byId\n state.childrenByParentId = childrenByParentId\n state.rootIds = rootIds\n state.exactCountByFolderId = action.payload.exactCountByFolderId\n state.unfiledCount = action.payload.unfiledCount\n state.fetching = false\n state.fetchCount = action.payload.folders.length\n delete state.fetchingError\n\n if (state.currentFolderId && !byId[state.currentFolderId]) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n }\n },\n fetchError(state, action: PayloadAction<{error: HttpError}>) {\n state.fetching = false\n state.fetchingError = action.payload.error\n },\n fetchRequest(state) {\n state.fetching = true\n delete state.fetchingError\n },\n panelVisibleSet(state, action: PayloadAction<{panelVisible: boolean}>) {\n state.panelVisible = action.payload.panelVisible\n },\n renameComplete(state, _action: PayloadAction<{folderId: string; name: string}>) {\n state.renaming = false\n },\n renameError(state, action: PayloadAction<{error: HttpError}>) {\n state.renaming = false\n state.renameError = action.payload.error\n },\n renameRequest(state, _action: PayloadAction<{folderId: string; name: string}>) {\n state.renaming = true\n delete state.renameError\n },\n },\n})\n\nexport const foldersFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) =>\n of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => {\n const assetTypes = state.assets.assetTypes.map((type) => `sanity.${type}Asset`)\n const excludeTagsFragment = buildExcludeTagsFragment(state.assets.excludeTagSlugs)\n const excludeTagsClause = excludeTagsFragment ? `&& ${excludeTagsFragment}` : ''\n return client.observable.fetch<{\n folders: {_id: string; name?: string; parentId?: string | null; count: number}[]\n unfiledCount: number\n }>(\n groq`{\n \"folders\": *[\n _type == \"${FOLDER_DOCUMENT_NAME}\"\n && !(_id in path(\"drafts.**\"))\n ] {\n _id,\n name,\n \"parentId\": parent._ref,\n \"count\": count(*[\n _type in ${JSON.stringify(assetTypes)}\n && !(_id in path(\"drafts.**\"))\n && opt.media.folder._ref == ^._id\n ${excludeTagsClause}\n ])\n },\n \"unfiledCount\": count(*[\n _type in ${JSON.stringify(assetTypes)}\n && !(_id in path(\"drafts.**\"))\n && !defined(opt.media.folder._ref)\n ${excludeTagsClause}\n ])\n }`,\n )\n }),\n mergeMap((result) => {\n const folders: FolderDoc[] = result.folders.map((f) => ({\n _id: f._id,\n name: f.name || '',\n parentId: f.parentId || null,\n }))\n const exactCountByFolderId: Record<string, number> = {}\n result.folders.forEach(({_id, count}) => {\n exactCountByFolderId[_id] = count\n })\n const folderIds = new Set(folders.map((folder) => folder._id))\n const clearedCurrentFolder = Boolean(\n state.folders.currentFolderId && !folderIds.has(state.folders.currentFolderId),\n )\n return of(\n foldersSlice.actions.fetchComplete({\n folders,\n exactCountByFolderId,\n unfiledCount: result.unfiledCount,\n clearedCurrentFolder,\n }),\n )\n }),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.fetchError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n ),\n ),\n )\n\nexport const foldersRefreshEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(\n (action) =>\n assetsActions.deleteComplete.match(action) ||\n assetsActions.folderSetComplete.match(action) ||\n foldersSlice.actions.createComplete.match(action) ||\n foldersSlice.actions.deleteComplete.match(action) ||\n foldersSlice.actions.renameComplete.match(action) ||\n assetsActions.listenerCreateQueueComplete.match(action) ||\n assetsActions.listenerDeleteQueueComplete.match(action) ||\n assetsActions.listenerUpdateQueueComplete.match(action) ||\n assetsActions.updateComplete.match(action) ||\n UPLOADS_ACTIONS.uploadComplete.match(action),\n ),\n debounceTime(300),\n mergeMap(() => of(foldersSlice.actions.fetchRequest())),\n )\n\nexport const foldersCurrentFolderEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(\n (action) =>\n foldersSlice.actions.currentFolderClear.match(action) ||\n foldersSlice.actions.currentFolderSet.match(action) ||\n foldersSlice.actions.currentFolderShowUnfiled.match(action) ||\n (foldersSlice.actions.deleteComplete.match(action) &&\n Boolean(action.payload.clearedCurrentFolder)) ||\n (foldersSlice.actions.fetchComplete.match(action) &&\n Boolean(action.payload.clearedCurrentFolder)),\n ),\n mergeMap(() =>\n of(\n assetsActions.clear(),\n assetsActions.pickClear(),\n assetsActions.loadPageIndex({pageIndex: 0}),\n ),\n ),\n )\n\nconst patchOperationAssetFolderUnset = (patch: Patch) => patch.unset(['opt.media.folder'])\n\nconst patchOperationFolderParentSet =\n ({parentId}: {parentId: string | null}) =>\n (patch: Patch) => {\n if (parentId) {\n return patch.set({parent: {_ref: parentId, _type: 'reference', _weak: true}})\n }\n\n return patch.unset(['parent'])\n }\n\nexport const foldersCreateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.createRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const name = action.payload.name.trim()\n const parentId = action.payload.parentId || null\n\n if (!name) {\n return of(\n foldersSlice.actions.createError({\n error: {message: 'Folder name cannot be empty', statusCode: 400},\n }),\n )\n }\n\n const siblingIds = parentId\n ? state.folders.childrenByParentId[parentId] || []\n : state.folders.rootIds\n const collision = siblingIds.some(\n (id) => state.folders.byId[id]?.name.toLowerCase() === name.toLowerCase(),\n )\n if (collision) {\n return of(\n foldersSlice.actions.createError({\n error: {message: 'A folder with this name already exists here', statusCode: 409},\n }),\n )\n }\n\n const newId = `${FOLDER_DOCUMENT_NAME}.${nanoid()}`\n const doc: {\n _id: string\n _type: string\n name: string\n parent?: {_ref: string; _type: 'reference'; _weak: true}\n } = {\n _id: newId,\n _type: FOLDER_DOCUMENT_NAME,\n name,\n }\n if (parentId) {\n doc.parent = {_ref: parentId, _type: 'reference', _weak: true}\n }\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.create(doc)),\n mergeMap(() =>\n of(\n foldersSlice.actions.createComplete({folder: {_id: newId, name, parentId}}),\n foldersSlice.actions.currentFolderSet({folderId: newId}),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.createError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nexport const foldersDeleteEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.deleteRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const folderId = action.payload.folderId\n const childFolderIds = state.folders.childrenByParentId[folderId] || []\n const parentId = state.folders.byId[folderId]?.parentId ?? null\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n client.observable.fetch<{assets: {_id: string}[]}>(\n groq`{\n \"assets\": *[\n _type in ${JSON.stringify(\n state.assets.assetTypes.map((type) => `sanity.${type}Asset`),\n )}\n && !(_id in path(\"drafts.**\"))\n && opt.media.folder._ref == $folderId\n ] {\n _id\n }\n }`,\n {folderId},\n ),\n ),\n mergeMap((result) => {\n const tx = client.transaction()\n // Deleting a folder only removes the folder document. Assets keep living in the\n // library with their folder assignment cleared, and direct child folders are promoted\n // to the deleted folder's parent (or root).\n result.assets.forEach((asset) => tx.patch(asset._id, patchOperationAssetFolderUnset))\n childFolderIds.forEach((childFolderId) =>\n tx.patch(childFolderId, patchOperationFolderParentSet({parentId})),\n )\n tx.delete(folderId)\n\n return from(tx.commit()).pipe(\n map(() =>\n foldersSlice.actions.deleteComplete({\n folderId,\n deletedIds: [folderId],\n clearedCurrentFolder: state.folders.currentFolderId === folderId,\n }),\n ),\n )\n }),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.deleteError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n folderId,\n }),\n ),\n ),\n )\n }),\n )\n\nexport const foldersRenameEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.renameRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {folderId} = action.payload\n const name = action.payload.name.trim()\n const folder = state.folders.byId[folderId]\n\n if (!folder) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder not found', statusCode: 404},\n }),\n )\n }\n\n if (!name) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder name cannot be empty', statusCode: 400},\n }),\n )\n }\n\n if (name === folder.name) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder name has not changed', statusCode: 400},\n }),\n )\n }\n\n const siblingIds = folder.parentId\n ? state.folders.childrenByParentId[folder.parentId] || []\n : state.folders.rootIds\n const collision = siblingIds.some(\n (id) =>\n id !== folderId && state.folders.byId[id]?.name.toLowerCase() === name.toLowerCase(),\n )\n if (collision) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'A folder with this name already exists here', statusCode: 409},\n }),\n )\n }\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.patch(folderId).set({name}).commit()),\n mergeMap(() => of(foldersSlice.actions.renameComplete({folderId, name}))),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.renameError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nconst selectById = (state: RootReducerState) => state.folders.byId\nconst selectChildrenByParentId = (state: RootReducerState) => state.folders.childrenByParentId\nconst selectRootIds = (state: RootReducerState) => state.folders.rootIds\nconst selectExactCountByFolderId = (state: RootReducerState) => state.folders.exactCountByFolderId\nconst selectCurrentFolderId = (state: RootReducerState) => state.folders.currentFolderId\nconst selectCurrentFolderUnfiled = (state: RootReducerState) => state.folders.currentFolderUnfiled\n\nconst buildFolderPath = (folderId: string, byId: Record<string, FolderDoc>): string => {\n const segments: string[] = []\n let cursor: string | null = folderId\n const seen = new Set<string>()\n while (cursor && !seen.has(cursor)) {\n const folder: FolderDoc | undefined = byId[cursor]\n if (!folder) break\n seen.add(cursor)\n segments.unshift(folder.name)\n cursor = folder.parentId\n }\n return segments.join('/')\n}\n\nexport const selectFolderPathById = createSelector(\n [selectById, (_state: RootReducerState, folderId: string | null | undefined) => folderId],\n (byId, folderId) => (folderId ? buildFolderPath(folderId, byId) : ''),\n)\n\nexport const selectFolderTree = createSelector(\n [selectById, selectChildrenByParentId, selectRootIds, selectExactCountByFolderId],\n (byId, childrenByParentId, rootIds, exactCountByFolderId): FolderTreeNode[] => {\n const buildNode = (folderId: string): FolderTreeNode => {\n const folder = byId[folderId]\n const children = (childrenByParentId[folderId] || []).map(buildNode)\n const exactCount = exactCountByFolderId[folderId] || 0\n const totalCount = children.reduce((sum, child) => sum + child.totalCount, exactCount)\n return {\n children,\n exactCount,\n id: folderId,\n name: folder?.name || '',\n parentId: folder?.parentId ?? null,\n path: buildFolderPath(folderId, byId),\n totalCount,\n }\n }\n\n return rootIds.map(buildNode)\n },\n)\n\nexport const selectCurrentFolderSegments = createSelector(\n [selectById, selectCurrentFolderId],\n (byId, currentFolderId): FolderTreeItem[] => {\n if (!currentFolderId) return []\n const chain: string[] = []\n let cursor: string | null = currentFolderId\n const seen = new Set<string>()\n while (cursor && !seen.has(cursor)) {\n const folder: FolderDoc | undefined = byId[cursor]\n if (!folder) break\n seen.add(cursor)\n chain.unshift(cursor)\n cursor = folder.parentId\n }\n return chain.map((id, depth) => ({\n depth,\n exactCount: 0,\n id,\n name: byId[id]?.name || '',\n parentId: byId[id]?.parentId ?? null,\n path: buildFolderPath(id, byId),\n totalCount: 0,\n }))\n },\n)\n\ntype FoldersIndex = {\n byId: Record<string, FolderDoc>\n childrenByParentId: Record<string, string[]>\n rootIds: string[]\n exactCountByFolderId: Record<string, number>\n}\n\nconst selectFoldersIndex = createSelector(\n [selectById, selectChildrenByParentId, selectRootIds, selectExactCountByFolderId],\n (byId, childrenByParentId, rootIds, exactCountByFolderId): FoldersIndex => ({\n byId,\n childrenByParentId,\n rootIds,\n exactCountByFolderId,\n }),\n)\n\nexport const selectCurrentFolderChildren = createSelector(\n [selectFoldersIndex, selectCurrentFolderId, selectCurrentFolderUnfiled],\n (\n {byId, childrenByParentId, rootIds, exactCountByFolderId},\n currentFolderId,\n currentFolderUnfiled,\n ): FolderTreeItem[] => {\n if (currentFolderUnfiled || !currentFolderId) return []\n const ids = currentFolderId ? childrenByParentId[currentFolderId] || [] : rootIds\n const depth = currentFolderId ? buildFolderPath(currentFolderId, byId).split('/').length : 0\n return ids.map((id) => {\n const folder = byId[id]\n // Sum totalCount over the subtree.\n const stack = [id]\n let totalCount = 0\n while (stack.length) {\n const cur = stack.pop()!\n totalCount += exactCountByFolderId[cur] || 0\n const kids = childrenByParentId[cur]\n if (kids) stack.push(...kids)\n }\n return {\n depth,\n exactCount: exactCountByFolderId[id] || 0,\n id,\n name: folder?.name || '',\n parentId: folder?.parentId ?? null,\n path: buildFolderPath(id, byId),\n totalCount,\n }\n })\n },\n)\n\nexport const selectCanDeleteFolder = createSelector(\n [selectCurrentFolderId],\n (currentFolderId) => !!currentFolderId,\n)\n\nexport const foldersActions = {...foldersSlice.actions}\n\nexport default foldersSlice.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, MyEpic, Tag} from '../../types'\nimport {assetsActions} from '../assets'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {foldersActions} from '../folders'\nimport {tagsActions} from '../tags'\nimport {DIALOG_ACTIONS} from './actions'\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 extraReducers: (builder) => {\n builder\n .addCase(DIALOG_ACTIONS.showFolderCreate, (state, action) => {\n const {parentFolderId} = action.payload\n state.items.push({\n parentFolderId,\n id: 'folderCreate',\n type: 'folderCreate',\n })\n })\n .addCase(DIALOG_ACTIONS.showFolderMove, (state, action) => {\n const {assets, folderId} = action.payload\n state.items.push({\n assets,\n folderId,\n id: 'folderMove',\n type: 'folderMove',\n })\n })\n .addCase(DIALOG_ACTIONS.showFolderRename, (state, action) => {\n const {folderId} = action.payload\n state.items.push({\n folderId,\n id: 'folderRename',\n type: 'folderRename',\n })\n })\n .addCase(DIALOG_ACTIONS.showTagCreate, (state) => {\n state.items.push({\n id: 'tagCreate',\n type: 'tagCreate',\n })\n })\n .addCase(DIALOG_ACTIONS.showTagEdit, (state, action) => {\n const {tagId} = action.payload\n state.items.push({\n id: tagId,\n tagId,\n type: 'tagEdit',\n })\n })\n .addCase(foldersActions.createComplete, (state) => {\n state.items = state.items.filter((item) => item.id !== 'folderCreate')\n })\n .addCase(foldersActions.renameComplete, (state) => {\n state.items = state.items.filter((item) => item.id !== 'folderRename')\n })\n },\n reducers: {\n // Clear all dialogs\n clear(state) {\n state.items = []\n },\n // Add newly created inline tag to assetEdit dialog\n inlineTagCreate(state, action: PayloadAction<{assetId: string; tag: Tag}>) {\n const {assetId, tag} = action.payload\n\n state.items.forEach((item) => {\n if (item.type === 'assetEdit' && item.assetId === assetId) {\n item.lastCreatedTag = {\n label: tag.name.current,\n value: tag._id,\n }\n }\n })\n },\n // Remove inline tags from assetEdit dialog\n inlineTagRemove(state, action: PayloadAction<{tagIds: string[]}>) {\n const {tagIds} = action.payload\n\n state.items.forEach((item) => {\n if (item.type === 'assetEdit') {\n item.lastRemovedTagIds = tagIds\n }\n })\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 showConfirmAssetsTagAdd(\n state,\n action: PayloadAction<{\n assetsPicked: AssetItem[]\n closeDialogId?: string\n tag: Tag\n }>,\n ) {\n const {assetsPicked, closeDialogId, tag} = action.payload\n\n const suffix = `${assetsPicked.length} ${pluralize('asset', assetsPicked.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: ASSETS_ACTIONS.tagsAddRequest({\n assets: assetsPicked,\n tag,\n }),\n confirmText: `Yes, add tag to ${suffix}`,\n title: `Add tag ${tag.name.current} to ${suffix}?`,\n id: 'confirm',\n headerTitle: 'Confirm tag addition',\n tone: 'primary',\n type: 'confirm',\n })\n },\n showConfirmAssetsTagRemove(\n state,\n action: PayloadAction<{\n assetsPicked: AssetItem[]\n closeDialogId?: string\n tag: Tag\n }>,\n ) {\n const {assetsPicked, closeDialogId, tag} = action.payload\n\n const suffix = `${assetsPicked.length} ${pluralize('asset', assetsPicked.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: ASSETS_ACTIONS.tagsRemoveRequest({assets: assetsPicked, tag}),\n confirmText: `Yes, remove tag from ${suffix}`,\n headerTitle: 'Confirm tag removal',\n id: 'confirm',\n title: `Remove tag ${tag.name.current} from ${suffix}?`,\n tone: 'critical',\n type: 'confirm',\n })\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 showConfirmDeleteFolder(\n state,\n action: PayloadAction<{closeDialogId?: string; folderId: string; folderName: string}>,\n ) {\n const {closeDialogId, folderId, folderName} = action.payload\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: foldersActions.deleteRequest({folderId}),\n confirmText: `Yes, delete folder`,\n description:\n 'This deletes only the selected folder. Assets in this folder will stay in the library and have their folder assignment removed. Nested folders will move up one level.',\n title: `Delete ${folderName}?`,\n id: 'confirm',\n headerTitle: 'Confirm folder deletion',\n tone: 'critical',\n type: 'confirm',\n })\n },\n showConfirmDeleteTag(state, action: PayloadAction<{closeDialogId?: string; tag: Tag}>) {\n const {closeDialogId, tag} = action.payload\n\n const suffix = 'tag'\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: tagsActions.deleteRequest({tag}),\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 showAllAssetsDialog(state, action: PayloadAction<{assetId: string}>) {\n if (state.items.some((item) => item.type === 'dialogAllAssets')) {\n return\n }\n state.items.push({\n assetId: action.payload.assetId,\n id: 'dialogAllAssets',\n type: 'dialogAllAssets',\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 showSearchFacets(state) {\n state.items.push({\n id: 'searchFacets',\n type: 'searchFacets',\n })\n },\n showFolders(state) {\n state.items.push({\n id: 'folders',\n type: 'folders',\n })\n },\n showTags(state) {\n state.items.push({\n id: 'tags',\n type: 'tags',\n })\n },\n },\n})\n\n// Epics\n\nexport const dialogClearOnAssetUpdateEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.deleteComplete.type,\n assetsActions.folderSetComplete.type,\n assetsActions.updateComplete.type,\n tagsActions.deleteComplete.type,\n tagsActions.updateComplete.type,\n ),\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 dialogTagCreateEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.createComplete.match),\n mergeMap((action) => {\n const {assetId, tag} = action?.payload || {}\n\n if (assetId) {\n return of(dialogSlice.actions.inlineTagCreate({tag, assetId}))\n }\n\n if (tag._id) {\n return of(dialogSlice.actions.remove({id: 'tagCreate'}))\n }\n\n return EMPTY\n }),\n )\n\nexport const dialogTagDeleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.listenerDeleteQueueComplete.match),\n mergeMap((action) => {\n const {tagIds} = action?.payload || {}\n\n return of(dialogSlice.actions.inlineTagRemove({tagIds}))\n }),\n )\n\nexport const dialogActions = {...dialogSlice.actions}\n\nexport default dialogSlice.reducer\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\nconst 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\nexport default GlobalStyle\n","import {type PropsWithChildren, createContext, useContext, useMemo} from 'react'\nimport type {DropzoneOptions} from 'react-dropzone'\n\nimport type {MediaToolOptions, Locale} from '../types'\n\ntype ContextProps = {\n dropzone: Pick<DropzoneOptions, 'maxSize'>\n components: MediaToolOptions['components']\n createTagsOnUpload: boolean\n creditLine: MediaToolOptions['creditLine']\n directUploads: MediaToolOptions['directUploads']\n excludeTagSlugs: string[]\n locales?: Locale[]\n}\n\nconst ToolOptionsContext = createContext<ContextProps | null>(null)\n\ntype Props = {\n options?: MediaToolOptions | void\n}\n\nexport const ToolOptionsProvider = ({options, children}: PropsWithChildren<Props>) => {\n // oxlint-disable-next-line react-compiler\n const value = useMemo<ContextProps>(() => {\n let creditLineExcludeSources\n\n if (options?.creditLine?.excludeSources) {\n creditLineExcludeSources = Array.isArray(options?.creditLine?.excludeSources)\n ? options.creditLine.excludeSources\n : [options?.creditLine?.excludeSources]\n }\n\n return {\n dropzone: {maxSize: options?.maximumUploadSize},\n components: {\n details: options?.components?.details,\n },\n createTagsOnUpload: options?.createTagsOnUpload ?? true,\n creditLine: {\n enabled: options?.creditLine?.enabled || false,\n excludeSources: creditLineExcludeSources,\n },\n directUploads: options?.directUploads ?? true,\n excludeTagSlugs: options?.excludeTags?.length ? [...options.excludeTags] : [],\n locales: options?.locales,\n }\n }, [\n options?.creditLine?.enabled,\n options?.components,\n options?.createTagsOnUpload,\n options?.creditLine?.excludeSources,\n options?.excludeTags,\n options?.maximumUploadSize,\n options?.directUploads,\n options?.locales,\n ])\n\n return <ToolOptionsContext.Provider value={value}>{children}</ToolOptionsContext.Provider>\n}\n\nexport const useToolOptions = () => {\n const context = useContext(ToolOptionsContext)\n\n if (!context) {\n throw new Error('useToolOptions must be used within an ToolOptionsProvider')\n }\n\n return context\n}\n","import * as z from 'zod'\n\n// Helper to generate localized string schema\nfunction localizedStringSchema(locales?: {id: string}[]) {\n if (!locales || locales.length === 0) {\n return z.string().trim().optional()\n }\n const shape: Record<string, z.ZodTypeAny> = {}\n for (const locale of locales) {\n shape[locale.id] = z.string().trim().optional()\n }\n return z.object(shape).passthrough()\n}\n\nexport const tagOptionSchema = z.object({\n label: z.string().trim().min(1, {message: 'Label cannot be empty'}),\n value: z.string().trim().min(1, {message: 'Value cannot be empty'}),\n})\n\nexport function getAssetFormSchema(locales?: {id: string}[]) {\n return z.object({\n altText: localizedStringSchema(locales),\n creditLine: localizedStringSchema(locales),\n description: localizedStringSchema(locales),\n opt: z.object({\n media: z.object({\n tags: z.array(tagOptionSchema).nullable(),\n }),\n }),\n originalFilename: z.string().trim().min(1, {message: 'Filename cannot be empty'}),\n title: localizedStringSchema(locales),\n })\n}\n\nexport const assetFormSchema = getAssetFormSchema()\n\nexport const tagFormSchema = z.object({\n name: z.string().min(1, {message: 'Name cannot be empty'}),\n})\n\nexport const folderFormSchema = z.object({\n name: z.string().trim().min(1, {message: 'Name cannot be empty'}),\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 type {ImageAsset} from '../types'\n\nconst imageDprUrl = (\n asset: ImageAsset,\n options: {\n width: number\n height?: number\n },\n): string => {\n const dpi =\n typeof window === 'undefined' || !window.devicePixelRatio\n ? 1\n : Math.round(window.devicePixelRatio)\n const imgH = options?.height ? options?.height * Math.max(1, dpi) : undefined\n const imgW = options.width * Math.max(1, dpi)\n\n const urlParams = new URLSearchParams()\n urlParams.append('fit', 'max')\n urlParams.append('w', imgW.toString())\n if (imgH) {\n urlParams.append('h', imgH.toString())\n }\n\n return `${asset.url}?${urlParams.toString()}`\n}\n\nexport default imageDprUrl\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fleids\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n return Object.keys(formData).reduce((acc: FormData, key) => {\n const val = formData[key]\n\n // TODO: refactor\n if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n acc[key] = sanitizeFormData(val)\n } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n acc[key] = null\n } else if (typeof val === 'string' && val) {\n acc[key] = formData[key].trim()\n } else {\n acc[key] = formData[key]\n }\n\n return acc\n }, {})\n}\n\nexport default sanitizeFormData\n","import type {Asset, FileAsset, ImageAsset} from '../types'\n\nexport const isFileAsset = (asset: Asset): asset is FileAsset => {\n return (asset as FileAsset)._type === 'sanity.fileAsset'\n}\n\nexport const isImageAsset = (asset: Asset): asset is ImageAsset => {\n return (asset as ImageAsset)._type === 'sanity.imageAsset'\n}\n","import {zodResolver} from '@hookform/resolvers/zod'\nimport type {FieldValues, Resolver} from 'react-hook-form'\n\n/**\n * `@hookform/resolvers/zod` resolves its own `zod` typings through dependency\n * hoisting, which in this monorepo lands on zod v4, while this plugin authors its\n * form schemas with zod v3. The resolver accepts v3 schema instances correctly at\n * runtime, so this thin wrapper only bridges the type-only v3/v4 mismatch. The\n * react-hook-form field types stay fully checked at the call sites.\n */\nexport default function zodFormResolver<TFieldValues extends FieldValues>(\n schema: unknown,\n): Resolver<TFieldValues> {\n return zodResolver(\n schema as Parameters<typeof zodResolver>[0],\n ) as unknown as Resolver<TFieldValues>\n}\n","import type {ImageAsset} from '../types'\n\nconst getAssetResolution = (asset: ImageAsset) => {\n return `${asset.metadata.dimensions.width}x${asset.metadata.dimensions.height}px`\n}\n\nexport default getAssetResolution\n","import {type PopoverProps, usePortal} from '@sanity/ui'\n\nexport function usePortalPopoverProps(): PopoverProps {\n const portal = usePortal()\n\n return {\n animate: true,\n constrainSize: true,\n floatingBoundary: portal.element,\n portal: true,\n referenceBoundary: portal.element,\n }\n}\n","import {ClipboardIcon} from '@sanity/icons/Clipboard'\nimport {Button, Popover, Text} from '@sanity/ui'\nimport copy from 'copy-to-clipboard'\nimport {useEffect, useRef, useState} from 'react'\n\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\n\ntype Props = {\n disabled?: boolean\n url: string\n}\n\nconst ButtonAssetCopy = ({disabled, url}: Props) => {\n const popoverProps = usePortalPopoverProps()\n const refPopoverTimeout = useRef<ReturnType<typeof window.setTimeout>>(null)\n const [popoverVisible, setPopoverVisible] = useState(false)\n\n const handleClick = () => {\n if (refPopoverTimeout.current) {\n clearTimeout(refPopoverTimeout.current)\n }\n\n setPopoverVisible(true)\n copy(url)\n\n refPopoverTimeout.current = setTimeout(() => {\n setPopoverVisible(false)\n }, 1250)\n }\n\n // Effects\n useEffect(() => {\n return () => {\n if (refPopoverTimeout.current) {\n clearTimeout(refPopoverTimeout.current)\n }\n }\n }, [])\n\n return (\n <Popover\n content={\n <Text muted size={1}>\n Copied!\n </Text>\n }\n open={popoverVisible}\n padding={2}\n placement=\"top\"\n radius={1}\n {...popoverProps}\n >\n <Button\n disabled={disabled}\n fontSize={1}\n icon={ClipboardIcon}\n mode=\"ghost\"\n onClick={handleClick}\n text=\"Copy URL\"\n />\n </Popover>\n )\n}\n\nexport default ButtonAssetCopy\n","import {DownloadIcon} from '@sanity/icons/Download'\nimport {Box, Button, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport filesize from 'filesize'\nimport {type ReactNode} from 'react'\n\nimport type {Asset, AssetItem} from '../../types'\nimport getAssetResolution from '../../utils/getAssetResolution'\nimport {isImageAsset} from '../../utils/typeGuards'\nimport ButtonAssetCopy from '../ButtonAssetCopy'\n\ntype Props = {\n asset: Asset\n item?: AssetItem\n}\n\nconst Row = ({label, value}: {label: string; value: ReactNode}) => {\n return (\n <Flex justify=\"space-between\">\n <Text\n size={1}\n style={{\n opacity: 0.8,\n width: '40%',\n }}\n textOverflow=\"ellipsis\"\n >\n {label}\n </Text>\n <Text\n size={1}\n style={{\n opacity: 0.4,\n textAlign: 'right',\n width: '60%',\n }}\n textOverflow=\"ellipsis\"\n >\n {value}\n </Text>\n </Flex>\n )\n}\n\nconst AssetMetadata = (props: Props) => {\n const {asset, item} = props\n\n const exif = asset?.metadata?.exif\n\n // Callbacks\n const handleDownload = () => {\n window.location.href = `${asset.url}?dl=${asset.originalFilename}`\n }\n\n return (\n <Box marginTop={3}>\n {/* Base */}\n <Box>\n <Stack space={3}>\n <Row label=\"Size\" value={filesize(asset?.size, {base: 10, round: 0})} />\n <Row label=\"MIME type\" value={asset?.mimeType} />\n <Row label=\"Extension\" value={asset?.extension?.toUpperCase()} />\n {isImageAsset(asset) && <Row label=\"Dimensions\" value={getAssetResolution(asset)} />}\n </Stack>\n </Box>\n {/* EXIF */}\n {exif &&\n (exif.DateTimeOriginal ||\n exif.FNumber ||\n exif.FocalLength ||\n exif.ExposureTime ||\n exif.ISO) && (\n <>\n {/* Divider */}\n <Box\n marginY={4}\n style={{\n background: 'var(--card-border-color)',\n height: '1px',\n width: '100%',\n }}\n />\n <Box>\n <Stack space={3}>\n {exif.ISO && <Row label=\"ISO\" value={exif.ISO} />}\n {exif.FNumber && <Row label=\"Aperture\" value={`ƒ/${exif.FNumber}`} />}\n {exif.FocalLength && <Row label=\"Focal length\" value={`${exif.FocalLength}mm`} />}\n {exif.ExposureTime && (\n <Row label=\"Exposure time\" value={`1/${1 / exif.ExposureTime}`} />\n )}\n {exif.DateTimeOriginal && (\n <Row\n label=\"Original date\"\n value={format(new Date(exif.DateTimeOriginal), 'PPp')}\n />\n )}\n </Stack>\n </Box>\n </>\n )}\n\n {/* Asset actions */}\n <Box marginTop={5}>\n <Inline space={2}>\n {/* Download */}\n <Button\n disabled={!item || item?.updating}\n fontSize={1}\n icon={DownloadIcon}\n mode=\"ghost\"\n onClick={handleDownload}\n text=\"Download\"\n />\n {/* Copy to clipboard */}\n <ButtonAssetCopy disabled={!item || item?.updating} url={asset.url} />\n </Inline>\n </Box>\n </Box>\n )\n}\n\nexport default AssetMetadata\n","import {Dialog as SanityDialog} from '@sanity/ui'\nimport {type ComponentProps} from 'react'\n\nconst Dialog = (props: ComponentProps<typeof SanityDialog>) => {\n // HACK: Temporarily force fixed positioning on all @sanity/ui <Dialog /> components.\n // The studio is currently setting absolute positioning on all root-level dialogs on the mobile breakpoint,\n // causing unwanted scroll behaviour.\n return <SanityDialog {...props} style={{position: 'fixed'}} />\n}\n\nexport default Dialog\n","import type {SanityDocument} from '@sanity/client'\nimport {Box, Button, Card, Stack, Text} from '@sanity/ui'\nimport {Preview, type SchemaType, useSchema} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\ntype Props = {\n documents: SanityDocument[]\n isLoading: boolean\n}\n\nconst DocumentList = ({documents, isLoading}: Props) => {\n const schema = useSchema()\n\n if (isLoading) {\n return (\n <Text muted size={1}>\n Loading...\n </Text>\n )\n }\n\n if (documents.length === 0) {\n return (\n <Text muted size={1}>\n No documents are referencing this asset\n </Text>\n )\n }\n\n return (\n <Card flex={1} marginBottom={2} padding={2} radius={2} shadow={1}>\n <Stack space={2}>\n {documents?.map((doc) => (\n <ReferringDocument doc={doc} key={doc._id} schemaType={schema.get(doc._type)} />\n ))}\n </Stack>\n </Card>\n )\n}\n\nconst ReferringDocument = (props: {doc: SanityDocument; schemaType?: SchemaType}) => {\n const {doc, schemaType} = props\n\n const {onClick} = useIntentLink({\n intent: 'edit',\n params: {id: doc._id},\n })\n\n return schemaType ? (\n <Button key={doc._id} mode=\"bleed\" onClick={onClick} padding={2} style={{width: '100%'}}>\n <Preview layout=\"default\" schemaType={schemaType} value={doc} />\n </Button>\n ) : (\n <Box padding={2}>\n <Text size={1}>\n A document of the unknown type <em>{doc._type}</em>\n </Text>\n </Box>\n )\n}\n\nexport default DocumentList\n","import {Box, Flex, type Theme} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {defaultStyles, FileIcon as ReactFileIcon} from 'react-file-icon'\nimport type {DefaultExtensionType} from 'react-file-icon'\nimport {styled, css} from 'styled-components'\n\ntype Props = {\n extension?: string\n onClick?: (e: MouseEvent) => void\n width: string\n}\n\n// Force react-file-icon styles\nconst Container = styled(Box)(({theme}: {theme: Theme}) => {\n return css`\n text {\n font-family: ${theme.sanity.fonts.text.family} !important;\n font-size: 8px !important;\n font-weight: 500 !important;\n }\n `\n})\n\nconst FileIcon = (props: Props) => {\n const {extension, onClick, width} = props\n\n return (\n <Flex align=\"center\" justify=\"center\" onClick={onClick} style={{height: '100%'}}>\n <Container style={{width}}>\n {extension ? (\n <ReactFileIcon\n extension={extension}\n {...defaultStyles[extension as DefaultExtensionType]}\n />\n ) : (\n <ReactFileIcon />\n )}\n </Container>\n </Flex>\n )\n}\n\nexport default FileIcon\n","import {Flex} from '@sanity/ui'\n\nimport type {Asset} from '../../types'\nimport FileIcon from '../FileIcon'\n\ntype Props = {\n asset: Asset\n}\n\nconst FileAssetPreview = (props: Props) => {\n const {asset} = props\n\n if (asset.mimeType.search('audio') === 0) {\n return (\n <Flex align=\"center\" justify=\"center\" style={{height: '100%'}}>\n <audio controls src={asset.url} style={{width: '100%'}} />\n </Flex>\n )\n }\n\n if (asset.mimeType.search('video') === 0) {\n return (\n <video\n controls\n src={asset.url}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n )\n }\n\n return <FileIcon extension={asset.extension} width=\"50%\" />\n}\n\nexport default FileAssetPreview\n","import {Box, Button, Text, Tooltip} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport {type ReactNode} from 'react'\n\ntype Props = {\n disabled: boolean\n isValid: boolean\n lastUpdated?: string\n onClick: () => void\n}\n\nconst FormSubmitButton = (props: Props) => {\n const {disabled, isValid, lastUpdated, onClick} = props\n\n let content: ReactNode\n if (isValid) {\n if (lastUpdated) {\n content = (\n <>\n Last updated\n <br /> {format(new Date(lastUpdated), 'PPp')}\n </>\n )\n } else {\n content = 'No unpublished changes'\n }\n } else {\n content =\n 'There are validation errors that need to be fixed before this document can be published'\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={3} style={{maxWidth: '185px'}}>\n <Text muted size={1}>\n {content}\n </Text>\n </Box>\n }\n disabled={'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Box>\n <Button\n disabled={disabled}\n fontSize={1}\n onClick={onClick}\n text=\"Save and close\"\n tone=\"primary\"\n />\n </Box>\n </Tooltip>\n )\n}\n\nexport default FormSubmitButton\n","import {hues} from '@sanity/color'\nimport {type ThemeColorSchemeKey, studioTheme} 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 {ThemeColorSchemeKey} from '@sanity/ui'\nimport type {MouseEvent} from 'react'\nimport {styled, css} from 'styled-components'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n onClick?: (e: MouseEvent) => void\n $showCheckerboard?: boolean\n $scheme?: ThemeColorSchemeKey\n src: string\n style?: any\n}\n\nconst Image = styled.img.attrs({crossOrigin: 'anonymous' as const})<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\nexport default Image\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text, Tooltip} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\ntype Props = {\n description?: string\n error?: string\n label: string\n name: string\n}\n\nconst StyledErrorOutlineIcon = styled(ErrorOutlineIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst FormFieldInputLabel = (props: Props) => {\n const {description, error, label, name} = props\n\n return (\n <>\n {/* Label */}\n <Box marginY={3}>\n <Inline space={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <StyledErrorOutlineIcon style={{marginRight: '0.1em'}} />\n {error}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <StyledErrorOutlineIcon />\n </Tooltip>\n </Text>\n )}\n </Inline>\n </Box>\n\n {/* Description */}\n {description && (\n <Box marginY={3}>\n <Text as=\"label\" htmlFor={name} muted size={1}>\n {description}\n </Text>\n </Box>\n )}\n </>\n )\n}\n\nexport default FormFieldInputLabel\n","import {AddIcon} from '@sanity/icons/Add'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Card, Flex, rem, studioTheme, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {components, type StylesConfig} from 'react-select'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\nconst {radius: themeRadius, space: themeSpace} = studioTheme\n\nexport const reactSelectStyles = (scheme: ThemeColorSchemeKey): StylesConfig => {\n return {\n control: (styles, {isFocused}) => {\n let boxShadow = `inset 0 0 0 1px var(--card-border-color)`\n if (isFocused) {\n boxShadow = `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputEnabledBorder')},\n 0 0 0 1px var(--card-bg-color),\n 0 0 0 3px var(--card-focus-ring-color) !important`\n }\n\n return {\n ...styles,\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'inherit',\n 'border': 'none',\n 'borderRadius': themeRadius[1],\n boxShadow,\n 'margin': 0,\n 'minHeight': '35px',\n 'outline': 'none',\n 'padding': rem(themeSpace[1]!),\n 'transition': 'none',\n '&:hover': {\n boxShadow: `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputHoveredBorder')}`,\n },\n }\n },\n indicatorsContainer: (styles, {isDisabled}) => ({\n ...styles,\n opacity: isDisabled ? 0.25 : 1,\n }),\n input: (styles) => ({\n ...styles,\n color: 'var(--card-fg-color)',\n fontFamily: studioTheme.fonts.text.family,\n marginLeft: rem(themeSpace[2]!),\n }),\n menuList: (styles) => ({\n ...styles,\n }),\n multiValue: (styles, {isDisabled}) => ({\n ...styles,\n backgroundColor: getSchemeColor(scheme, 'mutedHoveredBg'),\n borderRadius: themeRadius[2],\n opacity: isDisabled ? 0.5 : 1,\n }),\n multiValueLabel: () => ({\n color: getSchemeColor(scheme, 'mutedHoveredFg'),\n fontSize: 'inherit',\n padding: 0,\n }),\n multiValueRemove: (styles) => ({\n ...styles,\n 'borderTopLeftRadius': 0,\n 'borderBottomLeftRadius': 0,\n 'svg': {color: getSchemeColor(scheme, 'mutedHoveredFg')},\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'mutedSelectedBg'),\n },\n }),\n noOptionsMessage: (styles) => ({\n ...styles,\n fontFamily: studioTheme.fonts.text.family,\n lineHeight: '1em',\n }),\n option: (styles, {isFocused}) => ({\n ...styles,\n 'backgroundColor': isFocused ? getSchemeColor(scheme, 'spotBlue') : 'transparent',\n 'borderRadius': themeRadius[2],\n 'color': isFocused ? getSchemeColor(scheme, 'bg') : 'inherit',\n 'padding': `${rem(themeSpace[1]!)} ${rem(themeSpace[2]!)}`,\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'spotBlue'),\n color: getSchemeColor(scheme, 'bg'),\n },\n }),\n placeholder: (styles) => ({\n ...styles,\n marginLeft: rem(themeSpace[2]!),\n }),\n valueContainer: (styles) => ({\n ...styles,\n margin: 0,\n padding: 0,\n }),\n }\n}\n\nconst DropdownIndicator = (props: any) => {\n return (\n <components.DropdownIndicator {...props}>\n <Box paddingX={2}>\n <Text size={1}>\n <ChevronDownIcon />\n </Text>\n </Box>\n </components.DropdownIndicator>\n )\n}\n\nconst Menu = (props: any) => {\n return (\n <components.Menu {...props}>\n <Card radius={1} shadow={2}>\n {props.children}\n </Card>\n </components.Menu>\n )\n}\n\nconst MenuList = (props: any) => {\n const {children} = props\n\n const MAX_ROWS = 5\n const OPTION_HEIGHT = 37\n\n if (Array.isArray(children)) {\n const height =\n children.length > MAX_ROWS ? OPTION_HEIGHT * MAX_ROWS : children.length * OPTION_HEIGHT\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n itemContent={(index) => {\n const item = children[index]\n return <Option {...item.props} />\n }}\n style={{height}}\n totalCount={children.length}\n />\n )\n }\n return <components.MenuList {...props}>{children}</components.MenuList>\n}\n\nconst MultiValueLabel = (props: any) => {\n return (\n <Box padding={2} paddingRight={1}>\n <Text size={1} weight=\"medium\">\n <components.MultiValueLabel {...props} />\n </Text>\n </Box>\n )\n}\n\nconst MultiValueRemove = (props: any) => {\n return (\n <components.MultiValueRemove {...props}>\n <CloseIcon color=\"#1f2123\" />\n </components.MultiValueRemove>\n )\n}\n\nconst Option = (props: any) => {\n return (\n <Box paddingX={1} paddingY={1}>\n <components.Option {...props}>\n <Flex align=\"center\">\n {props.data.__isNew__ && <AddIcon style={{marginRight: '3px'}} />}\n {props.children}\n </Flex>\n </components.Option>\n </Box>\n )\n}\n\nexport const reactSelectComponents = {\n DropdownIndicator,\n IndicatorSeparator: null,\n Menu,\n MenuList,\n MultiValueLabel,\n MultiValueRemove,\n Option,\n}\n","import {Box} from '@sanity/ui'\nimport {Controller} from 'react-hook-form'\nimport CreatableSelect from 'react-select/creatable'\nimport {useColorSchemeValue} from 'sanity'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {reactSelectComponents, reactSelectStyles} from '../../styled/react-select/creatable'\nimport type {TagSelectOption} from '../../types'\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n control: any\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onCreateTag: (tagName: string) => void\n options: {\n label: string\n value: string\n }[]\n placeholder?: string\n value?: TagSelectOption[] | null\n}\n\nconst FormFieldInputTags = (props: Props) => {\n const {\n control,\n description,\n disabled,\n error,\n label,\n name,\n onCreateTag,\n options,\n placeholder,\n value,\n } = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const creating = useTypedSelector((state) => state.tags.creating)\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n\n return (\n <Box\n // HACK: force stacking context to ensure react-select dropdown sits above other fields\n style={{zIndex: 2}}\n >\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n\n {/* Select */}\n <Controller\n control={control}\n defaultValue={value}\n name={name}\n render={({field}) => {\n const {onBlur, onChange, value: controllerValue} = field\n // TODO: investigate overriding `onChange` and updating form state manually.\n // `opt.media.tags` is initialised with `null` as a defaultValue in react-hook-form\n // Ideally, we'd be able to set `opt.media.tags` as null when all items are cleared, rather than\n // setting it to an empty array (which is currently causing false positives in denoting whether the form is dirty)\n //\n // To illustrate this issue:\n // - Edit an asset with no tags\n // - Add a new tag (either an existing one, or create one inline)\n // - Remove the tag you've just created\n //\n // At this point, the form will still be marked as dirty when it shouldnt be\n return (\n <CreatableSelect\n components={reactSelectComponents}\n instanceId=\"tags\"\n isClearable={false} // TODO: re-enable when we're able to correctly (manually) re-validate on clear\n isDisabled={creating || disabled || tagsFetching}\n isLoading={creating}\n isMulti\n name={name}\n noOptionsMessage={() => 'No tags'}\n onBlur={onBlur}\n onChange={onChange}\n onCreateOption={onCreateTag}\n options={options}\n placeholder={tagsFetching ? 'Loading...' : placeholder}\n styles={reactSelectStyles(scheme)}\n value={controllerValue}\n />\n )\n }}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputTags\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onBlur?: FocusEventHandler<HTMLInputElement>\n onChange?: ChangeEventHandler<HTMLInputElement>\n placeholder?: string\n value?: string\n ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n const {\n description,\n disabled,\n error,\n label,\n name,\n onBlur,\n onChange,\n placeholder,\n value,\n ref,\n ...rest\n } = props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n {/* Input */}\n <TextInput\n {...rest}\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n ref={ref}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputText\n","import {Box, TextArea} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onBlur?: FocusEventHandler<HTMLTextAreaElement>\n onChange?: ChangeEventHandler<HTMLTextAreaElement>\n placeholder?: string\n rows?: number\n value?: string\n ref?: Ref<HTMLTextAreaElement>\n}\n\nconst FormFieldInputTextarea = (props: Props) => {\n const {\n description,\n disabled,\n error,\n label,\n name,\n onBlur,\n onChange,\n placeholder,\n rows,\n value,\n ref,\n ...rest\n } = props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n\n {/* Input */}\n <TextArea\n {...rest}\n autoComplete=\"off\"\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n ref={ref}\n rows={rows}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputTextarea\n","import {FolderIcon} from '@sanity/icons/Folder'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Card, Flex, Stack, Tab, TabList, TabPanel, Text} from '@sanity/ui'\nimport {useState} from 'react'\nimport {type Control, type FieldErrors, type UseFormRegister} from 'react-hook-form'\n\nimport type {Asset, AssetFormData, Locale, TagSelectOption} from '../../types'\nimport FormFieldInputLabel from '../FormFieldInputLabel'\nimport FormFieldInputTags from '../FormFieldInputTags'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormFieldInputTextarea from '../FormFieldInputTextarea'\n\ntype LocalizedErrors = Record<string, {message?: string} | undefined>\n\n// When locales are not configured, extract a plain string from a potentially localized field\nfunction toStringField(value: unknown): string | undefined {\n if (typeof value === 'string') return value\n if (typeof value === 'object' && value !== null) {\n const found = Object.values(value as Record<string, string>).find((v) => v)\n return found || undefined\n }\n return undefined\n}\n\nfunction truncateFolderPath(path?: string): string | undefined {\n const segments = path?.split('/').filter(Boolean)\n if (!segments || segments.length <= 3) return path\n return [segments[0], '...', ...segments.slice(-2)].join('/')\n}\n\nexport type DetailsProps = {\n formUpdating: boolean\n handleCreateTag: (title: string) => void\n control: Control<AssetFormData>\n errors: FieldErrors<AssetFormData>\n register: UseFormRegister<AssetFormData>\n allTagOptions: TagSelectOption[]\n assetTagOptions: TagSelectOption[] | null\n currentAsset: Asset\n folderPath?: string\n folderMissing?: boolean\n onChangeFolder: () => void\n onRemoveFolder: () => void\n creditLine?: {\n enabled: boolean\n excludeSources?: string | string[] | undefined\n }\n locales?: Locale[]\n}\n\nexport default function Details({\n formUpdating,\n handleCreateTag,\n control,\n errors,\n register,\n allTagOptions,\n assetTagOptions,\n currentAsset,\n folderPath,\n folderMissing,\n onChangeFolder,\n onRemoveFolder,\n creditLine,\n locales,\n}: DetailsProps) {\n 'use no memo'\n // React Compiler memoizes the register() field JSX using asset-derived deps only.\n // That can leave Save stuck disabled while the DOM still updates (uncontrolled inputs).\n // Tags work because they use Controller; string fields use register and need this opt-out.\n\n const hasLocales = locales && locales.length > 0\n const [activeLocaleTab, setActiveLocaleTab] = useState(0)\n const folderId = currentAsset?.opt?.media?.folder?._ref\n const folderLabel =\n truncateFolderPath(folderPath) || (folderMissing ? 'Folder no longer exists' : 'No folder')\n\n return (\n <Stack space={3}>\n {/* Tags */}\n <FormFieldInputTags\n control={control}\n disabled={formUpdating}\n error={errors?.opt?.media?.tags?.message}\n label=\"Tags\"\n name=\"opt.media.tags\"\n onCreateTag={handleCreateTag}\n options={allTagOptions}\n placeholder=\"Select or create...\"\n value={assetTagOptions}\n />\n {/* Folder */}\n <Box>\n <FormFieldInputLabel label=\"Folder\" name=\"folder\" />\n <Card border padding={2} radius={2}>\n <Flex align=\"center\" gap={3} justify=\"space-between\">\n <Flex\n align=\"center\"\n gap={2}\n flex={1}\n style={{minWidth: 0, overflowX: 'auto', whiteSpace: 'nowrap', overflowY: 'hidden'}}\n >\n <FolderIcon />\n <Text muted={!folderId} size={1}>\n {folderLabel}\n </Text>\n </Flex>\n {folderId && (\n <Button\n aria-label=\"Remove from folder\"\n disabled={formUpdating}\n fontSize={1}\n icon={TrashIcon}\n mode=\"bleed\"\n onClick={onRemoveFolder}\n padding={2}\n tone=\"critical\"\n type=\"button\"\n />\n )}\n <Button\n padding={2}\n disabled={formUpdating}\n fontSize={1}\n mode=\"ghost\"\n onClick={onChangeFolder}\n text={folderId ? 'Change folder' : 'Add to folder'}\n type=\"button\"\n />\n </Flex>\n </Card>\n </Box>\n {/* Filename */}\n <FormFieldInputText\n {...register('originalFilename')}\n disabled={formUpdating}\n error={errors?.originalFilename?.message}\n label=\"Filename\"\n name=\"originalFilename\"\n value={currentAsset?.originalFilename}\n />\n {/* Localized fields grouped by language */}\n {hasLocales ? (\n <Card marginTop={2} shadow={1} padding={3} radius={1}>\n <Stack space={2}>\n <TabList space={2}>\n {locales.map((locale, idx) => (\n <Tab\n key={locale.id}\n id={`locale-tab-${locale.id}`}\n aria-controls={`locale-panel-${locale.id}`}\n selected={activeLocaleTab === idx}\n onClick={() => setActiveLocaleTab(idx)}\n label={locale.title}\n />\n ))}\n </TabList>\n {locales.map((locale, idx) => (\n <TabPanel\n key={locale.id}\n id={`locale-panel-${locale.id}`}\n aria-labelledby={`locale-tab-${locale.id}`}\n hidden={activeLocaleTab !== idx}\n >\n <Stack space={3}>\n <FormFieldInputText\n {...register(`title.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.title as LocalizedErrors)?.[locale.id]?.message}\n label=\"Title\"\n name={`title.${locale.id}`}\n />\n <FormFieldInputText\n {...register(`altText.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.altText as LocalizedErrors)?.[locale.id]?.message}\n label=\"Alt Text\"\n name={`altText.${locale.id}`}\n />\n <FormFieldInputTextarea\n {...register(`description.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.description as LocalizedErrors)?.[locale.id]?.message}\n label=\"Description\"\n name={`description.${locale.id}`}\n rows={5}\n />\n {creditLine?.enabled && (\n <FormFieldInputText\n {...register(`creditLine.${locale.id}` as const)}\n error={(errors?.creditLine as LocalizedErrors)?.[locale.id]?.message}\n label=\"Credit\"\n name={`creditLine.${locale.id}`}\n disabled={\n formUpdating ||\n creditLine?.excludeSources?.includes(currentAsset?.['source']?.name)\n }\n />\n )}\n </Stack>\n </TabPanel>\n ))}\n </Stack>\n </Card>\n ) : (\n <>\n <FormFieldInputText\n {...register('title')}\n disabled={formUpdating}\n error={errors?.title?.message}\n label=\"Title\"\n name=\"title\"\n value={toStringField(currentAsset?.title)}\n />\n <FormFieldInputText\n {...register('altText')}\n disabled={formUpdating}\n error={errors?.altText?.message}\n label=\"Alt Text\"\n name=\"altText\"\n value={toStringField(currentAsset?.altText)}\n />\n <FormFieldInputTextarea\n {...register('description')}\n disabled={formUpdating}\n error={errors?.description?.message}\n label=\"Description\"\n name=\"description\"\n rows={5}\n />\n {creditLine?.enabled && (\n <FormFieldInputText\n {...register('creditLine')}\n error={errors?.creditLine?.message}\n label=\"Credit\"\n name=\"creditLine\"\n value={toStringField(currentAsset?.creditLine)}\n disabled={\n formUpdating || creditLine?.excludeSources?.includes(currentAsset?.['source']?.name)\n }\n />\n )}\n </>\n )}\n </Stack>\n )\n}\n","import type {MutationEvent} from '@sanity/client'\nimport {Box, Button, Card, Flex, Stack, Tab, TabList, TabPanel, Text} from '@sanity/ui'\nimport groq from 'groq'\nimport {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SubmitHandler, useForm, useFormState} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\nimport {WithReferringDocuments, useColorSchemeValue, useDocumentStore} from 'sanity'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {getAssetFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {assetsActions, selectAssetById} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {selectFolderPathById} from '../../modules/folders'\nimport {selectTags, selectTagSelectOptions, tagsActions} from '../../modules/tags'\nimport type {Asset, AssetFormData, DialogAssetEditProps, TagSelectOption} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport {getUniqueDocuments} from '../../utils/getUniqueDocuments'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport AssetMetadata from '../AssetMetadata'\nimport Dialog from '../Dialog'\nimport DocumentList from '../DocumentList'\nimport FileAssetPreview from '../FileAssetPreview'\nimport FormSubmitButton from '../FormSubmitButton'\nimport Image from '../Image'\nimport Details, {type DetailsProps} from './Details'\n\nfunction renderDefaultDetails(props: DetailsProps) {\n return <Details {...props} />\n}\n\ntype Props = {\n children: ReactNode\n dialog: DialogAssetEditProps\n}\n\nconst DialogAssetEdit = (props: Props) => {\n const {\n children,\n dialog: {assetId, id, lastCreatedTag, lastRemovedTagIds},\n } = props\n\n const client = useVersionedClient()\n const scheme = useColorSchemeValue()\n\n const documentStore = useDocumentStore()\n\n const dispatch = useDispatch()\n const assetItem = useTypedSelector((state) => selectAssetById(state, String(assetId))) // TODO: check casting\n const tags = useTypedSelector(selectTags)\n\n const assetUpdatedPrev = useRef<string | undefined>(undefined)\n\n // Generate a snapshot of the current asset\n const [assetSnapshot, setAssetSnapshot] = useState(assetItem?.asset)\n const [tabSection, setTabSection] = useState<'details' | 'references'>('details')\n\n const currentAsset = assetItem ? assetItem?.asset : assetSnapshot\n const allTagOptions = getTagSelectOptions(tags)\n\n const assetTagOptions = useTypedSelector(selectTagSelectOptions(currentAsset))\n const currentFolderId = currentAsset?.opt?.media?.folder?._ref ?? null\n const currentFolderPath = useTypedSelector((state) =>\n selectFolderPathById(state, currentFolderId),\n )\n\n // Check if credit line options are configured\n const {creditLine, components: {details: CustomDetails} = {}, locales} = useToolOptions()\n\n const generateDefaultValues = useCallback(\n (asset?: Asset): AssetFormData => {\n let imageDescription: string | undefined\n if (asset && isImageAsset(asset)) {\n const raw = asset.metadata?.image?.['ImageDescription']\n if (typeof raw === 'string') {\n imageDescription = raw\n }\n }\n\n if (locales && locales.length > 0) {\n const makeLocaleObj = (field?: Record<string, string> | string, fallback = '') => {\n const obj: Record<string, string> = {}\n for (let i = 0; i < locales.length; i++) {\n const locale = locales[i]!\n // Prefer key presence over truthiness so an intentional empty string\n // (e.g. `{en: ''}`) is preserved and does not fall through to EXIF.\n if (typeof field === 'object' && field && locale.id in field) {\n obj[locale.id] = field[locale.id] ?? ''\n } else if (typeof field === 'string') {\n // Only populate the first locale to avoid spreading a legacy value\n // across all languages; the user should fill in other translations manually\n obj[locale.id] = i === 0 ? field : ''\n } else if (typeof field === 'object' && field) {\n // Localized object present but this locale key is missing: leave empty.\n // Do not apply EXIF fallback to partial translations.\n obj[locale.id] = ''\n } else {\n // No description set at all — EXIF fallback only for the first locale.\n obj[locale.id] = i === 0 ? fallback : ''\n }\n }\n return obj\n }\n return {\n altText: makeLocaleObj(asset?.altText),\n creditLine: makeLocaleObj(asset?.creditLine),\n description: makeLocaleObj(asset?.description, imageDescription),\n originalFilename: asset?.originalFilename || '',\n opt: {media: {tags: assetTagOptions}},\n title: makeLocaleObj(asset?.title),\n }\n }\n // Normalize: if a field is a localized object but locales are disabled, pick first non-empty value\n const flattenField = (field: unknown, fallback = ''): string => {\n if (typeof field === 'string') return field\n if (typeof field === 'object' && field !== null) {\n const values = Object.values(field as Record<string, string>)\n return values.find((v) => v) || fallback\n }\n return fallback\n }\n return {\n altText: flattenField(asset?.altText),\n creditLine: flattenField(asset?.creditLine),\n description: flattenField(asset?.description, imageDescription),\n originalFilename: asset?.originalFilename || '',\n opt: {media: {tags: assetTagOptions}},\n title: flattenField(asset?.title),\n }\n },\n [assetTagOptions, locales],\n )\n\n const {control, getValues, handleSubmit, register, reset, setValue} = useForm<AssetFormData>({\n defaultValues: generateDefaultValues(assetItem?.asset),\n mode: 'onChange',\n resolver: zodFormResolver<AssetFormData>(getAssetFormSchema(locales)),\n })\n\n // Subscribe via useFormState so React Compiler cannot skip formState Proxy reads\n // that gate the Save button (isDirty / isValid).\n const {errors, isDirty, isValid} = useFormState({control})\n\n const formUpdating = !assetItem || assetItem?.updating\n\n const handleClose = useCallback(() => {\n dispatch(dialogActions.remove({id}))\n }, [dispatch, id])\n\n const handleDelete = useCallback(() => {\n if (!assetItem?.asset) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteAssets({\n assets: [assetItem],\n closeDialogId: assetItem?.asset._id,\n }),\n )\n }, [assetItem, dispatch])\n\n const handleAssetUpdate = useCallback((update: MutationEvent) => {\n const {result, transition} = update\n if (result && transition === 'update') {\n // Regenerate asset snapshot\n setAssetSnapshot(result as Asset)\n }\n }, [])\n\n const handleCreateTag = useCallback(\n (tagName: string) => {\n // Dispatch action to create new tag\n dispatch(\n tagsActions.createRequest({\n assetId: currentAsset?._id,\n name: tagName,\n }),\n )\n },\n [currentAsset?._id, dispatch],\n )\n\n const handleChangeFolder = useCallback(() => {\n if (!assetItem) {\n return\n }\n\n dispatch(DIALOG_ACTIONS.showFolderMove({assets: [assetItem], folderId: currentFolderId}))\n }, [assetItem, currentFolderId, dispatch])\n\n const handleRemoveFolder = useCallback(() => {\n if (!assetItem || !currentFolderId) {\n return\n }\n\n dispatch(assetsActions.folderSetRequest({assets: [assetItem], folderId: null}))\n }, [assetItem, currentFolderId, dispatch])\n\n // Detect if asset has localized fields (objects) with keys not in the configured locales\n const hasOrphanedLocales = useMemo(() => {\n if (!currentAsset) return false\n const isLocaleObj = (v: unknown) => typeof v === 'object' && v !== null && !Array.isArray(v)\n const fields = [\n currentAsset.title,\n currentAsset.altText,\n currentAsset.description,\n ...(currentAsset._type === 'sanity.imageAsset' ? [currentAsset.creditLine] : []),\n ]\n const anyLocalized = fields.some((f) => isLocaleObj(f))\n if (!anyLocalized) return false\n if (!locales || locales.length === 0) return true\n const configuredIds = new Set(locales.map((l) => l.id))\n return fields.some((f) => {\n if (!isLocaleObj(f)) return false\n return Object.keys(f as object).some((k) => !configuredIds.has(k))\n })\n }, [currentAsset, locales])\n\n const handleCleanupLocales = useCallback(async () => {\n if (!currentAsset) return\n\n const cleanField = (field: unknown): unknown => {\n if (typeof field !== 'object' || field === null || Array.isArray(field)) return field\n const obj = field as Record<string, string>\n if (!locales || locales.length === 0) {\n // Pick the first non-empty value sorted by key for determinism\n const sorted = Object.keys(obj).sort()\n return sorted.map((k) => obj[k]).find((v) => v) || ''\n }\n const configuredIds = new Set(locales.map((l) => l.id))\n const cleaned: Record<string, string> = {}\n for (const [key, val] of Object.entries(obj)) {\n if (configuredIds.has(key)) cleaned[key] = val\n }\n return cleaned\n }\n\n await client\n .patch(currentAsset._id)\n .set({\n title: cleanField(currentAsset.title),\n altText: cleanField(currentAsset.altText),\n description: cleanField(currentAsset.description),\n ...(currentAsset._type === 'sanity.imageAsset' && {\n creditLine: cleanField(currentAsset.creditLine),\n }),\n })\n .commit()\n }, [client, currentAsset, locales])\n\n // Submit react-hook-form\n const onSubmit: SubmitHandler<AssetFormData> = useCallback(\n (formData) => {\n if (!assetItem?.asset) {\n return\n }\n\n const sanitizedFormData = sanitizeFormData(formData)\n\n // Keep an intentionally cleared description as '' (not null) so the EXIF\n // ImageDescription fallback does not refill it the next time the dialog opens.\n if (formData.description === '') {\n sanitizedFormData['description'] = ''\n }\n\n dispatch(\n assetsActions.updateRequest({\n asset: assetItem?.asset,\n closeDialogId: assetItem?.asset._id,\n formData: {\n ...sanitizedFormData,\n // Map tags to sanity references\n opt: {\n media: {\n ...sanitizedFormData['opt'].media,\n tags:\n sanitizedFormData['opt'].media.tags?.map((tag: TagSelectOption) => ({\n _ref: tag.value,\n _type: 'reference',\n _weak: true,\n })) || null,\n },\n },\n },\n }),\n )\n },\n [assetItem?.asset, dispatch],\n )\n\n // Listen for asset mutations and update snapshot\n useEffect(() => {\n if (!assetItem?.asset) {\n return undefined\n }\n\n // Remember that Sanity listeners ignore joins, order clauses and projections\n const subscriptionAsset = client\n .listen(groq`*[_id == $id]`, {id: assetItem?.asset._id})\n .subscribe(handleAssetUpdate)\n\n return () => {\n subscriptionAsset?.unsubscribe()\n }\n }, [assetItem?.asset, client, handleAssetUpdate])\n\n // Update tags form field (react-select) when a new _inline_ tag has been created\n useEffect(() => {\n if (lastCreatedTag) {\n const existingTags = (getValues('opt.media.tags') as TagSelectOption[]) || []\n const updatedTags = existingTags.concat([lastCreatedTag])\n setValue('opt.media.tags', updatedTags, {shouldDirty: true})\n }\n }, [getValues, lastCreatedTag, setValue])\n\n // Update tags form field (react-select) when an _inline_ tag has been removed elsewhere\n useEffect(() => {\n if (lastRemovedTagIds) {\n const existingTags = (getValues('opt.media.tags') as TagSelectOption[]) || []\n const updatedTags = existingTags.filter((tag) => {\n return !lastRemovedTagIds.includes(tag.value)\n })\n\n setValue('opt.media.tags', updatedTags, {shouldDirty: true})\n }\n }, [getValues, lastRemovedTagIds, setValue])\n\n // Reset react-hook-form local state on mount and every time the asset has been updated elsewhere\n useEffect(() => {\n if (assetUpdatedPrev.current !== assetItem?.asset._updatedAt) {\n reset(generateDefaultValues(assetItem?.asset))\n }\n assetUpdatedPrev.current = assetItem?.asset._updatedAt\n }, [assetItem?.asset, generateDefaultValues, reset])\n\n const footer = (\n <Box padding={3}>\n <Stack space={3}>\n {hasOrphanedLocales && (\n <Card padding={3} radius={2} shadow={1} tone=\"caution\">\n <Flex align=\"center\" justify=\"space-between\" gap={3}>\n <Text size={1}>\n This asset has localized fields that are no longer configured. Clean them up to\n avoid validation errors.\n </Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleCleanupLocales}\n text=\"Cleanup localized fields\"\n tone=\"caution\"\n />\n </Flex>\n </Card>\n )}\n <Flex justify=\"space-between\">\n {/* Delete button */}\n <Button\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid || hasOrphanedLocales}\n isValid={isValid}\n lastUpdated={currentAsset?._updatedAt}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Stack>\n </Box>\n )\n\n if (!currentAsset) {\n return null\n }\n\n const detailsProps = {\n control,\n errors,\n formUpdating,\n register,\n setValue,\n assetTagOptions,\n allTagOptions,\n handleCreateTag,\n currentAsset,\n folderPath: currentFolderPath,\n folderMissing: !!currentFolderId && !currentFolderPath,\n onChangeFolder: handleChangeFolder,\n onRemoveFolder: handleRemoveFolder,\n creditLine,\n locales,\n }\n\n return (\n <Dialog animate footer={footer} header=\"Asset details\" id={id} onClose={handleClose} width={3}>\n {/*\n We reverse direction to ensure the download button doesn't appear (in the DOM) before other tabbable items.\n This ensures that the dialog doesn't scroll down to the download button (which on smaller screens, can sometimes\n be below the fold).\n */}\n <Flex direction={['column-reverse', 'column-reverse', 'row-reverse']}>\n <Box flex={1} marginTop={[5, 5, 0]} padding={4}>\n <WithReferringDocuments documentStore={documentStore} id={currentAsset._id}>\n {({isLoading, referringDocuments}) => {\n const uniqueReferringDocuments = getUniqueDocuments(referringDocuments)\n return (\n <>\n {/* Tabs */}\n <TabList space={2}>\n <Tab\n aria-controls=\"details-panel\"\n disabled={formUpdating}\n id=\"details-tab\"\n label=\"Details\"\n onClick={() => setTabSection('details')}\n selected={tabSection === 'details'}\n size={2}\n />\n <Tab\n aria-controls=\"references-panel\"\n disabled={formUpdating}\n id=\"references-tab\"\n label={`References${\n !isLoading && Array.isArray(uniqueReferringDocuments)\n ? ` (${uniqueReferringDocuments.length})`\n : ''\n }`}\n onClick={() => setTabSection('references')}\n selected={tabSection === 'references'}\n size={2}\n />\n </TabList>\n\n {/* Form fields */}\n <Box as=\"form\" marginTop={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Deleted notification */}\n {!assetItem && (\n <Card marginBottom={3} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>This file cannot be found – it may have been deleted.</Text>\n </Card>\n )}\n\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Panel: details */}\n <TabPanel\n aria-labelledby=\"details\"\n hidden={tabSection !== 'details'}\n id=\"details-panel\"\n >\n {CustomDetails ? (\n <CustomDetails\n {...detailsProps}\n renderDefaultDetails={renderDefaultDetails}\n />\n ) : (\n <Details {...detailsProps} />\n )}\n </TabPanel>\n\n {/* Panel: References */}\n <TabPanel\n aria-labelledby=\"references\"\n hidden={tabSection !== 'references'}\n id=\"references-panel\"\n >\n <Box marginTop={5}>\n {assetItem?.asset && (\n <DocumentList\n documents={uniqueReferringDocuments}\n isLoading={isLoading}\n />\n )}\n </Box>\n </TabPanel>\n </Box>\n </>\n )\n }}\n </WithReferringDocuments>\n </Box>\n\n <Box flex={1} padding={4}>\n <Box style={{aspectRatio: '1'}}>\n {/* File */}\n {isFileAsset(currentAsset) && <FileAssetPreview asset={currentAsset} />}\n\n {/* Image */}\n {isImageAsset(currentAsset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!currentAsset?.metadata?.isOpaque}\n src={imageDprUrl(currentAsset, {height: 600, width: 600})}\n />\n )}\n </Box>\n\n {/* Metadata */}\n {currentAsset && (\n <Box marginTop={4}>\n <AssetMetadata asset={currentAsset} item={assetItem} />\n </Box>\n )}\n </Box>\n </Flex>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogAssetEdit\n","import {createSelector} from '@reduxjs/toolkit'\n\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../types'\nimport {selectCurrentFolderChildren} from './folders'\nimport type {RootReducerState} from './types'\n\nexport const selectCombinedItems = createSelector(\n [\n (state: RootReducerState) => state.assets.allIds,\n (state: RootReducerState) => state.uploads.allIds,\n selectCurrentFolderChildren,\n ],\n (assetIds, uploadIds, folderChildren) => {\n const assetItems = assetIds.map((id): CardAssetData => ({id, type: 'asset'}))\n const folderItems = folderChildren.map(\n (folder): CardFolderData => ({\n id: `folder:${folder.id}`,\n folderId: folder.id,\n name: folder.name,\n path: folder.path,\n totalCount: folder.totalCount,\n type: 'folder',\n }),\n )\n const uploadItems = uploadIds.map((id): CardUploadData => ({id, type: 'upload'}))\n const combinedItems: (CardAssetData | CardFolderData | CardUploadData)[] = [\n ...folderItems,\n ...uploadItems,\n ...assetItems,\n ]\n return combinedItems\n },\n)\n","import {isHotkey} from 'is-hotkey-esm'\nimport {type RefObject, useCallback, useEffect, useRef} from 'react'\n\nconst 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\nexport default useKeyPress\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {WarningFilledIcon} from '@sanity/icons/WarningFilled'\nimport {\n Box,\n Checkbox,\n Container,\n Flex,\n Spinner,\n Text,\n type Theme,\n type ThemeColorSchemeKey,\n Tooltip,\n useToast,\n} from '@sanity/ui'\nimport {memo, type MouseEvent, type RefObject} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetById, selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\n id: string\n selected: boolean\n source?: 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\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: ${\n $picked ? `1px solid ${theme.sanity.color.spot.orange} !important` : '1px solid inherit'\n };\n\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})\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 StyledWarningOutlineIcon = styled(WarningFilledIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst CardAsset = (props: Props) => {\n const {id, selected, source} = props\n\n const scheme = useColorSchemeValue()\n const toast = useToast()\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 assetsPicked = useTypedSelector(selectAssetsPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n // Dialog carries the replace target so search refetch (which clears allIds/picks) is safe.\n const dialogReplaceAssetId = useTypedSelector((state) => {\n if (source !== 'replace-asset') {\n return undefined\n }\n const dialog = state.dialog.items.find((d) => d.type === 'dialogAllAssets')\n return dialog?.type === 'dialogAllAssets' ? dialog.assetId : undefined\n })\n\n const asset = item?.asset\n const error = item?.error\n const isOpaque = item?.asset?.metadata?.isOpaque\n const picked = item?.picked\n const updating = item?.updating\n\n // Prefer dialog assetId; fall back to the single currently-picked asset (not lastPicked).\n const assetToReplaceId =\n dialogReplaceAssetId ??\n (source === 'replace-asset' && assetsPicked.length === 1\n ? assetsPicked[0]?.asset._id\n : undefined)\n\n const assetToReplace = useTypedSelector((state) =>\n assetToReplaceId ? selectAssetById(state, assetToReplaceId) : undefined,\n )\n\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n const handleReplaceAsset = () => {\n if (!assetToReplaceId || !isImageAsset(asset) || assetToReplace?.updating) {\n return\n }\n\n dispatch(assetsActions.updateImageReferences({asset, id: assetToReplaceId}))\n toast.push({\n status: 'info',\n title:\n 'Updating in progress. Depending on the amount of changes, this could take a few minutes.',\n })\n dispatch(dialogActions.clear())\n }\n\n // Callbacks\n const handleAssetClick = (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (source === 'replace-asset') {\n handleReplaceAsset()\n return\n }\n\n if (selected) {\n return\n }\n\n if (onSelect && !isMultiSelect) {\n onSelect([\n {\n kind: 'assetDocumentId',\n value: asset._id,\n },\n ])\n } else if (onSelect && isMultiSelect) {\n 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 } 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 (source === 'replace-asset') {\n handleReplaceAsset()\n return\n }\n\n if (selected) {\n return\n }\n\n if (onSelect && !isMultiSelect) {\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\n data-testid={`media-asset-card-${asset._id}`}\n onClick={handleAssetClick}\n style={{height: '100%', opacity: opacityPreview}}\n >\n {/* File icon */}\n {isFileAsset(asset) && <FileIcon extension={asset.extension} width=\"80px\" />}\n\n {/* Image */}\n {isImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!isOpaque}\n src={imageDprUrl(asset, {height: 250, width: 250})}\n style={{\n draggable: false,\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 && !isMultiSelect ? (\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 {/* TODO: DRY */}\n {/* Error button */}\n {error && (\n <Box\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 <StyledWarningOutlineIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </CardContainer>\n </CardWrapper>\n )\n}\n\nexport default memo(CardAsset)\n","import {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {foldersActions} from '../../modules/folders'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n folderId: string\n name: string\n totalCount: number\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 FolderCard = styled(Card)`\n cursor: pointer;\n height: 100%;\n transition: border-color 200ms ease;\n width: 100%;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: var(--card-border-color);\n }\n }\n`\n\nconst FolderGlyph = styled(Box)(\n ({theme}) => css`\n align-items: flex-end;\n background: linear-gradient(\n 180deg,\n ${theme.sanity.color.spot.yellow} 0%,\n ${theme.sanity.color.spot.yellow} 100%\n );\n border-radius: 8px;\n display: flex;\n height: 72px;\n position: relative;\n width: 96px;\n\n &::before {\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 8px 8px 0 0;\n content: '';\n height: 18px;\n left: 0;\n position: absolute;\n top: -8px;\n width: 38px;\n }\n `,\n)\n\nconst CardFolder = ({folderId, name, totalCount}: Props) => {\n const dispatch = useDispatch()\n const scheme = useColorSchemeValue()\n\n return (\n <CardWrapper padding={1}>\n <FolderCard\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId}))}\n padding={3}\n radius={2}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n border: '1px solid transparent',\n }}\n >\n <Flex direction=\"column\" height=\"fill\" justify=\"space-between\">\n <Flex align=\"center\" flex={1} justify=\"center\">\n <FolderGlyph />\n </Flex>\n\n <Stack space={2}>\n <Text\n size={1}\n style={{lineHeight: '1.35em', minHeight: '2.7em', wordBreak: 'break-word'}}\n weight=\"semibold\"\n >\n {name}\n </Text>\n <Text muted size={0} style={{lineHeight: '1.2em'}}>\n {totalCount} item{totalCount === 1 ? '' : 's'}\n </Text>\n </Stack>\n </Flex>\n </FolderCard>\n </CardWrapper>\n )\n}\n\nexport default CardFolder\n","import {Observable, from, 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 {Subject, Subscription, Observable, from} from 'rxjs'\n// Takes a observable-returning function and returns a new function that limits on the number of\n// concurrent observables.\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\nexport const createThrottler = (concurrency: number = DEFAULT_CONCURRENCY) => {\n const currentSubscriptions: Array<Subscription> = []\n const pendingObservables: Array<Observable<any>> = []\n const ready$ = new Subject()\n\n function request(observable: Observable<any>): Observable<any> {\n return new Observable((observer) => {\n if (currentSubscriptions.length >= concurrency) {\n return scheduleAndWait$(observable)\n .pipe(mergeMap(request)) //\n .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 ready$.next(pendingObservables.shift())\n }\n }\n })\n }\n\n function scheduleAndWait$(observable: Observable<any>): Observable<any> {\n pendingObservables.push(observable)\n return ready$.asObservable().pipe(first((obs) => obs === observable))\n }\n\n return request\n}\n\nexport const withMaxConcurrency = (\n func: (...args: any[]) => Observable<any>,\n concurrency: number = DEFAULT_CONCURRENCY,\n) => {\n const throttler = createThrottler(concurrency)\n return (...args: Array<any>) => from(throttler(func(...args)))\n}\n","// Sourced from:\n// https://github.com/sanity-io/sanity/blob/ccb777e115a8cdf20d81a9a2bc9d8c228568faff/packages/%40sanity/form-builder/src/sanity/inputs/client-adapters/assets.ts\n\nimport type {SanityAssetDocument, SanityClient, SanityImageAssetDocument} from '@sanity/client'\nimport {Observable, of, throwError} from 'rxjs'\nimport {map, mergeMap} from 'rxjs/operators'\n\nimport type {HttpError} from '../types'\nimport {withMaxConcurrency} from './withMaxConcurrency'\n\nconst fetchExisting$ = (client: SanityClient, type: string, hash: string) => {\n return client.observable.fetch('*[_type == $documentType && sha1hash == $hash][0]', {\n documentType: type,\n hash,\n })\n}\n\nconst readFile$ = (file: File): Observable<ArrayBuffer> => {\n return new Observable((subscriber) => {\n const reader = new FileReader()\n reader.onload = () => {\n subscriber.next(reader.result as ArrayBuffer)\n subscriber.complete()\n }\n reader.onerror = (err) => {\n subscriber.error(err)\n }\n reader.readAsArrayBuffer(file)\n return () => {\n reader.abort()\n }\n })\n}\n\nconst hexFromBuffer = (buffer: ArrayBuffer): string => {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (x) => `00${x.toString(16)}`.slice(-2))\n .join('')\n}\n\nexport const hashFile$ = (file: File): Observable<string> => {\n if (!window.crypto || !window.crypto.subtle || !window.FileReader) {\n return throwError({\n message: 'Unable to generate hash: uploads are only allowed in secure contexts',\n statusCode: 500,\n })\n }\n return readFile$(file).pipe(\n mergeMap((arrayBuffer) => window.crypto.subtle.digest('SHA-1', arrayBuffer)),\n map(hexFromBuffer),\n )\n}\n\nconst uploadSanityAsset$ = (\n client: SanityClient,\n assetType: 'file' | 'image',\n file: File,\n hash: string,\n) => {\n return of(null).pipe(\n // NOTE: the sanity api will still dedupe unique files, but this saves us from uploading the asset file entirely\n mergeMap(() => fetchExisting$(client, `sanity.${assetType}Asset`, hash)),\n // Cancel if the asset already exists\n mergeMap((existingAsset: SanityAssetDocument | SanityImageAssetDocument | null) => {\n if (existingAsset) {\n return throwError({\n message: 'Asset already exists',\n statusCode: 409,\n } satisfies HttpError)\n }\n\n return of(null)\n }),\n mergeMap(() => {\n // Begin upload if no existing asset found\n return client.observable.assets\n .upload(assetType, file, {\n extract: ['blurhash', 'exif', 'image', 'location', 'lqip', 'palette'],\n preserveFilename: true,\n })\n .pipe(\n map((event) =>\n event.type === 'response'\n ? {\n // rewrite to a 'complete' event\n asset: event.body.document,\n id: event.body.document._id,\n type: 'complete',\n }\n : event,\n ),\n )\n }),\n )\n}\n\nexport const uploadAsset$ = withMaxConcurrency(uploadSanityAsset$)\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, SanityAssetDocument, SanityImageAssetDocument} from '@sanity/client'\nimport groq from 'groq'\nimport {empty, from, merge, of} from 'rxjs'\nimport {catchError, delay, filter, mergeMap, takeUntil, withLatestFrom} from 'rxjs/operators'\n\nimport type {HttpError, MyEpic, SanityUploadProgressEvent, UploadItem} from '../../types'\nimport constructFilter from '../../utils/constructFilter'\nimport {generatePreviewBlobUrl$} from '../../utils/generatePreviewBlobUrl'\nimport {hashFile$, uploadAsset$} from '../../utils/uploadSanityAsset'\nimport {assetsActions} from '../assets'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from './actions'\n\nexport type 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(\n _state,\n _action: PayloadAction<{assets: (SanityAssetDocument | SanityImageAssetDocument)[]}>,\n ) {\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 uploadRequest(\n _state,\n _action: PayloadAction<{file: File; forceAsAssetType?: 'file' | 'image'}>,\n ) {\n //\n },\n uploadProgress(\n state,\n action: PayloadAction<{event: SanityUploadProgressEvent; uploadHash: string}>,\n ) {\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 if (!state.allIds.includes(uploadItem.hash)) {\n state.allIds.push(uploadItem.hash)\n }\n state.byIds[uploadItem.hash] = uploadItem\n },\n },\n})\n\n// Epics\n\nexport const uploadsAssetStartEpic: MyEpic = (action$, _state$, {client}) =>\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(() => uploadAsset$(client, uploadItem.assetType, file, uploadItem.hash)),\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 const folderId = uploadItem.folderId || null\n\n if (!folderId) {\n return of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: event.asset,\n }),\n )\n }\n\n return from(\n client\n .patch(event.asset._id)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .set({\n 'opt.media.folder': {_ref: folderId, _type: 'reference', _weak: true},\n })\n .commit(),\n ).pipe(\n mergeMap((asset) =>\n of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: asset as SanityAssetDocument | SanityImageAssetDocument,\n }),\n ),\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: MyEpic = (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 = forceAsAssetType || (file.type.indexOf('image') >= 0 ? 'image' : 'file')\n const uploadItem = {\n _type: 'upload',\n assetType,\n folderId: state.folders.currentFolderId,\n hash,\n name: file.name,\n size: file.size,\n status: 'queued',\n } as UploadItem\n return of(uploadsActions.uploadStart({file, uploadItem}))\n }),\n )\n }),\n )\n\nexport const uploadsCompleteQueueEpic: MyEpic = (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: MyEpic = (action$, state$, {client}) =>\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 currentFolderId: state.folders.currentFolderId,\n excludeTagSlugs: state.assets.excludeTagSlugs,\n searchFacets: state.search.facets,\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(() => client.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\n// Selectors\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 uploadsActions = {...uploadsSlice.actions}\n\nexport default uploadsSlice.reducer\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport filesize from 'filesize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectUploadById, uploadsActions} from '../../modules/uploads'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\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\nconst CardUpload = (props: 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 === '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 === '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\nexport default CardUpload\n","import {memo} from 'react'\nimport {VirtuosoGrid} from 'react-virtuoso'\nimport {styled} from 'styled-components'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../../types'\nimport CardAsset from '../CardAsset'\nimport CardFolder from '../CardFolder'\nimport CardUpload from '../CardUpload'\n\ntype Props = {\n items: (CardAssetData | CardFolderData | CardUploadData)[]\n onLoadMore?: () => void\n source?: string\n}\n\nconst CARD_HEIGHT = 220\nconst CARD_WIDTH = 240\n\nconst VirtualCell = memo(\n ({\n item,\n selected,\n source,\n }: {\n item: CardAssetData | CardFolderData | CardUploadData\n selected: boolean\n source?: string\n }) => {\n if (item?.type === 'asset') {\n return <CardAsset id={item.id} selected={selected} source={source} />\n }\n\n if (item?.type === 'folder') {\n return <CardFolder folderId={item.folderId} name={item.name} totalCount={item.totalCount} />\n }\n\n if (item?.type === 'upload') {\n return <CardUpload id={item.id} />\n }\n\n return null\n },\n)\n\nconst StyledItemContainer = styled.div`\n height: ${CARD_HEIGHT}px;\n width: ${CARD_WIDTH}px;\n`\n\nconst ItemContainer = (props: any) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- we're doing this to avoid sc warnings about `context` passed as an attribute\n const {context, ref, ...rest} = props\n return <StyledItemContainer ref={ref} {...rest} />\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\nconst ListContainer = (props: any) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- we're doing this to avoid sc warnings about `context` passed as an attribute\n const {context, ref, ...rest} = props\n return <StyledListContainer ref={ref} {...rest} />\n}\n\nconst AssetGridVirtualized = (props: Props) => {\n const {items, onLoadMore, source} = 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 return item?.id ?? index\n }}\n components={{\n Item: ItemContainer,\n List: ListContainer,\n }}\n endReached={onLoadMore}\n itemContent={(index) => {\n const item = items[index]!\n const selected = selectedIds.includes(item.id)\n return <VirtualCell item={item} selected={selected} source={source} />\n }}\n overscan={48}\n style={{overflowX: 'hidden', overflowY: 'scroll'}}\n totalCount={totalCount}\n />\n )\n}\n\nexport default AssetGridVirtualized\n","import {Box, Text} from '@sanity/ui'\nimport {useEffect, useRef, useState} from 'react'\nimport {useDispatch, useStore} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {searchActions} from '../../modules/search'\nimport {selectCombinedItems} from '../../modules/selectors'\nimport type {RootReducerState} from '../../modules/types'\nimport type {SearchFacetInputProps, WithId} from '../../types'\nimport {isImageAsset} from '../../utils/typeGuards'\nimport AssetGridVirtualized from '../AssetGridVirtualized'\n\nfunction omitFacetId(facet: WithId<SearchFacetInputProps>): SearchFacetInputProps {\n // Strip the runtime `id` so facetsAdd can assign a fresh one on restore.\n const {id: _id, ...withoutId} = facet\n void _id\n return withoutId\n}\n\nconst ReplaceAssetsOverview = () => {\n const dispatch = useDispatch()\n const store = useStore<RootReducerState>()\n const combinedItems = useTypedSelector(selectCombinedItems)\n const assetsById = useTypedSelector((state) => state.assets.byIds)\n const fetchCount = useTypedSelector((state) => state.assets.fetchCount)\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const fetchingError = useTypedSelector((state) => state.assets.fetchingError)\n const pageSize = useTypedSelector((state) => state.assets.pageSize)\n const searchQuery = useTypedSelector((state) => state.search.query)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const currentFolderUnfiled = useTypedSelector((state) => state.folders.currentFolderUnfiled)\n\n // Prefer the dialog's assetId — search refetch clears `allIds` / can drop picks.\n const assetToReplaceId = useTypedSelector((state) => {\n const dialog = state.dialog.items.find((item) => item.type === 'dialogAllAssets')\n return dialog?.type === 'dialogAllAssets' ? dialog.assetId : undefined\n })\n\n const savedBrowserStateRef = useRef<{\n assetId: string | undefined\n query: string\n facets: WithId<SearchFacetInputProps>[]\n folderId: string | null\n folderUnfiled: boolean\n } | null>(null)\n\n // Clearing the search only triggers a refetch after `assetsSearchEpic`'s debounce, so the\n // stale results stay in the store for a moment. Track that gap to avoid rendering the\n // empty state before the unscoped results arrive.\n const [awaitingRefetch, setAwaitingRefetch] = useState(\n () =>\n searchQuery.length > 0 ||\n searchFacets.length > 0 ||\n Boolean(currentFolderId) ||\n currentFolderUnfiled,\n )\n\n // Clear the browser search, facets and folder scope so the picker is not limited to the\n // result set the user used to find the asset. Restore them when the dialog closes.\n useEffect(() => {\n const {dialog, folders, search} = store.getState()\n const {query, facets} = search\n const dialogItem = dialog.items.find((item) => item.type === 'dialogAllAssets')\n\n savedBrowserStateRef.current = {\n assetId: dialogItem?.type === 'dialogAllAssets' ? dialogItem.assetId : undefined,\n query,\n facets,\n folderId: folders.currentFolderId,\n folderUnfiled: folders.currentFolderUnfiled,\n }\n\n if (query.length > 0) {\n dispatch(searchActions.querySet({searchQuery: ''}))\n }\n if (facets.length > 0) {\n dispatch(searchActions.facetsClear())\n }\n if (folders.currentFolderId || folders.currentFolderUnfiled) {\n dispatch(foldersActions.currentFolderClear())\n }\n\n return () => {\n const saved = savedBrowserStateRef.current\n if (!saved) {\n return\n }\n\n const hadScope =\n saved.query.length > 0 ||\n saved.facets.length > 0 ||\n Boolean(saved.folderId) ||\n saved.folderUnfiled\n\n if (saved.query.length > 0) {\n dispatch(searchActions.querySet({searchQuery: saved.query}))\n }\n for (const facet of saved.facets) {\n dispatch(searchActions.facetsAdd({facet: omitFacetId(facet)}))\n }\n if (saved.folderId) {\n dispatch(foldersActions.currentFolderSet({folderId: saved.folderId}))\n } else if (saved.folderUnfiled) {\n dispatch(foldersActions.currentFolderShowUnfiled())\n }\n\n // Changing the search or folder runs epics that clear picks — put the asset being\n // replaced back so closing the dialog keeps the browser selection.\n if (hadScope && saved.assetId) {\n dispatch(assetsActions.pick({assetId: saved.assetId, picked: true}))\n }\n }\n }, [dispatch, store])\n\n // Every rescoped refetch is preceded by `assetsActions.clear()`, so wait for the asset\n // list to be emptied and the following fetch to settle. Watching `fetching` alone is not\n // enough: `assetsFetchEpic` uses `switchMap`, so replacing an in-flight request leaves\n // `fetching` true throughout. Clearing a folder scope and a search at the same time\n // produces two refetches (the folder one immediately, the search one after its debounce),\n // so each list clear re-arms the wait rather than resolving it for good.\n useEffect(() => {\n let previousIds = store.getState().assets.allIds\n let awaitingSettle = false\n\n return store.subscribe(() => {\n const {allIds, fetching: isFetching} = store.getState().assets\n const listCleared = allIds !== previousIds && allIds.length === 0\n previousIds = allIds\n\n if (listCleared) {\n awaitingSettle = true\n setAwaitingRefetch(true)\n return\n }\n if (awaitingSettle && !isFetching) {\n awaitingSettle = false\n setAwaitingRefetch(false)\n }\n })\n }, [store])\n\n const scopeActive =\n searchQuery.length > 0 ||\n searchFacets.length > 0 ||\n Boolean(currentFolderId) ||\n currentFolderUnfiled\n\n // Only image assets can replace image refs; exclude uploads and the asset being replaced.\n const reducedItems = combinedItems.filter((item) => {\n if (item.type !== 'asset' || item.id === assetToReplaceId) {\n return false\n }\n const asset = assetsById[item.id]?.asset\n return asset ? isImageAsset(asset) : false\n })\n\n const hasFetchedOnce = fetchCount >= 0\n const hasMorePages = fetchCount === pageSize\n // Don't treat a scoped / stale / mid-fetch / incomplete page as \"no replacements\".\n const isEmpty =\n reducedItems.length === 0 &&\n hasFetchedOnce &&\n !fetching &&\n !scopeActive &&\n !awaitingRefetch &&\n !hasMorePages\n\n // Keep loading pages until we find image candidates or exhaust results. A failed fetch\n // leaves `fetchCount` untouched, so stop paging on error instead of retrying forever.\n useEffect(() => {\n if (\n scopeActive ||\n fetching ||\n awaitingRefetch ||\n fetchingError ||\n reducedItems.length > 0 ||\n !hasFetchedOnce ||\n !hasMorePages\n ) {\n return\n }\n dispatch(assetsActions.loadNextPage())\n }, [\n dispatch,\n scopeActive,\n fetching,\n awaitingRefetch,\n fetchingError,\n reducedItems.length,\n hasFetchedOnce,\n hasMorePages,\n ])\n\n const handleLoadMoreItems = () => {\n if (!fetching) {\n dispatch(assetsActions.loadNextPage())\n }\n }\n\n return (\n <Box height=\"fill\">\n {isEmpty ? (\n <Box padding={5}>\n <Text size={1} weight=\"semibold\">\n There are no replacement images\n </Text>\n </Box>\n ) : (\n <Box height=\"fill\">\n <AssetGridVirtualized\n items={reducedItems}\n onLoadMore={handleLoadMoreItems}\n source=\"replace-asset\"\n />\n </Box>\n )}\n </Box>\n )\n}\n\nexport default ReplaceAssetsOverview\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogAllAssetsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport ReplaceAssetsOverview from '../ReplaceAssetsOverView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogAllAssetsProps\n}\n\nconst DialogAllAssets = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog header=\"Choose a replacement image\" id={id} onClose={handleClose} width={3}>\n <Box padding={4} style={{height: '50vh'}}>\n <ReplaceAssetsOverview />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogAllAssets\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Button, Flex, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogConfirmProps} from '../../types'\nimport Dialog from '../Dialog'\n\ntype Props = {\n children?: ReactNode\n dialog: DialogConfirmProps\n}\n\nconst DialogConfirm = (props: Props) => {\n const {children, dialog} = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = () => {\n dispatch(dialogActions.remove({id: dialog?.id}))\n }\n\n const handleConfirm = () => {\n // Close target dialog, if provided\n if (dialog?.closeDialogId) {\n dispatch(dialogActions.remove({id: dialog?.closeDialogId}))\n }\n\n if (dialog?.confirmCallbackAction) {\n dispatch(dialog.confirmCallbackAction)\n }\n\n // Close self\n handleClose()\n }\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"space-between\">\n <Button fontSize={1} mode=\"bleed\" onClick={handleClose} text=\"Cancel\" />\n <Button\n fontSize={1}\n onClick={handleConfirm}\n text={dialog?.confirmText}\n tone={dialog?.tone}\n />\n </Flex>\n </Box>\n )\n\n const Header = () => (\n <Flex align=\"center\">\n <Box paddingX={1}>\n <WarningOutlineIcon />\n </Box>\n <Box marginLeft={2}>{dialog?.headerTitle}</Box>\n </Flex>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n // oxlint-disable-next-line react/react-compiler\n header={<Header />}\n id=\"confirm\"\n onClose={handleClose}\n width={1}\n >\n <Box paddingX={4} paddingY={4}>\n <Stack space={3}>\n {dialog?.title && <Text size={1}>{dialog.title}</Text>}\n {dialog?.description && (\n <Text muted size={1}>\n <em>{dialog.description}</em>\n </Text>\n )}\n </Stack>\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogConfirm\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {folderFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions, selectFolderPathById} from '../../modules/folders'\nimport type {DialogFolderCreateProps, FolderFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderCreateProps\n}\n\nconst DialogFolderCreate = (props: Props) => {\n const {\n children,\n dialog: {parentFolderId, id},\n } = props\n\n const dispatch = useDispatch()\n const creating = useTypedSelector((state) => state.folders.creating)\n const creatingError = useTypedSelector((state) => state.folders.creatingError)\n const parentPath = useTypedSelector((state) => selectFolderPathById(state, parentFolderId))\n\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<FolderFormData>({\n defaultValues: {\n name: '',\n },\n mode: 'onChange',\n resolver: zodFormResolver<FolderFormData>(folderFormSchema),\n })\n\n const handleClose = () => {\n dispatch(dialogActions.clear())\n }\n\n const onSubmit: SubmitHandler<FolderFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n foldersActions.createRequest({\n name: sanitizedFormData['name'],\n parentId: parentFolderId || null,\n }),\n )\n }\n\n useEffect(() => {\n if (creatingError) {\n setError('name', {message: creatingError.message})\n }\n }, [creatingError, setError])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n <FormSubmitButton\n disabled={creating || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Create Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {parentPath && (\n <Box marginBottom={3}>\n <Text muted size={1}>\n Creating inside {parentPath}\n </Text>\n </Box>\n )}\n\n <FormFieldInputText\n {...register('name')}\n disabled={creating}\n error={errors?.name?.message}\n label=\"Folder name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderCreate\n","import {Box, Button, Flex, Inline, Stack, Text, Tree, TreeItem} from '@sanity/ui'\nimport pluralize from 'pluralize'\nimport {type ReactNode, useMemo, useState} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {selectFolderTree} from '../../modules/folders'\nimport type {DialogFolderMoveProps, FolderTreeNode} from '../../types'\nimport Dialog from '../Dialog'\n\nconst getExpandedIdSet = (\n folderId: string | null,\n byId: Record<string, {parentId: string | null}>,\n) => {\n const expanded = new Set<string>()\n let cursor: string | null = folderId\n while (cursor) {\n const node = byId[cursor]\n if (!node) break\n expanded.add(cursor)\n cursor = node.parentId\n }\n return expanded\n}\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderMoveProps\n}\n\ntype FolderNodeProps = {\n expandedIds: Set<string>\n node: FolderTreeNode\n onSelect: (folderId: string) => void\n selectedId: string | null\n}\n\nconst FolderNode = ({expandedIds, node, onSelect, selectedId}: FolderNodeProps) => {\n const hasChildren = node.children.length > 0\n const selected = selectedId === node.id\n\n return (\n <TreeItem\n expanded={expandedIds.has(node.id)}\n id={node.id}\n onClick={() => onSelect(node.id)}\n selected={selected}\n text={`${node.name} (${node.totalCount})`}\n weight={selected ? 'semibold' : 'medium'}\n >\n {hasChildren &&\n node.children.map((childNode) => (\n <FolderNode\n expandedIds={expandedIds}\n key={childNode.id}\n node={childNode}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </TreeItem>\n )\n}\n\ntype FolderTreeProps = {\n expandedIds: Set<string>\n folderTree: FolderTreeNode[]\n onSelect: (folderId: string) => void\n selectedId: string | null\n}\n\nconst FolderTree = ({expandedIds, folderTree, onSelect, selectedId}: FolderTreeProps) => (\n <Tree gap={1}>\n {folderTree.map((node) => (\n <FolderNode\n expandedIds={expandedIds}\n key={node.id}\n node={node}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </Tree>\n)\n\nconst DialogFolderMove = ({children, dialog}: Props) => {\n const dispatch = useDispatch()\n const folderTree = useTypedSelector(selectFolderTree)\n const byId = useTypedSelector((state) => state.folders.byId)\n const {assets, folderId, id} = dialog\n const [selectedId, setSelectedId] = useState<string | null>(folderId || null)\n const selectedFolder = selectedId ? byId[selectedId] : null\n const expandedIds = useMemo(() => getExpandedIdSet(folderId || null, byId), [byId, folderId])\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n const handleMove = () => {\n if (!selectedId) {\n return\n }\n\n dispatch(\n assetsActions.folderSetRequest({\n assets,\n closeDialogId: id,\n folderId: selectedId,\n }),\n )\n }\n\n return (\n <Dialog\n animate\n footer={\n <Box padding={3}>\n <Flex justify=\"flex-end\" gap={2}>\n <Button mode=\"ghost\" onClick={handleClose} text=\"Cancel\" />\n <Button\n disabled={!selectedId}\n mode=\"default\"\n onClick={handleMove}\n text={`Move ${assets.length} ${pluralize('asset', assets.length)}`}\n tone=\"primary\"\n />\n </Flex>\n </Box>\n }\n header=\"Move to Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Stack padding={4} space={4}>\n <Text size={1}>\n Move {assets.length} {pluralize('asset', assets.length)} to a folder.\n </Text>\n\n <Box style={{maxHeight: '22rem', overflowY: 'auto'}} paddingY={2}>\n <FolderTree\n expandedIds={expandedIds}\n folderTree={folderTree}\n onSelect={setSelectedId}\n selectedId={selectedId}\n />\n\n {folderTree.length === 0 && (\n <Box marginTop={3}>\n <Text muted size={1}>\n No folders yet.\n </Text>\n </Box>\n )}\n </Box>\n\n {selectedFolder && (\n <Inline space={2}>\n <Text muted size={1}>\n Destination:\n </Text>\n <Text size={1} weight=\"semibold\">\n {selectedFolder.name}\n </Text>\n </Inline>\n )}\n </Stack>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderMove\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {folderFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions, selectFolderPathById} from '../../modules/folders'\nimport type {DialogFolderRenameProps, FolderFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderRenameProps\n}\n\nconst DialogFolderRename = ({children, dialog}: Props) => {\n const {folderId, id} = dialog\n const dispatch = useDispatch()\n const renaming = useTypedSelector((state) => state.folders.renaming)\n const renameError = useTypedSelector((state) => state.folders.renameError)\n const folder = useTypedSelector((state) => state.folders.byId[folderId])\n const folderPath = useTypedSelector((state) => selectFolderPathById(state, folderId))\n const currentName = folder?.name || ''\n const parentPath = folderPath.includes('/')\n ? folderPath.slice(0, folderPath.lastIndexOf('/'))\n : null\n\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<FolderFormData>({\n defaultValues: {\n name: currentName,\n },\n mode: 'onChange',\n resolver: zodFormResolver<FolderFormData>(folderFormSchema),\n })\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n const onSubmit: SubmitHandler<FolderFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n foldersActions.renameRequest({\n name: sanitizedFormData['name'],\n folderId,\n }),\n )\n }\n\n useEffect(() => {\n if (renameError) {\n setError('name', {message: renameError.message})\n }\n }, [renameError, setError])\n\n return (\n <Dialog\n animate\n footer={\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n <FormSubmitButton\n disabled={renaming || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n }\n header=\"Rename Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n <Box marginBottom={3}>\n <Text muted size={1}>\n {parentPath ? `Renaming inside ${parentPath}` : 'Renaming at root'}\n </Text>\n </Box>\n\n <FormFieldInputText\n {...register('name')}\n disabled={renaming}\n error={errors?.name?.message}\n label=\"Folder name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderRename\n","import {AddIcon} from '@sanity/icons/Add'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {FolderIcon} from '@sanity/icons/Folder'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {\n Box,\n Button,\n Container,\n Flex,\n Inline,\n Label,\n Text,\n Tooltip,\n Tree,\n TreeItem,\n} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {foldersActions, selectCanDeleteFolder, selectFolderTree} from '../../modules/folders'\nimport type {FolderTreeNode} from '../../types'\n\nconst getExpandedIdSet = (\n folderId: string | null,\n byId: Record<string, {parentId: string | null}>,\n) => {\n const expanded = new Set<string>()\n let cursor: string | null = folderId\n while (cursor) {\n const node = byId[cursor]\n if (!node) break\n expanded.add(cursor)\n cursor = node.parentId\n }\n return expanded\n}\n\ntype FolderNodeProps = {\n currentFolderId: string | null\n expandedIds: Set<string>\n node: FolderTreeNode\n onSelect: (folderId: string) => void\n}\n\ntype FolderHeaderActionProps = {\n disabled?: boolean\n icon: ReactNode\n onClick: () => void\n tone?: 'critical' | 'default' | 'primary'\n tooltip: string\n}\n\nconst FolderHeaderAction = ({\n disabled = false,\n icon,\n onClick,\n tone = 'default',\n tooltip,\n}: FolderHeaderActionProps) => (\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text muted size={1}>\n {tooltip}\n </Text>\n </Container>\n }\n disabled={typeof window !== 'undefined' && 'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Button\n aria-label={tooltip}\n disabled={disabled}\n fontSize={1}\n icon={icon}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n tone={tone}\n />\n </Tooltip>\n)\n\ntype FolderItemTextProps = {\n name: string\n totalCount: number\n}\n\n/**\n * this uses some hacky css to get the desired layout\n * The tree item is a text container, so we need to use a span to wrap the content\n */\nconst FolderItemText = ({name, totalCount}: FolderItemTextProps) => (\n <span\n style={{\n boxSizing: 'border-box',\n display: 'block',\n maxWidth: '100%',\n minWidth: 0,\n overflow: 'hidden',\n paddingRight: '2rem',\n position: 'relative',\n width: '100%',\n }}\n >\n <span\n style={{\n alignItems: 'center',\n display: 'flex',\n paddingLeft: '0.25rem',\n gap: '0.5rem',\n minWidth: 0,\n overflow: 'hidden',\n }}\n >\n <span style={{display: 'inline-flex', flexShrink: 0, lineHeight: 0}}>\n <FolderIcon />\n </span>\n <span\n style={{\n display: 'block',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {name}\n </span>\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n opacity: 0.78,\n position: 'absolute',\n right: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n {totalCount}\n </span>\n </span>\n)\n\nconst FolderNode = ({currentFolderId, expandedIds, node, onSelect}: FolderNodeProps) => {\n const hasChildren = node.children.length > 0\n const selected = currentFolderId === node.id\n\n return (\n <TreeItem\n expanded={expandedIds.has(node.id)}\n id={node.id}\n onClick={() => onSelect(node.id)}\n selected={selected}\n text={<FolderItemText name={node.name} totalCount={node.totalCount} />}\n weight={selected ? 'semibold' : 'medium'}\n >\n {hasChildren &&\n node.children.map((childNode) => (\n <FolderNode\n currentFolderId={currentFolderId}\n expandedIds={expandedIds}\n key={childNode.id}\n node={childNode}\n onSelect={onSelect}\n />\n ))}\n </TreeItem>\n )\n}\n\nconst FolderView = () => {\n const dispatch = useDispatch()\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const byId = useTypedSelector((state) => state.folders.byId)\n const canDeleteFolder = useTypedSelector(selectCanDeleteFolder)\n const fetching = useTypedSelector((state) => state.folders.fetching)\n const folderTree = useTypedSelector(selectFolderTree)\n const currentFolder = currentFolderId ? byId[currentFolderId] : null\n const expandedIds = useMemo(\n () => getExpandedIdSet(currentFolderId, byId),\n [byId, currentFolderId],\n )\n const treeKey = useMemo(() => Array.from(expandedIds).join('|') || 'root', [expandedIds])\n\n const hasFolders = folderTree.length > 0\n\n const handleFolderSelect = (folderId: string) => {\n dispatch(foldersActions.currentFolderSet({folderId}))\n }\n\n const handleFolderDelete = () => {\n if (!currentFolderId || !currentFolder) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteFolder({\n folderId: currentFolderId,\n folderName: currentFolder.name,\n }),\n )\n }\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingX={3}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n flexShrink: 0,\n height: `${PANEL_HEIGHT}px`,\n }}\n >\n <Box flex={1}>\n <Inline space={2}>\n <Label size={0}>Folders</Label>\n {fetching && (\n <Label size={0} style={{opacity: 0.3}}>\n Loading...\n </Label>\n )}\n </Inline>\n </Box>\n\n <Inline space={1}>\n {currentFolderId && (\n <FolderHeaderAction\n icon={<EditIcon />}\n onClick={() => dispatch(DIALOG_ACTIONS.showFolderRename({folderId: currentFolderId}))}\n tone=\"primary\"\n tooltip=\"Rename folder\"\n />\n )}\n\n <FolderHeaderAction\n icon={<AddIcon />}\n onClick={() =>\n dispatch(DIALOG_ACTIONS.showFolderCreate({parentFolderId: currentFolderId || null}))\n }\n tone=\"primary\"\n tooltip=\"Create folder\"\n />\n\n {currentFolderId && canDeleteFolder && (\n <FolderHeaderAction\n icon={<TrashIcon />}\n onClick={handleFolderDelete}\n tone=\"critical\"\n tooltip=\"Delete folder\"\n />\n )}\n </Inline>\n </Flex>\n\n <Box padding={2}>\n <Box>\n <Tree gap={1} key={treeKey}>\n <TreeItem\n id=\"__all-assets\"\n onClick={() => dispatch(foldersActions.currentFolderClear())}\n selected={currentFolderId === null}\n text=\"All assets\"\n weight={currentFolderId === null ? 'semibold' : 'medium'}\n />\n\n {folderTree.map((node) => (\n <FolderNode\n currentFolderId={currentFolderId}\n expandedIds={expandedIds}\n key={node.id}\n node={node}\n onSelect={handleFolderSelect}\n />\n ))}\n </Tree>\n\n {!hasFolders && !fetching && (\n <Box marginTop={3} paddingX={1}>\n <Text muted size={1}>\n <em>No folders</em>\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default FolderView\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogFoldersProps} from '../../types'\nimport Dialog from '../Dialog'\nimport FolderView from '../FolderView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFoldersProps\n}\n\nconst DialogFolders = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n const dispatch = useDispatch()\n\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"Folders\" id={id} onClose={handleClose} width={1}>\n <Box\n style={{\n height: '100%',\n minHeight: '420px',\n }}\n >\n <FolderView />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolders\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Flex, Label, rem, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetInputProps, WithId} from '../../types'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n children: ReactNode\n facet: WithId<SearchFacetInputProps>\n}\n\nconst Container = styled<typeof Box, {$scheme: ThemeColorSchemeKey}>(Box)(({$scheme, theme}) => {\n return css`\n background: ${getSchemeColor($scheme, 'bg')};\n border-radius: ${rem(theme.sanity.radius[2]!)};\n `\n})\n\nconst SearchFacet = (props: Props) => {\n const {children, facet} = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n\n const handleClose = () => {\n dispatch(searchActions.facetsRemoveById({facetId: facet.id}))\n }\n\n return (\n <Container padding={[2, 2, 1]} $scheme={scheme}>\n <Flex align={['flex-start', 'flex-start', 'center']} direction={['column', 'column', 'row']}>\n {/* Title */}\n <Box paddingBottom={[3, 3, 0]} paddingLeft={1} paddingRight={2} paddingTop={[1, 1, 0]}>\n <Label\n size={0}\n style={{\n whiteSpace: 'nowrap',\n }}\n >\n {facet.title}\n </Label>\n </Box>\n\n <Flex align=\"center\">\n {children}\n\n {/* Close button */}\n <Box marginLeft={1} paddingX={2}>\n <Text muted size={0}>\n <CloseIcon onClick={handleClose} />\n </Text>\n </Box>\n </Flex>\n </Flex>\n </Container>\n )\n}\n\nexport default SearchFacet\n","import {TextInput} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\n\n// TODO: use correct type\ntype Props = any & {\n onValueChange: (value: number) => void\n value?: number\n}\n\nconst TextInputNumber = (props: Props) => {\n const {onValueChange, value, ...remainingProps} = props\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n const regex = /^[0-9\\b]+$/\n\n // Test for number and strip leading zeroes\n if (val === '' || regex.test(val)) {\n onValueChange(parseInt(val, 10) || '')\n }\n }\n\n return (\n <TextInput\n {...remainingProps}\n onChange={handleChange} //\n value={value ?? ''}\n />\n )\n}\n\nexport default TextInputNumber\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {\n SearchFacetInputNumberModifier,\n SearchFacetInputNumberProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport SearchFacet from '../SearchFacet'\nimport TextInputNumber from '../TextInputNumber'\n\ntype Props = {\n facet: WithId<SearchFacetInputNumberProps>\n}\n\nconst SearchFacetNumber = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const modifiers = facet?.modifiers\n const selectedModifier = facet?.modifier\n ? modifiers?.find((modifier) => modifier.name === facet?.modifier)\n : modifiers?.[0]\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, operatorType}))\n }\n\n const handleModifierClick = (modifier: SearchFacetInputNumberModifier) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, modifier: modifier.name}))\n }\n\n const handleValueChange = (value: number) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, value}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType ?? 'greaterThan'\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n <Box marginX={1} style={{maxWidth: '50px'}}>\n <TextInputNumber\n fontSize={1}\n onValueChange={handleValueChange}\n padding={2}\n radius={2}\n width={2}\n value={facet?.value}\n />\n </Box>\n\n {/* Modifiers */}\n {modifiers && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={selectedModifier?.title}\n />\n }\n id=\"modifier\"\n menu={\n <Menu>\n {modifiers.map((modifier) => {\n const selected = modifier.name === facet.modifier\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={modifier.name}\n onClick={() => handleModifierClick(modifier)}\n padding={2}\n text={modifier.title}\n />\n )\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetNumber\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {\n SearchFacetInputSelectListItemProps,\n SearchFacetInputSelectProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputSelectProps>\n}\n\nconst SearchFacetSelect = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const options = facet?.options\n\n const selectedItem = options?.find((v) => v.name === facet?.value)\n\n const handleListItemClick = (option: SearchFacetInputSelectListItemProps) => {\n dispatch(searchActions.facetsUpdate({name: facet.name, value: option.name}))\n }\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdate({name: facet.name, operatorType}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet?.operatorType ?? 'is'\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Box marginRight={1}>\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n </Box>\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* List */}\n <MenuButton\n button={\n <Button fontSize={1} iconRight={SelectIcon} padding={2} text={selectedItem?.title} />\n }\n id=\"list\"\n menu={\n <Menu>\n {options?.map((item) => {\n const selected = item.name === selectedItem?.name\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={item.name}\n onClick={() => handleListItemClick(item)}\n padding={2}\n text={item.title}\n />\n )\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n </SearchFacet>\n )\n}\n\nexport default SearchFacetSelect\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button, Menu, MenuButton, MenuDivider, MenuItem, TextInput} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetInputStringProps, SearchFacetOperatorType, WithId} from '../../types'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputStringProps>\n}\n\nconst SearchFacetString = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, operatorType}))\n }\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, value: e.target.value}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n {!operators[selectedOperatorType].hideInput && (\n <Box marginLeft={1} style={{maxWidth: '125px'}}>\n <TextInput\n fontSize={1}\n onChange={handleChange}\n padding={2}\n radius={2}\n width={2}\n value={facet?.value}\n />\n </Box>\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetString\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Card, rem, studioTheme, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {components, type StylesConfig} from 'react-select'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\nconst {\n fonts: {\n text: {sizes: themeTextSizes},\n },\n radius: themeRadius,\n space: themeSpace,\n} = studioTheme\n\nexport const reactSelectStyles = (scheme: ThemeColorSchemeKey): StylesConfig => {\n return {\n control: (styles, {isDisabled, isFocused}) => {\n let boxShadow = `inset 0 0 0 1px var(--card-border-color)`\n if (isFocused) {\n boxShadow = `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputEnabledBorder')},\n 0 0 0 1px ${getSchemeColor(scheme, 'bg2')},\n 0 0 0 3px var(--card-focus-ring-color) !important`\n }\n\n return {\n ...styles,\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'inherit',\n 'border': 'none',\n 'borderRadius': themeRadius[2],\n boxShadow,\n 'fontSize': themeTextSizes[1]!.fontSize,\n 'minHeight': '25px',\n 'opacity': isDisabled ? 0.5 : 'inherit',\n 'outline': 'none',\n 'transition': 'none',\n '&:hover': {\n boxShadow: `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputHoveredBorder')}`,\n },\n }\n },\n input: (styles) => ({\n ...styles,\n color: 'var(--card-fg-color)',\n fontFamily: studioTheme.fonts.text.family,\n fontSize: themeTextSizes[1]!.fontSize,\n marginLeft: rem(themeSpace[2]!),\n }),\n menuList: (styles) => ({\n ...styles,\n padding: 0,\n }),\n noOptionsMessage: (styles) => ({\n ...styles,\n fontFamily: studioTheme.fonts.text.family,\n fontSize: themeTextSizes[1]!.fontSize,\n lineHeight: '1em',\n }),\n option: (styles, {isFocused}) => ({\n ...styles,\n 'backgroundColor': isFocused ? getSchemeColor(scheme, 'spotBlue') : 'transparent',\n 'borderRadius': themeRadius[2],\n 'color': isFocused ? getSchemeColor(scheme, 'bg') : 'inherit',\n 'fontSize': themeTextSizes[1]!.fontSize,\n 'lineHeight': '1em',\n 'margin': 0,\n 'padding': rem(themeSpace[1]!),\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'spotBlue'),\n color: getSchemeColor(scheme, 'bg'),\n },\n }),\n placeholder: (styles) => ({\n ...styles,\n fontSize: themeTextSizes[1]!.fontSize,\n marginLeft: rem(themeSpace[2]!),\n paddingLeft: 0,\n }),\n singleValue: (styles) => ({\n ...styles,\n alignItems: 'center',\n display: 'inline-flex',\n height: '100%',\n marginLeft: rem(themeSpace[2]!),\n }),\n valueContainer: (styles) => ({\n ...styles,\n margin: 0,\n padding: 0,\n }),\n }\n}\n\nconst ClearIndicator = (props: any) => {\n return (\n <components.ClearIndicator {...props}>\n <Box\n paddingRight={1}\n style={{\n transform: 'scale(0.85)',\n }}\n >\n <Text muted size={0}>\n <CloseIcon />\n </Text>\n </Box>\n </components.ClearIndicator>\n )\n}\n\nconst Menu = (props: any) => {\n return (\n <components.Menu {...props}>\n <Card radius={1} shadow={2}>\n {props.children}\n </Card>\n </components.Menu>\n )\n}\n\nconst MenuList = (props: any) => {\n const {children} = props\n\n const MAX_ROWS = 5\n const OPTION_HEIGHT = 33\n\n if (Array.isArray(children)) {\n const height =\n children.length > MAX_ROWS ? OPTION_HEIGHT * MAX_ROWS : children.length * OPTION_HEIGHT\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n itemContent={(index) => {\n const item = children[index]\n return <Option {...item.props} />\n }}\n style={{height}}\n totalCount={children.length}\n />\n )\n }\n return <components.MenuList {...props}>{children}</components.MenuList>\n}\n\nconst NoOptionsMessage = (props: any) => {\n return <components.NoOptionsMessage {...props}>{props.children}</components.NoOptionsMessage>\n}\n\nconst Option = (props: any) => {\n return (\n <Box padding={1}>\n <components.Option {...props}>\n <Box paddingY={1}>\n <Text size={1} style={{color: 'inherit'}} textOverflow=\"ellipsis\">\n {props.children}\n </Text>\n </Box>\n </components.Option>\n </Box>\n )\n}\n\nconst SingleValue = (props: any) => {\n return (\n <components.SingleValue {...props}>\n <Text size={1} textOverflow=\"ellipsis\">\n {props.children}\n </Text>\n </components.SingleValue>\n )\n}\n\nexport const reactSelectComponents = {\n ClearIndicator,\n DropdownIndicator: null,\n IndicatorSeparator: null,\n Menu,\n MenuList,\n NoOptionsMessage,\n Option,\n SingleValue,\n}\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport Select from 'react-select'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {operators} from '../../config/searchFacets'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\nimport {selectTags} from '../../modules/tags'\nimport {reactSelectComponents, reactSelectStyles} from '../../styled/react-select/single'\nimport type {\n TagSelectOption,\n SearchFacetInputSearchableProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputSearchableProps>\n}\n\nconst SearchFacetTags = ({facet}: Props) => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const {excludeTagSlugs} = useToolOptions()\n const tagsAll = useTypedSelector((state) => selectTags(state))\n const tags =\n excludeTagSlugs.length > 0\n ? tagsAll.filter((t) => !excludeTagSlugs.includes(t.tag.name.current))\n : tagsAll\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n const allTagOptions = getTagSelectOptions(tags)\n\n const popoverProps = usePortalPopoverProps()\n\n const handleChange = (option: TagSelectOption) => {\n dispatch(\n searchActions.facetsUpdateById({\n id: facet.id,\n value: option,\n }),\n )\n }\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(\n searchActions.facetsUpdateById({\n id: facet.id,\n operatorType,\n }),\n )\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n space={4}\n style={{minWidth: '150px'}}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n {!operators[selectedOperatorType].hideInput && (\n <Box marginX={1} style={{width: '160px'}}>\n <Select\n components={reactSelectComponents}\n instanceId=\"facet-searchable\"\n isClearable\n isDisabled={tagsFetching}\n isSearchable\n name=\"tags\"\n noOptionsMessage={() => 'No tags'}\n onChange={(value: any) => handleChange(value as TagSelectOption)}\n options={allTagOptions}\n placeholder={tagsFetching ? 'Loading...' : 'Select...'}\n styles={reactSelectStyles(scheme)}\n value={facet?.value}\n />\n </Box>\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetTags\n","import {Box, Flex, Inline, rem, type Theme} from '@sanity/ui'\nimport {styled, css} from 'styled-components'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport SearchFacetNumber from '../SearchFacetNumber'\nimport SearchFacetSelect from '../SearchFacetSelect'\nimport SearchFacetString from '../SearchFacetString'\nimport SearchFacetTags from '../SearchFacetTags'\n\ntype Props = {\n layout?: 'inline' | 'stack'\n}\n\nconst StackContainer = styled(Flex)(({theme}: {theme: Theme}) => {\n return css`\n > * {\n margin-bottom: ${rem(theme.sanity.space[2]!)};\n }\n `\n})\n\nconst SearchFacets = (props: Props) => {\n const {layout = 'inline'} = props\n\n // Redux\n const searchFacets = useTypedSelector((state) => state.search.facets)\n\n const Items = searchFacets.map((facet) => {\n const key = facet.id\n if (facet.type === 'number') {\n return <SearchFacetNumber facet={facet} key={key} />\n }\n\n if (facet.type === 'searchable') {\n return <SearchFacetTags facet={facet} key={key} />\n }\n\n if (facet.type === 'select') {\n return <SearchFacetSelect facet={facet} key={key} />\n }\n\n if (facet.type === 'string') {\n return <SearchFacetString facet={facet} key={key} />\n }\n\n return null\n })\n\n if (layout === 'inline') {\n if (searchFacets.length === 0) {\n return null\n }\n\n return (\n <Box marginBottom={2}>\n <Inline space={2}>{Items}</Inline>\n </Box>\n )\n }\n\n if (layout === 'stack') {\n return (\n <StackContainer align=\"flex-start\" direction=\"column\">\n {Items}\n </StackContainer>\n )\n }\n\n throw Error('Invalid layout')\n}\n\nexport default SearchFacets\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Button, Flex, Menu, MenuButton, MenuDivider, MenuGroup, MenuItem} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport {FACETS} from '../../constants'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetDivider, SearchFacetGroup, SearchFacetInputProps} from '../../types'\n\nconst SearchFacetsControl = () => {\n // Redux\n const dispatch = useDispatch()\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const selectedDocument = useTypedSelector((state) => state.selected.document)\n\n const popoverProps = usePortalPopoverProps()\n\n const {creditLine} = useToolOptions()\n\n const isTool = !selectedDocument\n\n const filteredFacets = FACETS\n // Filter facets based on current context, whether it's invoked as a tool, or via selection through via custom asset source.\n .filter((facet) => {\n // Remove credit line filter if it's not enabled\n if (!creditLine?.enabled && facet?.type === 'string' && facet?.name === 'creditLine') {\n return false\n }\n\n if (facet.type === 'group' || facet.type === 'divider') {\n return true\n }\n\n if (isTool) {\n return !facet?.selectOnly\n }\n\n const matchingAssetTypes = facet.assetTypes.filter((assetType) =>\n assetTypes.includes(assetType),\n )\n return matchingAssetTypes.length > 0\n })\n // Remove adjacent and leading / trailing dividers\n .filter((facet, index, facets) => {\n const previousFacet = facets[index - 1]\n // Ignore leading + trailing dividers\n if (facet.type === 'divider' && (index === 0 || index === facets.length - 1)) {\n return false\n }\n // Ignore adjacent dividers\n if (facet.type === 'divider' && previousFacet?.type === 'divider') {\n return false\n }\n return true\n })\n\n const hasSearchFacets = filteredFacets.length > 0\n\n const renderMenuFacets = (\n facets: (SearchFacetDivider | SearchFacetGroup | SearchFacetInputProps)[],\n level: number = 0,\n ) => {\n return (\n <>\n {facets?.map((facet, index) => {\n if (facet.type === 'divider') {\n return <MenuDivider key={index} />\n }\n\n // Recursively render menu facets\n if (facet.type === 'group') {\n return (\n <MenuGroup key={`group-${level}-${index}`} text={facet.title} title={facet.title}>\n {renderMenuFacets(facet.facets, level + 1)}\n </MenuGroup>\n )\n }\n\n if (facet) {\n const disabled =\n !facet.operatorTypes && !!searchFacets.find((v) => v.name === facet.name)\n\n return (\n <MenuItem\n disabled={disabled}\n fontSize={1}\n key={facet.name}\n onClick={() => dispatch(searchActions.facetsAdd({facet}))}\n padding={2}\n text={facet.title}\n />\n )\n }\n\n return null\n })}\n </>\n )\n }\n\n return (\n <Flex>\n {/* Add filter button */}\n <MenuButton\n button={\n <Button\n disabled={!hasSearchFacets}\n fontSize={1}\n icon={AddIcon}\n mode=\"bleed\"\n space={2}\n text=\"Add filter\"\n tone=\"primary\"\n />\n }\n id=\"facets\"\n menu={<Menu>{renderMenuFacets(filteredFacets)}</Menu>}\n popover={{\n ...popoverProps,\n placement: 'right-start',\n }}\n />\n\n {/* Clear facets button */}\n {searchFacets.length > 0 && (\n <Button\n fontSize={1}\n mode=\"bleed\"\n onClick={() => dispatch(searchActions.facetsClear())}\n text=\"Clear\"\n />\n )}\n </Flex>\n )\n}\n\nexport default SearchFacetsControl\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogSearchFacetsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport SearchFacets from '../SearchFacets'\nimport SearchFacetsControl from '../SearchFacetsControl'\n\ntype Props = {\n children: ReactNode\n dialog: DialogSearchFacetsProps\n}\n\nconst DialogSearchFacets = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"Filters\" id={id} onClose={handleClose} width={1}>\n <Box padding={3}>\n <SearchFacets layout=\"stack\" />\n <SearchFacetsControl />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogSearchFacets\n","import {Box, Flex} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {tagFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {tagsActions} from '../../modules/tags'\nimport type {DialogTagCreateProps, TagFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagCreateProps\n}\n\nconst DialogTagCreate = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n const dispatch = useDispatch()\n\n const creating = useTypedSelector((state) => state.tags.creating)\n const creatingError = useTypedSelector((state) => state.tags.creatingError)\n\n const {\n // Read the formState before render to subscribe the form state through Proxy\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<TagFormData>({\n defaultValues: {\n name: '',\n },\n mode: 'onChange',\n resolver: zodFormResolver<TagFormData>(tagFormSchema),\n })\n\n const formUpdating = creating\n\n const handleClose = () => {\n dispatch(dialogActions.clear())\n }\n\n // - submit react-hook-form\n const onSubmit: SubmitHandler<TagFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n\n dispatch(tagsActions.createRequest({name: sanitizedFormData['name']}))\n }\n\n useEffect(() => {\n if (creatingError) {\n setError('name', {\n message: creatingError?.message,\n })\n }\n }, [creatingError, setError])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Create Tag\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n {/* Form fields */}\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Title */}\n <FormFieldInputText\n {...register('name')}\n disabled={formUpdating}\n error={errors?.name?.message}\n label=\"Name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTagCreate\n","import type {MutationEvent} from '@sanity/client'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport groq from 'groq'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {tagFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {dialogActions} from '../../modules/dialog'\nimport {selectTagById, tagsActions} from '../../modules/tags'\nimport type {DialogTagEditProps, Tag, TagFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagEditProps\n}\n\nconst DialogTagEdit = (props: Props) => {\n const {\n children,\n dialog: {id, tagId},\n } = props\n\n const client = useVersionedClient()\n\n const dispatch = useDispatch()\n const tagItem = useTypedSelector((state) => selectTagById(state, String(tagId))) // TODO: double check string cast\n\n // - Generate a snapshot of the current tag\n const [tagSnapshot, setTagSnapshot] = useState(tagItem?.tag)\n\n const currentTag = tagItem ? tagItem?.tag : tagSnapshot\n const generateDefaultValues = useCallback(\n (tag?: Tag) => ({\n name: tag?.name?.current || '',\n }),\n [],\n )\n\n const {\n // Read the formState before render to subscribe the form state through Proxy\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n reset,\n setError,\n } = useForm<TagFormData>({\n defaultValues: generateDefaultValues(tagItem?.tag),\n mode: 'onChange',\n resolver: zodFormResolver<TagFormData>(tagFormSchema),\n })\n\n const formUpdating = !tagItem || tagItem?.updating\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n // Submit react-hook-form\n const onSubmit: SubmitHandler<TagFormData> = (formData) => {\n if (!tagItem?.tag) {\n return\n }\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n tagsActions.updateRequest({\n closeDialogId: tagItem?.tag?._id,\n formData: {\n name: {\n _type: 'slug',\n current: sanitizedFormData['name'],\n },\n },\n tag: tagItem?.tag,\n }),\n )\n }\n\n const handleDelete = () => {\n if (!tagItem?.tag) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteTag({\n closeDialogId: tagItem?.tag?._id,\n tag: tagItem?.tag,\n }),\n )\n }\n\n const handleTagUpdate = useCallback(\n (update: MutationEvent) => {\n const {result, transition} = update\n if (result && transition === 'update') {\n // Regenerate snapshot\n setTagSnapshot(result as Tag)\n // Reset react-hook-form\n reset(generateDefaultValues(result as Tag))\n }\n },\n [reset, generateDefaultValues],\n )\n\n useEffect(() => {\n if (tagItem?.error) {\n setError('name', {\n message: tagItem.error?.message,\n })\n }\n }, [setError, tagItem?.error])\n\n // - Listen for asset mutations and update snapshot\n useEffect(() => {\n if (!tagItem?.tag) {\n return undefined\n }\n\n // Remember that Sanity listeners ignore joins, order clauses and projections\n const subscriptionAsset = client\n .listen(groq`*[_id == $id]`, {id: tagItem?.tag._id})\n .subscribe(handleTagUpdate)\n\n return () => {\n subscriptionAsset?.unsubscribe()\n }\n }, [client, handleTagUpdate, tagItem?.tag])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"space-between\">\n {/* Delete button */}\n <Button\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid}\n isValid={isValid}\n lastUpdated={tagItem?.tag?._updatedAt}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n if (!currentTag) {\n return null\n }\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Edit Tag\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n {/* Form fields */}\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Deleted notification */}\n {!tagItem && (\n <Card marginBottom={3} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>This tag cannot be found – it may have been deleted.</Text>\n </Card>\n )}\n\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Title */}\n <FormFieldInputText\n {...register('name')}\n disabled={formUpdating}\n error={errors?.name?.message}\n label=\"Name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTagEdit\n","import {ArrowDownIcon} from '@sanity/icons/ArrowDown'\nimport {ArrowUpIcon} from '@sanity/icons/ArrowUp'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Container, Flex, Text, Tooltip} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {inputs} from '../../config/searchFacets'\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {searchActions, selectIsSearchFacetTag} from '../../modules/search'\nimport type {SearchFacetInputSearchableProps, TagActions, TagItem} from '../../types'\n\ntype Props = {\n actions?: TagActions[]\n tag: TagItem\n}\n\nconst TagContainer = styled(Flex)`\n height: ${PANEL_HEIGHT}px;\n`\n\nconst ButtonContainer = styled(Flex)`\n @media (pointer: fine) {\n visibility: hidden;\n }\n\n @media (hover: hover) and (pointer: fine) {\n ${TagContainer}:hover & {\n visibility: visible;\n }\n }\n`\n\ntype TagButtonProps = {\n disabled?: boolean\n icon: ReactNode\n onClick: () => void\n tone?: 'critical' | 'primary'\n tooltip: string\n}\n\nconst TagButton = (props: TagButtonProps) => {\n const {disabled, icon, onClick, tone, tooltip} = props\n\n return (\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text muted size={1}>\n {tooltip}\n </Text>\n </Container>\n }\n disabled={'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Button\n disabled={disabled}\n fontSize={1}\n icon={icon}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n tone={tone}\n />\n </Tooltip>\n )\n}\n\nconst Tag = (props: Props) => {\n const {actions, tag} = props\n\n // Redux\n const dispatch = useDispatch()\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n const isSearchFacetTag = useTypedSelector((state) => selectIsSearchFacetTag(state, tag?.tag?._id))\n\n // Callbacks\n const handleSearchFacetTagRemove = () => {\n dispatch(searchActions.facetsRemoveByTag({tagId: tag.tag._id}))\n }\n\n const handleShowAddTagToAssetsDialog = () => {\n dispatch(dialogActions.showConfirmAssetsTagAdd({assetsPicked, tag: tag.tag}))\n }\n\n const handleShowRemoveTagFromAssetsDialog = () => {\n dispatch(dialogActions.showConfirmAssetsTagRemove({assetsPicked, tag: tag.tag}))\n }\n\n const handleShowTagDeleteDialog = () => {\n dispatch(dialogActions.showConfirmDeleteTag({tag: tag.tag}))\n }\n\n const handleShowTagEditDialog = () => {\n dispatch(DIALOG_ACTIONS.showTagEdit({tagId: tag?.tag?._id}))\n }\n\n const handleSearchFacetTagAddOrUpdate = () => {\n const searchFacet = {\n ...inputs.tag,\n value: {\n label: tag?.tag?.name?.current,\n value: tag?.tag?._id,\n },\n } as SearchFacetInputSearchableProps\n\n if (isSearchFacetTag) {\n dispatch(\n searchActions.facetsUpdate({\n name: 'tag',\n operatorType: 'references',\n value: searchFacet.value,\n }),\n )\n } else {\n dispatch(searchActions.facetsAdd({facet: searchFacet}))\n }\n }\n\n return (\n <TagContainer align=\"center\" flex={1} justify=\"space-between\" paddingLeft={3}>\n <Box flex={1}>\n <Text\n muted\n size={1}\n style={{\n opacity: tag?.updating ? 0.5 : 1.0,\n userSelect: 'none',\n }}\n textOverflow=\"ellipsis\"\n >\n {tag?.tag?.name?.current}\n </Text>\n </Box>\n\n <ButtonContainer align=\"center\" style={{flexShrink: 0}}>\n {/* Search facet toggle */}\n {actions?.includes('search') && (\n <TagButton\n disabled={tag?.updating}\n icon={isSearchFacetTag ? <CloseIcon /> : <SearchIcon />}\n onClick={\n isSearchFacetTag ? handleSearchFacetTagRemove : handleSearchFacetTagAddOrUpdate\n }\n tooltip={isSearchFacetTag ? 'Remove filter' : 'Filter by tag'}\n />\n )}\n {/* Edit icon */}\n {actions?.includes('edit') && (\n <TagButton\n disabled={tag?.updating}\n icon={<EditIcon />}\n onClick={handleShowTagEditDialog}\n tone=\"primary\"\n tooltip=\"Edit tag\"\n />\n )}\n {/* Apply to all */}\n {actions?.includes('applyAll') && (\n <TagButton\n disabled={tag?.updating}\n icon={<ArrowUpIcon />}\n onClick={handleShowAddTagToAssetsDialog}\n tone=\"primary\"\n tooltip=\"Add tag to selected assets\"\n />\n )}\n {/* Remove from all */}\n {actions?.includes('removeAll') && (\n <TagButton\n disabled={tag?.updating}\n icon={<ArrowDownIcon />}\n onClick={handleShowRemoveTagFromAssetsDialog}\n tone=\"critical\"\n tooltip=\"Remove tag from selected assets\"\n />\n )}\n\n {/* Delete icon */}\n {actions?.includes('delete') && (\n <TagButton\n disabled={tag?.updating}\n icon={<TrashIcon />}\n onClick={handleShowTagDeleteDialog}\n tone=\"critical\"\n tooltip=\"Delete tag\"\n />\n )}\n </ButtonContainer>\n </TagContainer>\n )\n}\n\nexport default Tag\n","import {Flex, Label} from '@sanity/ui'\nimport {memo, useState} from 'react'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPicked} from '../../modules/assets'\nimport type {TagActions, TagItem} from '../../types'\nimport Tag from '../Tag'\n\nconst VirtualRow = memo(\n ({\n isScrolling,\n item,\n }: {\n isScrolling?: boolean\n item:\n | string\n | (TagItem & {\n actions: TagActions[]\n })\n }) => {\n // Render label\n if (typeof item === 'string') {\n return (\n <Flex\n align=\"center\"\n justify=\"space-between\"\n key={item}\n paddingX={3}\n style={{height: `${PANEL_HEIGHT}px`}}\n >\n <Label size={0}>{item}</Label>\n </Flex>\n )\n }\n\n // Render tag - only display actions if we're not in the process of scrolling\n return <Tag actions={isScrolling ? undefined : item.actions} key={item.tag?._id} tag={item} />\n },\n)\n\nconst TagsVirtualized = ({tags}: {tags: TagItem[]}) => {\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n\n // State\n const [isScrolling, setIsScrolling] = useState(false)\n\n // TODO: refactor, there's most certainly a more performant way to do this\n\n // Filter out all tag IDS used (across all) and dedupe\n const pickedTagIds = assetsPicked?.reduce((acc: string[], val) => {\n const assetTagIds = val?.asset?.opt?.media?.tags?.map((tag) => tag._ref) || []\n acc = acc.concat(assetTagIds)\n return acc\n }, [])\n const pickedTagIdsUnique = [...new Set(pickedTagIds)]\n\n // Segment tags into two buckets:\n // 1. those which exist in all picked assets ('applied to all')\n // 2. those which exist in some picked assets ('applied to some')\n const tagIdsSegmented = pickedTagIdsUnique.reduce(\n (acc: {appliedToAll: string[]; appliedToSome: string[]}, tagId) => {\n const tagIsInEveryAsset = assetsPicked.every((assetItem) => {\n const tagIndex =\n assetItem.asset.opt?.media?.tags?.findIndex((tag) => tag._ref === tagId) ?? -1\n return tagIndex >= 0\n })\n\n if (tagIsInEveryAsset) {\n acc.appliedToAll.push(tagId)\n } else {\n acc.appliedToSome.push(tagId)\n }\n\n return acc\n },\n {\n appliedToAll: [],\n appliedToSome: [],\n },\n )\n\n const tagsAppliedToAll = tags\n .filter((tag) => tagIdsSegmented.appliedToAll.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['delete', 'edit', 'removeAll', 'search'] as TagActions[],\n }))\n const tagsAppliedToSome = tags\n .filter((tag) => tagIdsSegmented.appliedToSome.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['applyAll', 'delete', 'edit', 'removeAll', 'search'] as TagActions[],\n }))\n const tagsUnused = tags\n .filter((tag) => !pickedTagIdsUnique.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['applyAll', 'delete', 'edit', 'search'] as TagActions[],\n }))\n\n let items: (\n | string\n | (TagItem & {\n actions: TagActions[]\n })\n )[] = []\n if (assetsPicked.length === 0) {\n items = tags.map((tagItem) => ({\n ...tagItem,\n actions: ['delete', 'edit', 'search'] as TagActions[],\n }))\n } else {\n if (tagsAppliedToAll?.length > 0) {\n items = [\n ...items, //\n assetsPicked.length === 1 ? 'Used' : 'Used by all',\n ...tagsAppliedToAll,\n ]\n }\n if (tagsAppliedToSome?.length > 0) {\n items = [\n ...items, //\n 'Used by some',\n ...tagsAppliedToSome,\n ]\n }\n if (tagsUnused?.length > 0) {\n items = [\n ...items, //\n 'Unused',\n ...tagsUnused,\n ]\n }\n }\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n if (typeof item === 'string') {\n return item\n }\n return item!.tag._id\n }}\n isScrolling={setIsScrolling}\n itemContent={(index) => {\n return <VirtualRow isScrolling={isScrolling} item={items[index]!} />\n }}\n style={{flex: 1, overflowX: 'hidden'}}\n totalCount={items.length}\n />\n )\n}\n\nexport default TagsVirtualized\n","import {ComposeIcon} from '@sanity/icons/Compose'\nimport {Box, Button, Flex, Inline, Label} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n allowCreate?: boolean\n light?: boolean\n title: string\n}\n\nconst TagViewHeader = ({allowCreate, light, title}: Props) => {\n const scheme = useColorSchemeValue()\n\n const dispatch = useDispatch()\n const tagsCreating = useTypedSelector((state) => state.tags.creating)\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n\n const handleTagCreate = () => {\n dispatch(DIALOG_ACTIONS.showTagCreate())\n }\n\n return (\n <>\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingLeft={3}\n style={{\n background: light ? getSchemeColor(scheme, 'bg') : 'inherit',\n borderBottom: '1px solid var(--card-border-color)',\n flexShrink: 0,\n height: `${PANEL_HEIGHT}px`,\n }}\n >\n <Inline space={2}>\n <Label size={0}>{title}</Label>\n {tagsFetching && (\n <Label size={0} style={{opacity: 0.3}}>\n Loading...\n </Label>\n )}\n </Inline>\n {/* Create new tag button */}\n {allowCreate && (\n <Box marginRight={1}>\n <Button\n disabled={tagsCreating}\n fontSize={1} //\n icon={ComposeIcon}\n mode=\"bleed\"\n onClick={handleTagCreate}\n style={{\n background: 'transparent',\n boxShadow: 'none',\n }}\n />\n </Box>\n )}\n </Flex>\n </>\n )\n}\n\nexport default TagViewHeader\n","import {Box, Flex, Text} from '@sanity/ui'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPickedLength} from '../../modules/assets'\nimport {selectTags} from '../../modules/tags'\nimport TagsVirtualized from '../TagsVirtualized'\nimport TagViewHeader from '../TagViewHeader'\n\nconst TagView = () => {\n const numPickedAssets = useTypedSelector(selectAssetsPickedLength)\n const {excludeTagSlugs} = useToolOptions()\n const tagsAll = useTypedSelector(selectTags)\n const tags =\n excludeTagSlugs.length > 0\n ? tagsAll.filter((t) => !excludeTagSlugs.includes(t.tag.name.current))\n : tagsAll\n const fetching = useTypedSelector((state) => state.tags.fetching)\n const fetchCount = useTypedSelector((state) => state.tags.fetchCount)\n const fetchComplete = fetchCount !== -1\n const hasTags = !fetching && tags?.length > 0\n const hasPicked = !!(numPickedAssets > 0)\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <TagViewHeader\n allowCreate\n light={hasPicked}\n title={hasPicked ? 'Tags (in selection)' : 'Tags'}\n />\n\n {fetchComplete && !hasTags && (\n <Box padding={3}>\n <Text muted size={1}>\n <em>No tags</em>\n </Text>\n </Box>\n )}\n\n {hasTags && <TagsVirtualized tags={tags} />}\n </Flex>\n )\n}\n\nexport default TagView\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogTagsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport TagView from '../TagView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagsProps\n}\n\nconst DialogTags = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"All Tags\" id={id} onClose={handleClose} width={1}>\n <Box\n style={{\n height: '100%',\n minHeight: '420px', // explicit height required as <TagView> is virtualized\n }}\n >\n <TagView />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTags\n","import useTypedSelector from '../../hooks/useTypedSelector'\nimport type {Dialog} from '../../types'\nimport DialogAssetEdit from '../DialogAssetEdit'\nimport DialogAllAssets from '../DialogAssetsOverView'\nimport DialogConfirm from '../DialogConfirm'\nimport DialogFolderCreate from '../DialogFolderCreate'\nimport DialogFolderMove from '../DialogFolderMove'\nimport DialogFolderRename from '../DialogFolderRename'\nimport DialogFolders from '../DialogFolders'\nimport DialogSearchFacets from '../DialogSearchFacets'\nimport DialogTagCreate from '../DialogTagCreate'\nimport DialogTagEdit from '../DialogTagEdit'\nimport DialogTags from '../DialogTags'\n\nconst Dialogs = () => {\n // Redux\n const currentDialogs = useTypedSelector((state) => state.dialog.items)\n\n const renderDialogs = (dialogs: Dialog[], index: number) => {\n if (dialogs.length === 0 || index >= dialogs.length) {\n return null\n }\n\n const dialog = dialogs[index]!\n const childDialogs = renderDialogs(dialogs, index + 1)\n\n if (dialog.type === 'assetEdit') {\n return (\n <DialogAssetEdit dialog={dialog} key={index}>\n {childDialogs}\n </DialogAssetEdit>\n )\n }\n\n if (dialog.type === 'confirm') {\n return (\n <DialogConfirm dialog={dialog} key={index}>\n {childDialogs}\n </DialogConfirm>\n )\n }\n\n if (dialog.type === 'folderCreate') {\n return (\n <DialogFolderCreate dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderCreate>\n )\n }\n\n if (dialog.type === 'folderMove') {\n return (\n <DialogFolderMove dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderMove>\n )\n }\n\n if (dialog.type === 'folderRename') {\n return (\n <DialogFolderRename dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderRename>\n )\n }\n\n if (dialog.type === 'folders') {\n return (\n <DialogFolders dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolders>\n )\n }\n\n if (dialog.type === 'searchFacets') {\n return (\n <DialogSearchFacets dialog={dialog} key={index}>\n {childDialogs}\n </DialogSearchFacets>\n )\n }\n\n if (dialog.type === 'tagCreate') {\n return (\n <DialogTagCreate dialog={dialog} key={index}>\n {childDialogs}\n </DialogTagCreate>\n )\n }\n\n if (dialog.type === 'tagEdit') {\n return (\n <DialogTagEdit dialog={dialog} key={index}>\n {childDialogs}\n </DialogTagEdit>\n )\n }\n\n if (dialog.type === 'tags') {\n return (\n <DialogTags dialog={dialog} key={index}>\n {childDialogs}\n </DialogTags>\n )\n }\n\n if (dialog.type === 'dialogAllAssets') {\n return (\n <DialogAllAssets dialog={dialog} key={index}>\n {childDialogs}\n </DialogAllAssets>\n )\n }\n\n return null\n }\n\n return renderDialogs(currentDialogs, 0)\n}\n\nexport default Dialogs\n","import {useToast} from '@sanity/ui'\nimport {useEffect} from 'react'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\n\nconst Notifications = () => {\n const items = useTypedSelector((state) => state.notifications.items)\n const toast = useToast()\n\n useEffect(() => {\n if (items.length > 0) {\n const lastItem = items[items.length - 1]!\n toast.push({\n closable: true,\n status: lastItem.status,\n title: lastItem.title,\n })\n }\n }, [items, toast])\n\n return null\n}\n\nexport default Notifications\n","import {type PayloadAction, createSlice} from '@reduxjs/toolkit'\n\ntype DebugReducerState = {\n badConnection: boolean\n enabled: boolean\n}\n\nconst initialState = {\n badConnection: false,\n enabled: false,\n} as DebugReducerState\n\nconst debugSlice = createSlice({\n name: 'debug',\n initialState,\n reducers: {\n setBadConnection(state, action: PayloadAction<boolean>) {\n state.badConnection = action.payload\n },\n toggleEnabled(state) {\n state.enabled = !state.enabled\n },\n },\n})\n\nexport const debugActions = {...debugSlice.actions}\n\nexport default debugSlice.reducer\n","import {type PayloadAction, createSlice} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport type {AnyAction} from 'redux'\nimport {ofType} from 'redux-observable'\nimport {of} from 'rxjs'\nimport {bufferTime, filter, mergeMap} from 'rxjs/operators'\n\nimport type {HttpError, ImageAsset, MyEpic} from '../../types'\nimport {assetsActions} from '../assets'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {foldersActions} from '../folders'\nimport {tagsActions} from '../tags'\nimport {uploadsActions} from '../uploads'\n\ntype Notification = {\n asset?: ImageAsset\n status?: 'error' | 'warning' | 'success' | 'info'\n title?: string\n}\n\ntype NotificationsReducerState = {\n items: Notification[]\n}\n\nfunction messageFromGenericErrorPayload(payload: unknown): string {\n if (!payload || typeof payload !== 'object') {\n return 'Unknown error'\n }\n if (\n 'error' in payload &&\n payload.error &&\n typeof payload.error === 'object' &&\n payload.error !== null &&\n 'message' in payload.error\n ) {\n return String((payload.error as HttpError).message)\n }\n if ('message' in payload && typeof (payload as HttpError).message === 'string') {\n return String((payload as HttpError).message)\n }\n return 'Unknown error'\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: MyEpic = (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: MyEpic = (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 notificationsAssetsUploadCompleteEpic: MyEpic = (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 notificationsAssetsTagsAddCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(ASSETS_ACTIONS.tagsAddComplete.match),\n mergeMap((action) => {\n const count = action?.payload?.assets?.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Tag added to ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsTagsRemoveCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(ASSETS_ACTIONS.tagsRemoveComplete.match),\n mergeMap((action) => {\n const count = action?.payload?.assets?.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Tag removed from ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsUpdateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(assetsActions.updateComplete.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const updatedCount = actions.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `${updatedCount} ${pluralize('asset', updatedCount)} updated`,\n }),\n )\n }),\n )\n\nexport const notificationsGenericErrorEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.fetchError.type,\n assetsActions.updateError.type,\n tagsActions.createError.type,\n tagsActions.deleteError.type,\n tagsActions.fetchError.type,\n tagsActions.updateError.type,\n foldersActions.createError.type,\n foldersActions.deleteError.type,\n foldersActions.renameError.type,\n uploadsActions.uploadError.type,\n ),\n mergeMap((action: AnyAction) => {\n const title = `An error occurred: ${messageFromGenericErrorPayload(action['payload'])}`\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title,\n }),\n )\n }),\n )\n\nexport const notificationsTagCreateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.createComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag created`}))),\n )\n\nexport const notificationsTagDeleteCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.deleteComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag deleted`}))),\n )\n\nexport const notificationsTagUpdateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.updateComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag updated`}))),\n )\n\nexport const notificationsFolderCreateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.createComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder created`}))),\n )\n\nexport const notificationsFolderDeleteCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.deleteComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder deleted`}))),\n )\n\nexport const notificationsFolderRenameCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.renameComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder renamed`}))),\n )\n\nexport const notificationsActions = {...notificationsSlice.actions}\n\nexport default notificationsSlice.reducer\n","import {createSlice} from '@reduxjs/toolkit'\nimport type {SanityAssetDocument, SanityDocument, SanityImageAssetDocument} from '@sanity/client'\n\ntype SelectedReducerState = {\n assets: (SanityAssetDocument | SanityImageAssetDocument)[]\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 default selectedSlice.reducer\n","import {type Reducer, type StateFromReducersMapObject, combineReducers} from '@reduxjs/toolkit'\nimport {combineEpics} from 'redux-observable'\n\nimport assetsReducer, {\n assetsDeleteEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchEpic,\n assetsFolderSetEpic,\n assetsFolderSetRefreshEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsTagsAddEpic,\n assetsTagsRemoveEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n assetsUpdateImageReferencesEpic,\n} from './assets'\nimport debugReducer from './debug'\nimport dialogReducer, {\n dialogClearOnAssetUpdateEpic,\n dialogTagCreateEpic,\n dialogTagDeleteEpic,\n} from './dialog'\nimport foldersReducer, {\n foldersCurrentFolderEpic,\n foldersCreateEpic,\n foldersDeleteEpic,\n foldersFetchEpic,\n foldersRefreshEpic,\n foldersRenameEpic,\n} from './folders'\nimport notificationsReducer, {\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsTagsAddCompleteEpic,\n notificationsAssetsTagsRemoveCompleteEpic,\n notificationsAssetsUpdateCompleteEpic,\n notificationsFolderCreateCompleteEpic,\n notificationsFolderDeleteCompleteEpic,\n notificationsFolderRenameCompleteEpic,\n notificationsGenericErrorEpic,\n notificationsTagCreateCompleteEpic,\n notificationsTagDeleteCompleteEpic,\n notificationsTagUpdateCompleteEpic,\n} from './notifications'\nimport searchReducer, {searchFacetTagUpdateEpic} from './search'\nimport selectedReducer from './selected'\nimport tagsReducer, {\n tagsCreateEpic,\n tagsDeleteEpic,\n tagsFetchEpic,\n tagsListenerCreateQueueEpic,\n tagsListenerDeleteQueueEpic,\n tagsListenerUpdateQueueEpic,\n tagsSortEpic,\n tagsUpdateEpic,\n} from './tags'\nimport uploadsReducer, {\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 assetsFolderSetEpic,\n assetsFolderSetRefreshEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsTagsAddEpic,\n assetsTagsRemoveEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n assetsUpdateImageReferencesEpic,\n dialogClearOnAssetUpdateEpic,\n dialogTagCreateEpic,\n dialogTagDeleteEpic,\n foldersCurrentFolderEpic,\n foldersCreateEpic,\n foldersDeleteEpic,\n foldersFetchEpic,\n foldersRefreshEpic,\n foldersRenameEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsTagsAddCompleteEpic,\n notificationsAssetsTagsRemoveCompleteEpic,\n notificationsAssetsUpdateCompleteEpic,\n notificationsFolderCreateCompleteEpic,\n notificationsFolderDeleteCompleteEpic,\n notificationsFolderRenameCompleteEpic,\n notificationsGenericErrorEpic,\n notificationsTagCreateCompleteEpic,\n notificationsTagDeleteCompleteEpic,\n notificationsTagUpdateCompleteEpic,\n searchFacetTagUpdateEpic,\n tagsCreateEpic,\n tagsDeleteEpic,\n tagsFetchEpic,\n tagsListenerCreateQueueEpic,\n tagsListenerDeleteQueueEpic,\n tagsListenerUpdateQueueEpic,\n tagsSortEpic,\n tagsUpdateEpic,\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n)\n\nconst reducers = {\n assets: assetsReducer,\n debug: debugReducer,\n dialog: dialogReducer,\n folders: foldersReducer,\n notifications: notificationsReducer,\n search: searchReducer,\n selected: selectedReducer,\n tags: tagsReducer,\n uploads: uploadsReducer,\n}\n\ntype ReducersMapObject = typeof reducers\n\n// Workaround to avoid `$CombinedState` ts errors\n// source: https://github.com/reduxjs/redux-toolkit/issues/2068#issuecomment-1130796500\n// TODO: remove once we use `redux-toolkit` v2\nexport const rootReducer: Reducer<StateFromReducersMapObject<ReducersMapObject>> =\n combineReducers(reducers)\n","import type {SanityDocument} from '@sanity/client'\n\nconst isPlainObject = (value: any) =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n\n// Recursively search node for any linked asset ids (`asset._type === 'reference'`)\nconst getAssetIds = (node: Record<string, any>, acc: string[] = []) => {\n if (Array.isArray(node)) {\n node.forEach((v) => {\n getAssetIds(v, acc)\n })\n }\n\n if (isPlainObject(node)) {\n if (node?.['asset']?._type === 'reference' && node?.['asset']?._ref) {\n acc.push(node['asset']._ref)\n }\n\n Object.values(node).forEach((val) => {\n getAssetIds(val, acc)\n })\n }\n\n return acc\n}\n\n// Retrieve all linked asset ids from a Sanity document\nconst getDocumentAssetIds = (document: SanityDocument): string[] => {\n const assetIds = getAssetIds(document)\n\n // Sort and dedupe\n return [...new Set(assetIds.sort())]\n}\n\nexport default getDocumentAssetIds\n","import {SUPPORTED_ASSET_TYPES} from '../constants'\nimport type {AssetType} from '../types'\n\n/**\n * Determines whether or not the provided asset type (eg 'image', 'file', 'arbitrary')\n * is a supported asset type for this plugin.\n *\n * @param assetType - The asset type to check.\n * @returns True if the asset type is supported, false otherwise.\n * @internal\n */\nexport function isSupportedAssetType(assetType?: string): assetType is AssetType {\n const supported: string[] = SUPPORTED_ASSET_TYPES\n return assetType ? supported.includes(assetType) : false\n}\n","import {type AnyAction, configureStore, type Store} from '@reduxjs/toolkit'\nimport type {SanityClient} from '@sanity/client'\nimport {type ReactNode, useState} from 'react'\nimport {Provider} from 'react-redux'\nimport {createEpicMiddleware} from 'redux-observable'\nimport type {AssetSourceComponentProps, SanityDocument} from 'sanity'\n\nimport {rootEpic, rootReducer} from '../../modules'\nimport {initialState as assetsInitialState} from '../../modules/assets'\n// import {assetsActions} from '../../modules/assets'\n// import {searchActions} from '../../modules/search'\n// import {uploadsActions} from '../../modules/uploads'\nimport type {RootReducerState} from '../../modules/types'\nimport getDocumentAssetIds from '../../utils/getDocumentAssetIds'\nimport {isSupportedAssetType} from '../../utils/isSupportedAssetType'\n\ntype Props = {\n assetType?: AssetSourceComponentProps['assetType']\n children?: ReactNode\n client: SanityClient\n document?: SanityDocument\n excludeTagSlugs?: string[]\n selectedAssets?: AssetSourceComponentProps['selectedAssets']\n}\n\nfunction createReduxStore(props: Props): Store {\n const epicMiddleware = createEpicMiddleware<AnyAction, AnyAction, RootReducerState>({\n dependencies: {\n client: props.client,\n },\n })\n\n const store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n /*\n serializableCheck: {\n ignoredActions: [\n assetsActions.deleteError.type,\n uploadsActions.uploadRequest.type,\n uploadsActions.uploadStart.type,\n ]\n },\n */\n // TODO: remove once we're no longer storing non-serializable data in the store\n serializableCheck: false,\n thunk: false,\n }).prepend(epicMiddleware),\n devTools: true,\n preloadedState: {\n assets: {\n ...assetsInitialState,\n assetTypes: isSupportedAssetType(props?.assetType) ? [props.assetType] : ['file', 'image'],\n excludeTagSlugs: props.excludeTagSlugs?.length ? [...props.excludeTagSlugs] : [],\n },\n debug: {\n badConnection: false,\n enabled: false,\n },\n dialog: {items: []},\n folders: {\n byId: {},\n childrenByParentId: {},\n rootIds: [],\n exactCountByFolderId: {},\n unfiledCount: 0,\n currentFolderId: null,\n currentFolderUnfiled: false,\n panelVisible: false,\n fetching: false,\n fetchCount: -1,\n creating: false,\n renaming: false,\n },\n notifications: {items: []},\n search: {facets: [], query: ''},\n selected: {\n assets: props.selectedAssets || [],\n document: props.document,\n documentAssetIds: props.document ? getDocumentAssetIds(props.document) : [],\n },\n tags: {\n allIds: [],\n byIds: {},\n creating: false,\n fetchCount: -1,\n fetching: false,\n panelVisible: true,\n },\n uploads: {\n allIds: [],\n byIds: {},\n },\n },\n })\n\n epicMiddleware.run(rootEpic)\n\n return store\n}\n\nfunction ReduxProvider({children, ...props}: Props) {\n const [store] = useState(() => createReduxStore(props))\n\n return <Provider store={store}>{children}</Provider>\n}\n\nexport default ReduxProvider\n","import {PortalProvider} from '@sanity/ui'\nimport {useEffect, useRef} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {type AssetSourceComponentProps, type SanityDocument, useFormValue} from 'sanity'\n\nimport {AssetBrowserDispatchProvider} from '../../contexts/AssetSourceDispatchContext'\nimport useRootPortalElement from '../../hooks/useRootPortalElement'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {assetsActions} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions} from '../../modules/folders'\nimport {tagsActions} from '../../modules/tags'\nimport GlobalStyle from '../../styled/GlobalStyles'\nimport constructFilter from '../../utils/constructFilter'\nimport Dialogs from '../Dialogs'\nimport Notifications from '../Notifications'\nimport ReduxProvider from '../ReduxProvider'\n\n/**\n * Fetches the already-selected asset into the store and opens the `assetEdit`\n * dialog for it. Once that dialog (and any nested dialogs, e.g. delete confirm)\n * are dismissed, the asset source itself is closed via `onClose`.\n *\n * Tracking the dialog lifecycle through redux is what allows the source to be\n * reopened: closing the inner dialog only removes it from the store, so without\n * this the source would stay mounted (showing nothing) and could not be opened\n * a second time.\n */\nconst EditAssetDialog = ({assetId, onClose}: {assetId: string; onClose: () => void}) => {\n const dispatch = useDispatch()\n const openDialogCount = useTypedSelector((state) => state.dialog.items.length)\n const hasOpenedRef = useRef(false)\n\n useEffect(() => {\n // Only fetch the single asset being edited, then open its edit dialog.\n const queryFilter = `${constructFilter({\n assetTypes: ['file', 'image'],\n searchFacets: [],\n })} && _id == $assetId`\n\n dispatch(assetsActions.fetchRequest({params: {assetId}, queryFilter}))\n\n // Tags and folders must be loaded into the store so the edit dialog can\n // resolve the asset's existing tag references and folder path (mirroring\n // `useBrowserInit`). Without this, `selectTagSelectOptions` resolves no tags\n // and saving would patch `opt.media.tags` to null, wiping existing tags.\n dispatch(tagsActions.fetchRequest())\n dispatch(foldersActions.fetchRequest())\n\n dispatch(dialogActions.showAssetEdit({assetId}))\n }, [assetId, dispatch])\n\n useEffect(() => {\n if (openDialogCount > 0) {\n hasOpenedRef.current = true\n } else if (hasOpenedRef.current) {\n onClose()\n }\n }, [openDialogCount, onClose])\n\n return (\n <>\n <Dialogs />\n <Notifications />\n </>\n )\n}\n\nconst EditAssetTool = (props: AssetSourceComponentProps) => {\n const {onClose, selectedAssets} = props\n\n const portalElement = useRootPortalElement()\n\n // `useFormValue` can return null/undefined (e.g. on a pristine/unsaved draft).\n const currentDocument = useFormValue([]) as SanityDocument | null | undefined\n\n const client = useVersionedClient()\n\n const assetId = selectedAssets[0]?._id\n\n // Nothing to edit (e.g. opened on an empty field) – close the source again.\n useEffect(() => {\n if (!assetId) {\n onClose()\n }\n }, [assetId, onClose])\n\n if (!assetId) {\n return null\n }\n\n return (\n <ReduxProvider\n assetType={props.assetType}\n client={client}\n document={currentDocument ?? undefined}\n selectedAssets={selectedAssets}\n >\n <AssetBrowserDispatchProvider onSelect={props.onSelect}>\n <GlobalStyle />\n <PortalProvider element={portalElement}>\n <EditAssetDialog assetId={assetId} onClose={onClose} />\n </PortalProvider>\n </AssetBrowserDispatchProvider>\n </ReduxProvider>\n )\n}\n\nexport default EditAssetTool\n","import {ThLargeIcon} from '@sanity/icons/ThLarge'\nimport {ThListIcon} from '@sanity/icons/ThList'\nimport {Button, Inline} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\nconst ButtonViewGroup = () => {\n // Redux\n const dispatch = useDispatch()\n const view = useTypedSelector((state) => state.assets.view)\n\n return (\n <Inline space={0} style={{whiteSpace: 'nowrap'}}>\n <Button\n fontSize={1}\n icon={ThLargeIcon}\n mode={view === 'grid' ? 'default' : 'ghost'}\n onClick={() => dispatch(assetsActions.viewSet({view: 'grid'}))}\n style={{\n borderBottomRightRadius: 0,\n borderTopRightRadius: 0,\n }}\n />\n <Button\n fontSize={1}\n icon={ThListIcon}\n mode={view === 'table' ? 'default' : 'ghost'}\n onClick={() => dispatch(assetsActions.viewSet({view: 'table'}))}\n style={{\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n }}\n />\n </Inline>\n )\n}\n\nexport default ButtonViewGroup\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Button, Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport {getOrderTitle} from '../../config/orders'\nimport {ORDER_OPTIONS} from '../../constants'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\nconst OrderSelect = () => {\n // Redux\n const dispatch = useDispatch()\n const order = useTypedSelector((state) => state.assets.order)\n\n const popoverProps = usePortalPopoverProps()\n\n return (\n <MenuButton\n button={\n <Button\n fontSize={1}\n icon={SortIcon}\n mode=\"bleed\"\n padding={3}\n text={getOrderTitle(order.field, order.direction)}\n />\n }\n id=\"order\"\n menu={\n <Menu>\n {ORDER_OPTIONS?.map((item, index) => {\n if (item) {\n const selected = order.field === item.field && order.direction === item.direction\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n iconRight={selected}\n key={index}\n onClick={() =>\n dispatch(\n assetsActions.orderSet({\n order: {direction: item.direction, field: item.field},\n }),\n )\n }\n padding={2}\n selected={selected}\n space={4}\n style={{minWidth: '200px'}}\n text={getOrderTitle(item.field, item.direction)}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )\n}\n\nexport default OrderSelect\n","import {Box} from '@sanity/ui'\nimport {useNProgress} from '@tanem/react-nprogress'\n\ntype Props = {\n loading?: boolean\n}\n\nconst Progress = (props: Props) => {\n const {loading} = props\n\n const {animationDuration, isFinished, progress} = useNProgress({\n animationDuration: 300,\n isAnimating: loading,\n })\n\n return (\n <Box\n style={{\n opacity: isFinished ? 0 : 1,\n transition: `opacity ${animationDuration}ms linear`,\n }}\n >\n <Box\n style={{\n height: '1px',\n background: 'rgba(255, 255, 255, 0.5)',\n position: 'absolute',\n left: 0,\n top: 0,\n transition: `width ${animationDuration}ms linear`,\n width: `${progress * 100}%`,\n }}\n />\n </Box>\n )\n}\n\nexport default Progress\n","const TagIcon = () => (\n <svg\n data-sanity-icon=\"media__tag\" // For icon usage with @sanity/ui <Button />\n fill=\"currentColor\"\n height=\"1em\"\n stroke=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n width=\"1em\"\n >\n <path\n d=\"M435.25 48h-122.9a14.46 14.46 0 00-10.2 4.2L56.45 297.9a28.85 28.85 0 000 40.7l117 117a28.85 28.85 0 0040.7 0L459.75 210a14.46 14.46 0 004.2-10.2v-123a28.66 28.66 0 00-28.7-28.8z\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"32\"\n />\n <path d=\"M384 160a32 32 0 1132-32 32 32 0 01-32 32z\" />\n </svg>\n)\n\nexport default TagIcon\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Flex, TextInput} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\n\nconst TextInputSearch = () => {\n // Redux\n const searchQuery = useTypedSelector((state) => state.search.query)\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n dispatch(searchActions.querySet({searchQuery: e.currentTarget.value}))\n }\n\n const handleClear = () => {\n dispatch(searchActions.querySet({searchQuery: ''}))\n }\n\n return (\n <Box style={{position: 'relative'}}>\n <TextInput\n fontSize={1}\n icon={SearchIcon}\n onChange={handleChange}\n placeholder=\"Search\"\n radius={2}\n value={searchQuery}\n />\n\n {/* Clear form button */}\n {searchQuery.length > 0 && (\n <Flex\n align=\"center\"\n justify=\"center\"\n onClick={handleClear}\n style={{\n cursor: 'pointer',\n height: '100%',\n opacity: 0.75,\n position: 'absolute',\n right: 0,\n top: 0,\n width: '2em',\n zIndex: 1, // force stacking context\n }}\n >\n <CloseIcon />\n </Flex>\n )}\n </Box>\n )\n}\n\nexport default TextInputSearch\n","import {FolderIcon} from '@sanity/icons/Folder'\nimport {Box, Button, Flex, Inline, useMediaIndex} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions} from '../../modules/folders'\nimport {tagsActions} from '../../modules/tags'\nimport ButtonViewGroup from '../ButtonViewGroup'\nimport OrderSelect from '../OrderSelect'\nimport Progress from '../Progress'\nimport SearchFacets from '../SearchFacets'\nimport SearchFacetsControl from '../SearchFacetsControl'\nimport TagIcon from '../TagIcon'\nimport TextInputSearch from '../TextInputSearch'\n\nconst Controls = () => {\n // Redux\n const dispatch = useDispatch()\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n const pageIndex = useTypedSelector((state) => state.assets.pageIndex)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n\n const mediaIndex = useMediaIndex()\n\n // Callbacks\n const handleShowSearchFacetDialog = () => {\n dispatch(dialogActions.showSearchFacets())\n }\n\n const handleShowFoldersDialog = () => {\n dispatch(dialogActions.showFolders())\n }\n\n const handleShowTagsDialog = () => {\n dispatch(dialogActions.showTags())\n }\n\n const toggleFoldersPanel = () => {\n dispatch(foldersActions.panelVisibleSet({panelVisible: !foldersPanelVisible}))\n }\n\n const toggleTagsPanelToggle = () => {\n dispatch(tagsActions.panelVisibleSet({panelVisible: !tagsPanelVisible}))\n }\n\n return (\n <Box\n paddingY={2}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n zIndex: 2,\n }}\n >\n {/* Rows: search / filters / orders */}\n <Box marginBottom={2}>\n <Flex\n align=\"flex-start\"\n direction={['column', 'column', 'column', 'column', 'row']}\n justify=\"space-between\"\n >\n {/* Search + Filters */}\n <Flex\n flex={1}\n style={{\n alignItems: 'flex-start',\n flex: 1,\n height: '100%',\n justifyContent: mediaIndex < 2 ? 'space-between' : 'flex-start',\n position: 'relative',\n width: '100%',\n }}\n >\n <Box marginX={2} style={{minWidth: '200px'}}>\n {/* Search */}\n <TextInputSearch />\n </Box>\n\n <Box display={['none', 'none', 'block']}>\n <SearchFacets />\n\n {/* Search Facets Control (add / clear) */}\n <Inline space={2}>\n <SearchFacetsControl />\n </Inline>\n </Box>\n\n <Box display={['block', 'block', 'none']} marginX={2}>\n <Inline space={2} style={{whiteSpace: 'nowrap'}}>\n {/* Filters button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowSearchFacetDialog}\n text={`Filters${searchFacets.length > 0 ? ` (${searchFacets.length})` : ''}`}\n tone=\"primary\"\n />\n\n {/* Tags button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowTagsDialog}\n text={`Tags`}\n tone=\"primary\"\n />\n\n {/* Folders button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowFoldersDialog}\n text=\"Folders\"\n tone=\"primary\"\n />\n </Inline>\n </Box>\n </Flex>\n </Flex>\n </Box>\n\n <Box>\n <Flex align=\"center\" justify={['space-between']}>\n {/* Folders + Views */}\n <Box marginX={2}>\n <Inline space={2} style={{whiteSpace: 'nowrap'}}>\n <Box display={['none', 'none', 'block']}>\n <Button\n aria-label=\"Toggle folders panel\"\n fontSize={1}\n icon={FolderIcon}\n mode={foldersPanelVisible ? 'default' : 'ghost'}\n onClick={toggleFoldersPanel}\n />\n </Box>\n <ButtonViewGroup />\n </Inline>\n </Box>\n\n <Flex marginX={2}>\n {/* Orders */}\n <OrderSelect />\n {/* Tags panel toggle */}\n <Box display={['none', 'none', 'block']} marginLeft={2}>\n <Button\n fontSize={1}\n icon={\n <Box style={{transform: 'scale(0.75)'}}>\n <TagIcon />\n </Box>\n }\n onClick={toggleTagsPanelToggle}\n mode={tagsPanelVisible ? 'default' : 'ghost'}\n text={tagsPanelVisible ? 'Tags' : ''}\n />\n </Box>\n </Flex>\n </Flex>\n </Box>\n\n {/* Progress bar */}\n <Progress key={pageIndex} loading={fetching} />\n </Box>\n )\n}\n\nexport default Controls\n","import {PlugIcon} from '@sanity/icons/Plug'\nimport {Box, Flex, Switch, Text, Tooltip} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {debugActions} from '../../modules/debug'\n\nconst DebugControls = () => {\n // Redux\n const dispatch = useDispatch()\n const badConnection = useTypedSelector((state) => state.debug.badConnection)\n const debugEnabled = useTypedSelector((state) => state.debug.enabled)\n\n // Callbacks\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n\n dispatch(debugActions.setBadConnection(checked))\n }\n\n const handleToggleControls = () => {\n dispatch(debugActions.toggleEnabled())\n }\n\n // Close on escape key press\n useKeyPress('alt+ctrl+shift+/', handleToggleControls)\n\n if (!debugEnabled) {\n return null\n }\n\n return (\n <Box\n padding={4}\n style={{\n bottom: 0,\n left: 0,\n pointerEvents: 'none',\n position: 'fixed',\n width: '100%',\n }}\n >\n {/* Bad connection toggle */}\n <Flex align=\"center\">\n <Box marginRight={3}>\n <Text muted size={1}>\n <PlugIcon />\n </Text>\n </Box>\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {badConnection\n ? 'Bad connection: +3000ms & 50% chance to fail'\n : 'No connection throttling'}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={badConnection}\n onChange={handleChange}\n style={{\n pointerEvents: 'auto',\n }}\n />\n </Tooltip>\n </Flex>\n </Box>\n )\n}\n\nexport default DebugControls\n","import {Box, Button, Inline, Text} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {foldersActions, selectCurrentFolderSegments} from '../../modules/folders'\n\nconst FolderBreadcrumbs = () => {\n const dispatch = useDispatch()\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const segments = useTypedSelector(selectCurrentFolderSegments)\n\n if (!currentFolderId) {\n return null\n }\n\n return (\n <Box display={['block', 'block', 'none']} padding={2}>\n <Inline space={1}>\n <Button\n fontSize={1}\n padding={2}\n mode=\"bleed\"\n onClick={() => dispatch(foldersActions.currentFolderClear())}\n text=\"All assets\"\n />\n\n {segments.map((segment) => (\n <Inline key={segment.id} space={1}>\n <Text muted size={1}>\n /\n </Text>\n <Button\n fontSize={1}\n padding={2}\n mode={currentFolderId === segment.id ? 'default' : 'bleed'}\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId: segment.id}))}\n text={segment.name}\n />\n </Inline>\n ))}\n </Inline>\n </Box>\n )\n}\n\nexport default FolderBreadcrumbs\n","import {Box} from '@sanity/ui'\n\nimport {FOLDERS_PANEL_WIDTH} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport FolderView from '../FolderView'\n\nconst FolderPanel = () => {\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n\n if (!foldersPanelVisible) {\n return null\n }\n\n return (\n <Box\n style={{\n position: 'relative',\n width: FOLDERS_PANEL_WIDTH,\n }}\n >\n <Box\n className=\"media__custom-scrollbar\"\n style={{\n borderRight: '1px solid var(--card-border-color)',\n height: '100%',\n left: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <FolderView />\n </Box>\n </Box>\n )\n}\n\nexport default FolderPanel\n","import {type ReactNode, createContext, useContext, useMemo} from 'react'\n\ntype ContextProps = {\n open: () => void\n}\n\ntype Props = {\n children: ReactNode\n open: () => void\n}\n\nconst DropzoneDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const DropzoneDispatchProvider = (props: Props) => {\n const {children, open} = props\n\n const contextValue: ContextProps = useMemo(() => ({open}), [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 {ArrowRightIcon} from '@sanity/icons/ArrowRight'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button, Flex, Inline, Text} from '@sanity/ui'\nimport pluralize from 'pluralize'\n\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport {useDropzoneActions} from '../../contexts/DropzoneDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\n\ntype Props = {\n onClose?: () => void\n}\n\nconst Header = (props: Props) => {\n const {onClose} = props\n\n const {open} = useDropzoneActions()\n const {onSelect} = useAssetSourceActions()\n\n // Redux\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n const selectedDocument = useTypedSelector((state) => state.selected.document)\n\n const {directUploads} = useToolOptions()\n\n // Row: Current document / close button\n return (\n <Box paddingY={2}>\n <Flex align=\"center\" justify=\"space-between\">\n {/* Label */}\n <Box flex={1} marginX={3}>\n <Inline style={{whiteSpace: 'nowrap'}}>\n <Text textOverflow=\"ellipsis\" weight=\"semibold\">\n <span>{onSelect ? `Insert ${assetTypes.join(' or ')}` : 'Browse Assets'}</span>\n </Text>\n\n {selectedDocument && (\n <Box display={['none', 'none', 'block']}>\n <Text>\n <span style={{margin: '0 0.5em'}}>\n <ArrowRightIcon />\n </span>\n <span style={{textTransform: 'capitalize'}}>{selectedDocument._type}</span>\n </Text>\n </Box>\n )}\n </Inline>\n </Box>\n\n <Flex marginX={2}>\n {/* Upload */}\n {directUploads && (\n <Button\n fontSize={1}\n icon={UploadIcon}\n mode=\"bleed\"\n onClick={open}\n text={`Upload ${assetTypes.length === 1 ? pluralize(assetTypes[0]!) : 'assets'}`}\n />\n )}\n\n {/* Close */}\n {onClose && (\n <Box style={{flexShrink: 0}}>\n <Button\n disabled={!onClose}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onClose}\n radius={2}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n </Box>\n )\n}\n\nexport default Header\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {ChevronUpIcon} from '@sanity/icons/ChevronUp'\nimport {Box, Label} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\ntype Props = {\n field?: string\n title?: string\n}\n\nconst TableHeaderItem = (props: 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\nexport default TableHeaderItem\n","import {Checkbox, Flex, Grid, type ThemeColorSchemeKey, useMediaIndex} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS, PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetsLength, selectAssetsPickedLength} from '../../modules/assets'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport TableHeaderItem from '../TableHeaderItem'\n\n// TODO: DRY\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\nconst TableHeader = () => {\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', // TODO: consider alternative for usability\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\nexport default TableHeader\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {WarningFilledIcon} from '@sanity/icons/WarningFilled'\nimport {\n Box,\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/formatRelative'\nimport filesize from 'filesize'\nimport {\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 {WithReferringDocuments, useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetById} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport getAssetResolution from '../../utils/getAssetResolution'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport {getUniqueDocuments} from '../../utils/getUniqueDocuments'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\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 Props = {\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 ${\n !$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\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\nconst StyledWarningIcon = styled(WarningFilledIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst TableRowAsset = (props: 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 asset = item?.asset\n const error = item?.error\n const isOpaque = item?.asset?.metadata?.isOpaque\n const picked = item?.picked\n const updating = item?.updating\n\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n const handleContextActionClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (selected) return\n if (onSelect && !isMultiSelect) {\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, isMultiSelect, lastPicked, onSelect, picked, selected, shiftPressed],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (selected) return\n if (onSelect && !isMultiSelect) {\n onSelect([{kind: 'assetDocumentId', value: asset._id}])\n } else if (onSelect && isMultiSelect) {\n 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 } 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, isMultiSelect, lastPicked, onSelect, picked, selected, 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 && !isMultiSelect ? (\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', // TODO: consider alternative for usability\n transform: 'scale(0.8)',\n }}\n />\n )}\n </ContextActionContainer>\n\n {/* Preview image + spinner */}\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 {isFileAsset(asset) && <FileIcon extension={asset.extension} width=\"40px\" />}\n\n {/* Image */}\n {isImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!isOpaque}\n src={imageDprUrl(asset, {height: 100, width: 100})}\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 {isImageAsset(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 {/* TODO: DRY */}\n {/* Error button */}\n {error && (\n <Box 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 <StyledWarningIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </Flex>\n </ContainerGrid>\n )\n}\n\nexport default memo(TableRowAsset)\n","import {Box, Flex, Grid, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport {foldersActions} from '../../modules/folders'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n folderId: string\n name: string\n totalCount: number\n}\n\nconst ContainerGrid = styled(Grid)(\n ({theme}) => css`\n align-items: center;\n cursor: pointer;\n height: 100%;\n user-select: none;\n white-space: nowrap;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${theme.sanity.color.card.enabled.bg};\n }\n }\n `,\n)\n\nconst FolderBadge = styled(Box)(\n ({theme}) => css`\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 6px;\n height: 42px;\n position: relative;\n width: 52px;\n\n &::before {\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 6px 6px 0 0;\n content: '';\n height: 12px;\n left: 0;\n position: absolute;\n top: -6px;\n width: 18px;\n }\n `,\n)\n\nconst TableRowFolder = ({folderId, name, totalCount}: Props) => {\n const dispatch = useDispatch()\n const mediaIndex = useMediaIndex()\n const scheme = useColorSchemeValue()\n\n return (\n <ContainerGrid\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId}))}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridTemplateColumns:\n mediaIndex < 3 ? GRID_TEMPLATE_COLUMNS.SMALL : GRID_TEMPLATE_COLUMNS.LARGE,\n gridTemplateRows: mediaIndex < 3 ? 'auto' : '1fr',\n }}\n >\n <Box />\n <Flex align=\"center\" justify=\"center\" style={{gridColumn: 2, height: '90px', width: '100px'}}>\n <FolderBadge />\n </Flex>\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{gridColumn: mediaIndex < 3 ? 3 : 3, gridRow: mediaIndex < 3 ? '2/4' : 'auto'}}\n >\n <Stack space={2}>\n <Text size={1} style={{lineHeight: '1.2em'}} textOverflow=\"ellipsis\" weight=\"semibold\">\n {name}\n </Text>\n <Text muted size={0} style={{lineHeight: '1.1em'}}>\n Folder\n </Text>\n </Stack>\n </Box>\n <Box style={{display: mediaIndex < 3 ? 'none' : 'block', gridColumn: 7}}>\n <Text muted size={1}>\n {totalCount} item{totalCount === 1 ? '' : 's'}\n </Text>\n </Box>\n <Box style={{display: mediaIndex < 3 ? 'none' : 'block', gridColumn: 8}}>\n <Text muted size={1}>\n Open folder\n </Text>\n </Box>\n <Box />\n </ContainerGrid>\n )\n}\n\nexport default TableRowFolder\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Button, Flex, Grid, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport filesize from 'filesize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectUploadById, uploadsActions} from '../../modules/uploads'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\n id: string\n}\n\nconst TableRowUpload = (props: 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 const mediaIndex = useMediaIndex()\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 <Grid\n style={{\n alignItems: 'center',\n background: getSchemeColor(scheme, 'bg'),\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 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 {/* Image */}\n <Box\n style={{\n gridColumn: 2,\n gridRowStart: mediaIndex < 3 ? 1 : 'auto',\n gridRowEnd: mediaIndex < 3 ? 'span 4' : 'auto',\n height: '90px',\n width: '100px',\n }}\n >\n <Box style={{height: '100%', position: 'relative'}}>\n {item.assetType === 'image' && item?.objectUrl && (\n <Image\n draggable={false}\n $scheme={scheme}\n src={item.objectUrl}\n style={{opacity: 0.25}}\n />\n )}\n\n {item.assetType === 'file' && (\n <div style={{height: '100%', opacity: 0.1}}>\n <FileIcon width=\"40px\" />\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 justify=\"center\"\n style={{\n position: 'absolute',\n height: '100%',\n left: 0,\n top: 0,\n width: '100%',\n }}\n >\n <Button\n fontSize={3}\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 </Box>\n\n {/* Filename */}\n <Box\n style={{\n gridColumn: mediaIndex < 3 ? 3 : '3/8',\n gridRow: mediaIndex < 3 ? '2/4' : 'auto',\n marginLeft: mediaIndex < 3 ? 3 : 0,\n }}\n >\n <Stack space={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {item.name} ({fileSize})\n </Text>\n <Text size={1} textOverflow=\"ellipsis\" weight=\"semibold\">\n {status}\n </Text>\n </Stack>\n </Box>\n </Grid>\n )\n}\n\nexport default TableRowUpload\n","import {Box} from '@sanity/ui'\nimport {memo} from 'react'\nimport {GroupedVirtuoso} from 'react-virtuoso'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../../types'\nimport TableHeader from '../TableHeader'\nimport TableRowAsset from '../TableRowAsset'\nimport TableRowFolder from '../TableRowFolder'\nimport TableRowUpload from '../TableRowUpload'\n\ntype Props = {\n items: (CardAssetData | CardFolderData | CardUploadData)[]\n onLoadMore?: () => void\n}\n\nconst VirtualRow = memo(\n ({\n item,\n selected,\n }: {\n item: CardAssetData | CardFolderData | CardUploadData\n selected: boolean\n }) => {\n if (item?.type === 'asset') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowAsset id={item.id} selected={selected} />\n </Box>\n )\n }\n\n if (item?.type === 'folder') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowFolder folderId={item.folderId} name={item.name} totalCount={item.totalCount} />\n </Box>\n )\n }\n\n if (item?.type === 'upload') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowUpload id={item.id} />\n </Box>\n )\n }\n\n return null\n },\n)\n\nconst AssetTableVirtualized = (props: 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 <GroupedVirtuoso\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n return item?.id || index\n }}\n endReached={onLoadMore}\n groupCounts={Array(1).fill(totalCount)}\n groupContent={() => {\n return <TableHeader />\n }}\n itemContent={(index) => {\n const item = items[index]\n const selected = selectedIds.includes(item?.id || '')\n return <VirtualRow item={item!} selected={selected} />\n }}\n style={{overflowX: 'hidden'}}\n />\n )\n}\n\nexport default AssetTableVirtualized\n","import {Box, Text, useMediaIndex} from '@sanity/ui'\nimport {useEffect} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {selectCombinedItems} from '../../modules/selectors'\nimport {tagsActions} from '../../modules/tags'\nimport AssetGridVirtualized from '../AssetGridVirtualized'\nimport AssetTableVirtualized from '../AssetTableVirtualized'\n\nconst Items = () => {\n // Redux\n const dispatch = useDispatch()\n const fetchCount = useTypedSelector((state) => state.assets.fetchCount)\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n const view = useTypedSelector((state) => state.assets.view)\n const combinedItems = useTypedSelector(selectCombinedItems)\n\n const mediaIndex = useMediaIndex()\n\n const hasFetchedOnce = fetchCount >= 0\n const hasItems = combinedItems.length > 0\n\n // Only load 1 page of items at a time.\n const handleLoadMoreItems = () => {\n if (!fetching) {\n dispatch(assetsActions.loadNextPage())\n }\n }\n\n // Effects\n\n // - Hide folders/tags panels on smaller breakpoints\n useEffect(() => {\n if (mediaIndex <= 1 && foldersPanelVisible) {\n dispatch(foldersActions.panelVisibleSet({panelVisible: false}))\n }\n\n if (mediaIndex <= 1 && tagsPanelVisible) {\n dispatch(tagsActions.panelVisibleSet({panelVisible: false}))\n }\n }, [dispatch, foldersPanelVisible, mediaIndex, tagsPanelVisible])\n\n const isEmpty = !hasItems && hasFetchedOnce && !fetching\n\n return (\n <Box flex={1} style={{width: '100%'}}>\n {isEmpty ? (\n <Box padding={4}>\n <Text size={1} weight=\"semibold\">\n No results for the current query\n </Text>\n </Box>\n ) : (\n <>\n {view === 'grid' && (\n <AssetGridVirtualized items={combinedItems} onLoadMore={handleLoadMoreItems} />\n )}\n\n {view === 'table' && (\n <AssetTableVirtualized items={combinedItems} onLoadMore={handleLoadMoreItems} />\n )}\n </>\n )}\n </Box>\n )\n}\n\nexport default Items\n","import {Box, Button, Flex, Label} from '@sanity/ui'\nimport pluralize from 'pluralize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport {isImageAsset} from '../../utils/typeGuards'\n\nconst PickedBar = () => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n // Replace only rewrites image field refs — only offer it for a single image asset.\n const canReplace =\n assetsPicked.length === 1 && !!assetsPicked[0] && isImageAsset(assetsPicked[0].asset)\n\n // Callbacks\n const handlePickClear = () => {\n dispatch(assetsActions.pickClear())\n }\n\n const handleDeletePicked = () => {\n dispatch(dialogActions.showConfirmDeleteAssets({assets: assetsPicked}))\n }\n\n const handleReplaceImages = () => {\n const assetId = assetsPicked[0]?.asset._id\n if (!assetId) {\n return\n }\n dispatch(dialogActions.showAllAssetsDialog({assetId}))\n }\n\n const handleMovePicked = () =>\n dispatch(DIALOG_ACTIONS.showFolderMove({assets: assetsPicked, folderId: currentFolderId}))\n\n const handleRemovePickedFromFolder = () =>\n dispatch(assetsActions.folderSetRequest({assets: assetsPicked, folderId: null}))\n\n const handleInsertPicked = () => {\n if (!onSelect) {\n return\n }\n\n const pickedAssetIds = assetsPicked.map((item) => ({\n kind: 'assetDocumentId' as const,\n value: item.asset._id,\n }))\n\n if (pickedAssetIds.length === 0) {\n return\n }\n\n onSelect(pickedAssetIds)\n }\n\n if (assetsPicked.length === 0) {\n return null\n }\n\n return (\n <Flex\n align=\"center\"\n justify=\"flex-start\"\n style={{\n background: getSchemeColor(scheme, 'bg'),\n borderBottom: '1px solid var(--card-border-color)',\n height: `${PANEL_HEIGHT}px`,\n position: 'relative',\n width: '100%',\n }}\n >\n <Flex align=\"center\" paddingX={3}>\n <Box paddingRight={2}>\n <Label size={0} style={{color: 'inherit'}}>\n {assetsPicked.length} {pluralize('asset', assetsPicked.length)} selected\n </Label>\n </Box>\n\n {/* Deselect button */}\n <Button\n mode=\"bleed\"\n onClick={handlePickClear}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"default\"\n >\n <Label size={0}>Deselect</Label>\n </Button>\n\n {onSelect && isMultiSelect ? (\n <Button\n mode=\"bleed\"\n onClick={handleInsertPicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"primary\"\n >\n <Label size={0}>Insert selected</Label>\n </Button>\n ) : (\n <Button\n mode=\"bleed\"\n onClick={handleDeletePicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n >\n <Label size={0}>Delete</Label>\n </Button>\n )}\n\n {/* Replace button */}\n {canReplace && (\n <Button\n mode=\"bleed\"\n onClick={handleReplaceImages}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"default\"\n >\n <Label size={0}>Replace</Label>\n </Button>\n )}\n\n {!onSelect && (\n <>\n <Button\n mode=\"bleed\"\n onClick={handleMovePicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"primary\"\n >\n <Label size={0}>Move to folder</Label>\n </Button>\n {currentFolderId && (\n <Button\n mode=\"bleed\"\n onClick={handleRemovePickedFromFolder}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n >\n <Label size={0}>Remove from folder</Label>\n </Button>\n )}\n </>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default PickedBar\n","import {Box} from '@sanity/ui'\n\nimport {TAGS_PANEL_WIDTH} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport TagView from '../TagView'\n\nconst TagsPanel = () => {\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n\n if (!tagsPanelVisible) {\n return null\n }\n\n return (\n <Box\n style={{\n position: 'relative',\n width: TAGS_PANEL_WIDTH,\n }}\n >\n <Box\n className=\"media__custom-scrollbar\"\n style={{\n borderLeft: '1px solid var(--card-border-color)',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '100%',\n }}\n >\n <TagView />\n </Box>\n </Box>\n )\n}\n\nexport default TagsPanel\n","import {white} from '@sanity/color'\nimport {Flex, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {type DropEvent, type DropzoneOptions, useDropzone} from 'react-dropzone'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport {DropzoneDispatchProvider} from '../../contexts/DropzoneDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {notificationsActions} from '../../modules/notifications'\nimport {uploadsActions} from '../../modules/uploads'\n\ntype Props = {\n children: ReactNode\n}\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 // do nothing: file is a package or folder\n }\n }\n\n return filteredFiles\n}\n\nconst UploadDropzone = (props: Props) => {\n const {children} = props\n\n const {\n dropzone: {maxSize},\n directUploads,\n } = useToolOptions()\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] === '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 maxSize,\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\nexport default UploadDropzone\n","import type {MutationEvent, SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {useEffect} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport type {Dispatch} from 'redux'\nimport type {AssetSourceComponentProps} from 'sanity'\n\nimport {inputs} from '../../config/searchFacets'\nimport {FOLDER_DOCUMENT_NAME, TAG_DOCUMENT_NAME} from '../../constants'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {searchActions} from '../../modules/search'\nimport {tagsActions} from '../../modules/tags'\nimport type {RootReducerState} from '../../modules/types'\nimport type {Asset, Tag} from '../../types'\n\nfunction getMediaTagNames(schemaType?: AssetSourceComponentProps['schemaType']): string[] {\n const mediaTags = (schemaType?.options as {mediaTags?: string[]} | undefined)?.mediaTags\n if (!mediaTags?.length) return []\n const unique = new Set(\n mediaTags.map((t) => t?.trim()).filter((t): t is string => Boolean(t?.length)),\n )\n return Array.from(unique)\n}\n\nfunction createAssetHandler(dispatch: Dispatch) {\n return (update: MutationEvent) => {\n const {documentId, result, transition} = update\n\n switch (transition) {\n case 'appear':\n dispatch(assetsActions.listenerCreateQueue({asset: result as Asset}))\n break\n case 'disappear':\n dispatch(assetsActions.listenerDeleteQueue({assetId: documentId}))\n break\n case 'update':\n dispatch(assetsActions.listenerUpdateQueue({asset: result as Asset}))\n break\n default:\n break\n }\n }\n}\n\nfunction createTagHandler(dispatch: Dispatch) {\n return (update: MutationEvent) => {\n const {documentId, result, transition} = update\n\n switch (transition) {\n case 'appear':\n dispatch(tagsActions.listenerCreateQueue({tag: result as Tag}))\n break\n case 'disappear':\n dispatch(tagsActions.listenerDeleteQueue({tagId: documentId}))\n break\n case 'update':\n dispatch(tagsActions.listenerUpdateQueue({tag: result as Tag}))\n break\n default:\n break\n }\n }\n}\n\nexport function useBrowserInit(\n client: SanityClient,\n schemaType?: AssetSourceComponentProps['schemaType'],\n): void {\n const dispatch = useDispatch()\n const tagsByIds = useSelector((state: RootReducerState) => state.tags.byIds)\n const tagsFetchCount = useSelector((state: RootReducerState) => state.tags.fetchCount)\n\n const tagNames = getMediaTagNames(schemaType)\n const hasMediaTags = tagNames.length > 0\n\n useEffect(() => {\n if (!hasMediaTags) {\n dispatch(searchActions.facetsClear())\n }\n\n dispatch(tagsActions.fetchRequest())\n\n // Fetch all folders\n dispatch(foldersActions.fetchRequest())\n\n const assetSubscription = client\n .listen(\n groq`*[_type in [\"sanity.fileAsset\", \"sanity.imageAsset\"] && !(_id in path(\"drafts.**\"))]`,\n )\n .subscribe(createAssetHandler(dispatch))\n\n const tagSubscription = client\n .listen(groq`*[_type == \"${TAG_DOCUMENT_NAME}\" && !(_id in path(\"drafts.**\"))]`)\n .subscribe(createTagHandler(dispatch))\n\n const folderSubscription = client\n .listen(groq`*[_type == \"${FOLDER_DOCUMENT_NAME}\" && !(_id in path(\"drafts.**\"))]`)\n .subscribe(() => dispatch(foldersActions.fetchRequest()))\n\n return () => {\n assetSubscription.unsubscribe()\n tagSubscription.unsubscribe()\n folderSubscription.unsubscribe()\n }\n }, [client, dispatch, hasMediaTags])\n\n // When mediaTags are configured, wait for the tag fetch to complete then apply facets.\n // Dispatching clear + add synchronously keeps all actions within assetsSearchEpic's\n // 400ms debounce window, so the browser performs exactly one asset fetch on open.\n useEffect(() => {\n if (!hasMediaTags || tagsFetchCount < 0) return\n\n const tagFacetInput = inputs.tag\n if (tagFacetInput.type !== 'searchable') return\n\n const resolvedTags = tagNames\n .map((name) => Object.values(tagsByIds).find((item) => item.tag.name.current === name))\n .filter((item): item is NonNullable<typeof item> => Boolean(item))\n\n dispatch(searchActions.facetsClear())\n\n for (const tagItem of resolvedTags) {\n dispatch(\n searchActions.facetsAdd({\n facet: {\n ...tagFacetInput,\n operatorType: 'references',\n value: {label: tagItem.tag.name.current, value: tagItem.tag._id},\n },\n }),\n )\n }\n }, [tagsFetchCount, hasMediaTags]) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import {Card, Flex, PortalProvider} from '@sanity/ui'\nimport {useState} from 'react'\nimport {type AssetSourceComponentProps, type SanityDocument} from 'sanity'\n\nimport {AssetBrowserDispatchProvider} from '../../contexts/AssetSourceDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport GlobalStyle from '../../styled/GlobalStyles'\nimport Controls from '../Controls'\nimport DebugControls from '../DebugControls'\nimport Dialogs from '../Dialogs'\nimport FolderBreadcrumbs from '../FolderBreadcrumbs'\nimport FolderPanel from '../FolderPanel'\nimport Header from '../Header'\nimport Items from '../Items'\nimport Notifications from '../Notifications'\nimport PickedBar from '../PickedBar'\nimport ReduxProvider from '../ReduxProvider'\nimport TagsPanel from '../TagsPanel'\nimport UploadDropzone from '../UploadDropzone'\nimport {useBrowserInit} from './useBrowserInit'\n\ntype Props = {\n assetType?: AssetSourceComponentProps['assetType']\n document?: SanityDocument\n isMultiSelect?: boolean\n onClose?: AssetSourceComponentProps['onClose']\n onSelect?: AssetSourceComponentProps['onSelect']\n selectedAssets?: AssetSourceComponentProps['selectedAssets']\n schemaType?: AssetSourceComponentProps['schemaType']\n}\n\nconst BrowserContent = ({\n onClose,\n schemaType,\n}: {\n onClose?: AssetSourceComponentProps['onClose']\n schemaType?: AssetSourceComponentProps['schemaType']\n}) => {\n const client = useVersionedClient()\n const [portalElement, setPortalElement] = useState<HTMLDivElement | null>(null)\n\n useBrowserInit(client, schemaType)\n\n return (\n <PortalProvider element={portalElement}>\n <UploadDropzone>\n <Dialogs />\n <Notifications />\n\n <Card data-testid=\"media-browser\" display=\"flex\" height=\"fill\" ref={setPortalElement}>\n <Flex direction=\"column\" flex={1}>\n {/* Header */}\n <Header onClose={onClose} />\n\n {/* Browser Controls */}\n <Controls />\n\n <FolderBreadcrumbs />\n\n <Flex flex={1}>\n <FolderPanel />\n <Flex align=\"flex-end\" direction=\"column\" flex={1} style={{position: 'relative'}}>\n <PickedBar />\n <Items />\n </Flex>\n <TagsPanel />\n </Flex>\n\n {/* Debug */}\n <DebugControls />\n </Flex>\n </Card>\n </UploadDropzone>\n </PortalProvider>\n )\n}\n\nconst Browser = (props: Props) => {\n const client = useVersionedClient()\n const {excludeTagSlugs} = useToolOptions()\n\n return (\n <ReduxProvider\n assetType={props?.assetType}\n client={client}\n document={props?.document}\n excludeTagSlugs={excludeTagSlugs}\n selectedAssets={props?.selectedAssets}\n >\n <AssetBrowserDispatchProvider isMultiSelect={props?.isMultiSelect} onSelect={props?.onSelect}>\n <GlobalStyle />\n <BrowserContent onClose={props?.onClose} schemaType={props?.schemaType} />\n </AssetBrowserDispatchProvider>\n </ReduxProvider>\n )\n}\n\nexport default Browser\n","import {Box, Portal, PortalProvider, useLayer} from '@sanity/ui'\nimport {type SyntheticEvent} from 'react'\nimport {type AssetSourceComponentProps, type SanityDocument, useFormValue} from 'sanity'\n\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useRootPortalElement from '../../hooks/useRootPortalElement'\nimport Browser from '../Browser'\n\nconst FormBuilderTool = (props: AssetSourceComponentProps) => {\n const {onClose} = props\n\n const portalElement = useRootPortalElement()\n\n // Get current Sanity document\n const currentDocument = useFormValue([]) as SanityDocument\n const selectionType = (props as unknown as {selectionType?: string})?.selectionType\n const schemaJsonType = (props?.schemaType as {jsonType?: string} | undefined)?.jsonType\n const isMultiSelect = selectionType === 'multiple' || schemaJsonType === 'array'\n\n // Close on escape key press\n useKeyPress('escape', onClose)\n\n // Stop propagation and prevent document mouse events from firing.\n // This is a bit of a hack to make this work with `editModal = 'popover'` and prevent Sanity's <Popover /> component from\n // prematurely closing, as it attaches events on `document` to detect outside clicks.\n const handleStopPropagation = (event: SyntheticEvent) => {\n event.nativeEvent.stopImmediatePropagation()\n event.stopPropagation()\n }\n\n const {zIndex} = useLayer()\n\n return (\n <PortalProvider element={portalElement}>\n <Portal>\n <Box\n onDragEnter={handleStopPropagation}\n onDragLeave={handleStopPropagation}\n onDragOver={handleStopPropagation}\n onDrop={handleStopPropagation}\n onMouseUp={handleStopPropagation}\n style={{\n bottom: 0,\n height: 'auto',\n left: 0,\n position: 'fixed',\n top: 0,\n width: '100%',\n zIndex,\n }}\n >\n <Browser\n document={currentDocument}\n isMultiSelect={isMultiSelect}\n schemaType={props.schemaType}\n {...props}\n />\n </Box>\n </Portal>\n </PortalProvider>\n )\n}\n\nexport default FormBuilderTool\n","import {Flex} from '@sanity/ui'\n\nimport Browser from '../Browser'\n\nconst Tool = () => {\n return (\n <Flex direction=\"column\" height=\"fill\" flex={1}>\n <Browser />\n </Flex>\n )\n}\n\nexport default Tool\n","import {FolderIcon} from '@sanity/icons/Folder'\n\nimport {FOLDER_DOCUMENT_NAME} from '../constants'\n\nexport default {\n title: 'Media Folder',\n icon: FolderIcon,\n name: FOLDER_DOCUMENT_NAME,\n type: 'document',\n fields: [\n {\n title: 'Name',\n name: 'name',\n type: 'string',\n },\n {\n title: 'Parent',\n name: 'parent',\n type: 'reference',\n to: [{type: FOLDER_DOCUMENT_NAME}],\n weak: true,\n },\n ],\n preview: {\n select: {\n name: 'name',\n parentName: 'parent.name',\n },\n prepare(selection: {name?: string; parentName?: string}): {\n media: typeof FolderIcon\n subtitle?: string\n title: string\n } {\n const {name, parentName} = selection\n return {\n media: FolderIcon,\n title: name || 'Folder',\n subtitle: parentName ? `in ${parentName}` : undefined,\n }\n },\n },\n}\n","import TagIcon from '../components/TagIcon'\nimport {TAG_DOCUMENT_NAME} from '../constants'\n\nexport default {\n title: 'Media Tag',\n icon: TagIcon,\n name: TAG_DOCUMENT_NAME,\n type: 'document',\n fields: [\n {\n title: 'Name',\n name: 'name',\n type: 'slug',\n },\n ],\n preview: {\n select: {\n name: 'name',\n },\n prepare(selection: any) {\n const {name} = selection\n return {\n media: TagIcon,\n title: name?.current,\n }\n },\n },\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {ImageIcon} from '@sanity/icons/Image'\nimport {type AssetSource, type Tool as SanityTool, definePlugin} from 'sanity'\n\nimport EditAssetTool from './components/EditAssetTool'\nimport FormBuilderTool from './components/FormBuilderTool'\nimport Tool from './components/Tool'\nimport {ToolOptionsProvider} from './contexts/ToolOptionsContext'\nimport mediaFolder from './schemas/folder'\nimport mediaTag from './schemas/tag'\nimport type {MediaToolOptions} from './types'\n\nconst plugin = {\n icon: ImageIcon,\n name: 'media',\n title: 'Media',\n}\n\nexport const mediaAssetSource = {\n ...plugin,\n component: FormBuilderTool,\n} satisfies AssetSource\n\nconst editMediaAssetSource = {\n icon: EditIcon,\n name: 'edit-media',\n title: 'Edit Media',\n component: EditAssetTool,\n} satisfies AssetSource\n\nconst tool = {\n ...plugin,\n component: Tool,\n __internalApplicationType: 'sanity/media',\n} satisfies SanityTool\n\nexport const media = definePlugin<MediaToolOptions | void>((options) => ({\n name: 'media',\n studio: {\n components: {\n layout: (props) => (\n <ToolOptionsProvider options={options}>{props.renderDefault(props)}</ToolOptionsProvider>\n ),\n },\n },\n form: {\n file: {\n assetSources: (prev) => {\n return [...prev, mediaAssetSource, editMediaAssetSource]\n },\n },\n image: {\n assetSources: (prev) => {\n return [...prev, mediaAssetSource, editMediaAssetSource]\n },\n },\n },\n schema: {\n types: [mediaTag, mediaFolder],\n },\n tools: (prev) => {\n return [...prev, tool]\n },\n}))\n","import type {SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\n\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {Tag} from '../types'\n\ntype ApplyMediaTagsOptions = {\n client: SanityClient\n assetId: string\n mediaTags: string[]\n createTagsOnUpload?: boolean\n}\n\n// Serialize calls per asset so concurrent fields reading the same asset\n// don't race each other — the second call always runs after the first commits.\nconst pendingByAsset = new Map<string, Promise<void>>()\n\nexport function applyMediaTags(options: ApplyMediaTagsOptions): Promise<void> {\n const {assetId} = options\n const chain = (pendingByAsset.get(assetId) ?? Promise.resolve()).then(() =>\n doApplyMediaTags(options),\n )\n const cleanup = chain\n .catch(() => {})\n .finally(() => {\n if (pendingByAsset.get(assetId) === cleanup) pendingByAsset.delete(assetId)\n })\n pendingByAsset.set(assetId, cleanup)\n return chain\n}\n\nasync function doApplyMediaTags({\n client,\n assetId,\n mediaTags,\n createTagsOnUpload = true,\n}: ApplyMediaTagsOptions): Promise<void> {\n if (!mediaTags || mediaTags.length === 0) return\n\n const resolvedTags = await Promise.all(\n mediaTags.map(async (tagName) => {\n const existingTag = await client.fetch<Tag | null>(\n groq`*[_type == \"${TAG_DOCUMENT_NAME}\" && name.current == $tagName][0]`,\n {tagName},\n )\n if (existingTag) return existingTag\n if (createTagsOnUpload) {\n const newTag = await client.create({\n _type: TAG_DOCUMENT_NAME,\n name: {_type: 'slug', current: tagName},\n })\n return newTag as Tag\n }\n return null\n }),\n )\n\n const validTags = resolvedTags.filter((tag): tag is Tag => tag !== null)\n if (validTags.length === 0) return\n\n const existing = await client.fetch<{tagIds: string[]} | null>(\n groq`*[_id == $assetId][0]{'tagIds': opt.media.tags[]._ref}`,\n {assetId},\n {useCdn: false}, // bypass CDN cache so we see the latest committed tag refs\n )\n const existingIds = new Set(existing?.tagIds ?? [])\n\n const tagReferences = validTags\n .filter((tag) => !existingIds.has(tag._id))\n .map((tag) => ({\n _key: nanoid(),\n _ref: tag._id,\n _type: 'reference' as const,\n _weak: true,\n }))\n\n if (tagReferences.length === 0) return\n\n await client\n .patch(assetId)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .setIfMissing({'opt.media.tags': []})\n .append('opt.media.tags', tagReferences)\n .commit()\n}\n","import {useToast} from '@sanity/ui'\nimport {useEffect, useRef} from 'react'\nimport {type InputProps} from 'sanity'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {applyMediaTags} from '../../utils/applyMediaTags'\n\ntype AssetValue = {\n _type: 'image' | 'file'\n asset?: {\n _ref: string\n _type: 'reference'\n }\n}\n\nexport type AutoTagInputProps = InputProps & {\n mediaTags?: string[]\n}\n\n/**\n * Input component that automatically applies media tags when an asset is selected or uploaded.\n *\n * Apply explicitly to image/file fields that should be auto-tagged:\n * ```ts\n * import {AutoTagInput} from 'sanity-plugin-media'\n *\n * defineField({\n * type: 'image',\n * options: { mediaTags: ['product'] }, // also pre-filters the media browser\n * components: { input: AutoTagInput },\n * })\n * ```\n *\n * Pass `mediaTags` as a prop to override or use without `options`:\n * ```ts\n * components: { input: (props) => <AutoTagInput {...props} mediaTags={['product']} /> }\n * ```\n */\nexport function AutoTagInput(props: AutoTagInputProps) {\n const {renderDefault, schemaType, value, mediaTags: mediaTagsProp} = props\n const toast = useToast()\n\n // Prop takes precedence; fall back to schemaType.options.mediaTags (set for browser pre-filtering)\n const mediaTags =\n mediaTagsProp ?? (schemaType?.options as {mediaTags?: string[]} | undefined)?.mediaTags\n\n const client = useVersionedClient()\n const {createTagsOnUpload} = useToolOptions()\n\n const prevAssetRef = useRef<string | undefined>(undefined)\n const isInitialMount = useRef(true)\n\n const currentAssetRef = (value as AssetValue | undefined)?.asset?._ref\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false\n prevAssetRef.current = currentAssetRef\n return\n }\n\n const previousRef = prevAssetRef.current\n prevAssetRef.current = currentAssetRef\n\n if (!mediaTags?.length || !currentAssetRef || currentAssetRef === previousRef) return\n\n applyMediaTags({\n client,\n assetId: currentAssetRef,\n mediaTags,\n createTagsOnUpload,\n }).catch((err) => {\n console.error('[sanity-plugin-media] Failed to apply auto-tags:', err)\n const label = mediaTags.length === 1 ? 'tag' : 'tags'\n toast.push({\n closable: true,\n status: 'error',\n title: `Failed to apply the media ${label} ${mediaTags.join(', ')}`,\n })\n })\n }, [currentAssetRef, mediaTags, client, createTagsOnUpload, toast])\n\n return renderDefault(props as InputProps)\n}\n","import type {\n FieldDefinitionBase,\n FileDefinition,\n ImageDefinition,\n WidenInitialValue,\n WidenValidation,\n} from 'sanity'\n\nimport {AutoTagInput} from '../components/AutoTagInputWrapper'\n\ntype ImageMediaFieldConfig = Omit<ImageDefinition, 'options'> &\n FieldDefinitionBase & {\n name: string\n mediaTags: string[]\n options?: ImageDefinition['options']\n }\n\ntype FileMediaFieldConfig = Omit<FileDefinition, 'options'> &\n FieldDefinitionBase & {\n name: string\n mediaTags: string[]\n options?: FileDefinition['options']\n }\n\ntype ImageMediaFieldResult = Omit<ImageDefinition, 'options'> &\n FieldDefinitionBase & {\n options?: ImageDefinition['options'] & {mediaTags: string[]}\n components: {input: typeof AutoTagInput}\n } & WidenValidation &\n WidenInitialValue\n\ntype FileMediaFieldResult = Omit<FileDefinition, 'options'> &\n FieldDefinitionBase & {\n options?: FileDefinition['options'] & {mediaTags: string[]}\n components: {input: typeof AutoTagInput}\n } & WidenValidation &\n WidenInitialValue\n\n/**\n * Defines an image or file field with automatic media tag application when an asset is selected.\n *\n * Pass `mediaTags` at the top level — they are moved into `options.mediaTags` (for media browser\n * pre-filtering) and wire up {@link AutoTagInput} as the field component automatically:\n * ```ts\n * import {mediaField} from 'sanity-plugin-media'\n *\n * mediaField({\n * name: 'coverImage',\n * type: 'image',\n * mediaTags: ['product-cover'],\n * options: { hotspot: true },\n * })\n * ```\n *\n * For file fields, set `type: 'file'`:\n * ```ts\n * mediaField({ name: 'drawing', type: 'file', mediaTags: ['model-drawing'] })\n * ```\n */\nexport function mediaField(config: ImageMediaFieldConfig): ImageMediaFieldResult\nexport function mediaField(config: FileMediaFieldConfig): FileMediaFieldResult\nexport function mediaField(\n config: ImageMediaFieldConfig | FileMediaFieldConfig,\n): ImageMediaFieldResult | FileMediaFieldResult {\n const {mediaTags, options, components, ...rest} = config as ImageMediaFieldConfig & {\n components?: Record<string, unknown>\n }\n return {\n ...rest,\n options: {...options, mediaTags},\n components: {...components, input: AutoTagInput},\n } as unknown as ImageMediaFieldResult\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["ReactNode","createContext","useContext","useMemo","AssetSourceComponentProps","ContextProps","isMultiSelect","onSelect","Props","children","AssetSourceDispatchContext","undefined","AssetBrowserDispatchProvider","props","$","_c","t0","t1","contextValue","t2","useAssetSourceActions","context","Error","useEffect","useState","useRootPortalElement","$","_c","container","_temp","t0","t1","classList","add","document","body","appendChild","removeChild","createElement","TypedUseSelectorHook","useSelector","RootReducerState","useTypedSelector","SanityClient","useClient","useVersionedClient","$","_c","t0","Symbol","for","apiVersion","OrderDirection","ORDER_DICTIONARY","Record","asc","desc","_createdAt","_updatedAt","mimeType","originalFilename","size","getOrderTitle","field","direction","groq","SearchFacetDivider","SearchFacetInputProps","SearchFacetName","SearchFacetOperators","divider","type","inputs","Record","altText","assetTypes","field","name","operatorType","operatorTypes","title","value","creditLine","description","folder","fileName","height","inCurrentDocument","options","selectOnly","inUse","isOpaque","orientation","size","modifier","modifiers","fieldModifier","fieldName","tag","width","operators","doesNotInclude","fn","undefined","label","doesNotReference","_field","empty","_value","hideInput","equalTo","greaterThan","greaterThanOrEqualTo","includes","is","isNot","lessThan","lessThanOrEqualTo","notEmpty","references","AssetSourceComponentProps","divider","inputs","SearchFacetInputProps","SearchFacetDivider","SearchFacetGroup","OrderDirection","SUPPORTED_ASSET_TYPES","const","ORDER_OPTIONS","direction","field","FACETS","tag","inUse","inCurrentDocument","title","folder","altText","creditLine","description","isOpaque","fileName","size","type","orientation","width","height","GRID_TEMPLATE_COLUMNS","SMALL","LARGE","FOLDERS_PANEL_WIDTH","FOLDER_DOCUMENT_NAME","PANEL_HEIGHT","TAG_DOCUMENT_NAME","TAGS_PANEL_WIDTH","iif","Observable","of","throwError","delay","mergeMap","debugThrottle","throttled","source","T","pipe","v","Math","random","message","statusCode","groq","operators","TAG_DOCUMENT_NAME","AssetType","SearchFacetInputProps","buildExcludeTagsFragment","excludeTagSlugs","serializedExcludeTagSlugs","length","JSON","stringify","undefined","constructFilter","assetTypes","currentFolderId","searchFacets","searchQuery","documentAssetTypes","map","type","baseFilter","excludeTagsFragment","searchFacetFragments","reduce","acc","facet","field","modifier","modifiers","operatorType","value","operator","currentModifier","find","m","name","facetField","fieldModifier","fragment","fn","push","options","currentOptionValue","l","folderFilter","constructedQuery","trim","join","Asset","AssetRef","_ref","_type","ImageNode","asset","findImageAssets","document","Record","newAsset","assetToReplaceId","matchedTopLevelFields","Set","repointNestedImages","map","field","node","topLevelField","candidate","assetRef","hasMatchingAssetRef","_id","add","key","value","Object","entries","SanityClient","groq","from","Observable","of","throwError","mergeMap","TAG_DOCUMENT_NAME","HttpError","checkTagName","client","name","source","T","pipe","fetch","existingTagCount","message","statusCode","TagSelectOption","TagItem","getTagSelectOptions","tags","reduce","acc","val","tag","push","label","name","current","value","_id","createAction","AssetItem","HttpError","Tag","ASSETS_ACTIONS","tagsAddComplete","prepare","assets","tag","payload","tagsAddError","error","tagsAddRequest","tagsRemoveComplete","tagsRemoveError","tagsRemoveRequest","createAction","AssetItem","DIALOG_ACTIONS","showFolderCreate","prepare","parentFolderId","payload","showFolderMove","assets","folderId","showFolderRename","showTagCreate","showTagEdit","tagId","createSelector","createSlice","isAnyOf","PayloadAction","ClientError","Transaction","groq","Selector","ofType","from","Observable","of","bufferTime","catchError","filter","mergeMap","switchMap","withLatestFrom","TAG_DOCUMENT_NAME","checkTagName","debugThrottle","Asset","HttpError","MyEpic","TagSelectOption","Tag","TagItem","getTagSelectOptions","ASSETS_ACTIONS","DIALOG_ACTIONS","RootReducerState","TagsReducerState","allIds","byIds","Record","creating","creatingError","fetchCount","fetching","fetchingError","panelVisible","initialState","undefined","tagsSlice","name","extraReducers","builder","addCase","showTagCreate","state","showTagEdit","action","tagId","payload","error","addMatcher","tagsAddComplete","tagsAddError","tagsRemoveComplete","tagsRemoveError","tag","_id","updating","tagsAddRequest","tagsRemoveRequest","reducers","createComplete","assetId","includes","push","_type","picked","createError","createRequest","_action","deleteComplete","deleteIndex","indexOf","splice","deleteError","deleteRequest","Object","keys","forEach","key","fetchComplete","tags","length","fetchError","fetchRequest","reducer","query","prepare","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","tagIds","listenerUpdateQueue","listenerUpdateQueueComplete","panelVisibleSet","sort","a","b","tagA","current","tagB","updateComplete","closeDialogId","updateError","updateRequest","formData","tagsCreateEpic","action$","state$","client","pipe","actions","match","debug","badConnection","observable","create","result","message","statusCode","tagsDeleteEpic","fetch","tagName","assets","patches","map","asset","id","patch","ifRevisionID","_rev","unset","transaction","reduce","tx","delete","commit","tagsFetchEpic","items","tagsListenerCreateQueueEpic","tagsListenerDeleteQueueEpic","tagsListenerUpdateQueueEpic","tagsSortEpic","type","tagsUpdateEpic","set","updatedTag","selectTagsByIds","selectTagsAllIds","selectTags","selectTagById","selectTagSelectOptions","opt","media","acc","v","tagItem","_ref","tagsActions","PayloadAction","createSelector","createSlice","uuid","EMPTY","of","filter","mergeMap","withLatestFrom","MyEpic","SearchFacetInputProps","SearchFacetOperatorType","WithId","tagsActions","RootReducerState","SearchState","facets","query","initialState","searchSlice","name","reducers","facetsAdd","state","action","facet","push","payload","id","facetsClear","facetsRemoveByName","facetName","facetsRemoveByTag","tagId","type","operatorType","value","facetsRemoveById","facetId","facetsUpdate","modifier","find","f","facetsUpdateById","forEach","index","querySet","searchQuery","searchFacetTagUpdateEpic","action$","state$","pipe","updateComplete","match","tag","currentSearchFacetTag","search","tagItem","tags","byIds","_id","actions","label","current","selectIsSearchFacetTag","_state","searchFacets","some","searchActions","reducer","createAction","SanityAssetDocument","SanityImageAssetDocument","UPLOADS_ACTIONS","uploadComplete","prepare","asset","payload","createSelector","createSlice","PayloadAction","AttributeSet","ClientError","Patch","SanityDocument","Transaction","groq","nanoid","Selector","ofType","EMPTY","from","of","bufferTime","catchError","concatMap","debounceTime","filter","mergeMap","switchMap","withLatestFrom","getOrderTitle","ORDER_OPTIONS","debugThrottle","Asset","AssetItem","AssetType","BrowserView","HttpError","MyEpic","Order","OrderDirection","Tag","constructFilter","findImageAssets","searchActions","RootReducerState","UPLOADS_ACTIONS","ASSETS_ACTIONS","ItemError","description","id","referencingIDs","type","AssetsReducerState","allIds","assetTypes","byIds","Record","excludeTagSlugs","fetchCount","fetching","fetchingError","lastPicked","order","pageIndex","pageSize","view","defaultOrder","direction","field","initialState","undefined","title","assetsSlice","name","extraReducers","builder","addCase","uploadComplete","state","action","asset","payload","_id","_type","picked","updating","tagsAddComplete","assets","forEach","tagsAddError","tagsAddRequest","tagsRemoveComplete","tagsRemoveError","tagsRemoveRequest","reducers","clear","deleteComplete","assetIds","deleteIndex","indexOf","splice","Math","floor","length","deleteError","error","itemErrors","response","body","items","map","item","deleteRequest","closeDialogId","Object","keys","key","fetchComplete","includes","push","existing","fetchError","folderSetComplete","folderId","assetId","opt","media","folder","_ref","_weak","folderSetError","message","folderSetRequest","fetchRequest","reducer","_action","params","query","prepare","queryFilter","selector","sort","replace","pipe","insertUploads","results","entries","hash","listenerCreateQueue","_state","listenerCreateQueueComplete","listenerDeleteQueue","listenerDeleteQueueComplete","listenerUpdateQueue","listenerUpdateQueueComplete","loadNextPage","loadPageIndex","orderSet","pick","pickAll","pickClear","values","pickRange","endId","startId","startIndex","findIndex","endIndex","indices","a","b","slice","tagA","tagB","updateComplete","updateError","updateImageReferences","updateImageReferencesComplete","updateRequest","formData","viewSet","assetsDeleteEpic","action$","_state$","client","assetsActions","match","observable","delete","JSON","stringify","assetsFetchEpic","state$","debug","badConnection","fetch","result","statusCode","assetsFetchPageIndexEpic","start","end","documentId","selected","document","documentAssetIds","constructedFilter","currentFolderId","folders","searchFacets","search","facets","searchQuery","assetsFetchNextPageEpic","assetsFetchAfterDeleteAllEpic","nextPageIndex","filterAssetWithoutTag","tag","tagIndex","tags","t","patchOperationTagAppend","patch","setIfMissing","append","_key","patchOperationTagUnset","ifRevisionId","_rev","unset","patchOperationFolderSet","nextPatch","set","assetsOrderSetEpic","assetsSearchEpic","facetsAdd","facetsClear","facetsRemoveById","facetsRemoveByName","facetsRemoveByTag","facetsUpdate","facetsUpdateById","querySet","assetsListenerCreateQueueEpic","actions","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsSortEpic","assetsTagsAddEpic","pickedAssets","selectAssetsPicked","pickedAssetsFiltered","transaction","reduce","tx","pickedAsset","commit","assetsTagsRemoveEpic","assetsFolderSetEpic","assetsFolderSetRefreshEpic","assetsUnpickEpic","assetsUpdateEpic","updatedAsset","assetsUpdateImageReferencesEpic","documents","patchedCount","clonedDocument","parse","assetsToReplace","patchSet","assign","originalAsset","selectAssetsByIds","selectAssetsAllIds","selectAssetById","selectAssets","selectAssetsLength","selectAssetsPickedLength","assetsPicked","createSelector","createSlice","PayloadAction","ClientError","Patch","groq","nanoid","from","of","catchError","debounceTime","filter","map","mergeMap","switchMap","withLatestFrom","FOLDER_DOCUMENT_NAME","debugThrottle","FolderDoc","FolderTreeItem","FolderTreeNode","HttpError","MyEpic","buildExcludeTagsFragment","assetsActions","RootReducerState","UPLOADS_ACTIONS","FoldersReducerState","byId","Record","childrenByParentId","rootIds","exactCountByFolderId","unfiledCount","currentFolderId","currentFolderUnfiled","panelVisible","fetching","fetchCount","fetchingError","creating","creatingError","deletingId","deleteError","renaming","renameError","initialState","undefined","indexFolders","folders","forEach","folder","_id","parentKey","parentId","push","sortByName","ids","sort","a","b","name","localeCompare","numeric","sensitivity","Object","values","foldersSlice","reducers","createComplete","state","_action","createError","action","error","payload","createRequest","currentFolderClear","currentFolderSet","folderId","currentFolderShowUnfiled","deleteComplete","deletedIds","clearedCurrentFolder","removed","Set","has","deleteRequest","fetchComplete","length","fetchError","fetchRequest","panelVisibleSet","renameComplete","renameRequest","foldersFetchEpic","action$","state$","client","pipe","actions","match","debug","badConnection","assetTypes","assets","type","excludeTagsFragment","excludeTagSlugs","excludeTagsClause","observable","fetch","count","JSON","stringify","result","f","folderIds","Boolean","message","statusCode","foldersRefreshEpic","folderSetComplete","listenerCreateQueueComplete","listenerDeleteQueueComplete","listenerUpdateQueueComplete","updateComplete","uploadComplete","foldersCurrentFolderEpic","clear","pickClear","loadPageIndex","pageIndex","patchOperationAssetFolderUnset","patch","unset","patchOperationFolderParentSet","set","parent","_ref","_type","_weak","foldersCreateEpic","trim","siblingIds","collision","some","id","toLowerCase","newId","doc","create","foldersDeleteEpic","childFolderIds","tx","transaction","asset","childFolderId","delete","commit","foldersRenameEpic","selectById","selectChildrenByParentId","selectRootIds","selectExactCountByFolderId","selectCurrentFolderId","selectCurrentFolderUnfiled","buildFolderPath","segments","cursor","seen","add","unshift","join","selectFolderPathById","_state","selectFolderTree","buildNode","children","exactCount","totalCount","reduce","sum","child","path","selectCurrentFolderSegments","chain","depth","FoldersIndex","selectFoldersIndex","selectCurrentFolderChildren","split","stack","cur","pop","kids","selectCanDeleteFolder","foldersActions","reducer","createSlice","PayloadAction","pluralize","ofType","EMPTY","of","filter","mergeMap","AssetItem","Dialog","MyEpic","Tag","assetsActions","ASSETS_ACTIONS","foldersActions","tagsActions","DIALOG_ACTIONS","DialogReducerState","items","initialState","dialogSlice","name","extraReducers","builder","addCase","showFolderCreate","state","action","parentFolderId","payload","push","id","type","showFolderMove","assets","folderId","showFolderRename","showTagCreate","showTagEdit","tagId","createComplete","item","renameComplete","reducers","clear","inlineTagCreate","assetId","tag","forEach","lastCreatedTag","label","current","value","_id","inlineTagRemove","tagIds","lastRemovedTagIds","remove","showConfirmAssetsTagAdd","assetsPicked","closeDialogId","suffix","length","confirmCallbackAction","tagsAddRequest","confirmText","title","headerTitle","tone","showConfirmAssetsTagRemove","tagsRemoveRequest","showConfirmDeleteAssets","deleteRequest","map","assetItem","asset","description","showConfirmDeleteFolder","folderName","showConfirmDeleteTag","showAllAssetsDialog","some","showAssetEdit","showSearchFacets","showFolders","showTags","dialogClearOnAssetUpdateEpic","action$","pipe","deleteComplete","folderSetComplete","updateComplete","dialogId","actions","dialogTagCreateEpic","match","dialogTagDeleteEpic","listenerDeleteQueueComplete","dialogActions","reducer","createGlobalStyle","css","customScrollbar","GlobalStyle","PropsWithChildren","createContext","useContext","useMemo","DropzoneOptions","MediaToolOptions","Locale","ContextProps","dropzone","Pick","components","createTagsOnUpload","creditLine","directUploads","excludeTagSlugs","locales","ToolOptionsContext","Props","options","ToolOptionsProvider","children","value","creditLineExcludeSources","excludeSources","Array","isArray","maxSize","maximumUploadSize","details","enabled","excludeTags","length","useToolOptions","context","Error","z","localizedStringSchema","locales","id","length","string","trim","optional","shape","Record","ZodTypeAny","locale","object","passthrough","tagOptionSchema","label","min","message","value","getAssetFormSchema","altText","creditLine","description","opt","media","tags","array","nullable","originalFilename","title","assetFormSchema","tagFormSchema","name","folderFormSchema","SanityDocument","getUniqueDocuments","documents","draftIds","reduce","acc","doc","_id","startsWith","concat","slice","filteredDocuments","filter","includes","ImageAsset","imageDprUrl","asset","options","width","height","dpi","window","devicePixelRatio","Math","round","imgH","max","undefined","imgW","urlParams","URLSearchParams","append","toString","url","FormData","Record","sanitizeFormData","formData","Object","keys","reduce","acc","key","val","constructor","Array","length","trim","Asset","FileAsset","ImageAsset","isFileAsset","asset","_type","isImageAsset","zodResolver","FieldValues","Resolver","zodFormResolver","schema","TFieldValues","Parameters","ImageAsset","getAssetResolution","asset","metadata","dimensions","width","height","usePortal","PopoverProps","usePortalPopoverProps","$","_c","portal","t0","element","animate","constrainSize","floatingBoundary","referenceBoundary","ClipboardIcon","Button","Text","Popover","copy","useEffect","useRef","useState","usePortalPopoverProps","Props","disabled","url","ButtonAssetCopy","t0","$","_c","popoverProps","refPopoverTimeout","popoverVisible","setPopoverVisible","t1","current","clearTimeout","setTimeout","handleClick","t2","t3","Symbol","for","t4","t5","t6","DownloadIcon","Box","Button","Flex","Inline","Stack","Text","format","filesize","ReactNode","Asset","AssetItem","getAssetResolution","isImageAsset","ButtonAssetCopy","Props","asset","item","Row","t0","$","_c","label","value","t1","Symbol","for","opacity","width","t2","t3","textAlign","t4","t5","AssetMetadata","props","exif","metadata","originalFilename","url","window","location","href","handleDownload","size","base","round","mimeType","t6","extension","toUpperCase","t7","t8","t9","t10","DateTimeOriginal","FNumber","FocalLength","ExposureTime","ISO","background","height","Date","t11","updating","t12","t13","t14","t15","t16","Dialog","SanityDialog","ComponentProps","props","$","_c","t0","Symbol","for","position","t1","SanityDocument","Box","Button","Card","Stack","Text","Preview","SchemaType","useSchema","useIntentLink","Props","documents","isLoading","DocumentList","t0","$","_c","schema","t1","Symbol","for","length","map","doc","_id","get","_type","t2","ReferringDocument","props","schemaType","intent","params","id","onClick","width","Box","Flex","Theme","MouseEvent","defaultStyles","FileIcon","ReactFileIcon","DefaultExtensionType","styled","css","Props","extension","onClick","e","width","Container","theme","sanity","fonts","text","family","props","$","_c","t0","Symbol","for","height","t1","t2","t3","t4","Flex","Asset","FileIcon","Props","asset","FileAssetPreview","props","$","_c","mimeType","search","t0","Symbol","for","height","t1","width","t2","url","extension","Box","Button","Text","Tooltip","format","ReactNode","Props","disabled","isValid","lastUpdated","onClick","FormSubmitButton","props","$","_c","content","t0","Symbol","for","t1","Date","t2","maxWidth","t3","window","hues","ThemeColorSchemeKey","studioTheme","SCHEME_COLORS","bg","dark","gray","hex","light","bg2","inputEnabledBorder","color","default","input","enabled","border","inputHoveredBorder","hovered","mutedHoveredBg","primary","muted","mutedHoveredFg","fg","mutedSelectedBg","selected","spotBlue","spot","blue","SchemeColorKey","getSchemeColor","scheme","colorKey","ThemeColorSchemeKey","MouseEvent","styled","css","getSchemeColor","Props","onClick","e","$showCheckerboard","$scheme","src","style","Image","img","attrs","crossOrigin","const","props","ErrorOutlineIcon","Box","Inline","Text","Tooltip","styled","Props","description","error","label","name","StyledErrorOutlineIcon","theme","color","sanity","spot","red","FormFieldInputLabel","props","$","_c","t0","t1","marginRight","t2","t3","t4","AddIcon","ChevronDownIcon","CloseIcon","Box","Card","Flex","rem","studioTheme","Text","ThemeColorSchemeKey","components","StylesConfig","Virtuoso","getSchemeColor","radius","themeRadius","space","themeSpace","reactSelectStyles","scheme","control","styles","isFocused","boxShadow","indicatorsContainer","isDisabled","opacity","input","color","fontFamily","fonts","text","family","marginLeft","menuList","multiValue","backgroundColor","borderRadius","multiValueLabel","fontSize","padding","multiValueRemove","noOptionsMessage","lineHeight","option","placeholder","valueContainer","margin","DropdownIndicator","props","$","_c","t0","Symbol","for","t1","Menu","children","MenuList","Array","isArray","height","length","index","item","t2","MultiValueLabel","MultiValueRemove","Option","data","__isNew__","marginRight","reactSelectComponents","IndicatorSeparator","Box","Controller","CreatableSelect","useColorSchemeValue","useTypedSelector","reactSelectComponents","reactSelectStyles","TagSelectOption","FormFieldInputLabel","Props","control","description","disabled","error","label","name","onCreateTag","tagName","options","value","placeholder","FormFieldInputTags","props","$","_c","scheme","creating","_temp","tagsFetching","_temp2","t0","Symbol","for","zIndex","t1","t2","t3","field","onBlur","onChange","controllerValue","_temp3","t4","state","tags","state_0","fetching","Box","TextInput","ChangeEventHandler","FocusEventHandler","Ref","FormFieldInputLabel","Props","description","disabled","error","label","name","onBlur","HTMLInputElement","onChange","placeholder","value","ref","FormFieldInputText","props","$","_c","rest","t0","t1","t2","Box","TextArea","ChangeEventHandler","FocusEventHandler","Ref","FormFieldInputLabel","Props","description","disabled","error","label","name","onBlur","HTMLTextAreaElement","onChange","placeholder","rows","value","ref","FormFieldInputTextarea","props","$","_c","rest","t0","t1","t2","FolderIcon","TrashIcon","Box","Button","Card","Flex","Stack","Tab","TabList","TabPanel","Text","useState","Control","FieldErrors","UseFormRegister","Asset","AssetFormData","Locale","TagSelectOption","FormFieldInputLabel","FormFieldInputTags","FormFieldInputText","FormFieldInputTextarea","LocalizedErrors","Record","message","toStringField","value","found","Object","values","find","v","undefined","truncateFolderPath","path","segments","split","filter","Boolean","length","slice","join","DetailsProps","formUpdating","handleCreateTag","title","control","errors","register","allTagOptions","assetTagOptions","currentAsset","folderPath","folderMissing","onChangeFolder","onRemoveFolder","creditLine","enabled","excludeSources","locales","Details","hasLocales","activeLocaleTab","setActiveLocaleTab","folderId","opt","media","folder","_ref","folderLabel","tags","minWidth","overflowX","whiteSpace","overflowY","originalFilename","map","locale","idx","id","const","altText","description","includes","name","MutationEvent","Box","Button","Card","Flex","Stack","Tab","TabList","TabPanel","Text","groq","ReactNode","useCallback","useEffect","useMemo","useRef","useState","SubmitHandler","useForm","useFormState","useDispatch","WithReferringDocuments","useColorSchemeValue","useDocumentStore","useToolOptions","getAssetFormSchema","useTypedSelector","useVersionedClient","assetsActions","selectAssetById","dialogActions","DIALOG_ACTIONS","selectFolderPathById","selectTags","selectTagSelectOptions","tagsActions","Asset","AssetFormData","DialogAssetEditProps","TagSelectOption","getTagSelectOptions","getUniqueDocuments","imageDprUrl","sanitizeFormData","isFileAsset","isImageAsset","zodFormResolver","AssetMetadata","Dialog","DocumentList","FileAssetPreview","FormSubmitButton","Image","Details","DetailsProps","renderDefaultDetails","props","Props","children","dialog","DialogAssetEdit","$","_c","t0","assetId","id","lastCreatedTag","lastRemovedTagIds","client","scheme","documentStore","dispatch","t1","state","String","assetItem","tags","assetUpdatedPrev","undefined","assetSnapshot","setAssetSnapshot","asset","tabSection","setTabSection","currentAsset","t2","allTagOptions","t3","assetTagOptions","currentFolderId","opt","media","folder","_ref","t4","state_0","currentFolderPath","creditLine","components","t5","locales","t6","details","CustomDetails","t7","imageDescription","raw","metadata","image","ImageDescription","length","makeLocaleObj","field","t8","fallback","obj","i","locale","altText","description","originalFilename","title","flattenField","_temp2","generateDefaultValues","t9","t10","t11","defaultValues","mode","resolver","control","getValues","handleSubmit","register","reset","setValue","t12","errors","isDirty","isValid","formUpdating","updating","t13","remove","handleClose","t14","showConfirmDeleteAssets","assets","closeDialogId","_id","handleDelete","t15","Symbol","for","update","result","transition","handleAssetUpdate","t16","tagName","createRequest","name","handleCreateTag","t17","showFolderMove","folderId","handleChangeFolder","t18","folderSetRequest","handleRemoveFolder","t19","bb0","isLocaleObj","_temp3","fields","_type","anyLocalized","some","f","configuredIds","Set","map","_temp4","f_0","Object","keys","k","has","hasOrphanedLocales","t20","cleanField","field_1","Array","isArray","obj_0","Record","sorted","sort","k_0","find","_temp5","configuredIds_0","_temp6","cleaned","key","val","entries","patch","set","commit","handleCleanupLocales","t21","formData","sanitizedFormData","updateRequest","_temp7","onSubmit","t22","subscriptionAsset","listen","subscribe","unsubscribe","t23","t24","t25","t26","existingTags","updatedTags","concat","shouldDirty","t27","t28","existingTags_0","updatedTags_0","filter","tag_0","includes","tag","value","t29","current","_updatedAt","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","footer","t40","t41","folderPath","folderMissing","onChangeFolder","onRemoveFolder","detailsProps","t42","t43","t44","t45","isLoading","referringDocuments","uniqueReferringDocuments","display","t46","aspectRatio","t47","t48","isOpaque","height","width","t49","t50","t51","t52","t53","_temp","v","field_0","fallback_0","values","v_0","l","v_1","l_0","_weak","createSelector","CardAssetData","CardFolderData","CardUploadData","selectCurrentFolderChildren","RootReducerState","selectCombinedItems","state","assets","allIds","uploads","assetIds","uploadIds","folderChildren","assetItems","map","id","type","folderItems","folder","folderId","name","path","totalCount","uploadItems","combinedItems","isHotkey","RefObject","useCallback","useEffect","useRef","useKeyPress","hotkey","onPress","$","_c","keyPressed","t0","e","current","downHandler","t1","Symbol","for","upHandler","t2","t3","window","addEventListener","removeEventListener","CheckmarkCircleIcon","EditIcon","WarningFilledIcon","Box","Checkbox","Container","Flex","Spinner","Text","Theme","ThemeColorSchemeKey","useToast","Tooltip","memo","MouseEvent","RefObject","useDispatch","useColorSchemeValue","styled","css","PANEL_HEIGHT","useAssetSourceActions","useKeyPress","useTypedSelector","assetsActions","selectAssetById","selectAssetsPicked","dialogActions","getSchemeColor","imageDprUrl","isFileAsset","isImageAsset","FileIcon","Image","Props","id","selected","source","CardWrapper","CardContainer","$picked","theme","$updating","sanity","color","spot","orange","ContextActionContainer","$scheme","StyledWarningOutlineIcon","red","CardAsset","props","$","_c","scheme","toast","shiftPressed","dispatch","lastPicked","_temp","assetsPicked","t0","state_0","state","item","t1","state_1","dialog","items","find","_temp2","type","assetId","undefined","dialogReplaceAssetId","asset","error","isOpaque","metadata","picked","updating","assetToReplaceId","length","_id","t2","state_2","assetToReplace","isMultiSelect","onSelect","t3","updateImageReferences","push","status","title","clear","handleReplaceAsset","t4","e","stopPropagation","kind","value","current","pickRange","startId","endId","pick","showAssetEdit","handleAssetClick","t5","e_0","handleContextActionClick","opacityContainer","opacityPreview","t6","t7","cursor","position","t8","t9","height","opacity","t10","extension","t11","width","draggable","transition","t12","t13","left","top","t14","t15","t16","t17","flexShrink","pointerEvents","transform","t18","originalFilename","t19","t20","right","t21","assets","d","Box","Card","Flex","Stack","Text","useDispatch","useColorSchemeValue","css","styled","foldersActions","getSchemeColor","Props","folderId","name","totalCount","CardWrapper","FolderCard","FolderGlyph","theme","sanity","color","spot","yellow","CardFolder","t0","$","_c","dispatch","scheme","t1","currentFolderSet","t2","t3","background","border","t4","Symbol","for","t5","lineHeight","minHeight","wordBreak","t6","t7","t8","t9","t10","t11","Observable","from","of","mergeMap","PREVIEW_WIDTH","createBlob","img","HTMLImageElement","Promise","Blob","resolve","imageAspect","width","height","canvas","HTMLCanvasElement","document","createElement","Math","max","ctx","getContext","drawImage","toBlob","err","console","warn","createImageEl","file","File","blobUrlLarge","window","URL","createObjectURL","Image","onload","revokeObjectURL","src","generatePreviewBlobUrl","imageEl","blob","Error","generatePreviewBlobUrl$","pipe","Subject","Subscription","Observable","from","first","mergeMap","DEFAULT_CONCURRENCY","remove","array","Array","T","item","index","indexOf","splice","createThrottler","concurrency","currentSubscriptions","pendingObservables","ready$","request","observable","observer","length","scheduleAndWait$","pipe","subscribe","subscription","push","unsubscribe","next","shift","asObservable","obs","withMaxConcurrency","func","args","throttler","SanityAssetDocument","SanityClient","SanityImageAssetDocument","Observable","of","throwError","map","mergeMap","HttpError","withMaxConcurrency","fetchExisting$","client","type","hash","observable","fetch","documentType","readFile$","file","File","ArrayBuffer","subscriber","reader","FileReader","onload","next","result","complete","onerror","err","error","readAsArrayBuffer","abort","hexFromBuffer","buffer","Array","prototype","call","Uint8Array","x","toString","slice","join","hashFile$","window","crypto","subtle","message","statusCode","pipe","arrayBuffer","digest","uploadSanityAsset$","assetType","existingAsset","assets","upload","extract","preserveFilename","event","asset","body","document","id","_id","uploadAsset$","createSelector","createSlice","PayloadAction","ClientError","SanityAssetDocument","SanityImageAssetDocument","groq","empty","from","merge","of","catchError","delay","filter","mergeMap","takeUntil","withLatestFrom","HttpError","MyEpic","SanityUploadProgressEvent","UploadItem","constructFilter","generatePreviewBlobUrl$","hashFile$","uploadAsset$","assetsActions","RootReducerState","UPLOADS_ACTIONS","UploadsReducerState","allIds","byIds","Record","initialState","uploadsSlice","name","extraReducers","builder","addCase","uploadComplete","state","action","asset","payload","sha1hash","status","reducers","checkRequest","_state","_action","assets","checkComplete","results","assetHashes","Object","keys","forEach","hash","deleteIndex","indexOf","splice","blobUrl","objectUrl","window","URL","revokeObjectURL","previewReady","uploadCancel","uploadError","error","uploadRequest","file","File","forceAsAssetType","uploadProgress","event","uploadHash","percent","uploadStart","uploadItem","includes","push","uploadsAssetStartEpic","action$","_state$","client","pipe","uploadsActions","match","url","assetType","v","type","folderId","patch","_id","setIfMissing","opt","set","_ref","_type","_weak","commit","stage","message","statusCode","uploadsAssetUploadEpic","state$","exists","uploads","folders","currentFolderId","size","uploadsCompleteQueueEpic","uploadsCheckRequestEpic","documentIds","map","constructedFilter","assetTypes","excludeTagSlugs","searchFacets","search","facets","searchQuery","query","observable","fetch","resultHashes","checkedResults","reduce","acc","insertUploads","selectUploadById","uploadId","actions","reducer","CloseIcon","Box","Button","Flex","Text","filesize","useDispatch","useColorSchemeValue","styled","PANEL_HEIGHT","useTypedSelector","selectUploadById","uploadsActions","getSchemeColor","FileIcon","Image","Props","id","CardWrapper","CardUpload","props","$","_c","scheme","dispatch","t0","state","item","t1","size","base","round","fileSize","percentLoaded","Math","percent","isComplete","status","isUploading","isQueued","t2","hash","uploadCancel","handleCancelUpload","t3","t4","background","border","height","position","t5","t6","bottom","left","width","transform","transformOrigin","transition","t7","Symbol","for","t8","assetType","objectUrl","opacity","t9","t10","top","boxShadow","t11","t12","t13","name","t14","flexShrink","t15","t16","t17","memo","VirtuosoGrid","styled","useTypedSelector","CardAssetData","CardFolderData","CardUploadData","CardAsset","CardFolder","CardUpload","Props","items","onLoadMore","source","CARD_HEIGHT","CARD_WIDTH","VirtualCell","t0","$","_c","item","selected","type","t1","id","folderId","name","totalCount","StyledItemContainer","div","ItemContainer","props","ref","rest","context","StyledListContainer","ListContainer","AssetGridVirtualized","selectedAssets","_temp","map","_temp2","selectedIds","length","index","t2","Symbol","for","Item","List","t3","index_0","item_0","includes","t4","overflowX","overflowY","t5","state","assets","asset","_id","Box","Text","useEffect","useRef","useState","useDispatch","useStore","useTypedSelector","assetsActions","foldersActions","searchActions","selectCombinedItems","RootReducerState","SearchFacetInputProps","WithId","isImageAsset","AssetGridVirtualized","omitFacetId","facet","id","_id","withoutId","ReplaceAssetsOverview","$","_c","dispatch","store","combinedItems","assetsById","_temp","fetchCount","_temp2","fetching","_temp3","fetchingError","_temp4","pageSize","_temp5","searchQuery","_temp6","searchFacets","_temp7","currentFolderId","_temp8","currentFolderUnfiled","_temp9","assetToReplaceId","_temp1","savedBrowserStateRef","t0","length","Boolean","awaitingRefetch","setAwaitingRefetch","t1","t2","dialog","dialog_0","folders","search","getState","query","facets","dialogItem","items","find","_temp10","current","assetId","type","undefined","folderId","folderUnfiled","querySet","facetsClear","currentFolderClear","saved","hadScope","facetsAdd","currentFolderSet","currentFolderShowUnfiled","pick","picked","t3","t4","previousIds","assets","allIds","awaitingSettle","subscribe","isFetching","listCleared","scopeActive","t5","t6","item_1","item","asset","filter","reducedItems","hasFetchedOnce","hasMorePages","isEmpty","t7","loadNextPage","t8","handleLoadMoreItems","t9","state","byIds","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","_temp0","state_8","item_0","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogAllAssetsProps","Dialog","ReplaceAssetsOverview","Props","children","dialog","DialogAllAssets","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","t3","WarningOutlineIcon","Box","Button","Flex","Stack","Text","ReactNode","useDispatch","dialogActions","DialogConfirmProps","Dialog","Props","children","dialog","DialogConfirm","props","$","_c","dispatch","t0","id","remove","handleClose","t1","closeDialogId","confirmCallbackAction","handleConfirm","t2","confirmText","tone","Footer","t3","headerTitle","Header","t4","t5","t6","title","t7","description","t8","t9","Box","Flex","Text","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","folderFormSchema","useTypedSelector","dialogActions","foldersActions","selectFolderPathById","DialogFolderCreateProps","FolderFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogFolderCreate","props","$","_c","t0","parentFolderId","id","dispatch","creating","_temp","creatingError","_temp2","t1","state_1","state","parentPath","t2","Symbol","for","name","t3","defaultValues","mode","resolver","formState","t4","handleSubmit","register","setError","errors","isDirty","isValid","t5","clear","handleClose","t6","formData","sanitizedFormData","createRequest","parentId","onSubmit","t7","t8","message","t9","Footer","t10","t11","t12","display","t13","t14","t15","t16","t17","t18","folders","state_0","Box","Button","Flex","Inline","Stack","Text","Tree","TreeItem","pluralize","ReactNode","useMemo","useState","useDispatch","useTypedSelector","assetsActions","dialogActions","selectFolderTree","DialogFolderMoveProps","FolderTreeNode","Dialog","getExpandedIdSet","folderId","byId","Record","parentId","expanded","Set","cursor","node","add","Props","children","dialog","FolderNodeProps","expandedIds","onSelect","selectedId","FolderNode","t0","$","_c","hasChildren","length","selected","id","t1","has","t2","t3","name","totalCount","t4","t5","map","childNode","t6","FolderTreeProps","folderTree","FolderTree","DialogFolderMove","dispatch","_temp","assets","setSelectedId","selectedFolder","remove","handleClose","folderSetRequest","closeDialogId","handleMove","t7","t8","t9","t10","t11","t12","t13","t14","t15","Symbol","for","maxHeight","overflowY","t16","t17","t18","t19","t20","t21","state","folders","Box","Flex","Text","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","folderFormSchema","useTypedSelector","dialogActions","foldersActions","selectFolderPathById","DialogFolderRenameProps","FolderFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogFolderRename","t0","$","_c","folderId","id","dispatch","renaming","_temp","renameError","_temp2","t1","state_1","state","folders","byId","folder","t2","state_2","folderPath","currentName","name","t3","includes","slice","lastIndexOf","parentPath","t4","t5","Symbol","for","t6","defaultValues","mode","resolver","formState","t7","handleSubmit","register","setError","errors","isDirty","isValid","t8","remove","handleClose","t9","formData","sanitizedFormData","renameRequest","onSubmit","t10","t11","message","t12","t13","t14","t15","t16","display","t17","t18","t19","t20","t21","t22","t23","state_0","AddIcon","EditIcon","FolderIcon","TrashIcon","Box","Button","Container","Flex","Inline","Label","Text","Tree","TreeItem","Tooltip","ReactNode","useMemo","useDispatch","PANEL_HEIGHT","useTypedSelector","dialogActions","DIALOG_ACTIONS","foldersActions","selectCanDeleteFolder","selectFolderTree","FolderTreeNode","getExpandedIdSet","folderId","byId","Record","parentId","expanded","Set","cursor","node","add","FolderNodeProps","currentFolderId","expandedIds","onSelect","FolderHeaderActionProps","disabled","icon","onClick","tone","tooltip","FolderHeaderAction","t0","$","_c","t1","t2","undefined","t3","t4","t5","window","FolderItemTextProps","name","totalCount","FolderItemText","Symbol","for","boxSizing","display","maxWidth","minWidth","overflow","paddingRight","position","width","alignItems","paddingLeft","gap","flexShrink","lineHeight","textOverflow","whiteSpace","t6","fontSize","opacity","right","top","transform","t7","t8","FolderNode","hasChildren","children","length","selected","id","has","map","childNode","FolderView","dispatch","_temp","_temp2","canDeleteFolder","fetching","_temp3","folderTree","currentFolder","Array","from","join","treeKey","hasFolders","currentFolderSet","handleFolderSelect","showConfirmDeleteFolder","folderName","handleFolderDelete","borderBottom","height","showFolderRename","t9","t10","showFolderCreate","parentFolderId","t11","t12","t13","t14","currentFolderClear","t15","t16","t17","t18","t19","t20","t21","t22","state","folders","state_0","state_1","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogFoldersProps","Dialog","FolderView","Props","children","dialog","DialogFolders","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","minHeight","t3","CloseIcon","Box","Flex","Label","rem","Text","ThemeColorSchemeKey","ReactNode","useDispatch","useColorSchemeValue","styled","css","searchActions","SearchFacetInputProps","WithId","getSchemeColor","Props","children","facet","Container","$scheme","theme","sanity","radius","SearchFacet","props","$","_c","scheme","dispatch","t0","id","facetsRemoveById","facetId","handleClose","t1","Symbol","for","t2","t3","t4","t5","t6","whiteSpace","t7","title","t8","t9","t10","t11","TextInput","ChangeEvent","Props","onValueChange","value","TextInputNumber","props","$","_c","remainingProps","t0","t1","t2","e","val","target","regex","test","parseInt","handleChange","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputNumberModifier","SearchFacetInputNumberProps","SearchFacetOperatorType","WithId","SearchFacet","TextInputNumber","Props","facet","SearchFacetNumber","t0","$","_c","dispatch","popoverProps","modifiers","t1","modifier","find","name","selectedModifier","t2","id","operatorType","facetsUpdateById","handleOperatorItemClick","t3","modifier_0","handleModifierClick","t4","value","handleValueChange","selectedOperatorType","t5","operatorTypes","label","map","operatorType_0","index","selected","t6","Symbol","for","maxWidth","t7","t8","t9","title","modifier_1","selected_0","t10","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputSelectListItemProps","SearchFacetInputSelectProps","SearchFacetOperatorType","WithId","SearchFacet","Props","facet","SearchFacetSelect","t0","$","_c","dispatch","popoverProps","options","t1","value","find","v","name","selectedItem","t2","option","facetsUpdate","handleListItemClick","t3","operatorType","handleOperatorItemClick","selectedOperatorType","t4","operatorTypes","label","map","operatorType_0","index","selected","t5","title","t6","t7","item","selected_0","t8","t9","t10","SelectIcon","Box","Button","TextInput","Menu","MenuButton","MenuDivider","MenuItem","ChangeEvent","useDispatch","operators","usePortalPopoverProps","searchActions","SearchFacetInputStringProps","SearchFacetOperatorType","WithId","SearchFacet","Props","facet","SearchFacetString","t0","$","_c","dispatch","popoverProps","t1","id","operatorType","facetsUpdateById","handleOperatorItemClick","t2","e","value","target","handleChange","selectedOperatorType","t3","operatorTypes","label","map","operatorType_0","index","selected","t4","hideInput","maxWidth","t5","CloseIcon","Box","Card","rem","studioTheme","Text","ThemeColorSchemeKey","components","StylesConfig","Virtuoso","getSchemeColor","fonts","text","sizes","themeTextSizes","radius","themeRadius","space","themeSpace","reactSelectStyles","scheme","control","styles","isDisabled","isFocused","boxShadow","fontSize","input","color","fontFamily","family","marginLeft","menuList","padding","noOptionsMessage","lineHeight","option","backgroundColor","placeholder","paddingLeft","singleValue","alignItems","display","height","valueContainer","margin","ClearIndicator","props","$","_c","t0","Symbol","for","transform","t1","t2","Menu","children","MenuList","Array","isArray","length","index","item","NoOptionsMessage","Option","SingleValue","reactSelectComponents","DropdownIndicator","IndicatorSeparator","SelectIcon","Box","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","Select","useColorSchemeValue","operators","useToolOptions","usePortalPopoverProps","useTypedSelector","searchActions","selectTags","reactSelectComponents","reactSelectStyles","TagSelectOption","SearchFacetInputSearchableProps","SearchFacetOperatorType","WithId","getTagSelectOptions","SearchFacet","Props","facet","SearchFacetTags","t0","$","_c","scheme","dispatch","excludeTagSlugs","tagsAll","_temp","t1","length","filter","t","includes","tag","name","current","tags","tagsFetching","_temp2","t2","allTagOptions","popoverProps","t3","id","option","facetsUpdateById","value","handleChange","t4","operatorType","handleOperatorItemClick","selectedOperatorType","t5","operatorTypes","label","map","operatorType_0","index","selected","minWidth","t6","hideInput","width","_temp3","t7","state","state_0","fetching","Box","Flex","Inline","rem","Theme","styled","css","useTypedSelector","SearchFacetNumber","SearchFacetSelect","SearchFacetString","SearchFacetTags","Props","layout","StackContainer","theme","sanity","space","SearchFacets","props","$","_c","t0","undefined","searchFacets","_temp","t1","map","_temp2","Items","length","t2","Error","state","search","facets","facet","key","id","type","AddIcon","Button","Flex","Menu","MenuButton","MenuDivider","MenuGroup","MenuItem","useDispatch","FACETS","useToolOptions","usePortalPopoverProps","useTypedSelector","searchActions","SearchFacetDivider","SearchFacetGroup","SearchFacetInputProps","SearchFacetsControl","$","_c","dispatch","assetTypes","_temp","searchFacets","_temp2","selectedDocument","_temp3","popoverProps","creditLine","isTool","T0","T1","T2","t0","t1","t2","enabled","t3","facet","type","name","selectOnly","matchingAssetTypes","filter","assetType","includes","length","filteredFacets","_temp4","hasSearchFacets","renderMenuFacets","facets_0","t4","level","undefined","facets","map","facet_1","index_0","index","title","disabled","operatorTypes","find","v","facetsAdd","t5","placement","t6","facetsClear","t7","state","assets","state_0","search","state_1","selected","document","facet_0","previousFacet","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogSearchFacetsProps","Dialog","SearchFacets","SearchFacetsControl","Props","children","dialog","DialogSearchFacets","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","t3","Box","Flex","ReactNode","useEffect","SubmitHandler","useForm","useDispatch","tagFormSchema","useTypedSelector","dialogActions","tagsActions","DialogTagCreateProps","TagFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogTagCreate","props","$","_c","t0","id","dispatch","creating","_temp","creatingError","_temp2","t1","Symbol","for","name","t2","defaultValues","mode","resolver","formState","t3","handleSubmit","register","setError","errors","isDirty","isValid","formUpdating","t4","clear","handleClose","t5","formData","sanitizedFormData","createRequest","onSubmit","t6","t7","message","t8","Footer","t9","t10","t11","display","t12","t13","t14","t15","t16","state","tags","state_0","MutationEvent","Box","Button","Card","Flex","Text","groq","ReactNode","useCallback","useEffect","useState","SubmitHandler","useForm","useDispatch","tagFormSchema","useTypedSelector","useVersionedClient","dialogActions","selectTagById","tagsActions","DialogTagEditProps","Tag","TagFormData","sanitizeFormData","zodFormResolver","Dialog","FormFieldInputText","FormSubmitButton","Props","children","dialog","DialogTagEdit","props","$","_c","t0","id","tagId","client","dispatch","t1","state","String","tagItem","tagSnapshot","setTagSnapshot","tag","currentTag","generateDefaultValues","_temp","t2","t3","t4","Symbol","for","t5","defaultValues","mode","resolver","formState","t6","handleSubmit","register","reset","setError","errors","isDirty","isValid","formUpdating","updating","t7","remove","handleClose","t8","formData","sanitizedFormData","updateRequest","closeDialogId","_id","name","_type","current","onSubmit","t9","showConfirmDeleteTag","handleDelete","t10","update","result","transition","handleTagUpdate","t11","error","message","t12","t13","t14","subscriptionAsset","listen","subscribe","unsubscribe","t15","t16","t17","_updatedAt","Footer","t18","t19","t20","t21","display","t22","t23","t24","t25","t26","ArrowDownIcon","ArrowUpIcon","CloseIcon","EditIcon","SearchIcon","TrashIcon","Box","Button","Container","Flex","Text","Tooltip","ReactNode","useDispatch","styled","inputs","PANEL_HEIGHT","useTypedSelector","selectAssetsPicked","dialogActions","DIALOG_ACTIONS","searchActions","selectIsSearchFacetTag","SearchFacetInputSearchableProps","TagActions","TagItem","Props","actions","tag","TagContainer","ButtonContainer","TagButtonProps","disabled","icon","onClick","tone","tooltip","TagButton","props","$","_c","t0","t1","t2","window","Tag","dispatch","assetsPicked","_id","state","isSearchFacetTag","facetsRemoveByTag","tagId","handleSearchFacetTagRemove","showConfirmAssetsTagAdd","handleShowAddTagToAssetsDialog","t3","showConfirmAssetsTagRemove","handleShowRemoveTagFromAssetsDialog","t4","showConfirmDeleteTag","handleShowTagDeleteDialog","t5","showTagEdit","handleShowTagEditDialog","t6","name","current","searchFacet","value","label","facetsUpdate","operatorType","facetsAdd","facet","handleSearchFacetTagAddOrUpdate","t7","updating","t8","opacity","userSelect","t9","t10","t11","Symbol","for","flexShrink","t12","includes","t13","t14","t15","t16","t17","t18","Flex","Label","memo","useState","Virtuoso","PANEL_HEIGHT","useTypedSelector","selectAssetsPicked","TagActions","TagItem","Tag","VirtualRow","t0","$","_c","isScrolling","item","t1","Symbol","for","height","t2","t3","undefined","actions","tag","_id","TagsVirtualized","tags","assetsPicked","setIsScrolling","items","pickedTagIds","reduce","_temp2","pickedTagIdsUnique","Set","acc_0","tagId","tagIsInEveryAsset","every","assetItem","tagIndex","asset","opt","media","findIndex","tag_0","_ref","acc","appliedToAll","push","appliedToSome","tagIdsSegmented","tagsAppliedToAll","filter","tag_1","includes","map","_temp3","tagsAppliedToSome","tag_2","_temp4","tagsUnused","tag_3","_temp5","length","_temp6","index","index_0","flex","overflowX","t4","_temp","val","assetTagIds","concat","tagItem","tagItem_0","tagItem_1","tagItem_2","ComposeIcon","Box","Button","Flex","Inline","Label","useDispatch","useColorSchemeValue","PANEL_HEIGHT","useTypedSelector","DIALOG_ACTIONS","getSchemeColor","Props","allowCreate","light","title","TagViewHeader","t0","$","_c","scheme","dispatch","tagsCreating","_temp","tagsFetching","_temp2","t1","showTagCreate","handleTagCreate","t2","t3","background","borderBottom","flexShrink","height","t4","t5","opacity","t6","t7","boxShadow","t8","state","tags","creating","state_0","fetching","Box","Flex","Text","useToolOptions","useTypedSelector","selectAssetsPickedLength","selectTags","TagsVirtualized","TagViewHeader","TagView","$","_c","numPickedAssets","excludeTagSlugs","tagsAll","t0","length","filter","t","includes","tag","name","current","tags","fetching","_temp","fetchCount","_temp2","fetchComplete","hasTags","hasPicked","t1","t2","t3","t4","t5","state","state_0","Box","ReactNode","useCallback","useDispatch","dialogActions","DialogTagsProps","Dialog","TagView","Props","children","dialog","DialogTags","props","$","_c","t0","id","dispatch","t1","clear","handleClose","t2","Symbol","for","height","minHeight","t3","useTypedSelector","Dialog","DialogAssetEdit","DialogAllAssets","DialogConfirm","DialogFolderCreate","DialogFolderMove","DialogFolderRename","DialogFolders","DialogSearchFacets","DialogTagCreate","DialogTagEdit","DialogTags","Dialogs","$","_c","currentDialogs","_temp","t0","renderDialogs","dialogs","index","length","dialog","childDialogs","type","state","items","useToast","useEffect","useTypedSelector","Notifications","$","_c","items","_temp","toast","t0","t1","length","lastItem","push","closable","status","title","state","notifications","PayloadAction","createSlice","DebugReducerState","badConnection","enabled","initialState","debugSlice","name","reducers","setBadConnection","state","action","payload","toggleEnabled","debugActions","actions","reducer","PayloadAction","createSlice","pluralize","AnyAction","ofType","of","bufferTime","filter","mergeMap","HttpError","ImageAsset","MyEpic","assetsActions","ASSETS_ACTIONS","foldersActions","tagsActions","uploadsActions","Notification","asset","status","title","NotificationsReducerState","items","messageFromGenericErrorPayload","payload","error","String","message","initialState","notificationsSlice","name","reducers","add","state","action","push","notificationsAssetsDeleteCompleteEpic","action$","pipe","deleteComplete","match","assetIds","deletedCount","length","actions","notificationsAssetsDeleteErrorEpic","deleteError","count","notificationsAssetsUploadCompleteEpic","checkComplete","results","Object","keys","notificationsAssetsTagsAddCompleteEpic","tagsAddComplete","assets","notificationsAssetsTagsRemoveCompleteEpic","tagsRemoveComplete","notificationsAssetsUpdateCompleteEpic","updateComplete","updatedCount","notificationsGenericErrorEpic","fetchError","type","updateError","createError","renameError","uploadError","notificationsTagCreateCompleteEpic","createComplete","notificationsTagDeleteCompleteEpic","notificationsTagUpdateCompleteEpic","notificationsFolderCreateCompleteEpic","notificationsFolderDeleteCompleteEpic","notificationsFolderRenameCompleteEpic","renameComplete","notificationsActions","reducer","createSlice","SanityAssetDocument","SanityDocument","SanityImageAssetDocument","SelectedReducerState","assets","document","documentAssetIds","initialState","undefined","selectedSlice","name","reducers","reducer","Reducer","StateFromReducersMapObject","combineReducers","combineEpics","assetsReducer","assetsDeleteEpic","assetsFetchAfterDeleteAllEpic","assetsFetchEpic","assetsFolderSetEpic","assetsFolderSetRefreshEpic","assetsFetchNextPageEpic","assetsFetchPageIndexEpic","assetsListenerCreateQueueEpic","assetsListenerDeleteQueueEpic","assetsListenerUpdateQueueEpic","assetsOrderSetEpic","assetsSearchEpic","assetsSortEpic","assetsTagsAddEpic","assetsTagsRemoveEpic","assetsUnpickEpic","assetsUpdateEpic","assetsUpdateImageReferencesEpic","debugReducer","dialogReducer","dialogClearOnAssetUpdateEpic","dialogTagCreateEpic","dialogTagDeleteEpic","foldersReducer","foldersCurrentFolderEpic","foldersCreateEpic","foldersDeleteEpic","foldersFetchEpic","foldersRefreshEpic","foldersRenameEpic","notificationsReducer","notificationsAssetsDeleteErrorEpic","notificationsAssetsDeleteCompleteEpic","notificationsAssetsTagsAddCompleteEpic","notificationsAssetsTagsRemoveCompleteEpic","notificationsAssetsUpdateCompleteEpic","notificationsFolderCreateCompleteEpic","notificationsFolderDeleteCompleteEpic","notificationsFolderRenameCompleteEpic","notificationsGenericErrorEpic","notificationsTagCreateCompleteEpic","notificationsTagDeleteCompleteEpic","notificationsTagUpdateCompleteEpic","searchReducer","searchFacetTagUpdateEpic","selectedReducer","tagsReducer","tagsCreateEpic","tagsDeleteEpic","tagsFetchEpic","tagsListenerCreateQueueEpic","tagsListenerDeleteQueueEpic","tagsListenerUpdateQueueEpic","tagsSortEpic","tagsUpdateEpic","uploadsReducer","uploadsAssetStartEpic","uploadsAssetUploadEpic","uploadsCheckRequestEpic","uploadsCompleteQueueEpic","rootEpic","reducers","assets","debug","dialog","folders","notifications","search","selected","tags","uploads","ReducersMapObject","rootReducer","SanityDocument","isPlainObject","value","Array","isArray","getAssetIds","node","Record","acc","forEach","v","_type","_ref","push","Object","values","val","getDocumentAssetIds","document","assetIds","Set","sort","SUPPORTED_ASSET_TYPES","AssetType","isSupportedAssetType","assetType","supported","includes","AnyAction","configureStore","Store","SanityClient","ReactNode","useState","Provider","createEpicMiddleware","AssetSourceComponentProps","SanityDocument","rootEpic","rootReducer","initialState","assetsInitialState","RootReducerState","getDocumentAssetIds","isSupportedAssetType","Props","assetType","children","client","document","excludeTagSlugs","selectedAssets","createReduxStore","props","epicMiddleware","dependencies","store","reducer","middleware","getDefaultMiddleware","serializableCheck","thunk","prepend","devTools","preloadedState","assets","assetTypes","length","debug","badConnection","enabled","dialog","items","folders","byId","childrenByParentId","rootIds","exactCountByFolderId","unfiledCount","currentFolderId","currentFolderUnfiled","panelVisible","fetching","fetchCount","creating","renaming","notifications","search","facets","query","selected","documentAssetIds","tags","allIds","byIds","uploads","run","ReduxProvider","t0","$","_c","t1","t2","PortalProvider","useEffect","useRef","useDispatch","AssetSourceComponentProps","SanityDocument","useFormValue","AssetBrowserDispatchProvider","useRootPortalElement","useTypedSelector","useVersionedClient","assetsActions","dialogActions","foldersActions","tagsActions","GlobalStyle","constructFilter","Dialogs","Notifications","ReduxProvider","EditAssetDialog","t0","$","_c","assetId","onClose","dispatch","openDialogCount","_temp","hasOpenedRef","t1","t2","queryFilter","assetTypes","searchFacets","fetchRequest","params","showAssetEdit","t3","t4","current","t5","Symbol","for","EditAssetTool","props","selectedAssets","portalElement","currentDocument","client","_id","undefined","t6","t7","onSelect","t8","assetType","state","dialog","items","length","ThLargeIcon","ThListIcon","Button","Inline","useDispatch","useTypedSelector","assetsActions","ButtonViewGroup","$","_c","dispatch","view","_temp","t0","Symbol","for","whiteSpace","t1","t2","viewSet","t3","borderBottomRightRadius","borderTopRightRadius","t4","t5","t6","t7","borderBottomLeftRadius","borderTopLeftRadius","t8","t9","state","assets","SortIcon","Button","Menu","MenuButton","MenuDivider","MenuItem","useDispatch","getOrderTitle","ORDER_OPTIONS","usePortalPopoverProps","useTypedSelector","assetsActions","OrderSelect","$","_c","dispatch","order","_temp","popoverProps","t0","direction","field","t1","t2","map","item","index","selected","orderSet","minWidth","t3","t4","state","assets","Box","useNProgress","Props","loading","Progress","props","$","_c","t0","animationDuration","isAnimating","isFinished","progress","t1","t2","t3","opacity","transition","t4","t5","t6","height","background","position","left","top","width","t7","TagIcon","$","_c","t0","Symbol","for","CloseIcon","SearchIcon","Box","Flex","TextInput","ChangeEvent","useDispatch","useTypedSelector","searchActions","TextInputSearch","$","_c","searchQuery","_temp","dispatch","t0","e","querySet","currentTarget","value","handleChange","t1","handleClear","t2","Symbol","for","position","t3","t4","length","cursor","height","opacity","right","top","width","zIndex","t5","state","search","query","FolderIcon","Box","Button","Flex","Inline","useMediaIndex","useDispatch","useTypedSelector","dialogActions","foldersActions","tagsActions","ButtonViewGroup","OrderSelect","Progress","SearchFacets","SearchFacetsControl","TagIcon","TextInputSearch","Controls","$","_c","dispatch","fetching","_temp","foldersPanelVisible","_temp2","pageIndex","_temp3","searchFacets","_temp4","tagsPanelVisible","_temp5","mediaIndex","t0","showSearchFacets","handleShowSearchFacetDialog","t1","showFolders","handleShowFoldersDialog","t2","showTags","handleShowTagsDialog","t3","panelVisibleSet","panelVisible","toggleFoldersPanel","t4","toggleTagsPanelToggle","t5","Symbol","for","borderBottom","zIndex","t6","t7","t8","alignItems","flex","height","justifyContent","position","width","t9","minWidth","t10","t11","t12","t13","t14","whiteSpace","t15","length","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","transform","t31","t32","t33","t34","t35","t36","state","assets","state_0","folders","state_1","state_2","search","facets","state_3","tags","PlugIcon","Box","Flex","Switch","Text","Tooltip","ChangeEvent","useDispatch","useKeyPress","useTypedSelector","debugActions","DebugControls","$","_c","dispatch","badConnection","_temp","debugEnabled","_temp2","t0","e","checked","target","setBadConnection","handleChange","t1","toggleEnabled","handleToggleControls","t2","Symbol","for","bottom","left","pointerEvents","position","width","t3","t4","t5","t6","t7","t8","t9","state","debug","state_0","enabled","Box","Button","Inline","Text","useDispatch","useTypedSelector","foldersActions","selectCurrentFolderSegments","FolderBreadcrumbs","$","_c","dispatch","currentFolderId","_temp","segments","t0","Symbol","for","t1","currentFolderClear","t2","t3","segment","id","currentFolderSet","folderId","name","map","state","folders","Box","FOLDERS_PANEL_WIDTH","useTypedSelector","FolderView","FolderPanel","$","_c","foldersPanelVisible","_temp","t0","Symbol","for","position","width","t1","borderRight","height","left","overflowX","overflowY","top","state","folders","panelVisible","ReactNode","createContext","useContext","useMemo","ContextProps","open","Props","children","DropzoneDispatchContext","undefined","DropzoneDispatchProvider","props","$","_c","t0","contextValue","t1","useDropzoneActions","context","Error","ArrowRightIcon","CloseIcon","UploadIcon","Box","Button","Flex","Inline","Text","pluralize","useAssetSourceActions","useDropzoneActions","useToolOptions","useTypedSelector","Props","onClose","Header","props","$","_c","open","onSelect","assetTypes","_temp","selectedDocument","_temp2","directUploads","t0","Symbol","for","whiteSpace","t1","join","t2","t3","margin","textTransform","_type","t4","t5","length","t6","flexShrink","t7","t8","state","assets","state_0","selected","document","ChevronDownIcon","ChevronUpIcon","Box","Label","useDispatch","useTypedSelector","assetsActions","Props","field","title","TableHeaderItem","props","$","_c","dispatch","order","_temp","isActive","t0","direction","orderSet","handleClick","t1","t2","undefined","t3","t4","cursor","display","whiteSpace","t5","Symbol","for","marginRight","t6","t7","t8","t9","t10","state","assets","Checkbox","Flex","Grid","ThemeColorSchemeKey","useMediaIndex","MouseEvent","useDispatch","useColorSchemeValue","styled","css","GRID_TEMPLATE_COLUMNS","PANEL_HEIGHT","useAssetSourceActions","useTypedSelector","assetsActions","selectAssetsLength","selectAssetsPickedLength","getSchemeColor","TableHeaderItem","ContextActionContainer","$scheme","TableHeader","$","_c","scheme","dispatch","fetching","_temp","itemsLength","numPickedAssets","mediaIndex","onSelect","allSelected","t0","e","stopPropagation","pickClear","pickAll","handleContextActionClick","t1","t2","t3","t4","alignItems","background","borderBottom","gridColumnGap","gridTemplateColumns","LARGE","height","letterSpacing","position","textTransform","top","visibility","width","zIndex","t5","pointerEvents","transform","t10","t11","t12","t13","t6","t7","t8","t9","Symbol","for","t14","state","assets","CheckmarkCircleIcon","EditIcon","WarningFilledIcon","Box","Checkbox","Container","Flex","Grid","Spinner","Text","ThemeColorSchemeKey","useMediaIndex","Tooltip","formatRelative","filesize","memo","MouseEvent","RefObject","useCallback","useEffect","useRef","useState","useDispatch","WithReferringDocuments","useColorSchemeValue","styled","css","GRID_TEMPLATE_COLUMNS","useAssetSourceActions","useKeyPress","useTypedSelector","assetsActions","selectAssetById","dialogActions","getAssetResolution","getSchemeColor","getUniqueDocuments","imageDprUrl","isFileAsset","isImageAsset","FileIcon","Image","REFERENCE_COUNT_VISIBILITY_DELAY","Props","id","selected","ContainerGrid","$selected","$scheme","$updating","ContextActionContainer","StyledWarningIcon","theme","color","sanity","spot","red","TableRowAsset","props","$","_c","scheme","shiftPressed","referenceCountVisible","setReferenceCountVisible","refCountVisibleTimeout","dispatch","lastPicked","_temp","t0","state_0","state","item","mediaIndex","asset","error","isOpaque","metadata","picked","updating","isMultiSelect","onSelect","t1","e","stopPropagation","showAssetEdit","assetId","_id","current","pickRange","startId","endId","pick","handleContextActionClick","t2","e_0","kind","value","handleClick","opacityCell","opacityPreview","t3","t4","Symbol","for","setTimeout","clearTimeout","t5","undefined","t6","t7","SMALL","LARGE","t8","t9","gridColumnGap","gridRowGap","gridTemplateColumns","gridTemplateRows","t10","t11","alignItems","gridColumn","gridRowStart","gridRowEnd","height","justifyContent","opacity","position","t12","flexShrink","pointerEvents","transform","t13","t14","width","t15","t16","t17","extension","t18","t19","t20","left","top","t21","t22","t23","t24","t25","gridRow","t26","lineHeight","t27","originalFilename","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","display","t39","t40","mimeType","t41","t42","t43","t44","t45","size","base","round","t46","t47","t48","t49","t50","t51","t52","t53","_updatedAt","Date","t54","t55","t56","t57","t58","t59","_temp2","t60","t61","t62","t63","t64","t65","t66","assets","isLoading","referringDocuments","uniqueDocuments","Array","isArray","length","Box","Flex","Grid","Stack","Text","useMediaIndex","useDispatch","useColorSchemeValue","css","styled","GRID_TEMPLATE_COLUMNS","foldersActions","getSchemeColor","Props","folderId","name","totalCount","ContainerGrid","theme","sanity","color","card","enabled","bg","FolderBadge","spot","yellow","TableRowFolder","t0","$","_c","dispatch","mediaIndex","scheme","t1","currentFolderSet","t2","t3","t4","SMALL","LARGE","t5","t6","background","gridColumnGap","gridTemplateColumns","gridTemplateRows","t7","Symbol","for","t8","gridColumn","height","width","t9","t10","t11","t12","gridRow","t13","lineHeight","t14","t15","t16","t17","t18","t19","display","t20","t21","t22","t23","t24","t25","t26","t27","t28","CloseIcon","Box","Button","Flex","Grid","Stack","Text","useMediaIndex","filesize","useDispatch","useColorSchemeValue","GRID_TEMPLATE_COLUMNS","useTypedSelector","selectUploadById","uploadsActions","getSchemeColor","FileIcon","Image","Props","id","TableRowUpload","props","$","_c","scheme","dispatch","t0","state","item","mediaIndex","t1","size","base","round","fileSize","percentLoaded","Math","percent","isComplete","status","isUploading","isQueued","t2","hash","uploadCancel","handleCancelUpload","t3","t4","t5","SMALL","LARGE","t6","t7","alignItems","background","gridColumnGap","gridRowGap","gridTemplateColumns","gridTemplateRows","height","position","t8","t9","bottom","left","width","transform","transformOrigin","transition","t10","t11","t12","gridColumn","gridRowStart","gridRowEnd","t13","Symbol","for","t14","assetType","objectUrl","opacity","t15","t16","top","boxShadow","t17","t18","t19","t20","t21","t22","gridRow","marginLeft","t23","name","t24","t25","t26","t27","Box","memo","GroupedVirtuoso","useTypedSelector","CardAssetData","CardFolderData","CardUploadData","TableHeader","TableRowAsset","TableRowFolder","TableRowUpload","Props","items","onLoadMore","VirtualRow","t0","$","_c","item","selected","type","t1","Symbol","for","height","t2","id","folderId","name","totalCount","AssetTableVirtualized","props","selectedAssets","_temp","map","_temp2","selectedIds","length","index","Array","fill","t3","index_0","item_0","includes","t4","overflowX","t5","_temp3","state","assets","asset","_id","Box","Text","useMediaIndex","useEffect","useDispatch","useTypedSelector","assetsActions","foldersActions","selectCombinedItems","tagsActions","AssetGridVirtualized","AssetTableVirtualized","Items","$","_c","dispatch","fetchCount","_temp","fetching","_temp2","foldersPanelVisible","_temp3","tagsPanelVisible","_temp4","view","_temp5","combinedItems","mediaIndex","hasFetchedOnce","hasItems","length","t0","loadNextPage","handleLoadMoreItems","t1","t2","panelVisibleSet","panelVisible","isEmpty","t3","Symbol","for","width","t4","state","assets","state_0","state_1","folders","state_2","tags","state_3","Box","Button","Flex","Label","pluralize","useDispatch","useColorSchemeValue","PANEL_HEIGHT","useAssetSourceActions","useTypedSelector","assetsActions","selectAssetsPicked","dialogActions","DIALOG_ACTIONS","getSchemeColor","isImageAsset","PickedBar","$","_c","scheme","dispatch","assetsPicked","currentFolderId","_temp","isMultiSelect","onSelect","t0","length","asset","canReplace","t1","pickClear","handlePickClear","t2","showConfirmDeleteAssets","assets","handleDeletePicked","t3","_id","assetId","showAllAssetsDialog","handleReplaceImages","t4","showFolderMove","folderId","handleMovePicked","t5","folderSetRequest","handleRemovePickedFromFolder","t6","pickedAssetIds","map","_temp2","handleInsertPicked","t7","t8","background","borderBottom","height","position","width","t9","Symbol","for","color","t10","t11","t12","t13","boxShadow","t14","t15","t16","t17","t18","t19","t20","state","folders","item","kind","const","value","Box","TAGS_PANEL_WIDTH","useTypedSelector","TagView","TagsPanel","$","_c","tagsPanelVisible","_temp","t0","Symbol","for","position","width","t1","borderLeft","height","overflowX","overflowY","right","top","state","tags","panelVisible","white","Flex","Text","ReactNode","DropEvent","DropzoneOptions","useDropzone","useDispatch","styled","useAssetSourceActions","DropzoneDispatchProvider","useToolOptions","useTypedSelector","notificationsActions","uploadsActions","Props","children","UploadContainer","div","DragActiveContainer","filterFiles","fileList","FileList","files","Array","from","filteredFiles","File","file","slice","arrayBuffer","push","UploadDropzone","props","$","_c","dropzone","t0","directUploads","maxSize","onSelect","dispatch","assetTypes","_temp","isImageAssetType","length","t1","acceptedFiles","forEach","uploadRequest","forceAsAssetType","undefined","handleDrop","t2","rejections","errorCodes","flatMap","_temp3","includes","add","status","title","handleDropRejected","t3","event","type","dataTransfer","target","HTMLInputElement","handleFileGetter","t4","t5","t6","t7","accept","getFilesFromEvent","noClick","noDrag","onDrop","onDropRejected","disabled","getRootProps","getInputProps","isDragActive","open","t8","t9","t10","t11","color","hex","t12","t13","state","assets","_temp2","code","errors","map","MutationEvent","SanityClient","groq","useEffect","useDispatch","useSelector","Dispatch","AssetSourceComponentProps","inputs","FOLDER_DOCUMENT_NAME","TAG_DOCUMENT_NAME","assetsActions","foldersActions","searchActions","tagsActions","RootReducerState","Asset","Tag","getMediaTagNames","schemaType","mediaTags","options","length","unique","Set","map","t","trim","filter","Boolean","Array","from","createAssetHandler","dispatch","update","documentId","result","transition","listenerCreateQueue","asset","listenerDeleteQueue","assetId","listenerUpdateQueue","createTagHandler","tag","tagId","useBrowserInit","client","tagsByIds","state","tags","byIds","tagsFetchCount","fetchCount","tagNames","hasMediaTags","facetsClear","fetchRequest","assetSubscription","listen","subscribe","tagSubscription","folderSubscription","unsubscribe","tagFacetInput","type","resolvedTags","name","Object","values","find","item","current","NonNullable","tagItem","facetsAdd","facet","operatorType","value","label","_id","Card","Flex","PortalProvider","useState","AssetSourceComponentProps","SanityDocument","AssetBrowserDispatchProvider","useToolOptions","useVersionedClient","GlobalStyle","Controls","DebugControls","Dialogs","FolderBreadcrumbs","FolderPanel","Header","Items","Notifications","PickedBar","ReduxProvider","TagsPanel","UploadDropzone","useBrowserInit","Props","assetType","document","isMultiSelect","onClose","onSelect","selectedAssets","schemaType","BrowserContent","t0","$","_c","client","portalElement","setPortalElement","t1","t2","Symbol","for","t3","t4","t5","t6","t7","t8","position","t9","t10","Browser","props","excludeTagSlugs","Box","Portal","PortalProvider","useLayer","SyntheticEvent","AssetSourceComponentProps","SanityDocument","useFormValue","useKeyPress","useRootPortalElement","Browser","FormBuilderTool","props","$","_c","onClose","portalElement","t0","Symbol","for","currentDocument","selectionType","schemaJsonType","schemaType","jsonType","isMultiSelect","handleStopPropagation","_temp","zIndex","t1","bottom","height","left","position","top","width","t2","t3","t4","event","nativeEvent","stopImmediatePropagation","stopPropagation","Flex","Browser","Tool","$","_c","t0","Symbol","for","FolderIcon","FOLDER_DOCUMENT_NAME","title","icon","name","type","fields","to","weak","preview","select","parentName","prepare","selection","media","subtitle","undefined","TagIcon","TAG_DOCUMENT_NAME","title","icon","name","type","fields","preview","select","prepare","selection","media","current","EditIcon","ImageIcon","AssetSource","Tool","SanityTool","definePlugin","EditAssetTool","FormBuilderTool","ToolOptionsProvider","mediaFolder","mediaTag","MediaToolOptions","plugin","icon","name","title","mediaAssetSource","component","editMediaAssetSource","tool","__internalApplicationType","media","options","studio","components","layout","props","renderDefault","form","file","assetSources","prev","image","schema","types","tools","SanityClient","groq","nanoid","TAG_DOCUMENT_NAME","Tag","ApplyMediaTagsOptions","client","assetId","mediaTags","createTagsOnUpload","pendingByAsset","Map","Promise","applyMediaTags","options","chain","get","resolve","then","doApplyMediaTags","cleanup","catch","finally","delete","set","length","resolvedTags","all","map","tagName","existingTag","fetch","newTag","create","_type","name","current","validTags","filter","tag","existing","tagIds","useCdn","existingIds","Set","tagReferences","has","_id","_key","_ref","const","_weak","patch","setIfMissing","opt","append","commit","useToast","useEffect","useRef","InputProps","useToolOptions","useVersionedClient","applyMediaTags","AssetValue","_type","asset","_ref","AutoTagInputProps","mediaTags","AutoTagInput","props","$","_c","renderDefault","schemaType","value","mediaTagsProp","toast","options","client","createTagsOnUpload","prevAssetRef","undefined","isInitialMount","currentAssetRef","t0","t1","current","previousRef","length","assetId","catch","err","console","error","label","push","closable","status","title","join","t2","t3","FieldDefinitionBase","FileDefinition","ImageDefinition","WidenInitialValue","WidenValidation","AutoTagInput","ImageMediaFieldConfig","Omit","name","mediaTags","options","FileMediaFieldConfig","ImageMediaFieldResult","components","input","FileMediaFieldResult","mediaField","config","rest","Record"],"sources":["../src/contexts/AssetSourceDispatchContext.tsx","../src/hooks/useRootPortalElement.ts","../src/hooks/useTypedSelector.ts","../src/hooks/useVersionedClient.ts","../src/config/orders.ts","../src/config/searchFacets.ts","../src/constants.ts","../src/operators/debugThrottle.ts","../src/utils/constructFilter.ts","../src/utils/ReplaceImages.ts","../src/operators/checkTagName.ts","../src/utils/getTagSelectOptions.ts","../src/modules/assets/actions.ts","../src/modules/dialog/actions.ts","../src/modules/tags/index.ts","../src/modules/search/index.ts","../src/modules/uploads/actions.ts","../src/modules/assets/index.ts","../src/modules/folders/index.ts","../src/modules/dialog/index.ts","../src/styled/GlobalStyles/index.tsx","../src/contexts/ToolOptionsContext.tsx","../src/formSchema/index.ts","../src/utils/getUniqueDocuments.ts","../src/utils/imageDprUrl.ts","../src/utils/sanitizeFormData.ts","../src/utils/typeGuards.ts","../src/utils/zodFormResolver.ts","../src/utils/getAssetResolution.ts","../src/hooks/usePortalPopoverProps.ts","../src/components/ButtonAssetCopy/index.tsx","../src/components/AssetMetadata/index.tsx","../src/components/Dialog/index.tsx","../src/components/DocumentList/index.tsx","../src/components/FileIcon/index.tsx","../src/components/FileAssetPreview/index.tsx","../src/components/FormSubmitButton/index.tsx","../src/utils/getSchemeColor.ts","../src/components/Image/index.tsx","../src/components/FormFieldInputLabel/index.tsx","../src/styled/react-select/creatable.tsx","../src/components/FormFieldInputTags/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/FormFieldInputTextarea/index.tsx","../src/components/DialogAssetEdit/Details.tsx","../src/components/DialogAssetEdit/index.tsx","../src/modules/selectors.ts","../src/hooks/useKeyPress.ts","../src/components/CardAsset/index.tsx","../src/components/CardFolder/index.tsx","../src/utils/generatePreviewBlobUrl.ts","../src/utils/withMaxConcurrency.ts","../src/utils/uploadSanityAsset.ts","../src/modules/uploads/index.ts","../src/components/CardUpload/index.tsx","../src/components/AssetGridVirtualized/index.tsx","../src/components/ReplaceAssetsOverView/index.tsx","../src/components/DialogAssetsOverView/index.tsx","../src/components/DialogConfirm/index.tsx","../src/components/DialogFolderCreate/index.tsx","../src/components/DialogFolderMove/index.tsx","../src/components/DialogFolderRename/index.tsx","../src/components/FolderView/index.tsx","../src/components/DialogFolders/index.tsx","../src/components/SearchFacet/index.tsx","../src/components/TextInputNumber/index.tsx","../src/components/SearchFacetNumber/index.tsx","../src/components/SearchFacetSelect/index.tsx","../src/components/SearchFacetString/index.tsx","../src/styled/react-select/single.tsx","../src/components/SearchFacetTags/index.tsx","../src/components/SearchFacets/index.tsx","../src/components/SearchFacetsControl/index.tsx","../src/components/DialogSearchFacets/index.tsx","../src/components/DialogTagCreate/index.tsx","../src/components/DialogTagEdit/index.tsx","../src/components/Tag/index.tsx","../src/components/TagsVirtualized/index.tsx","../src/components/TagViewHeader/index.tsx","../src/components/TagView/index.tsx","../src/components/DialogTags/index.tsx","../src/components/Dialogs/index.tsx","../src/components/Notifications/index.tsx","../src/modules/debug/index.ts","../src/modules/notifications/index.ts","../src/modules/selected/index.ts","../src/modules/index.ts","../src/utils/getDocumentAssetIds.ts","../src/utils/isSupportedAssetType.ts","../src/components/ReduxProvider/index.tsx","../src/components/EditAssetTool/index.tsx","../src/components/ButtonViewGroup/index.tsx","../src/components/OrderSelect/index.tsx","../src/components/Progress/index.tsx","../src/components/TagIcon/index.tsx","../src/components/TextInputSearch/index.tsx","../src/components/Controls/index.tsx","../src/components/DebugControls/index.tsx","../src/components/FolderBreadcrumbs/index.tsx","../src/components/FolderPanel/index.tsx","../src/contexts/DropzoneDispatchContext.tsx","../src/components/Header/index.tsx","../src/components/TableHeaderItem/index.tsx","../src/components/TableHeader/index.tsx","../src/components/TableRowAsset/index.tsx","../src/components/TableRowFolder/index.tsx","../src/components/TableRowUpload/index.tsx","../src/components/AssetTableVirtualized/index.tsx","../src/components/Items/index.tsx","../src/components/PickedBar/index.tsx","../src/components/TagsPanel/index.tsx","../src/components/UploadDropzone/index.tsx","../src/components/Browser/useBrowserInit.ts","../src/components/Browser/index.tsx","../src/components/FormBuilderTool/index.tsx","../src/components/Tool/index.tsx","../src/schemas/folder.ts","../src/schemas/tag.ts","../src/plugin.tsx","../src/utils/applyMediaTags.ts","../src/components/AutoTagInputWrapper/index.tsx","../src/utils/mediaField.ts"],"sourcesContent":["import {type ReactNode, createContext, useContext, useMemo} from 'react'\nimport type {AssetSourceComponentProps} from 'sanity'\n\ntype ContextProps = {\n isMultiSelect: boolean\n onSelect?: AssetSourceComponentProps['onSelect']\n}\n\ntype Props = {\n children: ReactNode\n isMultiSelect?: boolean\n onSelect?: AssetSourceComponentProps['onSelect']\n}\n\nconst AssetSourceDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const AssetBrowserDispatchProvider = (props: Props) => {\n const {children, isMultiSelect = false, onSelect} = props\n\n const contextValue: ContextProps = useMemo(\n () => ({\n isMultiSelect,\n onSelect,\n }),\n [isMultiSelect, 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 {useEffect, useState} from 'react'\n\n/**\n * Creates a detached `.media-portal` element appended to `document.body` for the\n * lifetime of the component, used as a portal target for the plugin's dialogs\n * and overlays. The element is removed on unmount.\n */\nconst useRootPortalElement = (): HTMLDivElement => {\n const [container] = useState(() => document.createElement('div'))\n\n useEffect(() => {\n container.classList.add('media-portal')\n document.body.appendChild(container)\n return () => {\n document.body.removeChild(container)\n }\n }, [container])\n\n return container\n}\n\nexport default useRootPortalElement\n","import {type TypedUseSelectorHook, useSelector} from 'react-redux'\n\nimport type {RootReducerState} from '../modules/types'\n\nconst useTypedSelector: TypedUseSelectorHook<RootReducerState> = useSelector\n\nexport default useTypedSelector\n","import type {SanityClient} from '@sanity/client'\nimport {useClient} from 'sanity'\n\nconst useVersionedClient = (): SanityClient => useClient({apiVersion: '2025-10-02'})\n\nexport default useVersionedClient\n","import type {OrderDirection} 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 = (field: string, direction: OrderDirection): string => {\n return ORDER_DICTIONARY[field]![direction]\n}\n","import groq from 'groq'\n\nimport type {\n SearchFacetDivider,\n SearchFacetInputProps,\n SearchFacetName,\n SearchFacetOperators,\n} from '../types'\n\nexport const divider: SearchFacetDivider = {type: 'divider'}\n\nexport const inputs: Record<SearchFacetName, SearchFacetInputProps> = {\n altText: {\n assetTypes: ['file', 'image'],\n field: 'altText',\n name: 'altText',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Alt text',\n type: 'string',\n value: '',\n },\n creditLine: {\n assetTypes: ['file', 'image'],\n field: 'creditLine',\n name: 'creditLine',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Credit',\n type: 'string',\n value: '',\n },\n description: {\n assetTypes: ['file', 'image'],\n field: 'description',\n name: 'description',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Description',\n type: 'string',\n value: '',\n },\n folder: {\n assetTypes: ['file', 'image'],\n field: 'opt.media.folder._ref',\n name: 'folder',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty'],\n title: 'Folder',\n type: 'string',\n value: '',\n },\n fileName: {\n assetTypes: ['file', 'image'],\n field: 'originalFilename',\n name: 'filename',\n operatorType: 'includes',\n operatorTypes: ['includes', 'doesNotInclude'],\n title: 'File name',\n type: 'string',\n value: '',\n },\n height: {\n assetTypes: ['image'],\n field: 'metadata.dimensions.height',\n name: 'height',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'Height',\n type: 'number',\n value: 400,\n },\n inCurrentDocument: {\n assetTypes: ['file', 'image'],\n name: 'inCurrentDocument',\n operatorType: 'is',\n options: [\n {\n name: 'true',\n title: 'True',\n value: groq`_id in $documentAssetIds`,\n },\n {\n name: 'false',\n title: 'False',\n value: groq`!(_id in $documentAssetIds)`,\n },\n ],\n selectOnly: true,\n title: 'In use in current document',\n type: 'select',\n value: 'true',\n },\n inUse: {\n assetTypes: ['file', 'image'],\n name: 'inUse',\n operatorType: 'is',\n options: [\n {\n name: 'true',\n title: 'True',\n value: groq`count(*[references(^._id)]) > 0`,\n },\n {\n name: 'false',\n title: 'False',\n value: groq`count(*[references(^._id)]) == 0`,\n },\n ],\n title: 'In use',\n type: 'select',\n value: 'true',\n },\n isOpaque: {\n assetTypes: ['image'],\n field: 'metadata.isOpaque',\n name: 'isOpaque',\n operatorType: 'equalTo',\n options: [\n {\n name: 'true',\n title: 'True',\n value: `false`,\n },\n {\n name: 'false',\n title: 'False',\n value: `true`,\n },\n ],\n title: 'Has transparency',\n type: 'select',\n value: 'true',\n },\n orientation: {\n assetTypes: ['image'],\n name: 'orientation',\n operatorType: 'is',\n operatorTypes: ['is', 'isNot'],\n options: [\n {\n name: 'portrait',\n title: 'Portrait',\n value: 'metadata.dimensions.aspectRatio < 1',\n },\n {\n name: 'landscape',\n title: 'Landscape',\n value: 'metadata.dimensions.aspectRatio > 1',\n },\n {\n name: 'square',\n title: 'Square',\n value: 'metadata.dimensions.aspectRatio == 1',\n },\n ],\n title: 'Orientation',\n type: 'select',\n value: 'portrait',\n },\n size: {\n assetTypes: ['file', 'image'],\n field: 'size',\n modifier: 'kb',\n modifiers: [\n {\n name: 'kb',\n title: 'KB',\n fieldModifier: (fieldName) => `round(${fieldName} / 1000)`,\n },\n {\n name: 'mb',\n title: 'MB',\n fieldModifier: (fieldName) => `round(${fieldName} / 1000000)`,\n },\n ],\n name: 'size',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'File size',\n type: 'number',\n value: 0,\n },\n tag: {\n assetTypes: ['file', 'image'],\n field: 'opt.media.tags',\n name: 'tag',\n operatorType: 'references',\n operatorTypes: ['references', 'doesNotReference', null, 'empty', 'notEmpty'],\n title: 'Tags',\n type: 'searchable',\n },\n title: {\n assetTypes: ['file', 'image'],\n field: 'title',\n name: 'title',\n operatorType: 'empty',\n operatorTypes: ['empty', 'notEmpty', null, 'includes', 'doesNotInclude'],\n title: 'Title',\n type: 'string',\n value: '',\n },\n type: {\n assetTypes: ['file', 'image'],\n name: 'type',\n operatorType: 'is',\n operatorTypes: ['is', 'isNot'],\n options: [\n {\n name: 'image',\n title: 'Image',\n value: 'mimeType match \"image*\"',\n },\n {\n name: 'video',\n title: 'Video',\n value: 'mimeType match \"video*\"',\n },\n {\n name: 'audio',\n title: 'Audio',\n value: 'mimeType match \"audio*\"',\n },\n {\n name: 'pdf',\n title: 'PDF',\n value: 'mimeType == \"application/pdf\"',\n },\n ],\n title: 'File type',\n type: 'select',\n value: 'image',\n },\n width: {\n assetTypes: ['image'],\n field: 'metadata.dimensions.width',\n name: 'width',\n operatorType: 'greaterThan',\n operatorTypes: [\n 'greaterThan',\n 'greaterThanOrEqualTo',\n 'lessThan',\n 'lessThanOrEqualTo',\n null,\n 'equalTo',\n ],\n title: 'Width',\n type: 'number',\n value: 400,\n },\n}\n\nexport const operators: SearchFacetOperators = {\n doesNotInclude: {\n fn: (value, field) => (value ? `!(${field} match '*${value}*')` : undefined),\n label: 'does not include',\n },\n doesNotReference: {\n fn: (value, _field) => (value ? `!references('${value}')` : undefined),\n label: 'does not include',\n },\n empty: {\n fn: (_value, field) => `!defined(${field})`,\n hideInput: true,\n label: 'is empty',\n },\n equalTo: {\n fn: (value, field) => (value ? `${field} == ${value}` : undefined),\n label: 'is equal to',\n },\n greaterThan: {\n fn: (value, field) => (value ? `${field} > ${value}` : undefined),\n label: 'is greater than',\n },\n greaterThanOrEqualTo: {\n fn: (value, field) => (value ? `${field} >= ${value}` : undefined),\n label: 'is greater than or equal to',\n },\n includes: {\n fn: (value, field) => (value ? `${field} match '*${value}*'` : undefined),\n label: 'includes',\n },\n is: {\n fn: (value, _field) => `${value}`,\n label: 'is',\n },\n isNot: {\n fn: (value, _field) => `!(${value})`,\n label: 'is not',\n },\n lessThan: {\n fn: (value, field) => (value ? `${field} < ${value}` : undefined),\n label: 'is less than',\n },\n lessThanOrEqualTo: {\n fn: (value, field) => (value ? `${field} <= ${value}` : undefined),\n label: 'is less than or equal to',\n },\n notEmpty: {\n fn: (_value, field) => `defined(${field})`,\n hideInput: true,\n label: 'is not empty',\n },\n references: {\n fn: (value, _field) => (value ? `references('${value}')` : undefined),\n label: 'includes',\n },\n}\n","import type {AssetSourceComponentProps} from 'sanity'\n\nimport {divider, inputs} from './config/searchFacets'\nimport type {\n SearchFacetInputProps,\n SearchFacetDivider,\n SearchFacetGroup,\n OrderDirection,\n} from './types'\n\nexport const SUPPORTED_ASSET_TYPES = [\n 'file',\n 'image',\n] as const satisfies AssetSourceComponentProps['assetType'][]\n\n// Sort order dropdown options\n// null values are represented as menu dividers\nexport const ORDER_OPTIONS: ({direction: OrderDirection; field: string} | null)[] = [\n {\n direction: 'desc',\n field: '_createdAt',\n },\n {\n direction: 'asc',\n field: '_createdAt',\n },\n // Divider\n null,\n {\n direction: 'desc',\n field: '_updatedAt',\n },\n {\n direction: 'asc' as OrderDirection,\n field: '_updatedAt',\n },\n // Divider\n null,\n {\n direction: 'asc',\n field: 'originalFilename',\n },\n {\n direction: 'desc',\n field: 'originalFilename',\n },\n // Divider\n null,\n {\n direction: 'desc',\n field: 'size',\n },\n {\n direction: 'asc',\n field: 'size',\n },\n]\n\nexport const FACETS: (SearchFacetDivider | SearchFacetGroup | SearchFacetInputProps)[] = [\n inputs.tag,\n divider,\n inputs.inUse,\n inputs.inCurrentDocument,\n divider,\n inputs.title,\n inputs.folder,\n inputs.altText,\n inputs.creditLine,\n inputs.description,\n divider,\n inputs.isOpaque,\n divider,\n inputs.fileName,\n inputs.size,\n inputs.type,\n divider,\n inputs.orientation,\n inputs.width,\n inputs.height,\n]\n\nexport 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 FOLDERS_PANEL_WIDTH = 260 // px\nexport const FOLDER_DOCUMENT_NAME = 'media.folder'\nexport const PANEL_HEIGHT = 32 // px\nexport const TAG_DOCUMENT_NAME = 'media.tag'\nexport const TAGS_PANEL_WIDTH = 250 // px\n","import {iif, type Observable, of, throwError} from 'rxjs'\nimport {delay, mergeMap} from 'rxjs/operators'\n\nconst debugThrottle = (throttled?: boolean) => {\n return function <T>(source: Observable<T>): Observable<T> {\n return iif(\n () => !!throttled,\n source.pipe(\n delay(3000),\n mergeMap((v) => {\n if (Math.random() > 0.5) {\n return throwError({\n message: 'Test error',\n statusCode: 500,\n })\n }\n return of(v)\n }),\n ),\n source,\n )\n }\n}\n\nexport default debugThrottle\n","import groq from 'groq'\n\nimport {operators} from '../config/searchFacets'\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {AssetType, SearchFacetInputProps} from '../types'\n\n/** GROQ fragment that excludes assets tagged with any of the given media.tag slugs. */\nexport const buildExcludeTagsFragment = (excludeTagSlugs?: string[]): string | undefined => {\n const serializedExcludeTagSlugs = excludeTagSlugs?.length\n ? JSON.stringify(excludeTagSlugs)\n : undefined\n\n return serializedExcludeTagSlugs\n ? groq`!(defined(opt.media.tags) && count(opt.media.tags[@._ref in *[_type == \"${TAG_DOCUMENT_NAME}\" && name.current in ${serializedExcludeTagSlugs}]._id]) > 0)`\n : undefined\n}\n\nconst constructFilter = ({\n assetTypes,\n currentFolderId,\n excludeTagSlugs,\n searchFacets,\n searchQuery,\n}: {\n assetTypes: AssetType[]\n currentFolderId?: string | null\n excludeTagSlugs?: string[]\n searchFacets: SearchFacetInputProps[]\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) => `sanity.${type}Asset`)\n\n const baseFilter = groq`\n _type in ${JSON.stringify(documentAssetTypes)} && !(_id in path(\"drafts.**\"))\n `\n\n const excludeTagsFragment = buildExcludeTagsFragment(excludeTagSlugs)\n\n const searchFacetFragments = searchFacets.reduce((acc: string[], facet) => {\n if (facet.type === 'number') {\n const {field, modifier, modifiers, operatorType, value} = facet\n const operator = operators[operatorType]\n\n // Get current modifier\n const currentModifier = modifiers?.find((m) => m.name === modifier)\n\n // Apply field modifier function (if present)\n const facetField = currentModifier?.fieldModifier\n ? currentModifier.fieldModifier(field)\n : field\n\n const fragment = operator.fn(value, facetField)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'searchable') {\n const {field, operatorType, value} = facet\n const operator = operators[operatorType]\n\n const fragment = operator.fn(value?.value, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'select') {\n const {field, operatorType, options, value} = facet\n const operator = operators[operatorType]\n\n const currentOptionValue = options?.find((l) => l.name === value)?.value\n\n const fragment = operator.fn(currentOptionValue, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n if (facet.type === 'string') {\n const {field, operatorType, value} = facet\n const operator = operators[operatorType]\n\n const fragment = operator.fn(value, field)\n if (fragment) {\n acc.push(fragment)\n }\n }\n\n return acc\n }, [])\n\n // All assets (no folder selected) should not apply a folder filter. A specific\n // folder shows only assets pointing at it.\n const folderFilter: string | undefined = currentFolderId\n ? `opt.media.folder._ref == ${JSON.stringify(currentFolderId)}`\n : undefined\n\n // Join separate filter fragments\n const constructedQuery = [\n // Base filter\n baseFilter,\n ...(excludeTagsFragment ? [excludeTagsFragment] : []),\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 ...(folderFilter ? [folderFilter] : []),\n // Search facets\n ...searchFacetFragments,\n ].join(' && ')\n\n return constructedQuery\n}\n\nexport default constructFilter\n","import type {Asset} from '../types'\n\ntype AssetRef = {\n _ref?: unknown\n _type?: unknown\n}\n\ntype ImageNode = {\n _type?: unknown\n asset?: AssetRef\n}\n\n/**\n * Re-points every image asset in `document` that references `assetToReplaceId`\n * at `newAsset`, mutating the document in place, and returns one patch object\n * per affected top-level field in the form `{[field]: <full mutated field value>}`.\n *\n * Each patch carries the entire (mutated) top-level field value rather than just\n * the matched image node, so `client.patch().set()` updates the references\n * without discarding sibling data — including deeply nested image fields.\n *\n * NOTE: ported from sanity-plugin-media#236. Because of GROQ limitations the\n * matching image objects are filtered out of the document manually rather than\n * via a projection.\n */\nexport function findImageAssets(\n document: Record<string, unknown>,\n newAsset: Asset,\n assetToReplaceId: string,\n): Record<string, unknown>[] {\n const matchedTopLevelFields = new Set<string>()\n repointNestedImages(document, newAsset, assetToReplaceId, '', matchedTopLevelFields)\n return [...matchedTopLevelFields].map((field) => ({[field]: document[field]}))\n}\n\nfunction repointNestedImages(\n node: unknown,\n newAsset: Asset,\n assetToReplaceId: string,\n topLevelField: string,\n matchedTopLevelFields: Set<string>,\n): void {\n if (typeof node !== 'object' || node === null) {\n return\n }\n\n const candidate = node as ImageNode\n // Match built-in `image` nodes and custom image schema types (e.g. `mainImage`),\n // which store their type name in `_type` rather than `\"image\"`. Skip file fields.\n const assetRef = candidate.asset\n const hasMatchingAssetRef = assetRef?._type === 'reference' && assetRef._ref === assetToReplaceId\n if (hasMatchingAssetRef && candidate._type !== 'file' && assetRef) {\n assetRef._ref = newAsset._id\n if (topLevelField) {\n matchedTopLevelFields.add(topLevelField)\n }\n }\n\n for (const [key, value] of Object.entries(node as Record<string, unknown>)) {\n if (typeof value === 'object' && value !== null) {\n // Once we descend past the document root, keep attributing matches to the\n // top-level field so the patch replaces that whole field.\n repointNestedImages(\n value,\n newAsset,\n assetToReplaceId,\n topLevelField || key,\n matchedTopLevelFields,\n )\n }\n }\n}\n","import type {SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {from, Observable, of, throwError} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {HttpError} from '../types'\n\nconst checkTagName = (client: SanityClient, name: string) => {\n return function <T>(source: Observable<T>): Observable<boolean> {\n return source.pipe(\n mergeMap(() => {\n return from(\n client.fetch(groq`count(*[_type == \"${TAG_DOCUMENT_NAME}\" && name.current == $name])`, {\n name,\n }),\n ) as Observable<number>\n }),\n mergeMap((existingTagCount: number) => {\n if (existingTagCount > 0) {\n return throwError({\n message: 'Tag already exists',\n statusCode: 409,\n } satisfies HttpError)\n }\n\n return of(true)\n }),\n )\n }\n}\n\nexport default checkTagName\n","import type {TagSelectOption, TagItem} from '../types'\n\nconst getTagSelectOptions = (tags: TagItem[]): TagSelectOption[] => {\n return tags.reduce((acc: TagSelectOption[], val) => {\n const tag = val?.tag\n if (tag) {\n acc.push({\n label: tag?.name?.current,\n value: tag?._id,\n })\n }\n return acc\n }, [])\n}\n\nexport default getTagSelectOptions\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {AssetItem, HttpError, Tag} from '../../types'\n\nexport const ASSETS_ACTIONS = {\n tagsAddComplete: createAction(\n 'actions/tagsAddComplete',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsAddError: createAction(\n 'actions/tagsAddError',\n function prepare({assets, error, tag}: {assets: AssetItem[]; error: HttpError; tag: Tag}) {\n return {payload: {assets, error, tag}}\n },\n ),\n tagsAddRequest: createAction(\n 'actions/tagsAddRequest',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsRemoveComplete: createAction(\n 'actions/tagsRemoveComplete',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n tagsRemoveError: createAction(\n 'actions/tagsRemoveError',\n function prepare({assets, error, tag}: {assets: AssetItem[]; error: HttpError; tag: Tag}) {\n return {payload: {assets, error, tag}}\n },\n ),\n tagsRemoveRequest: createAction(\n 'actions/tagsRemoveRequest',\n function prepare({assets, tag}: {assets: AssetItem[]; tag: Tag}) {\n return {payload: {assets, tag}}\n },\n ),\n}\n","import {createAction} from '@reduxjs/toolkit'\n\nimport type {AssetItem} from '../../types'\n\nexport const DIALOG_ACTIONS = {\n showFolderCreate: createAction(\n 'dialog/showFolderCreate',\n function prepare({parentFolderId}: {parentFolderId?: string | null} = {}) {\n return {\n payload: {parentFolderId},\n }\n },\n ),\n showFolderMove: createAction(\n 'dialog/showFolderMove',\n function prepare({assets, folderId}: {assets: AssetItem[]; folderId?: string | null}) {\n return {\n payload: {assets, folderId},\n }\n },\n ),\n showFolderRename: createAction(\n 'dialog/showFolderRename',\n function prepare({folderId}: {folderId: string}) {\n return {\n payload: {folderId},\n }\n },\n ),\n showTagCreate: createAction('dialog/showTagCreate'),\n showTagEdit: createAction('dialog/showTagEdit', function prepare({tagId}: {tagId: string}) {\n return {\n payload: {tagId},\n }\n }),\n}\n","import {createSelector, createSlice, isAnyOf, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, Transaction} from '@sanity/client'\nimport groq from 'groq'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {from, Observable, of} from 'rxjs'\nimport {bufferTime, catchError, filter, mergeMap, switchMap, withLatestFrom} from 'rxjs/operators'\n\nimport {TAG_DOCUMENT_NAME} from '../../constants'\nimport checkTagName from '../../operators/checkTagName'\nimport debugThrottle from '../../operators/debugThrottle'\nimport type {Asset, HttpError, MyEpic, TagSelectOption, Tag, TagItem} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {DIALOG_ACTIONS} from '../dialog/actions'\nimport type {RootReducerState} from '../types'\n\ntype TagsReducerState = {\n allIds: string[]\n byIds: Record<string, TagItem>\n creating: boolean\n creatingError?: HttpError\n fetchCount: number\n fetching: boolean\n fetchingError?: HttpError\n // totalCount: number\n panelVisible: boolean\n}\n\nconst initialState = {\n allIds: [],\n byIds: {},\n creating: false,\n creatingError: undefined,\n fetchCount: -1,\n fetching: false,\n fetchingError: undefined,\n panelVisible: true,\n} as TagsReducerState\n\nconst tagsSlice = createSlice({\n name: 'tags',\n initialState,\n extraReducers: (builder) => {\n builder\n .addCase(DIALOG_ACTIONS.showTagCreate, (state) => {\n delete state.creatingError\n })\n .addCase(DIALOG_ACTIONS.showTagEdit, (state, action) => {\n const {tagId} = action.payload\n delete state.byIds[tagId]!.error\n })\n .addMatcher(\n isAnyOf(\n ASSETS_ACTIONS.tagsAddComplete,\n ASSETS_ACTIONS.tagsAddError,\n ASSETS_ACTIONS.tagsRemoveComplete,\n ASSETS_ACTIONS.tagsRemoveError,\n ),\n (state, action) => {\n const {tag} = action.payload\n state.byIds[tag._id]!.updating = false\n },\n )\n .addMatcher(\n isAnyOf(ASSETS_ACTIONS.tagsAddRequest, ASSETS_ACTIONS.tagsRemoveRequest),\n (state, action) => {\n const {tag} = action.payload\n state.byIds[tag._id]!.updating = true\n },\n )\n },\n reducers: {\n createComplete(state, action: PayloadAction<{assetId?: string; tag: Tag}>) {\n const {tag} = action.payload\n state.creating = false\n if (!state.allIds.includes(tag._id)) {\n state.allIds.push(tag._id)\n }\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n },\n createError(state, action: PayloadAction<{error: HttpError; name: string}>) {\n state.creating = false\n state.creatingError = action.payload.error\n },\n createRequest(state, _action: PayloadAction<{assetId?: string; name: string}>) {\n state.creating = true\n delete state.creatingError\n },\n deleteComplete(state, action: PayloadAction<{tagId: string}>) {\n const {tagId} = action.payload\n const deleteIndex = state.allIds.indexOf(tagId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[tagId]\n },\n deleteError(state, action: PayloadAction<{error: HttpError; tag: Tag}>) {\n const {error, tag} = action.payload\n\n const tagId = tag?._id\n state.byIds[tagId]!.error = error\n state.byIds[tagId]!.updating = false\n },\n deleteRequest(state, action: PayloadAction<{tag: Tag}>) {\n const tagId = action.payload?.tag?._id\n state.byIds[tagId]!.picked = false\n state.byIds[tagId]!.updating = true\n\n Object.keys(state.byIds).forEach((key) => {\n delete state.byIds[key]!.error\n })\n },\n fetchComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n state.allIds.push(tag._id)\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n })\n\n state.fetching = false\n state.fetchCount = tags.length || 0\n delete state.fetchingError\n },\n fetchError(state, action: PayloadAction<{error: HttpError}>) {\n const {error} = action.payload\n state.fetching = false\n state.fetchingError = error\n },\n fetchRequest: {\n reducer: (state, _action: PayloadAction<{query: string}>) => {\n state.fetching = true\n delete state.fetchingError\n },\n prepare: () => {\n // Construct query\n const query = groq`\n {\n \"items\": *[\n _type == \"${TAG_DOCUMENT_NAME}\"\n && !(_id in path(\"drafts.**\"))\n ] {\n _createdAt,\n _updatedAt,\n _id,\n _rev,\n _type,\n name\n } | order(name.current asc),\n }\n `\n return {payload: {query}}\n },\n },\n // Queue batch tag creation\n listenerCreateQueue(_state, _action: PayloadAction<{tag: Tag}>) {\n //\n },\n // Apply created tags (via sanity real-time events)\n listenerCreateQueueComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n state.byIds[tag._id] = {\n _type: 'tag',\n picked: false,\n tag,\n updating: false,\n }\n if (!state.allIds.includes(tag._id)) {\n state.allIds.push(tag._id)\n }\n })\n },\n // Queue batch tag deletion\n listenerDeleteQueue(_state, _action: PayloadAction<{tagId: string}>) {\n //\n },\n // Apply deleted tags (via sanity real-time events)\n listenerDeleteQueueComplete(state, action: PayloadAction<{tagIds: string[]}>) {\n const {tagIds} = action.payload\n\n tagIds?.forEach((tagId) => {\n const deleteIndex = state.allIds.indexOf(tagId)\n if (deleteIndex >= 0) {\n state.allIds.splice(deleteIndex, 1)\n }\n delete state.byIds[tagId]\n })\n },\n // Queue batch tag updates\n listenerUpdateQueue(_state, _action: PayloadAction<{tag: Tag}>) {\n //\n },\n // Apply updated tags (via sanity real-time events)\n listenerUpdateQueueComplete(state, action: PayloadAction<{tags: Tag[]}>) {\n const {tags} = action.payload\n\n tags?.forEach((tag) => {\n if (state.byIds[tag._id]) {\n state.byIds[tag._id]!.tag = tag\n }\n })\n },\n // Set tag panel visibility\n panelVisibleSet(state, action: PayloadAction<{panelVisible: boolean}>) {\n const {panelVisible} = action.payload\n state.panelVisible = panelVisible\n },\n // Sort all tags by name\n sort(state) {\n state.allIds.sort((a, b) => {\n const tagA = state.byIds[a]!.tag.name.current\n const tagB = state.byIds[b]!.tag.name.current\n\n if (tagA < tagB) {\n return -1\n } else if (tagA > tagB) {\n return 1\n }\n return 0\n })\n },\n updateComplete(state, action: PayloadAction<{closeDialogId?: string; tag: Tag}>) {\n const {tag} = action.payload\n state.byIds[tag._id]!.tag = tag\n state.byIds[tag._id]!.updating = false\n },\n updateError(state, action: PayloadAction<{tag: Tag; error: HttpError}>) {\n const {error, tag} = action.payload\n const tagId = tag?._id\n state.byIds[tagId]!.error = error\n state.byIds[tagId]!.updating = false\n },\n updateRequest(\n state,\n action: PayloadAction<{\n closeDialogId?: string\n formData: Record<string, any>\n tag: Tag\n }>,\n ) {\n const {tag} = action.payload\n state.byIds[tag?._id]!.updating = true\n },\n },\n})\n\n// Epics\n\n// On tag create request:\n// - async check to see if tag already exists\n// - throw if tag already exists\n// - otherwise, create new tag\nexport const tagsCreateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.createRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assetId, name} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n checkTagName(client, name),\n mergeMap(() =>\n client.observable.create({\n _type: TAG_DOCUMENT_NAME,\n name: {\n _type: 'slug',\n current: name,\n },\n }),\n ),\n mergeMap((result) => of(tagsSlice.actions.createComplete({assetId, tag: result as Tag}))),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.createError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n name,\n }),\n ),\n ),\n )\n }),\n )\n\n// On tag delete request\n// - find referenced assets\n// - remove tag from referenced assets in a sanity transaction\nexport const tagsDeleteEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.deleteRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {tag} = action.payload\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Fetch assets which reference this tag\n mergeMap(() =>\n client.observable.fetch<Asset[]>(\n groq`*[\n _type in [\"sanity.fileAsset\", \"sanity.imageAsset\"]\n && references(*[_type == \"media.tag\" && name.current == $tagName]._id)\n ] {\n _id,\n _rev,\n opt\n }`,\n {tagName: tag.name.current},\n ),\n ),\n // Create transaction which remove tag references from all matched assets and delete tag\n mergeMap((assets) => {\n const patches = assets.map((asset) => ({\n id: asset._id,\n patch: {\n // this will cause the transaction to fail if the document has been modified since it was fetched.\n ifRevisionID: asset._rev,\n unset: [`opt.media.tags[_ref == \"${tag._id}\"]`],\n },\n }))\n\n const transaction: Transaction = patches.reduce(\n (tx, patch) => tx.patch(patch.id, patch.patch),\n client.transaction(),\n )\n\n transaction.delete(tag._id)\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(tagsSlice.actions.deleteComplete({tagId: tag._id}))),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.deleteError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n\n// Async fetch tags\nexport const tagsFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const {query} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Fetch tags\n mergeMap(() =>\n client.observable.fetch<{\n items: Tag[]\n }>(query),\n ),\n // Dispatch complete action\n mergeMap((result) => {\n const {items} = result\n return of(tagsSlice.actions.fetchComplete({tags: items}))\n }),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.fetchError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag creation via sanity subscriber\nexport const tagsListenerCreateQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerCreateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tags = actions?.map((action) => action.payload.tag)\n return of(tagsSlice.actions.listenerCreateQueueComplete({tags}))\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag deletion via sanity subscriber\nexport const tagsListenerDeleteQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerDeleteQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tagIds = actions?.map((action) => action.payload.tagId)\n return of(tagsSlice.actions.listenerDeleteQueueComplete({tagIds}))\n }),\n )\n\n// TODO: merge all buffer epics\n// Buffer tag update via sanity subscriber\nexport const tagsListenerUpdateQueueEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsSlice.actions.listenerUpdateQueue.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const tags = actions?.map((action) => action.payload.tag)\n return of(tagsSlice.actions.listenerUpdateQueueComplete({tags}))\n }),\n )\n\n// On successful tag creation or updates:\n// - Re-sort all tags\nexport const tagsSortEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n tagsSlice.actions.listenerCreateQueueComplete.type,\n tagsSlice.actions.listenerUpdateQueueComplete.type,\n ),\n bufferTime(1000),\n filter((actions) => actions.length > 0),\n mergeMap(() => of(tagsSlice.actions.sort())),\n )\n\n// On tag update request\n// - check if tag name already exists\n// - throw if tag already exists\n// - otherwise, patch document\nexport const tagsUpdateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(tagsSlice.actions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {closeDialogId, formData, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Check if tag name is available, throw early if not\n checkTagName(client, formData?.['name']?.current),\n // Patch document (Update tag)\n mergeMap(\n () =>\n from(\n client\n .patch(tag._id)\n .set({name: {_type: 'slug', current: formData?.['name'].current}})\n .commit(),\n ) as Observable<Tag>,\n ),\n // Dispatch complete action\n mergeMap((updatedTag: Tag) => {\n return of(\n tagsSlice.actions.updateComplete({\n closeDialogId,\n tag: updatedTag,\n }),\n )\n }),\n catchError((error: ClientError) =>\n of(\n tagsSlice.actions.updateError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n\n// Selectors\n\nconst selectTagsByIds = (state: RootReducerState) => state.tags.byIds\n\nconst selectTagsAllIds = (state: RootReducerState) => state.tags.allIds\n\nexport const selectTags: Selector<RootReducerState, TagItem[]> = createSelector(\n [selectTagsByIds, selectTagsAllIds],\n (byIds, allIds) => allIds.map((id) => byIds[id]!),\n)\n\nexport const selectTagById = createSelector(\n [selectTagsByIds, (_state: RootReducerState, tagId: string) => tagId],\n (byIds, tagId) => byIds[tagId],\n)\n\n// TODO: use createSelector\n// Map tag references to react-select options, skipping over items with no linked tags\nexport const selectTagSelectOptions =\n (asset?: Asset) =>\n (state: RootReducerState): TagSelectOption[] | null => {\n const tags = asset?.opt?.media?.tags?.reduce((acc: TagItem[], v) => {\n const tagItem = state.tags.byIds[v._ref]\n if (tagItem?.tag) {\n acc.push(tagItem)\n }\n return acc\n }, [])\n\n if (tags && tags?.length > 0) {\n return getTagSelectOptions(tags)\n }\n\n return null\n }\n\nexport const tagsActions = {...tagsSlice.actions}\n\nexport default tagsSlice.reducer\n","import {type PayloadAction, createSelector, createSlice} from '@reduxjs/toolkit'\nimport {uuid} from '@sanity/uuid'\nimport {EMPTY, of} from 'rxjs'\nimport {filter, mergeMap, withLatestFrom} from 'rxjs/operators'\n\nimport type {MyEpic, SearchFacetInputProps, SearchFacetOperatorType, WithId} from '../../types'\nimport {tagsActions} from '../tags'\nimport type {RootReducerState} from '../types'\n\n// TODO: don't store non-serializable data in the search store\n// (The main offender is `fieldModifier` which is currently a function)\n\ntype SearchState = {\n facets: WithId<SearchFacetInputProps>[]\n query: string\n}\n\nconst initialState = {\n facets: [],\n query: '',\n} as SearchState\n\nconst searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n // Add search facet\n facetsAdd(state, action: PayloadAction<{facet: SearchFacetInputProps}>) {\n state.facets.push({...action.payload.facet, id: uuid()})\n },\n // Clear all search facets\n facetsClear(state) {\n state.facets = []\n },\n // Remove search facet by name\n facetsRemoveByName(state, action: PayloadAction<{facetName: string}>) {\n state.facets = state.facets.filter((facet) => facet.name !== action.payload.facetName)\n },\n // Remove search facet by name\n facetsRemoveByTag(state, action: PayloadAction<{tagId: string}>) {\n state.facets = state.facets.filter(\n (facet) =>\n !(\n facet.name === 'tag' &&\n facet.type === 'searchable' &&\n (facet.operatorType === 'references' || facet.operatorType === 'doesNotReference') &&\n facet.value?.value === action.payload.tagId\n ),\n )\n },\n // Remove search facet by name\n facetsRemoveById(state, action: PayloadAction<{facetId: string}>) {\n state.facets = state.facets.filter((facet) => facet.id !== action.payload.facetId)\n },\n // Update an existing search facet\n facetsUpdate(\n state,\n action: PayloadAction<{\n modifier?: string\n name: string\n operatorType?: SearchFacetOperatorType\n value?: any // TODO: type correctly\n }>,\n ) {\n const {modifier, name, operatorType, value} = action.payload\n\n const facet = state.facets.find((f) => f.name === name)\n\n if (!facet) {\n return\n }\n\n if (facet.type === 'number' && modifier) {\n facet.modifier = modifier\n }\n if (operatorType) {\n facet.operatorType = operatorType\n }\n if (typeof value !== 'undefined') {\n facet.value = value\n }\n\n state.facets = state.facets.filter((f) => f.name !== facet.name || f.id === facet.id)\n },\n // Update an existing search facet\n facetsUpdateById(\n state,\n action: PayloadAction<{\n modifier?: string\n id: string\n operatorType?: SearchFacetOperatorType\n value?: any // TODO: type correctly\n }>,\n ) {\n const {modifier, id, operatorType, value} = action.payload\n\n state.facets.forEach((facet, index) => {\n if (facet.id === id) {\n if (facet.type === 'number' && modifier) {\n facet.modifier = modifier\n }\n if (operatorType) {\n facet.operatorType = operatorType\n }\n if (typeof value !== 'undefined') {\n state.facets[index]!.value = value\n }\n }\n })\n },\n // Update existing search query\n querySet(state, action: PayloadAction<{searchQuery: string}>) {\n state.query = action.payload?.searchQuery\n },\n },\n})\n\n// Epics\n\n// On tag update success -> update existing tag search facet (if present)\nexport const searchFacetTagUpdateEpic: MyEpic = (action$, state$) =>\n action$.pipe(\n filter(tagsActions.updateComplete.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {tag} = action.payload\n\n const currentSearchFacetTag = state.search.facets?.find((facet) => facet.name === 'tag')\n const tagItem = state.tags.byIds[tag._id]\n\n if (currentSearchFacetTag?.type === 'searchable') {\n if (currentSearchFacetTag.value?.value === tag._id) {\n return of(\n searchSlice.actions.facetsUpdate({\n name: 'tag',\n value: {\n label: tagItem?.tag?.name?.current,\n value: tagItem?.tag?._id,\n },\n }),\n )\n }\n }\n\n return EMPTY\n }),\n )\n\n// Selectors\nexport const selectIsSearchFacetTag = createSelector(\n [\n (state: RootReducerState) => state.search.facets,\n (_state: RootReducerState, tagId: string) => tagId,\n ],\n (searchFacets, tagId) =>\n searchFacets.some(\n (facet) =>\n facet.name === 'tag' &&\n facet.type === 'searchable' &&\n (facet.operatorType === 'references' || facet.operatorType === 'doesNotReference') &&\n facet.value?.value === tagId,\n ),\n)\n\nexport const searchActions = {...searchSlice.actions}\n\nexport default searchSlice.reducer\n","import {createAction} from '@reduxjs/toolkit'\nimport type {SanityAssetDocument, SanityImageAssetDocument} from '@sanity/client'\n\nexport const UPLOADS_ACTIONS = {\n uploadComplete: createAction(\n 'uploads/uploadComplete',\n function prepare({asset}: {asset: SanityAssetDocument | SanityImageAssetDocument}) {\n return {\n payload: {asset},\n }\n },\n ),\n}\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {AttributeSet, ClientError, Patch, SanityDocument, Transaction} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\nimport type {Selector} from 'react-redux'\nimport {ofType} from 'redux-observable'\nimport {EMPTY, from, of} from 'rxjs'\nimport {\n bufferTime,\n catchError,\n concatMap,\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 debugThrottle from '../../operators/debugThrottle'\nimport type {\n Asset,\n AssetItem,\n AssetType,\n BrowserView,\n HttpError,\n MyEpic,\n Order,\n OrderDirection,\n Tag,\n} from '../../types'\nimport constructFilter from '../../utils/constructFilter'\nimport {findImageAssets} from '../../utils/ReplaceImages'\nimport {searchActions} from '../search'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\nimport {ASSETS_ACTIONS} from './actions'\ntype ItemError = {\n description: string\n id: string\n referencingIDs: string[]\n type: string // 'documentHasExistingReferencesError'\n}\n\nexport type AssetsReducerState = {\n allIds: string[]\n assetTypes: AssetType[]\n byIds: Record<string, AssetItem>\n excludeTagSlugs: string[]\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 {\n direction: OrderDirection\n field: string\n}\n\n/**\n * NOTE:\n * `fetchCount` returns the number of items retrieved in the most recent fetch.\n * This is a temporary workaround to be able to determine when there are no more items to retrieve.\n * Typically this would be done by deriving the total number of assets upfront, but currently such\n * queries in GROQ aren't fast enough to use on large datasets (1000s of entries).\n *\n * TODO:\n * When the query engine has been improved and above queries are faster, remove all instances of\n * of `fetchCount` and reinstate `totalCount` across the board.\n */\n\nexport const initialState = {\n allIds: [],\n assetTypes: [],\n byIds: {},\n excludeTagSlugs: [],\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.field, defaultOrder.direction),\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 Asset,\n picked: false,\n updating: false,\n }\n })\n .addCase(ASSETS_ACTIONS.tagsAddComplete, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsAddError, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsAddRequest, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = true\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveComplete, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveError, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = false\n })\n })\n .addCase(ASSETS_ACTIONS.tagsRemoveRequest, (state, action) => {\n const {assets} = action.payload\n assets.forEach((asset) => {\n state.byIds[asset.asset._id]!.updating = true\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 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: Asset[]; 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 fetchComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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 const existing = state.byIds[asset._id]\n // Preserve pick/updating across search refreshes (e.g. replace dialog clearing filters)\n state.byIds[asset._id] = {\n _type: 'asset',\n asset: asset,\n picked: existing?.picked ?? false,\n updating: existing?.updating ?? false,\n ...(existing?.error ? {error: existing.error} : {}),\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 folderSetComplete(\n state,\n action: PayloadAction<{assetIds: string[]; folderId: string | null; closeDialogId?: string}>,\n ) {\n const {assetIds, folderId} = action.payload\n\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]?.asset) {\n state.byIds[assetId].asset.opt = state.byIds[assetId].asset.opt || {}\n state.byIds[assetId].asset.opt.media = state.byIds[assetId].asset.opt.media || {}\n state.byIds[assetId].asset.opt.media.folder = folderId\n ? {_ref: folderId, _type: 'reference', _weak: true}\n : undefined\n state.byIds[assetId].updating = false\n }\n })\n },\n folderSetError(state, action: PayloadAction<{assetIds: string[]; error: HttpError}>) {\n const {assetIds, error} = action.payload\n\n assetIds.forEach((assetId) => {\n if (state.byIds[assetId]) {\n state.byIds[assetId].error = error.message\n state.byIds[assetId].updating = false\n }\n })\n },\n folderSetRequest(\n state,\n action: PayloadAction<{\n assets: AssetItem[]\n folderId: string | null\n closeDialogId?: string\n }>,\n ) {\n action.payload.assets.forEach((asset) => {\n const item = state.byIds[asset.asset._id]\n if (item) {\n item.updating = true\n }\n })\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 altText,\n creditLine,\n description,\n extension,\n metadata {\n dimensions,\n exif,\n image,\n isOpaque,\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: Asset}>) {\n //\n },\n listenerCreateQueueComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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: Asset}>) {\n //\n },\n listenerUpdateQueueComplete(state, action: PayloadAction<{assets: Asset[]}>) {\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 const item = state.byIds[assetId]\n if (!item) {\n return\n }\n\n item.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]\n const tagB = state.byIds[b]!.asset[state.order.field]\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: Asset; 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: Asset; 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 updateImageReferences(state, action: PayloadAction<{asset: Asset; id: string}>) {\n const {id: assetId} = action.payload\n const item = state.byIds[assetId]\n if (!item) {\n return\n }\n item.updating = true\n delete item.error\n },\n updateImageReferencesComplete(state, action: PayloadAction<{id: string}>) {\n const {id} = action.payload\n const item = state.byIds[id]\n if (!item) {\n return\n }\n item.updating = false\n delete item.error\n },\n updateRequest(\n state,\n action: PayloadAction<{asset: Asset; closeDialogId?: string; formData: Record<string, any>}>,\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\n// Epics\n\nexport const assetsDeleteEpic: MyEpic = (action$, _state$, {client}) =>\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 return of(assets).pipe(\n mergeMap(() =>\n client.observable.delete({\n query: groq`*[_id in ${JSON.stringify(assetIds)}]`,\n }),\n ),\n mergeMap(() => of(assetsActions.deleteComplete({assetIds}))),\n catchError((error: ClientError) => {\n return of(assetsActions.deleteError({assetIds, error}))\n }),\n )\n }),\n )\n\nexport const assetsFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) => {\n const params = action.payload?.params\n const query = action.payload?.query\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n client.observable.fetch<{\n items: Asset[]\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: MyEpic = (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 currentFolderId: state.folders.currentFolderId,\n excludeTagSlugs: state.assets.excludeTagSlugs,\n searchFacets: state.search.facets,\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: MyEpic = (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: MyEpic = (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\nconst filterAssetWithoutTag = (tag: Tag) => (asset: AssetItem) => {\n const tagIndex = asset?.asset?.opt?.media?.tags?.findIndex((t) => t._ref === tag?._id) ?? -1\n return tagIndex < 0\n}\n\nconst patchOperationTagAppend =\n ({tag}: {tag: Tag}) =>\n (patch: Patch) =>\n patch\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .setIfMissing({'opt.media.tags': []})\n .append('opt.media.tags', [{_key: nanoid(), _ref: tag?._id, _type: 'reference', _weak: true}])\n\nconst patchOperationTagUnset =\n ({asset, tag}: {asset: AssetItem; tag: Tag}) =>\n (patch: Patch) =>\n patch.ifRevisionId(asset?.asset?._rev).unset([`opt.media.tags[_ref == \"${tag._id}\"]`])\n\nconst patchOperationFolderSet =\n ({asset, folderId}: {asset: AssetItem; folderId: string | null}) =>\n (patch: Patch) => {\n const nextPatch = patch.ifRevisionId(asset?.asset?._rev).setIfMissing({opt: {}}).setIfMissing({\n 'opt.media': {},\n })\n\n if (folderId) {\n return nextPatch.set({\n 'opt.media.folder': {_ref: folderId, _type: 'reference', _weak: true},\n })\n }\n\n return nextPatch.unset(['opt.media.folder'])\n }\n\nexport const assetsOrderSetEpic: MyEpic = (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: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n searchActions.facetsAdd.type,\n searchActions.facetsClear.type,\n searchActions.facetsRemoveById.type,\n searchActions.facetsRemoveByName.type,\n searchActions.facetsRemoveByTag.type,\n searchActions.facetsUpdate.type,\n searchActions.facetsUpdateById.type,\n searchActions.querySet.type,\n ),\n debounceTime(400),\n mergeMap(() => {\n return of(\n assetsActions.clear(), //\n assetsActions.loadPageIndex({pageIndex: 0}),\n )\n }),\n )\n\nexport const assetsListenerCreateQueueEpic: MyEpic = (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: MyEpic = (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: MyEpic = (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: MyEpic = (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 assetsTagsAddEpic: MyEpic = (action$, state$, {client}) => {\n return action$.pipe(\n filter(ASSETS_ACTIONS.tagsAddRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Add tag references to all picked assets\n mergeMap(() => {\n const pickedAssets = selectAssetsPicked(state)\n\n // Filter out picked assets which already include tag\n const pickedAssetsFiltered = pickedAssets?.filter(filterAssetWithoutTag(tag))\n\n const transaction: Transaction = pickedAssetsFiltered.reduce(\n (tx, pickedAsset) => tx.patch(pickedAsset?.asset?._id, patchOperationTagAppend({tag})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(ASSETS_ACTIONS.tagsAddComplete({assets, tag}))),\n catchError((error: ClientError) =>\n of(\n ASSETS_ACTIONS.tagsAddError({\n assets,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n}\n\nexport const assetsTagsRemoveEpic: MyEpic = (action$, state$, {client}) => {\n return action$.pipe(\n filter(ASSETS_ACTIONS.tagsRemoveRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, tag} = action.payload\n\n return of(action).pipe(\n // Optionally throttle\n debugThrottle(state.debug.badConnection),\n // Remove tag references from all picked assets\n mergeMap(() => {\n const pickedAssets = selectAssetsPicked(state)\n\n const transaction: Transaction = pickedAssets.reduce(\n (tx, pickedAsset) =>\n tx.patch(pickedAsset?.asset?._id, patchOperationTagUnset({asset: pickedAsset, tag})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n // Dispatch complete action\n mergeMap(() => of(ASSETS_ACTIONS.tagsRemoveComplete({assets, tag}))),\n catchError((error: ClientError) =>\n of(\n ASSETS_ACTIONS.tagsRemoveError({\n assets,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n tag,\n }),\n ),\n ),\n )\n }),\n )\n}\n\nexport const assetsFolderSetEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.folderSetRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {assets, closeDialogId, folderId} = action.payload\n const assetIds = assets.map((asset) => asset.asset._id)\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => {\n const transaction: Transaction = assets.reduce(\n (tx, asset) => tx.patch(asset.asset._id, patchOperationFolderSet({asset, folderId})),\n client.transaction(),\n )\n\n return from(transaction.commit())\n }),\n mergeMap(() =>\n of(\n assetsActions.folderSetComplete({\n assetIds,\n closeDialogId,\n folderId,\n }),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n assetsActions.folderSetError({\n assetIds,\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nexport const assetsFolderSetRefreshEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(assetsActions.folderSetComplete.match),\n mergeMap(() =>\n of(\n assetsActions.pickClear(),\n assetsActions.clear(),\n assetsActions.loadPageIndex({pageIndex: 0}),\n ),\n ),\n )\n\nexport const assetsUnpickEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.orderSet.type,\n assetsActions.viewSet.type,\n searchActions.facetsAdd.type,\n searchActions.facetsClear.type,\n searchActions.facetsRemoveById.type,\n searchActions.facetsRemoveByName.type,\n searchActions.facetsRemoveByTag.type,\n searchActions.facetsUpdate.type,\n searchActions.facetsUpdateById.type,\n searchActions.querySet.type,\n ),\n mergeMap(() => {\n return of(assetsActions.pickClear())\n }),\n )\n\nexport const assetsUpdateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.updateRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {asset, closeDialogId, formData} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n from(\n client\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\nexport const assetsUpdateImageReferencesEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(assetsActions.updateImageReferences.match),\n withLatestFrom(state$),\n // Queue replaces so a later action still runs (exhaustMap would drop it after\n // the reducer already set `updating`, leaving a stuck spinner). Same-asset\n // double-clicks are blocked in the UI when the original is already updating.\n concatMap(([action, state]) => {\n const {asset, id} = action.payload\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.fetch<SanityDocument[]>(groq`*[references($id)]`, {id})),\n mergeMap((documents) => {\n // Patch every referencing document in one transaction so we never leave\n // references split across old/new assets if a later commit would fail.\n let patchedCount = 0\n const transaction: Transaction = documents.reduce((tx, document) => {\n const clonedDocument = JSON.parse(JSON.stringify(document)) as Record<string, unknown>\n const assetsToReplace = findImageAssets(clonedDocument, asset, id)\n if (assetsToReplace.length === 0) {\n return tx\n }\n patchedCount += 1\n const patchSet = Object.assign({}, ...assetsToReplace) as AttributeSet\n return tx.patch(document._id, (patch) =>\n patch.ifRevisionId(document._rev).set(patchSet),\n )\n }, client.transaction())\n\n if (patchedCount === 0) {\n return of(assetsActions.updateImageReferencesComplete({id}))\n }\n\n return from(transaction.commit()).pipe(\n mergeMap(() => of(assetsActions.updateImageReferencesComplete({id}))),\n )\n }),\n catchError((error: ClientError) => {\n // The asset marked as `updating` is the original (being replaced), keyed\n // by `id` — not the replacement `asset` that was clicked. Attach the error\n // to (and clear the spinner on) the original asset.\n const originalAsset = state.assets.byIds[id]?.asset ?? asset\n return of(\n assetsActions.updateError({\n asset: originalAsset,\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 assetsActions = {...assetsSlice.actions}\n\nexport default assetsSlice.reducer\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, Patch} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\nimport {from, of} from 'rxjs'\nimport {\n catchError,\n debounceTime,\n filter,\n map,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators'\n\nimport {FOLDER_DOCUMENT_NAME} from '../../constants'\nimport debugThrottle from '../../operators/debugThrottle'\nimport type {FolderDoc, FolderTreeItem, FolderTreeNode, HttpError, MyEpic} from '../../types'\nimport {buildExcludeTagsFragment} from '../../utils/constructFilter'\nimport {assetsActions} from '../assets'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from '../uploads/actions'\n\ntype FoldersReducerState = {\n byId: Record<string, FolderDoc>\n childrenByParentId: Record<string, string[]>\n rootIds: string[]\n exactCountByFolderId: Record<string, number>\n unfiledCount: number\n currentFolderId: string | null\n currentFolderUnfiled: boolean\n panelVisible: boolean\n fetching: boolean\n fetchCount: number\n fetchingError?: HttpError\n creating: boolean\n creatingError?: HttpError\n deletingId?: string\n deleteError?: HttpError\n renaming: boolean\n renameError?: HttpError\n}\n\nconst initialState: FoldersReducerState = {\n byId: {},\n childrenByParentId: {},\n rootIds: [],\n exactCountByFolderId: {},\n unfiledCount: 0,\n currentFolderId: null,\n currentFolderUnfiled: false,\n panelVisible: false,\n fetching: false,\n fetchCount: -1,\n fetchingError: undefined,\n creating: false,\n creatingError: undefined,\n deletingId: undefined,\n deleteError: undefined,\n renaming: false,\n renameError: undefined,\n}\n\nconst indexFolders = (folders: FolderDoc[]) => {\n const byId: Record<string, FolderDoc> = {}\n const childrenByParentId: Record<string, string[]> = {}\n const rootIds: string[] = []\n\n folders.forEach((folder) => {\n byId[folder._id] = folder\n })\n\n // Resolve parent ids that reference unknown folders to null (defensive — orphan folders surface at root).\n folders.forEach((folder) => {\n const parentKey = folder.parentId && byId[folder.parentId] ? folder.parentId : null\n if (parentKey === null) {\n rootIds.push(folder._id)\n } else {\n if (!childrenByParentId[parentKey]) {\n childrenByParentId[parentKey] = []\n }\n childrenByParentId[parentKey].push(folder._id)\n }\n })\n\n const sortByName = (ids: string[]) =>\n ids.sort((a, b) =>\n (byId[a]?.name || '').localeCompare(byId[b]?.name || '', undefined, {\n numeric: true,\n sensitivity: 'base',\n }),\n )\n\n sortByName(rootIds)\n Object.values(childrenByParentId).forEach((ids) => sortByName(ids))\n\n return {byId, childrenByParentId, rootIds}\n}\n\nconst foldersSlice = createSlice({\n name: 'folders',\n initialState,\n reducers: {\n createComplete(state, _action: PayloadAction<{folder: FolderDoc}>) {\n state.creating = false\n },\n createError(state, action: PayloadAction<{error: HttpError}>) {\n state.creating = false\n state.creatingError = action.payload.error\n },\n createRequest(state, _action: PayloadAction<{name: string; parentId?: string | null}>) {\n state.creating = true\n delete state.creatingError\n },\n currentFolderClear(state) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n },\n currentFolderSet(state, action: PayloadAction<{folderId: string}>) {\n state.currentFolderId = action.payload.folderId\n state.currentFolderUnfiled = false\n },\n currentFolderShowUnfiled(state) {\n state.currentFolderId = null\n state.currentFolderUnfiled = true\n },\n deleteComplete(\n state,\n action: PayloadAction<{\n folderId: string\n deletedIds: string[]\n clearedCurrentFolder?: boolean\n }>,\n ) {\n state.deletingId = undefined\n const removed = new Set(action.payload.deletedIds)\n if (state.currentFolderId && removed.has(state.currentFolderId)) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n }\n },\n deleteError(state, action: PayloadAction<{error: HttpError; folderId: string}>) {\n state.deletingId = undefined\n state.deleteError = action.payload.error\n },\n deleteRequest(state, action: PayloadAction<{folderId: string}>) {\n state.deletingId = action.payload.folderId\n delete state.deleteError\n },\n fetchComplete(\n state,\n action: PayloadAction<{\n folders: FolderDoc[]\n exactCountByFolderId: Record<string, number>\n unfiledCount: number\n clearedCurrentFolder?: boolean\n }>,\n ) {\n const {byId, childrenByParentId, rootIds} = indexFolders(action.payload.folders)\n state.byId = byId\n state.childrenByParentId = childrenByParentId\n state.rootIds = rootIds\n state.exactCountByFolderId = action.payload.exactCountByFolderId\n state.unfiledCount = action.payload.unfiledCount\n state.fetching = false\n state.fetchCount = action.payload.folders.length\n delete state.fetchingError\n\n if (state.currentFolderId && !byId[state.currentFolderId]) {\n state.currentFolderId = null\n state.currentFolderUnfiled = false\n }\n },\n fetchError(state, action: PayloadAction<{error: HttpError}>) {\n state.fetching = false\n state.fetchingError = action.payload.error\n },\n fetchRequest(state) {\n state.fetching = true\n delete state.fetchingError\n },\n panelVisibleSet(state, action: PayloadAction<{panelVisible: boolean}>) {\n state.panelVisible = action.payload.panelVisible\n },\n renameComplete(state, _action: PayloadAction<{folderId: string; name: string}>) {\n state.renaming = false\n },\n renameError(state, action: PayloadAction<{error: HttpError}>) {\n state.renaming = false\n state.renameError = action.payload.error\n },\n renameRequest(state, _action: PayloadAction<{folderId: string; name: string}>) {\n state.renaming = true\n delete state.renameError\n },\n },\n})\n\nexport const foldersFetchEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.fetchRequest.match),\n withLatestFrom(state$),\n switchMap(([action, state]) =>\n of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => {\n const assetTypes = state.assets.assetTypes.map((type) => `sanity.${type}Asset`)\n const excludeTagsFragment = buildExcludeTagsFragment(state.assets.excludeTagSlugs)\n const excludeTagsClause = excludeTagsFragment ? `&& ${excludeTagsFragment}` : ''\n return client.observable.fetch<{\n folders: {_id: string; name?: string; parentId?: string | null; count: number}[]\n unfiledCount: number\n }>(\n groq`{\n \"folders\": *[\n _type == \"${FOLDER_DOCUMENT_NAME}\"\n && !(_id in path(\"drafts.**\"))\n ] {\n _id,\n name,\n \"parentId\": parent._ref,\n \"count\": count(*[\n _type in ${JSON.stringify(assetTypes)}\n && !(_id in path(\"drafts.**\"))\n && opt.media.folder._ref == ^._id\n ${excludeTagsClause}\n ])\n },\n \"unfiledCount\": count(*[\n _type in ${JSON.stringify(assetTypes)}\n && !(_id in path(\"drafts.**\"))\n && !defined(opt.media.folder._ref)\n ${excludeTagsClause}\n ])\n }`,\n )\n }),\n mergeMap((result) => {\n const folders: FolderDoc[] = result.folders.map((f) => ({\n _id: f._id,\n name: f.name || '',\n parentId: f.parentId || null,\n }))\n const exactCountByFolderId: Record<string, number> = {}\n result.folders.forEach(({_id, count}) => {\n exactCountByFolderId[_id] = count\n })\n const folderIds = new Set(folders.map((folder) => folder._id))\n const clearedCurrentFolder = Boolean(\n state.folders.currentFolderId && !folderIds.has(state.folders.currentFolderId),\n )\n return of(\n foldersSlice.actions.fetchComplete({\n folders,\n exactCountByFolderId,\n unfiledCount: result.unfiledCount,\n clearedCurrentFolder,\n }),\n )\n }),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.fetchError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n ),\n ),\n )\n\nexport const foldersRefreshEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(\n (action) =>\n assetsActions.deleteComplete.match(action) ||\n assetsActions.folderSetComplete.match(action) ||\n foldersSlice.actions.createComplete.match(action) ||\n foldersSlice.actions.deleteComplete.match(action) ||\n foldersSlice.actions.renameComplete.match(action) ||\n assetsActions.listenerCreateQueueComplete.match(action) ||\n assetsActions.listenerDeleteQueueComplete.match(action) ||\n assetsActions.listenerUpdateQueueComplete.match(action) ||\n assetsActions.updateComplete.match(action) ||\n UPLOADS_ACTIONS.uploadComplete.match(action),\n ),\n debounceTime(300),\n mergeMap(() => of(foldersSlice.actions.fetchRequest())),\n )\n\nexport const foldersCurrentFolderEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(\n (action) =>\n foldersSlice.actions.currentFolderClear.match(action) ||\n foldersSlice.actions.currentFolderSet.match(action) ||\n foldersSlice.actions.currentFolderShowUnfiled.match(action) ||\n (foldersSlice.actions.deleteComplete.match(action) &&\n Boolean(action.payload.clearedCurrentFolder)) ||\n (foldersSlice.actions.fetchComplete.match(action) &&\n Boolean(action.payload.clearedCurrentFolder)),\n ),\n mergeMap(() =>\n of(\n assetsActions.clear(),\n assetsActions.pickClear(),\n assetsActions.loadPageIndex({pageIndex: 0}),\n ),\n ),\n )\n\nconst patchOperationAssetFolderUnset = (patch: Patch) => patch.unset(['opt.media.folder'])\n\nconst patchOperationFolderParentSet =\n ({parentId}: {parentId: string | null}) =>\n (patch: Patch) => {\n if (parentId) {\n return patch.set({parent: {_ref: parentId, _type: 'reference', _weak: true}})\n }\n\n return patch.unset(['parent'])\n }\n\nexport const foldersCreateEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.createRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const name = action.payload.name.trim()\n const parentId = action.payload.parentId || null\n\n if (!name) {\n return of(\n foldersSlice.actions.createError({\n error: {message: 'Folder name cannot be empty', statusCode: 400},\n }),\n )\n }\n\n const siblingIds = parentId\n ? state.folders.childrenByParentId[parentId] || []\n : state.folders.rootIds\n const collision = siblingIds.some(\n (id) => state.folders.byId[id]?.name.toLowerCase() === name.toLowerCase(),\n )\n if (collision) {\n return of(\n foldersSlice.actions.createError({\n error: {message: 'A folder with this name already exists here', statusCode: 409},\n }),\n )\n }\n\n const newId = `${FOLDER_DOCUMENT_NAME}.${nanoid()}`\n const doc: {\n _id: string\n _type: string\n name: string\n parent?: {_ref: string; _type: 'reference'; _weak: true}\n } = {\n _id: newId,\n _type: FOLDER_DOCUMENT_NAME,\n name,\n }\n if (parentId) {\n doc.parent = {_ref: parentId, _type: 'reference', _weak: true}\n }\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.create(doc)),\n mergeMap(() =>\n of(\n foldersSlice.actions.createComplete({folder: {_id: newId, name, parentId}}),\n foldersSlice.actions.currentFolderSet({folderId: newId}),\n ),\n ),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.createError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nexport const foldersDeleteEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.deleteRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const folderId = action.payload.folderId\n const childFolderIds = state.folders.childrenByParentId[folderId] || []\n const parentId = state.folders.byId[folderId]?.parentId ?? null\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() =>\n client.observable.fetch<{assets: {_id: string}[]}>(\n groq`{\n \"assets\": *[\n _type in ${JSON.stringify(\n state.assets.assetTypes.map((type) => `sanity.${type}Asset`),\n )}\n && !(_id in path(\"drafts.**\"))\n && opt.media.folder._ref == $folderId\n ] {\n _id\n }\n }`,\n {folderId},\n ),\n ),\n mergeMap((result) => {\n const tx = client.transaction()\n // Deleting a folder only removes the folder document. Assets keep living in the\n // library with their folder assignment cleared, and direct child folders are promoted\n // to the deleted folder's parent (or root).\n result.assets.forEach((asset) => tx.patch(asset._id, patchOperationAssetFolderUnset))\n childFolderIds.forEach((childFolderId) =>\n tx.patch(childFolderId, patchOperationFolderParentSet({parentId})),\n )\n tx.delete(folderId)\n\n return from(tx.commit()).pipe(\n map(() =>\n foldersSlice.actions.deleteComplete({\n folderId,\n deletedIds: [folderId],\n clearedCurrentFolder: state.folders.currentFolderId === folderId,\n }),\n ),\n )\n }),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.deleteError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n folderId,\n }),\n ),\n ),\n )\n }),\n )\n\nexport const foldersRenameEpic: MyEpic = (action$, state$, {client}) =>\n action$.pipe(\n filter(foldersSlice.actions.renameRequest.match),\n withLatestFrom(state$),\n mergeMap(([action, state]) => {\n const {folderId} = action.payload\n const name = action.payload.name.trim()\n const folder = state.folders.byId[folderId]\n\n if (!folder) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder not found', statusCode: 404},\n }),\n )\n }\n\n if (!name) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder name cannot be empty', statusCode: 400},\n }),\n )\n }\n\n if (name === folder.name) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'Folder name has not changed', statusCode: 400},\n }),\n )\n }\n\n const siblingIds = folder.parentId\n ? state.folders.childrenByParentId[folder.parentId] || []\n : state.folders.rootIds\n const collision = siblingIds.some(\n (id) =>\n id !== folderId && state.folders.byId[id]?.name.toLowerCase() === name.toLowerCase(),\n )\n if (collision) {\n return of(\n foldersSlice.actions.renameError({\n error: {message: 'A folder with this name already exists here', statusCode: 409},\n }),\n )\n }\n\n return of(action).pipe(\n debugThrottle(state.debug.badConnection),\n mergeMap(() => client.observable.patch(folderId).set({name}).commit()),\n mergeMap(() => of(foldersSlice.actions.renameComplete({folderId, name}))),\n catchError((error: ClientError) =>\n of(\n foldersSlice.actions.renameError({\n error: {\n message: error?.message || 'Internal error',\n statusCode: error?.statusCode || 500,\n },\n }),\n ),\n ),\n )\n }),\n )\n\nconst selectById = (state: RootReducerState) => state.folders.byId\nconst selectChildrenByParentId = (state: RootReducerState) => state.folders.childrenByParentId\nconst selectRootIds = (state: RootReducerState) => state.folders.rootIds\nconst selectExactCountByFolderId = (state: RootReducerState) => state.folders.exactCountByFolderId\nconst selectCurrentFolderId = (state: RootReducerState) => state.folders.currentFolderId\nconst selectCurrentFolderUnfiled = (state: RootReducerState) => state.folders.currentFolderUnfiled\n\nconst buildFolderPath = (folderId: string, byId: Record<string, FolderDoc>): string => {\n const segments: string[] = []\n let cursor: string | null = folderId\n const seen = new Set<string>()\n while (cursor && !seen.has(cursor)) {\n const folder: FolderDoc | undefined = byId[cursor]\n if (!folder) break\n seen.add(cursor)\n segments.unshift(folder.name)\n cursor = folder.parentId\n }\n return segments.join('/')\n}\n\nexport const selectFolderPathById = createSelector(\n [selectById, (_state: RootReducerState, folderId: string | null | undefined) => folderId],\n (byId, folderId) => (folderId ? buildFolderPath(folderId, byId) : ''),\n)\n\nexport const selectFolderTree = createSelector(\n [selectById, selectChildrenByParentId, selectRootIds, selectExactCountByFolderId],\n (byId, childrenByParentId, rootIds, exactCountByFolderId): FolderTreeNode[] => {\n const buildNode = (folderId: string): FolderTreeNode => {\n const folder = byId[folderId]\n const children = (childrenByParentId[folderId] || []).map(buildNode)\n const exactCount = exactCountByFolderId[folderId] || 0\n const totalCount = children.reduce((sum, child) => sum + child.totalCount, exactCount)\n return {\n children,\n exactCount,\n id: folderId,\n name: folder?.name || '',\n parentId: folder?.parentId ?? null,\n path: buildFolderPath(folderId, byId),\n totalCount,\n }\n }\n\n return rootIds.map(buildNode)\n },\n)\n\nexport const selectCurrentFolderSegments = createSelector(\n [selectById, selectCurrentFolderId],\n (byId, currentFolderId): FolderTreeItem[] => {\n if (!currentFolderId) return []\n const chain: string[] = []\n let cursor: string | null = currentFolderId\n const seen = new Set<string>()\n while (cursor && !seen.has(cursor)) {\n const folder: FolderDoc | undefined = byId[cursor]\n if (!folder) break\n seen.add(cursor)\n chain.unshift(cursor)\n cursor = folder.parentId\n }\n return chain.map((id, depth) => ({\n depth,\n exactCount: 0,\n id,\n name: byId[id]?.name || '',\n parentId: byId[id]?.parentId ?? null,\n path: buildFolderPath(id, byId),\n totalCount: 0,\n }))\n },\n)\n\ntype FoldersIndex = {\n byId: Record<string, FolderDoc>\n childrenByParentId: Record<string, string[]>\n rootIds: string[]\n exactCountByFolderId: Record<string, number>\n}\n\nconst selectFoldersIndex = createSelector(\n [selectById, selectChildrenByParentId, selectRootIds, selectExactCountByFolderId],\n (byId, childrenByParentId, rootIds, exactCountByFolderId): FoldersIndex => ({\n byId,\n childrenByParentId,\n rootIds,\n exactCountByFolderId,\n }),\n)\n\nexport const selectCurrentFolderChildren = createSelector(\n [selectFoldersIndex, selectCurrentFolderId, selectCurrentFolderUnfiled],\n (\n {byId, childrenByParentId, rootIds, exactCountByFolderId},\n currentFolderId,\n currentFolderUnfiled,\n ): FolderTreeItem[] => {\n if (currentFolderUnfiled || !currentFolderId) return []\n const ids = currentFolderId ? childrenByParentId[currentFolderId] || [] : rootIds\n const depth = currentFolderId ? buildFolderPath(currentFolderId, byId).split('/').length : 0\n return ids.map((id) => {\n const folder = byId[id]\n // Sum totalCount over the subtree.\n const stack = [id]\n let totalCount = 0\n while (stack.length) {\n const cur = stack.pop()!\n totalCount += exactCountByFolderId[cur] || 0\n const kids = childrenByParentId[cur]\n if (kids) stack.push(...kids)\n }\n return {\n depth,\n exactCount: exactCountByFolderId[id] || 0,\n id,\n name: folder?.name || '',\n parentId: folder?.parentId ?? null,\n path: buildFolderPath(id, byId),\n totalCount,\n }\n })\n },\n)\n\nexport const selectCanDeleteFolder = createSelector(\n [selectCurrentFolderId],\n (currentFolderId) => !!currentFolderId,\n)\n\nexport const foldersActions = {...foldersSlice.actions}\n\nexport default foldersSlice.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, MyEpic, Tag} from '../../types'\nimport {assetsActions} from '../assets'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {foldersActions} from '../folders'\nimport {tagsActions} from '../tags'\nimport {DIALOG_ACTIONS} from './actions'\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 extraReducers: (builder) => {\n builder\n .addCase(DIALOG_ACTIONS.showFolderCreate, (state, action) => {\n const {parentFolderId} = action.payload\n state.items.push({\n parentFolderId,\n id: 'folderCreate',\n type: 'folderCreate',\n })\n })\n .addCase(DIALOG_ACTIONS.showFolderMove, (state, action) => {\n const {assets, folderId} = action.payload\n state.items.push({\n assets,\n folderId,\n id: 'folderMove',\n type: 'folderMove',\n })\n })\n .addCase(DIALOG_ACTIONS.showFolderRename, (state, action) => {\n const {folderId} = action.payload\n state.items.push({\n folderId,\n id: 'folderRename',\n type: 'folderRename',\n })\n })\n .addCase(DIALOG_ACTIONS.showTagCreate, (state) => {\n state.items.push({\n id: 'tagCreate',\n type: 'tagCreate',\n })\n })\n .addCase(DIALOG_ACTIONS.showTagEdit, (state, action) => {\n const {tagId} = action.payload\n state.items.push({\n id: tagId,\n tagId,\n type: 'tagEdit',\n })\n })\n .addCase(foldersActions.createComplete, (state) => {\n state.items = state.items.filter((item) => item.id !== 'folderCreate')\n })\n .addCase(foldersActions.renameComplete, (state) => {\n state.items = state.items.filter((item) => item.id !== 'folderRename')\n })\n },\n reducers: {\n // Clear all dialogs\n clear(state) {\n state.items = []\n },\n // Add newly created inline tag to assetEdit dialog\n inlineTagCreate(state, action: PayloadAction<{assetId: string; tag: Tag}>) {\n const {assetId, tag} = action.payload\n\n state.items.forEach((item) => {\n if (item.type === 'assetEdit' && item.assetId === assetId) {\n item.lastCreatedTag = {\n label: tag.name.current,\n value: tag._id,\n }\n }\n })\n },\n // Remove inline tags from assetEdit dialog\n inlineTagRemove(state, action: PayloadAction<{tagIds: string[]}>) {\n const {tagIds} = action.payload\n\n state.items.forEach((item) => {\n if (item.type === 'assetEdit') {\n item.lastRemovedTagIds = tagIds\n }\n })\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 showConfirmAssetsTagAdd(\n state,\n action: PayloadAction<{\n assetsPicked: AssetItem[]\n closeDialogId?: string\n tag: Tag\n }>,\n ) {\n const {assetsPicked, closeDialogId, tag} = action.payload\n\n const suffix = `${assetsPicked.length} ${pluralize('asset', assetsPicked.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: ASSETS_ACTIONS.tagsAddRequest({\n assets: assetsPicked,\n tag,\n }),\n confirmText: `Yes, add tag to ${suffix}`,\n title: `Add tag ${tag.name.current} to ${suffix}?`,\n id: 'confirm',\n headerTitle: 'Confirm tag addition',\n tone: 'primary',\n type: 'confirm',\n })\n },\n showConfirmAssetsTagRemove(\n state,\n action: PayloadAction<{\n assetsPicked: AssetItem[]\n closeDialogId?: string\n tag: Tag\n }>,\n ) {\n const {assetsPicked, closeDialogId, tag} = action.payload\n\n const suffix = `${assetsPicked.length} ${pluralize('asset', assetsPicked.length)}`\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: ASSETS_ACTIONS.tagsRemoveRequest({assets: assetsPicked, tag}),\n confirmText: `Yes, remove tag from ${suffix}`,\n headerTitle: 'Confirm tag removal',\n id: 'confirm',\n title: `Remove tag ${tag.name.current} from ${suffix}?`,\n tone: 'critical',\n type: 'confirm',\n })\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 showConfirmDeleteFolder(\n state,\n action: PayloadAction<{closeDialogId?: string; folderId: string; folderName: string}>,\n ) {\n const {closeDialogId, folderId, folderName} = action.payload\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: foldersActions.deleteRequest({folderId}),\n confirmText: `Yes, delete folder`,\n description:\n 'This deletes only the selected folder. Assets in this folder will stay in the library and have their folder assignment removed. Nested folders will move up one level.',\n title: `Delete ${folderName}?`,\n id: 'confirm',\n headerTitle: 'Confirm folder deletion',\n tone: 'critical',\n type: 'confirm',\n })\n },\n showConfirmDeleteTag(state, action: PayloadAction<{closeDialogId?: string; tag: Tag}>) {\n const {closeDialogId, tag} = action.payload\n\n const suffix = 'tag'\n\n state.items.push({\n closeDialogId,\n confirmCallbackAction: tagsActions.deleteRequest({tag}),\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 showAllAssetsDialog(state, action: PayloadAction<{assetId: string}>) {\n if (state.items.some((item) => item.type === 'dialogAllAssets')) {\n return\n }\n state.items.push({\n assetId: action.payload.assetId,\n id: 'dialogAllAssets',\n type: 'dialogAllAssets',\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 showSearchFacets(state) {\n state.items.push({\n id: 'searchFacets',\n type: 'searchFacets',\n })\n },\n showFolders(state) {\n state.items.push({\n id: 'folders',\n type: 'folders',\n })\n },\n showTags(state) {\n state.items.push({\n id: 'tags',\n type: 'tags',\n })\n },\n },\n})\n\n// Epics\n\nexport const dialogClearOnAssetUpdateEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.deleteComplete.type,\n assetsActions.folderSetComplete.type,\n assetsActions.updateComplete.type,\n tagsActions.deleteComplete.type,\n tagsActions.updateComplete.type,\n ),\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 dialogTagCreateEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.createComplete.match),\n mergeMap((action) => {\n const {assetId, tag} = action?.payload || {}\n\n if (assetId) {\n return of(dialogSlice.actions.inlineTagCreate({tag, assetId}))\n }\n\n if (tag._id) {\n return of(dialogSlice.actions.remove({id: 'tagCreate'}))\n }\n\n return EMPTY\n }),\n )\n\nexport const dialogTagDeleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.listenerDeleteQueueComplete.match),\n mergeMap((action) => {\n const {tagIds} = action?.payload || {}\n\n return of(dialogSlice.actions.inlineTagRemove({tagIds}))\n }),\n )\n\nexport const dialogActions = {...dialogSlice.actions}\n\nexport default dialogSlice.reducer\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\nconst 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\nexport default GlobalStyle\n","import {type PropsWithChildren, createContext, useContext, useMemo} from 'react'\nimport type {DropzoneOptions} from 'react-dropzone'\n\nimport type {MediaToolOptions, Locale} from '../types'\n\ntype ContextProps = {\n dropzone: Pick<DropzoneOptions, 'maxSize'>\n components: MediaToolOptions['components']\n createTagsOnUpload: boolean\n creditLine: MediaToolOptions['creditLine']\n directUploads: MediaToolOptions['directUploads']\n excludeTagSlugs: string[]\n locales?: Locale[]\n}\n\nconst ToolOptionsContext = createContext<ContextProps | null>(null)\n\ntype Props = {\n options?: MediaToolOptions | void\n}\n\nexport const ToolOptionsProvider = ({options, children}: PropsWithChildren<Props>) => {\n // oxlint-disable-next-line react-compiler\n const value = useMemo<ContextProps>(() => {\n let creditLineExcludeSources\n\n if (options?.creditLine?.excludeSources) {\n creditLineExcludeSources = Array.isArray(options?.creditLine?.excludeSources)\n ? options.creditLine.excludeSources\n : [options?.creditLine?.excludeSources]\n }\n\n return {\n dropzone: {maxSize: options?.maximumUploadSize},\n components: {\n details: options?.components?.details,\n },\n createTagsOnUpload: options?.createTagsOnUpload ?? true,\n creditLine: {\n enabled: options?.creditLine?.enabled || false,\n excludeSources: creditLineExcludeSources,\n },\n directUploads: options?.directUploads ?? true,\n excludeTagSlugs: options?.excludeTags?.length ? [...options.excludeTags] : [],\n locales: options?.locales,\n }\n }, [\n options?.creditLine?.enabled,\n options?.components,\n options?.createTagsOnUpload,\n options?.creditLine?.excludeSources,\n options?.excludeTags,\n options?.maximumUploadSize,\n options?.directUploads,\n options?.locales,\n ])\n\n return <ToolOptionsContext.Provider value={value}>{children}</ToolOptionsContext.Provider>\n}\n\nexport const useToolOptions = () => {\n const context = useContext(ToolOptionsContext)\n\n if (!context) {\n throw new Error('useToolOptions must be used within an ToolOptionsProvider')\n }\n\n return context\n}\n","import * as z from 'zod'\n\n// Helper to generate localized string schema\nfunction localizedStringSchema(locales?: {id: string}[]) {\n if (!locales || locales.length === 0) {\n return z.string().trim().optional()\n }\n const shape: Record<string, z.ZodTypeAny> = {}\n for (const locale of locales) {\n shape[locale.id] = z.string().trim().optional()\n }\n return z.object(shape).passthrough()\n}\n\nexport const tagOptionSchema = z.object({\n label: z.string().trim().min(1, {message: 'Label cannot be empty'}),\n value: z.string().trim().min(1, {message: 'Value cannot be empty'}),\n})\n\nexport function getAssetFormSchema(locales?: {id: string}[]) {\n return z.object({\n altText: localizedStringSchema(locales),\n creditLine: localizedStringSchema(locales),\n description: localizedStringSchema(locales),\n opt: z.object({\n media: z.object({\n tags: z.array(tagOptionSchema).nullable(),\n }),\n }),\n originalFilename: z.string().trim().min(1, {message: 'Filename cannot be empty'}),\n title: localizedStringSchema(locales),\n })\n}\n\nexport const assetFormSchema = getAssetFormSchema()\n\nexport const tagFormSchema = z.object({\n name: z.string().min(1, {message: 'Name cannot be empty'}),\n})\n\nexport const folderFormSchema = z.object({\n name: z.string().trim().min(1, {message: 'Name cannot be empty'}),\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 type {ImageAsset} from '../types'\n\nconst imageDprUrl = (\n asset: ImageAsset,\n options: {\n width: number\n height?: number\n },\n): string => {\n const dpi =\n typeof window === 'undefined' || !window.devicePixelRatio\n ? 1\n : Math.round(window.devicePixelRatio)\n const imgH = options?.height ? options?.height * Math.max(1, dpi) : undefined\n const imgW = options.width * Math.max(1, dpi)\n\n const urlParams = new URLSearchParams()\n urlParams.append('fit', 'max')\n urlParams.append('w', imgW.toString())\n if (imgH) {\n urlParams.append('h', imgH.toString())\n }\n\n return `${asset.url}?${urlParams.toString()}`\n}\n\nexport default imageDprUrl\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fleids\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n return Object.keys(formData).reduce((acc: FormData, key) => {\n const val = formData[key]\n\n // TODO: refactor\n if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n acc[key] = sanitizeFormData(val)\n } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n acc[key] = null\n } else if (typeof val === 'string' && val) {\n acc[key] = formData[key].trim()\n } else {\n acc[key] = formData[key]\n }\n\n return acc\n }, {})\n}\n\nexport default sanitizeFormData\n","import type {Asset, FileAsset, ImageAsset} from '../types'\n\nexport const isFileAsset = (asset: Asset): asset is FileAsset => {\n return (asset as FileAsset)._type === 'sanity.fileAsset'\n}\n\nexport const isImageAsset = (asset: Asset): asset is ImageAsset => {\n return (asset as ImageAsset)._type === 'sanity.imageAsset'\n}\n","import {zodResolver} from '@hookform/resolvers/zod'\nimport type {FieldValues, Resolver} from 'react-hook-form'\n\n/**\n * `@hookform/resolvers/zod` resolves its own `zod` typings through dependency\n * hoisting, which in this monorepo lands on zod v4, while this plugin authors its\n * form schemas with zod v3. The resolver accepts v3 schema instances correctly at\n * runtime, so this thin wrapper only bridges the type-only v3/v4 mismatch. The\n * react-hook-form field types stay fully checked at the call sites.\n */\nexport default function zodFormResolver<TFieldValues extends FieldValues>(\n schema: unknown,\n): Resolver<TFieldValues> {\n return zodResolver(\n schema as Parameters<typeof zodResolver>[0],\n ) as unknown as Resolver<TFieldValues>\n}\n","import type {ImageAsset} from '../types'\n\nconst getAssetResolution = (asset: ImageAsset) => {\n return `${asset.metadata.dimensions.width}x${asset.metadata.dimensions.height}px`\n}\n\nexport default getAssetResolution\n","import {usePortal} from '@sanity/ui'\nimport {type PopoverProps} from '@sanity/ui/popover'\n\nexport function usePortalPopoverProps(): PopoverProps {\n const portal = usePortal()\n\n return {\n animate: true,\n constrainSize: true,\n floatingBoundary: portal.element,\n portal: true,\n referenceBoundary: portal.element,\n }\n}\n","import {ClipboardIcon} from '@sanity/icons/Clipboard'\nimport {Button, Text} from '@sanity/ui'\nimport {Popover} from '@sanity/ui/popover'\nimport copy from 'copy-to-clipboard'\nimport {useEffect, useRef, useState} from 'react'\n\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\n\ntype Props = {\n disabled?: boolean\n url: string\n}\n\nconst ButtonAssetCopy = ({disabled, url}: Props) => {\n const popoverProps = usePortalPopoverProps()\n const refPopoverTimeout = useRef<ReturnType<typeof window.setTimeout>>(null)\n const [popoverVisible, setPopoverVisible] = useState(false)\n\n const handleClick = () => {\n if (refPopoverTimeout.current) {\n clearTimeout(refPopoverTimeout.current)\n }\n\n setPopoverVisible(true)\n copy(url)\n\n refPopoverTimeout.current = setTimeout(() => {\n setPopoverVisible(false)\n }, 1250)\n }\n\n // Effects\n useEffect(() => {\n return () => {\n if (refPopoverTimeout.current) {\n clearTimeout(refPopoverTimeout.current)\n }\n }\n }, [])\n\n return (\n <Popover\n content={\n <Text muted size={1}>\n Copied!\n </Text>\n }\n open={popoverVisible}\n padding={2}\n placement=\"top\"\n radius={1}\n {...popoverProps}\n >\n <Button\n disabled={disabled}\n fontSize={1}\n icon={ClipboardIcon}\n mode=\"ghost\"\n onClick={handleClick}\n text=\"Copy URL\"\n />\n </Popover>\n )\n}\n\nexport default ButtonAssetCopy\n","import {DownloadIcon} from '@sanity/icons/Download'\nimport {Box, Button, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport filesize from 'filesize'\nimport {type ReactNode} from 'react'\n\nimport type {Asset, AssetItem} from '../../types'\nimport getAssetResolution from '../../utils/getAssetResolution'\nimport {isImageAsset} from '../../utils/typeGuards'\nimport ButtonAssetCopy from '../ButtonAssetCopy'\n\ntype Props = {\n asset: Asset\n item?: AssetItem\n}\n\nconst Row = ({label, value}: {label: string; value: ReactNode}) => {\n return (\n <Flex justify=\"space-between\">\n <Text\n size={1}\n style={{\n opacity: 0.8,\n width: '40%',\n }}\n textOverflow=\"ellipsis\"\n >\n {label}\n </Text>\n <Text\n size={1}\n style={{\n opacity: 0.4,\n textAlign: 'right',\n width: '60%',\n }}\n textOverflow=\"ellipsis\"\n >\n {value}\n </Text>\n </Flex>\n )\n}\n\nconst AssetMetadata = (props: Props) => {\n const {asset, item} = props\n\n const exif = asset?.metadata?.exif\n\n // Callbacks\n const handleDownload = () => {\n window.location.href = `${asset.url}?dl=${asset.originalFilename}`\n }\n\n return (\n <Box marginTop={3}>\n {/* Base */}\n <Box>\n <Stack gap={3}>\n <Row label=\"Size\" value={filesize(asset?.size, {base: 10, round: 0})} />\n <Row label=\"MIME type\" value={asset?.mimeType} />\n <Row label=\"Extension\" value={asset?.extension?.toUpperCase()} />\n {isImageAsset(asset) && <Row label=\"Dimensions\" value={getAssetResolution(asset)} />}\n </Stack>\n </Box>\n {/* EXIF */}\n {exif &&\n (exif.DateTimeOriginal ||\n exif.FNumber ||\n exif.FocalLength ||\n exif.ExposureTime ||\n exif.ISO) && (\n <>\n {/* Divider */}\n <Box\n marginY={4}\n style={{\n background: 'var(--card-border-color)',\n height: '1px',\n width: '100%',\n }}\n />\n <Box>\n <Stack gap={3}>\n {exif.ISO && <Row label=\"ISO\" value={exif.ISO} />}\n {exif.FNumber && <Row label=\"Aperture\" value={`ƒ/${exif.FNumber}`} />}\n {exif.FocalLength && <Row label=\"Focal length\" value={`${exif.FocalLength}mm`} />}\n {exif.ExposureTime && (\n <Row label=\"Exposure time\" value={`1/${1 / exif.ExposureTime}`} />\n )}\n {exif.DateTimeOriginal && (\n <Row\n label=\"Original date\"\n value={format(new Date(exif.DateTimeOriginal), 'PPp')}\n />\n )}\n </Stack>\n </Box>\n </>\n )}\n\n {/* Asset actions */}\n <Box marginTop={5}>\n <Inline gap={2}>\n {/* Download */}\n <Button\n disabled={!item || item?.updating}\n fontSize={1}\n icon={DownloadIcon}\n mode=\"ghost\"\n onClick={handleDownload}\n text=\"Download\"\n />\n {/* Copy to clipboard */}\n <ButtonAssetCopy disabled={!item || item?.updating} url={asset.url} />\n </Inline>\n </Box>\n </Box>\n )\n}\n\nexport default AssetMetadata\n","import {Dialog as SanityDialog} from '@sanity/ui'\nimport {type ComponentProps} from 'react'\n\nconst Dialog = (props: ComponentProps<typeof SanityDialog>) => {\n // HACK: Temporarily force fixed positioning on all @sanity/ui <Dialog /> components.\n // The studio is currently setting absolute positioning on all root-level dialogs on the mobile breakpoint,\n // causing unwanted scroll behaviour.\n return <SanityDialog {...props} style={{position: 'fixed'}} />\n}\n\nexport default Dialog\n","import type {SanityDocument} from '@sanity/client'\nimport {Box, Button, Card, Stack, Text} from '@sanity/ui'\nimport {Preview, type SchemaType, useSchema} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\ntype Props = {\n documents: SanityDocument[]\n isLoading: boolean\n}\n\nconst DocumentList = ({documents, isLoading}: Props) => {\n const schema = useSchema()\n\n if (isLoading) {\n return (\n <Text muted size={1}>\n Loading...\n </Text>\n )\n }\n\n if (documents.length === 0) {\n return (\n <Text muted size={1}>\n No documents are referencing this asset\n </Text>\n )\n }\n\n return (\n <Card flex={1} marginBottom={2} padding={2} radius={2} shadow={1}>\n <Stack gap={2}>\n {documents?.map((doc) => (\n <ReferringDocument doc={doc} key={doc._id} schemaType={schema.get(doc._type)} />\n ))}\n </Stack>\n </Card>\n )\n}\n\nconst ReferringDocument = (props: {doc: SanityDocument; schemaType?: SchemaType}) => {\n const {doc, schemaType} = props\n\n const {onClick} = useIntentLink({\n intent: 'edit',\n params: {id: doc._id},\n })\n\n return schemaType ? (\n <Button key={doc._id} mode=\"bleed\" onClick={onClick} padding={2} style={{width: '100%'}}>\n <Preview layout=\"default\" schemaType={schemaType} value={doc} />\n </Button>\n ) : (\n <Box padding={2}>\n <Text size={1}>\n A document of the unknown type <em>{doc._type}</em>\n </Text>\n </Box>\n )\n}\n\nexport default DocumentList\n","import {Box, Flex, type Theme} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {defaultStyles, FileIcon as ReactFileIcon} from 'react-file-icon'\nimport type {DefaultExtensionType} from 'react-file-icon'\nimport {styled, css} from 'styled-components'\n\ntype Props = {\n extension?: string\n onClick?: (e: MouseEvent) => void\n width: string\n}\n\n// Force react-file-icon styles\nconst Container = styled(Box)(({theme}: {theme: Theme}) => {\n return css`\n text {\n font-family: ${theme.sanity.fonts.text.family} !important;\n font-size: 8px !important;\n font-weight: 500 !important;\n }\n `\n})\n\nconst FileIcon = (props: Props) => {\n const {extension, onClick, width} = props\n\n return (\n <Flex align=\"center\" justify=\"center\" onClick={onClick} style={{height: '100%'}}>\n <Container style={{width}}>\n {extension ? (\n <ReactFileIcon\n extension={extension}\n {...defaultStyles[extension as DefaultExtensionType]}\n />\n ) : (\n <ReactFileIcon />\n )}\n </Container>\n </Flex>\n )\n}\n\nexport default FileIcon\n","import {Flex} from '@sanity/ui'\n\nimport type {Asset} from '../../types'\nimport FileIcon from '../FileIcon'\n\ntype Props = {\n asset: Asset\n}\n\nconst FileAssetPreview = (props: Props) => {\n const {asset} = props\n\n if (asset.mimeType.search('audio') === 0) {\n return (\n <Flex align=\"center\" justify=\"center\" style={{height: '100%'}}>\n <audio controls src={asset.url} style={{width: '100%'}} />\n </Flex>\n )\n }\n\n if (asset.mimeType.search('video') === 0) {\n return (\n <video\n controls\n src={asset.url}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n )\n }\n\n return <FileIcon extension={asset.extension} width=\"50%\" />\n}\n\nexport default FileAssetPreview\n","import {Box, Button, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {format} from 'date-fns/format'\nimport {type ReactNode} from 'react'\n\ntype Props = {\n disabled: boolean\n isValid: boolean\n lastUpdated?: string\n onClick: () => void\n}\n\nconst FormSubmitButton = (props: Props) => {\n const {disabled, isValid, lastUpdated, onClick} = props\n\n let content: ReactNode\n if (isValid) {\n if (lastUpdated) {\n content = (\n <>\n Last updated\n <br /> {format(new Date(lastUpdated), 'PPp')}\n </>\n )\n } else {\n content = 'No unpublished changes'\n }\n } else {\n content =\n 'There are validation errors that need to be fixed before this document can be published'\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={3} style={{maxWidth: '185px'}}>\n <Text muted size={1}>\n {content}\n </Text>\n </Box>\n }\n disabled={'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Box>\n <Button\n disabled={disabled}\n fontSize={1}\n onClick={onClick}\n text=\"Save and close\"\n tone=\"primary\"\n />\n </Box>\n </Tooltip>\n )\n}\n\nexport default FormSubmitButton\n","import {hues} from '@sanity/color'\nimport {type ThemeColorSchemeKey, studioTheme} 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 {ThemeColorSchemeKey} from '@sanity/ui'\nimport type {MouseEvent} from 'react'\nimport {styled, css} from 'styled-components'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n onClick?: (e: MouseEvent) => void\n $showCheckerboard?: boolean\n $scheme?: ThemeColorSchemeKey\n src: string\n style?: any\n}\n\nconst Image = styled.img.attrs({crossOrigin: 'anonymous' as const})<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\nexport default Image\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {styled} from 'styled-components'\n\ntype Props = {\n description?: string\n error?: string\n label: string\n name: string\n}\n\nconst StyledErrorOutlineIcon = styled(ErrorOutlineIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst FormFieldInputLabel = (props: Props) => {\n const {description, error, label, name} = props\n\n return (\n <>\n {/* Label */}\n <Box marginY={3}>\n <Inline gap={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <StyledErrorOutlineIcon style={{marginRight: '0.1em'}} />\n {error}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <StyledErrorOutlineIcon />\n </Tooltip>\n </Text>\n )}\n </Inline>\n </Box>\n\n {/* Description */}\n {description && (\n <Box marginY={3}>\n <Text as=\"label\" htmlFor={name} muted size={1}>\n {description}\n </Text>\n </Box>\n )}\n </>\n )\n}\n\nexport default FormFieldInputLabel\n","import {AddIcon} from '@sanity/icons/Add'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Card, Flex, rem, studioTheme, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {components, type StylesConfig} from 'react-select'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\nconst {radius: themeRadius, space: themeSpace} = studioTheme\n\nexport const reactSelectStyles = (scheme: ThemeColorSchemeKey): StylesConfig => {\n return {\n control: (styles, {isFocused}) => {\n let boxShadow = `inset 0 0 0 1px var(--card-border-color)`\n if (isFocused) {\n boxShadow = `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputEnabledBorder')},\n 0 0 0 1px var(--card-bg-color),\n 0 0 0 3px var(--card-focus-ring-color) !important`\n }\n\n return {\n ...styles,\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'inherit',\n 'border': 'none',\n 'borderRadius': themeRadius[1],\n boxShadow,\n 'margin': 0,\n 'minHeight': '35px',\n 'outline': 'none',\n 'padding': rem(themeSpace[1]!),\n 'transition': 'none',\n '&:hover': {\n boxShadow: `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputHoveredBorder')}`,\n },\n }\n },\n indicatorsContainer: (styles, {isDisabled}) => ({\n ...styles,\n opacity: isDisabled ? 0.25 : 1,\n }),\n input: (styles) => ({\n ...styles,\n color: 'var(--card-fg-color)',\n fontFamily: studioTheme.fonts.text.family,\n marginLeft: rem(themeSpace[2]!),\n }),\n menuList: (styles) => ({\n ...styles,\n }),\n multiValue: (styles, {isDisabled}) => ({\n ...styles,\n backgroundColor: getSchemeColor(scheme, 'mutedHoveredBg'),\n borderRadius: themeRadius[2],\n opacity: isDisabled ? 0.5 : 1,\n }),\n multiValueLabel: () => ({\n color: getSchemeColor(scheme, 'mutedHoveredFg'),\n fontSize: 'inherit',\n padding: 0,\n }),\n multiValueRemove: (styles) => ({\n ...styles,\n 'borderTopLeftRadius': 0,\n 'borderBottomLeftRadius': 0,\n 'svg': {color: getSchemeColor(scheme, 'mutedHoveredFg')},\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'mutedSelectedBg'),\n },\n }),\n noOptionsMessage: (styles) => ({\n ...styles,\n fontFamily: studioTheme.fonts.text.family,\n lineHeight: '1em',\n }),\n option: (styles, {isFocused}) => ({\n ...styles,\n 'backgroundColor': isFocused ? getSchemeColor(scheme, 'spotBlue') : 'transparent',\n 'borderRadius': themeRadius[2],\n 'color': isFocused ? getSchemeColor(scheme, 'bg') : 'inherit',\n 'padding': `${rem(themeSpace[1]!)} ${rem(themeSpace[2]!)}`,\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'spotBlue'),\n color: getSchemeColor(scheme, 'bg'),\n },\n }),\n placeholder: (styles) => ({\n ...styles,\n marginLeft: rem(themeSpace[2]!),\n }),\n valueContainer: (styles) => ({\n ...styles,\n margin: 0,\n padding: 0,\n }),\n }\n}\n\nconst DropdownIndicator = (props: any) => {\n return (\n <components.DropdownIndicator {...props}>\n <Box paddingX={2}>\n <Text size={1}>\n <ChevronDownIcon />\n </Text>\n </Box>\n </components.DropdownIndicator>\n )\n}\n\nconst Menu = (props: any) => {\n return (\n <components.Menu {...props}>\n <Card radius={1} shadow={2}>\n {props.children}\n </Card>\n </components.Menu>\n )\n}\n\nconst MenuList = (props: any) => {\n const {children} = props\n\n const MAX_ROWS = 5\n const OPTION_HEIGHT = 37\n\n if (Array.isArray(children)) {\n const height =\n children.length > MAX_ROWS ? OPTION_HEIGHT * MAX_ROWS : children.length * OPTION_HEIGHT\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n itemContent={(index) => {\n const item = children[index]\n return <Option {...item.props} />\n }}\n style={{height}}\n totalCount={children.length}\n />\n )\n }\n return <components.MenuList {...props}>{children}</components.MenuList>\n}\n\nconst MultiValueLabel = (props: any) => {\n return (\n <Box padding={2} paddingRight={1}>\n <Text size={1} weight=\"medium\">\n <components.MultiValueLabel {...props} />\n </Text>\n </Box>\n )\n}\n\nconst MultiValueRemove = (props: any) => {\n return (\n <components.MultiValueRemove {...props}>\n <CloseIcon color=\"#1f2123\" />\n </components.MultiValueRemove>\n )\n}\n\nconst Option = (props: any) => {\n return (\n <Box paddingX={1} paddingY={1}>\n <components.Option {...props}>\n <Flex align=\"center\">\n {props.data.__isNew__ && <AddIcon style={{marginRight: '3px'}} />}\n {props.children}\n </Flex>\n </components.Option>\n </Box>\n )\n}\n\nexport const reactSelectComponents = {\n DropdownIndicator,\n IndicatorSeparator: null,\n Menu,\n MenuList,\n MultiValueLabel,\n MultiValueRemove,\n Option,\n}\n","import {Box} from '@sanity/ui'\nimport {Controller} from 'react-hook-form'\nimport CreatableSelect from 'react-select/creatable'\nimport {useColorSchemeValue} from 'sanity'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {reactSelectComponents, reactSelectStyles} from '../../styled/react-select/creatable'\nimport type {TagSelectOption} from '../../types'\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n control: any\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onCreateTag: (tagName: string) => void\n options: {\n label: string\n value: string\n }[]\n placeholder?: string\n value?: TagSelectOption[] | null\n}\n\nconst FormFieldInputTags = (props: Props) => {\n const {\n control,\n description,\n disabled,\n error,\n label,\n name,\n onCreateTag,\n options,\n placeholder,\n value,\n } = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const creating = useTypedSelector((state) => state.tags.creating)\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n\n return (\n <Box\n // HACK: force stacking context to ensure react-select dropdown sits above other fields\n style={{zIndex: 2}}\n >\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n\n {/* Select */}\n <Controller\n control={control}\n defaultValue={value}\n name={name}\n render={({field}) => {\n const {onBlur, onChange, value: controllerValue} = field\n // TODO: investigate overriding `onChange` and updating form state manually.\n // `opt.media.tags` is initialised with `null` as a defaultValue in react-hook-form\n // Ideally, we'd be able to set `opt.media.tags` as null when all items are cleared, rather than\n // setting it to an empty array (which is currently causing false positives in denoting whether the form is dirty)\n //\n // To illustrate this issue:\n // - Edit an asset with no tags\n // - Add a new tag (either an existing one, or create one inline)\n // - Remove the tag you've just created\n //\n // At this point, the form will still be marked as dirty when it shouldnt be\n return (\n <CreatableSelect\n components={reactSelectComponents}\n instanceId=\"tags\"\n isClearable={false} // TODO: re-enable when we're able to correctly (manually) re-validate on clear\n isDisabled={creating || disabled || tagsFetching}\n isLoading={creating}\n isMulti\n name={name}\n noOptionsMessage={() => 'No tags'}\n onBlur={onBlur}\n onChange={onChange}\n onCreateOption={onCreateTag}\n options={options}\n placeholder={tagsFetching ? 'Loading...' : placeholder}\n styles={reactSelectStyles(scheme)}\n value={controllerValue}\n />\n )\n }}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputTags\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onBlur?: FocusEventHandler<HTMLInputElement>\n onChange?: ChangeEventHandler<HTMLInputElement>\n placeholder?: string\n value?: string\n ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n const {\n description,\n disabled,\n error,\n label,\n name,\n onBlur,\n onChange,\n placeholder,\n value,\n ref,\n ...rest\n } = props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n {/* Input */}\n <TextInput\n {...rest}\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n ref={ref}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputText\n","import {Box, TextArea} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: string\n label: string\n name: string\n onBlur?: FocusEventHandler<HTMLTextAreaElement>\n onChange?: ChangeEventHandler<HTMLTextAreaElement>\n placeholder?: string\n rows?: number\n value?: string\n ref?: Ref<HTMLTextAreaElement>\n}\n\nconst FormFieldInputTextarea = (props: Props) => {\n const {\n description,\n disabled,\n error,\n label,\n name,\n onBlur,\n onChange,\n placeholder,\n rows,\n value,\n ref,\n ...rest\n } = props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n\n {/* Input */}\n <TextArea\n {...rest}\n autoComplete=\"off\"\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n ref={ref}\n rows={rows}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputTextarea\n","import {FolderIcon} from '@sanity/icons/Folder'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Card, Flex, Stack, Tab, TabList, TabPanel, Text} from '@sanity/ui'\nimport {useState} from 'react'\nimport {type Control, type FieldErrors, type UseFormRegister} from 'react-hook-form'\n\nimport type {Asset, AssetFormData, Locale, TagSelectOption} from '../../types'\nimport FormFieldInputLabel from '../FormFieldInputLabel'\nimport FormFieldInputTags from '../FormFieldInputTags'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormFieldInputTextarea from '../FormFieldInputTextarea'\n\ntype LocalizedErrors = Record<string, {message?: string} | undefined>\n\n// When locales are not configured, extract a plain string from a potentially localized field\nfunction toStringField(value: unknown): string | undefined {\n if (typeof value === 'string') return value\n if (typeof value === 'object' && value !== null) {\n const found = Object.values(value as Record<string, string>).find((v) => v)\n return found || undefined\n }\n return undefined\n}\n\nfunction truncateFolderPath(path?: string): string | undefined {\n const segments = path?.split('/').filter(Boolean)\n if (!segments || segments.length <= 3) return path\n return [segments[0], '...', ...segments.slice(-2)].join('/')\n}\n\nexport type DetailsProps = {\n formUpdating: boolean\n handleCreateTag: (title: string) => void\n control: Control<AssetFormData>\n errors: FieldErrors<AssetFormData>\n register: UseFormRegister<AssetFormData>\n allTagOptions: TagSelectOption[]\n assetTagOptions: TagSelectOption[] | null\n currentAsset: Asset\n folderPath?: string\n folderMissing?: boolean\n onChangeFolder: () => void\n onRemoveFolder: () => void\n creditLine?: {\n enabled: boolean\n excludeSources?: string | string[] | undefined\n }\n locales?: Locale[]\n}\n\nexport default function Details({\n formUpdating,\n handleCreateTag,\n control,\n errors,\n register,\n allTagOptions,\n assetTagOptions,\n currentAsset,\n folderPath,\n folderMissing,\n onChangeFolder,\n onRemoveFolder,\n creditLine,\n locales,\n}: DetailsProps) {\n 'use no memo'\n // React Compiler memoizes the register() field JSX using asset-derived deps only.\n // That can leave Save stuck disabled while the DOM still updates (uncontrolled inputs).\n // Tags work because they use Controller; string fields use register and need this opt-out.\n\n const hasLocales = locales && locales.length > 0\n const [activeLocaleTab, setActiveLocaleTab] = useState(0)\n const folderId = currentAsset?.opt?.media?.folder?._ref\n const folderLabel =\n truncateFolderPath(folderPath) || (folderMissing ? 'Folder no longer exists' : 'No folder')\n\n return (\n <Stack gap={3}>\n {/* Tags */}\n <FormFieldInputTags\n control={control}\n disabled={formUpdating}\n error={errors?.opt?.media?.tags?.message}\n label=\"Tags\"\n name=\"opt.media.tags\"\n onCreateTag={handleCreateTag}\n options={allTagOptions}\n placeholder=\"Select or create...\"\n value={assetTagOptions}\n />\n {/* Folder */}\n <Box>\n <FormFieldInputLabel label=\"Folder\" name=\"folder\" />\n <Card border padding={2} radius={2}>\n <Flex align=\"center\" gap={3} justify=\"space-between\">\n <Flex\n align=\"center\"\n gap={2}\n flex={1}\n style={{minWidth: 0, overflowX: 'auto', whiteSpace: 'nowrap', overflowY: 'hidden'}}\n >\n <FolderIcon />\n <Text muted={!folderId} size={1}>\n {folderLabel}\n </Text>\n </Flex>\n {folderId && (\n <Button\n aria-label=\"Remove from folder\"\n disabled={formUpdating}\n fontSize={1}\n icon={TrashIcon}\n mode=\"bleed\"\n onClick={onRemoveFolder}\n padding={2}\n tone=\"critical\"\n type=\"button\"\n />\n )}\n <Button\n padding={2}\n disabled={formUpdating}\n fontSize={1}\n mode=\"ghost\"\n onClick={onChangeFolder}\n text={folderId ? 'Change folder' : 'Add to folder'}\n type=\"button\"\n />\n </Flex>\n </Card>\n </Box>\n {/* Filename */}\n <FormFieldInputText\n {...register('originalFilename')}\n disabled={formUpdating}\n error={errors?.originalFilename?.message}\n label=\"Filename\"\n name=\"originalFilename\"\n value={currentAsset?.originalFilename}\n />\n {/* Localized fields grouped by language */}\n {hasLocales ? (\n <Card marginTop={2} shadow={1} padding={3} radius={1}>\n <Stack gap={2}>\n <TabList gap={2}>\n {locales.map((locale, idx) => (\n <Tab\n key={locale.id}\n id={`locale-tab-${locale.id}`}\n aria-controls={`locale-panel-${locale.id}`}\n selected={activeLocaleTab === idx}\n onClick={() => setActiveLocaleTab(idx)}\n label={locale.title}\n />\n ))}\n </TabList>\n {locales.map((locale, idx) => (\n <TabPanel\n key={locale.id}\n id={`locale-panel-${locale.id}`}\n aria-labelledby={`locale-tab-${locale.id}`}\n hidden={activeLocaleTab !== idx}\n >\n <Stack gap={3}>\n <FormFieldInputText\n {...register(`title.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.title as LocalizedErrors)?.[locale.id]?.message}\n label=\"Title\"\n name={`title.${locale.id}`}\n />\n <FormFieldInputText\n {...register(`altText.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.altText as LocalizedErrors)?.[locale.id]?.message}\n label=\"Alt Text\"\n name={`altText.${locale.id}`}\n />\n <FormFieldInputTextarea\n {...register(`description.${locale.id}` as const)}\n disabled={formUpdating}\n error={(errors?.description as LocalizedErrors)?.[locale.id]?.message}\n label=\"Description\"\n name={`description.${locale.id}`}\n rows={5}\n />\n {creditLine?.enabled && (\n <FormFieldInputText\n {...register(`creditLine.${locale.id}` as const)}\n error={(errors?.creditLine as LocalizedErrors)?.[locale.id]?.message}\n label=\"Credit\"\n name={`creditLine.${locale.id}`}\n disabled={\n formUpdating ||\n creditLine?.excludeSources?.includes(currentAsset?.['source']?.name)\n }\n />\n )}\n </Stack>\n </TabPanel>\n ))}\n </Stack>\n </Card>\n ) : (\n <>\n <FormFieldInputText\n {...register('title')}\n disabled={formUpdating}\n error={errors?.title?.message}\n label=\"Title\"\n name=\"title\"\n value={toStringField(currentAsset?.title)}\n />\n <FormFieldInputText\n {...register('altText')}\n disabled={formUpdating}\n error={errors?.altText?.message}\n label=\"Alt Text\"\n name=\"altText\"\n value={toStringField(currentAsset?.altText)}\n />\n <FormFieldInputTextarea\n {...register('description')}\n disabled={formUpdating}\n error={errors?.description?.message}\n label=\"Description\"\n name=\"description\"\n rows={5}\n />\n {creditLine?.enabled && (\n <FormFieldInputText\n {...register('creditLine')}\n error={errors?.creditLine?.message}\n label=\"Credit\"\n name=\"creditLine\"\n value={toStringField(currentAsset?.creditLine)}\n disabled={\n formUpdating || creditLine?.excludeSources?.includes(currentAsset?.['source']?.name)\n }\n />\n )}\n </>\n )}\n </Stack>\n )\n}\n","import type {MutationEvent} from '@sanity/client'\nimport {Box, Button, Card, Flex, Stack, Tab, TabList, TabPanel, Text} from '@sanity/ui'\nimport groq from 'groq'\nimport {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SubmitHandler, useForm, useFormState} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\nimport {WithReferringDocuments, useColorSchemeValue, useDocumentStore} from 'sanity'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {getAssetFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {assetsActions, selectAssetById} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {selectFolderPathById} from '../../modules/folders'\nimport {selectTags, selectTagSelectOptions, tagsActions} from '../../modules/tags'\nimport type {Asset, AssetFormData, DialogAssetEditProps, TagSelectOption} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport {getUniqueDocuments} from '../../utils/getUniqueDocuments'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport AssetMetadata from '../AssetMetadata'\nimport Dialog from '../Dialog'\nimport DocumentList from '../DocumentList'\nimport FileAssetPreview from '../FileAssetPreview'\nimport FormSubmitButton from '../FormSubmitButton'\nimport Image from '../Image'\nimport Details, {type DetailsProps} from './Details'\n\nfunction renderDefaultDetails(props: DetailsProps) {\n return <Details {...props} />\n}\n\ntype Props = {\n children: ReactNode\n dialog: DialogAssetEditProps\n}\n\nconst DialogAssetEdit = (props: Props) => {\n const {\n children,\n dialog: {assetId, id, lastCreatedTag, lastRemovedTagIds},\n } = props\n\n const client = useVersionedClient()\n const scheme = useColorSchemeValue()\n\n const documentStore = useDocumentStore()\n\n const dispatch = useDispatch()\n const assetItem = useTypedSelector((state) => selectAssetById(state, String(assetId))) // TODO: check casting\n const tags = useTypedSelector(selectTags)\n\n const assetUpdatedPrev = useRef<string | undefined>(undefined)\n\n // Generate a snapshot of the current asset\n const [assetSnapshot, setAssetSnapshot] = useState(assetItem?.asset)\n const [tabSection, setTabSection] = useState<'details' | 'references'>('details')\n\n const currentAsset = assetItem ? assetItem?.asset : assetSnapshot\n const allTagOptions = getTagSelectOptions(tags)\n\n const assetTagOptions = useTypedSelector(selectTagSelectOptions(currentAsset))\n const currentFolderId = currentAsset?.opt?.media?.folder?._ref ?? null\n const currentFolderPath = useTypedSelector((state) =>\n selectFolderPathById(state, currentFolderId),\n )\n\n // Check if credit line options are configured\n const {creditLine, components: {details: CustomDetails} = {}, locales} = useToolOptions()\n\n const generateDefaultValues = useCallback(\n (asset?: Asset): AssetFormData => {\n let imageDescription: string | undefined\n if (asset && isImageAsset(asset)) {\n const raw = asset.metadata?.image?.['ImageDescription']\n if (typeof raw === 'string') {\n imageDescription = raw\n }\n }\n\n if (locales && locales.length > 0) {\n const makeLocaleObj = (field?: Record<string, string> | string, fallback = '') => {\n const obj: Record<string, string> = {}\n for (let i = 0; i < locales.length; i++) {\n const locale = locales[i]!\n // Prefer key presence over truthiness so an intentional empty string\n // (e.g. `{en: ''}`) is preserved and does not fall through to EXIF.\n if (typeof field === 'object' && field && locale.id in field) {\n obj[locale.id] = field[locale.id] ?? ''\n } else if (typeof field === 'string') {\n // Only populate the first locale to avoid spreading a legacy value\n // across all languages; the user should fill in other translations manually\n obj[locale.id] = i === 0 ? field : ''\n } else if (typeof field === 'object' && field) {\n // Localized object present but this locale key is missing: leave empty.\n // Do not apply EXIF fallback to partial translations.\n obj[locale.id] = ''\n } else {\n // No description set at all — EXIF fallback only for the first locale.\n obj[locale.id] = i === 0 ? fallback : ''\n }\n }\n return obj\n }\n return {\n altText: makeLocaleObj(asset?.altText),\n creditLine: makeLocaleObj(asset?.creditLine),\n description: makeLocaleObj(asset?.description, imageDescription),\n originalFilename: asset?.originalFilename || '',\n opt: {media: {tags: assetTagOptions}},\n title: makeLocaleObj(asset?.title),\n }\n }\n // Normalize: if a field is a localized object but locales are disabled, pick first non-empty value\n const flattenField = (field: unknown, fallback = ''): string => {\n if (typeof field === 'string') return field\n if (typeof field === 'object' && field !== null) {\n const values = Object.values(field as Record<string, string>)\n return values.find((v) => v) || fallback\n }\n return fallback\n }\n return {\n altText: flattenField(asset?.altText),\n creditLine: flattenField(asset?.creditLine),\n description: flattenField(asset?.description, imageDescription),\n originalFilename: asset?.originalFilename || '',\n opt: {media: {tags: assetTagOptions}},\n title: flattenField(asset?.title),\n }\n },\n [assetTagOptions, locales],\n )\n\n const {control, getValues, handleSubmit, register, reset, setValue} = useForm<AssetFormData>({\n defaultValues: generateDefaultValues(assetItem?.asset),\n mode: 'onChange',\n resolver: zodFormResolver<AssetFormData>(getAssetFormSchema(locales)),\n })\n\n // Subscribe via useFormState so React Compiler cannot skip formState Proxy reads\n // that gate the Save button (isDirty / isValid).\n const {errors, isDirty, isValid} = useFormState({control})\n\n const formUpdating = !assetItem || assetItem?.updating\n\n const handleClose = useCallback(() => {\n dispatch(dialogActions.remove({id}))\n }, [dispatch, id])\n\n const handleDelete = useCallback(() => {\n if (!assetItem?.asset) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteAssets({\n assets: [assetItem],\n closeDialogId: assetItem?.asset._id,\n }),\n )\n }, [assetItem, dispatch])\n\n const handleAssetUpdate = useCallback((update: MutationEvent) => {\n const {result, transition} = update\n if (result && transition === 'update') {\n // Regenerate asset snapshot\n setAssetSnapshot(result as Asset)\n }\n }, [])\n\n const handleCreateTag = useCallback(\n (tagName: string) => {\n // Dispatch action to create new tag\n dispatch(\n tagsActions.createRequest({\n assetId: currentAsset?._id,\n name: tagName,\n }),\n )\n },\n [currentAsset?._id, dispatch],\n )\n\n const handleChangeFolder = useCallback(() => {\n if (!assetItem) {\n return\n }\n\n dispatch(DIALOG_ACTIONS.showFolderMove({assets: [assetItem], folderId: currentFolderId}))\n }, [assetItem, currentFolderId, dispatch])\n\n const handleRemoveFolder = useCallback(() => {\n if (!assetItem || !currentFolderId) {\n return\n }\n\n dispatch(assetsActions.folderSetRequest({assets: [assetItem], folderId: null}))\n }, [assetItem, currentFolderId, dispatch])\n\n // Detect if asset has localized fields (objects) with keys not in the configured locales\n const hasOrphanedLocales = useMemo(() => {\n if (!currentAsset) return false\n const isLocaleObj = (v: unknown) => typeof v === 'object' && v !== null && !Array.isArray(v)\n const fields = [\n currentAsset.title,\n currentAsset.altText,\n currentAsset.description,\n ...(currentAsset._type === 'sanity.imageAsset' ? [currentAsset.creditLine] : []),\n ]\n const anyLocalized = fields.some((f) => isLocaleObj(f))\n if (!anyLocalized) return false\n if (!locales || locales.length === 0) return true\n const configuredIds = new Set(locales.map((l) => l.id))\n return fields.some((f) => {\n if (!isLocaleObj(f)) return false\n return Object.keys(f as object).some((k) => !configuredIds.has(k))\n })\n }, [currentAsset, locales])\n\n const handleCleanupLocales = useCallback(async () => {\n if (!currentAsset) return\n\n const cleanField = (field: unknown): unknown => {\n if (typeof field !== 'object' || field === null || Array.isArray(field)) return field\n const obj = field as Record<string, string>\n if (!locales || locales.length === 0) {\n // Pick the first non-empty value sorted by key for determinism\n const sorted = Object.keys(obj).sort()\n return sorted.map((k) => obj[k]).find((v) => v) || ''\n }\n const configuredIds = new Set(locales.map((l) => l.id))\n const cleaned: Record<string, string> = {}\n for (const [key, val] of Object.entries(obj)) {\n if (configuredIds.has(key)) cleaned[key] = val\n }\n return cleaned\n }\n\n await client\n .patch(currentAsset._id)\n .set({\n title: cleanField(currentAsset.title),\n altText: cleanField(currentAsset.altText),\n description: cleanField(currentAsset.description),\n ...(currentAsset._type === 'sanity.imageAsset' && {\n creditLine: cleanField(currentAsset.creditLine),\n }),\n })\n .commit()\n }, [client, currentAsset, locales])\n\n // Submit react-hook-form\n const onSubmit: SubmitHandler<AssetFormData> = useCallback(\n (formData) => {\n if (!assetItem?.asset) {\n return\n }\n\n const sanitizedFormData = sanitizeFormData(formData)\n\n // Keep an intentionally cleared description as '' (not null) so the EXIF\n // ImageDescription fallback does not refill it the next time the dialog opens.\n if (formData.description === '') {\n sanitizedFormData['description'] = ''\n }\n\n dispatch(\n assetsActions.updateRequest({\n asset: assetItem?.asset,\n closeDialogId: assetItem?.asset._id,\n formData: {\n ...sanitizedFormData,\n // Map tags to sanity references\n opt: {\n media: {\n ...sanitizedFormData['opt'].media,\n tags:\n sanitizedFormData['opt'].media.tags?.map((tag: TagSelectOption) => ({\n _ref: tag.value,\n _type: 'reference',\n _weak: true,\n })) || null,\n },\n },\n },\n }),\n )\n },\n [assetItem?.asset, dispatch],\n )\n\n // Listen for asset mutations and update snapshot\n useEffect(() => {\n if (!assetItem?.asset) {\n return undefined\n }\n\n // Remember that Sanity listeners ignore joins, order clauses and projections\n const subscriptionAsset = client\n .listen(groq`*[_id == $id]`, {id: assetItem?.asset._id})\n .subscribe(handleAssetUpdate)\n\n return () => {\n subscriptionAsset?.unsubscribe()\n }\n }, [assetItem?.asset, client, handleAssetUpdate])\n\n // Update tags form field (react-select) when a new _inline_ tag has been created\n useEffect(() => {\n if (lastCreatedTag) {\n const existingTags = (getValues('opt.media.tags') as TagSelectOption[]) || []\n const updatedTags = existingTags.concat([lastCreatedTag])\n setValue('opt.media.tags', updatedTags, {shouldDirty: true})\n }\n }, [getValues, lastCreatedTag, setValue])\n\n // Update tags form field (react-select) when an _inline_ tag has been removed elsewhere\n useEffect(() => {\n if (lastRemovedTagIds) {\n const existingTags = (getValues('opt.media.tags') as TagSelectOption[]) || []\n const updatedTags = existingTags.filter((tag) => {\n return !lastRemovedTagIds.includes(tag.value)\n })\n\n setValue('opt.media.tags', updatedTags, {shouldDirty: true})\n }\n }, [getValues, lastRemovedTagIds, setValue])\n\n // Reset react-hook-form local state on mount and every time the asset has been updated elsewhere\n useEffect(() => {\n if (assetUpdatedPrev.current !== assetItem?.asset._updatedAt) {\n reset(generateDefaultValues(assetItem?.asset))\n }\n assetUpdatedPrev.current = assetItem?.asset._updatedAt\n }, [assetItem?.asset, generateDefaultValues, reset])\n\n const footer = (\n <Box padding={3}>\n <Stack gap={3}>\n {hasOrphanedLocales && (\n <Card padding={3} radius={2} shadow={1} tone=\"caution\">\n <Flex align=\"center\" justify=\"space-between\" gap={3}>\n <Text size={1}>\n This asset has localized fields that are no longer configured. Clean them up to\n avoid validation errors.\n </Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleCleanupLocales}\n text=\"Cleanup localized fields\"\n tone=\"caution\"\n />\n </Flex>\n </Card>\n )}\n <Flex justify=\"space-between\">\n {/* Delete button */}\n <Button\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid || hasOrphanedLocales}\n isValid={isValid}\n lastUpdated={currentAsset?._updatedAt}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Stack>\n </Box>\n )\n\n if (!currentAsset) {\n return null\n }\n\n const detailsProps = {\n control,\n errors,\n formUpdating,\n register,\n setValue,\n assetTagOptions,\n allTagOptions,\n handleCreateTag,\n currentAsset,\n folderPath: currentFolderPath,\n folderMissing: !!currentFolderId && !currentFolderPath,\n onChangeFolder: handleChangeFolder,\n onRemoveFolder: handleRemoveFolder,\n creditLine,\n locales,\n }\n\n return (\n <Dialog animate footer={footer} header=\"Asset details\" id={id} onClose={handleClose} width={3}>\n {/*\n We reverse direction to ensure the download button doesn't appear (in the DOM) before other tabbable items.\n This ensures that the dialog doesn't scroll down to the download button (which on smaller screens, can sometimes\n be below the fold).\n */}\n <Flex direction={['column-reverse', 'column-reverse', 'row-reverse']}>\n <Box flex={1} marginTop={[5, 5, 0]} padding={4}>\n <WithReferringDocuments documentStore={documentStore} id={currentAsset._id}>\n {({isLoading, referringDocuments}) => {\n const uniqueReferringDocuments = getUniqueDocuments(referringDocuments)\n return (\n <>\n {/* Tabs */}\n <TabList gap={2}>\n <Tab\n aria-controls=\"details-panel\"\n disabled={formUpdating}\n id=\"details-tab\"\n label=\"Details\"\n onClick={() => setTabSection('details')}\n selected={tabSection === 'details'}\n size={2}\n />\n <Tab\n aria-controls=\"references-panel\"\n disabled={formUpdating}\n id=\"references-tab\"\n label={`References${\n !isLoading && Array.isArray(uniqueReferringDocuments)\n ? ` (${uniqueReferringDocuments.length})`\n : ''\n }`}\n onClick={() => setTabSection('references')}\n selected={tabSection === 'references'}\n size={2}\n />\n </TabList>\n\n {/* Form fields */}\n <Box as=\"form\" marginTop={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Deleted notification */}\n {!assetItem && (\n <Card marginBottom={3} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>This file cannot be found – it may have been deleted.</Text>\n </Card>\n )}\n\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Panel: details */}\n <TabPanel\n aria-labelledby=\"details\"\n hidden={tabSection !== 'details'}\n id=\"details-panel\"\n >\n {CustomDetails ? (\n <CustomDetails\n {...detailsProps}\n renderDefaultDetails={renderDefaultDetails}\n />\n ) : (\n <Details {...detailsProps} />\n )}\n </TabPanel>\n\n {/* Panel: References */}\n <TabPanel\n aria-labelledby=\"references\"\n hidden={tabSection !== 'references'}\n id=\"references-panel\"\n >\n <Box marginTop={5}>\n {assetItem?.asset && (\n <DocumentList\n documents={uniqueReferringDocuments}\n isLoading={isLoading}\n />\n )}\n </Box>\n </TabPanel>\n </Box>\n </>\n )\n }}\n </WithReferringDocuments>\n </Box>\n\n <Box flex={1} padding={4}>\n <Box style={{aspectRatio: '1'}}>\n {/* File */}\n {isFileAsset(currentAsset) && <FileAssetPreview asset={currentAsset} />}\n\n {/* Image */}\n {isImageAsset(currentAsset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!currentAsset?.metadata?.isOpaque}\n src={imageDprUrl(currentAsset, {height: 600, width: 600})}\n />\n )}\n </Box>\n\n {/* Metadata */}\n {currentAsset && (\n <Box marginTop={4}>\n <AssetMetadata asset={currentAsset} item={assetItem} />\n </Box>\n )}\n </Box>\n </Flex>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogAssetEdit\n","import {createSelector} from '@reduxjs/toolkit'\n\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../types'\nimport {selectCurrentFolderChildren} from './folders'\nimport type {RootReducerState} from './types'\n\nexport const selectCombinedItems = createSelector(\n [\n (state: RootReducerState) => state.assets.allIds,\n (state: RootReducerState) => state.uploads.allIds,\n selectCurrentFolderChildren,\n ],\n (assetIds, uploadIds, folderChildren) => {\n const assetItems = assetIds.map((id): CardAssetData => ({id, type: 'asset'}))\n const folderItems = folderChildren.map(\n (folder): CardFolderData => ({\n id: `folder:${folder.id}`,\n folderId: folder.id,\n name: folder.name,\n path: folder.path,\n totalCount: folder.totalCount,\n type: 'folder',\n }),\n )\n const uploadItems = uploadIds.map((id): CardUploadData => ({id, type: 'upload'}))\n const combinedItems: (CardAssetData | CardFolderData | CardUploadData)[] = [\n ...folderItems,\n ...uploadItems,\n ...assetItems,\n ]\n return combinedItems\n },\n)\n","import {isHotkey} from 'is-hotkey-esm'\nimport {type RefObject, useCallback, useEffect, useRef} from 'react'\n\nconst 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\nexport default useKeyPress\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {WarningFilledIcon} from '@sanity/icons/WarningFilled'\nimport {\n Box,\n Checkbox,\n Container,\n Flex,\n Spinner,\n Text,\n type Theme,\n type ThemeColorSchemeKey,\n} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {memo, type MouseEvent, type RefObject} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetById, selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\n id: string\n selected: boolean\n source?: 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\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: ${\n $picked ? `1px solid ${theme.sanity.color.spot.orange} !important` : '1px solid inherit'\n };\n\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})\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 StyledWarningOutlineIcon = styled(WarningFilledIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst CardAsset = (props: Props) => {\n const {id, selected, source} = props\n\n const scheme = useColorSchemeValue()\n const toast = useToast()\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 assetsPicked = useTypedSelector(selectAssetsPicked)\n const item = useTypedSelector((state) => selectAssetById(state, id))\n // Dialog carries the replace target so search refetch (which clears allIds/picks) is safe.\n const dialogReplaceAssetId = useTypedSelector((state) => {\n if (source !== 'replace-asset') {\n return undefined\n }\n const dialog = state.dialog.items.find((d) => d.type === 'dialogAllAssets')\n return dialog?.type === 'dialogAllAssets' ? dialog.assetId : undefined\n })\n\n const asset = item?.asset\n const error = item?.error\n const isOpaque = item?.asset?.metadata?.isOpaque\n const picked = item?.picked\n const updating = item?.updating\n\n // Prefer dialog assetId; fall back to the single currently-picked asset (not lastPicked).\n const assetToReplaceId =\n dialogReplaceAssetId ??\n (source === 'replace-asset' && assetsPicked.length === 1\n ? assetsPicked[0]?.asset._id\n : undefined)\n\n const assetToReplace = useTypedSelector((state) =>\n assetToReplaceId ? selectAssetById(state, assetToReplaceId) : undefined,\n )\n\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n // Short circuit if no asset is available\n if (!asset) {\n return null\n }\n\n const handleReplaceAsset = () => {\n if (!assetToReplaceId || !isImageAsset(asset) || assetToReplace?.updating) {\n return\n }\n\n dispatch(assetsActions.updateImageReferences({asset, id: assetToReplaceId}))\n toast.push({\n status: 'info',\n title:\n 'Updating in progress. Depending on the amount of changes, this could take a few minutes.',\n })\n dispatch(dialogActions.clear())\n }\n\n // Callbacks\n const handleAssetClick = (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (source === 'replace-asset') {\n handleReplaceAsset()\n return\n }\n\n if (selected) {\n return\n }\n\n if (onSelect && !isMultiSelect) {\n onSelect([\n {\n kind: 'assetDocumentId',\n value: asset._id,\n },\n ])\n } else if (onSelect && isMultiSelect) {\n 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 } 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 (source === 'replace-asset') {\n handleReplaceAsset()\n return\n }\n\n if (selected) {\n return\n }\n\n if (onSelect && !isMultiSelect) {\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\n data-testid={`media-asset-card-${asset._id}`}\n onClick={handleAssetClick}\n style={{height: '100%', opacity: opacityPreview}}\n >\n {/* File icon */}\n {isFileAsset(asset) && <FileIcon extension={asset.extension} width=\"80px\" />}\n\n {/* Image */}\n {isImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!isOpaque}\n src={imageDprUrl(asset, {height: 250, width: 250})}\n style={{\n draggable: false,\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 && !isMultiSelect ? (\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 {/* TODO: DRY */}\n {/* Error button */}\n {error && (\n <Box\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 <StyledWarningOutlineIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </CardContainer>\n </CardWrapper>\n )\n}\n\nexport default memo(CardAsset)\n","import {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {foldersActions} from '../../modules/folders'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n folderId: string\n name: string\n totalCount: number\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 FolderCard = styled(Card)`\n cursor: pointer;\n height: 100%;\n transition: border-color 200ms ease;\n width: 100%;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border-color: var(--card-border-color);\n }\n }\n`\n\nconst FolderGlyph = styled(Box)(\n ({theme}) => css`\n align-items: flex-end;\n background: linear-gradient(\n 180deg,\n ${theme.sanity.color.spot.yellow} 0%,\n ${theme.sanity.color.spot.yellow} 100%\n );\n border-radius: 8px;\n display: flex;\n height: 72px;\n position: relative;\n width: 96px;\n\n &::before {\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 8px 8px 0 0;\n content: '';\n height: 18px;\n left: 0;\n position: absolute;\n top: -8px;\n width: 38px;\n }\n `,\n)\n\nconst CardFolder = ({folderId, name, totalCount}: Props) => {\n const dispatch = useDispatch()\n const scheme = useColorSchemeValue()\n\n return (\n <CardWrapper padding={1}>\n <FolderCard\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId}))}\n padding={3}\n radius={2}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n border: '1px solid transparent',\n }}\n >\n <Flex direction=\"column\" height=\"fill\" justify=\"space-between\">\n <Flex align=\"center\" flex={1} justify=\"center\">\n <FolderGlyph />\n </Flex>\n\n <Stack gap={2}>\n <Text\n size={1}\n style={{lineHeight: '1.35em', minHeight: '2.7em', wordBreak: 'break-word'}}\n weight=\"semibold\"\n >\n {name}\n </Text>\n <Text muted size={0} style={{lineHeight: '1.2em'}}>\n {totalCount} item{totalCount === 1 ? '' : 's'}\n </Text>\n </Stack>\n </Flex>\n </FolderCard>\n </CardWrapper>\n )\n}\n\nexport default CardFolder\n","import {Observable, from, 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 {Subject, Subscription, Observable, from} from 'rxjs'\n// Takes a observable-returning function and returns a new function that limits on the number of\n// concurrent observables.\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\nexport const createThrottler = (concurrency: number = DEFAULT_CONCURRENCY) => {\n const currentSubscriptions: Array<Subscription> = []\n const pendingObservables: Array<Observable<any>> = []\n const ready$ = new Subject()\n\n function request(observable: Observable<any>): Observable<any> {\n return new Observable((observer) => {\n if (currentSubscriptions.length >= concurrency) {\n return scheduleAndWait$(observable)\n .pipe(mergeMap(request)) //\n .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 ready$.next(pendingObservables.shift())\n }\n }\n })\n }\n\n function scheduleAndWait$(observable: Observable<any>): Observable<any> {\n pendingObservables.push(observable)\n return ready$.asObservable().pipe(first((obs) => obs === observable))\n }\n\n return request\n}\n\nexport const withMaxConcurrency = (\n func: (...args: any[]) => Observable<any>,\n concurrency: number = DEFAULT_CONCURRENCY,\n) => {\n const throttler = createThrottler(concurrency)\n return (...args: Array<any>) => from(throttler(func(...args)))\n}\n","// Sourced from:\n// https://github.com/sanity-io/sanity/blob/ccb777e115a8cdf20d81a9a2bc9d8c228568faff/packages/%40sanity/form-builder/src/sanity/inputs/client-adapters/assets.ts\n\nimport type {SanityAssetDocument, SanityClient, SanityImageAssetDocument} from '@sanity/client'\nimport {Observable, of, throwError} from 'rxjs'\nimport {map, mergeMap} from 'rxjs/operators'\n\nimport type {HttpError} from '../types'\nimport {withMaxConcurrency} from './withMaxConcurrency'\n\nconst fetchExisting$ = (client: SanityClient, type: string, hash: string) => {\n return client.observable.fetch('*[_type == $documentType && sha1hash == $hash][0]', {\n documentType: type,\n hash,\n })\n}\n\nconst readFile$ = (file: File): Observable<ArrayBuffer> => {\n return new Observable((subscriber) => {\n const reader = new FileReader()\n reader.onload = () => {\n subscriber.next(reader.result as ArrayBuffer)\n subscriber.complete()\n }\n reader.onerror = (err) => {\n subscriber.error(err)\n }\n reader.readAsArrayBuffer(file)\n return () => {\n reader.abort()\n }\n })\n}\n\nconst hexFromBuffer = (buffer: ArrayBuffer): string => {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (x) => `00${x.toString(16)}`.slice(-2))\n .join('')\n}\n\nexport const hashFile$ = (file: File): Observable<string> => {\n if (!window.crypto || !window.crypto.subtle || !window.FileReader) {\n return throwError({\n message: 'Unable to generate hash: uploads are only allowed in secure contexts',\n statusCode: 500,\n })\n }\n return readFile$(file).pipe(\n mergeMap((arrayBuffer) => window.crypto.subtle.digest('SHA-1', arrayBuffer)),\n map(hexFromBuffer),\n )\n}\n\nconst uploadSanityAsset$ = (\n client: SanityClient,\n assetType: 'file' | 'image',\n file: File,\n hash: string,\n) => {\n return of(null).pipe(\n // NOTE: the sanity api will still dedupe unique files, but this saves us from uploading the asset file entirely\n mergeMap(() => fetchExisting$(client, `sanity.${assetType}Asset`, hash)),\n // Cancel if the asset already exists\n mergeMap((existingAsset: SanityAssetDocument | SanityImageAssetDocument | null) => {\n if (existingAsset) {\n return throwError({\n message: 'Asset already exists',\n statusCode: 409,\n } satisfies HttpError)\n }\n\n return of(null)\n }),\n mergeMap(() => {\n // Begin upload if no existing asset found\n return client.observable.assets\n .upload(assetType, file, {\n extract: ['blurhash', 'exif', 'image', 'location', 'lqip', 'palette'],\n preserveFilename: true,\n })\n .pipe(\n map((event) =>\n event.type === 'response'\n ? {\n // rewrite to a 'complete' event\n asset: event.body.document,\n id: event.body.document._id,\n type: 'complete',\n }\n : event,\n ),\n )\n }),\n )\n}\n\nexport const uploadAsset$ = withMaxConcurrency(uploadSanityAsset$)\n","import {createSelector, createSlice, type PayloadAction} from '@reduxjs/toolkit'\nimport type {ClientError, SanityAssetDocument, SanityImageAssetDocument} from '@sanity/client'\nimport groq from 'groq'\nimport {empty, from, merge, of} from 'rxjs'\nimport {catchError, delay, filter, mergeMap, takeUntil, withLatestFrom} from 'rxjs/operators'\n\nimport type {HttpError, MyEpic, SanityUploadProgressEvent, UploadItem} from '../../types'\nimport constructFilter from '../../utils/constructFilter'\nimport {generatePreviewBlobUrl$} from '../../utils/generatePreviewBlobUrl'\nimport {hashFile$, uploadAsset$} from '../../utils/uploadSanityAsset'\nimport {assetsActions} from '../assets'\nimport type {RootReducerState} from '../types'\nimport {UPLOADS_ACTIONS} from './actions'\n\nexport type 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(\n _state,\n _action: PayloadAction<{assets: (SanityAssetDocument | SanityImageAssetDocument)[]}>,\n ) {\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 uploadRequest(\n _state,\n _action: PayloadAction<{file: File; forceAsAssetType?: 'file' | 'image'}>,\n ) {\n //\n },\n uploadProgress(\n state,\n action: PayloadAction<{event: SanityUploadProgressEvent; uploadHash: string}>,\n ) {\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 if (!state.allIds.includes(uploadItem.hash)) {\n state.allIds.push(uploadItem.hash)\n }\n state.byIds[uploadItem.hash] = uploadItem\n },\n },\n})\n\n// Epics\n\nexport const uploadsAssetStartEpic: MyEpic = (action$, _state$, {client}) =>\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(() => uploadAsset$(client, uploadItem.assetType, file, uploadItem.hash)),\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 const folderId = uploadItem.folderId || null\n\n if (!folderId) {\n return of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: event.asset,\n }),\n )\n }\n\n return from(\n client\n .patch(event.asset._id)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .set({\n 'opt.media.folder': {_ref: folderId, _type: 'reference', _weak: true},\n })\n .commit(),\n ).pipe(\n mergeMap((asset) =>\n of(\n UPLOADS_ACTIONS.uploadComplete({\n asset: asset as SanityAssetDocument | SanityImageAssetDocument,\n }),\n ),\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: MyEpic = (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 = forceAsAssetType || (file.type.indexOf('image') >= 0 ? 'image' : 'file')\n const uploadItem = {\n _type: 'upload',\n assetType,\n folderId: state.folders.currentFolderId,\n hash,\n name: file.name,\n size: file.size,\n status: 'queued',\n } as UploadItem\n return of(uploadsActions.uploadStart({file, uploadItem}))\n }),\n )\n }),\n )\n\nexport const uploadsCompleteQueueEpic: MyEpic = (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: MyEpic = (action$, state$, {client}) =>\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 currentFolderId: state.folders.currentFolderId,\n excludeTagSlugs: state.assets.excludeTagSlugs,\n searchFacets: state.search.facets,\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(() => client.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\n// Selectors\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 uploadsActions = {...uploadsSlice.actions}\n\nexport default uploadsSlice.reducer\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport filesize from 'filesize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectUploadById, uploadsActions} from '../../modules/uploads'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\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\nconst CardUpload = (props: 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 === '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 === '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\nexport default CardUpload\n","import {memo} from 'react'\nimport {VirtuosoGrid} from 'react-virtuoso'\nimport {styled} from 'styled-components'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../../types'\nimport CardAsset from '../CardAsset'\nimport CardFolder from '../CardFolder'\nimport CardUpload from '../CardUpload'\n\ntype Props = {\n items: (CardAssetData | CardFolderData | CardUploadData)[]\n onLoadMore?: () => void\n source?: string\n}\n\nconst CARD_HEIGHT = 220\nconst CARD_WIDTH = 240\n\nconst VirtualCell = memo(\n ({\n item,\n selected,\n source,\n }: {\n item: CardAssetData | CardFolderData | CardUploadData\n selected: boolean\n source?: string\n }) => {\n if (item?.type === 'asset') {\n return <CardAsset id={item.id} selected={selected} source={source} />\n }\n\n if (item?.type === 'folder') {\n return <CardFolder folderId={item.folderId} name={item.name} totalCount={item.totalCount} />\n }\n\n if (item?.type === 'upload') {\n return <CardUpload id={item.id} />\n }\n\n return null\n },\n)\n\nconst StyledItemContainer = styled.div`\n height: ${CARD_HEIGHT}px;\n width: ${CARD_WIDTH}px;\n`\n\nconst ItemContainer = (props: any) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- we're doing this to avoid sc warnings about `context` passed as an attribute\n const {context, ref, ...rest} = props\n return <StyledItemContainer ref={ref} {...rest} />\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\nconst ListContainer = (props: any) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- we're doing this to avoid sc warnings about `context` passed as an attribute\n const {context, ref, ...rest} = props\n return <StyledListContainer ref={ref} {...rest} />\n}\n\nconst AssetGridVirtualized = (props: Props) => {\n const {items, onLoadMore, source} = 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 return item?.id ?? index\n }}\n components={{\n Item: ItemContainer,\n List: ListContainer,\n }}\n endReached={onLoadMore}\n itemContent={(index) => {\n const item = items[index]!\n const selected = selectedIds.includes(item.id)\n return <VirtualCell item={item} selected={selected} source={source} />\n }}\n overscan={48}\n style={{overflowX: 'hidden', overflowY: 'scroll'}}\n totalCount={totalCount}\n />\n )\n}\n\nexport default AssetGridVirtualized\n","import {Box, Text} from '@sanity/ui'\nimport {useEffect, useRef, useState} from 'react'\nimport {useDispatch, useStore} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {searchActions} from '../../modules/search'\nimport {selectCombinedItems} from '../../modules/selectors'\nimport type {RootReducerState} from '../../modules/types'\nimport type {SearchFacetInputProps, WithId} from '../../types'\nimport {isImageAsset} from '../../utils/typeGuards'\nimport AssetGridVirtualized from '../AssetGridVirtualized'\n\nfunction omitFacetId(facet: WithId<SearchFacetInputProps>): SearchFacetInputProps {\n // Strip the runtime `id` so facetsAdd can assign a fresh one on restore.\n const {id: _id, ...withoutId} = facet\n void _id\n return withoutId\n}\n\nconst ReplaceAssetsOverview = () => {\n const dispatch = useDispatch()\n const store = useStore<RootReducerState>()\n const combinedItems = useTypedSelector(selectCombinedItems)\n const assetsById = useTypedSelector((state) => state.assets.byIds)\n const fetchCount = useTypedSelector((state) => state.assets.fetchCount)\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const fetchingError = useTypedSelector((state) => state.assets.fetchingError)\n const pageSize = useTypedSelector((state) => state.assets.pageSize)\n const searchQuery = useTypedSelector((state) => state.search.query)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const currentFolderUnfiled = useTypedSelector((state) => state.folders.currentFolderUnfiled)\n\n // Prefer the dialog's assetId — search refetch clears `allIds` / can drop picks.\n const assetToReplaceId = useTypedSelector((state) => {\n const dialog = state.dialog.items.find((item) => item.type === 'dialogAllAssets')\n return dialog?.type === 'dialogAllAssets' ? dialog.assetId : undefined\n })\n\n const savedBrowserStateRef = useRef<{\n assetId: string | undefined\n query: string\n facets: WithId<SearchFacetInputProps>[]\n folderId: string | null\n folderUnfiled: boolean\n } | null>(null)\n\n // Clearing the search only triggers a refetch after `assetsSearchEpic`'s debounce, so the\n // stale results stay in the store for a moment. Track that gap to avoid rendering the\n // empty state before the unscoped results arrive.\n const [awaitingRefetch, setAwaitingRefetch] = useState(\n () =>\n searchQuery.length > 0 ||\n searchFacets.length > 0 ||\n Boolean(currentFolderId) ||\n currentFolderUnfiled,\n )\n\n // Clear the browser search, facets and folder scope so the picker is not limited to the\n // result set the user used to find the asset. Restore them when the dialog closes.\n useEffect(() => {\n const {dialog, folders, search} = store.getState()\n const {query, facets} = search\n const dialogItem = dialog.items.find((item) => item.type === 'dialogAllAssets')\n\n savedBrowserStateRef.current = {\n assetId: dialogItem?.type === 'dialogAllAssets' ? dialogItem.assetId : undefined,\n query,\n facets,\n folderId: folders.currentFolderId,\n folderUnfiled: folders.currentFolderUnfiled,\n }\n\n if (query.length > 0) {\n dispatch(searchActions.querySet({searchQuery: ''}))\n }\n if (facets.length > 0) {\n dispatch(searchActions.facetsClear())\n }\n if (folders.currentFolderId || folders.currentFolderUnfiled) {\n dispatch(foldersActions.currentFolderClear())\n }\n\n return () => {\n const saved = savedBrowserStateRef.current\n if (!saved) {\n return\n }\n\n const hadScope =\n saved.query.length > 0 ||\n saved.facets.length > 0 ||\n Boolean(saved.folderId) ||\n saved.folderUnfiled\n\n if (saved.query.length > 0) {\n dispatch(searchActions.querySet({searchQuery: saved.query}))\n }\n for (const facet of saved.facets) {\n dispatch(searchActions.facetsAdd({facet: omitFacetId(facet)}))\n }\n if (saved.folderId) {\n dispatch(foldersActions.currentFolderSet({folderId: saved.folderId}))\n } else if (saved.folderUnfiled) {\n dispatch(foldersActions.currentFolderShowUnfiled())\n }\n\n // Changing the search or folder runs epics that clear picks — put the asset being\n // replaced back so closing the dialog keeps the browser selection.\n if (hadScope && saved.assetId) {\n dispatch(assetsActions.pick({assetId: saved.assetId, picked: true}))\n }\n }\n }, [dispatch, store])\n\n // Every rescoped refetch is preceded by `assetsActions.clear()`, so wait for the asset\n // list to be emptied and the following fetch to settle. Watching `fetching` alone is not\n // enough: `assetsFetchEpic` uses `switchMap`, so replacing an in-flight request leaves\n // `fetching` true throughout. Clearing a folder scope and a search at the same time\n // produces two refetches (the folder one immediately, the search one after its debounce),\n // so each list clear re-arms the wait rather than resolving it for good.\n useEffect(() => {\n let previousIds = store.getState().assets.allIds\n let awaitingSettle = false\n\n return store.subscribe(() => {\n const {allIds, fetching: isFetching} = store.getState().assets\n const listCleared = allIds !== previousIds && allIds.length === 0\n previousIds = allIds\n\n if (listCleared) {\n awaitingSettle = true\n setAwaitingRefetch(true)\n return\n }\n if (awaitingSettle && !isFetching) {\n awaitingSettle = false\n setAwaitingRefetch(false)\n }\n })\n }, [store])\n\n const scopeActive =\n searchQuery.length > 0 ||\n searchFacets.length > 0 ||\n Boolean(currentFolderId) ||\n currentFolderUnfiled\n\n // Only image assets can replace image refs; exclude uploads and the asset being replaced.\n const reducedItems = combinedItems.filter((item) => {\n if (item.type !== 'asset' || item.id === assetToReplaceId) {\n return false\n }\n const asset = assetsById[item.id]?.asset\n return asset ? isImageAsset(asset) : false\n })\n\n const hasFetchedOnce = fetchCount >= 0\n const hasMorePages = fetchCount === pageSize\n // Don't treat a scoped / stale / mid-fetch / incomplete page as \"no replacements\".\n const isEmpty =\n reducedItems.length === 0 &&\n hasFetchedOnce &&\n !fetching &&\n !scopeActive &&\n !awaitingRefetch &&\n !hasMorePages\n\n // Keep loading pages until we find image candidates or exhaust results. A failed fetch\n // leaves `fetchCount` untouched, so stop paging on error instead of retrying forever.\n useEffect(() => {\n if (\n scopeActive ||\n fetching ||\n awaitingRefetch ||\n fetchingError ||\n reducedItems.length > 0 ||\n !hasFetchedOnce ||\n !hasMorePages\n ) {\n return\n }\n dispatch(assetsActions.loadNextPage())\n }, [\n dispatch,\n scopeActive,\n fetching,\n awaitingRefetch,\n fetchingError,\n reducedItems.length,\n hasFetchedOnce,\n hasMorePages,\n ])\n\n const handleLoadMoreItems = () => {\n if (!fetching) {\n dispatch(assetsActions.loadNextPage())\n }\n }\n\n return (\n <Box height=\"fill\">\n {isEmpty ? (\n <Box padding={5}>\n <Text size={1} weight=\"semibold\">\n There are no replacement images\n </Text>\n </Box>\n ) : (\n <Box height=\"fill\">\n <AssetGridVirtualized\n items={reducedItems}\n onLoadMore={handleLoadMoreItems}\n source=\"replace-asset\"\n />\n </Box>\n )}\n </Box>\n )\n}\n\nexport default ReplaceAssetsOverview\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogAllAssetsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport ReplaceAssetsOverview from '../ReplaceAssetsOverView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogAllAssetsProps\n}\n\nconst DialogAllAssets = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog header=\"Choose a replacement image\" id={id} onClose={handleClose} width={3}>\n <Box padding={4} style={{height: '50vh'}}>\n <ReplaceAssetsOverview />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogAllAssets\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Button, Flex, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogConfirmProps} from '../../types'\nimport Dialog from '../Dialog'\n\ntype Props = {\n children?: ReactNode\n dialog: DialogConfirmProps\n}\n\nconst DialogConfirm = (props: Props) => {\n const {children, dialog} = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = () => {\n dispatch(dialogActions.remove({id: dialog?.id}))\n }\n\n const handleConfirm = () => {\n // Close target dialog, if provided\n if (dialog?.closeDialogId) {\n dispatch(dialogActions.remove({id: dialog?.closeDialogId}))\n }\n\n if (dialog?.confirmCallbackAction) {\n dispatch(dialog.confirmCallbackAction)\n }\n\n // Close self\n handleClose()\n }\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"space-between\">\n <Button fontSize={1} mode=\"bleed\" onClick={handleClose} text=\"Cancel\" />\n <Button\n fontSize={1}\n onClick={handleConfirm}\n text={dialog?.confirmText}\n tone={dialog?.tone}\n />\n </Flex>\n </Box>\n )\n\n const Header = () => (\n <Flex align=\"center\">\n <Box paddingX={1}>\n <WarningOutlineIcon />\n </Box>\n <Box marginLeft={2}>{dialog?.headerTitle}</Box>\n </Flex>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n // oxlint-disable-next-line react/react-compiler\n header={<Header />}\n id=\"confirm\"\n onClose={handleClose}\n width={1}\n >\n <Box paddingX={4} paddingY={4}>\n <Stack gap={3}>\n {dialog?.title && <Text size={1}>{dialog.title}</Text>}\n {dialog?.description && (\n <Text muted size={1}>\n <em>{dialog.description}</em>\n </Text>\n )}\n </Stack>\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogConfirm\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {folderFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions, selectFolderPathById} from '../../modules/folders'\nimport type {DialogFolderCreateProps, FolderFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderCreateProps\n}\n\nconst DialogFolderCreate = (props: Props) => {\n const {\n children,\n dialog: {parentFolderId, id},\n } = props\n\n const dispatch = useDispatch()\n const creating = useTypedSelector((state) => state.folders.creating)\n const creatingError = useTypedSelector((state) => state.folders.creatingError)\n const parentPath = useTypedSelector((state) => selectFolderPathById(state, parentFolderId))\n\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<FolderFormData>({\n defaultValues: {\n name: '',\n },\n mode: 'onChange',\n resolver: zodFormResolver<FolderFormData>(folderFormSchema),\n })\n\n const handleClose = () => {\n dispatch(dialogActions.clear())\n }\n\n const onSubmit: SubmitHandler<FolderFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n foldersActions.createRequest({\n name: sanitizedFormData['name'],\n parentId: parentFolderId || null,\n }),\n )\n }\n\n useEffect(() => {\n if (creatingError) {\n setError('name', {message: creatingError.message})\n }\n }, [creatingError, setError])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n <FormSubmitButton\n disabled={creating || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Create Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {parentPath && (\n <Box marginBottom={3}>\n <Text muted size={1}>\n Creating inside {parentPath}\n </Text>\n </Box>\n )}\n\n <FormFieldInputText\n {...register('name')}\n disabled={creating}\n error={errors?.name?.message}\n label=\"Folder name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderCreate\n","import {Box, Button, Flex, Inline, Stack, Text, Tree, TreeItem} from '@sanity/ui'\nimport pluralize from 'pluralize'\nimport {type ReactNode, useMemo, useState} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {selectFolderTree} from '../../modules/folders'\nimport type {DialogFolderMoveProps, FolderTreeNode} from '../../types'\nimport Dialog from '../Dialog'\n\nconst getExpandedIdSet = (\n folderId: string | null,\n byId: Record<string, {parentId: string | null}>,\n) => {\n const expanded = new Set<string>()\n let cursor: string | null = folderId\n while (cursor) {\n const node = byId[cursor]\n if (!node) break\n expanded.add(cursor)\n cursor = node.parentId\n }\n return expanded\n}\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderMoveProps\n}\n\ntype FolderNodeProps = {\n expandedIds: Set<string>\n node: FolderTreeNode\n onSelect: (folderId: string) => void\n selectedId: string | null\n}\n\nconst FolderNode = ({expandedIds, node, onSelect, selectedId}: FolderNodeProps) => {\n const hasChildren = node.children.length > 0\n const selected = selectedId === node.id\n\n return (\n <TreeItem\n expanded={expandedIds.has(node.id)}\n id={node.id}\n onClick={() => onSelect(node.id)}\n selected={selected}\n text={`${node.name} (${node.totalCount})`}\n weight={selected ? 'semibold' : 'medium'}\n >\n {hasChildren &&\n node.children.map((childNode) => (\n <FolderNode\n expandedIds={expandedIds}\n key={childNode.id}\n node={childNode}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </TreeItem>\n )\n}\n\ntype FolderTreeProps = {\n expandedIds: Set<string>\n folderTree: FolderTreeNode[]\n onSelect: (folderId: string) => void\n selectedId: string | null\n}\n\nconst FolderTree = ({expandedIds, folderTree, onSelect, selectedId}: FolderTreeProps) => (\n <Tree gap={1}>\n {folderTree.map((node) => (\n <FolderNode\n expandedIds={expandedIds}\n key={node.id}\n node={node}\n onSelect={onSelect}\n selectedId={selectedId}\n />\n ))}\n </Tree>\n)\n\nconst DialogFolderMove = ({children, dialog}: Props) => {\n const dispatch = useDispatch()\n const folderTree = useTypedSelector(selectFolderTree)\n const byId = useTypedSelector((state) => state.folders.byId)\n const {assets, folderId, id} = dialog\n const [selectedId, setSelectedId] = useState<string | null>(folderId || null)\n const selectedFolder = selectedId ? byId[selectedId] : null\n const expandedIds = useMemo(() => getExpandedIdSet(folderId || null, byId), [byId, folderId])\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n const handleMove = () => {\n if (!selectedId) {\n return\n }\n\n dispatch(\n assetsActions.folderSetRequest({\n assets,\n closeDialogId: id,\n folderId: selectedId,\n }),\n )\n }\n\n return (\n <Dialog\n animate\n footer={\n <Box padding={3}>\n <Flex justify=\"flex-end\" gap={2}>\n <Button mode=\"ghost\" onClick={handleClose} text=\"Cancel\" />\n <Button\n disabled={!selectedId}\n mode=\"default\"\n onClick={handleMove}\n text={`Move ${assets.length} ${pluralize('asset', assets.length)}`}\n tone=\"primary\"\n />\n </Flex>\n </Box>\n }\n header=\"Move to Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Stack gap={4} padding={4}>\n <Text size={1}>\n Move {assets.length} {pluralize('asset', assets.length)} to a folder.\n </Text>\n\n <Box style={{maxHeight: '22rem', overflowY: 'auto'}} paddingY={2}>\n <FolderTree\n expandedIds={expandedIds}\n folderTree={folderTree}\n onSelect={setSelectedId}\n selectedId={selectedId}\n />\n\n {folderTree.length === 0 && (\n <Box marginTop={3}>\n <Text muted size={1}>\n No folders yet.\n </Text>\n </Box>\n )}\n </Box>\n\n {selectedFolder && (\n <Inline gap={2}>\n <Text muted size={1}>\n Destination:\n </Text>\n <Text size={1} weight=\"semibold\">\n {selectedFolder.name}\n </Text>\n </Inline>\n )}\n </Stack>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderMove\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {folderFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions, selectFolderPathById} from '../../modules/folders'\nimport type {DialogFolderRenameProps, FolderFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFolderRenameProps\n}\n\nconst DialogFolderRename = ({children, dialog}: Props) => {\n const {folderId, id} = dialog\n const dispatch = useDispatch()\n const renaming = useTypedSelector((state) => state.folders.renaming)\n const renameError = useTypedSelector((state) => state.folders.renameError)\n const folder = useTypedSelector((state) => state.folders.byId[folderId])\n const folderPath = useTypedSelector((state) => selectFolderPathById(state, folderId))\n const currentName = folder?.name || ''\n const parentPath = folderPath.includes('/')\n ? folderPath.slice(0, folderPath.lastIndexOf('/'))\n : null\n\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<FolderFormData>({\n defaultValues: {\n name: currentName,\n },\n mode: 'onChange',\n resolver: zodFormResolver<FolderFormData>(folderFormSchema),\n })\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n const onSubmit: SubmitHandler<FolderFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n foldersActions.renameRequest({\n name: sanitizedFormData['name'],\n folderId,\n }),\n )\n }\n\n useEffect(() => {\n if (renameError) {\n setError('name', {message: renameError.message})\n }\n }, [renameError, setError])\n\n return (\n <Dialog\n animate\n footer={\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n <FormSubmitButton\n disabled={renaming || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n }\n header=\"Rename Folder\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n <Box marginBottom={3}>\n <Text muted size={1}>\n {parentPath ? `Renaming inside ${parentPath}` : 'Renaming at root'}\n </Text>\n </Box>\n\n <FormFieldInputText\n {...register('name')}\n disabled={renaming}\n error={errors?.name?.message}\n label=\"Folder name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolderRename\n","import {AddIcon} from '@sanity/icons/Add'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {FolderIcon} from '@sanity/icons/Folder'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Container, Flex, Inline, Label, Text, Tree, TreeItem} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {type ReactNode, useMemo} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {foldersActions, selectCanDeleteFolder, selectFolderTree} from '../../modules/folders'\nimport type {FolderTreeNode} from '../../types'\n\nconst getExpandedIdSet = (\n folderId: string | null,\n byId: Record<string, {parentId: string | null}>,\n) => {\n const expanded = new Set<string>()\n let cursor: string | null = folderId\n while (cursor) {\n const node = byId[cursor]\n if (!node) break\n expanded.add(cursor)\n cursor = node.parentId\n }\n return expanded\n}\n\ntype FolderNodeProps = {\n currentFolderId: string | null\n expandedIds: Set<string>\n node: FolderTreeNode\n onSelect: (folderId: string) => void\n}\n\ntype FolderHeaderActionProps = {\n disabled?: boolean\n icon: ReactNode\n onClick: () => void\n tone?: 'critical' | 'default' | 'primary'\n tooltip: string\n}\n\nconst FolderHeaderAction = ({\n disabled = false,\n icon,\n onClick,\n tone = 'default',\n tooltip,\n}: FolderHeaderActionProps) => (\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text muted size={1}>\n {tooltip}\n </Text>\n </Container>\n }\n disabled={typeof window !== 'undefined' && 'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Button\n aria-label={tooltip}\n disabled={disabled}\n fontSize={1}\n icon={icon}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n tone={tone}\n />\n </Tooltip>\n)\n\ntype FolderItemTextProps = {\n name: string\n totalCount: number\n}\n\n/**\n * this uses some hacky css to get the desired layout\n * The tree item is a text container, so we need to use a span to wrap the content\n */\nconst FolderItemText = ({name, totalCount}: FolderItemTextProps) => (\n <span\n style={{\n boxSizing: 'border-box',\n display: 'block',\n maxWidth: '100%',\n minWidth: 0,\n overflow: 'hidden',\n paddingRight: '2rem',\n position: 'relative',\n width: '100%',\n }}\n >\n <span\n style={{\n alignItems: 'center',\n display: 'flex',\n paddingLeft: '0.25rem',\n gap: '0.5rem',\n minWidth: 0,\n overflow: 'hidden',\n }}\n >\n <span style={{display: 'inline-flex', flexShrink: 0, lineHeight: 0}}>\n <FolderIcon />\n </span>\n <span\n style={{\n display: 'block',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {name}\n </span>\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n opacity: 0.78,\n position: 'absolute',\n right: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n {totalCount}\n </span>\n </span>\n)\n\nconst FolderNode = ({currentFolderId, expandedIds, node, onSelect}: FolderNodeProps) => {\n const hasChildren = node.children.length > 0\n const selected = currentFolderId === node.id\n\n return (\n <TreeItem\n expanded={expandedIds.has(node.id)}\n id={node.id}\n onClick={() => onSelect(node.id)}\n selected={selected}\n text={<FolderItemText name={node.name} totalCount={node.totalCount} />}\n weight={selected ? 'semibold' : 'medium'}\n >\n {hasChildren &&\n node.children.map((childNode) => (\n <FolderNode\n currentFolderId={currentFolderId}\n expandedIds={expandedIds}\n key={childNode.id}\n node={childNode}\n onSelect={onSelect}\n />\n ))}\n </TreeItem>\n )\n}\n\nconst FolderView = () => {\n const dispatch = useDispatch()\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const byId = useTypedSelector((state) => state.folders.byId)\n const canDeleteFolder = useTypedSelector(selectCanDeleteFolder)\n const fetching = useTypedSelector((state) => state.folders.fetching)\n const folderTree = useTypedSelector(selectFolderTree)\n const currentFolder = currentFolderId ? byId[currentFolderId] : null\n const expandedIds = useMemo(\n () => getExpandedIdSet(currentFolderId, byId),\n [byId, currentFolderId],\n )\n const treeKey = useMemo(() => Array.from(expandedIds).join('|') || 'root', [expandedIds])\n\n const hasFolders = folderTree.length > 0\n\n const handleFolderSelect = (folderId: string) => {\n dispatch(foldersActions.currentFolderSet({folderId}))\n }\n\n const handleFolderDelete = () => {\n if (!currentFolderId || !currentFolder) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteFolder({\n folderId: currentFolderId,\n folderName: currentFolder.name,\n }),\n )\n }\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingX={3}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n flexShrink: 0,\n height: `${PANEL_HEIGHT}px`,\n }}\n >\n <Box flex={1}>\n <Inline gap={2}>\n <Label size={0}>Folders</Label>\n {fetching && (\n <Label size={0} style={{opacity: 0.3}}>\n Loading...\n </Label>\n )}\n </Inline>\n </Box>\n\n <Inline gap={1}>\n {currentFolderId && (\n <FolderHeaderAction\n icon={<EditIcon />}\n onClick={() => dispatch(DIALOG_ACTIONS.showFolderRename({folderId: currentFolderId}))}\n tone=\"primary\"\n tooltip=\"Rename folder\"\n />\n )}\n\n <FolderHeaderAction\n icon={<AddIcon />}\n onClick={() =>\n dispatch(DIALOG_ACTIONS.showFolderCreate({parentFolderId: currentFolderId || null}))\n }\n tone=\"primary\"\n tooltip=\"Create folder\"\n />\n\n {currentFolderId && canDeleteFolder && (\n <FolderHeaderAction\n icon={<TrashIcon />}\n onClick={handleFolderDelete}\n tone=\"critical\"\n tooltip=\"Delete folder\"\n />\n )}\n </Inline>\n </Flex>\n\n <Box padding={2}>\n <Box>\n <Tree gap={1} key={treeKey}>\n <TreeItem\n id=\"__all-assets\"\n onClick={() => dispatch(foldersActions.currentFolderClear())}\n selected={currentFolderId === null}\n text=\"All assets\"\n weight={currentFolderId === null ? 'semibold' : 'medium'}\n />\n\n {folderTree.map((node) => (\n <FolderNode\n currentFolderId={currentFolderId}\n expandedIds={expandedIds}\n key={node.id}\n node={node}\n onSelect={handleFolderSelect}\n />\n ))}\n </Tree>\n\n {!hasFolders && !fetching && (\n <Box marginTop={3} paddingX={1}>\n <Text muted size={1}>\n <em>No folders</em>\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default FolderView\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogFoldersProps} from '../../types'\nimport Dialog from '../Dialog'\nimport FolderView from '../FolderView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogFoldersProps\n}\n\nconst DialogFolders = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n const dispatch = useDispatch()\n\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"Folders\" id={id} onClose={handleClose} width={1}>\n <Box\n style={{\n height: '100%',\n minHeight: '420px',\n }}\n >\n <FolderView />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogFolders\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Flex, Label, rem, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetInputProps, WithId} from '../../types'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n children: ReactNode\n facet: WithId<SearchFacetInputProps>\n}\n\nconst Container = styled<typeof Box, {$scheme: ThemeColorSchemeKey}>(Box)(({$scheme, theme}) => {\n return css`\n background: ${getSchemeColor($scheme, 'bg')};\n border-radius: ${rem(theme.sanity.radius[2]!)};\n `\n})\n\nconst SearchFacet = (props: Props) => {\n const {children, facet} = props\n\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n\n const handleClose = () => {\n dispatch(searchActions.facetsRemoveById({facetId: facet.id}))\n }\n\n return (\n <Container padding={[2, 2, 1]} $scheme={scheme}>\n <Flex align={['flex-start', 'flex-start', 'center']} direction={['column', 'column', 'row']}>\n {/* Title */}\n <Box paddingBottom={[3, 3, 0]} paddingLeft={1} paddingRight={2} paddingTop={[1, 1, 0]}>\n <Label\n size={0}\n style={{\n whiteSpace: 'nowrap',\n }}\n >\n {facet.title}\n </Label>\n </Box>\n\n <Flex align=\"center\">\n {children}\n\n {/* Close button */}\n <Box marginLeft={1} paddingX={2}>\n <Text muted size={0}>\n <CloseIcon onClick={handleClose} />\n </Text>\n </Box>\n </Flex>\n </Flex>\n </Container>\n )\n}\n\nexport default SearchFacet\n","import {TextInput} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\n\n// TODO: use correct type\ntype Props = any & {\n onValueChange: (value: number) => void\n value?: number\n}\n\nconst TextInputNumber = (props: Props) => {\n const {onValueChange, value, ...remainingProps} = props\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n const regex = /^[0-9\\b]+$/\n\n // Test for number and strip leading zeroes\n if (val === '' || regex.test(val)) {\n onValueChange(parseInt(val, 10) || '')\n }\n }\n\n return (\n <TextInput\n {...remainingProps}\n onChange={handleChange} //\n value={value ?? ''}\n />\n )\n}\n\nexport default TextInputNumber\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {\n SearchFacetInputNumberModifier,\n SearchFacetInputNumberProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport SearchFacet from '../SearchFacet'\nimport TextInputNumber from '../TextInputNumber'\n\ntype Props = {\n facet: WithId<SearchFacetInputNumberProps>\n}\n\nconst SearchFacetNumber = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const modifiers = facet?.modifiers\n const selectedModifier = facet?.modifier\n ? modifiers?.find((modifier) => modifier.name === facet?.modifier)\n : modifiers?.[0]\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, operatorType}))\n }\n\n const handleModifierClick = (modifier: SearchFacetInputNumberModifier) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, modifier: modifier.name}))\n }\n\n const handleValueChange = (value: number) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, value}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType ?? 'greaterThan'\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n <Box marginX={1} style={{maxWidth: '50px'}}>\n <TextInputNumber\n fontSize={1}\n onValueChange={handleValueChange}\n padding={2}\n radius={2}\n width={2}\n value={facet?.value}\n />\n </Box>\n\n {/* Modifiers */}\n {modifiers && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={selectedModifier?.title}\n />\n }\n id=\"modifier\"\n menu={\n <Menu>\n {modifiers.map((modifier) => {\n const selected = modifier.name === facet.modifier\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={modifier.name}\n onClick={() => handleModifierClick(modifier)}\n padding={2}\n text={modifier.title}\n />\n )\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetNumber\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {\n SearchFacetInputSelectListItemProps,\n SearchFacetInputSelectProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputSelectProps>\n}\n\nconst SearchFacetSelect = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const options = facet?.options\n\n const selectedItem = options?.find((v) => v.name === facet?.value)\n\n const handleListItemClick = (option: SearchFacetInputSelectListItemProps) => {\n dispatch(searchActions.facetsUpdate({name: facet.name, value: option.name}))\n }\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdate({name: facet.name, operatorType}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet?.operatorType ?? 'is'\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Box marginRight={1}>\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n </Box>\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* List */}\n <MenuButton\n button={\n <Button fontSize={1} iconRight={SelectIcon} padding={2} text={selectedItem?.title} />\n }\n id=\"list\"\n menu={\n <Menu>\n {options?.map((item) => {\n const selected = item.name === selectedItem?.name\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={item.name}\n onClick={() => handleListItemClick(item)}\n padding={2}\n text={item.title}\n />\n )\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n </SearchFacet>\n )\n}\n\nexport default SearchFacetSelect\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button, TextInput} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {operators} from '../../config/searchFacets'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetInputStringProps, SearchFacetOperatorType, WithId} from '../../types'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputStringProps>\n}\n\nconst SearchFacetString = ({facet}: Props) => {\n // Redux\n const dispatch = useDispatch()\n\n const popoverProps = usePortalPopoverProps()\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, operatorType}))\n }\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n dispatch(searchActions.facetsUpdateById({id: facet.id, value: e.target.value}))\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n {!operators[selectedOperatorType].hideInput && (\n <Box marginLeft={1} style={{maxWidth: '125px'}}>\n <TextInput\n fontSize={1}\n onChange={handleChange}\n padding={2}\n radius={2}\n width={2}\n value={facet?.value}\n />\n </Box>\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetString\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Card, rem, studioTheme, Text, type ThemeColorSchemeKey} from '@sanity/ui'\nimport {components, type StylesConfig} from 'react-select'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\nconst {\n fonts: {\n text: {sizes: themeTextSizes},\n },\n radius: themeRadius,\n space: themeSpace,\n} = studioTheme\n\nexport const reactSelectStyles = (scheme: ThemeColorSchemeKey): StylesConfig => {\n return {\n control: (styles, {isDisabled, isFocused}) => {\n let boxShadow = `inset 0 0 0 1px var(--card-border-color)`\n if (isFocused) {\n boxShadow = `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputEnabledBorder')},\n 0 0 0 1px ${getSchemeColor(scheme, 'bg2')},\n 0 0 0 3px var(--card-focus-ring-color) !important`\n }\n\n return {\n ...styles,\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'inherit',\n 'border': 'none',\n 'borderRadius': themeRadius[2],\n boxShadow,\n 'fontSize': themeTextSizes[1]!.fontSize,\n 'minHeight': '25px',\n 'opacity': isDisabled ? 0.5 : 'inherit',\n 'outline': 'none',\n 'transition': 'none',\n '&:hover': {\n boxShadow: `inset 0 0 0 1px ${getSchemeColor(scheme, 'inputHoveredBorder')}`,\n },\n }\n },\n input: (styles) => ({\n ...styles,\n color: 'var(--card-fg-color)',\n fontFamily: studioTheme.fonts.text.family,\n fontSize: themeTextSizes[1]!.fontSize,\n marginLeft: rem(themeSpace[2]!),\n }),\n menuList: (styles) => ({\n ...styles,\n padding: 0,\n }),\n noOptionsMessage: (styles) => ({\n ...styles,\n fontFamily: studioTheme.fonts.text.family,\n fontSize: themeTextSizes[1]!.fontSize,\n lineHeight: '1em',\n }),\n option: (styles, {isFocused}) => ({\n ...styles,\n 'backgroundColor': isFocused ? getSchemeColor(scheme, 'spotBlue') : 'transparent',\n 'borderRadius': themeRadius[2],\n 'color': isFocused ? getSchemeColor(scheme, 'bg') : 'inherit',\n 'fontSize': themeTextSizes[1]!.fontSize,\n 'lineHeight': '1em',\n 'margin': 0,\n 'padding': rem(themeSpace[1]!),\n '&:hover': {\n backgroundColor: getSchemeColor(scheme, 'spotBlue'),\n color: getSchemeColor(scheme, 'bg'),\n },\n }),\n placeholder: (styles) => ({\n ...styles,\n fontSize: themeTextSizes[1]!.fontSize,\n marginLeft: rem(themeSpace[2]!),\n paddingLeft: 0,\n }),\n singleValue: (styles) => ({\n ...styles,\n alignItems: 'center',\n display: 'inline-flex',\n height: '100%',\n marginLeft: rem(themeSpace[2]!),\n }),\n valueContainer: (styles) => ({\n ...styles,\n margin: 0,\n padding: 0,\n }),\n }\n}\n\nconst ClearIndicator = (props: any) => {\n return (\n <components.ClearIndicator {...props}>\n <Box\n paddingRight={1}\n style={{\n transform: 'scale(0.85)',\n }}\n >\n <Text muted size={0}>\n <CloseIcon />\n </Text>\n </Box>\n </components.ClearIndicator>\n )\n}\n\nconst Menu = (props: any) => {\n return (\n <components.Menu {...props}>\n <Card radius={1} shadow={2}>\n {props.children}\n </Card>\n </components.Menu>\n )\n}\n\nconst MenuList = (props: any) => {\n const {children} = props\n\n const MAX_ROWS = 5\n const OPTION_HEIGHT = 33\n\n if (Array.isArray(children)) {\n const height =\n children.length > MAX_ROWS ? OPTION_HEIGHT * MAX_ROWS : children.length * OPTION_HEIGHT\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n itemContent={(index) => {\n const item = children[index]\n return <Option {...item.props} />\n }}\n style={{height}}\n totalCount={children.length}\n />\n )\n }\n return <components.MenuList {...props}>{children}</components.MenuList>\n}\n\nconst NoOptionsMessage = (props: any) => {\n return <components.NoOptionsMessage {...props}>{props.children}</components.NoOptionsMessage>\n}\n\nconst Option = (props: any) => {\n return (\n <Box padding={1}>\n <components.Option {...props}>\n <Box paddingY={1}>\n <Text size={1} style={{color: 'inherit'}} textOverflow=\"ellipsis\">\n {props.children}\n </Text>\n </Box>\n </components.Option>\n </Box>\n )\n}\n\nconst SingleValue = (props: any) => {\n return (\n <components.SingleValue {...props}>\n <Text size={1} textOverflow=\"ellipsis\">\n {props.children}\n </Text>\n </components.SingleValue>\n )\n}\n\nexport const reactSelectComponents = {\n ClearIndicator,\n DropdownIndicator: null,\n IndicatorSeparator: null,\n Menu,\n MenuList,\n NoOptionsMessage,\n Option,\n SingleValue,\n}\n","import {SelectIcon} from '@sanity/icons/Select'\nimport {Box, Button} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {useDispatch} from 'react-redux'\nimport Select from 'react-select'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {operators} from '../../config/searchFacets'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\nimport {selectTags} from '../../modules/tags'\nimport {reactSelectComponents, reactSelectStyles} from '../../styled/react-select/single'\nimport type {\n TagSelectOption,\n SearchFacetInputSearchableProps,\n SearchFacetOperatorType,\n WithId,\n} from '../../types'\nimport getTagSelectOptions from '../../utils/getTagSelectOptions'\nimport SearchFacet from '../SearchFacet'\n\ntype Props = {\n facet: WithId<SearchFacetInputSearchableProps>\n}\n\nconst SearchFacetTags = ({facet}: Props) => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const {excludeTagSlugs} = useToolOptions()\n const tagsAll = useTypedSelector((state) => selectTags(state))\n const tags =\n excludeTagSlugs.length > 0\n ? tagsAll.filter((t) => !excludeTagSlugs.includes(t.tag.name.current))\n : tagsAll\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n const allTagOptions = getTagSelectOptions(tags)\n\n const popoverProps = usePortalPopoverProps()\n\n const handleChange = (option: TagSelectOption) => {\n dispatch(\n searchActions.facetsUpdateById({\n id: facet.id,\n value: option,\n }),\n )\n }\n\n const handleOperatorItemClick = (operatorType: SearchFacetOperatorType) => {\n dispatch(\n searchActions.facetsUpdateById({\n id: facet.id,\n operatorType,\n }),\n )\n }\n\n const selectedOperatorType: SearchFacetOperatorType = facet.operatorType\n\n return (\n <SearchFacet facet={facet}>\n {/* Optional operators */}\n {facet?.operatorTypes && (\n <MenuButton\n button={\n <Button\n fontSize={1}\n iconRight={SelectIcon}\n padding={2}\n text={operators[selectedOperatorType].label}\n />\n }\n id=\"operators\"\n menu={\n <Menu>\n {facet.operatorTypes.map((operatorType, index) => {\n if (operatorType) {\n const selected = operatorType === selectedOperatorType\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n key={operatorType}\n onClick={() => handleOperatorItemClick(operatorType)}\n padding={2}\n gap={4}\n style={{minWidth: '150px'}}\n text={operators[operatorType].label}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )}\n\n {/* Value */}\n {!operators[selectedOperatorType].hideInput && (\n <Box marginX={1} style={{width: '160px'}}>\n <Select\n components={reactSelectComponents}\n instanceId=\"facet-searchable\"\n isClearable\n isDisabled={tagsFetching}\n isSearchable\n name=\"tags\"\n noOptionsMessage={() => 'No tags'}\n onChange={(value: any) => handleChange(value as TagSelectOption)}\n options={allTagOptions}\n placeholder={tagsFetching ? 'Loading...' : 'Select...'}\n styles={reactSelectStyles(scheme)}\n value={facet?.value}\n />\n </Box>\n )}\n </SearchFacet>\n )\n}\n\nexport default SearchFacetTags\n","import {Box, Flex, Inline, rem, type Theme} from '@sanity/ui'\nimport {styled, css} from 'styled-components'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport SearchFacetNumber from '../SearchFacetNumber'\nimport SearchFacetSelect from '../SearchFacetSelect'\nimport SearchFacetString from '../SearchFacetString'\nimport SearchFacetTags from '../SearchFacetTags'\n\ntype Props = {\n layout?: 'inline' | 'stack'\n}\n\nconst StackContainer = styled(Flex)(({theme}: {theme: Theme}) => {\n return css`\n > * {\n margin-bottom: ${rem(theme.sanity.space[2]!)};\n }\n `\n})\n\nconst SearchFacets = (props: Props) => {\n const {layout = 'inline'} = props\n\n // Redux\n const searchFacets = useTypedSelector((state) => state.search.facets)\n\n const Items = searchFacets.map((facet) => {\n const key = facet.id\n if (facet.type === 'number') {\n return <SearchFacetNumber facet={facet} key={key} />\n }\n\n if (facet.type === 'searchable') {\n return <SearchFacetTags facet={facet} key={key} />\n }\n\n if (facet.type === 'select') {\n return <SearchFacetSelect facet={facet} key={key} />\n }\n\n if (facet.type === 'string') {\n return <SearchFacetString facet={facet} key={key} />\n }\n\n return null\n })\n\n if (layout === 'inline') {\n if (searchFacets.length === 0) {\n return null\n }\n\n return (\n <Box marginBottom={2}>\n <Inline gap={2}>{Items}</Inline>\n </Box>\n )\n }\n\n if (layout === 'stack') {\n return (\n <StackContainer align=\"flex-start\" direction=\"column\">\n {Items}\n </StackContainer>\n )\n }\n\n throw Error('Invalid layout')\n}\n\nexport default SearchFacets\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Button, Flex} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuGroup, MenuItem} from '@sanity/ui/menu'\nimport {useDispatch} from 'react-redux'\n\nimport {FACETS} from '../../constants'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\nimport type {SearchFacetDivider, SearchFacetGroup, SearchFacetInputProps} from '../../types'\n\nconst SearchFacetsControl = () => {\n // Redux\n const dispatch = useDispatch()\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const selectedDocument = useTypedSelector((state) => state.selected.document)\n\n const popoverProps = usePortalPopoverProps()\n\n const {creditLine} = useToolOptions()\n\n const isTool = !selectedDocument\n\n const filteredFacets = FACETS\n // Filter facets based on current context, whether it's invoked as a tool, or via selection through via custom asset source.\n .filter((facet) => {\n // Remove credit line filter if it's not enabled\n if (!creditLine?.enabled && facet?.type === 'string' && facet?.name === 'creditLine') {\n return false\n }\n\n if (facet.type === 'group' || facet.type === 'divider') {\n return true\n }\n\n if (isTool) {\n return !facet?.selectOnly\n }\n\n const matchingAssetTypes = facet.assetTypes.filter((assetType) =>\n assetTypes.includes(assetType),\n )\n return matchingAssetTypes.length > 0\n })\n // Remove adjacent and leading / trailing dividers\n .filter((facet, index, facets) => {\n const previousFacet = facets[index - 1]\n // Ignore leading + trailing dividers\n if (facet.type === 'divider' && (index === 0 || index === facets.length - 1)) {\n return false\n }\n // Ignore adjacent dividers\n if (facet.type === 'divider' && previousFacet?.type === 'divider') {\n return false\n }\n return true\n })\n\n const hasSearchFacets = filteredFacets.length > 0\n\n const renderMenuFacets = (\n facets: (SearchFacetDivider | SearchFacetGroup | SearchFacetInputProps)[],\n level: number = 0,\n ) => {\n return (\n <>\n {facets?.map((facet, index) => {\n if (facet.type === 'divider') {\n return <MenuDivider key={index} />\n }\n\n // Recursively render menu facets\n if (facet.type === 'group') {\n return (\n <MenuGroup key={`group-${level}-${index}`} text={facet.title} title={facet.title}>\n {renderMenuFacets(facet.facets, level + 1)}\n </MenuGroup>\n )\n }\n\n if (facet) {\n const disabled =\n !facet.operatorTypes && !!searchFacets.find((v) => v.name === facet.name)\n\n return (\n <MenuItem\n disabled={disabled}\n fontSize={1}\n key={facet.name}\n onClick={() => dispatch(searchActions.facetsAdd({facet}))}\n padding={2}\n text={facet.title}\n />\n )\n }\n\n return null\n })}\n </>\n )\n }\n\n return (\n <Flex>\n {/* Add filter button */}\n <MenuButton\n button={\n <Button\n disabled={!hasSearchFacets}\n fontSize={1}\n icon={AddIcon}\n mode=\"bleed\"\n gap={2}\n text=\"Add filter\"\n tone=\"primary\"\n />\n }\n id=\"facets\"\n menu={<Menu>{renderMenuFacets(filteredFacets)}</Menu>}\n popover={{\n ...popoverProps,\n placement: 'right-start',\n }}\n />\n\n {/* Clear facets button */}\n {searchFacets.length > 0 && (\n <Button\n fontSize={1}\n mode=\"bleed\"\n onClick={() => dispatch(searchActions.facetsClear())}\n text=\"Clear\"\n />\n )}\n </Flex>\n )\n}\n\nexport default SearchFacetsControl\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogSearchFacetsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport SearchFacets from '../SearchFacets'\nimport SearchFacetsControl from '../SearchFacetsControl'\n\ntype Props = {\n children: ReactNode\n dialog: DialogSearchFacetsProps\n}\n\nconst DialogSearchFacets = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"Filters\" id={id} onClose={handleClose} width={1}>\n <Box padding={3}>\n <SearchFacets layout=\"stack\" />\n <SearchFacetsControl />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogSearchFacets\n","import {Box, Flex} from '@sanity/ui'\nimport {type ReactNode, useEffect} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {tagFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {tagsActions} from '../../modules/tags'\nimport type {DialogTagCreateProps, TagFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagCreateProps\n}\n\nconst DialogTagCreate = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n const dispatch = useDispatch()\n\n const creating = useTypedSelector((state) => state.tags.creating)\n const creatingError = useTypedSelector((state) => state.tags.creatingError)\n\n const {\n // Read the formState before render to subscribe the form state through Proxy\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n setError,\n } = useForm<TagFormData>({\n defaultValues: {\n name: '',\n },\n mode: 'onChange',\n resolver: zodFormResolver<TagFormData>(tagFormSchema),\n })\n\n const formUpdating = creating\n\n const handleClose = () => {\n dispatch(dialogActions.clear())\n }\n\n // - submit react-hook-form\n const onSubmit: SubmitHandler<TagFormData> = (formData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n\n dispatch(tagsActions.createRequest({name: sanitizedFormData['name']}))\n }\n\n useEffect(() => {\n if (creatingError) {\n setError('name', {\n message: creatingError?.message,\n })\n }\n }, [creatingError, setError])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"flex-end\">\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid}\n isValid={isValid}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Create Tag\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n {/* Form fields */}\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Title */}\n <FormFieldInputText\n {...register('name')}\n disabled={formUpdating}\n error={errors?.name?.message}\n label=\"Name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTagCreate\n","import type {MutationEvent} from '@sanity/client'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport groq from 'groq'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {type SubmitHandler, useForm} from 'react-hook-form'\nimport {useDispatch} from 'react-redux'\n\nimport {tagFormSchema} from '../../formSchema'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {dialogActions} from '../../modules/dialog'\nimport {selectTagById, tagsActions} from '../../modules/tags'\nimport type {DialogTagEditProps, Tag, TagFormData} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport zodFormResolver from '../../utils/zodFormResolver'\nimport Dialog from '../Dialog'\nimport FormFieldInputText from '../FormFieldInputText'\nimport FormSubmitButton from '../FormSubmitButton'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagEditProps\n}\n\nconst DialogTagEdit = (props: Props) => {\n const {\n children,\n dialog: {id, tagId},\n } = props\n\n const client = useVersionedClient()\n\n const dispatch = useDispatch()\n const tagItem = useTypedSelector((state) => selectTagById(state, String(tagId))) // TODO: double check string cast\n\n // - Generate a snapshot of the current tag\n const [tagSnapshot, setTagSnapshot] = useState(tagItem?.tag)\n\n const currentTag = tagItem ? tagItem?.tag : tagSnapshot\n const generateDefaultValues = useCallback(\n (tag?: Tag) => ({\n name: tag?.name?.current || '',\n }),\n [],\n )\n\n const {\n // Read the formState before render to subscribe the form state through Proxy\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n reset,\n setError,\n } = useForm<TagFormData>({\n defaultValues: generateDefaultValues(tagItem?.tag),\n mode: 'onChange',\n resolver: zodFormResolver<TagFormData>(tagFormSchema),\n })\n\n const formUpdating = !tagItem || tagItem?.updating\n\n const handleClose = () => {\n dispatch(dialogActions.remove({id}))\n }\n\n // Submit react-hook-form\n const onSubmit: SubmitHandler<TagFormData> = (formData) => {\n if (!tagItem?.tag) {\n return\n }\n const sanitizedFormData = sanitizeFormData(formData)\n dispatch(\n tagsActions.updateRequest({\n closeDialogId: tagItem?.tag?._id,\n formData: {\n name: {\n _type: 'slug',\n current: sanitizedFormData['name'],\n },\n },\n tag: tagItem?.tag,\n }),\n )\n }\n\n const handleDelete = () => {\n if (!tagItem?.tag) {\n return\n }\n\n dispatch(\n dialogActions.showConfirmDeleteTag({\n closeDialogId: tagItem?.tag?._id,\n tag: tagItem?.tag,\n }),\n )\n }\n\n const handleTagUpdate = useCallback(\n (update: MutationEvent) => {\n const {result, transition} = update\n if (result && transition === 'update') {\n // Regenerate snapshot\n setTagSnapshot(result as Tag)\n // Reset react-hook-form\n reset(generateDefaultValues(result as Tag))\n }\n },\n [reset, generateDefaultValues],\n )\n\n useEffect(() => {\n if (tagItem?.error) {\n setError('name', {\n message: tagItem.error?.message,\n })\n }\n }, [setError, tagItem?.error])\n\n // - Listen for asset mutations and update snapshot\n useEffect(() => {\n if (!tagItem?.tag) {\n return undefined\n }\n\n // Remember that Sanity listeners ignore joins, order clauses and projections\n const subscriptionAsset = client\n .listen(groq`*[_id == $id]`, {id: tagItem?.tag._id})\n .subscribe(handleTagUpdate)\n\n return () => {\n subscriptionAsset?.unsubscribe()\n }\n }, [client, handleTagUpdate, tagItem?.tag])\n\n const Footer = () => (\n <Box padding={3}>\n <Flex justify=\"space-between\">\n {/* Delete button */}\n <Button\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n\n {/* Submit button */}\n <FormSubmitButton\n disabled={formUpdating || !isDirty || !isValid}\n isValid={isValid}\n lastUpdated={tagItem?.tag?._updatedAt}\n onClick={handleSubmit(onSubmit)}\n />\n </Flex>\n </Box>\n )\n\n if (!currentTag) {\n return null\n }\n\n return (\n <Dialog\n animate\n // oxlint-disable-next-line react/react-compiler\n footer={<Footer />}\n header=\"Edit Tag\"\n id={id}\n onClose={handleClose}\n width={1}\n >\n {/* Form fields */}\n <Box as=\"form\" padding={4} onSubmit={handleSubmit(onSubmit)}>\n {/* Deleted notification */}\n {!tagItem && (\n <Card marginBottom={3} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>This tag cannot be found – it may have been deleted.</Text>\n </Card>\n )}\n\n {/* Hidden button to enable enter key submissions */}\n <button style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Title */}\n <FormFieldInputText\n {...register('name')}\n disabled={formUpdating}\n error={errors?.name?.message}\n label=\"Name\"\n name=\"name\"\n />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTagEdit\n","import {ArrowDownIcon} from '@sanity/icons/ArrowDown'\nimport {ArrowUpIcon} from '@sanity/icons/ArrowUp'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Container, Flex, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {type ReactNode} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {inputs} from '../../config/searchFacets'\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {searchActions, selectIsSearchFacetTag} from '../../modules/search'\nimport type {SearchFacetInputSearchableProps, TagActions, TagItem} from '../../types'\n\ntype Props = {\n actions?: TagActions[]\n tag: TagItem\n}\n\nconst TagContainer = styled(Flex)`\n height: ${PANEL_HEIGHT}px;\n`\n\nconst ButtonContainer = styled(Flex)`\n @media (pointer: fine) {\n visibility: hidden;\n }\n\n @media (hover: hover) and (pointer: fine) {\n ${TagContainer}:hover & {\n visibility: visible;\n }\n }\n`\n\ntype TagButtonProps = {\n disabled?: boolean\n icon: ReactNode\n onClick: () => void\n tone?: 'critical' | 'primary'\n tooltip: string\n}\n\nconst TagButton = (props: TagButtonProps) => {\n const {disabled, icon, onClick, tone, tooltip} = props\n\n return (\n <Tooltip\n animate\n content={\n <Container padding={2} width={0}>\n <Text muted size={1}>\n {tooltip}\n </Text>\n </Container>\n }\n disabled={'ontouchstart' in window}\n placement=\"top\"\n portal\n >\n <Button\n disabled={disabled}\n fontSize={1}\n icon={icon}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n tone={tone}\n />\n </Tooltip>\n )\n}\n\nconst Tag = (props: Props) => {\n const {actions, tag} = props\n\n // Redux\n const dispatch = useDispatch()\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n const isSearchFacetTag = useTypedSelector((state) => selectIsSearchFacetTag(state, tag?.tag?._id))\n\n // Callbacks\n const handleSearchFacetTagRemove = () => {\n dispatch(searchActions.facetsRemoveByTag({tagId: tag.tag._id}))\n }\n\n const handleShowAddTagToAssetsDialog = () => {\n dispatch(dialogActions.showConfirmAssetsTagAdd({assetsPicked, tag: tag.tag}))\n }\n\n const handleShowRemoveTagFromAssetsDialog = () => {\n dispatch(dialogActions.showConfirmAssetsTagRemove({assetsPicked, tag: tag.tag}))\n }\n\n const handleShowTagDeleteDialog = () => {\n dispatch(dialogActions.showConfirmDeleteTag({tag: tag.tag}))\n }\n\n const handleShowTagEditDialog = () => {\n dispatch(DIALOG_ACTIONS.showTagEdit({tagId: tag?.tag?._id}))\n }\n\n const handleSearchFacetTagAddOrUpdate = () => {\n const searchFacet = {\n ...inputs.tag,\n value: {\n label: tag?.tag?.name?.current,\n value: tag?.tag?._id,\n },\n } as SearchFacetInputSearchableProps\n\n if (isSearchFacetTag) {\n dispatch(\n searchActions.facetsUpdate({\n name: 'tag',\n operatorType: 'references',\n value: searchFacet.value,\n }),\n )\n } else {\n dispatch(searchActions.facetsAdd({facet: searchFacet}))\n }\n }\n\n return (\n <TagContainer align=\"center\" flex={1} justify=\"space-between\" paddingLeft={3}>\n <Box flex={1}>\n <Text\n muted\n size={1}\n style={{\n opacity: tag?.updating ? 0.5 : 1.0,\n userSelect: 'none',\n }}\n textOverflow=\"ellipsis\"\n >\n {tag?.tag?.name?.current}\n </Text>\n </Box>\n\n <ButtonContainer align=\"center\" style={{flexShrink: 0}}>\n {/* Search facet toggle */}\n {actions?.includes('search') && (\n <TagButton\n disabled={tag?.updating}\n icon={isSearchFacetTag ? <CloseIcon /> : <SearchIcon />}\n onClick={\n isSearchFacetTag ? handleSearchFacetTagRemove : handleSearchFacetTagAddOrUpdate\n }\n tooltip={isSearchFacetTag ? 'Remove filter' : 'Filter by tag'}\n />\n )}\n {/* Edit icon */}\n {actions?.includes('edit') && (\n <TagButton\n disabled={tag?.updating}\n icon={<EditIcon />}\n onClick={handleShowTagEditDialog}\n tone=\"primary\"\n tooltip=\"Edit tag\"\n />\n )}\n {/* Apply to all */}\n {actions?.includes('applyAll') && (\n <TagButton\n disabled={tag?.updating}\n icon={<ArrowUpIcon />}\n onClick={handleShowAddTagToAssetsDialog}\n tone=\"primary\"\n tooltip=\"Add tag to selected assets\"\n />\n )}\n {/* Remove from all */}\n {actions?.includes('removeAll') && (\n <TagButton\n disabled={tag?.updating}\n icon={<ArrowDownIcon />}\n onClick={handleShowRemoveTagFromAssetsDialog}\n tone=\"critical\"\n tooltip=\"Remove tag from selected assets\"\n />\n )}\n\n {/* Delete icon */}\n {actions?.includes('delete') && (\n <TagButton\n disabled={tag?.updating}\n icon={<TrashIcon />}\n onClick={handleShowTagDeleteDialog}\n tone=\"critical\"\n tooltip=\"Delete tag\"\n />\n )}\n </ButtonContainer>\n </TagContainer>\n )\n}\n\nexport default Tag\n","import {Flex, Label} from '@sanity/ui'\nimport {memo, useState} from 'react'\nimport {Virtuoso} from 'react-virtuoso'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPicked} from '../../modules/assets'\nimport type {TagActions, TagItem} from '../../types'\nimport Tag from '../Tag'\n\nconst VirtualRow = memo(\n ({\n isScrolling,\n item,\n }: {\n isScrolling?: boolean\n item:\n | string\n | (TagItem & {\n actions: TagActions[]\n })\n }) => {\n // Render label\n if (typeof item === 'string') {\n return (\n <Flex\n align=\"center\"\n justify=\"space-between\"\n key={item}\n paddingX={3}\n style={{height: `${PANEL_HEIGHT}px`}}\n >\n <Label size={0}>{item}</Label>\n </Flex>\n )\n }\n\n // Render tag - only display actions if we're not in the process of scrolling\n return <Tag actions={isScrolling ? undefined : item.actions} key={item.tag?._id} tag={item} />\n },\n)\n\nconst TagsVirtualized = ({tags}: {tags: TagItem[]}) => {\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n\n // State\n const [isScrolling, setIsScrolling] = useState(false)\n\n // TODO: refactor, there's most certainly a more performant way to do this\n\n // Filter out all tag IDS used (across all) and dedupe\n const pickedTagIds = assetsPicked?.reduce((acc: string[], val) => {\n const assetTagIds = val?.asset?.opt?.media?.tags?.map((tag) => tag._ref) || []\n acc = acc.concat(assetTagIds)\n return acc\n }, [])\n const pickedTagIdsUnique = [...new Set(pickedTagIds)]\n\n // Segment tags into two buckets:\n // 1. those which exist in all picked assets ('applied to all')\n // 2. those which exist in some picked assets ('applied to some')\n const tagIdsSegmented = pickedTagIdsUnique.reduce(\n (acc: {appliedToAll: string[]; appliedToSome: string[]}, tagId) => {\n const tagIsInEveryAsset = assetsPicked.every((assetItem) => {\n const tagIndex =\n assetItem.asset.opt?.media?.tags?.findIndex((tag) => tag._ref === tagId) ?? -1\n return tagIndex >= 0\n })\n\n if (tagIsInEveryAsset) {\n acc.appliedToAll.push(tagId)\n } else {\n acc.appliedToSome.push(tagId)\n }\n\n return acc\n },\n {\n appliedToAll: [],\n appliedToSome: [],\n },\n )\n\n const tagsAppliedToAll = tags\n .filter((tag) => tagIdsSegmented.appliedToAll.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['delete', 'edit', 'removeAll', 'search'] as TagActions[],\n }))\n const tagsAppliedToSome = tags\n .filter((tag) => tagIdsSegmented.appliedToSome.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['applyAll', 'delete', 'edit', 'removeAll', 'search'] as TagActions[],\n }))\n const tagsUnused = tags\n .filter((tag) => !pickedTagIdsUnique.includes(tag.tag._id))\n .map((tagItem) => ({\n ...tagItem,\n actions: ['applyAll', 'delete', 'edit', 'search'] as TagActions[],\n }))\n\n let items: (\n | string\n | (TagItem & {\n actions: TagActions[]\n })\n )[] = []\n if (assetsPicked.length === 0) {\n items = tags.map((tagItem) => ({\n ...tagItem,\n actions: ['delete', 'edit', 'search'] as TagActions[],\n }))\n } else {\n if (tagsAppliedToAll?.length > 0) {\n items = [\n ...items, //\n assetsPicked.length === 1 ? 'Used' : 'Used by all',\n ...tagsAppliedToAll,\n ]\n }\n if (tagsAppliedToSome?.length > 0) {\n items = [\n ...items, //\n 'Used by some',\n ...tagsAppliedToSome,\n ]\n }\n if (tagsUnused?.length > 0) {\n items = [\n ...items, //\n 'Unused',\n ...tagsUnused,\n ]\n }\n }\n\n return (\n <Virtuoso\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n if (typeof item === 'string') {\n return item\n }\n return item!.tag._id\n }}\n isScrolling={setIsScrolling}\n itemContent={(index) => {\n return <VirtualRow isScrolling={isScrolling} item={items[index]!} />\n }}\n style={{flex: 1, overflowX: 'hidden'}}\n totalCount={items.length}\n />\n )\n}\n\nexport default TagsVirtualized\n","import {ComposeIcon} from '@sanity/icons/Compose'\nimport {Box, Button, Flex, Inline, Label} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n allowCreate?: boolean\n light?: boolean\n title: string\n}\n\nconst TagViewHeader = ({allowCreate, light, title}: Props) => {\n const scheme = useColorSchemeValue()\n\n const dispatch = useDispatch()\n const tagsCreating = useTypedSelector((state) => state.tags.creating)\n const tagsFetching = useTypedSelector((state) => state.tags.fetching)\n\n const handleTagCreate = () => {\n dispatch(DIALOG_ACTIONS.showTagCreate())\n }\n\n return (\n <>\n <Flex\n align=\"center\"\n justify=\"space-between\"\n paddingLeft={3}\n style={{\n background: light ? getSchemeColor(scheme, 'bg') : 'inherit',\n borderBottom: '1px solid var(--card-border-color)',\n flexShrink: 0,\n height: `${PANEL_HEIGHT}px`,\n }}\n >\n <Inline gap={2}>\n <Label size={0}>{title}</Label>\n {tagsFetching && (\n <Label size={0} style={{opacity: 0.3}}>\n Loading...\n </Label>\n )}\n </Inline>\n {/* Create new tag button */}\n {allowCreate && (\n <Box marginRight={1}>\n <Button\n disabled={tagsCreating}\n fontSize={1} //\n icon={ComposeIcon}\n mode=\"bleed\"\n onClick={handleTagCreate}\n style={{\n background: 'transparent',\n boxShadow: 'none',\n }}\n />\n </Box>\n )}\n </Flex>\n </>\n )\n}\n\nexport default TagViewHeader\n","import {Box, Flex, Text} from '@sanity/ui'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectAssetsPickedLength} from '../../modules/assets'\nimport {selectTags} from '../../modules/tags'\nimport TagsVirtualized from '../TagsVirtualized'\nimport TagViewHeader from '../TagViewHeader'\n\nconst TagView = () => {\n const numPickedAssets = useTypedSelector(selectAssetsPickedLength)\n const {excludeTagSlugs} = useToolOptions()\n const tagsAll = useTypedSelector(selectTags)\n const tags =\n excludeTagSlugs.length > 0\n ? tagsAll.filter((t) => !excludeTagSlugs.includes(t.tag.name.current))\n : tagsAll\n const fetching = useTypedSelector((state) => state.tags.fetching)\n const fetchCount = useTypedSelector((state) => state.tags.fetchCount)\n const fetchComplete = fetchCount !== -1\n const hasTags = !fetching && tags?.length > 0\n const hasPicked = !!(numPickedAssets > 0)\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <TagViewHeader\n allowCreate\n light={hasPicked}\n title={hasPicked ? 'Tags (in selection)' : 'Tags'}\n />\n\n {fetchComplete && !hasTags && (\n <Box padding={3}>\n <Text muted size={1}>\n <em>No tags</em>\n </Text>\n </Box>\n )}\n\n {hasTags && <TagsVirtualized tags={tags} />}\n </Flex>\n )\n}\n\nexport default TagView\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport {dialogActions} from '../../modules/dialog'\nimport type {DialogTagsProps} from '../../types'\nimport Dialog from '../Dialog'\nimport TagView from '../TagView'\n\ntype Props = {\n children: ReactNode\n dialog: DialogTagsProps\n}\n\nconst DialogTags = (props: Props) => {\n const {\n children,\n dialog: {id},\n } = props\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleClose = useCallback(() => {\n dispatch(dialogActions.clear())\n }, [dispatch])\n\n return (\n <Dialog animate header=\"All Tags\" id={id} onClose={handleClose} width={1}>\n <Box\n style={{\n height: '100%',\n minHeight: '420px', // explicit height required as <TagView> is virtualized\n }}\n >\n <TagView />\n </Box>\n\n {children}\n </Dialog>\n )\n}\n\nexport default DialogTags\n","import useTypedSelector from '../../hooks/useTypedSelector'\nimport type {Dialog} from '../../types'\nimport DialogAssetEdit from '../DialogAssetEdit'\nimport DialogAllAssets from '../DialogAssetsOverView'\nimport DialogConfirm from '../DialogConfirm'\nimport DialogFolderCreate from '../DialogFolderCreate'\nimport DialogFolderMove from '../DialogFolderMove'\nimport DialogFolderRename from '../DialogFolderRename'\nimport DialogFolders from '../DialogFolders'\nimport DialogSearchFacets from '../DialogSearchFacets'\nimport DialogTagCreate from '../DialogTagCreate'\nimport DialogTagEdit from '../DialogTagEdit'\nimport DialogTags from '../DialogTags'\n\nconst Dialogs = () => {\n // Redux\n const currentDialogs = useTypedSelector((state) => state.dialog.items)\n\n const renderDialogs = (dialogs: Dialog[], index: number) => {\n if (dialogs.length === 0 || index >= dialogs.length) {\n return null\n }\n\n const dialog = dialogs[index]!\n const childDialogs = renderDialogs(dialogs, index + 1)\n\n if (dialog.type === 'assetEdit') {\n return (\n <DialogAssetEdit dialog={dialog} key={index}>\n {childDialogs}\n </DialogAssetEdit>\n )\n }\n\n if (dialog.type === 'confirm') {\n return (\n <DialogConfirm dialog={dialog} key={index}>\n {childDialogs}\n </DialogConfirm>\n )\n }\n\n if (dialog.type === 'folderCreate') {\n return (\n <DialogFolderCreate dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderCreate>\n )\n }\n\n if (dialog.type === 'folderMove') {\n return (\n <DialogFolderMove dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderMove>\n )\n }\n\n if (dialog.type === 'folderRename') {\n return (\n <DialogFolderRename dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolderRename>\n )\n }\n\n if (dialog.type === 'folders') {\n return (\n <DialogFolders dialog={dialog} key={index}>\n {childDialogs}\n </DialogFolders>\n )\n }\n\n if (dialog.type === 'searchFacets') {\n return (\n <DialogSearchFacets dialog={dialog} key={index}>\n {childDialogs}\n </DialogSearchFacets>\n )\n }\n\n if (dialog.type === 'tagCreate') {\n return (\n <DialogTagCreate dialog={dialog} key={index}>\n {childDialogs}\n </DialogTagCreate>\n )\n }\n\n if (dialog.type === 'tagEdit') {\n return (\n <DialogTagEdit dialog={dialog} key={index}>\n {childDialogs}\n </DialogTagEdit>\n )\n }\n\n if (dialog.type === 'tags') {\n return (\n <DialogTags dialog={dialog} key={index}>\n {childDialogs}\n </DialogTags>\n )\n }\n\n if (dialog.type === 'dialogAllAssets') {\n return (\n <DialogAllAssets dialog={dialog} key={index}>\n {childDialogs}\n </DialogAllAssets>\n )\n }\n\n return null\n }\n\n return renderDialogs(currentDialogs, 0)\n}\n\nexport default Dialogs\n","import {useToast} from '@sanity/ui/toast'\nimport {useEffect} from 'react'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\n\nconst Notifications = () => {\n const items = useTypedSelector((state) => state.notifications.items)\n const toast = useToast()\n\n useEffect(() => {\n if (items.length > 0) {\n const lastItem = items[items.length - 1]!\n toast.push({\n closable: true,\n status: lastItem.status,\n title: lastItem.title,\n })\n }\n }, [items, toast])\n\n return null\n}\n\nexport default Notifications\n","import {type PayloadAction, createSlice} from '@reduxjs/toolkit'\n\ntype DebugReducerState = {\n badConnection: boolean\n enabled: boolean\n}\n\nconst initialState = {\n badConnection: false,\n enabled: false,\n} as DebugReducerState\n\nconst debugSlice = createSlice({\n name: 'debug',\n initialState,\n reducers: {\n setBadConnection(state, action: PayloadAction<boolean>) {\n state.badConnection = action.payload\n },\n toggleEnabled(state) {\n state.enabled = !state.enabled\n },\n },\n})\n\nexport const debugActions = {...debugSlice.actions}\n\nexport default debugSlice.reducer\n","import {type PayloadAction, createSlice} from '@reduxjs/toolkit'\nimport pluralize from 'pluralize'\nimport type {AnyAction} from 'redux'\nimport {ofType} from 'redux-observable'\nimport {of} from 'rxjs'\nimport {bufferTime, filter, mergeMap} from 'rxjs/operators'\n\nimport type {HttpError, ImageAsset, MyEpic} from '../../types'\nimport {assetsActions} from '../assets'\nimport {ASSETS_ACTIONS} from '../assets/actions'\nimport {foldersActions} from '../folders'\nimport {tagsActions} from '../tags'\nimport {uploadsActions} from '../uploads'\n\ntype Notification = {\n asset?: ImageAsset\n status?: 'error' | 'warning' | 'success' | 'info'\n title?: string\n}\n\ntype NotificationsReducerState = {\n items: Notification[]\n}\n\nfunction messageFromGenericErrorPayload(payload: unknown): string {\n if (!payload || typeof payload !== 'object') {\n return 'Unknown error'\n }\n if (\n 'error' in payload &&\n payload.error &&\n typeof payload.error === 'object' &&\n payload.error !== null &&\n 'message' in payload.error\n ) {\n return String((payload.error as HttpError).message)\n }\n if ('message' in payload && typeof (payload as HttpError).message === 'string') {\n return String((payload as HttpError).message)\n }\n return 'Unknown error'\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: MyEpic = (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: MyEpic = (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 notificationsAssetsUploadCompleteEpic: MyEpic = (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 notificationsAssetsTagsAddCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(ASSETS_ACTIONS.tagsAddComplete.match),\n mergeMap((action) => {\n const count = action?.payload?.assets?.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Tag added to ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsTagsRemoveCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(ASSETS_ACTIONS.tagsRemoveComplete.match),\n mergeMap((action) => {\n const count = action?.payload?.assets?.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `Tag removed from ${count} ${pluralize('asset', count)}`,\n }),\n )\n }),\n )\n\nexport const notificationsAssetsUpdateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(assetsActions.updateComplete.match),\n bufferTime(2000),\n filter((actions) => actions.length > 0),\n mergeMap((actions) => {\n const updatedCount = actions.length\n return of(\n notificationsSlice.actions.add({\n status: 'info',\n title: `${updatedCount} ${pluralize('asset', updatedCount)} updated`,\n }),\n )\n }),\n )\n\nexport const notificationsGenericErrorEpic: MyEpic = (action$) =>\n action$.pipe(\n ofType(\n assetsActions.fetchError.type,\n assetsActions.updateError.type,\n tagsActions.createError.type,\n tagsActions.deleteError.type,\n tagsActions.fetchError.type,\n tagsActions.updateError.type,\n foldersActions.createError.type,\n foldersActions.deleteError.type,\n foldersActions.renameError.type,\n uploadsActions.uploadError.type,\n ),\n mergeMap((action: AnyAction) => {\n const title = `An error occurred: ${messageFromGenericErrorPayload(action['payload'])}`\n return of(\n notificationsSlice.actions.add({\n status: 'error',\n title,\n }),\n )\n }),\n )\n\nexport const notificationsTagCreateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.createComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag created`}))),\n )\n\nexport const notificationsTagDeleteCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.deleteComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag deleted`}))),\n )\n\nexport const notificationsTagUpdateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(tagsActions.updateComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Tag updated`}))),\n )\n\nexport const notificationsFolderCreateCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.createComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder created`}))),\n )\n\nexport const notificationsFolderDeleteCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.deleteComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder deleted`}))),\n )\n\nexport const notificationsFolderRenameCompleteEpic: MyEpic = (action$) =>\n action$.pipe(\n filter(foldersActions.renameComplete.match),\n mergeMap(() => of(notificationsSlice.actions.add({status: 'info', title: `Folder renamed`}))),\n )\n\nexport const notificationsActions = {...notificationsSlice.actions}\n\nexport default notificationsSlice.reducer\n","import {createSlice} from '@reduxjs/toolkit'\nimport type {SanityAssetDocument, SanityDocument, SanityImageAssetDocument} from '@sanity/client'\n\ntype SelectedReducerState = {\n assets: (SanityAssetDocument | SanityImageAssetDocument)[]\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 default selectedSlice.reducer\n","import {type Reducer, type StateFromReducersMapObject, combineReducers} from '@reduxjs/toolkit'\nimport {combineEpics} from 'redux-observable'\n\nimport assetsReducer, {\n assetsDeleteEpic,\n assetsFetchAfterDeleteAllEpic,\n assetsFetchEpic,\n assetsFolderSetEpic,\n assetsFolderSetRefreshEpic,\n assetsFetchNextPageEpic,\n assetsFetchPageIndexEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsTagsAddEpic,\n assetsTagsRemoveEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n assetsUpdateImageReferencesEpic,\n} from './assets'\nimport debugReducer from './debug'\nimport dialogReducer, {\n dialogClearOnAssetUpdateEpic,\n dialogTagCreateEpic,\n dialogTagDeleteEpic,\n} from './dialog'\nimport foldersReducer, {\n foldersCurrentFolderEpic,\n foldersCreateEpic,\n foldersDeleteEpic,\n foldersFetchEpic,\n foldersRefreshEpic,\n foldersRenameEpic,\n} from './folders'\nimport notificationsReducer, {\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsTagsAddCompleteEpic,\n notificationsAssetsTagsRemoveCompleteEpic,\n notificationsAssetsUpdateCompleteEpic,\n notificationsFolderCreateCompleteEpic,\n notificationsFolderDeleteCompleteEpic,\n notificationsFolderRenameCompleteEpic,\n notificationsGenericErrorEpic,\n notificationsTagCreateCompleteEpic,\n notificationsTagDeleteCompleteEpic,\n notificationsTagUpdateCompleteEpic,\n} from './notifications'\nimport searchReducer, {searchFacetTagUpdateEpic} from './search'\nimport selectedReducer from './selected'\nimport tagsReducer, {\n tagsCreateEpic,\n tagsDeleteEpic,\n tagsFetchEpic,\n tagsListenerCreateQueueEpic,\n tagsListenerDeleteQueueEpic,\n tagsListenerUpdateQueueEpic,\n tagsSortEpic,\n tagsUpdateEpic,\n} from './tags'\nimport uploadsReducer, {\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 assetsFolderSetEpic,\n assetsFolderSetRefreshEpic,\n assetsListenerCreateQueueEpic,\n assetsListenerDeleteQueueEpic,\n assetsListenerUpdateQueueEpic,\n assetsOrderSetEpic,\n assetsSearchEpic,\n assetsSortEpic,\n assetsTagsAddEpic,\n assetsTagsRemoveEpic,\n assetsUnpickEpic,\n assetsUpdateEpic,\n assetsUpdateImageReferencesEpic,\n dialogClearOnAssetUpdateEpic,\n dialogTagCreateEpic,\n dialogTagDeleteEpic,\n foldersCurrentFolderEpic,\n foldersCreateEpic,\n foldersDeleteEpic,\n foldersFetchEpic,\n foldersRefreshEpic,\n foldersRenameEpic,\n notificationsAssetsDeleteErrorEpic,\n notificationsAssetsDeleteCompleteEpic,\n notificationsAssetsTagsAddCompleteEpic,\n notificationsAssetsTagsRemoveCompleteEpic,\n notificationsAssetsUpdateCompleteEpic,\n notificationsFolderCreateCompleteEpic,\n notificationsFolderDeleteCompleteEpic,\n notificationsFolderRenameCompleteEpic,\n notificationsGenericErrorEpic,\n notificationsTagCreateCompleteEpic,\n notificationsTagDeleteCompleteEpic,\n notificationsTagUpdateCompleteEpic,\n searchFacetTagUpdateEpic,\n tagsCreateEpic,\n tagsDeleteEpic,\n tagsFetchEpic,\n tagsListenerCreateQueueEpic,\n tagsListenerDeleteQueueEpic,\n tagsListenerUpdateQueueEpic,\n tagsSortEpic,\n tagsUpdateEpic,\n uploadsAssetStartEpic,\n uploadsAssetUploadEpic,\n uploadsCheckRequestEpic,\n uploadsCompleteQueueEpic,\n)\n\nconst reducers = {\n assets: assetsReducer,\n debug: debugReducer,\n dialog: dialogReducer,\n folders: foldersReducer,\n notifications: notificationsReducer,\n search: searchReducer,\n selected: selectedReducer,\n tags: tagsReducer,\n uploads: uploadsReducer,\n}\n\ntype ReducersMapObject = typeof reducers\n\n// Workaround to avoid `$CombinedState` ts errors\n// source: https://github.com/reduxjs/redux-toolkit/issues/2068#issuecomment-1130796500\n// TODO: remove once we use `redux-toolkit` v2\nexport const rootReducer: Reducer<StateFromReducersMapObject<ReducersMapObject>> =\n combineReducers(reducers)\n","import type {SanityDocument} from '@sanity/client'\n\nconst isPlainObject = (value: any) =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n\n// Recursively search node for any linked asset ids (`asset._type === 'reference'`)\nconst getAssetIds = (node: Record<string, any>, acc: string[] = []) => {\n if (Array.isArray(node)) {\n node.forEach((v) => {\n getAssetIds(v, acc)\n })\n }\n\n if (isPlainObject(node)) {\n if (node?.['asset']?._type === 'reference' && node?.['asset']?._ref) {\n acc.push(node['asset']._ref)\n }\n\n Object.values(node).forEach((val) => {\n getAssetIds(val, acc)\n })\n }\n\n return acc\n}\n\n// Retrieve all linked asset ids from a Sanity document\nconst getDocumentAssetIds = (document: SanityDocument): string[] => {\n const assetIds = getAssetIds(document)\n\n // Sort and dedupe\n return [...new Set(assetIds.sort())]\n}\n\nexport default getDocumentAssetIds\n","import {SUPPORTED_ASSET_TYPES} from '../constants'\nimport type {AssetType} from '../types'\n\n/**\n * Determines whether or not the provided asset type (eg 'image', 'file', 'arbitrary')\n * is a supported asset type for this plugin.\n *\n * @param assetType - The asset type to check.\n * @returns True if the asset type is supported, false otherwise.\n * @internal\n */\nexport function isSupportedAssetType(assetType?: string): assetType is AssetType {\n const supported: string[] = SUPPORTED_ASSET_TYPES\n return assetType ? supported.includes(assetType) : false\n}\n","import {type AnyAction, configureStore, type Store} from '@reduxjs/toolkit'\nimport type {SanityClient} from '@sanity/client'\nimport {type ReactNode, useState} from 'react'\nimport {Provider} from 'react-redux'\nimport {createEpicMiddleware} from 'redux-observable'\nimport type {AssetSourceComponentProps, SanityDocument} from 'sanity'\n\nimport {rootEpic, rootReducer} from '../../modules'\nimport {initialState as assetsInitialState} from '../../modules/assets'\n// import {assetsActions} from '../../modules/assets'\n// import {searchActions} from '../../modules/search'\n// import {uploadsActions} from '../../modules/uploads'\nimport type {RootReducerState} from '../../modules/types'\nimport getDocumentAssetIds from '../../utils/getDocumentAssetIds'\nimport {isSupportedAssetType} from '../../utils/isSupportedAssetType'\n\ntype Props = {\n assetType?: AssetSourceComponentProps['assetType']\n children?: ReactNode\n client: SanityClient\n document?: SanityDocument\n excludeTagSlugs?: string[]\n selectedAssets?: AssetSourceComponentProps['selectedAssets']\n}\n\nfunction createReduxStore(props: Props): Store {\n const epicMiddleware = createEpicMiddleware<AnyAction, AnyAction, RootReducerState>({\n dependencies: {\n client: props.client,\n },\n })\n\n const store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n /*\n serializableCheck: {\n ignoredActions: [\n assetsActions.deleteError.type,\n uploadsActions.uploadRequest.type,\n uploadsActions.uploadStart.type,\n ]\n },\n */\n // TODO: remove once we're no longer storing non-serializable data in the store\n serializableCheck: false,\n thunk: false,\n }).prepend(epicMiddleware),\n devTools: true,\n preloadedState: {\n assets: {\n ...assetsInitialState,\n assetTypes: isSupportedAssetType(props?.assetType) ? [props.assetType] : ['file', 'image'],\n excludeTagSlugs: props.excludeTagSlugs?.length ? [...props.excludeTagSlugs] : [],\n },\n debug: {\n badConnection: false,\n enabled: false,\n },\n dialog: {items: []},\n folders: {\n byId: {},\n childrenByParentId: {},\n rootIds: [],\n exactCountByFolderId: {},\n unfiledCount: 0,\n currentFolderId: null,\n currentFolderUnfiled: false,\n panelVisible: false,\n fetching: false,\n fetchCount: -1,\n creating: false,\n renaming: false,\n },\n notifications: {items: []},\n search: {facets: [], query: ''},\n selected: {\n assets: props.selectedAssets || [],\n document: props.document,\n documentAssetIds: props.document ? getDocumentAssetIds(props.document) : [],\n },\n tags: {\n allIds: [],\n byIds: {},\n creating: false,\n fetchCount: -1,\n fetching: false,\n panelVisible: true,\n },\n uploads: {\n allIds: [],\n byIds: {},\n },\n },\n })\n\n epicMiddleware.run(rootEpic)\n\n return store\n}\n\nfunction ReduxProvider({children, ...props}: Props) {\n const [store] = useState(() => createReduxStore(props))\n\n return <Provider store={store}>{children}</Provider>\n}\n\nexport default ReduxProvider\n","import {PortalProvider} from '@sanity/ui'\nimport {useEffect, useRef} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {type AssetSourceComponentProps, type SanityDocument, useFormValue} from 'sanity'\n\nimport {AssetBrowserDispatchProvider} from '../../contexts/AssetSourceDispatchContext'\nimport useRootPortalElement from '../../hooks/useRootPortalElement'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {assetsActions} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions} from '../../modules/folders'\nimport {tagsActions} from '../../modules/tags'\nimport GlobalStyle from '../../styled/GlobalStyles'\nimport constructFilter from '../../utils/constructFilter'\nimport Dialogs from '../Dialogs'\nimport Notifications from '../Notifications'\nimport ReduxProvider from '../ReduxProvider'\n\n/**\n * Fetches the already-selected asset into the store and opens the `assetEdit`\n * dialog for it. Once that dialog (and any nested dialogs, e.g. delete confirm)\n * are dismissed, the asset source itself is closed via `onClose`.\n *\n * Tracking the dialog lifecycle through redux is what allows the source to be\n * reopened: closing the inner dialog only removes it from the store, so without\n * this the source would stay mounted (showing nothing) and could not be opened\n * a second time.\n */\nconst EditAssetDialog = ({assetId, onClose}: {assetId: string; onClose: () => void}) => {\n const dispatch = useDispatch()\n const openDialogCount = useTypedSelector((state) => state.dialog.items.length)\n const hasOpenedRef = useRef(false)\n\n useEffect(() => {\n // Only fetch the single asset being edited, then open its edit dialog.\n const queryFilter = `${constructFilter({\n assetTypes: ['file', 'image'],\n searchFacets: [],\n })} && _id == $assetId`\n\n dispatch(assetsActions.fetchRequest({params: {assetId}, queryFilter}))\n\n // Tags and folders must be loaded into the store so the edit dialog can\n // resolve the asset's existing tag references and folder path (mirroring\n // `useBrowserInit`). Without this, `selectTagSelectOptions` resolves no tags\n // and saving would patch `opt.media.tags` to null, wiping existing tags.\n dispatch(tagsActions.fetchRequest())\n dispatch(foldersActions.fetchRequest())\n\n dispatch(dialogActions.showAssetEdit({assetId}))\n }, [assetId, dispatch])\n\n useEffect(() => {\n if (openDialogCount > 0) {\n hasOpenedRef.current = true\n } else if (hasOpenedRef.current) {\n onClose()\n }\n }, [openDialogCount, onClose])\n\n return (\n <>\n <Dialogs />\n <Notifications />\n </>\n )\n}\n\nconst EditAssetTool = (props: AssetSourceComponentProps) => {\n const {onClose, selectedAssets} = props\n\n const portalElement = useRootPortalElement()\n\n // `useFormValue` can return null/undefined (e.g. on a pristine/unsaved draft).\n const currentDocument = useFormValue([]) as SanityDocument | null | undefined\n\n const client = useVersionedClient()\n\n const assetId = selectedAssets[0]?._id\n\n // Nothing to edit (e.g. opened on an empty field) – close the source again.\n useEffect(() => {\n if (!assetId) {\n onClose()\n }\n }, [assetId, onClose])\n\n if (!assetId) {\n return null\n }\n\n return (\n <ReduxProvider\n assetType={props.assetType}\n client={client}\n document={currentDocument ?? undefined}\n selectedAssets={selectedAssets}\n >\n <AssetBrowserDispatchProvider onSelect={props.onSelect}>\n <GlobalStyle />\n <PortalProvider element={portalElement}>\n <EditAssetDialog assetId={assetId} onClose={onClose} />\n </PortalProvider>\n </AssetBrowserDispatchProvider>\n </ReduxProvider>\n )\n}\n\nexport default EditAssetTool\n","import {ThLargeIcon} from '@sanity/icons/ThLarge'\nimport {ThListIcon} from '@sanity/icons/ThList'\nimport {Button, Inline} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\nconst ButtonViewGroup = () => {\n // Redux\n const dispatch = useDispatch()\n const view = useTypedSelector((state) => state.assets.view)\n\n return (\n <Inline gap={0} style={{whiteSpace: 'nowrap'}}>\n <Button\n fontSize={1}\n icon={ThLargeIcon}\n mode={view === 'grid' ? 'default' : 'ghost'}\n onClick={() => dispatch(assetsActions.viewSet({view: 'grid'}))}\n style={{\n borderBottomRightRadius: 0,\n borderTopRightRadius: 0,\n }}\n />\n <Button\n fontSize={1}\n icon={ThListIcon}\n mode={view === 'table' ? 'default' : 'ghost'}\n onClick={() => dispatch(assetsActions.viewSet({view: 'table'}))}\n style={{\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n }}\n />\n </Inline>\n )\n}\n\nexport default ButtonViewGroup\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Button} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {useDispatch} from 'react-redux'\n\nimport {getOrderTitle} from '../../config/orders'\nimport {ORDER_OPTIONS} from '../../constants'\nimport {usePortalPopoverProps} from '../../hooks/usePortalPopoverProps'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\nconst OrderSelect = () => {\n // Redux\n const dispatch = useDispatch()\n const order = useTypedSelector((state) => state.assets.order)\n\n const popoverProps = usePortalPopoverProps()\n\n return (\n <MenuButton\n button={\n <Button\n fontSize={1}\n icon={SortIcon}\n mode=\"bleed\"\n padding={3}\n text={getOrderTitle(order.field, order.direction)}\n />\n }\n id=\"order\"\n menu={\n <Menu>\n {ORDER_OPTIONS?.map((item, index) => {\n if (item) {\n const selected = order.field === item.field && order.direction === item.direction\n return (\n <MenuItem\n disabled={selected}\n fontSize={1}\n iconRight={selected}\n key={index}\n onClick={() =>\n dispatch(\n assetsActions.orderSet({\n order: {direction: item.direction, field: item.field},\n }),\n )\n }\n padding={2}\n selected={selected}\n gap={4}\n style={{minWidth: '200px'}}\n text={getOrderTitle(item.field, item.direction)}\n />\n )\n }\n\n return <MenuDivider key={index} />\n })}\n </Menu>\n }\n popover={popoverProps}\n />\n )\n}\n\nexport default OrderSelect\n","import {Box} from '@sanity/ui'\nimport {useNProgress} from '@tanem/react-nprogress'\n\ntype Props = {\n loading?: boolean\n}\n\nconst Progress = (props: Props) => {\n const {loading} = props\n\n const {animationDuration, isFinished, progress} = useNProgress({\n animationDuration: 300,\n isAnimating: loading,\n })\n\n return (\n <Box\n style={{\n opacity: isFinished ? 0 : 1,\n transition: `opacity ${animationDuration}ms linear`,\n }}\n >\n <Box\n style={{\n height: '1px',\n background: 'rgba(255, 255, 255, 0.5)',\n position: 'absolute',\n left: 0,\n top: 0,\n transition: `width ${animationDuration}ms linear`,\n width: `${progress * 100}%`,\n }}\n />\n </Box>\n )\n}\n\nexport default Progress\n","const TagIcon = () => (\n <svg\n data-sanity-icon=\"media__tag\" // For icon usage with @sanity/ui <Button />\n fill=\"currentColor\"\n height=\"1em\"\n stroke=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n width=\"1em\"\n >\n <path\n d=\"M435.25 48h-122.9a14.46 14.46 0 00-10.2 4.2L56.45 297.9a28.85 28.85 0 000 40.7l117 117a28.85 28.85 0 0040.7 0L459.75 210a14.46 14.46 0 004.2-10.2v-123a28.66 28.66 0 00-28.7-28.8z\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"32\"\n />\n <path d=\"M384 160a32 32 0 1132-32 32 32 0 01-32 32z\" />\n </svg>\n)\n\nexport default TagIcon\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Flex, TextInput} from '@sanity/ui'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {searchActions} from '../../modules/search'\n\nconst TextInputSearch = () => {\n // Redux\n const searchQuery = useTypedSelector((state) => state.search.query)\n\n // Redux\n const dispatch = useDispatch()\n\n // Callbacks\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n dispatch(searchActions.querySet({searchQuery: e.currentTarget.value}))\n }\n\n const handleClear = () => {\n dispatch(searchActions.querySet({searchQuery: ''}))\n }\n\n return (\n <Box style={{position: 'relative'}}>\n <TextInput\n fontSize={1}\n icon={SearchIcon}\n onChange={handleChange}\n placeholder=\"Search\"\n radius={2}\n value={searchQuery}\n />\n\n {/* Clear form button */}\n {searchQuery.length > 0 && (\n <Flex\n align=\"center\"\n justify=\"center\"\n onClick={handleClear}\n style={{\n cursor: 'pointer',\n height: '100%',\n opacity: 0.75,\n position: 'absolute',\n right: 0,\n top: 0,\n width: '2em',\n zIndex: 1, // force stacking context\n }}\n >\n <CloseIcon />\n </Flex>\n )}\n </Box>\n )\n}\n\nexport default TextInputSearch\n","import {FolderIcon} from '@sanity/icons/Folder'\nimport {Box, Button, Flex, Inline, useMediaIndex} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {dialogActions} from '../../modules/dialog'\nimport {foldersActions} from '../../modules/folders'\nimport {tagsActions} from '../../modules/tags'\nimport ButtonViewGroup from '../ButtonViewGroup'\nimport OrderSelect from '../OrderSelect'\nimport Progress from '../Progress'\nimport SearchFacets from '../SearchFacets'\nimport SearchFacetsControl from '../SearchFacetsControl'\nimport TagIcon from '../TagIcon'\nimport TextInputSearch from '../TextInputSearch'\n\nconst Controls = () => {\n // Redux\n const dispatch = useDispatch()\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n const pageIndex = useTypedSelector((state) => state.assets.pageIndex)\n const searchFacets = useTypedSelector((state) => state.search.facets)\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n\n const mediaIndex = useMediaIndex()\n\n // Callbacks\n const handleShowSearchFacetDialog = () => {\n dispatch(dialogActions.showSearchFacets())\n }\n\n const handleShowFoldersDialog = () => {\n dispatch(dialogActions.showFolders())\n }\n\n const handleShowTagsDialog = () => {\n dispatch(dialogActions.showTags())\n }\n\n const toggleFoldersPanel = () => {\n dispatch(foldersActions.panelVisibleSet({panelVisible: !foldersPanelVisible}))\n }\n\n const toggleTagsPanelToggle = () => {\n dispatch(tagsActions.panelVisibleSet({panelVisible: !tagsPanelVisible}))\n }\n\n return (\n <Box\n paddingY={2}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n zIndex: 2,\n }}\n >\n {/* Rows: search / filters / orders */}\n <Box marginBottom={2}>\n <Flex\n align=\"flex-start\"\n direction={['column', 'column', 'column', 'column', 'row']}\n justify=\"space-between\"\n >\n {/* Search + Filters */}\n <Flex\n flex={1}\n style={{\n alignItems: 'flex-start',\n flex: 1,\n height: '100%',\n justifyContent: mediaIndex < 2 ? 'space-between' : 'flex-start',\n position: 'relative',\n width: '100%',\n }}\n >\n <Box marginX={2} style={{minWidth: '200px'}}>\n {/* Search */}\n <TextInputSearch />\n </Box>\n\n <Box display={['none', 'none', 'block']}>\n <SearchFacets />\n\n {/* Search Facets Control (add / clear) */}\n <Inline gap={2}>\n <SearchFacetsControl />\n </Inline>\n </Box>\n\n <Box display={['block', 'block', 'none']} marginX={2}>\n <Inline gap={2} style={{whiteSpace: 'nowrap'}}>\n {/* Filters button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowSearchFacetDialog}\n text={`Filters${searchFacets.length > 0 ? ` (${searchFacets.length})` : ''}`}\n tone=\"primary\"\n />\n\n {/* Tags button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowTagsDialog}\n text={`Tags`}\n tone=\"primary\"\n />\n\n {/* Folders button (small) */}\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleShowFoldersDialog}\n text=\"Folders\"\n tone=\"primary\"\n />\n </Inline>\n </Box>\n </Flex>\n </Flex>\n </Box>\n\n <Box>\n <Flex align=\"center\" justify={['space-between']}>\n {/* Folders + Views */}\n <Box marginX={2}>\n <Inline gap={2} style={{whiteSpace: 'nowrap'}}>\n <Box display={['none', 'none', 'block']}>\n <Button\n aria-label=\"Toggle folders panel\"\n fontSize={1}\n icon={FolderIcon}\n mode={foldersPanelVisible ? 'default' : 'ghost'}\n onClick={toggleFoldersPanel}\n />\n </Box>\n <ButtonViewGroup />\n </Inline>\n </Box>\n\n <Flex marginX={2}>\n {/* Orders */}\n <OrderSelect />\n {/* Tags panel toggle */}\n <Box display={['none', 'none', 'block']} marginLeft={2}>\n <Button\n fontSize={1}\n icon={\n <Box style={{transform: 'scale(0.75)'}}>\n <TagIcon />\n </Box>\n }\n onClick={toggleTagsPanelToggle}\n mode={tagsPanelVisible ? 'default' : 'ghost'}\n text={tagsPanelVisible ? 'Tags' : ''}\n />\n </Box>\n </Flex>\n </Flex>\n </Box>\n\n {/* Progress bar */}\n <Progress key={pageIndex} loading={fetching} />\n </Box>\n )\n}\n\nexport default Controls\n","import {PlugIcon} from '@sanity/icons/Plug'\nimport {Box, Flex, Switch, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {type ChangeEvent} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {debugActions} from '../../modules/debug'\n\nconst DebugControls = () => {\n // Redux\n const dispatch = useDispatch()\n const badConnection = useTypedSelector((state) => state.debug.badConnection)\n const debugEnabled = useTypedSelector((state) => state.debug.enabled)\n\n // Callbacks\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n\n dispatch(debugActions.setBadConnection(checked))\n }\n\n const handleToggleControls = () => {\n dispatch(debugActions.toggleEnabled())\n }\n\n // Close on escape key press\n useKeyPress('alt+ctrl+shift+/', handleToggleControls)\n\n if (!debugEnabled) {\n return null\n }\n\n return (\n <Box\n padding={4}\n style={{\n bottom: 0,\n left: 0,\n pointerEvents: 'none',\n position: 'fixed',\n width: '100%',\n }}\n >\n {/* Bad connection toggle */}\n <Flex align=\"center\">\n <Box marginRight={3}>\n <Text muted size={1}>\n <PlugIcon />\n </Text>\n </Box>\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {badConnection\n ? 'Bad connection: +3000ms & 50% chance to fail'\n : 'No connection throttling'}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={badConnection}\n onChange={handleChange}\n style={{\n pointerEvents: 'auto',\n }}\n />\n </Tooltip>\n </Flex>\n </Box>\n )\n}\n\nexport default DebugControls\n","import {Box, Button, Inline, Text} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {foldersActions, selectCurrentFolderSegments} from '../../modules/folders'\n\nconst FolderBreadcrumbs = () => {\n const dispatch = useDispatch()\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const segments = useTypedSelector(selectCurrentFolderSegments)\n\n if (!currentFolderId) {\n return null\n }\n\n return (\n <Box display={['block', 'block', 'none']} padding={2}>\n <Inline gap={1}>\n <Button\n fontSize={1}\n padding={2}\n mode=\"bleed\"\n onClick={() => dispatch(foldersActions.currentFolderClear())}\n text=\"All assets\"\n />\n\n {segments.map((segment) => (\n <Inline key={segment.id} gap={1}>\n <Text muted size={1}>\n /\n </Text>\n <Button\n fontSize={1}\n padding={2}\n mode={currentFolderId === segment.id ? 'default' : 'bleed'}\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId: segment.id}))}\n text={segment.name}\n />\n </Inline>\n ))}\n </Inline>\n </Box>\n )\n}\n\nexport default FolderBreadcrumbs\n","import {Box} from '@sanity/ui'\n\nimport {FOLDERS_PANEL_WIDTH} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport FolderView from '../FolderView'\n\nconst FolderPanel = () => {\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n\n if (!foldersPanelVisible) {\n return null\n }\n\n return (\n <Box\n style={{\n position: 'relative',\n width: FOLDERS_PANEL_WIDTH,\n }}\n >\n <Box\n className=\"media__custom-scrollbar\"\n style={{\n borderRight: '1px solid var(--card-border-color)',\n height: '100%',\n left: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'absolute',\n top: 0,\n width: '100%',\n }}\n >\n <FolderView />\n </Box>\n </Box>\n )\n}\n\nexport default FolderPanel\n","import {type ReactNode, createContext, useContext, useMemo} from 'react'\n\ntype ContextProps = {\n open: () => void\n}\n\ntype Props = {\n children: ReactNode\n open: () => void\n}\n\nconst DropzoneDispatchContext = createContext<ContextProps | undefined>(undefined)\n\nexport const DropzoneDispatchProvider = (props: Props) => {\n const {children, open} = props\n\n const contextValue: ContextProps = useMemo(() => ({open}), [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 {ArrowRightIcon} from '@sanity/icons/ArrowRight'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button, Flex, Inline, Text} from '@sanity/ui'\nimport pluralize from 'pluralize'\n\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport {useDropzoneActions} from '../../contexts/DropzoneDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\n\ntype Props = {\n onClose?: () => void\n}\n\nconst Header = (props: Props) => {\n const {onClose} = props\n\n const {open} = useDropzoneActions()\n const {onSelect} = useAssetSourceActions()\n\n // Redux\n const assetTypes = useTypedSelector((state) => state.assets.assetTypes)\n const selectedDocument = useTypedSelector((state) => state.selected.document)\n\n const {directUploads} = useToolOptions()\n\n // Row: Current document / close button\n return (\n <Box paddingY={2}>\n <Flex align=\"center\" justify=\"space-between\">\n {/* Label */}\n <Box flex={1} marginX={3}>\n <Inline style={{whiteSpace: 'nowrap'}}>\n <Text textOverflow=\"ellipsis\" weight=\"semibold\">\n <span>{onSelect ? `Insert ${assetTypes.join(' or ')}` : 'Browse Assets'}</span>\n </Text>\n\n {selectedDocument && (\n <Box display={['none', 'none', 'block']}>\n <Text>\n <span style={{margin: '0 0.5em'}}>\n <ArrowRightIcon />\n </span>\n <span style={{textTransform: 'capitalize'}}>{selectedDocument._type}</span>\n </Text>\n </Box>\n )}\n </Inline>\n </Box>\n\n <Flex marginX={2}>\n {/* Upload */}\n {directUploads && (\n <Button\n fontSize={1}\n icon={UploadIcon}\n mode=\"bleed\"\n onClick={open}\n text={`Upload ${assetTypes.length === 1 ? pluralize(assetTypes[0]!) : 'assets'}`}\n />\n )}\n\n {/* Close */}\n {onClose && (\n <Box style={{flexShrink: 0}}>\n <Button\n disabled={!onClose}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onClose}\n radius={2}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n </Box>\n )\n}\n\nexport default Header\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {ChevronUpIcon} from '@sanity/icons/ChevronUp'\nimport {Box, Label} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\n\ntype Props = {\n field?: string\n title?: string\n}\n\nconst TableHeaderItem = (props: 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\nexport default TableHeaderItem\n","import {Checkbox, Flex, Grid, type ThemeColorSchemeKey, useMediaIndex} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS, PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetsLength, selectAssetsPickedLength} from '../../modules/assets'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport TableHeaderItem from '../TableHeaderItem'\n\n// TODO: DRY\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\nconst TableHeader = () => {\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', // TODO: consider alternative for usability\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\nexport default TableHeader\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {EditIcon} from '@sanity/icons/Edit'\nimport {WarningFilledIcon} from '@sanity/icons/WarningFilled'\nimport {\n Box,\n Checkbox,\n Container,\n Flex,\n Grid,\n Spinner,\n Text,\n type ThemeColorSchemeKey,\n useMediaIndex,\n} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {formatRelative} from 'date-fns/formatRelative'\nimport filesize from 'filesize'\nimport {\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 {WithReferringDocuments, useColorSchemeValue} from 'sanity'\nimport {styled, css} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetById} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport getAssetResolution from '../../utils/getAssetResolution'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport {getUniqueDocuments} from '../../utils/getUniqueDocuments'\nimport imageDprUrl from '../../utils/imageDprUrl'\nimport {isFileAsset, isImageAsset} from '../../utils/typeGuards'\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 Props = {\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 ${\n !$updating &&\n css`\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${getSchemeColor($scheme, 'bg')};\n }\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\nconst StyledWarningIcon = styled(WarningFilledIcon)(({theme}) => {\n return {\n color: theme.sanity.color.spot.red,\n }\n})\n\nconst TableRowAsset = (props: 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 asset = item?.asset\n const error = item?.error\n const isOpaque = item?.asset?.metadata?.isOpaque\n const picked = item?.picked\n const updating = item?.updating\n\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n const handleContextActionClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (selected) return\n if (onSelect && !isMultiSelect) {\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, isMultiSelect, lastPicked, onSelect, picked, selected, shiftPressed],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n if (!asset) return\n if (selected) return\n if (onSelect && !isMultiSelect) {\n onSelect([{kind: 'assetDocumentId', value: asset._id}])\n } else if (onSelect && isMultiSelect) {\n 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 } 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, isMultiSelect, lastPicked, onSelect, picked, selected, 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 && !isMultiSelect ? (\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', // TODO: consider alternative for usability\n transform: 'scale(0.8)',\n }}\n />\n )}\n </ContextActionContainer>\n\n {/* Preview image + spinner */}\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 {isFileAsset(asset) && <FileIcon extension={asset.extension} width=\"40px\" />}\n\n {/* Image */}\n {isImageAsset(asset) && (\n <Image\n draggable={false}\n $scheme={scheme}\n $showCheckerboard={!isOpaque}\n src={imageDprUrl(asset, {height: 100, width: 100})}\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 {isImageAsset(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 {/* TODO: DRY */}\n {/* Error button */}\n {error && (\n <Box 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 <StyledWarningIcon color=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </Flex>\n </ContainerGrid>\n )\n}\n\nexport default memo(TableRowAsset)\n","import {Box, Flex, Grid, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport {foldersActions} from '../../modules/folders'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\n\ntype Props = {\n folderId: string\n name: string\n totalCount: number\n}\n\nconst ContainerGrid = styled(Grid)(\n ({theme}) => css`\n align-items: center;\n cursor: pointer;\n height: 100%;\n user-select: none;\n white-space: nowrap;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${theme.sanity.color.card.enabled.bg};\n }\n }\n `,\n)\n\nconst FolderBadge = styled(Box)(\n ({theme}) => css`\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 6px;\n height: 42px;\n position: relative;\n width: 52px;\n\n &::before {\n background: ${theme.sanity.color.spot.yellow};\n border-radius: 6px 6px 0 0;\n content: '';\n height: 12px;\n left: 0;\n position: absolute;\n top: -6px;\n width: 18px;\n }\n `,\n)\n\nconst TableRowFolder = ({folderId, name, totalCount}: Props) => {\n const dispatch = useDispatch()\n const mediaIndex = useMediaIndex()\n const scheme = useColorSchemeValue()\n\n return (\n <ContainerGrid\n onClick={() => dispatch(foldersActions.currentFolderSet({folderId}))}\n style={{\n background: getSchemeColor(scheme, 'bg'),\n gridColumnGap: mediaIndex < 3 ? 0 : '16px',\n gridTemplateColumns:\n mediaIndex < 3 ? GRID_TEMPLATE_COLUMNS.SMALL : GRID_TEMPLATE_COLUMNS.LARGE,\n gridTemplateRows: mediaIndex < 3 ? 'auto' : '1fr',\n }}\n >\n <Box />\n <Flex align=\"center\" justify=\"center\" style={{gridColumn: 2, height: '90px', width: '100px'}}>\n <FolderBadge />\n </Flex>\n <Box\n marginLeft={mediaIndex < 3 ? 3 : 0}\n style={{gridColumn: mediaIndex < 3 ? 3 : 3, gridRow: mediaIndex < 3 ? '2/4' : 'auto'}}\n >\n <Stack gap={2}>\n <Text size={1} style={{lineHeight: '1.2em'}} textOverflow=\"ellipsis\" weight=\"semibold\">\n {name}\n </Text>\n <Text muted size={0} style={{lineHeight: '1.1em'}}>\n Folder\n </Text>\n </Stack>\n </Box>\n <Box style={{display: mediaIndex < 3 ? 'none' : 'block', gridColumn: 7}}>\n <Text muted size={1}>\n {totalCount} item{totalCount === 1 ? '' : 's'}\n </Text>\n </Box>\n <Box style={{display: mediaIndex < 3 ? 'none' : 'block', gridColumn: 8}}>\n <Text muted size={1}>\n Open folder\n </Text>\n </Box>\n <Box />\n </ContainerGrid>\n )\n}\n\nexport default TableRowFolder\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {Box, Button, Flex, Grid, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport filesize from 'filesize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {GRID_TEMPLATE_COLUMNS} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {selectUploadById, uploadsActions} from '../../modules/uploads'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport FileIcon from '../FileIcon'\nimport Image from '../Image'\n\ntype Props = {\n id: string\n}\n\nconst TableRowUpload = (props: 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 const mediaIndex = useMediaIndex()\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 <Grid\n style={{\n alignItems: 'center',\n background: getSchemeColor(scheme, 'bg'),\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 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 {/* Image */}\n <Box\n style={{\n gridColumn: 2,\n gridRowStart: mediaIndex < 3 ? 1 : 'auto',\n gridRowEnd: mediaIndex < 3 ? 'span 4' : 'auto',\n height: '90px',\n width: '100px',\n }}\n >\n <Box style={{height: '100%', position: 'relative'}}>\n {item.assetType === 'image' && item?.objectUrl && (\n <Image\n draggable={false}\n $scheme={scheme}\n src={item.objectUrl}\n style={{opacity: 0.25}}\n />\n )}\n\n {item.assetType === 'file' && (\n <div style={{height: '100%', opacity: 0.1}}>\n <FileIcon width=\"40px\" />\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 justify=\"center\"\n style={{\n position: 'absolute',\n height: '100%',\n left: 0,\n top: 0,\n width: '100%',\n }}\n >\n <Button\n fontSize={3}\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 </Box>\n\n {/* Filename */}\n <Box\n style={{\n gridColumn: mediaIndex < 3 ? 3 : '3/8',\n gridRow: mediaIndex < 3 ? '2/4' : 'auto',\n marginLeft: mediaIndex < 3 ? 3 : 0,\n }}\n >\n <Stack gap={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {item.name} ({fileSize})\n </Text>\n <Text size={1} textOverflow=\"ellipsis\" weight=\"semibold\">\n {status}\n </Text>\n </Stack>\n </Box>\n </Grid>\n )\n}\n\nexport default TableRowUpload\n","import {Box} from '@sanity/ui'\nimport {memo} from 'react'\nimport {GroupedVirtuoso} from 'react-virtuoso'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport type {CardAssetData, CardFolderData, CardUploadData} from '../../types'\nimport TableHeader from '../TableHeader'\nimport TableRowAsset from '../TableRowAsset'\nimport TableRowFolder from '../TableRowFolder'\nimport TableRowUpload from '../TableRowUpload'\n\ntype Props = {\n items: (CardAssetData | CardFolderData | CardUploadData)[]\n onLoadMore?: () => void\n}\n\nconst VirtualRow = memo(\n ({\n item,\n selected,\n }: {\n item: CardAssetData | CardFolderData | CardUploadData\n selected: boolean\n }) => {\n if (item?.type === 'asset') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowAsset id={item.id} selected={selected} />\n </Box>\n )\n }\n\n if (item?.type === 'folder') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowFolder folderId={item.folderId} name={item.name} totalCount={item.totalCount} />\n </Box>\n )\n }\n\n if (item?.type === 'upload') {\n return (\n <Box style={{height: '100px'}}>\n <TableRowUpload id={item.id} />\n </Box>\n )\n }\n\n return null\n },\n)\n\nconst AssetTableVirtualized = (props: 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 <GroupedVirtuoso\n className=\"media__custom-scrollbar\"\n computeItemKey={(index) => {\n const item = items[index]\n return item?.id || index\n }}\n endReached={onLoadMore}\n groupCounts={Array(1).fill(totalCount)}\n groupContent={() => {\n return <TableHeader />\n }}\n itemContent={(index) => {\n const item = items[index]\n const selected = selectedIds.includes(item?.id || '')\n return <VirtualRow item={item!} selected={selected} />\n }}\n style={{overflowX: 'hidden'}}\n />\n )\n}\n\nexport default AssetTableVirtualized\n","import {Box, Text, useMediaIndex} from '@sanity/ui'\nimport {useEffect} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {selectCombinedItems} from '../../modules/selectors'\nimport {tagsActions} from '../../modules/tags'\nimport AssetGridVirtualized from '../AssetGridVirtualized'\nimport AssetTableVirtualized from '../AssetTableVirtualized'\n\nconst Items = () => {\n // Redux\n const dispatch = useDispatch()\n const fetchCount = useTypedSelector((state) => state.assets.fetchCount)\n const fetching = useTypedSelector((state) => state.assets.fetching)\n const foldersPanelVisible = useTypedSelector((state) => state.folders.panelVisible)\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n const view = useTypedSelector((state) => state.assets.view)\n const combinedItems = useTypedSelector(selectCombinedItems)\n\n const mediaIndex = useMediaIndex()\n\n const hasFetchedOnce = fetchCount >= 0\n const hasItems = combinedItems.length > 0\n\n // Only load 1 page of items at a time.\n const handleLoadMoreItems = () => {\n if (!fetching) {\n dispatch(assetsActions.loadNextPage())\n }\n }\n\n // Effects\n\n // - Hide folders/tags panels on smaller breakpoints\n useEffect(() => {\n if (mediaIndex <= 1 && foldersPanelVisible) {\n dispatch(foldersActions.panelVisibleSet({panelVisible: false}))\n }\n\n if (mediaIndex <= 1 && tagsPanelVisible) {\n dispatch(tagsActions.panelVisibleSet({panelVisible: false}))\n }\n }, [dispatch, foldersPanelVisible, mediaIndex, tagsPanelVisible])\n\n const isEmpty = !hasItems && hasFetchedOnce && !fetching\n\n return (\n <Box flex={1} style={{width: '100%'}}>\n {isEmpty ? (\n <Box padding={4}>\n <Text size={1} weight=\"semibold\">\n No results for the current query\n </Text>\n </Box>\n ) : (\n <>\n {view === 'grid' && (\n <AssetGridVirtualized items={combinedItems} onLoadMore={handleLoadMoreItems} />\n )}\n\n {view === 'table' && (\n <AssetTableVirtualized items={combinedItems} onLoadMore={handleLoadMoreItems} />\n )}\n </>\n )}\n </Box>\n )\n}\n\nexport default Items\n","import {Box, Button, Flex, Label} from '@sanity/ui'\nimport pluralize from 'pluralize'\nimport {useDispatch} from 'react-redux'\nimport {useColorSchemeValue} from 'sanity'\n\nimport {PANEL_HEIGHT} from '../../constants'\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {assetsActions, selectAssetsPicked} from '../../modules/assets'\nimport {dialogActions} from '../../modules/dialog'\nimport {DIALOG_ACTIONS} from '../../modules/dialog/actions'\nimport {getSchemeColor} from '../../utils/getSchemeColor'\nimport {isImageAsset} from '../../utils/typeGuards'\n\nconst PickedBar = () => {\n const scheme = useColorSchemeValue()\n\n // Redux\n const dispatch = useDispatch()\n const assetsPicked = useTypedSelector(selectAssetsPicked)\n const currentFolderId = useTypedSelector((state) => state.folders.currentFolderId)\n const {isMultiSelect, onSelect} = useAssetSourceActions()\n\n // Replace only rewrites image field refs — only offer it for a single image asset.\n const canReplace =\n assetsPicked.length === 1 && !!assetsPicked[0] && isImageAsset(assetsPicked[0].asset)\n\n // Callbacks\n const handlePickClear = () => {\n dispatch(assetsActions.pickClear())\n }\n\n const handleDeletePicked = () => {\n dispatch(dialogActions.showConfirmDeleteAssets({assets: assetsPicked}))\n }\n\n const handleReplaceImages = () => {\n const assetId = assetsPicked[0]?.asset._id\n if (!assetId) {\n return\n }\n dispatch(dialogActions.showAllAssetsDialog({assetId}))\n }\n\n const handleMovePicked = () =>\n dispatch(DIALOG_ACTIONS.showFolderMove({assets: assetsPicked, folderId: currentFolderId}))\n\n const handleRemovePickedFromFolder = () =>\n dispatch(assetsActions.folderSetRequest({assets: assetsPicked, folderId: null}))\n\n const handleInsertPicked = () => {\n if (!onSelect) {\n return\n }\n\n const pickedAssetIds = assetsPicked.map((item) => ({\n kind: 'assetDocumentId' as const,\n value: item.asset._id,\n }))\n\n if (pickedAssetIds.length === 0) {\n return\n }\n\n onSelect(pickedAssetIds)\n }\n\n if (assetsPicked.length === 0) {\n return null\n }\n\n return (\n <Flex\n align=\"center\"\n justify=\"flex-start\"\n style={{\n background: getSchemeColor(scheme, 'bg'),\n borderBottom: '1px solid var(--card-border-color)',\n height: `${PANEL_HEIGHT}px`,\n position: 'relative',\n width: '100%',\n }}\n >\n <Flex align=\"center\" paddingX={3}>\n <Box paddingRight={2}>\n <Label size={0} style={{color: 'inherit'}}>\n {assetsPicked.length} {pluralize('asset', assetsPicked.length)} selected\n </Label>\n </Box>\n\n {/* Deselect button */}\n <Button\n mode=\"bleed\"\n onClick={handlePickClear}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"default\"\n >\n <Label size={0}>Deselect</Label>\n </Button>\n\n {onSelect && isMultiSelect ? (\n <Button\n mode=\"bleed\"\n onClick={handleInsertPicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"primary\"\n >\n <Label size={0}>Insert selected</Label>\n </Button>\n ) : (\n <Button\n mode=\"bleed\"\n onClick={handleDeletePicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n >\n <Label size={0}>Delete</Label>\n </Button>\n )}\n\n {/* Replace button */}\n {canReplace && (\n <Button\n mode=\"bleed\"\n onClick={handleReplaceImages}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"default\"\n >\n <Label size={0}>Replace</Label>\n </Button>\n )}\n\n {!onSelect && (\n <>\n <Button\n mode=\"bleed\"\n onClick={handleMovePicked}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"primary\"\n >\n <Label size={0}>Move to folder</Label>\n </Button>\n {currentFolderId && (\n <Button\n mode=\"bleed\"\n onClick={handleRemovePickedFromFolder}\n padding={2}\n style={{background: 'none', boxShadow: 'none'}}\n tone=\"critical\"\n >\n <Label size={0}>Remove from folder</Label>\n </Button>\n )}\n </>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default PickedBar\n","import {Box} from '@sanity/ui'\n\nimport {TAGS_PANEL_WIDTH} from '../../constants'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport TagView from '../TagView'\n\nconst TagsPanel = () => {\n const tagsPanelVisible = useTypedSelector((state) => state.tags.panelVisible)\n\n if (!tagsPanelVisible) {\n return null\n }\n\n return (\n <Box\n style={{\n position: 'relative',\n width: TAGS_PANEL_WIDTH,\n }}\n >\n <Box\n className=\"media__custom-scrollbar\"\n style={{\n borderLeft: '1px solid var(--card-border-color)',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '100%',\n }}\n >\n <TagView />\n </Box>\n </Box>\n )\n}\n\nexport default TagsPanel\n","import {white} from '@sanity/color'\nimport {Flex, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {type DropEvent, type DropzoneOptions, useDropzone} from 'react-dropzone'\nimport {useDispatch} from 'react-redux'\nimport {styled} from 'styled-components'\n\nimport {useAssetSourceActions} from '../../contexts/AssetSourceDispatchContext'\nimport {DropzoneDispatchProvider} from '../../contexts/DropzoneDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useTypedSelector from '../../hooks/useTypedSelector'\nimport {notificationsActions} from '../../modules/notifications'\nimport {uploadsActions} from '../../modules/uploads'\n\ntype Props = {\n children: ReactNode\n}\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 // do nothing: file is a package or folder\n }\n }\n\n return filteredFiles\n}\n\nconst UploadDropzone = (props: Props) => {\n const {children} = props\n\n const {\n dropzone: {maxSize},\n directUploads,\n } = useToolOptions()\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] === '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 maxSize,\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\nexport default UploadDropzone\n","import type {MutationEvent, SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {useEffect} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport type {Dispatch} from 'redux'\nimport type {AssetSourceComponentProps} from 'sanity'\n\nimport {inputs} from '../../config/searchFacets'\nimport {FOLDER_DOCUMENT_NAME, TAG_DOCUMENT_NAME} from '../../constants'\nimport {assetsActions} from '../../modules/assets'\nimport {foldersActions} from '../../modules/folders'\nimport {searchActions} from '../../modules/search'\nimport {tagsActions} from '../../modules/tags'\nimport type {RootReducerState} from '../../modules/types'\nimport type {Asset, Tag} from '../../types'\n\nfunction getMediaTagNames(schemaType?: AssetSourceComponentProps['schemaType']): string[] {\n const mediaTags = (schemaType?.options as {mediaTags?: string[]} | undefined)?.mediaTags\n if (!mediaTags?.length) return []\n const unique = new Set(\n mediaTags.map((t) => t?.trim()).filter((t): t is string => Boolean(t?.length)),\n )\n return Array.from(unique)\n}\n\nfunction createAssetHandler(dispatch: Dispatch) {\n return (update: MutationEvent) => {\n const {documentId, result, transition} = update\n\n switch (transition) {\n case 'appear':\n dispatch(assetsActions.listenerCreateQueue({asset: result as Asset}))\n break\n case 'disappear':\n dispatch(assetsActions.listenerDeleteQueue({assetId: documentId}))\n break\n case 'update':\n dispatch(assetsActions.listenerUpdateQueue({asset: result as Asset}))\n break\n default:\n break\n }\n }\n}\n\nfunction createTagHandler(dispatch: Dispatch) {\n return (update: MutationEvent) => {\n const {documentId, result, transition} = update\n\n switch (transition) {\n case 'appear':\n dispatch(tagsActions.listenerCreateQueue({tag: result as Tag}))\n break\n case 'disappear':\n dispatch(tagsActions.listenerDeleteQueue({tagId: documentId}))\n break\n case 'update':\n dispatch(tagsActions.listenerUpdateQueue({tag: result as Tag}))\n break\n default:\n break\n }\n }\n}\n\nexport function useBrowserInit(\n client: SanityClient,\n schemaType?: AssetSourceComponentProps['schemaType'],\n): void {\n const dispatch = useDispatch()\n const tagsByIds = useSelector((state: RootReducerState) => state.tags.byIds)\n const tagsFetchCount = useSelector((state: RootReducerState) => state.tags.fetchCount)\n\n const tagNames = getMediaTagNames(schemaType)\n const hasMediaTags = tagNames.length > 0\n\n useEffect(() => {\n if (!hasMediaTags) {\n dispatch(searchActions.facetsClear())\n }\n\n dispatch(tagsActions.fetchRequest())\n\n // Fetch all folders\n dispatch(foldersActions.fetchRequest())\n\n const assetSubscription = client\n .listen(\n groq`*[_type in [\"sanity.fileAsset\", \"sanity.imageAsset\"] && !(_id in path(\"drafts.**\"))]`,\n )\n .subscribe(createAssetHandler(dispatch))\n\n const tagSubscription = client\n .listen(groq`*[_type == \"${TAG_DOCUMENT_NAME}\" && !(_id in path(\"drafts.**\"))]`)\n .subscribe(createTagHandler(dispatch))\n\n const folderSubscription = client\n .listen(groq`*[_type == \"${FOLDER_DOCUMENT_NAME}\" && !(_id in path(\"drafts.**\"))]`)\n .subscribe(() => dispatch(foldersActions.fetchRequest()))\n\n return () => {\n assetSubscription.unsubscribe()\n tagSubscription.unsubscribe()\n folderSubscription.unsubscribe()\n }\n }, [client, dispatch, hasMediaTags])\n\n // When mediaTags are configured, wait for the tag fetch to complete then apply facets.\n // Dispatching clear + add synchronously keeps all actions within assetsSearchEpic's\n // 400ms debounce window, so the browser performs exactly one asset fetch on open.\n useEffect(() => {\n if (!hasMediaTags || tagsFetchCount < 0) return\n\n const tagFacetInput = inputs.tag\n if (tagFacetInput.type !== 'searchable') return\n\n const resolvedTags = tagNames\n .map((name) => Object.values(tagsByIds).find((item) => item.tag.name.current === name))\n .filter((item): item is NonNullable<typeof item> => Boolean(item))\n\n dispatch(searchActions.facetsClear())\n\n for (const tagItem of resolvedTags) {\n dispatch(\n searchActions.facetsAdd({\n facet: {\n ...tagFacetInput,\n operatorType: 'references',\n value: {label: tagItem.tag.name.current, value: tagItem.tag._id},\n },\n }),\n )\n }\n }, [tagsFetchCount, hasMediaTags]) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import {Card, Flex, PortalProvider} from '@sanity/ui'\nimport {useState} from 'react'\nimport {type AssetSourceComponentProps, type SanityDocument} from 'sanity'\n\nimport {AssetBrowserDispatchProvider} from '../../contexts/AssetSourceDispatchContext'\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport GlobalStyle from '../../styled/GlobalStyles'\nimport Controls from '../Controls'\nimport DebugControls from '../DebugControls'\nimport Dialogs from '../Dialogs'\nimport FolderBreadcrumbs from '../FolderBreadcrumbs'\nimport FolderPanel from '../FolderPanel'\nimport Header from '../Header'\nimport Items from '../Items'\nimport Notifications from '../Notifications'\nimport PickedBar from '../PickedBar'\nimport ReduxProvider from '../ReduxProvider'\nimport TagsPanel from '../TagsPanel'\nimport UploadDropzone from '../UploadDropzone'\nimport {useBrowserInit} from './useBrowserInit'\n\ntype Props = {\n assetType?: AssetSourceComponentProps['assetType']\n document?: SanityDocument\n isMultiSelect?: boolean\n onClose?: AssetSourceComponentProps['onClose']\n onSelect?: AssetSourceComponentProps['onSelect']\n selectedAssets?: AssetSourceComponentProps['selectedAssets']\n schemaType?: AssetSourceComponentProps['schemaType']\n}\n\nconst BrowserContent = ({\n onClose,\n schemaType,\n}: {\n onClose?: AssetSourceComponentProps['onClose']\n schemaType?: AssetSourceComponentProps['schemaType']\n}) => {\n const client = useVersionedClient()\n const [portalElement, setPortalElement] = useState<HTMLDivElement | null>(null)\n\n useBrowserInit(client, schemaType)\n\n return (\n <PortalProvider element={portalElement}>\n <UploadDropzone>\n <Dialogs />\n <Notifications />\n\n <Card data-testid=\"media-browser\" display=\"flex\" height=\"fill\" ref={setPortalElement}>\n <Flex direction=\"column\" flex={1}>\n {/* Header */}\n <Header onClose={onClose} />\n\n {/* Browser Controls */}\n <Controls />\n\n <FolderBreadcrumbs />\n\n <Flex flex={1}>\n <FolderPanel />\n <Flex align=\"flex-end\" direction=\"column\" flex={1} style={{position: 'relative'}}>\n <PickedBar />\n <Items />\n </Flex>\n <TagsPanel />\n </Flex>\n\n {/* Debug */}\n <DebugControls />\n </Flex>\n </Card>\n </UploadDropzone>\n </PortalProvider>\n )\n}\n\nconst Browser = (props: Props) => {\n const client = useVersionedClient()\n const {excludeTagSlugs} = useToolOptions()\n\n return (\n <ReduxProvider\n assetType={props?.assetType}\n client={client}\n document={props?.document}\n excludeTagSlugs={excludeTagSlugs}\n selectedAssets={props?.selectedAssets}\n >\n <AssetBrowserDispatchProvider isMultiSelect={props?.isMultiSelect} onSelect={props?.onSelect}>\n <GlobalStyle />\n <BrowserContent onClose={props?.onClose} schemaType={props?.schemaType} />\n </AssetBrowserDispatchProvider>\n </ReduxProvider>\n )\n}\n\nexport default Browser\n","import {Box, Portal, PortalProvider, useLayer} from '@sanity/ui'\nimport {type SyntheticEvent} from 'react'\nimport {type AssetSourceComponentProps, type SanityDocument, useFormValue} from 'sanity'\n\nimport useKeyPress from '../../hooks/useKeyPress'\nimport useRootPortalElement from '../../hooks/useRootPortalElement'\nimport Browser from '../Browser'\n\nconst FormBuilderTool = (props: AssetSourceComponentProps) => {\n const {onClose} = props\n\n const portalElement = useRootPortalElement()\n\n // Get current Sanity document\n const currentDocument = useFormValue([]) as SanityDocument\n const selectionType = (props as unknown as {selectionType?: string})?.selectionType\n const schemaJsonType = (props?.schemaType as {jsonType?: string} | undefined)?.jsonType\n const isMultiSelect = selectionType === 'multiple' || schemaJsonType === 'array'\n\n // Close on escape key press\n useKeyPress('escape', onClose)\n\n // Stop propagation and prevent document mouse events from firing.\n // This is a bit of a hack to make this work with `editModal = 'popover'` and prevent Sanity's <Popover /> component from\n // prematurely closing, as it attaches events on `document` to detect outside clicks.\n const handleStopPropagation = (event: SyntheticEvent) => {\n event.nativeEvent.stopImmediatePropagation()\n event.stopPropagation()\n }\n\n const {zIndex} = useLayer()\n\n return (\n <PortalProvider element={portalElement}>\n <Portal>\n <Box\n onDragEnter={handleStopPropagation}\n onDragLeave={handleStopPropagation}\n onDragOver={handleStopPropagation}\n onDrop={handleStopPropagation}\n onMouseUp={handleStopPropagation}\n style={{\n bottom: 0,\n height: 'auto',\n left: 0,\n position: 'fixed',\n top: 0,\n width: '100%',\n zIndex,\n }}\n >\n <Browser\n document={currentDocument}\n isMultiSelect={isMultiSelect}\n schemaType={props.schemaType}\n {...props}\n />\n </Box>\n </Portal>\n </PortalProvider>\n )\n}\n\nexport default FormBuilderTool\n","import {Flex} from '@sanity/ui'\n\nimport Browser from '../Browser'\n\nconst Tool = () => {\n return (\n <Flex direction=\"column\" height=\"fill\" flex={1}>\n <Browser />\n </Flex>\n )\n}\n\nexport default Tool\n","import {FolderIcon} from '@sanity/icons/Folder'\n\nimport {FOLDER_DOCUMENT_NAME} from '../constants'\n\nexport default {\n title: 'Media Folder',\n icon: FolderIcon,\n name: FOLDER_DOCUMENT_NAME,\n type: 'document',\n fields: [\n {\n title: 'Name',\n name: 'name',\n type: 'string',\n },\n {\n title: 'Parent',\n name: 'parent',\n type: 'reference',\n to: [{type: FOLDER_DOCUMENT_NAME}],\n weak: true,\n },\n ],\n preview: {\n select: {\n name: 'name',\n parentName: 'parent.name',\n },\n prepare(selection: {name?: string; parentName?: string}): {\n media: typeof FolderIcon\n subtitle?: string\n title: string\n } {\n const {name, parentName} = selection\n return {\n media: FolderIcon,\n title: name || 'Folder',\n subtitle: parentName ? `in ${parentName}` : undefined,\n }\n },\n },\n}\n","import TagIcon from '../components/TagIcon'\nimport {TAG_DOCUMENT_NAME} from '../constants'\n\nexport default {\n title: 'Media Tag',\n icon: TagIcon,\n name: TAG_DOCUMENT_NAME,\n type: 'document',\n fields: [\n {\n title: 'Name',\n name: 'name',\n type: 'slug',\n },\n ],\n preview: {\n select: {\n name: 'name',\n },\n prepare(selection: any) {\n const {name} = selection\n return {\n media: TagIcon,\n title: name?.current,\n }\n },\n },\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {ImageIcon} from '@sanity/icons/Image'\nimport {type AssetSource, type Tool as SanityTool, definePlugin} from 'sanity'\n\nimport EditAssetTool from './components/EditAssetTool'\nimport FormBuilderTool from './components/FormBuilderTool'\nimport Tool from './components/Tool'\nimport {ToolOptionsProvider} from './contexts/ToolOptionsContext'\nimport mediaFolder from './schemas/folder'\nimport mediaTag from './schemas/tag'\nimport type {MediaToolOptions} from './types'\n\nconst plugin = {\n icon: ImageIcon,\n name: 'media',\n title: 'Media',\n}\n\nexport const mediaAssetSource = {\n ...plugin,\n component: FormBuilderTool,\n} satisfies AssetSource\n\nconst editMediaAssetSource = {\n icon: EditIcon,\n name: 'edit-media',\n title: 'Edit Media',\n component: EditAssetTool,\n} satisfies AssetSource\n\nconst tool = {\n ...plugin,\n component: Tool,\n __internalApplicationType: 'sanity/media',\n} satisfies SanityTool\n\nexport const media = definePlugin<MediaToolOptions | void>((options) => ({\n name: 'media',\n studio: {\n components: {\n layout: (props) => (\n <ToolOptionsProvider options={options}>{props.renderDefault(props)}</ToolOptionsProvider>\n ),\n },\n },\n form: {\n file: {\n assetSources: (prev) => {\n return [...prev, mediaAssetSource, editMediaAssetSource]\n },\n },\n image: {\n assetSources: (prev) => {\n return [...prev, mediaAssetSource, editMediaAssetSource]\n },\n },\n },\n schema: {\n types: [mediaTag, mediaFolder],\n },\n tools: (prev) => {\n return [...prev, tool]\n },\n}))\n","import type {SanityClient} from '@sanity/client'\nimport groq from 'groq'\nimport {nanoid} from 'nanoid'\n\nimport {TAG_DOCUMENT_NAME} from '../constants'\nimport type {Tag} from '../types'\n\ntype ApplyMediaTagsOptions = {\n client: SanityClient\n assetId: string\n mediaTags: string[]\n createTagsOnUpload?: boolean\n}\n\n// Serialize calls per asset so concurrent fields reading the same asset\n// don't race each other — the second call always runs after the first commits.\nconst pendingByAsset = new Map<string, Promise<void>>()\n\nexport function applyMediaTags(options: ApplyMediaTagsOptions): Promise<void> {\n const {assetId} = options\n const chain = (pendingByAsset.get(assetId) ?? Promise.resolve()).then(() =>\n doApplyMediaTags(options),\n )\n const cleanup = chain\n .catch(() => {})\n .finally(() => {\n if (pendingByAsset.get(assetId) === cleanup) pendingByAsset.delete(assetId)\n })\n pendingByAsset.set(assetId, cleanup)\n return chain\n}\n\nasync function doApplyMediaTags({\n client,\n assetId,\n mediaTags,\n createTagsOnUpload = true,\n}: ApplyMediaTagsOptions): Promise<void> {\n if (!mediaTags || mediaTags.length === 0) return\n\n const resolvedTags = await Promise.all(\n mediaTags.map(async (tagName) => {\n const existingTag = await client.fetch<Tag | null>(\n groq`*[_type == \"${TAG_DOCUMENT_NAME}\" && name.current == $tagName][0]`,\n {tagName},\n )\n if (existingTag) return existingTag\n if (createTagsOnUpload) {\n const newTag = await client.create({\n _type: TAG_DOCUMENT_NAME,\n name: {_type: 'slug', current: tagName},\n })\n return newTag as Tag\n }\n return null\n }),\n )\n\n const validTags = resolvedTags.filter((tag): tag is Tag => tag !== null)\n if (validTags.length === 0) return\n\n const existing = await client.fetch<{tagIds: string[]} | null>(\n groq`*[_id == $assetId][0]{'tagIds': opt.media.tags[]._ref}`,\n {assetId},\n {useCdn: false}, // bypass CDN cache so we see the latest committed tag refs\n )\n const existingIds = new Set(existing?.tagIds ?? [])\n\n const tagReferences = validTags\n .filter((tag) => !existingIds.has(tag._id))\n .map((tag) => ({\n _key: nanoid(),\n _ref: tag._id,\n _type: 'reference' as const,\n _weak: true,\n }))\n\n if (tagReferences.length === 0) return\n\n await client\n .patch(assetId)\n .setIfMissing({opt: {}})\n .setIfMissing({'opt.media': {}})\n .setIfMissing({'opt.media.tags': []})\n .append('opt.media.tags', tagReferences)\n .commit()\n}\n","import {useToast} from '@sanity/ui/toast'\nimport {useEffect, useRef} from 'react'\nimport {type InputProps} from 'sanity'\n\nimport {useToolOptions} from '../../contexts/ToolOptionsContext'\nimport useVersionedClient from '../../hooks/useVersionedClient'\nimport {applyMediaTags} from '../../utils/applyMediaTags'\n\ntype AssetValue = {\n _type: 'image' | 'file'\n asset?: {\n _ref: string\n _type: 'reference'\n }\n}\n\nexport type AutoTagInputProps = InputProps & {\n mediaTags?: string[]\n}\n\n/**\n * Input component that automatically applies media tags when an asset is selected or uploaded.\n *\n * Apply explicitly to image/file fields that should be auto-tagged:\n * ```ts\n * import {AutoTagInput} from 'sanity-plugin-media'\n *\n * defineField({\n * type: 'image',\n * options: { mediaTags: ['product'] }, // also pre-filters the media browser\n * components: { input: AutoTagInput },\n * })\n * ```\n *\n * Pass `mediaTags` as a prop to override or use without `options`:\n * ```ts\n * components: { input: (props) => <AutoTagInput {...props} mediaTags={['product']} /> }\n * ```\n */\nexport function AutoTagInput(props: AutoTagInputProps) {\n const {renderDefault, schemaType, value, mediaTags: mediaTagsProp} = props\n const toast = useToast()\n\n // Prop takes precedence; fall back to schemaType.options.mediaTags (set for browser pre-filtering)\n const mediaTags =\n mediaTagsProp ?? (schemaType?.options as {mediaTags?: string[]} | undefined)?.mediaTags\n\n const client = useVersionedClient()\n const {createTagsOnUpload} = useToolOptions()\n\n const prevAssetRef = useRef<string | undefined>(undefined)\n const isInitialMount = useRef(true)\n\n const currentAssetRef = (value as AssetValue | undefined)?.asset?._ref\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false\n prevAssetRef.current = currentAssetRef\n return\n }\n\n const previousRef = prevAssetRef.current\n prevAssetRef.current = currentAssetRef\n\n if (!mediaTags?.length || !currentAssetRef || currentAssetRef === previousRef) return\n\n applyMediaTags({\n client,\n assetId: currentAssetRef,\n mediaTags,\n createTagsOnUpload,\n }).catch((err) => {\n console.error('[sanity-plugin-media] Failed to apply auto-tags:', err)\n const label = mediaTags.length === 1 ? 'tag' : 'tags'\n toast.push({\n closable: true,\n status: 'error',\n title: `Failed to apply the media ${label} ${mediaTags.join(', ')}`,\n })\n })\n }, [currentAssetRef, mediaTags, client, createTagsOnUpload, toast])\n\n return renderDefault(props as InputProps)\n}\n","import type {\n FieldDefinitionBase,\n FileDefinition,\n ImageDefinition,\n WidenInitialValue,\n WidenValidation,\n} from 'sanity'\n\nimport {AutoTagInput} from '../components/AutoTagInputWrapper'\n\ntype ImageMediaFieldConfig = Omit<ImageDefinition, 'options'> &\n FieldDefinitionBase & {\n name: string\n mediaTags: string[]\n options?: ImageDefinition['options']\n }\n\ntype FileMediaFieldConfig = Omit<FileDefinition, 'options'> &\n FieldDefinitionBase & {\n name: string\n mediaTags: string[]\n options?: FileDefinition['options']\n }\n\ntype ImageMediaFieldResult = Omit<ImageDefinition, 'options'> &\n FieldDefinitionBase & {\n options?: ImageDefinition['options'] & {mediaTags: string[]}\n components: {input: typeof AutoTagInput}\n } & WidenValidation &\n WidenInitialValue\n\ntype FileMediaFieldResult = Omit<FileDefinition, 'options'> &\n FieldDefinitionBase & {\n options?: FileDefinition['options'] & {mediaTags: string[]}\n components: {input: typeof AutoTagInput}\n } & WidenValidation &\n WidenInitialValue\n\n/**\n * Defines an image or file field with automatic media tag application when an asset is selected.\n *\n * Pass `mediaTags` at the top level — they are moved into `options.mediaTags` (for media browser\n * pre-filtering) and wire up {@link AutoTagInput} as the field component automatically:\n * ```ts\n * import {mediaField} from 'sanity-plugin-media'\n *\n * mediaField({\n * name: 'coverImage',\n * type: 'image',\n * mediaTags: ['product-cover'],\n * options: { hotspot: true },\n * })\n * ```\n *\n * For file fields, set `type: 'file'`:\n * ```ts\n * mediaField({ name: 'drawing', type: 'file', mediaTags: ['model-drawing'] })\n * ```\n */\nexport function mediaField(config: ImageMediaFieldConfig): ImageMediaFieldResult\nexport function mediaField(config: FileMediaFieldConfig): FileMediaFieldResult\nexport function mediaField(\n config: ImageMediaFieldConfig | FileMediaFieldConfig,\n): ImageMediaFieldResult | FileMediaFieldResult {\n const {mediaTags, options, components, ...rest} = config as ImageMediaFieldConfig & {\n components?: Record<string, unknown>\n }\n return {\n ...rest,\n options: {...options, mediaTags},\n components: {...components, input: AutoTagInput},\n } as unknown as ImageMediaFieldResult\n}\n"],"mappings":"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"}
\ No newline at end of file