sanity-plugin-mux-input 2.0.2 → 2.0.4

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 (49) hide show
  1. package/LICENSE +1 -1
  2. package/lib/_chunks/Input-4e0aa2ef.js +2652 -0
  3. package/lib/_chunks/Input-4e0aa2ef.js.map +1 -0
  4. package/lib/_chunks/Input-7fb0dcd2.js +2682 -0
  5. package/lib/_chunks/Input-7fb0dcd2.js.map +1 -0
  6. package/lib/_chunks/Preview-3e4c2ec9.js +26 -0
  7. package/lib/_chunks/{Preview-3195237b.js.map → Preview-3e4c2ec9.js.map} +1 -1
  8. package/lib/_chunks/Preview-e6f7e765.js +28 -0
  9. package/lib/_chunks/Preview-e6f7e765.js.map +1 -0
  10. package/lib/_chunks/VideoSource.styled-70d38762.js +336 -0
  11. package/lib/_chunks/VideoSource.styled-70d38762.js.map +1 -0
  12. package/lib/_chunks/VideoSource.styled-e880b6e4.js +318 -0
  13. package/lib/_chunks/VideoSource.styled-e880b6e4.js.map +1 -0
  14. package/lib/_chunks/index-a9d40189.js +248 -0
  15. package/lib/_chunks/index-a9d40189.js.map +1 -0
  16. package/lib/_chunks/index-adfcd166.js +265 -0
  17. package/lib/_chunks/index-adfcd166.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 +28 -35
  24. package/src/actions/assets.ts +1 -1
  25. package/src/actions/secrets.ts +12 -3
  26. package/src/actions/upload.ts +1 -1
  27. package/src/components/__legacy__Uploader.tsx +1 -1
  28. package/src/hooks/useSaveSecrets.ts +1 -1
  29. package/src/util/generateJwt.ts +1 -1
  30. package/src/util/getAnimatedPosterSrc.ts +1 -1
  31. package/src/util/getPosterSrc.ts +1 -1
  32. package/src/util/getStoryboardSrc.ts +1 -1
  33. package/src/util/getVideoSrc.ts +1 -1
  34. package/src/util/readSecrets.ts +1 -1
  35. package/lib/_chunks/Input-2ba004d3.js +0 -2
  36. package/lib/_chunks/Input-2ba004d3.js.map +0 -1
  37. package/lib/_chunks/Input-af5a0a66.esm.js +0 -2
  38. package/lib/_chunks/Input-af5a0a66.esm.js.map +0 -1
  39. package/lib/_chunks/Preview-3195237b.js +0 -2
  40. package/lib/_chunks/Preview-bb256342.esm.js +0 -2
  41. package/lib/_chunks/Preview-bb256342.esm.js.map +0 -1
  42. package/lib/_chunks/VideoSource.styled-1b994d90.js +0 -2
  43. package/lib/_chunks/VideoSource.styled-1b994d90.js.map +0 -1
  44. package/lib/_chunks/VideoSource.styled-f92259cd.esm.js +0 -2
  45. package/lib/_chunks/VideoSource.styled-f92259cd.esm.js.map +0 -1
  46. package/lib/_chunks/index-3d8d7583.esm.js +0 -2
  47. package/lib/_chunks/index-3d8d7583.esm.js.map +0 -1
  48. package/lib/_chunks/index-efe6ce48.js +0 -2
  49. package/lib/_chunks/index-efe6ce48.js.map +0 -1
