UNPKG

variations

Version:

A React component library that enables rapid prototyping and exploration of UI variations.

45 lines (44 loc) 1.66 kB
import { ReactNode } from 'react'; export type VariationsPosition = "bottom-right" | "bottom-left" | "bottom-center" | "top-right" | "top-left" | "top-center" | "middle-right" | "middle-left"; export interface VariationsProps { label: string; children: ReactNode; isRoot?: boolean; } export interface VariationProps { label: string; children: ReactNode; } export interface VariationsControlsProps { position?: VariationsPosition; minimizedByDefault?: boolean; } export interface VariationNode<TGroup extends string = string, TId extends string = string> { id: TId; group: TGroup; children: Map<TGroup, VariationNode<TGroup, TId>>; } export interface VariationsContextType<TGroup extends string = string, TId extends string = string> { /** Map of group IDs to their active variation IDs */ activeIds: Map<TGroup, TId>; /** Set the active variation ID for a group */ setActiveId: (group: TGroup, variationId: TId) => void; /** Internal method to register a variation */ registerVariation: (group: TGroup, id: TId, label: string, groupLabel: string, parentId?: TId) => void; /** Map of variation IDs to their metadata */ variations: Map<TId, { group: TGroup; label: string; groupLabel: string; parentId?: TId; }>; /** Tree representation of active variations */ activeTree: VariationNode<TGroup, TId> | null; disableQueryString: boolean; } export interface VariationsStateContextType<TState = unknown> { /** Get the current state */ state: TState; /** Update the state */ setState: (updater: (prev: TState) => TState) => void; }