Skip to content

SVG Context

@ripl/svg

SVG rendering context with virtual DOM reconciliation.

Overview

Classes: SVGPath · SVGText · SVGImage · SVGTextPath · SVGContext

Interfaces: SVGContextElementDefinition · SVGContextElement

Functions: createContext

SVGPath class

SVG-specific path implementation that builds an SVG d attribute string from drawing commands.

ts
class SVGPath extends ContextPath implements SVGContextElement

Constructor:

Parameters:

NameTypeDescription
id?string | undefined

Properties:

PropertyTypeDescription
definitionSVGContextElementDefinition
readonly idstring

Methods:

arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean \| undefined): void

Parameters:

NameTypeDescription
xnumber
ynumber
radiusnumber
startAnglenumber
endAnglenumber
counterclockwiseboolean | undefined

arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void

Parameters:

NameTypeDescription
x1number
y1number
x2number
y2number
radiusnumber

circle(x: number, y: number, radius: number): void

Parameters:

NameTypeDescription
xnumber
ynumber
radiusnumber

bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void

Parameters:

NameTypeDescription
cp1xnumber
cp1ynumber
cp2xnumber
cp2ynumber
xnumber
ynumber

closePath(): void

ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: boolean \| undefined): void

Parameters:

NameTypeDescription
xnumber
ynumber
radiusXnumber
radiusYnumber
rotationnumber
startAnglenumber
endAnglenumber
counterclockwiseboolean | undefined

lineTo(x: number, y: number): void

Parameters:

NameTypeDescription
xnumber
ynumber

moveTo(x: number, y: number): void

Parameters:

NameTypeDescription
xnumber
ynumber

quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void

Parameters:

NameTypeDescription
cpxnumber
cpynumber
xnumber
ynumber

rect(x: number, y: number, width: number, height: number): void

Parameters:

NameTypeDescription
xnumber
ynumber
widthnumber
heightnumber

roundRect(x: number, y: number, width: number, height: number, radii: BorderRadius \| undefined): void

Parameters:

NameTypeDescription
xnumber
ynumber
widthnumber
heightnumber
radiiBorderRadius | undefined

polyline(points: Point[]): void

Parameters:

NameTypeDescription
pointsPoint[]

addPath(path: ContextPath): void

Parameters:

NameTypeDescription
pathContextPath

SVGText class

SVG-specific text element mapping position and content to SVG <text> attributes.

ts
class SVGText extends ContextText implements SVGContextElement

Constructor:

Parameters:

NameTypeDescription
optionsTextOptions

Properties:

PropertyTypeDescription
definitionSVGContextElementDefinition
readonly idstring
xnumber
ynumber
contentstring
maxWidthnumber | undefined
pathDatastring | undefined
startOffsetnumber | undefined

SVGImage class

SVG-specific image element wrapping a CanvasImageSource as an SVG <image> tag.

ts
class SVGImage implements SVGContextElement

Constructor:

Parameters:

NameTypeDescription
idstring
hrefstring
xnumber
ynumber
widthnumber
heightnumber

Properties:

PropertyTypeDescription
readonly idstring
definitionSVGContextElementDefinition

SVGTextPath class

SVG <textPath> element for rendering text along a path defined in <defs>.

ts
class SVGTextPath implements SVGContextElement

Constructor:

Parameters:

NameTypeDescription
textIdstring
pathIdstring
contentstring
startOffset?number | undefined

Properties:

PropertyTypeDescription
readonly idstring
definitionSVGContextElementDefinition

SVGContext class

SVG rendering context implementation, mapping the unified API to SVG DOM elements via virtual-DOM reconciliation.

ts
class SVGContext extends Context<SVGSVGElement>

Constructor:

Parameters:

NameTypeDescription
targetstring | HTMLElement
options?ContextOptions | undefined

Properties:

PropertyTypeDescription
readonly typestring
readonly rootHTMLElement
readonly elementSVGSVGElement
bufferboolean
widthnumber
heightnumber
scaleXScale&lt;number, number&gt;
scaleYScale&lt;number, number&gt;
scaleDPRScale&lt;number, number&gt;
renderElementRenderElement | undefined
renderedElementsRenderElement[]
currentRenderElementRenderElement | undefined
fillstring
filterstring
directionDirection
fontstring
fontKerningFontKerning
opacitynumber
globalCompositeOperationunknown
lineCapLineCap
lineDashnumber[]
lineDashOffsetnumber
lineJoinLineJoin
lineWidthnumber
miterLimitnumber
shadowBlurnumber
shadowColorstring
shadowOffsetXnumber
shadowOffsetYnumber
strokestring
textAlignTextAlignment
textBaselineTextBaseline
zIndexnumber
translateXnumber
translateYnumber
transformScaleXnumber
transformScaleYnumber
rotationRotation
transformOriginXTransformOrigin
transformOriginYTransformOrigin
parentEventBus&lt;ContextEventMap&gt; | undefined

Methods:

markRenderStart(): void

Signals the start of a render pass; resets the rendered-elements list at depth 0.

markRenderEnd(): void

Signals the end of a render pass.

createPath(id: string \| undefined): SVGPath

Creates a new path element, optionally reusing an id for SVG diffing efficiency.

Parameters:

NameTypeDescription
idstring | undefined

createText(options: TextOptions): ContextText

Creates a new text element from the given options.

