react-simple-animate
Advanced tools
+7
-7
@@ -240,3 +240,3 @@ import * as React from 'react'; | ||
| React.useEffect(() => { | ||
| if ((onCompleteTimeRef.current || complete) && isPlaying) { | ||
| if ((onComplete || complete) && isPlaying) { | ||
| onCompleteTimeRef.current = setTimeout(() => { | ||
@@ -247,6 +247,6 @@ if (onComplete) { | ||
| if (complete) { | ||
| setAnimate({ | ||
| setAnimate((animate) => ({ | ||
| ...animate, | ||
| style: complete, | ||
| }); | ||
| })); | ||
| } | ||
@@ -256,3 +256,3 @@ }, secToMs(delay + duration)); | ||
| return () => onCompleteTimeRef.current && clearTimeout(onCompleteTimeRef.current); | ||
| }, [isPlaying]); | ||
| }, [animate, complete, delay, duration, isPlaying, onComplete]); | ||
| return { | ||
@@ -262,3 +262,3 @@ isPlaying, | ||
| play: React.useCallback((isPlaying) => { | ||
| setAnimate({ | ||
| setAnimate((animate) => ({ | ||
| ...animate, | ||
@@ -270,4 +270,4 @@ style: { | ||
| isPlaying, | ||
| }); | ||
| }, []), | ||
| })); | ||
| }, [end, start, transition]), | ||
| }; | ||
@@ -274,0 +274,0 @@ } |
+7
-7
@@ -264,3 +264,3 @@ 'use strict'; | ||
| React__namespace.useEffect(() => { | ||
| if ((onCompleteTimeRef.current || complete) && isPlaying) { | ||
| if ((onComplete || complete) && isPlaying) { | ||
| onCompleteTimeRef.current = setTimeout(() => { | ||
@@ -271,6 +271,6 @@ if (onComplete) { | ||
| if (complete) { | ||
| setAnimate({ | ||
| setAnimate((animate) => ({ | ||
| ...animate, | ||
| style: complete, | ||
| }); | ||
| })); | ||
| } | ||
@@ -280,3 +280,3 @@ }, secToMs(delay + duration)); | ||
| return () => onCompleteTimeRef.current && clearTimeout(onCompleteTimeRef.current); | ||
| }, [isPlaying]); | ||
| }, [animate, complete, delay, duration, isPlaying, onComplete]); | ||
| return { | ||
@@ -286,3 +286,3 @@ isPlaying, | ||
| play: React__namespace.useCallback((isPlaying) => { | ||
| setAnimate({ | ||
| setAnimate((animate) => ({ | ||
| ...animate, | ||
@@ -294,4 +294,4 @@ style: { | ||
| isPlaying, | ||
| }); | ||
| }, []), | ||
| })); | ||
| }, [end, start, transition]), | ||
| }; | ||
@@ -298,0 +298,0 @@ } |
+2
-2
| { | ||
| "name": "react-simple-animate", | ||
| "version": "3.5.1", | ||
| "version": "3.5.2", | ||
| "description": "react simple animate", | ||
@@ -38,3 +38,3 @@ "main": "dist/index.js", | ||
| "@types/enzyme-adapter-react-16": "^1.0.6", | ||
| "@types/jest": "^25.2.3", | ||
| "@types/jest": "^26.0.1", | ||
| "@types/react": "^16.9.35", | ||
@@ -41,0 +41,0 @@ "@types/react-test-renderer": "^16.9.2", |
| import * as React from 'react'; | ||
| import { AnimateContext } from './animateGroup'; | ||
| import secToMs from './utils/secToMs'; | ||
| import getSequenceId from './utils/getSequenceId'; | ||
| import isUndefined from './utils/isUndefined'; | ||
| import { ALL, DEFAULT_DURATION, DEFAULT_EASE_TYPE } from './constants'; | ||
| export default function Animate(props) { | ||
| const { play, children, render, start, end, complete = '', onComplete, delay = 0, duration = DEFAULT_DURATION, easeType = DEFAULT_EASE_TYPE, sequenceId, sequenceIndex, } = props; | ||
| const onCompleteTimeRef = React.useRef(); | ||
| const [style, setStyle] = React.useState(start || {}); | ||
| const { register, animationStates = {} } = React.useContext(AnimateContext); | ||
| const id = getSequenceId(sequenceIndex, sequenceId); | ||
| React.useEffect(() => { | ||
| if ((!isUndefined(sequenceIndex) && sequenceIndex >= 0) || sequenceId) { | ||
| register(props); | ||
| } | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, []); | ||
| React.useEffect(() => { | ||
| const animationState = animationStates[id] || {}; | ||
| setStyle(Object.assign(Object.assign({}, (play || animationState.play ? end : start)), { transition: `${ALL} ${duration}s ${easeType} ${parseFloat(animationState.delay || delay)}s` })); | ||
| if (play && (complete || onComplete)) { | ||
| onCompleteTimeRef.current = setTimeout(() => { | ||
| complete && setStyle(complete); | ||
| onComplete && onComplete(); | ||
| }, secToMs(parseFloat(animationState.delay || delay) + duration)); | ||
| } | ||
| return () => onCompleteTimeRef.current && clearTimeout(onCompleteTimeRef.current); | ||
| }, [ | ||
| id, | ||
| animationStates, | ||
| play, | ||
| duration, | ||
| easeType, | ||
| delay, | ||
| onComplete, | ||
| start, | ||
| end, | ||
| complete, | ||
| ]); | ||
| return render ? render({ style }) : React.createElement("div", { style: style }, children); | ||
| } | ||
| //# sourceMappingURL=animate.js.map |
| {"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGvE,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAqB;IACnD,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,QAAQ,GAAG,EAAE,EACb,UAAU,EACV,KAAK,GAAG,CAAC,EACT,QAAQ,GAAG,gBAAgB,EAC3B,QAAQ,GAAG,iBAAiB,EAC5B,UAAU,EACV,aAAa,GACd,GAAG,KAAK,CAAC;IACV,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAO,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEpD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,UAAU,EAAE;YACrE,QAAQ,CAAC,KAAK,CAAC,CAAC;SACjB;QACD,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,cAAc,GAAG,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAEjD,QAAQ,iCACH,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAC9C,UAAU,EAAE,GAAG,GAAG,IAAI,QAAQ,KAAK,QAAQ,IAAI,UAAU,CACvD,cAAc,CAAC,KAAK,IAAI,KAAK,CAC9B,GAAG,IACJ,CAAC;QAEH,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE;YACpC,iBAAiB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1C,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/B,UAAU,IAAI,UAAU,EAAE,CAAC;YAC7B,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;SACnE;QAED,OAAO,GAAG,EAAE,CACV,iBAAiB,CAAC,OAAO,IAAI,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC,EAAE;QACD,EAAE;QACF,eAAe;QACf,IAAI;QACJ,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,UAAU;QACV,KAAK;QACL,GAAG;QACH,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,6BAAK,KAAK,EAAE,KAAK,IAAG,QAAQ,CAAO,CAAC;AAC1E,CAAC"} |
| import * as React from 'react'; | ||
| import * as ReactDOM from 'react-dom'; | ||
| import { act } from 'react-dom/test-utils'; | ||
| import Animate from '../src/animate'; | ||
| jest.useFakeTimers(); | ||
| describe('Animate', () => { | ||
| let container; | ||
| beforeEach(() => { | ||
| container = document.createElement('div'); | ||
| document.body.appendChild(container); | ||
| }); | ||
| afterEach(() => { | ||
| document.body.removeChild(container); | ||
| container = null; | ||
| }); | ||
| it('should start with start style', () => { | ||
| act(() => { | ||
| ReactDOM.render(React.createElement(Animate, { end: { opacity: 0 } }, "bill"), container); | ||
| }); | ||
| const div = container.querySelector('div'); | ||
| expect(div.innerHTML).toEqual('bill'); | ||
| expect(div.style.transition).toEqual('all 0.3s linear 0s'); | ||
| expect(div.style.opacity).toBe(''); | ||
| }); | ||
| it('should end with end style', () => { | ||
| act(() => { | ||
| ReactDOM.render(React.createElement(Animate, { play: true, start: { opacity: 1 }, end: { opacity: 0 } }, "bill"), container); | ||
| }); | ||
| const div = container.querySelector('div'); | ||
| expect(div.innerHTML).toEqual('bill'); | ||
| expect(div.style.opacity).toEqual('0'); | ||
| }); | ||
| it('should finish with complete style', () => { | ||
| act(() => { | ||
| ReactDOM.render(React.createElement(Animate, { play: true, end: { opacity: 0 }, complete: { background: 'red' } }, "bill"), container); | ||
| }); | ||
| const div = container.querySelector('div'); | ||
| expect(div.style.opacity).toEqual('0'); | ||
| jest.runAllTimers(); | ||
| expect(div.style.background).toEqual('red'); | ||
| }); | ||
| it('should render correctly with render props', () => { | ||
| act(() => { | ||
| ReactDOM.render( | ||
| // @ts-ignore | ||
| React.createElement(Animate, { play: true, end: { opacity: 0 }, render: ({ style }) => React.createElement("span", { style: style }, "render props") }, "bill"), container); | ||
| }); | ||
| const div = container.querySelector('span'); | ||
| expect(div.style.opacity).toEqual('0'); | ||
| expect(div.innerHTML).toEqual('render props'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=animate.test.js.map |
| {"version":3,"file":"animate.test.js","sourceRoot":"","sources":["../src/animate.test.tsx"],"names":[],"mappings":"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"} |
| import * as React from 'react'; | ||
| import calculateTotalDuration from './utils/calculateTotalDuration'; | ||
| import getSequenceId from './utils/getSequenceId'; | ||
| import isUndefined from './utils/isUndefined'; | ||
| import { DEFAULT_DURATION } from './constants'; | ||
| export const AnimateContext = React.createContext({ | ||
| animationStates: {}, | ||
| register: (data) => { }, | ||
| }); | ||
| export default function AnimateGroup({ play, sequences = [], children, }) { | ||
| const [animationStates, setAnimationStates] = React.useState({}); | ||
| const animationsRef = React.useRef({}); | ||
| const register = React.useCallback((data) => { | ||
| const { sequenceIndex, sequenceId } = data; | ||
| if (!isUndefined(sequenceId) || !isUndefined(sequenceIndex)) { | ||
| animationsRef.current[getSequenceId(sequenceIndex, sequenceId)] = data; | ||
| } | ||
| }, []); | ||
| React.useEffect(() => { | ||
| const sequencesToAnimate = Array.isArray(sequences) && sequences.length | ||
| ? sequences | ||
| : Object.values(animationsRef.current); | ||
| const localAnimationState = {}; | ||
| (play ? sequencesToAnimate : [...sequencesToAnimate].reverse()).reduce((previous, { sequenceId, sequenceIndex, duration = DEFAULT_DURATION, delay, overlay, }, currentIndex) => { | ||
| const id = getSequenceId(sequenceIndex, sequenceId, currentIndex); | ||
| const currentTotalDuration = calculateTotalDuration({ | ||
| duration, | ||
| delay, | ||
| overlay, | ||
| }); | ||
| const totalDuration = currentTotalDuration + previous; | ||
| localAnimationState[id] = { | ||
| play, | ||
| pause: !play, | ||
| delay: currentIndex === 0 | ||
| ? delay || 0 | ||
| : delay | ||
| ? previous + delay | ||
| : previous, | ||
| controlled: true, | ||
| }; | ||
| return totalDuration; | ||
| }, 0); | ||
| setAnimationStates(localAnimationState); | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, [play]); | ||
| return (React.createElement(AnimateContext.Provider, { value: { animationStates, register } }, children)); | ||
| } | ||
| //# sourceMappingURL=animateGroup.js.map |
| {"version":3,"file":"animateGroup.js","sourceRoot":"","sources":["../src/animateGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;IAChD,eAAe,EAAE,EAAE;IACnB,QAAQ,EAAE,CAAC,IAA4C,EAAQ,EAAE,GAAE,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,GAAG,EAAE,EACd,QAAQ,GACF;IACN,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAE/B,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAChC,CAAC,IAA4C,EAAE,EAAE;QAC/C,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YAC3D,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;SACxE;IACH,CAAC,EACD,EAAE,CACH,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,kBAAkB,GACtB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM;YAC1C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAE/B,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CACpE,CACE,QAAQ,EACR,EACE,UAAU,EACV,aAAa,EACb,QAAQ,GAAG,gBAAgB,EAC3B,KAAK,EACL,OAAO,GACR,EACD,YAAY,EACZ,EAAE;YACF,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAClE,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;gBAClD,QAAQ;gBACR,KAAK;gBACL,OAAO;aACR,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,oBAAoB,GAAG,QAAQ,CAAC;YAEtD,mBAAmB,CAAC,EAAE,CAAC,GAAG;gBACxB,IAAI;gBACJ,KAAK,EAAE,CAAC,IAAI;gBACZ,KAAK,EACH,YAAY,KAAK,CAAC;oBAChB,CAAC,CAAC,KAAK,IAAI,CAAC;oBACZ,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,QAAQ,GAAG,KAAK;wBAClB,CAAC,CAAC,QAAQ;gBACd,UAAU,EAAE,IAAI;aACjB,CAAC;YAEF,OAAO,aAAa,CAAC;QACvB,CAAC,EACD,CAAC,CACF,CAAC;QAEF,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QACxC,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,CACL,oBAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,IAC1D,QAAQ,CACe,CAC3B,CAAC;AACJ,CAAC"} |
| import AnimateGroup from './animateGroup'; | ||
| import * as ReactDOM from 'react-dom'; | ||
| import { act } from 'react-dom/test-utils'; | ||
| import * as React from 'react'; | ||
| import { Animate } from './index'; | ||
| import AnimateKeyframes from './animateKeyframes'; | ||
| describe('AnimateGroup', () => { | ||
| let container; | ||
| beforeEach(() => { | ||
| container = document.createElement('div'); | ||
| document.body.appendChild(container); | ||
| }); | ||
| afterEach(() => { | ||
| document.body.removeChild(container); | ||
| container = null; | ||
| }); | ||
| it('should render correctly', () => { | ||
| act(() => { | ||
| ReactDOM.render(React.createElement(AnimateGroup, { play: true }, | ||
| React.createElement(Animate, { sequenceIndex: 0, end: { opacity: 0 } }, "test"), | ||
| React.createElement(AnimateKeyframes, { sequenceIndex: 1, keyframes: ['opacity: 0', 'opacity: 1'] }, "what")), container); | ||
| }); | ||
| act(() => { | ||
| expect(container.querySelectorAll('div')[0].style.opacity).toEqual('0'); | ||
| }); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=animateGroup.test.js.map |
| {"version":3,"file":"animateGroup.test.js","sourceRoot":"","sources":["../src/animateGroup.test.tsx"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,SAAS,CAAC;IAEd,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,GAAG,CAAC,GAAG,EAAE;YACP,QAAQ,CAAC,MAAM,CACb,oBAAC,YAAY,IAAC,IAAI;gBAChB,oBAAC,OAAO,IAAC,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,WAEpC;gBACV,oBAAC,gBAAgB,IAAC,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,WAExD,CACN,EACf,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,EAAE;YACP,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| import * as React from 'react'; | ||
| import { AnimateContext } from './animateGroup'; | ||
| import createTag from './logic/createTag'; | ||
| import deleteRule from './logic/deleteRules'; | ||
| import createRandomName from './utils/createRandomName'; | ||
| import getSequenceId from './utils/getSequenceId'; | ||
| import getPlayState from './utils/getPauseState'; | ||
| import { DEFAULT_DIRECTION, DEFAULT_DURATION, DEFAULT_EASE_TYPE, DEFAULT_FILLMODE, } from './constants'; | ||
| export default function AnimateKeyframes(props) { | ||
| const { children, play = false, pause = false, render, duration = DEFAULT_DURATION, delay = 0, easeType = DEFAULT_EASE_TYPE, direction = DEFAULT_DIRECTION, fillMode = DEFAULT_FILLMODE, iterationCount = 1, sequenceIndex, keyframes, sequenceId, } = props; | ||
| let pauseValue; | ||
| const animationNameRef = React.useRef({ | ||
| forward: '', | ||
| reverse: '', | ||
| }); | ||
| const controlled = React.useRef(false); | ||
| const styleTagRef = React.useRef({ | ||
| forward: { sheet: {} }, | ||
| reverse: { sheet: {} }, | ||
| }); | ||
| const id = getSequenceId(sequenceIndex, sequenceId); | ||
| const { register, animationStates = {} } = React.useContext(AnimateContext); | ||
| const animateState = animationStates[id] || {}; | ||
| const [, forceUpdate] = React.useState(false); | ||
| React.useEffect(() => { | ||
| const styleTag = styleTagRef.current; | ||
| const animationName = animationNameRef.current; | ||
| animationNameRef.current.forward = createRandomName(); | ||
| let result = createTag({ | ||
| animationName: animationNameRef.current.forward, | ||
| keyframes, | ||
| }); | ||
| animationNameRef.current.reverse = createRandomName(); | ||
| styleTagRef.current.forward = result.styleTag; | ||
| result = createTag({ | ||
| animationName: animationNameRef.current.reverse, | ||
| keyframes: keyframes.reverse(), | ||
| }); | ||
| styleTagRef.current.reverse = result.styleTag; | ||
| register(props); | ||
| if (play) { | ||
| forceUpdate(true); | ||
| } | ||
| return () => { | ||
| deleteRule(styleTag.forward.sheet, animationName.forward); | ||
| deleteRule(styleTag.reverse.sheet, animationName.reverse); | ||
| }; | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, []); | ||
| if (animateState.controlled && !controlled.current) { | ||
| pauseValue = animateState.pause; | ||
| if (!animateState.pause) { | ||
| controlled.current = true; | ||
| } | ||
| } | ||
| else { | ||
| pauseValue = pause; | ||
| } | ||
| const style = { | ||
| animation: `${duration}s ${easeType} ${animateState.delay || delay}s ${iterationCount} ${direction} ${fillMode} ${getPlayState(pauseValue)} ${((animateState.controlled ? animateState.play : play) | ||
| ? animationNameRef.current.forward | ||
| : animationNameRef.current.reverse) || ''}`, | ||
| }; | ||
| return render ? render({ style }) : React.createElement("div", { style: style || {} }, children); | ||
| } | ||
| //# sourceMappingURL=animateKeyframes.js.map |
| {"version":3,"file":"animateKeyframes.js","sourceRoot":"","sources":["../src/animateKeyframes.tsx"],"names":[],"mappings":"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"} |
| import * as React from 'react'; | ||
| import * as ReactDOM from 'react-dom'; | ||
| import { act } from 'react-dom/test-utils'; | ||
| import AnimateKeyframes from './animateKeyframes'; | ||
| jest.mock('./utils/createRandomName', () => ({ | ||
| default: () => 'test', | ||
| })); | ||
| describe('AnimateKeyframes', () => { | ||
| let container; | ||
| beforeEach(() => { | ||
| container = document.createElement('div'); | ||
| document.body.appendChild(container); | ||
| }); | ||
| afterEach(() => { | ||
| document.body.removeChild(container); | ||
| container = null; | ||
| }); | ||
| it('should render set animation', () => { | ||
| act(() => { | ||
| ReactDOM.render(React.createElement(AnimateKeyframes, { play: true, keyframes: ['opacity: 0', 'opacity: 1'] }, "bill"), container); | ||
| }); | ||
| const div = container.querySelector('div'); | ||
| expect(div.innerHTML).toEqual('bill'); | ||
| expect(div.style.animation).toEqual('0.3s linear 0s 1 normal none running test'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=animateKeyframes.test.js.map |
| {"version":3,"file":"animateKeyframes.test.js","sourceRoot":"","sources":["../src/animateKeyframes.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;CACtB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,SAAS,CAAC;IAEd,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,GAAG,CAAC,GAAG,EAAE;YACP,QAAQ,CAAC,MAAM,CACb,oBAAC,gBAAgB,IAAC,IAAI,QAAC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,WAE3C,EACnB,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| const DEFAULT_DURATION = 0.3; | ||
| const DEFAULT_EASE_TYPE = 'linear'; | ||
| const DEFAULT_DIRECTION = 'normal'; | ||
| const DEFAULT_FILLMODE = 'none'; | ||
| const RUNNING = 'running'; | ||
| const ALL = 'all'; | ||
| export { DEFAULT_DURATION, DEFAULT_EASE_TYPE, DEFAULT_DIRECTION, DEFAULT_FILLMODE, RUNNING, ALL, }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,OAAO,EACP,GAAG,GACJ,CAAC"} |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"} |
| import camelCaseToDash from '../utils/camelCaseToDash'; | ||
| const generateKeyframes = keyframes => { | ||
| const animationLength = keyframes.length; | ||
| return keyframes.reduce((previous, keyframe, currentIndex) => { | ||
| const keyframePercentage = animationLength === 2 | ||
| ? currentIndex * 100 | ||
| : parseFloat((100 / (animationLength - 1)).toFixed(2)) * currentIndex; | ||
| if (typeof keyframe === 'string') { | ||
| return `${previous} ${keyframePercentage}% {${keyframe}}`; | ||
| } | ||
| const keys = Object.keys(keyframe); | ||
| if (keys.length && isNaN(+keys[0])) { | ||
| const keyframeContent = keys.reduce((acc, key) => `${acc} ${camelCaseToDash(key)}: ${keyframe[key]};`, ''); | ||
| return `${previous} ${keyframePercentage}% {${keyframeContent}}`; | ||
| } | ||
| return `${previous} ${Object.keys(keyframe)[0]}% {${Object.values(keyframe)[0]}}`; | ||
| }, ''); | ||
| }; | ||
| export default function createStyle({ keyframes, animationName, }) { | ||
| return `@keyframes ${animationName} {${generateKeyframes(keyframes)}}`; | ||
| } | ||
| //# sourceMappingURL=createStyle.js.map |
| {"version":3,"file":"createStyle.js","sourceRoot":"","sources":["../../src/logic/createStyle.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAEvD,MAAM,iBAAiB,GAAG,SAAS,CAAC,EAAE;IACpC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;IACzC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC3D,MAAM,kBAAkB,GACtB,eAAe,KAAK,CAAC;YACnB,CAAC,CAAC,YAAY,GAAG,GAAG;YACpB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QAE1E,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,OAAO,GAAG,QAAQ,IAAI,kBAAkB,MAAM,QAAQ,GAAG,CAAC;SAC3D;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,EACjE,EAAE,CACH,CAAC;YACF,OAAO,GAAG,QAAQ,IAAI,kBAAkB,MAAM,eAAe,GAAG,CAAC;SAClE;QACD,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3B,GAAG,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAS,EACT,aAAa,GAId;IACC,OAAO,cAAc,aAAa,KAAK,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC;AACzE,CAAC"} |
| import createStyle from './createStyle'; | ||
| describe('createStyle', () => { | ||
| it('should create correct style', () => { | ||
| expect(createStyle({ | ||
| keyframes: ['opacity: 0;', 'opacity: 1;', 'opacity: 2;', 'opacity: 3;'], | ||
| animationName: 'test', | ||
| })).toMatchSnapshot(); | ||
| }); | ||
| it('should create correct style with object', () => { | ||
| expect(createStyle({ | ||
| keyframes: [ | ||
| { 0: 'opacity: 0;' }, | ||
| { 25: 'opacity: 1;' }, | ||
| { 75: 'opacity: 2;' }, | ||
| { 100: 'opacity: 3;' }, | ||
| ], | ||
| animationName: 'test', | ||
| })).toMatchSnapshot(); | ||
| }); | ||
| it('should create correct style keyframe object', () => { | ||
| expect(createStyle({ | ||
| keyframes: [ | ||
| { opacity: 0 }, | ||
| { opacity: 0.25 }, | ||
| { opacity: 0.5 }, | ||
| { opacity: 0.75 }, | ||
| { opacity: 1 }, | ||
| ], | ||
| animationName: 'test', | ||
| })).toMatchSnapshot(); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=createStyle.test.js.map |
| {"version":3,"file":"createStyle.test.js","sourceRoot":"","sources":["../../src/logic/createStyle.test.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CACJ,WAAW,CAAC;YACV,SAAS,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;YACvE,aAAa,EAAE,MAAM;SACtB,CAAC,CACH,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CACJ,WAAW,CAAC;YACV,SAAS,EAAE;gBACT,EAAE,CAAC,EAAE,aAAa,EAAE;gBACpB,EAAE,EAAE,EAAE,aAAa,EAAE;gBACrB,EAAE,EAAE,EAAE,aAAa,EAAE;gBACrB,EAAE,GAAG,EAAE,aAAa,EAAE;aACvB;YACD,aAAa,EAAE,MAAM;SACtB,CAAC,CACH,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CACJ,WAAW,CAAC;YACV,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,CAAC,EAAE;gBACd,EAAE,OAAO,EAAE,IAAI,EAAE;gBACjB,EAAE,OAAO,EAAE,GAAG,EAAE;gBAChB,EAAE,OAAO,EAAE,IAAI,EAAE;gBACjB,EAAE,OAAO,EAAE,CAAC,EAAE;aACf;YACD,aAAa,EAAE,MAAM;SACtB,CAAC,CACH,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| import createStyle from './createStyle'; | ||
| export default function createTag({ keyframes, animationName, }) { | ||
| let styleTag = document.querySelector('style[data-id=rsi]'); | ||
| let index; | ||
| if (!styleTag) { | ||
| styleTag = document.createElement('style'); | ||
| styleTag.setAttribute('data-id', 'rsi'); | ||
| document.head.appendChild(styleTag); | ||
| } | ||
| try { | ||
| // @ts-ignore | ||
| index = styleTag.sheet.cssRules.length; | ||
| } | ||
| catch (e) { | ||
| index = 0; | ||
| } | ||
| try { | ||
| // @ts-ignore | ||
| styleTag.sheet.insertRule(createStyle({ | ||
| keyframes, | ||
| animationName, | ||
| }), index); | ||
| } | ||
| catch (e) { | ||
| console.error('react simple animate, error found during insert style ', e); // eslint-disable-line no-console | ||
| } | ||
| return { | ||
| styleTag, | ||
| index, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=createTag.js.map |
| {"version":3,"file":"createTag.js","sourceRoot":"","sources":["../../src/logic/createTag.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,SAAS,EACT,aAAa,GAId;IAIC,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC;IAEV,IAAI,CAAC,QAAQ,EAAE;QACb,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KACrC;IAED,IAAI;QACF,aAAa;QACb,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;KACxC;IAAC,OAAO,CAAC,EAAE;QACV,KAAK,GAAG,CAAC,CAAC;KACX;IAED,IAAI;QACF,aAAa;QACb,QAAQ,CAAC,KAAK,CAAC,UAAU,CACvB,WAAW,CAAC;YACV,SAAS;YACT,aAAa;SACd,CAAC,EACF,KAAK,CACN,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,CAAC,CAAC,CAAC,CAAC,iCAAiC;KAC9G;IAED,OAAO;QACL,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC"} |
| import createTag from './createTag'; | ||
| jest.mock('./createStyle', () => () => 'test'); | ||
| const documentCreateOriginal = document.createElement; | ||
| const appendChildOriginal = document.head.appendChild; | ||
| describe('createTag', () => { | ||
| beforeEach(() => { | ||
| document.createElement = jest.fn(); | ||
| document.head.appendChild = jest.fn(); | ||
| }); | ||
| afterEach(() => { | ||
| document.createElement = documentCreateOriginal; | ||
| document.head.appendChild = appendChildOriginal; | ||
| }); | ||
| it('should the tag and total length of css rules', () => { | ||
| const insertRule = jest.fn(); | ||
| // @ts-ignore | ||
| document.createElement.mockReturnValue({ sheet: { cssRules: [1, 2], insertRule }, setAttribute: () => { } }); | ||
| // @ts-ignore | ||
| const output = createTag({ keyframes: {}, animationName: 'test' }); | ||
| expect(output).toMatchSnapshot(); | ||
| }); | ||
| it('should still return tag and index even insertRule thow error', () => { | ||
| const insertRule = () => { | ||
| throw new Error('failed'); | ||
| }; | ||
| // @ts-ignore | ||
| document.createElement.mockReturnValue({ sheet: { cssRules: [1, 2], insertRule }, setAttribute: () => { } }); | ||
| // @ts-ignore | ||
| const output = createTag({ keyframes: '', animationName: 'test' }); | ||
| expect(output).toMatchSnapshot(); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=createTag.test.js.map |
| {"version":3,"file":"createTag.test.js","sourceRoot":"","sources":["../../src/logic/createTag.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;AAE/C,MAAM,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC;AACtD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAEtD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,aAAa,GAAG,sBAAsB,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,aAAa;QACb,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,aAAa;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,aAAa;QACb,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,aAAa;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default (sheet, deleteName) => { | ||
| const index = Object.values(sheet.cssRules).findIndex(({ name }) => name === deleteName); | ||
| if (index >= 0) { | ||
| sheet.deleteRule(index); | ||
| } | ||
| }; | ||
| //# sourceMappingURL=deleteRules.js.map |
| {"version":3,"file":"deleteRules.js","sourceRoot":"","sources":["../../src/logic/deleteRules.ts"],"names":[],"mappings":"AAAA,eAAe,CAAC,KAAU,EAAE,UAAkB,EAAQ,EAAE;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CACnD,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CACpD,CAAC;IACF,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACzB;AACH,CAAC,CAAC"} |
| import deleteRules from './deleteRules'; | ||
| describe('deleteRules', () => { | ||
| it('should do nothing when index not found', () => { | ||
| const deleteRule = jest.fn(); | ||
| const data = { | ||
| cssRules: {}, | ||
| deleteRule, | ||
| }; | ||
| deleteRules(data, 'whatever'); | ||
| expect(deleteRule).not.toBeCalled(); | ||
| }); | ||
| it('should delete the associated rule', () => { | ||
| const deleteRule = jest.fn(); | ||
| const data = { | ||
| deleteRule, | ||
| cssRules: { | ||
| name: { | ||
| name: 'bill', | ||
| }, | ||
| }, | ||
| }; | ||
| deleteRules(data, 'bill'); | ||
| expect(deleteRule).toBeCalled(); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=deleteRules.test.js.map |
| {"version":3,"file":"deleteRules.test.js","sourceRoot":"","sources":["../../src/logic/deleteRules.test.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,EAAE;YACZ,UAAU;SACX,CAAC;QACF,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG;YACX,UAAU;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;QACF,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| //# sourceMappingURL=types.js.map |
| {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""} |
| import * as React from 'react'; | ||
| import secToMs from './utils/secToMs'; | ||
| import { ALL, DEFAULT_DURATION, DEFAULT_EASE_TYPE } from './constants'; | ||
| export default function useAnimate(props) { | ||
| const { start, end, complete, onComplete, delay = 0, duration = DEFAULT_DURATION, easeType = DEFAULT_EASE_TYPE, } = props; | ||
| const transition = React.useMemo(() => `${ALL} ${duration}s ${easeType} ${delay}s`, [duration, easeType, delay]); | ||
| const [animate, setAnimate] = React.useState({ | ||
| isPlaying: false, | ||
| style: Object.assign(Object.assign({}, start), { transition }), | ||
| }); | ||
| const { isPlaying, style } = animate; | ||
| const onCompleteTimeRef = React.useRef(); | ||
| React.useEffect(() => { | ||
| if ((onCompleteTimeRef.current || complete) && isPlaying) { | ||
| onCompleteTimeRef.current = setTimeout(() => { | ||
| if (onComplete) { | ||
| onComplete(); | ||
| } | ||
| if (complete) { | ||
| setAnimate(Object.assign(Object.assign({}, animate), { style: complete })); | ||
| } | ||
| }, secToMs(delay + duration)); | ||
| } | ||
| return () => onCompleteTimeRef.current && clearTimeout(onCompleteTimeRef.current); | ||
| }, [isPlaying]); | ||
| return { | ||
| isPlaying, | ||
| style, | ||
| play: React.useCallback((isPlaying) => { | ||
| setAnimate(Object.assign(Object.assign({}, animate), { style: Object.assign(Object.assign({}, (isPlaying ? end : start)), { transition }), isPlaying })); | ||
| }, []), | ||
| }; | ||
| } | ||
| //# sourceMappingURL=useAnimate.js.map |
| {"version":3,"file":"useAnimate.js","sourceRoot":"","sources":["../src/useAnimate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAqB;IAKtD,MAAM,EACJ,KAAK,EACL,GAAG,EACH,QAAQ,EACR,UAAU,EACV,KAAK,GAAG,CAAC,EACT,QAAQ,GAAG,gBAAgB,EAC3B,QAAQ,GAAG,iBAAiB,GAC7B,GAAG,KAAK,CAAC;IACV,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC9B,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,QAAQ,KAAK,QAAQ,IAAI,KAAK,GAAG,EACjD,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAC5B,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAGzC;QACD,SAAS,EAAE,KAAK;QAChB,KAAK,kCAAO,KAAK,KAAE,UAAU,GAAE;KAChC,CAAC,CAAC;IACH,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAkB,CAAC;IAEzD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,SAAS,EAAE;YACxD,iBAAiB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAS,EAAE;gBAChD,IAAI,UAAU,EAAE;oBACd,UAAU,EAAE,CAAC;iBACd;gBAED,IAAI,QAAQ,EAAE;oBACZ,UAAU,iCACL,OAAO,KACV,KAAK,EAAE,QAAQ,IACf,CAAC;iBACJ;YACH,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;SAC/B;QAED,OAAO,GAAG,EAAE,CACV,iBAAiB,CAAC,OAAO,IAAI,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACL,SAAS;QACT,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,SAAkB,EAAE,EAAE;YAC7C,UAAU,iCACL,OAAO,KACV,KAAK,kCACA,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAC5B,UAAU,KAEZ,SAAS,IACT,CAAC;QACL,CAAC,EAAE,EAAE,CAAC;KACP,CAAC;AACJ,CAAC"} |
| import * as React from 'react'; | ||
| import useAnimate from './useAnimate'; | ||
| import { mount } from 'enzyme'; | ||
| import { act } from 'react-dom/test-utils'; | ||
| let UseAnimate; | ||
| describe('useAnimate', () => { | ||
| let componentStyle; | ||
| const TestHook = ({ callback, }) => { | ||
| const { style } = callback(); | ||
| componentStyle = style; | ||
| return React.createElement("div", { style: style }, "errors"); | ||
| }; | ||
| const TestComponent = (callback) => { | ||
| mount(React.createElement(TestHook, { callback: callback })); | ||
| }; | ||
| beforeEach(() => { | ||
| TestComponent(() => { | ||
| UseAnimate = useAnimate({ end: { opacity: 1 } }); | ||
| return UseAnimate; | ||
| }); | ||
| jest.resetAllMocks(); | ||
| }); | ||
| it('should toggle style correctly', () => { | ||
| act(() => { | ||
| expect(UseAnimate.play(true)).toBeUndefined(); | ||
| expect(componentStyle).toEqual({ | ||
| transition: 'all 0.3s linear 0s', | ||
| }); | ||
| }); | ||
| expect(componentStyle).toEqual({ | ||
| opacity: 1, | ||
| transition: 'all 0.3s linear 0s', | ||
| }); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=useAnimate.test.js.map |
| {"version":3,"file":"useAnimate.test.js","sourceRoot":"","sources":["../src/useAnimate.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,IAAI,UAAU,CAAC;AAEf,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,cAAc,CAAC;IAEnB,MAAM,QAAQ,GAAG,CAAC,EAChB,QAAQ,GAGT,EAAE,EAAE;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,cAAc,GAAG,KAAK,CAAC;QACvB,OAAO,6BAAK,KAAK,EAAE,KAAK,aAAc,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE;QACjC,KAAK,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,CAAC,GAAG,EAAE;YACjB,UAAU,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,GAAG,CAAC,GAAG,EAAE;YACP,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;gBAC7B,UAAU,EAAE,oBAAoB;aACjC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,oBAAoB;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| import * as React from 'react'; | ||
| import createRandomName from './utils/createRandomName'; | ||
| import createArrayWithNumbers from './utils/createArrayWithNumbers'; | ||
| import calculateTotalDuration from './utils/calculateTotalDuration'; | ||
| import createTag from './logic/createTag'; | ||
| import deleteRules from './logic/deleteRules'; | ||
| import { ALL, DEFAULT_DIRECTION, DEFAULT_DURATION, DEFAULT_EASE_TYPE, DEFAULT_FILLMODE, RUNNING, } from './constants'; | ||
| export default function useAnimateGroup(props) { | ||
| const { sequences = [] } = props; | ||
| const defaultArray = createArrayWithNumbers(sequences.length).map((_, index) => props.sequences[index].start); | ||
| const [styles, setStyles] = React.useState(defaultArray); | ||
| const [isPlaying, setPlaying] = React.useState(false); | ||
| const animationNamesRef = React.useRef([]); | ||
| const styleTagRef = React.useRef([]); | ||
| const playRef = React.useRef(); | ||
| React.useEffect(() => { | ||
| sequences.forEach(({ keyframes = false }, i) => { | ||
| if (!Array.isArray(keyframes)) { | ||
| return; | ||
| } | ||
| if (!animationNamesRef.current[i]) { | ||
| animationNamesRef.current[i] = {}; | ||
| styleTagRef.current[i] = {}; | ||
| } | ||
| animationNamesRef.current[i].forward = createRandomName(); | ||
| let result = createTag({ | ||
| animationName: animationNamesRef.current[i].forward, | ||
| keyframes, | ||
| }); | ||
| styleTagRef.current[i].forward = result.styleTag; | ||
| animationNamesRef.current[i].reverse = createRandomName(); | ||
| result = createTag({ | ||
| animationName: animationNamesRef.current[i].reverse, | ||
| keyframes: keyframes.reverse(), | ||
| }); | ||
| styleTagRef.current[i].reverse = result.styleTag; | ||
| }); | ||
| return () => Object.values(animationNamesRef).forEach(({ forward, reverse }, i) => { | ||
| if (!styleTagRef[i]) { | ||
| return; | ||
| } | ||
| deleteRules(styleTagRef[i].sheet, forward); | ||
| deleteRules(styleTagRef[i].sheet, reverse); | ||
| }); | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, []); | ||
| playRef.current = playRef.current | ||
| ? playRef.current | ||
| : (isPlay) => { | ||
| let totalDuration = 0; | ||
| const animationRefWithOrder = isPlay | ||
| ? animationNamesRef.current | ||
| : [...animationNamesRef.current].reverse(); | ||
| const styles = (isPlay ? sequences : [...sequences].reverse()).map((current, currentIndex) => { | ||
| const { duration = DEFAULT_DURATION, delay = 0, overlay, keyframes, iterationCount = 1, easeType = DEFAULT_EASE_TYPE, direction = DEFAULT_DIRECTION, fillMode = DEFAULT_FILLMODE, end = {}, start = {}, } = current; | ||
| const delayDuration = currentIndex === 0 ? delay : totalDuration; | ||
| const transition = `${ALL} ${duration}s ${easeType} ${delayDuration}s`; | ||
| totalDuration = | ||
| calculateTotalDuration({ duration, delay, overlay }) + | ||
| totalDuration; | ||
| return keyframes | ||
| ? { | ||
| animation: `${duration}s ${easeType} ${delayDuration}s ${iterationCount} ${direction} ${fillMode} ${RUNNING} ${isPlay | ||
| ? animationRefWithOrder[currentIndex].forward | ||
| : animationRefWithOrder[currentIndex].reverse}`, | ||
| } | ||
| : Object.assign(Object.assign({}, (isPlay ? end : start)), { transition }); | ||
| }); | ||
| setStyles(isPlay ? styles : [...styles].reverse()); | ||
| setPlaying(!isPlaying); | ||
| }; | ||
| return { styles, play: playRef.current, isPlaying }; | ||
| } | ||
| //# sourceMappingURL=useAnimateGroup.js.map |
| {"version":3,"file":"useAnimateGroup.js","sourceRoot":"","sources":["../src/useAnimateGroup.ts"],"names":[],"mappings":"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"} |
| import * as React from 'react'; | ||
| import { mount } from 'enzyme'; | ||
| import useAnimateGroup from './useAnimateGroup'; | ||
| import { act } from 'react-test-renderer'; | ||
| jest.mock('./utils/createRandomName', () => ({ | ||
| default: () => 'test', | ||
| })); | ||
| let UseAnimateGroup; | ||
| describe('useAnimateGroup', () => { | ||
| let componentStyle; | ||
| const TestHook = ({ callback, }) => { | ||
| const { styles } = callback(); | ||
| componentStyle = styles; | ||
| return React.createElement("div", null, "errors"); | ||
| }; | ||
| const TestComponent = (callback) => { | ||
| mount(React.createElement(TestHook, { callback: callback })); | ||
| }; | ||
| beforeEach(() => { | ||
| jest.resetAllMocks(); | ||
| }); | ||
| it('should generate correct styles', () => { | ||
| TestComponent(() => { | ||
| UseAnimateGroup = useAnimateGroup({ | ||
| sequences: [ | ||
| { start: { opacity: 0 }, end: { opacity: 1 } }, | ||
| { keyframes: ['opacity: 0', 'opacity: 1'] }, | ||
| { start: { opacity: 0 }, end: { opacity: 1 } }, | ||
| { keyframes: ['opacity: 0', 'opacity: 1'] }, | ||
| ], | ||
| }); | ||
| return UseAnimateGroup; | ||
| }); | ||
| expect(componentStyle).toEqual([ | ||
| { opacity: 0 }, | ||
| undefined, | ||
| { opacity: 0 }, | ||
| undefined, | ||
| ]); | ||
| act(() => { | ||
| UseAnimateGroup.play(true); | ||
| expect(componentStyle).toEqual([ | ||
| { opacity: 1, transition: 'all 0.3s linear 0s' }, | ||
| { animation: '0.3s linear 0.3s 1 normal none running test' }, | ||
| { opacity: 1, transition: 'all 0.3s linear 0.6s' }, | ||
| { | ||
| animation: '0.3s linear 0.8999999999999999s 1 normal none running test', | ||
| }, | ||
| ]); | ||
| }); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=useAnimateGroup.test.js.map |
| {"version":3,"file":"useAnimateGroup.test.js","sourceRoot":"","sources":["../src/useAnimateGroup.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;CACtB,CAAC,CAAC,CAAC;AAEJ,IAAI,eAAe,CAAC;AAEpB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,cAAc,CAAC;IAEnB,MAAM,QAAQ,GAAG,CAAC,EAChB,QAAQ,GAGT,EAAE,EAAE;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC9B,cAAc,GAAG,MAAM,CAAC;QACxB,OAAO,0CAAiB,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE;QACjC,KAAK,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,aAAa,CAAC,GAAG,EAAE;YACjB,eAAe,GAAG,eAAe,CAAC;gBAChC,SAAS,EAAE;oBACT,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC9C,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;oBAC3C,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC9C,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;iBAC5C;aACF,CAAC,CAAC;YACH,OAAO,eAAe,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;YAC7B,EAAE,OAAO,EAAE,CAAC,EAAE;YACd,SAAS;YACT,EAAE,OAAO,EAAE,CAAC,EAAE;YACd,SAAS;SACV,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,EAAE;YACP,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;gBAC7B,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE;gBAChD,EAAE,SAAS,EAAE,6CAA6C,EAAE;gBAC5D,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,sBAAsB,EAAE;gBAClD;oBACE,SAAS,EACP,4DAA4D;iBAC/D;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| import * as React from 'react'; | ||
| import createRandomName from './utils/createRandomName'; | ||
| import createTag from './logic/createTag'; | ||
| import { AnimateContext } from './animateGroup'; | ||
| import deleteRules from './logic/deleteRules'; | ||
| import getPlayState from './utils/getPauseState'; | ||
| import { DEFAULT_DIRECTION, DEFAULT_DURATION, DEFAULT_EASE_TYPE, DEFAULT_FILLMODE, } from './constants'; | ||
| export default function useAnimateKeyframes(props) { | ||
| const { duration = DEFAULT_DURATION, delay = 0, easeType = DEFAULT_EASE_TYPE, direction = DEFAULT_DIRECTION, fillMode = DEFAULT_FILLMODE, iterationCount = 1, keyframes, } = props; | ||
| const animationNameRef = React.useRef({ | ||
| forward: '', | ||
| reverse: '', | ||
| }); | ||
| const styleTagRef = React.useRef({ | ||
| forward: { sheet: {} }, | ||
| reverse: { sheet: {} }, | ||
| }); | ||
| const { register } = React.useContext(AnimateContext); | ||
| const [isPlaying, setIsPlaying] = React.useState(null); | ||
| const [isPaused, setIsPaused] = React.useState(false); | ||
| const playRef = React.useRef(); | ||
| React.useEffect(() => { | ||
| const styleTag = styleTagRef.current; | ||
| const animationName = animationNameRef.current; | ||
| animationNameRef.current.forward = createRandomName(); | ||
| let result = createTag({ | ||
| animationName: animationNameRef.current.forward, | ||
| keyframes, | ||
| }); | ||
| styleTagRef.current.forward = result.styleTag; | ||
| animationNameRef.current.reverse = createRandomName(); | ||
| result = createTag({ | ||
| animationName: animationNameRef.current.reverse, | ||
| keyframes: keyframes.reverse(), | ||
| }); | ||
| styleTagRef.current.reverse = result.styleTag; | ||
| register(props); | ||
| return () => { | ||
| deleteRules(styleTag.forward.sheet, animationName.forward); | ||
| deleteRules(styleTag.reverse.sheet, animationName.reverse); | ||
| }; | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, []); | ||
| playRef.current = playRef.current | ||
| ? playRef.current | ||
| : (isPlay) => setIsPlaying(isPlay); | ||
| const style = { | ||
| animation: `${duration}s ${easeType} ${delay}s ${iterationCount} ${direction} ${fillMode} ${getPlayState(isPaused)} ${isPlaying === null | ||
| ? '' | ||
| : isPlaying | ||
| ? animationNameRef.current.forward | ||
| : animationNameRef.current.reverse}`, | ||
| }; | ||
| return { | ||
| style, | ||
| play: playRef.current, | ||
| pause: setIsPaused, | ||
| isPlaying: !!isPlaying, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=useAnimateKeyframes.js.map |
| {"version":3,"file":"useAnimateKeyframes.js","sourceRoot":"","sources":["../src/useAnimateKeyframes.ts"],"names":[],"mappings":"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"} |
| import * as React from 'react'; | ||
| import useAnimateKeyframes from './useAnimateKeyframes'; | ||
| import { mount } from 'enzyme'; | ||
| import { act } from 'react-dom/test-utils'; | ||
| jest.mock('./utils/createRandomName', () => ({ | ||
| default: () => 'test', | ||
| })); | ||
| let UseAnimate; | ||
| describe('useAnimateKeyframes', () => { | ||
| let componentStyle; | ||
| const TestHook = ({ callback }) => { | ||
| const { style } = callback(); | ||
| componentStyle = style; | ||
| return React.createElement("div", { style: style }, "errors"); | ||
| }; | ||
| const TestComponent = (callback) => { | ||
| mount(React.createElement(TestHook, { callback: callback })); | ||
| }; | ||
| beforeEach(() => { | ||
| TestComponent(() => { | ||
| UseAnimate = useAnimateKeyframes({ | ||
| keyframes: ['opacity: 0', 'opacity: 1'], | ||
| }); | ||
| return UseAnimate; | ||
| }); | ||
| jest.resetAllMocks(); | ||
| }); | ||
| it('should toggle style correctly', () => { | ||
| act(() => { | ||
| expect(UseAnimate.play(true)).toBeUndefined(); | ||
| expect(componentStyle).toEqual({ | ||
| animation: '0.3s linear 0s 1 normal none running ', | ||
| }); | ||
| }); | ||
| expect(componentStyle).toEqual({ | ||
| animation: '0.3s linear 0s 1 normal none running test', | ||
| }); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=useAnimateKeyframes.test.js.map |
| {"version":3,"file":"useAnimateKeyframes.test.js","sourceRoot":"","sources":["../src/useAnimateKeyframes.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;CACtB,CAAC,CAAC,CAAC;AAEJ,IAAI,UAAU,CAAC;AAEf,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,cAAc,CAAC;IAEnB,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE;QACrC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,cAAc,GAAG,KAAK,CAAC;QACvB,OAAO,6BAAK,KAAK,EAAE,KAAK,aAAc,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE;QACjC,KAAK,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,CAAC,GAAG,EAAE;YACjB,UAAU,GAAG,mBAAmB,CAAC;gBAC/B,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;aACxC,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,GAAG,CAAC,GAAG,EAAE;YACP,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;gBAC7B,SAAS,EAAE,uCAAuC;aACnD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;YAC7B,SAAS,EAAE,2CAA2C;SACvD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default ({ duration = 0.3, delay = 0, overlay = 0, }) => duration + delay - overlay || 0; | ||
| //# sourceMappingURL=calculateTotalDuration.js.map |
| {"version":3,"file":"calculateTotalDuration.js","sourceRoot":"","sources":["../../src/utils/calculateTotalDuration.ts"],"names":[],"mappings":"AAAA,eAAe,CAAC,EACd,QAAQ,GAAG,GAAG,EACd,KAAK,GAAG,CAAC,EACT,OAAO,GAAG,CAAC,GAKZ,EAAU,EAAE,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC"} |
| import calculateTotalDuration from '../../src/utils/calculateTotalDuration'; | ||
| describe('calculateTotalDuration', () => { | ||
| it('should return correctly seconds', () => { | ||
| expect(calculateTotalDuration({ duration: 1, delay: 1 })).toEqual(2); | ||
| }); | ||
| it('should return correctly seconds when play on reverse', () => { | ||
| expect(calculateTotalDuration({ | ||
| duration: 1, | ||
| delay: 1, | ||
| })).toEqual(2); | ||
| }); | ||
| it('should return correctly when those default duration and delay are not supplied', () => { | ||
| expect(calculateTotalDuration({})).toEqual(0.3); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=calculateTotalDuration.test.js.map |
| {"version":3,"file":"calculateTotalDuration.test.js","sourceRoot":"","sources":["../../src/utils/calculateTotalDuration.test.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,wCAAwC,CAAC;AAE5E,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CACJ,sBAAsB,CAAC;YACrB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;SACT,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default (camelCase) => camelCase ? camelCase.replace(/[A-Z]/g, c => `-${c.toLowerCase()}`) : ''; | ||
| //# sourceMappingURL=camelCaseToDash.js.map |
| {"version":3,"file":"camelCaseToDash.js","sourceRoot":"","sources":["../../src/utils/camelCaseToDash.ts"],"names":[],"mappings":"AAAA,eAAe,CAAC,SAAkB,EAAU,EAAE,CAC5C,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC"} |
| import camelCaseToDash from './camelCaseToDash'; | ||
| describe('camelCaseToDash', () => { | ||
| it('should transfer camel case string to dash', () => { | ||
| expect(camelCaseToDash('backgroundColor')).toEqual('background-color'); | ||
| }); | ||
| it('should return empty when given null or undefined or empty string', () => { | ||
| expect(camelCaseToDash('')).toEqual(''); | ||
| expect(camelCaseToDash()).toEqual(''); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=camelCaseToDash.test.js.map |
| {"version":3,"file":"camelCaseToDash.test.js","sourceRoot":"","sources":["../../src/utils/camelCaseToDash.test.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default function createArrayWithNumbers(length) { | ||
| return Array.from({ length }, () => null); | ||
| } | ||
| //# sourceMappingURL=createArrayWithNumbers.js.map |
| {"version":3,"file":"createArrayWithNumbers.js","sourceRoot":"","sources":["../../src/utils/createArrayWithNumbers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,MAAc;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAS,EAAE,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"} |
| export default () => `RSI-${Math.random() | ||
| .toString(36) | ||
| .substr(2, 9)}`; | ||
| //# sourceMappingURL=createRandomName.js.map |
| {"version":3,"file":"createRandomName.js","sourceRoot":"","sources":["../../src/utils/createRandomName.ts"],"names":[],"mappings":"AAAA,eAAe,GAAW,EAAE,CAAE,OAAO,IAAI,CAAC,MAAM,EAAE;KAC7C,QAAQ,CAAC,EAAE,CAAC;KACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA"} |
| import { RUNNING } from '../constants'; | ||
| export default (pause) => (pause ? 'paused' : RUNNING); | ||
| //# sourceMappingURL=getPauseState.js.map |
| {"version":3,"file":"getPauseState.js","sourceRoot":"","sources":["../../src/utils/getPauseState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,eAAe,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC"} |
| import getPlayState from './getPauseState'; | ||
| describe('getPlayState', () => { | ||
| it('should return correct value', () => { | ||
| expect(getPlayState(true)).toEqual('paused'); | ||
| expect(getPlayState(false)).toEqual('running'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=getPauseState.test.js.map |
| {"version":3,"file":"getPauseState.test.js","sourceRoot":"","sources":["../../src/utils/getPauseState.test.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| import isUndefined from './isUndefined'; | ||
| export default function getSequenceId(sequenceIndex, sequenceId, defaultValue) { | ||
| if (isUndefined(sequenceId) && isUndefined(sequenceIndex)) { | ||
| return defaultValue || 0; | ||
| } | ||
| if (sequenceIndex && sequenceIndex >= 0) { | ||
| return sequenceIndex; | ||
| } | ||
| if (sequenceId) { | ||
| return sequenceId; | ||
| } | ||
| return 0; | ||
| } | ||
| //# sourceMappingURL=getSequenceId.js.map |
| {"version":3,"file":"getSequenceId.js","sourceRoot":"","sources":["../../src/utils/getSequenceId.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,aAAsB,EACtB,UAA4B,EAC5B,YAA8B;IAE9B,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE;QACzD,OAAO,YAAY,IAAI,CAAC,CAAC;KAC1B;IAED,IAAI,aAAa,IAAI,aAAa,IAAI,CAAC,EAAE;QACvC,OAAO,aAAa,CAAC;KACtB;IAED,IAAI,UAAU,EAAE;QACd,OAAO,UAAU,CAAC;KACnB;IAED,OAAO,CAAC,CAAC;AACX,CAAC"} |
| import getSequenceId from './getSequenceId'; | ||
| describe('getSequenceId', () => { | ||
| it('should return 0 when both undefined', () => { | ||
| expect(getSequenceId(undefined, undefined)).toEqual(0); | ||
| }); | ||
| it('should return sequence index when defined', () => { | ||
| expect(getSequenceId(1, undefined)).toEqual(1); | ||
| }); | ||
| it('should return sequence id when defined', () => { | ||
| expect(getSequenceId(undefined, '2')).toEqual('2'); | ||
| }); | ||
| it('should return default when nothing defined', () => { | ||
| expect(getSequenceId(undefined, undefined, 2)).toEqual(2); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=getSequenceId.test.js.map |
| {"version":3,"file":"getSequenceId.test.js","sourceRoot":"","sources":["../../src/utils/getSequenceId.test.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default (val) => val === undefined; | ||
| //# sourceMappingURL=isUndefined.js.map |
| {"version":3,"file":"isUndefined.js","sourceRoot":"","sources":["../../src/utils/isUndefined.ts"],"names":[],"mappings":"AAAA,eAAe,CAAC,GAAY,EAAoB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC"} |
| import isUndefined from './isUndefined'; | ||
| describe('isUndefined', () => { | ||
| it('should return true when it is an undefined value', () => { | ||
| expect(isUndefined(undefined)).toBeTruthy(); | ||
| }); | ||
| it('should return false when it is not an undefined value', () => { | ||
| expect(isUndefined(null)).toBeFalsy(); | ||
| expect(isUndefined('')).toBeFalsy(); | ||
| expect(isUndefined('undefined')).toBeFalsy(); | ||
| expect(isUndefined(0)).toBeFalsy(); | ||
| expect(isUndefined([])).toBeFalsy(); | ||
| expect(isUndefined({})).toBeFalsy(); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=isUndefined.test.js.map |
| {"version":3,"file":"isUndefined.test.js","sourceRoot":"","sources":["../../src/utils/isUndefined.test.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| export default (ms) => (ms || 0) * 1000; | ||
| //# sourceMappingURL=secToMs.js.map |
| {"version":3,"file":"secToMs.js","sourceRoot":"","sources":["../../src/utils/secToMs.ts"],"names":[],"mappings":"AAAA,eAAe,CAAC,EAAU,EAAU,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC"} |
| import secToMs from './secToMs'; | ||
| describe('secToMs', () => { | ||
| it('should convert to', () => { | ||
| expect(secToMs(1)).toEqual(1000); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=secToMs.test.js.map |
| {"version":3,"file":"secToMs.test.js","sourceRoot":"","sources":["../../src/utils/secToMs.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
57263
-54.98%40
-63.3%944
-45.81%