MCPcopy Index your code
hub / github.com/adobe/react-spectrum / Header

Function Header

packages/dev/s2-docs/src/Header.tsx:114–271  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

112}
113
114export default function Header() {
115 const {currentPage} = useRouter();
116 const [searchOpen, setSearchOpen] = useState(false);
117 const searchMenuId = useId();
118 let ref = useRef(null);
119 let iconRef = useRef<HTMLDivElement | null>(null);
120 let labelRef = useRef<HTMLDivElement | null>(null);
121 let searchRef = useRef<HTMLDivElement | null>(null);
122 let renderCallback = useRef<(() => void) | null>(null);
123
124 let openSearchMenu = async () => {
125 if (!document.startViewTransition) {
126 setSearchOpen(prev => !prev);
127 return;
128 }
129
130 // Preload SearchMenu so it is ready to render immediately.
131 await preloadSearchMenu();
132
133 // Don't transition the entire page.
134 document.documentElement.style.viewTransitionName = 'none';
135 iconRef.current!.style.viewTransitionName = 'search-menu-icon';
136 labelRef.current!.style.viewTransitionName = 'search-menu-label';
137 searchRef.current!.style.viewTransitionName = 'search-menu-search-field';
138 let viewTransition = document.startViewTransition(() => {
139 // Wait until next render. Using flushSync causes flickering.
140 return new Promise<void>(resolve => {
141 iconRef.current!.style.viewTransitionName = '';
142 labelRef.current!.style.viewTransitionName = '';
143 searchRef.current!.style.viewTransitionName = '';
144 renderCallback.current = resolve;
145 setSearchOpen(prev => !prev);
146 });
147 });
148
149 viewTransition.finished.then(() => {
150 document.documentElement.style.viewTransitionName = '';
151 });
152 };
153
154 let closeSearchMenu = () => {
155 if (!document.startViewTransition) {
156 setSearchOpen(false);
157 return;
158 }
159
160 document.documentElement.style.viewTransitionName = 'none';
161 let viewTransition = document.startViewTransition(() => {
162 return new Promise<void>(resolve => {
163 renderCallback.current = resolve;
164 setSearchOpen(false);
165 iconRef.current!.style.viewTransitionName = 'search-menu-icon';
166 labelRef.current!.style.viewTransitionName = 'search-menu-label';
167 searchRef.current!.style.viewTransitionName = 'search-menu-search-field';
168 });
169 });
170
171 viewTransition.finished.then(() => {

Callers

nothing calls this directly

Calls 8

useRouterFunction · 0.90
useIdFunction · 0.90
getLibraryFromPageFunction · 0.90
getBaseUrlFunction · 0.90
pressScaleFunction · 0.90
getButtonIconFunction · 0.85
getButtonTextFunction · 0.85
currentMethod · 0.45

Tested by

no test coverage detected