import type { AlphaFilterOptions, BlurFilterOptions, ColorMatrix, FilterOptions as PixiFilterOptions, NoiseFilterOptions, Point } from "pixi.js";
import type * as PixiFilters from "pixi-filters";
import { FilterableItem, Item } from "./item.js";
export type PixelateFilterOptions = {
    size?: number | number[] | Point;
};
export type EmbossFilterOptions = {
    strength?: number;
};
export type ChoiceOptions = string[] | Record<string, string | number> | number[];
export type ChoiceFilterProperty = {
    type: "choice";
    options: ChoiceOptions;
    default: string | number;
};
export type NumericFilterProperty = {
    type: "number";
    min: number;
    max: number;
    default: number;
    step?: number;
};
export type ColorFilterProperty = {
    type: "color";
    default: string;
};
export type BooleanFilterProperty = {
    type: "boolean";
    default: boolean;
};
export type ObjectFilterProperty = {
    type: "object";
    properties: Record<string, FilterPropertyConfig>;
};
export type ArrayFilterProperty = {
    type: "array";
    items: FilterPropertyConfig[];
};
export type FilterPropertyConfig = NumericFilterProperty | ColorFilterProperty | BooleanFilterProperty | ChoiceFilterProperty | ObjectFilterProperty | ArrayFilterProperty;
export interface FilterSchema {
    [property: string]: FilterPropertyConfig;
}
export type SchemaFromOptions<T> = {
    [K in keyof Required<T>]?: FilterPropertyConfig;
};
type FilterDefinition<TType extends string, TParams> = {
    type: TType;
    schema: SchemaFromOptions<TParams>;
    _params?: TParams;
};
export declare const filters: {
    readonly adjustment: FilterDefinition<"AdjustmentFilter", PixiFilters.AdjustmentFilterOptions>;
    readonly advancedBloom: FilterDefinition<"AdvancedBloomFilter", PixiFilters.AdvancedBloomFilterOptions>;
    readonly alpha: FilterDefinition<"AlphaFilter", AlphaFilterOptions>;
    readonly ascii: FilterDefinition<"AsciiFilter", PixiFilters.AsciiFilterOptions>;
    readonly backdropBlur: FilterDefinition<"BackdropBlurFilter", BlurFilterOptions>;
    readonly bevel: FilterDefinition<"BevelFilter", PixiFilters.BevelFilterOptions>;
    readonly bloom: FilterDefinition<"BloomFilter", PixiFilters.BloomFilterOptions>;
    readonly blur: FilterDefinition<"BlurFilter", BlurFilterOptions>;
    readonly bulgePinch: FilterDefinition<"BulgePinchFilter", PixiFilters.BulgePinchFilterOptions>;
    readonly colorGradient: FilterDefinition<"ColorGradientFilter", PixiFilters.ColorGradientFilterOptions | PixiFilters.ColorGradientFilterCSSOptions>;
    readonly colorMatrix: FilterDefinition<"ColorMatrixFilter", PixiFilterOptions & {
        matrix?: ColorMatrix;
    }>;
    readonly colorOverlay: FilterDefinition<"ColorOverlayFilter", PixiFilters.ColorOverlayFilterOptions>;
    readonly colorReplace: FilterDefinition<"ColorReplaceFilter", PixiFilters.ColorReplaceFilterOptions>;
    readonly convolution: FilterDefinition<"ConvolutionFilter", PixiFilters.ConvolutionFilterOptions>;
    readonly crossHatch: FilterDefinition<"CrossHatchFilter", {}>;
    readonly crt: FilterDefinition<"CRTFilter", PixiFilters.CRTFilterOptions>;
    readonly dot: FilterDefinition<"DotFilter", PixiFilters.DotFilterOptions>;
    readonly dropShadow: FilterDefinition<"DropShadowFilter", PixiFilters.DropShadowFilterOptions>;
    readonly emboss: FilterDefinition<"EmbossFilter", EmbossFilterOptions>;
    readonly glitch: FilterDefinition<"GlitchFilter", PixiFilters.GlitchFilterOptions>;
    readonly glow: FilterDefinition<"GlowFilter", PixiFilters.GlowFilterOptions>;
    readonly godray: FilterDefinition<"GodrayFilter", PixiFilters.GodrayFilterOptions>;
    readonly grayscale: FilterDefinition<"GrayscaleFilter", {}>;
    readonly hslAdjustment: FilterDefinition<"HslAdjustmentFilter", PixiFilters.HslAdjustmentFilterOptions>;
    readonly kawaseBlur: FilterDefinition<"KawaseBlurFilter", PixiFilters.KawaseBlurFilterOptions>;
    readonly motionBlur: FilterDefinition<"MotionBlurFilter", PixiFilters.MotionBlurFilterOptions>;
    readonly multiColorReplace: FilterDefinition<"MultiColorReplaceFilter", PixiFilters.MultiColorReplaceFilterOptions>;
    readonly noise: FilterDefinition<"NoiseFilter", NoiseFilterOptions>;
    readonly oldFilm: FilterDefinition<"OldFilmFilter", PixiFilters.OldFilmFilterOptions>;
    readonly outline: FilterDefinition<"OutlineFilter", PixiFilters.OutlineFilterOptions>;
    readonly pixelate: FilterDefinition<"PixelateFilter", PixelateFilterOptions>;
    readonly radialBlur: FilterDefinition<"RadialBlurFilter", PixiFilters.RadialBlurFilterOptions>;
    readonly reflection: FilterDefinition<"ReflectionFilter", PixiFilters.ReflectionFilterOptions>;
    readonly rgbSplit: FilterDefinition<"RGBSplitFilter", PixiFilters.RGBSplitFilterOptions>;
    readonly shockwave: FilterDefinition<"ShockwaveFilter", PixiFilters.ShockwaveFilterOptions>;
    readonly simplexNoise: FilterDefinition<"SimplexNoiseFilter", PixiFilters.SimplexNoiseFilterOptions>;
    readonly tiltShift: FilterDefinition<"TiltShiftFilter", PixiFilters.TiltShiftFilterOptions>;
    readonly twist: FilterDefinition<"TwistFilter", Partial<PixiFilters.TwistFilterOptions>>;
    readonly zoomBlur: FilterDefinition<"ZoomBlurFilter", PixiFilters.ZoomBlurFilterOptions>;
};
type FilterDefinitions = typeof filters;
type FilterDefinitionParams<T> = T extends FilterDefinition<string, infer TParams> ? TParams : never;
export type FilterOptions = {
    [TName in keyof FilterDefinitions as FilterDefinitions[TName]["type"]]: FilterDefinitionParams<FilterDefinitions[TName]>;
};
export type FilterType = FilterDefinitions[keyof FilterDefinitions]["type"];
export type FilterParams<T extends FilterType = FilterType> = FilterOptions[T];
export interface FilterAction<TFilter extends FilterType> {
    <T extends FilterableItem>(item: T, params?: FilterParams<TFilter>): T;
    make(params?: FilterParams<TFilter>): Item.Filter<TFilter>;
}
export type FilterActions = {
    [TName in keyof typeof filters]: FilterAction<(typeof filters)[TName]["type"]>;
};
export {};
