Skip to content

@graphty/graphty-element / config / StyleHelpers

Variable: StyleHelpers

const StyleHelpers: object

Defined in: src/config/StyleHelpers.ts:99

Type Declaration

animation

animation: object

Animation helpers for smooth transitions Use for: Animated visualizations and transitions

animation.delayedStart()

delayedStart: (progress, delay, easing) => number

Delayed start - begins after a delay

Parameters
progress

number

Progress (0-1)

delay

number

Delay before starting (0-1)

easing

EasingFunction = linear

Easing function (default: linear)

Returns

number

Delayed progress value (0-1)

Example
ts
// Start animation halfway through
delayedStart(0.6, 0.5, easeOut) // → ~0.2 (adjusted for delay)

animation.easeIn()

easeIn: (t) => number

Ease-in (quadratic) - slow start, fast end

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeInCubic()

easeInCubic: (t) => number

Ease-in (cubic) - very slow start

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeInOut()

easeInOut: (t) => number

Ease-in-out (quadratic) - slow start and end

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeInOutCubic()

easeInOutCubic: (t) => number

Ease-in-out (cubic) - very slow start and end

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeOut()

easeOut: (t) => number

Ease-out (quadratic) - fast start, slow end

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeOutBounce()

easeOutBounce: (t) => number

Bounce ease-out - bouncing ball effect

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeOutCubic()

easeOutCubic: (t) => number

Ease-out (cubic) - very slow end

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.easeOutElastic()

easeOutElastic: (t) => number

Elastic ease-out - bouncy overshoot effect

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (may exceed 1.0 temporarily)

animation.interpolate()

interpolate: (from, to, progress, easing) => number

Interpolate between two numeric values with easing

Parameters
from

number

Start value

to

number

End value

progress

number

Progress (0-1)

easing

EasingFunction = linear

Easing function (default: linear)

Returns

number

Interpolated value

Example
ts
// Smooth size transition from 1 to 5
interpolate(1, 5, 0.5, easeInOut) // → 3

animation.linear()

linear: (t) => number

Linear easing (no acceleration)

Parameters
t

number

Time value (0-1)

Returns

number

Eased value (0-1)

animation.pulse()

pulse: (progress, frequency) => number

Pulse animation - oscillates between 0 and 1

Parameters
progress

number

Progress (0-1 repeats infinitely)

frequency

number = 1

Number of pulses per cycle (default: 1)

Returns

number

Value oscillating between 0 and 1

Example
ts
// Pulsing opacity (0 → 1 → 0)
pulse(0.5) // → 1.0 (at peak)
pulse(0.0) // → 0.0 (at start)
pulse(1.0) // → 0.0 (at end)

animation.spring()

spring: (progress, stiffness, damping) => number

Spring animation - damped oscillation

Parameters
progress

number

Progress (0-1)

stiffness

number = 170

Spring stiffness (default: 170)

damping

number = 26

Damping coefficient (default: 26)

Returns

number

Spring-eased value (may overshoot 1.0)

Example
ts
// Bouncy entrance animation
const size = interpolate(0, 5, spring(progress, 200, 20));

animation.stagger()

stagger: (progress, elementIndex, totalElements, staggerDelay, easing) => number

Stagger - offset animation for multiple elements

Parameters
progress

number

Global progress (0-1)

elementIndex

number

Index of this element

totalElements

number

Total number of elements

staggerDelay

number = 0.1

Delay between elements (0-1, default: 0.1)

easing

EasingFunction = linear

Easing function (default: linear)

Returns

number

Per-element progress (0-1)

Example
ts
// Animate 10 nodes with slight delay between each
for (let i = 0; i < 10; i++) {
  const nodeProgress = stagger(globalTime, i, 10, 0.05);
  node.size = interpolate(1, 5, nodeProgress, easeOut);
}

animation.stepped()

stepped: <T>(values, progress, easing) => T

Create a stepped animation that cycles through discrete values