Parameters:

NameTypeDescription
optionsTextOptions

drawImage(image: CanvasImageSource, x: number, y: number, width: number \| undefined, height: number \| undefined): void

Draws an image onto the rendering surface at the given position and optional size.

Parameters:

NameTypeDescription
imageCanvasImageSource
xnumber
ynumber
widthnumber | undefined
heightnumber | undefined

save(): void

Pushes the current state onto the stack and resets to defaults.

restore(): void

Restores the most recently saved state from the stack.

rotate(angle: number): void

Applies a rotation transformation.

Parameters:

NameTypeDescription
anglenumber

scale(x: number, y: number): void

Applies a scale transformation.

Parameters:

NameTypeDescription
xnumber
ynumber

translate(x: number, y: number): void

Applies a translation transformation.

Parameters:

NameTypeDescription
xnumber
ynumber

setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void

Parameters:

NameTypeDescription
anumber
bnumber
cnumber
dnumber
enumber
fnumber

transform(a: number, b: number, c: number, d: number, e: number, f: number): void

Parameters:

NameTypeDescription
anumber
bnumber
cnumber
dnumber
enumber
fnumber

applyClip(path: SVGPath, fillRule: FillRule \| undefined): void

Clips subsequent drawing operations to the given path.

Parameters:

NameTypeDescription
pathSVGPath
fillRuleFillRule | undefined

applyFill(element: SVGContextElement, fillRule: FillRule \| undefined): void

Fills the given path or text element using the current fill style.

Parameters:

NameTypeDescription
elementSVGContextElement
fillRuleFillRule | undefined

applyStroke(element: SVGContextElement): void

Strokes the given path or text element using the current stroke style.

Parameters:

NameTypeDescription
elementSVGContextElement

measureText(text: string, font: string \| undefined): TextMetrics

Measures text dimensions using the context's current font or an optional override.

Parameters:

NameTypeDescription
textstring
fontstring | undefined

isPointInPath(path: SVGPath, x: number, y: number, fillRule: FillRule \| undefined): boolean

Tests whether a point is inside the filled region of a path.

Parameters:

NameTypeDescription
pathSVGPath
xnumber
ynumber
fillRuleFillRule | undefined

isPointInStroke(path: SVGPath, x: number, y: number): boolean

Tests whether a point is on the stroked outline of a path.

Parameters:

NameTypeDescription
pathSVGPath
xnumber
ynumber

batch(body: () =&gt; TResult): TResult

Executes a callback within a save/restore pair, returning the callback's result.

Parameters:

NameTypeDescription
body() =&gt; TResult

clear(): void

Clears the entire rendering surface.

reset(): void

Resets the context to its initial state.

invalidateTrackedElements(event: string): void

Clears the cached list of tracked elements for interaction, forcing a rebuild on the next hit test.

Parameters:

NameTypeDescription
eventstring

enableInteraction(): void

Enables DOM interaction events (mouse enter, leave, move, click, drag) with element hit testing.

disableInteraction(): void

Disables DOM interaction events and clears the active element set.

destroy(): void

Destroys the context, removing the DOM element and disposing all resources.

has(type: keyof ContextEventMap): boolean

Returns whether there are any listeners registered for the given event type.

Parameters:

NameTypeDescription
typekeyof ContextEventMap

on(type: TEvent, handler: EventHandler&lt;ContextEventMap[TEvent]&gt;, options: EventSubscriptionOptions \| undefined): Disposable

Subscribes a handler to the given event type and returns a disposable for cleanup.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler&lt;ContextEventMap[TEvent]&gt;
optionsEventSubscriptionOptions | undefined

off(type: TEvent, handler: EventHandler&lt;ContextEventMap[TEvent]&gt;): void

Removes a previously registered handler for the given event type.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler&lt;ContextEventMap[TEvent]&gt;

once(type: TEvent, handler: EventHandler&lt;ContextEventMap[TEvent]&gt;, options: EventSubscriptionOptions \| undefined): Disposable

Subscribes a handler that is automatically removed after it fires once.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler&lt;ContextEventMap[TEvent]&gt;
optionsEventSubscriptionOptions | undefined

emit(event: TEvent): TEvent

Emits an event, invoking all matching handlers and bubbling to the parent if applicable.

Parameters:

NameTypeDescription
eventTEvent

SVGContextElementDefinition interface

Definition for an SVG context element, describing its tag, inline styles, and attributes.

ts
interface SVGContextElementDefinition {
    tag: keyof SVGElementTagNameMap;
    styles: Partial<Styles>;
    attributes: Record<string, string>;
    textContent?: string;
}

Properties:

PropertyTypeDescription
tagkeyof SVGElementTagNameMap
stylesPartial&lt;Styles&gt;
attributesRecord&lt;string, string&gt;
textContent?string | undefined

SVGContextElement interface

An SVG-specific context element carrying its rendering definition.

ts
interface SVGContextElement extends ContextElement {
    definition: SVGContextElementDefinition;
}

Properties:

PropertyTypeDescription
definitionSVGContextElementDefinition
idstring

createContext function

Creates an SVG rendering context attached to the given DOM target.

ts
function createContext(target: string | HTMLElement, options?: ContextOptions): Context

Parameters:

NameTypeDescription
targetstring | HTMLElement
optionsContextOptions | undefined

Returns: Context&lt;Element&gt;