From 10ed9a4a4e31fc00b9628e259c816caf08ccd4c1 Mon Sep 17 00:00:00 2001 From: Jiande Date: Mon, 14 Aug 2023 18:49:56 +0800 Subject: fix: add Fragment declaration in svg.js.d.ts --- svg.js.d.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/svg.js.d.ts b/svg.js.d.ts index dc61bee..d38ef76 100644 --- a/svg.js.d.ts +++ b/svg.js.d.ts @@ -1204,6 +1204,52 @@ declare module '@svgdotjs/svg.js' { height: number } + // Fragment is special Container: maybe there is a way to avoid this duplication? + class Fragment extends Dom { + circle(size?: NumberAlias): Circle + circle(size: number, unit: number): Circle + clip(): ClipPath + ellipse(width?: number, height?: number): Ellipse + foreignObject(width: number, height: number): ForeignObject + gradient(type: string, block?: (stop: Gradient) => void): Gradient + group(): G + + image(): Image + image(href?: string, callback?: (e: Event) => void): Image + line(points?: PointArrayAlias): Line + line(x1: number, y1: number, x2: number, y2: number): Line + link(url: string): A + marker( + width?: number, + height?: number, + block?: (marker: Marker) => void + ): Marker + mask(): Mask + nested(): Svg + path(): Path + path(d: PathArrayAlias): Path + pattern( + width?: number, + height?: number, + block?: (pattern: Pattern) => void + ): Pattern + plain(text: string): Text + polygon(points?: PointArrayAlias): Polygon + polyline(points?: PointArrayAlias): Polyline + rect(width?: number, height?: number): Rect + style(): Style + text(block: (tspan: Tspan) => void): Text + text(text: string): Text + use(element: Element | string, file?: string): Use + viewbox(): Box + viewbox(viewbox: ViewBoxLike | string): this + viewbox(x: number, y: number, width: number, height: number): this + textPath(text: string | Text, path: string | Path): TextPath + symbol(): Symbol + zoom(): number + zoom(level: NumberAlias, point?: Point): this + } + class Container extends Element { circle(size?: NumberAlias): Circle circle(size: number, unit: number): Circle -- cgit v1.2.3 From b4163a8232502e4cbfb8357496ad67ec01cc15fb Mon Sep 17 00:00:00 2001 From: Jiande Date: Thu, 17 Aug 2023 14:30:45 +0800 Subject: perf: use dynamic extends to avoid duplicated declaration between Container and Fragment --- svg.js.d.ts | 63 ++++++++++++++++++------------------------------------------- 1 file changed, 18 insertions(+), 45 deletions(-) diff --git a/svg.js.d.ts b/svg.js.d.ts index d38ef76..38b9ed2 100644 --- a/svg.js.d.ts +++ b/svg.js.d.ts @@ -1204,8 +1204,7 @@ declare module '@svgdotjs/svg.js' { height: number } - // Fragment is special Container: maybe there is a way to avoid this duplication? - class Fragment extends Dom { + class Containable { circle(size?: NumberAlias): Circle circle(size: number, unit: number): Circle clip(): ClipPath @@ -1250,51 +1249,25 @@ declare module '@svgdotjs/svg.js' { zoom(level: NumberAlias, point?: Point): this } - class Container extends Element { - circle(size?: NumberAlias): Circle - circle(size: number, unit: number): Circle - clip(): ClipPath - ellipse(width?: number, height?: number): Ellipse - flatten(parent: Dom, depth?: number): this - foreignObject(width: number, height: number): ForeignObject - gradient(type: string, block?: (stop: Gradient) => void): Gradient - group(): G + type DynamicExtends = { + new (...args: any[]): Containable & T + } + + /** + * only for declaration purpose. actually cannot be used. + */ + let ContainableDom: DynamicExtends + class Fragment extends ContainableDom{ + constructor(node?: Node) + } - image(): Image - image(href?: string, callback?: (e: Event) => void): Image - line(points?: PointArrayAlias): Line - line(x1: number, y1: number, x2: number, y2: number): Line - link(url: string): A - marker( - width?: number, - height?: number, - block?: (marker: Marker) => void - ): Marker - mask(): Mask - nested(): Svg - path(): Path - path(d: PathArrayAlias): Path - pattern( - width?: number, - height?: number, - block?: (pattern: Pattern) => void - ): Pattern - plain(text: string): Text - polygon(points?: PointArrayAlias): Polygon - polyline(points?: PointArrayAlias): Polyline - rect(width?: number, height?: number): Rect - style(): Style - text(block: (tspan: Tspan) => void): Text - text(text: string): Text + /** + * only for declaration purpose. actually cannot be used. + */ + let ContainableElement: DynamicExtends + class Container extends ContainableElement { + flatten(parent: Dom, depth?: number): this ungroup(parent: Dom, depth?: number): this - use(element: Element | string, file?: string): Use - viewbox(): Box - viewbox(viewbox: ViewBoxLike | string): this - viewbox(x: number, y: number, width: number, height: number): this - textPath(text: string | Text, path: string | Path): TextPath - symbol(): Symbol - zoom(): number - zoom(level: NumberAlias, point?: Point): this } class Defs extends Container { -- cgit v1.2.3 From 1d5151198c727ef6974f21bd40d9076172d5f9b2 Mon Sep 17 00:00:00 2001 From: Jiande Date: Fri, 18 Aug 2023 14:04:23 +0800 Subject: perf: add Container constructor declaration. if not, while user hover in Container will show DynamicExtends constructor params. --- svg.js.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/svg.js.d.ts b/svg.js.d.ts index 38b9ed2..ae32919 100644 --- a/svg.js.d.ts +++ b/svg.js.d.ts @@ -1266,6 +1266,7 @@ declare module '@svgdotjs/svg.js' { */ let ContainableElement: DynamicExtends class Container extends ContainableElement { + constructor() flatten(parent: Dom, depth?: number): this ungroup(parent: Dom, depth?: number): this } -- cgit v1.2.3