import { Setter, Accessor, Signal } from 'solid-js'; import { CloneFn } from '../useCloned/index.js'; import '@solidjs-use/shared'; import 'solid-js/types/reactive/signal'; interface UseHistoryTravelRecord { snapshot: T; timestamp: number; } interface UseManualHistoryTravelOptions { /** * Maximum number of history to be kept. Default to unlimited. */ capacity?: number; /** * Clone when taking a snapshot, shortcut for dump: JSON.parse(JSON.stringify(value)). * Default to false * * @default false */ clone?: boolean | CloneFn; /** * Serialize data into the history */ dump?: (v: Raw) => Serialized; /** * Deserialize data from the history */ parse?: (v: Serialized) => Raw; /** * set data source */ setSource?: (setSource: Setter, v: Raw) => void; } interface UseManualHistoryTravelAccessorReturn { /** * Bypassed tracking Accessor from the argument */ source: Accessor; /** * An array of history records for undo, newest comes to first */ history: Accessor>>; /** * Last history point, source can be different if paused */ last: Accessor>; /** * Same as {@link UseManualHistoryTravelReturn.history | history} */ undoStack: Accessor>>; /** * Records array for redo */ redoStack: Accessor>>; /** * A Accessor representing if undo is possible (non empty undoStack) */ canUndo: Accessor; /** * A Accessor representing if redo is possible (non empty redoStack) */ canRedo: Accessor; /** * Clear all the history */ clear: () => void; /** * Create a new history record */ commit: () => void; } interface UseManualHistoryTravelSignalReturn extends UseManualHistoryTravelAccessorReturn { /** * Undo changes */ undo: () => void; /** * Redo changes */ redo: () => void; /** * Reset Accessor's value with latest history */ reset: () => void; } /** * Manually track the change history of a `Signal` or `Accessor` when the using calls `commit()`, when the parameter is a Signal, it provides undo and redo functionality. * * @see https://solidjs-use.github.io/solidjs-use/core/useManualHistoryTravel */ declare function useManualHistoryTravel(source: Accessor, options?: UseManualHistoryTravelOptions): UseManualHistoryTravelAccessorReturn; declare function useManualHistoryTravel(source: Signal, options?: UseManualHistoryTravelOptions): UseManualHistoryTravelSignalReturn; export { UseHistoryTravelRecord, UseManualHistoryTravelAccessorReturn, UseManualHistoryTravelOptions, UseManualHistoryTravelSignalReturn, useManualHistoryTravel };