react-inlinesvg
Version:
An SVG loader for React
146 lines (144 loc) • 3.94 kB
text/typescript
import { ReactNode, Ref, SVGProps } from "react";
//#region src/config.d.ts
declare const STATUS: {
readonly IDLE: "idle";
readonly LOADING: "loading";
readonly LOADED: "loaded";
readonly FAILED: "failed";
readonly READY: "ready";
readonly UNSUPPORTED: "unsupported";
};
//#endregion
//#region src/types.d.ts
/**
* Called when loading the SVG fails.
*/
type ErrorCallback = (error: Error | FetchError) => void;
/**
* Called when the SVG loads successfully.
*/
type LoadCallback = (src: string, isCached: boolean) => void;
/**
* Pre-processes the SVG string before parsing.
* Must return a string.
*/
type PreProcessorCallback = (code: string) => string;
type Props = Simplify<Omit<SVGProps<SVGElement>, 'onLoad' | 'onError' | 'ref'> & {
/**
* A URL to prepend to url() references inside the SVG when using `uniquifyIDs`.
* Only required if your page uses an HTML `<base>` tag.
*/
baseURL?: string;
/**
* Cache remote SVGs in memory.
*
* When used with the CacheProvider, requests are also persisted in the browser cache.
* @default true
*/
cacheRequests?: boolean;
/**
* Fallback content rendered on fetch error or unsupported browser.
*/
children?: ReactNode;
/**
* A description for the SVG.
* Overrides an existing `<desc>` tag.
*/
description?: string;
/**
* Custom options for the fetch request.
*/
fetchOptions?: RequestInit;
/**
* A ref to the rendered SVG element.
* Not available on initial render — use `onLoad` instead.
*/
innerRef?: Ref<SVGElement | null>;
/**
* A component shown while the SVG is loading.
*/
loader?: ReactNode;
/**
* Called when loading the SVG fails.
* Receives an `Error` or `FetchError`.
*/
onError?: ErrorCallback;
/**
* Called when the SVG loads successfully.
* Receives the `src` and an `isCached` flag.
*/
onLoad?: LoadCallback;
/**
* A function to pre-process the SVG string before parsing.
* Must return a string.
*/
preProcessor?: PreProcessorCallback;
/**
* The SVG to load.
* Accepts a URL or path, a data URI (base64 or URL-encoded), or a raw SVG string.
*/
src: string;
/**
* A title for the SVG. Overrides an existing `<title>` tag.
* Pass `null` to remove it.
*/
title?: string | null;
/**
* A string to use with `uniquifyIDs`.
* @default random 8-character alphanumeric string
*/
uniqueHash?: string;
/**
* Create unique IDs for each icon.
* @default false
*/
uniquifyIDs?: boolean;
}>;
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
type Status = (typeof STATUS)[keyof typeof STATUS];
interface FetchError extends Error {
code: string;
errno: string;
message: string;
type: string;
}
interface State {
content: string;
element: ReactNode;
isCached: boolean;
status: Status;
}
interface StorageItem {
content: string;
error?: Error;
status: Status;
}
//#endregion
//#region src/modules/cache.d.ts
interface CacheStoreOptions {
name?: string;
persistent?: boolean;
}
declare class CacheStore {
private cacheApi;
private readonly cacheStore;
private readonly subscribers;
isReady: boolean;
constructor(options?: CacheStoreOptions);
onReady(callback: () => void): () => void;
private waitForReady;
get(url: string, fetchOptions?: RequestInit): Promise<string>;
getContent(url: string): string;
set(url: string, data: StorageItem): void;
isCached(url: string): boolean;
private fetchAndCache;
private fetchFromPersistentCache;
private handleLoading;
keys(): Array<string>;
data(): Array<Record<string, StorageItem>>;
delete(url: string): Promise<void>;
clear(): Promise<void>;
}
//#endregion
export { PreProcessorCallback as a, State as c, LoadCallback as i, Status as l, ErrorCallback as n, Props as o, FetchError as r, Simplify as s, CacheStore as t, StorageItem as u };
//# sourceMappingURL=cache-DdM7QpJp.d.cts.map