@rsdoctor/components 1.1.4 → 1.1.6

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.
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export type TreeNode = {
3
+ name: string;
4
+ value?: number;
5
+ children?: TreeNode[];
6
+ path?: string;
7
+ sourceSize?: number;
8
+ bundledSize?: number;
9
+ };
10
+ interface TreeMapProps {
11
+ treeData: TreeNode[];
12
+ valueKey?: 'sourceSize' | 'bundledSize';
13
+ style?: React.CSSProperties;
14
+ onChartClick?: (params: any) => void;
15
+ }
16
+ export declare const TreeMap: React.ForwardRefExoticComponent<TreeMapProps & React.RefAttributes<any>>;
17
+ export declare const AssetTreemapWithFilter: React.FC<{
18
+ treeData: TreeNode[];
19
+ onChartClick?: (params: any) => void;
20
+ }>;
21
+ export {};
@@ -0,0 +1,281 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import React, { useEffect, useState, memo, useMemo } from "react";
3
+ import ReactEChartsCore from "echarts-for-react/lib/core";
4
+ import * as echarts from "echarts/core";
5
+ import { TreemapChart } from "echarts/charts";
6
+ import { TooltipComponent } from "echarts/components";
7
+ import { CanvasRenderer } from "echarts/renderers";
8
+ import { BUNDLE_ANALYZER_COLORS, COLOR_GROUPS } from "./constants";
9
+ import { Checkbox, Card, Typography, Space } from "antd";
10
+ import {
11
+ VerticalAlignBottomOutlined,
12
+ VerticalAlignTopOutlined
13
+ } from "@ant-design/icons";
14
+ import { formatSize, useI18n } from "../../utils";
15
+ import { SearchModal } from "../../pages/BundleSize/components/search-modal";
16
+ function hashString(str) {
17
+ let hash = 5381;
18
+ for (let i = 0; i < str.length; i++) {
19
+ hash = (hash << 5) + hash + str.charCodeAt(i);
20
+ }
21
+ return hash >>> 0;
22
+ }
23
+ function getLevelOption() {
24
+ return [
25
+ {
26
+ itemStyle: {
27
+ color: "white",
28
+ borderColor: "#eee",
29
+ borderWidth: 5,
30
+ gapWidth: 5
31
+ },
32
+ emphasis: {
33
+ itemStyle: {
34
+ borderColor: "#a29f9f"
35
+ }
36
+ }
37
+ },
38
+ {
39
+ colorSaturation: [0.25, 0.5],
40
+ itemStyle: {
41
+ borderWidth: 5,
42
+ gapWidth: 5,
43
+ borderColorSaturation: 0.5,
44
+ borderColor: "#eee"
45
+ }
46
+ }
47
+ ];
48
+ }
49
+ const TreeMapInner = memo(
50
+ ({
51
+ treeData,
52
+ valueKey = "sourceSize",
53
+ style,
54
+ onChartClick,
55
+ forwardedRef
56
+ }) => {
57
+ const [option, setOption] = useState(null);
58
+ const chartRef = React.useRef(null);
59
+ useEffect(() => {
60
+ if (forwardedRef && chartRef.current) {
61
+ if (typeof forwardedRef === "function") {
62
+ forwardedRef(chartRef.current);
63
+ } else {
64
+ forwardedRef.current = chartRef.current;
65
+ }
66
+ }
67
+ }, [forwardedRef, chartRef.current]);
68
+ useEffect(() => {
69
+ echarts.use([TreemapChart, TooltipComponent, CanvasRenderer]);
70
+ }, []);
71
+ useEffect(() => {
72
+ if (!treeData)
73
+ return;
74
+ function convert(node, colorGroup, level = 0) {
75
+ const groupColors = BUNDLE_ANALYZER_COLORS[colorGroup];
76
+ const children = node.children?.map(
77
+ (c, _i) => convert(c, colorGroup, level + 1)
78
+ );
79
+ return {
80
+ id: node.path ? hashString(node.path) : void 0,
81
+ name: node.name,
82
+ value: node[valueKey] ?? node.value ?? 0,
83
+ path: node.path,
84
+ sourceSize: node.sourceSize ?? node.value,
85
+ bundledSize: node.bundledSize,
86
+ children: children && children.length > 0 ? children : void 0,
87
+ itemStyle: {
88
+ borderWidth: 2,
89
+ gapWidth: 2,
90
+ borderColorSaturation: 0.2,
91
+ colorSaturation: 0.2,
92
+ color: groupColors[level % groupColors.length],
93
+ borderColor: groupColors[level % groupColors.length]
94
+ },
95
+ level
96
+ };
97
+ }
98
+ const data = treeData.map((item, index) => {
99
+ const group = COLOR_GROUPS[index % COLOR_GROUPS.length];
100
+ return convert(item, group, 0);
101
+ });
102
+ setOption({
103
+ title: {
104
+ text: "Bundle Tree Map",
105
+ left: "center"
106
+ },
107
+ tooltip: {
108
+ position: "top",
109
+ formatter: function(info) {
110
+ var treePathInfo = info.treePathInfo;
111
+ var treePath = [];
112
+ for (var i = 1; i < treePathInfo.length; i++) {
113
+ treePath.push(treePathInfo[i].name);
114
+ }
115
+ var node = info.data || {};
116
+ var path = node.path || treePath.join("/");
117
+ var sourceSize = node.sourceSize;
118
+ var bundledSize = node.bundledSize;
119
+ return [
120
+ '<div class="tooltip-title">' + echarts.format.encodeHTML(path) + "</div>",
121
+ "<div><b>Source Size:</b> <b>" + (sourceSize !== void 0 ? formatSize(sourceSize) : "-") + "</b></div>",
122
+ "<div><b>Bundled Size:</b> <b>" + (bundledSize !== void 0 ? formatSize(bundledSize) : "-") + "</b></div>"
123
+ ].join("");
124
+ }
125
+ },
126
+ series: [
127
+ {
128
+ name: "Bundle Tree Map",
129
+ id: "bundle-treemap",
130
+ type: "treemap",
131
+ visibleMin: 300,
132
+ left: 10,
133
+ right: 10,
134
+ top: 10,
135
+ bottom: 10,
136
+ label: {
137
+ show: true,
138
+ formatter: "{b}",
139
+ color: "#000"
140
+ },
141
+ upperLabel: {
142
+ show: true,
143
+ height: 30
144
+ },
145
+ levels: getLevelOption(),
146
+ data
147
+ }
148
+ ]
149
+ });
150
+ }, [treeData, valueKey]);
151
+ return option ? /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
152
+ ReactEChartsCore,
153
+ {
154
+ ref: chartRef,
155
+ option,
156
+ echarts,
157
+ onEvents: onChartClick ? { click: onChartClick } : void 0,
158
+ style: {
159
+ width: "100%",
160
+ minHeight: "500px",
161
+ maxHeight: "1000px",
162
+ border: "5px solid white",
163
+ borderRadius: "10px",
164
+ ...style
165
+ }
166
+ }
167
+ ) }) : null;
168
+ }
169
+ );
170
+ const TreeMap = React.forwardRef((props, ref) => /* @__PURE__ */ jsx(TreeMapInner, { ...props, forwardedRef: ref }));
171
+ const AssetTreemapWithFilter = ({ treeData, onChartClick }) => {
172
+ const assetNames = useMemo(
173
+ () => treeData.map((item) => item.name),
174
+ [treeData]
175
+ );
176
+ const [checkedAssets, setCheckedAssets] = useState(assetNames);
177
+ const [collapsed, setCollapsed] = useState(false);
178
+ const [searchModalOpen, setSearchModalOpen] = useState(false);
179
+ const chartRef = React.useRef(null);
180
+ const { t } = useI18n();
181
+ const filteredTreeData = useMemo(
182
+ () => treeData.filter((item) => checkedAssets.includes(item.name)),
183
+ [treeData, checkedAssets]
184
+ );
185
+ const handleModuleClick = (module) => {
186
+ if (!module?.path)
187
+ return;
188
+ const nodeId = hashString(module.path);
189
+ if (chartRef.current) {
190
+ const echartsInstance = chartRef.current.getEchartsInstance();
191
+ echartsInstance.dispatchAction({
192
+ type: "treemapZoomToNode",
193
+ seriesId: "bundle-treemap",
194
+ targetNodeId: nodeId.toString()
195
+ });
196
+ }
197
+ setSearchModalOpen(false);
198
+ };
199
+ return /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: /* @__PURE__ */ jsxs(Space, { direction: "vertical", style: { width: "100%" }, children: [
200
+ /* @__PURE__ */ jsx(
201
+ Card,
202
+ {
203
+ title: /* @__PURE__ */ jsxs(Space, { children: [
204
+ /* @__PURE__ */ jsx(Typography.Text, { children: t("Output Assets List") }),
205
+ /* @__PURE__ */ jsx(
206
+ SearchModal,
207
+ {
208
+ onModuleClick: handleModuleClick,
209
+ open: searchModalOpen,
210
+ setOpen: setSearchModalOpen,
211
+ isIcon: true
212
+ }
213
+ )
214
+ ] }),
215
+ extra: /* @__PURE__ */ jsx(
216
+ "span",
217
+ {
218
+ style: { cursor: "pointer", marginLeft: 8 },
219
+ onClick: () => setCollapsed((c) => !c),
220
+ "aria-label": collapsed ? t("Expand") : t("Collapse"),
221
+ children: collapsed ? /* @__PURE__ */ jsx(VerticalAlignBottomOutlined, {}) : /* @__PURE__ */ jsx(VerticalAlignTopOutlined, {})
222
+ }
223
+ ),
224
+ size: "small",
225
+ bodyStyle: {
226
+ overflow: "hidden",
227
+ height: collapsed ? 0 : void 0,
228
+ padding: collapsed ? 0 : void 0,
229
+ transition: "height 0.3s cubic-bezier(.4,0,.2,1), padding 0.3s"
230
+ },
231
+ children: /* @__PURE__ */ jsxs(
232
+ "div",
233
+ {
234
+ style: {
235
+ opacity: collapsed ? 0 : 1,
236
+ transition: "opacity 0.3s",
237
+ gap: 8
238
+ },
239
+ children: [
240
+ /* @__PURE__ */ jsx(
241
+ Checkbox,
242
+ {
243
+ indeterminate: checkedAssets.length > 0 && checkedAssets.length < assetNames.length,
244
+ checked: checkedAssets.length === assetNames.length,
245
+ onChange: (e) => setCheckedAssets(e.target.checked ? assetNames : []),
246
+ style: { marginBottom: 4 },
247
+ children: "ALL / NONE"
248
+ },
249
+ "all-none-checkbox"
250
+ ),
251
+ /* @__PURE__ */ jsx(
252
+ Checkbox.Group,
253
+ {
254
+ options: assetNames,
255
+ value: checkedAssets,
256
+ onChange: setCheckedAssets,
257
+ style: { display: "flex", gap: 8, fontWeight: 500 }
258
+ },
259
+ "asset-checkbox-group"
260
+ )
261
+ ]
262
+ }
263
+ )
264
+ }
265
+ ),
266
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsx(
267
+ TreeMap,
268
+ {
269
+ ref: chartRef,
270
+ treeData: filteredTreeData,
271
+ onChartClick
272
+ }
273
+ ) })
274
+ ] }) });
275
+ };
276
+ export {
277
+ AssetTreemapWithFilter,
278
+ TreeMap
279
+ };
280
+
281
+ //# sourceMappingURL=TreeMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../src/components/Charts/TreeMap.tsx"],"sourcesContent":["import React, { useEffect, useState, memo, useMemo } from 'react';\nimport ReactEChartsCore from 'echarts-for-react/lib/core';\nimport * as echarts from 'echarts/core';\nimport { TreemapChart } from 'echarts/charts';\nimport { TooltipComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { BUNDLE_ANALYZER_COLORS, COLOR_GROUPS } from './constants';\nimport { Checkbox, Card, Typography, Space } from 'antd';\nimport {\n VerticalAlignBottomOutlined,\n VerticalAlignTopOutlined,\n} from '@ant-design/icons';\nimport { formatSize, useI18n } from '../../utils';\nimport { SearchModal } from '../../pages/BundleSize/components/search-modal';\n\n// TreeNode type should match the output of flattenTreemapData\nexport type TreeNode = {\n name: string;\n value?: number;\n children?: TreeNode[];\n path?: string;\n sourceSize?: number;\n bundledSize?: number;\n};\n\ninterface TreeMapProps {\n treeData: TreeNode[];\n valueKey?: 'sourceSize' | 'bundledSize'; // which value to show as area\n style?: React.CSSProperties;\n onChartClick?: (params: any) => void;\n}\n\n// Simple hash function for string (djb2)\nfunction hashString(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) + hash + str.charCodeAt(i); /* hash * 33 + c */\n }\n return hash >>> 0; // Ensure unsigned\n}\n\nfunction getLevelOption() {\n return [\n {\n itemStyle: {\n color: 'white',\n borderColor: '#eee',\n borderWidth: 5,\n gapWidth: 5,\n },\n emphasis: {\n itemStyle: {\n borderColor: '#a29f9f',\n },\n },\n },\n {\n colorSaturation: [0.25, 0.5],\n itemStyle: {\n borderWidth: 5,\n gapWidth: 5,\n borderColorSaturation: 0.5,\n borderColor: '#eee',\n },\n },\n ];\n}\n\nconst TreeMapInner: React.FC<TreeMapProps & { forwardedRef?: React.Ref<any> }> =\n memo(\n ({\n treeData,\n valueKey = 'sourceSize',\n style,\n onChartClick,\n forwardedRef,\n }) => {\n const [option, setOption] = useState<any>(null);\n const chartRef = React.useRef<any>(null);\n\n // Expose chartRef to parent if forwardedRef is provided\n useEffect(() => {\n if (forwardedRef && chartRef.current) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(chartRef.current);\n } else {\n (forwardedRef as React.MutableRefObject<any>).current =\n chartRef.current;\n }\n }\n }, [forwardedRef, chartRef.current]);\n\n // Register ECharts components\n useEffect(() => {\n echarts.use([TreemapChart, TooltipComponent, CanvasRenderer]);\n }, []);\n\n useEffect(() => {\n if (!treeData) return;\n // Helper to recursively add value field for ECharts\n function convert(\n node: TreeNode,\n colorGroup: keyof typeof BUNDLE_ANALYZER_COLORS,\n level = 0,\n ): any {\n const groupColors = BUNDLE_ANALYZER_COLORS[colorGroup];\n const children = node.children?.map((c, _i) =>\n convert(c, colorGroup, level + 1),\n );\n\n return {\n id: node.path ? hashString(node.path) : undefined,\n name: node.name,\n value: node[valueKey] ?? node.value ?? 0,\n path: node.path,\n sourceSize: node.sourceSize ?? node.value,\n bundledSize: node.bundledSize,\n children: children && children.length > 0 ? children : undefined,\n itemStyle: {\n borderWidth: 2,\n gapWidth: 2,\n borderColorSaturation: 0.2,\n colorSaturation: 0.2,\n color: groupColors[level % groupColors.length],\n borderColor: groupColors[level % groupColors.length],\n },\n level,\n };\n }\n const data = treeData.map((item, index) => {\n const group = COLOR_GROUPS[index % COLOR_GROUPS.length];\n return convert(item, group, 0);\n });\n\n setOption({\n title: {\n text: 'Bundle Tree Map',\n left: 'center',\n },\n tooltip: {\n position: 'top',\n formatter: function (info: any) {\n var treePathInfo = info.treePathInfo;\n var treePath = [];\n for (var i = 1; i < treePathInfo.length; i++) {\n treePath.push(treePathInfo[i].name);\n }\n // Get extra info from node data\n var node = info.data || {};\n var path = node.path || treePath.join('/');\n var sourceSize = node.sourceSize;\n var bundledSize = node.bundledSize;\n return [\n '<div class=\"tooltip-title\">' +\n echarts.format.encodeHTML(path) +\n '</div>',\n '<div><b>Source Size:</b> <b>' +\n (sourceSize !== undefined ? formatSize(sourceSize) : '-') +\n '</b></div>',\n '<div><b>Bundled Size:</b> <b>' +\n (bundledSize !== undefined ? formatSize(bundledSize) : '-') +\n '</b></div>',\n ].join('');\n },\n },\n series: [\n {\n name: 'Bundle Tree Map',\n id: 'bundle-treemap',\n type: 'treemap',\n visibleMin: 300,\n left: 10,\n right: 10,\n top: 10,\n bottom: 10,\n label: {\n show: true,\n formatter: '{b}',\n color: '#000',\n },\n upperLabel: {\n show: true,\n height: 30,\n },\n\n levels: getLevelOption(),\n data: data,\n },\n ],\n });\n }, [treeData, valueKey]);\n\n return option ? (\n <div>\n <ReactEChartsCore\n ref={chartRef}\n option={option}\n echarts={echarts}\n onEvents={onChartClick ? { click: onChartClick } : undefined}\n style={{\n width: '100%',\n minHeight: '500px',\n maxHeight: '1000px',\n border: '5px solid white',\n borderRadius: '10px',\n ...style,\n }}\n />\n </div>\n ) : null;\n },\n );\n\nexport const TreeMap = React.forwardRef<any, TreeMapProps>((props, ref) => (\n <TreeMapInner {...props} forwardedRef={ref} />\n));\n\nexport const AssetTreemapWithFilter: React.FC<{\n treeData: TreeNode[];\n onChartClick?: (params: any) => void;\n}> = ({ treeData, onChartClick }) => {\n const assetNames = useMemo(\n () => treeData.map((item) => item.name),\n [treeData],\n );\n const [checkedAssets, setCheckedAssets] = useState<string[]>(assetNames);\n const [collapsed, setCollapsed] = useState(false);\n const [searchModalOpen, setSearchModalOpen] = useState(false);\n const chartRef = React.useRef<any>(null);\n const { t } = useI18n();\n\n const filteredTreeData = useMemo(\n () => treeData.filter((item) => checkedAssets.includes(item.name)),\n [treeData, checkedAssets],\n );\n\n // Handler for search modal click\n const handleModuleClick = (module: any) => {\n if (!module?.path) return;\n const nodeId = hashString(module.path);\n if (chartRef.current) {\n const echartsInstance = chartRef.current.getEchartsInstance();\n echartsInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesId: 'bundle-treemap',\n targetNodeId: nodeId.toString(),\n });\n }\n setSearchModalOpen(false);\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n <Card\n title={\n <Space>\n <Typography.Text>{t('Output Assets List')}</Typography.Text>\n <SearchModal\n onModuleClick={handleModuleClick}\n open={searchModalOpen}\n setOpen={setSearchModalOpen}\n isIcon={true}\n />\n </Space>\n }\n extra={\n <span\n style={{ cursor: 'pointer', marginLeft: 8 }}\n onClick={() => setCollapsed((c) => !c)}\n aria-label={collapsed ? t('Expand') : t('Collapse')}\n >\n {collapsed ? (\n <VerticalAlignBottomOutlined />\n ) : (\n <VerticalAlignTopOutlined />\n )}\n </span>\n }\n size=\"small\"\n bodyStyle={{\n overflow: 'hidden',\n height: collapsed ? 0 : undefined,\n padding: collapsed ? 0 : undefined,\n transition: 'height 0.3s cubic-bezier(.4,0,.2,1), padding 0.3s',\n }}\n >\n <div\n style={{\n opacity: collapsed ? 0 : 1,\n transition: 'opacity 0.3s',\n gap: 8,\n }}\n >\n <Checkbox\n key=\"all-none-checkbox\"\n indeterminate={\n checkedAssets.length > 0 &&\n checkedAssets.length < assetNames.length\n }\n checked={checkedAssets.length === assetNames.length}\n onChange={(e) =>\n setCheckedAssets(e.target.checked ? assetNames : [])\n }\n style={{ marginBottom: 4 }}\n >\n {'ALL / NONE'}\n </Checkbox>\n <Checkbox.Group\n key=\"asset-checkbox-group\"\n options={assetNames}\n value={checkedAssets}\n onChange={setCheckedAssets}\n style={{ display: 'flex', gap: 8, fontWeight: 500 }}\n />\n </div>\n </Card>\n <div style={{ flex: 1 }}>\n <TreeMap\n ref={chartRef}\n treeData={filteredTreeData}\n onChartClick={onChartClick}\n />\n </div>\n </Space>\n </div>\n );\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
@@ -7,3 +7,13 @@ export declare enum ChartTypes {
7
7
  Loader = 4,
8
8
  Normal = 5
9
9
  }
