import type { App } from './api/index.js' export interface PluginDescriptor { id: string label: string app: App packageName?: string homepage?: string componentStateTypes?: string[] logo?: string disableAppScope?: boolean disablePluginScope?: boolean /** * Run the plugin setup and expose the api even if the devtools is not opened yet. * Useful to record timeline events early. */ enableEarlyProxy?: boolean settings?: Record } export type PluginSettingsItem = { label: string description?: string } & ({ type: 'boolean' defaultValue: boolean } | { type: 'choice' defaultValue: string | number options: { value: string | number, label: string }[] component?: 'select' | 'button-group' } | { type: 'text' defaultValue: string }) type InferSettingsType< T extends PluginSettingsItem, > = [T] extends [{ type: 'boolean' }] ? boolean : [T] extends [{ type: 'choice' }] ? T['options'][number]['value'] : [T] extends [{ type: 'text' }] ? string : unknown export type ExtractSettingsTypes< O extends Record, > = { [K in keyof O]: InferSettingsType }