import type { CreateImageFunction, GeometricMaskShape, ICreateCanvas, SegmentationOutputType as SegmentationOutputTypeBase, TextShapeMask } from '../interface/wordcloud'; import type { TagItemAttribute } from '../wordcloud/interface'; import type { FieldOption } from '../wordcloud/wordcloud'; export interface ImageCloudSegmentationOutputType extends SegmentationOutputTypeBase { transparentMaskCanvas?: HTMLCanvasElement; } export type ImageCollageType = ImageInput & { valid: boolean; aspectRatio: number; x: number; y: number; width: number; height: number; weight: number; opacity: number; padding: number; frequency: number; distance: number; datum: any; clipConfig?: { shape: string; }; _widthWithPadding: number; _heightWithPadding: number; _left: number; _top: number; _leftWithoutPadding: number; _topWithoutPadding: number; } & { [key: string]: any; }; export type GridLayoutCellType = { centerX: number; centerY: number; x: number; y: number; row: number; col: number; distance: number; isEdge?: boolean; intersectPixels?: number; image?: ImageCollageType; }; export type GridLayoutContext = { cellType: 'rect' | 'circle' | 'hexagonal' | string; cellWidth: number; cellHeight: number; cellRadius?: number; cellHexPoints?: { x: number; y: number; }[]; cellHexSideLength?: number; cellInfo: GridLayoutCellType[]; cellCount: number; cellPixelCount: number; clipPath: string; eachPixel: (...args: any) => void; }; export type ImageConfig = { imageSize?: number; imageSizeRange?: [number, number]; padding?: number; }; export type ImageInput = { url: string; weight?: number; }; export type AsType = { visible?: string; x?: string; y?: string; width?: string; height?: string; opacity?: string; angle?: string; clipPath?: string; zIndex?: string; datum?: any; distance?: string; }; export type LayoutConfigType = SpiralLayoutConfig | GridLayoutConfig | StackLayoutConfig; export type SpiralLayoutConfig = { layoutMode: 'spiral'; spiralType?: 'archimedean' | 'rectangular'; fillingTimes?: number; minFillingImageSize?: number; }; export type GridLayoutConfig = { layoutMode: 'grid'; cellType?: 'rect' | 'circle' | 'hexagonal'; rectAspectRatio?: number; placement?: 'default' | 'masked' | 'edge'; }; export type StackLayoutConfig = { layoutMode: 'stack'; placement?: 'default' | 'masked' | 'edge'; maxAngle?: number; }; export type ImageCloudOptions = { size: [number, number] | (() => [number, number]); image: FieldOption | TagItemAttribute | string; weight?: FieldOption | TagItemAttribute | number; imageConfig?: ImageConfig; mask?: string | TextShapeMask | GeometricMaskShape; maskConfig?: { removeWhiteBorder?: boolean; threshold?: number; invert?: boolean; edgeBlur?: number; }; layoutConfig?: LayoutConfigType; ratio?: number; as?: AsType; onUpdateMaskCanvas?: (inputCanvas?: HTMLCanvasElement, maskCanvas?: HTMLCanvasElement) => void; onLayoutEnd?: (images: ImageCollageType[]) => void; onBeforeLayout?: () => void; createCanvas: ICreateCanvas; createImage: CreateImageFunction; };