# Chart.js - v3.9.1

# Enumerations

# Classes

# Interfaces

# Type aliases

# Align

Ƭ Align: "start" | "center" | "end"

# Defined in

index.esm.d.ts:1682 (opens new window)


# AnimationOptions

Ƭ AnimationOptions<TType>: Object

# Type parameters

Name Type
TType extends ChartType

# Type declaration

Name Type
animation false | AnimationSpec<TType> & { onComplete?: (event: AnimationEvent) => void ; onProgress?: (event: AnimationEvent) => void }
animations AnimationsSpec<TType>
transitions TransitionsSpec<TType>

# Defined in

index.esm.d.ts:1639 (opens new window)


# AnimationSpec

Ƭ AnimationSpec<TType>: Object

# Type parameters

Name Type
TType extends ChartType

# Type declaration

Name Type Description
delay? Scriptable<number, ScriptableContext<TType>> Delay before starting the animations. default 0
duration? Scriptable<number, ScriptableContext<TType>> The number of milliseconds an animation takes. default 1000
easing? Scriptable<EasingFunction, ScriptableContext<TType>> Easing function to use default 'easeOutQuart'
loop? Scriptable<boolean, ScriptableContext<TType>> If set to true, the animations loop endlessly. default false

# Defined in

index.esm.d.ts:1583 (opens new window)


# AnimationsSpec

Ƭ AnimationsSpec<TType>: Object

# Type parameters

Name Type
TType extends ChartType

# Index signature

▪ [name: string]: false | AnimationSpec<TType> & { from: Scriptable<Color | number | boolean, ScriptableContext<TType>> ; properties: string[] ; to: Scriptable<Color | number | boolean, ScriptableContext<TType>> ; type: "color" | "number" | "boolean" ; fn: <T>(from: T, to: T, factor: number) => T }

# Defined in

index.esm.d.ts:1608 (opens new window)


# BarController

Ƭ BarController: DatasetController

# Defined in

index.esm.d.ts:145 (opens new window)


# BubbleController

Ƭ BubbleController: DatasetController

# Defined in

index.esm.d.ts:173 (opens new window)


# CartesianTickOptions

Ƭ CartesianTickOptions: TickOptions & { align: Align | "inner" ; autoSkip: boolean ; autoSkipPadding: number ; crossAlign: "near" | "center" | "far" ; includeBounds: boolean ; labelOffset: number ; maxRotation: number ; maxTicksLimit: number ; minRotation: number ; mirror: boolean ; padding: number ; sampleSize: number }

# Defined in

index.esm.d.ts:2982 (opens new window)


# CategoryScale

Ƭ CategoryScale<O>: Scale<O>

# Type parameters

Name Type
O extends CategoryScaleOptions = CategoryScaleOptions

# Defined in

index.esm.d.ts:3147 (opens new window)


# CategoryScaleOptions

Ƭ CategoryScaleOptions: Omit<CartesianScaleOptions, "min" | "max"> & { labels: string[] | string[][] ; max: string | number ; min: string | number }

# Defined in

index.esm.d.ts:3141 (opens new window)


# ChartComponentLike

Ƭ ChartComponentLike: ChartComponent | ChartComponent[] | { [key: string]: ChartComponent; } | Plugin | Plugin[]

# Defined in

index.esm.d.ts:1113 (opens new window)


# ChartDataset

Ƭ ChartDataset<TType, TData>: DeepPartial<{ [key in ChartType]: Object & ChartTypeRegistry[key]["datasetOptions"] }[TType]> & ChartDatasetProperties<TType, TData>

# Type parameters

Name Type
TType extends ChartType = ChartType
TData DefaultDataPoint<TType>

# Defined in

index.esm.d.ts:3659 (opens new window)


# ChartDatasetCustomTypesPerDataset

Ƭ ChartDatasetCustomTypesPerDataset<TType, TData>: DeepPartial<{ [key in ChartType]: Object & ChartTypeRegistry[key]["datasetOptions"] }[TType]> & ChartDatasetPropertiesCustomTypesPerDataset<TType, TData>

# Type parameters

Name Type
TType extends ChartType = ChartType
TData DefaultDataPoint<TType>

# Defined in

index.esm.d.ts:3666 (opens new window)


# ChartItem

