@useupup/svelte 3.3.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/LICENSE +21 -0
- package/README.md +60 -0
- package/dist/UpupUploader.svelte +96 -0
- package/dist/UpupUploader.svelte.d.ts +5 -0
- package/dist/UpupUploader.svelte.d.ts.map +1 -0
- package/dist/assets/logos.d.ts +5 -0
- package/dist/assets/logos.d.ts.map +1 -0
- package/dist/assets/logos.js +4 -0
- package/dist/components/AudioUploader.svelte +220 -0
- package/dist/components/AudioUploader.svelte.d.ts +4 -0
- package/dist/components/AudioUploader.svelte.d.ts.map +1 -0
- package/dist/components/AudioWaveform.svelte +72 -0
- package/dist/components/AudioWaveform.svelte.d.ts +7 -0
- package/dist/components/AudioWaveform.svelte.d.ts.map +1 -0
- package/dist/components/BoxUploader.svelte +17 -0
- package/dist/components/BoxUploader.svelte.d.ts +19 -0
- package/dist/components/BoxUploader.svelte.d.ts.map +1 -0
- package/dist/components/CameraUploader.svelte +140 -0
- package/dist/components/CameraUploader.svelte.d.ts +4 -0
- package/dist/components/CameraUploader.svelte.d.ts.map +1 -0
- package/dist/components/ClientBoxUploader.svelte +60 -0
- package/dist/components/ClientBoxUploader.svelte.d.ts +19 -0
- package/dist/components/ClientBoxUploader.svelte.d.ts.map +1 -0
- package/dist/components/ClientDropboxUploader.svelte +60 -0
- package/dist/components/ClientDropboxUploader.svelte.d.ts +19 -0
- package/dist/components/ClientDropboxUploader.svelte.d.ts.map +1 -0
- package/dist/components/ClientGoogleDriveUploader.svelte +57 -0
- package/dist/components/ClientGoogleDriveUploader.svelte.d.ts +19 -0
- package/dist/components/ClientGoogleDriveUploader.svelte.d.ts.map +1 -0
- package/dist/components/ClientOneDriveUploader.svelte +60 -0
- package/dist/components/ClientOneDriveUploader.svelte.d.ts +19 -0
- package/dist/components/ClientOneDriveUploader.svelte.d.ts.map +1 -0
- package/dist/components/DefaultAddMoreIcon.svelte +11 -0
- package/dist/components/DefaultAddMoreIcon.svelte.d.ts +8 -0
- package/dist/components/DefaultAddMoreIcon.svelte.d.ts.map +1 -0
- package/dist/components/DefaultLoaderIcon.svelte +5 -0
- package/dist/components/DefaultLoaderIcon.svelte.d.ts +19 -0
- package/dist/components/DefaultLoaderIcon.svelte.d.ts.map +1 -0
- package/dist/components/DropboxUploader.svelte +17 -0
- package/dist/components/DropboxUploader.svelte.d.ts +19 -0
- package/dist/components/DropboxUploader.svelte.d.ts.map +1 -0
- package/dist/components/EmptyIcon.svelte +3 -0
- package/dist/components/EmptyIcon.svelte.d.ts +19 -0
- package/dist/components/EmptyIcon.svelte.d.ts.map +1 -0
- package/dist/components/FileHero.svelte +152 -0
- package/dist/components/FileHero.svelte.d.ts +8 -0
- package/dist/components/FileHero.svelte.d.ts.map +1 -0
- package/dist/components/FileIcon.svelte +23 -0
- package/dist/components/FileIcon.svelte.d.ts +8 -0
- package/dist/components/FileIcon.svelte.d.ts.map +1 -0
- package/dist/components/FileItem.svelte +95 -0
- package/dist/components/FileItem.svelte.d.ts +12 -0
- package/dist/components/FileItem.svelte.d.ts.map +1 -0
- package/dist/components/FileList.svelte +442 -0
- package/dist/components/FileList.svelte.d.ts +4 -0
- package/dist/components/FileList.svelte.d.ts.map +1 -0
- package/dist/components/FilePreview.svelte +218 -0
- package/dist/components/FilePreview.svelte.d.ts +17 -0
- package/dist/components/FilePreview.svelte.d.ts.map +1 -0
- package/dist/components/FilePreviewPortal.svelte +189 -0
- package/dist/components/FilePreviewPortal.svelte.d.ts +12 -0
- package/dist/components/FilePreviewPortal.svelte.d.ts.map +1 -0
- package/dist/components/FilePreviewThumbnail.svelte +87 -0
- package/dist/components/FilePreviewThumbnail.svelte.d.ts +17 -0
- package/dist/components/FilePreviewThumbnail.svelte.d.ts.map +1 -0
- package/dist/components/FileRow.svelte +192 -0
- package/dist/components/FileRow.svelte.d.ts +10 -0
- package/dist/components/FileRow.svelte.d.ts.map +1 -0
- package/dist/components/GoogleDriveUploader.svelte +17 -0
- package/dist/components/GoogleDriveUploader.svelte.d.ts +19 -0
- package/dist/components/GoogleDriveUploader.svelte.d.ts.map +1 -0
- package/dist/components/Icon.svelte +24 -0
- package/dist/components/Icon.svelte.d.ts +10 -0
- package/dist/components/Icon.svelte.d.ts.map +1 -0
- package/dist/components/Icons.d.ts +10 -0
- package/dist/components/Icons.d.ts.map +1 -0
- package/dist/components/Icons.js +9 -0
- package/dist/components/ImageEditorStub.svelte +3 -0
- package/dist/components/ImageEditorStub.svelte.d.ts +19 -0
- package/dist/components/ImageEditorStub.svelte.d.ts.map +1 -0
- package/dist/components/OneDriveUploader.svelte +17 -0
- package/dist/components/OneDriveUploader.svelte.d.ts +19 -0
- package/dist/components/OneDriveUploader.svelte.d.ts.map +1 -0
- package/dist/components/ScreenCaptureUploader.svelte +254 -0
- package/dist/components/ScreenCaptureUploader.svelte.d.ts +4 -0
- package/dist/components/ScreenCaptureUploader.svelte.d.ts.map +1 -0
- package/dist/components/ServerModeDriveUploader.svelte +250 -0
- package/dist/components/ServerModeDriveUploader.svelte.d.ts +10 -0
- package/dist/components/ServerModeDriveUploader.svelte.d.ts.map +1 -0
- package/dist/components/SourceSelector.svelte +292 -0
- package/dist/components/SourceSelector.svelte.d.ts +19 -0
- package/dist/components/SourceSelector.svelte.d.ts.map +1 -0
- package/dist/components/SourceView.svelte +100 -0
- package/dist/components/SourceView.svelte.d.ts +4 -0
- package/dist/components/SourceView.svelte.d.ts.map +1 -0
- package/dist/components/TrashIcon.svelte +11 -0
- package/dist/components/TrashIcon.svelte.d.ts +8 -0
- package/dist/components/TrashIcon.svelte.d.ts.map +1 -0
- package/dist/components/UploaderPanel.svelte +363 -0
- package/dist/components/UploaderPanel.svelte.d.ts +4 -0
- package/dist/components/UploaderPanel.svelte.d.ts.map +1 -0
- package/dist/components/UrlUploader.svelte +71 -0
- package/dist/components/UrlUploader.svelte.d.ts +4 -0
- package/dist/components/UrlUploader.svelte.d.ts.map +1 -0
- package/dist/components/icons/AudioIcon.svelte +5 -0
- package/dist/components/icons/AudioIcon.svelte.d.ts +7 -0
- package/dist/components/icons/AudioIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/BoxIcon.svelte +5 -0
- package/dist/components/icons/BoxIcon.svelte.d.ts +7 -0
- package/dist/components/icons/BoxIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/CameraIcon.svelte +5 -0
- package/dist/components/icons/CameraIcon.svelte.d.ts +7 -0
- package/dist/components/icons/CameraIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/DropboxIcon.svelte +5 -0
- package/dist/components/icons/DropboxIcon.svelte.d.ts +7 -0
- package/dist/components/icons/DropboxIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/GoogleDriveIcon.svelte +5 -0
- package/dist/components/icons/GoogleDriveIcon.svelte.d.ts +7 -0
- package/dist/components/icons/GoogleDriveIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/LinkIcon.svelte +5 -0
- package/dist/components/icons/LinkIcon.svelte.d.ts +7 -0
- package/dist/components/icons/LinkIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/MyDeviceIcon.svelte +5 -0
- package/dist/components/icons/MyDeviceIcon.svelte.d.ts +7 -0
- package/dist/components/icons/MyDeviceIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/OneDriveIcon.svelte +5 -0
- package/dist/components/icons/OneDriveIcon.svelte.d.ts +7 -0
- package/dist/components/icons/OneDriveIcon.svelte.d.ts.map +1 -0
- package/dist/components/icons/ScreenCaptureIcon.svelte +5 -0
- package/dist/components/icons/ScreenCaptureIcon.svelte.d.ts +7 -0
- package/dist/components/icons/ScreenCaptureIcon.svelte.d.ts.map +1 -0
- package/dist/components/shared/DriveAuthFallback.svelte +60 -0
- package/dist/components/shared/DriveAuthFallback.svelte.d.ts +12 -0
- package/dist/components/shared/DriveAuthFallback.svelte.d.ts.map +1 -0
- package/dist/components/shared/DriveBrowser.svelte +209 -0
- package/dist/components/shared/DriveBrowser.svelte.d.ts +25 -0
- package/dist/components/shared/DriveBrowser.svelte.d.ts.map +1 -0
- package/dist/components/shared/DriveBrowserHeader.svelte +191 -0
- package/dist/components/shared/DriveBrowserHeader.svelte.d.ts +14 -0
- package/dist/components/shared/DriveBrowserHeader.svelte.d.ts.map +1 -0
- package/dist/components/shared/DriveBrowserIcon.svelte +39 -0
- package/dist/components/shared/DriveBrowserIcon.svelte.d.ts +8 -0
- package/dist/components/shared/DriveBrowserIcon.svelte.d.ts.map +1 -0
- package/dist/components/shared/DriveBrowserItem.svelte +63 -0
- package/dist/components/shared/DriveBrowserItem.svelte.d.ts +10 -0
- package/dist/components/shared/DriveBrowserItem.svelte.d.ts.map +1 -0
- package/dist/components/shared/FileSuccessCheck.svelte +47 -0
- package/dist/components/shared/FileSuccessCheck.svelte.d.ts +10 -0
- package/dist/components/shared/FileSuccessCheck.svelte.d.ts.map +1 -0
- package/dist/components/shared/ProgressBar.svelte +81 -0
- package/dist/components/shared/ProgressBar.svelte.d.ts +10 -0
- package/dist/components/shared/ProgressBar.svelte.d.ts.map +1 -0
- package/dist/components/shared/SourceViewContainer.svelte +27 -0
- package/dist/components/shared/SourceViewContainer.svelte.d.ts +10 -0
- package/dist/components/shared/SourceViewContainer.svelte.d.ts.map +1 -0
- package/dist/components/shared/UploaderHeader.svelte +156 -0
- package/dist/components/shared/UploaderHeader.svelte.d.ts +13 -0
- package/dist/components/shared/UploaderHeader.svelte.d.ts.map +1 -0
- package/dist/composables/use-tiles-per-row.d.ts +19 -0
- package/dist/composables/use-tiles-per-row.d.ts.map +1 -0
- package/dist/composables/use-tiles-per-row.js +30 -0
- package/dist/composables/useBox.d.ts +28 -0
- package/dist/composables/useBox.d.ts.map +1 -0
- package/dist/composables/useBox.js +61 -0
- package/dist/composables/useCameraUploader.d.ts +23 -0
- package/dist/composables/useCameraUploader.d.ts.map +1 -0
- package/dist/composables/useCameraUploader.js +114 -0
- package/dist/composables/useDropbox.d.ts +28 -0
- package/dist/composables/useDropbox.d.ts.map +1 -0
- package/dist/composables/useDropbox.js +61 -0
- package/dist/composables/useFetchFileByUrl.d.ts +9 -0
- package/dist/composables/useFetchFileByUrl.d.ts.map +1 -0
- package/dist/composables/useFetchFileByUrl.js +33 -0
- package/dist/composables/useGoogleDrive.d.ts +28 -0
- package/dist/composables/useGoogleDrive.d.ts.map +1 -0
- package/dist/composables/useGoogleDrive.js +65 -0
- package/dist/composables/useOneDrive.d.ts +29 -0
- package/dist/composables/useOneDrive.d.ts.map +1 -0
- package/dist/composables/useOneDrive.js +64 -0
- package/dist/composables/useSSEProcessing.d.ts +20 -0
- package/dist/composables/useSSEProcessing.d.ts.map +1 -0
- package/dist/composables/useSSEProcessing.js +17 -0
- package/dist/composables/useServerModeDrive.d.ts +17 -0
- package/dist/composables/useServerModeDrive.d.ts.map +1 -0
- package/dist/composables/useServerModeDrive.js +33 -0
- package/dist/composables/useSourceSelector.d.ts +13 -0
- package/dist/composables/useSourceSelector.d.ts.map +1 -0
- package/dist/composables/useSourceSelector.js +36 -0
- package/dist/composables/useUploaderPanel.d.ts +12 -0
- package/dist/composables/useUploaderPanel.d.ts.map +1 -0
- package/dist/composables/useUploaderPanel.js +43 -0
- package/dist/context/create-uploader-context.d.ts +4 -0
- package/dist/context/create-uploader-context.d.ts.map +1 -0
- package/dist/context/create-uploader-context.js +324 -0
- package/dist/context/source-view-header-extra.d.ts +14 -0
- package/dist/context/source-view-header-extra.d.ts.map +1 -0
- package/dist/context/source-view-header-extra.js +41 -0
- package/dist/context/uploader-context.d.ts +109 -0
- package/dist/context/uploader-context.d.ts.map +1 -0
- package/dist/context/uploader-context.js +96 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/lib/constants.d.ts +13 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +67 -0
- package/dist/lib/to-readable.d.ts +14 -0
- package/dist/lib/to-readable.d.ts.map +1 -0
- package/dist/lib/to-readable.js +15 -0
- package/dist/lib/view-mode.d.ts +24 -0
- package/dist/lib/view-mode.d.ts.map +1 -0
- package/dist/lib/view-mode.js +31 -0
- package/dist/shared/types.d.ts +15 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +1 -0
- package/dist/styles.d.ts +4 -0
- package/dist/tailwind-prefixed.css +2479 -0
- package/dist/tailwind.css +74 -0
- package/dist/use-upup-upload.d.ts +38 -0
- package/dist/use-upup-upload.d.ts.map +1 -0
- package/dist/use-upup-upload.js +81 -0
- package/package.json +101 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { useUploaderRuntime, useUploaderSource } from '../context/uploader-context'
|
|
3
|
+
import ClientOneDriveUploader from './ClientOneDriveUploader.svelte'
|
|
4
|
+
import ServerModeDriveUploader from './ServerModeDriveUploader.svelte'
|
|
5
|
+
|
|
6
|
+
const { mode } = useUploaderRuntime()
|
|
7
|
+
const { setActiveSource } = useUploaderSource()
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
{#if mode === 'server'}
|
|
11
|
+
<ServerModeDriveUploader
|
|
12
|
+
provider="one-drive"
|
|
13
|
+
onBack={() => setActiveSource(undefined)}
|
|
14
|
+
/>
|
|
15
|
+
{:else}
|
|
16
|
+
<ClientOneDriveUploader />
|
|
17
|
+
{/if}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const OneDriveUploader: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type OneDriveUploader = InstanceType<typeof OneDriveUploader>;
|
|
18
|
+
export default OneDriveUploader;
|
|
19
|
+
//# sourceMappingURL=OneDriveUploader.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OneDriveUploader.svelte.d.ts","sourceRoot":"","sources":["../../src/components/OneDriveUploader.svelte.ts"],"names":[],"mappings":"AAwBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,gBAAgB;;kBAA+E,CAAC;AACpF,KAAK,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onDestroy } from 'svelte'
|
|
3
|
+
import {
|
|
4
|
+
useUploaderFiles,
|
|
5
|
+
useUploaderSource,
|
|
6
|
+
useUploaderTheme,
|
|
7
|
+
} from '../context/uploader-context'
|
|
8
|
+
import { cn } from '@useupup/core/internal'
|
|
9
|
+
import SourceViewContainer from './shared/SourceViewContainer.svelte'
|
|
10
|
+
|
|
11
|
+
type RecordingState = 'idle' | 'recording' | 'recorded'
|
|
12
|
+
|
|
13
|
+
const { setFiles } = useUploaderFiles()
|
|
14
|
+
const { setActiveSource } = useUploaderSource()
|
|
15
|
+
const { isDark: dark } = useUploaderTheme()
|
|
16
|
+
|
|
17
|
+
let recordingState: RecordingState = $state('idle')
|
|
18
|
+
let duration = $state(0)
|
|
19
|
+
let videoUrl: string | null = $state(null)
|
|
20
|
+
let error: string | null = $state(null)
|
|
21
|
+
|
|
22
|
+
let mediaRecorder: MediaRecorder | null = null
|
|
23
|
+
const chunks: Blob[] = []
|
|
24
|
+
let timerHandle: ReturnType<typeof setInterval> | null = null
|
|
25
|
+
let streamRef: MediaStream | null = null
|
|
26
|
+
let previewEl: HTMLVideoElement | null = null
|
|
27
|
+
|
|
28
|
+
onDestroy(() => {
|
|
29
|
+
if (timerHandle) clearInterval(timerHandle)
|
|
30
|
+
if (videoUrl) URL.revokeObjectURL(videoUrl)
|
|
31
|
+
streamRef?.getTracks().forEach((t) => t.stop())
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
function bindPreview(node: HTMLVideoElement) {
|
|
35
|
+
previewEl = node
|
|
36
|
+
if (streamRef) {
|
|
37
|
+
node.srcObject = streamRef
|
|
38
|
+
void node.play()?.catch(() => {})
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
destroy() {
|
|
42
|
+
if (previewEl === node) previewEl = null
|
|
43
|
+
},
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function startRecording() {
|
|
48
|
+
try {
|
|
49
|
+
const stream = await navigator.mediaDevices.getDisplayMedia({
|
|
50
|
+
video: true,
|
|
51
|
+
audio: true,
|
|
52
|
+
})
|
|
53
|
+
streamRef = stream
|
|
54
|
+
chunks.length = 0
|
|
55
|
+
|
|
56
|
+
const videoTrack = stream.getVideoTracks()[0]
|
|
57
|
+
if (videoTrack) {
|
|
58
|
+
videoTrack.onended = () => {
|
|
59
|
+
if (mediaRecorder && mediaRecorder.state !== 'inactive') {
|
|
60
|
+
mediaRecorder.stop()
|
|
61
|
+
}
|
|
62
|
+
if (timerHandle) clearInterval(timerHandle)
|
|
63
|
+
recordingState = 'recorded'
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const recorder = new MediaRecorder(stream)
|
|
68
|
+
mediaRecorder = recorder
|
|
69
|
+
|
|
70
|
+
recorder.ondataavailable = (e) => {
|
|
71
|
+
if (e.data.size > 0) chunks.push(e.data)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
recorder.onstop = () => {
|
|
75
|
+
const blob = new Blob(chunks, { type: recorder.mimeType || 'video/webm' })
|
|
76
|
+
videoUrl = URL.createObjectURL(blob)
|
|
77
|
+
stream.getTracks().forEach((t) => t.stop())
|
|
78
|
+
if (previewEl) previewEl.srcObject = null
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
recorder.start()
|
|
82
|
+
recordingState = 'recording'
|
|
83
|
+
duration = 0
|
|
84
|
+
timerHandle = setInterval(() => { duration++ }, 1000)
|
|
85
|
+
} catch {
|
|
86
|
+
error = 'Screen sharing was cancelled or denied. Please try again.'
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function stopRecording() {
|
|
91
|
+
mediaRecorder?.stop()
|
|
92
|
+
if (timerHandle) clearInterval(timerHandle)
|
|
93
|
+
recordingState = 'recorded'
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function discardRecording() {
|
|
97
|
+
if (videoUrl) URL.revokeObjectURL(videoUrl)
|
|
98
|
+
videoUrl = null
|
|
99
|
+
duration = 0
|
|
100
|
+
recordingState = 'idle'
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function addRecording() {
|
|
104
|
+
if (!videoUrl) return
|
|
105
|
+
fetch(videoUrl)
|
|
106
|
+
.then((r) => r.blob())
|
|
107
|
+
.then((blob) => {
|
|
108
|
+
const file = new File([blob], `screen-recording-${Date.now()}.webm`, { type: blob.type })
|
|
109
|
+
setFiles([file])
|
|
110
|
+
setActiveSource(undefined)
|
|
111
|
+
})
|
|
112
|
+
.catch(() => {
|
|
113
|
+
// upup-catch: replaying an in-memory object URL cannot fail in practice; ignore
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function retryRecording() {
|
|
118
|
+
error = null
|
|
119
|
+
startRecording()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function formatTime(s: number) {
|
|
123
|
+
const m = Math.floor(s / 60)
|
|
124
|
+
const sec = s % 60
|
|
125
|
+
return `${m}:${sec.toString().padStart(2, '0')}`
|
|
126
|
+
}
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
{#if error}
|
|
130
|
+
<!-- Error state -->
|
|
131
|
+
<SourceViewContainer data-upup-slot="screen-capture-uploader">
|
|
132
|
+
<div class="upup-flex upup-flex-col upup-items-center upup-gap-3 upup-p-6 upup-text-center">
|
|
133
|
+
<p
|
|
134
|
+
class={cn('upup-text-sm upup-text-red-500', {
|
|
135
|
+
'upup-text-red-400': $dark,
|
|
136
|
+
})}
|
|
137
|
+
>
|
|
138
|
+
{error}
|
|
139
|
+
</p>
|
|
140
|
+
<button
|
|
141
|
+
type="button"
|
|
142
|
+
class={cn(
|
|
143
|
+
'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2 upup-text-sm upup-font-medium upup-text-white',
|
|
144
|
+
{
|
|
145
|
+
'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': $dark,
|
|
146
|
+
},
|
|
147
|
+
)}
|
|
148
|
+
onclick={retryRecording}
|
|
149
|
+
>
|
|
150
|
+
Try Again
|
|
151
|
+
</button>
|
|
152
|
+
</div>
|
|
153
|
+
</SourceViewContainer>
|
|
154
|
+
{:else}
|
|
155
|
+
<!-- Normal state -->
|
|
156
|
+
<SourceViewContainer data-upup-slot="screen-capture-uploader">
|
|
157
|
+
<div class="upup-flex upup-h-full upup-w-full upup-flex-col upup-items-center upup-justify-center upup-gap-4 upup-p-4">
|
|
158
|
+
<!-- Idle -->
|
|
159
|
+
{#if recordingState === 'idle'}
|
|
160
|
+
<div class="upup-flex upup-flex-col upup-items-center upup-gap-4">
|
|
161
|
+
<div class="upup-flex upup-h-20 upup-w-20 upup-items-center upup-justify-center upup-rounded-full upup-bg-[#0ea5e9]/20">
|
|
162
|
+
<svg
|
|
163
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
164
|
+
width="32"
|
|
165
|
+
height="32"
|
|
166
|
+
viewBox="0 0 24 24"
|
|
167
|
+
fill="none"
|
|
168
|
+
stroke={$dark ? '#38bdf8' : '#0284c7'}
|
|
169
|
+
stroke-width="2"
|
|
170
|
+
stroke-linecap="round"
|
|
171
|
+
stroke-linejoin="round"
|
|
172
|
+
>
|
|
173
|
+
<rect width="20" height="15" x="2" y="3" rx="2" />
|
|
174
|
+
<polyline points="8 21 16 21" />
|
|
175
|
+
<line x1="12" x2="12" y1="18" y2="21" />
|
|
176
|
+
</svg>
|
|
177
|
+
</div>
|
|
178
|
+
<button
|
|
179
|
+
type="button"
|
|
180
|
+
class={cn(
|
|
181
|
+
'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',
|
|
182
|
+
{
|
|
183
|
+
'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': $dark,
|
|
184
|
+
},
|
|
185
|
+
)}
|
|
186
|
+
onclick={startRecording}
|
|
187
|
+
>
|
|
188
|
+
Share Screen
|
|
189
|
+
</button>
|
|
190
|
+
</div>
|
|
191
|
+
{/if}
|
|
192
|
+
|
|
193
|
+
<!-- Recording -->
|
|
194
|
+
{#if recordingState === 'recording'}
|
|
195
|
+
<div class="upup-relative upup-flex upup-min-h-0 upup-w-full upup-max-w-md upup-flex-1">
|
|
196
|
+
<!-- svelte-ignore a11y_media_has_caption -->
|
|
197
|
+
<video
|
|
198
|
+
use:bindPreview
|
|
199
|
+
muted
|
|
200
|
+
class="upup-min-h-0 upup-w-full upup-flex-1 upup-rounded-lg upup-object-contain"
|
|
201
|
+
></video>
|
|
202
|
+
<!-- REC chip (states-tour-3 state E): red dot + label + timer.
|
|
203
|
+
The dot's pulse is fx-gated — under motion-off the dot
|
|
204
|
+
stays static so the recording status remains visible. -->
|
|
205
|
+
<div
|
|
206
|
+
data-upup-slot="screen-rec-chip"
|
|
207
|
+
class="upup-absolute upup-left-2.5 upup-top-2.5 upup-flex upup-items-center upup-gap-1.5 upup-rounded-md upup-bg-[#04080f]/60 upup-px-2 upup-py-1 upup-font-mono upup-text-[11px] upup-tabular-nums upup-text-[#fecdd3]"
|
|
208
|
+
>
|
|
209
|
+
<span class="upup-animate-fx-rec-pulse upup-h-2 upup-w-2 upup-rounded-full upup-bg-red-500"></span>
|
|
210
|
+
REC {formatTime(duration)}
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
<button
|
|
214
|
+
type="button"
|
|
215
|
+
class="upup-fx-press upup-rounded-lg upup-bg-red-500 upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-red-600"
|
|
216
|
+
onclick={stopRecording}
|
|
217
|
+
>
|
|
218
|
+
Stop Recording
|
|
219
|
+
</button>
|
|
220
|
+
{/if}
|
|
221
|
+
|
|
222
|
+
<!-- Recorded -->
|
|
223
|
+
{#if recordingState === 'recorded' && videoUrl}
|
|
224
|
+
<!-- svelte-ignore a11y_media_has_caption -->
|
|
225
|
+
<video
|
|
226
|
+
controls
|
|
227
|
+
src={videoUrl}
|
|
228
|
+
class="upup-w-full upup-max-w-md upup-min-h-0 upup-flex-1 upup-rounded-lg upup-object-contain"
|
|
229
|
+
></video>
|
|
230
|
+
<div class="upup-flex upup-gap-3">
|
|
231
|
+
<button
|
|
232
|
+
type="button"
|
|
233
|
+
class="upup-rounded-lg upup-bg-gray-500 upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-gray-600"
|
|
234
|
+
onclick={discardRecording}
|
|
235
|
+
>
|
|
236
|
+
Discard
|
|
237
|
+
</button>
|
|
238
|
+
<button
|
|
239
|
+
type="button"
|
|
240
|
+
class={cn(
|
|
241
|
+
'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',
|
|
242
|
+
{
|
|
243
|
+
'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': $dark,
|
|
244
|
+
},
|
|
245
|
+
)}
|
|
246
|
+
onclick={addRecording}
|
|
247
|
+
>
|
|
248
|
+
Add Recording
|
|
249
|
+
</button>
|
|
250
|
+
</div>
|
|
251
|
+
{/if}
|
|
252
|
+
</div>
|
|
253
|
+
</SourceViewContainer>
|
|
254
|
+
{/if}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenCaptureUploader.svelte.d.ts","sourceRoot":"","sources":["../../src/components/ScreenCaptureUploader.svelte.ts"],"names":[],"mappings":"AA4NA,QAAA,MAAM,qBAAqB,2DAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { writable, derived } from 'svelte/store'
|
|
3
|
+
import { untrack } from 'svelte'
|
|
4
|
+
import { errorCodeToMessageKey } from '@useupup/core'
|
|
5
|
+
import { cn } from '@useupup/core/internal'
|
|
6
|
+
import {
|
|
7
|
+
useUploaderI18n,
|
|
8
|
+
useUploaderOptions,
|
|
9
|
+
useUploaderTheme,
|
|
10
|
+
} from '../context/uploader-context'
|
|
11
|
+
import {
|
|
12
|
+
useServerModeDrive,
|
|
13
|
+
type ServerDriveFile,
|
|
14
|
+
type ServerModeProvider,
|
|
15
|
+
} from '../composables/useServerModeDrive'
|
|
16
|
+
import SourceViewContainer from './shared/SourceViewContainer.svelte'
|
|
17
|
+
import DriveAuthFallback from './shared/DriveAuthFallback.svelte'
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
provider,
|
|
21
|
+
onBack,
|
|
22
|
+
dataUpupSlot,
|
|
23
|
+
}: {
|
|
24
|
+
provider: ServerModeProvider
|
|
25
|
+
onBack?: () => void
|
|
26
|
+
dataUpupSlot?: string
|
|
27
|
+
} = $props()
|
|
28
|
+
|
|
29
|
+
const PROVIDER_LABEL: Record<ServerModeProvider, string> = {
|
|
30
|
+
'google-drive': 'Google Drive',
|
|
31
|
+
'one-drive': 'OneDrive',
|
|
32
|
+
'dropbox': 'Dropbox',
|
|
33
|
+
'box': 'Box',
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// provider and dataUpupSlot are static props (set once at call sites — never changed).
|
|
37
|
+
// untrack() tells Svelte we intentionally read their initial values outside reactive context.
|
|
38
|
+
const resolvedSlot = untrack(() => dataUpupSlot ?? `drive-browser-${provider}`)
|
|
39
|
+
const { state, search, setSearch, refresh, transfer, startAuth } =
|
|
40
|
+
untrack(() => useServerModeDrive(provider))
|
|
41
|
+
|
|
42
|
+
const { isDark: dark } = useUploaderTheme()
|
|
43
|
+
const { icons } = useUploaderOptions()
|
|
44
|
+
const { translator } = useUploaderI18n()
|
|
45
|
+
const Loader = icons.LoaderIcon
|
|
46
|
+
|
|
47
|
+
const errorText = derived(state, ($state) => {
|
|
48
|
+
if ($state.status !== 'error') return ''
|
|
49
|
+
return $state.code && translator
|
|
50
|
+
? translator(`errors.${errorCodeToMessageKey($state.code)}`, {
|
|
51
|
+
code: $state.code,
|
|
52
|
+
})
|
|
53
|
+
: $state.message
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
const selected = writable<Set<string>>(new Set())
|
|
57
|
+
const transferring = writable(false)
|
|
58
|
+
|
|
59
|
+
const isLoading = derived(state, ($state) =>
|
|
60
|
+
$state.status === 'loading' || $state.status === 'idle',
|
|
61
|
+
)
|
|
62
|
+
const files = derived(state, ($state): ServerDriveFile[] =>
|
|
63
|
+
$state.status === 'ready' ? $state.files : [],
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
function toggle(id: string) {
|
|
67
|
+
selected.update((prev) => {
|
|
68
|
+
const next = new Set(prev)
|
|
69
|
+
if (next.has(id)) next.delete(id)
|
|
70
|
+
else next.add(id)
|
|
71
|
+
return next
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function handleTransfer() {
|
|
76
|
+
transferring.set(true)
|
|
77
|
+
try {
|
|
78
|
+
for (const file of $files.filter((f) => $selected.has(f.id))) {
|
|
79
|
+
const result = await transfer(file)
|
|
80
|
+
if (result.status === 'reauth') {
|
|
81
|
+
startAuth()
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
selected.set(new Set())
|
|
86
|
+
onBack?.()
|
|
87
|
+
} finally {
|
|
88
|
+
transferring.set(false)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function formatBytes(bytes: number): string {
|
|
93
|
+
if (bytes < 1024) return `${bytes} B`
|
|
94
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`
|
|
95
|
+
if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`
|
|
96
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`
|
|
97
|
+
}
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
{#if $state.status === 'reauth'}
|
|
101
|
+
<DriveAuthFallback
|
|
102
|
+
providerName={PROVIDER_LABEL[provider]}
|
|
103
|
+
onRetry={startAuth}
|
|
104
|
+
/>
|
|
105
|
+
{:else}
|
|
106
|
+
<SourceViewContainer
|
|
107
|
+
isLoading={$isLoading}
|
|
108
|
+
data-upup-slot={resolvedSlot}
|
|
109
|
+
>
|
|
110
|
+
{#if $isLoading}
|
|
111
|
+
<Loader />
|
|
112
|
+
{:else}
|
|
113
|
+
<div
|
|
114
|
+
data-testid="upup-server-drive-browser"
|
|
115
|
+
class="upup-grid upup-h-full upup-w-full upup-grid-rows-[auto,1fr,auto] upup-overflow-auto"
|
|
116
|
+
>
|
|
117
|
+
<div
|
|
118
|
+
class={cn(
|
|
119
|
+
'upup-flex upup-items-center upup-gap-2 upup-border-b upup-px-3 upup-py-2.5',
|
|
120
|
+
$dark
|
|
121
|
+
? 'upup-border-white/[0.06] upup-text-[#e2e8f0]'
|
|
122
|
+
: 'upup-border-black/[0.06] upup-text-gray-800',
|
|
123
|
+
)}
|
|
124
|
+
data-upup-slot="drive-browser-header"
|
|
125
|
+
>
|
|
126
|
+
<span class="upup-text-sm upup-font-medium">
|
|
127
|
+
{PROVIDER_LABEL[provider]}
|
|
128
|
+
</span>
|
|
129
|
+
<input
|
|
130
|
+
type="search"
|
|
131
|
+
name="upup-drive-search"
|
|
132
|
+
aria-label="Search"
|
|
133
|
+
value={$search}
|
|
134
|
+
oninput={(e) => setSearch((e.target as HTMLInputElement).value)}
|
|
135
|
+
onkeydown={(e) => {
|
|
136
|
+
if (e.key === 'Enter') {
|
|
137
|
+
void refresh({ search: (e.target as HTMLInputElement).value })
|
|
138
|
+
}
|
|
139
|
+
}}
|
|
140
|
+
placeholder="Search…"
|
|
141
|
+
class={cn(
|
|
142
|
+
'upup-ml-auto upup-rounded upup-border upup-px-2 upup-py-1 upup-text-xs',
|
|
143
|
+
$dark
|
|
144
|
+
? 'upup-border-gray-700 upup-bg-gray-800 upup-text-gray-100'
|
|
145
|
+
: 'upup-border-gray-300 upup-bg-white',
|
|
146
|
+
)}
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="upup-overflow-auto upup-p-2">
|
|
150
|
+
{#if $state.status === 'error'}
|
|
151
|
+
<p
|
|
152
|
+
data-testid="upup-drive-error"
|
|
153
|
+
data-upup-slot="drive-error"
|
|
154
|
+
role="alert"
|
|
155
|
+
class={cn(
|
|
156
|
+
'upup-p-4 upup-text-sm',
|
|
157
|
+
$dark ? 'upup-text-red-400' : 'upup-text-red-600',
|
|
158
|
+
)}
|
|
159
|
+
>
|
|
160
|
+
{$errorText}
|
|
161
|
+
</p>
|
|
162
|
+
{/if}
|
|
163
|
+
{#each $files as file (file.id)}
|
|
164
|
+
<button
|
|
165
|
+
type="button"
|
|
166
|
+
data-upup-slot="drive-browser-item"
|
|
167
|
+
data-selected={$selected.has(file.id)}
|
|
168
|
+
class={cn(
|
|
169
|
+
'upup-fx-hover-lift upup-mb-1.5 upup-flex upup-w-full upup-items-center upup-gap-3 upup-rounded-[11px] upup-px-3 upup-py-2.5 upup-text-left upup-text-sm upup-ring-1',
|
|
170
|
+
$selected.has(file.id)
|
|
171
|
+
? 'upup-bg-[#0ea5e9]/10 upup-ring-[#38bdf8]/35'
|
|
172
|
+
: $dark
|
|
173
|
+
? 'upup-bg-white/[0.04] upup-text-[#e2e8f0] upup-ring-white/[0.06] hover:upup-bg-white/[0.07]'
|
|
174
|
+
: 'upup-bg-black/[0.03] upup-text-gray-800 upup-ring-black/[0.06] hover:upup-bg-black/[0.05]',
|
|
175
|
+
)}
|
|
176
|
+
onclick={() =>
|
|
177
|
+
file.isFolder
|
|
178
|
+
? void refresh({ folderId: file.id })
|
|
179
|
+
: toggle(file.id)}
|
|
180
|
+
>
|
|
181
|
+
<span
|
|
182
|
+
class="upup-flex upup-h-[30px] upup-w-[30px] upup-flex-none upup-items-center upup-justify-center upup-rounded-[8px] upup-bg-white/[0.05]"
|
|
183
|
+
aria-hidden="true"
|
|
184
|
+
>
|
|
185
|
+
{#if file.isFolder}
|
|
186
|
+
<svg
|
|
187
|
+
viewBox="0 0 24 24"
|
|
188
|
+
width="17"
|
|
189
|
+
height="17"
|
|
190
|
+
fill="none"
|
|
191
|
+
stroke="#38bdf8"
|
|
192
|
+
stroke-width="1.7"
|
|
193
|
+
stroke-linecap="round"
|
|
194
|
+
stroke-linejoin="round"
|
|
195
|
+
>
|
|
196
|
+
<path d="M3 7a2 2 0 0 1 2-2h4l2 2h6a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
|
197
|
+
</svg>
|
|
198
|
+
{:else}
|
|
199
|
+
<svg
|
|
200
|
+
viewBox="0 0 24 24"
|
|
201
|
+
width="17"
|
|
202
|
+
height="17"
|
|
203
|
+
fill="none"
|
|
204
|
+
stroke={$dark ? '#94a3b8' : '#64748b'}
|
|
205
|
+
stroke-width="1.6"
|
|
206
|
+
stroke-linecap="round"
|
|
207
|
+
stroke-linejoin="round"
|
|
208
|
+
>
|
|
209
|
+
<path d="M6 3h8l4 4v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z" />
|
|
210
|
+
<path d="M14 3v4h4" />
|
|
211
|
+
</svg>
|
|
212
|
+
{/if}
|
|
213
|
+
</span>
|
|
214
|
+
<span class="upup-flex-1 upup-truncate">{file.name}</span>
|
|
215
|
+
{#if file.size != null && !file.isFolder}
|
|
216
|
+
<span class="upup-text-xs upup-opacity-60">
|
|
217
|
+
{formatBytes(file.size)}
|
|
218
|
+
</span>
|
|
219
|
+
{/if}
|
|
220
|
+
</button>
|
|
221
|
+
{/each}
|
|
222
|
+
</div>
|
|
223
|
+
<div
|
|
224
|
+
class={cn(
|
|
225
|
+
'upup-flex upup-items-center upup-justify-between upup-gap-2 upup-border-t upup-p-3',
|
|
226
|
+
$dark ? 'upup-border-white/[0.06]' : 'upup-border-black/[0.06]',
|
|
227
|
+
)}
|
|
228
|
+
>
|
|
229
|
+
<button
|
|
230
|
+
type="button"
|
|
231
|
+
class="upup-text-sm upup-opacity-70 hover:upup-opacity-100"
|
|
232
|
+
onclick={() => onBack?.()}
|
|
233
|
+
>
|
|
234
|
+
Cancel
|
|
235
|
+
</button>
|
|
236
|
+
<button
|
|
237
|
+
type="button"
|
|
238
|
+
disabled={$selected.size === 0 || $transferring}
|
|
239
|
+
class="upup-fx-press upup-rounded-lg upup-bg-[#0ea5e9] upup-px-3 upup-py-1.5 upup-text-sm upup-font-medium upup-text-white hover:upup-bg-[#0284c7] disabled:upup-opacity-50"
|
|
240
|
+
onclick={handleTransfer}
|
|
241
|
+
>
|
|
242
|
+
{$transferring
|
|
243
|
+
? 'Uploading…'
|
|
244
|
+
: `Add files${$selected.size ? ` (${$selected.size})` : ''}`}
|
|
245
|
+
</button>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
{/if}
|
|
249
|
+
</SourceViewContainer>
|
|
250
|
+
{/if}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ServerModeProvider } from '../composables/useServerModeDrive';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
provider: ServerModeProvider;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
dataUpupSlot?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const ServerModeDriveUploader: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type ServerModeDriveUploader = ReturnType<typeof ServerModeDriveUploader>;
|
|
9
|
+
export default ServerModeDriveUploader;
|
|
10
|
+
//# sourceMappingURL=ServerModeDriveUploader.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerModeDriveUploader.svelte.d.ts","sourceRoot":"","sources":["../../src/components/ServerModeDriveUploader.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,EAGH,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAA;AAI3C,KAAK,gBAAgB,GAAI;IACtB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC;AAkLJ,QAAA,MAAM,uBAAuB,sDAAwC,CAAC;AACtE,KAAK,uBAAuB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,eAAe,uBAAuB,CAAC"}
|