UNPKG

scriptable-testlab

Version:

A lightweight, efficient tool designed to manage and update scripts for Scriptable.

36 lines (33 loc) 1.56 kB
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 };