@scaleflex/uploader 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/LICENSE +50 -0
- package/README.md +123 -0
- package/dist/auth/auth.service.d.ts +25 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/auth.types.d.ts +24 -0
- package/dist/auth/auth.types.d.ts.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/components/actions-bar.d.ts +17 -0
- package/dist/components/actions-bar.d.ts.map +1 -0
- package/dist/components/camera-dialog.d.ts +27 -0
- package/dist/components/camera-dialog.d.ts.map +1 -0
- package/dist/components/drop-zone.d.ts +28 -0
- package/dist/components/drop-zone.d.ts.map +1 -0
- package/dist/components/file-item.d.ts +12 -0
- package/dist/components/file-item.d.ts.map +1 -0
- package/dist/components/file-list.d.ts +8 -0
- package/dist/components/file-list.d.ts.map +1 -0
- package/dist/components/import-divider.d.ts +6 -0
- package/dist/components/import-divider.d.ts.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/provider-browser.d.ts +48 -0
- package/dist/components/provider-browser.d.ts.map +1 -0
- package/dist/components/screen-cast-dialog.d.ts +29 -0
- package/dist/components/screen-cast-dialog.d.ts.map +1 -0
- package/dist/components/search-provider-browser.d.ts +36 -0
- package/dist/components/search-provider-browser.d.ts.map +1 -0
- package/dist/components/source-pills.d.ts +11 -0
- package/dist/components/source-pills.d.ts.map +1 -0
- package/dist/components/success-card.d.ts +10 -0
- package/dist/components/success-card.d.ts.map +1 -0
- package/dist/components/url-dialog.d.ts +25 -0
- package/dist/components/url-dialog.d.ts.map +1 -0
- package/dist/connectors/companion-client.d.ts +58 -0
- package/dist/connectors/companion-client.d.ts.map +1 -0
- package/dist/connectors/connector.types.d.ts +56 -0
- package/dist/connectors/connector.types.d.ts.map +1 -0
- package/dist/connectors/index.d.ts +5 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/provider-registry.d.ts +8 -0
- package/dist/connectors/provider-registry.d.ts.map +1 -0
- package/dist/connectors/token-store.d.ts +10 -0
- package/dist/connectors/token-store.d.ts.map +1 -0
- package/dist/controllers/store.controller.d.ts +14 -0
- package/dist/controllers/store.controller.d.ts.map +1 -0
- package/dist/define.cjs +1 -0
- package/dist/define.d.ts +2 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +15 -0
- package/dist/engine/companion-upload.d.ts +23 -0
- package/dist/engine/companion-upload.d.ts.map +1 -0
- package/dist/engine/index.d.ts +2 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/upload-engine.d.ts +56 -0
- package/dist/engine/upload-engine.d.ts.map +1 -0
- package/dist/engine/xhr-upload.d.ts +25 -0
- package/dist/engine/xhr-upload.d.ts.map +1 -0
- package/dist/events/event-bus.d.ts +38 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/public-events.d.ts +23 -0
- package/dist/events/public-events.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/provider-browser-C-S_MPrC.js +832 -0
- package/dist/provider-browser-CmCwv0ph.cjs +581 -0
- package/dist/react.cjs +1 -0
- package/dist/react.d.ts +33 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +125 -0
- package/dist/search-provider-browser-DxmLznEB.cjs +390 -0
- package/dist/search-provider-browser-jCOer2Y9.js +537 -0
- package/dist/sfx-uploader-BVDK-9xi.cjs +2029 -0
- package/dist/sfx-uploader-C2lWIRnU.js +3789 -0
- package/dist/sfx-uploader.d.ts +131 -0
- package/dist/sfx-uploader.d.ts.map +1 -0
- package/dist/store/helpers.d.ts +16 -0
- package/dist/store/helpers.d.ts.map +1 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/store.d.ts +14 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.types.d.ts +77 -0
- package/dist/store/store.types.d.ts.map +1 -0
- package/dist/test-utils.d.ts +5 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/types/source.types.d.ts +12 -0
- package/dist/types/source.types.d.ts.map +1 -0
- package/dist/utils/file-utils.d.ts +14 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/validate.d.ts +6 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { LitElement, nothing } from 'lit';
|
|
2
|
+
import { UploadFile, UploadRestrictions, UploadResponse } from './store/store.types';
|
|
3
|
+
import { AuthConfig } from './auth/auth.types';
|
|
4
|
+
import { ConnectorConfig } from './connectors/connector.types';
|
|
5
|
+
export interface UploaderCallbacks {
|
|
6
|
+
onFileAdded?: (file: UploadFile) => void;
|
|
7
|
+
onFileRemoved?: (file: UploadFile) => void;
|
|
8
|
+
onFileRejected?: (file: UploadFile, reason: string) => void;
|
|
9
|
+
onUploadStarted?: (files: UploadFile[]) => void;
|
|
10
|
+
onUploadProgress?: (file: UploadFile, progress: number, speed: number) => void;
|
|
11
|
+
onUploadComplete?: (file: UploadFile, response: UploadResponse) => void;
|
|
12
|
+
onUploadError?: (file: UploadFile, error: Error) => void;
|
|
13
|
+
onUploadRetry?: (file: UploadFile, attempt: number) => void;
|
|
14
|
+
onAllComplete?: (successful: UploadFile[], failed: UploadFile[]) => void;
|
|
15
|
+
onTotalProgress?: (percentage: number, speed: number, eta: number) => void;
|
|
16
|
+
onBeforeUpload?: (files: UploadFile[]) => boolean | void;
|
|
17
|
+
onOpen?: () => void;
|
|
18
|
+
onClose?: () => void;
|
|
19
|
+
onCancel?: () => void;
|
|
20
|
+
onFilePreview?: (file: UploadFile) => void;
|
|
21
|
+
onFillMetadata?: (files: UploadFile[]) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface UploaderConfig {
|
|
24
|
+
auth: AuthConfig;
|
|
25
|
+
targetFolder?: string;
|
|
26
|
+
mode?: 'modal' | 'inline';
|
|
27
|
+
restrictions?: Partial<UploadRestrictions>;
|
|
28
|
+
concurrency?: number;
|
|
29
|
+
autoProceed?: boolean;
|
|
30
|
+
callbacks?: UploaderCallbacks;
|
|
31
|
+
connectors?: ConnectorConfig;
|
|
32
|
+
/** Show "Fill Metadata" button in the actions bar. */
|
|
33
|
+
showFillMetadata?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class SfxUploader extends LitElement {
|
|
36
|
+
static styles: import('lit').CSSResult;
|
|
37
|
+
config: UploaderConfig | null;
|
|
38
|
+
private _isOpen;
|
|
39
|
+
private _activeConnector;
|
|
40
|
+
private _showUrlDialog;
|
|
41
|
+
private _showCameraDialog;
|
|
42
|
+
private _showScreenCastDialog;
|
|
43
|
+
private _store;
|
|
44
|
+
private _storeCtrl;
|
|
45
|
+
private _engine;
|
|
46
|
+
private _cachedSources;
|
|
47
|
+
private _cachedSourcesConfig;
|
|
48
|
+
private _apiBase;
|
|
49
|
+
private _authHeaders;
|
|
50
|
+
private _authResolveId;
|
|
51
|
+
private _prevStoreState;
|
|
52
|
+
private _unsubStoreEvents;
|
|
53
|
+
constructor();
|
|
54
|
+
/** Open the uploader (modal mode). */
|
|
55
|
+
open(): void;
|
|
56
|
+
/** Close the uploader (modal mode). */
|
|
57
|
+
close(): void;
|
|
58
|
+
/** Start uploading all queued files. */
|
|
59
|
+
upload(): void;
|
|
60
|
+
/** Programmatically add files. */
|
|
61
|
+
addFiles(files: File[]): void;
|
|
62
|
+
/** Resume a paused upload (spec §13.2). */
|
|
63
|
+
resumeUpload(files?: UploadFile[]): void;
|
|
64
|
+
/** Cancel a paused upload (spec §13.2). */
|
|
65
|
+
cancelUpload(): void;
|
|
66
|
+
/** Get a snapshot of all current files. */
|
|
67
|
+
getFiles(): UploadFile[];
|
|
68
|
+
/** Get a single file by ID. */
|
|
69
|
+
getFile(fileId: string): UploadFile | undefined;
|
|
70
|
+
/** Statuses where meta/tags can still be modified before upload. */
|
|
71
|
+
private static readonly _MODIFIABLE_STATUSES;
|
|
72
|
+
/** Update metadata and/or tags for a single file. */
|
|
73
|
+
updateFileMeta(fileId: string, meta?: Record<string, unknown>, tags?: string[]): void;
|
|
74
|
+
/** Batch-update metadata and/or tags for multiple files. */
|
|
75
|
+
updateFilesMeta(updates: Array<{
|
|
76
|
+
fileId: string;
|
|
77
|
+
meta?: Record<string, unknown>;
|
|
78
|
+
tags?: string[];
|
|
79
|
+
}>): void;
|
|
80
|
+
updated(changed: Map<string, unknown>): void;
|
|
81
|
+
connectedCallback(): void;
|
|
82
|
+
disconnectedCallback(): void;
|
|
83
|
+
private _applyConfig;
|
|
84
|
+
private _resolveAuthAndEngine;
|
|
85
|
+
private _ensureEngine;
|
|
86
|
+
private _dispatchPublic;
|
|
87
|
+
/**
|
|
88
|
+
* React to store changes and dispatch public events + callbacks
|
|
89
|
+
* for file status transitions.
|
|
90
|
+
*/
|
|
91
|
+
private _onStoreChange;
|
|
92
|
+
/** Reserved source IDs that cannot be overridden by custom sources. */
|
|
93
|
+
private static readonly _RESERVED_IDS;
|
|
94
|
+
private get _mergedSources();
|
|
95
|
+
private get _phase();
|
|
96
|
+
private _processIncomingFiles;
|
|
97
|
+
private _onFilesSelected;
|
|
98
|
+
private _onSourceClick;
|
|
99
|
+
private _onUrlSubmit;
|
|
100
|
+
private _onUrlCancel;
|
|
101
|
+
private _onCameraCapture;
|
|
102
|
+
private _onCameraCancel;
|
|
103
|
+
private _onScreenCastCapture;
|
|
104
|
+
private _onScreenCastCancel;
|
|
105
|
+
private _onFileRemove;
|
|
106
|
+
private _onFilePreview;
|
|
107
|
+
private _onFillMetadata;
|
|
108
|
+
private _onFileRetry;
|
|
109
|
+
private _onRetryAll;
|
|
110
|
+
private _onClearAll;
|
|
111
|
+
private _onAddMore;
|
|
112
|
+
private _onUploadStart;
|
|
113
|
+
private _onUploadMore;
|
|
114
|
+
private _onConnectorFilesSelected;
|
|
115
|
+
private _onConnectorClose;
|
|
116
|
+
private _onConnectorBackdropClick;
|
|
117
|
+
private _onPrimaryAction;
|
|
118
|
+
/** Shared dismiss handler for X button, backdrop click, Escape */
|
|
119
|
+
private _onModalDismiss;
|
|
120
|
+
private _onModalBackdropClick;
|
|
121
|
+
private _onKeyDown;
|
|
122
|
+
render(): typeof nothing | import('lit-html').TemplateResult<1>;
|
|
123
|
+
private _renderHeader;
|
|
124
|
+
private _renderBody;
|
|
125
|
+
}
|
|
126
|
+
declare global {
|
|
127
|
+
interface HTMLElementTagNameMap {
|
|
128
|
+
'sfx-uploader': SfxUploader;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=sfx-uploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sfx-uploader.d.ts","sourceRoot":"","sources":["../src/sfx-uploader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Store } from './store';
|
|
2
|
+
import { UploaderState, UploadFile } from './store.types';
|
|
3
|
+
/**
|
|
4
|
+
* Immutably update a single file in the store's files Map.
|
|
5
|
+
* Always creates a new Map so that Store change detection works correctly.
|
|
6
|
+
*/
|
|
7
|
+
export declare function updateFile(store: Store<UploaderState>, fileId: string, patch: Partial<UploadFile>): void;
|
|
8
|
+
/**
|
|
9
|
+
* Immutably add a file to the store's files Map.
|
|
10
|
+
*/
|
|
11
|
+
export declare function addFile(store: Store<UploaderState>, file: UploadFile): void;
|
|
12
|
+
/**
|
|
13
|
+
* Immutably remove a file from the store's files Map.
|
|
14
|
+
*/
|
|
15
|
+
export declare function removeFile(store: Store<UploaderState>, fileId: string): void;
|
|
16
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/store/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GACzB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,EAC3B,IAAI,EAAE,UAAU,GACf,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,EAC3B,MAAM,EAAE,MAAM,GACb,IAAI,CAON"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Store } from './store';
|
|
2
|
+
import { UploaderState } from './store.types';
|
|
3
|
+
export declare function createStore(): Store<UploaderState>;
|
|
4
|
+
export { Store } from './store';
|
|
5
|
+
export { updateFile, addFile, removeFile } from './helpers';
|
|
6
|
+
export type { UploaderState, UploadFile, FileStatus, UploadResponse, QueueConfig, RetryConfig, UploadRestrictions } from './store.types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,WAAW,IAAI,KAAK,CAAC,aAAa,CAAC,CAkClD;AAED,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Listener<T> = (state: T, prevState: T) => void;
|
|
2
|
+
export declare class Store<T extends object> {
|
|
3
|
+
private state;
|
|
4
|
+
private listeners;
|
|
5
|
+
private _notifying;
|
|
6
|
+
private _pendingState;
|
|
7
|
+
constructor(initialState: T);
|
|
8
|
+
getState(): T;
|
|
9
|
+
setState(partial: Partial<T>): void;
|
|
10
|
+
subscribe(listener: Listener<T>): () => void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;AAEpD,qBAAa,KAAK,CAAC,CAAC,SAAS,MAAM;IACjC,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAA2B;gBAEpC,YAAY,EAAE,CAAC;IAI3B,QAAQ,IAAI,CAAC;IAIb,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAsBnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAK5C,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { RemoteFileInfo } from '../connectors/connector.types';
|
|
2
|
+
export type FileStatus = 'idle' | 'validating' | 'queued' | 'preparing' | 'uploading' | 'processing' | 'complete' | 'error' | 'retrying' | 'failed' | 'rejected' | 'cancelled';
|
|
3
|
+
export interface UploadFile {
|
|
4
|
+
id: string;
|
|
5
|
+
status: FileStatus;
|
|
6
|
+
file: File | null;
|
|
7
|
+
remoteUrl: string | null;
|
|
8
|
+
name: string;
|
|
9
|
+
size: number;
|
|
10
|
+
type: string;
|
|
11
|
+
previewUrl: string | null;
|
|
12
|
+
progress: number;
|
|
13
|
+
speed: number;
|
|
14
|
+
bytesUploaded: number;
|
|
15
|
+
error: string | null;
|
|
16
|
+
retryCount: number;
|
|
17
|
+
response: UploadResponse | null;
|
|
18
|
+
addedAt: number;
|
|
19
|
+
meta: Record<string, unknown>;
|
|
20
|
+
tags: string[];
|
|
21
|
+
remoteInfo: RemoteFileInfo | null;
|
|
22
|
+
}
|
|
23
|
+
export interface UploadResponse {
|
|
24
|
+
status: 'success' | 'error';
|
|
25
|
+
file: {
|
|
26
|
+
uuid: string;
|
|
27
|
+
name: string;
|
|
28
|
+
extension: string;
|
|
29
|
+
type: string;
|
|
30
|
+
size: number;
|
|
31
|
+
url: {
|
|
32
|
+
public: string;
|
|
33
|
+
cdn: string;
|
|
34
|
+
};
|
|
35
|
+
meta: Record<string, unknown>;
|
|
36
|
+
tags: string[];
|
|
37
|
+
info: {
|
|
38
|
+
img_w?: number;
|
|
39
|
+
img_h?: number;
|
|
40
|
+
};
|
|
41
|
+
created_at: string;
|
|
42
|
+
modified_at: string;
|
|
43
|
+
};
|
|
44
|
+
msg?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface RetryConfig {
|
|
47
|
+
maxRetries: number;
|
|
48
|
+
baseDelay: number;
|
|
49
|
+
maxDelay: number;
|
|
50
|
+
backoffFactor: number;
|
|
51
|
+
}
|
|
52
|
+
export interface QueueConfig {
|
|
53
|
+
concurrency: number;
|
|
54
|
+
autoProceed: boolean;
|
|
55
|
+
retryConfig: RetryConfig;
|
|
56
|
+
}
|
|
57
|
+
export interface UploadRestrictions {
|
|
58
|
+
maxFileSize: number | null;
|
|
59
|
+
maxTotalFilesSize: number | null;
|
|
60
|
+
maxNumberOfFiles: number | null;
|
|
61
|
+
minNumberOfFiles: number | null;
|
|
62
|
+
allowedFileTypes: string[] | null;
|
|
63
|
+
blockedFileTypes: string[] | null;
|
|
64
|
+
}
|
|
65
|
+
export interface UploaderState {
|
|
66
|
+
files: Map<string, UploadFile>;
|
|
67
|
+
queueConfig: QueueConfig;
|
|
68
|
+
isPaused: boolean;
|
|
69
|
+
restrictions: UploadRestrictions;
|
|
70
|
+
targetFolder: string;
|
|
71
|
+
totalProgress: number;
|
|
72
|
+
totalSpeed: number;
|
|
73
|
+
totalBytesUploaded: number;
|
|
74
|
+
totalBytes: number;
|
|
75
|
+
isUploading: boolean;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=store.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.types.d.ts","sourceRoot":"","sources":["../../src/store/store.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { UploadFile, UploadRestrictions, UploaderState } from './store/store.types';
|
|
2
|
+
export declare function makeUploadFile(overrides?: Partial<UploadFile>): UploadFile;
|
|
3
|
+
export declare function makeRestrictions(overrides?: Partial<UploadRestrictions>): UploadRestrictions;
|
|
4
|
+
export declare function makeDefaultState(overrides?: Partial<UploaderState>): UploaderState;
|
|
5
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzF,wBAAgB,cAAc,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAsB9E;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CAUhG;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,CAuBtF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Minimal public interface exposed to custom source onActivate callbacks. */
|
|
2
|
+
export interface UploaderHandle extends HTMLElement {
|
|
3
|
+
addFiles(files: File[]): void;
|
|
4
|
+
}
|
|
5
|
+
export interface SourceDef {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
icon: string;
|
|
9
|
+
fillIcon?: boolean;
|
|
10
|
+
onActivate?: (uploader: UploaderHandle) => void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=source.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.types.d.ts","sourceRoot":"","sources":["../../src/types/source.types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Generate a unique file ID. */
|
|
2
|
+
export declare function generateFileId(): string;
|
|
3
|
+
/** Format bytes into human-readable string. */
|
|
4
|
+
export declare function formatFileSize(bytes: number): string;
|
|
5
|
+
/** Detect file type category for icon/color styling. */
|
|
6
|
+
export declare function getFileCategory(file: {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
}): string;
|
|
10
|
+
/** Get file extension for display. */
|
|
11
|
+
export declare function getFileExtension(name: string): string;
|
|
12
|
+
/** Guess MIME type from a filename. */
|
|
13
|
+
export declare function guessMimeType(name: string): string;
|
|
14
|
+
//# sourceMappingURL=file-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAEA,iCAAiC;AACjC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQ5E;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAUD,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UploadRestrictions, UploadFile } from '../store/store.types';
|
|
2
|
+
/** Validate a File against restrictions. Returns error message or null. */
|
|
3
|
+
export declare function validateFile(file: File, restrictions: UploadRestrictions, existingFiles: Map<string, UploadFile>): string | null;
|
|
4
|
+
/** Build accept string for file input from restrictions. */
|
|
5
|
+
export declare function buildAcceptString(restrictions: UploadRestrictions): string;
|
|
6
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE3E,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,kBAAkB,EAChC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACrC,MAAM,GAAG,IAAI,CA6Cf;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,GAAG,MAAM,CAG1E"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scaleflex/uploader",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Framework-agnostic file upload widget for Scaleflex VXP",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./react": {
|
|
16
|
+
"types": "./dist/react.d.ts",
|
|
17
|
+
"import": "./dist/react.js",
|
|
18
|
+
"require": "./dist/react.cjs"
|
|
19
|
+
},
|
|
20
|
+
"./define": {
|
|
21
|
+
"types": "./dist/define.d.ts",
|
|
22
|
+
"import": "./dist/define.js",
|
|
23
|
+
"require": "./dist/define.cjs"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE",
|
|
30
|
+
"CHANGELOG.md"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"dev": "vite serve dev",
|
|
34
|
+
"dev:demo": "vite serve --config vite.demo.config.ts",
|
|
35
|
+
"build": "vite build",
|
|
36
|
+
"build:demo": "vite build --config vite.demo.config.ts",
|
|
37
|
+
"preview": "vite preview",
|
|
38
|
+
"typecheck": "tsc --noEmit",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"test:coverage": "vitest run --coverage",
|
|
42
|
+
"publish:github": "./scripts/publish-github.sh",
|
|
43
|
+
"push:source": "git push gitlab main"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"lit": "^3.2.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@playwright/test": "^1.58.2",
|
|
50
|
+
"@types/react": "^19.2.14",
|
|
51
|
+
"@types/react-dom": "^19.2.3",
|
|
52
|
+
"@vitest/coverage-v8": "^4.1.0",
|
|
53
|
+
"jsdom": "^29.0.0",
|
|
54
|
+
"typescript": "^5.5.3",
|
|
55
|
+
"vite": "^6.0.0",
|
|
56
|
+
"vite-plugin-dts": "^4.0.0",
|
|
57
|
+
"vitest": "^4.1.0"
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"react": ">=18",
|
|
61
|
+
"react-dom": ">=18"
|
|
62
|
+
},
|
|
63
|
+
"peerDependenciesMeta": {
|
|
64
|
+
"react": {
|
|
65
|
+
"optional": true
|
|
66
|
+
},
|
|
67
|
+
"react-dom": {
|
|
68
|
+
"optional": true
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"license": "SEE LICENSE IN LICENSE"
|
|
72
|
+
}
|