sanity-plugin-mux-input 1.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/build/actions/assets.js +37 -0
  4. package/build/actions/assets.js.map +1 -0
  5. package/build/actions/secrets.js +125 -0
  6. package/build/actions/secrets.js.map +1 -0
  7. package/build/actions/upload.js +280 -0
  8. package/build/actions/upload.js.map +1 -0
  9. package/build/clients/SanityClient.js +19 -0
  10. package/build/clients/SanityClient.js.map +1 -0
  11. package/build/clients/upChunkObservable.js +66 -0
  12. package/build/clients/upChunkObservable.js.map +1 -0
  13. package/build/components/FileInputButton.js +84 -0
  14. package/build/components/FileInputButton.js.map +1 -0
  15. package/build/components/Input.css +30 -0
  16. package/build/components/Input.js +823 -0
  17. package/build/components/Input.js.map +1 -0
  18. package/build/components/MuxLogo.js +19 -0
  19. package/build/components/MuxLogo.js.map +1 -0
  20. package/build/components/Preview.css +16 -0
  21. package/build/components/Preview.js +95 -0
  22. package/build/components/Preview.js.map +1 -0
  23. package/build/components/SelectAsset.css +56 -0
  24. package/build/components/SelectAsset.js +162 -0
  25. package/build/components/SelectAsset.js.map +1 -0
  26. package/build/components/Setup.css +7 -0
  27. package/build/components/Setup.js +311 -0
  28. package/build/components/Setup.js.map +1 -0
  29. package/build/components/UploadPlaceholder.css +81 -0
  30. package/build/components/UploadPlaceholder.js +92 -0
  31. package/build/components/UploadPlaceholder.js.map +1 -0
  32. package/build/components/Uploader.css +28 -0
  33. package/build/components/Uploader.js +534 -0
  34. package/build/components/Uploader.js.map +1 -0
  35. package/build/components/Video.css +21 -0
  36. package/build/components/Video.js +360 -0
  37. package/build/components/Video.js.map +1 -0
  38. package/build/config.js +17 -0
  39. package/build/config.js.map +1 -0
  40. package/build/index.js +22 -0
  41. package/build/index.js.map +1 -0
  42. package/build/schema/mux.video.js +41 -0
  43. package/build/schema/mux.video.js.map +1 -0
  44. package/build/schema/mux.videoAsset.js +29 -0
  45. package/build/schema/mux.videoAsset.js.map +1 -0
  46. package/build/util/extractFiles.js +70 -0
  47. package/build/util/extractFiles.js.map +1 -0
  48. package/build/util/formatTime.js +28 -0
  49. package/build/util/formatTime.js.map +1 -0
  50. package/build/util/generateJwt.js +30 -0
  51. package/build/util/generateJwt.js.map +1 -0
  52. package/build/util/getPosterSrc.js +46 -0
  53. package/build/util/getPosterSrc.js.map +1 -0
  54. package/build/util/getStoryboardSrc.js +26 -0
  55. package/build/util/getStoryboardSrc.js.map +1 -0
  56. package/build/util/getVideoSrc.js +23 -0
  57. package/build/util/getVideoSrc.js.map +1 -0
  58. package/config.dist.json +3 -0
  59. package/package.json +85 -0
  60. package/sanity.json +16 -0
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _ui = require("@sanity/ui");
9
+
10
+ var _lodash = require("lodash");
11
+
12
+ var _default2 = _interopRequireDefault(require("part:@sanity/components/formfields/default"));
13
+
14
+ var _default3 = _interopRequireDefault(require("part:@sanity/components/textinputs/default"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _secrets = require("../actions/secrets");
21
+
22
+ var _Setup = _interopRequireDefault(require("./Setup.css"));
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
31
+
32
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
33
+
34
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
35
+
36
+ var propTypes = {
37
+ onSave: _propTypes.default.func.isRequired,
38
+ onCancel: _propTypes.default.func.isRequired,
39
+ secrets: _propTypes.default.shape({
40
+ token: _propTypes.default.string,
41
+ secretKey: _propTypes.default.string,
42
+ enableSignedUrls: _propTypes.default.bool,
43
+ signingKeyId: _propTypes.default.string,
44
+ signingKeyPrivate: _propTypes.default.string
45
+ })
46
+ };
47
+
48
+ class MuxVideoInputSetup extends _react.Component {
49
+ static getDerivedStateFromProps(nextProps, nextState) {
50
+ if (!nextState.secrets) {
51
+ return null;
52
+ }
53
+
54
+ if (nextProps.secrets) {
55
+ return {
56
+ token: nextProps.secrets.token,
57
+ secretKey: nextProps.secrets.secretKey,
58
+ enableSignedUrls: nextProps.secrets.enableSignedUrls,
59
+ signingKeyId: nextProps.secrets.signingKeyId,
60
+ signingKeyPrivate: nextProps.secrets.signingKeyPrivate
61
+ };
62
+ }
63
+
64
+ return null;
65
+ }
66
+
67
+ constructor(props) {
68
+ var _this;
69
+
70
+ super(props);
71
+ _this = this;
72
+
73
+ _defineProperty(this, "tokenInputId", (0, _lodash.uniqueId)('MuxTokenInput'));
74
+
75
+ _defineProperty(this, "secretKeyInputId", (0, _lodash.uniqueId)('MuxSecretInput'));
76
+
77
+ _defineProperty(this, "enableSignedUrlsInputId", (0, _lodash.uniqueId)('MuxEnableSignedUrlsInput'));
78
+
79
+ _defineProperty(this, "state", {
80
+ token: null,
81
+ secretKey: null,
82
+ enableSignedUrls: false,
83
+ isLoading: false,
84
+ error: null
85
+ });
86
+
87
+ _defineProperty(this, "handleTokenChanged", event => {
88
+ this.setState({
89
+ token: event.currentTarget.value
90
+ });
91
+ });
92
+
93
+ _defineProperty(this, "handleSecretKeyChanged", event => {
94
+ this.setState({
95
+ secretKey: event.currentTarget.value
96
+ });
97
+ });
98
+
99
+ _defineProperty(this, "handleEnableSignedUrls", event => this.setState({
100
+ enableSignedUrls: event.currentTarget.checked
101
+ }));
102
+
103
+ _defineProperty(this, "handleCancel", event => {
104
+ this.props.onCancel();
105
+ });
106
+
107
+ _defineProperty(this, "handleOnSubmit", event => {
108
+ event.preventDefault();
109
+ });
110
+
111
+ _defineProperty(this, "handleSaveToken", /*#__PURE__*/_asyncToGenerator(function* () {
112
+ var handleError = err => {
113
+ console.error(err); // eslint-disable-line no-console
114
+
115
+ _this.setState({
116
+ isLoading: false,
117
+ error: 'Something went wrong saving the token. See console.error for more info.'
118
+ });
119
+ };
120
+
121
+ _this.setState({
122
+ isLoading: true
123
+ });
124
+
125
+ var _ref2 = _this.state || {},
126
+ token = _ref2.token,
127
+ secretKey = _ref2.secretKey,
128
+ enableSignedUrls = _ref2.enableSignedUrls;
129
+
130
+ var _ref3 = _this.state || {},
131
+ signingKeyId = _ref3.signingKeyId,
132
+ signingKeyPrivate = _ref3.signingKeyPrivate;
133
+
134
+ try {
135
+ yield (0, _secrets.saveSecrets)(token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate);
136
+ } catch (err) {
137
+ handleError('Error while trying to save secrets:', err);
138
+ return;
139
+ }
140
+
141
+ if (enableSignedUrls) {
142
+ var hasValidSigningKeys = yield (0, _secrets.haveValidSigningKeys)(signingKeyId, signingKeyPrivate);
143
+
144
+ if (!hasValidSigningKeys) {
145
+ try {
146
+ var _yield$createSigningK = yield (0, _secrets.createSigningKeys)(),
147
+ data = _yield$createSigningK.data;
148
+
149
+ signingKeyId = data.id;
150
+ signingKeyPrivate = data.private_key;
151
+ yield (0, _secrets.saveSecrets)(token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate);
152
+ } catch (_ref4) {
153
+ var message = _ref4.message;
154
+ // eslint-disable-next-line no-console
155
+ console.log('Error while creating and saving signing key:', message);
156
+
157
+ _this.setState({
158
+ error: message
159
+ });
160
+ }
161
+ }
162
+ }
163
+
164
+ _this.setState({
165
+ isLoading: false
166
+ });
167
+
168
+ _this.props.onSave({
169
+ token,
170
+ secretKey,
171
+ enableSignedUrls,
172
+ signingKeyId,
173
+ signingKeyPrivate
174
+ });
175
+ }));
176
+
177
+ if (props.secrets) {
178
+ var _props$secrets = props.secrets,
179
+ token = _props$secrets.token,
180
+ secretKey = _props$secrets.secretKey,
181
+ enableSignedUrls = _props$secrets.enableSignedUrls,
182
+ signingKeyId = _props$secrets.signingKeyId,
183
+ signingKeyPrivate = _props$secrets.signingKeyPrivate;
184
+ this.state.token = token;
185
+ this.state.secretKey = secretKey;
186
+ this.state.enableSignedUrls = enableSignedUrls;
187
+ this.state.signingKeyId = signingKeyId;
188
+ this.state.signingKeyPrivate = signingKeyPrivate;
189
+ }
190
+
191
+ this.firstField = /*#__PURE__*/_react.default.createRef();
192
+ }
193
+
194
+ componentDidMount() {
195
+ this.firstField.current.focus();
196
+ }
197
+
198
+ render() {
199
+ var _this$state = this.state,
200
+ error = _this$state.error,
201
+ isLoading = _this$state.isLoading;
202
+ return /*#__PURE__*/_react.default.createElement(_ui.Box, {
203
+ paddingRight: 4,
204
+ paddingLeft: 4,
205
+ paddingBottom: 4,
206
+ paddingTop: 4,
207
+ style: {
208
+ position: 'relative'
209
+ }
210
+ }, /*#__PURE__*/_react.default.createElement("form", {
211
+ onSubmit: this.handleOnSubmit
212
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
213
+ space: 4
214
+ }, !this.state.token && /*#__PURE__*/_react.default.createElement(_ui.Card, {
215
+ padding: [3, 3, 3],
216
+ radius: 2,
217
+ shadow: 1,
218
+ tone: "primary"
219
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
220
+ space: 3
221
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
222
+ size: 1
223
+ }, "To set up a new access token, go to your", ' ', /*#__PURE__*/_react.default.createElement("a", {
224
+ href: "https://dashboard.mux.com/settings/access-tokens",
225
+ target: "_blank",
226
+ rel: "noreferrer noopener"
227
+ }, "account on mux.com"), "."), /*#__PURE__*/_react.default.createElement(_ui.Text, {
228
+ size: 1
229
+ }, "The access token needs permissions: ", /*#__PURE__*/_react.default.createElement("strong", null, "Mux Video "), "(Full Access) and ", /*#__PURE__*/_react.default.createElement("strong", null, "Mux Data"), " (Read)", /*#__PURE__*/_react.default.createElement("br", null), "The credentials will be stored safely in a hidden document only available to editors."))), /*#__PURE__*/_react.default.createElement(_default2.default, {
230
+ changeIndicator: false,
231
+ label: "Access Token",
232
+ labelFor: this.tokenInputId,
233
+ level: 0
234
+ }, /*#__PURE__*/_react.default.createElement(_default3.default, {
235
+ id: this.tokenInputId,
236
+ ref: this.firstField,
237
+ onChange: this.handleTokenChanged,
238
+ type: "text",
239
+ value: this.state.token || ''
240
+ })), /*#__PURE__*/_react.default.createElement(_default2.default, {
241
+ changeIndicator: false,
242
+ label: "Secret Key",
243
+ labelFor: this.secretKeyInputId,
244
+ level: 0
245
+ }, /*#__PURE__*/_react.default.createElement(_default3.default, {
246
+ id: this.secretKeyInputId,
247
+ onChange: this.handleSecretKeyChanged,
248
+ type: "text",
249
+ value: this.state.secretKey || ''
250
+ })), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
251
+ space: 4
252
+ }, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
253
+ align: "center"
254
+ }, /*#__PURE__*/_react.default.createElement(_ui.Checkbox, {
255
+ id: this.enableSignedUrlsInputId,
256
+ onChange: this.handleEnableSignedUrls,
257
+ checked: this.state.enableSignedUrls || false,
258
+ style: {
259
+ display: 'block'
260
+ }
261
+ }), /*#__PURE__*/_react.default.createElement(_ui.Box, {
262
+ flex: 1,
263
+ paddingLeft: 3
264
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, null, /*#__PURE__*/_react.default.createElement("label", {
265
+ htmlFor: this.enableSignedUrlsInputId
266
+ }, "Enable Signed Urls")))), this.state.signingKeyId && this.state.enableSignedUrls ? /*#__PURE__*/_react.default.createElement(_ui.Card, {
267
+ padding: [3, 3, 3],
268
+ radius: 2,
269
+ shadow: 1,
270
+ tone: "caution"
271
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
272
+ space: 3
273
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
274
+ size: 1
275
+ }, "The signing key ID that Sanity will use is:"), /*#__PURE__*/_react.default.createElement(_ui.Code, {
276
+ size: 1
277
+ }, this.state.signingKeyId), /*#__PURE__*/_react.default.createElement(_ui.Text, {
278
+ size: 1
279
+ }, "This key is only used for previewing content in the Sanity UI.", /*#__PURE__*/_react.default.createElement("br", null), "You should generate a different key to use in your application server."))) : null), /*#__PURE__*/_react.default.createElement(_ui.Inline, {
280
+ space: 2
281
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
282
+ text: "Save",
283
+ loading: isLoading,
284
+ tone: "primary",
285
+ mode: "default",
286
+ onClick: this.handleSaveToken
287
+ }), /*#__PURE__*/_react.default.createElement(_ui.Button, {
288
+ text: "Cancel",
289
+ tone: "primary",
290
+ mode: "bleed",
291
+ onClick: this.handleCancel
292
+ })), error && /*#__PURE__*/_react.default.createElement("p", {
293
+ className: _Setup.default.error
294
+ }, error))));
295
+ }
296
+
297
+ }
298
+
299
+ MuxVideoInputSetup.propTypes = propTypes;
300
+ MuxVideoInputSetup.defaultProps = {
301
+ secrets: {
302
+ token: null,
303
+ secretKey: null,
304
+ enableSignedUrls: false,
305
+ signingKeyId: null,
306
+ signingKeyPrivate: null
307
+ }
308
+ };
309
+ var _default = MuxVideoInputSetup;
310
+ exports.default = _default;
311
+ //# sourceMappingURL=Setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/Setup.js"],"names":["propTypes","onSave","PropTypes","func","isRequired","onCancel","secrets","shape","token","string","secretKey","enableSignedUrls","bool","signingKeyId","signingKeyPrivate","MuxVideoInputSetup","Component","getDerivedStateFromProps","nextProps","nextState","constructor","props","isLoading","error","event","setState","currentTarget","value","checked","preventDefault","handleError","err","console","state","hasValidSigningKeys","data","id","private_key","message","log","firstField","React","createRef","componentDidMount","current","focus","render","position","handleOnSubmit","tokenInputId","handleTokenChanged","secretKeyInputId","handleSecretKeyChanged","enableSignedUrlsInputId","handleEnableSignedUrls","display","handleSaveToken","handleCancel","styles","defaultProps"],"mappings":"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","sourcesContent":["import {Box, Button, Card, Checkbox, Code, Flex, Inline, Stack, Text} from '@sanity/ui'\r\nimport {uniqueId} from 'lodash'\r\nimport FormField from 'part:@sanity/components/formfields/default'\r\nimport TextInput from 'part:@sanity/components/textinputs/default'\r\nimport PropTypes from 'prop-types'\r\nimport React, {Component} from 'react'\r\nimport {createSigningKeys, haveValidSigningKeys, saveSecrets} from '../actions/secrets'\r\nimport styles from './Setup.css'\r\n\r\nconst propTypes = {\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n secrets: PropTypes.shape({\r\n token: PropTypes.string,\r\n secretKey: PropTypes.string,\r\n enableSignedUrls: PropTypes.bool,\r\n signingKeyId: PropTypes.string,\r\n signingKeyPrivate: PropTypes.string,\r\n }),\r\n}\r\nclass MuxVideoInputSetup extends Component {\r\n tokenInputId = uniqueId('MuxTokenInput')\r\n secretKeyInputId = uniqueId('MuxSecretInput')\r\n enableSignedUrlsInputId = uniqueId('MuxEnableSignedUrlsInput')\r\n\r\n state = {\r\n token: null,\r\n secretKey: null,\r\n enableSignedUrls: false,\r\n isLoading: false,\r\n error: null,\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, nextState) {\r\n if (!nextState.secrets) {\r\n return null\r\n }\r\n if (nextProps.secrets) {\r\n return {\r\n token: nextProps.secrets.token,\r\n secretKey: nextProps.secrets.secretKey,\r\n enableSignedUrls: nextProps.secrets.enableSignedUrls,\r\n signingKeyId: nextProps.secrets.signingKeyId,\r\n signingKeyPrivate: nextProps.secrets.signingKeyPrivate,\r\n }\r\n }\r\n return null\r\n }\r\n\r\n constructor(props) {\r\n super(props)\r\n if (props.secrets) {\r\n const {token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate} = props.secrets\r\n this.state.token = token\r\n this.state.secretKey = secretKey\r\n this.state.enableSignedUrls = enableSignedUrls\r\n this.state.signingKeyId = signingKeyId\r\n this.state.signingKeyPrivate = signingKeyPrivate\r\n }\r\n this.firstField = React.createRef()\r\n }\r\n\r\n componentDidMount() {\r\n this.firstField.current.focus()\r\n }\r\n\r\n handleTokenChanged = (event) => {\r\n this.setState({token: event.currentTarget.value})\r\n }\r\n\r\n handleSecretKeyChanged = (event) => {\r\n this.setState({secretKey: event.currentTarget.value})\r\n }\r\n\r\n handleEnableSignedUrls = (event) => this.setState({enableSignedUrls: event.currentTarget.checked})\r\n\r\n handleCancel = (event) => {\r\n this.props.onCancel()\r\n }\r\n\r\n handleOnSubmit = (event) => {\r\n event.preventDefault()\r\n }\r\n\r\n handleSaveToken = async () => {\r\n const handleError = (err) => {\r\n console.error(err) // eslint-disable-line no-console\r\n this.setState({\r\n isLoading: false,\r\n error: 'Something went wrong saving the token. See console.error for more info.',\r\n })\r\n }\r\n\r\n this.setState({isLoading: true})\r\n\r\n const {token, secretKey, enableSignedUrls} = this.state || {}\r\n let {signingKeyId, signingKeyPrivate} = this.state || {}\r\n\r\n try {\r\n await saveSecrets(token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate)\r\n } catch (err) {\r\n handleError('Error while trying to save secrets:', err)\r\n return\r\n }\r\n\r\n if (enableSignedUrls) {\r\n const hasValidSigningKeys = await haveValidSigningKeys(signingKeyId, signingKeyPrivate)\r\n\r\n if (!hasValidSigningKeys) {\r\n try {\r\n const {data} = await createSigningKeys()\r\n signingKeyId = data.id\r\n signingKeyPrivate = data.private_key\r\n await saveSecrets(token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate)\r\n } catch ({message}) {\r\n // eslint-disable-next-line no-console\r\n console.log('Error while creating and saving signing key:', message)\r\n this.setState({error: message})\r\n }\r\n }\r\n }\r\n\r\n this.setState({isLoading: false})\r\n\r\n this.props.onSave({token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate})\r\n }\r\n\r\n render() {\r\n const {error, isLoading} = this.state\r\n\r\n return (\r\n <Box\r\n paddingRight={4}\r\n paddingLeft={4}\r\n paddingBottom={4}\r\n paddingTop={4}\r\n style={{position: 'relative'}}\r\n >\r\n <form onSubmit={this.handleOnSubmit}>\r\n <Stack space={4}>\r\n {!this.state.token && (\r\n <Card padding={[3, 3, 3]} radius={2} shadow={1} tone=\"primary\">\r\n <Stack space={3}>\r\n <Text size={1}>\r\n To set up a new access token, go to your{' '}\r\n <a\r\n href=\"https://dashboard.mux.com/settings/access-tokens\"\r\n target=\"_blank\"\r\n rel=\"noreferrer noopener\"\r\n >\r\n account on mux.com\r\n </a>\r\n .\r\n </Text>\r\n <Text size={1}>\r\n The access token needs permissions: <strong>Mux Video </strong>\r\n (Full Access) and <strong>Mux Data</strong> (Read)\r\n <br />\r\n The credentials will be stored safely in a hidden document only available to\r\n editors.\r\n </Text>\r\n </Stack>\r\n </Card>\r\n )}\r\n <FormField\r\n changeIndicator={false}\r\n label=\"Access Token\"\r\n labelFor={this.tokenInputId}\r\n level={0}\r\n >\r\n <TextInput\r\n id={this.tokenInputId}\r\n ref={this.firstField}\r\n onChange={this.handleTokenChanged}\r\n type=\"text\"\r\n value={this.state.token || ''}\r\n />\r\n </FormField>\r\n <FormField\r\n changeIndicator={false}\r\n label=\"Secret Key\"\r\n labelFor={this.secretKeyInputId}\r\n level={0}\r\n >\r\n <TextInput\r\n id={this.secretKeyInputId}\r\n onChange={this.handleSecretKeyChanged}\r\n type=\"text\"\r\n value={this.state.secretKey || ''}\r\n />\r\n </FormField>\r\n\r\n <Stack space={4}>\r\n <Flex align=\"center\">\r\n <Checkbox\r\n id={this.enableSignedUrlsInputId}\r\n onChange={this.handleEnableSignedUrls}\r\n checked={this.state.enableSignedUrls || false}\r\n style={{display: 'block'}}\r\n />\r\n <Box flex={1} paddingLeft={3}>\r\n <Text>\r\n <label htmlFor={this.enableSignedUrlsInputId}>Enable Signed Urls</label>\r\n </Text>\r\n </Box>\r\n </Flex>\r\n {this.state.signingKeyId && this.state.enableSignedUrls ? (\r\n <Card padding={[3, 3, 3]} radius={2} shadow={1} tone=\"caution\">\r\n <Stack space={3}>\r\n <Text size={1}>The signing key ID that Sanity will use is:</Text>\r\n <Code size={1}>{this.state.signingKeyId}</Code>\r\n <Text size={1}>\r\n This key is only used for previewing content in the Sanity UI.\r\n <br />\r\n You should generate a different key to use in your application server.\r\n </Text>\r\n </Stack>\r\n </Card>\r\n ) : null}\r\n </Stack>\r\n\r\n <Inline space={2}>\r\n <Button\r\n text=\"Save\"\r\n loading={isLoading}\r\n tone=\"primary\"\r\n mode=\"default\"\r\n onClick={this.handleSaveToken}\r\n />\r\n\r\n <Button text=\"Cancel\" tone=\"primary\" mode=\"bleed\" onClick={this.handleCancel} />\r\n </Inline>\r\n\r\n {error && <p className={styles.error}>{error}</p>}\r\n </Stack>\r\n </form>\r\n </Box>\r\n )\r\n }\r\n}\r\n\r\nMuxVideoInputSetup.propTypes = propTypes\r\n\r\nMuxVideoInputSetup.defaultProps = {\r\n secrets: {\r\n token: null,\r\n secretKey: null,\r\n enableSignedUrls: false,\r\n signingKeyId: null,\r\n signingKeyPrivate: null,\r\n },\r\n}\r\n\r\nexport default MuxVideoInputSetup\r\n"],"file":"Setup.js"}
@@ -0,0 +1,81 @@
1
+ @import 'part:@sanity/base/theme/variables-style';
2
+
3
+ .root {
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ text-align: center;
8
+ height: 100%;
9
+ }
10
+
11
+ .hasFocus {
12
+ composes: root;
13
+ }
14
+
15
+ .iconContainer {
16
+ font-size: 3rem;
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ padding: var(--small-padding);
21
+ }
22
+
23
+ .strong {
24
+ font-weight: 400;
25
+ margin: 0;
26
+ padding: 0;
27
+ }
28
+
29
+ .dropFile,
30
+ .pasteFile {
31
+ padding: 1rem;
32
+ display: none;
33
+ @media (--screen-medium) {
34
+ display: block;
35
+ }
36
+ }
37
+
38
+ .dropFile.isDraggingOver {
39
+ color: var(--state-success-color);
40
+ }
41
+
42
+ .pasteFile {
43
+ opacity: 0.2;
44
+ transition: opacity linear 0.2s;
45
+ }
46
+
47
+ .pasteFile.hasFocus {
48
+ opacity: 1;
49
+ }
50
+
51
+ .invalidPaste,
52
+ .invalidFile {
53
+ color: var(--state-danger-color);
54
+ animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
55
+ transform: translate3d(0, 0, 0);
56
+ backface-visibility: hidden;
57
+ perspective: 1000px;
58
+ }
59
+
60
+ @keyframes shake {
61
+ 10%,
62
+ 90% {
63
+ transform: translate3d(-1px, 0, 0);
64
+ }
65
+
66
+ 20%,
67
+ 80% {
68
+ transform: translate3d(2px, 0, 0);
69
+ }
70
+
71
+ 30%,
72
+ 50%,
73
+ 70% {
74
+ transform: translate3d(-4px, 0, 0);
75
+ }
76
+
77
+ 40%,
78
+ 60% {
79
+ transform: translate3d(4px, 0, 0);
80
+ }
81
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _ui = require("@sanity/ui");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _fi = require("react-icons/fi");
15
+
16
+ var _UploadPlaceholder = _interopRequireDefault(require("./UploadPlaceholder.css"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
+
22
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
+
24
+ class UploadPlaceholder extends _react.default.PureComponent {
25
+ render() {
26
+ var _this$props = this.props,
27
+ invalidPaste = _this$props.invalidPaste,
28
+ invalidFile = _this$props.invalidFile,
29
+ hasFocus = _this$props.hasFocus,
30
+ isDraggingOver = _this$props.isDraggingOver;
31
+ var fileClassNames = [_UploadPlaceholder.default.dropFile];
32
+ var pasteClassNames = [_UploadPlaceholder.default.pasteFile];
33
+
34
+ if (invalidFile) {
35
+ fileClassNames.push(_UploadPlaceholder.default.invalidFile);
36
+ }
37
+
38
+ if (isDraggingOver) {
39
+ fileClassNames.push(_UploadPlaceholder.default.isDraggingOver);
40
+ }
41
+
42
+ if (invalidPaste) {
43
+ pasteClassNames.push(_UploadPlaceholder.default.invalidPaste);
44
+ }
45
+
46
+ if (hasFocus) {
47
+ pasteClassNames.push(_UploadPlaceholder.default.hasFocus);
48
+ }
49
+
50
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
51
+ justify: "center",
52
+ align: "center",
53
+ padding: 3
54
+ }, /*#__PURE__*/_react.default.createElement("div", {
55
+ className: fileClassNames.join(' ')
56
+ }, /*#__PURE__*/_react.default.createElement("div", {
57
+ className: _UploadPlaceholder.default.iconContainer
58
+ }, /*#__PURE__*/_react.default.createElement(_fi.FiUpload, {
59
+ size: "0.5em"
60
+ })), /*#__PURE__*/_react.default.createElement("p", {
61
+ className: _UploadPlaceholder.default.strong
62
+ }, /*#__PURE__*/_react.default.createElement("span", null, "Drop file ", invalidFile))), /*#__PURE__*/_react.default.createElement("div", {
63
+ className: pasteClassNames.join(' ')
64
+ }, /*#__PURE__*/_react.default.createElement("div", {
65
+ className: _UploadPlaceholder.default.iconContainer
66
+ }, /*#__PURE__*/_react.default.createElement(_fi.FiCopy, _extends({}, invalidPaste ? {
67
+ color: 'red'
68
+ } : {}, {
69
+ size: "0.5em"
70
+ }))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
71
+ className: _UploadPlaceholder.default.strong
72
+ }, /*#__PURE__*/_react.default.createElement("span", null, "Paste URL"))))));
73
+ }
74
+
75
+ }
76
+
77
+ exports.default = UploadPlaceholder;
78
+
79
+ _defineProperty(UploadPlaceholder, "propTypes", {
80
+ hasFocus: _propTypes.default.bool,
81
+ invalidPaste: _propTypes.default.bool,
82
+ invalidFile: _propTypes.default.bool,
83
+ isDraggingOver: _propTypes.default.bool
84
+ });
85
+
86
+ UploadPlaceholder.defaultProps = {
87
+ hasFocus: false,
88
+ invalidPaste: false,
89
+ invalidFile: false,
90
+ isDraggingOver: false
91
+ };
92
+ //# sourceMappingURL=UploadPlaceholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/UploadPlaceholder.js"],"names":["UploadPlaceholder","React","PureComponent","render","props","invalidPaste","invalidFile","hasFocus","isDraggingOver","fileClassNames","styles","dropFile","pasteClassNames","pasteFile","push","join","iconContainer","strong","color","PropTypes","bool","defaultProps"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEe,MAAMA,iBAAN,SAAgCC,eAAMC,aAAtC,CAAoD;AAOjEC,EAAAA,MAAM,GAAG;AACP,sBAA8D,KAAKC,KAAnE;AAAA,QAAOC,YAAP,eAAOA,YAAP;AAAA,QAAqBC,WAArB,eAAqBA,WAArB;AAAA,QAAkCC,QAAlC,eAAkCA,QAAlC;AAAA,QAA4CC,cAA5C,eAA4CA,cAA5C;AACA,QAAMC,cAAc,GAAG,CAACC,2BAAOC,QAAR,CAAvB;AACA,QAAMC,eAAe,GAAG,CAACF,2BAAOG,SAAR,CAAxB;;AACA,QAAIP,WAAJ,EAAiB;AACfG,MAAAA,cAAc,CAACK,IAAf,CAAoBJ,2BAAOJ,WAA3B;AACD;;AACD,QAAIE,cAAJ,EAAoB;AAClBC,MAAAA,cAAc,CAACK,IAAf,CAAoBJ,2BAAOF,cAA3B;AACD;;AACD,QAAIH,YAAJ,EAAkB;AAChBO,MAAAA,eAAe,CAACE,IAAhB,CAAqBJ,2BAAOL,YAA5B;AACD;;AACD,QAAIE,QAAJ,EAAc;AACZK,MAAAA,eAAe,CAACE,IAAhB,CAAqBJ,2BAAOH,QAA5B;AACD;;AACD,wBACE,uDACE,6BAAC,QAAD;AAAM,MAAA,OAAO,EAAC,QAAd;AAAuB,MAAA,KAAK,EAAC,QAA7B;AAAsC,MAAA,OAAO,EAAE;AAA/C,oBACE;AAAK,MAAA,SAAS,EAAEE,cAAc,CAACM,IAAf,CAAoB,GAApB;AAAhB,oBACE;AAAK,MAAA,SAAS,EAAEL,2BAAOM;AAAvB,oBACE,6BAAC,YAAD;AAAU,MAAA,IAAI,EAAC;AAAf,MADF,CADF,eAIE;AAAG,MAAA,SAAS,EAAEN,2BAAOO;AAArB,oBACE,yDAAiBX,WAAjB,CADF,CAJF,CADF,eASE;AAAK,MAAA,SAAS,EAAEM,eAAe,CAACG,IAAhB,CAAqB,GAArB;AAAhB,oBACE;AAAK,MAAA,SAAS,EAAEL,2BAAOM;AAAvB,oBACE,6BAAC,UAAD,eAAaX,YAAY,GAAG;AAACa,MAAAA,KAAK,EAAE;AAAR,KAAH,GAAoB,EAA7C;AAAkD,MAAA,IAAI,EAAC;AAAvD,OADF,CADF,eAIE,uDACE;AAAG,MAAA,SAAS,EAAER,2BAAOO;AAArB,oBACE,uDADF,CADF,CAJF,CATF,CADF,CADF;AAwBD;;AA/CgE;;;;gBAA9CjB,iB,eACA;AACjBO,EAAAA,QAAQ,EAAEY,mBAAUC,IADH;AAEjBf,EAAAA,YAAY,EAAEc,mBAAUC,IAFP;AAGjBd,EAAAA,WAAW,EAAEa,mBAAUC,IAHN;AAIjBZ,EAAAA,cAAc,EAAEW,mBAAUC;AAJT,C;;AAiDrBpB,iBAAiB,CAACqB,YAAlB,GAAiC;AAC/Bd,EAAAA,QAAQ,EAAE,KADqB;AAE/BF,EAAAA,YAAY,EAAE,KAFiB;AAG/BC,EAAAA,WAAW,EAAE,KAHkB;AAI/BE,EAAAA,cAAc,EAAE;AAJe,CAAjC","sourcesContent":["import {Flex} from '@sanity/ui'\r\nimport PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport {FiCopy, FiUpload} from 'react-icons/fi'\r\nimport styles from './UploadPlaceholder.css'\r\n\r\nexport default class UploadPlaceholder extends React.PureComponent {\r\n static propTypes = {\r\n hasFocus: PropTypes.bool,\r\n invalidPaste: PropTypes.bool,\r\n invalidFile: PropTypes.bool,\r\n isDraggingOver: PropTypes.bool,\r\n }\r\n render() {\r\n const {invalidPaste, invalidFile, hasFocus, isDraggingOver} = this.props\r\n const fileClassNames = [styles.dropFile]\r\n const pasteClassNames = [styles.pasteFile]\r\n if (invalidFile) {\r\n fileClassNames.push(styles.invalidFile)\r\n }\r\n if (isDraggingOver) {\r\n fileClassNames.push(styles.isDraggingOver)\r\n }\r\n if (invalidPaste) {\r\n pasteClassNames.push(styles.invalidPaste)\r\n }\r\n if (hasFocus) {\r\n pasteClassNames.push(styles.hasFocus)\r\n }\r\n return (\r\n <div>\r\n <Flex justify=\"center\" align=\"center\" padding={3}>\r\n <div className={fileClassNames.join(' ')}>\r\n <div className={styles.iconContainer}>\r\n <FiUpload size=\"0.5em\" />\r\n </div>\r\n <p className={styles.strong}>\r\n <span>Drop file {invalidFile}</span>\r\n </p>\r\n </div>\r\n <div className={pasteClassNames.join(' ')}>\r\n <div className={styles.iconContainer}>\r\n <FiCopy {...(invalidPaste ? {color: 'red'} : {})} size=\"0.5em\" />\r\n </div>\r\n <div>\r\n <p className={styles.strong}>\r\n <span>Paste URL</span>\r\n </p>\r\n </div>\r\n </div>\r\n </Flex>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nUploadPlaceholder.defaultProps = {\r\n hasFocus: false,\r\n invalidPaste: false,\r\n invalidFile: false,\r\n isDraggingOver: false,\r\n}\r\n"],"file":"UploadPlaceholder.js"}
@@ -0,0 +1,28 @@
1
+ @import 'part:@sanity/base/theme/variables-style';
2
+
3
+ .uploadProgress {
4
+ text-align: center;
5
+ padding: var(--medium-padding);
6
+ }
7
+
8
+ .progressBar {
9
+ margin-top: var(--large-padding);
10
+ margin-bottom: 2.5em;
11
+ text-align: left;
12
+ }
13
+
14
+ .errorMessage {
15
+ background: #fff;
16
+ color: var(--state-danger-color);
17
+ }
18
+
19
+ .hiddenTextField {
20
+ position: absolute;
21
+ border: 0;
22
+ color: white;
23
+ opacity: 0;
24
+ }
25
+
26
+ .hiddenTextField:focus {
27
+ outline: none;
28
+ }