import { Button } from '@/components/ui/button'; import { CommitInput } from './CommitInput'; import { AIHighlightsBox } from './AIHighlightsBox'; import { useDeviceInfo } from '@/lib/device'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { Icon } from "@/components/icon/Icon"; import { useI18n } from '@/lib/i18n'; type CommitAction = 'commit' | 'commitAndPush' | null; interface CommitSectionProps { stagedCount: number; commitMessage: string; onCommitMessageChange: (value: string) => void; generatedHighlights: string[]; onInsertHighlights: (highlights: string[]) => void; onGenerateMessage: () => void; isGeneratingMessage: boolean; onCommit: () => void; onCommitAndPush: () => void; commitAction: CommitAction; hasPendingIndexMutation?: boolean; gitmojiEnabled: boolean; onOpenGitmojiPicker: () => void; } export const CommitSection: React.FC = ({ stagedCount, commitMessage, onCommitMessageChange, generatedHighlights, onInsertHighlights, onGenerateMessage, isGeneratingMessage, onCommit, onCommitAndPush, commitAction, hasPendingIndexMutation = false, gitmojiEnabled, onOpenGitmojiPicker, }) => { const { t } = useI18n(); const hasStagedFiles = stagedCount > 0; const canCommit = commitMessage.trim() && hasStagedFiles && commitAction === null && !hasPendingIndexMutation; const { isMobile, hasTouchInput } = useDeviceInfo(); const containerClassName = 'border-0 bg-transparent rounded-none'; const headerClassName = 'flex w-full items-baseline gap-2 px-0 pt-2 pb-1'; const contentClassName = 'flex flex-col gap-3 px-0 pt-1 pb-3'; return (

{t('gitView.commit.title')}

{!hasStagedFiles ? ( {t('gitView.commit.stageFilesHint')} ) : null}
{gitmojiEnabled && ( )}
{isMobile ? (

{t('gitView.commit.push')}

) : ( )}
); };