import { Field, FieldDescription, FieldLabel, FieldTitle, } from '@/components/ui/field'; import { Input } from '@/components/ui/input'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; import type { PagesGitHubReleaseSelector } from '@/lib/services/openflare'; export interface PagesGitHubSourceFormValue { repositoryURL: string; releaseSelector: PagesGitHubReleaseSelector; releaseTag: string; assetName: string; } export interface PagesGitHubSourceFormErrors { repository: string; releaseTag: string; assetName: string; } interface PagesSourceGitHubFieldsProps { value: PagesGitHubSourceFormValue; errors: PagesGitHubSourceFormErrors; defaultAssetName: string; onChange: (value: PagesGitHubSourceFormValue) => void; onErrorsChange: (errors: PagesGitHubSourceFormErrors) => void; } export function PagesSourceGitHubFields({ value, errors, defaultAssetName, onChange, onErrorsChange, }: PagesSourceGitHubFieldsProps) { return ( <> GitHub 仓库 URL { onChange({ ...value, repositoryURL: event.target.value }); onErrorsChange({ ...errors, repository: '' }); }} /> {errors.repository || '仅支持公开 github.com 仓库。'} Release 选择 { if (selector === 'latest' || selector === 'tag') { onChange({ ...value, releaseSelector: selector }); onErrorsChange({ ...errors, releaseTag: '' }); } }} > 最新 Release 固定 Tag 当前阶段由管理员手动检查并决定是否发布。 {value.releaseSelector === 'tag' ? ( Release tag { onChange({ ...value, releaseTag: event.target.value }); onErrorsChange({ ...errors, releaseTag: '' }); }} /> {errors.releaseTag || '精确检查并同步指定 tag。'} ) : null} Release Asset 文件名 { onChange({ ...value, assetName: event.target.value }); onErrorsChange({ ...errors, assetName: '' }); }} /> {errors.assetName || '按文件名精确匹配已上传的 Release Asset。'} ); }