@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,114 @@
|
|
|
1
|
+
import { derived, get, writable, } from 'svelte/store';
|
|
2
|
+
import { onDestroy } from 'svelte';
|
|
3
|
+
import { useUploaderFiles, useUploaderI18n, useUploaderOptions, useUploaderRuntime, useUploaderSource, useUploaderTheme, } from '../context/uploader-context';
|
|
4
|
+
export var FacingMode;
|
|
5
|
+
(function (FacingMode) {
|
|
6
|
+
FacingMode["Environment"] = "environment";
|
|
7
|
+
FacingMode["User"] = "user";
|
|
8
|
+
})(FacingMode || (FacingMode = {}));
|
|
9
|
+
export default function useCameraUploader() {
|
|
10
|
+
const { core } = useUploaderRuntime();
|
|
11
|
+
const { setFiles } = useUploaderFiles();
|
|
12
|
+
const { setActiveSource } = useUploaderSource();
|
|
13
|
+
const { translations } = useUploaderI18n();
|
|
14
|
+
const props = useUploaderOptions();
|
|
15
|
+
const theme = useUploaderTheme();
|
|
16
|
+
// Mutable bindings — set by the component via bind:this
|
|
17
|
+
let videoEl = null;
|
|
18
|
+
const capturedUrl = writable('');
|
|
19
|
+
const facingMode = writable(FacingMode.Environment);
|
|
20
|
+
const stream = writable(null);
|
|
21
|
+
const newCameraSide = derived(facingMode, $fm => $fm === FacingMode.Environment ? 'front' : 'back');
|
|
22
|
+
function setVideoEl(el) {
|
|
23
|
+
videoEl = el;
|
|
24
|
+
}
|
|
25
|
+
async function startCamera() {
|
|
26
|
+
try {
|
|
27
|
+
const currentStream = get(stream);
|
|
28
|
+
if (currentStream) {
|
|
29
|
+
currentStream.getTracks().forEach(t => {
|
|
30
|
+
t.stop();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const currentFacing = get(facingMode);
|
|
34
|
+
const mediaStream = await navigator.mediaDevices.getUserMedia({
|
|
35
|
+
video: { facingMode: currentFacing },
|
|
36
|
+
});
|
|
37
|
+
stream.set(mediaStream);
|
|
38
|
+
if (videoEl) {
|
|
39
|
+
videoEl.srcObject = mediaStream;
|
|
40
|
+
await videoEl.play();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// upup-catch: getUserMedia/play() unavailable (denied permission or
|
|
45
|
+
// blocked autoplay) — leave stream null; the UI shows no preview.
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function stopCamera() {
|
|
49
|
+
stream.update(s => {
|
|
50
|
+
if (s)
|
|
51
|
+
s.getTracks().forEach(t => {
|
|
52
|
+
t.stop();
|
|
53
|
+
});
|
|
54
|
+
return null;
|
|
55
|
+
});
|
|
56
|
+
if (videoEl) {
|
|
57
|
+
videoEl.srcObject = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function capture() {
|
|
61
|
+
if (!videoEl)
|
|
62
|
+
return;
|
|
63
|
+
const canvas = document.createElement('canvas');
|
|
64
|
+
canvas.width = videoEl.videoWidth;
|
|
65
|
+
canvas.height = videoEl.videoHeight;
|
|
66
|
+
const ctx = canvas.getContext('2d');
|
|
67
|
+
if (!ctx)
|
|
68
|
+
return;
|
|
69
|
+
ctx.drawImage(videoEl, 0, 0);
|
|
70
|
+
const dataUrl = canvas.toDataURL('image/jpeg');
|
|
71
|
+
capturedUrl.set(dataUrl);
|
|
72
|
+
core?.emit('camera-capture', { dataUrl });
|
|
73
|
+
}
|
|
74
|
+
function clearUrl() {
|
|
75
|
+
capturedUrl.set('');
|
|
76
|
+
}
|
|
77
|
+
async function handleFetchImage() {
|
|
78
|
+
const currentUrl = get(capturedUrl);
|
|
79
|
+
if (!currentUrl)
|
|
80
|
+
return;
|
|
81
|
+
const response = await fetch(currentUrl);
|
|
82
|
+
const blob = await response.blob();
|
|
83
|
+
const file = new File([blob], `capture-${Date.now()}.jpg`, {
|
|
84
|
+
type: 'image/jpeg',
|
|
85
|
+
});
|
|
86
|
+
setFiles([file]);
|
|
87
|
+
capturedUrl.set('');
|
|
88
|
+
setActiveSource(undefined);
|
|
89
|
+
core?.emit('camera-confirm', { file });
|
|
90
|
+
}
|
|
91
|
+
function handleCameraSwitch() {
|
|
92
|
+
facingMode.update(fm => fm === FacingMode.Environment
|
|
93
|
+
? FacingMode.User
|
|
94
|
+
: FacingMode.Environment);
|
|
95
|
+
}
|
|
96
|
+
onDestroy(() => {
|
|
97
|
+
stopCamera();
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
setVideoEl,
|
|
101
|
+
capturedUrl,
|
|
102
|
+
facingMode,
|
|
103
|
+
newCameraSide,
|
|
104
|
+
startCamera,
|
|
105
|
+
stopCamera,
|
|
106
|
+
capture,
|
|
107
|
+
clearUrl,
|
|
108
|
+
handleFetchImage,
|
|
109
|
+
handleCameraSwitch,
|
|
110
|
+
translations,
|
|
111
|
+
props,
|
|
112
|
+
theme,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Readable } from 'svelte/store';
|
|
2
|
+
import { type DriveFile, type DriveFolder } from '@useupup/core';
|
|
3
|
+
import { type DriveBrowserState } from '@useupup/core/internal';
|
|
4
|
+
export interface UseDropboxReturn {
|
|
5
|
+
user: Readable<DriveBrowserState['user']>;
|
|
6
|
+
dropboxFiles: Readable<DriveBrowserState['folder']>;
|
|
7
|
+
logout: () => void;
|
|
8
|
+
authenticate: () => void;
|
|
9
|
+
token: Readable<'active' | undefined>;
|
|
10
|
+
isAuthenticated: Readable<DriveBrowserState['isAuthenticated']>;
|
|
11
|
+
isLoading: Readable<DriveBrowserState['isLoading']>;
|
|
12
|
+
path: Readable<DriveBrowserState['path']>;
|
|
13
|
+
setPath: (newPath: DriveFolder[]) => void;
|
|
14
|
+
handleClick: (file: DriveFile) => void;
|
|
15
|
+
selectedFiles: Readable<DriveBrowserState['selectedFiles']>;
|
|
16
|
+
showLoader: Readable<DriveBrowserState['showLoader']>;
|
|
17
|
+
handleSubmit: () => Promise<void>;
|
|
18
|
+
handleCancelDownload: () => void;
|
|
19
|
+
onSelectCurrentFolder: () => Promise<void>;
|
|
20
|
+
isClickLoading: Readable<DriveBrowserState['isClickLoading']>;
|
|
21
|
+
error: Readable<DriveBrowserState['error']>;
|
|
22
|
+
hasMore: Readable<DriveBrowserState['hasMore']>;
|
|
23
|
+
isLoadingMore: Readable<DriveBrowserState['isLoadingMore']>;
|
|
24
|
+
loadMore: () => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function useDropbox(): UseDropboxReturn;
|
|
27
|
+
export default useDropbox;
|
|
28
|
+
//# sourceMappingURL=useDropbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDropbox.d.ts","sourceRoot":"","sources":["../../src/composables/useDropbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,WAAW,EACnB,MAAM,eAAe,CAAA;AACtB,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,wBAAwB,CAAA;AAQ/B,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IACrC,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC/D,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAA;IACnD,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACtC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IACrD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC7D,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/C,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CA8D7C;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { onMount, onDestroy } from 'svelte';
|
|
2
|
+
import { derived } from 'svelte/store';
|
|
3
|
+
import { DROPBOX_DESCRIPTOR, } from '@useupup/core';
|
|
4
|
+
import { DriveBrowserController, } from '@useupup/core/internal';
|
|
5
|
+
import { useUploaderFiles, useUploaderRuntime, useUploaderSource, } from '../context/uploader-context';
|
|
6
|
+
import { toReadable } from '../lib/to-readable';
|
|
7
|
+
export function useDropbox() {
|
|
8
|
+
const { core } = useUploaderRuntime();
|
|
9
|
+
const { setActiveSource } = useUploaderSource();
|
|
10
|
+
const { setFiles } = useUploaderFiles();
|
|
11
|
+
if (!core)
|
|
12
|
+
throw new Error('useDropbox must be used inside an initialized <UpupUploader />');
|
|
13
|
+
const controller = new DriveBrowserController(core, DROPBOX_DESCRIPTOR, {
|
|
14
|
+
onFilesSelected: files => {
|
|
15
|
+
setFiles(files);
|
|
16
|
+
},
|
|
17
|
+
onClose: () => {
|
|
18
|
+
setActiveSource(undefined);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const state = toReadable(controller);
|
|
22
|
+
onMount(() => {
|
|
23
|
+
controller.init();
|
|
24
|
+
});
|
|
25
|
+
onDestroy(() => {
|
|
26
|
+
controller.destroy();
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
user: derived(state, $s => $s.user),
|
|
30
|
+
dropboxFiles: derived(state, $s => $s.folder),
|
|
31
|
+
logout: () => {
|
|
32
|
+
controller.signOut();
|
|
33
|
+
},
|
|
34
|
+
authenticate: () => {
|
|
35
|
+
controller.signIn();
|
|
36
|
+
},
|
|
37
|
+
token: derived(state, $s => $s.isAuthenticated ? 'active' : undefined),
|
|
38
|
+
isAuthenticated: derived(state, $s => $s.isAuthenticated),
|
|
39
|
+
isLoading: derived(state, $s => $s.isLoading),
|
|
40
|
+
path: derived(state, $s => $s.path),
|
|
41
|
+
setPath: (newPath) => {
|
|
42
|
+
controller.setPath(newPath);
|
|
43
|
+
},
|
|
44
|
+
handleClick: (file) => {
|
|
45
|
+
controller.handleClick(file);
|
|
46
|
+
},
|
|
47
|
+
selectedFiles: derived(state, $s => $s.selectedFiles),
|
|
48
|
+
showLoader: derived(state, $s => $s.showLoader),
|
|
49
|
+
handleSubmit: () => controller.handleSubmit(),
|
|
50
|
+
handleCancelDownload: () => {
|
|
51
|
+
controller.handleCancelDownload();
|
|
52
|
+
},
|
|
53
|
+
onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),
|
|
54
|
+
isClickLoading: derived(state, $s => $s.isClickLoading),
|
|
55
|
+
error: derived(state, $s => $s.error),
|
|
56
|
+
hasMore: derived(state, $s => $s.hasMore),
|
|
57
|
+
isLoadingMore: derived(state, $s => $s.isLoadingMore),
|
|
58
|
+
loadMore: () => controller.loadMore(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export default useDropbox;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Writable } from 'svelte/store';
|
|
2
|
+
import { deriveFetchedFileName } from '@useupup/core/internal';
|
|
3
|
+
export { deriveFetchedFileName };
|
|
4
|
+
export interface UseFetchFileByUrlReturn {
|
|
5
|
+
loading: Writable<boolean>;
|
|
6
|
+
fetchImage: (url: string) => Promise<File | undefined>;
|
|
7
|
+
}
|
|
8
|
+
export default function useFetchFileByUrl(): UseFetchFileByUrlReturn;
|
|
9
|
+
//# sourceMappingURL=useFetchFileByUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchFileByUrl.d.ts","sourceRoot":"","sources":["../../src/composables/useFetchFileByUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAM9D,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAEhC,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;CACzD;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,IAAI,uBAAuB,CA8BnE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { writable, get } from 'svelte/store';
|
|
2
|
+
import { deriveFetchedFileName } from '@useupup/core/internal';
|
|
3
|
+
import { useUploaderOptions, useUploaderRuntime, } from '../context/uploader-context';
|
|
4
|
+
export { deriveFetchedFileName };
|
|
5
|
+
export default function useFetchFileByUrl() {
|
|
6
|
+
const { core } = useUploaderRuntime();
|
|
7
|
+
const { onError } = useUploaderOptions();
|
|
8
|
+
const loading = writable(false);
|
|
9
|
+
async function fetchImage(url) {
|
|
10
|
+
if (get(loading))
|
|
11
|
+
return;
|
|
12
|
+
try {
|
|
13
|
+
loading.set(true);
|
|
14
|
+
const response = await fetch(url);
|
|
15
|
+
if (!response.ok) {
|
|
16
|
+
throw new Error(`Failed to fetch URL: ${response.status}`);
|
|
17
|
+
}
|
|
18
|
+
const blob = await response.blob();
|
|
19
|
+
const fileName = deriveFetchedFileName(url, response, blob);
|
|
20
|
+
const file = new File([blob], fileName, { type: blob.type });
|
|
21
|
+
core?.emit('url-fetch', { file });
|
|
22
|
+
return file;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
onError(error.message);
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
loading.set(false);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { loading, fetchImage };
|
|
33
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Readable } from 'svelte/store';
|
|
2
|
+
import { type DriveFile, type DriveFolder } from '@useupup/core';
|
|
3
|
+
import { type DriveBrowserState } from '@useupup/core/internal';
|
|
4
|
+
export interface UseGoogleDriveReturn {
|
|
5
|
+
user: Readable<DriveBrowserState['user']>;
|
|
6
|
+
googleFiles: Readable<DriveBrowserState['folder']>;
|
|
7
|
+
token: Readable<DriveBrowserState['token']>;
|
|
8
|
+
authCancelled: Readable<DriveBrowserState['authCancelled']>;
|
|
9
|
+
isAuthReady: Readable<DriveBrowserState['isAuthReady']>;
|
|
10
|
+
retryAuth: () => void;
|
|
11
|
+
handleSignOut: () => Promise<void>;
|
|
12
|
+
path: Readable<DriveBrowserState['path']>;
|
|
13
|
+
setPath: (newPath: DriveFolder[]) => void;
|
|
14
|
+
handleClick: (file: DriveFile) => void;
|
|
15
|
+
selectedFiles: Readable<DriveBrowserState['selectedFiles']>;
|
|
16
|
+
showLoader: Readable<DriveBrowserState['showLoader']>;
|
|
17
|
+
handleSubmit: () => Promise<void>;
|
|
18
|
+
handleCancelDownload: () => void;
|
|
19
|
+
onSelectCurrentFolder: () => Promise<void>;
|
|
20
|
+
isClickLoading: Readable<DriveBrowserState['isClickLoading']>;
|
|
21
|
+
error: Readable<DriveBrowserState['error']>;
|
|
22
|
+
hasMore: Readable<DriveBrowserState['hasMore']>;
|
|
23
|
+
isLoadingMore: Readable<DriveBrowserState['isLoadingMore']>;
|
|
24
|
+
loadMore: () => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function useGoogleDrive(): UseGoogleDriveReturn;
|
|
27
|
+
export default useGoogleDrive;
|
|
28
|
+
//# sourceMappingURL=useGoogleDrive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGoogleDrive.d.ts","sourceRoot":"","sources":["../../src/composables/useGoogleDrive.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,WAAW,EACnB,MAAM,eAAe,CAAA;AACtB,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,wBAAwB,CAAA;AAQ/B,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAA;IACvD,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACtC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IACrD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC7D,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/C,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED,wBAAgB,cAAc,IAAI,oBAAoB,CAoErD;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { onMount, onDestroy } from 'svelte';
|
|
2
|
+
import { derived } from 'svelte/store';
|
|
3
|
+
import { GOOGLE_DRIVE_DESCRIPTOR, } from '@useupup/core';
|
|
4
|
+
import { DriveBrowserController, } from '@useupup/core/internal';
|
|
5
|
+
import { useUploaderFiles, useUploaderRuntime, useUploaderSource, } from '../context/uploader-context';
|
|
6
|
+
import { toReadable } from '../lib/to-readable';
|
|
7
|
+
export function useGoogleDrive() {
|
|
8
|
+
const { core } = useUploaderRuntime();
|
|
9
|
+
const { setActiveSource } = useUploaderSource();
|
|
10
|
+
const { setFiles } = useUploaderFiles();
|
|
11
|
+
// core is always non-null inside <UpupUploader /> — the injection throws otherwise.
|
|
12
|
+
if (!core)
|
|
13
|
+
throw new Error('useGoogleDrive must be used inside an initialized <UpupUploader />');
|
|
14
|
+
const controller = new DriveBrowserController(core, GOOGLE_DRIVE_DESCRIPTOR, {
|
|
15
|
+
onFilesSelected: files => {
|
|
16
|
+
setFiles(files);
|
|
17
|
+
},
|
|
18
|
+
onClose: () => {
|
|
19
|
+
setActiveSource(undefined);
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
const state = toReadable(controller);
|
|
23
|
+
onMount(() => {
|
|
24
|
+
controller.init();
|
|
25
|
+
});
|
|
26
|
+
onDestroy(() => {
|
|
27
|
+
controller.destroy();
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
user: derived(state, $s => $s.user),
|
|
31
|
+
googleFiles: derived(state, $s => $s.folder),
|
|
32
|
+
token: derived(state, $s => $s.token),
|
|
33
|
+
authCancelled: derived(state, $s => $s.authCancelled),
|
|
34
|
+
isAuthReady: derived(state, $s => $s.isAuthReady),
|
|
35
|
+
retryAuth: () => {
|
|
36
|
+
controller.retryAuth();
|
|
37
|
+
},
|
|
38
|
+
// signOut is synchronous; the shared DriveBrowser prop contract is
|
|
39
|
+
// `() => Promise<void>`, so resolve explicitly rather than mark async.
|
|
40
|
+
handleSignOut: () => {
|
|
41
|
+
controller.signOut();
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
},
|
|
44
|
+
path: derived(state, $s => $s.path),
|
|
45
|
+
setPath: (newPath) => {
|
|
46
|
+
controller.setPath(newPath);
|
|
47
|
+
},
|
|
48
|
+
handleClick: (file) => {
|
|
49
|
+
controller.handleClick(file);
|
|
50
|
+
},
|
|
51
|
+
selectedFiles: derived(state, $s => $s.selectedFiles),
|
|
52
|
+
showLoader: derived(state, $s => $s.showLoader),
|
|
53
|
+
handleSubmit: () => controller.handleSubmit(),
|
|
54
|
+
handleCancelDownload: () => {
|
|
55
|
+
controller.handleCancelDownload();
|
|
56
|
+
},
|
|
57
|
+
onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),
|
|
58
|
+
isClickLoading: derived(state, $s => $s.isClickLoading),
|
|
59
|
+
error: derived(state, $s => $s.error),
|
|
60
|
+
hasMore: derived(state, $s => $s.hasMore),
|
|
61
|
+
isLoadingMore: derived(state, $s => $s.isLoadingMore),
|
|
62
|
+
loadMore: () => controller.loadMore(),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export default useGoogleDrive;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Readable } from 'svelte/store';
|
|
2
|
+
import { type DriveFile, type DriveFolder } from '@useupup/core';
|
|
3
|
+
import { type DriveBrowserState } from '@useupup/core/internal';
|
|
4
|
+
export interface UseOneDriveReturn {
|
|
5
|
+
user: Readable<DriveBrowserState['user']>;
|
|
6
|
+
oneDriveFiles: Readable<DriveBrowserState['folder']>;
|
|
7
|
+
signOut: () => void;
|
|
8
|
+
signIn: () => void;
|
|
9
|
+
authenticate: () => void;
|
|
10
|
+
token: Readable<'active' | undefined>;
|
|
11
|
+
isAuthenticated: Readable<DriveBrowserState['isAuthenticated']>;
|
|
12
|
+
isLoading: Readable<DriveBrowserState['isLoading']>;
|
|
13
|
+
path: Readable<DriveBrowserState['path']>;
|
|
14
|
+
setPath: (newPath: DriveFolder[]) => void;
|
|
15
|
+
handleClick: (file: DriveFile) => void;
|
|
16
|
+
selectedFiles: Readable<DriveBrowserState['selectedFiles']>;
|
|
17
|
+
showLoader: Readable<DriveBrowserState['showLoader']>;
|
|
18
|
+
handleSubmit: () => Promise<void>;
|
|
19
|
+
handleCancelDownload: () => void;
|
|
20
|
+
onSelectCurrentFolder: () => Promise<void>;
|
|
21
|
+
isClickLoading: Readable<DriveBrowserState['isClickLoading']>;
|
|
22
|
+
error: Readable<DriveBrowserState['error']>;
|
|
23
|
+
hasMore: Readable<DriveBrowserState['hasMore']>;
|
|
24
|
+
isLoadingMore: Readable<DriveBrowserState['isLoadingMore']>;
|
|
25
|
+
loadMore: () => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function useOneDrive(): UseOneDriveReturn;
|
|
28
|
+
export default useOneDrive;
|
|
29
|
+
//# sourceMappingURL=useOneDrive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOneDrive.d.ts","sourceRoot":"","sources":["../../src/composables/useOneDrive.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,WAAW,EACnB,MAAM,eAAe,CAAA;AACtB,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,wBAAwB,CAAA;AAQ/B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IACrC,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC/D,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAA;IACnD,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACtC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IACrD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC7D,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/C,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAA;IAC3D,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CAiE/C;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { onMount, onDestroy } from 'svelte';
|
|
2
|
+
import { derived } from 'svelte/store';
|
|
3
|
+
import { ONE_DRIVE_DESCRIPTOR, } from '@useupup/core';
|
|
4
|
+
import { DriveBrowserController, } from '@useupup/core/internal';
|
|
5
|
+
import { useUploaderFiles, useUploaderRuntime, useUploaderSource, } from '../context/uploader-context';
|
|
6
|
+
import { toReadable } from '../lib/to-readable';
|
|
7
|
+
export function useOneDrive() {
|
|
8
|
+
const { core } = useUploaderRuntime();
|
|
9
|
+
const { setActiveSource } = useUploaderSource();
|
|
10
|
+
const { setFiles } = useUploaderFiles();
|
|
11
|
+
if (!core)
|
|
12
|
+
throw new Error('useOneDrive must be used inside an initialized <UpupUploader />');
|
|
13
|
+
const controller = new DriveBrowserController(core, ONE_DRIVE_DESCRIPTOR, {
|
|
14
|
+
onFilesSelected: files => {
|
|
15
|
+
setFiles(files);
|
|
16
|
+
},
|
|
17
|
+
onClose: () => {
|
|
18
|
+
setActiveSource(undefined);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const state = toReadable(controller);
|
|
22
|
+
onMount(() => {
|
|
23
|
+
controller.init();
|
|
24
|
+
});
|
|
25
|
+
onDestroy(() => {
|
|
26
|
+
controller.destroy();
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
user: derived(state, $s => $s.user),
|
|
30
|
+
oneDriveFiles: derived(state, $s => $s.folder),
|
|
31
|
+
signOut: () => {
|
|
32
|
+
controller.signOut();
|
|
33
|
+
},
|
|
34
|
+
signIn: () => {
|
|
35
|
+
controller.signIn();
|
|
36
|
+
},
|
|
37
|
+
authenticate: () => {
|
|
38
|
+
controller.signIn();
|
|
39
|
+
},
|
|
40
|
+
token: derived(state, $s => $s.isAuthenticated ? 'active' : undefined),
|
|
41
|
+
isAuthenticated: derived(state, $s => $s.isAuthenticated),
|
|
42
|
+
isLoading: derived(state, $s => $s.isLoading),
|
|
43
|
+
path: derived(state, $s => $s.path),
|
|
44
|
+
setPath: (newPath) => {
|
|
45
|
+
controller.setPath(newPath);
|
|
46
|
+
},
|
|
47
|
+
handleClick: (file) => {
|
|
48
|
+
controller.handleClick(file);
|
|
49
|
+
},
|
|
50
|
+
selectedFiles: derived(state, $s => $s.selectedFiles),
|
|
51
|
+
showLoader: derived(state, $s => $s.showLoader),
|
|
52
|
+
handleSubmit: () => controller.handleSubmit(),
|
|
53
|
+
handleCancelDownload: () => {
|
|
54
|
+
controller.handleCancelDownload();
|
|
55
|
+
},
|
|
56
|
+
onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),
|
|
57
|
+
isClickLoading: derived(state, $s => $s.isClickLoading),
|
|
58
|
+
error: derived(state, $s => $s.error),
|
|
59
|
+
hasMore: derived(state, $s => $s.hasMore),
|
|
60
|
+
isLoadingMore: derived(state, $s => $s.isLoadingMore),
|
|
61
|
+
loadMore: () => controller.loadMore(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export default useOneDrive;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { UploadFile } from '@useupup/core';
|
|
2
|
+
type Options = {
|
|
3
|
+
processingEndpoint?: string | undefined;
|
|
4
|
+
onFileProcessed?: ((file: UploadFile, data: Record<string, unknown>) => void) | undefined;
|
|
5
|
+
onError?: ((error: Error) => void) | undefined;
|
|
6
|
+
processingTimeout?: number | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Manages server-sent event connections opened after each file upload.
|
|
10
|
+
* When `processingEndpoint` is set, calling `connectSSE(file)` opens an
|
|
11
|
+
* EventSource at `${processingEndpoint}?key=${file.key}`. The first message
|
|
12
|
+
* received is parsed as JSON and forwarded to `onFileProcessed`. The
|
|
13
|
+
* connection is closed automatically on message, error, or timeout.
|
|
14
|
+
*/
|
|
15
|
+
export interface UseSSEProcessingReturn {
|
|
16
|
+
connectSSE: (file: UploadFile) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function useSSEProcessing({ processingEndpoint, onFileProcessed, onError, processingTimeout, }: Options): UseSSEProcessingReturn;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=useSSEProcessing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSSEProcessing.d.ts","sourceRoot":"","sources":["../../src/composables/useSSEProcessing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,KAAK,OAAO,GAAG;IACX,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,eAAe,CAAC,EACZ,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC3E,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9C,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;CACzC;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,iBAA0B,GAC7B,EAAE,OAAO,GAAG,sBAAsB,CAuBlC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { onDestroy } from 'svelte';
|
|
2
|
+
import { SSEProcessor } from '@useupup/core/internal';
|
|
3
|
+
export function useSSEProcessing({ processingEndpoint, onFileProcessed, onError, processingTimeout = 60000, }) {
|
|
4
|
+
const processor = new SSEProcessor();
|
|
5
|
+
onDestroy(() => {
|
|
6
|
+
processor.destroy();
|
|
7
|
+
});
|
|
8
|
+
function connectSSE(file) {
|
|
9
|
+
const key = file.key;
|
|
10
|
+
if (!processingEndpoint || !onFileProcessed || !key)
|
|
11
|
+
return;
|
|
12
|
+
processor.subscribe(key, processingEndpoint, (data) => {
|
|
13
|
+
onFileProcessed(file, data);
|
|
14
|
+
}, (error) => onError?.(error), processingTimeout);
|
|
15
|
+
}
|
|
16
|
+
return { connectSSE };
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Readable } from 'svelte/store';
|
|
2
|
+
import { ServerModeDriveController } from '@useupup/core/internal';
|
|
3
|
+
import type { ServerModeProvider, ServerDriveFile } from '@useupup/core';
|
|
4
|
+
export type { ServerModeProvider, ServerDriveFile };
|
|
5
|
+
type ServerDriveSnapshot = ReturnType<ServerModeDriveController['getSnapshot']>;
|
|
6
|
+
export interface UseServerModeDriveReturn {
|
|
7
|
+
state: Readable<ServerDriveSnapshot['state']>;
|
|
8
|
+
folderId: Readable<ServerDriveSnapshot['folderId']>;
|
|
9
|
+
setFolderId: (id: string | undefined) => void;
|
|
10
|
+
search: Readable<ServerDriveSnapshot['search']>;
|
|
11
|
+
setSearch: (s: string) => void;
|
|
12
|
+
refresh: ServerModeDriveController['refresh'];
|
|
13
|
+
transfer: ServerModeDriveController['transfer'];
|
|
14
|
+
startAuth: ServerModeDriveController['startAuth'];
|
|
15
|
+
}
|
|
16
|
+
export declare function useServerModeDrive(provider: ServerModeProvider): UseServerModeDriveReturn;
|
|
17
|
+
//# sourceMappingURL=useServerModeDrive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useServerModeDrive.d.ts","sourceRoot":"","sources":["../../src/composables/useServerModeDrive.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIxE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAA;AAEnD,KAAK,mBAAmB,GAAG,UAAU,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAA;AAE/E,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7C,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAA;IACnD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/C,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAC7C,QAAQ,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAA;IAC/C,SAAS,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAA;CACpD;AAED,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,kBAAkB,GAC7B,wBAAwB,CA6B1B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { onMount, onDestroy } from 'svelte';
|
|
2
|
+
import { derived } from 'svelte/store';
|
|
3
|
+
import { ServerModeDriveController } from '@useupup/core/internal';
|
|
4
|
+
import { useUploaderRuntime } from '../context/uploader-context';
|
|
5
|
+
import { toReadable } from '../lib/to-readable';
|
|
6
|
+
export function useServerModeDrive(provider) {
|
|
7
|
+
const { serverUrl } = useUploaderRuntime();
|
|
8
|
+
const controller = new ServerModeDriveController({
|
|
9
|
+
provider,
|
|
10
|
+
serverUrl: () => serverUrl,
|
|
11
|
+
});
|
|
12
|
+
const state = toReadable(controller);
|
|
13
|
+
onMount(() => {
|
|
14
|
+
controller.init();
|
|
15
|
+
});
|
|
16
|
+
onDestroy(() => {
|
|
17
|
+
controller.destroy();
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
state: derived(state, $s => $s.state),
|
|
21
|
+
folderId: derived(state, $s => $s.folderId),
|
|
22
|
+
setFolderId(id) {
|
|
23
|
+
controller.setFolderId(id);
|
|
24
|
+
}, // svelte: NO auto-relist (matches today)
|
|
25
|
+
search: derived(state, $s => $s.search),
|
|
26
|
+
setSearch(s) {
|
|
27
|
+
controller.setSearch(s);
|
|
28
|
+
}, // svelte: NO auto-relist
|
|
29
|
+
refresh: controller.refresh.bind(controller),
|
|
30
|
+
transfer: controller.transfer.bind(controller),
|
|
31
|
+
startAuth: controller.startAuth.bind(controller),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FileSource } from '@useupup/core';
|
|
2
|
+
import { uploadSourceObject } from '../lib/constants';
|
|
3
|
+
type SourceOption = (typeof uploadSourceObject)[string] & {
|
|
4
|
+
name: string;
|
|
5
|
+
};
|
|
6
|
+
export interface UseSourceSelectorReturn {
|
|
7
|
+
chosenSources: SourceOption[];
|
|
8
|
+
handleSourceClick: (sourceId: FileSource) => void;
|
|
9
|
+
handleInputFileChange: (e: Event) => void;
|
|
10
|
+
}
|
|
11
|
+
export default function useSourceSelector(): UseSourceSelectorReturn;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=useSourceSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSourceSelector.d.ts","sourceRoot":"","sources":["../../src/composables/useSourceSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAQ1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,KAAK,YAAY,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1E,MAAM,WAAW,uBAAuB;IACpC,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,IAAI,CAAA;IACjD,qBAAqB,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;CAC5C;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,IAAI,uBAAuB,CAkCnE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { FileSource } from '@useupup/core';
|
|
2
|
+
import { useUploaderFiles, useUploaderI18n, useUploaderOptions, useUploaderRuntime, useUploaderSource, } from '../context/uploader-context';
|
|
3
|
+
import { uploadSourceObject } from '../lib/constants';
|
|
4
|
+
export default function useSourceSelector() {
|
|
5
|
+
const { core, openFilePicker } = useUploaderRuntime();
|
|
6
|
+
const { setActiveSource } = useUploaderSource();
|
|
7
|
+
const { setFiles } = useUploaderFiles();
|
|
8
|
+
const { translations } = useUploaderI18n();
|
|
9
|
+
const { sources, onIntegrationClick } = useUploaderOptions();
|
|
10
|
+
// translations and sources are plain (non-reactive) values in the Svelte context
|
|
11
|
+
// (ContextI18n = BaseContextI18n; ContextProps fields are plain JS values).
|
|
12
|
+
const chosenSources = Object.values(uploadSourceObject)
|
|
13
|
+
.filter(item => sources.includes(item.id))
|
|
14
|
+
.map(item => ({
|
|
15
|
+
...item,
|
|
16
|
+
name: translations[item.nameKey],
|
|
17
|
+
}));
|
|
18
|
+
function handleSourceClick(sourceId) {
|
|
19
|
+
onIntegrationClick(sourceId);
|
|
20
|
+
core?.emit('source-click', { sourceId });
|
|
21
|
+
if (sourceId === FileSource.LOCAL)
|
|
22
|
+
openFilePicker();
|
|
23
|
+
else
|
|
24
|
+
setActiveSource(sourceId);
|
|
25
|
+
}
|
|
26
|
+
function handleInputFileChange(e) {
|
|
27
|
+
const target = e.target;
|
|
28
|
+
setFiles(Array.from(target.files || []));
|
|
29
|
+
target.value = '';
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
chosenSources,
|
|
33
|
+
handleSourceClick,
|
|
34
|
+
handleInputFileChange,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Readable } from 'svelte/store';
|
|
2
|
+
export interface UseUploaderPanelReturn {
|
|
3
|
+
isDragging: Readable<boolean>;
|
|
4
|
+
absoluteIsDragging: Readable<boolean>;
|
|
5
|
+
absoluteHasBorder: Readable<boolean>;
|
|
6
|
+
handleDragOver: (e: DragEvent) => void;
|
|
7
|
+
handleDragLeave: (e: DragEvent) => void;
|
|
8
|
+
handleDrop: (e: DragEvent) => Promise<void>;
|
|
9
|
+
handlePaste: (e: ClipboardEvent) => void;
|
|
10
|
+
}
|
|
11
|
+
export default function useUploaderPanel(): UseUploaderPanelReturn;
|
|
12
|
+
//# sourceMappingURL=useUploaderPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUploaderPanel.d.ts","sourceRoot":"","sources":["../../src/composables/useUploaderPanel.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAUrD,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC7B,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;IACtC,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,WAAW,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;CAC3C;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,IAAI,sBAAsB,CA2CjE"}
|