| import React from 'react'; | |
| import { Switch } from '~/components/ui/Switch'; | |
| import { PromptLibrary } from '~/lib/common/prompt-library'; | |
| import { useSettings } from '~/lib/hooks/useSettings'; | |
| export default function FeaturesTab() { | |
| const { | |
| debug, | |
| enableDebugMode, | |
| isLocalModel, | |
| enableLocalModels, | |
| enableEventLogs, | |
| isLatestBranch, | |
| enableLatestBranch, | |
| promptId, | |
| setPromptId, | |
| autoSelectTemplate, | |
| setAutoSelectTemplate, | |
| enableContextOptimization, | |
| contextOptimizationEnabled, | |
| } = useSettings(); | |
| const handleToggle = (enabled: boolean) => { | |
| enableDebugMode(enabled); | |
| enableEventLogs(enabled); | |
| }; | |
| return ( | |
| <div className="p-4 bg-bolt-elements-bg-depth-2 border border-bolt-elements-borderColor rounded-lg mb-4"> | |
| <div className="mb-6"> | |
| <h3 className="text-lg font-medium text-bolt-elements-textPrimary mb-4">Optional Features</h3> | |
| <div className="space-y-4"> | |
| <div className="flex items-center justify-between"> | |
| <span className="text-bolt-elements-textPrimary">Debug Features</span> | |
| <Switch className="ml-auto" checked={debug} onCheckedChange={handleToggle} /> | |
| </div> | |
| <div className="flex items-center justify-between"> | |
| <div> | |
| <span className="text-bolt-elements-textPrimary">Use Main Branch</span> | |
| <p className="text-xs text-bolt-elements-textTertiary"> | |
| Check for updates against the main branch instead of stable | |
| </p> | |
| </div> | |
| <Switch className="ml-auto" checked={isLatestBranch} onCheckedChange={enableLatestBranch} /> | |
| </div> | |
| <div className="flex items-center justify-between"> | |
| <div> | |
| <span className="text-bolt-elements-textPrimary">Auto Select Code Template</span> | |
| <p className="text-xs text-bolt-elements-textTertiary"> | |
| Let Bolt select the best starter template for your project. | |
| </p> | |
| </div> | |
| <Switch className="ml-auto" checked={autoSelectTemplate} onCheckedChange={setAutoSelectTemplate} /> | |
| </div> | |
| <div className="flex items-center justify-between"> | |
| <div> | |
| <span className="text-bolt-elements-textPrimary">Use Context Optimization</span> | |
| <p className="text-sm text-bolt-elements-textSecondary"> | |
| redact file contents form chat and puts the latest file contents on the system prompt | |
| </p> | |
| </div> | |
| <Switch | |
| className="ml-auto" | |
| checked={contextOptimizationEnabled} | |
| onCheckedChange={enableContextOptimization} | |
| /> | |
| </div> | |
| </div> | |
| </div> | |
| <div className="mb-6 border-t border-bolt-elements-borderColor pt-4"> | |
| <h3 className="text-lg font-medium text-bolt-elements-textPrimary mb-4">Experimental Features</h3> | |
| <p className="text-sm text-bolt-elements-textSecondary mb-10"> | |
| Disclaimer: Experimental features may be unstable and are subject to change. | |
| </p> | |
| <div className="flex flex-col"> | |
| <div className="flex items-center justify-between mb-2"> | |
| <span className="text-bolt-elements-textPrimary">Experimental Providers</span> | |
| <Switch className="ml-auto" checked={isLocalModel} onCheckedChange={enableLocalModels} /> | |
| </div> | |
| <p className="text-xs text-bolt-elements-textTertiary mb-4"> | |
| Enable experimental providers such as Ollama, LMStudio, and OpenAILike. | |
| </p> | |
| </div> | |
| <div className="flex items-start justify-between pt-4 mb-2 gap-2"> | |
| <div className="flex-1 max-w-[200px]"> | |
| <span className="text-bolt-elements-textPrimary">Prompt Library</span> | |
| <p className="text-xs text-bolt-elements-textTertiary mb-4"> | |
| Choose a prompt from the library to use as the system prompt. | |
| </p> | |
| </div> | |
| <select | |
| value={promptId} | |
| onChange={(e) => setPromptId(e.target.value)} | |
| className="flex-1 p-2 ml-auto rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary focus:outline-none focus:ring-2 focus:ring-bolt-elements-focus transition-all text-sm min-w-[100px]" | |
| > | |
| {PromptLibrary.getList().map((x) => ( | |
| <option key={x.id} value={x.id}> | |
| {x.label} | |
| </option> | |
| ))} | |
| </select> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| } | |