Type Parameters
T

T

Parameters
values

T[]

Array of values to cycle through

progress

number

Progress (0-1)

easing

EasingFunction = linear

Easing function (default: linear)

Returns

T

Current value from the array

Example
ts
// Cycle through colors
const colors = ["#FF0000", "#00FF00", "#0000FF"];
stepped(colors, 0.33, linear) // → "#00FF00"

animation.wave()

wave: (progress, frequency, amplitude, offset) => number

Wave animation - smooth oscillation

Parameters
progress

number

Progress (0-1 repeats infinitely)

frequency

number = 1

Number of waves per cycle (default: 1)

amplitude

number = 1

Wave amplitude 0-1 (default: 1)

offset

number = 0.5

Vertical offset 0-1 (default: 0.5)

Returns

number

Oscillating value

Example
ts
// Gentle size oscillation between 0.5 and 1.5
const size = 1 + wave(time, 1, 0.5, 0);

color

color: object

Color helpers for all visualization types

color.binary

binary: object

Binary highlights for true/false states (Boolean → Color) Use for: Path highlighting, MST edges, selected elements

color.binary.blueHighlight()

blueHighlight: (isHighlighted) => string = binary.blueHighlight

Blue highlight - universal safe hue Returns blue for highlighted state, light gray for normal ✅ Blue is universally safe ✅ 4.5:1 contrast (WCAG AAA)

Parameters
isHighlighted

boolean

Whether element is highlighted

Returns

string

Hex color string

Example
ts
blueHighlight(true)  // "#0072B2" (Okabe-Ito blue)
blueHighlight(false) // "#CCCCCC" (light gray)

color.binary.custom()

custom: (isHighlighted, highlightColor, mutedColor) => string = binary.custom

Custom binary colors Allows specifying custom highlight and muted colors

Parameters
isHighlighted

boolean

Whether element is highlighted

highlightColor

string

Color for highlighted state (hex string)

mutedColor

string

Color for normal state (hex string)

Returns

string

Hex color string

color.binary.greenSuccess()

greenSuccess: (isHighlighted) => string = binary.greenSuccess

Green success - for correct/successful states Returns green for highlighted state, gray for normal

Parameters
isHighlighted

boolean

Whether element is highlighted

Returns

string

Hex color string

Example
ts
greenSuccess(true)  // "#009E73" (Okabe-Ito green)
greenSuccess(false) // "#999999" (medium gray)

color.binary.orangeWarning()

orangeWarning: (isHighlighted) => string = binary.orangeWarning

Orange warning - for attention/warning states Returns orange for highlighted state, light gray for normal

Parameters
isHighlighted

boolean

Whether element is highlighted

Returns

string

Hex color string

Example
ts
orangeWarning(true)  // "#E69F00" (Okabe-Ito orange)
orangeWarning(false) // "#CCCCCC" (light gray)

color.categorical

categorical: object

Categorical palettes for discrete groups (Category ID → Color) Use for: Communities, clusters, components, categories

color.categorical.carbon()

carbon: (categoryId) => string = categorical.carbon

IBM Carbon palette - modern enterprise design Maps category IDs to distinct colors (5 colors total) Modern enterprise aesthetic

Parameters
categoryId

number

Category identifier (0-4 for unique colors)

Returns

string

Hex color string

Example
ts
carbon(0) // "#6929C4" (Purple)
carbon(1) // "#1192E8" (Blue)
carbon(5) // "#6929C4" (wraps around to Purple)

color.categorical.okabeIto()

okabeIto: (categoryId) => string = categorical.okabeIto

Okabe-Ito palette - R 4.0+ default, universally accessible Maps category IDs to distinct colors (8 colors total) ✅ Colorblind-safe (all types) ✅ Industry standard

Cycles through colors if categoryId > 7

Parameters
categoryId

number

Category identifier (0-7 for unique colors)

Returns

string

Hex color string

