scriptable-testlab
Version:
A lightweight, efficient tool designed to manage and update scripts for Scriptable.
36 lines (33 loc) • 1.56 kB
text/typescript
import { WidgetFamily } from '../../../types/scriptable.mjs';
type AddMethodKeys = Extract<keyof ListWidget, `add${string}`>;
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<ListWidget, 'backgroundColor' | 'backgroundImage' | 'backgroundGradient'>;
type WidgetBackground = {
[K in keyof BackgroundProps]: {
type: K extends 'backgroundColor' ? 'color' : K extends 'backgroundImage' ? 'image' : 'gradient';
value: BackgroundProps[K];
};
}[keyof BackgroundProps];
type AlignmentMethods = Extract<keyof WidgetStack, `${string}AlignContent`>;
type WidgetAlignment = {
[K in AlignmentMethods as K extends `${infer Base}AlignContent` ? Base : never]: boolean;
};
type ContentModeProps = Pick<WidgetImage, 'resizable' | 'imageSize'>;
type WidgetContentMode = {
[K in keyof ContentModeProps]: boolean;
};
type ListWidgetConfig = {
family: WidgetFamily;
} & Pick<ListWidget, 'backgroundColor' | 'backgroundImage' | 'backgroundGradient' | 'spacing' | 'url' | 'refreshAfterDate' | 'addAccessoryWidgetBackground'> & {
padding: WidgetPadding;
};
export type { ListWidgetConfig, WidgetAlignment, WidgetBackground, WidgetContentMode, WidgetElements, WidgetPadding };