@vectara/vectara-ui 19.0.0 → 19.1.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 (54) hide show
  1. package/lib/components/chart/BarChart.d.ts +20 -0
  2. package/lib/components/chart/BarChart.js +28 -0
  3. package/lib/components/chart/ComposedChart.d.ts +21 -0
  4. package/lib/components/chart/ComposedChart.js +29 -0
  5. package/lib/components/chart/LineChart.d.ts +22 -0
  6. package/lib/components/chart/LineChart.js +42 -0
  7. package/lib/components/chart/PieChart.d.ts +15 -0
  8. package/lib/components/chart/PieChart.js +36 -0
  9. package/lib/components/chart/ScatterChart.d.ts +18 -0
  10. package/lib/components/chart/ScatterChart.js +34 -0
  11. package/lib/components/chart/Sparkline.d.ts +13 -0
  12. package/lib/components/chart/Sparkline.js +23 -0
  13. package/lib/components/chart/TreeMap.d.ts +13 -0
  14. package/lib/components/chart/TreeMap.js +51 -0
  15. package/lib/components/chart/_index.scss +19 -0
  16. package/lib/components/chart/chartTheme.d.ts +21 -0
  17. package/lib/components/chart/chartTheme.js +13 -0
  18. package/lib/components/chart/palette.d.ts +5 -0
  19. package/lib/components/chart/palette.js +29 -0
  20. package/lib/components/context/Theme.d.ts +8 -0
  21. package/lib/components/context/Theme.js +40 -3
  22. package/lib/components/index.d.ts +10 -2
  23. package/lib/components/index.js +9 -1
  24. package/lib/styles/index.css +22 -0
  25. package/package.json +4 -3
  26. package/src/docs/Docs.tsx +10 -0
  27. package/src/docs/pages/barChart/Basic.tsx +21 -0
  28. package/src/docs/pages/barChart/Horizontal.tsx +20 -0
  29. package/src/docs/pages/barChart/Stacked.tsx +23 -0
  30. package/src/docs/pages/barChart/index.tsx +29 -0
  31. package/src/docs/pages/colorPalette/ChartColors.tsx +68 -0
  32. package/src/docs/pages/colorPalette/index.tsx +7 -0
  33. package/src/docs/pages/composedChart/Basic.tsx +25 -0
  34. package/src/docs/pages/composedChart/index.tsx +15 -0
  35. package/src/docs/pages/lineChart/Area.tsx +25 -0
  36. package/src/docs/pages/lineChart/Basic.tsx +23 -0
  37. package/src/docs/pages/lineChart/Curved.tsx +25 -0
  38. package/src/docs/pages/lineChart/StackedArea.tsx +27 -0
  39. package/src/docs/pages/lineChart/index.tsx +36 -0
  40. package/src/docs/pages/pieChart/Basic.tsx +13 -0
  41. package/src/docs/pages/pieChart/Donut.tsx +12 -0
  42. package/src/docs/pages/pieChart/ManyValues.tsx +51 -0
  43. package/src/docs/pages/pieChart/Unlabeled.tsx +15 -0
  44. package/src/docs/pages/pieChart/index.tsx +36 -0
  45. package/src/docs/pages/scatterChart/Basic.tsx +31 -0
  46. package/src/docs/pages/scatterChart/Dense.tsx +144 -0
  47. package/src/docs/pages/scatterChart/index.tsx +22 -0
  48. package/src/docs/pages/sparkline/Basic.tsx +7 -0
  49. package/src/docs/pages/sparkline/Inline.tsx +21 -0
  50. package/src/docs/pages/sparkline/index.tsx +22 -0
  51. package/src/docs/pages/treeMap/Basic.tsx +14 -0
  52. package/src/docs/pages/treeMap/Nested.tsx +88 -0
  53. package/src/docs/pages/treeMap/index.tsx +22 -0
  54. package/src/docs/pages.tsx +11 -0
