funuicss 2.5.14 → 2.6.1
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.
- package/css/fun.css +133 -337
- package/index.d.ts +4 -0
- package/index.js +9 -1
- package/index.tsx +4 -0
- package/package.json +3 -2
- package/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/ui/appbar/AppBar.d.ts +4 -1
- package/ui/appbar/AppBar.js +9 -5
- package/ui/appbar/AppBar.tsx +17 -1
- package/ui/chart/Bar.d.ts +23 -0
- package/ui/chart/Bar.js +56 -0
- package/ui/chart/Bar.tsx +86 -0
- package/ui/chart/Line.d.ts +28 -0
- package/ui/chart/Line.js +37 -0
- package/ui/chart/Line.tsx +105 -0
- package/ui/chart/Pie.d.ts +16 -0
- package/ui/chart/Pie.js +39 -0
- package/ui/chart/Pie.tsx +99 -0
- package/ui/input/Input.js +2 -1
- package/ui/input/Input.tsx +1 -1
- package/ui/sidebar/SideBar.d.ts +17 -8
- package/ui/sidebar/SideBar.js +89 -44
- package/ui/sidebar/SideBar.tsx +180 -53
- package/ui/specials/Circle.d.ts +2 -1
- package/ui/specials/Circle.js +2 -2
- package/ui/specials/Circle.tsx +4 -2
- package/ui/text/Text.d.ts +1 -1
- package/ui/text/Text.js +3 -2
- package/ui/text/Text.tsx +3 -2
- package/ui/theme/theme.js +3 -3
- package/ui/theme/theme.tsx +3 -3
- package/utils/getCssVariable.d.ts +1 -0
- package/utils/getCssVariable.js +10 -0
- package/utils/getCssVariable.tsx +8 -0
package/ui/appbar/AppBar.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ interface NavbarProps {
|
|
|
12
12
|
sidebarTrigger?: React.ReactNode;
|
|
13
13
|
transparent?: boolean;
|
|
14
14
|
sideBar?: number;
|
|
15
|
+
hasSidebar?: boolean;
|
|
16
|
+
sidebarOpen?: boolean;
|
|
17
|
+
openSidebar?: () => void;
|
|
15
18
|
}
|
|
16
|
-
export default function AppBar({ fixedTop, funcss, padding, fixedBottom, justify, left, center, right, sideBar, sidebarTrigger, transparent, }: NavbarProps): React.JSX.Element;
|
|
19
|
+
export default function AppBar({ fixedTop, funcss, padding, fixedBottom, justify, left, center, right, sideBar, sidebarTrigger, transparent, hasSidebar, openSidebar, sidebarOpen }: NavbarProps): React.JSX.Element;
|
|
17
20
|
export {};
|
package/ui/appbar/AppBar.js
CHANGED
|
@@ -43,9 +43,9 @@ var react_1 = require("react");
|
|
|
43
43
|
var navigation_1 = require("next/navigation"); // <-- Updated import
|
|
44
44
|
var Hamburger_1 = __importDefault(require("./Hamburger"));
|
|
45
45
|
function AppBar(_a) {
|
|
46
|
-
var fixedTop = _a.fixedTop, funcss = _a.funcss, padding = _a.padding, fixedBottom = _a.fixedBottom, justify = _a.justify, left = _a.left, center = _a.center, right = _a.right, sideBar = _a.sideBar, sidebarTrigger = _a.sidebarTrigger, transparent = _a.transparent;
|
|
47
|
-
var
|
|
48
|
-
var
|
|
46
|
+
var fixedTop = _a.fixedTop, funcss = _a.funcss, padding = _a.padding, fixedBottom = _a.fixedBottom, justify = _a.justify, left = _a.left, center = _a.center, right = _a.right, sideBar = _a.sideBar, sidebarTrigger = _a.sidebarTrigger, transparent = _a.transparent, hasSidebar = _a.hasSidebar, openSidebar = _a.openSidebar, _b = _a.sidebarOpen, sidebarOpen = _b === void 0 ? false : _b;
|
|
47
|
+
var _c = (0, react_1.useState)(false), isMobileMenuOpen = _c[0], setIsMobileMenuOpen = _c[1];
|
|
48
|
+
var _d = (0, react_1.useState)(false), isMobileScreen = _d[0], setIsMobileScreen = _d[1];
|
|
49
49
|
var pathname = (0, navigation_1.usePathname)(); // <-- New hook to detect path changes
|
|
50
50
|
var toggleMenu = function () { return setIsMobileMenuOpen(function (prev) { return !prev; }); };
|
|
51
51
|
var closeMenu = function () { return setIsMobileMenuOpen(false); };
|
|
@@ -69,7 +69,9 @@ function AppBar(_a) {
|
|
|
69
69
|
var isOpen = _a.isOpen;
|
|
70
70
|
return React.createElement(Hamburger_1.default, { isOpen: isOpen });
|
|
71
71
|
};
|
|
72
|
-
return (React.createElement("nav", {
|
|
72
|
+
return (React.createElement("nav", {
|
|
73
|
+
// the id will be used to get the height for the sidebar in the sidebar file
|
|
74
|
+
id: 'appBar', className: "navigation-bar\n ".concat(isMobileMenuOpen ? 'navbar-mobile-open' : '', "\n ").concat(funcss || '', "\n ").concat(fixedTop ? 'fixed_top_navbar' : '', "\n ").concat(sideBar ? 'there_is_sidebar' : '', "\n ").concat(transparent ? 'transparent' : '', "\n ").concat(fixedBottom ? 'fixedBottom' : '', "\n "), style: {
|
|
73
75
|
padding: "".concat(padding || ''),
|
|
74
76
|
justifyContent: "".concat(justify || ''),
|
|
75
77
|
} },
|
|
@@ -79,5 +81,7 @@ function AppBar(_a) {
|
|
|
79
81
|
React.createElement(Trigger, { isOpen: isMobileMenuOpen })))),
|
|
80
82
|
React.createElement("div", { className: "linkWrapper" }, center),
|
|
81
83
|
React.createElement("div", { className: "linkWrapper" }, right),
|
|
82
|
-
isMobileScreen && !isMobileMenuOpen && (React.createElement(
|
|
84
|
+
isMobileScreen && !isMobileMenuOpen && (React.createElement(React.Fragment, null, hasSidebar ?
|
|
85
|
+
React.createElement("span", { className: "sidebar-trigger pointer hover-text-primary", onClick: openSidebar }, sidebarTrigger || React.createElement(Trigger, { isOpen: sidebarOpen }))
|
|
86
|
+
: React.createElement("span", { className: "sidebar-trigger pointer hover-text-primary", onClick: toggleMenu }, sidebarTrigger || React.createElement(Trigger, { isOpen: isMobileMenuOpen }))))));
|
|
83
87
|
}
|
package/ui/appbar/AppBar.tsx
CHANGED
|
@@ -17,6 +17,9 @@ interface NavbarProps {
|
|
|
17
17
|
sidebarTrigger?: React.ReactNode;
|
|
18
18
|
transparent?: boolean;
|
|
19
19
|
sideBar?: number;
|
|
20
|
+
hasSidebar?: boolean;
|
|
21
|
+
sidebarOpen?: boolean;
|
|
22
|
+
openSidebar?: () => void;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
export default function AppBar({
|
|
@@ -31,6 +34,9 @@ export default function AppBar({
|
|
|
31
34
|
sideBar,
|
|
32
35
|
sidebarTrigger,
|
|
33
36
|
transparent,
|
|
37
|
+
hasSidebar,
|
|
38
|
+
openSidebar,
|
|
39
|
+
sidebarOpen = false
|
|
34
40
|
}: NavbarProps) {
|
|
35
41
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
|
36
42
|
const [isMobileScreen, setIsMobileScreen] = useState(false);
|
|
@@ -64,6 +70,8 @@ export default function AppBar({
|
|
|
64
70
|
|
|
65
71
|
return (
|
|
66
72
|
<nav
|
|
73
|
+
// the id will be used to get the height for the sidebar in the sidebar file
|
|
74
|
+
id='appBar'
|
|
67
75
|
className={`navigation-bar
|
|
68
76
|
${isMobileMenuOpen ? 'navbar-mobile-open' : ''}
|
|
69
77
|
${funcss || ''}
|
|
@@ -90,9 +98,17 @@ export default function AppBar({
|
|
|
90
98
|
<div className="linkWrapper">{right}</div>
|
|
91
99
|
|
|
92
100
|
{isMobileScreen && !isMobileMenuOpen && (
|
|
93
|
-
|
|
101
|
+
<>
|
|
102
|
+
{
|
|
103
|
+
hasSidebar ?
|
|
104
|
+
<span className="sidebar-trigger pointer hover-text-primary" onClick={openSidebar}>
|
|
105
|
+
{sidebarTrigger || <Trigger isOpen={sidebarOpen} />}
|
|
106
|
+
</span>
|
|
107
|
+
: <span className="sidebar-trigger pointer hover-text-primary" onClick={toggleMenu}>
|
|
94
108
|
{sidebarTrigger || <Trigger isOpen={isMobileMenuOpen} />}
|
|
95
109
|
</span>
|
|
110
|
+
}
|
|
111
|
+
</>
|
|
96
112
|
)}
|
|
97
113
|
</nav>
|
|
98
114
|
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type DataItem = {
|
|
3
|
+
label: string;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
type ChartSeries = {
|
|
7
|
+
dataKey: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
color?: string;
|
|
10
|
+
};
|
|
11
|
+
interface BarsProps {
|
|
12
|
+
data: DataItem[];
|
|
13
|
+
series: ChartSeries[];
|
|
14
|
+
showGrid?: boolean;
|
|
15
|
+
funcss?: string;
|
|
16
|
+
showLegend?: boolean;
|
|
17
|
+
showXAxis?: boolean;
|
|
18
|
+
showYAxis?: boolean;
|
|
19
|
+
barRadius?: number;
|
|
20
|
+
barSize?: number;
|
|
21
|
+
}
|
|
22
|
+
declare const Bars: React.FC<BarsProps>;
|
|
23
|
+
export default Bars;
|
package/ui/chart/Bar.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
14
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
15
|
+
var t = {};
|
|
16
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
17
|
+
t[p] = s[p];
|
|
18
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
19
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
20
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
21
|
+
t[p[i]] = s[p[i]];
|
|
22
|
+
}
|
|
23
|
+
return t;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
var react_1 = __importDefault(require("react"));
|
|
30
|
+
var recharts_1 = require("recharts");
|
|
31
|
+
// Resolve 'primary' to actual CSS variable value like var(--primary)
|
|
32
|
+
var resolveColor = function (color) {
|
|
33
|
+
if (!color)
|
|
34
|
+
return getCssVar('--primary') || '#8884d8';
|
|
35
|
+
if (color.startsWith('#'))
|
|
36
|
+
return color;
|
|
37
|
+
return getCssVar("--".concat(color)) || color;
|
|
38
|
+
};
|
|
39
|
+
// Helper to get CSS variable value from :root
|
|
40
|
+
var getCssVar = function (varName) {
|
|
41
|
+
if (typeof window === 'undefined')
|
|
42
|
+
return '';
|
|
43
|
+
return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
|
|
44
|
+
};
|
|
45
|
+
var Bars = function (_a) {
|
|
46
|
+
var data = _a.data, series = _a.series, _b = _a.showGrid, showGrid = _b === void 0 ? true : _b, _c = _a.showLegend, showLegend = _c === void 0 ? true : _c, _d = _a.showXAxis, showXAxis = _d === void 0 ? true : _d, _e = _a.showYAxis, showYAxis = _e === void 0 ? false : _e, _f = _a.barRadius, barRadius = _f === void 0 ? 6 : _f, funcss = _a.funcss, _g = _a.barSize, barSize = _g === void 0 ? 30 : _g, rest = __rest(_a, ["data", "series", "showGrid", "showLegend", "showXAxis", "showYAxis", "barRadius", "funcss", "barSize"]);
|
|
47
|
+
return (react_1.default.createElement(recharts_1.ResponsiveContainer, __assign({ className: funcss || "" }, rest, { width: "100%" }),
|
|
48
|
+
react_1.default.createElement(recharts_1.BarChart, { data: data },
|
|
49
|
+
showGrid && react_1.default.createElement(recharts_1.CartesianGrid, { strokeDasharray: "3 3" }),
|
|
50
|
+
showXAxis && react_1.default.createElement(recharts_1.XAxis, { dataKey: "label" }),
|
|
51
|
+
showYAxis && react_1.default.createElement(recharts_1.YAxis, null),
|
|
52
|
+
react_1.default.createElement(recharts_1.Tooltip, null),
|
|
53
|
+
showLegend && react_1.default.createElement(recharts_1.Legend, null),
|
|
54
|
+
series.map(function (s) { return (react_1.default.createElement(recharts_1.Bar, { key: s.dataKey, dataKey: s.dataKey, name: s.label || s.dataKey, fill: resolveColor(s.color), radius: [barRadius, barRadius, 0, 0], barSize: barSize })); }))));
|
|
55
|
+
};
|
|
56
|
+
exports.default = Bars;
|
package/ui/chart/Bar.tsx
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import {
|
|
5
|
+
BarChart,
|
|
6
|
+
Bar,
|
|
7
|
+
XAxis,
|
|
8
|
+
YAxis,
|
|
9
|
+
Tooltip,
|
|
10
|
+
Legend,
|
|
11
|
+
CartesianGrid,
|
|
12
|
+
ResponsiveContainer,
|
|
13
|
+
} from 'recharts';
|
|
14
|
+
|
|
15
|
+
type DataItem = {
|
|
16
|
+
label: string;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type ChartSeries = {
|
|
21
|
+
dataKey: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
color?: string; // Can be a CSS variable name like 'primary' or a hex code
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
interface BarsProps {
|
|
27
|
+
data: DataItem[];
|
|
28
|
+
series: ChartSeries[];
|
|
29
|
+
showGrid?: boolean;
|
|
30
|
+
funcss?: string,
|
|
31
|
+
showLegend?: boolean;
|
|
32
|
+
showXAxis?: boolean;
|
|
33
|
+
showYAxis?: boolean;
|
|
34
|
+
barRadius?: number;
|
|
35
|
+
barSize?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Resolve 'primary' to actual CSS variable value like var(--primary)
|
|
39
|
+
const resolveColor = (color?: string): string => {
|
|
40
|
+
if (!color) return getCssVar('--primary') || '#8884d8';
|
|
41
|
+
if (color.startsWith('#')) return color;
|
|
42
|
+
return getCssVar(`--${color}`) || color;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// Helper to get CSS variable value from :root
|
|
46
|
+
const getCssVar = (varName: string): string => {
|
|
47
|
+
if (typeof window === 'undefined') return '';
|
|
48
|
+
return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const Bars: React.FC<BarsProps> = ({
|
|
52
|
+
data,
|
|
53
|
+
series,
|
|
54
|
+
showGrid = true,
|
|
55
|
+
showLegend = true,
|
|
56
|
+
showXAxis = true,
|
|
57
|
+
showYAxis = false,
|
|
58
|
+
barRadius = 6,
|
|
59
|
+
funcss,
|
|
60
|
+
barSize = 30,
|
|
61
|
+
...rest
|
|
62
|
+
}) => {
|
|
63
|
+
return (
|
|
64
|
+
<ResponsiveContainer className={funcss || ``} {...rest} width="100%" >
|
|
65
|
+
<BarChart data={data}>
|
|
66
|
+
{showGrid && <CartesianGrid strokeDasharray="3 3" />}
|
|
67
|
+
{showXAxis && <XAxis dataKey="label" />}
|
|
68
|
+
{showYAxis && <YAxis />}
|
|
69
|
+
<Tooltip />
|
|
70
|
+
{showLegend && <Legend />}
|
|
71
|
+
{series.map((s) => (
|
|
72
|
+
<Bar
|
|
73
|
+
key={s.dataKey}
|
|
74
|
+
dataKey={s.dataKey}
|
|
75
|
+
name={s.label || s.dataKey}
|
|
76
|
+
fill={resolveColor(s.color)}
|
|
77
|
+
radius={[barRadius, barRadius, 0, 0]}
|
|
78
|
+
barSize={barSize}
|
|
79
|
+
/>
|
|
80
|
+
))}
|
|
81
|
+
</BarChart>
|
|
82
|
+
</ResponsiveContainer>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export default Bars;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type DataItem = {
|
|
3
|
+
label: string;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
type ChartSeries = {
|
|
7
|
+
dataKey: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
color?: string;
|
|
10
|
+
strokeWidth?: number;
|
|
11
|
+
dot?: boolean;
|
|
12
|
+
fromColor?: string;
|
|
13
|
+
toColor?: string;
|
|
14
|
+
};
|
|
15
|
+
interface AreaChartProps {
|
|
16
|
+
data: DataItem[];
|
|
17
|
+
series: ChartSeries[];
|
|
18
|
+
fromColor?: string;
|
|
19
|
+
toColor?: string;
|
|
20
|
+
showGrid?: boolean;
|
|
21
|
+
showLegend?: boolean;
|
|
22
|
+
showXAxis?: boolean;
|
|
23
|
+
showYAxis?: boolean;
|
|
24
|
+
funcss?: string;
|
|
25
|
+
curveType?: 'linear' | 'monotone' | 'step' | 'basis';
|
|
26
|
+
}
|
|
27
|
+
declare const Lines: React.FC<AreaChartProps>;
|
|
28
|
+
export default Lines;
|
package/ui/chart/Line.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var recharts_1 = require("recharts");
|
|
9
|
+
var getCssVar = function (varName) {
|
|
10
|
+
var _a;
|
|
11
|
+
if (typeof window === 'undefined')
|
|
12
|
+
return '';
|
|
13
|
+
return ((_a = getComputedStyle(document.documentElement).getPropertyValue("--".concat(varName))) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
14
|
+
};
|
|
15
|
+
var resolveStrokeColor = function (color) {
|
|
16
|
+
if (!color)
|
|
17
|
+
return getCssVar('primary') || '#8884d8';
|
|
18
|
+
if (color.startsWith('#'))
|
|
19
|
+
return color;
|
|
20
|
+
return getCssVar(color) || color;
|
|
21
|
+
};
|
|
22
|
+
var Lines = function (_a) {
|
|
23
|
+
var data = _a.data, series = _a.series, fromColor = _a.fromColor, toColor = _a.toColor, _b = _a.showGrid, showGrid = _b === void 0 ? true : _b, _c = _a.showLegend, showLegend = _c === void 0 ? true : _c, _d = _a.showXAxis, showXAxis = _d === void 0 ? true : _d, _e = _a.showYAxis, showYAxis = _e === void 0 ? false : _e, funcss = _a.funcss, _f = _a.curveType, curveType = _f === void 0 ? 'monotone' : _f;
|
|
24
|
+
return (react_1.default.createElement(recharts_1.ResponsiveContainer, { width: "100%", className: funcss },
|
|
25
|
+
react_1.default.createElement(recharts_1.AreaChart, { data: data },
|
|
26
|
+
react_1.default.createElement("defs", null,
|
|
27
|
+
react_1.default.createElement("linearGradient", { id: "colorUv", x1: "0", y1: "0", x2: "0", y2: "1" },
|
|
28
|
+
react_1.default.createElement("stop", { offset: "5%", stopColor: getCssVar(fromColor || 'primary'), stopOpacity: 0.8 }),
|
|
29
|
+
react_1.default.createElement("stop", { offset: "95%", stopColor: getCssVar(toColor || 'primary200'), stopOpacity: 0 }))),
|
|
30
|
+
showGrid && react_1.default.createElement(recharts_1.CartesianGrid, { strokeDasharray: "3 3" }),
|
|
31
|
+
showXAxis && react_1.default.createElement(recharts_1.XAxis, { dataKey: "label", angle: 45 }),
|
|
32
|
+
showYAxis && react_1.default.createElement(recharts_1.YAxis, null),
|
|
33
|
+
react_1.default.createElement(recharts_1.Tooltip, null),
|
|
34
|
+
showLegend && react_1.default.createElement(recharts_1.Legend, null),
|
|
35
|
+
series.map(function (s, index) { return (react_1.default.createElement(recharts_1.Area, { key: s.dataKey, type: curveType, dataKey: s.dataKey, name: s.label || s.dataKey, stroke: resolveStrokeColor(s.color), fill: "url(#colorUv)", fillOpacity: 1, strokeWidth: s.strokeWidth || 2, dot: s.dot !== false ? { r: 4 } : false, activeDot: { r: 8 } })); }))));
|
|
36
|
+
};
|
|
37
|
+
exports.default = Lines;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
AreaChart,
|
|
6
|
+
Area,
|
|
7
|
+
XAxis,
|
|
8
|
+
YAxis,
|
|
9
|
+
Tooltip,
|
|
10
|
+
Legend,
|
|
11
|
+
CartesianGrid,
|
|
12
|
+
ResponsiveContainer,
|
|
13
|
+
} from 'recharts';
|
|
14
|
+
|
|
15
|
+
type DataItem = {
|
|
16
|
+
label: string;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type ChartSeries = {
|
|
21
|
+
dataKey: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
color?: string;
|
|
24
|
+
strokeWidth?: number;
|
|
25
|
+
dot?: boolean;
|
|
26
|
+
fromColor?: string;
|
|
27
|
+
toColor?: string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
interface AreaChartProps {
|
|
31
|
+
data: DataItem[];
|
|
32
|
+
series: ChartSeries[];
|
|
33
|
+
fromColor?: string;
|
|
34
|
+
toColor?: string;
|
|
35
|
+
showGrid?: boolean;
|
|
36
|
+
showLegend?: boolean;
|
|
37
|
+
showXAxis?: boolean;
|
|
38
|
+
showYAxis?: boolean;
|
|
39
|
+
funcss?: string;
|
|
40
|
+
curveType?: 'linear' | 'monotone' | 'step' | 'basis';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const getCssVar = (varName: string): string => {
|
|
44
|
+
if (typeof window === 'undefined') return '';
|
|
45
|
+
return getComputedStyle(document.documentElement).getPropertyValue(`--${varName}`)?.trim() || '';
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
const resolveStrokeColor = (color?: string): string => {
|
|
52
|
+
if (!color) return getCssVar('primary') || '#8884d8';
|
|
53
|
+
if (color.startsWith('#')) return color;
|
|
54
|
+
return getCssVar(color) || color;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const Lines: React.FC<AreaChartProps> = ({
|
|
58
|
+
data,
|
|
59
|
+
series,
|
|
60
|
+
fromColor,
|
|
61
|
+
toColor,
|
|
62
|
+
showGrid = true,
|
|
63
|
+
showLegend = true,
|
|
64
|
+
showXAxis = true,
|
|
65
|
+
showYAxis = false,
|
|
66
|
+
funcss,
|
|
67
|
+
curveType = 'monotone',
|
|
68
|
+
}) => {
|
|
69
|
+
return (
|
|
70
|
+
<ResponsiveContainer width="100%" className={funcss}>
|
|
71
|
+
<AreaChart data={data}>
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
<defs>
|
|
75
|
+
<linearGradient id="colorUv" x1="0" y1="0" x2="0" y2="1">
|
|
76
|
+
<stop offset="5%" stopColor={getCssVar(fromColor || 'primary')} stopOpacity={0.8}/>
|
|
77
|
+
<stop offset="95%" stopColor={getCssVar(toColor || 'primary200')} stopOpacity={0}/>
|
|
78
|
+
</linearGradient>
|
|
79
|
+
</defs>
|
|
80
|
+
|
|
81
|
+
{showGrid && <CartesianGrid strokeDasharray="3 3" />}
|
|
82
|
+
{showXAxis && <XAxis dataKey="label" angle={45} />}
|
|
83
|
+
{showYAxis && <YAxis />}
|
|
84
|
+
<Tooltip />
|
|
85
|
+
{showLegend && <Legend />}
|
|
86
|
+
{series.map((s, index) => (
|
|
87
|
+
<Area
|
|
88
|
+
key={s.dataKey}
|
|
89
|
+
type={curveType}
|
|
90
|
+
dataKey={s.dataKey}
|
|
91
|
+
name={s.label || s.dataKey}
|
|
92
|
+
stroke={resolveStrokeColor(s.color)}
|
|
93
|
+
fill="url(#colorUv)"
|
|
94
|
+
fillOpacity={1}
|
|
95
|
+
strokeWidth={s.strokeWidth || 2}
|
|
96
|
+
dot={s.dot !== false ? { r: 4 } : false}
|
|
97
|
+
activeDot={{ r: 8 }}
|
|
98
|
+
/>
|
|
99
|
+
))}
|
|
100
|
+
</AreaChart>
|
|
101
|
+
</ResponsiveContainer>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export default Lines;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type PieDataItem = {
|
|
3
|
+
label: string;
|
|
4
|
+
value: number;
|
|
5
|
+
color?: string;
|
|
6
|
+
};
|
|
7
|
+
interface PieChartProps {
|
|
8
|
+
data: PieDataItem[];
|
|
9
|
+
donut?: boolean;
|
|
10
|
+
showLegend?: boolean;
|
|
11
|
+
funcss?: string;
|
|
12
|
+
width?: number | string;
|
|
13
|
+
height?: number | string;
|
|
14
|
+
}
|
|
15
|
+
declare const ChartPie: React.FC<PieChartProps>;
|
|
16
|
+
export default ChartPie;
|
package/ui/chart/Pie.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var recharts_1 = require("recharts");
|
|
9
|
+
var getCssVar = function (varName) {
|
|
10
|
+
var _a;
|
|
11
|
+
if (typeof window === 'undefined')
|
|
12
|
+
return '';
|
|
13
|
+
return (((_a = getComputedStyle(document.documentElement)
|
|
14
|
+
.getPropertyValue("--".concat(varName))) === null || _a === void 0 ? void 0 : _a.trim()) || '');
|
|
15
|
+
};
|
|
16
|
+
var ChartPie = function (_a) {
|
|
17
|
+
var data = _a.data, _b = _a.donut, donut = _b === void 0 ? false : _b, _c = _a.showLegend, showLegend = _c === void 0 ? true : _c, _d = _a.funcss, funcss = _d === void 0 ? '' : _d, width = _a.width, height = _a.height;
|
|
18
|
+
var resolveColor = function (input, fallback) {
|
|
19
|
+
if (fallback === void 0) { fallback = '#8884d8'; }
|
|
20
|
+
if (!input)
|
|
21
|
+
return getCssVar('primary') || fallback;
|
|
22
|
+
if (input.startsWith('#'))
|
|
23
|
+
return input;
|
|
24
|
+
return getCssVar(input) || input;
|
|
25
|
+
};
|
|
26
|
+
var chart = (react_1.default.createElement(recharts_1.PieChart, { width: typeof width === 'number' ? width : undefined, height: typeof height === 'number' ? height : undefined },
|
|
27
|
+
react_1.default.createElement(recharts_1.Tooltip, null),
|
|
28
|
+
showLegend && react_1.default.createElement(recharts_1.Legend, null),
|
|
29
|
+
react_1.default.createElement(recharts_1.Pie, { data: data, dataKey: "value", nameKey: "label", cx: "50%", cy: "50%", outerRadius: 100, innerRadius: donut ? 60 : 0, label: true }, data.map(function (entry, index) { return (react_1.default.createElement(recharts_1.Cell, { key: "cell-".concat(index), fill: resolveColor(entry.color), stroke: "#ffffff", strokeWidth: 1 })); }))));
|
|
30
|
+
// If no width or height is set, use ResponsiveContainer
|
|
31
|
+
if (!width && !height) {
|
|
32
|
+
return (react_1.default.createElement(recharts_1.ResponsiveContainer, { width: "100%", height: 300, className: funcss }, chart));
|
|
33
|
+
}
|
|
34
|
+
return (react_1.default.createElement("div", { className: funcss, style: {
|
|
35
|
+
width: typeof width === 'number' ? "".concat(width, "px") : width || '100%',
|
|
36
|
+
height: typeof height === 'number' ? "".concat(height, "px") : height || '300px',
|
|
37
|
+
} }, chart));
|
|
38
|
+
};
|
|
39
|
+
exports.default = ChartPie;
|
package/ui/chart/Pie.tsx
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import {
|
|
5
|
+
PieChart as RePieChart,
|
|
6
|
+
Pie,
|
|
7
|
+
Cell,
|
|
8
|
+
Tooltip,
|
|
9
|
+
Legend,
|
|
10
|
+
ResponsiveContainer,
|
|
11
|
+
} from 'recharts';
|
|
12
|
+
|
|
13
|
+
type PieDataItem = {
|
|
14
|
+
label: string;
|
|
15
|
+
value: number;
|
|
16
|
+
color?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
interface PieChartProps {
|
|
20
|
+
data: PieDataItem[];
|
|
21
|
+
donut?: boolean;
|
|
22
|
+
showLegend?: boolean;
|
|
23
|
+
funcss?: string;
|
|
24
|
+
width?: number | string;
|
|
25
|
+
height?: number | string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const getCssVar = (varName: string): string => {
|
|
29
|
+
if (typeof window === 'undefined') return '';
|
|
30
|
+
return (
|
|
31
|
+
getComputedStyle(document.documentElement)
|
|
32
|
+
.getPropertyValue(`--${varName}`)
|
|
33
|
+
?.trim() || ''
|
|
34
|
+
);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const ChartPie: React.FC<PieChartProps> = ({
|
|
38
|
+
data,
|
|
39
|
+
donut = false,
|
|
40
|
+
showLegend = true,
|
|
41
|
+
funcss = '',
|
|
42
|
+
width,
|
|
43
|
+
height,
|
|
44
|
+
}) => {
|
|
45
|
+
const resolveColor = (input?: string, fallback = '#8884d8') => {
|
|
46
|
+
if (!input) return getCssVar('primary') || fallback;
|
|
47
|
+
if (input.startsWith('#')) return input;
|
|
48
|
+
return getCssVar(input) || input;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const chart = (
|
|
52
|
+
<RePieChart width={typeof width === 'number' ? width : undefined} height={typeof height === 'number' ? height : undefined}>
|
|
53
|
+
<Tooltip />
|
|
54
|
+
{showLegend && <Legend />}
|
|
55
|
+
<Pie
|
|
56
|
+
data={data}
|
|
57
|
+
dataKey="value"
|
|
58
|
+
nameKey="label"
|
|
59
|
+
cx="50%"
|
|
60
|
+
cy="50%"
|
|
61
|
+
outerRadius={100}
|
|
62
|
+
innerRadius={donut ? 60 : 0}
|
|
63
|
+
label
|
|
64
|
+
>
|
|
65
|
+
{data.map((entry, index) => (
|
|
66
|
+
<Cell
|
|
67
|
+
key={`cell-${index}`}
|
|
68
|
+
fill={resolveColor(entry.color)}
|
|
69
|
+
stroke="#ffffff"
|
|
70
|
+
strokeWidth={1}
|
|
71
|
+
/>
|
|
72
|
+
))}
|
|
73
|
+
</Pie>
|
|
74
|
+
</RePieChart>
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
// If no width or height is set, use ResponsiveContainer
|
|
78
|
+
if (!width && !height) {
|
|
79
|
+
return (
|
|
80
|
+
<ResponsiveContainer width="100%" height={300} className={funcss}>
|
|
81
|
+
{chart}
|
|
82
|
+
</ResponsiveContainer>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<div
|
|
88
|
+
className={funcss}
|
|
89
|
+
style={{
|
|
90
|
+
width: typeof width === 'number' ? `${width}px` : width || '100%',
|
|
91
|
+
height: typeof height === 'number' ? `${height}px` : height || '300px',
|
|
92
|
+
}}
|
|
93
|
+
>
|
|
94
|
+
{chart}
|
|
95
|
+
</div>
|
|
96
|
+
);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export default ChartPie;
|
package/ui/input/Input.js
CHANGED
|
@@ -123,7 +123,8 @@ var Input = function (_a) {
|
|
|
123
123
|
}, value: value }, rest))));
|
|
124
124
|
return (react_1.default.createElement("div", { className: "_upload_container" },
|
|
125
125
|
react_1.default.createElement("label", { htmlFor: id || "fileInput", className: "_upload_label" },
|
|
126
|
-
react_1.default.createElement("div", { className: "_upload_icon" }, icon || react_1.default.createElement(react_1.default.Fragment, null,
|
|
126
|
+
react_1.default.createElement("div", { className: "_upload_icon" }, icon || react_1.default.createElement(react_1.default.Fragment, null,
|
|
127
|
+
react_1.default.createElement(pi_1.PiCloudArrowUp, null))),
|
|
127
128
|
react_1.default.createElement("div", { className: "_upload_text", style: {
|
|
128
129
|
whiteSpace: 'nowrap',
|
|
129
130
|
overflow: 'hidden',
|
package/ui/input/Input.tsx
CHANGED
|
@@ -306,7 +306,7 @@ const Input: React.FC<InputProps> = ({
|
|
|
306
306
|
return (
|
|
307
307
|
<div className="_upload_container">
|
|
308
308
|
<label htmlFor={id || "fileInput"} className="_upload_label">
|
|
309
|
-
<div className="_upload_icon">{ icon ||
|
|
309
|
+
<div className="_upload_icon">{ icon || <><PiCloudArrowUp /></>}</div>
|
|
310
310
|
<div className="_upload_text" style={{
|
|
311
311
|
whiteSpace: 'nowrap',
|
|
312
312
|
overflow: 'hidden',
|
package/ui/sidebar/SideBar.d.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
interface SideBarLink {
|
|
3
|
+
uri: string;
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
text: string;
|
|
6
|
+
section: string;
|
|
7
|
+
}
|
|
8
|
+
interface SideBarProps {
|
|
4
9
|
funcss?: string;
|
|
5
|
-
position?:
|
|
6
|
-
glassy?: boolean;
|
|
10
|
+
position?: 'left' | 'right';
|
|
7
11
|
open?: boolean;
|
|
8
12
|
header?: ReactNode;
|
|
9
13
|
content?: ReactNode;
|
|
10
|
-
close?: ReactNode;
|
|
11
14
|
footer?: ReactNode;
|
|
12
|
-
|
|
15
|
+
top?: number;
|
|
16
|
+
sidebarWidth?: number;
|
|
17
|
+
sidebarCss?: string;
|
|
18
|
+
bodyCss?: string;
|
|
19
|
+
links?: SideBarLink[];
|
|
20
|
+
children?: ReactNode;
|
|
21
|
+
onClose?: () => void;
|
|
13
22
|
}
|
|
14
|
-
export default function SideBar({ funcss, position,
|
|
23
|
+
export default function SideBar({ funcss, position, open, header, content, footer, top, sidebarWidth, sidebarCss, bodyCss, links, children, onClose, }: SideBarProps): React.JSX.Element;
|
|
15
24
|
export {};
|