Example
ts
okabeIto(0) // "#E69F00" (Orange)
okabeIto(1) // "#56B4E9" (Sky Blue)
okabeIto(2) // "#009E73" (Bluish Green)
okabeIto(8) // "#E69F00" (wraps around to Orange)

color.categorical.pastel()

pastel: (categoryId) => string = categorical.pastel

Pastel palette - softer version of Okabe-Ito Maps category IDs to distinct colors (8 colors total) ✅ Colorblind-safe (derived from Okabe-Ito) ⚠️ Lower contrast

Parameters
categoryId

number

Category identifier (0-7 for unique colors)

Returns

string

Hex color string

Example
ts
pastel(0) // "#FFD699" (Light orange)
pastel(1) // "#A8D8F0" (Light sky blue)
pastel(8) // "#FFD699" (wraps around to Light orange)

color.categorical.tolMuted()

tolMuted: (categoryId) => string = categorical.tolMuted

Paul Tol Muted palette - softer colors Maps category IDs to distinct colors (9 colors total) ✅ Colorblind-safe ✅ More categories

Parameters
categoryId

number

Category identifier (0-8 for unique colors)

Returns

string

Hex color string

Example
ts
tolMuted(0) // "#332288" (Indigo)
tolMuted(1) // "#88CCEE" (Cyan)
tolMuted(9) // "#332288" (wraps around to Indigo)

color.categorical.tolVibrant()

tolVibrant: (categoryId) => string = categorical.tolVibrant

Paul Tol Vibrant palette - high saturation colors Maps category IDs to distinct colors (7 colors total) ✅ Colorblind-safe ✅ High contrast

Parameters
categoryId

number

Category identifier (0-6 for unique colors)

Returns

string

Hex color string

Example
ts
tolVibrant(0) // "#0077BB" (Blue)
tolVibrant(1) // "#33BBEE" (Cyan)
tolVibrant(7) // "#0077BB" (wraps around to Blue)

color.diverging

diverging: object

Diverging gradients for data with meaningful midpoints Use for: Above/below average, positive/negative, increase/decrease

color.diverging.blueOrange()

blueOrange: (value, midpoint) => string = diverging.blueOrange

Blue-Orange diverging gradient (ColorBrewer) Maps values to colors with blue (low) ← white (midpoint) → orange (high) ✅ Colorblind-safe ✅ High contrast

Parameters
value

number

Value to map (0-1)

midpoint

number = 0.5

Midpoint value (default: 0.5)

Returns

string

Hex color string

Example
ts
blueOrange(0.0) // "#2166ac" (deep blue - low)
blueOrange(0.5) // "#f7f7f7" (white - midpoint)
blueOrange(1.0) // "#b2182b" (red-orange - high)

color.diverging.purpleGreen()

purpleGreen: (value, midpoint) => string = diverging.purpleGreen

Purple-Green diverging gradient (Paul Tol) Maps values to colors with purple (low) ← white (midpoint) → green (high) ✅ Colorblind-safe ✅ No red-green

Parameters
value

number

Value to map (0-1)

midpoint

number = 0.5

Midpoint value (default: 0.5)

Returns

string

Hex color string

Example
ts
purpleGreen(0.0) // "#762a83" (purple - low)
purpleGreen(0.5) // "#f7f7f7" (white - midpoint)
purpleGreen(1.0) // "#1b7837" (green - high)
purpleGreen(0.3, 0.3) // "#f7f7f7" (white at custom midpoint)

color.diverging.redBlue()

redBlue: (value, midpoint) => string = diverging.redBlue

Red-Blue diverging gradient Maps values to colors with red (low) ← white (midpoint) → blue (high) ⚠️ Not colorblind-safe (red-green vision issues) Use ONLY when temperature metaphor is critical

Parameters
value

number

Value to map (0-1)

midpoint

number = 0.5

Midpoint value (default: 0.5)

Returns

string

Hex color string

