sanity-plugin-mux-input 3.0.5 → 4.0.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.
Files changed (123) hide show
  1. package/dist/index.js +20 -92
  2. package/dist/index.js.map +1 -1
  3. package/package.json +5 -15
  4. package/dist/index.cjs +0 -5746
  5. package/dist/index.cjs.map +0 -1
  6. package/dist/index.d.cts +0 -288
  7. package/dist/index.d.cts.map +0 -1
  8. package/sanity.json +0 -8
  9. package/src/_exports/index.ts +0 -73
  10. package/src/actions/assets.ts +0 -152
  11. package/src/actions/secrets.ts +0 -110
  12. package/src/actions/upload.ts +0 -308
  13. package/src/clients/upChunkObservable.ts +0 -54
  14. package/src/components/AddCaptionDialog.tsx +0 -440
  15. package/src/components/CaptionsDialog.tsx +0 -23
  16. package/src/components/ConfigureApi.styled.tsx +0 -19
  17. package/src/components/ConfigureApi.tsx +0 -296
  18. package/src/components/DraggableWatermark.tsx +0 -885
  19. package/src/components/EditCaptionDialog.tsx +0 -511
  20. package/src/components/EditThumbnailDialog.tsx +0 -121
  21. package/src/components/ErrorBoundaryCard.tsx +0 -97
  22. package/src/components/FileInputButton.tsx +0 -54
  23. package/src/components/FileInputMenuItem.styled.tsx +0 -36
  24. package/src/components/FileInputMenuItem.tsx +0 -85
  25. package/src/components/FormField.tsx +0 -38
  26. package/src/components/IconInfo.tsx +0 -22
  27. package/src/components/ImportVideosFromMux.tsx +0 -339
  28. package/src/components/Input.styled.tsx +0 -22
  29. package/src/components/Input.tsx +0 -78
  30. package/src/components/InputBrowser.tsx +0 -41
  31. package/src/components/MuxLogo.tsx +0 -42
  32. package/src/components/Onboard.tsx +0 -65
  33. package/src/components/PageSelector.tsx +0 -54
  34. package/src/components/Player.styled.tsx +0 -11
  35. package/src/components/Player.tsx +0 -117
  36. package/src/components/PlayerActionsMenu.tsx +0 -191
  37. package/src/components/ResyncMetadata.tsx +0 -278
  38. package/src/components/SelectAsset.tsx +0 -39
  39. package/src/components/SelectSortOptions.tsx +0 -45
  40. package/src/components/SpinnerBox.tsx +0 -16
  41. package/src/components/StudioTool.tsx +0 -24
  42. package/src/components/TextTracksEditor.tsx +0 -117
  43. package/src/components/TextTracksManager.tsx +0 -738
  44. package/src/components/UploadConfiguration.tsx +0 -696
  45. package/src/components/UploadPlaceholder.tsx +0 -88
  46. package/src/components/UploadProgress.tsx +0 -80
  47. package/src/components/Uploader.styled.tsx +0 -65
  48. package/src/components/Uploader.tsx +0 -499
  49. package/src/components/VideoDetails/DeleteDialog.tsx +0 -148
  50. package/src/components/VideoDetails/VideoDetails.tsx +0 -358
  51. package/src/components/VideoDetails/VideoReferences.tsx +0 -63
  52. package/src/components/VideoDetails/useVideoDetails.ts +0 -103
  53. package/src/components/VideoInBrowser.tsx +0 -245
  54. package/src/components/VideoMetadata.tsx +0 -45
  55. package/src/components/VideoPlayer.tsx +0 -241
  56. package/src/components/VideoThumbnail.tsx +0 -139
  57. package/src/components/VideosBrowser.tsx +0 -100
  58. package/src/components/documentPreview/DocumentPreview.tsx +0 -84
  59. package/src/components/documentPreview/DraftStatus.tsx +0 -34
  60. package/src/components/documentPreview/MissingSchemaType.tsx +0 -32
  61. package/src/components/documentPreview/PaneItemPreview.tsx +0 -67
  62. package/src/components/documentPreview/PublishedStatus.tsx +0 -35
  63. package/src/components/documentPreview/TimeAgo.tsx +0 -12
  64. package/src/components/icons/Audio.tsx +0 -13
  65. package/src/components/icons/Resolution.tsx +0 -12
  66. package/src/components/icons/StopWatch.tsx +0 -20
  67. package/src/components/icons/ToolIcon.tsx +0 -19
  68. package/src/components/uploadConfiguration/PlaybackPolicy.tsx +0 -133
  69. package/src/components/uploadConfiguration/PlaybackPolicyOption.tsx +0 -76
  70. package/src/components/uploadConfiguration/PlaybackPolicyWarning.tsx +0 -29
  71. package/src/components/uploadConfiguration/ResolutionTierSelector.tsx +0 -72
  72. package/src/components/uploadConfiguration/StaticRenditionSelector.tsx +0 -180
  73. package/src/components/withFocusRing/helpers.ts +0 -24
  74. package/src/components/withFocusRing/index.ts +0 -1
  75. package/src/components/withFocusRing/withFocusRing.ts +0 -30
  76. package/src/context/DialogStateContext.tsx +0 -33
  77. package/src/context/DrmPlaybackWarningContext.tsx +0 -97
  78. package/src/hooks/useAccessControl.ts +0 -13
  79. package/src/hooks/useAssetDocumentValues.ts +0 -11
  80. package/src/hooks/useAssets.ts +0 -73
  81. package/src/hooks/useCancelUpload.ts +0 -22
  82. package/src/hooks/useClient.ts +0 -8
  83. package/src/hooks/useDialogState.ts +0 -11
  84. package/src/hooks/useDocReferences.ts +0 -21
  85. package/src/hooks/useFetchFileSize.ts +0 -55
  86. package/src/hooks/useImportMuxAssets.ts +0 -132
  87. package/src/hooks/useInView.ts +0 -41
  88. package/src/hooks/useMediaMetadata.ts +0 -104
  89. package/src/hooks/useMuxAssets.ts +0 -179
  90. package/src/hooks/useMuxPolling.ts +0 -52
  91. package/src/hooks/useResyncAsset.ts +0 -110
  92. package/src/hooks/useResyncMuxMetadata.ts +0 -169
  93. package/src/hooks/useSaveSecrets.ts +0 -78
  94. package/src/hooks/useSecretsDocumentValues.ts +0 -38
  95. package/src/hooks/useSecretsFormState.ts +0 -47
  96. package/src/plugin.tsx +0 -31
  97. package/src/sanity-ui.d.ts +0 -5
  98. package/src/schema.ts +0 -196
  99. package/src/util/addKeysToMuxData.ts +0 -30
  100. package/src/util/asserters.ts +0 -23
  101. package/src/util/assetTitlePlaceholder.ts +0 -31
  102. package/src/util/constants.ts +0 -15
  103. package/src/util/convertWatermarkToMux.ts +0 -160
  104. package/src/util/createSearchFilter.ts +0 -76
  105. package/src/util/createUrlParamsObject.ts +0 -29
  106. package/src/util/extractFiles.ts +0 -67
  107. package/src/util/formatBytes.ts +0 -31
  108. package/src/util/formatDriveShareLink.ts +0 -64
  109. package/src/util/formatSeconds.ts +0 -48
  110. package/src/util/generateJwt.ts +0 -57
  111. package/src/util/getAnimatedPosterSrc.ts +0 -26
  112. package/src/util/getPlaybackPolicy.ts +0 -69
  113. package/src/util/getPosterSrc.ts +0 -28
  114. package/src/util/getVideoMetadata.ts +0 -23
  115. package/src/util/getVideoSrc.ts +0 -23
  116. package/src/util/parsers.ts +0 -5
  117. package/src/util/pluginVersion.ts +0 -5
  118. package/src/util/readSecrets.ts +0 -38
  119. package/src/util/roundPxString.ts +0 -16
  120. package/src/util/textTracks.ts +0 -222
  121. package/src/util/tryWithSuspend.ts +0 -22
  122. package/src/util/types.ts +0 -566
  123. package/v2-incompatible.js +0 -11
