upsetjs import type { ISets , ISetCombinations } from '@upsetjs/model' ; export interface ITextLocation { text : { x : number ; y : number ; } ; } export interface ICircle { r : number ; cx : number ; cy : number ; } export interface IEllipse { rx : number ; ry : number ; rotation : number ; cx : number ; cy : number ; } export interface ITextCircle extends ICircle , ITextLocation { align : 'start' | 'end' | 'middle' ; verticalAlign : 'top' | 'bottom' ; } export interface ITextEllipse extends IEllipse , ITextLocation { align : 'start' | 'end' | 'middle' ; verticalAlign : 'top' | 'bottom' ; } export interface IArc { x2 : number ; y2 : number ; sweep : boolean ; large : boolean ; ref : number ; mode : 'i' | 'o' ; } export interface IArcSlice { sets : readonly number [ ] ; x1 : number ; y1 : number ; arcs : readonly IArc [ ] ; path ? : string ; } export interface ITextArcSlice extends IArcSlice , ITextLocation { } export interface IUniverseSet extends IArcSlice { width : number ; height : number ; } export interface ITextUniverseSet extends IUniverseSet , ITextLocation { } export interface IVennDiagramLayoutGenerator { readonly maxSets : number ; compute < T > ( sets , combinations , width , height ) : IVennDiagramLayout ; } export interface IVennDiagramLayout { sets : ( ITextCircle | ITextEllipse ) [ ] ; universe ? : ITextUniverseSet ; intersections : ITextArcSlice [ ] ; } export function isEllipse ( d ) { return typeof ( d as ITextEllipse ) . rx === 'number' ; }