36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import Root from './file-drop-zone.svelte';
|
|||
|
|
import Trigger from './file-drop-zone-trigger.svelte';
|
||
|
|
import Textarea from './file-drop-zone-textarea.svelte';
|
||
|
|
import type { FileDropZoneRootProps, FileDropZoneTriggerTextProps, FileRejectedReason } from './types';
|
||
|
|
|
||
|
|
export function displaySize(bytes: number): string {
|
||
|
|
if (bytes < KILOBYTE) return `${bytes.toFixed(0)} B`;
|
||
|
|
|
||
|
|
if (bytes < MEGABYTE) return `${(bytes / KILOBYTE).toFixed(0)} KB`;
|
||
|
|
|
||
|
|
if (bytes < GIGABYTE) return `${(bytes / MEGABYTE).toFixed(0)} MB`;
|
||
|
|
|
||
|
|
return `${(bytes / GIGABYTE).toFixed(0)} GB`;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Utilities for working with file sizes
|
||
|
|
export const BYTE = 1;
|
||
|
|
export const KILOBYTE = 1000;
|
||
|
|
export const MEGABYTE = 1000 * KILOBYTE;
|
||
|
|
export const GIGABYTE = 1000 * MEGABYTE;
|
||
|
|
|
||
|
|
// utilities for limiting accepted files
|
||
|
|
export const ACCEPT_IMAGE = 'image/*';
|
||
|
|
export const ACCEPT_VIDEO = 'video/*';
|
||
|
|
export const ACCEPT_AUDIO = 'audio/*';
|
||
|
|
|
||
|
|
export {
|
||
|
|
Root,
|
||
|
|
Trigger,
|
||
|
|
Textarea,
|
||
|
|
type FileDropZoneRootProps,
|
||
|
|
type FileDropZoneTriggerTextProps,
|
||
|
|
type FileRejectedReason
|
||
|
|
};
|
||
|
|
export { Root as FileDropZone, Trigger as FileDropZoneTrigger, Textarea as FileDropZoneTextarea };
|