Example
ts
redBlue(0.0) // "#67001f" (deep red - low)
redBlue(0.5) // "#f7f7f7" (white - midpoint)
redBlue(1.0) // "#2166ac" (deep blue - high)

color.sequential

sequential: object

Sequential gradients for continuous data (0-1 → Color) Use for: Centrality metrics, importance scores, continuous data

color.sequential.blues()

blues: (value) => string = sequential.blues

Blues gradient - single-hue progression Maps continuous values [0,1] to colors from very light blue to deep blue ✅ Colorblind-safe (blue is universally safe) ✅ Print-friendly

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
blues(0.0) // "#f7fbff" (very light blue)
blues(0.5) // "#6baed6" (medium blue)
blues(1.0) // "#08306b" (deep blue)

color.sequential.greens()

greens: (value) => string = sequential.greens

Greens gradient - single-hue progression Maps continuous values [0,1] to colors from very light green to dark green Use for: Growth, positive metrics

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
greens(0.0) // "#f7fcf5" (very light green)
greens(0.5) // "#74c476" (medium green)
greens(1.0) // "#00441b" (dark green)

color.sequential.inferno()

inferno: (value) => string = sequential.inferno

Inferno gradient - dark, dramatic progression Maps continuous values [0,1] to colors from near black to bright yellow ✅ Colorblind-safe ✅ Perceptually uniform

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
inferno(0.0) // "#000004" (near black)
inferno(0.5) // "#a52c60" (red)
inferno(1.0) // "#f7d13d" (bright yellow)

color.sequential.oranges()

oranges: (value) => string = sequential.oranges

Oranges gradient - single-hue progression Maps continuous values [0,1] to colors from very light orange to dark orange Use for: Heat, activity, energy

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
oranges(0.0) // "#fff5eb" (very light orange)
oranges(0.5) // "#fd8d3c" (medium orange)
oranges(1.0) // "#7f2704" (dark orange)

color.sequential.plasma()

plasma: (value) => string = sequential.plasma

Plasma gradient - warm alternative to viridis Maps continuous values [0,1] to colors from deep blue to bright yellow ✅ Colorblind-safe ✅ Perceptually uniform

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
plasma(0.0) // "#0d0887" (deep blue)
plasma(0.5) // "#db5c68" (pink-red)
plasma(1.0) // "#f0f921" (bright yellow)

color.sequential.viridis()

viridis: (value) => string = sequential.viridis

Viridis gradient - matplotlib default, perceptually uniform Maps continuous values [0,1] to colors from deep purple to bright yellow ✅ Colorblind-safe ✅ Print-friendly ✅ Perceptually uniform

Parameters
value

number

Continuous value (0-1)

Returns

string

Hex color string

Example
ts
viridis(0.0) // "#440154" (deep purple)
viridis(0.5) // "#1f9e89" (teal)
viridis(1.0) // "#fde724" (bright yellow)

combined

combined: object

Combined multi-dimensional helpers Use for: Rich visualizations combining color, size, and opacity

combined.categoryAndImportance()

categoryAndImportance: (categoryId, importanceValue, categoricalPalette, minSize, maxSize) => NodeStyle

Category color + importance size Color shows group, size shows importance within group

Parameters
categoryId

number

Category identifier

importanceValue

number

Importance value (0-1)

categoricalPalette

(id) => string

Categorical palette function (default: okabeIto)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

NodeStyle

Combined node style

Example
ts
// Community 2, high importance
categoryAndImportance(2, 0.9) // { color: "#009E73", size: 4.6 }

combined.colorAndOpacity()

colorAndOpacity: (value, colorPalette, minOpacity, maxOpacity) => NodeStyle

Combine color and opacity - useful for layered visualizations Higher values = brighter color + more opaque

Parameters
value

number

Normalized value (0-1)

colorPalette

(v) => string

Color palette function (default: viridis)

minOpacity

number = 0.1

Minimum opacity (default: 0.1)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

