sanity-plugin-mux-input 2.1.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/index.cjs +4038 -4
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.ts +14 -1
- package/lib/index.js +4027 -2
- package/lib/index.js.map +1 -1
- package/package.json +30 -30
- package/src/actions/assets.ts +30 -2
- package/src/components/ConfigureApi.tsx +9 -1
- package/src/components/FormField.tsx +8 -10
- package/src/components/IconInfo.tsx +23 -0
- package/src/components/Input.styled.tsx +0 -8
- package/src/components/Input.tsx +4 -3
- package/src/components/InputBrowser.tsx +1 -8
- package/src/components/Player.styled.tsx +5 -144
- package/src/components/Player.tsx +23 -109
- package/src/components/PlayerActionsMenu.tsx +0 -4
- package/src/components/SelectAsset.tsx +18 -58
- package/src/components/SelectSortOptions.tsx +45 -0
- package/src/components/SpinnerBox.tsx +17 -0
- package/src/components/StudioTool.tsx +20 -0
- package/src/components/VideoDetails/DeleteDialog.tsx +156 -0
- package/src/components/VideoDetails/VideoDetails.tsx +298 -0
- package/src/components/VideoDetails/VideoReferences.tsx +70 -0
- package/src/components/VideoDetails/useVideoDetails.ts +85 -0
- package/src/components/VideoInBrowser.tsx +183 -0
- package/src/components/VideoMetadata.tsx +43 -0
- package/src/components/VideoPlayer.tsx +69 -0
- package/src/components/VideoThumbnail.tsx +106 -0
- package/src/components/VideosBrowser.tsx +83 -0
- package/src/components/__legacy__Uploader.tsx +2 -9
- package/src/components/documentPreview/DocumentPreview.tsx +107 -0
- package/src/components/documentPreview/DraftStatus.tsx +34 -0
- package/src/components/documentPreview/MissingSchemaType.tsx +33 -0
- package/src/components/documentPreview/PaneItemPreview.tsx +71 -0
- package/src/components/documentPreview/PublishedStatus.tsx +35 -0
- package/src/components/documentPreview/TimeAgo.tsx +13 -0
- package/src/components/documentPreview/paneItemTypes.ts +7 -0
- package/src/components/icons/Resolution.tsx +12 -0
- package/src/components/icons/StopWatch.tsx +20 -0
- package/src/components/icons/ToolIcon.tsx +21 -0
- package/src/hooks/useAssets.ts +61 -0
- package/src/hooks/useCancelUpload.ts +2 -2
- package/src/hooks/useClient.ts +3 -1
- package/src/hooks/useDocReferences.ts +21 -0
- package/src/hooks/useInView.ts +45 -0
- package/src/index.ts +2 -0
- package/src/plugin.tsx +1 -1
- package/src/util/constants.ts +7 -0
- package/src/util/createSearchFilter.ts +78 -0
- package/src/util/formatSeconds.ts +22 -0
- package/src/util/getAnimatedPosterSrc.ts +1 -1
- package/src/util/getPlaybackId.ts +1 -1
- package/src/util/getPlaybackPolicy.ts +1 -1
- package/src/util/getVideoMetadata.ts +18 -0
- package/src/util/types.ts +16 -1
- package/lib/_chunks/Player-547f8e2a.cjs +0 -474
- package/lib/_chunks/Player-547f8e2a.cjs.map +0 -1
- package/lib/_chunks/Player-bfdb96f6.js +0 -465
- package/lib/_chunks/Player-bfdb96f6.js.map +0 -1
- package/lib/_chunks/index-39e38243.cjs +0 -3251
- package/lib/_chunks/index-39e38243.cjs.map +0 -1
- package/lib/_chunks/index-71899191.js +0 -3229
- package/lib/_chunks/index-71899191.js.map +0 -1
- package/src/components/EditThumbnailDialog.tsx +0 -74
- package/src/components/VideoSource.styled.tsx +0 -235
- package/src/components/VideoSource.tsx +0 -318
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
var _templateObject, _templateObject2, _templateObject3;
|
|
2
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
import MuxVideo from '@mux/mux-video-react';
|
|
5
|
-
import { Dialog, Stack, Button, Text, Card } from '@sanity/ui';
|
|
6
|
-
import { MediaControlBar, MediaPosterImage, MediaController, MediaLoadingIndicator, MediaPlayButton, MediaMuteButton, MediaTimeDisplay, MediaTimeRange, MediaDurationDisplay, MediaFullscreenButton } from 'media-chrome/dist/react';
|
|
7
|
-
import { useCallback, useId, useMemo, useState, useRef, useEffect } from 'react';
|
|
8
|
-
import { PatchEvent, unset } from 'sanity';
|
|
9
|
-
import { useClient, deleteAsset, getPlaybackId, getPlaybackPolicy, generateJwt, VideoThumbnail, getPosterSrc, UploadProgress } from './index-71899191.js';
|
|
10
|
-
import { getDevicePixelRatio } from 'use-device-pixel-ratio';
|
|
11
|
-
import styled from 'styled-components';
|
|
12
|
-
const useCancelUpload = (asset, onChange) => {
|
|
13
|
-
const client = useClient();
|
|
14
|
-
return useCallback(() => {
|
|
15
|
-
if (!asset) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
onChange(PatchEvent.from(unset()));
|
|
19
|
-
if (asset.assetId) {
|
|
20
|
-
deleteAsset(client, asset.assetId);
|
|
21
|
-
}
|
|
22
|
-
if (asset._id) {
|
|
23
|
-
client.delete(asset._id);
|
|
24
|
-
}
|
|
25
|
-
}, [asset, client, onChange]);
|
|
26
|
-
};
|
|
27
|
-
function getVideoSrc(_ref) {
|
|
28
|
-
let {
|
|
29
|
-
asset,
|
|
30
|
-
client
|
|
31
|
-
} = _ref;
|
|
32
|
-
const playbackId = getPlaybackId(asset);
|
|
33
|
-
const searchParams = new URLSearchParams();
|
|
34
|
-
if (getPlaybackPolicy(asset) === "signed") {
|
|
35
|
-
const token = generateJwt(client, playbackId, "v");
|
|
36
|
-
searchParams.set("token", token);
|
|
37
|
-
}
|
|
38
|
-
return "https://stream.mux.com/".concat(playbackId, ".m3u8?").concat(searchParams);
|
|
39
|
-
}
|
|
40
|
-
var name = "sanity-plugin-mux-input";
|
|
41
|
-
var version = "2.1.1";
|
|
42
|
-
var description = "An input component that integrates Sanity Studio with Mux video encoding/hosting service.";
|
|
43
|
-
var keywords = ["sanity", "video", "mux", "input", "plugin", "sanity-plugin", "media"];
|
|
44
|
-
var homepage = "https://github.com/sanity-io/sanity-plugin-mux-input#readme";
|
|
45
|
-
var bugs = {
|
|
46
|
-
url: "https://github.com/sanity-io/sanity-plugin-mux-input/issues"
|
|
47
|
-
};
|
|
48
|
-
var repository = {
|
|
49
|
-
type: "git",
|
|
50
|
-
url: "git@github.com:sanity-io/sanity-plugin-mux-input.git"
|
|
51
|
-
};
|
|
52
|
-
var license = "MIT";
|
|
53
|
-
var author = "Sanity.io <hello@sanity.io>";
|
|
54
|
-
var sideEffects = false;
|
|
55
|
-
var type = "module";
|
|
56
|
-
var exports = {
|
|
57
|
-
".": {
|
|
58
|
-
types: "./lib/index.d.ts",
|
|
59
|
-
source: "./src/index.ts",
|
|
60
|
-
require: "./lib/index.cjs",
|
|
61
|
-
node: {
|
|
62
|
-
"import": "./lib/index.cjs.js",
|
|
63
|
-
require: "./lib/index.cjs"
|
|
64
|
-
},
|
|
65
|
-
"import": "./lib/index.js",
|
|
66
|
-
"default": "./lib/index.js"
|
|
67
|
-
},
|
|
68
|
-
"./package.json": "./package.json"
|
|
69
|
-
};
|
|
70
|
-
var main = "./lib/index.cjs";
|
|
71
|
-
var module = "./lib/index.js";
|
|
72
|
-
var source = "./src/index.ts";
|
|
73
|
-
var types = "./lib/index.d.ts";
|
|
74
|
-
var files = ["src", "lib", "sanity.json", "v2-incompatible.js"];
|
|
75
|
-
var scripts = {
|
|
76
|
-
build: "run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict",
|
|
77
|
-
clean: "rimraf lib",
|
|
78
|
-
dev: "next dev",
|
|
79
|
-
format: "prettier --write --cache --ignore-unknown .",
|
|
80
|
-
"link-watch": "plugin-kit link-watch",
|
|
81
|
-
lint: "eslint .",
|
|
82
|
-
prepare: "husky install || true",
|
|
83
|
-
prepublishOnly: "run-s build",
|
|
84
|
-
test: "npm run lint && npm run type-check && npm run build",
|
|
85
|
-
"type-check": "tsc --noEmit",
|
|
86
|
-
watch: "pkg-utils watch --strict"
|
|
87
|
-
};
|
|
88
|
-
var dependencies = {
|
|
89
|
-
"@mux/mux-video-react": "^0.7.7",
|
|
90
|
-
"@mux/upchunk": "^3",
|
|
91
|
-
"@sanity/icons": "^2",
|
|
92
|
-
"@sanity/incompatible-plugin": "^1",
|
|
93
|
-
"@sanity/ui": "^1",
|
|
94
|
-
"@sanity/uuid": "^3",
|
|
95
|
-
classnames: "^2.3.2",
|
|
96
|
-
"jsonwebtoken-esm": "^1.0.5",
|
|
97
|
-
"media-chrome": "^0.21.0",
|
|
98
|
-
motion: "^10",
|
|
99
|
-
rxjs: "^7",
|
|
100
|
-
"scroll-into-view-if-needed": "^3",
|
|
101
|
-
"suspend-react": "^0.0.10",
|
|
102
|
-
swr: "^2.1.0",
|
|
103
|
-
"use-device-pixel-ratio": "^1.1.2",
|
|
104
|
-
"use-error-boundary": "^2.0.6"
|
|
105
|
-
};
|
|
106
|
-
var devDependencies = {
|
|
107
|
-
"@commitlint/cli": "^17.4.4",
|
|
108
|
-
"@commitlint/config-conventional": "^17.4.4",
|
|
109
|
-
"@sanity/pkg-utils": "^2.2.13",
|
|
110
|
-
"@sanity/plugin-kit": "^3.1.7",
|
|
111
|
-
"@sanity/semantic-release-preset": "^4.0.0",
|
|
112
|
-
"@sanity/vision": "^3.6.0",
|
|
113
|
-
"@types/react": "^18.0.28",
|
|
114
|
-
"@types/styled-components": "^5.1.26",
|
|
115
|
-
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
116
|
-
"@typescript-eslint/parser": "^5.54.1",
|
|
117
|
-
"cz-conventional-changelog": "^3.3.0",
|
|
118
|
-
eslint: "^8.36.0",
|
|
119
|
-
"eslint-config-prettier": "^8.7.0",
|
|
120
|
-
"eslint-config-react-app": "^7.0.1",
|
|
121
|
-
"eslint-config-sanity": "^6.0.0",
|
|
122
|
-
"eslint-plugin-import": "^2.27.5",
|
|
123
|
-
"eslint-plugin-prettier": "^4.2.1",
|
|
124
|
-
"eslint-plugin-react": "^7.32.2",
|
|
125
|
-
"eslint-plugin-react-hooks": "^4.6.0",
|
|
126
|
-
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
127
|
-
husky: "^8.0.3",
|
|
128
|
-
"lint-staged": "^13.2.0",
|
|
129
|
-
next: "^13.2.4",
|
|
130
|
-
"next-sanity": "^4.1.5",
|
|
131
|
-
"npm-run-all": "^4.1.5",
|
|
132
|
-
prettier: "^2.8.4",
|
|
133
|
-
"prettier-plugin-packagejson": "^2.4.3",
|
|
134
|
-
react: "^18.2.0",
|
|
135
|
-
"react-dom": "^18.2.0",
|
|
136
|
-
"react-is": "^18.2.0",
|
|
137
|
-
rimraf: "^5.0.0",
|
|
138
|
-
sanity: "^3.6.0",
|
|
139
|
-
"styled-components": "^5.3.9",
|
|
140
|
-
"type-fest": "^3.6.1",
|
|
141
|
-
typescript: "^5.0.2"
|
|
142
|
-
};
|
|
143
|
-
var peerDependencies = {
|
|
144
|
-
react: "^18",
|
|
145
|
-
sanity: "^3",
|
|
146
|
-
"styled-components": "^5.2"
|
|
147
|
-
};
|
|
148
|
-
var engines = {
|
|
149
|
-
node: ">=14"
|
|
150
|
-
};
|
|
151
|
-
var publishConfig = {
|
|
152
|
-
access: "public"
|
|
153
|
-
};
|
|
154
|
-
var sanityExchangeUrl = "https://www.sanity.io/plugins/sanity-plugin-mux-input";
|
|
155
|
-
var pluginPkg = {
|
|
156
|
-
name: name,
|
|
157
|
-
version: version,
|
|
158
|
-
description: description,
|
|
159
|
-
keywords: keywords,
|
|
160
|
-
homepage: homepage,
|
|
161
|
-
bugs: bugs,
|
|
162
|
-
repository: repository,
|
|
163
|
-
license: license,
|
|
164
|
-
author: author,
|
|
165
|
-
sideEffects: sideEffects,
|
|
166
|
-
type: type,
|
|
167
|
-
exports: exports,
|
|
168
|
-
main: main,
|
|
169
|
-
module: module,
|
|
170
|
-
source: source,
|
|
171
|
-
types: types,
|
|
172
|
-
files: files,
|
|
173
|
-
scripts: scripts,
|
|
174
|
-
dependencies: dependencies,
|
|
175
|
-
devDependencies: devDependencies,
|
|
176
|
-
peerDependencies: peerDependencies,
|
|
177
|
-
engines: engines,
|
|
178
|
-
publishConfig: publishConfig,
|
|
179
|
-
sanityExchangeUrl: sanityExchangeUrl
|
|
180
|
-
};
|
|
181
|
-
function EditThumbnailDialog(_ref2) {
|
|
182
|
-
let {
|
|
183
|
-
asset,
|
|
184
|
-
getCurrentTime,
|
|
185
|
-
setDialogState
|
|
186
|
-
} = _ref2;
|
|
187
|
-
const client = useClient();
|
|
188
|
-
const dialogId = "EditThumbnailDialog".concat(useId());
|
|
189
|
-
const nextTime = useMemo(() => getCurrentTime(), [getCurrentTime]);
|
|
190
|
-
const assetWithNewThumbnail = useMemo(() => ({
|
|
191
|
-
...asset,
|
|
192
|
-
thumbTime: nextTime
|
|
193
|
-
}), [asset, nextTime]);
|
|
194
|
-
const [saving, setSaving] = useState(false);
|
|
195
|
-
const [error, setError] = useState(null);
|
|
196
|
-
const handleSave = useCallback(() => {
|
|
197
|
-
setSaving(true);
|
|
198
|
-
client.patch(asset._id).set({
|
|
199
|
-
thumbTime: nextTime
|
|
200
|
-
}).commit({
|
|
201
|
-
returnDocuments: false
|
|
202
|
-
}).then(() => void setDialogState(false)).catch(setError).finally(() => void setSaving(false));
|
|
203
|
-
}, [client, asset._id, nextTime, setDialogState]);
|
|
204
|
-
const width = 300 * getDevicePixelRatio({
|
|
205
|
-
maxDpr: 2
|
|
206
|
-
});
|
|
207
|
-
if (error) {
|
|
208
|
-
throw error;
|
|
209
|
-
}
|
|
210
|
-
return /* @__PURE__ */jsx(Dialog, {
|
|
211
|
-
id: dialogId,
|
|
212
|
-
header: "Edit thumbnail",
|
|
213
|
-
onClose: () => setDialogState(false),
|
|
214
|
-
footer: /* @__PURE__ */jsx(Stack, {
|
|
215
|
-
padding: 3,
|
|
216
|
-
children: /* @__PURE__ */jsx(Button, {
|
|
217
|
-
mode: "ghost",
|
|
218
|
-
tone: "primary",
|
|
219
|
-
loading: saving,
|
|
220
|
-
onClick: handleSave,
|
|
221
|
-
text: "Set new thumbnail"
|
|
222
|
-
}, "thumbnail")
|
|
223
|
-
}),
|
|
224
|
-
children: /* @__PURE__ */jsxs(Stack, {
|
|
225
|
-
space: 3,
|
|
226
|
-
padding: 3,
|
|
227
|
-
children: [/* @__PURE__ */jsxs(Stack, {
|
|
228
|
-
space: 2,
|
|
229
|
-
children: [/* @__PURE__ */jsx(Text, {
|
|
230
|
-
size: 1,
|
|
231
|
-
weight: "semibold",
|
|
232
|
-
children: "Current:"
|
|
233
|
-
}), /* @__PURE__ */jsx(VideoThumbnail, {
|
|
234
|
-
asset,
|
|
235
|
-
width
|
|
236
|
-
})]
|
|
237
|
-
}), /* @__PURE__ */jsxs(Stack, {
|
|
238
|
-
space: 2,
|
|
239
|
-
children: [/* @__PURE__ */jsx(Text, {
|
|
240
|
-
size: 1,
|
|
241
|
-
weight: "semibold",
|
|
242
|
-
children: "New:"
|
|
243
|
-
}), /* @__PURE__ */jsx(VideoThumbnail, {
|
|
244
|
-
asset: assetWithNewThumbnail,
|
|
245
|
-
width
|
|
246
|
-
})]
|
|
247
|
-
})]
|
|
248
|
-
})
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
function getStoryboardSrc(_ref3) {
|
|
252
|
-
let {
|
|
253
|
-
asset,
|
|
254
|
-
client
|
|
255
|
-
} = _ref3;
|
|
256
|
-
const playbackId = getPlaybackId(asset);
|
|
257
|
-
const searchParams = new URLSearchParams();
|
|
258
|
-
if (getPlaybackPolicy(asset) === "signed") {
|
|
259
|
-
const token = generateJwt(client, playbackId, "s");
|
|
260
|
-
searchParams.set("token", token);
|
|
261
|
-
}
|
|
262
|
-
return "https://image.mux.com/".concat(playbackId, "/storyboard.vtt?").concat(searchParams);
|
|
263
|
-
}
|
|
264
|
-
const VideoContainer = styled(Card)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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"])));
|
|
265
|
-
const StyledCenterControls = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\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"])));
|
|
266
|
-
const TopControls = styled(MediaControlBar)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n justify-content: flex-end;\n button {\n height: auto;\n }\n"])));
|
|
267
|
-
function PosterImage(_ref4) {
|
|
268
|
-
let {
|
|
269
|
-
asset
|
|
270
|
-
} = _ref4;
|
|
271
|
-
const client = useClient();
|
|
272
|
-
const ref = useRef(null);
|
|
273
|
-
const src = useMemo(() => getPosterSrc({
|
|
274
|
-
client,
|
|
275
|
-
asset,
|
|
276
|
-
width: 1920,
|
|
277
|
-
height: 1080
|
|
278
|
-
}), [client, asset]);
|
|
279
|
-
useEffect(() => {
|
|
280
|
-
var _a;
|
|
281
|
-
if (ref.current) {
|
|
282
|
-
const style = document.createElement("style");
|
|
283
|
-
style.innerHTML = "img { object-fit: contain; }";
|
|
284
|
-
if ((_a = ref.current) == null ? void 0 : _a.shadowRoot) {
|
|
285
|
-
ref.current.shadowRoot.appendChild(style);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}, []);
|
|
289
|
-
return /* @__PURE__ */jsx(MediaPosterImage, {
|
|
290
|
-
ref,
|
|
291
|
-
slot: "poster",
|
|
292
|
-
src
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
function ThumbnailsMetadataTrack(_ref5) {
|
|
296
|
-
let {
|
|
297
|
-
asset
|
|
298
|
-
} = _ref5;
|
|
299
|
-
const client = useClient();
|
|
300
|
-
const [src] = useState(() => getStoryboardSrc({
|
|
301
|
-
asset,
|
|
302
|
-
client
|
|
303
|
-
}));
|
|
304
|
-
return /* @__PURE__ */jsx("track", {
|
|
305
|
-
label: "thumbnails",
|
|
306
|
-
default: true,
|
|
307
|
-
kind: "metadata",
|
|
308
|
-
src
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
const MuxVideoOld = _ref6 => {
|
|
312
|
-
let {
|
|
313
|
-
asset,
|
|
314
|
-
buttons,
|
|
315
|
-
readOnly,
|
|
316
|
-
onChange,
|
|
317
|
-
dialogState,
|
|
318
|
-
setDialogState
|
|
319
|
-
} = _ref6;
|
|
320
|
-
var _a, _b, _c, _d;
|
|
321
|
-
const client = useClient();
|
|
322
|
-
const isLoading = useMemo(() => {
|
|
323
|
-
if ((asset == null ? void 0 : asset.status) === "preparing") {
|
|
324
|
-
return "Preparing the video";
|
|
325
|
-
}
|
|
326
|
-
if ((asset == null ? void 0 : asset.status) === "waiting_for_upload") {
|
|
327
|
-
return "Waiting for upload to start";
|
|
328
|
-
}
|
|
329
|
-
if ((asset == null ? void 0 : asset.status) === "waiting") {
|
|
330
|
-
return "Processing upload";
|
|
331
|
-
}
|
|
332
|
-
if ((asset == null ? void 0 : asset.status) === "ready") {
|
|
333
|
-
return false;
|
|
334
|
-
}
|
|
335
|
-
if (typeof (asset == null ? void 0 : asset.status) === "undefined") {
|
|
336
|
-
return false;
|
|
337
|
-
}
|
|
338
|
-
return true;
|
|
339
|
-
}, [asset]);
|
|
340
|
-
const isPreparingStaticRenditions = useMemo(() => {
|
|
341
|
-
var _a2, _b2, _c2, _d2;
|
|
342
|
-
if (((_b2 = (_a2 = asset == null ? void 0 : asset.data) == null ? void 0 : _a2.static_renditions) == null ? void 0 : _b2.status) === "preparing") {
|
|
343
|
-
return true;
|
|
344
|
-
}
|
|
345
|
-
if (((_d2 = (_c2 = asset == null ? void 0 : asset.data) == null ? void 0 : _c2.static_renditions) == null ? void 0 : _d2.status) === "ready") {
|
|
346
|
-
return false;
|
|
347
|
-
}
|
|
348
|
-
return false;
|
|
349
|
-
}, [(_b = (_a = asset == null ? void 0 : asset.data) == null ? void 0 : _a.static_renditions) == null ? void 0 : _b.status]);
|
|
350
|
-
const videoSrc = useMemo(() => asset.playbackId && getVideoSrc({
|
|
351
|
-
client,
|
|
352
|
-
asset
|
|
353
|
-
}), [asset, client]);
|
|
354
|
-
const [error, setError] = useState(null);
|
|
355
|
-
const handleError = useCallback(event => setError(event.currentTarget.error), []);
|
|
356
|
-
const playRef = useRef(null);
|
|
357
|
-
const muteRef = useRef(null);
|
|
358
|
-
const video = useRef(null);
|
|
359
|
-
const getCurrentTime = useCallback(() => {
|
|
360
|
-
var _a2, _b2;
|
|
361
|
-
return (_b2 = (_a2 = video.current) == null ? void 0 : _a2.currentTime) != null ? _b2 : 0;
|
|
362
|
-
}, [video]);
|
|
363
|
-
const handleCancelUpload = useCancelUpload(asset, onChange);
|
|
364
|
-
useEffect(() => {
|
|
365
|
-
var _a2, _b2;
|
|
366
|
-
const style = document.createElement("style");
|
|
367
|
-
style.innerHTML = "button svg { vertical-align: middle; }";
|
|
368
|
-
if ((_a2 = playRef.current) == null ? void 0 : _a2.shadowRoot) {
|
|
369
|
-
playRef.current.shadowRoot.appendChild(style);
|
|
370
|
-
}
|
|
371
|
-
if ((_b2 = muteRef == null ? void 0 : muteRef.current) == null ? void 0 : _b2.shadowRoot) {
|
|
372
|
-
muteRef.current.shadowRoot.appendChild(style.cloneNode(true));
|
|
373
|
-
}
|
|
374
|
-
}, []);
|
|
375
|
-
useEffect(() => {
|
|
376
|
-
var _a2, _b2, _c2;
|
|
377
|
-
if ((asset == null ? void 0 : asset.status) === "errored") {
|
|
378
|
-
handleCancelUpload();
|
|
379
|
-
throw new Error((_c2 = (_b2 = (_a2 = asset.data) == null ? void 0 : _a2.errors) == null ? void 0 : _b2.messages) == null ? void 0 : _c2.join(" "));
|
|
380
|
-
}
|
|
381
|
-
}, [(_d = (_c = asset.data) == null ? void 0 : _c.errors) == null ? void 0 : _d.messages, asset == null ? void 0 : asset.status, handleCancelUpload]);
|
|
382
|
-
const signedToken = useMemo(() => {
|
|
383
|
-
try {
|
|
384
|
-
const url = new URL(videoSrc);
|
|
385
|
-
return url.searchParams.get("token");
|
|
386
|
-
} catch {
|
|
387
|
-
return false;
|
|
388
|
-
}
|
|
389
|
-
}, [videoSrc]);
|
|
390
|
-
if (error) {
|
|
391
|
-
throw error;
|
|
392
|
-
}
|
|
393
|
-
if (!asset || !asset.status) {
|
|
394
|
-
return null;
|
|
395
|
-
}
|
|
396
|
-
if (isLoading) {
|
|
397
|
-
return /* @__PURE__ */jsx(UploadProgress, {
|
|
398
|
-
progress: 100,
|
|
399
|
-
filename: asset == null ? void 0 : asset.filename,
|
|
400
|
-
text: isLoading !== true && isLoading || "Waiting for Mux to complete the file",
|
|
401
|
-
onCancel: readOnly ? void 0 : () => handleCancelUpload()
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
return /* @__PURE__ */jsxs(Fragment, {
|
|
405
|
-
children: [/* @__PURE__ */jsxs(VideoContainer, {
|
|
406
|
-
shadow: 1,
|
|
407
|
-
tone: "transparent",
|
|
408
|
-
scheme: "dark",
|
|
409
|
-
children: [/* @__PURE__ */jsxs(MediaController, {
|
|
410
|
-
children: [/* @__PURE__ */jsx(MuxVideo, {
|
|
411
|
-
playsInline: true,
|
|
412
|
-
ref: video,
|
|
413
|
-
playbackId: "".concat(asset.playbackId).concat(signedToken ? "?token=".concat(signedToken) : ""),
|
|
414
|
-
onError: handleError,
|
|
415
|
-
slot: "media",
|
|
416
|
-
preload: "metadata",
|
|
417
|
-
crossOrigin: "anonymous",
|
|
418
|
-
metadata: {
|
|
419
|
-
player_name: "Sanity Admin Dashboard",
|
|
420
|
-
player_version: pluginPkg.version,
|
|
421
|
-
page_type: "Preview Player"
|
|
422
|
-
},
|
|
423
|
-
children: /* @__PURE__ */jsx(ThumbnailsMetadataTrack, {
|
|
424
|
-
asset
|
|
425
|
-
})
|
|
426
|
-
}), /* @__PURE__ */jsx(PosterImage, {
|
|
427
|
-
asset
|
|
428
|
-
}), /* @__PURE__ */jsx(MediaLoadingIndicator, {
|
|
429
|
-
slot: "centered-chrome",
|
|
430
|
-
noAutoHide: true
|
|
431
|
-
}), /* @__PURE__ */jsx(StyledCenterControls, {
|
|
432
|
-
slot: "centered-chrome",
|
|
433
|
-
children: /* @__PURE__ */jsx(MediaPlayButton, {})
|
|
434
|
-
}), buttons && /* @__PURE__ */jsx(TopControls, {
|
|
435
|
-
slot: "top-chrome",
|
|
436
|
-
children: buttons
|
|
437
|
-
}), /* @__PURE__ */jsxs(MediaControlBar, {
|
|
438
|
-
children: [/* @__PURE__ */jsx(MediaMuteButton, {}), /* @__PURE__ */jsx(MediaTimeDisplay, {}), /* @__PURE__ */jsx(MediaTimeRange, {}), /* @__PURE__ */jsx(MediaDurationDisplay, {}), /* @__PURE__ */jsx(MediaFullscreenButton, {})]
|
|
439
|
-
})]
|
|
440
|
-
}), isPreparingStaticRenditions && /* @__PURE__ */jsx(Card, {
|
|
441
|
-
padding: 2,
|
|
442
|
-
radius: 1,
|
|
443
|
-
style: {
|
|
444
|
-
background: "var(--card-fg-color)",
|
|
445
|
-
position: "absolute",
|
|
446
|
-
top: "0.5em",
|
|
447
|
-
left: "0.5em"
|
|
448
|
-
},
|
|
449
|
-
children: /* @__PURE__ */jsx(Text, {
|
|
450
|
-
size: 1,
|
|
451
|
-
style: {
|
|
452
|
-
color: "var(--card-bg-color)"
|
|
453
|
-
},
|
|
454
|
-
children: "MUX is preparing static renditions, please stand by"
|
|
455
|
-
})
|
|
456
|
-
})]
|
|
457
|
-
}), dialogState === "edit-thumbnail" && /* @__PURE__ */jsx(EditThumbnailDialog, {
|
|
458
|
-
asset,
|
|
459
|
-
getCurrentTime,
|
|
460
|
-
setDialogState
|
|
461
|
-
})]
|
|
462
|
-
});
|
|
463
|
-
};
|
|
464
|
-
export { MuxVideoOld as default };
|
|
465
|
-
//# sourceMappingURL=Player-bfdb96f6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Player-bfdb96f6.js","sources":["../../src/hooks/useCancelUpload.ts","../../src/util/getVideoSrc.ts","../../src/components/EditThumbnailDialog.tsx","../../src/util/getStoryboardSrc.ts","../../src/components/Player.styled.tsx","../../src/components/Player.tsx"],"sourcesContent":["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","import type {SanityClient} from 'sanity'\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 {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 type {SanityClient} from 'sanity'\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","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 MuxVideo from '@mux/mux-video-react'\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 pluginPkg from './../../package.json'\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 MuxVideoOld = ({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\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 const signedToken = useMemo(() => {\n try {\n const url = new URL(videoSrc!)\n return url.searchParams.get('token')\n } catch {\n return false\n }\n }, [videoSrc])\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 <MuxVideo\n playsInline\n ref={video}\n playbackId={`${asset.playbackId}${signedToken ? `?token=${signedToken}` : ''}`}\n onError={handleError}\n slot=\"media\"\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n metadata={{\n player_name: 'Sanity Admin Dashboard',\n player_version: pluginPkg.version,\n page_type: 'Preview Player',\n }}\n >\n <ThumbnailsMetadataTrack asset={asset} />\n </MuxVideo>\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 MuxVideoOld\n"],"names":["useCancelUpload","asset","onChange","client","useClient","useCallback","PatchEvent","from","unset","assetId","deleteAsset","_id","delete","getVideoSrc","_ref","playbackId","getPlaybackId","searchParams","URLSearchParams","getPlaybackPolicy","token","generateJwt","set","concat","EditThumbnailDialog","_ref2","getCurrentTime","setDialogState","dialogId","useId","nextTime","useMemo","assetWithNewThumbnail","thumbTime","saving","setSaving","useState","error","setError","handleSave","patch","commit","returnDocuments","then","catch","finally","width","getDevicePixelRatio","maxDpr","jsx","Dialog","id","header","onClose","footer","Stack","padding","children","Button","mode","tone","loading","onClick","text","jsxs","space","Text","size","weight","VideoThumbnail","getStoryboardSrc","_ref3","VideoContainer","styled","Card","_templateObject","_taggedTemplateLiteral","StyledCenterControls","div","_templateObject2","TopControls","MediaControlBar","_templateObject3","PosterImage","_ref4","ref","useRef","src","getPosterSrc","height","useEffect","_a","current","style","document","createElement","innerHTML","shadowRoot","appendChild","MediaPosterImage","slot","ThumbnailsMetadataTrack","_ref5","label","default","kind","MuxVideoOld","_ref6","buttons","readOnly","dialogState","_b","_c","_d","isLoading","status","isPreparingStaticRenditions","data","static_renditions","videoSrc","handleError","event","currentTarget","playRef","muteRef","video","currentTime","handleCancelUpload","cloneNode","Error","errors","messages","join","signedToken","url","URL","get","UploadProgress","progress","filename","onCancel","Fragment","shadow","scheme","MediaController","MuxVideo","playsInline","onError","preload","crossOrigin","metadata","player_name","player_version","pluginPkg","version","page_type","MediaLoadingIndicator","noAutoHide","MediaPlayButton","MediaMuteButton","MediaTimeDisplay","MediaTimeRange","MediaDurationDisplay","MediaFullscreenButton","radius","background","position","top","left","color"],"mappings":"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"}
|