UNPKG

use-temporal-state

Version:

A lightweight React hook for undo/redo state management with history compression.

132 lines (95 loc) โ€ข 2.75 kB
# useTemporalState A lightweight and type-safe React hook for managing undo/redo state transitions. `useTemporalState` enhances `useState` by preserving a history of past and future states, making it easy to implement features like undo/redo or state time-travel in your app. --- ## โœจ Features - ๐Ÿ” Undo & redo functionality - ๐Ÿง  Tracks past, present, and future states - ๐Ÿชถ Lightweight with no external dependencies - ๐Ÿ’ก TypeScript and JavaScript support - ๐Ÿ”ง Drop-in replacement for `useState` - ๐Ÿงน Optional compression for large histories --- ## ๐Ÿ“ฆ Installation ```bash npm install use-temporal-state ``` or ```bash yarn add use-temporal-state ``` --- ## ๐Ÿš€ Usage ```tsx import {useTemporalState} from 'use-temporal-state'; function TodoApp() { const { state: todos, set, undo, redo, canUndo, canRedo, } = useTemporalState<string[]>([], { limit: 100, // Optional: max history size shouldAddToHistory: (prev, next) => JSON.stringify(prev) !== JSON.stringify(next) }); const addTodo = (text: string) => { set([...todos, text]); }; return ( <div> <button onClick={undo} disabled={!canUndo}>Undo</button> <button onClick={redo} disabled={!canRedo}>Redo</button> <button onClick={() => addTodo('New Task')}>Add Todo</button> <ul> {todos.map((todo, index) => <li key={index}>{todo}</li>)} </ul> </div> ); } ``` --- ## ๐Ÿง  API ```ts const { state, // Current state value set, // Function to update state undo, // Go back to the previous state redo, // Go forward to the next state (if available) canUndo, // Boolean flag for undo availability canRedo, // Boolean flag for redo availability } = useTemporalState<T>(initialValue, options?); ``` ### Options ```ts type TemporalOptions<T> = { limit?: number; // Max length of history (default: 50) shouldAddToHistory?: (prev: T, next: T) => boolean; // Custom comparison to skip duplicate states }; ``` --- ## โœ… TypeScript Support Fully typed. Generics supported out-of-the-box: ```ts const { state, set, undo, redo, } = useTemporalState<MyCustomType[]>([]); ``` --- ## ๐Ÿ“ File Size Minimal footprint, no dependencies. Suitable for all React projects. --- ## ๐Ÿ“œ License MIT โ€” Free for personal and commercial use. --- ## ๐Ÿ’ฌ Feedback & Contributions Pull requests and suggestions are welcome! Star โญ the repo if you find it useful. --- ## ๐Ÿงช Coming Soon - `jumpTo(index)` to move to any historical state - State compression using deltas for deeply nested objects ---