@acronis-platform/ui-react 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/components/ui/accordion-container/accordion-container.js +14 -14
  2. package/dist/components/ui/accordion-container/accordion-container.js.map +1 -1
  3. package/dist/components/ui/app-shell-chat/app-shell-chat.js.map +1 -1
  4. package/dist/components/ui/area-chart/area-chart.js +141 -139
  5. package/dist/components/ui/area-chart/area-chart.js.map +1 -1
  6. package/dist/components/ui/bar-chart/bar-chart.js +295 -293
  7. package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
  8. package/dist/components/ui/category-bar/category-bar.js +109 -93
  9. package/dist/components/ui/category-bar/category-bar.js.map +1 -1
  10. package/dist/components/ui/chart/chart-palette.js +113 -0
  11. package/dist/components/ui/chart/chart-palette.js.map +1 -0
  12. package/dist/components/ui/chart/chart.js +176 -129
  13. package/dist/components/ui/chart/chart.js.map +1 -1
  14. package/dist/components/ui/chart-state/chart-state-illustrations.js +310 -0
  15. package/dist/components/ui/chart-state/chart-state-illustrations.js.map +1 -0
  16. package/dist/components/ui/chart-state/chart-state.js +48 -34
  17. package/dist/components/ui/chart-state/chart-state.js.map +1 -1
  18. package/dist/components/ui/chart-widget/chart-widget.js +87 -0
  19. package/dist/components/ui/chart-widget/chart-widget.js.map +1 -0
  20. package/dist/components/ui/composed-chart/composed-chart.js +117 -115
  21. package/dist/components/ui/composed-chart/composed-chart.js.map +1 -1
  22. package/dist/components/ui/confidence-cone/confidence-cone.js +166 -158
  23. package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -1
  24. package/dist/components/ui/funnel-chart/funnel-chart.js +162 -161
  25. package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -1
  26. package/dist/components/ui/histogram/histogram.js +94 -92
  27. package/dist/components/ui/histogram/histogram.js.map +1 -1
  28. package/dist/components/ui/input/input.js.map +1 -1
  29. package/dist/components/ui/label/label.js +2 -9
  30. package/dist/components/ui/label/label.js.map +1 -1
  31. package/dist/components/ui/line-chart/line-chart.js +143 -141
  32. package/dist/components/ui/line-chart/line-chart.js.map +1 -1
  33. package/dist/components/ui/metric/metric.js +74 -185
  34. package/dist/components/ui/metric/metric.js.map +1 -1
  35. package/dist/components/ui/page-content/page-content.js.map +1 -1
  36. package/dist/components/ui/pie-chart/pie-chart.js +201 -195
  37. package/dist/components/ui/pie-chart/pie-chart.js.map +1 -1
  38. package/dist/components/ui/radar-chart/radar-chart.js +133 -131
  39. package/dist/components/ui/radar-chart/radar-chart.js.map +1 -1
  40. package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +297 -265
  41. package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -1
  42. package/dist/components/ui/sankey-chart/sankey-chart.js +123 -101
  43. package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -1
  44. package/dist/components/ui/scatter-chart/scatter-chart.js +76 -74
  45. package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -1
  46. package/dist/components/ui/section/section.js +157 -31
  47. package/dist/components/ui/section/section.js.map +1 -1
  48. package/dist/components/ui/stepper/stepper.js +24 -24
  49. package/dist/components/ui/stepper/stepper.js.map +1 -1
  50. package/dist/components/ui/stepper-item/stepper-item.js +43 -24
  51. package/dist/components/ui/stepper-item/stepper-item.js.map +1 -1
  52. package/dist/components/ui/treemap/treemap.js +133 -124
  53. package/dist/components/ui/treemap/treemap.js.map +1 -1
  54. package/dist/components/ui/trend-indicator/trend-indicator.js +34 -69
  55. package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -1
  56. package/dist/components/ui/wizard/wizard.js +59 -0
  57. package/dist/components/ui/wizard/wizard.js.map +1 -0
  58. package/dist/hooks/use-wizard.js +75 -0
  59. package/dist/hooks/use-wizard.js.map +1 -0
  60. package/dist/index.js +502 -497
  61. package/dist/index.js.map +1 -1
  62. package/dist/llms/accordion-container.md +181 -0
  63. package/dist/llms/accordion.md +124 -0
  64. package/dist/llms/alert.md +225 -0
  65. package/dist/llms/app-shell-chat.md +415 -0
  66. package/dist/llms/area-chart.md +355 -0
  67. package/dist/llms/avatar.md +208 -0
  68. package/dist/llms/bar-chart.md +406 -0
  69. package/dist/llms/breadcrumb.md +326 -0
  70. package/dist/llms/button-group.md +298 -0
  71. package/dist/llms/button-icon-input.md +142 -0
  72. package/dist/llms/button-icon-menu.md +209 -0
  73. package/dist/llms/button-icon.md +128 -0
  74. package/dist/llms/button-menu.md +172 -0
  75. package/dist/llms/button.md +185 -0
  76. package/dist/llms/calendar-panel.md +733 -0
  77. package/dist/llms/calendar.md +188 -0
  78. package/dist/llms/card-filter.md +214 -0
  79. package/dist/llms/card-section.md +293 -0
  80. package/dist/llms/card.md +447 -0
  81. package/dist/llms/carousel-dialog.md +156 -0
  82. package/dist/llms/category-bar.md +193 -0
  83. package/dist/llms/chart-state.md +190 -0
  84. package/dist/llms/chart-widget.md +209 -0
  85. package/dist/llms/chart.md +182 -0
  86. package/dist/llms/checkbox.md +257 -0
  87. package/dist/llms/chip.md +195 -0
  88. package/dist/llms/combobox.md +164 -0
  89. package/dist/llms/composed-chart.md +508 -0
  90. package/dist/llms/confidence-cone.md +277 -0
  91. package/dist/llms/data-table.md +474 -0
  92. package/dist/llms/date-range-picker.md +272 -0
  93. package/dist/llms/description-list.md +131 -0
  94. package/dist/llms/dialog-footer-carousel.md +147 -0
  95. package/dist/llms/dialog-footer-default.md +142 -0
  96. package/dist/llms/dialog-root.md +246 -0
  97. package/dist/llms/dialog-welcome.md +223 -0
  98. package/dist/llms/dialog.md +403 -0
  99. package/dist/llms/dropdown-menu.md +193 -0
  100. package/dist/llms/empty-overlay.md +146 -0
  101. package/dist/llms/empty.md +156 -0
  102. package/dist/llms/field.md +185 -0
  103. package/dist/llms/filter-cards.md +157 -0
  104. package/dist/llms/filter-chips.md +323 -0
  105. package/dist/llms/filter-search.md +512 -0
  106. package/dist/llms/form.md +154 -0
  107. package/dist/llms/funnel-chart.md +333 -0
  108. package/dist/llms/grid.md +80 -0
  109. package/dist/llms/histogram.md +190 -0
  110. package/dist/llms/input-date-picker.md +203 -0
  111. package/dist/llms/input-otp.md +173 -0
  112. package/dist/llms/input-password.md +197 -0
  113. package/dist/llms/input-search.md +170 -0
  114. package/dist/llms/input-select.md +278 -0
  115. package/dist/llms/input-text-area.md +271 -0
  116. package/dist/llms/input-text.md +192 -0
  117. package/dist/llms/line-chart.md +369 -0
  118. package/dist/llms/link.md +209 -0
  119. package/dist/llms/loading.md +130 -0
  120. package/dist/llms/meter.md +177 -0
  121. package/dist/llms/metric.md +204 -0
  122. package/dist/llms/number-field.md +122 -0
  123. package/dist/llms/page-content.md +69 -0
  124. package/dist/llms/page-header.md +182 -0
  125. package/dist/llms/pagination.md +133 -0
  126. package/dist/llms/pie-chart.md +307 -0
  127. package/dist/llms/popover.md +252 -0
  128. package/dist/llms/progress-circle.md +126 -0
  129. package/dist/llms/progress.md +111 -0
  130. package/dist/llms/radar-chart.md +316 -0
  131. package/dist/llms/radial-bar-chart.md +319 -0
  132. package/dist/llms/radio.md +255 -0
  133. package/dist/llms/resizable.md +195 -0
  134. package/dist/llms/sankey-chart.md +208 -0
  135. package/dist/llms/scatter-chart.md +239 -0
  136. package/dist/llms/scroll-area.md +183 -0
  137. package/dist/llms/section.md +401 -0
  138. package/dist/llms/select.md +210 -0
  139. package/dist/llms/separator.md +87 -0
  140. package/dist/llms/sheet.md +202 -0
  141. package/dist/llms/sidebar-primary.md +360 -0
  142. package/dist/llms/sidebar-secondary.md +417 -0
  143. package/dist/llms/skeleton.md +81 -0
  144. package/dist/llms/slider.md +97 -0
  145. package/dist/llms/spinner.md +100 -0
  146. package/dist/llms/stack.md +80 -0
  147. package/dist/llms/stepper-item.md +309 -0
  148. package/dist/llms/stepper.md +251 -0
  149. package/dist/llms/switch.md +140 -0
  150. package/dist/llms/table.md +436 -0
  151. package/dist/llms/tabs.md +197 -0
  152. package/dist/llms/tag.md +139 -0
  153. package/dist/llms/timeline.md +361 -0
  154. package/dist/llms/timer.md +259 -0
  155. package/dist/llms/toast.md +241 -0
  156. package/dist/llms/toggle-group.md +121 -0
  157. package/dist/llms/toolbar.md +453 -0
  158. package/dist/llms/tooltip.md +164 -0
  159. package/dist/llms/treemap.md +254 -0
  160. package/dist/llms/trend-indicator.md +132 -0
  161. package/dist/llms/widget-placeholder.md +169 -0
  162. package/dist/llms/wizard.md +412 -0
  163. package/dist/llms.txt +142 -0
  164. package/dist/react.js +502 -497
  165. package/dist/react.js.map +1 -1
  166. package/dist/src/components/ui/area-chart/area-chart.d.ts +9 -4
  167. package/dist/src/components/ui/avatar/avatar.d.ts +1 -1
  168. package/dist/src/components/ui/bar-chart/bar-chart.d.ts +9 -4
  169. package/dist/src/components/ui/category-bar/category-bar.d.ts +10 -4
  170. package/dist/src/components/ui/chart/__stories__/palette-control.d.ts +48 -0
  171. package/dist/src/components/ui/chart/__tests__/chart-palette.test.d.ts +1 -0
  172. package/dist/src/components/ui/chart/chart-palette.d.ts +128 -0
  173. package/dist/src/components/ui/chart/chart.d.ts +66 -15
  174. package/dist/src/components/ui/chart/index.d.ts +4 -2
  175. package/dist/src/components/ui/chart-state/chart-state-illustrations.d.ts +6 -0
  176. package/dist/src/components/ui/chart-state/chart-state.d.ts +13 -2
  177. package/dist/src/components/ui/chart-state/index.d.ts +1 -0
  178. package/dist/src/components/ui/chart-widget/chart-widget.d.ts +64 -0
  179. package/dist/src/components/ui/chart-widget/index.d.ts +1 -0
  180. package/dist/src/components/ui/composed-chart/composed-chart.d.ts +12 -7
  181. package/dist/src/components/ui/confidence-cone/confidence-cone.d.ts +10 -5
  182. package/dist/src/components/ui/empty-overlay/empty-overlay.d.ts +1 -1
  183. package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +11 -5
  184. package/dist/src/components/ui/histogram/histogram.d.ts +10 -4
  185. package/dist/src/components/ui/label/index.d.ts +1 -1
  186. package/dist/src/components/ui/label/label.d.ts +1 -5
  187. package/dist/src/components/ui/line-chart/line-chart.d.ts +9 -4
  188. package/dist/src/components/ui/metric/metric.d.ts +13 -14
  189. package/dist/src/components/ui/pie-chart/pie-chart.d.ts +17 -8
  190. package/dist/src/components/ui/radar-chart/radar-chart.d.ts +10 -5
  191. package/dist/src/components/ui/radial-bar-chart/radial-bar-chart.d.ts +17 -6
  192. package/dist/src/components/ui/sankey-chart/sankey-chart.d.ts +10 -5
  193. package/dist/src/components/ui/scatter-chart/scatter-chart.d.ts +10 -5
  194. package/dist/src/components/ui/section/index.d.ts +1 -1
  195. package/dist/src/components/ui/section/section.d.ts +75 -6
  196. package/dist/src/components/ui/stepper-item/stepper-item.d.ts +6 -5
  197. package/dist/src/components/ui/tag/tag.d.ts +1 -1
  198. package/dist/src/components/ui/treemap/treemap.d.ts +11 -5
  199. package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +3 -7
  200. package/dist/src/components/ui/wizard/index.d.ts +1 -0
  201. package/dist/src/components/ui/wizard/wizard.d.ts +6 -0
  202. package/dist/src/hooks/index.d.ts +1 -0
  203. package/dist/src/hooks/use-wizard.d.ts +80 -0
  204. package/dist/src/index.d.ts +2 -3
  205. package/dist/ui-react.css +1 -1
  206. package/package.json +9 -3
  207. package/dist/components/ui/app-shell/app-shell.js +0 -75
  208. package/dist/components/ui/app-shell/app-shell.js.map +0 -1
  209. package/dist/components/ui/auth-layout/auth-layout.js +0 -56
  210. package/dist/components/ui/auth-layout/auth-layout.js.map +0 -1
  211. package/dist/components/ui/collapsible/collapsible.js +0 -22
  212. package/dist/components/ui/collapsible/collapsible.js.map +0 -1
  213. package/dist/src/components/ui/app-shell/app-shell.d.ts +0 -8
  214. package/dist/src/components/ui/app-shell/index.d.ts +0 -1
  215. package/dist/src/components/ui/auth-layout/auth-layout.d.ts +0 -6
  216. package/dist/src/components/ui/auth-layout/index.d.ts +0 -1
  217. package/dist/src/components/ui/collapsible/collapsible.d.ts +0 -5
  218. package/dist/src/components/ui/collapsible/index.d.ts +0 -1
  219. package/dist/src/components/ui/label/label.docs.d.ts +0 -10
