UNPKG

@zodiac-ui/formula

Version:

Formula is a powerful form generator built for Angular. Inspired by Angular Router, Formula provides a declarative interface for building reactive forms.

112 lines (111 loc) 3.51 kB
import { Injector, NgModuleFactory, Type } from "@angular/core"; import { Observable } from "rxjs"; import { AbstractControl, NgForm } from "@angular/forms"; import { FormulaRenderer } from "./renderer/renderers"; import { FormulaNode } from "./node/nodes"; /** * */ export declare type Formula = FormulaControl | FormulaGroup | FormulaArray | FormulaContainer; export declare enum FormulaType { CONTROL = 0, GROUP = 1, ARRAY = 2, CONTAINER = 3 } export interface FormulaData { placeholder?: string; label?: string; [key: string]: any; } export interface FormulaResolve { [key: string]: Type<any>; } export interface FormulaResolveData { [key: string]: any; } export declare type FormulaLoadChildrenCallback = () => Type<any> | NgModuleFactory<any> | Promise<Type<any>> | Observable<Type<any>>; export declare type FormulaLoadChildren = string | FormulaLoadChildrenCallback; export interface FormulaControlBase { type: FormulaType.CONTROL; } export interface FormulaControlOptions { name: string; class?: string; component?: Type<any>; data?: FormulaData; default?: any; canLoad?: any[]; canActivate?: any[]; canDeactivate?: any[]; resolve?: FormulaResolve; validators?: any[]; asyncValidators?: any[]; } export declare type FormulaControl = FormulaControlBase & FormulaControlOptions; export interface FormulaGroupBase { type: FormulaType.GROUP; name: string; children: Formula[]; } export interface FormulaGroupOptions { name: string; class?: string; data?: FormulaData; component?: Type<any>; canLoad?: any[]; canActivateChild?: any[]; loadChildren?: FormulaLoadChildren; resolve?: FormulaResolve; validators?: any[]; asyncValidators?: any[]; } export declare type FormulaGroup = FormulaGroupBase & FormulaGroupOptions; export interface FormulaArrayBase { type: FormulaType.ARRAY; children: Formula[]; } export interface FormulaArrayOptions { name: string; class?: string; data?: FormulaData; canLoad?: any[]; canActivateChild?: any[]; component?: Type<any>; loadChildren?: FormulaLoadChildren; resolve?: FormulaResolve; validators?: any[]; asyncValidators?: any[]; } export declare type FormulaArray = FormulaArrayBase & FormulaArrayOptions; export interface FormulaContainerBase { type: FormulaType.CONTAINER; children?: Formula[]; } export interface FormulaContainerOptions { name: string; class?: string; component?: Type<any>; data?: FormulaData; canLoad?: any[]; canActivateChild?: any[]; loadChildren?: FormulaLoadChildren; resolve?: FormulaResolve; } export declare type FormulaContainer = FormulaContainerBase & FormulaContainerOptions; export declare type FormulaOptions<T> = T extends FormulaGroup ? FormulaGroupOptions : T extends FormulaArray ? FormulaArrayOptions : T extends FormulaContainer ? FormulaContainerOptions : FormulaControlOptions; export declare abstract class FormulaContext { abstract data: FormulaData; abstract model: AbstractControl; abstract resolve: FormulaResolveData; } export declare type FormulaRoot = FormulaOutlet & { setForm(form: NgForm): any; }; export interface FormulaOutlet { root: FormulaRoot; parent: FormulaOutlet; node: FormulaNode; renderer: FormulaRenderer; injector: Injector; }