import { fabric } from 'fabric' ; import { IFilter } from '../handlers/ImageHandler' ; export type AnimationType = 'fade' | 'bounce' | 'shake' | 'scaling' | 'rotation' | 'flash' | 'custom' | 'none' ; export interface AnimationProperty { delay ? : number ; duration ? : number ; autoplay ? : boolean ; loop ? : boolean | number ; type : AnimationType ; offset ? : number ; opacity ? : number ; bounce ? : 'vertical' | 'horizontal' ; shake ? : 'vertical' | 'horizontal' ; scale ? : number ; angle ? : number ; fill ? : string | fabric . Pattern ; stroke ? : string ; } export interface LinkProperty { enabled ? : boolean ; type ? : string ; state ? : string ; [ key ] : any ; } export interface TooltipProperty { enabled ? : boolean ; type ? : string ; template ? : string ; } export interface TriggerProperty { enabled ? : boolean ; type ? : string ; script ? : string ; effect ? : string ; } export interface FabricCanvasOption { wrapperEl ? : HTMLElement ; } export type FabricCanvas < T extends any = fabric . Canvas > = T & FabricCanvasOption ; export type FabricObjectOption < T extends any = fabric . IObjectOptions > = T & { type { string } id ? : string ; type { string } parentId ? : string ; type { number } originOpacity ? : number ; type { number } originTop ? : number ; type { number } originLeft ? : number ; type { number } originScaleX ? : number ; type { number } originScaleY ? : number ; type { number } originAngle ? : number ; type { ( string | fabric . Pattern | fabric . Gradient ) } originFill ? : string | fabric . Pattern | fabric . Gradient ; type { string } originStroke ? : string ; type { number } originRotation ? : number ; type { boolean } editable ? : boolean ; type { string } superType ? : string ; description type { string } description ? : string ; type { AnimationProperty } animation ? : AnimationProperty ; type { anime . AnimeInstance } anime ? : anime . AnimeInstance ; type { TooltipProperty } tooltip ? : TooltipProperty ; type { LinkProperty } link ? : LinkProperty ; type { boolean } animating ? : boolean ; type { string } class ? : string ; type { boolean } deletable ? : boolean ; type { boolean } dblclick ? : boolean ; type { boolean } cloneable ? : boolean ; type { boolean } locked ? : boolean ; type { number } rotation ? : number ; type { boolean } clickable ? : boolean ; [ key ] : any ; } ; export type FabricObject < T extends any = fabric . Object > = T & FabricObjectOption ; export type FabricGroup = FabricObject < fabric . Group > & { type { FabricObject [ ] } objects ? : FabricObject [ ] ; } ; export type FabricImage = FabricObject & fabric . Image & { type { string } src ? : string ; type { File } file ? : File ; type { IFilter [ ] } filters ? : IFilter [ ] ; _element ? : any ; } ; export interface FabricElement extends FabricObject < fabric . Rect > { type { HTMLDivElement } container : HTMLDivElement ; type { HTMLDivElement } element : HTMLDivElement ; /**
     * Source of Element Object
     */ setSource : ( source : any ) => void ; } export type WorkareaLayout = 'fixed' | 'responsive' | 'fullscreen' ; export interface WorkareaOption { type { string } src ? : string ; type { File } file ? : File ; type { number } width ? : number ; type { number } height ? : number ; type { string } backgroundColor ? : string ; type { WorkareaLayout } layout ? : WorkareaLayout ; } export type WorkareaObject = FabricImage & { type { WorkareaLayout } layout ? : WorkareaLayout ; type { HTMLImageElement } _element ? : HTMLImageElement ; type { boolean } isElement ? : boolean ; type { number } workareaWidth ? : number ; type { number } workareaHeight ? : number ; } ; export interface CanvasOption extends fabric . ICanvasOptions { type { string } id ? : string ; } export interface GridOption { type { boolean } enabled ? : boolean ; type { number } grid ? : number ; type { boolean } snapToGrid ? : boolean ; type { string } lineColor ? : string ; type { string } borderColor ? : string ; } export interface GuidelineOption { type { boolean } enabled ? : boolean ; } export interface KeyEvent { type { boolean } move ? : boolean ; type { boolean } all ? : boolean ; type { boolean } copy ? : boolean ; type { boolean } paste ? : boolean ; type { boolean } esc ? : boolean ; type { boolean } del ? : boolean ; type { boolean } clipboard ? : boolean ; type { boolean } transaction ? : boolean ; type { boolean } zoom ? : boolean ; type { boolean } cut ? : boolean ; grab ? : boolean ; } export type InteractionMode = 'selection' | 'grab' | 'polygon' | 'line' | 'arrow' | 'link' | 'crop' ; export interface FabricEvent < T extends any = Event > extends Omit < fabric . IEvent , 'e' > { e : T ; target ? : FabricObject ; subTargets ? : FabricObject [ ] ; button ? : number ; isClick ? : boolean ; pointer ? : fabric . Point ; absolutePointer ? : fabric . Point ; transform ? : { corner : string ; original : FabricObject ; originX : string ; originY : string ; width : number ; } ; } export type FabricObjects = { [ key ] : { create : ( ... args : any ) => FabricObject ; } ; } ; param { * } obj param { string [ ] } propertiesToInclude param { { [ key : string ] : any } } properties export const toObject = ( obj , propertiesToInclude , properties ? ) => fabric . util . object . extend ( obj . callSuper ( 'toObject' ) , propertiesToInclude . reduce ( ( prev , property ) => Object . assign ( prev , { [ property ] : obj . get ( property ) , } ) , Object . assign ( { } , properties ) ) ) ;