- Updated all component headers and documentation
- Changed navbar and footer branding
- Updated homepage hero badge
- Modified page title in index.html
- Simplified footer text to 'Built with ❤️'
- Consistent V2 capitalization across all references
35 lines
867 B
JavaScript
35 lines
867 B
JavaScript
'use client';
|
|
import { getOwnerWindow } from '@chakra-ui/utils';
|
|
import { useState, useEffect } from 'react';
|
|
import { useEventListener } from './use-event-listener.mjs';
|
|
|
|
function useAnimationState(props) {
|
|
const { isOpen, ref } = props;
|
|
const [mounted, setMounted] = useState(isOpen);
|
|
const [once, setOnce] = useState(false);
|
|
useEffect(() => {
|
|
if (!once) {
|
|
setMounted(isOpen);
|
|
setOnce(true);
|
|
}
|
|
}, [isOpen, once, mounted]);
|
|
useEventListener(
|
|
() => ref.current,
|
|
"animationend",
|
|
() => {
|
|
setMounted(isOpen);
|
|
}
|
|
);
|
|
const hidden = isOpen ? false : !mounted;
|
|
return {
|
|
present: !hidden,
|
|
onComplete() {
|
|
const win = getOwnerWindow(ref.current);
|
|
const evt = new win.CustomEvent("animationend", { bubbles: true });
|
|
ref.current?.dispatchEvent(evt);
|
|
}
|
|
};
|
|
}
|
|
|
|
export { useAnimationState };
|