10
+ export declare const BUNDLE_ANALYZER_COLORS: {
11
+ readonly green: readonly [string, string, string, string, string, string, string];
12
+ readonly blue: readonly [string, string, string, string, string, string, string];
13
+ readonly purple: readonly [string, string, string, string, string, string, string];
14
+ readonly yellow: readonly [string, string, string, string, string, string, string];
15
+ readonly grey: readonly [string, string, string, string, string, string, string];
16
+ };
17
+ type ColorGroup = keyof typeof BUNDLE_ANALYZER_COLORS;
18
+ export declare const COLOR_GROUPS: ColorGroup[];
19
+ export {};
@@ -36,7 +36,69 @@ var ChartTypes = /* @__PURE__ */ ((ChartTypes2) => {
36
36
  ChartTypes2[ChartTypes2["Normal"] = 5] = "Normal";
37
37
  return ChartTypes2;
38
38
  })(ChartTypes || {});
39
+ const BUNDLE_ANALYZER_COLORS = {
40
+ green: [
41
+ hexToRgba("#32b26a", 0.6),
42
+ hexToRgba("#5fcf92", 0.6),
43
+ hexToRgba("#8ee2b6", 0.8),
44
+ hexToRgba("#b7e1cd", 1),
45
+ hexToRgba("#cdeee0", 1),
46
+ hexToRgba("#e0f7ef", 1),
47
+ hexToRgba("#c8e6d6", 1)
48
+ ],
49
+ blue: [
50
+ hexToRgba("#3498f7", 0.6),
51
+ hexToRgba("#5eb3fa", 0.6),
52
+ hexToRgba("#8ccafc", 0.8),
53
+ hexToRgba("#b3d8f8", 1),
54
+ hexToRgba("#cde6fa", 1),
55
+ hexToRgba("#e0f2fd", 1),
56
+ hexToRgba("#c8e0ef", 1)
57
+ ],
58
+ purple: [
59
+ hexToRgba("#a04ddb", 0.6),
60
+ hexToRgba("#b26ef0", 0.6),
61
+ hexToRgba("#c49ff5", 0.8),
62
+ hexToRgba("#d1b3e6", 1),
63
+ hexToRgba("#e0c8f2", 1),
64
+ hexToRgba("#f0e6fa", 1),
65
+ hexToRgba("#d6c8e6", 1)
66
+ ],
67
+ yellow: [
68
+ hexToRgba("#ffe066", 0.6),
69
+ hexToRgba("#ffec80", 0.6),
70
+ hexToRgba("#fff599", 0.8),
71
+ hexToRgba("#fff9c4", 1),
72
+ hexToRgba("#fffbe0", 1),
73
+ hexToRgba("#fffde7", 1),
74
+ hexToRgba("#f5f2c8", 1)
75
+ ],
76
+ grey: [
77
+ hexToRgba("#7a7a7a", 0.7),
78
+ hexToRgba("#969696", 0.7),
79
+ hexToRgba("#b0b0b0", 0.8),
80
+ hexToRgba("#c8c8c8", 1),
81
+ hexToRgba("#dcdcdc", 1),
82
+ hexToRgba("#ededed", 1),
83
+ hexToRgba("#f7f7f7", 1)
84
+ ]
85
+ };
86
+ function hexToRgba(hex, alpha = 1) {
87
+ const r = parseInt(hex.slice(1, 3), 16);
88
+ const g = parseInt(hex.slice(3, 5), 16);
89
+ const b = parseInt(hex.slice(5, 7), 16);
90
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
91
+ }
92
+ const COLOR_GROUPS = [
93
+ "blue",
94
+ "purple",
95
+ "yellow",
96
+ "grey",
97
+ "green"
98
+ ];
39
99
  export {
100
+ BUNDLE_ANALYZER_COLORS,
101
+ COLOR_GROUPS,
40
102
  ChartTypes,
41
103
  PALETTE_COLORS
42
104
  };