Ƭ ChartItem: string | CanvasRenderingContext2D | HTMLCanvasElement | { canvas: HTMLCanvasElement } | ArrayLike<CanvasRenderingContext2D | HTMLCanvasElement>

# Defined in

index.esm.d.ts:554 (opens new window)


# ChartMeta

Ƭ ChartMeta<TElement, TDatasetElement, TType>: DeepPartial<{ [key in ChartType]: ChartTypeRegistry[key]["metaExtensions"] }[TType]> & ChartMetaCommon<TElement, TDatasetElement>

# Type parameters

Name Type
TElement extends Element = Element
TDatasetElement extends Element = Element
TType extends ChartType = ChartType

# Defined in

index.esm.d.ts:460 (opens new window)


# ChartOptions

Ƭ ChartOptions<TType>: DeepPartial<CoreChartOptions<TType> & ElementChartOptions<TType> & PluginChartOptions<TType> & DatasetChartOptions<TType> & ScaleChartOptions<TType> & ChartTypeRegistry[TType]["chartOptions"]>

# Type parameters

Name Type
TType extends ChartType = ChartType

# Defined in

index.esm.d.ts:3636 (opens new window)


# ChartType

Ƭ ChartType: keyof ChartTypeRegistry

# Defined in

index.esm.d.ts:3615 (opens new window)


# Color

Ƭ Color: string | CanvasGradient | CanvasPattern

# Defined in

color.d.ts:1 (opens new window)


# DatasetChartOptions

Ƭ DatasetChartOptions<TType>: { [key in TType]: Object }

# Type parameters

Name Type
TType extends ChartType = ChartType

# Defined in

index.esm.d.ts:3624 (opens new window)


# DecimationOptions

Ƭ DecimationOptions: LttbDecimationOptions | MinMaxDecimationOptions

# Defined in

index.esm.d.ts:2130 (opens new window)


# DefaultDataPoint

Ƭ DefaultDataPoint<TType>: DistributiveArray<ChartTypeRegistry[TType]["defaultDataPoint"]>

# Type parameters

Name Type
TType extends ChartType

# Defined in

index.esm.d.ts:3645 (opens new window)


# DoughnutDataPoint

Ƭ DoughnutDataPoint: number

# Defined in

index.esm.d.ts:331 (opens new window)


# EasingFunction

Ƭ EasingFunction: "linear" | "easeInQuad" | "easeOutQuad" | "easeInOutQuad" | "easeInCubic" | "easeOutCubic" | "easeInOutCubic" | "easeInQuart" | "easeOutQuart" | "easeInOutQuart" | "easeInQuint" | "easeOutQuint" | "easeInOutQuint" | "easeInSine" | "easeOutSine" | "easeInOutSine" | "easeInExpo" | "easeOutExpo" | "easeInOutExpo" | "easeInCirc" | "easeOutCirc" | "easeInOutCirc" | "easeInElastic" | "easeOutElastic" | "easeInOutElastic" | "easeInBack" | "easeOutBack" | "easeInOutBack" | "easeInBounce" | "easeOutBounce" | "easeInOutBounce"

# Defined in

index.esm.d.ts:1550 (opens new window)


# ElementChartOptions

Ƭ ElementChartOptions<TType>: Object

# Type parameters

Name Type
TType extends ChartType = ChartType

# Type declaration

Name Type
elements ElementOptionsByType<TType>

# Defined in

index.esm.d.ts:2046 (opens new window)


# FillTarget

Ƭ FillTarget: number | string | { value: number } | "start" | "end" | "origin" | "stack" | "shape" | boolean

# Defined in

index.esm.d.ts:2138 (opens new window)


# InteractionAxis

Ƭ InteractionAxis: "x" | "y" | "xy" | "r"

# Defined in

index.esm.d.ts:1422 (opens new window)


# InteractionMode

Ƭ InteractionMode: keyof InteractionModeMap

# Defined in

index.esm.d.ts:752 (opens new window)


# InteractionModeFunction

Ƭ InteractionModeFunction: (chart: Chart, e: ChartEvent, options: InteractionOptions, useFinalPosition?: boolean) => InteractionItem[]

# Type declaration

▸ (chart, e, options, useFinalPosition?): InteractionItem[]

# Parameters
Name Type
chart Chart
e ChartEvent
options InteractionOptions
useFinalPosition? boolean
# Returns