@@ -0,0 +1,277 @@
1
+ # ConfidenceCone
2
+
3
+ > A forecast confidence-cone over the shared `Chart` primitives: a solid line for the known/actual period, a dashed line for the forecast, and a shaded band (the "cone") between a lower and upper bound that typically widens with the horizon, visualizing growing uncertainty. Distinct from the conversion `FunnelChart`. Design-pending v1 (no `--ui-chart-*` palette, no `apps/demo` playground — built net-new).
4
+
5
+ **Status:** draft · **Category:** data-display · **Since:** v0.58.0
6
+
7
+ ## Import
8
+
9
+ ```tsx
10
+ import { ConfidenceCone } from '@acronis-platform/ui-react'
11
+ ```
12
+
13
+ ## Quick example
14
+
15
+ ```tsx
16
+ <ConfidenceCone
17
+ config={{
18
+ actual: { label: 'Actual', color: 'var(--ui-background-brand-secondary)' },
19
+ forecast: { label: 'Forecast', color: 'var(--ui-background-brand-secondary)' },
20
+ }}
21
+ data={data}
22
+ xKey="month"
23
+ actualKey="actual"
24
+ forecastKey="forecast"
25
+ lowerKey="lower"
26
+ upperKey="upper"
27
+ className="h-[320px] w-[560px]"
28
+ />
29
+ ```
30
+
31
+ A forecast confidence-cone built on the shared `Chart` primitives: give it a
32
+ time series with actual values, forecast values, and a lower/upper bound per
33
+ forecast point; it draws the actuals as a solid line with a filled area, the
34
+ forecast as a dashed line, and the uncertainty as a shaded band that widens with
35
+ the horizon — plus a divider and shaded region setting the forecast off from the
36
+ actuals. Each metric is **one color**: actual vs forecast differ by line style
37
+ (solid vs dashed), not hue.
38
+
39
+ `series` plots several metrics against one shared axis, each with its own
40
+ columns, hue and independent cone; `actualType="line"` drops the fill under the
41
+ actuals so the cones stay the only shaded regions (worth it as soon as there is
42
+ more than one metric). Omitting a series' bound keys gives a band-less
43
+ projection — a bare dashed line, for a model with a point estimate but no
44
+ interval. `referenceLine` adds dashed value-axis thresholds, `showDots` marks
45
+ points (filled on the actuals, hollow on the projection), and
46
+ `styleForecastTicks` italicizes and accents the projected period's X ticks.
47
+
48
+ Metric colors come from the `palette` prop — a dataviz palette resolving to the
49
+ `--ui-dataviz-*` tokens, `categorical` by default — not from `config`. The actual
50
+ area and the cone band reuse the actual series' color at low opacity.
51
+
52
+ > **Design-pending v1.** Built net-new (no `apps/demo` playground); Code Connect
53
+ > deferred.
54
+
55
+ ## When to use
56
+
57
+ - Showing a projection with **explicit uncertainty** — capacity/licenses/revenue
58
+ forecasts where the plausible range matters, not just the point estimate.
59
+
60
+ ## When not to use
61
+
62
+ - A conversion funnel — that's [`FunnelChart`](/components/funnel-chart), a
63
+ different thing despite the "cone/funnel" shape.
64
+ - A plain trend with no forecast — use [`LineChart`](/components/line-chart)
65
+ (which also supports comparison overlays + delta bands).
66
+
67
+ ## Example
68
+
69
+ ```tsx
70
+ import { ConfidenceCone } from '@acronis-platform/ui-react';
71
+ import type { ChartConfig } from '@acronis-platform/ui-react';
72
+
73
+ const data = [
74
+ { month: 'Apr', actual: 130 },
75
+ { month: 'May', actual: 141 },
76
+ { month: 'Jun', actual: 150, forecast: 150, lower: 150, upper: 150 }, // hand-off
77
+ { month: 'Jul', forecast: 162, lower: 150, upper: 176 },
78
+ { month: 'Aug', forecast: 173, lower: 154, upper: 196 },
79
+ ];
80
+
81
+ const config = {
82
+ actual: { label: 'Actual', color: 'var(--ui-background-brand-secondary)' },
83
+ forecast: {
84
+ label: 'Forecast',
85
+ color: 'var(--ui-background-brand-secondary)',
86
+ },
87
+ } satisfies ChartConfig;
88
+
89
+ <ConfidenceCone
90
+ config={config}
91
+ data={data}
92
+ xKey="month"
93
+ actualKey="actual"
94
+ forecastKey="forecast"
95
+ lowerKey="lower"
96
+ upperKey="upper"
97
+ className="h-[320px] w-[560px]"
98
+ />;
99
+ ```
100
+
101
+ Make the actual and forecast lines meet by giving the hand-off point both an
102
+ `actual` and a `forecast` (with `lower = upper` so the cone starts at a point).
103
+
104
+ ## Props
105
+
106
+ | Prop | Type | Default | Required | Description |
107
+ |------|------|---------|----------|-------------|
108
+ | `data` | `ReadonlyArray<Record<string, string | number | null | undefined>>` | — | yes | Row-per-point data. Rows are naturally sparse — a point carries either an actual value or a forecast + its bounds — so missing fields are allowed. Field names starting with `__cone` are reserved for the internal prediction-band series and must not be used for a caller's own column. |
109
+ | `config` | `ChartConfig` | — | yes | Series take their colour from the container's `palette`; each entry maps a data key to a `label` and an optional `tone`. Resolved into the `--color-<key>` custom properties the lines and areas paint from. Each metric renders in one hue: its cone band and forecast line both reuse its actual series' color — actual and forecast differ by line style, not hue. |
110
+ | `xKey` | `string` | — | yes | The time / category dimension key shared across rows. |
111
+ | `series` | `ReadonlyArray<{ actualKey: string; forecastKey: string; lowerKey?: string; upperKey?: string }>` | — | no | Plot several metrics against one shared axis — each with its own actual / forecast / bound fields and its own hue (from config[actualKey]). Takes precedence over the single-series actualKey / forecastKey / lowerKey / upperKey shorthand; pass one form or the other, not both. |
112
+ | `actualKey` | `string` | — | no | Single-series shorthand — field for the known/actual values, drawn as a solid line with a filled area. Ignored when series is set. |
113
+ | `forecastKey` | `string` | — | no | Single-series shorthand — field for the projected values, drawn as a dashed line. Ignored when series is set. |
114
+ | `lowerKey` | `string` | — | no | Field for the cone's lower bound. Omit (with upperKey) for a band-less projection: a bare dashed forecast line, no cone. |
115
+ | `upperKey` | `string` | — | no | Field for the cone's upper bound. Omit (with lowerKey) for a band-less projection: a bare dashed forecast line, no cone. |
116
+ | `showDots` | `boolean` | `false` | no | Mark each data point — a filled dot on the observed values, a hollow one on the projection — so a point reads as measured or predicted at a glance. |
117
+ | `styleForecastTicks` | `boolean` | `false` | no | Italicize the X-axis ticks over the forecast period and paint them in the first series' hue, so the projected columns read as projected even when the shaded region is off. |
118
+ | `referenceLine` | `{ value: number; label?: string } | Array<{ value: number; label?: string }>` | — | no | One or more dashed horizontal thresholds on the value axis — e.g. a target or a capacity limit. Pass a single object or an array to draw several. A threshold beyond the data max extends the domain so it stays visible. |
119
+ | `xAxisLabel` | `string` | — | no | Title rendered beneath the horizontal (X) axis. |
120
+ | `yAxisLabel` | `string` | — | no | Title rendered beside the vertical (Y) axis (rotated). |
121
+ | `yUnit` | `string` | — | no | Unit suffix appended to Y-axis tick values (recharts `unit`); the X axis is categorical. |
122
+ | `actualType` | `'area' | 'line'` | `'area'` | no | How the known/actual period is drawn — a filled area under the line, or a bare line, for a chart where the cone should be the only shaded region or where several metrics' fills would muddy each other. |
123
+ | `strokeWidth` | `number` | `2` | no | Stroke width of the actual + forecast lines. |
124
+ | `showForecastRegion` | `boolean` | `true` | no | Set off the forecast period with a dashed divider at the hand-off point (the first row with a forecast value) and a subtle shaded band over the forecast region. |
125
+ | `showGrid` | `boolean` | `true` | no | Render the CartesianGrid. |
126
+ | `showTooltip` | `boolean` | `true` | no | Render the hover tooltip (the band series is filtered out of it). |
127
+ | `showLegend` | `boolean` | `true` | no | Render the legend (the band series is filtered out of it). |
128
+ | `tooltipContent` | `ReactElement | ((props) => ReactNode)` | — | no | Replace the default tooltip. Pass a configured ChartTooltipContent (from this library) — e.g. with a formatter / labelFormatter — to customize the tooltip content without composing recharts. Ignored when showTooltip is false. |
129
+ | `showXAxis` | `boolean` | `true` | no | Render the X axis (its ticks and title). Set false to hide it. |
130
+ | `showYAxis` | `boolean` | `true` | no | Render the Y axis (its ticks and title). Set false to hide it. |
131
+ | `xTickFormatter` | `(value: number | string, index?: number) => string` | — | no | Format each X-axis tick value. Unlike the `unit` suffix (append-only), a formatter transforms the value — abbreviate, prefix a symbol, or map to a label. Use formatCompactNumber / formatPercent / createTickFormatter from the shared Chart primitives, or any function. |
132
+ | `yTickFormatter` | `(value: number | string, index?: number) => string` | — | no | Format each Y-axis tick value (see xTickFormatter). |
133
+ | `xAxisAngle` | `number` | — | no | Rotate the X-axis tick labels by this many degrees (a negative angle tilts them up toward the right); the tick anchor + axis height adjust. |
134
+ | `xAxisInterval` | `number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd' | 'equidistantPreserveStart'` | — | no | X-axis tick density — a recharts placement strategy, or a fixed number of ticks to skip between two rendered ones (recharts interval: 0 shows every tick, 1 every other one, 2 every third). |
135
+ | `yAxisTickCount` | `number` | — | no | Desired number of ticks on the value axis (recharts tickCount; a hint, not exact). Applies to whichever axis holds the values — Y for most charts, X for BarChart with orientation="horizontal". |
136
+ | `yAxisDomain` | `'auto' | 'dataMin-dataMax' | 'zero'` | — | no | Value-axis domain preset — auto (fit the data at both ends; the axis need not include 0), zero (anchor the axis at 0, which is also recharts' behaviour when the prop is omitted), or dataMin-dataMax (tight to the data, no padding). Applies to whichever axis holds the values — Y for most charts, X for BarChart with orientation="horizontal". |
137
+ | `gridDashed` | `boolean` | — | no | Draw grid lines dashed instead of solid. |
138
+ | `gridHorizontal` | `boolean` | — | no | Show horizontal grid lines (defaults to the chart's own default when unset). |
139
+ | `gridVertical` | `boolean` | — | no | Show vertical grid lines (defaults to the chart's own default when unset). |
140
+ | `animate` | `boolean` | `false` | no | Enable entrance animation. Off by default so output/baselines are unchanged. |
141
+ | `animationDuration` | `number` | — | no | Animation duration in ms. |
142
+ | `animationBegin` | `number` | — | no | Delay before the animation starts, in ms. |
143
+ | `animationEasing` | `'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear'` | — | no | Easing curve. |
144
+
145
+ ## Behavior
146
+
147
+ `ConfidenceCone` composes a solid actual line, a dashed forecast line, and a
148
+ shaded prediction band (the "cone") on the shared `Chart` primitives.
149
+
150
+ ```gherkin
151
+ Scenario: Actual + forecast + cone (one color)
152
+ Given data with actual values up to a hand-off point, then forecast values with lower/upper bounds
153
+ Then the actual period renders as a solid line with a filled area beneath it
154
+ And the forecast period renders as a dashed line
155
+ And a shaded band fills between lower and upper across the forecast, typically widening with the horizon
156
+ And the metric uses one color: the actual area, forecast line, and cone band all reuse the actual series' color (actual vs forecast differ by line style, not hue)
157
+ And the areas mark no points unless showDots is set
158
+ ```
159
+
160
+ ```gherkin
161
+ Scenario: Several metrics on one shared axis
162
+ Given a series array naming each metric's actual / forecast / bound fields
163
+ Then every metric renders its own cone and lines against the one shared axis
164
+ And each metric uses its own hue, taken from config[actualKey]
165
+ And every cone renders behind every line, so no band covers another metric's line
166
+ And the legend names each metric once
167
+ And the series array supersedes the single-series actualKey / forecastKey / lowerKey / upperKey shorthand
168
+ ```
169
+
170
+ ```gherkin
171
+ Scenario: Actual as a bare line
172
+ Given actualType is "line"
173
+ Then the observed period renders as a solid line with no filled region beneath it
174
+ And the cone band is the only shaded region left under the series
175
+ And with actualType "area" (the default) the filled region returns
176
+ ```
177
+
178
+ ```gherkin
179
+ Scenario: Band-less projection
180
+ Given a series that omits lowerKey and upperKey
181
+ Then its actual line hands off to a bare dashed forecast with no cone
182
+ And other series in the same chart still render their own cones
183
+ ```
184
+
185
+ ```gherkin
186
+ Scenario: Value-axis thresholds
187
+ Given a referenceLine value (or an array of them)
188
+ Then each renders as a dashed horizontal line on the value axis, with its label at the line's right end
189
+ And a threshold beyond the data max extends the domain so it stays visible
190
+ ```
191
+
192
+ ```gherkin
193
+ Scenario: Measured vs predicted points
194
+ Given showDots is true
195
+ Then each observed point carries a filled dot in the metric's hue
196
+ And each projected point carries a hollow dot — the metric's hue as its outline, the surface color as its fill
197
+ And with showDots false (the default) no point is marked
198
+ ```
199
+
200
+ ```gherkin
201
+ Scenario: Styled forecast ticks
202
+ Given styleForecastTicks is true
203
+ Then the X-axis ticks over the projected period render italic in the first series' hue
204
+ And the ticks over the actual period keep the axis' default styling
205
+ And a caller's xTickFormatter still formats every tick
206
+ And the projected ticks are matched by x value, so a tick interval that skips ticks cannot mis-style them
207
+ ```
208
+
209
+ ```gherkin
210
+ Scenario: Forecast region marker
211
+ Given showForecastRegion is true (the default) and a hand-off point exists
212
+ Then a dashed vertical divider is drawn at the hand-off (first row with a forecast)
213
+ And a subtle shaded band covers the forecast region behind the series
214
+ And with showForecastRegion false, neither the divider nor the shaded region render
215
+ ```
216
+
217
+ ```gherkin
218
+ Scenario: Missing bounds
219
+ Given a row without numeric lower/upper (e.g. the actual-only period)
220
+ Then the cone band breaks there (only the forecast region is shaded)
221
+ ```
222
+
223
+ ```gherkin
224
+ Scenario: Band excluded from chrome
225
+ Given showTooltip and/or showLegend are true
226
+ Then the synthetic band range series is filtered out of the tooltip and legend
227
+ And only the actual and forecast series appear there
228
+ ```
229
+
230
+ ```gherkin
231
+ Scenario: Tooltip on hover
232
+ Given showTooltip is true
233
+ When the user hovers a point
234
+ Then a card shows the point's actual and/or forecast value (not the band)
235
+ ```
236
+
237
+ ```gherkin
238
+ Scenario: Empty data
239
+ Given data is an empty array
240
+ Then the chart renders its axes and grid with no lines or band and does not throw
241
+ ```
242
+
243
+ ```gherkin
244
+ Scenario: Entrance animation is opt-in
245
+ Given animate is unset
246
+ Then the series render at their final geometry with no entrance animation
247
+ And the committed visual baselines are unaffected
248
+ ```
249
+
250
+ ```gherkin
251
+ Scenario: Reduced motion
252
+ Given animate is true
253
+ And a user with prefers-reduced-motion
254
+ Then the entrance animation does not play and the series render at their final geometry
255
+ And the same applies when rendering on the server
256
+ ```
257
+
258
+ ## Accessibility
259
+
260
+ - recharts' `accessibilityLayer` is **on by default** (recharts v3), giving the
261
+ chart keyboard focus and an accessible description of the plotted series.
262
+ - A forecast cone is inherently visual. **Pair it with a text alternative** — a
263
+ caption or an adjacent table with the actual, forecast, and bound values — and
264
+ give the chart an accessible name (`aria-label` / `aria-labelledby`). The
265
+ wrapper forwards native `div` attributes, so `aria-*` pass through.
266
+ - Don't rely on color or line style alone: the legend labels the actual vs
267
+ forecast series, and the tooltip carries the values. The dashed forecast line
268
+ is a redundant cue on top of color, not the only distinction.
269
+ - Watch recharts issue [#4809](https://github.com/recharts/recharts/issues/4809)
270
+ on the a11y layer for heavily-customized charts.
271
+
272
+ ## Contrast
273
+
274
+ Tooltip chrome, axis labels, and the grid meet contrast in both themes via the
275
+ semantic tokens. The actual/forecast line colors come from `config` and are the
276
+ caller's responsibility; the cone band is a low-opacity tint of the forecast
277
+ color, intended as a secondary cue behind the lines.