import React, { useState } from 'react'; import * as Dialog from '@radix-ui/react-dialog'; import { motion } from 'framer-motion'; import { toast } from 'react-toastify'; import { Button } from '~/components/ui/Button'; import { githubConnectionStore } from '~/lib/stores/githubConnection'; interface AuthDialogProps { isOpen: boolean; onClose: () => void; } export function AuthDialog({ isOpen, onClose }: AuthDialogProps) { const [token, setToken] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const [tokenType, setTokenType] = useState<'classic' | 'fine-grained'>('classic'); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!token.trim()) { toast.error('Please enter a valid GitHub token'); return; } setIsSubmitting(true); try { await githubConnectionStore.connect(token.trim(), tokenType); toast.success('Successfully connected to GitHub!'); onClose(); setToken(''); } catch (error) { console.error('GitHub connection failed:', error); toast.error(`Failed to connect to GitHub: ${error instanceof Error ? error.message : 'Unknown error'}`); } finally { setIsSubmitting(false); } }; const handleClose = () => { if (!isSubmitting) { setToken(''); onClose(); } }; return (
Connect to GitHub
setToken(e.target.value)} placeholder="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" className="w-full px-3 py-2 bg-bolt-elements-background-depth-2 border border-bolt-elements-borderColor rounded-md text-bolt-elements-textPrimary placeholder-bolt-elements-textTertiary focus:outline-none focus:ring-1 focus:ring-bolt-elements-borderColorActive" disabled={isSubmitting} autoComplete="off" />

To create a GitHub Personal Access Token:

  1. Go to GitHub Settings → Developer settings → Personal access tokens
  2. Click "Generate new token"
  3. Select appropriate scopes (repo, user, etc.)
  4. Copy and paste the token here

Learn more about creating tokens →

); }