///
import type { vec2, vec3 } from 'gl-matrix';
import type { DisplayObject } from './display-objects';
import type { IRenderer } from './AbstractRenderer';
import type { CSSGlobalKeywords, CSSGradientValue, CSSKeywordValue, CSSRGB, CSSUnitValue, ParsedTransform } from './css';
import { Syringe } from 'mana-syringe';
export declare enum Shape {
GROUP = "g",
CIRCLE = "circle",
ELLIPSE = "ellipse",
IMAGE = "image",
RECT = "rect",
LINE = "line",
POLYLINE = "polyline",
POLYGON = "polygon",
TEXT = "text",
PATH = "path",
HTML = "html",
MESH = "mesh"
}
declare type ColorType = string | null;
export interface EventPosition {
clientX: number;
clientY: number;
viewportX: number;
viewportY: number;
x: number;
y: number;
}
export declare enum LineCap {
BUTT = "butt",
ROUND = "round",
SQUARE = "square"
}
export declare enum LineJoin {
BEVEL = "bevel",
ROUND = "round",
MITER = "miter"
}
export declare enum TextTransform {
CAPITALIZE = "capitalize",
UPPERCASE = "uppercase",
LOWERCASE = "lowercase",
NONE = "none"
}
export declare enum TextAlign {
START = "start",
CENTER = "center",
END = "end",
LEFT = "left",
RIGHT = "right"
}
export interface BaseStyleProps {
class?: string;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform
*/
transform?: string;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin
*/
transformOrigin?: string;
/**
* how do we define the 'position' of a shape?
* eg. the default anchor of a Rect is top-left, we can change it to its' center [0.5, 0.5].
*/
anchor?: vec2 | vec3;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/visibility
*/
visibility?: 'visible' | 'hidden' | CSSGlobalKeywords;
/**
* use `pointerEvents` instead
* @deprecated
*/
interactive?: boolean;
/**
* @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/pointer-events
*/
pointerEvents?: 'none' | 'auto' | 'stroke' | 'fill' | 'painted' | 'visible' | 'visiblestroke' | 'visiblefill' | 'visiblepainted' | 'bounding-box' | 'all' | CSSGlobalKeywords;
/**
* z-index in CSS
*/
zIndex?: number;
/**
* the cursor style when the target is active
*/
cursor?: Cursor;
/**
* clip path
* @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/clip-path
*/
clipPath?: DisplayObject | null;
clipPathTargets?: DisplayObject[];
/**
* offset path
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Motion_Path
*/
offsetPath?: DisplayObject | null;
offsetPathTargets?: DisplayObject[];
stroke?: ColorType;
/** 描边透明度 */
strokeOpacity?: number;
/** 填充颜色 */
fill?: ColorType;
/** 填充透明度 */
fillOpacity?: number;
/** 整体透明度 */
opacity?: number;
/** 线宽 */
lineWidth?: string | number;
/**
* increased line width when hitting test
*/
increasedLineWidthForHitTesting?: string | number;
/**
* 交互区域
*/
hitArea?: DisplayObject | null;
/** 指定如何绘制每一条线段末端 */
lineCap?: CanvasLineCap;
/** 用来设置2个长度不为0的相连部分(线段,圆弧,曲线)如何连接在一起的属性(长度为0的变形部分,其指定的末端和控制点在同一位置,会被忽略) */
lineJoin?: CanvasLineJoin;
/**
* 设置线的虚线样式,可以指定一个数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。 如果数组元素的数量是奇数, 数组的元素会被复制并重复。例如, [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。这个属性取决于浏览器是否支持 setLineDash() 函数。
*/
lineDash?: string | (string | number)[];
lineDashOffset?: number;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur
*/
shadowBlur?: number;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor
*/
shadowColor?: ColorType;
/** 阴影 x 方向偏移量 */
shadowOffsetX?: number;
/** 阴影 y 方向偏移量 */
shadowOffsetY?: number;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/filter
*/
filter?: string;
/**
* @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-transform
*/
textTransform?: TextTransform | '';
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/miterLimit
*/
miterLimit?: number;
display?: string;
}
export interface ParsedBaseStyleProps extends Omit {
zIndex?: CSSUnitValue;
visibility?: CSSKeywordValue;
pointerEvents?: CSSKeywordValue;
opacity?: CSSUnitValue;
fillOpacity?: CSSUnitValue;
strokeOpacity?: CSSUnitValue;
fill?: CSSRGB | CSSGradientValue;
stroke?: CSSRGB | CSSGradientValue;
lineDash?: [CSSUnitValue, CSSUnitValue];
lineCap?: CSSKeywordValue;
lineJoin?: CSSKeywordValue;
lineDashOffset?: CSSUnitValue;
anchor?: [CSSUnitValue, CSSUnitValue, CSSUnitValue];
transform: ParsedTransform[];
transformOrigin?: [CSSUnitValue, CSSUnitValue, CSSUnitValue];
width?: CSSUnitValue;
height?: CSSUnitValue;
lineWidth?: CSSUnitValue;
increasedLineWidthForHitTesting?: CSSUnitValue;
/**
* x according to definition, eg. Line's x1/x2, Polyline's points
*/
defX?: number;
defY?: number;
/**
* offset relative to initial definition
*/
offsetX?: number;
offsetY?: number;
shadowColor?: CSSRGB;
shadowBlur?: CSSUnitValue;
shadowOffsetX?: CSSUnitValue;
shadowOffsetY?: CSSUnitValue;
textTransform?: CSSKeywordValue;
}
export declare type Cursor = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' | 'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'grab' | 'grabbing' | 'all-scroll' | 'col-resize' | 'row-resize' | 'n-resize' | 'e-resize' | 's-resize' | 'w-resize' | 'ne-resize' | 'nw-resize' | 'se-resize' | 'sw-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'zoom-in' | 'zoom-out';
export interface RendererConfig {
/**
* enable dirty check for displayobject
*/
enableDirtyCheck: boolean;
/**
* enable dirty rectangle rendering
*/
enableDirtyRectangleRendering: boolean;
enableDirtyRectangleRenderingDebug: boolean;
/**
* enable auto rendering
*/
enableAutoRendering: boolean;
}
export declare const CanvasConfig: Syringe.DefinedToken;
export interface CanvasConfig {
/**
* Renderer
*/
renderer: IRenderer;
/**
* 容器
*/
container?: string | HTMLElement;
/**
* support OffscreenCanvas
*/
canvas?: HTMLCanvasElement | OffscreenCanvas;
/**
* used in text measurement & texture generation
*/
offscreenCanvas?: HTMLCanvasElement | OffscreenCanvas;
/**
* window.devicePixelRatio
*/
devicePixelRatio?: number;
/**
* rAF
*/
requestAnimationFrame?: (callback: FrameRequestCallback) => number;
cancelAnimationFrame?: (id: number) => void;
/**
* replace `new window.Image()`
*/
createImage?: (src: string) => HTMLImageElement;
/**
* limits query
*/
supportPointerEvent?: boolean;
supportTouchEvent?: boolean;
isTouchEvent?: (event: InteractivePointerEvent) => event is TouchEvent;
isMouseEvent?: (event: InteractivePointerEvent) => event is MouseEvent;
/**
* 画布宽度
*/
width?: number;
/**
* 画布高度
*/
height?: number;
/**
* 画布背景色
*/
background?: ColorType;
/**
* 画布的 cursor 样式
*/
cursor?: Cursor;
[key: string]: any;
}
declare type A = ['a' | 'A', number, number, number, number, number, number, number];
declare type C = ['c' | 'C', number, number, number, number, number, number];
declare type O = ['o' | 'O', number, number];
declare type H = ['h' | 'H', number];
declare type L = ['l' | 'L', number, number];
declare type M = ['m' | 'M', number, number];
declare type R = ['r' | 'R', number, number, number, number];
declare type Q = ['q' | 'Q', number, number, number, number];
declare type S = ['s' | 'S', number, number, number, number, number, number, number];
declare type T = ['t' | 'T', number, number];
declare type V = ['v' | 'V', number];
declare type U = ['u' | 'U', number, number, number];
declare type Z = ['z' | 'Z'];
export declare type PathCommand = A | C | O | H | L | M | R | Q | S | T | V | U | Z;
export declare type InteractivePointerEvent = PointerEvent | TouchEvent | MouseEvent | WheelEvent;
export declare type Tuple4 = [T, T, T, T];
export declare type Tuple4Number = Tuple4;
export declare type Tuple3 = [T, T, T];
export declare type Tuple3Number = Tuple3;
export declare type ComninedValue = T | [T] | [T, T] | [T, T, T] | Tuple4;
export declare type CombinedNumber = ComninedValue;
export declare type Length = number;
declare type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
export declare type Percentage = `${Digit}%` | `${Digit}${Digit}%`;
export declare type LengthOrPercentage = Length | Percentage;
export declare type LengthOrPercentageOrAuto = Length | Percentage | 'auto';
export {};