import { WidgetFamily } from '../../../types/scriptable.js'; type AddMethodKeys = Extract; type ReturnTypes = { [K in AddMethodKeys]: ListWidget[K] extends (...args: any[]) => infer R ? R : never; }; type WidgetElements = ReturnTypes[AddMethodKeys][]; type WidgetPadding = (typeof ListWidget.prototype)['setPadding'] extends (top: infer T, leading: infer L, bottom: infer B, trailing: infer R) => void ? { top: T; leading: L; bottom: B; trailing: R; } : never; type BackgroundProps = Pick; type WidgetBackground = { [K in keyof BackgroundProps]: { type: K extends 'backgroundColor' ? 'color' : K extends 'backgroundImage' ? 'image' : 'gradient'; value: BackgroundProps[K]; }; }[keyof BackgroundProps]; type AlignmentMethods = Extract; type WidgetAlignment = { [K in AlignmentMethods as K extends `${infer Base}AlignContent` ? Base : never]: boolean; }; type ContentModeProps = Pick; type WidgetContentMode = { [K in keyof ContentModeProps]: boolean; }; type ListWidgetConfig = { family: WidgetFamily; } & Pick & { padding: WidgetPadding; }; export type { ListWidgetConfig, WidgetAlignment, WidgetBackground, WidgetContentMode, WidgetElements, WidgetPadding };