NodeStyle

Combined node style

Example
ts
colorAndOpacity(0.8) // { color: "#b5de2b", opacity: 0.82 }

combined.colorAndSize()

colorAndSize: (value, colorPalette, minSize, maxSize) => NodeStyle

Combine color and size based on the same metric Higher values = brighter color + larger size

Parameters
value

number

Normalized value (0-1)

colorPalette

(v) => string

Color palette function (default: viridis)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

NodeStyle

Combined node style

Example
ts
// PageRank: high rank = bright yellow + large
colorAndSize(0.9) // { color: "#fde724", size: 4.6 }
colorAndSize(0.1) // { color: "#482677", size: 1.4 }

combined.divergingWithSize()

divergingWithSize: (value, midpoint, divergingPalette, minSize, maxSize) => NodeStyle

Diverging color + size for above/below average with emphasis

Parameters
value

number

Normalized value (0-1)

midpoint

number = 0.5

Midpoint value (default: 0.5)

divergingPalette

(v, mid?) => string

Diverging palette function (default: purpleGreen)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

NodeStyle

Combined node style

Example
ts
// Above average (green) and large
divergingWithSize(0.8) // { color: "#91cf60", size: 4.2 }
// Below average (purple) and small
divergingWithSize(0.2) // { color: "#9970ab", size: 1.8 }

combined.edgeFlow()

edgeFlow: (value, colorPalette, minWidth, maxWidth) => EdgeStyle

Edge color and width for flow visualization

Parameters
value

number

Normalized flow value (0-1)

colorPalette

(v) => string

Color palette function (default: viridis)

minWidth

number = 0.2

Minimum width (default: 0.2)

maxWidth

number = 20

Maximum width (default: 20)

Returns

EdgeStyle

Combined edge style

Example
ts
// High flow: bright color + thick edge
edgeFlow(0.9) // { color: "#fde724", width: 18.04 }

combined.edgeFlowFull()

edgeFlowFull: (value, colorPalette, minWidth, maxWidth, minOpacity, maxOpacity) => EdgeStyle

Edge color, width, and opacity for complex flow networks

Parameters
value

number

Normalized flow value (0-1)

colorPalette

(v) => string

Color palette function (default: viridis)

minWidth

number = 0.5

Minimum width (default: 0.5)

maxWidth

number = 5

Maximum width (default: 5)

minOpacity

number = 0.1

Minimum opacity (default: 0.1)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

EdgeStyle

Combined edge style

Example
ts
edgeFlowFull(0.95) // { color: "#fde724", width: 4.775, opacity: 0.955 }

combined.fullSpectrum()

fullSpectrum: (value, colorPalette, minSize, maxSize, minOpacity, maxOpacity) => NodeStyle

All three dimensions: color, size, and opacity Maximum expressiveness for showing importance

Parameters
value

number

Normalized value (0-1)

colorPalette

(v) => string

Color palette function (default: viridis)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

minOpacity

number = 0.2

Minimum opacity (default: 0.2)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

NodeStyle

Combined node style

Example
ts
// Maximum emphasis on high-importance nodes
fullSpectrum(0.95) // { color: "#fde724", size: 4.8, opacity: 0.98 }
fullSpectrum(0.05) // { color: "#440154", size: 1.2, opacity: 0.24 }

combined.sizeAndOpacity()

sizeAndOpacity: (value, minSize, maxSize, minOpacity, maxOpacity) => NodeStyle

Size and opacity without color change Useful when color represents categories but size shows importance

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

minOpacity

number = 0.3

Minimum opacity (default: 0.3)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

NodeStyle

Combined node style

Example
ts
// Community nodes: same color, different importance
sizeAndOpacity(0.9) // { size: 4.6, opacity: 0.97 }

edgeWidth

edgeWidth: object

Edge width helpers for flow visualization Use for: Weighted graphs, flow networks

edgeWidth.binary()