@@ -0,0 +1,20 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ export type BarChartSeries = {
3
+ dataKey: string;
4
+ name?: string;
5
+ color?: PatchColor;
6
+ };
7
+ type Props = {
8
+ data: Array<Record<string, string | number>>;
9
+ categoryKey: string;
10
+ series: BarChartSeries[];
11
+ orientation?: "columns" | "bars";
12
+ stacked?: boolean;
13
+ height?: number;
14
+ showLegend?: boolean;
15
+ showGrid?: boolean;
16
+ showTooltip?: boolean;
17
+ "data-testid"?: string;
18
+ };
19
+ export declare const VuiBarChart: ({ data, categoryKey, series, orientation, stacked, height, showLegend, showGrid, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -0,0 +1,28 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Bar, CartesianGrid, BarChart as RechartsBarChart, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ import { chartAxisLineStyle, chartLegendProps, chartTickStyle, chartTooltipProps } from "./chartTheme";
16
+ export const VuiBarChart = (_a) => {
17
+ var { data, categoryKey, series, orientation = "columns", stacked = false, height = 320, showLegend = series.length > 1, showGrid = true, showTooltip = true } = _a, rest = __rest(_a, ["data", "categoryKey", "series", "orientation", "stacked", "height", "showLegend", "showGrid", "showTooltip"]);
18
+ const isHorizontal = orientation === "bars";
19
+ const categoryAxis = (_jsx(_Fragment, { children: isHorizontal ? (_jsx(YAxis, { type: "category", dataKey: categoryKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false })) : (_jsx(XAxis, { type: "category", dataKey: categoryKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false })) }));
20
+ const valueAxis = isHorizontal ? (_jsx(XAxis, { type: "number", tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false })) : (_jsx(YAxis, { type: "number", tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }));
21
+ return (_jsx("div", Object.assign({ className: "vuiBarChart" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: _jsxs(RechartsBarChart, Object.assign({ data: data, layout: isHorizontal ? "vertical" : "horizontal" }, { children: [showGrid && (_jsx(CartesianGrid, { stroke: "var(--vui-color-border-light)", vertical: isHorizontal, horizontal: !isHorizontal })), categoryAxis, valueAxis, showTooltip && _jsx(Tooltip, Object.assign({ cursor: { fill: "var(--vui-color-light-shade)" } }, chartTooltipProps)), showLegend && _jsx(Legend, Object.assign({}, chartLegendProps)), series.map((s, index) => {
22
+ var _a;
23
+ return (_jsx(Bar, { dataKey: s.dataKey, name: (_a = s.name) !== null && _a !== void 0 ? _a : s.dataKey, fill: s.color ? getChartColor(s.color) : getChartColorByIndex(index), stackId: stacked ? "stack" : undefined, radius: isHorizontal ? [0, 4, 4, 0] : [4, 4, 0, 0],
24
+ // A thin stroke separates touching segments regardless of fill,
25
+ // a redundant cue that aids color-blind readers.
26
+ stroke: "var(--vui-color-empty-shade)", strokeWidth: 1 }, s.dataKey));
27
+ })] })) })) })));
28
+ };
@@ -0,0 +1,21 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ export type ComposedSeries = {
3
+ dataKey: string;
4
+ type: "bar" | "line";
5
+ name?: string;
6
+ color?: PatchColor;
7
+ axis?: "left" | "right";
8
+ curved?: boolean;
9
+ };
10
+ type Props = {
11
+ data: Array<Record<string, string | number>>;
12
+ categoryKey: string;
13
+ series: ComposedSeries[];
14
+ height?: number;
15
+ showLegend?: boolean;
16
+ showGrid?: boolean;
17
+ showTooltip?: boolean;
18
+ "data-testid"?: string;
19
+ };
20
+ export declare const VuiComposedChart: ({ data, categoryKey, series, height, showLegend, showGrid, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
21
+ export {};
@@ -0,0 +1,29 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Bar, CartesianGrid, ComposedChart as RechartsComposedChart, Legend, Line, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ import { chartAxisLineStyle, chartLegendProps, chartTickStyle, chartTooltipProps } from "./chartTheme";
16
+ export const VuiComposedChart = (_a) => {
17
+ var { data, categoryKey, series, height = 320, showLegend = series.length > 1, showGrid = true, showTooltip = true } = _a, rest = __rest(_a, ["data", "categoryKey", "series", "height", "showLegend", "showGrid", "showTooltip"]);
18
+ const hasRightAxis = series.some((s) => s.axis === "right");
19
+ return (_jsx("div", Object.assign({ className: "vuiComposedChart" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: _jsxs(RechartsComposedChart, Object.assign({ data: data }, { children: [showGrid && _jsx(CartesianGrid, { stroke: "var(--vui-color-border-light)", vertical: false }), _jsx(XAxis, { dataKey: categoryKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), _jsx(YAxis, { yAxisId: "left", tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), hasRightAxis && (_jsx(YAxis, { yAxisId: "right", orientation: "right", tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false })), showTooltip && _jsx(Tooltip, Object.assign({ cursor: { fill: "var(--vui-color-light-shade)" } }, chartTooltipProps)), showLegend && _jsx(Legend, Object.assign({}, chartLegendProps)), series.map((s, index) => {
20
+ var _a, _b;
21
+ const color = s.color ? getChartColor(s.color) : getChartColorByIndex(index);
22
+ const yAxisId = (_a = s.axis) !== null && _a !== void 0 ? _a : "left";
23
+ const name = (_b = s.name) !== null && _b !== void 0 ? _b : s.dataKey;
24
+ if (s.type === "bar") {
25
+ return (_jsx(Bar, { yAxisId: yAxisId, dataKey: s.dataKey, name: name, fill: color, radius: [4, 4, 0, 0], stroke: "var(--vui-color-empty-shade)", strokeWidth: 1 }, s.dataKey));
26
+ }
27
+ return (_jsx(Line, { yAxisId: yAxisId, type: s.curved ? "monotone" : "linear", dataKey: s.dataKey, name: name, stroke: color, strokeWidth: 2, dot: { r: 3, strokeWidth: 0, fill: color }, activeDot: { r: 5 } }, s.dataKey));
28
+ })] })) })) })));
29
+ };
@@ -0,0 +1,22 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ export type LineChartSeries = {
3
+ dataKey: string;
4
+ name?: string;
5
+ color?: PatchColor;
6
+ };
7
+ export type LineChartVariant = "line" | "area" | "stacked-area";
8
+ type Props = {
9
+ data: Array<Record<string, string | number>>;
10
+ categoryKey: string;
11
+ series: LineChartSeries[];
12
+ variant?: LineChartVariant;
13
+ curved?: boolean;
14
+ showPoints?: boolean;
15
+ height?: number;
16
+ showLegend?: boolean;
17
+ showGrid?: boolean;
18
+ showTooltip?: boolean;
19
+ "data-testid"?: string;
20
+ };
21
+ export declare const VuiLineChart: ({ data, categoryKey, series, variant, curved, showPoints, height, showLegend, showGrid, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,42 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Area, AreaChart as RechartsAreaChart, CartesianGrid, Line, LineChart as RechartsLineChart, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ import { chartAxisLineStyle, chartLegendProps, chartTickStyle, chartTooltipProps } from "./chartTheme";
16
+ export const VuiLineChart = (_a) => {
17
+ var { data, categoryKey, series, variant = "line", curved = false, showPoints = true, height = 320, showLegend = series.length > 1, showGrid = true, showTooltip = true } = _a, rest = __rest(_a, ["data", "categoryKey", "series", "variant", "curved", "showPoints", "height", "showLegend", "showGrid", "showTooltip"]);
18
+ const isArea = variant === "area" || variant === "stacked-area";
19
+ const isStacked = variant === "stacked-area";
20
+ const axes = (_jsxs(_Fragment, { children: [showGrid && _jsx(CartesianGrid, { stroke: "var(--vui-color-border-light)", vertical: false }), _jsx(XAxis, { dataKey: categoryKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), _jsx(YAxis, { tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), showTooltip && _jsx(Tooltip, Object.assign({ cursor: { stroke: "var(--vui-color-border-medium)" } }, chartTooltipProps)), showLegend && _jsx(Legend, Object.assign({}, chartLegendProps))] }));
21
+ // Shared marker props keep lines and areas visually identical apart from the fill.
22
+ const markProps = (s, index) => {
23
+ var _a;
24
+ const color = s.color ? getChartColor(s.color) : getChartColorByIndex(index);
25
+ return {
26
+ key: s.dataKey,
27
+ type: curved ? "monotone" : "linear",
28
+ dataKey: s.dataKey,
29
+ name: (_a = s.name) !== null && _a !== void 0 ? _a : s.dataKey,
30
+ stroke: color,
31
+ strokeWidth: 2,
32
+ dot: showPoints ? { r: 3, strokeWidth: 0, fill: color } : false,
33
+ activeDot: { r: 5 }
34
+ };
35
+ };
36
+ return (_jsx("div", Object.assign({ className: "vuiLineChart" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: isArea ? (_jsxs(RechartsAreaChart, Object.assign({ data: data }, { children: [axes, series.map((s, index) => {
37
+ const props = markProps(s, index);
38
+ // Stacked areas tile rather than overlap, so they take a more solid
39
+ // fill; overlapping areas stay translucent to remain readable.
40
+ return (_jsx(Area, Object.assign({}, props, { fill: props.stroke, fillOpacity: isStacked ? 0.85 : 0.2, stackId: isStacked ? "stack" : undefined })));
41
+ })] }))) : (_jsxs(RechartsLineChart, Object.assign({ data: data }, { children: [axes, series.map((s, index) => (_jsx(Line, Object.assign({}, markProps(s, index)))))] }))) })) })));
42
+ };
@@ -0,0 +1,15 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ type Props = {
3
+ data: Array<Record<string, string | number>>;
4
+ categoryKey: string;
5
+ valueKey: string;
6
+ donut?: boolean;
7
+ colors?: PatchColor[];
8
+ showLabels?: boolean;
9
+ height?: number;
10
+ showLegend?: boolean;
11
+ showTooltip?: boolean;
12
+ "data-testid"?: string;
13
+ };
14
+ export declare const VuiPieChart: ({ data, categoryKey, valueKey, donut, colors, showLabels, height, showLegend, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
15
+ export {};
@@ -0,0 +1,36 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Cell, Legend, Pie, PieChart as RechartsPieChart, ResponsiveContainer, Tooltip } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ import { chartLegendProps, chartTooltipProps } from "./chartTheme";
16
+ const RADIAN = Math.PI / 180;
17
+ // Render a slice's name and percentage just outside its arc, anchored so the
18
+ // text reads away from the center.
19
+ const renderSliceLabel = ({ cx, cy, midAngle, outerRadius, percent, name }) => {
20
+ const centerX = Number(cx);
21
+ const centerY = Number(cy);
22
+ const angle = Number(midAngle);
23
+ const radius = Number(outerRadius) + 18;
24
+ const x = centerX + radius * Math.cos(-angle * RADIAN);
25
+ const y = centerY + radius * Math.sin(-angle * RADIAN);
26
+ return (_jsx("text", Object.assign({ x: x, y: y, fill: "var(--vui-color-text)", fontSize: 12, textAnchor: x > centerX ? "start" : "end", dominantBaseline: "central" }, { children: `${name} (${Math.round(Number(percent) * 100)}%)` })));
27
+ };
28
+ export const VuiPieChart = (_a) => {
29
+ var { data, categoryKey, valueKey, donut = false, colors, showLabels = true, height = 320, showLegend = true, showTooltip = true } = _a, rest = __rest(_a, ["data", "categoryKey", "valueKey", "donut", "colors", "showLabels", "height", "showLegend", "showTooltip"]);
30
+ return (_jsx("div", Object.assign({ className: "vuiPieChart" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: _jsxs(RechartsPieChart, { children: [_jsx(Pie, Object.assign({ data: data, dataKey: valueKey, nameKey: categoryKey, innerRadius: donut ? "55%" : 0,
31
+ // Leave room outside the arc for labels when they're shown.
32
+ outerRadius: showLabels ? "70%" : "80%", paddingAngle: 1, label: showLabels ? renderSliceLabel : undefined, labelLine: showLabels ? { stroke: "var(--vui-color-border-medium)" } : false,
33
+ // A stroke between slices separates adjacent colors, a redundant cue
34
+ // that aids color-blind readers.
35
+ stroke: "var(--vui-color-empty-shade)", strokeWidth: 2 }, { children: data.map((datum, index) => (_jsx(Cell, { fill: (colors === null || colors === void 0 ? void 0 : colors[index]) ? getChartColor(colors[index]) : getChartColorByIndex(index) }, String(datum[categoryKey])))) })), showTooltip && _jsx(Tooltip, Object.assign({}, chartTooltipProps)), showLegend && _jsx(Legend, Object.assign({}, chartLegendProps))] }) })) })));
36
+ };
@@ -0,0 +1,18 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ export type ScatterSeries = {
3
+ data: Array<Record<string, number>>;
4
+ name?: string;
5
+ color?: PatchColor;
6
+ };
7
+ type Props = {
8
+ series: ScatterSeries[];
9
+ xKey?: string;
10
+ yKey?: string;
11
+ height?: number;
12
+ showLegend?: boolean;
13
+ showGrid?: boolean;
14
+ showTooltip?: boolean;
15
+ "data-testid"?: string;
16
+ };
17
+ export declare const VuiScatterChart: ({ series, xKey, yKey, height, showLegend, showGrid, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,34 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { useState } from "react";
14
+ import { CartesianGrid, Legend, ResponsiveContainer, Scatter, ScatterChart as RechartsScatterChart, Tooltip, XAxis, YAxis } from "recharts";
15
+ import { getChartColor, getChartColorByIndex } from "./palette";
16
+ import { chartAxisLineStyle, chartLegendProps, chartTickStyle, chartTooltipProps } from "./chartTheme";
17
+ const DEFAULT_RADIUS = 4;
18
+ const ACTIVE_RADIUS = 7;
19
+ export const VuiScatterChart = (_a) => {
20
+ var { series, xKey = "x", yKey = "y", height = 320, showLegend = series.length > 1, showGrid = true, showTooltip = true } = _a, rest = __rest(_a, ["series", "xKey", "yKey", "height", "showLegend", "showGrid", "showTooltip"]);
21
+ // Recharts fires activeShape for the active point of every series at the
22
+ // shared hover index, which would light up points across colors at once.
23
+ // Tracking the hovered series lets only that series emphasize its point;
24
+ // the others render an ordinary dot.
25
+ const [hoveredSeries, setHoveredSeries] = useState(null);
26
+ return (_jsx("div", Object.assign({ className: "vuiScatterChart" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: _jsxs(RechartsScatterChart, { children: [showGrid && _jsx(CartesianGrid, { stroke: "var(--vui-color-border-light)" }), _jsx(XAxis, { type: "number", dataKey: xKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), _jsx(YAxis, { type: "number", dataKey: yKey, tick: chartTickStyle, axisLine: chartAxisLineStyle, tickLine: false }), showTooltip && (_jsx(Tooltip, Object.assign({ cursor: { strokeDasharray: "3 3", stroke: "var(--vui-color-border-medium)" } }, chartTooltipProps))), showLegend && _jsx(Legend, Object.assign({}, chartLegendProps)), series.map((s, index) => {
27
+ var _a;
28
+ const color = s.color ? getChartColor(s.color) : getChartColorByIndex(index);
29
+ // Only the hovered series rings its active point; ring it with the
30
+ // surface color so it lifts above the points it overlaps.
31
+ const renderActivePoint = ({ cx, cy }) => hoveredSeries === index ? (_jsx("circle", { cx: cx, cy: cy, r: ACTIVE_RADIUS, fill: color, stroke: "var(--vui-color-empty-shade)", strokeWidth: 2 })) : (_jsx("circle", { cx: cx, cy: cy, r: DEFAULT_RADIUS, fill: color }));
32
+ return (_jsx(Scatter, { name: s.name, data: s.data, fill: color, activeShape: renderActivePoint, onMouseEnter: () => setHoveredSeries(index), onMouseLeave: () => setHoveredSeries(null) }, (_a = s.name) !== null && _a !== void 0 ? _a : index));
33
+ })] }) })) })));
34
+ };
@@ -0,0 +1,13 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ type Props = {
3
+ data: Array<Record<string, string | number>>;
4
+ dataKey: string;
5
+ variant?: "line" | "bar";
6
+ color?: PatchColor;
7
+ curved?: boolean;
8
+ width?: number;
9
+ height?: number;
10
+ "data-testid"?: string;
11
+ };
12
+ export declare const VuiSparkline: ({ data, dataKey, variant, color, curved, width, height, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,23 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { Bar, BarChart, Line, LineChart } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ // A compact, axis-free trend meant to sit inline beside a number or in a table
16
+ // cell. It renders at a fixed size rather than filling its container.
17
+ export const VuiSparkline = (_a) => {
18
+ var { data, dataKey, variant = "line", color, curved = true, width = 120, height = 32 } = _a, rest = __rest(_a, ["data", "dataKey", "variant", "color", "curved", "width", "height"]);
19
+ const fill = color ? getChartColor(color) : getChartColorByIndex(0);
20
+ return (_jsx("div", Object.assign({ className: "vuiSparkline" }, rest, { children: variant === "bar" ? (_jsx(BarChart, Object.assign({ width: width, height: height, data: data, margin: { top: 1, right: 0, bottom: 1, left: 0 } }, { children: _jsx(Bar, { dataKey: dataKey, fill: fill, radius: 1, isAnimationActive: false }) }))) : (_jsx(LineChart, Object.assign({ width: width, height: height, data: data, margin: { top: 2, right: 2, bottom: 2, left: 2 } }, { children: _jsx(Line, { type: curved ? "monotone" : "linear", dataKey: dataKey, stroke: fill, strokeWidth: 1.5, dot: false,
21
+ // No axes or tooltip means a hover dot conveys nothing, so suppress it.
22
+ activeDot: false, isAnimationActive: false }) }))) })));
23
+ };
@@ -0,0 +1,13 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ type Props = {
3
+ data: Array<Record<string, unknown>>;
4
+ categoryKey: string;
5
+ valueKey: string;
6
+ childrenKey?: string;
7
+ colors?: PatchColor[];
8
+ height?: number;
9
+ showTooltip?: boolean;
10
+ "data-testid"?: string;
11
+ };
12
+ export declare const VuiTreeMap: ({ data, categoryKey, valueKey, childrenKey, colors, height, showTooltip, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,51 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { ResponsiveContainer, Tooltip, Treemap } from "recharts";
14
+ import { getChartColor, getChartColorByIndex } from "./palette";
15
+ import { chartTooltipProps } from "./chartTheme";
16
+ // Leaves render as palette-colored cells separated by a stroke; parent blocks
17
+ // render as an outline that delineates the group its children fill.
18
+ const TreeMapCell = ({ x = 0, y = 0, width = 0, height = 0, depth = 0, name = "", fill = "", leafDepth = 1 }) => {
19
+ if (depth === leafDepth) {
20
+ return (_jsxs("g", { children: [_jsx("rect", { x: x, y: y, width: width, height: height, fill: fill, stroke: "var(--vui-color-empty-shade)", strokeWidth: 1.5 }), width > 50 && height > 22 && (_jsx("text", Object.assign({ x: x + 6, y: y + 16, fill: "var(--vui-color-empty-shade)", fontSize: 11, fontWeight: 600 }, { children: name })))] }));
21
+ }
22
+ if (depth >= 1) {
23
+ return _jsx("rect", { x: x, y: y, width: width, height: height, fill: "none", stroke: "var(--vui-color-dark-shade)", strokeWidth: 2 });
24
+ }
25
+ return null;
26
+ };
27
+ export const VuiTreeMap = (_a) => {
28
+ var { data, categoryKey, valueKey, childrenKey, colors, height = 320, showTooltip = true } = _a, rest = __rest(_a, ["data", "categoryKey", "valueKey", "childrenKey", "colors", "height", "showTooltip"]);
29
+ const colorFor = (index) => ((colors === null || colors === void 0 ? void 0 : colors[index]) ? getChartColor(colors[index]) : getChartColorByIndex(index));
30
+ // Build the shape Recharts expects, embedding each node's fill so the content
31
+ // element can color it. Children of a block share the block's hue.
32
+ const treeData = data.map((datum, index) => {
33
+ const color = colorFor(index);
34
+ const name = String(datum[categoryKey]);
35
+ const children = childrenKey ? datum[childrenKey] : undefined;
36
+ if (children) {
37
+ return {
38
+ name,
39
+ fill: color,
40
+ children: children.map((child) => ({
41
+ name: String(child[categoryKey]),
42
+ value: Number(child[valueKey]),
43
+ fill: color
44
+ }))
45
+ };
46
+ }
47
+ return { name, value: Number(datum[valueKey]), fill: color };
48
+ });
49
+ const leafDepth = childrenKey ? 2 : 1;
50
+ return (_jsx("div", Object.assign({ className: "vuiTreeMap" }, rest, { children: _jsx(ResponsiveContainer, Object.assign({ width: "100%", height: height }, { children: _jsx(Treemap, Object.assign({ data: treeData, dataKey: "value", isAnimationActive: false, content: _jsx(TreeMapCell, { leafDepth: leafDepth }) }, { children: showTooltip && _jsx(Tooltip, Object.assign({}, chartTooltipProps)) })) })) })));
51
+ };
@@ -0,0 +1,19 @@
1
+ .vuiBarChart,
2
+ .vuiLineChart,
3
+ .vuiPieChart,
4
+ .vuiScatterChart,
5
+ .vuiComposedChart,
6
+ .vuiTreeMap {
7
+ width: 100%;
8
+
9
+ // Soften Recharts' default legend spacing to match the design system rhythm.
10
+ .recharts-legend-item {
11
+ margin-right: $sizeM !important;
12
+ }
13
+ }
14
+
15
+ // Sparklines render at a fixed size and sit inline beside other content.
16
+ .vuiSparkline {
17
+ display: inline-block;
18
+ line-height: 0;
19
+ }
@@ -0,0 +1,21 @@
1
+ export declare const chartTickStyle: {
2
+ fill: string;
3
+ fontSize: number;
4
+ };
5
+ export declare const chartAxisLineStyle: {
6
+ stroke: string;
7
+ };
8
+ export declare const chartTooltipProps: {
9
+ contentStyle: {
10
+ backgroundColor: string;
11
+ border: string;
12
+ borderRadius: number;
13
+ color: string;
14
+ };
15
+ };
16
+ export declare const chartLegendProps: {
17
+ wrapperStyle: {
18
+ fontSize: number;
19
+ color: string;
20
+ };
21
+ };
@@ -0,0 +1,13 @@
1
+ // Shared styling for chart primitives, wired to theme variables so every chart
2
+ // type renders with the same axes, tooltip, and legend treatment.
3
+ export const chartTickStyle = { fill: "var(--vui-color-label)", fontSize: 12 };
4
+ export const chartAxisLineStyle = { stroke: "var(--vui-color-border-medium)" };
5
+ export const chartTooltipProps = {
6
+ contentStyle: {
7
+ backgroundColor: "var(--vui-color-empty-shade)",
8
+ border: "1px solid var(--vui-color-border-light)",
9
+ borderRadius: 6,
10
+ color: "var(--vui-color-text)"
11
+ }
12
+ };
13
+ export const chartLegendProps = { wrapperStyle: { fontSize: 12, color: "var(--vui-color-label)" } };
@@ -0,0 +1,5 @@
1
+ import { PatchColor } from "../patch/VuiPatch";
2
+ export declare const CHART_COLOR_COUNT = 8;
3
+ export declare const CHART_PALETTE: string[];
4
+ export declare const getChartColorByIndex: (index: number) => string;
5
+ export declare const getChartColor: (color: PatchColor) => string;
@@ -0,0 +1,29 @@
1
+ // The number of distinct colors in the chart palette. Past this many series,
2
+ // no palette stays reliably distinguishable, so callers should group or facet.
3
+ export const CHART_COLOR_COUNT = 8;
4
+ // The ordered chart palette as CSS variable references, so series colors stay
5
+ // reactive to the active theme. These are tuned for series discrimination
6
+ // (hue + luminance contrast, colorblind-safe), distinct from the categorical
7
+ // chip hues. See the chart color tokens in Theme.ts.
8
+ export const CHART_PALETTE = Array.from({ length: CHART_COLOR_COUNT }, (_, index) => `var(--vui-chart-${index + 1})`);
9
+ // When the series count exceeds the palette, each wrap shifts lightness rather
10
+ // than repeating the same color. Lightness is a partially colorblind-safe
11
+ // channel, so a base hue and its darker/lighter variants stay distinguishable.
12
+ // This lets charts degrade gracefully past eight series — though it does not
13
+ // make a chart with that many categories genuinely readable; prefer grouping or
14
+ // a bar chart instead.
15
+ const tierTransforms = [
16
+ (color) => color,
17
+ (color) => `color-mix(in srgb, ${color}, black 22%)`,
18
+ (color) => `color-mix(in srgb, ${color}, white 32%)`
19
+ ];
20
+ // Pick a series color by index. The base hue cycles every CHART_COLOR_COUNT
21
+ // entries; the lightness tier advances on each cycle.
22
+ export const getChartColorByIndex = (index) => {
23
+ const base = CHART_PALETTE[index % CHART_COLOR_COUNT];
24
+ const tier = Math.floor(index / CHART_COLOR_COUNT) % tierTransforms.length;
25
+ return tierTransforms[tier](base);
26
+ };
27
+ // Resolve a categorical hue to its saturated foreground — an escape hatch for
28
+ // series that need a specific brand color rather than the default palette.
29
+ export const getChartColor = (color) => `var(--vui-color-${color}-text)`;
@@ -79,6 +79,14 @@ export type Theme = {
79
79
  colorFuchsiaText?: string;
80
80
  colorRedBackground?: string;
81
81
  colorRedText?: string;
82
+ colorChart1?: string;
83
+ colorChart2?: string;
84
+ colorChart3?: string;
85
+ colorChart4?: string;
86
+ colorChart5?: string;
87
+ colorChart6?: string;
88
+ colorChart7?: string;
89
+ colorChart8?: string;
82
90
  };
83
91
  export declare const toRgba: (hex: string, alpha: number) => string;
84
92
  export declare const toRgb: (hex: string) => string;
@@ -68,6 +68,19 @@ const colorFuchsiaBackground = "#fae8ff";
68
68
  const colorFuchsiaText = "#a21caf";
69
69
  const colorRedBackground = "#fee2e2";
70
70
  const colorRedText = "#b91c1c";
71
+ // Chart colors
72
+ // Grounded in the Okabe-Ito colorblind-safe palette, ordered for maximum
73
+ // contrast between adjacent series and anchored to the brand's blue and purple.
74
+ // The light gold and pure black of the original palette are darkened and
75
+ // softened so they read on a light background.
76
+ const colorChart1 = "#0072b2"; // Blue, neighbors the brand primary.
77
+ const colorChart2 = "#e69f00"; // Orange.
78
+ const colorChart3 = "#009e73"; // Teal-green.
79
+ const colorChart4 = "#cc79a7"; // Mauve, echoes the brand accent.
80
+ const colorChart5 = "#56b4e9"; // Sky.
81
+ const colorChart6 = "#d55e00"; // Vermillion.
82
+ const colorChart7 = "#9a8200"; // Deep gold.
83
+ const colorChart8 = "#3f4551"; // Dark slate.
71
84
  export const LIGHT_THEME = {
72
85
  // Font
73
86
  fontFamily,
@@ -155,7 +168,16 @@ export const LIGHT_THEME = {
155
168
  colorFuchsiaBackground,
156
169
  colorFuchsiaText,
157
170
  colorRedBackground,
158
- colorRedText
171
+ colorRedText,
172
+ // Chart colors
173
+ colorChart1,
174
+ colorChart2,
175
+ colorChart3,
176
+ colorChart4,
177
+ colorChart5,
178
+ colorChart6,
179
+ colorChart7,
180
+ colorChart8
159
181
  };
160
182
  export const DARK_THEME = {
161
183
  // Special colors
@@ -180,7 +202,13 @@ export const DARK_THEME = {
180
202
  colorText: colorLightShade,
181
203
  colorLabel: colorLightShade,
182
204
  // Border color
183
- colorBorderLight: "#323338"
205
+ colorBorderLight: "#323338",
206
+ // Chart colors
207
+ // Lighten the dark anchors so series stay legible on a dark background; the
208
+ // mid-toned hues fall through to their light-theme values.
209
+ colorChart1: "#4aa3e0",
210
+ colorChart7: "#d4b400",
211
+ colorChart8: "#aab3c2" // Light slate.
184
212
  };
185
213
  export const toStyle = (theme) => {
186
214
  const vars = {
@@ -270,7 +298,16 @@ export const toStyle = (theme) => {
270
298
  "--vui-color-fuchsia-background": theme.colorFuchsiaBackground,
271
299
  "--vui-color-fuchsia-text": theme.colorFuchsiaText,
272
300
  "--vui-color-red-background": theme.colorRedBackground,
273
- "--vui-color-red-text": theme.colorRedText
301
+ "--vui-color-red-text": theme.colorRedText,
302
+ // Chart colors
303
+ "--vui-chart-1": theme.colorChart1,
304
+ "--vui-chart-2": theme.colorChart2,
305
+ "--vui-chart-3": theme.colorChart3,
306
+ "--vui-chart-4": theme.colorChart4,
307
+ "--vui-chart-5": theme.colorChart5,
308
+ "--vui-chart-6": theme.colorChart6,
309
+ "--vui-chart-7": theme.colorChart7,
310
+ "--vui-chart-8": theme.colorChart8
274
311
  };
275
312
  // Remove undefined values.
276
313
  return Object.fromEntries(Object.entries(vars).filter(([_, v]) => v !== undefined));
@@ -16,6 +16,14 @@ import { VuiButtonTertiary } from "./button/ButtonTertiary";
16
16
  import { VuiIconButton } from "./button/IconButton";
17
17
  import { VuiCallout } from "./callout/Callout";
18
18
  import { VuiCard, VuiSimpleCard } from "./card";
19
+ import { BarChartSeries, VuiBarChart } from "./chart/BarChart";
20
+ import { LineChartSeries, LineChartVariant, VuiLineChart } from "./chart/LineChart";
21
+ import { VuiPieChart } from "./chart/PieChart";
22
+ import { VuiSparkline } from "./chart/Sparkline";
23
+ import { VuiTreeMap } from "./chart/TreeMap";
24
+ import { ScatterSeries, VuiScatterChart } from "./chart/ScatterChart";
25
+ import { ComposedSeries, VuiComposedChart } from "./chart/ComposedChart";
26
+ import { CHART_PALETTE } from "./chart/palette";
19
27
  import { CALLOUT_COLOR, CALLOUT_SIZE, CalloutColor } from "./callout/types";
20
28
  import { ChatTurn, ChatStyle, ChatLanguage } from "./chat/types";
21
29
  import { VuiChat } from "./chat/Chat";
@@ -108,5 +116,5 @@ import { VuiInfoTooltip } from "./tooltip/InfoTooltip";
108
116
  import { VuiTopicButton } from "./topicButton/TopicButton";
109
117
  import { copyToClipboard } from "../utils/copyToClipboard";
110
118
  import { toRgb, toRgba } from "./context/Theme";
111
- export type { AnchorSide, AppContentPadding, ButtonColor, CalloutColor, ChatLanguage, ChatStyle, ChatTurn, CheckboxConfig, CodeEditorColorConfig, CodeEditorError, CodeLanguage, ComposerFileError, ComposerShortcutApi, ComposerShortcutHandler, ComposerSubmission, InfoListItemType, InfoListType, InfoTableColumnAlign, InfoTableRow, InfoTableRowType, KvTableAlign, KvTableItem, KvTableItems, KvTablePadding, LinkProps, MenuItem, OptionListItem, Pagination, PatchColor, RadioButtonConfig, SearchResult, SearchSuggestion, Sections, SectionItem, SpansRow, Stat, StepStatus, StepSize, Steps, StepsVertical, StepVerticalStatus, TabNavigatorRoute, TabSize, Tree, TreeItem };
112
- export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, DURATION_BAR_COLOR, ICON_COLOR, ICON_SIZE, ICON_TYPE, PATCH_COLOR, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiChip, VuiCode, VuiCodeEditor, VuiComposer, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFileDropTarget, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiMenuList, VuiMenuListButton, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPatch, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSideList, VuiSideListButton, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpans, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiStepsVertical, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };
119
+ export type { AnchorSide, AppContentPadding, BarChartSeries, ComposedSeries, LineChartSeries, LineChartVariant, ScatterSeries, ButtonColor, CalloutColor, ChatLanguage, ChatStyle, ChatTurn, CheckboxConfig, CodeEditorColorConfig, CodeEditorError, CodeLanguage, ComposerFileError, ComposerShortcutApi, ComposerShortcutHandler, ComposerSubmission, InfoListItemType, InfoListType, InfoTableColumnAlign, InfoTableRow, InfoTableRowType, KvTableAlign, KvTableItem, KvTableItems, KvTablePadding, LinkProps, MenuItem, OptionListItem, Pagination, PatchColor, RadioButtonConfig, SearchResult, SearchSuggestion, Sections, SectionItem, SpansRow, Stat, StepStatus, StepSize, Steps, StepsVertical, StepVerticalStatus, TabNavigatorRoute, TabSize, Tree, TreeItem };
120
+ export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CHART_PALETTE, CALLOUT_COLOR, CALLOUT_SIZE, DURATION_BAR_COLOR, ICON_COLOR, ICON_SIZE, ICON_TYPE, PATCH_COLOR, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiBarChart, VuiComposedChart, VuiLineChart, VuiPieChart, VuiScatterChart, VuiSparkline, VuiTreeMap, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiChip, VuiCode, VuiCodeEditor, VuiComposer, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFileDropTarget, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiMenuList, VuiMenuListButton, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPatch, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSideList, VuiSideListButton, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpans, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiStepsVertical, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };