/** * The research market page inside Settings. * * Laid out the way the shipped settings pages are: a titled header, tabs, then * the body. The first cut put a disclosure paragraph in the most valuable * space on the page and left the reader scrolling past it on every visit — it * now sits under the list, where a footnote belongs, without being any less * present. * * Rows carry Install and Remove rather than a command to paste; what the * button actually runs, and why this panel may run it, is in `../index.ts`. */ import type { InjectFace, PropsLocale } from '@deepseek-ai/dsh-client-ui-slots'; import type { MarketItem } from '../shared/route.js'; import type { MarketState, Store } from './store.js'; import type { PluginConfigView } from './plugin-config.js'; /** The registration-side face this plugin's section injects. */ export interface MarketSectionFace { hooks: { /** Panel snapshot, bound by the renderer as `useMarket`. */ market: Store; }; /** Entries after the current text filter, recomputed per render. */ visible(): readonly MarketItem[]; /** Set the filter text. */ search(query: string): void; /** Copy one entry's install command. */ copy(item: MarketItem): void; /** Install one entry into the running profile. */ install(item: MarketItem): void; /** Remove one entry from the running profile. */ uninstall(item: MarketItem): void; /** Whether the entry is already a bundle in the profile. */ isInstalled(item: MarketItem): boolean; /** Catalog version an installed entry should move to, or undefined when current. */ updateFor(item: MarketItem): string | undefined; /** Whether the install and remove buttons are offered at all. */ canInstall: boolean; /** Restart the host so pending changes take effect. */ restartHost(): void; /** Whether the restart button is offered at all. */ canRestart: boolean; /** Load or reload the catalog. */ refresh(): void; /** Where the full index lives on the web. */ siteUrl: string; } /** Props the slot renderer passes in. */ export type MarketSectionProps = PropsLocale<'settings.researchMarket'> & InjectFace; /** The host owns the native page title; summaries contain inline copy only. */ export declare function MarketPluginConfig(props: MarketSectionProps & PluginConfigView): import("react").JSX.Element; /** * Render the panel. * @param props - runtime hooks, locale binding, and the injected face. * @returns the settings page content. */ export declare function MarketSection(props: MarketSectionProps): JSX.Element;