InteractionItem[]

# Defined in

index.esm.d.ts:714 (opens new window)


# LayoutPosition

Ƭ LayoutPosition: "left" | "top" | "right" | "bottom" | "center" | "chartArea" | { [scaleId: string]: number; }

# Defined in

layout.d.ts:3 (opens new window)


# LineController

Ƭ LineController: DatasetController

# Defined in

index.esm.d.ts:219 (opens new window)


# LinearScale

Ƭ LinearScale<O>: Scale<O>

# Type parameters

Name Type
O extends LinearScaleOptions = LinearScaleOptions

# Defined in

index.esm.d.ts:3196 (opens new window)


# LinearScaleOptions

Ƭ LinearScaleOptions: CartesianScaleOptions & { beginAtZero: boolean ; grace?: string | number ; suggestedMax?: number ; suggestedMin?: number ; ticks: { count: number ; format: Intl.NumberFormatOptions ; precision: number ; stepSize: number } }

# Defined in

index.esm.d.ts:3153 (opens new window)


# LogarithmicScale

Ƭ LogarithmicScale<O>: Scale<O>

# Type parameters

Name Type
O extends LogarithmicScaleOptions = LogarithmicScaleOptions

# Defined in

index.esm.d.ts:3220 (opens new window)


# LogarithmicScaleOptions

Ƭ LogarithmicScaleOptions: CartesianScaleOptions & { suggestedMax?: number ; suggestedMin?: number ; ticks: { format: Intl.NumberFormatOptions } }

# Defined in

index.esm.d.ts:3202 (opens new window)


# Overrides

Ƭ Overrides: { [key in ChartType]: CoreChartOptions<key> & ElementChartOptions<key> & PluginChartOptions<key> & DatasetChartOptions<ChartType> & ScaleChartOptions<key> & ChartTypeRegistry[key]["chartOptions"] }

# Defined in

index.esm.d.ts:691 (opens new window)


# ParsedDataType

Ƭ ParsedDataType<TType>: ChartTypeRegistry[TType]["parsedDataType"]

# Type parameters

Name Type
TType extends ChartType = ChartType

# Defined in

index.esm.d.ts:3647 (opens new window)


# PieAnimationOptions

Ƭ PieAnimationOptions: DoughnutAnimationOptions

# Defined in

index.esm.d.ts:354 (opens new window)


# PieController

Ƭ PieController: DoughnutController

# Defined in

index.esm.d.ts:359 (opens new window)


# PieControllerChartOptions

Ƭ PieControllerChartOptions: DoughnutControllerChartOptions

# Defined in

index.esm.d.ts:353 (opens new window)


# PieControllerDatasetOptions

Ƭ PieControllerDatasetOptions: DoughnutControllerDatasetOptions

# Defined in

index.esm.d.ts:352 (opens new window)


# PieDataPoint

Ƭ PieDataPoint: DoughnutDataPoint

# Defined in

index.esm.d.ts:356 (opens new window)


# PieMetaExtensions

Ƭ PieMetaExtensions: DoughnutMetaExtensions

# Defined in

index.esm.d.ts:357 (opens new window)


# PointStyle

Ƭ PointStyle: "circle" | "cross" | "crossRot" | "dash" | "line" | "rect" | "rectRounded" | "rectRot" | "star" | "triangle" | HTMLImageElement | HTMLCanvasElement

# Defined in

index.esm.d.ts:1865 (opens new window)


# PolarAreaAnimationOptions

Ƭ PolarAreaAnimationOptions: DoughnutAnimationOptions

# Defined in

index.esm.d.ts:373 (opens new window)


# RadarController

Ƭ RadarController: DatasetController

# Defined in

index.esm.d.ts:420 (opens new window)


# RadarControllerChartOptions

Ƭ RadarControllerChartOptions: LineControllerChartOptions

# Defined in

index.esm.d.ts:418 (opens new window)


# RadialLinearScaleOptions

