diff --git a/packages/react-charts/.gitignore b/packages/react-charts/.gitignore new file mode 100644 index 00000000000..a37bdb9af90 --- /dev/null +++ b/packages/react-charts/.gitignore @@ -0,0 +1,2 @@ +/next +/components diff --git a/packages/react-charts/package.json b/packages/react-charts/package.json index 222b9240fe8..b94952204dd 100644 --- a/packages/react-charts/package.json +++ b/packages/react-charts/package.json @@ -5,6 +5,13 @@ "main": "dist/js/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", + "typesVersions": { + "*": { + "next": [ + "dist/esm/next/index.d.ts" + ] + } + }, "patternfly:src": "src/", "sideEffects": [ "*.css", @@ -53,14 +60,17 @@ "victory-zoom-container": "^37.0.2" }, "peerDependencies": { + "echarts": "^5.5.1", "react": "^17 || ^18", "react-dom": "^17 || ^18" }, "scripts": { - "clean": "rimraf dist", - "build:single:packages": "node ../../scripts/build-single-packages.mjs --config single-packages.config.json" + "clean": "rimraf dist components next", + "build:single:packages": "node ../../scripts/build-single-packages.mjs --config single-packages.config.json", + "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json" }, "devDependencies": { + "@types/echarts": "^4.9.22", "@types/lodash": "^4.17.7", "fs-extra": "^11.2.0" } diff --git a/packages/react-charts/single-packages.config.json b/packages/react-charts/single-packages.config.json index 4a9651bb17d..8b418fd2095 100644 --- a/packages/react-charts/single-packages.config.json +++ b/packages/react-charts/single-packages.config.json @@ -1,4 +1,4 @@ { "packageName": "@patternfly/react-charts", - "exclude": ["dist/esm/deprecated/index.js", "dist/esm/next/index.js"] + "exclude": ["dist/esm/deprecated/index.js"] } diff --git a/packages/react-charts/src/next/components/Sankey/Sankey.test.tsx b/packages/react-charts/src/next/components/Sankey/Sankey.test.tsx new file mode 100644 index 00000000000..ff3418f6d94 --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/Sankey.test.tsx @@ -0,0 +1,83 @@ +import * as React from 'react'; +// import * as echarts from 'echarts'; +import { render } from '@testing-library/react'; +import { Sankey } from './Sankey'; + +const data = [ + { + name: 'a' + }, + { + name: 'b' + }, + { + name: 'a1' + }, + { + name: 'a2' + }, + { + name: 'b1' + }, + { + name: 'c' + } +]; + +const links = [ + { + source: 'a', + target: 'a1', + value: 5 + }, + { + source: 'a', + target: 'a2', + value: 3 + }, + { + source: 'b', + target: 'b1', + value: 8 + }, + { + source: 'a', + target: 'b1', + value: 3 + }, + { + source: 'b1', + target: 'a1', + value: 1 + }, + { + source: 'b1', + target: 'c', + value: 2 + } +]; + +let spy: any; + +// beforeAll(() => { +// console.log(`*** TEST 1`); +// spy = jest.spyOn(echarts, 'getInstanceByDom').mockImplementation( +// () => +// ({ +// hideLoading: jest.fn(), +// setOption: jest.fn(), +// showLoading: jest.fn() +// }) as any +// ); +// }); +// +// afterAll(() => { +// console.log(`*** TEST 2`); +// spy.mockRestore(); +// }); + +// See https://stackoverflow.com/questions/54921743/testing-echarts-react-component-with-jest-echartelement-is-null +xtest('renders component data', () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); +}); diff --git a/packages/react-charts/src/next/components/Sankey/Sankey.tsx b/packages/react-charts/src/next/components/Sankey/Sankey.tsx new file mode 100644 index 00000000000..c7d1f33b7fc --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/Sankey.tsx @@ -0,0 +1,169 @@ +/* eslint-disable camelcase */ +import chart_voronoi_flyout_stroke_Fill from '@patternfly/react-tokens/dist/esm/chart_voronoi_flyout_stroke_Fill'; +import chart_voronoi_labels_Fill from '@patternfly/react-tokens/dist/esm/chart_voronoi_labels_Fill'; + +import * as React from 'react'; +import * as echarts from 'echarts'; +import { useRef } from 'react'; +import defaultsDeep from 'lodash/defaultsDeep'; + +// import { BarChart, SankeyChart } from 'echarts/charts'; +// import { CanvasRenderer } from 'echarts/renderers'; + +// import { +// TitleComponent, +// TooltipComponent, +// GridComponent, +// DatasetComponent, +// TransformComponent +// } from 'echarts/components'; + +// Register the required components +// echarts.use([ +// BarChart, +// SankeyChart, +// TitleComponent, +// TooltipComponent, +// GridComponent, +// DatasetComponent, +// TransformComponent, +// LabelLayout, +// UniversalTransition, +// CanvasRenderer +// ]); + +import { theme as chartTheme } from './theme'; + +/** + */ +export interface SankeyProps { + destinationLabel?: string; + height?: number; + id?: string; + legend?: { + symbolSize?: number; // Todo: move into tooltip? + }; + lineStyle?: any; + opts?: any; + series: any[]; + sourceLabel?: string; + theme?: any; + title?: any; + tooltip?: any; + width?: number; +} + +export const Sankey: React.FunctionComponent = ({ + destinationLabel = 'Destination', + height, + id, + legend = { + symbolSize: 10 + }, + lineStyle = { + color: 'source', + opacity: 0.6 + }, + opts, + series, + sourceLabel = 'Source', + theme = chartTheme, + title, + tooltip = { + valueFormatter: (value: number | string) => value + }, + width +}: SankeyProps) => { + const containerRef = useRef(); + const echart = useRef(); + + const getItemColor = (params: any) => { + const serie = series[params.seriesIndex]; + const sourceData = serie?.data.find((datum: any) => datum.name === params.data?.source); + const targetData = serie?.data.find((datum: any) => datum.name === params.data?.target); + const sourceColor = sourceData?.itemStyle?.color; + const targetColor = targetData?.itemStyle?.color; + return { sourceColor, targetColor }; + }; + + const getTooltip = () => { + const symbolSize = `${legend.symbolSize}px`; + const defaults = { + backgroundColor: chart_voronoi_flyout_stroke_Fill.value, + confine: true, + formatter: (params: any) => { + const result = ` +
+ ${params.name} ${params.value} + `; + if (params.data.source && params.data.target) { + const { sourceColor, targetColor } = getItemColor(params); + return ` +

