@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 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
- return /* @__PURE__ */ import_react9.default.createElement("div", { className: `card p-4 flex flex-col justify-between gap-2 ${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(Icon, { name: icon, size: 20 }), /* @__PURE__ */ import_react9.default.createElement(Typography, { variant: "subheading" }, label)), trend ? /* @__PURE__ */ import_react9.default.createElement(
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
- /** ClassName tambahan. */
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,