@@ -1 +1 @@
1
- {"version":3,"mappings":"AAAO,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AANU,SAAAA;AAAA","names":["ChartTypes"],"ignoreList":[],"sources":["../../../src/components/Charts/constants.ts"],"sourcesContent":["export const PALETTE_COLORS = [\n '#F2793D',\n '#F28B24',\n '#F2A200',\n '#F5CC00',\n '#F5E000',\n '#A3D900',\n '#66CC00',\n '#0AC419',\n '#0AC496',\n '#0AC7D1',\n '#00A8E0',\n '#1471F5',\n '#4060FF',\n '#7559FF',\n '#884DFF',\n '#A526FF',\n '#BA39E5',\n '#C700D9',\n '#D900B5',\n '#E50099',\n '#E52E6B',\n '#F24957',\n '#30B2F2',\n '#00BF70',\n '#5959FF',\n '#9F40FF',\n '#528BFF',\n];\n\nexport enum ChartTypes {\n Bootstrap,\n Compile,\n Done,\n Minify,\n Loader,\n Normal,\n}\n"]}
1
+ {"version":3,"mappings":"AAAO,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AANU,SAAAA;AAAA;AASL,MAAM,yBAAyB;AAAA,EACpC,OAAO;AAAA,IACL,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,GAAG;AAAA,IACxB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,IACtB,UAAU,WAAW,CAAC;AAAA,EACxB;AACF;AAEA,SAAS,UAAU,KAAa,QAAQ,GAAG;AACzC,QAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AACtC,QAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AACtC,QAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AACtC,SAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK;AACxC;AAGO,MAAM,eAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF","names":["ChartTypes"],"ignoreList":[],"sources":["../../../src/components/Charts/constants.ts"],"sourcesContent":["export const PALETTE_COLORS = [\n '#F2793D',\n '#F28B24',\n '#F2A200',\n '#F5CC00',\n '#F5E000',\n '#A3D900',\n '#66CC00',\n '#0AC419',\n '#0AC496',\n '#0AC7D1',\n '#00A8E0',\n '#1471F5',\n '#4060FF',\n '#7559FF',\n '#884DFF',\n '#A526FF',\n '#BA39E5',\n '#C700D9',\n '#D900B5',\n '#E50099',\n '#E52E6B',\n '#F24957',\n '#30B2F2',\n '#00BF70',\n '#5959FF',\n '#9F40FF',\n '#528BFF',\n];\n\nexport enum ChartTypes {\n Bootstrap,\n Compile,\n Done,\n Minify,\n Loader,\n Normal,\n}\n\nexport const BUNDLE_ANALYZER_COLORS = {\n green: [\n hexToRgba('#32b26a', 0.6),\n hexToRgba('#5fcf92', 0.6),\n hexToRgba('#8ee2b6', 0.8),\n hexToRgba('#b7e1cd', 1),\n hexToRgba('#cdeee0', 1),\n hexToRgba('#e0f7ef', 1),\n hexToRgba('#c8e6d6', 1),\n ],\n blue: [\n hexToRgba('#3498f7', 0.6),\n hexToRgba('#5eb3fa', 0.6),\n hexToRgba('#8ccafc', 0.8),\n hexToRgba('#b3d8f8', 1),\n hexToRgba('#cde6fa', 1),\n hexToRgba('#e0f2fd', 1),\n hexToRgba('#c8e0ef', 1),\n ],\n purple: [\n hexToRgba('#a04ddb', 0.6),\n hexToRgba('#b26ef0', 0.6),\n hexToRgba('#c49ff5', 0.8),\n hexToRgba('#d1b3e6', 1),\n hexToRgba('#e0c8f2', 1),\n hexToRgba('#f0e6fa', 1),\n hexToRgba('#d6c8e6', 1),\n ],\n yellow: [\n hexToRgba('#ffe066', 0.6),\n hexToRgba('#ffec80', 0.6),\n hexToRgba('#fff599', 0.8),\n hexToRgba('#fff9c4', 1),\n hexToRgba('#fffbe0', 1),\n hexToRgba('#fffde7', 1),\n hexToRgba('#f5f2c8', 1),\n ],\n grey: [\n hexToRgba('#7a7a7a', 0.7),\n hexToRgba('#969696', 0.7),\n hexToRgba('#b0b0b0', 0.8),\n hexToRgba('#c8c8c8', 1),\n hexToRgba('#dcdcdc', 1),\n hexToRgba('#ededed', 1),\n hexToRgba('#f7f7f7', 1),\n ],\n} as const;\n\nfunction hexToRgba(hex: string, alpha = 1) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\ntype ColorGroup = keyof typeof BUNDLE_ANALYZER_COLORS;\nexport const COLOR_GROUPS: ColorGroup[] = [\n 'blue',\n 'purple',\n 'yellow',\n 'grey',\n 'green',\n];\n"]}
@@ -76,7 +76,8 @@ const HelpCenter = () => {
76
76
  },
