| 
							 | 
						import { useState, useEffect } from 'react' | 
					
					
						
						| 
							 | 
						import { useTabVisibility } from '@/contexts/useTabVisibility' | 
					
					
						
						| 
							 | 
						import { backendBaseUrl } from '@/lib/constants' | 
					
					
						
						| 
							 | 
						import { useTranslation } from 'react-i18next' | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						export default function ApiSite() { | 
					
					
						
						| 
							 | 
						  const { t } = useTranslation() | 
					
					
						
						| 
							 | 
						  const { isTabVisible } = useTabVisibility() | 
					
					
						
						| 
							 | 
						  const isApiTabVisible = isTabVisible('api') | 
					
					
						
						| 
							 | 
						  const [iframeLoaded, setIframeLoaded] = useState(false) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						   | 
					
					
						
						| 
							 | 
						  useEffect(() => { | 
					
					
						
						| 
							 | 
						    if (!iframeLoaded) { | 
					
					
						
						| 
							 | 
						      setIframeLoaded(true) | 
					
					
						
						| 
							 | 
						    } | 
					
					
						
						| 
							 | 
						  }, [iframeLoaded]) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						   | 
					
					
						
						| 
							 | 
						  return ( | 
					
					
						
						| 
							 | 
						    <div className={`size-full ${isApiTabVisible ? '' : 'hidden'}`}> | 
					
					
						
						| 
							 | 
						      {iframeLoaded ? ( | 
					
					
						
						| 
							 | 
						        <iframe | 
					
					
						
						| 
							 | 
						          src={backendBaseUrl + '/docs'} | 
					
					
						
						| 
							 | 
						          className="size-full w-full h-full" | 
					
					
						
						| 
							 | 
						          style={{ width: '100%', height: '100%', border: 'none' }} | 
					
					
						
						| 
							 | 
						          // Use key to ensure iframe doesn't reload | 
					
					
						
						| 
							 | 
						          key="api-docs-iframe" | 
					
					
						
						| 
							 | 
						        /> | 
					
					
						
						| 
							 | 
						      ) : ( | 
					
					
						
						| 
							 | 
						        <div className="flex h-full w-full items-center justify-center bg-background"> | 
					
					
						
						| 
							 | 
						          <div className="text-center"> | 
					
					
						
						| 
							 | 
						            <div className="mb-2 h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent"></div> | 
					
					
						
						| 
							 | 
						            <p>{t('apiSite.loading')}</p> | 
					
					
						
						| 
							 | 
						          </div> | 
					
					
						
						| 
							 | 
						        </div> | 
					
					
						
						| 
							 | 
						      )} | 
					
					
						
						| 
							 | 
						    </div> | 
					
					
						
						| 
							 | 
						  ) | 
					
					
						
						| 
							 | 
						} | 
					
					
						
						| 
							 | 
						
 |