/** * dsh-ui-tweaks — search manager (browser half). * * Renders the "搜索" settings section, mounted only while the searchEnabled * toggle in 界面调整 is on. The page picks the preferred engine, configures * per-engine API keys (persisted into ~/.dsh/.credentials.yaml through the * same-origin route served by src/search-web.ts), and offers a live engine * test. Turning the toggle off in 界面调整 disposes this section and removes * the provider takeover, restoring the stock search backend. * @module dsh-ui-tweaks/client/search */ import type { SettingsClient } from './index.tsx'; type SearchLabelKey = 'searchTitle' | 'searchIntro' | 'searchEngine' | 'searchEngineHint' | 'searchEngineBing' | 'searchEngineDdg' | 'searchEngineExa' | 'searchEngineTavily' | 'searchEngineKeenable' | 'searchEnginePerplexity' | 'searchEngineDeepseek' | 'bingMarket' | 'bingMarketHint' | 'sectionKeys' | 'keyFree' | 'keyOptional' | 'keyRequired' | 'keyConfigured' | 'keyNotConfigured' | 'keySave' | 'keyClear' | 'keySaved' | 'keyCleared' | 'keyEnvHint' | 'searchTest' | 'searchTesting' | 'searchTestOk' | 'searchTestFail' | 'unavailable' | 'saved' | 'applied'; type Translate = (key: SearchLabelKey) => string; export declare const SEARCH_CSS = "\n.dut-search{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}\n.dut-search-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}\n.dut-search-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}\n.dut-search-head p{margin:4px 0 0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}\n.dut-search-note{padding:0 16px;font-size:11.5px;line-height:1.55;color:var(--dsw-alias-label-tertiary)}\n.dut-search-path{font-family:var(--dsw-font-markdown-code-block-font-family,Consolas,monospace);font-size:11px;color:var(--dsw-alias-label-secondary)}\n.dut-search-grid{display:grid;gap:2px;margin-top:4px}\n.dut-search-row{display:grid;gap:6px;padding:10px 16px;border-radius:12px}\n.dut-search-row:hover{background:var(--dsw-alias-interactive-bg-hover)}\n.dut-search-row-main{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}\n.dut-search-name{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary)}\n.dut-search-badge{flex:none;font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}\n.dut-search-badge.dut-search-ok{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary) 45%,transparent);color:var(--dsw-alias-state-success-primary)}\n.dut-search-badge.dut-search-key{border-color:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 45%,transparent);color:var(--dsw-alias-state-warn-label)}\n.dut-search-badge.dut-search-req{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 45%,transparent);color:var(--dsw-alias-state-error-primary)}\n.dut-search-spacer{flex:1}\n.dut-search-input{box-sizing:border-box;height:30px;width:280px;max-width:100%;padding:0 10px;border-radius:9px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:12.5px}\n.dut-search-input:focus{outline:none;border-color:color-mix(in srgb,var(--dsw-alias-state-business-primary) 55%,transparent)}\n.dut-search-btn{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:11.5px;cursor:pointer;transition:background .15s ease,color .15s ease}\n.dut-search-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dut-search-btn:disabled{opacity:.5;cursor:default}\n.dut-search-status{padding:3px 10px;border-radius:999px;font-size:11.5px;background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);color:var(--dsw-alias-state-success-primary)}\n.dut-search-status.dut-search-err{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}\n"; export interface SearchSectionProps { controller: SettingsClient; t: Translate; } export declare function SearchSection({ controller, t }: SearchSectionProps): import("react").JSX.Element; export {}; //# sourceMappingURL=search.d.ts.map