@once-ui-system/core 1.6.4 → 1.7.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.
- package/dist/components/Avatar.d.ts +1 -0
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/BlobFx.d.ts +8 -0
- package/dist/components/BlobFx.d.ts.map +1 -0
- package/dist/components/BlobFx.js +82 -0
- package/dist/components/BlobFx.js.map +1 -0
- package/dist/components/Button.d.ts +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +2 -2
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Button.module.scss +62 -32
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/ContextMenu.js +8 -4
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/Dialog.d.ts.map +1 -1
- package/dist/components/Dialog.js +99 -91
- package/dist/components/Dialog.js.map +1 -1
- package/dist/components/Dropdown.d.ts +1 -0
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/Dropdown.js +4 -2
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/FadingLettersFx.d.ts +15 -0
- package/dist/components/FadingLettersFx.d.ts.map +1 -0
- package/dist/components/FadingLettersFx.js +27 -0
- package/dist/components/FadingLettersFx.js.map +1 -0
- package/dist/components/FadingLettersFx.module.scss +71 -0
- package/dist/components/IconButton.d.ts +5 -2
- package/dist/components/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton.js +6 -4
- package/dist/components/IconButton.js.map +1 -1
- package/dist/components/IconButton.module.scss +14 -0
- package/dist/components/Input.d.ts +3 -1
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Input.js +18 -5
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Input.module.scss +38 -3
- package/dist/components/Media.d.ts +5 -1
- package/dist/components/Media.d.ts.map +1 -1
- package/dist/components/Media.js +20 -7
- package/dist/components/Media.js.map +1 -1
- package/dist/components/Modal.d.ts +11 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +72 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/NumberInput.d.ts.map +1 -1
- package/dist/components/NumberInput.js +1 -1
- package/dist/components/NumberInput.js.map +1 -1
- package/dist/components/ScrollContainer.d.ts +9 -0
- package/dist/components/ScrollContainer.d.ts.map +1 -0
- package/dist/components/ScrollContainer.js +67 -0
- package/dist/components/ScrollContainer.js.map +1 -0
- package/dist/components/ScrollLock.d.ts.map +1 -1
- package/dist/components/ScrollLock.js +4 -91
- package/dist/components/ScrollLock.js.map +1 -1
- package/dist/components/ServerFlex.d.ts.map +1 -1
- package/dist/components/ServerFlex.js +3 -3
- package/dist/components/ServerFlex.js.map +1 -1
- package/dist/components/ServerGrid.d.ts.map +1 -1
- package/dist/components/ServerGrid.js +2 -2
- package/dist/components/ServerGrid.js.map +1 -1
- package/dist/components/SplitView.d.ts +16 -0
- package/dist/components/SplitView.d.ts.map +1 -0
- package/dist/components/SplitView.js +80 -0
- package/dist/components/SplitView.js.map +1 -0
- package/dist/components/SplitView.module.scss +18 -0
- package/dist/components/StylePanel.d.ts.map +1 -1
- package/dist/components/StylePanel.js +10 -10
- package/dist/components/StylePanel.js.map +1 -1
- package/dist/components/Textarea.d.ts +2 -0
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea.js +22 -12
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeInit.d.ts.map +1 -1
- package/dist/components/ThemeInit.js +39 -40
- package/dist/components/ThemeInit.js.map +1 -1
- package/dist/components/Timeline.d.ts +1 -1
- package/dist/components/Timeline.d.ts.map +1 -1
- package/dist/components/Timeline.js +50 -6
- package/dist/components/Timeline.js.map +1 -1
- package/dist/components/ToggleButton.d.ts +2 -1
- package/dist/components/ToggleButton.d.ts.map +1 -1
- package/dist/components/ToggleButton.js +3 -3
- package/dist/components/ToggleButton.js.map +1 -1
- package/dist/components/ToggleButton.module.scss +27 -8
- package/dist/components/TypeFx.d.ts.map +1 -1
- package/dist/components/TypeFx.js +66 -87
- package/dist/components/TypeFx.js.map +1 -1
- package/dist/components/index.d.ts +9 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +9 -1
- package/dist/components/index.js.map +1 -1
- package/dist/css/styles.css +1 -1
- package/dist/css/styles.css.map +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/tokens.css.map +1 -1
- package/dist/data/emoji-data.json +0 -18
- package/dist/interfaces.d.ts +1 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/internal/dialogState.d.ts +17 -0
- package/dist/internal/dialogState.d.ts.map +1 -0
- package/dist/internal/dialogState.js +101 -0
- package/dist/internal/dialogState.js.map +1 -0
- package/dist/internal/scrollLockState.d.ts +15 -0
- package/dist/internal/scrollLockState.d.ts.map +1 -0
- package/dist/internal/scrollLockState.js +172 -0
- package/dist/internal/scrollLockState.js.map +1 -0
- package/dist/modules/code/CodeBlock.d.ts +3 -31
- package/dist/modules/code/CodeBlock.d.ts.map +1 -1
- package/dist/modules/code/CodeBlock.impl.d.ts +34 -0
- package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -0
- package/dist/modules/code/CodeBlock.impl.js +487 -0
- package/dist/modules/code/CodeBlock.impl.js.map +1 -0
- package/dist/modules/code/CodeBlock.js +10 -483
- package/dist/modules/code/CodeBlock.js.map +1 -1
- package/dist/modules/data/BarChart.d.ts +1 -8
- package/dist/modules/data/BarChart.d.ts.map +1 -1
- package/dist/modules/data/BarChart.impl.d.ts +12 -0
- package/dist/modules/data/BarChart.impl.d.ts.map +1 -0
- package/dist/modules/data/BarChart.impl.js +137 -0
- package/dist/modules/data/BarChart.impl.js.map +1 -0
- package/dist/modules/data/BarChart.js +9 -132
- package/dist/modules/data/BarChart.js.map +1 -1
- package/dist/modules/data/DataTooltip.d.ts +2 -2
- package/dist/modules/data/DataTooltip.d.ts.map +1 -1
- package/dist/modules/data/Legend.d.ts +1 -1
- package/dist/modules/data/Legend.d.ts.map +1 -1
- package/dist/modules/data/LineBarChart.d.ts +1 -8
- package/dist/modules/data/LineBarChart.d.ts.map +1 -1
- package/dist/modules/data/LineBarChart.impl.d.ts +12 -0
- package/dist/modules/data/LineBarChart.impl.d.ts.map +1 -0
- package/dist/modules/data/LineBarChart.impl.js +142 -0
- package/dist/modules/data/LineBarChart.impl.js.map +1 -0
- package/dist/modules/data/LineBarChart.js +9 -137
- package/dist/modules/data/LineBarChart.js.map +1 -1
- package/dist/modules/data/LineChart.d.ts +1 -13
- package/dist/modules/data/LineChart.d.ts.map +1 -1
- package/dist/modules/data/LineChart.impl.d.ts +17 -0
- package/dist/modules/data/LineChart.impl.d.ts.map +1 -0
- package/dist/modules/data/LineChart.impl.js +148 -0
- package/dist/modules/data/LineChart.impl.js.map +1 -0
- package/dist/modules/data/LineChart.js +9 -143
- package/dist/modules/data/LineChart.js.map +1 -1
- package/dist/modules/data/PieChart.d.ts +4 -16
- package/dist/modules/data/PieChart.d.ts.map +1 -1
- package/dist/modules/data/PieChart.impl.d.ts +18 -0
- package/dist/modules/data/PieChart.impl.d.ts.map +1 -0
- package/dist/modules/data/PieChart.impl.js +102 -0
- package/dist/modules/data/PieChart.impl.js.map +1 -0
- package/dist/modules/data/PieChart.js +11 -97
- package/dist/modules/data/PieChart.js.map +1 -1
- package/dist/modules/media/MediaUpload.d.ts +2 -20
- package/dist/modules/media/MediaUpload.d.ts.map +1 -1
- package/dist/modules/media/MediaUpload.impl.d.ts +24 -0
- package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -0
- package/dist/modules/media/MediaUpload.impl.js +92 -0
- package/dist/modules/media/MediaUpload.impl.js.map +1 -0
- package/dist/modules/media/MediaUpload.js +10 -88
- package/dist/modules/media/MediaUpload.js.map +1 -1
- package/dist/modules/navigation/Kbar.d.ts.map +1 -1
- package/dist/modules/navigation/Kbar.js +1 -1
- package/dist/modules/navigation/Kbar.js.map +1 -1
- package/dist/package.json +17 -6
- package/dist/styles/size.scss +20 -0
- package/dist/test/dialogTestUtils.d.ts +2 -0
- package/dist/test/dialogTestUtils.d.ts.map +1 -0
- package/dist/test/dialogTestUtils.js +9 -0
- package/dist/test/dialogTestUtils.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +59 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/tokens/layout.scss +5 -0
- package/dist/utils/MissingDependency.d.ts +7 -0
- package/dist/utils/MissingDependency.d.ts.map +1 -0
- package/dist/utils/MissingDependency.js +6 -0
- package/dist/utils/MissingDependency.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +35 -13
- package/tsconfig.vitest.json +20 -0
- package/vitest.config.ts +19 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ChartProps } from "../../";
|
|
3
|
+
export interface PieChartProps extends ChartProps {
|
|
4
|
+
"data-viz-style"?: string;
|
|
5
|
+
ring?: {
|
|
6
|
+
inner: number;
|
|
7
|
+
outer: number;
|
|
8
|
+
};
|
|
9
|
+
dataKey?: string;
|
|
10
|
+
nameKey?: string;
|
|
11
|
+
origo?: {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
declare const PieChart: React.FC<PieChartProps>;
|
|
17
|
+
export default PieChart;
|
|
18
|
+
//# sourceMappingURL=PieChart.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PieChart.impl.d.ts","sourceRoot":"","sources":["../../../src/modules/data/PieChart.impl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AASnD,OAAO,EAKL,UAAU,EASX,MAAM,QAAQ,CAAC;AAIhB,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAoQrC,CAAC;AAIF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState, useEffect } from "react";
|
|
4
|
+
import { PieChart as RechartsPieChart, Pie as RechartsPie, Cell as RechartsCell, Tooltip as RechartsTooltip, ResponsiveContainer as RechartsResponsiveContainer, Legend as RechartsLegend, } from "recharts";
|
|
5
|
+
import { schemes, Column, Row, ChartStatus, RadialGradient, DataTooltip, Legend, ChartHeader, useDataTheme, } from "../../";
|
|
6
|
+
import { getDistributedColor } from "./utils/colorDistribution";
|
|
7
|
+
const PieChart = ({ title, description, data, series, date, emptyState, errorState, error = false, loading = false, tooltip = true, origo = { x: 50, y: 50 }, legend: legendProp = {}, border = "neutral-alpha-weak", variant: variantProp, ring = { inner: 0, outer: 80 }, dataKey = "value", nameKey = "name", "data-viz-style": dataViz, ...flex }) => {
|
|
8
|
+
const { variant: themeVariant, mode, height } = useDataTheme();
|
|
9
|
+
const variant = variantProp || themeVariant;
|
|
10
|
+
const legend = {
|
|
11
|
+
display: legendProp.display !== undefined ? legendProp.display : true,
|
|
12
|
+
position: legendProp.position || "bottom-center",
|
|
13
|
+
direction: legendProp.direction,
|
|
14
|
+
};
|
|
15
|
+
const [selectedDateRange, setSelectedDateRange] = useState(date?.start && date?.end
|
|
16
|
+
? {
|
|
17
|
+
startDate: date.start,
|
|
18
|
+
endDate: date.end,
|
|
19
|
+
}
|
|
20
|
+
: undefined);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (date?.start && date?.end) {
|
|
23
|
+
setSelectedDateRange({
|
|
24
|
+
startDate: date.start,
|
|
25
|
+
endDate: date.end,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}, [date?.start, date?.end]);
|
|
29
|
+
const handleDateRangeChange = (newRange) => {
|
|
30
|
+
setSelectedDateRange(newRange);
|
|
31
|
+
if (date?.onChange) {
|
|
32
|
+
date.onChange(newRange);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const colorPalette = React.useMemo(() => {
|
|
36
|
+
if (!data || data.length === 0)
|
|
37
|
+
return schemes.map((c) => `var(--data-${c})`);
|
|
38
|
+
return Array.from({ length: data.length }, (_, index) => {
|
|
39
|
+
const colorKey = getDistributedColor(index, data.length);
|
|
40
|
+
return `var(--data-${colorKey})`;
|
|
41
|
+
});
|
|
42
|
+
}, [data]);
|
|
43
|
+
const filteredData = React.useMemo(() => {
|
|
44
|
+
if (!selectedDateRange || !data || data.length === 0) {
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
return data.filter((item) => {
|
|
48
|
+
try {
|
|
49
|
+
if (!item.date || !selectedDateRange.startDate || !selectedDateRange.endDate) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
const itemDate = typeof item.date === "string" ? new Date(item.date) : item.date;
|
|
53
|
+
return itemDate >= selectedDateRange.startDate && itemDate <= selectedDateRange.endDate;
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}, [data, selectedDateRange]);
|
|
60
|
+
const getGradientId = React.useCallback((colorKey) => {
|
|
61
|
+
return `pieGradient-${String(colorKey)}`;
|
|
62
|
+
}, []);
|
|
63
|
+
return (_jsxs(Column, { fillWidth: true, height: height, "data-viz-style": dataViz || mode, border: border, radius: "l", ...flex, children: [_jsx(ChartHeader, { title: title, description: description, dateRange: selectedDateRange, date: date, onDateRangeChange: handleDateRangeChange, presets: date?.presets }), _jsxs(Row, { fill: true, borderTop: (title || description || date?.selector) ? (border || "neutral-alpha-weak") : undefined, topRadius: flex.radius || "l", overflow: "hidden", children: [_jsx(ChartStatus, { loading: loading, empty: !filteredData || filteredData.length === 0, emptyState: emptyState, error: error, errorState: errorState }), !loading && !error && filteredData && filteredData.length > 0 && (_jsx(RechartsResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RechartsPieChart, { children: [_jsxs("defs", { children: [_jsxs("pattern", { id: "pieChartMasterPattern", patternUnits: "userSpaceOnUse", width: "100%", height: "100%", children: [_jsx(RadialGradient, { id: "pieChartMasterGradient", color: "var(--page-background)", cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", variant: variant }), _jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#pieChartMasterGradient)" })] }), Array.from(new Set(filteredData.map((entry, index) => {
|
|
64
|
+
return entry.color || getDistributedColor(index, filteredData.length);
|
|
65
|
+
}))).map((colorKey) => {
|
|
66
|
+
const baseColor = `var(--data-${colorKey})`;
|
|
67
|
+
const patternId = getGradientId(colorKey);
|
|
68
|
+
return (_jsxs("pattern", { id: patternId, patternUnits: "userSpaceOnUse", width: "100%", height: "100%", children: [variant !== "outline" && (_jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: baseColor })), variant === "gradient" && (_jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#pieChartMasterPattern)" }))] }, `pattern-${colorKey}`));
|
|
69
|
+
})] }), legend.display && (_jsx(RechartsLegend, { content: (props) => (_jsx(Legend, { ...props, variant: variant, position: legend.position, direction: legend.direction, labels: "none", colors: colorPalette })), wrapperStyle: {
|
|
70
|
+
position: "absolute",
|
|
71
|
+
top: legend.position === "top-center" ||
|
|
72
|
+
legend.position === "top-left" ||
|
|
73
|
+
legend.position === "top-right"
|
|
74
|
+
? 0
|
|
75
|
+
: undefined,
|
|
76
|
+
bottom: legend.position === "bottom-center" ||
|
|
77
|
+
legend.position === "bottom-left" ||
|
|
78
|
+
legend.position === "bottom-right"
|
|
79
|
+
? 0
|
|
80
|
+
: undefined,
|
|
81
|
+
right: 0,
|
|
82
|
+
left: 0,
|
|
83
|
+
margin: 0,
|
|
84
|
+
} })), _jsx(RechartsPie, { data: filteredData, cx: origo.x + "%", cy: origo.y + "%", labelLine: false, innerRadius: ring.inner + "%", outerRadius: ring.outer + "%", dataKey: dataKey, nameKey: nameKey, stroke: variant === "outline" ? undefined : "none", children: filteredData.map((entry, index) => {
|
|
85
|
+
const colorKey = entry.color || getDistributedColor(index, filteredData.length);
|
|
86
|
+
const baseColor = `var(--data-${colorKey})`;
|
|
87
|
+
const gradientId = getGradientId(String(colorKey));
|
|
88
|
+
return (_jsx(RechartsCell, { fill: variant === "outline" ? "transparent" : `url(#${gradientId})`, strokeWidth: variant === "outline" ? 2 : 1, stroke: baseColor, style: { outline: "none" } }, `cell-${index}`));
|
|
89
|
+
}) }), tooltip && (_jsx(RechartsTooltip, { content: (props) => {
|
|
90
|
+
if (props.payload && props.payload.length > 0) {
|
|
91
|
+
const entry = props.payload[0];
|
|
92
|
+
const index = filteredData.findIndex((item) => item[nameKey] === entry.name);
|
|
93
|
+
const colorKey = filteredData[index]?.color || getDistributedColor(index, filteredData.length);
|
|
94
|
+
const color = `var(--data-${colorKey})`;
|
|
95
|
+
props.payload[0].color = color;
|
|
96
|
+
}
|
|
97
|
+
return (_jsx(DataTooltip, { ...props, label: undefined, date: date, variant: variant }));
|
|
98
|
+
} }))] }) }))] })] }));
|
|
99
|
+
};
|
|
100
|
+
PieChart.displayName = "PieChart";
|
|
101
|
+
export default PieChart;
|
|
102
|
+
//# sourceMappingURL=PieChart.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PieChart.impl.js","sourceRoot":"","sources":["../../../src/modules/data/PieChart.impl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,100 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx
|
|
3
|
-
import React, {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const variant = variantProp || themeVariant;
|
|
10
|
-
const legend = {
|
|
11
|
-
display: legendProp.display !== undefined ? legendProp.display : true,
|
|
12
|
-
position: legendProp.position || "bottom-center",
|
|
13
|
-
direction: legendProp.direction,
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { Suspense } from "react";
|
|
4
|
+
import { MissingDependency } from "../../utils/MissingDependency";
|
|
5
|
+
const PieChartImpl = React.lazy(() => import("./PieChart.impl").catch(() => {
|
|
6
|
+
console.warn('[@once-ui-system/core] <PieChart /> requires the "recharts" package. Install it with: npm install recharts');
|
|
7
|
+
return {
|
|
8
|
+
default: () => _jsx(MissingDependency, { component: "PieChart", packageName: "recharts" }),
|
|
14
9
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
: undefined);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (date?.start && date?.end) {
|
|
23
|
-
setSelectedDateRange({
|
|
24
|
-
startDate: date.start,
|
|
25
|
-
endDate: date.end,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
}, [date?.start, date?.end]);
|
|
29
|
-
const handleDateRangeChange = (newRange) => {
|
|
30
|
-
setSelectedDateRange(newRange);
|
|
31
|
-
if (date?.onChange) {
|
|
32
|
-
date.onChange(newRange);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const colorPalette = React.useMemo(() => {
|
|
36
|
-
if (!data || data.length === 0)
|
|
37
|
-
return schemes.map((c) => `var(--data-${c})`);
|
|
38
|
-
return Array.from({ length: data.length }, (_, index) => {
|
|
39
|
-
const colorKey = getDistributedColor(index, data.length);
|
|
40
|
-
return `var(--data-${colorKey})`;
|
|
41
|
-
});
|
|
42
|
-
}, [data]);
|
|
43
|
-
const filteredData = React.useMemo(() => {
|
|
44
|
-
if (!selectedDateRange || !data || data.length === 0) {
|
|
45
|
-
return data;
|
|
46
|
-
}
|
|
47
|
-
return data.filter((item) => {
|
|
48
|
-
try {
|
|
49
|
-
if (!item.date || !selectedDateRange.startDate || !selectedDateRange.endDate) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
const itemDate = typeof item.date === "string" ? new Date(item.date) : item.date;
|
|
53
|
-
return itemDate >= selectedDateRange.startDate && itemDate <= selectedDateRange.endDate;
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}, [data, selectedDateRange]);
|
|
60
|
-
const getGradientId = React.useCallback((colorKey) => {
|
|
61
|
-
return `pieGradient-${String(colorKey)}`;
|
|
62
|
-
}, []);
|
|
63
|
-
return (_jsxs(Column, { fillWidth: true, height: height, "data-viz-style": dataViz || mode, border: border, radius: "l", ...flex, children: [_jsx(ChartHeader, { title: title, description: description, dateRange: selectedDateRange, date: date, onDateRangeChange: handleDateRangeChange, presets: date?.presets }), _jsxs(Row, { fill: true, borderTop: (title || description || date?.selector) ? (border || "neutral-alpha-weak") : undefined, topRadius: flex.radius || "l", overflow: "hidden", children: [_jsx(ChartStatus, { loading: loading, empty: !filteredData || filteredData.length === 0, emptyState: emptyState, error: error, errorState: errorState }), !loading && !error && filteredData && filteredData.length > 0 && (_jsx(RechartsResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RechartsPieChart, { children: [_jsxs("defs", { children: [_jsxs("pattern", { id: "pieChartMasterPattern", patternUnits: "userSpaceOnUse", width: "100%", height: "100%", children: [_jsx(RadialGradient, { id: "pieChartMasterGradient", color: "var(--page-background)", cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", variant: variant }), _jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#pieChartMasterGradient)" })] }), Array.from(new Set(filteredData.map((entry, index) => {
|
|
64
|
-
return entry.color || getDistributedColor(index, filteredData.length);
|
|
65
|
-
}))).map((colorKey) => {
|
|
66
|
-
const baseColor = `var(--data-${colorKey})`;
|
|
67
|
-
const patternId = getGradientId(colorKey);
|
|
68
|
-
return (_jsxs("pattern", { id: patternId, patternUnits: "userSpaceOnUse", width: "100%", height: "100%", children: [variant !== "outline" && (_jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: baseColor })), variant === "gradient" && (_jsx("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#pieChartMasterPattern)" }))] }, `pattern-${colorKey}`));
|
|
69
|
-
})] }), legend.display && (_jsx(RechartsLegend, { content: (props) => (_jsx(Legend, { ...props, variant: variant, position: legend.position, direction: legend.direction, labels: "none", colors: colorPalette })), wrapperStyle: {
|
|
70
|
-
position: "absolute",
|
|
71
|
-
top: legend.position === "top-center" ||
|
|
72
|
-
legend.position === "top-left" ||
|
|
73
|
-
legend.position === "top-right"
|
|
74
|
-
? 0
|
|
75
|
-
: undefined,
|
|
76
|
-
bottom: legend.position === "bottom-center" ||
|
|
77
|
-
legend.position === "bottom-left" ||
|
|
78
|
-
legend.position === "bottom-right"
|
|
79
|
-
? 0
|
|
80
|
-
: undefined,
|
|
81
|
-
right: 0,
|
|
82
|
-
left: 0,
|
|
83
|
-
margin: 0,
|
|
84
|
-
} })), _jsx(RechartsPie, { data: filteredData, cx: origo.x + "%", cy: origo.y + "%", labelLine: false, innerRadius: ring.inner + "%", outerRadius: ring.outer + "%", dataKey: dataKey, nameKey: nameKey, stroke: variant === "outline" ? undefined : "none", children: filteredData.map((entry, index) => {
|
|
85
|
-
const colorKey = entry.color || getDistributedColor(index, filteredData.length);
|
|
86
|
-
const baseColor = `var(--data-${colorKey})`;
|
|
87
|
-
const gradientId = getGradientId(String(colorKey));
|
|
88
|
-
return (_jsx(RechartsCell, { fill: variant === "outline" ? "transparent" : `url(#${gradientId})`, strokeWidth: variant === "outline" ? 2 : 1, stroke: baseColor, style: { outline: "none" } }, `cell-${index}`));
|
|
89
|
-
}) }), tooltip && (_jsx(RechartsTooltip, { content: (props) => {
|
|
90
|
-
if (props.payload && props.payload.length > 0) {
|
|
91
|
-
const entry = props.payload[0];
|
|
92
|
-
const index = filteredData.findIndex((item) => item[nameKey] === entry.name);
|
|
93
|
-
const colorKey = filteredData[index]?.color || getDistributedColor(index, filteredData.length);
|
|
94
|
-
const color = `var(--data-${colorKey})`;
|
|
95
|
-
props.payload[0].color = color;
|
|
96
|
-
}
|
|
97
|
-
return (_jsx(DataTooltip, { ...props, label: undefined, date: date, variant: variant }));
|
|
98
|
-
} }))] }) }))] })] }));
|
|
99
|
-
};
|
|
10
|
+
}));
|
|
11
|
+
const PieChart = (props) => (_jsx(Suspense, { fallback: null, children: _jsx(PieChartImpl, { ...props }) }));
|
|
12
|
+
PieChart.displayName = "PieChart";
|
|
13
|
+
export { PieChart };
|
|
100
14
|
//# sourceMappingURL=PieChart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PieChart.js","sourceRoot":"","sources":["../../../src/modules/data/PieChart.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"PieChart.js","sourceRoot":"","sources":["../../../src/modules/data/PieChart.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CACnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;IACnC,OAAO,CAAC,IAAI,CACV,4GAA4G,CAC7G,CAAC;IACF,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,iBAAiB,IAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAC,UAAU,GAAG;KACjF,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,QAAQ,GAA4B,CAAC,KAAK,EAAE,EAAE,CAAC,CACnD,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,YAAY,OAAK,KAAK,GAAI,GAClB,CACZ,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
interface MediaUploadProps extends React.ComponentProps<typeof Flex> {
|
|
4
|
-
onFileUpload?: (file: File) => Promise<void>;
|
|
5
|
-
compress?: boolean;
|
|
6
|
-
aspectRatio?: string;
|
|
7
|
-
className?: string;
|
|
8
|
-
style?: React.CSSProperties;
|
|
9
|
-
initialPreviewImage?: string | null;
|
|
10
|
-
emptyState?: React.ReactNode;
|
|
11
|
-
quality?: number;
|
|
12
|
-
sizes?: string;
|
|
13
|
-
children?: React.ReactNode;
|
|
14
|
-
convertTypes?: string[];
|
|
15
|
-
resizeMaxWidth?: number;
|
|
16
|
-
resizeMaxHeight?: number;
|
|
17
|
-
resizeWidth?: number;
|
|
18
|
-
resizeHeight?: number;
|
|
19
|
-
loading?: boolean;
|
|
20
|
-
accept?: string;
|
|
21
|
-
}
|
|
2
|
+
import type { MediaUploadProps } from "./MediaUpload.impl";
|
|
22
3
|
declare const MediaUpload: React.ForwardRefExoticComponent<Omit<MediaUploadProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
23
4
|
export { MediaUpload };
|
|
5
|
+
export type { MediaUploadProps };
|
|
24
6
|
//# sourceMappingURL=MediaUpload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaUpload.d.ts","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"MediaUpload.d.ts","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAe3D,QAAA,MAAM,WAAW,wGAIf,CAAC;AAIH,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Flex } from "../../";
|
|
3
|
+
export interface MediaUploadProps extends React.ComponentProps<typeof Flex> {
|
|
4
|
+
onFileUpload?: (file: File) => Promise<void>;
|
|
5
|
+
compress?: boolean;
|
|
6
|
+
aspectRatio?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
initialPreviewImage?: string | null;
|
|
10
|
+
emptyState?: React.ReactNode;
|
|
11
|
+
quality?: number;
|
|
12
|
+
sizes?: string;
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
convertTypes?: string[];
|
|
15
|
+
resizeMaxWidth?: number;
|
|
16
|
+
resizeMaxHeight?: number;
|
|
17
|
+
resizeWidth?: number;
|
|
18
|
+
resizeHeight?: number;
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
accept?: string;
|
|
21
|
+
}
|
|
22
|
+
declare const MediaUpload: React.ForwardRefExoticComponent<Omit<MediaUploadProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
23
|
+
export default MediaUpload;
|
|
24
|
+
//# sourceMappingURL=MediaUpload.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaUpload.impl.d.ts","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.impl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,IAAI,EAA8B,MAAM,QAAQ,CAAC;AAG1D,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC;IACzE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,WAAW,wGA8KhB,CAAC;AAIF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useState, forwardRef, useEffect } from "react";
|
|
4
|
+
import Compressor from "compressorjs";
|
|
5
|
+
import { Flex, Icon, Media, Spinner, Text } from "../../";
|
|
6
|
+
import styles from "./MediaUpload.module.scss";
|
|
7
|
+
const MediaUpload = forwardRef(({ onFileUpload, compress = true, aspectRatio = "16 / 9", quality = 0.8, convertTypes = ["image/png", "image/webp", "image/jpg"], emptyState = "Drag and drop or click to browse", resizeMaxWidth = 1920, resizeMaxHeight = 1920, resizeWidth = 1200, resizeHeight = 1200, loading = false, sizes, children, initialPreviewImage = null, accept = "image/*", ...rest }, ref) => {
|
|
8
|
+
const [dragActive, setDragActive] = useState(false);
|
|
9
|
+
const [previewImage, setPreviewImage] = useState(initialPreviewImage); // Use prop as initial state
|
|
10
|
+
const [uploading, setUploading] = useState(false);
|
|
11
|
+
const inputRef = useRef(null);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (initialPreviewImage) {
|
|
14
|
+
setPreviewImage(initialPreviewImage);
|
|
15
|
+
}
|
|
16
|
+
}, [initialPreviewImage]);
|
|
17
|
+
const handleDragOver = (e) => {
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
setDragActive(true);
|
|
21
|
+
};
|
|
22
|
+
const handleDragLeave = (e) => {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
setDragActive(false);
|
|
26
|
+
};
|
|
27
|
+
const handleDrop = (e) => {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
setDragActive(false);
|
|
31
|
+
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
32
|
+
handleFiles(e.dataTransfer.files);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const handleFileSelection = () => {
|
|
36
|
+
if (inputRef.current) {
|
|
37
|
+
inputRef.current.click();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const handleFiles = (files) => {
|
|
41
|
+
const file = files[0];
|
|
42
|
+
if (!file)
|
|
43
|
+
return;
|
|
44
|
+
if (file.type.startsWith("image/")) {
|
|
45
|
+
setPreviewImage(URL.createObjectURL(file));
|
|
46
|
+
if (compress && file.type.startsWith("image/")) {
|
|
47
|
+
compressImage(file);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
uploadFile(file);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.warn("Unsupported file type:", file.type);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const compressImage = (file) => {
|
|
58
|
+
new Compressor(file, {
|
|
59
|
+
convertTypes: convertTypes,
|
|
60
|
+
quality: quality,
|
|
61
|
+
maxWidth: resizeMaxWidth,
|
|
62
|
+
maxHeight: resizeMaxHeight,
|
|
63
|
+
convertSize: 400 * 1024,
|
|
64
|
+
width: resizeWidth,
|
|
65
|
+
height: resizeHeight,
|
|
66
|
+
success(compressedFile) {
|
|
67
|
+
uploadFile(compressedFile);
|
|
68
|
+
},
|
|
69
|
+
error(err) {
|
|
70
|
+
console.error("Compression error:", err);
|
|
71
|
+
uploadFile(file);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const uploadFile = async (file) => {
|
|
76
|
+
setUploading(true);
|
|
77
|
+
if (onFileUpload) {
|
|
78
|
+
await onFileUpload(file);
|
|
79
|
+
}
|
|
80
|
+
setUploading(false);
|
|
81
|
+
};
|
|
82
|
+
return (_jsxs(Flex, { style: { isolation: "isolate", cursor: "pointer" }, transition: "micro-medium", overflow: "hidden", className: styles.container, aspectRatio: aspectRatio, fillWidth: true, center: true, border: "neutral-medium", radius: "l", onClick: handleFileSelection, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, ...rest, children: [!loading && (_jsx(_Fragment, { children: previewImage ? (_jsx(Media, { height: undefined, style: {
|
|
83
|
+
filter: uploading ? "grayscale(1)" : "",
|
|
84
|
+
}, sizes: sizes, src: previewImage ? previewImage : "", alt: "Preview of uploaded image" })) : (_jsx(Flex, { fill: true, center: true, children: _jsx(Icon, { name: "plus", size: "l" }) })) })), children, _jsx(Flex, { className: styles.upload, zIndex: 1, transition: "micro-medium", position: "absolute", fill: true, padding: "m", horizontal: "center", vertical: "center", children: uploading || loading ? (_jsx(Spinner, { size: "l" })) : (_jsx(Text, { className: styles.text, align: "center", children: emptyState })) }), _jsx("input", { type: "file", ref: inputRef, accept: accept, style: { display: "none" }, onChange: (e) => {
|
|
85
|
+
if (e.target.files) {
|
|
86
|
+
handleFiles(e.target.files);
|
|
87
|
+
}
|
|
88
|
+
} })] }));
|
|
89
|
+
});
|
|
90
|
+
MediaUpload.displayName = "MediaUpload";
|
|
91
|
+
export default MediaUpload;
|
|
92
|
+
//# sourceMappingURL=MediaUpload.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaUpload.impl.js","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.impl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,92 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
if (initialPreviewImage) {
|
|
14
|
-
setPreviewImage(initialPreviewImage);
|
|
15
|
-
}
|
|
16
|
-
}, [initialPreviewImage]);
|
|
17
|
-
const handleDragOver = (e) => {
|
|
18
|
-
e.preventDefault();
|
|
19
|
-
e.stopPropagation();
|
|
20
|
-
setDragActive(true);
|
|
21
|
-
};
|
|
22
|
-
const handleDragLeave = (e) => {
|
|
23
|
-
e.preventDefault();
|
|
24
|
-
e.stopPropagation();
|
|
25
|
-
setDragActive(false);
|
|
26
|
-
};
|
|
27
|
-
const handleDrop = (e) => {
|
|
28
|
-
e.preventDefault();
|
|
29
|
-
e.stopPropagation();
|
|
30
|
-
setDragActive(false);
|
|
31
|
-
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
32
|
-
handleFiles(e.dataTransfer.files);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const handleFileSelection = () => {
|
|
36
|
-
if (inputRef.current) {
|
|
37
|
-
inputRef.current.click();
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
const handleFiles = (files) => {
|
|
41
|
-
const file = files[0];
|
|
42
|
-
if (!file)
|
|
43
|
-
return;
|
|
44
|
-
if (file.type.startsWith("image/")) {
|
|
45
|
-
setPreviewImage(URL.createObjectURL(file));
|
|
46
|
-
if (compress && file.type.startsWith("image/")) {
|
|
47
|
-
compressImage(file);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
uploadFile(file);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
console.warn("Unsupported file type:", file.type);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const compressImage = (file) => {
|
|
58
|
-
new Compressor(file, {
|
|
59
|
-
convertTypes: convertTypes,
|
|
60
|
-
quality: quality,
|
|
61
|
-
maxWidth: resizeMaxWidth,
|
|
62
|
-
maxHeight: resizeMaxHeight,
|
|
63
|
-
convertSize: 400 * 1024,
|
|
64
|
-
width: resizeWidth,
|
|
65
|
-
height: resizeHeight,
|
|
66
|
-
success(compressedFile) {
|
|
67
|
-
uploadFile(compressedFile);
|
|
68
|
-
},
|
|
69
|
-
error(err) {
|
|
70
|
-
console.error("Compression error:", err);
|
|
71
|
-
uploadFile(file);
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
const uploadFile = async (file) => {
|
|
76
|
-
setUploading(true);
|
|
77
|
-
if (onFileUpload) {
|
|
78
|
-
await onFileUpload(file);
|
|
79
|
-
}
|
|
80
|
-
setUploading(false);
|
|
81
|
-
};
|
|
82
|
-
return (_jsxs(Flex, { style: { isolation: "isolate", cursor: "pointer" }, transition: "micro-medium", overflow: "hidden", className: styles.container, aspectRatio: aspectRatio, fillWidth: true, center: true, border: "neutral-medium", radius: "l", onClick: handleFileSelection, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, ...rest, children: [!loading && (_jsx(_Fragment, { children: previewImage ? (_jsx(Media, { height: undefined, style: {
|
|
83
|
-
filter: uploading ? "grayscale(1)" : "",
|
|
84
|
-
}, sizes: sizes, src: previewImage ? previewImage : "", alt: "Preview of uploaded image" })) : (_jsx(Flex, { fill: true, center: true, children: _jsx(Icon, { name: "plus", size: "l" }) })) })), children, _jsx(Flex, { className: styles.upload, zIndex: 1, transition: "micro-medium", position: "absolute", fill: true, padding: "m", horizontal: "center", vertical: "center", children: uploading || loading ? (_jsx(Spinner, { size: "l" })) : (_jsx(Text, { className: styles.text, align: "center", children: emptyState })) }), _jsx("input", { type: "file", ref: inputRef, accept: accept, style: { display: "none" }, onChange: (e) => {
|
|
85
|
-
if (e.target.files) {
|
|
86
|
-
handleFiles(e.target.files);
|
|
87
|
-
}
|
|
88
|
-
} })] }));
|
|
89
|
-
});
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { forwardRef, Suspense } from "react";
|
|
4
|
+
import { MissingDependency } from "../../utils/MissingDependency";
|
|
5
|
+
const MediaUploadImpl = React.lazy(() => import("./MediaUpload.impl").catch(() => {
|
|
6
|
+
console.warn('[@once-ui-system/core] <MediaUpload /> requires the "compressorjs" package. Install it with: npm install compressorjs');
|
|
7
|
+
return {
|
|
8
|
+
default: forwardRef(() => (_jsx(MissingDependency, { component: "MediaUpload", packageName: "compressorjs" }))),
|
|
9
|
+
};
|
|
10
|
+
}));
|
|
11
|
+
const MediaUpload = forwardRef((props, ref) => (_jsx(Suspense, { fallback: null, children: _jsx(MediaUploadImpl, { ...props, ref: ref }) })));
|
|
90
12
|
MediaUpload.displayName = "MediaUpload";
|
|
91
13
|
export { MediaUpload };
|
|
92
14
|
//# sourceMappingURL=MediaUpload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaUpload.js","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,
|
|
1
|
+
{"version":3,"file":"MediaUpload.js","sourceRoot":"","sources":["../../../src/modules/media/MediaUpload.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CACtC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;IACtC,OAAO,CAAC,IAAI,CACV,uHAAuH,CACxH,CAAC;IACF,OAAO;QACL,OAAO,EAAE,UAAU,CAAqC,GAAG,EAAE,CAAC,CAC5D,KAAC,iBAAiB,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAC,cAAc,GAAG,CACzE,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,WAAW,GAAG,UAAU,CAAqC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACjF,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,eAAe,OAAK,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,GAC/B,CACZ,CAAC,CAAC;AAEH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kbar.d.ts","sourceRoot":"","sources":["../../../src/modules/navigation/Kbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAqD,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Kbar.d.ts","sourceRoot":"","sources":["../../../src/modules/navigation/Kbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAqD,SAAS,EAAE,MAAM,OAAO,CAAC;AAkB5F,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+CD,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAMlD,CAAC;AAEF,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA0RlD,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA6DpC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import React, { useState, useEffect, useRef, useCallback, useMemo } from "react";
|
|
4
|
-
import { Flex, Text, Icon, Column, Input, Option, Row, Kbd, ArrowNavigation, useArrowNavigationContext, ScrollLock } from "../../";
|
|
4
|
+
import { Flex, Text, Icon, Column, Input, Option, Row, Kbd, ArrowNavigation, useArrowNavigationContext, ScrollLock, } from "../../components";
|
|
5
5
|
import { createPortal } from "react-dom";
|
|
6
6
|
import { useRouter, usePathname } from "next/navigation";
|
|
7
7
|
import styles from "./Kbar.module.scss";
|