import React from 'react'; import { JSONSchema7 } from 'json-schema'; import { ComponentSchema } from '@sunmao-ui/core'; import { EditorServicesInterface } from './editor'; import * as TypeBox from '@sinclair/typebox'; export interface WidgetOptionsMap { } declare module '@sinclair/typebox' { interface CustomOptions { widget?: undefined; widgetOptions?: undefined; } type AllWidgets = keyof WidgetOptionsMap extends infer type ? type extends keyof WidgetOptionsMap ? { widget: type; widgetOptions?: WidgetOptionsMap[type]; } : never : never; type OmitWidgetFields = Omit; type GetSpecOptions = AllWidgets & OmitWidgetFields; interface TypeBuilder { ReadonlyOptional(item: T): TypeBox.TReadonlyOptional; Readonly(item: T): TypeBox.TReadonly; Optional(item: T): TypeBox.TOptional; Tuple(items: [...T], options?: GetSpecOptions): TypeBox.TTuple>; Object(properties: T, options?: GetSpecOptions): TypeBox.TObject>; Intersect(items: [...T], options?: GetSpecOptions): TypeBox.TIntersect>; Union(items: [...T], options?: GetSpecOptions): TypeBox.TUnion>; Array(items: T, options?: GetSpecOptions): TypeBox.TArray>; Enum(item: T, options?: GetSpecOptions): TypeBox.TEnum[]>>; Literal(value: T, options?: GetSpecOptions): TypeBox.TLiteral>; String(options?: GetSpecOptions>): TypeBox.TString; RegEx(regex: RegExp, options?: GetSpecOptions): TypeBox.TString; Number(options?: GetSpecOptions): TypeBox.TNumber; Integer(options?: GetSpecOptions): TypeBox.TInteger; Boolean(options?: GetSpecOptions): TypeBox.TBoolean; Null(options?: GetSpecOptions): TypeBox.TNull; Unknown(options?: GetSpecOptions): TypeBox.TUnknown; Any(options?: GetSpecOptions): TypeBox.TAny; KeyOf>(schema: T, options?: GetSpecOptions): TypeBox.TKeyOf; Record(key: K, value: T, options?: GetSpecOptions): TypeBox.TRecord>; Required>(schema: T, options?: GetSpecOptions): TypeBox.TObject>; Partial>(schema: T, options?: GetSpecOptions): TypeBox.TObject>; Pick, K extends (keyof T['_infer'])[]>(schema: T, keys: [...K], options?: GetSpecOptions): TypeBox.TObject>; Omit, K extends (keyof T['_infer'])[]>(schema: T, keys: [...K], options?: GetSpecOptions): TypeBox.TObject>; Strict(schema: T, options?: GetSpecOptions): T; Constructor(args: [...T], returns: U, options?: GetSpecOptions): TypeBox.TConstructor>; Function(args: [...T], returns: U, options?: GetSpecOptions): TypeBox.TFunction>; Promise(item: T, options?: GetSpecOptions): TypeBox.TPromise>; Undefined(options?: GetSpecOptions): TypeBox.TUndefined; Void(options?: GetSpecOptions): TypeBox.TVoid; Rec(callback: (self: TypeBox.TAny) => T, options?: GetSpecOptions): T; Namespace(definitions: T, options?: GetSpecOptions): TypeBox.TNamespace; Ref, K extends keyof T['definitions']>(box: T, key: K): T['definitions'][K]; Ref(schema: T): T; } } export declare type WidgetProps = { component: ComponentSchema; spec: JSONSchema7 & Omit & { widget?: keyof WidgetOptionsMap; widgetOptions?: WidgetOptionsMap[WidgetType]; }; services: EditorServicesInterface; path: string[]; level: number; value: ValueType; onChange: (v: ValueType, ...args: any[]) => void; }; export declare type Widget = { kind: 'Widget'; version: string; metadata: { name: string; }; spec?: { options?: JSONSchema7; }; }; export declare type CreateWidgetOptions = Omit; export declare type ImplementedWidget = CreateWidgetOptions & { impl: React.ComponentType>; };