binary: (isHighlighted, highlightWidth, normalWidth) => number

Binary: highlight vs normal

Parameters
isHighlighted

boolean

Whether the edge is highlighted

highlightWidth

number = 3

Width for highlighted edges (default: 3)

normalWidth

number = 1

Width for normal edges (default: 1)

Returns

number

Width based on highlight state

Example
ts
binary(true)     // 3
binary(false)    // 1
binary(true, 5, 2) // 5

edgeWidth.linear()

linear: (value, minWidth, maxWidth) => number

Linear mapping from [0,1] to [minWidth, maxWidth] Default range: [0.5, 5]

Parameters
value

number

Normalized value (0-1)

minWidth

number = 0.5

Minimum width (default: 0.5)

maxWidth

number = 5

Maximum width (default: 5)

Returns

number

Scaled width

Example
ts
linear(0.0)     // 0.5
linear(0.5)     // 2.75
linear(1.0)     // 5
linear(0.5, 1, 10) // 5.5

edgeWidth.log()

log: (value, minWidth, maxWidth) => number

Logarithmic scaling for highly varied flows

Parameters
value

number

Normalized value (0-1)

minWidth

number = 0.5

Minimum width (default: 0.5)

maxWidth

number = 5

Maximum width (default: 5)

Returns

number

Scaled width

Example
ts
log(0.5, 0.5, 5) // Logarithmic scaling

edgeWidth.stepped()

stepped: (value, widths) => number

Stepped (discrete width levels)

Parameters
value

number

Normalized value (0-1)

widths

number[]

Array of width values

Returns

number

Width from the appropriate step

Example
ts
stepped(0.3, [0.5, 1, 2, 3, 5]) // 1

label

label: object

Label helpers for formatting metric values Use for: Displaying algorithm results as text

label.communityLabel()

communityLabel: (id) => string

Format community label

Parameters
id

number

Community ID

Returns

string

Formatted community label

Example
ts
communityLabel(3) // "Community 3"

label.compact()

compact: (value) => string

Format number in compact notation (K, M, B suffixes)

Parameters
value

number

Numeric value

Returns

string

Formatted string with suffix

Example
ts
compact(1000)      // "1.0K"
compact(1500000)   // "1.5M"
compact(2500000000)// "2.5B"

label.conditional()

conditional: (condition, trueText, falseText) => string

Conditional text

Parameters
condition

boolean

Boolean condition

trueText

string

Text to return if condition is true

falseText

string

Text to return if condition is false

Returns

string

Selected text based on condition

Example
ts
conditional(true, "Yes", "No") // "Yes"
conditional(false, "Yes", "No") // "No"

label.fixed()

fixed: (value, decimals) => string

Format number with fixed decimal places Default: 2 decimals

Parameters
value

number

Numeric value

decimals

number = 2

Number of decimal places (default: 2)

Returns

string

Formatted string

Example
ts
fixed(0.123456)     // "0.12"
fixed(0.123456, 3)  // "0.123"
fixed(123.456, 1)   // "123.5"

label.ifAbove()

ifAbove: (value, threshold, formatter) => string | null

Only show if value above threshold

Parameters
value

number

Value to check

threshold

number

Threshold value

formatter

(v) => string

Function to format the value

Returns

string | null

Formatted string or null

Example
ts
ifAbove(0.8, 0.5, (v) => v.toFixed(2)) // "0.80"
ifAbove(0.3, 0.5, (v) => v.toFixed(2)) // null

label.integer()

integer: (value) => string

Format number as integer (rounds to nearest integer)

Parameters
value

number

Numeric value

Returns

string

Formatted integer string

Example
ts
integer(0.75)   // "1"
integer(123.4)  // "123"
integer(123.6)  // "124"

label.levelLabel()

levelLabel: (level) => string

Format level label

Parameters
level

number

Level value

Returns

string

Formatted level label

Example
ts
levelLabel(2) // "Level 2"

label.percentage()