@@ -1,2 +0,0 @@
1
- "use strict";const e=["icon","id","accept","capture","fontSize","multiple","onSelect","padding","space","textAlign","text","disabled"],t=["onSelect"];var n,s,r,i,a,o,l,d,c,u,p,h,g,f,x,m,y,b,j;function v(e,t){if(null==e)return{};var n,s,r=function(e,t){if(null==e)return{};var n,s,r={},i=Object.keys(e);for(s=0;s<i.length;s++)n=i[s],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(s=0;s<i.length;s++)n=i[s],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function w(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 s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,s)}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){S(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 S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var P=require("react/jsx-runtime"),O=require("react"),I=require("./VideoSource.styled-1b994d90.js"),U=require("sanity"),D=require("swr"),T=require("./index-efe6ce48.js"),M=require("rxjs"),E=require("rxjs/operators"),_=require("@sanity/uuid"),F=require("@mux/upchunk"),R=require("@sanity/ui"),B=require("@sanity/icons"),K=require("motion"),z=require("styled-components"),q=require("use-device-pixel-ratio"),L=require("@mux/playback-core"),A=require("media-chrome/dist/react"),V=require("react-is"),G=require("suspend-react");function H(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function N(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}require("use-error-boundary"),require("scroll-into-view-if-needed");var Y=H(O),Z=H(D),W=N(F),X=H(z);const J=["token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate"];function $(e,t,n){return new M.Observable((s=>{const r=W.createUpload({endpoint:t,file:n,dynamicChunkSize:!0});return r.on("success",(()=>{s.next({type:"success",id:e}),s.complete()})),r.on("error",(e=>s.error(new Error(e.detail.message)))),r.on("progress",(e=>s.next({type:"progress",percent:e.detail}))),r.on("offline",(()=>{r.pause(),s.next({type:"pause",id:e})})),r.on("online",(()=>{r.resume(),s.next({type:"resume",id:e})})),()=>r.abort()}))}function Q(e,t){const{dataset:n}=e.config();return e.request({url:"/addons/mux/assets/".concat(n,"/").concat(t),withCredentials:!0,method:"DELETE"})}function ee(e,t,n,s,r,i){const a={_id:"secrets.mux",_type:"mux.apiKey",token:t,secretKey:n,enableSignedUrls:s,signingKeyId:r,signingKeyPrivate:i};return e.createOrReplace(a)}function te(e){const{dataset:t}=e.config();return M.defer((()=>e.observable.request({url:"/addons/mux/secrets/".concat(t,"/test"),withCredentials:!0,method:"GET"})))}function ne(e,t){return e.observable.request({url:"/addons/mux/uploads/".concat(e.clientConfig.dataset,"/").concat(t),withCredentials:!0,method:"DELETE"})}async function se(e,t){let n,s;try{n=await function(e,t){let n,s,r,i=0;return new Promise(((a,o)=>{n=setInterval((async()=>{try{r=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 o(e)}s=r&&r.data&&r.data.asset_id,s&&(clearInterval(n),a(r)),i>10&&(clearInterval(n),o(new Error("Upload did not finish"))),i++}),2e3)}))}(e,t)}catch(e){return Promise.reject(e)}try{s=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 r={_id:t,_type:"mux.videoAsset",status:s.data.status,data:s.data,assetId:s.data.id,playbackId:s.data.playback_ids[0].id,uploadId:n.data.id};return e.createOrReplace(r).then((()=>r))}function re(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 M.of(t)}return M.throwError(new Error("Invalid file"))}function ie(e){const t=new Error("Invalid URL");if("string"!=typeof e)return M.throwError(t);let n;try{n=new URL(e)}catch(e){return M.throwError(t)}return n&&!n.protocol.match(/http:|https:/)?M.throwError(t):M.of(e)}function ae(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?oe(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 oe(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(oe)).then((e=>e.flat()))))}return Promise.resolve([])}function le(e){const{asset:t}=e,n=O.useId(),[s,r]=O.useState(),[i,a]=O.useState(!1),[o,l]=O.useState(null),d=O.useCallback((()=>r("confirm-delete")),[]),c=O.useCallback((()=>{r(!1),a(!0)}),[r]),u=O.useCallback((()=>{r(!1),a(!1)}),[r]);return O.useEffect((()=>{i&&s&&a(!1)}),[s,i]),R.useClickOutside(O.useCallback((()=>a(!1)),[]),[o]),P.jsxs(P.Fragment,{children:[P.jsx(R.MenuButton,{id:"".concat(n,"-asset-menu"),button:P.jsx(R.Button,{icon:B.EllipsisVerticalIcon,mode:"ghost",onClick:c,padding:2}),menu:P.jsx(R.Menu,{ref:l,children:P.jsx(R.MenuItem,{tone:"critical",icon:B.TrashIcon,text:"Delete",onClick:d})}),portal:!0,placement:"right"}),"confirm-delete"===s&&P.jsx(de,{asset:t,onClose:u})]})}function de(e){const{asset:t,onClose:n}=e,s=I.useClient(),{push:r}=R.useToast(),[i,a]=O.useState(!1),[o,l]=O.useState(!1),d=O.useId(),c=200*q.getDevicePixelRatio({maxDpr:2}),u=O.useCallback((async()=>{var e,i,l;a(!0);try{(null==t?void 0:t._id)&&await s.delete(t._id),o&&(null==t?void 0:t.assetId)&&await Q(s,t.assetId),null==(l=null==(i=null==(e=document.querySelector('[data-id="'.concat(t._id,'"]')))?void 0:e.parentElement)?void 0:i.setAttribute)||l.call(i,"hidden","true")}catch(e){console.error("Failed during delete",e),r({closable:!0,description:null==e?void 0:e.message,duration:5e3,title:"Uncaught error",status:"error"})}finally{a(!1),n()}}),[t._id,t.assetId,s,o,n,r]);return P.jsx(R.Dialog,{onClose:n,id:"".concat(d,"-confirm-delete"),header:"Delete video",footer:P.jsxs(R.Grid,{padding:2,gap:2,columns:2,children:[P.jsx(R.Button,{mode:"bleed",text:"Cancel",onClick:n}),P.jsx(R.Button,{text:"Delete",tone:"critical",icon:B.TrashIcon,onClick:u,loading:i})]}),width:1,children:P.jsx(R.Stack,{paddingX:0,paddingY:0,space:1,children:P.jsx(R.Card,{paddingX:[2,3,4],paddingY:[3,3,3,4],children:P.jsxs(R.Grid,{columns:3,gap:3,children:[P.jsx(R.Flex,{style:{gridColumn:"span 2"},align:"center",children:P.jsx(R.Box,{padding:4,children:P.jsxs(R.Stack,{space:4,children:[P.jsxs(R.Flex,{align:"center",as:"label",children:[P.jsx(R.Checkbox,{checked:o,onChange:()=>l((e=>!e))}),P.jsx(R.Text,{style:{margin:"0 10px"},children:"Delete asset on Mux"})]}),P.jsxs(R.Flex,{align:"center",as:"label",children:[P.jsx(R.Checkbox,{disabled:!0,checked:!0}),P.jsx(R.Text,{style:{margin:"0 10px"},children:"Delete video from dataset"})]})]})})}),P.jsx(I.VideoThumbnail,{asset:t,width:c,showTip:!0})]})})})})}function ce(e){let{assets:t,isLoading:n,isLastPage:s,onSelect:r,onLoadMore:i}=e;const a=O.useCallback((e=>r(e.currentTarget.dataset.id)),[r]),o=O.useCallback((e=>{"Enter"===e.key&&r(e.currentTarget.dataset.id)}),[r]),l=200*q.getDevicePixelRatio({maxDpr:2});return P.jsxs(P.Fragment,{children:[P.jsxs(R.Box,{padding:4,children:[P.jsx(I.ThumbGrid,{gap:2,children:t.map((e=>P.jsx(ue,{asset:e,onClick:a,onKeyPress:o,width:l},e._id)))}),n&&0===t.length&&P.jsx(R.Flex,{justify:"center",children:P.jsx(R.Spinner,{muted:!0})}),!n&&0===t.length&&P.jsx(R.Text,{align:"center",muted:!0,children:"No videos"})]}),t.length>0&&!s&&P.jsx(I.CardLoadMore,{tone:"default",padding:4,children:P.jsx(R.Flex,{direction:"column",children:P.jsx(R.Button,{type:"button",icon:B.DownloadIcon,loading:n,onClick:i,text:"Load more",tone:"primary"})})})]})}const ue=O.memo((e=>{let{asset:t,onClick:n,onKeyPress:s,width:r}=e;const[i,a]=O.useState(null),o=O.useRef(null);return O.useLayoutEffect((()=>{o.current&&null!==i&&(i?K.animate(o.current,{opacity:1}):K.animate(o.current,{opacity:0}))}),[i]),P.jsxs(R.Box,{height:"fill",style:{position:"relative"},children:[P.jsxs(R.Card,{as:"button","data-id":t._id,onClick:n,onKeyPress:s,tabIndex:0,radius:2,padding:1,style:{lineHeight:0,position:"relative"},__unstable_focusRing:!0,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[P.jsx(I.VideoThumbnail,{asset:t,width:r,showTip:!0}),(null==t?void 0:t.playbackId)&&P.jsx(pe,{tone:"transparent",ref:o,margin:1,radius:1,children:null!==i&&P.jsx(I.AnimatedVideoThumbnail,{asset:t,width:r})})]}),P.jsx(he,{children:P.jsx(le,{asset:t})})]})})),pe=X.default(R.Card)(n||(n=w(["\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"]))),he=X.default.div(s||(s=w(["\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 ge(e){let{asset:t,onChange:n,setDialogState:s}=e;const r=I.useClient(),i=O.useRef(0),[a,o]=O.useState(!1),[l,d]=O.useState(!1),[c,u]=O.useState([]),p=O.useCallback((e=>{const t=200*e,n=t+200;return d(!0),r.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=>{o(e.length<200),u((t=>t.concat(e)))})).finally((()=>d(!1)))}),[r]),h=O.useCallback((e=>{const t=c.find((t=>t._id===e));if(!t)throw new TypeError("Failed to find video asset with id: ".concat(e));n(U.PatchEvent.from([U.setIfMissing({asset:{}}),U.set({_type:"reference",_weak:!0,_ref:t._id},["asset"])])),s(!1)}),[c,n,s]),g=O.useCallback((()=>{p(++i.current)}),[p]);return O.useEffect((()=>{p(i.current)}),[p]),P.jsx(ce,{onSelect:h,assets:c,isLastPage:a,isLoading:l,onLoadMore:g})}function fe(e){let{setDialogState:t,asset:n,onChange:s}=e;const r="InputBrowser".concat(O.useId()),i=O.useCallback((()=>t(!1)),[t]);return P.jsx(R.Dialog,{scheme:"dark",__unstable_autoFocus:!0,header:"Select video",id:r,onClose:i,width:2,children:P.jsx(ge,{asset:n,onChange:s,setDialogState:t})})}function xe(e){let{asset:t,getCurrentTime:n,setDialogState:s}=e;const r=I.useClient(),i="EditThumbnailDialog".concat(O.useId()),a=O.useMemo((()=>n()),[n]),o=O.useMemo((()=>C(C({},t),{},{thumbTime:a})),[t,a]),[l,d]=O.useState(!1),[c,u]=O.useState(null),p=O.useCallback((()=>{d(!0),r.patch(t._id).set({thumbTime:a}).commit({returnDocuments:!1}).then((()=>{s(!1)})).catch(u).finally((()=>{d(!1)}))}),[r,t._id,a,s]),h=300*q.getDevicePixelRatio({maxDpr:2});if(c)throw c;return P.jsx(R.Dialog,{id:i,header:"Edit thumbnail",onClose:()=>s(!1),footer:P.jsx(R.Stack,{padding:3,children:P.jsx(R.Button,{mode:"ghost",tone:"primary",loading:l,onClick:p,text:"Set new thumbnail"},"thumbnail")}),children:P.jsxs(R.Stack,{space:3,padding:3,children:[P.jsxs(R.Stack,{space:2,children:[P.jsx(R.Text,{size:1,weight:"semibold",children:"Current:"}),P.jsx(I.VideoThumbnail,{asset:t,width:h})]}),P.jsxs(R.Stack,{space:2,children:[P.jsx(R.Text,{size:1,weight:"semibold",children:"New:"}),P.jsx(I.VideoThumbnail,{asset:o,width:h})]})]})})}const me=X.default(R.Card)(r||(r=w(["\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"]))),ye=X.default.div(i||(i=w(["\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"]))),be=X.default(A.MediaControlBar)(a||(a=w(["\n justify-content: flex-end;\n button {\n height: auto;\n }\n"])));function je(e){let{asset:t}=e;const n=I.useClient(),s=O.useRef(null),r=O.useMemo((()=>I.getPosterSrc({client:n,asset:t,width:1920,height:1080})),[n,t]);return O.useEffect((()=>{var e;if(s.current){const t=document.createElement("style");t.innerHTML="img { object-fit: contain; }",(null==(e=s.current)?void 0:e.shadowRoot)&&s.current.shadowRoot.appendChild(t)}}),[]),P.jsx(A.MediaPosterImage,{ref:s,slot:"poster",src:r})}function ve(e){let{asset:t}=e;const n=I.useClient(),[s]=O.useState((()=>function(e){let{asset:t,client:n}=e;const s=I.getPlaybackId(t),r=new URLSearchParams;if("signed"===I.getPlaybackPolicy(t)){const e=I.generateJwt(n,s,"s");r.set("token",e)}return"https://image.mux.com/".concat(s,"/storyboard.vtt?").concat(r)}({asset:t,client:n})));return P.jsx("track",{label:"thumbnails",default:!0,kind:"metadata",src:s})}const we=X.default(R.Card)(o||(o=w(["\n min-height: 82px;\n box-sizing: border-box;\n"]))),ke=X.default(R.Flex)(l||(l=w(["\n text-overflow: ellipsis;\n overflow: hidden;\n"]))),Ce=X.default(R.Stack)(d||(d=w(["\n position: relative;\n width: 60%;\n"]))),Se=X.default(R.Code)(c||(c=w(["\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"]))),Pe=e=>{let{progress:t=100,onCancel:n,filename:s,text:r="Uploading"}=e;return P.jsx(we,{tone:"primary",padding:4,border:!0,height:"fill",children:P.jsxs(ke,{align:"center",justify:"space-between",height:"fill",direction:"row",gap:2,children:[P.jsxs(Ce,{children:[P.jsx(R.Flex,{justify:"center",gap:[3,3,2,2],direction:["column","column","row"],children:P.jsx(R.Text,{size:1,children:P.jsxs(R.Inline,{space:2,children:[r,P.jsx(Se,{size:1,children:s||"..."})]})})}),P.jsx(R.Card,{marginTop:3,radius:5,shadow:1,children:P.jsx(U.LinearProgress,{value:t})})]}),n?P.jsx(R.Button,{fontSize:2,text:"Cancel upload",mode:"ghost",tone:"critical",onClick:n}):null]})})},Oe=e=>{let{asset:t,buttons:n,readOnly:s,onChange:r,dialogState:i,setDialogState:a}=e;var o,l,d,c;const u=I.useClient(),p=O.useMemo((()=>"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=O.useMemo((()=>{var e,n,s,r;return"preparing"===(null==(n=null==(e=null==t?void 0:t.data)?void 0:e.static_renditions)?void 0:n.status)||(null==(r=null==(s=null==t?void 0:t.data)?void 0:s.static_renditions)||r.status,!1)}),[null==(l=null==(o=null==t?void 0:t.data)?void 0:o.static_renditions)?void 0:l.status]),g=O.useMemo((()=>t.playbackId&&function(e){let{asset:t,client:n}=e;const s=I.getPlaybackId(t),r=new URLSearchParams;if("signed"===I.getPlaybackPolicy(t)){const e=I.generateJwt(n,s,"v");r.set("token",e)}return"https://stream.mux.com/".concat(s,".m3u8?").concat(r)}({client:u,asset:t})),[t,u]),[f,x]=O.useState(null),m=O.useCallback((e=>x(e.currentTarget.error)),[]),y=O.useRef(null),b=O.useRef(null),j=O.useRef(null),v=O.useCallback((()=>{var e,t;return null!=(t=null==(e=j.current)?void 0:e.currentTime)?t:0}),[j]),w=((e,t)=>{const n=I.useClient();return O.useCallback((()=>{e&&(t(U.PatchEvent.from(U.unset())),e.assetId&&Q(n,e.assetId),e._id&&n.delete(e._id))}),[e,n,t])})(t,r);O.useEffect((()=>{var e,t;const n=document.createElement("style");n.innerHTML="button svg { vertical-align: middle; }",(null==(e=y.current)?void 0:e.shadowRoot)&&y.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]=O.useState((()=>L.generatePlayerInitTime())),C=O.useRef(void 0);if(O.useEffect((()=>{if(p||!g)return;const e=L.initialize({src:g,playerInitTime:k,playerSoftwareName:"sanity-plugin-mux-input",playerSoftwareVersion:"dev-preview"},j.current,C.current);C.current=e}),[g,p,k]),O.useEffect((()=>{var e,n,s;if("errored"===(null==t?void 0:t.status))throw w(),new Error(null==(s=null==(n=null==(e=t.data)?void 0:e.errors)?void 0:n.messages)?void 0:s.join(" "))}),[null==(c=null==(d=t.data)?void 0:d.errors)?void 0:c.messages,null==t?void 0:t.status,w]),f)throw f;return t&&t.status?p?P.jsx(Pe,{progress:100,filename:null==t?void 0:t.filename,text:!0!==p&&p||"Waiting for Mux to complete the file",onCancel:s?void 0:()=>w()}):P.jsxs(P.Fragment,{children:[P.jsxs(me,{shadow:1,tone:"transparent",scheme:"dark",children:[P.jsxs(A.MediaController,{children:[P.jsx("video",{playsInline:!0,ref:j,onError:m,slot:"media",preload:"metadata",crossOrigin:"anonomous",children:P.jsx(ve,{asset:t})}),P.jsx(je,{asset:t}),P.jsx(A.MediaLoadingIndicator,{slot:"centered-chrome",noAutoHide:!0}),P.jsx(ye,{slot:"centered-chrome",children:P.jsx(A.MediaPlayButton,{})}),n&&P.jsx(be,{slot:"top-chrome",children:n}),P.jsxs(A.MediaControlBar,{children:[P.jsx(A.MediaMuteButton,{}),P.jsx(A.MediaTimeDisplay,{}),P.jsx(A.MediaTimeRange,{}),P.jsx(A.MediaDurationDisplay,{}),P.jsx(A.MediaFullscreenButton,{})]})]}),h&&P.jsx(R.Card,{padding:2,radius:1,style:{background:"var(--card-fg-color)",position:"absolute",top:"0.5em",left:"0.5em"},children:P.jsx(R.Text,{size:1,style:{color:"var(--card-bg-color)"},children:"MUX is preparing static renditions, please stand by"})})]}),"edit-thumbnail"===i&&P.jsx(xe,{asset:t,getCurrentTime:v,setDialogState:a})]}):null};function Ie(e){return"inset 0 0 0 ".concat(e.width,"px ").concat(e.color)}function Ue(e){const{base:t,border:n,focusRing:s}=e,r=s.offset+s.width,i=0-s.offset,a=t?t.bg:"var(--card-bg-color)";return[i>0&&"inset 0 0 0 ".concat(i,"px var(--card-focus-ring-color)"),n&&Ie(n),i<0&&"0 0 0 ".concat(0-i,"px ").concat(a),r>0&&"0 0 0 ".concat(r,"px var(--card-focus-ring-color)")].filter(Boolean).join(",")}const De=X.default(R.MenuItem)((e=>{let{theme:t}=e;const{focusRing:n}=t.sanity,s=t.sanity.color.base;return z.css(u||(u=w(["\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 "])),Ue({base:s,border:{width:1,color:"var(--card-border-color)"},focusRing:n}))})),Te=Y.default.forwardRef((function(t,n){const{icon:s,id:r,accept:i,capture:a,fontSize:o,multiple:l,onSelect:d,padding:c=3,space:u=3,textAlign:p,text:h,disabled:g}=t,f=v(t,e),x=O.useId(),m=r||x,y=Y.default.useCallback((e=>{d&&e.target.files&&d(Array.from(e.target.files))}),[d]),b=P.jsxs(R.Flex,{align:"center",justify:"flex-start",padding:c,children:[s&&P.jsx(R.Box,{marginRight:h?u:void 0,children:P.jsxs(R.Text,{size:o,children:[O.isValidElement(s)&&s,V.isValidElementType(s)&&O.createElement(s)]})}),h&&P.jsx(R.Text,{align:p,size:o,textOverflow:"ellipsis",children:h})]});return P.jsxs(De,C(C({},f),{},{htmlFor:m,padding:0,fontSize:2,disabled:g,ref:n,children:[b,P.jsx("input",{"data-testid":"file-button-input",accept:i,capture:a,id:m,multiple:l,onChange:y,type:"file",value:"",disabled:g})]}))})),Me=X.default(R.Card)(p||(p=w(["\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.6;\n mix-blend-mode: screen;\n background: transparent;\n"]))),Ee=X.default(R.Button)(h||(h=w(["\n background: transparent;\n color: white;\n"])));var _e=O.memo((function(e){const{asset:t,readOnly:n,dialogState:s,setDialogState:r,onChange:i,onUpload:a}=e,[o,l]=O.useState(!1),[d,c]=O.useState(null),u=O.useMemo((()=>"signed"===I.getPlaybackPolicy(t)),[t]),p=O.useCallback((()=>i(U.PatchEvent.from(U.unset([])))),[i]);return O.useEffect((()=>{o&&s&&l(!1)}),[s,o]),R.useClickOutside(O.useCallback((()=>l(!1)),[]),[d]),P.jsxs(R.Inline,{space:1,padding:2,children:[u&&P.jsx(R.Tooltip,{content:P.jsx(R.Box,{padding:2,children:P.jsx(R.Text,{muted:!0,size:1,children:"Signed playback policy"})}),placement:"right",portal:!0,children:P.jsx(Me,{radius:2,margin:2,scheme:"dark",tone:"positive",children:P.jsx(Ee,{icon:B.LockIcon,mode:"bleed",tone:"positive"})})}),!n&&P.jsx(R.Button,{icon:B.EditIcon,mode:"ghost",onClick:()=>r("edit-thumbnail")}),P.jsx(R.Popover,{content:P.jsxs(R.Menu,{ref:c,children:[P.jsx(R.Box,{padding:2,children:P.jsx(R.Label,{muted:!0,size:1,children:"Replace"})}),P.jsx(Te,{accept:"video/*",icon:B.UploadIcon,mode:"bleed",onSelect:a,text:"Upload",disabled:n,fontSize:2}),P.jsx(R.MenuItem,{icon:B.SearchIcon,text:"Browse",onClick:()=>r("select-video")}),P.jsx(R.MenuDivider,{}),P.jsx(R.MenuItem,{icon:B.PlugIcon,text:"Configure API",onClick:()=>r("secrets")}),P.jsx(R.MenuDivider,{}),P.jsx(R.MenuItem,{tone:"critical",icon:B.ResetIcon,text:"Clear field",onClick:p,disabled:n})]}),portal:!0,open:o,children:P.jsx(R.Button,{icon:B.EllipsisVerticalIcon,mode:"ghost",onClick:()=>{r(!1),l(!0)}})})]})}));const Fe=(Re=R.Card,X.default(Re)((e=>{const t={width:e.$border?1:0,color:"var(--card-border-color)"};return z.css(g||(g=w(["\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 "])),Ie(t),R.rem(e.theme.sanity.radius[1]),Ue({base:e.theme.sanity.color.base,border:t,focusRing:e.theme.sanity.focusRing}))})));var Re;const Be=O.forwardRef(((e,t)=>{let{children:n,tone:s,onPaste:r,onDrop:i,onDragEnter:a,onDragLeave:o,onDragOver:l}=e;const d=O.useRef(!1),c=O.useRef(null),u=O.useCallback((e=>{17!=e.keyCode&&91!=e.keyCode||(d.current=!0);d.current&&86==e.keyCode&&c.current.focus()}),[]),p=O.useCallback((e=>{17!=e.keyCode&&91!=e.keyCode||(d.current=!1)}),[]);return P.jsxs(Fe,{tone:s,height:"fill",ref:t,padding:0,radius:2,shadow:0,tabIndex:0,onKeyDown:u,onKeyUp:p,onPaste:r,onDrop:i,onDragEnter:a,onDragLeave:o,onDragOver:l,children:[P.jsx(Ke,{ref:c,onPaste:r}),n]})})),Ke=X.default.input.attrs({type:"text"})(f||(f=w(["\n position: absolute;\n border: 0;\n color: white;\n opacity: 0;\n\n &:focus {\n outline: none;\n }\n"]))),ze=X.default.input(x||(x=w(["\n overflow: hidden;\n width: 0.1px;\n height: 0.1px;\n opacity: 0;\n position: absolute;\n z-index: -1;\n"]))),qe=X.default.label(m||(m=w(["\n position: relative;\n"]))),Le=e=>{let{onSelect:n}=e,s=v(e,t);const r="FileSelect".concat(O.useId()),i=O.useRef(null),a=O.useCallback((e=>{n&&n(e.target.files)}),[n]),o=O.useCallback((()=>{var e;return null==(e=i.current)?void 0:e.click()}),[]);return P.jsxs(qe,{htmlFor:r,children:[P.jsx(ze,{accept:"video/*",ref:i,tabIndex:0,type:"file",id:r,onChange:a,value:""}),P.jsx(R.Button,C({onClick:o,mode:"default",tone:"primary",style:{width:"100%"}},s))]})},Ae=X.default(R.Card)(y||(y=w(["\n && {\n border-style: dashed;\n }\n"]))),Ve=X.default(R.Box)(b||(b=w(["\n position: absolute;\n top: 0;\n right: 0;\n"])));function Ge(e){const{setDialogState:t,readOnly:n,onSelect:s,hovering:r,needsSetup:i}=e,a=O.useCallback((()=>t("select-video")),[t]),o=O.useCallback((()=>t("secrets")),[t]);return P.jsx(R.Box,{style:{padding:1,position:"relative"},height:"stretch",children:P.jsxs(Ae,{sizing:"border",height:"fill",tone:n?"transparent":"inherit",border:!0,padding:3,style:r?{borderColor:"transparent"}:void 0,children:[P.jsx(Ve,{padding:3,children:P.jsx(R.Button,{padding:3,radius:3,tone:i?"critical":void 0,onClick:o,icon:B.PlugIcon,mode:"bleed"})}),P.jsxs(R.Flex,{align:"center",justify:"space-between",gap:4,direction:["column","column","row"],paddingY:[2,2,0],sizing:"border",height:"fill",children:[P.jsxs(R.Flex,{align:"center",justify:"center",gap:2,flex:1,children:[P.jsx(R.Flex,{justify:"center",children:P.jsx(R.Text,{muted:!0,children:P.jsx(B.DocumentVideoIcon,{})})}),P.jsx(R.Flex,{justify:"center",children:P.jsx(R.Text,{size:1,muted:!0,children:"Drag video or paste URL here"})})]}),P.jsxs(R.Inline,{space:2,children:[P.jsx(Le,{mode:"ghost",tone:"default",icon:B.UploadIcon,text:"Upload",onSelect:s}),P.jsx(R.Button,{mode:"ghost",icon:B.SearchIcon,text:"Select",onClick:a})]})]})]})})}class He extends O.Component{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=Y.default.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 s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return re(n).pipe(E.switchMap((r=>M.concat(M.of({type:"file",file:r}),te(t).pipe(E.switchMap((r=>{if(!r||!r.status)return M.throwError(new Error("Invalid credentials"));const i=_.uuid(),{enableSignedUrls:a}=s,o={mp4_support:e.mp4_support,playback_policy:[a?"signed":"public"]};return M.concat(M.of({type:"uuid",uuid:i}),M.defer((()=>t.observable.request({url:"/addons/mux/uploads/".concat(t.clientConfig.dataset),withCredentials:!0,method:"POST",headers:{"MUX-Proxy-UUID":i,"Content-Type":"application/json"},body:o}))).pipe(E.mergeMap((e=>$(i,e.upload.url,n).pipe(E.mergeMap((e=>"success"!==e.type?M.of(e):M.from(se(t,i)).pipe(E.mergeMap((t=>M.of(C(C({},e),{},{asset:t}))))))),E.catchError((e=>ne(t,i).pipe(E.mergeMapTo(M.throwError(e))))))))))})))))))}(this.props.config,this.props.client,e[0],{enableSignedUrls:this.props.secrets.enableSignedUrls}).pipe(E.takeUntil(this.onCancelUploadButtonClick$.pipe(E.tap((()=>{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(U.PatchEvent.from([U.setIfMissing({asset:{}}),U.set({_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 s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return ie(n).pipe(E.switchMap((n=>M.concat(M.of({type:"url",url:n}),te(t).pipe(E.switchMap((r=>{if(!r||!r.status)return M.throwError(new Error("Invalid credentials"));const i=_.uuid(),{enableSignedUrls:a}=s,o={input:n,playback_policy:[a?"signed":"public"],mp4_support:e.mp4_support},l={muxBody:JSON.stringify(o),filename:n.split("/").slice(-1)[0]},d=t.clientConfig.dataset;return M.defer((()=>t.observable.request({url:"/addons/mux/assets/".concat(d),withCredentials:!0,method:"POST",headers:{"MUX-Proxy-UUID":i,"Content-Type":"application/json"},query:l}))).pipe(E.mergeMap((e=>{const t=e&&e.results&&e.results[0]&&e.results[0].document||null;return t?M.of({type:"success",id:i,asset:t}):M.throwError(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(),ae(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 s=null==(n=null==(t=e.dataTransfer.items)?void 0:t[0])?void 0:n.type;this.setState({invalidFile:!s.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 M.Subject;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.jsx(Pe,{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 P.jsxs(P.Fragment,{children:[P.jsx(Be,{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.jsx(Oe,{readOnly:this.props.readOnly,asset:this.props.asset,onChange:this.props.onChange,dialogState:this.props.dialogState,setDialogState:this.props.setDialogState,buttons:P.jsx(_e,{asset:this.props.asset,dialogState:this.props.dialogState,setDialogState:this.props.setDialogState,onChange:this.props.onChange,onUpload:this.onUpload,readOnly:this.props.readOnly})}):P.jsx(Ge,{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.jsx(fe,{asset:this.props.asset,onChange:this.props.onChange,setDialogState:this.props.setDialogState})]})}}const Ne=(e,t)=>O.useCallback((async n=>{let{token:s,secretKey:r,enableSignedUrls:i}=n,{signingKeyId:a,signingKeyPrivate:o}=t;try{await ee(e,s,r,i,a,o);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)&&s&&r)throw new Error("Invalid secrets")}catch(e){throw console.error("Error while trying to save secrets:",e),e}if(i){const t=await async function(e,t,n){if(!t||!n)return!1;const{dataset:s}=e.config();try{const n=await e.request({url:"/addons/mux/signing-keys/".concat(s,"/").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,o);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,o=t.private_key,await ee(e,s,r,i,a,o)}catch(e){throw console.log("Error while creating and saving signing key:",null==e?void 0:e.message),e}}return{token:s,secretKey:r,enableSignedUrls:i,signingKeyId:a,signingKeyPrivate:o}}),[e,t]);function Ye(e){let{token:t,secretKey:n,enableSignedUrls:s}=e;return{submitting:!1,error:null,token:null!=t?t:"",secretKey:null!=n?n:"",enableSignedUrls:null!=s&&s}}function Ze(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 Ye(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 We=["title","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r"];function Xe(e){let{height:t=26}=e;const n=O.useId(),[s,r,i,a,o,l,d,c,u,p,h,g,f,x,m,y,b,j,v]=O.useMemo((()=>We.map((e=>"".concat(n,"-").concat(e)))),[n]);return P.jsxs("svg",{"aria-labelledby":s,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.jsx("title",{id:s,children:"Mux Logo"}),P.jsxs("defs",{children:[P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("linearGradient",{id:o,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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("linearGradient",{id:x,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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("linearGradient",{id:j,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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsxs("linearGradient",{id:v,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.jsx("stop",{offset:0,style:{stopOpacity:1,stopColor:"#ff4e00"}}),P.jsx("stop",{offset:1,style:{stopOpacity:1,stopColor:"#ff1791"}})]}),P.jsx("clipPath",{id:r,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M0 319h657.706V0H0Z"})}),P.jsx("clipPath",{id:i,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M423.64 242h164.999V77H423.64Z"})}),P.jsx("clipPath",{id:l,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M0 319h657.706V0H0Z"})}),P.jsx("clipPath",{id:d,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M311.3 242h93.031V77H311.3Z"})}),P.jsx("clipPath",{id:u,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M198.96 242h35.106V77H198.96Z"})}),P.jsx("clipPath",{id:m,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M0 319h657.706V0H0Z"})}),P.jsx("clipPath",{id:y,clipPathUnits:"userSpaceOnUse",children:P.jsx("path",{d:"M69.067 242H169.12V141.947H69.067Z"})})]}),P.jsx("g",{clipPath:"url(#".concat(r,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:P.jsx("g",{style:{opacity:.69999701},clipPath:"url(#".concat(i,")"),children:P.jsx("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.jsx("path",{style:{fill:"url(#".concat(o,")"),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)"}),P.jsxs("g",{clipPath:"url(#".concat(l,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:[P.jsx("g",{style:{opacity:.69999701},clipPath:"url(#".concat(d,")"),children:P.jsx("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.jsx("g",{style:{opacity:.69999701},clipPath:"url(#".concat(u,")"),children:P.jsx("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.jsx("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.jsx("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.jsx("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.jsx("path",{style:{fill:"url(#".concat(x,")"),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.jsx("g",{clipPath:"url(#".concat(m,")"),transform:"matrix(1.33333 0 0 -1.33333 0 425.333)",children:P.jsx("g",{style:{opacity:.69999701},clipPath:"url(#".concat(y,")"),children:P.jsx("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.jsx("path",{style:{fill:"url(#".concat(j,")"),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.jsx("path",{style:{fill:"url(#".concat(v,")"),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 Je=X.default.span(j||(j=w(["\n display: inline-block;\n height: 0.8em;\n margin-right: 1em;\n transform: translate(0.3em, -0.2em);\n"]))),$e=()=>P.jsxs(P.Fragment,{children:[P.jsx(Je,{children:P.jsx(Xe,{height:13})}),"API Credentials"]});var Qe=O.memo((function(e){const{children:t,title:n,description:s,inputId:r}=e;return P.jsxs(R.Stack,{space:1,children:[P.jsx(R.Flex,{align:"flex-end",children:P.jsx(R.Box,{flex:1,paddingY:2,children:P.jsx(R.Stack,{space:2,children:P.jsxs(R.Flex,{children:[P.jsx(R.Text,{as:"label",htmlFor:r,weight:"semibold",size:1,children:n||P.jsx("em",{children:"Untitled"})}),s&&P.jsx(R.Text,{muted:!0,size:1,children:s})]})})})}),P.jsx("div",{children:t})]})}));const et=["token","secretKey","enableSignedUrls"];var tt=O.memo((function(e){let{secrets:t,setDialogState:n}=e;var s,r;const i=I.useClient(),[a,o]=(e=>O.useReducer(Ze,e,Ye))(t),l=O.useMemo((()=>t.token&&t.secretKey),[t]),d=O.useCallback((()=>n(!1)),[n]),c=O.useMemo((()=>t.token!==a.token||t.secretKey!==a.secretKey||t.enableSignedUrls!==a.enableSignedUrls),[t,a]),u="ConfigureApi".concat(O.useId()),[p,h,g]=O.useMemo((()=>et.map((e=>"".concat(u,"-").concat(e)))),[u]),f=O.useRef(null),x=Ne(i,t),m=O.useRef(!1),y=O.useCallback((e=>{if(e.preventDefault(),!m.current&&e.currentTarget.reportValidity()){m.current=!0,o({type:"submit"});const{token:e,secretKey:t,enableSignedUrls:s}=a;x({token:e,secretKey:t,enableSignedUrls:s}).then((e=>{const{projectId:t,dataset:s}=i.config();G.clear([T.cacheNs,I._id,t,s]),G.preload((()=>Promise.resolve(e)),[T.cacheNs,I._id,t,s]),n(!1)})).catch((e=>o({type:"error",payload:e.message}))).finally((()=>{m.current=!1}))}}),[i,o,x,n,a]),b=O.useCallback((e=>{o({type:"change",payload:{name:"token",value:e.currentTarget.value}})}),[o]),j=O.useCallback((e=>{o({type:"change",payload:{name:"secretKey",value:e.currentTarget.value}})}),[o]),v=O.useCallback((e=>{o({type:"change",payload:{name:"enableSignedUrls",value:e.currentTarget.checked}})}),[o]);return O.useEffect((()=>{f.current&&f.current.focus()}),[f]),P.jsx(R.Dialog,{id:u,onClose:d,header:P.jsx($e,{}),width:0,children:P.jsx(R.Box,{padding:4,style:{position:"relative"},children:P.jsx("form",{onSubmit:y,noValidate:!0,children:P.jsxs(R.Stack,{space:4,children:[!l&&P.jsx(R.Card,{padding:[3,3,3],radius:2,shadow:1,tone:"primary",children:P.jsxs(R.Stack,{space:3,children:[P.jsxs(R.Text,{size:1,children:["To set up a new access token, go to your"," ",P.jsx("a",{href:"https://dashboard.mux.com/settings/access-tokens",target:"_blank",rel:"noreferrer noopener",children:"account on mux.com"}),"."]}),P.jsxs(R.Text,{size:1,children:["The access token needs permissions: ",P.jsx("strong",{children:"Mux Video "}),"(Full Access) and ",P.jsx("strong",{children:"Mux Data"})," (Read)",P.jsx("br",{}),"The credentials will be stored safely in a hidden document only available to editors."]})]})}),P.jsx(Qe,{title:"Access Token",inputId:p,children:P.jsx(R.TextInput,{id:p,ref:f,onChange:b,type:"text",value:null!=(s=a.token)?s:"",required:!!a.secretKey||a.enableSignedUrls})}),P.jsx(Qe,{title:"Secret Key",inputId:h,children:P.jsx(R.TextInput,{id:h,onChange:j,type:"text",value:null!=(r=a.secretKey)?r:"",required:!!a.token||a.enableSignedUrls})}),P.jsxs(R.Stack,{space:4,children:[P.jsxs(R.Flex,{align:"center",children:[P.jsx(R.Checkbox,{id:g,onChange:v,checked:a.enableSignedUrls,style:{display:"block"}}),P.jsx(R.Box,{flex:1,paddingLeft:3,children:P.jsx(R.Text,{children:P.jsx("label",{htmlFor:g,children:"Enable Signed Urls"})})})]}),t.signingKeyId&&a.enableSignedUrls?P.jsx(R.Card,{padding:[3,3,3],radius:2,shadow:1,tone:"caution",children:P.jsxs(R.Stack,{space:3,children:[P.jsx(R.Text,{size:1,children:"The signing key ID that Sanity will use is:"}),P.jsx(R.Code,{size:1,children:t.signingKeyId}),P.jsxs(R.Text,{size:1,children:["This key is only used for previewing content in the Sanity UI.",P.jsx("br",{}),"You should generate a different key to use in your application server."]})]})}):null]}),P.jsxs(R.Inline,{space:2,children:[P.jsx(R.Button,{text:"Save",disabled:!c,loading:a.submitting,tone:"primary",mode:"default",type:"submit"}),P.jsx(R.Button,{disabled:a.submitting,text:"Cancel",mode:"bleed",onClick:d})]}),a.error&&P.jsx(R.Card,{padding:[3,3,3],radius:2,shadow:1,tone:"critical",children:P.jsx(R.Text,{children:a.error})})]})})})})}));function nt(e){const{setDialogState:t}=e,n=O.useCallback((()=>t("secrets")),[t]);return P.jsx(P.Fragment,{children:P.jsx("div",{style:{padding:2},children:P.jsx(R.Card,{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.jsx(R.Flex,{justify:"flex-start",align:"center",children:P.jsxs(R.Grid,{columns:1,gap:[2,3,4,4],children:[P.jsx(R.Inline,{paddingY:1,children:P.jsx("div",{style:{height:"32px"},children:P.jsx(Xe,{})})}),P.jsx(R.Inline,{paddingY:1,children:P.jsx(R.Heading,{size:[0,1,2,2],children:"Upload and preview videos directly from your studio."})}),P.jsx(R.Inline,{paddingY:1,children:P.jsx(R.Button,{mode:"ghost",icon:B.PlugIcon,text:"Configure API",onClick:n})})]})})})})})}var st=O.memo((e=>{var t;const n=I.useClient(),s=(()=>{const{error:e,isLoading:t,value:n}=U.useDocumentValues(T.muxSecretsDocumentId,J);return{error:e,isLoading:t,value:O.useMemo((()=>{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])}})(),r=I.useAssetDocumentValues(null==(t=e.value)?void 0:t.asset),i=(e=>{var t,n;const s=I.useClient(),r=U.useProjectId(),i=U.useDataset(),a=O.useMemo((()=>{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 Z.default(a?"/".concat(r,"/addons/mux/assets/").concat(i,"/data/").concat(null==e?void 0:e.assetId):null,(async()=>{const{data:t}=await s.request({url:"/addons/mux/assets/".concat(i,"/data/").concat(e.assetId),withCredentials:!0,method:"GET"});s.patch(e._id).set({status:t.status,data:t}).commit({returnDocuments:!1})}),{refreshInterval:2e3,refreshWhenHidden:!0,dedupingInterval:1e3})})(e.readOnly?void 0:(null==r?void 0:r.value)||void 0),[a,o]=O.useState(!1),l=s.error||r.error||i.error;if(l)throw l;const d=s.isLoading||r.isLoading;return P.jsx(P.Fragment,{children:d?P.jsx(T.InputFallback,{}):P.jsxs(P.Fragment,{children:[s.value.needsSetup&&!r.value?P.jsx(nt,{setDialogState:o}):P.jsx(He,C(C({},e),{},{config:e.config,onChange:e.onChange,client:n,secrets:s.value.secrets,asset:r.value,dialogState:a,setDialogState:o,needsSetup:s.value.needsSetup})),"secrets"===a&&P.jsx(tt,{setDialogState:o,secrets:s.value.secrets})]})})}));exports.default=st;
2
- //# sourceMappingURL=Input-2ba004d3.js.map
@@ -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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"}