"use client"; import { SparklesIcon } from "lucide-react"; import { useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, } from "@/components/ui/empty"; import { Item, ItemActions, ItemTitle, ItemContent, ItemDescription, } from "@/components/ui/item"; import { Switch } from "@/components/ui/switch"; import { useI18n } from "@/core/i18n/hooks"; import { useEnableSkill, useSkills } from "@/core/skills/hooks"; import type { Skill } from "@/core/skills/type"; import { SettingsSection } from "./settings-section"; export function SkillSettingsPage() { const { t } = useI18n(); const { skills, isLoading, error } = useSkills(); return ( {isLoading ? (
Loading...
) : error ? (
Error: {error.message}
) : ( )}
); } function SkillSettingsList({ skills }: { skills: Skill[] }) { const { t } = useI18n(); const [filter, setFilter] = useState<"public" | "custom">("public"); const { mutate: enableSkill } = useEnableSkill(); const filteredSkills = useMemo( () => skills.filter((skill) => skill.category === filter), [skills, filter], ); if (skills.length === 0) { return ( No skill yet Put your skill folders under the `/skills/custom` folder under the root folder of DeerFlow. ); } return (
{filteredSkills.length === 0 && ( No skill yet Put your skill folders under the `skills/{filter}` folder under the root folder of DeerFlow. )} {filteredSkills.length > 0 && filteredSkills.map((skill) => (
{skill.name}
{skill.description}
enableSkill({ skillName: skill.name, enabled: checked }) } />
))}
); }