import classNames from 'classnames' import { memo, useCallback, useMemo } from 'react' import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context' import { useLayoutContext } from '../../../shared/context/layout-context' import { useTranslation } from 'react-i18next' import * as eventTracking from '../../../infrastructure/event-tracking' import OLTooltip from '@/features/ui/components/ol/ol-tooltip' import OLButton from '@/features/ui/components/ol/ol-button' import MaterialIcon from '@/shared/components/material-icon' import { Spinner } from 'react-bootstrap' import { Placement } from 'react-bootstrap/types' import useSynctex from '../hooks/use-synctex' import { useFeatureFlag } from '@/shared/context/split-test-context' const GoToCodeButton = memo(function GoToCodeButton({ syncToCode, syncToCodeInFlight, isDetachLayout, }: { syncToCode: ({ visualOffset }: { visualOffset: number }) => void syncToCodeInFlight: boolean isDetachLayout?: boolean }) { const { t } = useTranslation() const buttonClasses = classNames('synctex-control', { 'detach-synctex-control': !!isDetachLayout, }) let buttonIcon = null if (syncToCodeInFlight) { buttonIcon = (