${sourceLabel}

+
+ ${params.data.source} +

${destinationLabel}

+

+

+ ${params.data.target} + + ${tooltip.valueFormatter(params.value, params.dataIndex)} + +

+ `; + } + return result.replace(/\s\s+/g, ' '); + }, + textStyle: { + color: chart_voronoi_labels_Fill.value + }, + trigger: 'item', + triggerOn: 'mousemove' + }; + return defaultsDeep(tooltip, defaults); + }; + + React.useEffect(() => { + echarts.registerTheme('pf-v5-sankey', theme); + echart.current = echarts.init(containerRef.current, 'pf-v5-sankey', opts); // renderer: 'svg' + + const newSeries = series.map((serie: any) => { + const defaults = { + data: serie.data.map((datum: any, index: number) => ({ + itemStyle: { + color: theme?.color[index % theme?.color.length] + } + })), + emphasis: { + focus: 'adjacency' + }, + layout: 'none', + lineStyle, + type: 'sankey' + }; + return defaultsDeep(serie, defaults); + }); + + echart.current?.setOption({ + series: newSeries, + title, + tooltip: getTooltip() + }); + + return () => { + echart.current?.dispose(); + }; + }, [containerRef, lineStyle, opts, series, title, tooltip]); + + React.useEffect(() => { + echart.current?.resize(); + }, [height, width]); + + const getSize = () => ({ + ...(height && { height: `${height}px` }), + ...(width && { width: `${width}px` }) + }); + + return
; +}; +Sankey.displayName = 'Sankey'; diff --git a/packages/react-charts/src/next/components/Sankey/examples/Basic.tsx b/packages/react-charts/src/next/components/Sankey/examples/Basic.tsx new file mode 100644 index 00000000000..e72949e9f98 --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/examples/Basic.tsx @@ -0,0 +1,94 @@ +import React from 'react'; +import { Sankey } from '@patternfly/react-charts/next'; +import { getResizeObserver } from '@patternfly/react-core'; + +export const FormBasic: React.FunctionComponent = () => { + const data = [ + { + name: 'a' + }, + { + name: 'b' + }, + { + name: 'a1' + }, + { + name: 'a2' + }, + { + name: 'b1' + }, + { + name: 'c' + } + ]; + + const links = [ + { + source: 'a', + target: 'a1', + value: 5 + }, + { + source: 'a', + target: 'a2', + value: 3 + }, + { + source: 'b', + target: 'b1', + value: 8 + }, + { + source: 'a', + target: 'b1', + value: 3 + }, + { + source: 'b1', + target: 'a1', + value: 1 + }, + { + source: 'b1', + target: 'c', + value: 2 + } + ]; + + // let observer = () => {}; + const containerRef = React.useRef(); + const [width, setWidth] = React.useState(0); + + React.useEffect(() => { + const handleResize = () => { + if (containerRef.current && containerRef.current.clientWidth) { + setWidth(containerRef.current.clientWidth); + } + }; + let observer = () => {}; + observer = getResizeObserver(containerRef.current, handleResize); + + return () => { + observer(); + }; + }, [containerRef, width]); + + return ( +
+ `${value} GiB` + }} + width={width} + /> +
+ ); +}; diff --git a/packages/react-charts/src/next/components/Sankey/examples/Sankey.md b/packages/react-charts/src/next/components/Sankey/examples/Sankey.md new file mode 100644 index 00000000000..4dd21fcf130 --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/examples/Sankey.md @@ -0,0 +1,23 @@ +--- +id: Sankey +section: charts +propComponents: [ + 'Sankey', +] +hideDarkMode: true +beta: true +--- + +import { Sankey } from '@patternfly/react-charts/next'; + +## Introduction +Note: PatternFly React charts live in its own package at [@patternfly/react-charts](https://www.npmjs.com/package/@patternfly/react-charts)! + +PatternFly React charts are based on the [Apache ECharts](https://echarts.apache.org/) chart library, along with additional functionality, custom components, and theming for PatternFly. This provides a collection of React based components you can use to build PatternFly patterns with consistent markup, styling, and behavior. + +## Examples +### Basic + +```ts file="./Basic.tsx" + +``` diff --git a/packages/react-charts/src/next/components/Sankey/index.ts b/packages/react-charts/src/next/components/Sankey/index.ts new file mode 100644 index 00000000000..4bb44aaee6a --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/index.ts @@ -0,0 +1 @@ +export * from './Sankey'; diff --git a/packages/react-charts/src/next/components/Sankey/theme.ts b/packages/react-charts/src/next/components/Sankey/theme.ts new file mode 100644 index 00000000000..24dc3c0a259 --- /dev/null +++ b/packages/react-charts/src/next/components/Sankey/theme.ts @@ -0,0 +1,405 @@ +/* eslint-disable camelcase */ +import chart_theme_multi_color_ordered_ColorScale_100 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_100'; +import chart_theme_multi_color_ordered_ColorScale_200 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_200'; +import chart_theme_multi_color_ordered_ColorScale_300 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_300'; +import chart_theme_multi_color_ordered_ColorScale_400 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_400'; +import chart_theme_multi_color_ordered_ColorScale_500 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_500'; +import chart_theme_multi_color_ordered_ColorScale_600 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_600'; +import chart_theme_multi_color_ordered_ColorScale_700 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_700'; +import chart_theme_multi_color_ordered_ColorScale_800 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_800'; +import chart_theme_multi_color_ordered_ColorScale_900 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_900'; +import chart_theme_multi_color_ordered_ColorScale_1000 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1000'; +import chart_theme_multi_color_ordered_ColorScale_1100 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1100'; +import chart_theme_multi_color_ordered_ColorScale_1200 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1200'; +import chart_theme_multi_color_ordered_ColorScale_1300 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1300'; +import chart_theme_multi_color_ordered_ColorScale_1400 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1400'; +import chart_theme_multi_color_ordered_ColorScale_1500 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1500'; +import chart_theme_multi_color_ordered_ColorScale_1600 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1600'; +import chart_theme_multi_color_ordered_ColorScale_1700 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1700'; +import chart_theme_multi_color_ordered_ColorScale_1800 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1800'; +import chart_theme_multi_color_ordered_ColorScale_1900 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_1900'; +import chart_theme_multi_color_ordered_ColorScale_2000 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2000'; +import chart_theme_multi_color_ordered_ColorScale_2100 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2100'; +import chart_theme_multi_color_ordered_ColorScale_2200 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2200'; +import chart_theme_multi_color_ordered_ColorScale_2300 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2300'; +import chart_theme_multi_color_ordered_ColorScale_2400 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2400'; +import chart_theme_multi_color_ordered_ColorScale_2500 from '@patternfly/react-tokens/dist/esm/chart_theme_multi_color_ordered_ColorScale_2500'; + +// The color order below improves the color contrast in unordered charts; area & line +// See https://github.com/patternfly/patternfly-next/issues/1551 +const COLOR_SCALE = [ + chart_theme_multi_color_ordered_ColorScale_100.value, + chart_theme_multi_color_ordered_ColorScale_200.value, + chart_theme_multi_color_ordered_ColorScale_300.value, + chart_theme_multi_color_ordered_ColorScale_400.value, + chart_theme_multi_color_ordered_ColorScale_500.value, + chart_theme_multi_color_ordered_ColorScale_600.value, + chart_theme_multi_color_ordered_ColorScale_700.value, + chart_theme_multi_color_ordered_ColorScale_800.value, + chart_theme_multi_color_ordered_ColorScale_900.value, + chart_theme_multi_color_ordered_ColorScale_1000.value, + chart_theme_multi_color_ordered_ColorScale_1100.value, + chart_theme_multi_color_ordered_ColorScale_1200.value, + chart_theme_multi_color_ordered_ColorScale_1300.value, + chart_theme_multi_color_ordered_ColorScale_1400.value, + chart_theme_multi_color_ordered_ColorScale_1500.value, + chart_theme_multi_color_ordered_ColorScale_1600.value, + chart_theme_multi_color_ordered_ColorScale_1700.value, + chart_theme_multi_color_ordered_ColorScale_1800.value, + chart_theme_multi_color_ordered_ColorScale_1900.value, + chart_theme_multi_color_ordered_ColorScale_2000.value, + chart_theme_multi_color_ordered_ColorScale_2100.value, + chart_theme_multi_color_ordered_ColorScale_2200.value, + chart_theme_multi_color_ordered_ColorScale_2300.value, + chart_theme_multi_color_ordered_ColorScale_2400.value, + chart_theme_multi_color_ordered_ColorScale_2500.value +]; + +export const theme = { + color: COLOR_SCALE, + backgroundColor: 'rgba(0,0,0,0)', + textStyle: {}, + title: { + textStyle: { + color: '#464646' + }, + subtextStyle: { + color: '#6e7079' + } + }, + line: { + itemStyle: { + borderWidth: 1 + }, + lineStyle: { + width: 2 + }, + symbolSize: 4, + symbol: 'emptyCircle', + smooth: false + }, + radar: { + itemStyle: { + borderWidth: 1 + }, + lineStyle: { + width: 2 + }, + symbolSize: 4, + symbol: 'emptyCircle', + smooth: false + }, + bar: { + itemStyle: { + barBorderWidth: 0, + barBorderColor: '#ccc' + } + }, + pie: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + scatter: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + boxplot: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + parallel: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + sankey: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + funnel: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + gauge: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + } + }, + candlestick: { + itemStyle: { + color: '#eb5454', + color0: '#47b262', + borderColor: '#eb5454', + borderColor0: '#47b262', + borderWidth: 1 + } + }, + graph: { + itemStyle: { + borderWidth: 0, + borderColor: '#ccc' + }, + lineStyle: { + width: 1, + color: '#aaaaaa' + }, + symbolSize: 4, + symbol: 'emptyCircle', + smooth: false, + color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'], + label: { + color: '#eeeeee' + } + }, + map: { + itemStyle: { + areaColor: '#eee', + borderColor: '#444', + borderWidth: 0.5 + }, + label: { + color: '#000' + }, + emphasis: { + itemStyle: { + areaColor: 'rgba(255,215,0,0.8)', + borderColor: '#444', + borderWidth: 1 + }, + label: { + color: 'rgb(100,0,0)' + } + } + }, + geo: { + itemStyle: { + areaColor: '#eee', + borderColor: '#444', + borderWidth: 0.5 + }, + label: { + color: '#000' + }, + emphasis: { + itemStyle: { + areaColor: 'rgba(255,215,0,0.8)', + borderColor: '#444', + borderWidth: 1 + }, + label: { + color: 'rgb(100,0,0)' + } + } + }, + categoryAxis: { + axisLine: { + show: true, + lineStyle: { + color: '#6E7079' + } + }, + axisTick: { + show: true, + lineStyle: { + color: '#6E7079' + } + }, + axisLabel: { + show: true, + color: '#6E7079' + }, + splitLine: { + show: false, + lineStyle: { + color: ['#E0E6F1'] + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)'] + } + } + }, + valueAxis: { + axisLine: { + show: false, + lineStyle: { + color: '#6E7079' + } + }, + axisTick: { + show: false, + lineStyle: { + color: '#6E7079' + } + }, + axisLabel: { + show: true, + color: '#6E7079' + }, + splitLine: { + show: true, + lineStyle: { + color: ['#E0E6F1'] + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)'] + } + } + }, + logAxis: { + axisLine: { + show: false, + lineStyle: { + color: '#6E7079' + } + }, + axisTick: { + show: false, + lineStyle: { + color: '#6E7079' + } + }, + axisLabel: { + show: true, + color: '#6E7079' + }, + splitLine: { + show: true, + lineStyle: { + color: ['#E0E6F1'] + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)'] + } + } + }, + timeAxis: { + axisLine: { + show: true, + lineStyle: { + color: '#6E7079' + } + }, + axisTick: { + show: true, + lineStyle: { + color: '#6E7079' + } + }, + axisLabel: { + show: true, + color: '#6E7079' + }, + splitLine: { + show: false, + lineStyle: { + color: ['#E0E6F1'] + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)'] + } + } + }, + toolbox: { + iconStyle: { + borderColor: '#999999' + }, + emphasis: { + iconStyle: { + borderColor: '#666666' + } + } + }, + legend: { + textStyle: { + color: '#333333' + } + }, + tooltip: { + axisPointer: { + lineStyle: { + color: '#cccccc', + width: 1 + }, + crossStyle: { + color: '#cccccc', + width: 1 + } + } + }, + timeline: { + lineStyle: { + color: '#dae1f5', + width: 2 + }, + itemStyle: { + color: '#a4b1d7', + borderWidth: 1 + }, + controlStyle: { + color: '#a4b1d7', + borderColor: '#a4b1d7', + borderWidth: 1 + }, + checkpointStyle: { + color: '#316bf3', + borderColor: '#ffffff' + }, + label: { + color: '#a4b1d7' + }, + emphasis: { + itemStyle: { + color: '#ffffff' + }, + controlStyle: { + color: '#a4b1d7', + borderColor: '#a4b1d7', + borderWidth: 1 + }, + label: { + color: '#a4b1d7' + } + } + }, + visualMap: { + color: ['#bf444c', '#d88273', '#f6efa6'] + }, + dataZoom: { + handleSize: 'undefined%', + textStyle: {} + }, + markPoint: { + label: { + color: '#eeeeee' + }, + emphasis: { + label: { + color: '#eeeeee' + } + } + } +}; diff --git a/packages/react-charts/src/next/components/index.ts b/packages/react-charts/src/next/components/index.ts new file mode 100644 index 00000000000..4bb44aaee6a --- /dev/null +++ b/packages/react-charts/src/next/components/index.ts @@ -0,0 +1 @@ +export * from './Sankey'; diff --git a/packages/react-charts/src/next/index.ts b/packages/react-charts/src/next/index.ts new file mode 100644 index 00000000000..07635cbbc8e --- /dev/null +++ b/packages/react-charts/src/next/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/packages/react-charts/subpaths.config.json b/packages/react-charts/subpaths.config.json new file mode 100644 index 00000000000..0e15baf4e1f --- /dev/null +++ b/packages/react-charts/subpaths.config.json @@ -0,0 +1,4 @@ +{ + "packageName": "@patternfly/react-charts", + "paths": ["next", "components"] +} diff --git a/packages/react-charts/tsconfig.json b/packages/react-charts/tsconfig.json index 30bec2faa4a..cfd3101ef1b 100644 --- a/packages/react-charts/tsconfig.json +++ b/packages/react-charts/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { + "jsx": "react", "rootDir": "./src", "outDir": "./dist/esm", - "tsBuildInfoFile": "dist/esm.tsbuildinfo" + "tsBuildInfoFile": "dist/esm.tsbuildinfo", + "baseUrl": ".", + "paths": { + "./next": ["./src/next"] + } }, "include": [ "./src/*", diff --git a/packages/react-docs/package.json b/packages/react-docs/package.json index 0dcb79a782e..5c783f471d6 100644 --- a/packages/react-docs/package.json +++ b/packages/react-docs/package.json @@ -32,10 +32,11 @@ "@patternfly/react-styles": "workspace:^", "@patternfly/react-table": "workspace:^", "@patternfly/react-templates": "workspace:^", - "@patternfly/react-tokens": "workspace:^" + "@patternfly/react-tokens": "workspace:^", + "echarts": "^5.5.1" }, "devDependencies": { - "@patternfly/documentation-framework": "^6.0.0-alpha.90", + "@patternfly/documentation-framework": "^6.0.0-alpha.91", "@patternfly/patternfly-a11y": "4.3.1" }, "keywords": [ diff --git a/packages/react-docs/patternfly-docs/patternfly-docs.source.js b/packages/react-docs/patternfly-docs/patternfly-docs.source.js index 44dd34bf0b9..0ddfdedfb87 100644 --- a/packages/react-docs/patternfly-docs/patternfly-docs.source.js +++ b/packages/react-docs/patternfly-docs/patternfly-docs.source.js @@ -39,8 +39,9 @@ module.exports = (baseSourceMD, sourceProps) => { sourceMD(path.join(reactTablePath, '/deprecated/components/**/examples/*.md'), 'react-deprecated'); sourceMD(path.join(reactTablePath, '/**/demos/*.md'), 'react-demos'); - // Charts MD (no demos yet) - sourceMD(path.join(reactChartsPath, '/**/examples/*.md'), 'react'); + // Charts MD + sourceMD(path.join(reactChartsPath, '/components/**/examples/*.md'), 'react'); + sourceMD(path.join(reactChartsPath, '/next/components/**/examples/*.md'), 'react-next'); // Code Editor MD sourceMD(path.join(reactCodeEditorPath, '/**/examples/*.md'), 'react'); diff --git a/yarn.lock b/yarn.lock index 35691e7dd5b..fd3bdfe2f2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3021,7 +3021,7 @@ __metadata: languageName: node linkType: hard -"@patternfly/ast-helpers@npm:^1.4.0-alpha.79": +"@patternfly/ast-helpers@npm:^1.4.0-alpha.80": version: 1.23.0 resolution: "@patternfly/ast-helpers@npm:1.23.0" dependencies: @@ -3034,15 +3034,15 @@ __metadata: languageName: node linkType: hard -"@patternfly/documentation-framework@npm:^6.0.0-alpha.90": - version: 6.0.0-alpha.90 - resolution: "@patternfly/documentation-framework@npm:6.0.0-alpha.90" +"@patternfly/documentation-framework@npm:^6.0.0-alpha.91": + version: 6.0.0-alpha.91 + resolution: "@patternfly/documentation-framework@npm:6.0.0-alpha.91" dependencies: "@babel/core": "npm:^7.24.3" "@babel/preset-env": "npm:^7.24.3" "@babel/preset-react": "npm:^7.24.1" "@mdx-js/util": "npm:1.6.16" - "@patternfly/ast-helpers": "npm:^1.4.0-alpha.79" + "@patternfly/ast-helpers": "npm:^1.4.0-alpha.80" "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9" autoprefixer: "npm:9.8.6" babel-loader: "npm:^9.1.3" @@ -3109,7 +3109,7 @@ __metadata: react-dom: ^17.0.0 || ^18.0.0 bin: pf-docs-framework: scripts/cli/cli.js - checksum: 10c0/e8559be62ec75946a04b6bb28ca34eba6024a48141cb991c64373c03fffff88a2af20410d591663cbdd3bc4f4b99324b7da3f6bee9ac9baaab157b67f5eba3a6 + checksum: 10c0/0ce46f3fcf2d847a645734815c3c917aecc3b9531878ee1f962db1064ce36ebd829985bd2e975dfa11a2b397b09e7cb4e099b262972003878e24b7d19e344c2a languageName: node linkType: hard @@ -3144,6 +3144,7 @@ __metadata: dependencies: "@patternfly/react-styles": "workspace:^" "@patternfly/react-tokens": "workspace:^" + "@types/echarts": "npm:^4.9.22" "@types/lodash": "npm:^4.17.7" fs-extra: "npm:^11.2.0" hoist-non-react-statics: "npm:^3.3.2" @@ -3167,6 +3168,7 @@ __metadata: victory-voronoi-container: "npm:^37.0.2" victory-zoom-container: "npm:^37.0.2" peerDependencies: + echarts: ^5.5.1 react: ^17 || ^18 react-dom: ^17 || ^18 languageName: unknown @@ -3213,7 +3215,7 @@ __metadata: version: 0.0.0-use.local resolution: "@patternfly/react-docs@workspace:packages/react-docs" dependencies: - "@patternfly/documentation-framework": "npm:^6.0.0-alpha.90" + "@patternfly/documentation-framework": "npm:^6.0.0-alpha.91" "@patternfly/patternfly": "npm:6.0.0-prerelease.3" "@patternfly/patternfly-a11y": "npm:4.3.1" "@patternfly/react-charts": "workspace:^" @@ -3225,6 +3227,7 @@ __metadata: "@patternfly/react-table": "workspace:^" "@patternfly/react-templates": "workspace:^" "@patternfly/react-tokens": "workspace:^" + echarts: "npm:^5.5.1" languageName: unknown linkType: soft @@ -4238,6 +4241,15 @@ __metadata: languageName: node linkType: hard +"@types/echarts@npm:^4.9.22": + version: 4.9.22 + resolution: "@types/echarts@npm:4.9.22" + dependencies: + "@types/zrender": "npm:*" + checksum: 10c0/00e5e6f75b4a1ee46df0286fc1fe5b42773970280576317723d7174678598d0aeb2bac36870276ac1e65bf053241443334ef37ae97a84c1b782abdb980991f39 + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.3": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" @@ -4736,6 +4748,13 @@ __metadata: languageName: node linkType: hard +"@types/zrender@npm:*": + version: 4.0.6 + resolution: "@types/zrender@npm:4.0.6" + checksum: 10c0/baaf25731115fe18cb281bf38e6d414964307532381d8479edf7a4b25baecec737fed620802380fa126139e506d56d62d70fe8142c5c386e340fa91aa988dddd + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:7.18.0": version: 7.18.0 resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" @@ -8699,6 +8718,16 @@ __metadata: languageName: node linkType: hard +"echarts@npm:^5.5.1": + version: 5.5.1 + resolution: "echarts@npm:5.5.1" + dependencies: + tslib: "npm:2.3.0" + zrender: "npm:5.6.0" + checksum: 10c0/2f7e3037f17fda99d977092767943f4d9b0c8f886f86701ec88591707713b5e5fd683e56086b6ba5245b322f088184bdb06eac488234c20a1869b08cb6b4e523 + languageName: node + linkType: hard + "editions@npm:^2.2.0": version: 2.3.1 resolution: "editions@npm:2.3.1" @@ -19954,6 +19983,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.3.0": + version: 2.3.0 + resolution: "tslib@npm:2.3.0" + checksum: 10c0/a845aed84e7e7dbb4c774582da60d7030ea39d67307250442d35c4c5dd77e4b44007098c37dd079e100029c76055f2a362734b8442ba828f8cc934f15ed9be61 + languageName: node + linkType: hard + "tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -22019,3 +22055,12 @@ __metadata: checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 languageName: node linkType: hard + +"zrender@npm:5.6.0": + version: 5.6.0 + resolution: "zrender@npm:5.6.0" + dependencies: + tslib: "npm:2.3.0" + checksum: 10c0/f7c5a1739dfec60b9bead0d0657c47868391b1009cc82a603f9dbf247fa625df28dcdb3e7b2e18404657e2c987f95e0e1bb5613519c2d823854f3dda44e2ee96 + languageName: node + linkType: hard