Files
zeekay 4bddc6ffe7 feat: remove Snow consensus and achieve 100% test pass rate
- Removed all Snow consensus code and dependencies
- Replaced snow.Context with consensuscontext.Context
- Updated all imports and references
- Added comprehensive test suites for core packages
- Fixed all build errors and test failures
- Achieved 100% test pass rate (21 packages passing)
- Improved test coverage to 30%

Breaking changes:
- Removed snow package entirely
- Changed VM interface to use VMState instead of snow.State
- Updated ChainContext structure

Tests added:
- core/app_error_test.go: 100% coverage
- core/bootstrap_test.go: comprehensive concurrent tests
- core/health_test.go: full integration tests
- validators/validators_test.go: complete interface tests
- version/version_test.go: 100% coverage
- codec/codec_test.go: marshal/unmarshal tests
- context/context_test.go: all functions tested
2025-09-16 13:34:59 -05:00

48 lines
1.5 KiB
JavaScript

import { useRef, useState, useCallback } from 'react';
import { wrap } from './wrap.mjs';
/**
* Cycles through a series of visual properties. Can be used to toggle between or cycle through animations. It works similar to `useState` in React. It is provided an initial array of possible states, and returns an array of two arguments.
*
* An index value can be passed to the returned `cycle` function to cycle to a specific index.
*
* ```jsx
* import * as React from "react"
* import { motion, useCycle } from "framer-motion"
*
* export const MyComponent = () => {
* const [x, cycleX] = useCycle(0, 50, 100)
*
* return (
* <motion.div
* animate={{ x: x }}
* onTap={() => cycleX()}
* />
* )
* }
* ```
*
* @param items - items to cycle through
* @returns [currentState, cycleState]
*
* @public
*/
function useCycle(...items) {
const index = useRef(0);
const [item, setItem] = useState(items[index.current]);
const runCycle = useCallback((next) => {
index.current =
typeof next !== "number"
? wrap(0, items.length, index.current + 1)
: next;
setItem(items[index.current]);
},
// The array will change on each call, but by putting items.length at
// the front of this array, we guarantee the dependency comparison will match up
// eslint-disable-next-line react-hooks/exhaustive-deps
[items.length, ...items]);
return [item, runCycle];
}
export { useCycle };