percentage: (value, decimals) => string

Format number as percentage Default: 0 decimals

Parameters
value

number

Numeric value (0-1 typical)

decimals

number = 0

Number of decimal places (default: 0)

Returns

string

Formatted percentage string

Example
ts
percentage(0.75)      // "75%"
percentage(0.756, 1)  // "75.6%"
percentage(0.756, 2)  // "75.60%"

label.rankLabel()

rankLabel: (rank) => string

Format rank label

Parameters
rank

number

Rank value

Returns

string

Formatted rank label

Example
ts
rankLabel(5) // "Rank: 5"

label.scientific()

scientific: (value, decimals) => string

Format number in scientific notation Default: 2 decimals

Parameters
value

number

Numeric value

decimals

number = 2

Number of decimal places (default: 2)

Returns

string

Formatted string

Example
ts
scientific(123456)     // "1.23e+5"
scientific(0.000123)   // "1.23e-4"

label.scoreLabel()

scoreLabel: (score, label) => string

Format score label

Parameters
score

number

Score value

label

string

Label text

Returns

string

Formatted score label

Example
ts
scoreLabel(0.85, "PageRank") // "PageRank: 0.85"

label.substitute()

substitute: (template, values) => string

Template substitution - replaces {key} placeholders with values

Parameters
template

string

Template string with {key} placeholders

values

Record<string, unknown>

Object with key-value pairs

Returns

string

String with substituted values

Example
ts
substitute("Score: {score}", {score: 0.85}) // "Score: 0.85"

label.topN()

topN: (value, rank, n, formatter) => string | null

Only show for top N values

Parameters
value

number

Value to display

rank

number

Rank (1-based)

n

number

Number of top items

formatter

(v) => string

Function to format the value

Returns

string | null

Formatted string or null

Example
ts
topN(0.9, 3, 5, (v) => v.toFixed(2)) // "0.90"
topN(0.5, 6, 5, (v) => v.toFixed(2)) // null

opacity

opacity: object

Opacity helpers for de-emphasizing elements Use for: Layered effects, importance filtering

opacity.binary()

binary: (isVisible, visibleOpacity, hiddenOpacity) => number

Binary opacity: visible or invisible Default: 1.0 visible, 0.0 hidden

Parameters
isVisible

boolean

Whether element is visible

visibleOpacity

number = 1.0

Opacity when visible (default: 1.0)

hiddenOpacity

number = 0.0

Opacity when hidden (default: 0.0)

Returns

number

Opacity value (0-1)

Example
ts
binary(true)   // 1.0
binary(false)  // 0.0

opacity.inverse()

inverse: (value, minOpacity, maxOpacity) => number

Inverse linear fade: high values = transparent (for backgrounds) Default range: [0.1, 1.0] (same as linear, but inverted)

Parameters
value

number

Normalized value (0-1)

minOpacity

number = 0.1

Minimum opacity (default: 0.1)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

number

Opacity value (0-1)

Example
ts
inverse(0.0)   // 1.0 (fully opaque for low values)
inverse(0.5)   // 0.55
inverse(1.0)   // 0.1 (nearly transparent for high values)

opacity.linear()

linear: (value, minOpacity, maxOpacity) => number

Linear fade from [0,1] to [minOpacity, maxOpacity] Default range: [0.1, 1.0]

Parameters
value

number

Normalized value (0-1)

minOpacity

number = 0.1

Minimum opacity (default: 0.1)

maxOpacity

number = 1.0

Maximum opacity (default: 1.0)

Returns

number

Opacity value (0-1)

Example
ts
linear(0.0)   // 0.1
linear(0.5)   // 0.55
linear(1.0)   // 1.0

opacity.threshold()

threshold: (value, thresholdValue, belowOpacity, aboveOpacity) => number

Threshold-based opacity: opaque above threshold, faded below Default: 0.5 threshold, 0.3 below, 1.0 above

Parameters
value