77
77
  onClick: () => window.open(link, "_blank"),
78
78
  children: t(title)
79
- }
79
+ },
80
+ idx
80
81
  );
81
82
  }) })
82
83
  ] }) });
@@ -1 +1 @@
1
- {"version":3,"mappings":"AA0DU,cACA,YADA;AA1DV,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B,SAAS,YAAY;AACrB,SAAS,eAAe;AAExB,OAAO,YAAY;AAEnB,MAAM,OAAO;AAAA,EACX;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,MAAM,aAAa,MAAM;AAC9B,QAAM,EAAE,EAAE,IAAI,QAAQ;AAEtB,SACE,oBAAC,QAAK,OAAO,EAAE,OAAO,QAAQ,cAAc,OAAO,GACjD,+BAAC,SACC;AAAA,yBAAC,SAAI,WAAW,OAAO,OACrB;AAAA,0BAAC,UAAM,YAAE,aAAa,GAAE;AAAA,MACxB;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,SAAS,EAAE;AAAA,UAC3D,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO,KAAK,6BAA6B,QAAQ;AAAA,UACnD;AAAA,UAEA;AAAA,gCAAC,UAAK,OAAO,EAAE,aAAa,MAAM,GAAG,kBAAI;AAAA,YACzC,oBAAC,iBAAc,OAAO,EAAE,UAAU,OAAO,GAAG;AAAA;AAAA;AAAA,MAC9C;AAAA,OACF;AAAA,IACA,oBAAC,SAAI,WAAW,OAAO,WACpB,eAAK,IAAI,CAAC,EAAE,OAAO,KAAK,GAAG,QAAQ;AAClC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,OAAO;AAAA,UAClB,OAAO;AAAA,YACL,cAAc,MAAM,KAAK,SAAS,IAAI,SAAS;AAAA,UACjD;AAAA,UACA,SAAS,MAAM,OAAO,KAAK,MAAM,QAAQ;AAAA,UAExC,YAAE,KAAK;AAAA;AAAA,MACV;AAAA,IAEJ,CAAC,GACH;AAAA,KACF,GACF;AAEJ","names":[],"ignoreList":[],"sources":["../../../src/components/Overall/help-center.tsx"],"sourcesContent":["import { Button } from 'antd';\nimport { RightOutlined } from '@ant-design/icons';\n\nimport { Card } from '../Card';\nimport { useI18n } from '../../utils';\n\nimport styles from './help-center.module';\n\nconst data = [\n {\n title: 'FAQ',\n link: 'https://rsdoctor.rs/guide/more/faq',\n },\n {\n title: 'Introduction',\n link: 'https://rsdoctor.rs/guide/start/intro',\n },\n {\n title: 'Bundle Alerts',\n link: 'https://rsdoctor.rs/guide/usage/bundle-alerts',\n },\n {\n title: 'Bundle Overall',\n link: 'https://rsdoctor.rs/guide/usage/bundle-overall',\n },\n {\n title: 'Bundle Analysis',\n link: 'https://rsdoctor.rs/guide/usage/bundle-size',\n },\n {\n title: 'Compilation Alerts',\n link: 'https://rsdoctor.rs/guide/usage/compile-alerts',\n },\n {\n title: 'Compile Overall',\n link: 'https://rsdoctor.rs/guide/usage/compile-overall',\n },\n {\n title: 'Loaders Analysis',\n link: 'https://rsdoctor.rs/guide/usage/loaders-analysis',\n },\n {\n title: 'Loaders Timeline',\n link: 'https://rsdoctor.rs/guide/usage/loaders-timeline',\n },\n {\n title: 'Plugin Analysis',\n link: 'https://rsdoctor.rs/guide/usage/plugins-analysis',\n },\n];\n\nexport const HelpCenter = () => {\n const { t } = useI18n();\n\n return (\n <Card style={{ width: '100%', borderRadius: '12px' }}>\n <div>\n <div className={styles.title}>\n <span>{t('Help Center')}</span>\n <Button\n style={{ display: 'flex', alignItems: 'center', padding: 0 }}\n type=\"link\"\n onClick={() => {\n window.open('https://rsdoctor.rs/index', '_blank');\n }}\n >\n <span style={{ marginRight: '3px' }}>More</span>\n <RightOutlined style={{ fontSize: '10px' }} />\n </Button>\n </div>\n <div className={styles.container}>\n {data.map(({ title, link }, idx) => {\n return (\n <div\n className={styles.content}\n style={{\n marginBottom: idx < data.length - 2 ? '16px' : 0,\n }}\n onClick={() => window.open(link, '_blank')}\n >\n {t(title)}\n </div>\n );\n })}\n </div>\n </div>\n </Card>\n );\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
1
+ {"version":3,"mappings":"AA0DU,cACA,YADA;AA1DV,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B,SAAS,YAAY;AACrB,SAAS,eAAe;AAExB,OAAO,YAAY;AAEnB,MAAM,OAAO;AAAA,EACX;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,MAAM,aAAa,MAAM;AAC9B,QAAM,EAAE,EAAE,IAAI,QAAQ;AAEtB,SACE,oBAAC,QAAK,OAAO,EAAE,OAAO,QAAQ,cAAc,OAAO,GACjD,+BAAC,SACC;AAAA,yBAAC,SAAI,WAAW,OAAO,OACrB;AAAA,0BAAC,UAAM,YAAE,aAAa,GAAE;AAAA,MACxB;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,SAAS,EAAE;AAAA,UAC3D,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO,KAAK,6BAA6B,QAAQ;AAAA,UACnD;AAAA,UAEA;AAAA,gCAAC,UAAK,OAAO,EAAE,aAAa,MAAM,GAAG,kBAAI;AAAA,YACzC,oBAAC,iBAAc,OAAO,EAAE,UAAU,OAAO,GAAG;AAAA;AAAA;AAAA,MAC9C;AAAA,OACF;AAAA,IACA,oBAAC,SAAI,WAAW,OAAO,WACpB,eAAK,IAAI,CAAC,EAAE,OAAO,KAAK,GAAG,QAAQ;AAClC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW,OAAO;AAAA,UAClB,OAAO;AAAA,YACL,cAAc,MAAM,KAAK,SAAS,IAAI,SAAS;AAAA,UACjD;AAAA,UACA,SAAS,MAAM,OAAO,KAAK,MAAM,QAAQ;AAAA,UAExC,YAAE,KAAK;AAAA;AAAA,QAPH;AAAA,MAQP;AAAA,IAEJ,CAAC,GACH;AAAA,KACF,GACF;AAEJ","names":[],"ignoreList":[],"sources":["../../../src/components/Overall/help-center.tsx"],"sourcesContent":["import { Button } from 'antd';\nimport { RightOutlined } from '@ant-design/icons';\n\nimport { Card } from '../Card';\nimport { useI18n } from '../../utils';\n\nimport styles from './help-center.module';\n\nconst data = [\n {\n title: 'FAQ',\n link: 'https://rsdoctor.rs/guide/more/faq',\n },\n {\n title: 'Introduction',\n link: 'https://rsdoctor.rs/guide/start/intro',\n },\n {\n title: 'Bundle Alerts',\n link: 'https://rsdoctor.rs/guide/usage/bundle-alerts',\n },\n {\n title: 'Bundle Overall',\n link: 'https://rsdoctor.rs/guide/usage/bundle-overall',\n },\n {\n title: 'Bundle Analysis',\n link: 'https://rsdoctor.rs/guide/usage/bundle-size',\n },\n {\n title: 'Compilation Alerts',\n link: 'https://rsdoctor.rs/guide/usage/compile-alerts',\n },\n {\n title: 'Compile Overall',\n link: 'https://rsdoctor.rs/guide/usage/compile-overall',\n },\n {\n title: 'Loaders Analysis',\n link: 'https://rsdoctor.rs/guide/usage/loaders-analysis',\n },\n {\n title: 'Loaders Timeline',\n link: 'https://rsdoctor.rs/guide/usage/loaders-timeline',\n },\n {\n title: 'Plugin Analysis',\n link: 'https://rsdoctor.rs/guide/usage/plugins-analysis',\n },\n];\n\nexport const HelpCenter = () => {\n const { t } = useI18n();\n\n return (\n <Card style={{ width: '100%', borderRadius: '12px' }}>\n <div>\n <div className={styles.title}>\n <span>{t('Help Center')}</span>\n <Button\n style={{ display: 'flex', alignItems: 'center', padding: 0 }}\n type=\"link\"\n onClick={() => {\n window.open('https://rsdoctor.rs/index', '_blank');\n }}\n >\n <span style={{ marginRight: '3px' }}>More</span>\n <RightOutlined style={{ fontSize: '10px' }} />\n </Button>\n </div>\n <div className={styles.container}>\n {data.map(({ title, link }, idx) => {\n return (\n <div\n key={idx}\n className={styles.content}\n style={{\n marginBottom: idx < data.length - 2 ? '16px' : 0,\n }}\n onClick={() => window.open(link, '_blank')}\n >\n {t(title)}\n </div>\n );\n })}\n </div>\n </div>\n </Card>\n );\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}