Ƭ RadialLinearScaleOptions: CoreScaleOptions & { angleLines: { borderDash: Scriptable<number[], ScriptableScaleContext> ; borderDashOffset: Scriptable<number, ScriptableScaleContext> ; color: Scriptable<Color, ScriptableScaleContext> ; display: boolean ; lineWidth: Scriptable<number, ScriptableScaleContext> } ; animate: boolean ; beginAtZero: boolean ; grid: GridLineOptions ; max: number ; min: number ; pointLabels: { backdropColor: Scriptable<Color, ScriptableScalePointLabelContext> ; backdropPadding: Scriptable<number | ChartArea, ScriptableScalePointLabelContext> ; borderRadius: Scriptable<number | BorderRadius, ScriptableScalePointLabelContext> ; centerPointLabels: boolean ; color: Scriptable<Color, ScriptableScalePointLabelContext> ; display: boolean ; font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableScalePointLabelContext> ; padding: Scriptable<number, ScriptableScalePointLabelContext> ; callback: (label: string, index: number) => string | number | string[] | number[] } ; startAngle: number ; suggestedMax: number ; suggestedMin: number ; ticks: RadialTickOptions }

# Defined in

index.esm.d.ts:3356 (opens new window)


# RadialTickOptions

Ƭ RadialTickOptions: TickOptions & { count: number ; format: Intl.NumberFormatOptions ; maxTicksLimit: number ; precision: number ; stepSize: number }

# Defined in

index.esm.d.ts:3328 (opens new window)


# ScaleChartOptions

Ƭ ScaleChartOptions<TType>: Object

# Type parameters

Name Type
TType extends ChartType = ChartType

# Type declaration

Name Type
scales Object

# Defined in

index.esm.d.ts:3630 (opens new window)


# ScaleOptions

Ƭ ScaleOptions<TScale>: DeepPartial<ScaleOptionsByType<TScale>>

# Type parameters

Name Type
TScale extends ScaleType = ScaleType

# Defined in

index.esm.d.ts:3622 (opens new window)


# ScaleOptionsByType

Ƭ ScaleOptionsByType<TScale>: { [key in ScaleType]: Object & ScaleTypeRegistry[key]["options"] }[TScale]

# Type parameters

Name Type
TScale extends ScaleType = ScaleType

# Defined in

index.esm.d.ts:3617 (opens new window)


# ScaleType

Ƭ ScaleType: keyof ScaleTypeRegistry

# Defined in

index.esm.d.ts:3511 (opens new window)


# ScatterController

Ƭ ScatterController: LineController

# Defined in

index.esm.d.ts:234 (opens new window)


# ScatterControllerChartOptions

Ƭ ScatterControllerChartOptions: LineControllerChartOptions

# Defined in

index.esm.d.ts:232 (opens new window)


# ScatterControllerDatasetOptions

Ƭ ScatterControllerDatasetOptions: LineControllerDatasetOptions

# Defined in

index.esm.d.ts:225 (opens new window)


# Scriptable

Ƭ Scriptable<T, TContext>: T | (ctx: TContext, options: AnyObject) => T | undefined

# Type parameters

Name
T
TContext

# Defined in

index.esm.d.ts:39 (opens new window)


# ScriptableAndArray

Ƭ ScriptableAndArray<T, TContext>: readonly T[] | Scriptable<T, TContext>

# Type parameters

Name
T
TContext

# Defined in

index.esm.d.ts:42 (opens new window)


# ScriptableAndArrayOptions

Ƭ ScriptableAndArrayOptions<T, TContext>: { [P in keyof T]: ScriptableAndArray<T[P], TContext> }

# Type parameters

Name
T
TContext

# Defined in

index.esm.d.ts:43 (opens new window)


# ScriptableAndScriptableOptions

Ƭ ScriptableAndScriptableOptions<T, TContext>: Scriptable<T, TContext> | ScriptableOptions<T, TContext>

# Type parameters

Name
T
TContext

# Defined in

index.esm.d.ts:41 (opens new window)


# ScriptableOptions

Ƭ ScriptableOptions<T, TContext>: { [P in keyof T]: Scriptable<T[P], TContext> }

# Type parameters

Name
T
TContext

# Defined in

index.esm.d.ts:40 (opens new window)


# TextAlign

Ƭ TextAlign: "left" | "center" | "right"

# Defined in

index.esm.d.ts:1681 (opens new window)


# TimeScaleOptions