@@ -1,296 +0,0 @@
1
- import {
2
- Box,
3
- Button,
4
- Card,
5
- Checkbox,
6
- Code,
7
- Dialog,
8
- Flex,
9
- Inline,
10
- Stack,
11
- Text,
12
- TextInput,
13
- } from '@sanity/ui'
14
- import {useCallback, useEffect, useId, useMemo, useRef} from 'react'
15
- import {clear, preload} from 'suspend-react'
16
-
17
- import {useClient} from '../hooks/useClient'
18
- import type {SetDialogState} from '../hooks/useDialogState'
19
- import {useDialogState} from '../hooks/useDialogState'
20
- import {useSaveSecrets} from '../hooks/useSaveSecrets'
21
- import {useSecretsDocumentValues} from '../hooks/useSecretsDocumentValues'
22
- import {useSecretsFormState} from '../hooks/useSecretsFormState'
23
- import {cacheNs, DIALOGS_Z_INDEX} from '../util/constants'
24
- import {_id as secretsId} from '../util/readSecrets'
25
- import type {Secrets} from '../util/types'
26
- import {Header} from './ConfigureApi.styled'
27
- import FormField from './FormField'
28
-
29
- // Props for the dialog component when used with external state management
30
- export interface ConfigureApiDialogProps {
31
- setDialogState: SetDialogState
32
- secrets: Secrets
33
- }
34
-
35
- const fieldNames = ['token', 'secretKey', 'enableSignedUrls', 'drmConfigId'] as const
36
-
37
- // Internal dialog component that can be used with external state
38
- export function ConfigureApiDialog({secrets, setDialogState}: ConfigureApiDialogProps) {
39
- const client = useClient()
40
- const [state, dispatch] = useSecretsFormState(secrets)
41
- const hasSecretsInitially = useMemo(() => secrets.token && secrets.secretKey, [secrets])
42
- const handleClose = useCallback(() => setDialogState(false), [setDialogState])
43
- const dirty = useMemo(
44
- () =>
45
- secrets.token !== state.token ||
46
- secrets.secretKey !== state.secretKey ||
47
- secrets.enableSignedUrls !== state.enableSignedUrls ||
48
- secrets.drmConfigId !== state.drmConfigId,
49
- [secrets, state],
50
- )
51
- const id = `ConfigureApi${useId()}`
52
- const [tokenId, secretKeyId, enableSignedUrlsId, drmConfigIdId] = useMemo<typeof fieldNames>(
53
- () => fieldNames.map((field) => `${id}-${field}`) as unknown as typeof fieldNames,
54
- [id],
55
- )
56
- const firstField = useRef<HTMLInputElement>(null)
57
- const handleSaveSecrets = useSaveSecrets(client, secrets)
58
- const saving = useRef(false)
59
-
60
- const handleSubmit = useCallback(
61
- (event: React.FormEvent<HTMLFormElement>) => {
62
- event.preventDefault()
63
-
64
- if (!saving.current && event.currentTarget.reportValidity()) {
65
- saving.current = true
66
- dispatch({type: 'submit'})
67
- const {token, secretKey, enableSignedUrls, drmConfigId} = state
68
- handleSaveSecrets({token, secretKey, enableSignedUrls, drmConfigId})
69
- .then((savedSecrets) => {
70
- const {projectId, dataset} = client.config()
71
- clear([cacheNs, secretsId, projectId, dataset])
72
- preload(() => Promise.resolve(savedSecrets), [cacheNs, secretsId, projectId, dataset])
73
- setDialogState(false)
74
- })
75
- .catch((err) => dispatch({type: 'error', payload: err.message}))
76
- .finally(() => {
77
- saving.current = false
78
- })
79
- }
80
- },
81
- [client, dispatch, handleSaveSecrets, setDialogState, state],
82
- )
83
- const handleChangeToken = useCallback(
84
- (event: React.FormEvent<HTMLInputElement>) => {
85
- dispatch({
86
- type: 'change',
87
- payload: {name: 'token', value: event.currentTarget.value},
88
- })
89
- },
90
- [dispatch],
91
- )
92
- const handleChangeSecretKey = useCallback(
93
- (event: React.FormEvent<HTMLInputElement>) => {
94
- dispatch({
95
- type: 'change',
96
- payload: {name: 'secretKey', value: event.currentTarget.value},
97
- })
98
- },
99
- [dispatch],
100
- )
101
- const handleChangeEnableSignedUrls = useCallback(
102
- (event: React.FormEvent<HTMLInputElement>) => {
103
- dispatch({
104
- type: 'change',
105
- payload: {name: 'enableSignedUrls', value: event.currentTarget.checked},
106
- })
107
- },
108
- [dispatch],
109
- )
110
- const handleChangeDrmConfigId = useCallback(
111
- (event: React.FormEvent<HTMLInputElement>) => {
112
- dispatch({
113
- type: 'change',
114
- payload: {name: 'drmConfigId', value: event.currentTarget.value},
115
- })
116
- },
117
- [dispatch],
118
- )
119
-
120
- useEffect(() => {
121
- if (firstField.current) {
122
- firstField.current.focus()
123
- }
124
- }, [firstField])
125
-
126
- return (
127
- <Dialog
128
- animate
129
- id={id}
130
- onClose={handleClose}
131
- onClickOutside={handleClose}
132
- header={<Header />}
133
- zOffset={DIALOGS_Z_INDEX}
134
- position="fixed"
135
- width={1}
136
- >
137
- <Box padding={3}>
138
- <form onSubmit={handleSubmit} noValidate>
139
- <Stack space={4}>
140
- {!hasSecretsInitially && (
141
- <Card padding={[3, 3, 3]} radius={2} shadow={1} tone="primary">
142
- <Stack space={3}>
143
- <Text size={1}>
144
- To set up a new access token, go to your{' '}
145
- <a
146
- href="https://dashboard.mux.com/settings/access-tokens"
147
- target="_blank"
148
- rel="noreferrer noopener"
149
- >
150
- account on mux.com
151
- </a>
152
- .
153
- </Text>
154
- <Text size={1}>
155
- The access token needs permissions: <strong>Mux Video </strong>
156
- (Full Access) and <strong>Mux Data</strong> (Read)
157
- <br />
158
- To use Signed URLs, the token must also have System permissions.
159
- <br />
160
- The credentials will be stored safely in a hidden document only available to
161
- editors.
162
- </Text>
163
- </Stack>
164
- </Card>
165
- )}
166
- <FormField title="Access Token" inputId={tokenId}>
167
- <TextInput
168
- id={tokenId}
169
- ref={firstField}
170
- onChange={handleChangeToken}
171
- type="text"
172
- value={state.token ?? ''}
173
- required={!!state.secretKey || state.enableSignedUrls}
174
- />
175
- </FormField>
176
- <FormField title="Secret Key" inputId={secretKeyId}>
177
- <TextInput
178
- id={secretKeyId}
179
- onChange={handleChangeSecretKey}
180
- type="text"
181
- value={state.secretKey ?? ''}
182
- required={!!state.token || state.enableSignedUrls}
183
- />
184
- </FormField>
185
-
186
- <Stack space={4}>
187
- <Flex align="center">
188
- <Checkbox
189
- id={enableSignedUrlsId}
190
- onChange={handleChangeEnableSignedUrls}
191
- checked={state.enableSignedUrls}
192
- style={{display: 'block'}}
193
- />
194
- <Box flex={1} paddingLeft={3}>
195
- <Text>
196
- <label htmlFor={enableSignedUrlsId}>Enable Signed Urls</label>
197
- </Text>
198
- </Box>
199
- </Flex>
200
- {secrets.signingKeyId && state.enableSignedUrls ? (
201
- <Card padding={[3, 3, 3]} radius={2} shadow={1} tone="caution">
202
- <Stack space={3}>
203
- <Text size={1}>The signing key ID that Sanity will use is:</Text>
204
- <Code size={1}>{secrets.signingKeyId}</Code>
205
- <Text size={1}>
206
- This key is only used for previewing content in the Sanity UI.
207
- <br />
208
- You should generate a different key to use in your application server.
209
- </Text>
210
- </Stack>
211
- </Card>
212
- ) : null}
213
- </Stack>
214
-
215
- <FormField title="DRM Configuration ID" inputId={drmConfigIdId}>
216
- <TextInput
217
- id={drmConfigIdId}
218
- onChange={handleChangeDrmConfigId}
219
- type="text"
220
- value={state.drmConfigId ?? ''}
221
- required={false}
222
- />
223
- </FormField>
224
- <Card padding={[3, 3, 3]} radius={2} shadow={1} tone="neutral">
225
- <Stack space={3}>
226
- <Text size={1}>
227
- DRM (Digital Rights Management) provides an extra layer of content security for
228
- video content streamed from Mux. For additional information check out our{' '}
229
- <a
230
- href="https://www.mux.com/docs/guides/protect-videos-with-drm#play-drm-protected-videos"
231
- target="_blank"
232
- rel="noopener noreferrer"
233
- >
234
- DRM Guide
235
- </a>
236
- .
237
- </Text>
238
- <Text size={1}>
239
- <a
240
- href="https://www.mux.com/support/human"
241
- target="_blank"
242
- rel="noopener noreferrer"
243
- >
244
- Contact us
245
- </a>{' '}
246
- to get started using DRM.
247
- </Text>
248
- </Stack>
249
- </Card>
250
-
251
- <Inline space={2}>
252
- <Button
253
- text="Save"
254
- disabled={!dirty}
255
- loading={state.submitting}
256
- tone="primary"
257
- mode="default"
258
- type="submit"
259
- />
260
- <Button
261
- disabled={state.submitting}
262
- text="Cancel"
263
- mode="bleed"
264
- onClick={handleClose}
265
- />
266
- </Inline>
267
- {state.error && (
268
- <Card padding={[3, 3, 3]} radius={2} shadow={1} tone="critical">
269
- <Text>{state.error}</Text>
270
- </Card>
271
- )}
272
- </Stack>
273
- </form>
274
- </Box>
275
- </Dialog>
276
- )
277
- }
278
-
279
- // Wrapper component that manages its own dialog state (used in VideosBrowser)
280
- export default function ConfigureApi() {
281
- const [dialogOpen, setDialogOpen] = useDialogState()
282
- const secretDocumentValues = useSecretsDocumentValues()
283
-
284
- const openDialog = useCallback(() => setDialogOpen('secrets'), [setDialogOpen])
285
-
286
- if (dialogOpen === 'secrets') {
287
- return (
288
- <ConfigureApiDialog
289
- secrets={secretDocumentValues.value.secrets}
290
- setDialogState={setDialogOpen}
291
- />
292
- )
293
- }
294
-
295
- return <Button mode="bleed" text="Configure plugin" onClick={openDialog} />
296
- }