@beppla/tapas-ui 1.4.30 → 1.4.31

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 (39) hide show
  1. package/commonjs/PieChart/BACKWARD_COMPATIBILITY.md +157 -0
  2. package/commonjs/PieChart/BUGFIX_EMPTY_DATA.md +86 -0
  3. package/commonjs/PieChart/GroupedLegend.js +240 -0
  4. package/commonjs/PieChart/GroupedLegend.js.map +1 -0
  5. package/commonjs/PieChart/IMPLEMENTATION_SUMMARY.md +306 -0
  6. package/commonjs/PieChart/NestedPieChart.README.md +421 -0
  7. package/commonjs/PieChart/NestedPieChart.js +567 -0
  8. package/commonjs/PieChart/NestedPieChart.js.map +1 -0
  9. package/commonjs/PieChart/NestedPieChart.types.js +2 -0
  10. package/commonjs/PieChart/NestedPieChart.types.js.map +1 -0
  11. package/commonjs/PieChart/NestedPieChart.utils.js +360 -0
  12. package/commonjs/PieChart/NestedPieChart.utils.js.map +1 -0
  13. package/commonjs/PieChart/index.js +8 -0
  14. package/commonjs/PieChart/index.js.map +1 -1
  15. package/module/PieChart/BACKWARD_COMPATIBILITY.md +157 -0
  16. package/module/PieChart/BUGFIX_EMPTY_DATA.md +86 -0
  17. package/module/PieChart/GroupedLegend.js +234 -0
  18. package/module/PieChart/GroupedLegend.js.map +1 -0
  19. package/module/PieChart/IMPLEMENTATION_SUMMARY.md +306 -0
  20. package/module/PieChart/NestedPieChart.README.md +421 -0
  21. package/module/PieChart/NestedPieChart.js +563 -0
  22. package/module/PieChart/NestedPieChart.js.map +1 -0
  23. package/module/PieChart/NestedPieChart.types.js +2 -0
  24. package/module/PieChart/NestedPieChart.types.js.map +1 -0
  25. package/module/PieChart/NestedPieChart.utils.js +343 -0
  26. package/module/PieChart/NestedPieChart.utils.js.map +1 -0
  27. package/module/PieChart/index.js +1 -0
  28. package/module/PieChart/index.js.map +1 -1
  29. package/package.json +1 -1
  30. package/typescript/PieChart/GroupedLegend.d.ts +26 -0
  31. package/typescript/PieChart/GroupedLegend.d.ts.map +1 -0
  32. package/typescript/PieChart/NestedPieChart.d.ts +12 -0
  33. package/typescript/PieChart/NestedPieChart.d.ts.map +1 -0
  34. package/typescript/PieChart/NestedPieChart.types.d.ts +117 -0
  35. package/typescript/PieChart/NestedPieChart.types.d.ts.map +1 -0
  36. package/typescript/PieChart/NestedPieChart.utils.d.ts +57 -0
  37. package/typescript/PieChart/NestedPieChart.utils.d.ts.map +1 -0
  38. package/typescript/PieChart/index.d.ts +2 -0
  39. package/typescript/PieChart/index.d.ts.map +1 -1
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * NestedPieChart 工具函数
5
+ * 数据处理、配色生成、格式化等
6
+ */
7
+
8
+ /**
9
+ * 判断是否为树形数据
10
+ */
11
+ export function isTreeData(data) {
12
+ if (!data || data.length === 0) return false;
13
+ const firstItem = data[0];
14
+ if (!firstItem) return false;
15
+ return 'children' in firstItem || !('groupKey' in firstItem);
16
+ }
17
+
18
+ /**
19
+ * 将扁平数据转换为树形数据
20
+ */
21
+ export function flatToTree(flatData) {
22
+ const groupMap = new Map();
23
+ flatData.forEach(item => {
24
+ if (!groupMap.has(item.groupKey)) {
25
+ groupMap.set(item.groupKey, {
26
+ key: item.groupKey,
27
+ label: item.groupLabel,
28
+ children: [],
29
+ metadata: {}
30
+ });
31
+ }
32
+ const group = groupMap.get(item.groupKey);
33
+ group.children.push({
34
+ key: item.key,
35
+ label: item.label,
36
+ value: item.value,
37
+ color: item.color,
38
+ metadata: item.metadata
39
+ });
40
+ });
41
+ return Array.from(groupMap.values());
42
+ }
43
+
44
+ /**
45
+ * 过滤0值并去重合并
46
+ */
47
+ export function cleanData(data) {
48
+ const keyMap = new Map();
49
+ data.forEach(node => {
50
+ // 递归处理子节点
51
+ const cleanedChildren = node.children ? cleanData(node.children) : undefined;
52
+
53
+ // 计算节点值(如果有子节点则汇总)
54
+ const nodeValue = cleanedChildren && cleanedChildren.length > 0 ? cleanedChildren.reduce((sum, child) => sum + (child.value || 0), 0) : node.value || 0;
55
+
56
+ // 过滤0值
57
+ if (nodeValue === 0) return;
58
+
59
+ // 去重合并
60
+ if (keyMap.has(node.key)) {
61
+ const existing = keyMap.get(node.key);
62
+ existing.value = (existing.value || 0) + nodeValue;
63
+ if (cleanedChildren) {
64
+ existing.children = [...(existing.children || []), ...cleanedChildren];
65
+ }
66
+ } else {
67
+ keyMap.set(node.key, {
68
+ ...node,
69
+ value: nodeValue,
70
+ children: cleanedChildren
71
+ });
72
+ }
73
+ });
74
+ return Array.from(keyMap.values());
75
+ }
76
+
77
+ /**
78
+ * 颜色工具:RGB <-> HSL 转换
79
+ */
80
+ function rgbToHsl(r, g, b) {
81
+ r /= 255;
82
+ g /= 255;
83
+ b /= 255;
84
+ const max = Math.max(r, g, b);
85
+ const min = Math.min(r, g, b);
86
+ let h = 0,
87
+ s = 0;
88
+ const l = (max + min) / 2;
89
+ if (max !== min) {
90
+ const d = max - min;
91
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
92
+ switch (max) {
93
+ case r:
94
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
95
+ break;
96
+ case g:
97
+ h = ((b - r) / d + 2) / 6;
98
+ break;
99
+ case b:
100
+ h = ((r - g) / d + 4) / 6;
101
+ break;
102
+ }
103
+ }
104
+ return [h * 360, s * 100, l * 100];
105
+ }
106
+ function hslToRgb(h, s, l) {
107
+ h /= 360;
108
+ s /= 100;
109
+ l /= 100;
110
+ let r, g, b;
111
+ if (s === 0) {
112
+ r = g = b = l;
113
+ } else {
114
+ const hue2rgb = (p, q, t) => {
115
+ if (t < 0) t += 1;
116
+ if (t > 1) t -= 1;
117
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
118
+ if (t < 1 / 2) return q;
119
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
120
+ return p;
121
+ };
122
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
123
+ const p = 2 * l - q;
124
+ r = hue2rgb(p, q, h + 1 / 3);
125
+ g = hue2rgb(p, q, h);
126
+ b = hue2rgb(p, q, h - 1 / 3);
127
+ }
128
+ return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
129
+ }
130
+ function hexToRgb(hex) {
131
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
132
+ return result && result[1] && result[2] && result[3] ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : [0, 0, 0];
133
+ }
134
+ function rgbToHex(r, g, b) {
135
+ return '#' + [r, g, b].map(x => {
136
+ const hex = x.toString(16);
137
+ return hex.length === 1 ? '0' + hex : hex;
138
+ }).join('');
139
+ }
140
+
141
+ /**
142
+ * 生成渐变色系列(同色系,明度/饱和度渐变)
143
+ */
144
+ export function generateColorShades(baseColor, count, _minColorDiff = 0.1) {
145
+ if (count <= 1) return [baseColor];
146
+ const [r, g, b] = hexToRgb(baseColor);
147
+ const [h, s, l] = rgbToHsl(r, g, b);
148
+ const colors = [];
149
+
150
+ // 策略:固定色相,调整饱和度和明度
151
+ // 为避免颜色过淡或过深,限制明度范围
152
+ const minL = Math.max(30, l - 25);
153
+ const maxL = Math.min(85, l + 25);
154
+ const lStep = (maxL - minL) / (count - 1);
155
+
156
+ // 同时调整饱和度,避免灰蒙蒙
157
+ const minS = Math.max(40, s - 20);
158
+ const maxS = Math.min(100, s + 20);
159
+ const sStep = (maxS - minS) / (count - 1);
160
+ for (let i = 0; i < count; i++) {
161
+ const newL = minL + lStep * i;
162
+ const newS = minS + sStep * (count - 1 - i); // 反向:越深饱和度越高
163
+ const [newR, newG, newB] = hslToRgb(h, newS, newL);
164
+ colors.push(rgbToHex(newR, newG, newB));
165
+ }
166
+ return colors;
167
+ }
168
+
169
+ /**
170
+ * 生成配色方案
171
+ */
172
+ export function generateColorMap(data, strategy, defaultColors) {
173
+ const colorMap = new Map();
174
+ const baseColors = strategy.baseColors || {};
175
+ data.forEach((node, index) => {
176
+ // 大类颜色
177
+ const baseColor = baseColors[node.key] || node.color || defaultColors[index % defaultColors.length];
178
+ if (baseColor) {
179
+ colorMap.set(node.key, baseColor);
180
+ }
181
+
182
+ // 子类渐变色
183
+ if (node.children && node.children.length > 0 && strategy.autoGenerate !== false && baseColor) {
184
+ const childrenColors = generateColorShades(baseColor, node.children.length, strategy.minColorDiff);
185
+ node.children.forEach((child, childIndex) => {
186
+ if (!child.color) {
187
+ const childColor = childrenColors[childIndex];
188
+ if (childColor) {
189
+ colorMap.set(child.key, childColor);
190
+ }
191
+ } else {
192
+ colorMap.set(child.key, child.color);
193
+ }
194
+ });
195
+ }
196
+ });
197
+ return colorMap;
198
+ }
199
+
200
+ /**
201
+ * 处理数据:计算值、百分比、路径等
202
+ */
203
+ export function processData(data, colorMap, parentKey, parentPath = [], level = 0) {
204
+ let total = 0;
205
+ const processed = [];
206
+ data.forEach(node => {
207
+ const path = [...parentPath, node.key];
208
+ const nodeValue = node.value || 0;
209
+
210
+ // 递归处理子节点
211
+ let childrenProcessed = [];
212
+ let childrenTotal = 0;
213
+ if (node.children && node.children.length > 0) {
214
+ const result = processData(node.children, colorMap, node.key, path, level + 1);
215
+ childrenProcessed = result.processed;
216
+ childrenTotal = result.total;
217
+ }
218
+
219
+ // 如果有子节点,使用子节点汇总值;否则使用自身值
220
+ const finalValue = childrenTotal > 0 ? childrenTotal : nodeValue;
221
+ if (finalValue > 0) {
222
+ processed.push({
223
+ key: node.key,
224
+ label: node.label,
225
+ value: finalValue,
226
+ percent: 0,
227
+ // 稍后计算
228
+ color: colorMap.get(node.key) || '#999',
229
+ level,
230
+ parentKey,
231
+ path,
232
+ children: childrenProcessed.length > 0 ? childrenProcessed : undefined,
233
+ metadata: node.metadata
234
+ });
235
+ total += finalValue;
236
+ }
237
+ });
238
+
239
+ // 计算百分比
240
+ processed.forEach(item => {
241
+ item.percent = total > 0 ? item.value / total * 100 : 0;
242
+ if (item.children) {
243
+ const childTotal = item.children.reduce((sum, child) => sum + child.value, 0);
244
+ item.children.forEach(child => {
245
+ child.percent = childTotal > 0 ? child.value / childTotal * 100 : 0;
246
+ });
247
+ }
248
+ });
249
+ return {
250
+ processed,
251
+ total
252
+ };
253
+ }
254
+
255
+ /**
256
+ * 排序函数 - 图例项
257
+ */
258
+ export function sortLegendItems(data, strategy) {
259
+ const sorted = [...data];
260
+ switch (strategy) {
261
+ case 'value-desc':
262
+ return sorted.sort((a, b) => b.value - a.value);
263
+ case 'value-asc':
264
+ return sorted.sort((a, b) => a.value - b.value);
265
+ case 'label-asc':
266
+ return sorted.sort((a, b) => a.label.localeCompare(b.label));
267
+ case 'label-desc':
268
+ return sorted.sort((a, b) => b.label.localeCompare(a.label));
269
+ default:
270
+ return sorted;
271
+ }
272
+ }
273
+
274
+ /**
275
+ * 排序函数 - 图例分组
276
+ */
277
+ export function sortLegendGroups(data, strategy) {
278
+ const sorted = [...data];
279
+ switch (strategy) {
280
+ case 'value-desc':
281
+ return sorted.sort((a, b) => b.groupValue - a.groupValue);
282
+ case 'value-asc':
283
+ return sorted.sort((a, b) => a.groupValue - b.groupValue);
284
+ case 'label-asc':
285
+ return sorted.sort((a, b) => a.groupLabel.localeCompare(b.groupLabel));
286
+ case 'label-desc':
287
+ return sorted.sort((a, b) => b.groupLabel.localeCompare(a.groupLabel));
288
+ default:
289
+ return sorted;
290
+ }
291
+ }
292
+
293
+ /**
294
+ * 构建分组图例数据
295
+ */
296
+ export function buildLegendGroupData(processed, groupSortStrategy = 'none', itemSortStrategy = 'none', defaultExpanded = true) {
297
+ const groups = processed.map(parent => {
298
+ const items = parent.children ? parent.children.map(child => ({
299
+ key: child.key,
300
+ label: child.label,
301
+ value: child.value,
302
+ percent: child.percent,
303
+ color: child.color,
304
+ metadata: child.metadata
305
+ })) : [];
306
+ const sortedItems = sortLegendItems(items, itemSortStrategy);
307
+ return {
308
+ groupKey: parent.key,
309
+ groupLabel: parent.label,
310
+ groupValue: parent.value,
311
+ groupPercent: parent.percent,
312
+ groupColor: parent.color,
313
+ items: sortedItems,
314
+ isExpanded: defaultExpanded,
315
+ metadata: parent.metadata
316
+ };
317
+ });
318
+ return sortLegendGroups(groups, groupSortStrategy);
319
+ }
320
+
321
+ /**
322
+ * 默认格式化函数
323
+ */
324
+ export const defaultFormatValue = value => {
325
+ return new Intl.NumberFormat('en-US', {
326
+ minimumFractionDigits: 2,
327
+ maximumFractionDigits: 2
328
+ }).format(value);
329
+ };
330
+ export const defaultFormatPercent = percent => {
331
+ return `${percent.toFixed(1)}%`;
332
+ };
333
+
334
+ /**
335
+ * 默认货币格式化(欧元)
336
+ */
337
+ export const formatEuro = value => {
338
+ return new Intl.NumberFormat('de-DE', {
339
+ style: 'currency',
340
+ currency: 'EUR'
341
+ }).format(value);
342
+ };
343
+ //# sourceMappingURL=NestedPieChart.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTreeData","data","length","firstItem","flatToTree","flatData","groupMap","Map","forEach","item","has","groupKey","set","key","label","groupLabel","children","metadata","group","get","push","value","color","Array","from","values","cleanData","keyMap","node","cleanedChildren","undefined","nodeValue","reduce","sum","child","existing","rgbToHsl","r","g","b","max","Math","min","h","s","l","d","hslToRgb","hue2rgb","p","q","t","round","hexToRgb","hex","result","exec","parseInt","rgbToHex","map","x","toString","join","generateColorShades","baseColor","count","_minColorDiff","colors","minL","maxL","lStep","minS","maxS","sStep","i","newL","newS","newR","newG","newB","generateColorMap","strategy","defaultColors","colorMap","baseColors","index","autoGenerate","childrenColors","minColorDiff","childIndex","childColor","processData","parentKey","parentPath","level","total","processed","path","childrenProcessed","childrenTotal","finalValue","percent","childTotal","sortLegendItems","sorted","sort","a","localeCompare","sortLegendGroups","groupValue","buildLegendGroupData","groupSortStrategy","itemSortStrategy","defaultExpanded","groups","parent","items","sortedItems","groupPercent","groupColor","isExpanded","defaultFormatValue","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","defaultFormatPercent","toFixed","formatEuro","style","currency"],"sourceRoot":"../../../components","sources":["PieChart/NestedPieChart.utils.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  export { PieChart } from './PieChart';
4
+ export { default as NestedPieChart } from './NestedPieChart';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PieChart"],"sourceRoot":"../../../components","sources":["PieChart/index.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["PieChart","default","NestedPieChart"],"sourceRoot":"../../../components","sources":["PieChart/index.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,YAAY;AAGrC,SAASC,OAAO,IAAIC,cAAc,QAAQ,kBAAkB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beppla/tapas-ui",
3
- "version": "1.4.30",
3
+ "version": "1.4.31",
4
4
  "description": "Tapas UI Component Library - A comprehensive React Native component library with Expo support",
5
5
  "main": "./commonjs/index.js",
6
6
  "module": "./module/index.js",
@@ -0,0 +1,26 @@
1
+ /**
2
+ * GroupedLegend - 分组图例组件
3
+ * 支持折叠/展开、分组显示、点击交互
4
+ *
5
+ * Note: This component uses inline styles as it's specifically designed for Web platform
6
+ * where CSS-in-JS is the standard approach. RN-specific lint rules are disabled.
7
+ */
8
+ import React from 'react';
9
+ import { LegendGroupData, LegendClickEvent, ValueFormatter, PercentFormatter } from './NestedPieChart.types';
10
+ export interface GroupedLegendProps {
11
+ groups: LegendGroupData[];
12
+ showValues?: boolean;
13
+ showPercent?: boolean;
14
+ collapsible?: boolean;
15
+ itemGap?: number;
16
+ groupGap?: number;
17
+ labelMinWidth?: number;
18
+ formatValue?: ValueFormatter;
19
+ formatPercent?: PercentFormatter;
20
+ onItemClick?: (event: LegendClickEvent) => void;
21
+ onGroupClick?: (event: LegendClickEvent) => void;
22
+ highlightedKey?: string | number | null;
23
+ hiddenKeys?: Set<string | number>;
24
+ }
25
+ export declare const GroupedLegend: React.FC<GroupedLegendProps>;
26
+ //# sourceMappingURL=GroupedLegend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupedLegend.d.ts","sourceRoot":"","sources":["../../../components/PieChart/GroupedLegend.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAgC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE7G,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6PtD,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * NestedPieChart - 多层级饼图组件
3
+ * 支持多层级嵌套、分组图例、交互高亮等功能
4
+ *
5
+ * Note: This component uses inline styles for Web-specific rendering with Recharts.
6
+ * RN-specific lint rules are disabled for Web platform code.
7
+ */
8
+ import React from 'react';
9
+ import { NestedPieChartProps } from './NestedPieChart.types';
10
+ export declare const NestedPieChart: React.FC<NestedPieChartProps>;
11
+ export default NestedPieChart;
12
+ //# sourceMappingURL=NestedPieChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NestedPieChart.d.ts","sourceRoot":"","sources":["../../../components/PieChart/NestedPieChart.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAG9D,OAAO,EACL,mBAAmB,EAMpB,MAAM,wBAAwB,CAAC;AAyChC,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkMxD,CAAC;AA6VF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * NestedPieChart 类型定义
3
+ * 支持多层级饼图数据结构
4
+ */
5
+ export interface NestedPieChartNode {
6
+ key: string | number;
7
+ label: string;
8
+ value?: number;
9
+ color?: string;
10
+ children?: NestedPieChartNode[];
11
+ metadata?: Record<string, any>;
12
+ }
13
+ export interface NestedPieChartFlatData {
14
+ key: string | number;
15
+ label: string;
16
+ value: number;
17
+ groupKey: string | number;
18
+ groupLabel: string;
19
+ color?: string;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export type LegendMode = 'flat' | 'grouped';
23
+ export type LegendContent = 'all' | 'parent-only' | 'children-only';
24
+ export type LegendSortStrategy = 'none' | 'value-desc' | 'value-asc' | 'label-asc' | 'label-desc';
25
+ export interface ColorStrategy {
26
+ baseColors?: Record<string, string>;
27
+ autoGenerate?: boolean;
28
+ colorSteps?: number;
29
+ minColorDiff?: number;
30
+ }
31
+ export type ValueFormatter = (value: number) => string;
32
+ export type PercentFormatter = (percent: number) => string;
33
+ export interface SliceClickEvent {
34
+ key: string | number;
35
+ label: string;
36
+ value: number;
37
+ level: number;
38
+ path: Array<string | number>;
39
+ parentKey?: string | number;
40
+ metadata?: Record<string, any>;
41
+ }
42
+ export interface LegendClickEvent extends SliceClickEvent {
43
+ groupKey?: string | number;
44
+ isGroupHeader?: boolean;
45
+ }
46
+ export interface NestedPieChartProps {
47
+ data: NestedPieChartNode[] | NestedPieChartFlatData[];
48
+ dataType?: 'tree' | 'flat';
49
+ levels?: number;
50
+ width?: number;
51
+ height?: number;
52
+ outerRadius?: number | string;
53
+ innerRadius?: number | string;
54
+ radiusGap?: number;
55
+ colorStrategy?: ColorStrategy;
56
+ colors?: string[];
57
+ showLegend?: boolean;
58
+ legendMode?: LegendMode;
59
+ legendPosition?: 'top' | 'bottom' | 'left' | 'right';
60
+ legendContent?: LegendContent;
61
+ legendCollapsible?: boolean;
62
+ legendDefaultExpanded?: boolean;
63
+ legendSortStrategy?: LegendSortStrategy;
64
+ legendGroupSortStrategy?: LegendSortStrategy;
65
+ legendShowValues?: boolean;
66
+ legendShowPercent?: boolean;
67
+ legendItemGap?: number;
68
+ legendGroupGap?: number;
69
+ legendLabelMinWidth?: number;
70
+ legendChartGap?: number;
71
+ showLabels?: boolean;
72
+ labelLevel?: 'all' | number;
73
+ formatValue?: ValueFormatter;
74
+ formatPercent?: PercentFormatter;
75
+ onSliceClick?: (event: SliceClickEvent) => void;
76
+ onSliceHover?: (event: SliceClickEvent | null) => void;
77
+ onLegendClick?: (event: LegendClickEvent) => void;
78
+ enableLegendFilter?: boolean;
79
+ showTooltip?: boolean;
80
+ customTooltip?: (event: SliceClickEvent) => React.ReactNode;
81
+ padAngle?: number;
82
+ centerText?: string;
83
+ centerTextStyle?: React.CSSProperties;
84
+ emptyText?: string;
85
+ style?: any;
86
+ testID?: string;
87
+ }
88
+ export interface ProcessedSliceData {
89
+ key: string | number;
90
+ label: string;
91
+ value: number;
92
+ percent: number;
93
+ color: string;
94
+ level: number;
95
+ parentKey?: string | number;
96
+ path: Array<string | number>;
97
+ children?: ProcessedSliceData[];
98
+ metadata?: Record<string, any>;
99
+ }
100
+ export interface LegendGroupData {
101
+ groupKey: string | number;
102
+ groupLabel: string;
103
+ groupValue: number;
104
+ groupPercent: number;
105
+ groupColor: string;
106
+ items: Array<{
107
+ key: string | number;
108
+ label: string;
109
+ value: number;
110
+ percent: number;
111
+ color: string;
112
+ metadata?: Record<string, any>;
113
+ }>;
114
+ isExpanded: boolean;
115
+ metadata?: Record<string, any>;
116
+ }
117
+ //# sourceMappingURL=NestedPieChart.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NestedPieChart.types.d.ts","sourceRoot":"","sources":["../../../components/PieChart/NestedPieChart.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * NestedPieChart 工具函数
3
+ * 数据处理、配色生成、格式化等
4
+ */
5
+ import { NestedPieChartNode, NestedPieChartFlatData, ProcessedSliceData, LegendGroupData, ColorStrategy, LegendSortStrategy } from './NestedPieChart.types';
6
+ /**
7
+ * 判断是否为树形数据
8
+ */
9
+ export declare function isTreeData(data: NestedPieChartNode[] | NestedPieChartFlatData[]): data is NestedPieChartNode[];
10
+ /**
11
+ * 将扁平数据转换为树形数据
12
+ */
13
+ export declare function flatToTree(flatData: NestedPieChartFlatData[]): NestedPieChartNode[];
14
+ /**
15
+ * 过滤0值并去重合并
16
+ */
17
+ export declare function cleanData(data: NestedPieChartNode[]): NestedPieChartNode[];
18
+ /**
19
+ * 生成渐变色系列(同色系,明度/饱和度渐变)
20
+ */
21
+ export declare function generateColorShades(baseColor: string, count: number, _minColorDiff?: number): string[];
22
+ /**
23
+ * 生成配色方案
24
+ */
25
+ export declare function generateColorMap(data: NestedPieChartNode[], strategy: ColorStrategy, defaultColors: string[]): Map<string | number, string>;
26
+ /**
27
+ * 处理数据:计算值、百分比、路径等
28
+ */
29
+ export declare function processData(data: NestedPieChartNode[], colorMap: Map<string | number, string>, parentKey?: string | number, parentPath?: Array<string | number>, level?: number): {
30
+ processed: ProcessedSliceData[];
31
+ total: number;
32
+ };
33
+ /**
34
+ * 排序函数 - 图例项
35
+ */
36
+ export declare function sortLegendItems<T extends {
37
+ label: string;
38
+ value: number;
39
+ }>(data: T[], strategy: LegendSortStrategy): T[];
40
+ /**
41
+ * 排序函数 - 图例分组
42
+ */
43
+ export declare function sortLegendGroups(data: LegendGroupData[], strategy: LegendSortStrategy): LegendGroupData[];
44
+ /**
45
+ * 构建分组图例数据
46
+ */
47
+ export declare function buildLegendGroupData(processed: ProcessedSliceData[], groupSortStrategy?: LegendSortStrategy, itemSortStrategy?: LegendSortStrategy, defaultExpanded?: boolean): LegendGroupData[];
48
+ /**
49
+ * 默认格式化函数
50
+ */
51
+ export declare const defaultFormatValue: (value: number) => string;
52
+ export declare const defaultFormatPercent: (percent: number) => string;
53
+ /**
54
+ * 默认货币格式化(欧元)
55
+ */
56
+ export declare const formatEuro: (value: number) => string;
57
+ //# sourceMappingURL=NestedPieChart.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NestedPieChart.utils.d.ts","sourceRoot":"","sources":["../../../components/PieChart/NestedPieChart.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,kBAAkB,EAAE,GAAG,sBAAsB,EAAE,GACpD,IAAI,IAAI,kBAAkB,EAAE,CAK9B;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,sBAAsB,EAAE,GACjC,kBAAkB,EAAE,CAwBtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,kBAAkB,EAAE,GACzB,kBAAkB,EAAE,CAqCtB;AA+ED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,MAAY,GAC1B,MAAM,EAAE,CA2BV;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,MAAM,EAAE,GACtB,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAiC9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EACtC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAC3B,UAAU,GAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAM,EACvC,KAAK,GAAE,MAAU,GAChB;IAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmDpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACxE,IAAI,EAAE,CAAC,EAAE,EACT,QAAQ,EAAE,kBAAkB,GAC3B,CAAC,EAAE,CAeL;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EAAE,EACvB,QAAQ,EAAE,kBAAkB,GAC3B,eAAe,EAAE,CAenB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,kBAAkB,EAAE,EAC/B,iBAAiB,GAAE,kBAA2B,EAC9C,gBAAgB,GAAE,kBAA2B,EAC7C,eAAe,GAAE,OAAc,GAC9B,eAAe,EAAE,CA4BnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAKlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,KAAG,MAEtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAK1C,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { PieChart } from './PieChart';
2
2
  export type { PieChartProps, PieChartData } from './PieChart';
3
+ export { default as NestedPieChart } from './NestedPieChart';
4
+ export type { NestedPieChartProps, NestedPieChartNode, NestedPieChartFlatData, LegendMode, LegendContent, LegendSortStrategy, ColorStrategy, ValueFormatter, PercentFormatter, SliceClickEvent, LegendClickEvent, ProcessedSliceData, LegendGroupData, } from './NestedPieChart.types';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../components/PieChart/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../components/PieChart/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,wBAAwB,CAAC"}