number

Normalized value (0-1)

thresholdValue

number = 0.5

Threshold to compare against (default: 0.5)

belowOpacity

number = 0.3

Opacity for values below threshold (default: 0.3)

aboveOpacity

number = 1.0

Opacity for values at or above threshold (default: 1.0)

Returns

number

Opacity value (0-1)

Example
ts
threshold(0.3)              // 0.3 (below 0.5)
threshold(0.6)              // 1.0 (above 0.5)
threshold(0.2, 0.3, 0.2, 1) // 0.2 (below 0.3)

size

size: object

Size helpers for scaling nodes/edges Use for: Importance, centrality, flow visualization

size.bins()

bins: (value, sizes) => number

Maps continuous [0,1] to discrete size bins

Parameters
value

number

Normalized value (0-1)

sizes

number[]

Array of size values

Returns

number

Size from the appropriate bin

Example
ts
bins(0.3, [1, 2, 3, 4, 5]) // → 2

size.cubic()

cubic: (value, minSize, maxSize) => number

Cubic scaling (exponent = 3)

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

number

Scaled size

Example
ts
cubic(0.5, 1, 5) // → 1.5

size.exp()

exp: (value, minSize, maxSize, exponent) => number

Exponential scaling [0,1] → [minSize, maxSize] Makes high values dramatically larger

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

exponent

number = 2

Exponent value (default: 2)

Returns

number

Scaled size

Example
ts
exp(0.5, 1, 5, 2) // Exponential with power 2

size.fiveTiers()

fiveTiers: (value) => number

Five tiers preset (5 bins)

Parameters
value

number

Normalized value (0-1)

Returns

number

Size: 1, 2, 3, 4, or 5

Example
ts
fiveTiers(0.3) // → 2

size.linear()

linear: (value, minSize, maxSize) => number

Linear mapping from [0,1] to [minSize, maxSize] Default range: [1, 5]

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

number

Scaled size

Example
ts
linear(0.0)     // 1
linear(0.5)     // 3
linear(1.0)     // 5
linear(0.5, 2, 10) // 6

size.linearClipped()

linearClipped: (value, minSize, maxSize, clipMin, clipMax) => number

Linear mapping with value clipping Prevents extreme sizes by clipping input value before scaling

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

clipMin

number = 0

Minimum value to clip to (default: 0)

clipMax

number = 1

Maximum value to clip to (default: 1)

Returns

number

Scaled size

Example
ts
linearClipped(0.95, 1, 5, 0.1, 0.9) // Clips 0.95 to 0.9, then scales

size.log()

log: (value, minSize, maxSize, base) => number

Logarithmic scaling for power-law distributions Prevents extreme size differences

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

base

number = 10

Logarithm base (default: 10)

Returns

number

Scaled size

Example
ts
log(0.5, 1, 5) // Logarithmic scaling

size.logSafe()

logSafe: (value, minSize, maxSize, epsilon) => number

Logarithmic scaling with offset for zero values

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

epsilon

number = 0.0001

Offset for zero values (default: 0.0001)

Returns

number

Scaled size

Example
ts
logSafe(0, 1, 5) // Returns minSize safely

size.smallMediumLarge()

smallMediumLarge: (value) => number

Small/Medium/Large preset (3 bins)

Parameters
value

number

Normalized value (0-1)

Returns

number

Size: 1 (small), 2.5 (medium), or 4 (large)

Example
ts
smallMediumLarge(0.2) // → 1 (small)
smallMediumLarge(0.5) // → 2.5 (medium)
smallMediumLarge(0.8) // → 4 (large)

size.square()

square: (value, minSize, maxSize) => number

Square scaling (exponent = 2)

Parameters
value

number

Normalized value (0-1)

minSize

number = 1

Minimum size (default: 1)

maxSize

number = 5

Maximum size (default: 5)

Returns

number

Scaled size

Example
ts
square(0.5, 1, 5) // → 2