@fluritheme/spider
Version:
A tiny, expressive spider for your website. Delicate webs that follow DOM layers, blinking eyes, and playful pointer reactions.
69 lines • 3.19 kB
TypeScript
export type Corner = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
export interface SpiderOptions {
/** Defaults to document. Must be the current document or one of its elements. */
root?: Document | HTMLElement;
/** Explicit targets; otherwise uses [data-spider-web], then a small set of semantic elements. */
targets?: string | readonly HTMLElement[];
/** Maximum webs, including offscreen targets. 1–24; default 6. */
maxWebs?: number;
/** Maximum animated residents. 1–8; default 1. */
spiders?: number;
/** Web span in CSS pixels; responsive size is capped by each target. 40–240; default 112. */
webSize?: number;
/** Arrive from above on silk, or appear immediately. Default 'silk'. */
entrance?: 'silk' | 'appear';
/** Cross-thread density, 0–1. Default 0.7. */
webDensity?: number;
/** Explore the document, weave nets, and hide behind real elements. Default true. */
roam?: boolean;
/** Roaming area: whole document (default) or the supplied root's rectangle. */
territory?: 'page' | 'root';
/** CSS selector for objects the spider can shelter behind. */
objects?: string;
/** Spider scale. 0.5–2; default 1. */
size?: number;
/** Movement speed. 0.25–3; default 1. */
speed?: number;
/** Pointer fear radius in CSS pixels. 0 disables fear. 0–300; default 110. */
fearRadius?: number;
/** 'auto' adapts corner silk and keeps the spider's sable palette stable. */
color?: string;
/** Web opacity, 0–1; default 0.4. */
webOpacity?: number;
/** Global overlay stacking level. Default 100. Native top-layer dialogs remain above it. */
zIndex?: number;
/** 'system' stops animation and reactions when reduced motion is requested; default 'system'. */
motion?: 'system' | 'full' | 'none';
/** Animate each web being woven. Default true. */
weave?: boolean;
/** Automatically observe DOM changes and periodically refresh moving targets. Default true. */
observe?: boolean;
}
export interface SpiderSnapshot {
readonly state: 'running' | 'paused' | 'destroyed' | 'idle';
readonly reducedMotion: boolean;
readonly webs: number;
readonly spiders: readonly {
x: number;
y: number;
scared: boolean;
visible: boolean;
threads: number;
behavior: 'descending' | 'exploring' | 'weaving' | 'hiding' | 'resting' | 'fleeing' | 'hanging';
}[];
}
export type SpiderTuning = Pick<SpiderOptions, 'size' | 'speed' | 'fearRadius' | 'webOpacity' | 'webDensity' | 'webSize' | 'color'>;
export interface SpiderController {
/** Re-measure targets, clipping, stacking, and silk attachments. */
refresh(): void;
/** Remove all silk. The resident can begin weaving again afterward. */
clearWebs(): void;
/** Change appearance and behavior without removing existing silk. */
update(options: SpiderTuning): void;
pause(): void;
resume(): void;
/** Remove the canvas, listeners, observers, and scheduled frames. Safe to call twice. */
destroy(): void;
getState(): SpiderSnapshot;
}
//# sourceMappingURL=types.d.ts.map