mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
- Implement SpecDialog for managing spec details including title, read mode, priority, and keywords. - Add validation and keyword management functionality. - Integrate SpecDialog into SpecsSettingsPage for editing specs. feat: create index file for specs components - Export SpecCard, SpecDialog, and related types from a new index file for better organization. feat: implement SpecsSettingsPage for managing specs and hooks - Create main settings page with tabs for Project Specs, Personal Specs, Hooks, Injection, and Settings. - Integrate SpecDialog and HookDialog for editing specs and hooks. - Add search functionality and mock data for specs and hooks. feat: add spec management API routes - Implement API endpoints for listing specs, getting spec details, updating frontmatter, rebuilding indices, and initializing the spec system. - Handle errors and responses appropriately for each endpoint.
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
// ========================================
|
|
// Issue Hub Tabs
|
|
// ========================================
|
|
// Tab navigation for IssueHub
|
|
|
|
import { useIntl } from 'react-intl';
|
|
import { Button } from '@/components/ui/Button';
|
|
import { cn } from '@/lib/utils';
|
|
|
|
// Keep in sync with IssueHubHeader/IssueHubPage
|
|
export type IssueTab = 'issues' | 'queue' | 'discovery';
|
|
|
|
interface IssueHubTabsProps {
|
|
currentTab: IssueTab;
|
|
onTabChange: (tab: IssueTab) => void;
|
|
}
|
|
|
|
export function IssueHubTabs({ currentTab, onTabChange }: IssueHubTabsProps) {
|
|
const { formatMessage } = useIntl();
|
|
|
|
const tabs: Array<{ value: IssueTab; label: string }> = [
|
|
{ value: 'issues', label: formatMessage({ id: 'issues.hub.tabs.issues' }) },
|
|
{ value: 'queue', label: formatMessage({ id: 'issues.hub.tabs.queue' }) },
|
|
{ value: 'discovery', label: formatMessage({ id: 'issues.hub.tabs.discovery' }) },
|
|
];
|
|
|
|
return (
|
|
<div className="flex gap-2 border-b border-border">
|
|
{tabs.map((tab) => (
|
|
<Button
|
|
key={tab.value}
|
|
variant="ghost"
|
|
className={cn(
|
|
"border-b-2 rounded-none h-11 px-4",
|
|
currentTab === tab.value
|
|
? "border-primary text-primary"
|
|
: "border-transparent text-muted-foreground hover:text-foreground"
|
|
)}
|
|
onClick={() => onTabChange(tab.value)}
|
|
>
|
|
{tab.label}
|
|
</Button>
|
|
))}
|
|
</div>
|
|
);
|
|
}
|