Ƭ TimeScaleOptions: Omit<CartesianScaleOptions, "min" | "max"> & { adapters: { date: unknown } ; bounds: "ticks" | "data" ; max: string | number ; min: string | number ; offsetAfterAutoskip: boolean ; suggestedMax: string | number ; suggestedMin: string | number ; ticks: { source: "labels" | "auto" | "data" } ; time: { displayFormats: { [key: string]: string; } ; isoWeekday: boolean | number ; minUnit: TimeUnit ; parser: string | (v: unknown) => number ; round: false | TimeUnit ; stepSize: number ; tooltipFormat: string ; unit: false | TimeUnit } }

# Defined in

index.esm.d.ts:3226 (opens new window)


# TimeSeriesScale

Ƭ TimeSeriesScale<O>: TimeScale<O>

# Type parameters

Name Type
O extends TimeScaleOptions = TimeScaleOptions

# Defined in

index.esm.d.ts:3322 (opens new window)


# TimeUnit

Ƭ TimeUnit: "millisecond" | "second" | "minute" | "hour" | "day" | "week" | "month" | "quarter" | "year"

# Defined in

adapters.d.ts:3 (opens new window)


# TooltipPositioner

Ƭ TooltipPositioner: keyof TooltipPositionerMap

# Defined in

index.esm.d.ts:2546 (opens new window)


# TooltipPositionerFunction

Ƭ TooltipPositionerFunction<TType>: (this: TooltipModel<TType>, items: readonly ActiveElement[], eventPosition: Point) => TooltipPosition | false

# Type parameters

Name Type
TType extends ChartType

# Type declaration

▸ (this, items, eventPosition): TooltipPosition | false

# Parameters
Name Type
this TooltipModel<TType>
items readonly ActiveElement[]
eventPosition Point
# Returns

TooltipPosition | false

# Defined in

index.esm.d.ts:2535 (opens new window)


# TooltipXAlignment

Ƭ TooltipXAlignment: "left" | "center" | "right"

# Defined in

index.esm.d.ts:2444 (opens new window)


# TooltipYAlignment

Ƭ TooltipYAlignment: "top" | "center" | "bottom"

# Defined in

index.esm.d.ts:2445 (opens new window)


# TransitionSpec

Ƭ TransitionSpec<TType>: Object

# Type parameters

Name Type
TType extends ChartType

# Type declaration

Name Type
animation AnimationSpec<TType>
animations AnimationsSpec<TType>

# Defined in

index.esm.d.ts:1630 (opens new window)


# TransitionsSpec

Ƭ TransitionsSpec<TType>: Object

# Type parameters

Name Type
TType extends ChartType

# Index signature

▪ [mode: string]: TransitionSpec<TType>

# Defined in

index.esm.d.ts:1635 (opens new window)


# UpdateMode

Ƭ UpdateMode: keyof typeof UpdateModeEnum

# Defined in

index.esm.d.ts:571 (opens new window)

# Variables

# ArcElement

ArcElement: ChartComponent & { prototype: ArcElement<ArcProps, ArcOptions> }

# Defined in

index.esm.d.ts:1765 (opens new window)


# BarController

BarController: ChartComponent & { prototype: BarController }

# Defined in

index.esm.d.ts:146 (opens new window)


# BarElement

BarElement: ChartComponent & { prototype: BarElement<BarProps, BarOptions> }

# Defined in

index.esm.d.ts:2034 (opens new window)


# BubbleController

BubbleController: ChartComponent & { prototype: BubbleController }

# Defined in

index.esm.d.ts:174 (opens new window)


# CategoryScale

CategoryScale: ChartComponent & { prototype: CategoryScale<CategoryScaleOptions> }

# Defined in

index.esm.d.ts:3148 (opens new window)


# Decimation

Decimation: Plugin

# Defined in

index.esm.d.ts:2110 (opens new window)


# DoughnutController

DoughnutController: ChartComponent & { prototype: DoughnutController }

# Defined in

index.esm.d.ts:343 (opens new window)


# Element

Element: Object

# Type declaration

Name Type
prototype Element<AnyObject, AnyObject>

# Defined in

element.d.ts:14 (opens new window)


# Filler

Filler: Plugin

# Defined in

index.esm.d.ts:2132 (opens new window)


# Interaction

Interaction: Object

# Type declaration

