sanity-plugin-mux-input 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +1 -1
  2. package/lib/_chunks/Input-4ec3c050.js +2666 -0
  3. package/lib/_chunks/Input-4ec3c050.js.map +1 -0
  4. package/lib/_chunks/Input-aa6d929b.js +2636 -0
  5. package/lib/_chunks/Input-aa6d929b.js.map +1 -0
  6. package/lib/_chunks/Preview-1664b7d5.js +28 -0
  7. package/lib/_chunks/Preview-1664b7d5.js.map +1 -0
  8. package/lib/_chunks/Preview-43ce9c72.js +26 -0
  9. package/lib/_chunks/{Preview-3195237b.js.map → Preview-43ce9c72.js.map} +1 -1
  10. package/lib/_chunks/VideoSource.styled-24577ec8.js +318 -0
  11. package/lib/_chunks/VideoSource.styled-24577ec8.js.map +1 -0
  12. package/lib/_chunks/VideoSource.styled-99ffa712.js +336 -0
  13. package/lib/_chunks/VideoSource.styled-99ffa712.js.map +1 -0
  14. package/lib/_chunks/index-9933dea2.js +264 -0
  15. package/lib/_chunks/index-9933dea2.js.map +1 -0
  16. package/lib/_chunks/index-c54f5393.js +247 -0
  17. package/lib/_chunks/index-c54f5393.js.map +1 -0
  18. package/lib/{src/index.d.ts → index.d.ts} +0 -0
  19. package/lib/index.esm.js +2 -1
  20. package/lib/index.esm.js.map +1 -1
  21. package/lib/index.js +9 -1
  22. package/lib/index.js.map +1 -1
  23. package/package.json +23 -30
  24. package/lib/_chunks/Input-2ba004d3.js +0 -2
  25. package/lib/_chunks/Input-2ba004d3.js.map +0 -1
  26. package/lib/_chunks/Input-af5a0a66.esm.js +0 -2
  27. package/lib/_chunks/Input-af5a0a66.esm.js.map +0 -1
  28. package/lib/_chunks/Preview-3195237b.js +0 -2
  29. package/lib/_chunks/Preview-bb256342.esm.js +0 -2
  30. package/lib/_chunks/Preview-bb256342.esm.js.map +0 -1
  31. package/lib/_chunks/VideoSource.styled-1b994d90.js +0 -2
  32. package/lib/_chunks/VideoSource.styled-1b994d90.js.map +0 -1
  33. package/lib/_chunks/VideoSource.styled-f92259cd.esm.js +0 -2
  34. package/lib/_chunks/VideoSource.styled-f92259cd.esm.js.map +0 -1
  35. package/lib/_chunks/index-3d8d7583.esm.js +0 -2
  36. package/lib/_chunks/index-3d8d7583.esm.js.map +0 -1
  37. package/lib/_chunks/index-efe6ce48.js +0 -2
  38. package/lib/_chunks/index-efe6ce48.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Input-2ba004d3.js","sources":["../../src/hooks/useMuxPolling.ts","../../src/hooks/useSecretsDocumentValues.ts","../../src/clients/upChunkObservable.ts","../../src/actions/assets.ts","../../src/actions/secrets.ts","../../src/actions/upload.ts","../../src/util/extractFiles.ts","../../src/components/VideoSource.tsx","../../src/components/SelectAsset.tsx","../../src/components/InputBrowser.tsx","../../src/components/EditThumbnailDialog.tsx","../../src/components/Player.styled.tsx","../../src/util/getStoryboardSrc.ts","../../src/components/UploadProgress.tsx","../../src/components/Player.tsx","../../src/util/getVideoSrc.ts","../../src/hooks/useCancelUpload.ts","../../src/components/withFocusRing/helpers.ts","../../src/components/FileInputMenuItem.styled.tsx","../../src/components/FileInputMenuItem.tsx","../../src/components/PlayerActionsMenu.tsx","../../src/components/Uploader.styled.tsx","../../src/components/withFocusRing/withFocusRing.ts","../../src/components/FileInputButton.tsx","../../src/components/UploadPlaceholder.tsx","../../src/components/__legacy__Uploader.tsx","../../src/hooks/useSaveSecrets.ts","../../src/hooks/useSecretsFormState.ts","../../src/components/MuxLogo.tsx","../../src/components/ConfigureApi.styled.tsx","../../src/components/FormField.tsx","../../src/components/ConfigureApi.tsx","../../src/components/Onboard.tsx","../../src/components/Input.tsx","../../src/hooks/useDialogState.ts"],"sourcesContent":["import {useMemo} from 'react'\nimport {useDataset, useProjectId} from 'sanity'\nimport useSWR from 'swr'\n\nimport {useClient} from '../hooks/useClient'\nimport type {MuxAsset, VideoAssetDocument} from '../util/types'\n\n// Poll MUX if it's preparing the main document or its own static renditions\nexport const useMuxPolling = (asset?: VideoAssetDocument) => {\n const client = useClient()\n const projectId = useProjectId()\n const dataset = useDataset()\n const shouldFetch = useMemo(\n () =>\n !!asset?.assetId &&\n (asset?.status === 'preparing' || asset?.data?.static_renditions?.status === 'preparing'),\n [asset?.assetId, asset?.data?.static_renditions?.status, asset?.status]\n )\n return useSWR(\n shouldFetch ? `/${projectId}/addons/mux/assets/${dataset}/data/${asset?.assetId}` : null,\n async () => {\n const {data} = await client.request<{data: MuxAsset}>({\n url: `/addons/mux/assets/${dataset}/data/${asset!.assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n client.patch(asset!._id!).set({status: data.status, data}).commit({returnDocuments: false})\n },\n {refreshInterval: 2000, refreshWhenHidden: true, dedupingInterval: 1000}\n )\n}\n","import {useMemo} from 'react'\nimport {useDocumentValues} from 'sanity'\n\nimport {muxSecretsDocumentId} from '../util/constants'\nimport type {Secrets} from '../util/types'\n\nconst path = ['token', 'secretKey', 'enableSignedUrls', 'signingKeyId', 'signingKeyPrivate']\nexport const useSecretsDocumentValues = () => {\n const {error, isLoading, value} = useDocumentValues<Partial<Secrets> | null | undefined>(\n muxSecretsDocumentId,\n path\n )\n const cache = useMemo(() => {\n const exists = Boolean(value)\n const secrets: Secrets = {\n token: value?.token || null,\n secretKey: value?.secretKey || null,\n enableSignedUrls: value?.enableSignedUrls || false,\n signingKeyId: value?.signingKeyId || null,\n signingKeyPrivate: value?.signingKeyPrivate || null,\n }\n return {\n isInitialSetup: !exists,\n needsSetup: !secrets?.token || !secrets?.secretKey,\n secrets,\n }\n }, [value])\n\n return {error, isLoading, value: cache}\n}\n","import * as UpChunk from '@mux/upchunk'\nimport {Observable} from 'rxjs'\n\nexport function createUpChunkObservable(uuid: string, uploadUrl: string, source: File) {\n return new Observable((subscriber) => {\n const upchunk = UpChunk.createUpload({\n endpoint: uploadUrl,\n file: source,\n dynamicChunkSize: true, // changes the chunk size based on network speeds\n })\n\n const successHandler = () => {\n subscriber.next({\n type: 'success',\n id: uuid,\n })\n subscriber.complete()\n }\n\n const errorHandler = (data: CustomEvent) => subscriber.error(new Error(data.detail.message))\n\n const progressHandler = (data: CustomEvent) => {\n return subscriber.next({type: 'progress', percent: data.detail})\n }\n\n const offlineHandler = () => {\n upchunk.pause()\n subscriber.next({\n type: 'pause',\n id: uuid,\n })\n }\n\n const onlineHandler = () => {\n upchunk.resume()\n subscriber.next({\n type: 'resume',\n id: uuid,\n })\n }\n\n upchunk.on('success', successHandler)\n upchunk.on('error', errorHandler)\n upchunk.on('progress', progressHandler)\n upchunk.on('offline', offlineHandler)\n upchunk.on('online', onlineHandler)\n\n return () => upchunk.abort()\n })\n}\n","import type {SanityClient} from '@sanity/client'\n\nimport type {MuxAsset} from '../util/types'\n\nexport function deleteAsset(client: SanityClient, assetId: string) {\n const {dataset} = client.config()\n return client.request<void>({\n url: `/addons/mux/assets/${dataset}/${assetId}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function getAsset(client: SanityClient, assetId: string) {\n const {dataset} = client.config()\n return client.request<{data: MuxAsset}>({\n url: `/addons/mux/assets/${dataset}/data/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n","import type {SanityClient} from '@sanity/client'\nimport {defer} from 'rxjs'\n\n// eslint-disable-next-line max-params\nexport function saveSecrets(\n client: SanityClient,\n token: string,\n secretKey: string,\n enableSignedUrls: boolean,\n signingKeyId: string,\n signingKeyPrivate: string\n) {\n const doc = {\n _id: 'secrets.mux',\n _type: 'mux.apiKey',\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n\n return client.createOrReplace(doc)\n}\n\nexport function createSigningKeys(client: SanityClient) {\n const {dataset} = client.config()\n return client.request<{\n data: {private_key: string; id: string; created_at: string}\n }>({\n url: `/addons/mux/signing-keys/${dataset}`,\n withCredentials: true,\n method: 'POST',\n })\n}\n\nexport function testSecrets(client: SanityClient) {\n const {dataset} = client.config()\n return client.request<{status: boolean}>({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport async function haveValidSigningKeys(\n client: SanityClient,\n signingKeyId: string,\n signingKeyPrivate: string\n) {\n if (!(signingKeyId && signingKeyPrivate)) {\n return false\n }\n\n const {dataset} = client.config()\n try {\n const res = await client.request<{data: {id: string; created_at: string}}>({\n url: `/addons/mux/signing-keys/${dataset}/${signingKeyId}`,\n withCredentials: true,\n method: 'GET',\n })\n //\n // if this signing key is valid it will return { data: { id: 'xxxx' } }\n //\n return !!(res.data && res.data.id)\n } catch (e) {\n console.error('Error fetching signingKeyId', signingKeyId, 'assuming it is not valid')\n return false\n }\n}\n\nexport function testSecretsObservable(client: SanityClient) {\n const {dataset} = client.config()\n return defer(() =>\n client.observable.request<{status: boolean}>({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n )\n}\n","/* eslint-disable camelcase */\nimport type {SanityClient} from '@sanity/client'\nimport {uuid as generateUuid} from '@sanity/uuid'\nimport {type Observable, concat, defer, from, of, throwError} from 'rxjs'\nimport {catchError, mergeMap, mergeMapTo, switchMap} from 'rxjs/operators'\n\nimport {createUpChunkObservable} from '../clients/upChunkObservable'\nimport type {Config, MuxAsset} from '../util/types'\nimport {getAsset} from './assets'\nimport {testSecretsObservable} from './secrets'\n\nexport function cancelUpload(client: SanityClient, uuid: string) {\n return client.observable.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${uuid}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function uploadUrl(\n config: Config,\n client: SanityClient,\n url: string,\n options: {enableSignedUrls?: boolean} = {}\n) {\n return testUrl(url).pipe(\n switchMap((validUrl) => {\n return concat(\n of({type: 'url', url: validUrl}),\n testSecretsObservable(client).pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const muxBody = {\n input: validUrl,\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n mp4_support: config.mp4_support,\n }\n const query = {\n muxBody: JSON.stringify(muxBody),\n filename: validUrl.split('/').slice(-1)[0],\n }\n\n const dataset = client.clientConfig.dataset\n return defer(() =>\n client.observable.request({\n url: `/addons/mux/assets/${dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n query,\n })\n ).pipe(\n mergeMap((result) => {\n const asset =\n (result && result.results && result.results[0] && result.results[0].document) ||\n null\n\n if (!asset) {\n return throwError(new Error('No asset document returned'))\n }\n return of({type: 'success', id: uuid, asset})\n })\n )\n })\n )\n )\n })\n )\n}\n\nexport function uploadFile(\n config: Config,\n client: SanityClient,\n file: File,\n options: {enableSignedUrls?: boolean} = {}\n) {\n return testFile(file).pipe(\n switchMap((fileOptions) => {\n return concat(\n of({type: 'file', file: fileOptions}),\n testSecretsObservable(client).pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const body = {\n mp4_support: config.mp4_support,\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n }\n\n return concat(\n of({type: 'uuid', uuid}),\n defer(() =>\n client.observable.request<{\n sanityAssetId: string\n upload: {\n cors_origin: string\n id: string\n new_asset_settings: {\n mp4_support: 'standard' | 'none'\n passthrough: string\n playback_policies: ['public' | 'signed']\n }\n status: 'waiting'\n timeout: number\n url: string\n }\n }>({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n body,\n })\n ).pipe(\n mergeMap((result) => {\n return createUpChunkObservable(uuid, result.upload.url, file).pipe(\n // eslint-disable-next-line no-warning-comments\n // @TODO type the observable events\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((event: any) => {\n if (event.type !== 'success') {\n return of(event)\n }\n return from(updateAssetDocumentFromUpload(client, uuid)).pipe(\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((doc) => of({...event, asset: doc}))\n )\n }),\n // eslint-disable-next-line max-nested-callbacks\n catchError((err) => {\n // Delete asset document\n return cancelUpload(client, uuid).pipe(mergeMapTo(throwError(err)))\n })\n )\n })\n )\n )\n })\n )\n )\n })\n )\n}\n\ntype UploadResponse = {\n data: {\n asset_id: string\n cors_origin: string\n id: string\n new_asset_settings: {\n mp4_support: 'standard' | 'none'\n passthrough: string\n playback_policies: ['public' | 'signed']\n }\n status: string\n timeout: number\n }\n}\nexport function getUpload(client: SanityClient, assetId: string) {\n const {dataset} = client.config()\n return client.request<UploadResponse>({\n url: `/addons/mux/uploads/${dataset}/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nfunction pollUpload(client: SanityClient, uuid: string): Promise<UploadResponse> {\n const maxTries = 10\n let pollInterval: number\n let tries = 0\n let assetId: string\n let upload: UploadResponse\n return new Promise((resolve, reject) => {\n pollInterval = (setInterval as typeof window.setInterval)(async () => {\n try {\n upload = await getUpload(client, uuid)\n } catch (err) {\n reject(err)\n return\n }\n assetId = upload && upload.data && upload.data.asset_id\n if (assetId) {\n clearInterval(pollInterval)\n resolve(upload)\n }\n if (tries > maxTries) {\n clearInterval(pollInterval)\n reject(new Error('Upload did not finish'))\n }\n tries++\n }, 2000)\n })\n}\n\nasync function updateAssetDocumentFromUpload(client: SanityClient, uuid: string) {\n let upload: UploadResponse\n let asset: {data: MuxAsset}\n try {\n upload = await pollUpload(client, uuid)\n } catch (err) {\n return Promise.reject(err)\n }\n try {\n asset = await getAsset(client, upload.data.asset_id)\n } catch (err) {\n return Promise.reject(err)\n }\n\n const doc = {\n _id: uuid,\n _type: 'mux.videoAsset',\n status: asset.data.status,\n data: asset.data,\n assetId: asset.data.id,\n playbackId: asset.data.playback_ids[0].id,\n uploadId: upload.data.id,\n }\n return client.createOrReplace(doc).then(() => {\n return doc\n })\n}\n\nfunction testFile(file: File) {\n if (typeof window !== 'undefined' && file instanceof window.File) {\n const fileOptions = optionsFromFile({}, file)\n return of(fileOptions)\n }\n return throwError(new Error('Invalid file'))\n}\n\nfunction testUrl(url: string): Observable<string> {\n const error = new Error('Invalid URL')\n if (typeof url !== 'string') {\n return throwError(error)\n }\n let parsed\n try {\n parsed = new URL(url)\n } catch (err) {\n return throwError(error)\n }\n if (parsed && !parsed.protocol.match(/http:|https:/)) {\n return throwError(error)\n }\n return of(url)\n}\n\nfunction optionsFromFile(opts: {preserveFilename?: boolean}, file: File) {\n if (typeof window === 'undefined' || !(file instanceof window.File)) {\n return opts\n }\n return {\n name: opts.preserveFilename === false ? undefined : file.name,\n type: file.type,\n }\n}\n","/**\n * Utilities for extracting files from dataTransfer in a predictable cross-browser fashion.\n * Also recursively extracts files from a directory\n * Inspired by https://github.com/component/normalized-upload\n */\n\nexport function extractDroppedFiles(dataTransfer: DataTransfer) {\n const files = Array.from(dataTransfer.files || [])\n const items = Array.from(dataTransfer.items || [])\n if (files && files.length > 0) {\n return Promise.resolve(files)\n }\n return normalizeItems(items).then((arr) => arr.flat())\n}\n\nfunction normalizeItems(items: DataTransferItem[]) {\n return Promise.all(\n items.map((item) => {\n // directory\n if (item.kind === 'file' && item.webkitGetAsEntry) {\n let entry: FileSystemEntry | File[] | null\n // Edge throws\n try {\n entry = item.webkitGetAsEntry()\n } catch (err) {\n return [item.getAsFile()]\n }\n if (!entry) {\n return []\n }\n return entry.isDirectory ? walk(entry) : [item.getAsFile()]\n }\n\n // file\n if (item.kind === 'file') {\n const file = item.getAsFile()\n return Promise.resolve(file ? [file] : [])\n }\n\n // others\n return new Promise((resolve) => item.getAsString(resolve)).then((str?: any) =>\n str ? [new File([str], 'unknown.txt', {type: item.type})] : []\n )\n })\n )\n}\n\nfunction isFile(entry: FileSystemEntry): entry is FileSystemFileEntry {\n return entry.isFile\n}\nfunction isDirectory(entry: FileSystemEntry): entry is FileSystemDirectoryEntry {\n return entry.isDirectory\n}\n\nfunction walk(entry: FileSystemEntry): any {\n if (isFile(entry)) {\n return new Promise((resolve) => entry.file(resolve)).then((file) => [file])\n }\n\n if (isDirectory(entry)) {\n const dir = entry.createReader()\n return new Promise<any>((resolve) => dir.readEntries(resolve))\n .then((entries: FileSystemEntry[]) => entries.filter((entr) => !entr.name.startsWith('.')))\n .then((entries) => Promise.all(entries.map(walk)).then((arr) => arr.flat()))\n }\n return Promise.resolve([])\n}\n","import {EllipsisVerticalIcon, TrashIcon} from '@sanity/icons'\nimport {DownloadIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Checkbox,\n Dialog,\n Flex,\n Grid,\n Menu,\n MenuButton,\n MenuItem,\n Spinner,\n Stack,\n Text,\n useClickOutside,\n useToast,\n} from '@sanity/ui'\nimport {animate} from 'motion'\nimport React, {memo, useCallback, useEffect, useId, useLayoutEffect, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {deleteAsset} from '../actions/assets'\nimport {useClient} from '../hooks/useClient'\nimport type {VideoAssetDocument} from '../util/types'\nimport {AnimatedVideoThumbnail, CardLoadMore, ThumbGrid, VideoThumbnail} from './VideoSource.styled'\n\nexport interface AssetActionsMenuProps {\n asset: VideoAssetDocument\n}\n\nfunction AssetActionsMenu(props: AssetActionsMenuProps) {\n const {asset} = props\n const id = useId()\n const [dialogState, setDialogState] = useState<false | 'show-uses' | 'confirm-delete'>()\n const [open, setOpen] = useState(false)\n const [menuElement, setMenuRef] = useState<HTMLDivElement | null>(null)\n\n const handleDelete = useCallback(() => setDialogState('confirm-delete'), [])\n const handleClick = useCallback(() => {\n setDialogState(false)\n setOpen(true)\n }, [setDialogState])\n const handleClose = useCallback(() => {\n setDialogState(false)\n setOpen(false)\n }, [setDialogState])\n\n useEffect(() => {\n if (open && dialogState) {\n setOpen(false)\n }\n }, [dialogState, open])\n\n useClickOutside(\n useCallback(() => setOpen(false), []),\n [menuElement]\n )\n\n return (\n <>\n <MenuButton\n id={`${id}-asset-menu`}\n button={\n <Button icon={EllipsisVerticalIcon} mode=\"ghost\" onClick={handleClick} padding={2} />\n }\n menu={\n <Menu ref={setMenuRef}>\n <MenuItem tone=\"critical\" icon={TrashIcon} text=\"Delete\" onClick={handleDelete} />\n </Menu>\n }\n portal\n placement=\"right\"\n />\n {dialogState === 'confirm-delete' && <DeleteDialog asset={asset} onClose={handleClose} />}\n </>\n )\n}\n\ninterface DeleteDialogProps {\n asset: VideoAssetDocument\n onClose: () => void\n}\nfunction DeleteDialog(props: DeleteDialogProps) {\n const {asset, onClose} = props\n const client = useClient()\n const {push: pushToast} = useToast()\n const [deleting, setDeleting] = useState(false)\n const [deleteOnMux, setDeleteOnMux] = useState(false)\n const id = useId()\n const noPaddingOnStack = true\n const width = 200 * getDevicePixelRatio({maxDpr: 2})\n\n const handleDelete = useCallback(async () => {\n setDeleting(true)\n try {\n if (asset?._id) {\n await client.delete(asset._id)\n }\n if (deleteOnMux && asset?.assetId) {\n await deleteAsset(client, asset.assetId)\n }\n document\n .querySelector(`[data-id=\"${asset._id}\"]`)\n ?.parentElement?.setAttribute?.('hidden', 'true')\n } catch (err: any) {\n console.error('Failed during delete', err)\n pushToast({\n closable: true,\n description: err?.message,\n duration: 5000,\n title: 'Uncaught error',\n status: 'error',\n })\n } finally {\n setDeleting(false)\n onClose()\n }\n }, [asset._id, asset.assetId, client, deleteOnMux, onClose, pushToast])\n\n return (\n <Dialog\n onClose={onClose}\n id={`${id}-confirm-delete`}\n header=\"Delete video\"\n footer={\n <Grid padding={2} gap={2} columns={2}>\n <Button mode=\"bleed\" text=\"Cancel\" onClick={onClose} />\n <Button\n text=\"Delete\"\n tone=\"critical\"\n icon={TrashIcon}\n onClick={handleDelete}\n loading={deleting}\n // disabled={!canDelete}\n />\n </Grid>\n }\n // __unstable_autoFocus\n width={1}\n >\n <Stack\n paddingX={noPaddingOnStack ? 0 : [2, 3, 4]}\n paddingY={noPaddingOnStack ? 0 : [3, 3, 3, 4]}\n space={1}\n >\n <Card paddingX={[2, 3, 4]} paddingY={[3, 3, 3, 4]}>\n <Grid columns={3} gap={3}>\n <Flex style={{gridColumn: 'span 2'}} align=\"center\">\n <Box padding={4}>\n <Stack space={4}>\n <Flex align=\"center\" as=\"label\">\n <Checkbox\n checked={deleteOnMux}\n onChange={() => setDeleteOnMux((prev) => !prev)}\n />\n <Text style={{margin: '0 10px'}}>Delete asset on Mux</Text>\n </Flex>\n <Flex align=\"center\" as=\"label\">\n <Checkbox disabled checked />\n <Text style={{margin: '0 10px'}}>Delete video from dataset</Text>\n </Flex>\n </Stack>\n </Box>\n </Flex>\n <VideoThumbnail asset={asset} width={width} showTip />\n </Grid>\n </Card>\n </Stack>\n </Dialog>\n )\n}\n\nexport interface Props {\n assets: VideoAssetDocument[]\n isLoading: boolean\n isLastPage: boolean\n onSelect: (assetId: string) => void\n onLoadMore: () => void\n}\n\nexport default function VideoSource({assets, isLoading, isLastPage, onSelect, onLoadMore}: Props) {\n const handleClick = useCallback<React.MouseEventHandler<HTMLDivElement>>(\n (event) => onSelect(event.currentTarget.dataset.id!),\n [onSelect]\n )\n const handleKeyPress = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Enter') {\n onSelect(event.currentTarget.dataset.id!)\n }\n },\n [onSelect]\n )\n const width = 200 * getDevicePixelRatio({maxDpr: 2})\n\n return (\n <>\n <Box padding={4}>\n <ThumbGrid gap={2}>\n {assets.map((asset) => (\n <VideoSourceItem\n key={asset._id}\n asset={asset}\n onClick={handleClick}\n onKeyPress={handleKeyPress}\n width={width}\n />\n ))}\n </ThumbGrid>\n {isLoading && assets.length === 0 && (\n <Flex justify=\"center\">\n <Spinner muted />\n </Flex>\n )}\n\n {!isLoading && assets.length === 0 && (\n <Text align=\"center\" muted>\n No videos\n </Text>\n )}\n </Box>\n {assets.length > 0 && !isLastPage && (\n <CardLoadMore tone=\"default\" padding={4}>\n <Flex direction=\"column\">\n <Button\n type=\"button\"\n icon={DownloadIcon}\n loading={isLoading}\n onClick={onLoadMore}\n text=\"Load more\"\n tone=\"primary\"\n />\n </Flex>\n </CardLoadMore>\n )}\n </>\n )\n}\n\ninterface VideoSourceItemProps {\n asset: VideoAssetDocument\n onClick: React.MouseEventHandler<HTMLDivElement>\n onKeyPress: React.KeyboardEventHandler<HTMLDivElement>\n width: number\n}\nconst _VideoSourceItem = ({asset, onClick, onKeyPress, width}: VideoSourceItemProps) => {\n const [hover, setHover] = useState<boolean | null>(null)\n const ref = useRef<HTMLDivElement>(null)\n useLayoutEffect(() => {\n if (!ref.current || hover === null) {\n return\n }\n if (hover) {\n animate(ref.current, {opacity: 1})\n } else {\n animate(ref.current, {opacity: 0})\n }\n }, [hover])\n return (\n <Box height=\"fill\" style={{position: 'relative'}}>\n <Card\n as=\"button\"\n data-id={asset._id}\n onClick={onClick}\n onKeyPress={onKeyPress}\n tabIndex={0}\n radius={2}\n padding={1}\n style={{lineHeight: 0, position: 'relative'}}\n __unstable_focusRing\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n >\n <VideoThumbnail asset={asset} width={width} showTip />\n {asset?.playbackId && (\n <AnimateWrapper tone=\"transparent\" ref={ref} margin={1} radius={1}>\n {hover !== null && <AnimatedVideoThumbnail asset={asset} width={width} />}\n </AnimateWrapper>\n )}\n </Card>\n <ActionsAssetsContainer>\n <AssetActionsMenu asset={asset} />\n </ActionsAssetsContainer>\n </Box>\n )\n}\nconst VideoSourceItem = memo(_VideoSourceItem)\nconst AnimateWrapper = styled(Card)`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n will-change: opacity;\n background: transparent;\n background-color: hsl(0deg 0% 0% / 33%);\n opacity: 0;\n pointer-events: none;\n`\n\nconst ActionsAssetsContainer = styled.div`\n box-sizing: border-box;\n position: absolute;\n z-index: 300;\n opacity: 0;\n top: 7px;\n right: 7px;\n\n button:hover + &,\n button:focus-visible + &,\n &:hover,\n &:focus-visible {\n opacity: 1;\n }\n`\n","import React, {useCallback, useEffect, useRef, useState} from 'react'\nimport {PatchEvent, set, setIfMissing} from 'sanity'\n\nimport {useClient} from '../hooks/useClient'\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport type {MuxInputProps, VideoAssetDocument} from '../util/types'\nimport VideoSource, {type Props as VideoSourceProps} from './VideoSource'\n\nconst PER_PAGE = 200\n\nfunction createQuery(start = 0, end = PER_PAGE) {\n return /* groq */ `*[_type == \"mux.videoAsset\"] | order(_updatedAt desc) [${start}...${end}]`\n}\n\nexport interface Props extends Pick<MuxInputProps, 'onChange'> {\n asset?: VideoAssetDocument | null | undefined\n setDialogState: SetDialogState\n}\n\nexport default function SelectAssets({asset, onChange, setDialogState}: Props) {\n const client = useClient()\n const pageNoRef = useRef(0)\n const [isLastPage, setLastPage] = useState(false)\n const [isLoading, setLoading] = useState(false)\n const [assets, setAssets] = useState<VideoAssetDocument[]>([])\n\n const fetchPage = useCallback(\n (pageNo: number) => {\n const start = pageNo * PER_PAGE\n const end = start + PER_PAGE\n setLoading(true)\n return client\n .fetch(createQuery(start, end))\n .then((result: VideoAssetDocument[]) => {\n setLastPage(result.length < PER_PAGE)\n setAssets((prev) => prev.concat(result))\n })\n .finally(() => setLoading(false))\n },\n [client]\n )\n const handleSelect = useCallback<VideoSourceProps['onSelect']>(\n (id) => {\n const selected = assets.find((doc) => doc._id === id)\n if (!selected) {\n throw new TypeError(`Failed to find video asset with id: ${id}`)\n }\n onChange(\n PatchEvent.from([\n setIfMissing({asset: {}}),\n set({_type: 'reference', _weak: true, _ref: selected._id}, ['asset']),\n ])\n )\n setDialogState(false)\n },\n [assets, onChange, setDialogState]\n )\n const handleLoadMore = useCallback<VideoSourceProps['onLoadMore']>(() => {\n fetchPage(++pageNoRef.current)\n }, [fetchPage])\n\n useEffect(() => void fetchPage(pageNoRef.current), [fetchPage])\n\n return (\n <VideoSource\n onSelect={handleSelect}\n assets={assets}\n isLastPage={isLastPage}\n isLoading={isLoading}\n onLoadMore={handleLoadMore}\n />\n )\n}\n","import {Dialog} from '@sanity/ui'\nimport React, {useCallback, useId} from 'react'\n\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport SelectAsset, {type Props as SelectAssetProps} from './SelectAsset'\n\ninterface Props extends Pick<SelectAssetProps, 'onChange' | 'asset'> {\n setDialogState: SetDialogState\n}\nexport default function InputBrowser({setDialogState, asset, onChange}: Props) {\n const id = `InputBrowser${useId()}`\n const handleClose = useCallback(() => setDialogState(false), [setDialogState])\n return (\n <Dialog\n scheme=\"dark\"\n __unstable_autoFocus\n header=\"Select video\"\n id={id}\n onClose={handleClose}\n width={2}\n >\n <SelectAsset asset={asset} onChange={onChange} setDialogState={setDialogState} />\n </Dialog>\n )\n}\n","import {Button, Dialog, Stack, Text} from '@sanity/ui'\nimport React, {useCallback, useId, useMemo, useState} from 'react'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {useClient} from '../hooks/useClient'\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport type {VideoAssetDocument} from '../util/types'\nimport {VideoThumbnail} from './VideoSource.styled'\n\nexport interface Props {\n asset: VideoAssetDocument\n getCurrentTime: () => number\n setDialogState: SetDialogState\n}\nexport default function EditThumbnailDialog({asset, getCurrentTime, setDialogState}: Props) {\n const client = useClient()\n const dialogId = `EditThumbnailDialog${useId()}`\n const nextTime = useMemo(() => getCurrentTime(), [getCurrentTime])\n const assetWithNewThumbnail = useMemo(() => ({...asset, thumbTime: nextTime}), [asset, nextTime])\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const handleSave = useCallback(() => {\n setSaving(true)\n client\n .patch(asset._id!)\n .set({thumbTime: nextTime})\n .commit({returnDocuments: false})\n .then(() => void setDialogState(false))\n .catch(setError)\n .finally(() => void setSaving(false))\n }, [client, asset._id, nextTime, setDialogState])\n const width = 300 * getDevicePixelRatio({maxDpr: 2})\n\n if (error) {\n // eslint-disable-next-line no-warning-comments\n // @TODO handle errors more gracefully\n throw error\n }\n\n return (\n <Dialog\n id={dialogId}\n header=\"Edit thumbnail\"\n onClose={() => setDialogState(false)}\n footer={\n <Stack padding={3}>\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n loading={saving}\n onClick={handleSave}\n text=\"Set new thumbnail\"\n />\n </Stack>\n }\n >\n <Stack space={3} padding={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Current:\n </Text>\n <VideoThumbnail asset={asset} width={width} />\n </Stack>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n New:\n </Text>\n <VideoThumbnail asset={assetWithNewThumbnail} width={width} />\n </Stack>\n </Stack>\n </Dialog>\n )\n}\n","import {Card} from '@sanity/ui'\nimport {MediaControlBar, MediaPosterImage} from 'media-chrome/dist/react'\nimport React, {useEffect, useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\n\nimport {useClient} from '../hooks/useClient'\nimport {getPosterSrc} from '../util/getPosterSrc'\nimport {getStoryboardSrc} from '../util/getStoryboardSrc'\nimport type {VideoAssetDocument} from '../util/types'\n\nexport const VideoContainer = styled(Card)`\n position: relative;\n min-height: 150px;\n aspect-ratio: 16 / 9;\n overflow: hidden;\n border-radius: 1px;\n media-airplay-button[media-airplay-unavailable] {\n display: none;\n }\n media-volume-range[media-volume-unavailable] {\n display: none;\n }\n media-pip-button[media-pip-unavailable] {\n display: none;\n }\n media-controller {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n --media-range-track-background-color: rgba(255, 255, 255, 0.5);\n --media-range-track-border-radius: 3px;\n width: 100%;\n height: 100%;\n background-color: transparent;\n }\n media-control-bar {\n --media-button-icon-width: 18px;\n --media-preview-time-margin: 0px;\n }\n media-control-bar:not([slot]) :is([role='button'], [role='switch'], button) {\n height: 44px;\n }\n .size-extra-small media-control-bar [role='button'],\n .size-extra-small media-control-bar [role='switch'] {\n height: auto;\n padding: 4.4% 3.2%;\n }\n .mxp-spacer {\n flex-grow: 1;\n height: 100%;\n background-color: var(--media-control-background, rgba(20, 20, 30, 0.7));\n }\n media-controller::part(vertical-layer) {\n transition: background-color 1s;\n }\n media-controller:is([media-paused], :not([user-inactive]))::part(vertical-layer) {\n background-color: rgba(0, 0, 0, 0.6);\n transition: background-color 0.25s;\n }\n .mxp-center-controls {\n --media-background-color: transparent;\n --media-button-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n }\n .mxp-center-controls media-play-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n width: max(27px, min(9%, 90px));\n }\n .mxp-center-controls media-seek-backward-button,\n .mxp-center-controls media-seek-forward-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n margin: 0 10%;\n width: min(7%, 70px);\n }\n media-loading-indicator {\n --media-loading-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n position: absolute;\n width: min(15%, 150px);\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n }\n /* Intentionally don't target the div for transition but the children\n of the div. Prevents messing with media-chrome's autohide feature. */\n media-loading-indicator + div * {\n transition: opacity 0.15s;\n opacity: 1;\n }\n media-loading-indicator[media-loading]:not([media-paused]) ~ div > * {\n opacity: 0;\n transition-delay: 400ms;\n }\n media-volume-range {\n width: min(100%, 100px);\n }\n media-time-display {\n white-space: nowrap;\n }\n :is(media-time-display, media-text-display, media-playback-rate-button) {\n color: inherit;\n }\n media-controller:fullscreen media-control-bar[slot='top-chrome'] {\n /* Hide menus and buttons that trigger modals when in full-screen */\n display: none;\n }\n video {\n background: transparent;\n }\n media-controller:not(:fullscreen) video {\n aspect-ratio: 16 / 9;\n }\n media-controller:not(:-webkit-full-screen) video {\n aspect-ratio: 16 / 9;\n }\n`\n\nexport const StyledCenterControls = styled.div`\n && {\n --media-background-color: transparent;\n --media-button-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n media-play-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n width: max(27px, min(9%, 90px));\n }\n }\n`\n\nexport const TopControls = styled(MediaControlBar)`\n justify-content: flex-end;\n button {\n height: auto;\n }\n`\n\nexport interface PosterImageProps {\n asset: VideoAssetDocument\n}\nexport function PosterImage({asset}: PosterImageProps) {\n const client = useClient()\n const ref = useRef<HTMLElement>(null)\n const src = useMemo(\n () => getPosterSrc({client, asset, width: 1920, height: 1080}),\n [client, asset]\n )\n\n useEffect(() => {\n if (ref.current) {\n const style = document.createElement('style')\n style.innerHTML = 'img { object-fit: contain; }'\n if (ref.current?.shadowRoot) {\n ref.current.shadowRoot.appendChild(style)\n }\n }\n }, [])\n\n return <MediaPosterImage ref={ref} slot=\"poster\" src={src} />\n}\n\nexport interface ThumbnailsMetadataTrackProps {\n asset: VideoAssetDocument\n}\nexport function ThumbnailsMetadataTrack({asset}: ThumbnailsMetadataTrackProps) {\n const client = useClient()\n // Why useState instead of useMemo? Because we really really only want to run it exactly once and useMemo doesn't make that guarantee\n const [src] = useState<string>(() => getStoryboardSrc({asset, client}))\n\n return <track label=\"thumbnails\" default kind=\"metadata\" src={src} />\n}\n","import type {SanityClient} from '@sanity/client'\n\nimport {generateJwt} from './generateJwt'\nimport {getPlaybackId} from './getPlaybackId'\nimport {getPlaybackPolicy} from './getPlaybackPolicy'\nimport type {MuxStoryboardUrl, VideoAssetDocument} from './types'\n\ninterface StoryboardSrcOptions {\n asset: VideoAssetDocument\n client: SanityClient\n}\n\nexport function getStoryboardSrc({asset, client}: StoryboardSrcOptions): MuxStoryboardUrl {\n const playbackId = getPlaybackId(asset)\n const searchParams = new URLSearchParams()\n\n if (getPlaybackPolicy(asset) === 'signed') {\n const token = generateJwt(client, playbackId, 's')\n searchParams.set('token', token)\n }\n\n return `https://image.mux.com/${playbackId}/storyboard.vtt?${searchParams}`\n}\n","// Lifted from sanity/form/inputs/files/common/UploadProgress\n\nimport {Button, Card, Code, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport {LinearProgress} from 'sanity'\nimport styled from 'styled-components'\n\nexport const CardWrapper = styled(Card)`\n min-height: 82px;\n box-sizing: border-box;\n`\n\nexport const FlexWrapper = styled(Flex)`\n text-overflow: ellipsis;\n overflow: hidden;\n`\n\nexport const LeftSection = styled(Stack)`\n position: relative;\n width: 60%;\n`\n\nexport const CodeWrapper = styled(Code)`\n position: relative;\n width: 100%;\n\n code {\n overflow: hidden;\n text-overflow: ellipsis;\n position: relative;\n max-width: 200px;\n }\n`\n\nexport const UploadProgress = ({\n progress = 100,\n onCancel,\n filename,\n text = 'Uploading',\n}: {\n progress: number\n filename?: React.ReactNode\n onCancel?: React.MouseEventHandler<HTMLButtonElement>\n text?: React.ReactNode\n}) => {\n return (\n <CardWrapper tone=\"primary\" padding={4} border height=\"fill\">\n <FlexWrapper align=\"center\" justify=\"space-between\" height=\"fill\" direction=\"row\" gap={2}>\n <LeftSection>\n <Flex justify=\"center\" gap={[3, 3, 2, 2]} direction={['column', 'column', 'row']}>\n <Text size={1}>\n <Inline space={2}>\n {text}\n <CodeWrapper size={1}>{filename ? filename : '...'}</CodeWrapper>\n </Inline>\n </Text>\n </Flex>\n\n <Card marginTop={3} radius={5} shadow={1}>\n <LinearProgress value={progress} />\n </Card>\n </LeftSection>\n\n {onCancel ? (\n <Button\n fontSize={2}\n text=\"Cancel upload\"\n mode=\"ghost\"\n tone=\"critical\"\n onClick={onCancel}\n />\n ) : null}\n </FlexWrapper>\n </CardWrapper>\n )\n}\n","import {type PlaybackEngine, generatePlayerInitTime, initialize} from '@mux/playback-core'\nimport {Card, Text} from '@sanity/ui'\nimport {\n MediaControlBar,\n MediaController,\n MediaDurationDisplay,\n MediaFullscreenButton,\n MediaLoadingIndicator,\n MediaMuteButton,\n MediaPlayButton,\n MediaTimeDisplay,\n MediaTimeRange,\n} from 'media-chrome/dist/react'\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {useCancelUpload} from '../hooks/useCancelUpload'\nimport {useClient} from '../hooks/useClient'\nimport type {DialogState, SetDialogState} from '../hooks/useDialogState'\nimport {getVideoSrc} from '../util/getVideoSrc'\nimport type {MuxInputProps, VideoAssetDocument} from '../util/types'\nimport EditThumbnailDialog from './EditThumbnailDialog'\nimport {\n PosterImage,\n StyledCenterControls,\n ThumbnailsMetadataTrack,\n TopControls,\n VideoContainer,\n} from './Player.styled'\nimport {UploadProgress} from './UploadProgress'\n\ninterface Props extends Pick<MuxInputProps, 'onChange' | 'readOnly'> {\n buttons?: React.ReactNode\n asset: VideoAssetDocument\n dialogState: DialogState\n setDialogState: SetDialogState\n}\n\nconst MuxVideo = ({asset, buttons, readOnly, onChange, dialogState, setDialogState}: Props) => {\n const client = useClient()\n const isLoading = useMemo<boolean | string>(() => {\n if (asset?.status === 'preparing') {\n return 'Preparing the video'\n }\n if (asset?.status === 'waiting_for_upload') {\n return 'Waiting for upload to start'\n }\n if (asset?.status === 'waiting') {\n return 'Processing upload'\n }\n if (asset?.status === 'ready') {\n return false\n }\n if (typeof asset?.status === 'undefined') {\n return false\n }\n\n return true\n }, [asset])\n const isPreparingStaticRenditions = useMemo<boolean>(() => {\n if (asset?.data?.static_renditions?.status === 'preparing') {\n return true\n }\n if (asset?.data?.static_renditions?.status === 'ready') {\n return false\n }\n return false\n }, [asset?.data?.static_renditions?.status])\n const videoSrc = useMemo(() => asset.playbackId && getVideoSrc({client, asset}), [asset, client])\n const [error, setError] = useState<MediaError | Error | null>(null)\n const handleError = useCallback<React.ReactEventHandler<HTMLVideoElement>>(\n (event) => setError(event.currentTarget.error),\n []\n )\n const playRef = useRef<HTMLDivElement>(null)\n const muteRef = useRef<HTMLDivElement>(null)\n const video = useRef<HTMLVideoElement>(null)\n const getCurrentTime = useCallback(() => video.current?.currentTime ?? 0, [video])\n const handleCancelUpload = useCancelUpload(asset, onChange)\n\n useEffect(() => {\n const style = document.createElement('style')\n style.innerHTML = 'button svg { vertical-align: middle; }'\n\n if (playRef.current?.shadowRoot) {\n playRef.current.shadowRoot.appendChild(style)\n }\n if (muteRef?.current?.shadowRoot) {\n muteRef.current.shadowRoot.appendChild(style.cloneNode(true))\n }\n }, [])\n const [playerInitTime] = useState(() => generatePlayerInitTime())\n const playbackEngineRef = useRef<PlaybackEngine | undefined>(undefined)\n\n useEffect(() => {\n if (isLoading || !videoSrc) {\n return\n }\n const nextPlaybackEngineRef = initialize(\n {\n src: videoSrc,\n playerInitTime,\n playerSoftwareName: 'sanity-plugin-mux-input',\n playerSoftwareVersion: 'dev-preview',\n },\n video.current,\n playbackEngineRef.current\n )\n playbackEngineRef.current = nextPlaybackEngineRef\n }, [videoSrc, isLoading, playerInitTime])\n\n useEffect(() => {\n if (asset?.status === 'errored') {\n handleCancelUpload()\n // eslint-disable-next-line no-warning-comments\n // @TODO use better error handling\n throw new Error(asset.data?.errors?.messages?.join(' '))\n }\n }, [asset.data?.errors?.messages, asset?.status, handleCancelUpload])\n\n if (error) {\n // @TODO better error handling\n throw error\n }\n\n if (!asset || !asset.status) {\n return null\n }\n\n if (isLoading) {\n return (\n <UploadProgress\n progress={100}\n filename={asset?.filename}\n text={(isLoading !== true && isLoading) || 'Waiting for Mux to complete the file'}\n onCancel={readOnly ? undefined : () => handleCancelUpload()}\n />\n )\n }\n\n return (\n <>\n <VideoContainer shadow={1} tone=\"transparent\" scheme=\"dark\">\n <MediaController>\n <video\n playsInline\n ref={video}\n onError={handleError}\n slot=\"media\"\n preload=\"metadata\"\n crossOrigin=\"anonomous\"\n >\n <ThumbnailsMetadataTrack asset={asset} />\n </video>\n <PosterImage asset={asset} />\n <MediaLoadingIndicator slot=\"centered-chrome\" noAutoHide />\n <StyledCenterControls slot=\"centered-chrome\">\n <MediaPlayButton />\n </StyledCenterControls>\n {buttons && <TopControls slot=\"top-chrome\">{buttons}</TopControls>}\n <MediaControlBar>\n <MediaMuteButton />\n <MediaTimeDisplay />\n <MediaTimeRange />\n <MediaDurationDisplay />\n <MediaFullscreenButton />\n </MediaControlBar>\n </MediaController>\n {isPreparingStaticRenditions && (\n <Card\n padding={2}\n radius={1}\n style={{\n background: 'var(--card-fg-color)',\n position: 'absolute',\n top: '0.5em',\n left: '0.5em',\n }}\n >\n <Text size={1} style={{color: 'var(--card-bg-color)'}}>\n MUX is preparing static renditions, please stand by\n </Text>\n </Card>\n )}\n </VideoContainer>\n {dialogState === 'edit-thumbnail' && (\n <EditThumbnailDialog\n asset={asset}\n getCurrentTime={getCurrentTime}\n setDialogState={setDialogState}\n />\n )}\n </>\n )\n}\n\nexport default MuxVideo\n","import type {SanityClient} from '@sanity/client'\n\nimport {generateJwt} from './generateJwt'\nimport {getPlaybackId} from './getPlaybackId'\nimport {getPlaybackPolicy} from './getPlaybackPolicy'\nimport type {MuxVideoUrl, VideoAssetDocument} from './types'\n\ninterface VideoSrcOptions {\n asset: VideoAssetDocument\n client: SanityClient\n}\n\nexport function getVideoSrc({asset, client}: VideoSrcOptions): MuxVideoUrl {\n const playbackId = getPlaybackId(asset)\n const searchParams = new URLSearchParams()\n\n if (getPlaybackPolicy(asset) === 'signed') {\n const token = generateJwt(client, playbackId, 'v')\n searchParams.set('token', token)\n }\n\n return `https://stream.mux.com/${playbackId}.m3u8?${searchParams}`\n}\n","import {useCallback} from 'react'\nimport {PatchEvent, unset} from 'sanity'\n\nimport {deleteAsset} from '../actions/assets'\nimport {useClient} from '../hooks/useClient'\nimport type {MuxInputProps, VideoAssetDocument} from '../util/types'\n\nexport const useCancelUpload = (asset: VideoAssetDocument, onChange: MuxInputProps['onChange']) => {\n const client = useClient()\n return useCallback(() => {\n if (!asset) {\n return\n }\n onChange(PatchEvent.from(unset()))\n if (asset.assetId) {\n deleteAsset(client, asset.assetId)\n }\n if (asset._id) {\n client.delete(asset._id)\n }\n }, [asset, client, onChange])\n}\n","// todo: get these utils from @sanity/ui instead\nexport function focusRingBorderStyle(border: {color: string; width: number}): string {\n return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\nexport function focusRingStyle(opts: {\n base?: {bg: string}\n border?: {color: string; width: number}\n focusRing: {offset: number; width: number}\n}): string {\n const {base, border, focusRing} = opts\n const focusRingOutsetWidth = focusRing.offset + focusRing.width\n const focusRingInsetWidth = 0 - focusRing.offset\n const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n return [\n focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n border && focusRingBorderStyle(border),\n focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n ]\n .filter(Boolean)\n .join(',')\n}\n","import {MenuItem, Theme} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\n\nimport {focusRingStyle} from './withFocusRing/helpers'\n\nexport const FileButton = styled(MenuItem)(({theme}: {theme: Theme}) => {\n const {focusRing} = theme.sanity\n const base = theme.sanity.color.base\n const border = {width: 1, color: 'var(--card-border-color)'}\n\n return css`\n position: relative;\n\n &:not([data-disabled='true']) {\n &:focus-within {\n box-shadow: ${focusRingStyle({base, border, focusRing})};\n }\n }\n\n & input {\n overflow: hidden;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n `\n})\n","import {Box, ButtonProps, Flex, Text} from '@sanity/ui'\nimport React, {createElement, isValidElement, useId} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {FileButton} from './FileInputMenuItem.styled'\n\nexport interface FileInputMenuItemProps extends ButtonProps {\n accept?: string\n capture?: 'user' | 'environment'\n multiple?: boolean\n onSelect?: (files: File[]) => void\n disabled?: boolean\n}\n\nexport const FileInputMenuItem = React.forwardRef(function FileInputMenuItem(\n props: FileInputMenuItemProps &\n Omit<React.HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>,\n forwardedRef: React.ForwardedRef<HTMLInputElement>\n) {\n const {\n icon,\n id: idProp,\n accept,\n capture,\n fontSize,\n multiple,\n onSelect,\n padding = 3,\n space = 3,\n textAlign,\n text,\n disabled,\n ...rest\n } = props\n const idHook = useId()\n const id = idProp || idHook\n\n const handleChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onSelect && event.target.files) {\n onSelect(Array.from(event.target.files))\n }\n },\n [onSelect]\n )\n\n const content = (\n <Flex align=\"center\" justify=\"flex-start\" padding={padding}>\n {/* Icon */}\n {icon && (\n <Box marginRight={text ? space : undefined}>\n <Text size={fontSize}>\n {isValidElement(icon) && icon}\n {isValidElementType(icon) && createElement(icon)}\n </Text>\n </Box>\n )}\n\n {/* Text */}\n {text && (\n <Text align={textAlign} size={fontSize} textOverflow=\"ellipsis\">\n {text}\n </Text>\n )}\n </Flex>\n )\n\n return (\n <FileButton\n {...rest}\n htmlFor={id}\n padding={0}\n fontSize={2}\n disabled={disabled}\n ref={forwardedRef}\n >\n {content}\n\n {/* Visibly hidden input */}\n <input\n data-testid=\"file-button-input\"\n accept={accept}\n capture={capture}\n id={id}\n multiple={multiple}\n onChange={handleChange}\n type=\"file\"\n value=\"\"\n disabled={disabled}\n />\n </FileButton>\n )\n})\n","import {\n EditIcon,\n EllipsisVerticalIcon,\n LockIcon,\n PlugIcon,\n ResetIcon,\n SearchIcon,\n UploadIcon,\n} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Inline,\n Label,\n Menu,\n MenuDivider,\n MenuItem,\n Popover,\n Text,\n Tooltip,\n useClickOutside,\n} from '@sanity/ui'\nimport React, {memo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {PatchEvent, unset} from 'sanity'\nimport styled from 'styled-components'\n\nimport {type DialogState, type SetDialogState} from '../hooks/useDialogState'\nimport {getPlaybackPolicy} from '../util/getPlaybackPolicy'\nimport type {MuxInputProps, VideoAssetDocument} from '../util/types'\nimport {FileInputMenuItem} from './FileInputMenuItem'\n\nconst LockCard = styled(Card)`\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.6;\n mix-blend-mode: screen;\n background: transparent;\n`\n\nconst LockButton = styled(Button)`\n background: transparent;\n color: white;\n`\n\nexport interface Props extends Pick<MuxInputProps, 'onChange' | 'readOnly'> {\n asset: VideoAssetDocument\n onUpload: (files: File[]) => void\n dialogState: DialogState\n setDialogState: SetDialogState\n}\nfunction PlayerActionsMenu(props: Props) {\n const {asset, readOnly, dialogState, setDialogState, onChange, onUpload} = props\n const [open, setOpen] = useState(false)\n const [menuElement, setMenuRef] = useState<HTMLDivElement | null>(null)\n const isSigned = useMemo(() => getPlaybackPolicy(asset) === 'signed', [asset])\n\n const onReset = useCallback(() => onChange(PatchEvent.from(unset([]))), [onChange])\n\n useEffect(() => {\n if (open && dialogState) {\n setOpen(false)\n }\n }, [dialogState, open])\n\n useClickOutside(\n useCallback(() => setOpen(false), []),\n [menuElement]\n )\n\n return (\n <Inline space={1} padding={2}>\n {isSigned && (\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Signed playback policy\n </Text>\n </Box>\n }\n placement=\"right\"\n portal\n >\n <LockCard radius={2} margin={2} scheme=\"dark\" tone=\"positive\">\n <LockButton icon={LockIcon} mode=\"bleed\" tone=\"positive\" />\n </LockCard>\n </Tooltip>\n )}\n {!readOnly && (\n <Button icon={EditIcon} mode=\"ghost\" onClick={() => setDialogState('edit-thumbnail')} />\n )}\n <Popover\n content={\n <Menu ref={setMenuRef}>\n <Box padding={2}>\n <Label muted size={1}>\n Replace\n </Label>\n </Box>\n <FileInputMenuItem\n accept=\"video/*\"\n icon={UploadIcon}\n mode=\"bleed\"\n onSelect={onUpload}\n text=\"Upload\"\n disabled={readOnly}\n fontSize={2}\n />\n <MenuItem\n icon={SearchIcon}\n text=\"Browse\"\n onClick={() => setDialogState('select-video')}\n />\n <MenuDivider />\n <MenuItem\n icon={PlugIcon}\n text=\"Configure API\"\n onClick={() => setDialogState('secrets')}\n />\n <MenuDivider />\n <MenuItem\n tone=\"critical\"\n icon={ResetIcon}\n text=\"Clear field\"\n onClick={onReset}\n disabled={readOnly}\n />\n </Menu>\n }\n portal\n open={open}\n >\n <Button\n icon={EllipsisVerticalIcon}\n mode=\"ghost\"\n onClick={() => {\n setDialogState(false)\n setOpen(true)\n }}\n />\n </Popover>\n </Inline>\n )\n}\n\nexport default memo(PlayerActionsMenu)\n","/* eslint-disable no-nested-ternary */\nimport {type CardTone, Card} from '@sanity/ui'\nimport React, {forwardRef, useCallback, useRef} from 'react'\nimport styled from 'styled-components'\n\nimport {withFocusRing} from './withFocusRing'\n\nconst ctrlKey = 17\nconst cmdKey = 91\n\nconst UploadCardWithFocusRing = withFocusRing(Card)\n\ninterface UploadCardProps {\n tone?: CardTone\n children: React.ReactNode\n onPaste: React.ClipboardEventHandler<HTMLInputElement>\n onDrop: React.DragEventHandler<HTMLDivElement>\n onDragOver: React.DragEventHandler<HTMLDivElement>\n onDragLeave: React.DragEventHandler<HTMLDivElement>\n onDragEnter: React.DragEventHandler<HTMLDivElement>\n}\nexport const UploadCard = forwardRef<HTMLDivElement, UploadCardProps>(\n ({children, tone, onPaste, onDrop, onDragEnter, onDragLeave, onDragOver}, forwardedRef) => {\n const ctrlDown = useRef(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const handleKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>((event) => {\n if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {\n ctrlDown.current = true\n }\n const vKey = 86\n if (ctrlDown.current && event.keyCode == vKey) {\n inputRef.current!.focus()\n }\n }, [])\n const handleKeyUp = useCallback<React.KeyboardEventHandler<HTMLDivElement>>((event) => {\n if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {\n ctrlDown.current = false\n }\n }, [])\n\n return (\n <UploadCardWithFocusRing\n tone={tone}\n height=\"fill\"\n ref={forwardedRef}\n padding={0}\n radius={2}\n shadow={0}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPaste={onPaste}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n >\n <HiddenInput ref={inputRef} onPaste={onPaste} />\n {children}\n </UploadCardWithFocusRing>\n )\n }\n)\n\nconst HiddenInput = styled.input.attrs({type: 'text'})`\n position: absolute;\n border: 0;\n color: white;\n opacity: 0;\n\n &:focus {\n outline: none;\n }\n`\n","import {rem, Theme} from '@sanity/ui'\nimport {type ComponentType} from 'react'\nimport styled, {css} from 'styled-components'\n\nimport {focusRingBorderStyle, focusRingStyle} from './helpers'\n\nexport function withFocusRing<Props>(component: ComponentType<Props>) {\n return styled(component as unknown as any)<Props & {$border?: boolean}>(\n (props: {theme: Theme; $border?: boolean}) => {\n const border = {\n width: props.$border ? 1 : 0,\n color: 'var(--card-border-color)',\n }\n\n return css`\n --card-focus-box-shadow: ${focusRingBorderStyle(border)};\n\n border-radius: ${rem(props.theme.sanity.radius[1])};\n outline: none;\n box-shadow: var(--card-focus-box-shadow);\n\n &:focus {\n --card-focus-box-shadow: ${focusRingStyle({\n base: props.theme.sanity.color.base,\n border,\n focusRing: props.theme.sanity.focusRing,\n })};\n }\n `\n }\n )\n}\n","import {type ButtonProps, Button} from '@sanity/ui'\nimport React, {useCallback, useId, useRef} from 'react'\nimport styled from 'styled-components'\n\nconst HiddenInput = styled.input`\n overflow: hidden;\n width: 0.1px;\n height: 0.1px;\n opacity: 0;\n position: absolute;\n z-index: -1;\n`\n\nconst Label = styled.label`\n position: relative;\n`\n\nexport interface FileInputButtonProps extends ButtonProps {\n onSelect: (files: FileList) => void\n}\nexport const FileInputButton = ({onSelect, ...props}: FileInputButtonProps) => {\n const inputId = `FileSelect${useId()}`\n const inputRef = useRef<HTMLInputElement>(null)\n const handleSelect = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (event) => {\n if (onSelect) {\n onSelect(event.target.files!)\n }\n },\n [onSelect]\n )\n const handleButtonClick = useCallback(() => inputRef.current?.click(), [])\n return (\n <Label htmlFor={inputId}>\n <HiddenInput\n accept=\"video/*\"\n ref={inputRef}\n tabIndex={0}\n type=\"file\"\n id={inputId}\n onChange={handleSelect}\n value=\"\"\n />\n <Button\n onClick={handleButtonClick}\n mode=\"default\"\n tone=\"primary\"\n style={{width: '100%'}}\n {...props}\n />\n </Label>\n )\n}\n","import {PlugIcon, SearchIcon, UploadIcon} from '@sanity/icons'\nimport {DocumentVideoIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Inline, Text} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\n\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport {type FileInputButtonProps, FileInputButton} from './FileInputButton'\n\nconst UploadCard = styled(Card)`\n && {\n border-style: dashed;\n }\n`\n\nconst ConfigureApiBox = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n`\n\ninterface UploadPlaceholderProps {\n setDialogState: SetDialogState\n readOnly: boolean\n hovering: boolean\n needsSetup: boolean\n onSelect: FileInputButtonProps['onSelect']\n}\nexport default function UploadPlaceholder(props: UploadPlaceholderProps) {\n const {setDialogState, readOnly, onSelect, hovering, needsSetup} = props\n const handleBrowse = useCallback(() => setDialogState('select-video'), [setDialogState])\n const handleConfigureApi = useCallback(() => setDialogState('secrets'), [setDialogState])\n\n return (\n <Box style={{padding: 1, position: 'relative'}} height=\"stretch\">\n <UploadCard\n sizing=\"border\"\n height=\"fill\"\n tone={readOnly ? 'transparent' : 'inherit'}\n border\n padding={3}\n style={hovering ? {borderColor: 'transparent'} : undefined}\n >\n <ConfigureApiBox padding={3}>\n <Button\n padding={3}\n radius={3}\n tone={needsSetup ? 'critical' : undefined}\n onClick={handleConfigureApi}\n icon={PlugIcon}\n mode=\"bleed\"\n />\n </ConfigureApiBox>\n <Flex\n align=\"center\"\n justify=\"space-between\"\n gap={4}\n direction={['column', 'column', 'row']}\n paddingY={[2, 2, 0]}\n sizing=\"border\"\n height=\"fill\"\n >\n <Flex align=\"center\" justify=\"center\" gap={2} flex={1}>\n <Flex justify=\"center\">\n <Text muted>\n <DocumentVideoIcon />\n </Text>\n </Flex>\n <Flex justify=\"center\">\n <Text size={1} muted>\n Drag video or paste URL here\n </Text>\n </Flex>\n </Flex>\n <Inline space={2}>\n <FileInputButton\n mode=\"ghost\"\n tone=\"default\"\n icon={UploadIcon}\n text=\"Upload\"\n onSelect={onSelect}\n />\n <Button mode=\"ghost\" icon={SearchIcon} text=\"Select\" onClick={handleBrowse} />\n </Inline>\n </Flex>\n </UploadCard>\n </Box>\n )\n}\n","/* eslint-disable no-nested-ternary */\n// This component needs to be refactored into a functional component\n\nimport type {SanityClient} from '@sanity/client'\nimport React, {Component} from 'react'\nimport {type Observable, Subject} from 'rxjs'\nimport {takeUntil, tap} from 'rxjs/operators'\nimport {PatchEvent, set, setIfMissing} from 'sanity'\n\nimport {uploadFile, uploadUrl} from '../actions/upload'\nimport {type DialogState, type SetDialogState} from '../hooks/useDialogState'\nimport {extractDroppedFiles} from '../util/extractFiles'\nimport type {Config, MuxInputProps, Secrets, VideoAssetDocument} from '../util/types'\nimport InputBrowser from './InputBrowser'\nimport Player from './Player'\nimport PlayerActionsMenu from './PlayerActionsMenu'\nimport {UploadCard} from './Uploader.styled'\nimport UploadPlaceholder from './UploadPlaceholder'\nimport {UploadProgress} from './UploadProgress'\n\ninterface Props extends Pick<MuxInputProps, 'onChange' | 'readOnly'> {\n config: Config\n client: SanityClient\n secrets: Secrets\n asset: VideoAssetDocument | null | undefined\n dialogState: DialogState\n setDialogState: SetDialogState\n needsSetup: boolean\n}\n\ninterface State {\n isDraggingOver: boolean\n invalidPaste: boolean\n invalidFile: boolean\n fileInfo: {name?: string; type?: string} | null\n uuid: null\n uploadProgress: number | null\n error: Error | null\n url: string | null\n}\n\nclass MuxVideoInputUploader extends Component<Props, State> {\n state: State = {\n isDraggingOver: false,\n invalidPaste: false,\n invalidFile: false,\n uploadProgress: null,\n fileInfo: null,\n uuid: null,\n error: null,\n url: null,\n }\n dragEnteredEls: EventTarget[] = []\n\n ctrlDown = false\n\n // eslint-disable-next-line no-warning-comments\n // @TODO add proper typings for the return values of uploadFile and uploadUrl\n upload: any | null = null\n\n container = React.createRef<HTMLDivElement>()\n\n onCancelUploadButtonClick$: Observable<unknown> | undefined\n handleCancelUploadButtonClick: React.MouseEventHandler<HTMLButtonElement> | undefined\n\n componentWillUnmount() {\n this.unSubscribeToUpload()\n }\n\n componentDidMount() {\n const events$ = new Subject()\n this.onCancelUploadButtonClick$ = events$.asObservable()\n this.handleCancelUploadButtonClick = (event) => events$.next(event)\n }\n\n unSubscribeToUpload() {\n if (this.upload && !this.upload.closed) {\n this.upload.unsubscribe()\n }\n }\n\n handleProgress = (evt: {percent: number}) => {\n this.setState({uploadProgress: evt.percent})\n }\n\n onUpload = (files: FileList | File[]) => {\n this.setState({uploadProgress: 0, fileInfo: null, uuid: null})\n this.upload = uploadFile(this.props.config, this.props.client, files[0], {\n enableSignedUrls: this.props.secrets.enableSignedUrls,\n })\n .pipe(\n takeUntil(\n this.onCancelUploadButtonClick$!.pipe(\n tap(() => {\n if (this.state.uuid) {\n this.props.client.delete(this.state.uuid)\n }\n })\n )\n )\n )\n .subscribe({\n complete: () => {\n this.setState({error: null, uploadProgress: null, uuid: null})\n },\n next: (event) => {\n this.handleUploadEvent(event)\n },\n error: (err) => {\n this.setState({error: err, uploadProgress: null, uuid: null})\n },\n })\n }\n\n // eslint-disable-next-line no-warning-comments\n // @TODO add proper typings for the Observable events\n handleUploadEvent = (event: any) => {\n switch (event.type) {\n case 'success':\n return this.handleUploadSuccess(event.asset)\n case 'progress':\n return this.handleProgress(event)\n case 'file':\n return this.setState({fileInfo: event.file})\n case 'uuid':\n // Means we created a mux.videoAsset document with an uuid\n return this.setState({uuid: event.uuid})\n case 'url':\n return this.setState({url: event.url, uploadProgress: 100})\n default:\n return null\n }\n }\n\n handleUploadSuccess = (asset: VideoAssetDocument) => {\n this.setState({uploadProgress: 100})\n this.props.onChange(\n PatchEvent.from([\n setIfMissing({asset: {}}),\n set({_type: 'reference', _weak: true, _ref: asset._id}, ['asset']),\n ])\n )\n }\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const clipboardData = event.clipboardData || (window as any).clipboardData\n const url = clipboardData.getData('text')\n const options = {enableSignedUrls: this.props.secrets.enableSignedUrls}\n\n this.upload = uploadUrl(this.props.config, this.props.client, url, options).subscribe({\n complete: () => {\n this.setState({error: null, uploadProgress: null, url: null})\n },\n next: (sEvent) => {\n this.handleUploadEvent(sEvent)\n },\n error: (err) => {\n let error\n // Don't output error dialog when just invalid url\n if (!err.message.toLowerCase().match('invalid url')) {\n error = err\n }\n this.setState({invalidPaste: true, error}, () => {\n setTimeout(() => {\n this.setState({invalidPaste: false, uploadProgress: null})\n }, 2000)\n })\n },\n })\n }\n\n handleDrop: React.DragEventHandler<HTMLDivElement> = (event) => {\n this.setState({isDraggingOver: false})\n event.preventDefault()\n event.stopPropagation()\n extractDroppedFiles(event.nativeEvent.dataTransfer!).then((files) => {\n if (files) {\n // eslint-disable-next-line no-warning-comments\n // @TODO fix the typing on files\n this.onUpload(files as any)\n }\n })\n }\n\n handleDragOver: React.DragEventHandler<HTMLDivElement> = (event) => {\n event.preventDefault()\n event.stopPropagation()\n }\n\n handleDragEnter: React.DragEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation()\n this.dragEnteredEls.push(event.target)\n this.setState({isDraggingOver: true})\n const type = event.dataTransfer.items?.[0]?.type\n this.setState({invalidFile: !type.startsWith('video/')})\n }\n\n handleDragLeave: React.DragEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation()\n const idx = this.dragEnteredEls.indexOf(event.target)\n if (idx > -1) {\n this.dragEnteredEls.splice(idx, 1)\n }\n if (this.dragEnteredEls.length === 0) {\n this.setState({isDraggingOver: false})\n }\n }\n\n render() {\n if (this.state.uploadProgress !== null) {\n return (\n <UploadProgress\n onCancel={this.handleCancelUploadButtonClick!}\n progress={this.state.uploadProgress}\n filename={this.state.fileInfo?.name || this.state.url}\n />\n )\n }\n\n if (this.state.error) {\n // @TODO better error handling\n throw this.state.error\n }\n\n return (\n <>\n <UploadCard\n tone={\n this.state.isDraggingOver && (this.state.invalidPaste || this.state.invalidFile)\n ? 'critical'\n : this.state.isDraggingOver\n ? 'positive'\n : undefined\n }\n onDrop={this.handleDrop}\n onDragOver={this.handleDragOver}\n onDragLeave={this.handleDragLeave}\n onDragEnter={this.handleDragEnter}\n onPaste={this.handlePaste}\n ref={this.container}\n >\n {this.props.asset ? (\n <Player\n readOnly={this.props.readOnly}\n asset={this.props.asset}\n onChange={this.props.onChange}\n dialogState={this.props.dialogState}\n setDialogState={this.props.setDialogState}\n buttons={\n <PlayerActionsMenu\n asset={this.props.asset}\n dialogState={this.props.dialogState}\n setDialogState={this.props.setDialogState}\n onChange={this.props.onChange}\n onUpload={this.onUpload}\n readOnly={this.props.readOnly}\n />\n }\n />\n ) : (\n <UploadPlaceholder\n hovering={this.state.isDraggingOver}\n onSelect={this.onUpload}\n readOnly={this.props.readOnly!}\n setDialogState={this.props.setDialogState}\n needsSetup={this.props.needsSetup}\n />\n )}\n </UploadCard>\n {this.props.dialogState === 'select-video' && (\n <InputBrowser\n asset={this.props.asset}\n onChange={this.props.onChange}\n setDialogState={this.props.setDialogState}\n />\n )}\n </>\n )\n }\n}\n\nexport default MuxVideoInputUploader\n","import type {SanityClient} from '@sanity/client'\nimport {useCallback} from 'react'\n\nimport {createSigningKeys, haveValidSigningKeys, saveSecrets, testSecrets} from '../actions/secrets'\nimport type {Secrets} from '../util/types'\n\nexport const useSaveSecrets = (client: SanityClient, secrets: Secrets) => {\n return useCallback(\n async ({\n token,\n secretKey,\n enableSignedUrls,\n }: Pick<Secrets, 'token' | 'secretKey' | 'enableSignedUrls'>): Promise<Secrets> => {\n let {signingKeyId, signingKeyPrivate} = secrets\n\n try {\n await saveSecrets(\n client,\n token!,\n secretKey!,\n enableSignedUrls,\n signingKeyId!,\n signingKeyPrivate!\n )\n const valid = await testSecrets(client)\n if (!valid?.status && token && secretKey) {\n throw new Error('Invalid secrets')\n }\n } catch (err) {\n console.error('Error while trying to save secrets:', err)\n throw err\n }\n\n if (enableSignedUrls) {\n const hasValidSigningKeys = await haveValidSigningKeys(\n client,\n signingKeyId!,\n signingKeyPrivate!\n )\n\n if (!hasValidSigningKeys) {\n try {\n const {data} = await createSigningKeys(client)\n signingKeyId = data.id\n signingKeyPrivate = data.private_key\n await saveSecrets(\n client,\n token!,\n secretKey!,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate\n )\n } catch (err: any) {\n // eslint-disable-next-line no-console\n console.log('Error while creating and saving signing key:', err?.message)\n throw err\n }\n }\n }\n return {\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n },\n [client, secrets]\n )\n}\n","import {useReducer} from 'react'\n\nimport type {Secrets} from '../util/types'\n\nexport interface State extends Pick<Secrets, 'token' | 'secretKey' | 'enableSignedUrls'> {\n submitting: boolean\n error: string | null\n}\nexport type Action =\n | {type: 'submit'}\n | {type: 'error'; payload: string}\n | {type: 'reset'; payload: Secrets}\n | {type: 'change'; payload: {name: 'token'; value: string}}\n | {type: 'change'; payload: {name: 'secretKey'; value: string}}\n | {type: 'change'; payload: {name: 'enableSignedUrls'; value: boolean}}\nfunction init({token, secretKey, enableSignedUrls}: Secrets): State {\n return {\n submitting: false,\n error: null,\n // Form inputs don't set the state back to null when clearing a field, but uses empty strings\n // This ensures the `dirty` check works correctly\n token: token ?? '',\n secretKey: secretKey ?? '',\n enableSignedUrls: enableSignedUrls ?? false,\n }\n}\nfunction reducer(state: State, action: Action) {\n switch (action?.type) {\n case 'submit':\n return {...state, submitting: true, error: null}\n case 'error':\n return {...state, submitting: false, error: action.payload}\n case 'reset':\n return init(action.payload)\n case 'change':\n return {...state, [action.payload.name]: action.payload.value}\n default:\n throw new Error(`Unknown action type: ${(action as any)?.type}`)\n }\n}\n\nexport const useSecretsFormState = (secrets: Secrets) => useReducer(reducer, secrets, init)\n","import React, {useId, useMemo} from 'react'\n\n// Mapping ids to ensure filter refs are unique, otherwise all Logo instances are hidden if the first SVG is hidden, due to how SVGs deal with relative links and ids\nconst ids = [\n 'title',\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n] as const\nexport interface Props {\n height?: number\n}\nexport default function MuxLogo({height = 26}) {\n const id = useId()\n const [titleId, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r] = useMemo<typeof ids>(\n () => ids.map((field) => `${id}-${field}`) as unknown as typeof ids,\n [id]\n )\n\n return (\n <svg\n aria-labelledby={titleId}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlSpace=\"preserve\"\n viewBox=\"92.08878326416016 102.66712188720703 692.76123046875 219.99948120117188\"\n style={{height: `${height}px`}}\n >\n <title id={titleId}>Mux Logo</title>\n <defs>\n <linearGradient\n id={c}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(528.38055 0 0 -528.38055 63.801 159.5)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={d}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(523.66766 0 0 -523.66766 67.897 159.5)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={g}\n spreadMethod=\"pad\"\n gradientTransform=\"rotate(180 296.075 79.75) scale(524.84045)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={i}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(524.84045 0 0 -524.84045 63.801 159.5)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={j}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(523.08514 0 0 -523.08514 67.897 224.446)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={k}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(524.84045 0 0 -524.84045 63.801 94.553)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={l}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(524.84045 0 0 -524.84045 63.801 159.5)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={m}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(524.84045 0 0 -524.84045 63.801 94.554)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={p}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(521.97632 0 0 -521.97632 69.067 191.973)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={q}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(523.09039 0 0 -523.09039 67.312 191.973)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <linearGradient\n id={r}\n spreadMethod=\"pad\"\n gradientTransform=\"matrix(524.84045 0 0 -524.84045 63.801 159.5)\"\n gradientUnits=\"userSpaceOnUse\"\n y2={0}\n x2={1}\n y1={0}\n x1={0}\n >\n <stop\n offset={0}\n style={{\n stopOpacity: 1,\n stopColor: '#ff4e00',\n }}\n />\n <stop\n offset={1}\n style={{\n stopOpacity: 1,\n stopColor: '#ff1791',\n }}\n />\n </linearGradient>\n <clipPath id={a} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M0 319h657.706V0H0Z\" />\n </clipPath>\n <clipPath id={b} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M423.64 242h164.999V77H423.64Z\" />\n </clipPath>\n <clipPath id={e} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M0 319h657.706V0H0Z\" />\n </clipPath>\n <clipPath id={f} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M311.3 242h93.031V77H311.3Z\" />\n </clipPath>\n <clipPath id={h} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M198.96 242h35.106V77H198.96Z\" />\n </clipPath>\n <clipPath id={n} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M0 319h657.706V0H0Z\" />\n </clipPath>\n <clipPath id={o} clipPathUnits=\"userSpaceOnUse\">\n <path d=\"M69.067 242H169.12V141.947H69.067Z\" />\n </clipPath>\n </defs>\n <g clipPath={`url(#${a})`} transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\">\n <g\n style={{\n opacity: 0.69999701,\n }}\n clipPath={`url(#${b})`}\n >\n <path\n style={{\n fill: `url(#${c})`,\n stroke: 'none',\n }}\n d=\"M558.674 82.142c6.855-6.855 17.969-6.855 24.824 0 6.854 6.855 6.854 17.969 0 24.823L453.605 236.858c-6.855 6.855-17.969 6.855-24.824 0s-6.855-17.969 0-24.823z\"\n />\n </g>\n </g>\n <path\n style={{\n fill: `url(#${d})`,\n stroke: 'none',\n }}\n d=\"M558.674 236.858 428.781 106.966c-6.855-6.855-6.855-17.969 0-24.825 6.855-6.854 17.969-6.854 24.823 0l129.894 129.894c6.854 6.855 6.854 17.968 0 24.823A17.498 17.498 0 0 1 571.086 242a17.495 17.495 0 0 1-12.412-5.142\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <g clipPath={`url(#${e})`} transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\">\n <g\n style={{\n opacity: 0.69999701,\n }}\n clipPath={`url(#${f})`}\n >\n <path\n style={{\n fill: `url(#${g})`,\n stroke: 'none',\n }}\n d=\"M328.853 112.107c22.297 0 40.372 18.075 40.372 40.372v71.315c0 10.054 7.505 18.206 17.554 18.206 10.048 0 17.552-8.152 17.552-18.206v-71.315c0-41.686-33.793-75.479-75.478-75.479-9.694 0-17.553 7.859-17.553 17.554 0 9.694 7.859 17.553 17.553 17.553\"\n />\n </g>\n <g\n style={{\n opacity: 0.69999701,\n }}\n clipPath={`url(#${h})`}\n >\n <path\n style={{\n fill: `url(#${i})`,\n stroke: 'none',\n }}\n d=\"M216.513 242c-10.049 0-17.553-8.152-17.553-18.206V95.206c0-10.054 7.504-18.206 17.553-18.206 10.048 0 17.553 8.152 17.553 18.206v128.588c0 10.054-7.505 18.206-17.553 18.206\"\n />\n </g>\n </g>\n <path\n style={{\n fill: `url(#${j})`,\n stroke: 'none',\n }}\n d=\"M369.225 224.447c0-9.694 7.859-17.553 17.553-17.553 9.695 0 17.553 7.859 17.553 17.553s-7.858 17.552-17.553 17.552c-9.694 0-17.553-7.858-17.553-17.552\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <path\n style={{\n fill: `url(#${k})`,\n stroke: 'none',\n }}\n d=\"M553.532 94.554c0-9.695 7.859-17.554 17.553-17.554 9.695 0 17.554 7.859 17.554 17.554 0 9.694-7.859 17.552-17.554 17.552-9.694 0-17.553-7.858-17.553-17.552\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <path\n style={{\n fill: `url(#${l})`,\n stroke: 'none',\n }}\n d=\"M69.067 223.794V95.206C69.067 85.152 76.571 77 86.62 77c10.048 0 17.553 8.152 17.553 18.206v128.588c0 10.055-7.505 18.205-17.553 18.205-10.049 0-17.553-8.15-17.553-18.205\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <path\n style={{\n fill: `url(#${m})`,\n stroke: 'none',\n }}\n d=\"M198.96 94.554c0-9.695 7.859-17.554 17.553-17.554 9.695 0 17.554 7.859 17.554 17.554 0 9.694-7.859 17.553-17.554 17.553-9.694 0-17.553-7.859-17.553-17.553\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <g clipPath={`url(#${n})`} transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\">\n <g\n style={{\n opacity: 0.69999701,\n }}\n clipPath={`url(#${o})`}\n >\n <path\n style={{\n fill: `url(#${p})`,\n stroke: 'none',\n }}\n d=\"M139.155 147.088c6.855-6.855 17.969-6.855 24.824 0s6.855 17.969 0 24.824l-64.947 64.946c-6.855 6.855-17.969 6.855-24.824 0s-6.855-17.969 0-24.823z\"\n />\n </g>\n </g>\n <path\n style={{\n fill: `url(#${q})`,\n stroke: 'none',\n }}\n d=\"m204.101 236.858-64.947-64.946c-6.854-6.855-6.854-17.969 0-24.824 6.856-6.855 17.97-6.855 24.824 0l64.947 64.947c6.855 6.855 6.855 17.968 0 24.823A17.495 17.495 0 0 1 216.513 242a17.498 17.498 0 0 1-12.412-5.142\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n <path\n style={{\n fill: `url(#${r})`,\n stroke: 'none',\n }}\n d=\"M253.374 223.794v-71.315c0-41.685 33.793-75.479 75.479-75.479 9.695 0 17.553 7.859 17.553 17.554 0 9.694-7.858 17.553-17.553 17.553-22.297 0-40.372 18.075-40.372 40.372v71.315c0 10.055-7.505 18.205-17.554 18.205s-17.553-8.15-17.553-18.205\"\n transform=\"matrix(1.33333 0 0 -1.33333 0 425.333)\"\n />\n </svg>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport MuxLogo from './MuxLogo'\n\nconst Logo = styled.span`\n display: inline-block;\n height: 0.8em;\n margin-right: 1em;\n transform: translate(0.3em, -0.2em);\n`\n\nexport const Header = () => (\n <>\n <Logo>\n <MuxLogo height={13} />\n </Logo>\n API Credentials\n </>\n)\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport React, {memo} from 'react'\n\n// @TODO: get rid of this once v3 core is stable\n\nexport interface Props {\n children: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n inputId: string\n}\n\nfunction FormField(props: Props) {\n const {children, title, description, inputId} = props\n\n return (\n <Stack space={1}>\n <Flex align=\"flex-end\">\n <Box flex={1} paddingY={2}>\n <Stack space={2}>\n <Flex>\n <Text as=\"label\" htmlFor={inputId} weight=\"semibold\" size={1}>\n {title || <em>Untitled</em>}\n </Text>\n\n {description && (\n <Text muted size={1}>\n {description}\n </Text>\n )}\n </Flex>\n </Stack>\n </Box>\n </Flex>\n <div>{children}</div>\n </Stack>\n )\n}\n\nexport default memo(FormField)\n","import {\n Box,\n Button,\n Card,\n Checkbox,\n Code,\n Dialog,\n Flex,\n Inline,\n Stack,\n Text,\n TextInput,\n} from '@sanity/ui'\nimport React, {memo, useCallback, useEffect, useId, useMemo, useRef} from 'react'\nimport {clear, preload} from 'suspend-react'\n\nimport {useClient} from '../hooks/useClient'\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport {useSaveSecrets} from '../hooks/useSaveSecrets'\nimport {useSecretsFormState} from '../hooks/useSecretsFormState'\nimport {cacheNs} from '../util/constants'\nimport {_id as secretsId} from '../util/readSecrets'\nimport type {Secrets} from '../util/types'\nimport {Header} from './ConfigureApi.styled'\nimport FormField from './FormField'\n\nexport interface Props {\n setDialogState: SetDialogState\n secrets: Secrets\n}\nconst fieldNames = ['token', 'secretKey', 'enableSignedUrls'] as const\nfunction ConfigureApi({secrets, setDialogState}: Props) {\n const client = useClient()\n const [state, dispatch] = useSecretsFormState(secrets)\n const hasSecretsInitially = useMemo(() => secrets.token && secrets.secretKey, [secrets])\n const handleClose = useCallback(() => setDialogState(false), [setDialogState])\n const dirty = useMemo(\n () =>\n secrets.token !== state.token ||\n secrets.secretKey !== state.secretKey ||\n secrets.enableSignedUrls !== state.enableSignedUrls,\n [secrets, state]\n )\n const id = `ConfigureApi${useId()}`\n const [tokenId, secretKeyId, enableSignedUrlsId] = useMemo<typeof fieldNames>(\n () => fieldNames.map((field) => `${id}-${field}`) as unknown as typeof fieldNames,\n [id]\n )\n const firstField = useRef<HTMLInputElement>(null)\n const handleSaveSecrets = useSaveSecrets(client, secrets)\n const saving = useRef(false)\n\n const handleSubmit = useCallback(\n (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n\n if (!saving.current && event.currentTarget.reportValidity()) {\n saving.current = true\n dispatch({type: 'submit'})\n const {token, secretKey, enableSignedUrls} = state\n handleSaveSecrets({token, secretKey, enableSignedUrls})\n .then((savedSecrets) => {\n const {projectId, dataset} = client.config()\n clear([cacheNs, secretsId, projectId, dataset])\n preload(() => Promise.resolve(savedSecrets), [cacheNs, secretsId, projectId, dataset])\n setDialogState(false)\n })\n .catch((err) => dispatch({type: 'error', payload: err.message}))\n .finally(() => {\n saving.current = false\n })\n }\n },\n [client, dispatch, handleSaveSecrets, setDialogState, state]\n )\n const handleChangeToken = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n dispatch({\n type: 'change',\n payload: {name: 'token', value: event.currentTarget.value},\n })\n },\n [dispatch]\n )\n const handleChangeSecretKey = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n dispatch({\n type: 'change',\n payload: {name: 'secretKey', value: event.currentTarget.value},\n })\n },\n [dispatch]\n )\n const handleChangeEnableSignedUrls = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n dispatch({\n type: 'change',\n payload: {name: 'enableSignedUrls', value: event.currentTarget.checked},\n })\n },\n [dispatch]\n )\n\n useEffect(() => {\n if (firstField.current) {\n firstField.current.focus()\n }\n }, [firstField])\n\n return (\n <Dialog id={id} onClose={handleClose} header={<Header />} width={0}>\n <Box padding={4} style={{position: 'relative'}}>\n <form onSubmit={handleSubmit} noValidate>\n <Stack space={4}>\n {!hasSecretsInitially && (\n <Card padding={[3, 3, 3]} radius={2} shadow={1} tone=\"primary\">\n <Stack space={3}>\n <Text size={1}>\n To set up a new access token, go to your{' '}\n <a\n href=\"https://dashboard.mux.com/settings/access-tokens\"\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n >\n account on mux.com\n </a>\n .\n </Text>\n <Text size={1}>\n The access token needs permissions: <strong>Mux Video </strong>\n (Full Access) and <strong>Mux Data</strong> (Read)\n <br />\n The credentials will be stored safely in a hidden document only available to\n editors.\n </Text>\n </Stack>\n </Card>\n )}\n <FormField title=\"Access Token\" inputId={tokenId}>\n <TextInput\n id={tokenId}\n ref={firstField}\n onChange={handleChangeToken}\n type=\"text\"\n value={state.token ?? ''}\n required={!!state.secretKey || state.enableSignedUrls}\n />\n </FormField>\n <FormField title=\"Secret Key\" inputId={secretKeyId}>\n <TextInput\n id={secretKeyId}\n onChange={handleChangeSecretKey}\n type=\"text\"\n value={state.secretKey ?? ''}\n required={!!state.token || state.enableSignedUrls}\n />\n </FormField>\n\n <Stack space={4}>\n <Flex align=\"center\">\n <Checkbox\n id={enableSignedUrlsId}\n onChange={handleChangeEnableSignedUrls}\n checked={state.enableSignedUrls}\n style={{display: 'block'}}\n />\n <Box flex={1} paddingLeft={3}>\n <Text>\n <label htmlFor={enableSignedUrlsId}>Enable Signed Urls</label>\n </Text>\n </Box>\n </Flex>\n {/* TODO: use a popover instead to avoid jumping around */}\n {secrets.signingKeyId && state.enableSignedUrls ? (\n <Card padding={[3, 3, 3]} radius={2} shadow={1} tone=\"caution\">\n <Stack space={3}>\n <Text size={1}>The signing key ID that Sanity will use is:</Text>\n <Code size={1}>{secrets.signingKeyId}</Code>\n <Text size={1}>\n This key is only used for previewing content in the Sanity UI.\n <br />\n You should generate a different key to use in your application server.\n </Text>\n </Stack>\n </Card>\n ) : null}\n </Stack>\n\n <Inline space={2}>\n <Button\n text=\"Save\"\n disabled={!dirty}\n loading={state.submitting}\n tone=\"primary\"\n mode=\"default\"\n type=\"submit\"\n />\n <Button\n disabled={state.submitting}\n text=\"Cancel\"\n mode=\"bleed\"\n onClick={handleClose}\n />\n </Inline>\n {state.error && (\n <Card padding={[3, 3, 3]} radius={2} shadow={1} tone=\"critical\">\n <Text>{state.error}</Text>\n </Card>\n )}\n </Stack>\n </form>\n </Box>\n </Dialog>\n )\n}\n\nexport default memo(ConfigureApi)\n","import {PlugIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Grid, Heading, Inline} from '@sanity/ui'\nimport React, {useCallback} from 'react'\n\nimport type {SetDialogState} from '../hooks/useDialogState'\nimport MuxLogo from './MuxLogo'\n\ninterface OnboardProps {\n setDialogState: SetDialogState\n}\n\nexport default function Onboard(props: OnboardProps) {\n const {setDialogState} = props\n const handleOpen = useCallback(() => setDialogState('secrets'), [setDialogState])\n\n return (\n <>\n <div style={{padding: 2}}>\n <Card\n display=\"flex\"\n sizing=\"border\"\n style={{\n aspectRatio: '16/9',\n width: '100%',\n boxShadow: 'var(--card-bg-color) 0 0 0 2px',\n }}\n paddingX={[2, 3, 4, 4]}\n radius={1}\n tone=\"transparent\"\n >\n <Flex justify=\"flex-start\" align=\"center\">\n <Grid columns={1} gap={[2, 3, 4, 4]}>\n <Inline paddingY={1}>\n <div style={{height: '32px'}}>\n <MuxLogo />\n </div>\n </Inline>\n <Inline paddingY={1}>\n <Heading size={[0, 1, 2, 2]}>\n Upload and preview videos directly from your studio.\n </Heading>\n </Inline>\n <Inline paddingY={1}>\n <Button mode=\"ghost\" icon={PlugIcon} text=\"Configure API\" onClick={handleOpen} />\n </Inline>\n </Grid>\n </Flex>\n </Card>\n </div>\n </>\n )\n}\n","import React, {memo} from 'react'\n\nimport {useAssetDocumentValues} from '../hooks/useAssetDocumentValues'\nimport {useClient} from '../hooks/useClient'\nimport {useDialogState} from '../hooks/useDialogState'\nimport {useMuxPolling} from '../hooks/useMuxPolling'\nimport {useSecretsDocumentValues} from '../hooks/useSecretsDocumentValues'\nimport type {Config, MuxInputProps} from '../util/types'\nimport Uploader from './__legacy__Uploader'\nimport ConfigureApi from './ConfigureApi'\nimport {InputFallback} from './Input.styled'\nimport Onboard from './Onboard'\n\nexport interface InputProps extends MuxInputProps {\n config: Config\n}\nconst Input = (props: InputProps) => {\n const client = useClient()\n const secretDocumentValues = useSecretsDocumentValues()\n const assetDocumentValues = useAssetDocumentValues(props.value?.asset)\n const poll = useMuxPolling(props.readOnly ? undefined : assetDocumentValues?.value || undefined)\n const [dialogState, setDialogState] = useDialogState()\n\n const error = secretDocumentValues.error || assetDocumentValues.error || poll.error /*||\n // @TODO move errored logic to Uploader, where handleRemoveVideo can be called\n (assetDocumentValues.value?.status === 'errored'\n ? new Error(assetDocumentValues.value.data?.errors?.messages?.join(' '))\n : undefined)\n // */\n if (error) {\n // @TODO deal with it more gracefully\n throw error\n }\n const isLoading = secretDocumentValues.isLoading || assetDocumentValues.isLoading\n\n return (\n <>\n {isLoading ? (\n <InputFallback />\n ) : (\n <>\n {secretDocumentValues.value.needsSetup && !assetDocumentValues.value ? (\n <Onboard setDialogState={setDialogState} />\n ) : (\n <Uploader\n {...props}\n config={props.config}\n onChange={props.onChange}\n client={client}\n secrets={secretDocumentValues.value.secrets}\n asset={assetDocumentValues.value}\n dialogState={dialogState}\n setDialogState={setDialogState}\n needsSetup={secretDocumentValues.value.needsSetup}\n />\n )}\n\n {dialogState === 'secrets' && (\n <ConfigureApi\n setDialogState={setDialogState}\n secrets={secretDocumentValues.value.secrets}\n />\n )}\n </>\n )}\n </>\n )\n}\n\nexport default memo(Input)\n","// Handy little state machine to simplify managing which root level dialog to open\n\nimport {useState} from 'react'\n\nexport type DialogState = 'secrets' | 'select-video' | 'edit-thumbnail' | false\n\nexport function useDialogState() {\n return useState<DialogState>(false)\n}\n\nexport type SetDialogState = ReturnType<typeof useDialogState>[1]\n"],"names":["path","createUpChunkObservable","uuid","uploadUrl","source","Observable","subscriber","upchunk","UpChunk","createUpload","endpoint","file","dynamicChunkSize","on","next","type","id","complete","data","error","Error","detail","message","percent","pause","resume","abort","deleteAsset","client","assetId","dataset","config","request","url","withCredentials","method","saveSecrets","token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate","doc","_id","_type","createOrReplace","testSecretsObservable","defer","observable","cancelUpload","concat","clientConfig","async","updateAssetDocumentFromUpload","upload","asset","pollInterval","tries","Promise","resolve","reject","setInterval","getUpload","err","asset_id","clearInterval","pollUpload","getAsset","status","playbackId","playback_ids","uploadId","then","testFile","window","File","fileOptions","opts","name","preserveFilename","optionsFromFile","of","throwError","testUrl","parsed","URL","protocol","match","extractDroppedFiles","dataTransfer","files","Array","from","items","length","all","map","item","kind","webkitGetAsEntry","entry","getAsFile","isDirectory","walk","getAsString","str","normalizeItems","arr","flat","isFile","dir","createReader","readEntries","entries","filter","entr","startsWith","AssetActionsMenu","props","useId","dialogState","setDialogState","useState","open","setOpen","menuElement","setMenuRef","handleDelete","useCallback","handleClick","handleClose","useEffect","useClickOutside","jsxs","Fragment","children","jsx","MenuButton","button","Button","icon","EllipsisVerticalIcon","mode","onClick","padding","menu","Menu","ref","MenuItem","tone","TrashIcon","text","portal","placement","DeleteDialog","onClose","useClient","push","pushToast","useToast","deleting","setDeleting","deleteOnMux","setDeleteOnMux","width","getDevicePixelRatio","maxDpr","_a","_b","_c","delete","document","querySelector","parentElement","setAttribute","call","console","closable","description","duration","title","Dialog","header","footer","Grid","gap","columns","loading","Stack","paddingX","paddingY","space","Card","Flex","style","gridColumn","align","Box","as","Checkbox","checked","onChange","prev","Text","margin","disabled","VideoThumbnail","showTip","VideoSource","_ref","assets","isLoading","isLastPage","onSelect","onLoadMore","event","currentTarget","handleKeyPress","key","ThumbGrid","VideoSourceItem","onKeyPress","justify","Spinner","muted","CardLoadMore","direction","DownloadIcon","memo","_ref2","hover","setHover","useRef","useLayoutEffect","current","animate","opacity","height","position","tabIndex","radius","lineHeight","__unstable_focusRing","onMouseEnter","onMouseLeave","AnimateWrapper","AnimatedVideoThumbnail","ActionsAssetsContainer","styled","_templateObject","_taggedTemplateLiteral","div","_templateObject2","SelectAssets","_ref3","pageNoRef","setLastPage","setLoading","setAssets","fetchPage","pageNo","start","end","fetch","createQuery","result","finally","handleSelect","selected","find","TypeError","PatchEvent","setIfMissing","set","_weak","handleLoadMore","InputBrowser","_ref4","scheme","__unstable_autoFocus","SelectAsset","EditThumbnailDialog","_ref6","getCurrentTime","dialogId","nextTime","useMemo","assetWithNewThumbnail","thumbTime","saving","setSaving","setError","handleSave","patch","commit","returnDocuments","catch","size","weight","VideoContainer","_templateObject3","StyledCenterControls","_templateObject4","TopControls","MediaControlBar","_templateObject5","PosterImage","_ref8","src","getPosterSrc","createElement","innerHTML","shadowRoot","appendChild","MediaPosterImage","slot","ThumbnailsMetadataTrack","_ref9","_ref7","getPlaybackId","searchParams","URLSearchParams","getPlaybackPolicy","generateJwt","getStoryboardSrc","label","default","CardWrapper","_templateObject6","FlexWrapper","_templateObject7","LeftSection","_templateObject8","CodeWrapper","Code","_templateObject9","UploadProgress","_ref10","progress","onCancel","filename","border","Inline","marginTop","shadow","LinearProgress","value","fontSize","MuxVideo","_ref11","buttons","readOnly","_d","isPreparingStaticRenditions","static_renditions","videoSrc","_ref5","getVideoSrc","handleError","playRef","muteRef","video","currentTime","handleCancelUpload","unset","useCancelUpload","cloneNode","playerInitTime","generatePlayerInitTime","playbackEngineRef","nextPlaybackEngineRef","initialize","playerSoftwareName","playerSoftwareVersion","errors","messages","join","MediaController","playsInline","onError","preload","crossOrigin","MediaLoadingIndicator","noAutoHide","MediaPlayButton","MediaMuteButton","MediaTimeDisplay","MediaTimeRange","MediaDurationDisplay","MediaFullscreenButton","background","top","left","color","focusRingBorderStyle","focusRingStyle","base","focusRing","focusRingOutsetWidth","offset","focusRingInsetWidth","bgColor","bg","Boolean","FileButton","_ref12","theme","sanity","css","_templateObject10","FileInputMenuItem","React","forwardRef","forwardedRef","idProp","accept","capture","multiple","textAlign","rest","_excluded","idHook","handleChange","target","content","marginRight","isValidElement","isValidElementType","textOverflow","htmlFor","LockCard","_templateObject11","LockButton","_templateObject12","onUpload","isSigned","onReset","Tooltip","LockIcon","EditIcon","Popover","Label","UploadIcon","SearchIcon","MenuDivider","PlugIcon","ResetIcon","UploadCardWithFocusRing","component","$border","rem","UploadCard","_ref13","onPaste","onDrop","onDragEnter","onDragLeave","onDragOver","ctrlDown","inputRef","handleKeyDown","keyCode","focus","handleKeyUp","onKeyDown","onKeyUp","HiddenInput","input","attrs","_templateObject14","_templateObject15","_templateObject16","FileInputButton","_ref14","inputId","handleButtonClick","click","_objectSpread","_templateObject17","ConfigureApiBox","_templateObject18","UploadPlaceholder","hovering","needsSetup","handleBrowse","handleConfigureApi","sizing","borderColor","flex","DocumentVideoIcon","MuxVideoInputUploader","Component","constructor","super","arguments","this","state","isDraggingOver","invalidPaste","invalidFile","uploadProgress","fileInfo","dragEnteredEls","container","createRef","handleProgress","evt","setState","options","undefined","pipe","switchMap","json","generateUuid","body","mp4_support","playback_policy","headers","mergeMap","catchError","mergeMapTo","uploadFile","secrets","takeUntil","onCancelUploadButtonClick$","tap","subscribe","handleUploadEvent","handleUploadSuccess","handlePaste","clipboardData","getData","validUrl","muxBody","query","JSON","stringify","split","slice","results","sEvent","toLowerCase","setTimeout","handleDrop","preventDefault","stopPropagation","nativeEvent","handleDragOver","handleDragEnter","handleDragLeave","idx","indexOf","splice","componentWillUnmount","unSubscribeToUpload","componentDidMount","events$","Subject","asObservable","handleCancelUploadButtonClick","closed","unsubscribe","render","Player","PlayerActionsMenu","useSaveSecrets","_ref15","valid","testSecrets","hasValidSigningKeys","res","e","haveValidSigningKeys","createSigningKeys","private_key","log","init","_ref16","submitting","reducer","action","payload","ids","MuxLogo","_ref17","titleId","a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r","field","role","xmlns","xmlSpace","viewBox","spreadMethod","gradientTransform","gradientUnits","y2","x2","y1","x1","stopOpacity","stopColor","clipPathUnits","clipPath","transform","fill","stroke","Logo","span","_templateObject19","Header","fieldNames","_ref18","dispatch","useReducer","useSecretsFormState","hasSecretsInitially","dirty","tokenId","secretKeyId","enableSignedUrlsId","firstField","handleSaveSecrets","handleSubmit","reportValidity","savedSecrets","projectId","clear","cacheNs","secretsId","handleChangeToken","handleChangeSecretKey","handleChangeEnableSignedUrls","onSubmit","noValidate","href","rel","FormField","TextInput","required","display","paddingLeft","Onboard","handleOpen","aspectRatio","boxShadow","Heading","secretDocumentValues","useDocumentValues","muxSecretsDocumentId","exists","isInitialSetup","useSecretsDocumentValues","assetDocumentValues","useAssetDocumentValues","poll","useProjectId","useDataset","shouldFetch","useSWR","refreshInterval","refreshWhenHidden","dedupingInterval","useMuxPolling","InputFallback","Uploader","ConfigureApi"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=["icon","id","accept","capture","fontSize","multiple","onSelect","padding","space","textAlign","text","disabled"],t=["onSelect"];var n,r,i,o,a,s,l,d,c,u,p,h,g,f,m,y,v,b,w;function x(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function S(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function k(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?k(Object(n),!0).forEach((function(t){U(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}import{jsxs as O,jsx as P,Fragment as D}from"react/jsx-runtime";import E,{useState as I,useMemo as T,memo as _,useRef as j,useLayoutEffect as M,useCallback as K,useId as z,useEffect as L,isValidElement as R,createElement as A,forwardRef as F,Component as G,useReducer as q}from"react";import{u as V,V as H,A as B,T as Y,C as Z,g as N,a as W,b as X,c as $,_ as J,d as Q}from"./VideoSource.styled-f92259cd.esm.js";import{useProjectId as ee,useDataset as te,useDocumentValues as ne,PatchEvent as re,setIfMissing as ie,set as oe,unset as ae,LinearProgress as se}from"sanity";import le from"swr";import{m as de,c as ce,I as ue}from"./index-3d8d7583.esm.js";import{Observable as pe,defer as he,concat as ge,of as fe,throwError as me,from as ye,Subject as ve}from"rxjs";import{switchMap as be,mergeMap as we,catchError as xe,mergeMapTo as Se,takeUntil as ke,tap as Ce}from"rxjs/operators";import{uuid as Ue}from"@sanity/uuid";import*as Oe from"@mux/upchunk";import{Card as Pe,Box as De,Flex as Ee,Spinner as Ie,Text as Te,Button as _e,useClickOutside as je,MenuButton as Me,Menu as Ke,MenuItem as ze,useToast as Le,Dialog as Re,Grid as Ae,Stack as Fe,Checkbox as Ge,Code as qe,Inline as Ve,Tooltip as He,Popover as Be,Label as Ye,MenuDivider as Ze,rem as Ne,TextInput as We,Heading as Xe}from"@sanity/ui";import{DownloadIcon as $e,EllipsisVerticalIcon as Je,TrashIcon as Qe,LockIcon as et,EditIcon as tt,UploadIcon as nt,SearchIcon as rt,PlugIcon as it,ResetIcon as ot,DocumentVideoIcon as at}from"@sanity/icons";import{animate as st}from"motion";import lt,{css as dt}from"styled-components";import{getDevicePixelRatio as ct}from"use-device-pixel-ratio";import{generatePlayerInitTime as ut,initialize as pt}from"@mux/playback-core";import{MediaControlBar as ht,MediaPosterImage as gt,MediaController as ft,MediaLoadingIndicator as mt,MediaPlayButton as yt,MediaMuteButton as vt,MediaTimeDisplay as bt,MediaTimeRange as wt,MediaDurationDisplay as xt,MediaFullscreenButton as St}from"media-chrome/dist/react";import{isValidElementType as kt}from"react-is";import{clear as Ct,preload as Ut}from"suspend-react";import"use-error-boundary";import"scroll-into-view-if-needed";const Ot=["token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate"];function Pt(e,t,n){return new pe((r=>{const i=Oe.createUpload({endpoint:t,file:n,dynamicChunkSize:!0});return i.on("success",(()=>{r.next({type:"success",id:e}),r.complete()})),i.on("error",(e=>r.error(new Error(e.detail.message)))),i.on("progress",(e=>r.next({type:"progress",percent:e.detail}))),i.on("offline",(()=>{i.pause(),r.next({type:"pause",id:e})})),i.on("online",(()=>{i.resume(),r.next({type:"resume",id:e})})),()=>i.abort()}))}function Dt(e,t){const{dataset:n}=e.config();return e.request({url:"/addons/mux/assets/".concat(n,"/").concat(t),withCredentials:!0,method:"DELETE"})}function Et(e,t,n,r,i,o){const a={_id:"secrets.mux",_type:"mux.apiKey",token:t,secretKey:n,enableSignedUrls:r,signingKeyId:i,signingKeyPrivate:o};return e.createOrReplace(a)}function It(e){const{dataset:t}=e.config();return he((()=>e.observable.request({url:"/addons/mux/secrets/".concat(t,"/test"),withCredentials:!0,method:"GET"})))}function Tt(e,t){return e.observable.request({url:"/addons/mux/uploads/".concat(e.clientConfig.dataset,"/").concat(t),withCredentials:!0,method:"DELETE"})}async function _t(e,t){let n,r;try{n=await function(e,t){let n,r,i,o=0;return new Promise(((a,s)=>{n=setInterval((async()=>{try{i=await function(e,t){const{dataset:n}=e.config();return e.request({url:"/addons/mux/uploads/".concat(n,"/").concat(t),withCredentials:!0,method:"GET"})}(e,t)}catch(e){return void s(e)}r=i&&i.data&&i.data.asset_id,r&&(clearInterval(n),a(i)),o>10&&(clearInterval(n),s(new Error("Upload did not finish"))),o++}),2e3)}))}(e,t)}catch(e){return Promise.reject(e)}try{r=await function(e,t){const{dataset:n}=e.config();return e.request({url:"/addons/mux/assets/".concat(n,"/data/").concat(t),withCredentials:!0,method:"GET"})}(e,n.data.asset_id)}catch(e){return Promise.reject(e)}const i={_id:t,_type:"mux.videoAsset",status:r.data.status,data:r.data,assetId:r.data.id,playbackId:r.data.playback_ids[0].id,uploadId:n.data.id};return e.createOrReplace(i).then((()=>i))}function jt(e){if("undefined"!=typeof window&&e instanceof window.File){const t=function(e,t){if("undefined"==typeof window||!(t instanceof window.File))return e;return{name:!1===e.preserveFilename?void 0:t.name,type:t.type}}({},e);return fe(t)}return me(new Error("Invalid file"))}function Mt(e){const t=new Error("Invalid URL");if("string"!=typeof e)return me(t);let n;try{n=new URL(e)}catch(e){return me(t)}return n&&!n.protocol.match(/http:|https:/)?me(t):fe(e)}function Kt(e){const t=Array.from(e.files||[]),n=Array.from(e.items||[]);return t&&t.length>0?Promise.resolve(t):function(e){return Promise.all(e.map((e=>{if("file"===e.kind&&e.webkitGetAsEntry){let t;try{t=e.webkitGetAsEntry()}catch(t){return[e.getAsFile()]}return t?t.isDirectory?zt(t):[e.getAsFile()]:[]}if("file"===e.kind){const t=e.getAsFile();return Promise.resolve(t?[t]:[])}return new Promise((t=>e.getAsString(t))).then((t=>t?[new File([t],"unknown.txt",{type:e.type})]:[]))})))}(n).then((e=>e.flat()))}function zt(e){if(function(e){return e.isFile}(e))return new Promise((t=>e.file(t))).then((e=>[e]));if(function(e){return e.isDirectory}(e)){const t=e.createReader();return new Promise((e=>t.readEntries(e))).then((e=>e.filter((e=>!e.name.startsWith("."))))).then((e=>Promise.all(e.map(zt)).then((e=>e.flat()))))}return Promise.resolve([])}function Lt(e){const{asset:t}=e,n=z(),[r,i]=I(),[o,a]=I(!1),[s,l]=I(null),d=K((()=>i("confirm-delete")),[]),c=K((()=>{i(!1),a(!0)}),[i]),u=K((()=>{i(!1),a(!1)}),[i]);return L((()=>{o&&r&&a(!1)}),[r,o]),je(K((()=>a(!1)),[]),[s]),O(D,{children:[P(Me,{id:"".concat(n,"-asset-menu"),button:P(_e,{icon:Je,mode:"ghost",onClick:c,padding:2}),menu:P(Ke,{ref:l,children:P(ze,{tone:"critical",icon:Qe,text:"Delete",onClick:d})}),portal:!0,placement:"right"}),"confirm-delete"===r&&P(Rt,{asset:t,onClose:u})]})}function Rt(e){const{asset:t,onClose:n}=e,r=V(),{push:i}=Le(),[o,a]=I(!1),[s,l]=I(!1),d=z(),c=200*ct({maxDpr:2}),u=K((async()=>{var e,o,l;a(!0);try{(null==t?void 0:t._id)&&await r.delete(t._id),s&&(null==t?void 0:t.assetId)&&await Dt(r,t.assetId),null==(l=null==(o=null==(e=document.querySelector('[data-id="'.concat(t._id,'"]')))?void 0:e.parentElement)?void 0:o.setAttribute)||l.call(o,"hidden","true")}catch(e){console.error("Failed during delete",e),i({closable:!0,description:null==e?void 0:e.message,duration:5e3,title:"Uncaught error",status:"error"})}finally{a(!1),n()}}),[t._id,t.assetId,r,s,n,i]);return P(Re,{onClose:n,id:"".concat(d,"-confirm-delete"),header:"Delete video",footer:O(Ae,{padding:2,gap:2,columns:2,children:[P(_e,{mode:"bleed",text:"Cancel",onClick:n}),P(_e,{text:"Delete",tone:"critical",icon:Qe,onClick:u,loading:o})]}),width:1,children:P(Fe,{paddingX:0,paddingY:0,space:1,children:P(Pe,{paddingX:[2,3,4],paddingY:[3,3,3,4],children:O(Ae,{columns:3,gap:3,children:[P(Ee,{style:{gridColumn:"span 2"},align:"center",children:P(De,{padding:4,children:O(Fe,{space:4,children:[O(Ee,{align:"center",as:"label",children:[P(Ge,{checked:s,onChange:()=>l((e=>!e))}),P(Te,{style:{margin:"0 10px"},children:"Delete asset on Mux"})]}),O(Ee,{align:"center",as:"label",children:[P(Ge,{disabled:!0,checked:!0}),P(Te,{style:{margin:"0 10px"},children:"Delete video from dataset"})]})]})})}),P(H,{asset:t,width:c,showTip:!0})]})})})})}function At(e){let{assets:t,isLoading:n,isLastPage:r,onSelect:i,onLoadMore:o}=e;const a=K((e=>i(e.currentTarget.dataset.id)),[i]),s=K((e=>{"Enter"===e.key&&i(e.currentTarget.dataset.id)}),[i]),l=200*ct({maxDpr:2});return O(D,{children:[O(De,{padding:4,children:[P(Y,{gap:2,children:t.map((e=>P(Ft,{asset:e,onClick:a,onKeyPress:s,width:l},e._id)))}),n&&0===t.length&&P(Ee,{justify:"center",children:P(Ie,{muted:!0})}),!n&&0===t.length&&P(Te,{align:"center",muted:!0,children:"No videos"})]}),t.length>0&&!r&&P(Z,{tone:"default",padding:4,children:P(Ee,{direction:"column",children:P(_e,{type:"button",icon:$e,loading:n,onClick:o,text:"Load more",tone:"primary"})})})]})}const Ft=_((e=>{let{asset:t,onClick:n,onKeyPress:r,width:i}=e;const[o,a]=I(null),s=j(null);return M((()=>{s.current&&null!==o&&st(s.current,o?{opacity:1}:{opacity:0})}),[o]),O(De,{height:"fill",style:{position:"relative"},children:[O(Pe,{as:"button","data-id":t._id,onClick:n,onKeyPress:r,tabIndex:0,radius:2,padding:1,style:{lineHeight:0,position:"relative"},__unstable_focusRing:!0,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[P(H,{asset:t,width:i,showTip:!0}),(null==t?void 0:t.playbackId)&&P(Gt,{tone:"transparent",ref:s,margin:1,radius:1,children:null!==o&&P(B,{asset:t,width:i})})]}),P(qt,{children:P(Lt,{asset:t})})]})})),Gt=lt(Pe)(n||(n=S(["\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n will-change: opacity;\n background: transparent;\n background-color: hsl(0deg 0% 0% / 33%);\n opacity: 0;\n pointer-events: none;\n"]))),qt=lt.div(r||(r=S(["\n box-sizing: border-box;\n position: absolute;\n z-index: 300;\n opacity: 0;\n top: 7px;\n right: 7px;\n\n button:hover + &,\n button:focus-visible + &,\n &:hover,\n &:focus-visible {\n opacity: 1;\n }\n"])));function Vt(e){let{asset:t,onChange:n,setDialogState:r}=e;const i=V(),o=j(0),[a,s]=I(!1),[l,d]=I(!1),[c,u]=I([]),p=K((e=>{const t=200*e,n=t+200;return d(!0),i.fetch(function(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return'*[_type == "mux.videoAsset"] | order(_updatedAt desc) ['.concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,"...").concat(e,"]")}(t,n)).then((e=>{s(e.length<200),u((t=>t.concat(e)))})).finally((()=>d(!1)))}),[i]),h=K((e=>{const t=c.find((t=>t._id===e));if(!t)throw new TypeError("Failed to find video asset with id: ".concat(e));n(re.from([ie({asset:{}}),oe({_type:"reference",_weak:!0,_ref:t._id},["asset"])])),r(!1)}),[c,n,r]),g=K((()=>{p(++o.current)}),[p]);return L((()=>{p(o.current)}),[p]),P(At,{onSelect:h,assets:c,isLastPage:a,isLoading:l,onLoadMore:g})}function Ht(e){let{setDialogState:t,asset:n,onChange:r}=e;const i="InputBrowser".concat(z()),o=K((()=>t(!1)),[t]);return P(Re,{scheme:"dark",__unstable_autoFocus:!0,header:"Select video",id:i,onClose:o,width:2,children:P(Vt,{asset:n,onChange:r,setDialogState:t})})}function Bt(e){let{asset:t,getCurrentTime:n,setDialogState:r}=e;const i=V(),o="EditThumbnailDialog".concat(z()),a=T((()=>n()),[n]),s=T((()=>C(C({},t),{},{thumbTime:a})),[t,a]),[l,d]=I(!1),[c,u]=I(null),p=K((()=>{d(!0),i.patch(t._id).set({thumbTime:a}).commit({returnDocuments:!1}).then((()=>{r(!1)})).catch(u).finally((()=>{d(!1)}))}),[i,t._id,a,r]),h=300*ct({maxDpr:2});if(c)throw c;return P(Re,{id:o,header:"Edit thumbnail",onClose:()=>r(!1),footer:P(Fe,{padding:3,children:P(_e,{mode:"ghost",tone:"primary",loading:l,onClick:p,text:"Set new thumbnail"},"thumbnail")}),children:O(Fe,{space:3,padding:3,children:[O(Fe,{space:2,children:[P(Te,{size:1,weight:"semibold",children:"Current:"}),P(H,{asset:t,width:h})]}),O(Fe,{space:2,children:[P(Te,{size:1,weight:"semibold",children:"New:"}),P(H,{asset:s,width:h})]})]})})}const Yt=lt(Pe)(i||(i=S(["\n position: relative;\n min-height: 150px;\n aspect-ratio: 16 / 9;\n overflow: hidden;\n border-radius: 1px;\n media-airplay-button[media-airplay-unavailable] {\n display: none;\n }\n media-volume-range[media-volume-unavailable] {\n display: none;\n }\n media-pip-button[media-pip-unavailable] {\n display: none;\n }\n media-controller {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n --media-range-track-background-color: rgba(255, 255, 255, 0.5);\n --media-range-track-border-radius: 3px;\n width: 100%;\n height: 100%;\n background-color: transparent;\n }\n media-control-bar {\n --media-button-icon-width: 18px;\n --media-preview-time-margin: 0px;\n }\n media-control-bar:not([slot]) :is([role='button'], [role='switch'], button) {\n height: 44px;\n }\n .size-extra-small media-control-bar [role='button'],\n .size-extra-small media-control-bar [role='switch'] {\n height: auto;\n padding: 4.4% 3.2%;\n }\n .mxp-spacer {\n flex-grow: 1;\n height: 100%;\n background-color: var(--media-control-background, rgba(20, 20, 30, 0.7));\n }\n media-controller::part(vertical-layer) {\n transition: background-color 1s;\n }\n media-controller:is([media-paused], :not([user-inactive]))::part(vertical-layer) {\n background-color: rgba(0, 0, 0, 0.6);\n transition: background-color 0.25s;\n }\n .mxp-center-controls {\n --media-background-color: transparent;\n --media-button-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n }\n .mxp-center-controls media-play-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n width: max(27px, min(9%, 90px));\n }\n .mxp-center-controls media-seek-backward-button,\n .mxp-center-controls media-seek-forward-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n margin: 0 10%;\n width: min(7%, 70px);\n }\n media-loading-indicator {\n --media-loading-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n position: absolute;\n width: min(15%, 150px);\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n }\n /* Intentionally don't target the div for transition but the children\n of the div. Prevents messing with media-chrome's autohide feature. */\n media-loading-indicator + div * {\n transition: opacity 0.15s;\n opacity: 1;\n }\n media-loading-indicator[media-loading]:not([media-paused]) ~ div > * {\n opacity: 0;\n transition-delay: 400ms;\n }\n media-volume-range {\n width: min(100%, 100px);\n }\n media-time-display {\n white-space: nowrap;\n }\n :is(media-time-display, media-text-display, media-playback-rate-button) {\n color: inherit;\n }\n media-controller:fullscreen media-control-bar[slot='top-chrome'] {\n /* Hide menus and buttons that trigger modals when in full-screen */\n display: none;\n }\n video {\n background: transparent;\n }\n media-controller:not(:fullscreen) video {\n aspect-ratio: 16 / 9;\n }\n media-controller:not(:-webkit-full-screen) video {\n aspect-ratio: 16 / 9;\n }\n"]))),Zt=lt.div(o||(o=S(["\n && {\n --media-background-color: transparent;\n --media-button-icon-width: 100%;\n --media-button-icon-height: auto;\n pointer-events: none;\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n media-play-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n width: max(27px, min(9%, 90px));\n }\n }\n"]))),Nt=lt(ht)(a||(a=S(["\n justify-content: flex-end;\n button {\n height: auto;\n }\n"])));function Wt(e){let{asset:t}=e;const n=V(),r=j(null),i=T((()=>$({client:n,asset:t,width:1920,height:1080})),[n,t]);return L((()=>{var e;if(r.current){const t=document.createElement("style");t.innerHTML="img { object-fit: contain; }",(null==(e=r.current)?void 0:e.shadowRoot)&&r.current.shadowRoot.appendChild(t)}}),[]),P(gt,{ref:r,slot:"poster",src:i})}function Xt(e){let{asset:t}=e;const n=V(),[r]=I((()=>function(e){let{asset:t,client:n}=e;const r=N(t),i=new URLSearchParams;if("signed"===W(t)){const e=X(n,r,"s");i.set("token",e)}return"https://image.mux.com/".concat(r,"/storyboard.vtt?").concat(i)}({asset:t,client:n})));return P("track",{label:"thumbnails",default:!0,kind:"metadata",src:r})}const $t=lt(Pe)(s||(s=S(["\n min-height: 82px;\n box-sizing: border-box;\n"]))),Jt=lt(Ee)(l||(l=S(["\n text-overflow: ellipsis;\n overflow: hidden;\n"]))),Qt=lt(Fe)(d||(d=S(["\n position: relative;\n width: 60%;\n"]))),en=lt(qe)(c||(c=S(["\n position: relative;\n width: 100%;\n\n code {\n overflow: hidden;\n text-overflow: ellipsis;\n position: relative;\n max-width: 200px;\n }\n"]))),tn=e=>{let{progress:t=100,onCancel:n,filename:r,text:i="Uploading"}=e;return P($t,{tone:"primary",padding:4,border:!0,height:"fill",children:O(Jt,{align:"center",justify:"space-between",height:"fill",direction:"row",gap:2,children:[O(Qt,{children:[P(Ee,{justify:"center",gap:[3,3,2,2],direction:["column","column","row"],children:P(Te,{size:1,children:O(Ve,{space:2,children:[i,P(en,{size:1,children:r||"..."})]})})}),P(Pe,{marginTop:3,radius:5,shadow:1,children:P(se,{value:t})})]}),n?P(_e,{fontSize:2,text:"Cancel upload",mode:"ghost",tone:"critical",onClick:n}):null]})})},nn=e=>{let{asset:t,buttons:n,readOnly:r,onChange:i,dialogState:o,setDialogState:a}=e;var s,l,d,c;const u=V(),p=T((()=>"preparing"===(null==t?void 0:t.status)?"Preparing the video":"waiting_for_upload"===(null==t?void 0:t.status)?"Waiting for upload to start":"waiting"===(null==t?void 0:t.status)?"Processing upload":"ready"!==(null==t?void 0:t.status)&&void 0!==(null==t?void 0:t.status)),[t]),h=T((()=>{var e,n,r,i;return"preparing"===(null==(n=null==(e=null==t?void 0:t.data)?void 0:e.static_renditions)?void 0:n.status)||(null==(i=null==(r=null==t?void 0:t.data)?void 0:r.static_renditions)||i.status,!1)}),[null==(l=null==(s=null==t?void 0:t.data)?void 0:s.static_renditions)?void 0:l.status]),g=T((()=>t.playbackId&&function(e){let{asset:t,client:n}=e;const r=N(t),i=new URLSearchParams;if("signed"===W(t)){const e=X(n,r,"v");i.set("token",e)}return"https://stream.mux.com/".concat(r,".m3u8?").concat(i)}({client:u,asset:t})),[t,u]),[f,m]=I(null),y=K((e=>m(e.currentTarget.error)),[]),v=j(null),b=j(null),w=j(null),x=K((()=>{var e,t;return null!=(t=null==(e=w.current)?void 0:e.currentTime)?t:0}),[w]),S=((e,t)=>{const n=V();return K((()=>{e&&(t(re.from(ae())),e.assetId&&Dt(n,e.assetId),e._id&&n.delete(e._id))}),[e,n,t])})(t,i);L((()=>{var e,t;const n=document.createElement("style");n.innerHTML="button svg { vertical-align: middle; }",(null==(e=v.current)?void 0:e.shadowRoot)&&v.current.shadowRoot.appendChild(n),(null==(t=null==b?void 0:b.current)?void 0:t.shadowRoot)&&b.current.shadowRoot.appendChild(n.cloneNode(!0))}),[]);const[k]=I((()=>ut())),C=j(void 0);if(L((()=>{if(p||!g)return;const e=pt({src:g,playerInitTime:k,playerSoftwareName:"sanity-plugin-mux-input",playerSoftwareVersion:"dev-preview"},w.current,C.current);C.current=e}),[g,p,k]),L((()=>{var e,n,r;if("errored"===(null==t?void 0:t.status))throw S(),new Error(null==(r=null==(n=null==(e=t.data)?void 0:e.errors)?void 0:n.messages)?void 0:r.join(" "))}),[null==(c=null==(d=t.data)?void 0:d.errors)?void 0:c.messages,null==t?void 0:t.status,S]),f)throw f;return t&&t.status?p?P(tn,{progress:100,filename:null==t?void 0:t.filename,text:!0!==p&&p||"Waiting for Mux to complete the file",onCancel:r?void 0:()=>S()}):O(D,{children:[O(Yt,{shadow:1,tone:"transparent",scheme:"dark",children:[O(ft,{children:[P("video",{playsInline:!0,ref:w,onError:y,slot:"media",preload:"metadata",crossOrigin:"anonomous",children:P(Xt,{asset:t})}),P(Wt,{asset:t}),P(mt,{slot:"centered-chrome",noAutoHide:!0}),P(Zt,{slot:"centered-chrome",children:P(yt,{})}),n&&P(Nt,{slot:"top-chrome",children:n}),O(ht,{children:[P(vt,{}),P(bt,{}),P(wt,{}),P(xt,{}),P(St,{})]})]}),h&&P(Pe,{padding:2,radius:1,style:{background:"var(--card-fg-color)",position:"absolute",top:"0.5em",left:"0.5em"},children:P(Te,{size:1,style:{color:"var(--card-bg-color)"},children:"MUX is preparing static renditions, please stand by"})})]}),"edit-thumbnail"===o&&P(Bt,{asset:t,getCurrentTime:x,setDialogState:a})]}):null};function rn(e){return"inset 0 0 0 ".concat(e.width,"px ").concat(e.color)}function on(e){const{base:t,border:n,focusRing:r}=e,i=r.offset+r.width,o=0-r.offset,a=t?t.bg:"var(--card-bg-color)";return[o>0&&"inset 0 0 0 ".concat(o,"px var(--card-focus-ring-color)"),n&&rn(n),o<0&&"0 0 0 ".concat(0-o,"px ").concat(a),i>0&&"0 0 0 ".concat(i,"px var(--card-focus-ring-color)")].filter(Boolean).join(",")}const an=lt(ze)((e=>{let{theme:t}=e;const{focusRing:n}=t.sanity,r=t.sanity.color.base;return dt(u||(u=S(["\n position: relative;\n\n &:not([data-disabled='true']) {\n &:focus-within {\n box-shadow: ",";\n }\n }\n\n & input {\n overflow: hidden;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n min-width: 0;\n display: block;\n appearance: none;\n padding: 0;\n margin: 0;\n border: 0;\n opacity: 0;\n }\n "])),on({base:r,border:{width:1,color:"var(--card-border-color)"},focusRing:n}))})),sn=E.forwardRef((function(t,n){const{icon:r,id:i,accept:o,capture:a,fontSize:s,multiple:l,onSelect:d,padding:c=3,space:u=3,textAlign:p,text:h,disabled:g}=t,f=x(t,e),m=z(),y=i||m,v=E.useCallback((e=>{d&&e.target.files&&d(Array.from(e.target.files))}),[d]),b=O(Ee,{align:"center",justify:"flex-start",padding:c,children:[r&&P(De,{marginRight:h?u:void 0,children:O(Te,{size:s,children:[R(r)&&r,kt(r)&&A(r)]})}),h&&P(Te,{align:p,size:s,textOverflow:"ellipsis",children:h})]});return O(an,C(C({},f),{},{htmlFor:y,padding:0,fontSize:2,disabled:g,ref:n,children:[b,P("input",{"data-testid":"file-button-input",accept:o,capture:a,id:y,multiple:l,onChange:v,type:"file",value:"",disabled:g})]}))})),ln=lt(Pe)(p||(p=S(["\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.6;\n mix-blend-mode: screen;\n background: transparent;\n"]))),dn=lt(_e)(h||(h=S(["\n background: transparent;\n color: white;\n"])));var cn=_((function(e){const{asset:t,readOnly:n,dialogState:r,setDialogState:i,onChange:o,onUpload:a}=e,[s,l]=I(!1),[d,c]=I(null),u=T((()=>"signed"===W(t)),[t]),p=K((()=>o(re.from(ae([])))),[o]);return L((()=>{s&&r&&l(!1)}),[r,s]),je(K((()=>l(!1)),[]),[d]),O(Ve,{space:1,padding:2,children:[u&&P(He,{content:P(De,{padding:2,children:P(Te,{muted:!0,size:1,children:"Signed playback policy"})}),placement:"right",portal:!0,children:P(ln,{radius:2,margin:2,scheme:"dark",tone:"positive",children:P(dn,{icon:et,mode:"bleed",tone:"positive"})})}),!n&&P(_e,{icon:tt,mode:"ghost",onClick:()=>i("edit-thumbnail")}),P(Be,{content:O(Ke,{ref:c,children:[P(De,{padding:2,children:P(Ye,{muted:!0,size:1,children:"Replace"})}),P(sn,{accept:"video/*",icon:nt,mode:"bleed",onSelect:a,text:"Upload",disabled:n,fontSize:2}),P(ze,{icon:rt,text:"Browse",onClick:()=>i("select-video")}),P(Ze,{}),P(ze,{icon:it,text:"Configure API",onClick:()=>i("secrets")}),P(Ze,{}),P(ze,{tone:"critical",icon:ot,text:"Clear field",onClick:p,disabled:n})]}),portal:!0,open:s,children:P(_e,{icon:Je,mode:"ghost",onClick:()=>{i(!1),l(!0)}})})]})}));const un=lt(Pe)((e=>{const t={width:e.$border?1:0,color:"var(--card-border-color)"};return dt(g||(g=S(["\n --card-focus-box-shadow: ",";\n\n border-radius: ",";\n outline: none;\n box-shadow: var(--card-focus-box-shadow);\n\n &:focus {\n --card-focus-box-shadow: ",";\n }\n "])),rn(t),Ne(e.theme.sanity.radius[1]),on({base:e.theme.sanity.color.base,border:t,focusRing:e.theme.sanity.focusRing}))}));const pn=F(((e,t)=>{let{children:n,tone:r,onPaste:i,onDrop:o,onDragEnter:a,onDragLeave:s,onDragOver:l}=e;const d=j(!1),c=j(null),u=K((e=>{17!=e.keyCode&&91!=e.keyCode||(d.current=!0);d.current&&86==e.keyCode&&c.current.focus()}),[]),p=K((e=>{17!=e.keyCode&&91!=e.keyCode||(d.current=!1)}),[]);return O(un,{tone:r,height:"fill",ref:t,padding:0,radius:2,shadow:0,tabIndex:0,onKeyDown:u,onKeyUp:p,onPaste:i,onDrop:o,onDragEnter:a,onDragLeave:s,onDragOver:l,children:[P(hn,{ref:c,onPaste:i}),n]})})),hn=lt.input.attrs({type:"text"})(f||(f=S(["\n position: absolute;\n border: 0;\n color: white;\n opacity: 0;\n\n &:focus {\n outline: none;\n }\n"]))),gn=lt.input(m||(m=S(["\n overflow: hidden;\n width: 0.1px;\n height: 0.1px;\n opacity: 0;\n position: absolute;\n z-index: -1;\n"]))),fn=lt.label(y||(y=S(["\n position: relative;\n"]))),mn=e=>{let{onSelect:n}=e,r=x(e,t);const i="FileSelect".concat(z()),o=j(null),a=K((e=>{n&&n(e.target.files)}),[n]),s=K((()=>{var e;return null==(e=o.current)?void 0:e.click()}),[]);return O(fn,{htmlFor:i,children:[P(gn,{accept:"video/*",ref:o,tabIndex:0,type:"file",id:i,onChange:a,value:""}),P(_e,C({onClick:s,mode:"default",tone:"primary",style:{width:"100%"}},r))]})},yn=lt(Pe)(v||(v=S(["\n && {\n border-style: dashed;\n }\n"]))),vn=lt(De)(b||(b=S(["\n position: absolute;\n top: 0;\n right: 0;\n"])));function bn(e){const{setDialogState:t,readOnly:n,onSelect:r,hovering:i,needsSetup:o}=e,a=K((()=>t("select-video")),[t]),s=K((()=>t("secrets")),[t]);return P(De,{style:{padding:1,position:"relative"},height:"stretch",children:O(yn,{sizing:"border",height:"fill",tone:n?"transparent":"inherit",border:!0,padding:3,style:i?{borderColor:"transparent"}:void 0,children:[P(vn,{padding:3,children:P(_e,{padding:3,radius:3,tone:o?"critical":void 0,onClick:s,icon:it,mode:"bleed"})}),O(Ee,{align:"center",justify:"space-between",gap:4,direction:["column","column","row"],paddingY:[2,2,0],sizing:"border",height:"fill",children:[O(Ee,{align:"center",justify:"center",gap:2,flex:1,children:[P(Ee,{justify:"center",children:P(Te,{muted:!0,children:P(at,{})})}),P(Ee,{justify:"center",children:P(Te,{size:1,muted:!0,children:"Drag video or paste URL here"})})]}),O(Ve,{space:2,children:[P(mn,{mode:"ghost",tone:"default",icon:nt,text:"Upload",onSelect:r}),P(_e,{mode:"ghost",icon:rt,text:"Select",onClick:a})]})]})]})})}class wn extends G{constructor(){super(...arguments),this.state={isDraggingOver:!1,invalidPaste:!1,invalidFile:!1,uploadProgress:null,fileInfo:null,uuid:null,error:null,url:null},this.dragEnteredEls=[],this.ctrlDown=!1,this.upload=null,this.container=E.createRef(),this.handleProgress=e=>{this.setState({uploadProgress:e.percent})},this.onUpload=e=>{this.setState({uploadProgress:0,fileInfo:null,uuid:null}),this.upload=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return jt(n).pipe(be((i=>ge(fe({type:"file",file:i}),It(t).pipe(be((i=>{if(!i||!i.status)return me(new Error("Invalid credentials"));const o=Ue(),{enableSignedUrls:a}=r,s={mp4_support:e.mp4_support,playback_policy:[a?"signed":"public"]};return ge(fe({type:"uuid",uuid:o}),he((()=>t.observable.request({url:"/addons/mux/uploads/".concat(t.clientConfig.dataset),withCredentials:!0,method:"POST",headers:{"MUX-Proxy-UUID":o,"Content-Type":"application/json"},body:s}))).pipe(we((e=>Pt(o,e.upload.url,n).pipe(we((e=>"success"!==e.type?fe(e):ye(_t(t,o)).pipe(we((t=>fe(C(C({},e),{},{asset:t}))))))),xe((e=>Tt(t,o).pipe(Se(me(e))))))))))})))))))}(this.props.config,this.props.client,e[0],{enableSignedUrls:this.props.secrets.enableSignedUrls}).pipe(ke(this.onCancelUploadButtonClick$.pipe(Ce((()=>{this.state.uuid&&this.props.client.delete(this.state.uuid)}))))).subscribe({complete:()=>{this.setState({error:null,uploadProgress:null,uuid:null})},next:e=>{this.handleUploadEvent(e)},error:e=>{this.setState({error:e,uploadProgress:null,uuid:null})}})},this.handleUploadEvent=e=>{switch(e.type){case"success":return this.handleUploadSuccess(e.asset);case"progress":return this.handleProgress(e);case"file":return this.setState({fileInfo:e.file});case"uuid":return this.setState({uuid:e.uuid});case"url":return this.setState({url:e.url,uploadProgress:100});default:return null}},this.handleUploadSuccess=e=>{this.setState({uploadProgress:100}),this.props.onChange(re.from([ie({asset:{}}),oe({_type:"reference",_weak:!0,_ref:e._id},["asset"])]))},this.handlePaste=e=>{const t=(e.clipboardData||window.clipboardData).getData("text"),n={enableSignedUrls:this.props.secrets.enableSignedUrls};this.upload=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return Mt(n).pipe(be((n=>ge(fe({type:"url",url:n}),It(t).pipe(be((i=>{if(!i||!i.status)return me(new Error("Invalid credentials"));const o=Ue(),{enableSignedUrls:a}=r,s={input:n,playback_policy:[a?"signed":"public"],mp4_support:e.mp4_support},l={muxBody:JSON.stringify(s),filename:n.split("/").slice(-1)[0]},d=t.clientConfig.dataset;return he((()=>t.observable.request({url:"/addons/mux/assets/".concat(d),withCredentials:!0,method:"POST",headers:{"MUX-Proxy-UUID":o,"Content-Type":"application/json"},query:l}))).pipe(we((e=>{const t=e&&e.results&&e.results[0]&&e.results[0].document||null;return t?fe({type:"success",id:o,asset:t}):me(new Error("No asset document returned"))})))})))))))}(this.props.config,this.props.client,t,n).subscribe({complete:()=>{this.setState({error:null,uploadProgress:null,url:null})},next:e=>{this.handleUploadEvent(e)},error:e=>{let t;e.message.toLowerCase().match("invalid url")||(t=e),this.setState({invalidPaste:!0,error:t},(()=>{setTimeout((()=>{this.setState({invalidPaste:!1,uploadProgress:null})}),2e3)}))}})},this.handleDrop=e=>{this.setState({isDraggingOver:!1}),e.preventDefault(),e.stopPropagation(),Kt(e.nativeEvent.dataTransfer).then((e=>{e&&this.onUpload(e)}))},this.handleDragOver=e=>{e.preventDefault(),e.stopPropagation()},this.handleDragEnter=e=>{var t,n;e.stopPropagation(),this.dragEnteredEls.push(e.target),this.setState({isDraggingOver:!0});const r=null==(n=null==(t=e.dataTransfer.items)?void 0:t[0])?void 0:n.type;this.setState({invalidFile:!r.startsWith("video/")})},this.handleDragLeave=e=>{e.stopPropagation();const t=this.dragEnteredEls.indexOf(e.target);t>-1&&this.dragEnteredEls.splice(t,1),0===this.dragEnteredEls.length&&this.setState({isDraggingOver:!1})}}componentWillUnmount(){this.unSubscribeToUpload()}componentDidMount(){const e=new ve;this.onCancelUploadButtonClick$=e.asObservable(),this.handleCancelUploadButtonClick=t=>e.next(t)}unSubscribeToUpload(){this.upload&&!this.upload.closed&&this.upload.unsubscribe()}render(){var e;if(null!==this.state.uploadProgress)return P(tn,{onCancel:this.handleCancelUploadButtonClick,progress:this.state.uploadProgress,filename:(null==(e=this.state.fileInfo)?void 0:e.name)||this.state.url});if(this.state.error)throw this.state.error;return O(D,{children:[P(pn,{tone:this.state.isDraggingOver&&(this.state.invalidPaste||this.state.invalidFile)?"critical":this.state.isDraggingOver?"positive":void 0,onDrop:this.handleDrop,onDragOver:this.handleDragOver,onDragLeave:this.handleDragLeave,onDragEnter:this.handleDragEnter,onPaste:this.handlePaste,ref:this.container,children:this.props.asset?P(nn,{readOnly:this.props.readOnly,asset:this.props.asset,onChange:this.props.onChange,dialogState:this.props.dialogState,setDialogState:this.props.setDialogState,buttons:P(cn,{asset:this.props.asset,dialogState:this.props.dialogState,setDialogState:this.props.setDialogState,onChange:this.props.onChange,onUpload:this.onUpload,readOnly:this.props.readOnly})}):P(bn,{hovering:this.state.isDraggingOver,onSelect:this.onUpload,readOnly:this.props.readOnly,setDialogState:this.props.setDialogState,needsSetup:this.props.needsSetup})}),"select-video"===this.props.dialogState&&P(Ht,{asset:this.props.asset,onChange:this.props.onChange,setDialogState:this.props.setDialogState})]})}}const xn=(e,t)=>K((async n=>{let{token:r,secretKey:i,enableSignedUrls:o}=n,{signingKeyId:a,signingKeyPrivate:s}=t;try{await Et(e,r,i,o,a,s);const t=await function(e){const{dataset:t}=e.config();return e.request({url:"/addons/mux/secrets/".concat(t,"/test"),withCredentials:!0,method:"GET"})}(e);if(!(null==t?void 0:t.status)&&r&&i)throw new Error("Invalid secrets")}catch(e){throw console.error("Error while trying to save secrets:",e),e}if(o){const t=await async function(e,t,n){if(!t||!n)return!1;const{dataset:r}=e.config();try{const n=await e.request({url:"/addons/mux/signing-keys/".concat(r,"/").concat(t),withCredentials:!0,method:"GET"});return!(!n.data||!n.data.id)}catch(e){return console.error("Error fetching signingKeyId",t,"assuming it is not valid"),!1}}(e,a,s);if(!t)try{const{data:t}=await function(e){const{dataset:t}=e.config();return e.request({url:"/addons/mux/signing-keys/".concat(t),withCredentials:!0,method:"POST"})}(e);a=t.id,s=t.private_key,await Et(e,r,i,o,a,s)}catch(e){throw console.log("Error while creating and saving signing key:",null==e?void 0:e.message),e}}return{token:r,secretKey:i,enableSignedUrls:o,signingKeyId:a,signingKeyPrivate:s}}),[e,t]);function Sn(e){let{token:t,secretKey:n,enableSignedUrls:r}=e;return{submitting:!1,error:null,token:null!=t?t:"",secretKey:null!=n?n:"",enableSignedUrls:null!=r&&r}}function kn(e,t){switch(null==t?void 0:t.type){case"submit":return C(C({},e),{},{submitting:!0,error:null});case"error":return C(C({},e),{},{submitting:!1,error:t.payload});case"reset":return Sn(t.payload);case"change":return C(C({},e),{},{[t.payload.name]:t.payload.value});default:throw new Error("Unknown action type: ".concat(null==t?void 0:t.type))}}const Cn=["title","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r"];function Un(e){let{height:t=26}=e;const n=z(),[r,i,o,a,s,l,d,c,u,p,h,g,f,m,y,v,b,w,x]=T((()=>Cn.map((e=>"".concat(n,"-").concat(e)))),[n]);return O("svg",{"aria-labelledby":r,role:"img",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",viewBox:"92.08878326416016 102.66712188720703 692.76123046875 219.99948120117188",style:{height:"".concat(t,"px")},children:[P("title",{id:r,children:"Mux Logo"}),O("defs",{children:[O("linearGradient",{id:a,spreadMethod:"pad",gradientTransform:"matrix(528.38055 0 0 -528.38055 63.801 159.5)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:s,spreadMethod:"pad",gradientTransform:"matrix(523.66766 0 0 -523.66766 67.897 159.5)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:c,spreadMethod:"pad",gradientTransform:"rotate(180 296.075 79.75) scale(524.84045)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:p,spreadMethod:"pad",gradientTransform:"matrix(524.84045 0 0 -524.84045 63.801 159.5)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:h,spreadMethod:"pad",gradientTransform:"matrix(523.08514 0 0 -523.08514 67.897 224.446)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:g,spreadMethod:"pad",gradientTransform:"matrix(524.84045 0 0 -524.84045 63.801 94.553)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:f,spreadMethod:"pad",gradientTransform:"matrix(524.84045 0 0 -524.84045 63.801 159.5)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:m,spreadMethod:"pad",gradientTransform:"matrix(524.84045 0 0 -524.84045 63.801 94.554)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:b,spreadMethod:"pad",gradientTransform:"matrix(521.97632 0 0 -521.97632 69.067 191.973)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:w,spreadMethod:"pad",gradientTransform:"matrix(523.09039 0 0 -523.09039 67.312 191.973)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),O("linearGradient",{id:x,spreadMethod:"pad",gradientTransform:"matrix(524.84045 0 0 -524.84045 63.801 159.5)",gradientUnits:"userSpaceOnUse",y2:0,x2:1,y1:0,x1:0,children:[P("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P("clipPath",{id:i,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M0 319h657.706V0H0Z"})}),P("clipPath",{id:o,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M423.64 242h164.999V77H423.64Z"})}),P("clipPath",{id:l,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M0 319h657.706V0H0Z"})}),P("clipPath",{id:d,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M311.3 242h93.031V77H311.3Z"})}),P("clipPath",{id:u,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M198.96 242h35.106V77H198.96Z"})}),P("clipPath",{id:y,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M0 319h657.706V0H0Z"})}),P("clipPath",{id:v,clipPathUnits:"userSpaceOnUse",children:P("path",{d:"M69.067 242H169.12V141.947H69.067Z"})})]}),P("g",{clipPath:"url(#".concat(i,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:P("g",{style:{opacity:.69999701},clipPath:"url(#".concat(o,")"),children:P("path",{style:{fill:"url(#".concat(a,")"),stroke:"none"},d:"M558.674 82.142c6.855-6.855 17.969-6.855 24.824 0 6.854 6.855 6.854 17.969 0 24.823L453.605 236.858c-6.855 6.855-17.969 6.855-24.824 0s-6.855-17.969 0-24.823z"})})}),P("path",{style:{fill:"url(#".concat(s,")"),stroke:"none"},d:"M558.674 236.858 428.781 106.966c-6.855-6.855-6.855-17.969 0-24.825 6.855-6.854 17.969-6.854 24.823 0l129.894 129.894c6.854 6.855 6.854 17.968 0 24.823A17.498 17.498 0 0 1 571.086 242a17.495 17.495 0 0 1-12.412-5.142",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),O("g",{clipPath:"url(#".concat(l,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:[P("g",{style:{opacity:.69999701},clipPath:"url(#".concat(d,")"),children:P("path",{style:{fill:"url(#".concat(c,")"),stroke:"none"},d:"M328.853 112.107c22.297 0 40.372 18.075 40.372 40.372v71.315c0 10.054 7.505 18.206 17.554 18.206 10.048 0 17.552-8.152 17.552-18.206v-71.315c0-41.686-33.793-75.479-75.478-75.479-9.694 0-17.553 7.859-17.553 17.554 0 9.694 7.859 17.553 17.553 17.553"})}),P("g",{style:{opacity:.69999701},clipPath:"url(#".concat(u,")"),children:P("path",{style:{fill:"url(#".concat(p,")"),stroke:"none"},d:"M216.513 242c-10.049 0-17.553-8.152-17.553-18.206V95.206c0-10.054 7.504-18.206 17.553-18.206 10.048 0 17.553 8.152 17.553 18.206v128.588c0 10.054-7.505 18.206-17.553 18.206"})})]}),P("path",{style:{fill:"url(#".concat(h,")"),stroke:"none"},d:"M369.225 224.447c0-9.694 7.859-17.553 17.553-17.553 9.695 0 17.553 7.859 17.553 17.553s-7.858 17.552-17.553 17.552c-9.694 0-17.553-7.858-17.553-17.552",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),P("path",{style:{fill:"url(#".concat(g,")"),stroke:"none"},d:"M553.532 94.554c0-9.695 7.859-17.554 17.553-17.554 9.695 0 17.554 7.859 17.554 17.554 0 9.694-7.859 17.552-17.554 17.552-9.694 0-17.553-7.858-17.553-17.552",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),P("path",{style:{fill:"url(#".concat(f,")"),stroke:"none"},d:"M69.067 223.794V95.206C69.067 85.152 76.571 77 86.62 77c10.048 0 17.553 8.152 17.553 18.206v128.588c0 10.055-7.505 18.205-17.553 18.205-10.049 0-17.553-8.15-17.553-18.205",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),P("path",{style:{fill:"url(#".concat(m,")"),stroke:"none"},d:"M198.96 94.554c0-9.695 7.859-17.554 17.553-17.554 9.695 0 17.554 7.859 17.554 17.554 0 9.694-7.859 17.553-17.554 17.553-9.694 0-17.553-7.859-17.553-17.553",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),P("g",{clipPath:"url(#".concat(y,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:P("g",{style:{opacity:.69999701},clipPath:"url(#".concat(v,")"),children:P("path",{style:{fill:"url(#".concat(b,")"),stroke:"none"},d:"M139.155 147.088c6.855-6.855 17.969-6.855 24.824 0s6.855 17.969 0 24.824l-64.947 64.946c-6.855 6.855-17.969 6.855-24.824 0s-6.855-17.969 0-24.823z"})})}),P("path",{style:{fill:"url(#".concat(w,")"),stroke:"none"},d:"m204.101 236.858-64.947-64.946c-6.854-6.855-6.854-17.969 0-24.824 6.856-6.855 17.97-6.855 24.824 0l64.947 64.947c6.855 6.855 6.855 17.968 0 24.823A17.495 17.495 0 0 1 216.513 242a17.498 17.498 0 0 1-12.412-5.142",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"}),P("path",{style:{fill:"url(#".concat(x,")"),stroke:"none"},d:"M253.374 223.794v-71.315c0-41.685 33.793-75.479 75.479-75.479 9.695 0 17.553 7.859 17.553 17.554 0 9.694-7.858 17.553-17.553 17.553-22.297 0-40.372 18.075-40.372 40.372v71.315c0 10.055-7.505 18.205-17.554 18.205s-17.553-8.15-17.553-18.205",transform:"matrix(1.33333 0 0 -1.33333 0 425.333)"})]})}const On=lt.span(w||(w=S(["\n display: inline-block;\n height: 0.8em;\n margin-right: 1em;\n transform: translate(0.3em, -0.2em);\n"]))),Pn=()=>O(D,{children:[P(On,{children:P(Un,{height:13})}),"API Credentials"]});var Dn=_((function(e){const{children:t,title:n,description:r,inputId:i}=e;return O(Fe,{space:1,children:[P(Ee,{align:"flex-end",children:P(De,{flex:1,paddingY:2,children:P(Fe,{space:2,children:O(Ee,{children:[P(Te,{as:"label",htmlFor:i,weight:"semibold",size:1,children:n||P("em",{children:"Untitled"})}),r&&P(Te,{muted:!0,size:1,children:r})]})})})}),P("div",{children:t})]})}));const En=["token","secretKey","enableSignedUrls"];var In=_((function(e){let{secrets:t,setDialogState:n}=e;var r,i;const o=V(),[a,s]=(e=>q(kn,e,Sn))(t),l=T((()=>t.token&&t.secretKey),[t]),d=K((()=>n(!1)),[n]),c=T((()=>t.token!==a.token||t.secretKey!==a.secretKey||t.enableSignedUrls!==a.enableSignedUrls),[t,a]),u="ConfigureApi".concat(z()),[p,h,g]=T((()=>En.map((e=>"".concat(u,"-").concat(e)))),[u]),f=j(null),m=xn(o,t),y=j(!1),v=K((e=>{if(e.preventDefault(),!y.current&&e.currentTarget.reportValidity()){y.current=!0,s({type:"submit"});const{token:e,secretKey:t,enableSignedUrls:r}=a;m({token:e,secretKey:t,enableSignedUrls:r}).then((e=>{const{projectId:t,dataset:r}=o.config();Ct([ce,J,t,r]),Ut((()=>Promise.resolve(e)),[ce,J,t,r]),n(!1)})).catch((e=>s({type:"error",payload:e.message}))).finally((()=>{y.current=!1}))}}),[o,s,m,n,a]),b=K((e=>{s({type:"change",payload:{name:"token",value:e.currentTarget.value}})}),[s]),w=K((e=>{s({type:"change",payload:{name:"secretKey",value:e.currentTarget.value}})}),[s]),x=K((e=>{s({type:"change",payload:{name:"enableSignedUrls",value:e.currentTarget.checked}})}),[s]);return L((()=>{f.current&&f.current.focus()}),[f]),P(Re,{id:u,onClose:d,header:P(Pn,{}),width:0,children:P(De,{padding:4,style:{position:"relative"},children:P("form",{onSubmit:v,noValidate:!0,children:O(Fe,{space:4,children:[!l&&P(Pe,{padding:[3,3,3],radius:2,shadow:1,tone:"primary",children:O(Fe,{space:3,children:[O(Te,{size:1,children:["To set up a new access token, go to your"," ",P("a",{href:"https://dashboard.mux.com/settings/access-tokens",target:"_blank",rel:"noreferrer noopener",children:"account on mux.com"}),"."]}),O(Te,{size:1,children:["The access token needs permissions: ",P("strong",{children:"Mux Video "}),"(Full Access) and ",P("strong",{children:"Mux Data"})," (Read)",P("br",{}),"The credentials will be stored safely in a hidden document only available to editors."]})]})}),P(Dn,{title:"Access Token",inputId:p,children:P(We,{id:p,ref:f,onChange:b,type:"text",value:null!=(r=a.token)?r:"",required:!!a.secretKey||a.enableSignedUrls})}),P(Dn,{title:"Secret Key",inputId:h,children:P(We,{id:h,onChange:w,type:"text",value:null!=(i=a.secretKey)?i:"",required:!!a.token||a.enableSignedUrls})}),O(Fe,{space:4,children:[O(Ee,{align:"center",children:[P(Ge,{id:g,onChange:x,checked:a.enableSignedUrls,style:{display:"block"}}),P(De,{flex:1,paddingLeft:3,children:P(Te,{children:P("label",{htmlFor:g,children:"Enable Signed Urls"})})})]}),t.signingKeyId&&a.enableSignedUrls?P(Pe,{padding:[3,3,3],radius:2,shadow:1,tone:"caution",children:O(Fe,{space:3,children:[P(Te,{size:1,children:"The signing key ID that Sanity will use is:"}),P(qe,{size:1,children:t.signingKeyId}),O(Te,{size:1,children:["This key is only used for previewing content in the Sanity UI.",P("br",{}),"You should generate a different key to use in your application server."]})]})}):null]}),O(Ve,{space:2,children:[P(_e,{text:"Save",disabled:!c,loading:a.submitting,tone:"primary",mode:"default",type:"submit"}),P(_e,{disabled:a.submitting,text:"Cancel",mode:"bleed",onClick:d})]}),a.error&&P(Pe,{padding:[3,3,3],radius:2,shadow:1,tone:"critical",children:P(Te,{children:a.error})})]})})})})}));function Tn(e){const{setDialogState:t}=e,n=K((()=>t("secrets")),[t]);return P(D,{children:P("div",{style:{padding:2},children:P(Pe,{display:"flex",sizing:"border",style:{aspectRatio:"16/9",width:"100%",boxShadow:"var(--card-bg-color) 0 0 0 2px"},paddingX:[2,3,4,4],radius:1,tone:"transparent",children:P(Ee,{justify:"flex-start",align:"center",children:O(Ae,{columns:1,gap:[2,3,4,4],children:[P(Ve,{paddingY:1,children:P("div",{style:{height:"32px"},children:P(Un,{})})}),P(Ve,{paddingY:1,children:P(Xe,{size:[0,1,2,2],children:"Upload and preview videos directly from your studio."})}),P(Ve,{paddingY:1,children:P(_e,{mode:"ghost",icon:it,text:"Configure API",onClick:n})})]})})})})})}var _n=_((e=>{var t;const n=V(),r=(()=>{const{error:e,isLoading:t,value:n}=ne(de,Ot);return{error:e,isLoading:t,value:T((()=>{const e=Boolean(n),t={token:(null==n?void 0:n.token)||null,secretKey:(null==n?void 0:n.secretKey)||null,enableSignedUrls:(null==n?void 0:n.enableSignedUrls)||!1,signingKeyId:(null==n?void 0:n.signingKeyId)||null,signingKeyPrivate:(null==n?void 0:n.signingKeyPrivate)||null};return{isInitialSetup:!e,needsSetup:!(null==t?void 0:t.token)||!(null==t?void 0:t.secretKey),secrets:t}}),[n])}})(),i=Q(null==(t=e.value)?void 0:t.asset),o=(e=>{var t,n;const r=V(),i=ee(),o=te(),a=T((()=>{var t,n;return!!(null==e?void 0:e.assetId)&&("preparing"===(null==e?void 0:e.status)||"preparing"===(null==(n=null==(t=null==e?void 0:e.data)?void 0:t.static_renditions)?void 0:n.status))}),[null==e?void 0:e.assetId,null==(n=null==(t=null==e?void 0:e.data)?void 0:t.static_renditions)?void 0:n.status,null==e?void 0:e.status]);return le(a?"/".concat(i,"/addons/mux/assets/").concat(o,"/data/").concat(null==e?void 0:e.assetId):null,(async()=>{const{data:t}=await r.request({url:"/addons/mux/assets/".concat(o,"/data/").concat(e.assetId),withCredentials:!0,method:"GET"});r.patch(e._id).set({status:t.status,data:t}).commit({returnDocuments:!1})}),{refreshInterval:2e3,refreshWhenHidden:!0,dedupingInterval:1e3})})(e.readOnly?void 0:(null==i?void 0:i.value)||void 0),[a,s]=I(!1),l=r.error||i.error||o.error;if(l)throw l;const d=r.isLoading||i.isLoading;return P(D,{children:d?P(ue,{}):O(D,{children:[r.value.needsSetup&&!i.value?P(Tn,{setDialogState:s}):P(wn,C(C({},e),{},{config:e.config,onChange:e.onChange,client:n,secrets:r.value.secrets,asset:i.value,dialogState:a,setDialogState:s,needsSetup:r.value.needsSetup})),"secrets"===a&&P(In,{setDialogState:s,secrets:r.value.secrets})]})})}));export{_n as default};
2
- //# sourceMappingURL=Input-af5a0a66.esm.js.map