@publishfx/publish-chart 1.3.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 (66) hide show
  1. package/README.md +143 -0
  2. package/dist/adapters/DataAdapter.d.ts +33 -0
  3. package/dist/adapters/DataAdapter.js +75 -0
  4. package/dist/adapters/TypeAdapter.d.ts +40 -0
  5. package/dist/adapters/TypeAdapter.js +26 -0
  6. package/dist/components/base/BarChart.d.ts +7 -0
  7. package/dist/components/base/BarChart.js +362 -0
  8. package/dist/components/base/BarChart.lazy.d.ts +5 -0
  9. package/dist/components/base/BarChart.lazy.js +2 -0
  10. package/dist/components/base/LineChart.d.ts +7 -0
  11. package/dist/components/base/LineChart.js +321 -0
  12. package/dist/components/base/LineChart.lazy.d.ts +5 -0
  13. package/dist/components/base/LineChart.lazy.js +2 -0
  14. package/dist/components/composite/BarLineAdapter.d.ts +22 -0
  15. package/dist/components/composite/BarLineAdapter.js +61 -0
  16. package/dist/components/composite/BarLineAdapter.lazy.d.ts +5 -0
  17. package/dist/components/composite/BarLineAdapter.lazy.js +2 -0
  18. package/dist/components/composite/BarLineChart.d.ts +7 -0
  19. package/dist/components/composite/BarLineChart.js +255 -0
  20. package/dist/components/composite/BarLineChart.lazy.d.ts +5 -0
  21. package/dist/components/composite/BarLineChart.lazy.js +2 -0
  22. package/dist/components/composite/BarLineCompareWeekend.d.ts +10 -0
  23. package/dist/components/composite/BarLineCompareWeekend.js +502 -0
  24. package/dist/components/composite/GroupBarLine.d.ts +11 -0
  25. package/dist/components/composite/GroupBarLine.js +546 -0
  26. package/dist/components/composite/GroupBarLine.lazy.d.ts +5 -0
  27. package/dist/components/composite/GroupBarLine.lazy.js +2 -0
  28. package/dist/components/composite/GroupCompare.d.ts +10 -0
  29. package/dist/components/composite/GroupCompare.js +620 -0
  30. package/dist/components/shared/AuxiliaryLine.d.ts +8 -0
  31. package/dist/components/shared/AuxiliaryLine.js +64 -0
  32. package/dist/components/shared/NodeDetail.d.ts +9 -0
  33. package/dist/components/shared/NodeDetail.js +110 -0
  34. package/dist/components/shared/NodeGeom.d.ts +23 -0
  35. package/dist/components/shared/NodeGeom.js +35 -0
  36. package/dist/components/shared/NodePopover.d.ts +22 -0
  37. package/dist/components/shared/NodePopover.js +41 -0
  38. package/dist/components/shared/NodePopoverContent.d.ts +15 -0
  39. package/dist/components/shared/NodePopoverContent.js +85 -0
  40. package/dist/components/shared/XAxisBackground.d.ts +31 -0
  41. package/dist/components/shared/XAxisBackground.js +93 -0
  42. package/dist/core/ChartConfig.d.ts +48 -0
  43. package/dist/core/ChartConfig.js +152 -0
  44. package/dist/core/ChartContext.d.ts +49 -0
  45. package/dist/core/ChartContext.js +31 -0
  46. package/dist/core/ChartTypes.d.ts +119 -0
  47. package/dist/core/ChartTypes.js +0 -0
  48. package/dist/index.d.ts +29 -0
  49. package/dist/index.js +21 -0
  50. package/dist/services/DataTransformService.d.ts +22 -0
  51. package/dist/services/DataTransformService.js +29 -0
  52. package/dist/services/FormatterService.d.ts +24 -0
  53. package/dist/services/FormatterService.js +22 -0
  54. package/dist/utils/__tests__/formatters.test.d.ts +1 -0
  55. package/dist/utils/__tests__/formatters.test.js +333 -0
  56. package/dist/utils/chartHelpers.d.ts +52 -0
  57. package/dist/utils/chartHelpers.js +112 -0
  58. package/dist/utils/dataTransform.d.ts +12 -0
  59. package/dist/utils/dataTransform.js +64 -0
  60. package/dist/utils/formatters.d.ts +37 -0
  61. package/dist/utils/formatters.js +127 -0
  62. package/dist/utils/indicatorHelpers.d.ts +16 -0
  63. package/dist/utils/indicatorHelpers.js +15 -0
  64. package/dist/utils/lazyHelpers.d.ts +29 -0
  65. package/dist/utils/lazyHelpers.js +15 -0
  66. package/package.json +68 -0
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Chart Context - 依赖注入架构(支持可选 Context)
3
+ */
4
+ import React, { ReactNode } from 'react';
5
+ import type { IndicatorInfo, ChartTimeRange, BusinessComponents } from './ChartTypes';
6
+ import { type ChartConfig } from './ChartConfig';
7
+ import { type FormatterService } from '../services/FormatterService';
8
+ import { type DataTransformService } from '../services/DataTransformService';
9
+ /**
10
+ * Chart Context 值类型
11
+ */
12
+ export interface ChartContextValue {
13
+ /** 格式化服务 */
14
+ formatter: FormatterService;
15
+ /** 数据转换服务 */
16
+ dataTransform: DataTransformService;
17
+ /** 配置 */
18
+ config: ChartConfig & {
19
+ /** 指标映射表 */
20
+ indicatorMap?: Record<string, IndicatorInfo>;
21
+ /** 时间范围 */
22
+ timeRange?: ChartTimeRange;
23
+ /** 节点映射表(可选) */
24
+ nodeMap?: Map<number, {
25
+ des: string;
26
+ color: string;
27
+ bgc: string;
28
+ }>;
29
+ };
30
+ /** 业务组件(可选) */
31
+ businessComponents?: BusinessComponents;
32
+ }
33
+ /**
34
+ * Chart Provider
35
+ */
36
+ export interface ChartProviderProps {
37
+ /** 部分 Context 值,未提供的字段将使用默认值 */
38
+ value?: Partial<ChartContextValue>;
39
+ children: ReactNode;
40
+ }
41
+ export declare const ChartProvider: React.FC<ChartProviderProps>;
42
+ /**
43
+ * 使用 Chart Context Hook(支持可选 Context)
44
+ */
45
+ export declare const useChartContext: () => ChartContextValue;
46
+ /**
47
+ * 获取坐标轴格式化函数(兼容旧 API)
48
+ */
49
+ export declare const getAxisFormatFromContext: (val: string | number, indicatorMap: Record<string, IndicatorInfo>, y: string | number) => string;
@@ -0,0 +1,31 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ import { defaultChartConfig } from "./ChartConfig.js";
4
+ import { createFormatterService } from "../services/FormatterService.js";
5
+ import { createDataTransformService } from "../services/DataTransformService.js";
6
+ import { getAxisFormat } from "../utils/chartHelpers.js";
7
+ const defaultContextValue = {
8
+ formatter: createFormatterService(),
9
+ dataTransform: createDataTransformService(),
10
+ config: defaultChartConfig,
11
+ businessComponents: void 0
12
+ };
13
+ const ChartContext = /*#__PURE__*/ createContext(null);
14
+ const ChartProvider = ({ value, children })=>{
15
+ const mergedValue = value ? {
16
+ formatter: value.formatter || defaultContextValue.formatter,
17
+ dataTransform: value.dataTransform || defaultContextValue.dataTransform,
18
+ config: value.config || defaultContextValue.config,
19
+ businessComponents: value.businessComponents ?? defaultContextValue.businessComponents
20
+ } : defaultContextValue;
21
+ return /*#__PURE__*/ jsx(ChartContext.Provider, {
22
+ value: mergedValue,
23
+ children: children
24
+ });
25
+ };
26
+ const useChartContext = ()=>{
27
+ const context = useContext(ChartContext);
28
+ return context || defaultContextValue;
29
+ };
30
+ const getAxisFormatFromContext = (val, indicatorMap, y)=>getAxisFormat(val, indicatorMap, y);
31
+ export { ChartProvider, getAxisFormatFromContext, useChartContext };
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Chart 组件库独立类型定义
3
+ * 不依赖业务类型,通过适配器转换
4
+ */
5
+ /**
6
+ * 指标信息(简化版本,不依赖业务类型)
7
+ */
8
+ export interface IndicatorInfo {
9
+ indicatorID?: number;
10
+ indicatorName?: string;
11
+ indicatorFrom?: string;
12
+ indicatorFormat?: {
13
+ indicatorUnit?: number;
14
+ indicatorDecimal?: number;
15
+ };
16
+ }
17
+ /**
18
+ * 时间范围(简化版本)
19
+ */
20
+ export interface ChartTimeRange {
21
+ startTime?: string;
22
+ endTime?: string;
23
+ compareStartTime?: string;
24
+ compareEndTime?: string;
25
+ timeType?: number;
26
+ compareType?: number;
27
+ }
28
+ /**
29
+ * 节点设置
30
+ */
31
+ export interface NodeSetting {
32
+ showType: number;
33
+ type: Array<number>;
34
+ }
35
+ /**
36
+ * 图表配置
37
+ */
38
+ export interface ChartComponentConfig {
39
+ isDataTag?: boolean;
40
+ isLegend?: boolean;
41
+ isCombineDataTag?: boolean;
42
+ isDescend?: boolean;
43
+ isClickable?: boolean;
44
+ isHorizontal?: boolean;
45
+ isHighlight?: boolean;
46
+ }
47
+ /**
48
+ * 辅助线数据
49
+ */
50
+ export interface AuxiliaryLineData {
51
+ name: string;
52
+ value: number;
53
+ axis?: 'left' | 'right';
54
+ }
55
+ /**
56
+ * 基础图表 Props
57
+ */
58
+ export interface BaseChartProps {
59
+ /** 图表数据 */
60
+ data: unknown[];
61
+ /** 图表高度 */
62
+ height?: number;
63
+ /** X 轴字段名 */
64
+ x?: string;
65
+ /** Y 轴字段名 */
66
+ y?: string;
67
+ /** Z 轴字段名(用于组合图) */
68
+ z?: string;
69
+ /** 指标映射表 */
70
+ indicatorMap?: Record<string, IndicatorInfo>;
71
+ /** 当前分组 ID */
72
+ currentGroupId?: number;
73
+ /** 图表点击回调 */
74
+ onChartClick?: (item: any) => void;
75
+ /** 指标数组 */
76
+ indicators?: string[];
77
+ /** 时间范围 */
78
+ timeRange?: ChartTimeRange;
79
+ /** 图表类型 */
80
+ graphType?: number | string;
81
+ /** 最小值 */
82
+ min?: number;
83
+ /** 最大值 */
84
+ max?: number;
85
+ /** 图例字段名 */
86
+ legend?: string;
87
+ /** 节点设置 */
88
+ nodeSetting?: NodeSetting;
89
+ /** 图表配置 */
90
+ config?: ChartComponentConfig;
91
+ /** 总计数据 */
92
+ totalData?: any;
93
+ /** 辅助线数据 */
94
+ auxiliaryLineData?: AuxiliaryLineData[];
95
+ /** 高亮日期数组 */
96
+ highlightDate?: string[];
97
+ }
98
+ /**
99
+ * 业务组件 Props(可选,通过 Context 注入)
100
+ */
101
+ export interface BusinessComponents {
102
+ NodeDetail?: React.ComponentType<{
103
+ chartWidth: number;
104
+ chartOffset: number;
105
+ dvRows: any[];
106
+ ratio?: number;
107
+ }>;
108
+ NodeGeom?: React.ComponentType<{
109
+ pointData: {
110
+ info: Array<any>;
111
+ infosCompare: Array<any>;
112
+ };
113
+ pointP: {
114
+ x: number;
115
+ y: number;
116
+ };
117
+ chart?: any;
118
+ }>;
119
+ }
File without changes
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Chart 模块导出
3
+ */
4
+ export { ChartProvider, useChartContext, getAxisFormatFromContext } from './core/ChartContext';
5
+ export type { ChartContextValue, ChartProviderProps } from './core/ChartContext';
6
+ export { defaultChartConfig, mergeChartConfig, getThemeColors } from './core/ChartConfig';
7
+ export type { ChartConfig } from './core/ChartConfig';
8
+ export type { BaseChartProps, IndicatorInfo, ChartTimeRange, NodeSetting, ChartComponentConfig, AuxiliaryLineData, BusinessComponents, } from './core/ChartTypes';
9
+ export { default as BarChart } from './components/base/BarChart';
10
+ export { default as LineChart } from './components/base/LineChart';
11
+ export { default as BarLineChart } from './components/composite/BarLineChart';
12
+ export { default as GroupBarLine } from './components/composite/GroupBarLine';
13
+ export { default as BarLineAdapter } from './components/composite/BarLineAdapter';
14
+ export { default as GroupCompare } from './components/composite/GroupCompare';
15
+ export { default as BarLineCompareWeekend } from './components/composite/BarLineCompareWeekend';
16
+ export { default as AuxiliaryLine } from './components/shared/AuxiliaryLine';
17
+ export { default as XAxisBackground } from './components/shared/XAxisBackground';
18
+ export { createLazyComponent, createLazyComponents } from './utils/lazyHelpers';
19
+ export { TypeAdapter } from './adapters/TypeAdapter';
20
+ export { DataAdapter } from './adapters/DataAdapter';
21
+ export type { TransformConfig } from './adapters/DataAdapter';
22
+ export { DefaultFormatterService, createFormatterService, } from './services/FormatterService';
23
+ export type { FormatterService } from './services/FormatterService';
24
+ export { DefaultDataTransformService, createDataTransformService, } from './services/DataTransformService';
25
+ export type { DataTransformService } from './services/DataTransformService';
26
+ export { formatNumberV2, formatPercentage, formatBigNumber, formatIndicatorV2, BigNumberUtil, } from './utils/formatters';
27
+ export { calTextWidth, calculateBarWidth, getAxisHorPaddingByText, getAxisFormat, truncateText, markerStyle, createStripePatternCanvas, } from './utils/chartHelpers';
28
+ export { transformIndicatorList, getIntervalRatio, groupArray, } from './utils/dataTransform';
29
+ export { getIndicatorName, getIndicator, getIndicatorCompareName, } from './utils/indicatorHelpers';
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import { ChartProvider, getAxisFormatFromContext, useChartContext } from "./core/ChartContext.js";
2
+ import { defaultChartConfig, getThemeColors, mergeChartConfig } from "./core/ChartConfig.js";
3
+ import BarChart from "./components/base/BarChart.js";
4
+ import LineChart from "./components/base/LineChart.js";
5
+ import BarLineChart from "./components/composite/BarLineChart.js";
6
+ import GroupBarLine from "./components/composite/GroupBarLine.js";
7
+ import BarLineAdapter from "./components/composite/BarLineAdapter.js";
8
+ import GroupCompare from "./components/composite/GroupCompare.js";
9
+ import BarLineCompareWeekend from "./components/composite/BarLineCompareWeekend.js";
10
+ import AuxiliaryLine from "./components/shared/AuxiliaryLine.js";
11
+ import XAxisBackground from "./components/shared/XAxisBackground.js";
12
+ import { createLazyComponent, createLazyComponents } from "./utils/lazyHelpers.js";
13
+ import { TypeAdapter } from "./adapters/TypeAdapter.js";
14
+ import { DataAdapter } from "./adapters/DataAdapter.js";
15
+ import { DefaultFormatterService, createFormatterService } from "./services/FormatterService.js";
16
+ import { DefaultDataTransformService, createDataTransformService } from "./services/DataTransformService.js";
17
+ import { BigNumberUtil, formatBigNumber, formatIndicatorV2, formatNumberV2, formatPercentage } from "./utils/formatters.js";
18
+ import { calTextWidth, calculateBarWidth, createStripePatternCanvas, getAxisFormat, getAxisHorPaddingByText, markerStyle, truncateText } from "./utils/chartHelpers.js";
19
+ import { getIntervalRatio, groupArray, transformIndicatorList } from "./utils/dataTransform.js";
20
+ import { getIndicator, getIndicatorCompareName, getIndicatorName } from "./utils/indicatorHelpers.js";
21
+ export { AuxiliaryLine, BarChart, BarLineAdapter, BarLineChart, BarLineCompareWeekend, BigNumberUtil, ChartProvider, DataAdapter, DefaultDataTransformService, DefaultFormatterService, GroupBarLine, GroupCompare, LineChart, TypeAdapter, XAxisBackground, calTextWidth, calculateBarWidth, createDataTransformService, createFormatterService, createLazyComponent, createLazyComponents, createStripePatternCanvas, defaultChartConfig, formatBigNumber, formatIndicatorV2, formatNumberV2, formatPercentage, getAxisFormat, getAxisFormatFromContext, getAxisHorPaddingByText, getIndicator, getIndicatorCompareName, getIndicatorName, getIntervalRatio, getThemeColors, groupArray, markerStyle, mergeChartConfig, transformIndicatorList, truncateText, useChartContext };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 数据转换服务接口和实现
3
+ */
4
+ import { TransformConfig } from '../adapters/DataAdapter';
5
+ /**
6
+ * 数据转换服务接口
7
+ */
8
+ export interface DataTransformService {
9
+ transformData(data: any[], config: TransformConfig): any[];
10
+ processNodeInfo(item: any, nodeMap?: Map<number, any>): any;
11
+ }
12
+ /**
13
+ * 默认数据转换服务实现
14
+ */
15
+ export declare class DefaultDataTransformService implements DataTransformService {
16
+ transformData(data: any[], config: TransformConfig): any[];
17
+ processNodeInfo(item: any, nodeMap?: Map<number, any>): any;
18
+ }
19
+ /**
20
+ * 创建数据转换服务
21
+ */
22
+ export declare function createDataTransformService(customService?: Partial<DataTransformService>): DataTransformService;
@@ -0,0 +1,29 @@
1
+ import { DataAdapter } from "../adapters/DataAdapter.js";
2
+ class DefaultDataTransformService {
3
+ transformData(data, config) {
4
+ return DataAdapter.transform(data, config.type, config);
5
+ }
6
+ processNodeInfo(item, nodeMap) {
7
+ if (!item.nodeInfos) return item;
8
+ const infos = [
9
+ ...item.nodeInfos.info || [],
10
+ ...item.nodeInfos.infosCompare || []
11
+ ];
12
+ const len = infos.length || 0;
13
+ item.nodeLen = len;
14
+ if (0 === len) return item;
15
+ item.node = 0;
16
+ if (1 === len && nodeMap) item.color = nodeMap.get(infos[0].type)?.color || '#5B8FF9';
17
+ else item.color = 'l (0) 0:#32C5FF 0.44:#B620E0 0.99:#F7B500';
18
+ return item;
19
+ }
20
+ }
21
+ function createDataTransformService(customService) {
22
+ const defaultService = new DefaultDataTransformService();
23
+ if (!customService) return defaultService;
24
+ return {
25
+ transformData: customService.transformData || defaultService.transformData.bind(defaultService),
26
+ processNodeInfo: customService.processNodeInfo || defaultService.processNodeInfo.bind(defaultService)
27
+ };
28
+ }
29
+ export { DefaultDataTransformService, createDataTransformService };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 格式化服务接口和实现
3
+ */
4
+ import type { IndicatorInfo } from '../core/ChartTypes';
5
+ /**
6
+ * 格式化服务接口
7
+ */
8
+ export interface FormatterService {
9
+ formatIndicator(value: any, indicator?: IndicatorInfo): string;
10
+ formatAxis(value: any, indicator?: IndicatorInfo): string;
11
+ formatBigNumber(value: number | string, indicator?: IndicatorInfo): string;
12
+ }
13
+ /**
14
+ * 默认格式化服务实现
15
+ */
16
+ export declare class DefaultFormatterService implements FormatterService {
17
+ formatIndicator(value: any, indicator?: IndicatorInfo): string;
18
+ formatAxis(value: any, indicator?: IndicatorInfo): string;
19
+ formatBigNumber(value: number | string, indicator?: IndicatorInfo): string;
20
+ }
21
+ /**
22
+ * 创建格式化服务
23
+ */
24
+ export declare function createFormatterService(customFormatter?: Partial<FormatterService>): FormatterService;
@@ -0,0 +1,22 @@
1
+ import { formatBigNumber, formatIndicatorV2 } from "../utils/formatters.js";
2
+ class DefaultFormatterService {
3
+ formatIndicator(value, indicator) {
4
+ return formatIndicatorV2(value, indicator);
5
+ }
6
+ formatAxis(value, indicator) {
7
+ return formatBigNumber(value, indicator);
8
+ }
9
+ formatBigNumber(value, indicator) {
10
+ return formatBigNumber(value, indicator);
11
+ }
12
+ }
13
+ function createFormatterService(customFormatter) {
14
+ const defaultService = new DefaultFormatterService();
15
+ if (!customFormatter) return defaultService;
16
+ return {
17
+ formatIndicator: customFormatter.formatIndicator || defaultService.formatIndicator.bind(defaultService),
18
+ formatAxis: customFormatter.formatAxis || defaultService.formatAxis.bind(defaultService),
19
+ formatBigNumber: customFormatter.formatBigNumber || defaultService.formatBigNumber.bind(defaultService)
20
+ };
21
+ }
22
+ export { DefaultFormatterService, createFormatterService };
@@ -0,0 +1 @@
1
+ export {};