Name Type
modes InteractionModeMap
evaluateInteractionItems (chart: Chart<keyof ChartTypeRegistry, (number | ScatterDataPoint | BubbleDataPoint)[], unknown>, axis: InteractionAxis, position: Point, handler: (element: Element<AnyObject, AnyObject> & VisualElement, datasetIndex: number, index: number) => void, intersect?: boolean) => InteractionItem[]

# Defined in

index.esm.d.ts:754 (opens new window)


# Legend

Legend: Plugin

# Defined in

index.esm.d.ts:2162 (opens new window)


# LineController

LineController: ChartComponent & { prototype: LineController }

# Defined in

index.esm.d.ts:220 (opens new window)


# LineElement

LineElement: ChartComponent & { prototype: LineElement<LineProps, LineOptions> }

# Defined in

index.esm.d.ts:1855 (opens new window)


# LinearScale

LinearScale: ChartComponent & { prototype: LinearScale<LinearScaleOptions> }

# Defined in

index.esm.d.ts:3197 (opens new window)


# LogarithmicScale

LogarithmicScale: ChartComponent & { prototype: LogarithmicScale<LogarithmicScaleOptions> }

# Defined in

index.esm.d.ts:3221 (opens new window)


# PieController

PieController: ChartComponent & { prototype: DoughnutController }

# Defined in

index.esm.d.ts:360 (opens new window)


# PointElement

PointElement: ChartComponent & { prototype: PointElement<PointProps, PointOptions> }

# Defined in

index.esm.d.ts:1972 (opens new window)


# PolarAreaController

PolarAreaController: ChartComponent & { prototype: PolarAreaController }

# Defined in

index.esm.d.ts:388 (opens new window)


# RadarController

RadarController: ChartComponent & { prototype: RadarController }

# Defined in

index.esm.d.ts:421 (opens new window)


# RadialLinearScale

RadialLinearScale: ChartComponent & { prototype: RadialLinearScale<RadialLinearScaleOptions> }

# Defined in

index.esm.d.ts:3479 (opens new window)


# ScatterController

ScatterController: ChartComponent & { prototype: LineController }

# Defined in

index.esm.d.ts:235 (opens new window)


# SubTitle

SubTitle: Plugin

# Defined in

index.esm.d.ts:2402 (opens new window)


# Ticks

Ticks: Object

# Type declaration

Name Type
formatters Object
formatters.logarithmic [object Object]
formatters.numeric [object Object]
formatters.values [object Object]

# Defined in

index.esm.d.ts:1356 (opens new window)


# TimeScale

TimeScale: ChartComponent & { prototype: TimeScale<TimeScaleOptions> }

# Defined in

index.esm.d.ts:3317 (opens new window)


# TimeSeriesScale

TimeSeriesScale: ChartComponent & { prototype: TimeSeriesScale<TimeScaleOptions> }

# Defined in

index.esm.d.ts:3323 (opens new window)


# Title

Title: Plugin

# Defined in

index.esm.d.ts:2403 (opens new window)


# Tooltip

Tooltip: Tooltip

# Defined in

index.esm.d.ts:2552 (opens new window)


# _adapters

_adapters: Object

# Type declaration

Name Type
_date DateAdapter

# Defined in

adapters.d.ts:68 (opens new window)


# defaults

defaults: Defaults

# Defined in

index.esm.d.ts:701 (opens new window)


# layouts

layouts: Object

# Type declaration

Name Type
addBox (chart: Chart<keyof ChartTypeRegistry, (number | ScatterDataPoint | BubbleDataPoint)[], unknown>, item: LayoutItem) => void
configure (chart: Chart<keyof ChartTypeRegistry, (number | ScatterDataPoint | BubbleDataPoint)[], unknown>, item: LayoutItem, options: { fullSize?: number ; position?: LayoutPosition ; weight?: number }) => void
removeBox (chart: Chart<keyof ChartTypeRegistry, (number | ScatterDataPoint | BubbleDataPoint)[], unknown>, layoutItem: LayoutItem) => void
update (chart: Chart<keyof ChartTypeRegistry, (number | ScatterDataPoint | BubbleDataPoint)[], unknown>, width: number, height: number) => void

# Defined in

index.esm.d.ts:769 (opens new window)


# registerables

registerables: readonly ChartComponentLike[]

# Defined in

index.esm.d.ts:552 (opens new window)


# registry

registry: Registry

# Defined in

index.esm.d.ts:1139 (opens new window)