@tinacms/toolkit
Version:
Tina is a lightweight but powerful toolkit for creating a site editing ui with javascript components. Tina surfaces superpowers for dev’s to create, expand on and customize a simple yet intuitive ui for editing content.
138 lines (134 loc) • 3.28 kB
TypeScript
/**
*/
import { EventBus } from './event';
/**
* Represents an individual file in the MediaStore
*/
export interface Media {
type: 'file' | 'dir';
/**
* A unique identifier for this file.
*/
id: string;
/**
* The name of the file.
*/
filename: string;
/**
* The directory where the file is stored.
*/
directory: string;
/**
* A url that provides an image of the media file
*/
src?: string;
/**
* A url that provides a smaller image of the media file
*/
thumbnails?: {
[name: string]: string;
};
}
export interface MediaUploadOptions {
/**
* The directory where the file should be stored.
*/
directory: string;
/**
* The File to be uploaded.
*/
file: File;
}
/**
* Represents some external service for storing and
* managing media.
*/
export interface MediaStore {
/**
* The [input accept string](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept)
* that describes what kind of files the Media Store will accept.
*/
accept: string;
/**
* Uploads a set of files to the Media Store and
* returns a Promise containing the Media objects
* for those files.
*/
persist(files: MediaUploadOptions[]): Promise<Media[]>;
/**
* Delete a media object from the store.
*/
delete(media: Media): Promise<void>;
/**
* Lists all media in a specific directory.
*/
list(options?: MediaListOptions): Promise<MediaList>;
}
export declare type MediaListOffset = string | number;
/**
* The options available when listing media.
*/
export interface MediaListOptions {
directory?: string;
limit?: number;
offset?: MediaListOffset;
thumbnailSizes?: {
w: number;
h: number;
}[];
}
/**
* The response returned from listing media.
*/
export interface MediaList {
items: Media[];
nextOffset?: MediaListOffset;
}
/**
* The central object for all things media.
*
* Meant to be placed directly on the `cms`
*
* ```ts
* cms.media = new MediaManager({
* accept: '*',
* async persist(files) {
* // do something
* }
* })
* ```
*/
export declare class MediaManager implements MediaStore {
store: MediaStore;
private events;
private _pageSize;
constructor(store: MediaStore, events: EventBus);
get isConfigured(): boolean;
get pageSize(): number;
set pageSize(pageSize: number);
open(options?: SelectMediaOptions): void;
get accept(): string;
persist(files: MediaUploadOptions[]): Promise<Media[]>;
delete(media: Media): Promise<void>;
list(options: MediaListOptions): Promise<MediaList>;
}
export interface SelectMediaOptions {
allowDelete?: boolean;
directory?: string;
onSelect?(media: Media): void;
}
interface MediaListErrorConfig {
title: string;
message: string;
docsLink: string;
}
export declare class MediaListError extends Error {
ERR_TYPE: string;
title: string;
docsLink: string;
constructor(config: MediaListErrorConfig);
}
export declare const E_UNAUTHORIZED: MediaListError;
export declare const E_BAD_ROUTE: MediaListError;
export declare const E_DEFAULT: MediaListError;
export {};