warqadui 0.0.101 → 0.0.103
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.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +37 -4
- package/dist/index.mjs +37 -4
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -661,8 +661,9 @@ interface SummaryTableProps<T> {
|
|
|
661
661
|
columns: SummaryColumn<T>[];
|
|
662
662
|
data: T[];
|
|
663
663
|
className?: string;
|
|
664
|
+
isLoading?: boolean;
|
|
664
665
|
}
|
|
665
|
-
declare function SummaryTable<T>({ title, columns, data, className, }: SummaryTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
666
|
+
declare function SummaryTable<T>({ title, columns, data, className, isLoading, }: SummaryTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
666
667
|
|
|
667
668
|
interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
668
669
|
variant?: "primary" | "danger" | "warning" | "success";
|
|
@@ -1793,6 +1794,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1793
1794
|
note: z$1.ZodOptional<z$1.ZodString>;
|
|
1794
1795
|
fromWallet: z$1.ZodString;
|
|
1795
1796
|
toWallet: z$1.ZodString;
|
|
1797
|
+
fee: z$1.ZodOptional<z$1.ZodNumber>;
|
|
1796
1798
|
fromWalletObject: z$1.ZodOptional<z$1.ZodAny>;
|
|
1797
1799
|
toWalletObject: z$1.ZodOptional<z$1.ZodAny>;
|
|
1798
1800
|
rate: z$1.ZodOptional<z$1.ZodNumber>;
|
|
@@ -1804,6 +1806,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1804
1806
|
note?: string | undefined;
|
|
1805
1807
|
branch?: string | undefined;
|
|
1806
1808
|
rate?: number | undefined;
|
|
1809
|
+
fee?: number | undefined;
|
|
1807
1810
|
fromWalletObject?: any;
|
|
1808
1811
|
toWalletObject?: any;
|
|
1809
1812
|
}, {
|
|
@@ -1814,6 +1817,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1814
1817
|
note?: string | undefined;
|
|
1815
1818
|
branch?: string | undefined;
|
|
1816
1819
|
rate?: number | undefined;
|
|
1820
|
+
fee?: number | undefined;
|
|
1817
1821
|
fromWalletObject?: any;
|
|
1818
1822
|
toWalletObject?: any;
|
|
1819
1823
|
}>;
|
package/dist/index.d.ts
CHANGED
|
@@ -661,8 +661,9 @@ interface SummaryTableProps<T> {
|
|
|
661
661
|
columns: SummaryColumn<T>[];
|
|
662
662
|
data: T[];
|
|
663
663
|
className?: string;
|
|
664
|
+
isLoading?: boolean;
|
|
664
665
|
}
|
|
665
|
-
declare function SummaryTable<T>({ title, columns, data, className, }: SummaryTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
666
|
+
declare function SummaryTable<T>({ title, columns, data, className, isLoading, }: SummaryTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
666
667
|
|
|
667
668
|
interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
668
669
|
variant?: "primary" | "danger" | "warning" | "success";
|
|
@@ -1793,6 +1794,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1793
1794
|
note: z$1.ZodOptional<z$1.ZodString>;
|
|
1794
1795
|
fromWallet: z$1.ZodString;
|
|
1795
1796
|
toWallet: z$1.ZodString;
|
|
1797
|
+
fee: z$1.ZodOptional<z$1.ZodNumber>;
|
|
1796
1798
|
fromWalletObject: z$1.ZodOptional<z$1.ZodAny>;
|
|
1797
1799
|
toWalletObject: z$1.ZodOptional<z$1.ZodAny>;
|
|
1798
1800
|
rate: z$1.ZodOptional<z$1.ZodNumber>;
|
|
@@ -1804,6 +1806,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1804
1806
|
note?: string | undefined;
|
|
1805
1807
|
branch?: string | undefined;
|
|
1806
1808
|
rate?: number | undefined;
|
|
1809
|
+
fee?: number | undefined;
|
|
1807
1810
|
fromWalletObject?: any;
|
|
1808
1811
|
toWalletObject?: any;
|
|
1809
1812
|
}, {
|
|
@@ -1814,6 +1817,7 @@ declare const moneyTransferSchema: z$1.ZodObject<{
|
|
|
1814
1817
|
note?: string | undefined;
|
|
1815
1818
|
branch?: string | undefined;
|
|
1816
1819
|
rate?: number | undefined;
|
|
1820
|
+
fee?: number | undefined;
|
|
1817
1821
|
fromWalletObject?: any;
|
|
1818
1822
|
toWalletObject?: any;
|
|
1819
1823
|
}>;
|
package/dist/index.js
CHANGED
|
@@ -4576,7 +4576,8 @@ function SummaryTable({
|
|
|
4576
4576
|
title = "Account overview",
|
|
4577
4577
|
columns,
|
|
4578
4578
|
data,
|
|
4579
|
-
className
|
|
4579
|
+
className,
|
|
4580
|
+
isLoading
|
|
4580
4581
|
}) {
|
|
4581
4582
|
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4582
4583
|
"div",
|
|
@@ -4591,7 +4592,7 @@ function SummaryTable({
|
|
|
4591
4592
|
title && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between px-6 py-4 border-b border-gray-100 dark:border-zinc-800/80 bg-white dark:bg-zinc-900", children: [
|
|
4592
4593
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("h3", { className: "text-lg font-bold text-gray-900 dark:text-white capitalize flex items-center gap-3", children: [
|
|
4593
4594
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "w-1.5 h-5 bg-blue-600 dark:bg-blue-500 rounded-full inline-block shadow-sm" }),
|
|
4594
|
-
title
|
|
4595
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-5 w-32 bg-gray-100 dark:bg-zinc-800 rounded animate-pulse" }) : title
|
|
4595
4596
|
] }),
|
|
4596
4597
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("button", { className: "text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors p-1 rounded-md hover:bg-gray-100 dark:hover:bg-zinc-800", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4597
4598
|
"svg",
|
|
@@ -4624,7 +4625,7 @@ function SummaryTable({
|
|
|
4624
4625
|
},
|
|
4625
4626
|
col.key || idx
|
|
4626
4627
|
)) }) }),
|
|
4627
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("tbody", { className: "text-gray-800 dark:text-gray-200 bg-white dark:bg-zinc-900", children: data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("td", { colSpan: columns.length, className: "px-6 py-12 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col items-center justify-center space-y-3", children: [
|
|
4628
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("tbody", { className: "text-gray-800 dark:text-gray-200 bg-white dark:bg-zinc-900", children: isLoading ? [...Array(3)].map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("tr", { className: "border-b border-gray-50 dark:border-zinc-800/60", children: columns.map((col, j) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("td", { className: "px-6 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-4 bg-gray-100 dark:bg-zinc-800 rounded animate-pulse w-full" }) }, j)) }, i)) : data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("td", { colSpan: columns.length, className: "px-6 py-12 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col items-center justify-center space-y-3", children: [
|
|
4628
4629
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-12 w-12 rounded-full bg-gray-50 dark:bg-zinc-800 flex items-center justify-center text-gray-400 border border-gray-100 dark:border-zinc-700", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4629
4630
|
"svg",
|
|
4630
4631
|
{
|
|
@@ -8966,6 +8967,22 @@ function MoneyTransfer({ data, isLoading }) {
|
|
|
8966
8967
|
}
|
|
8967
8968
|
),
|
|
8968
8969
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DataItem, { label: "Entry Date", value: data.date }),
|
|
8970
|
+
data.fee > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
8971
|
+
DataItem,
|
|
8972
|
+
{
|
|
8973
|
+
label: "Transaction Fee",
|
|
8974
|
+
value: Formats_default.Price(data.fee, data.currency || "USD"),
|
|
8975
|
+
className: "text-orange-600"
|
|
8976
|
+
}
|
|
8977
|
+
),
|
|
8978
|
+
data.feeAmount > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
8979
|
+
DataItem,
|
|
8980
|
+
{
|
|
8981
|
+
label: "Total Deducted",
|
|
8982
|
+
value: Formats_default.Price(data.feeAmount, data.currency || "USD"),
|
|
8983
|
+
className: "font-bold underline"
|
|
8984
|
+
}
|
|
8985
|
+
),
|
|
8969
8986
|
data.exchange && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "col-span-full pt-4 mt-2 border-t border-gray-50 dark:border-zinc-800/50", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-between p-4 bg-blue-50/30 dark:bg-blue-500/5 rounded-xl border border-blue-100/50 dark:border-blue-500/10", children: [
|
|
8970
8987
|
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
8971
8988
|
DataItem,
|
|
@@ -14029,6 +14046,10 @@ function MoneyTransfers({ url }) {
|
|
|
14029
14046
|
const transfer = row.original;
|
|
14030
14047
|
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col", children: [
|
|
14031
14048
|
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: Formats_default.Price(transfer?.amount, transfer?.currency) }),
|
|
14049
|
+
transfer?.fee > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "text-xs text-orange-600", children: [
|
|
14050
|
+
"Fee: ",
|
|
14051
|
+
Formats_default.Price(transfer?.fee, transfer?.currency)
|
|
14052
|
+
] }),
|
|
14032
14053
|
transfer?.exchange?.rate && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "text-xs text-green-600", children: [
|
|
14033
14054
|
"Rate: ",
|
|
14034
14055
|
transfer?.exchange?.rate,
|
|
@@ -14097,6 +14118,7 @@ var moneyTransferSchema = import_zod28.z.object({
|
|
|
14097
14118
|
note: import_zod28.z.string().optional(),
|
|
14098
14119
|
fromWallet: import_zod28.z.string(),
|
|
14099
14120
|
toWallet: import_zod28.z.string(),
|
|
14121
|
+
fee: import_zod28.z.coerce.number().optional(),
|
|
14100
14122
|
// Objects for frontend helpers
|
|
14101
14123
|
fromWalletObject: import_zod28.z.any().optional(),
|
|
14102
14124
|
toWalletObject: import_zod28.z.any().optional(),
|
|
@@ -14119,6 +14141,7 @@ function MoneyTransferForm() {
|
|
|
14119
14141
|
defaultValues: {
|
|
14120
14142
|
date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-GB"),
|
|
14121
14143
|
amount: 0,
|
|
14144
|
+
fee: 0,
|
|
14122
14145
|
fromWallet: "",
|
|
14123
14146
|
toWallet: ""
|
|
14124
14147
|
}
|
|
@@ -14230,7 +14253,7 @@ function MoneyTransferForm() {
|
|
|
14230
14253
|
}
|
|
14231
14254
|
)
|
|
14232
14255
|
] }),
|
|
14233
|
-
/* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-
|
|
14256
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-4", children: [
|
|
14234
14257
|
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
14235
14258
|
Fields_default.DateInput,
|
|
14236
14259
|
{
|
|
@@ -14250,6 +14273,16 @@ function MoneyTransferForm() {
|
|
|
14250
14273
|
placeholder: "0.00",
|
|
14251
14274
|
required: true
|
|
14252
14275
|
}
|
|
14276
|
+
),
|
|
14277
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
14278
|
+
Fields_default.Input,
|
|
14279
|
+
{
|
|
14280
|
+
label: "Fee (Optional)",
|
|
14281
|
+
form: methods,
|
|
14282
|
+
name: "fee",
|
|
14283
|
+
type: "number",
|
|
14284
|
+
placeholder: "0.00"
|
|
14285
|
+
}
|
|
14253
14286
|
)
|
|
14254
14287
|
] }),
|
|
14255
14288
|
isRate && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
|
package/dist/index.mjs
CHANGED
|
@@ -4481,7 +4481,8 @@ function SummaryTable({
|
|
|
4481
4481
|
title = "Account overview",
|
|
4482
4482
|
columns,
|
|
4483
4483
|
data,
|
|
4484
|
-
className
|
|
4484
|
+
className,
|
|
4485
|
+
isLoading
|
|
4485
4486
|
}) {
|
|
4486
4487
|
return /* @__PURE__ */ jsxs23(
|
|
4487
4488
|
"div",
|
|
@@ -4496,7 +4497,7 @@ function SummaryTable({
|
|
|
4496
4497
|
title && /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between px-6 py-4 border-b border-gray-100 dark:border-zinc-800/80 bg-white dark:bg-zinc-900", children: [
|
|
4497
4498
|
/* @__PURE__ */ jsxs23("h3", { className: "text-lg font-bold text-gray-900 dark:text-white capitalize flex items-center gap-3", children: [
|
|
4498
4499
|
/* @__PURE__ */ jsx28("span", { className: "w-1.5 h-5 bg-blue-600 dark:bg-blue-500 rounded-full inline-block shadow-sm" }),
|
|
4499
|
-
title
|
|
4500
|
+
isLoading ? /* @__PURE__ */ jsx28("div", { className: "h-5 w-32 bg-gray-100 dark:bg-zinc-800 rounded animate-pulse" }) : title
|
|
4500
4501
|
] }),
|
|
4501
4502
|
/* @__PURE__ */ jsx28("button", { className: "text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors p-1 rounded-md hover:bg-gray-100 dark:hover:bg-zinc-800", children: /* @__PURE__ */ jsxs23(
|
|
4502
4503
|
"svg",
|
|
@@ -4529,7 +4530,7 @@ function SummaryTable({
|
|
|
4529
4530
|
},
|
|
4530
4531
|
col.key || idx
|
|
4531
4532
|
)) }) }),
|
|
4532
|
-
/* @__PURE__ */ jsx28("tbody", { className: "text-gray-800 dark:text-gray-200 bg-white dark:bg-zinc-900", children: data.length === 0 ? /* @__PURE__ */ jsx28("tr", { children: /* @__PURE__ */ jsx28("td", { colSpan: columns.length, className: "px-6 py-12 text-center", children: /* @__PURE__ */ jsxs23("div", { className: "flex flex-col items-center justify-center space-y-3", children: [
|
|
4533
|
+
/* @__PURE__ */ jsx28("tbody", { className: "text-gray-800 dark:text-gray-200 bg-white dark:bg-zinc-900", children: isLoading ? [...Array(3)].map((_, i) => /* @__PURE__ */ jsx28("tr", { className: "border-b border-gray-50 dark:border-zinc-800/60", children: columns.map((col, j) => /* @__PURE__ */ jsx28("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsx28("div", { className: "h-4 bg-gray-100 dark:bg-zinc-800 rounded animate-pulse w-full" }) }, j)) }, i)) : data.length === 0 ? /* @__PURE__ */ jsx28("tr", { children: /* @__PURE__ */ jsx28("td", { colSpan: columns.length, className: "px-6 py-12 text-center", children: /* @__PURE__ */ jsxs23("div", { className: "flex flex-col items-center justify-center space-y-3", children: [
|
|
4533
4534
|
/* @__PURE__ */ jsx28("div", { className: "h-12 w-12 rounded-full bg-gray-50 dark:bg-zinc-800 flex items-center justify-center text-gray-400 border border-gray-100 dark:border-zinc-700", children: /* @__PURE__ */ jsxs23(
|
|
4534
4535
|
"svg",
|
|
4535
4536
|
{
|
|
@@ -8920,6 +8921,22 @@ function MoneyTransfer({ data, isLoading }) {
|
|
|
8920
8921
|
}
|
|
8921
8922
|
),
|
|
8922
8923
|
/* @__PURE__ */ jsx44(DataItem, { label: "Entry Date", value: data.date }),
|
|
8924
|
+
data.fee > 0 && /* @__PURE__ */ jsx44(
|
|
8925
|
+
DataItem,
|
|
8926
|
+
{
|
|
8927
|
+
label: "Transaction Fee",
|
|
8928
|
+
value: Formats_default.Price(data.fee, data.currency || "USD"),
|
|
8929
|
+
className: "text-orange-600"
|
|
8930
|
+
}
|
|
8931
|
+
),
|
|
8932
|
+
data.feeAmount > 0 && /* @__PURE__ */ jsx44(
|
|
8933
|
+
DataItem,
|
|
8934
|
+
{
|
|
8935
|
+
label: "Total Deducted",
|
|
8936
|
+
value: Formats_default.Price(data.feeAmount, data.currency || "USD"),
|
|
8937
|
+
className: "font-bold underline"
|
|
8938
|
+
}
|
|
8939
|
+
),
|
|
8923
8940
|
data.exchange && /* @__PURE__ */ jsx44("div", { className: "col-span-full pt-4 mt-2 border-t border-gray-50 dark:border-zinc-800/50", children: /* @__PURE__ */ jsxs36("div", { className: "flex items-center justify-between p-4 bg-blue-50/30 dark:bg-blue-500/5 rounded-xl border border-blue-100/50 dark:border-blue-500/10", children: [
|
|
8924
8941
|
/* @__PURE__ */ jsx44(
|
|
8925
8942
|
DataItem,
|
|
@@ -14000,6 +14017,10 @@ function MoneyTransfers({ url }) {
|
|
|
14000
14017
|
const transfer = row.original;
|
|
14001
14018
|
return /* @__PURE__ */ jsxs68("div", { className: "flex flex-col", children: [
|
|
14002
14019
|
/* @__PURE__ */ jsx86("span", { children: Formats_default.Price(transfer?.amount, transfer?.currency) }),
|
|
14020
|
+
transfer?.fee > 0 && /* @__PURE__ */ jsxs68("span", { className: "text-xs text-orange-600", children: [
|
|
14021
|
+
"Fee: ",
|
|
14022
|
+
Formats_default.Price(transfer?.fee, transfer?.currency)
|
|
14023
|
+
] }),
|
|
14003
14024
|
transfer?.exchange?.rate && /* @__PURE__ */ jsxs68("span", { className: "text-xs text-green-600", children: [
|
|
14004
14025
|
"Rate: ",
|
|
14005
14026
|
transfer?.exchange?.rate,
|
|
@@ -14068,6 +14089,7 @@ var moneyTransferSchema = z13.object({
|
|
|
14068
14089
|
note: z13.string().optional(),
|
|
14069
14090
|
fromWallet: z13.string(),
|
|
14070
14091
|
toWallet: z13.string(),
|
|
14092
|
+
fee: z13.coerce.number().optional(),
|
|
14071
14093
|
// Objects for frontend helpers
|
|
14072
14094
|
fromWalletObject: z13.any().optional(),
|
|
14073
14095
|
toWalletObject: z13.any().optional(),
|
|
@@ -14090,6 +14112,7 @@ function MoneyTransferForm() {
|
|
|
14090
14112
|
defaultValues: {
|
|
14091
14113
|
date: (/* @__PURE__ */ new Date()).toLocaleDateString("en-GB"),
|
|
14092
14114
|
amount: 0,
|
|
14115
|
+
fee: 0,
|
|
14093
14116
|
fromWallet: "",
|
|
14094
14117
|
toWallet: ""
|
|
14095
14118
|
}
|
|
@@ -14201,7 +14224,7 @@ function MoneyTransferForm() {
|
|
|
14201
14224
|
}
|
|
14202
14225
|
)
|
|
14203
14226
|
] }),
|
|
14204
|
-
/* @__PURE__ */ jsxs69("div", { className: "grid grid-cols-1 sm:grid-cols-
|
|
14227
|
+
/* @__PURE__ */ jsxs69("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-4", children: [
|
|
14205
14228
|
/* @__PURE__ */ jsx87(
|
|
14206
14229
|
Fields_default.DateInput,
|
|
14207
14230
|
{
|
|
@@ -14221,6 +14244,16 @@ function MoneyTransferForm() {
|
|
|
14221
14244
|
placeholder: "0.00",
|
|
14222
14245
|
required: true
|
|
14223
14246
|
}
|
|
14247
|
+
),
|
|
14248
|
+
/* @__PURE__ */ jsx87(
|
|
14249
|
+
Fields_default.Input,
|
|
14250
|
+
{
|
|
14251
|
+
label: "Fee (Optional)",
|
|
14252
|
+
form: methods,
|
|
14253
|
+
name: "fee",
|
|
14254
|
+
type: "number",
|
|
14255
|
+
placeholder: "0.00"
|
|
14256
|
+
}
|
|
14224
14257
|
)
|
|
14225
14258
|
] }),
|
|
14226
14259
|
isRate && /* @__PURE__ */ jsxs69("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
|