@rozaqi02/reusable-dashboard 1.0.0 → 1.0.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/dist/index.cjs +31 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +31 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -91,28 +91,32 @@ var cidikaWidgetConfig = {
|
|
|
91
91
|
label: "confirmedBookings",
|
|
92
92
|
icon: "TrendingUp",
|
|
93
93
|
valueKey: "bookingsConfirm",
|
|
94
|
-
format: "number"
|
|
94
|
+
format: "number",
|
|
95
|
+
accentColor: "blue"
|
|
95
96
|
},
|
|
96
97
|
{
|
|
97
98
|
id: "revenueConfirm",
|
|
98
99
|
label: "confirmedRevenue",
|
|
99
100
|
icon: "DollarSign",
|
|
100
101
|
valueKey: "revenueConfirm",
|
|
101
|
-
format: "currency"
|
|
102
|
+
format: "currency",
|
|
103
|
+
accentColor: "green"
|
|
102
104
|
},
|
|
103
105
|
{
|
|
104
106
|
id: "avgRevenue",
|
|
105
107
|
label: "avgRevenue",
|
|
106
108
|
icon: "Users",
|
|
107
109
|
valueKey: "avgRevenue",
|
|
108
|
-
format: "currency"
|
|
110
|
+
format: "currency",
|
|
111
|
+
accentColor: "violet"
|
|
109
112
|
},
|
|
110
113
|
{
|
|
111
114
|
id: "conversionRate",
|
|
112
115
|
label: "conversionRate",
|
|
113
116
|
icon: "PieChart",
|
|
114
117
|
valueKey: "conversionRate",
|
|
115
|
-
format: "percent"
|
|
118
|
+
format: "percent",
|
|
119
|
+
accentColor: "orange"
|
|
116
120
|
}
|
|
117
121
|
],
|
|
118
122
|
charts: [
|
|
@@ -238,28 +242,32 @@ var tokoSepatuWidgetConfig = {
|
|
|
238
242
|
label: "confirmedBookings",
|
|
239
243
|
icon: "TrendingUp",
|
|
240
244
|
valueKey: "bookingsConfirm",
|
|
241
|
-
format: "number"
|
|
245
|
+
format: "number",
|
|
246
|
+
accentColor: "sky"
|
|
242
247
|
},
|
|
243
248
|
{
|
|
244
249
|
id: "totalRevenue",
|
|
245
250
|
label: "confirmedRevenue",
|
|
246
251
|
icon: "DollarSign",
|
|
247
252
|
valueKey: "revenueConfirm",
|
|
248
|
-
format: "currency"
|
|
253
|
+
format: "currency",
|
|
254
|
+
accentColor: "green"
|
|
249
255
|
},
|
|
250
256
|
{
|
|
251
257
|
id: "avgOrderValue",
|
|
252
258
|
label: "avgRevenue",
|
|
253
259
|
icon: "BarChart3",
|
|
254
260
|
valueKey: "avgRevenue",
|
|
255
|
-
format: "currency"
|
|
261
|
+
format: "currency",
|
|
262
|
+
accentColor: "violet"
|
|
256
263
|
},
|
|
257
264
|
{
|
|
258
265
|
id: "totalProducts",
|
|
259
266
|
label: "totalProducts",
|
|
260
267
|
icon: "PieChart",
|
|
261
268
|
valueKey: "packages",
|
|
262
|
-
format: "number"
|
|
269
|
+
format: "number",
|
|
270
|
+
accentColor: "orange"
|
|
263
271
|
}
|
|
264
272
|
],
|
|
265
273
|
charts: [
|
|
@@ -1303,10 +1311,20 @@ function StatCard({
|
|
|
1303
1311
|
icon = "TrendingUp",
|
|
1304
1312
|
format = "number",
|
|
1305
1313
|
trend = null,
|
|
1314
|
+
accentColor = "blue",
|
|
1306
1315
|
className = ""
|
|
1307
1316
|
}) {
|
|
1308
1317
|
const formattedValue = renderValue(format, value);
|
|
1309
|
-
|
|
1318
|
+
const ACCENT = {
|
|
1319
|
+
blue: { bg: "bg-blue-50 dark:bg-blue-900/20", icon: "text-blue-600 dark:text-blue-400", bar: "bg-blue-500", border: "border-l-4 border-blue-400" },
|
|
1320
|
+
green: { bg: "bg-emerald-50 dark:bg-emerald-900/20", icon: "text-emerald-600 dark:text-emerald-400", bar: "bg-emerald-500", border: "border-l-4 border-emerald-400" },
|
|
1321
|
+
violet: { bg: "bg-violet-50 dark:bg-violet-900/20", icon: "text-violet-600 dark:text-violet-400", bar: "bg-violet-500", border: "border-l-4 border-violet-400" },
|
|
1322
|
+
orange: { bg: "bg-orange-50 dark:bg-orange-900/20", icon: "text-orange-600 dark:text-orange-400", bar: "bg-orange-500", border: "border-l-4 border-orange-400" },
|
|
1323
|
+
sky: { bg: "bg-sky-50 dark:bg-sky-900/20", icon: "text-sky-600 dark:text-sky-400", bar: "bg-sky-500", border: "border-l-4 border-sky-400" },
|
|
1324
|
+
rose: { bg: "bg-rose-50 dark:bg-rose-900/20", icon: "text-rose-600 dark:text-rose-400", bar: "bg-rose-500", border: "border-l-4 border-rose-400" }
|
|
1325
|
+
};
|
|
1326
|
+
const accent = ACCENT[accentColor] || ACCENT.blue;
|
|
1327
|
+
return /* @__PURE__ */ import_react9.default.createElement("div", { className: `card p-4 flex flex-col justify-between gap-3 ${accent.border} ${className}` }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center gap-2 text-slate-500 dark:text-slate-400" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: `w-8 h-8 rounded-xl flex items-center justify-center ${accent.bg} ${accent.icon} shrink-0` }, /* @__PURE__ */ import_react9.default.createElement(Icon, { name: icon, size: 16 })), /* @__PURE__ */ import_react9.default.createElement(Typography, { variant: "subheading" }, label)), trend ? /* @__PURE__ */ import_react9.default.createElement(
|
|
1310
1328
|
Icon,
|
|
1311
1329
|
{
|
|
1312
1330
|
name: trend === "up" ? "TrendingUp" : "TrendingDown",
|
|
@@ -1321,17 +1339,13 @@ function renderValue(format, value) {
|
|
|
1321
1339
|
return String(Number(value) || 0);
|
|
1322
1340
|
}
|
|
1323
1341
|
StatCard.propTypes = {
|
|
1324
|
-
/** Label deskriptif metrik. */
|
|
1325
1342
|
label: import_prop_types7.default.string.isRequired,
|
|
1326
|
-
/** Nilai metrik. */
|
|
1327
1343
|
value: import_prop_types7.default.oneOfType([import_prop_types7.default.number, import_prop_types7.default.string]),
|
|
1328
|
-
/** Nama ikon dari registry Lucide React. */
|
|
1329
1344
|
icon: import_prop_types7.default.string,
|
|
1330
|
-
/** Format tampilan nilai. */
|
|
1331
1345
|
format: import_prop_types7.default.oneOf(["number", "currency", "percent"]),
|
|
1332
|
-
/** Arah tren opsional. */
|
|
1333
1346
|
trend: import_prop_types7.default.oneOf(["up", "down", null]),
|
|
1334
|
-
/**
|
|
1347
|
+
/** Warna aksen: blue | green | violet | orange | sky | rose */
|
|
1348
|
+
accentColor: import_prop_types7.default.string,
|
|
1335
1349
|
className: import_prop_types7.default.string
|
|
1336
1350
|
};
|
|
1337
1351
|
|
|
@@ -2123,7 +2137,8 @@ function ReusableDashboardView({
|
|
|
2123
2137
|
label: labels[widget.label] || widget.label,
|
|
2124
2138
|
value: data.stats[widget.valueKey],
|
|
2125
2139
|
icon: widget.icon,
|
|
2126
|
-
format: widget.format
|
|
2140
|
+
format: widget.format,
|
|
2141
|
+
accentColor: widget.accentColor
|
|
2127
2142
|
}
|
|
2128
2143
|
))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4" }, config.widgets.charts.map((widget) => /* @__PURE__ */ import_react19.default.createElement(
|
|
2129
2144
|
ChartCard,
|