sanity-plugin-mux-input 2.0.16 → 2.1.0
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/lib/_chunks/Player-d8f163ed.cjs +474 -0
- package/lib/_chunks/Player-d8f163ed.cjs.map +1 -0
- package/lib/_chunks/Player-fb9712c0.js +465 -0
- package/lib/_chunks/Player-fb9712c0.js.map +1 -0
- package/lib/_chunks/index-0656ede8.js +3229 -0
- package/lib/_chunks/index-0656ede8.js.map +1 -0
- package/lib/_chunks/index-9cd542f1.cjs +3271 -0
- package/lib/_chunks/index-9cd542f1.cjs.map +1 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +97 -0
- package/lib/index.js +1 -1
- package/package.json +16 -17
- package/src/components/Input.tsx +34 -29
- package/src/components/__legacy__Uploader.tsx +7 -2
- package/src/index.ts +8 -49
- package/src/plugin.tsx +31 -0
- package/src/schema.tsx +42 -0
- package/lib/_chunks/Input-509c8fa5.cjs +0 -189
- package/lib/_chunks/Input-509c8fa5.cjs.map +0 -1
- package/lib/_chunks/Input-9ddeac65.js +0 -189
- package/lib/_chunks/Input-9ddeac65.js.map +0 -1
- package/lib/_chunks/Preview-04fe7cde.js +0 -26
- package/lib/_chunks/Preview-04fe7cde.js.map +0 -1
- package/lib/_chunks/Preview-442a88cd.cjs +0 -28
- package/lib/_chunks/Preview-442a88cd.cjs.map +0 -1
- package/lib/_chunks/VideoSource.styled-45ab4b64.js +0 -318
- package/lib/_chunks/VideoSource.styled-45ab4b64.js.map +0 -1
- package/lib/_chunks/VideoSource.styled-cb41adac.cjs +0 -336
- package/lib/_chunks/VideoSource.styled-cb41adac.cjs.map +0 -1
- package/lib/_chunks/index-d360f7ae.cjs +0 -265
- package/lib/_chunks/index-d360f7ae.cjs.map +0 -1
- package/lib/_chunks/index-f8b48f62.js +0 -248
- package/lib/_chunks/index-f8b48f62.js.map +0 -1
- package/src/components/FormInput.tsx +0 -26
- package/src/components/FormPreview.tsx +0 -19
- package/src/components/Preview.tsx +0 -33
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { SanityDefaultPreview } from 'sanity';
|
|
3
|
-
import { useAssetDocumentValues, VideoThumbnail } from './VideoSource.styled-45ab4b64.js';
|
|
4
|
-
const MuxVideoPreview = _ref => {
|
|
5
|
-
let {
|
|
6
|
-
value
|
|
7
|
-
} = _ref;
|
|
8
|
-
const assetDocumentValues = useAssetDocumentValues(value == null ? void 0 : value.asset);
|
|
9
|
-
if (assetDocumentValues.value) {
|
|
10
|
-
return /* @__PURE__ */jsx(VideoThumbnail, {
|
|
11
|
-
asset: assetDocumentValues.value,
|
|
12
|
-
width: 640
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
const {
|
|
16
|
-
filename,
|
|
17
|
-
playbackId,
|
|
18
|
-
status
|
|
19
|
-
} = value != null ? value : {};
|
|
20
|
-
return /* @__PURE__ */jsx(SanityDefaultPreview, {
|
|
21
|
-
title: filename || playbackId || "",
|
|
22
|
-
subtitle: status ? "status: ".concat(status) : null
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
export { MuxVideoPreview as default };
|
|
26
|
-
//# sourceMappingURL=Preview-04fe7cde.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Preview-04fe7cde.js","sources":["../../src/components/Preview.tsx"],"sourcesContent":["import React from 'react'\nimport {SanityDefaultPreview} from 'sanity'\n\nimport {useAssetDocumentValues} from '../hooks/useAssetDocumentValues'\nimport {VideoThumbnail} from './VideoSource.styled'\n\nexport interface MuxVideoPreviewProps {\n value: {\n asset: {\n _type: 'reference'\n _ref: string\n }\n }\n}\nconst MuxVideoPreview = ({value}: MuxVideoPreviewProps) => {\n const assetDocumentValues = useAssetDocumentValues(value?.asset!)\n\n if (assetDocumentValues.value) {\n return <VideoThumbnail asset={assetDocumentValues.value} width={640} />\n }\n\n // @ts-expect-error\n const {filename, playbackId, status} = value ?? {}\n\n return (\n <SanityDefaultPreview\n title={filename || playbackId || ''}\n subtitle={status ? `status: ${status}` : null}\n />\n )\n}\n\nexport default MuxVideoPreview\n"],"names":["MuxVideoPreview","_ref","value","assetDocumentValues","useAssetDocumentValues","asset","VideoThumbnail","width","filename","playbackId","status","jsx","SanityDefaultPreview","title","subtitle","concat"],"mappings":";;;AAcA,MAAMA,eAAkB,GAAAC,IAAA,IAAmC;EAAA,IAAlC;IAACC;GAAiC,GAAAD,IAAA;EACnD,MAAAE,mBAAA,GAAsBC,sBAAuB,CAAAF,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAOG,KAAM,CAAA;EAEhE,IAAIF,oBAAoBD,KAAO,EAAA;IAC7B,0BAAQI,cAAe,EAAA;MAAAD,KAAA,EAAOF,mBAAoB,CAAAD,KAAA;MAAOK,OAAO;IAAK,CAAA,CAAA;EACvE;EAGA,MAAM;IAACC,QAAU;IAAAC,UAAA;IAAYC;EAAM,CAAA,GAAIR,wBAAS,EAAC;EAG/C,sBAAAS,GAAA,CAACC,oBAAA,EAAA;IACCC,KAAA,EAAOL,YAAYC,UAAc,IAAA,EAAA;IACjCK,QAAA,EAAUJ,MAAS,cAAAK,MAAA,CAAWL,MAAW,IAAA;EAAA,CAAA,CAC3C;AAEJ,CAAA;"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var sanity = require('sanity');
|
|
5
|
-
var VideoSource_styled = require('./VideoSource.styled-cb41adac.cjs');
|
|
6
|
-
const MuxVideoPreview = _ref => {
|
|
7
|
-
let {
|
|
8
|
-
value
|
|
9
|
-
} = _ref;
|
|
10
|
-
const assetDocumentValues = VideoSource_styled.useAssetDocumentValues(value == null ? void 0 : value.asset);
|
|
11
|
-
if (assetDocumentValues.value) {
|
|
12
|
-
return /* @__PURE__ */jsxRuntime.jsx(VideoSource_styled.VideoThumbnail, {
|
|
13
|
-
asset: assetDocumentValues.value,
|
|
14
|
-
width: 640
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
const {
|
|
18
|
-
filename,
|
|
19
|
-
playbackId,
|
|
20
|
-
status
|
|
21
|
-
} = value != null ? value : {};
|
|
22
|
-
return /* @__PURE__ */jsxRuntime.jsx(sanity.SanityDefaultPreview, {
|
|
23
|
-
title: filename || playbackId || "",
|
|
24
|
-
subtitle: status ? "status: ".concat(status) : null
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
exports.default = MuxVideoPreview;
|
|
28
|
-
//# sourceMappingURL=Preview-442a88cd.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Preview-442a88cd.cjs","sources":["../../src/components/Preview.tsx"],"sourcesContent":["import React from 'react'\nimport {SanityDefaultPreview} from 'sanity'\n\nimport {useAssetDocumentValues} from '../hooks/useAssetDocumentValues'\nimport {VideoThumbnail} from './VideoSource.styled'\n\nexport interface MuxVideoPreviewProps {\n value: {\n asset: {\n _type: 'reference'\n _ref: string\n }\n }\n}\nconst MuxVideoPreview = ({value}: MuxVideoPreviewProps) => {\n const assetDocumentValues = useAssetDocumentValues(value?.asset!)\n\n if (assetDocumentValues.value) {\n return <VideoThumbnail asset={assetDocumentValues.value} width={640} />\n }\n\n // @ts-expect-error\n const {filename, playbackId, status} = value ?? {}\n\n return (\n <SanityDefaultPreview\n title={filename || playbackId || ''}\n subtitle={status ? `status: ${status}` : null}\n />\n )\n}\n\nexport default MuxVideoPreview\n"],"names":["MuxVideoPreview","_ref","value","assetDocumentValues","useAssetDocumentValues","asset","VideoThumbnail","width","filename","playbackId","status","jsx","SanityDefaultPreview","title","subtitle","concat"],"mappings":";;;;;AAcA,MAAMA,eAAkB,GAAAC,IAAA,IAAmC;EAAA,IAAlC;IAACC;GAAiC,GAAAD,IAAA;EACnD,MAAAE,mBAAA,GAAsBC,kBAAuB,CAAAA,sBAAA,CAAAF,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAOG,KAAM,CAAA;EAEhE,IAAIF,oBAAoBD,KAAO,EAAA;IAC7B,qCAAQI,kBAAe,CAAAA,cAAA,EAAA;MAAAD,KAAA,EAAOF,mBAAoB,CAAAD,KAAA;MAAOK,OAAO;IAAK,CAAA,CAAA;EACvE;EAGA,MAAM;IAACC,QAAU;IAAAC,UAAA;IAAYC;EAAM,CAAA,GAAIR,wBAAS,EAAC;EAG/C,sBAAAS,UAAA,CAAAA,GAAA,CAACC,MAAA,CAAAA,oBAAA,EAAA;IACCC,KAAA,EAAOL,YAAYC,UAAc,IAAA,EAAA;IACjCK,QAAA,EAAUJ,MAAS,cAAAK,MAAA,CAAWL,MAAW,IAAA;EAAA,CAAA,CAC3C;AAEJ,CAAA;"}
|
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
2
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
|
-
import { useDocumentValues, isReference, useClient as useClient$1, MediaPreview } from 'sanity';
|
|
4
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
-
import { UnknownIcon, LockIcon } from '@sanity/icons';
|
|
6
|
-
import { Card, Box, Spinner, Grid, Inline } from '@sanity/ui';
|
|
7
|
-
import { memo, useMemo, Suspense } from 'react';
|
|
8
|
-
import styled from 'styled-components';
|
|
9
|
-
import { suspend } from 'suspend-react';
|
|
10
|
-
import { useErrorBoundary } from 'use-error-boundary';
|
|
11
|
-
import { cacheNs } from './index-f8b48f62.js';
|
|
12
|
-
const path = ["assetId", "data", "playbackId", "status", "thumbTime", "filename"];
|
|
13
|
-
const useAssetDocumentValues = asset => useDocumentValues(isReference(asset) ? asset._ref : "", path);
|
|
14
|
-
function useClient() {
|
|
15
|
-
return useClient$1({
|
|
16
|
-
apiVersion: "2022-09-14"
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
const _id = "secrets.mux";
|
|
20
|
-
function readSecrets(client) {
|
|
21
|
-
const {
|
|
22
|
-
projectId,
|
|
23
|
-
dataset
|
|
24
|
-
} = client.config();
|
|
25
|
-
return suspend(async () => {
|
|
26
|
-
const data = await client.fetch( /* groq */"*[_id == $_id][0]{\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate\n }", {
|
|
27
|
-
_id
|
|
28
|
-
});
|
|
29
|
-
return {
|
|
30
|
-
token: (data == null ? void 0 : data.token) || null,
|
|
31
|
-
secretKey: (data == null ? void 0 : data.secretKey) || null,
|
|
32
|
-
enableSignedUrls: Boolean(data == null ? void 0 : data.enableSignedUrls) || false,
|
|
33
|
-
signingKeyId: (data == null ? void 0 : data.signingKeyId) || null,
|
|
34
|
-
signingKeyPrivate: (data == null ? void 0 : data.signingKeyPrivate) || null
|
|
35
|
-
};
|
|
36
|
-
}, [cacheNs, _id, projectId, dataset]);
|
|
37
|
-
}
|
|
38
|
-
function generateJwt(client, playbackId, aud, payload) {
|
|
39
|
-
const {
|
|
40
|
-
signingKeyId,
|
|
41
|
-
signingKeyPrivate
|
|
42
|
-
} = readSecrets(client);
|
|
43
|
-
if (!signingKeyId) {
|
|
44
|
-
throw new TypeError("Missing signingKeyId");
|
|
45
|
-
}
|
|
46
|
-
if (!signingKeyPrivate) {
|
|
47
|
-
throw new TypeError("Missing signingKeyPrivate");
|
|
48
|
-
}
|
|
49
|
-
const {
|
|
50
|
-
default: sign
|
|
51
|
-
} = suspend(() => import('jsonwebtoken-esm/sign'), ["jsonwebtoken-esm/sign"]);
|
|
52
|
-
return sign(payload ? JSON.parse(JSON.stringify(payload, (_, v) => v != null ? v : void 0)) : {}, atob(signingKeyPrivate), {
|
|
53
|
-
algorithm: "RS256",
|
|
54
|
-
keyid: signingKeyId,
|
|
55
|
-
audience: aud,
|
|
56
|
-
subject: playbackId,
|
|
57
|
-
noTimestamp: true,
|
|
58
|
-
expiresIn: "12h"
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function getPlaybackId(asset) {
|
|
62
|
-
if (!(asset == null ? void 0 : asset.playbackId)) {
|
|
63
|
-
console.error("Asset is missing a playbackId", {
|
|
64
|
-
asset
|
|
65
|
-
});
|
|
66
|
-
throw new TypeError("Missing playbackId");
|
|
67
|
-
}
|
|
68
|
-
return asset.playbackId;
|
|
69
|
-
}
|
|
70
|
-
function getPlaybackPolicy(asset) {
|
|
71
|
-
var _a, _b, _c, _d;
|
|
72
|
-
return (_d = (_c = (_b = (_a = asset.data) == null ? void 0 : _a.playback_ids) == null ? void 0 : _b[0]) == null ? void 0 : _c.policy) != null ? _d : "public";
|
|
73
|
-
}
|
|
74
|
-
function getAnimatedPosterSrc(_ref) {
|
|
75
|
-
let {
|
|
76
|
-
asset,
|
|
77
|
-
client,
|
|
78
|
-
height,
|
|
79
|
-
width,
|
|
80
|
-
start = asset.thumbTime ? Math.max(0, asset.thumbTime - 2.5) : 0,
|
|
81
|
-
end = start + 5,
|
|
82
|
-
fps = 15
|
|
83
|
-
} = _ref;
|
|
84
|
-
const params = {
|
|
85
|
-
height,
|
|
86
|
-
width,
|
|
87
|
-
start,
|
|
88
|
-
end,
|
|
89
|
-
fps
|
|
90
|
-
};
|
|
91
|
-
const playbackId = getPlaybackId(asset);
|
|
92
|
-
let searchParams = new URLSearchParams(JSON.parse(JSON.stringify(params, (_, v) => v != null ? v : void 0)));
|
|
93
|
-
if (getPlaybackPolicy(asset) === "signed") {
|
|
94
|
-
const token = generateJwt(client, playbackId, "g", params);
|
|
95
|
-
searchParams = new URLSearchParams({
|
|
96
|
-
token
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return "https://image.mux.com/".concat(playbackId, "/animated.gif?").concat(searchParams);
|
|
100
|
-
}
|
|
101
|
-
function getPosterSrc(_ref2) {
|
|
102
|
-
let {
|
|
103
|
-
asset,
|
|
104
|
-
client,
|
|
105
|
-
fit_mode,
|
|
106
|
-
height,
|
|
107
|
-
time = asset.thumbTime,
|
|
108
|
-
width
|
|
109
|
-
} = _ref2;
|
|
110
|
-
const params = {
|
|
111
|
-
fit_mode,
|
|
112
|
-
height,
|
|
113
|
-
time,
|
|
114
|
-
width
|
|
115
|
-
};
|
|
116
|
-
const playbackId = getPlaybackId(asset);
|
|
117
|
-
let searchParams = new URLSearchParams(JSON.parse(JSON.stringify(params, (_, v) => v != null ? v : void 0)));
|
|
118
|
-
if (getPlaybackPolicy(asset) === "signed") {
|
|
119
|
-
const token = generateJwt(client, playbackId, "t", params);
|
|
120
|
-
searchParams = new URLSearchParams({
|
|
121
|
-
token
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
return "https://image.mux.com/".concat(playbackId, "/thumbnail.png?").concat(searchParams);
|
|
125
|
-
}
|
|
126
|
-
const mediaDimensions = {
|
|
127
|
-
aspect: 16 / 9
|
|
128
|
-
};
|
|
129
|
-
const ImageLoader = memo(function ImageLoader2(_ref3) {
|
|
130
|
-
let {
|
|
131
|
-
alt,
|
|
132
|
-
src,
|
|
133
|
-
height,
|
|
134
|
-
width,
|
|
135
|
-
aspectRatio
|
|
136
|
-
} = _ref3;
|
|
137
|
-
suspend(async () => {
|
|
138
|
-
const img = new Image(width, height);
|
|
139
|
-
img.decoding = "async";
|
|
140
|
-
img.src = src;
|
|
141
|
-
await img.decode();
|
|
142
|
-
}, ["sanity-plugin-mux-input", "image", src]);
|
|
143
|
-
return /* @__PURE__ */jsx("img", {
|
|
144
|
-
alt,
|
|
145
|
-
src,
|
|
146
|
-
height,
|
|
147
|
-
width,
|
|
148
|
-
style: {
|
|
149
|
-
aspectRatio
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
const VideoMediaPreview = styled(MediaPreview)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n img {\n object-fit: cover;\n }\n"])));
|
|
154
|
-
const VideoMediaPreviewSignedSubtitle = _ref4 => {
|
|
155
|
-
let {
|
|
156
|
-
solo
|
|
157
|
-
} = _ref4;
|
|
158
|
-
return /* @__PURE__ */jsxs(Inline, {
|
|
159
|
-
space: 1,
|
|
160
|
-
style: {
|
|
161
|
-
marginTop: solo ? "-1.35em" : void 0,
|
|
162
|
-
marginBottom: solo ? void 0 : "0.35rem"
|
|
163
|
-
},
|
|
164
|
-
children: [/* @__PURE__ */jsx(LockIcon, {}), "Signed playback policy"]
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
const PosterImage = _ref5 => {
|
|
168
|
-
let {
|
|
169
|
-
asset,
|
|
170
|
-
height,
|
|
171
|
-
width,
|
|
172
|
-
showTip
|
|
173
|
-
} = _ref5;
|
|
174
|
-
const client = useClient();
|
|
175
|
-
const src = getPosterSrc({
|
|
176
|
-
asset,
|
|
177
|
-
client,
|
|
178
|
-
height,
|
|
179
|
-
width,
|
|
180
|
-
fit_mode: "smartcrop"
|
|
181
|
-
});
|
|
182
|
-
const subtitle = useMemo(() => showTip && getPlaybackPolicy(asset) === "signed" ? /* @__PURE__ */jsx(VideoMediaPreviewSignedSubtitle, {
|
|
183
|
-
solo: true
|
|
184
|
-
}) : void 0, [asset, showTip]);
|
|
185
|
-
return /* @__PURE__ */jsx(VideoMediaPreview, {
|
|
186
|
-
mediaDimensions,
|
|
187
|
-
subtitle,
|
|
188
|
-
title: /* @__PURE__ */jsx(Fragment, {
|
|
189
|
-
children: null
|
|
190
|
-
}),
|
|
191
|
-
media: /* @__PURE__ */jsx(ImageLoader, {
|
|
192
|
-
alt: "",
|
|
193
|
-
src,
|
|
194
|
-
height,
|
|
195
|
-
width
|
|
196
|
-
})
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
const VideoThumbnail = memo(function VideoThumbnail2(_ref6) {
|
|
200
|
-
let {
|
|
201
|
-
asset,
|
|
202
|
-
width,
|
|
203
|
-
showTip
|
|
204
|
-
} = _ref6;
|
|
205
|
-
const {
|
|
206
|
-
ErrorBoundary,
|
|
207
|
-
didCatch,
|
|
208
|
-
error
|
|
209
|
-
} = useErrorBoundary();
|
|
210
|
-
const height = Math.round(width * 9 / 16);
|
|
211
|
-
const subtitle = useMemo(() => showTip && getPlaybackPolicy(asset) === "signed" ? /* @__PURE__ */jsx(VideoMediaPreviewSignedSubtitle, {}) : void 0, [showTip, asset]);
|
|
212
|
-
if (didCatch) {
|
|
213
|
-
return /* @__PURE__ */jsx(VideoMediaPreview, {
|
|
214
|
-
subtitle: error.message,
|
|
215
|
-
mediaDimensions,
|
|
216
|
-
title: "Error when loading thumbnail",
|
|
217
|
-
media: /* @__PURE__ */jsx(Card, {
|
|
218
|
-
radius: 2,
|
|
219
|
-
height: "fill",
|
|
220
|
-
style: {
|
|
221
|
-
position: "relative",
|
|
222
|
-
width: "100%"
|
|
223
|
-
},
|
|
224
|
-
children: /* @__PURE__ */jsx(Box, {
|
|
225
|
-
style: {
|
|
226
|
-
display: "flex",
|
|
227
|
-
justifyContent: "center",
|
|
228
|
-
alignItems: "center",
|
|
229
|
-
position: "absolute",
|
|
230
|
-
top: 0,
|
|
231
|
-
left: 0,
|
|
232
|
-
right: 0,
|
|
233
|
-
bottom: 0
|
|
234
|
-
},
|
|
235
|
-
children: /* @__PURE__ */jsx(UnknownIcon, {})
|
|
236
|
-
})
|
|
237
|
-
})
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
return /* @__PURE__ */jsx(ErrorBoundary, {
|
|
241
|
-
children: /* @__PURE__ */jsx(Suspense, {
|
|
242
|
-
fallback: /* @__PURE__ */jsx(VideoMediaPreview, {
|
|
243
|
-
isPlaceholder: true,
|
|
244
|
-
title: "Loading thumbnail...",
|
|
245
|
-
subtitle,
|
|
246
|
-
mediaDimensions
|
|
247
|
-
}),
|
|
248
|
-
children: /* @__PURE__ */jsx(PosterImage, {
|
|
249
|
-
showTip,
|
|
250
|
-
asset,
|
|
251
|
-
height,
|
|
252
|
-
width
|
|
253
|
-
})
|
|
254
|
-
})
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
const AnimatedVideoMediaPreview = styled(MediaPreview)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n img {\n object-fit: contain;\n }\n"])));
|
|
258
|
-
const AnimatedPosterImage = _ref7 => {
|
|
259
|
-
let {
|
|
260
|
-
asset,
|
|
261
|
-
width
|
|
262
|
-
} = _ref7;
|
|
263
|
-
const client = useClient();
|
|
264
|
-
const src = getAnimatedPosterSrc({
|
|
265
|
-
asset,
|
|
266
|
-
client,
|
|
267
|
-
width
|
|
268
|
-
});
|
|
269
|
-
return /* @__PURE__ */jsx(AnimatedVideoMediaPreview, {
|
|
270
|
-
withBorder: false,
|
|
271
|
-
mediaDimensions,
|
|
272
|
-
media: /* @__PURE__ */jsx(ImageLoader, {
|
|
273
|
-
alt: "",
|
|
274
|
-
src,
|
|
275
|
-
width,
|
|
276
|
-
aspectRatio: "16:9"
|
|
277
|
-
})
|
|
278
|
-
});
|
|
279
|
-
};
|
|
280
|
-
const AnimatedVideoThumbnail = memo(function AnimatedVideoThumbnail2(_ref8) {
|
|
281
|
-
let {
|
|
282
|
-
asset,
|
|
283
|
-
width
|
|
284
|
-
} = _ref8;
|
|
285
|
-
const {
|
|
286
|
-
ErrorBoundary,
|
|
287
|
-
didCatch
|
|
288
|
-
} = useErrorBoundary();
|
|
289
|
-
if (didCatch) {
|
|
290
|
-
return null;
|
|
291
|
-
}
|
|
292
|
-
return /* @__PURE__ */jsx(ErrorBoundary, {
|
|
293
|
-
children: /* @__PURE__ */jsx(Suspense, {
|
|
294
|
-
fallback: /* @__PURE__ */jsx(FancyBackdrop, {
|
|
295
|
-
children: /* @__PURE__ */jsx(VideoMediaPreview, {
|
|
296
|
-
mediaDimensions,
|
|
297
|
-
withBorder: false,
|
|
298
|
-
media: /* @__PURE__ */jsx(Spinner, {
|
|
299
|
-
muted: true
|
|
300
|
-
})
|
|
301
|
-
})
|
|
302
|
-
}),
|
|
303
|
-
children: /* @__PURE__ */jsx(Card, {
|
|
304
|
-
height: "fill",
|
|
305
|
-
tone: "transparent",
|
|
306
|
-
children: /* @__PURE__ */jsx(AnimatedPosterImage, {
|
|
307
|
-
asset,
|
|
308
|
-
width
|
|
309
|
-
})
|
|
310
|
-
})
|
|
311
|
-
})
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
const FancyBackdrop = styled(Box)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n backdrop-filter: blur(8px) brightness(0.5) saturate(2);\n mix-blend-mode: color-dodge;\n"])));
|
|
315
|
-
const ThumbGrid = styled(Grid)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n"])));
|
|
316
|
-
const CardLoadMore = styled(Card)(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n border-top: 1px solid var(--card-border-color);\n position: sticky;\n bottom: 0;\n z-index: 200;\n"])));
|
|
317
|
-
export { AnimatedVideoThumbnail, CardLoadMore, ThumbGrid, VideoThumbnail, _id, generateJwt, getPlaybackId, getPlaybackPolicy, getPosterSrc, useAssetDocumentValues, useClient };
|
|
318
|
-
//# sourceMappingURL=VideoSource.styled-45ab4b64.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoSource.styled-45ab4b64.js","sources":["../../src/hooks/useAssetDocumentValues.ts","../../src/hooks/useClient.ts","../../src/util/readSecrets.ts","../../src/util/generateJwt.ts","../../src/util/getPlaybackId.ts","../../src/util/getPlaybackPolicy.ts","../../src/util/getAnimatedPosterSrc.ts","../../src/util/getPosterSrc.ts","../../src/components/VideoSource.styled.tsx"],"sourcesContent":["import {isReference} from 'sanity'\nimport {useDocumentValues} from 'sanity'\n\nimport type {Reference, VideoAssetDocument} from '../util/types'\n\nconst path = ['assetId', 'data', 'playbackId', 'status', 'thumbTime', 'filename']\nexport const useAssetDocumentValues = (asset: Reference | null | undefined) =>\n useDocumentValues<VideoAssetDocument | null | undefined>(\n isReference(asset) ? asset._ref! : '',\n path\n )\n","// As it's required to specify the API Version this custom hook ensures it's all using the same version\nimport {useClient as useSanityClient} from 'sanity'\n\nexport function useClient() {\n return useSanityClient({apiVersion: '2022-09-14'})\n}\n","// Utils with a readName prefix are suspendable and should only be called in the render body\n// Not inside event callbacks or a useEffect.\n// They may be called dynamically, unlike useEffect\n\n// @TODO rename to readSigningPair\n\nimport type {SanityClient} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {cacheNs} from '../util/constants'\nimport {type Secrets} from '../util/types'\n\nexport const _id = 'secrets.mux' as const\n\nexport function readSecrets(client: SanityClient): Secrets {\n const {projectId, dataset} = client.config()\n return suspend(async () => {\n const data = await client.fetch(\n /* groq */ `*[_id == $_id][0]{\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate\n }`,\n {_id}\n )\n return {\n token: data?.token || null,\n secretKey: data?.secretKey || null,\n enableSignedUrls: Boolean(data?.enableSignedUrls) || false,\n signingKeyId: data?.signingKeyId || null,\n signingKeyPrivate: data?.signingKeyPrivate || null,\n }\n }, [cacheNs, _id, projectId, dataset])\n}\n","import type {SanityClient} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {readSecrets} from './readSecrets'\nimport type {AnimatedThumbnailOptions, ThumbnailOptions} from './types'\n\nexport type Audience = 'g' | 's' | 't' | 'v'\n\nexport type Payload<T extends Audience> = T extends 'g'\n ? AnimatedThumbnailOptions\n : T extends 's'\n ? never\n : T extends 't'\n ? ThumbnailOptions\n : T extends 'v'\n ? never\n : never\n\nexport function generateJwt<T extends Audience>(\n client: SanityClient,\n playbackId: string,\n aud: T,\n payload?: Payload<T>\n): string {\n const {signingKeyId, signingKeyPrivate} = readSecrets(client)\n if (!signingKeyId) {\n throw new TypeError('Missing signingKeyId')\n }\n if (!signingKeyPrivate) {\n throw new TypeError('Missing signingKeyPrivate')\n }\n\n const {default: sign} = suspend(() => import('jsonwebtoken-esm/sign'), ['jsonwebtoken-esm/sign'])\n\n return sign(\n payload ? JSON.parse(JSON.stringify(payload, (_, v) => v ?? undefined)) : {},\n atob(signingKeyPrivate),\n {\n algorithm: 'RS256',\n keyid: signingKeyId,\n audience: aud,\n subject: playbackId,\n noTimestamp: true,\n expiresIn: '12h',\n }\n )\n}\n","import type {VideoAssetDocument} from './types'\n\nexport function getPlaybackId(asset: VideoAssetDocument): string {\n if (!asset?.playbackId) {\n console.error('Asset is missing a playbackId', {asset})\n throw new TypeError(`Missing playbackId`)\n }\n return asset.playbackId\n}\n","import type {PlaybackPolicy, VideoAssetDocument} from './types'\n\nexport function getPlaybackPolicy(asset: VideoAssetDocument): PlaybackPolicy {\n return asset.data?.playback_ids?.[0]?.policy ?? 'public'\n}\n","import type {SanityClient} from 'sanity'\n\nimport {generateJwt} from './generateJwt'\nimport {getPlaybackId} from './getPlaybackId'\nimport {getPlaybackPolicy} from './getPlaybackPolicy'\nimport type {AnimatedThumbnailOptions, MuxAnimatedThumbnailUrl, VideoAssetDocument} from './types'\n\nexport interface AnimatedPosterSrcOptions extends AnimatedThumbnailOptions {\n asset: VideoAssetDocument\n client: SanityClient\n}\n\nexport function getAnimatedPosterSrc({\n asset,\n client,\n height,\n width,\n start = asset.thumbTime ? Math.max(0, asset.thumbTime - 2.5) : 0,\n end = start + 5,\n fps = 15,\n}: AnimatedPosterSrcOptions): MuxAnimatedThumbnailUrl {\n const params = {height, width, start, end, fps}\n const playbackId = getPlaybackId(asset)\n\n let searchParams = new URLSearchParams(\n JSON.parse(JSON.stringify(params, (_, v) => v ?? undefined))\n )\n if (getPlaybackPolicy(asset) === 'signed') {\n const token = generateJwt(client, playbackId, 'g', params)\n searchParams = new URLSearchParams({token})\n }\n\n return `https://image.mux.com/${playbackId}/animated.gif?${searchParams}`\n}\n","import type {SanityClient} from 'sanity'\n\nimport {generateJwt} from './generateJwt'\nimport {getPlaybackId} from './getPlaybackId'\nimport {getPlaybackPolicy} from './getPlaybackPolicy'\nimport type {MuxThumbnailUrl, ThumbnailOptions, VideoAssetDocument} from './types'\n\nexport interface PosterSrcOptions extends ThumbnailOptions {\n asset: VideoAssetDocument\n client: SanityClient\n}\n\nexport function getPosterSrc({\n asset,\n client,\n fit_mode,\n height,\n time = asset.thumbTime,\n width,\n}: PosterSrcOptions): MuxThumbnailUrl {\n const params = {fit_mode, height, time, width}\n const playbackId = getPlaybackId(asset)\n\n let searchParams = new URLSearchParams(\n JSON.parse(JSON.stringify(params, (_, v) => v ?? undefined))\n )\n if (getPlaybackPolicy(asset) === 'signed') {\n const token = generateJwt(client, playbackId, 't', params)\n searchParams = new URLSearchParams({token})\n }\n\n return `https://image.mux.com/${playbackId}/thumbnail.png?${searchParams}`\n}\n","import {LockIcon, UnknownIcon} from '@sanity/icons'\nimport {Box, Card, Grid, Inline, Spinner} from '@sanity/ui'\nimport React, {memo, Suspense, useMemo} from 'react'\nimport {MediaPreview} from 'sanity'\nimport styled from 'styled-components'\nimport {suspend} from 'suspend-react'\nimport {useErrorBoundary} from 'use-error-boundary'\n\nimport {useClient} from '../hooks/useClient'\nimport {getAnimatedPosterSrc} from '../util/getAnimatedPosterSrc'\nimport {getPlaybackPolicy} from '../util/getPlaybackPolicy'\nimport {getPosterSrc} from '../util/getPosterSrc'\nimport type {VideoAssetDocument} from '../util/types'\n\nconst mediaDimensions = {aspect: 16 / 9}\n\ninterface ImageLoaderProps {\n alt: string\n src: string\n height?: number\n width: number\n aspectRatio?: string\n}\nconst ImageLoader = memo(function ImageLoader({\n alt,\n src,\n height,\n width,\n aspectRatio,\n}: ImageLoaderProps) {\n suspend(async () => {\n const img = new Image(width, height)\n img.decoding = 'async'\n img.src = src\n await img.decode()\n }, ['sanity-plugin-mux-input', 'image', src])\n\n return <img alt={alt} src={src} height={height} width={width} style={{aspectRatio}} />\n})\n\n// @TODO fix typings errors due to props.renderDefault\nconst VideoMediaPreview = styled<any>(MediaPreview)`\n img {\n object-fit: cover;\n }\n`\n\ninterface VideoMediaPreviewSignedSubtitleProps {\n solo?: boolean\n}\nconst VideoMediaPreviewSignedSubtitle = ({solo}: VideoMediaPreviewSignedSubtitleProps) => {\n return (\n <Inline\n space={1}\n style={{\n marginTop: solo ? '-1.35em' : undefined,\n marginBottom: solo ? undefined : '0.35rem',\n }}\n >\n <LockIcon />\n Signed playback policy\n </Inline>\n )\n}\n\ninterface PosterImageProps extends Omit<ImageLoaderProps, 'src' | 'alt'> {\n asset: VideoAssetDocument\n showTip?: boolean\n}\nconst PosterImage = ({asset, height, width, showTip}: PosterImageProps) => {\n const client = useClient()\n const src = getPosterSrc({\n asset,\n client,\n height,\n width,\n fit_mode: 'smartcrop',\n })\n const subtitle = useMemo(\n () =>\n showTip && getPlaybackPolicy(asset) === 'signed' ? (\n <VideoMediaPreviewSignedSubtitle solo />\n ) : undefined,\n [asset, showTip]\n )\n\n // eslint-disable-next-line no-warning-comments\n // @TODO support setting the alt text in the schema, like how we deal with images\n return (\n <VideoMediaPreview\n mediaDimensions={mediaDimensions}\n subtitle={subtitle}\n title={<>{null}</>}\n media={<ImageLoader alt=\"\" src={src} height={height} width={width} />}\n />\n )\n}\n\nexport interface VideoThumbnailProps extends Omit<PosterImageProps, 'height'> {\n width: number\n}\nexport const VideoThumbnail = memo(function VideoThumbnail({\n asset,\n width,\n showTip,\n}: VideoThumbnailProps) {\n const {ErrorBoundary, didCatch, error} = useErrorBoundary()\n const height = Math.round((width * 9) / 16)\n const subtitle = useMemo(\n () =>\n showTip && getPlaybackPolicy(asset) === 'signed' ? (\n <VideoMediaPreviewSignedSubtitle />\n ) : undefined,\n [showTip, asset]\n )\n\n if (didCatch) {\n return (\n <VideoMediaPreview\n subtitle={error.message}\n mediaDimensions={mediaDimensions}\n title=\"Error when loading thumbnail\"\n media={\n <Card radius={2} height=\"fill\" style={{position: 'relative', width: '100%'}}>\n <Box\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n >\n <UnknownIcon />\n </Box>\n </Card>\n }\n />\n )\n }\n\n return (\n <ErrorBoundary>\n <Suspense\n fallback={\n <VideoMediaPreview\n isPlaceholder\n title=\"Loading thumbnail...\"\n subtitle={subtitle}\n mediaDimensions={mediaDimensions}\n />\n }\n >\n <PosterImage showTip={showTip} asset={asset} height={height} width={width} />\n </Suspense>\n </ErrorBoundary>\n )\n})\n\n// @TODO fix typings errors due to props.renderDefault\nconst AnimatedVideoMediaPreview = styled<any>(MediaPreview)`\n img {\n object-fit: contain;\n }\n`\n\ninterface AnimatedPosterImageProps extends Omit<ImageLoaderProps, 'src' | 'alt' | 'height'> {\n asset: VideoAssetDocument\n}\nconst AnimatedPosterImage = ({asset, width}: AnimatedPosterImageProps) => {\n const client = useClient()\n const src = getAnimatedPosterSrc({asset, client, width})\n\n // eslint-disable-next-line no-warning-comments\n // @TODO support setting the alt text in the schema, like how we deal with images\n return (\n <AnimatedVideoMediaPreview\n withBorder={false}\n mediaDimensions={mediaDimensions}\n media={<ImageLoader alt=\"\" src={src} width={width} aspectRatio=\"16:9\" />}\n />\n )\n}\n\nexport interface AnimatedVideoThumbnailProps extends Omit<PosterImageProps, 'height'> {\n width: number\n}\nexport const AnimatedVideoThumbnail = memo(function AnimatedVideoThumbnail({\n asset,\n width,\n}: AnimatedVideoThumbnailProps) {\n const {ErrorBoundary, didCatch} = useErrorBoundary()\n\n if (didCatch) {\n return null\n }\n\n return (\n <ErrorBoundary>\n <Suspense\n fallback={\n <FancyBackdrop>\n <VideoMediaPreview\n mediaDimensions={mediaDimensions}\n withBorder={false}\n media={<Spinner muted />}\n />\n </FancyBackdrop>\n }\n >\n <Card height=\"fill\" tone=\"transparent\">\n <AnimatedPosterImage asset={asset} width={width} />\n </Card>\n </Suspense>\n </ErrorBoundary>\n )\n})\nconst FancyBackdrop = styled(Box)`\n backdrop-filter: blur(8px) brightness(0.5) saturate(2);\n mix-blend-mode: color-dodge;\n`\n\nexport const ThumbGrid = styled(Grid)`\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n`\n\nexport const CardLoadMore = styled(Card)`\n border-top: 1px solid var(--card-border-color);\n position: sticky;\n bottom: 0;\n z-index: 200;\n`\n"],"names":["path","useAssetDocumentValues","asset","useDocumentValues","isReference","_ref","useClient","useSanityClient","apiVersion","_id","readSecrets","client","projectId","dataset","config","suspend","data","fetch","token","secretKey","enableSignedUrls","Boolean","signingKeyId","signingKeyPrivate","cacheNs","generateJwt","playbackId","aud","payload","TypeError","default","sign","JSON","parse","stringify","_","v","atob","algorithm","keyid","audience","subject","noTimestamp","expiresIn","getPlaybackId","console","error","getPlaybackPolicy","_a","_b","_c","_d","playback_ids","policy","getAnimatedPosterSrc","height","width","start","thumbTime","Math","max","end","fps","params","searchParams","URLSearchParams","concat","getPosterSrc","_ref2","fit_mode","time","mediaDimensions","aspect","ImageLoader","memo","ImageLoader2","_ref3","alt","src","aspectRatio","img","Image","decoding","decode","jsx","style","VideoMediaPreview","styled","MediaPreview","_templateObject","_taggedTemplateLiteral","VideoMediaPreviewSignedSubtitle","_ref4","solo","jsxs","Inline","space","marginTop","marginBottom","children","LockIcon","PosterImage","_ref5","showTip","subtitle","useMemo","title","media","VideoThumbnail","VideoThumbnail2","_ref6","ErrorBoundary","didCatch","useErrorBoundary","round","message","Card","radius","position","Box","display","justifyContent","alignItems","top","left","right","bottom","UnknownIcon","Suspense","fallback","isPlaceholder","AnimatedVideoMediaPreview","_templateObject2","AnimatedPosterImage","_ref7","withBorder","AnimatedVideoThumbnail","AnimatedVideoThumbnail2","_ref8","FancyBackdrop","Spinner","muted","tone","_templateObject3","ThumbGrid","Grid","_templateObject4","CardLoadMore","_templateObject5"],"mappings":"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"}
|