aq-fe-framework 0.1.31 → 0.1.33
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.
|
@@ -1433,15 +1433,44 @@ function AQSelectTableByOpenModal(_a) {
|
|
|
1433
1433
|
));
|
|
1434
1434
|
}
|
|
1435
1435
|
|
|
1436
|
-
// src/components/Buttons/
|
|
1436
|
+
// src/components/Buttons/ButtonPrintPDF/MyButtonPrintPDF.tsx
|
|
1437
1437
|
import { Button as Button10 } from "@mantine/core";
|
|
1438
|
+
import { IconPrinter as IconPrinter2 } from "@tabler/icons-react";
|
|
1439
|
+
import { useRef as useRef2 } from "react";
|
|
1440
|
+
import { useReactToPrint } from "react-to-print";
|
|
1441
|
+
function MyButtonPrintPDF(_a) {
|
|
1442
|
+
var _b = _a, { contentToPrint } = _b, rest = __objRest(_b, ["contentToPrint"]);
|
|
1443
|
+
const printRef = useRef2(null);
|
|
1444
|
+
const handlePrint = useReactToPrint({
|
|
1445
|
+
// Sử dụng documentTitle thay vì content
|
|
1446
|
+
documentTitle: "In n\u1ED9i dung",
|
|
1447
|
+
// Sử dụng contentRef thay vì content
|
|
1448
|
+
contentRef: printRef
|
|
1449
|
+
});
|
|
1450
|
+
function handleClick() {
|
|
1451
|
+
if (!contentToPrint) return;
|
|
1452
|
+
handlePrint();
|
|
1453
|
+
}
|
|
1454
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { style: { display: "none" } }, /* @__PURE__ */ React.createElement("div", { ref: printRef }, contentToPrint)), /* @__PURE__ */ React.createElement(
|
|
1455
|
+
Button10,
|
|
1456
|
+
__spreadValues({
|
|
1457
|
+
color: "orange",
|
|
1458
|
+
onClick: handleClick,
|
|
1459
|
+
leftSection: /* @__PURE__ */ React.createElement(IconPrinter2, null)
|
|
1460
|
+
}, rest),
|
|
1461
|
+
"In"
|
|
1462
|
+
));
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
// src/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx
|
|
1466
|
+
import { Button as Button11 } from "@mantine/core";
|
|
1438
1467
|
import { IconArrowBack } from "@tabler/icons-react";
|
|
1439
1468
|
import { useRouter as useRouter2 } from "next/navigation";
|
|
1440
1469
|
function MyButtonRouterBack(_a) {
|
|
1441
1470
|
var _b = _a, { url, label } = _b, rest = __objRest(_b, ["url", "label"]);
|
|
1442
1471
|
const router = useRouter2();
|
|
1443
1472
|
return /* @__PURE__ */ React.createElement(
|
|
1444
|
-
|
|
1473
|
+
Button11,
|
|
1445
1474
|
__spreadValues({
|
|
1446
1475
|
variant: "light",
|
|
1447
1476
|
leftSection: /* @__PURE__ */ React.createElement(IconArrowBack, { stroke: 2 }),
|
|
@@ -1482,7 +1511,7 @@ baseAxios.interceptors.request.use(
|
|
|
1482
1511
|
var baseAxios_default = baseAxios;
|
|
1483
1512
|
|
|
1484
1513
|
// src/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx
|
|
1485
|
-
import { ActionIcon as ActionIcon9, Button as
|
|
1514
|
+
import { ActionIcon as ActionIcon9, Button as Button12, Group as Group7, LoadingOverlay, Modal as Modal10, Paper as Paper3, Text as Text5, Tooltip as Tooltip4 } from "@mantine/core";
|
|
1486
1515
|
import { useDisclosure as useDisclosure9 } from "@mantine/hooks";
|
|
1487
1516
|
import { IconLivePhoto as IconLivePhoto2, IconMaximize as IconMaximize3, IconMinimize as IconMinimize3 } from "@tabler/icons-react";
|
|
1488
1517
|
import { useQuery } from "@tanstack/react-query";
|
|
@@ -1499,7 +1528,7 @@ function MyButtonViewPDF({ id, modalSize = "80%", label = "Xem file", src = "htt
|
|
|
1499
1528
|
},
|
|
1500
1529
|
enabled: id != void 0 && disc[0] == true
|
|
1501
1530
|
});
|
|
1502
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Tooltip4, { label: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }, /* @__PURE__ */ React.createElement(
|
|
1531
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Tooltip4, { label: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }, /* @__PURE__ */ React.createElement(Button12, { color: "cyan", onClick: () => {
|
|
1503
1532
|
disc[1].open();
|
|
1504
1533
|
}, leftSection: /* @__PURE__ */ React.createElement(IconLivePhoto2, null) }, label)), /* @__PURE__ */ React.createElement(
|
|
1505
1534
|
Modal10,
|
|
@@ -5631,7 +5660,7 @@ function MyNumberFormatter(_a) {
|
|
|
5631
5660
|
}
|
|
5632
5661
|
|
|
5633
5662
|
// src/components/DataDisplay/StatCard/AQStatCard1.tsx
|
|
5634
|
-
import { Box, Button as
|
|
5663
|
+
import { Box, Button as Button13, Flex as Flex3, Group as Group10, Paper as Paper5, Text as Text9 } from "@mantine/core";
|
|
5635
5664
|
import { IconArrowDownRight, IconArrowUpRight } from "@tabler/icons-react";
|
|
5636
5665
|
function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
|
|
5637
5666
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
@@ -5679,7 +5708,7 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
|
|
|
5679
5708
|
)
|
|
5680
5709
|
),
|
|
5681
5710
|
/* @__PURE__ */ React.createElement(Group10, { justify: "space-between" }, /* @__PURE__ */ React.createElement(Text9, { tt: "uppercase", fz: "xs", c: "dimmed" }, description), /* @__PURE__ */ React.createElement(
|
|
5682
|
-
|
|
5711
|
+
Button13,
|
|
5683
5712
|
{
|
|
5684
5713
|
variant: "light",
|
|
5685
5714
|
size: "xs"
|
|
@@ -5874,13 +5903,13 @@ function useS0Auth() {
|
|
|
5874
5903
|
}
|
|
5875
5904
|
|
|
5876
5905
|
// src/modules-features/auth/F0Logout/F0Logout.tsx
|
|
5877
|
-
import { Button as
|
|
5906
|
+
import { Button as Button14 } from "@mantine/core";
|
|
5878
5907
|
import { IconLogout } from "@tabler/icons-react";
|
|
5879
5908
|
import { useRouter as useRouter3 } from "next/navigation";
|
|
5880
5909
|
function F0Logout() {
|
|
5881
5910
|
const router = useRouter3();
|
|
5882
5911
|
const s0Auth = useS0Auth();
|
|
5883
|
-
return /* @__PURE__ */ React.createElement(
|
|
5912
|
+
return /* @__PURE__ */ React.createElement(Button14, { onClick: () => {
|
|
5884
5913
|
s0Auth.setProperty("token", "");
|
|
5885
5914
|
router.replace("/auth/login");
|
|
5886
5915
|
}, leftSection: /* @__PURE__ */ React.createElement(IconLogout, null), fullWidth: true, justify: "start", variant: "subtle" }, "\u0110\u0103ng xu\u1EA5t");
|
|
@@ -6092,7 +6121,7 @@ var OBJECT_COlORS = {
|
|
|
6092
6121
|
import {
|
|
6093
6122
|
Box as Box3,
|
|
6094
6123
|
Burger,
|
|
6095
|
-
Button as
|
|
6124
|
+
Button as Button15,
|
|
6096
6125
|
Container as Container2,
|
|
6097
6126
|
Divider as Divider3,
|
|
6098
6127
|
Drawer,
|
|
@@ -6169,7 +6198,7 @@ function HeaderMegaMenu({ children, menus }) {
|
|
|
6169
6198
|
const HeaderMegaMenuStore = useHeaderMegaMenuStore();
|
|
6170
6199
|
const theme = useMantineTheme();
|
|
6171
6200
|
const links = mockdata.map((item) => /* @__PURE__ */ React.createElement(UnstyledButton, { className: css_default2.subLink, key: item.title }, /* @__PURE__ */ React.createElement(Group12, { wrap: "nowrap", align: "flex-start" }, /* @__PURE__ */ React.createElement(ThemeIcon, { size: 34, variant: "default", radius: "md" }, /* @__PURE__ */ React.createElement(item.icon, { size: 22, color: theme.colors.blue[6] })), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Text12, { size: "sm", fw: 500 }, item.title), /* @__PURE__ */ React.createElement(Text12, { size: "xs", c: "dimmed" }, item.description)))));
|
|
6172
|
-
return /* @__PURE__ */ React.createElement(Box3, null, /* @__PURE__ */ React.createElement("header", { className: css_default2.header }, /* @__PURE__ */ React.createElement(Group12, { justify: "space-between", h: "100%" }, /* @__PURE__ */ React.createElement(Group12, null, /* @__PURE__ */ React.createElement(Image4, { src: "/imgs/0/IMG0LogoAQTech.png", h: 30, alt: "", w: "auto" }), /* @__PURE__ */ React.createElement(Group12, { h: "100%", gap: 5, visibleFrom: "sm" }, menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ React.createElement(
|
|
6201
|
+
return /* @__PURE__ */ React.createElement(Box3, null, /* @__PURE__ */ React.createElement("header", { className: css_default2.header }, /* @__PURE__ */ React.createElement(Group12, { justify: "space-between", h: "100%" }, /* @__PURE__ */ React.createElement(Group12, null, /* @__PURE__ */ React.createElement(Image4, { src: "/imgs/0/IMG0LogoAQTech.png", h: 30, alt: "", w: "auto" }), /* @__PURE__ */ React.createElement(Group12, { h: "100%", gap: 5, visibleFrom: "sm" }, menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ React.createElement(Button15, { key: idx, component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }) }, item.label)))), /* @__PURE__ */ React.createElement(Group12, null, /* @__PURE__ */ React.createElement(TextInput3, { placeholder: "T\xECm ki\u1EBFm", leftSection: /* @__PURE__ */ React.createElement(IconSearch3, null), radius: "xl", w: "250px" }), /* @__PURE__ */ React.createElement(MySwitchTheme, null)), /* @__PURE__ */ React.createElement(Burger, { opened: drawerOpened, onClick: toggleDrawer, hiddenFrom: "sm" }))), /* @__PURE__ */ React.createElement(Container2, { fluid: true, pt: "sm", pb: "md", bg: OBJECT_COlORS.mantineBackgroundSecondary, mih: "93vh" }, children), /* @__PURE__ */ React.createElement(
|
|
6173
6202
|
Drawer,
|
|
6174
6203
|
{
|
|
6175
6204
|
opened: drawerOpened,
|
|
@@ -6180,7 +6209,7 @@ function HeaderMegaMenu({ children, menus }) {
|
|
|
6180
6209
|
hiddenFrom: "sm",
|
|
6181
6210
|
zIndex: 1e6
|
|
6182
6211
|
},
|
|
6183
|
-
/* @__PURE__ */ React.createElement(ScrollArea3, { h: "calc(100vh - 80px", mx: "-md" }, /* @__PURE__ */ React.createElement(Divider3, { my: "sm" }), /* @__PURE__ */ React.createElement(MyFlexColumn, { h: "100%", gap: 0 }, menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ React.createElement(
|
|
6212
|
+
/* @__PURE__ */ React.createElement(ScrollArea3, { h: "calc(100vh - 80px", mx: "-md" }, /* @__PURE__ */ React.createElement(Divider3, { my: "sm" }), /* @__PURE__ */ React.createElement(MyFlexColumn, { h: "100%", gap: 0 }, menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ React.createElement(Button15, { key: idx, component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }) }, item.label))), /* @__PURE__ */ React.createElement(Divider3, { my: "sm" }))
|
|
6184
6213
|
));
|
|
6185
6214
|
}
|
|
6186
6215
|
|
|
@@ -6239,7 +6268,7 @@ function MyTab(_a) {
|
|
|
6239
6268
|
}
|
|
6240
6269
|
|
|
6241
6270
|
// src/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx
|
|
6242
|
-
import { ActionIcon as ActionIcon11, Button as
|
|
6271
|
+
import { ActionIcon as ActionIcon11, Button as Button16, Fieldset as Fieldset5, Group as Group14, Modal as Modal11 } from "@mantine/core";
|
|
6243
6272
|
import { useDisclosure as useDisclosure11 } from "@mantine/hooks";
|
|
6244
6273
|
import { IconX as IconX2 } from "@tabler/icons-react";
|
|
6245
6274
|
function MyDataTableSelect(_a) {
|
|
@@ -6250,7 +6279,7 @@ function MyDataTableSelect(_a) {
|
|
|
6250
6279
|
MyDataTable,
|
|
6251
6280
|
__spreadValues({
|
|
6252
6281
|
renderTopToolbarCustomActions: ({ table }) => {
|
|
6253
|
-
return /* @__PURE__ */ React.createElement(Group14, null, renderTopToolbarCustomActions && renderTopToolbarCustomActions({ table }), /* @__PURE__ */ React.createElement(
|
|
6282
|
+
return /* @__PURE__ */ React.createElement(Group14, null, renderTopToolbarCustomActions && renderTopToolbarCustomActions({ table }), /* @__PURE__ */ React.createElement(Button16, { onClick: disc[1].open }, selectButtonlabel || "Ch\u1ECDn t\u1EEB danh s\xE1ch"));
|
|
6254
6283
|
},
|
|
6255
6284
|
columns,
|
|
6256
6285
|
data: listState[0],
|
|
@@ -6262,7 +6291,7 @@ function MyDataTableSelect(_a) {
|
|
|
6262
6291
|
MyDataTable,
|
|
6263
6292
|
__spreadValues({
|
|
6264
6293
|
renderTopToolbarCustomActions: ({ table }) => {
|
|
6265
|
-
return /* @__PURE__ */ React.createElement(
|
|
6294
|
+
return /* @__PURE__ */ React.createElement(Button16, { onClick: () => {
|
|
6266
6295
|
table.getSelectedRowModel().rows.map((item) => listState[1].append(item.original));
|
|
6267
6296
|
disc[1].close();
|
|
6268
6297
|
} }, "Ch\u1ECDn");
|
|
@@ -6344,6 +6373,7 @@ export {
|
|
|
6344
6373
|
SelectFileModal,
|
|
6345
6374
|
MyButtonImport,
|
|
6346
6375
|
AQSelectTableByOpenModal,
|
|
6376
|
+
MyButtonPrintPDF,
|
|
6347
6377
|
MyButtonRouterBack,
|
|
6348
6378
|
baseAxios_default,
|
|
6349
6379
|
MyButtonViewPDF,
|
|
@@ -182,7 +182,7 @@ interface IFieldConfig extends IUtils_Excel_ColumnConfig<any> {
|
|
|
182
182
|
isSelected?: boolean;
|
|
183
183
|
fieldToMap?: string;
|
|
184
184
|
}
|
|
185
|
-
interface I$
|
|
185
|
+
interface I$6 {
|
|
186
186
|
file?: File | null;
|
|
187
187
|
title?: string[];
|
|
188
188
|
data?: any[];
|
|
@@ -197,9 +197,9 @@ declare function useS_ButtonImport(): {
|
|
|
197
197
|
getDataFinal: <T>() => T[];
|
|
198
198
|
changeAllSelected: (isSelected: boolean) => void;
|
|
199
199
|
autoMap: () => void;
|
|
200
|
-
state: I$
|
|
201
|
-
setState: (newState: I$
|
|
202
|
-
setProperty: <K extends keyof I$
|
|
200
|
+
state: I$6;
|
|
201
|
+
setState: (newState: I$6) => void;
|
|
202
|
+
setProperty: <K extends keyof I$6>(key: K, value: I$6[K]) => void;
|
|
203
203
|
resetState: () => void;
|
|
204
204
|
};
|
|
205
205
|
|
|
@@ -218,6 +218,11 @@ interface IAQSelectTableByOpenModal<TData extends MRT_RowData> extends Omit<MRT_
|
|
|
218
218
|
}
|
|
219
219
|
declare function AQSelectTableByOpenModal<TData extends MRT_RowData>({ setSelectedData, data, columns, API, modalSize, title, label, listLabel, objectName, fullScreen, closeAfterSelect, ...rest }: IAQSelectTableByOpenModal<TData>): react.JSX.Element;
|
|
220
220
|
|
|
221
|
+
interface I$5 extends ButtonProps {
|
|
222
|
+
contentToPrint?: ReactNode;
|
|
223
|
+
}
|
|
224
|
+
declare function MyButtonPrintPDF({ contentToPrint, ...rest }: I$5): react.JSX.Element;
|
|
225
|
+
|
|
221
226
|
interface IMyButtonRouterBack extends ButtonProps {
|
|
222
227
|
url?: string;
|
|
223
228
|
label?: string;
|
|
@@ -436,4 +441,4 @@ interface IMySkeletonTable extends SkeletonProps {
|
|
|
436
441
|
}
|
|
437
442
|
declare function MySkeletonTable({ h }: IMySkeletonTable): react.JSX.Element;
|
|
438
443
|
|
|
439
|
-
export { AQButtonCreateByImportFile, AQButtonExportData, AQCard, AQSelectTableByOpenModal, AQStatCard1, BasicAppShell, BasicAppShell_transformMenuToEnum, Boxes, HeaderMegaMenu, type I0LinkItem, type IAQCardProps, type IMyTextEditor, MyActionIcon, MyActionIconCheck, MyActionIconDelete, MyActionIconDownloadPDF, MyActionIconModal, MyActionIconUpdate, MyActionIconUpload, MyActionIconViewPDF, MyAnchorViewPDF, MyAppSpotlight, MyBoxesBackground, MyBoxesCore, MyButton, MyButtonCreate, MyButtonImport, MyButtonModal, MyButtonRouterBack, MyButtonViewPDF, MyCalendar, MyCardioLoader, MyCenterFull, MyCheckbox, MyContainer, MyDataTable, MyDataTableSelect, MyDateInput, MyFieldset, MyFileInput, MyFlexColumn, MyFlexEnd, MyFlexRow, MyHtmlWrapper, MyKeyLabel, MyNumberFormatter, MyNumberInput, MyPageContent, MySelect, MySelectAPIGet, MySkeletonTable, MySwitchTheme, MyTab, MyTextArea, MyTextEditor, MyTextInput, SelectFieldModal, SelectFileModal, type SelectFileModalProps, SpotlightTrigger, groupToTwoLevels, useHeaderMegaMenuStore, useS_ButtonImport, utils_layout_getItemsWithoutLinks };
|
|
444
|
+
export { AQButtonCreateByImportFile, AQButtonExportData, AQCard, AQSelectTableByOpenModal, AQStatCard1, BasicAppShell, BasicAppShell_transformMenuToEnum, Boxes, HeaderMegaMenu, type I0LinkItem, type IAQCardProps, type IMyTextEditor, MyActionIcon, MyActionIconCheck, MyActionIconDelete, MyActionIconDownloadPDF, MyActionIconModal, MyActionIconUpdate, MyActionIconUpload, MyActionIconViewPDF, MyAnchorViewPDF, MyAppSpotlight, MyBoxesBackground, MyBoxesCore, MyButton, MyButtonCreate, MyButtonImport, MyButtonModal, MyButtonPrintPDF, MyButtonRouterBack, MyButtonViewPDF, MyCalendar, MyCardioLoader, MyCenterFull, MyCheckbox, MyContainer, MyDataTable, MyDataTableSelect, MyDateInput, MyFieldset, MyFileInput, MyFlexColumn, MyFlexEnd, MyFlexRow, MyHtmlWrapper, MyKeyLabel, MyNumberFormatter, MyNumberInput, MyPageContent, MySelect, MySelectAPIGet, MySkeletonTable, MySwitchTheme, MyTab, MyTextArea, MyTextEditor, MyTextInput, SelectFieldModal, SelectFileModal, type SelectFileModalProps, SpotlightTrigger, groupToTwoLevels, useHeaderMegaMenuStore, useS_ButtonImport, utils_layout_getItemsWithoutLinks };
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
MyButtonCreate,
|
|
25
25
|
MyButtonImport,
|
|
26
26
|
MyButtonModal,
|
|
27
|
+
MyButtonPrintPDF,
|
|
27
28
|
MyButtonRouterBack,
|
|
28
29
|
MyButtonViewPDF,
|
|
29
30
|
MyCalendar,
|
|
@@ -59,7 +60,7 @@ import {
|
|
|
59
60
|
useHeaderMegaMenuStore,
|
|
60
61
|
useS_ButtonImport,
|
|
61
62
|
utils_layout_getItemsWithoutLinks
|
|
62
|
-
} from "../chunk-
|
|
63
|
+
} from "../chunk-WJIQCCM6.mjs";
|
|
63
64
|
import "../chunk-ZEQATKHS.mjs";
|
|
64
65
|
export {
|
|
65
66
|
AQButtonCreateByImportFile,
|
|
@@ -87,6 +88,7 @@ export {
|
|
|
87
88
|
MyButtonCreate,
|
|
88
89
|
MyButtonImport,
|
|
89
90
|
MyButtonModal,
|
|
91
|
+
MyButtonPrintPDF,
|
|
90
92
|
MyButtonRouterBack,
|
|
91
93
|
MyButtonViewPDF,
|
|
92
94
|
MyCalendar,
|
package/package.json
CHANGED
|
@@ -14,16 +14,17 @@
|
|
|
14
14
|
"types": "./dist/stores/index.d.mts"
|
|
15
15
|
},
|
|
16
16
|
"./modules-features": {
|
|
17
|
-
"import": "./dist/modules-features/index.mjs",
|
|
18
|
-
"types": "./dist/modules-features/index.d.mts"
|
|
17
|
+
"import": "./dist/modules-features/admin/core/index.mjs",
|
|
18
|
+
"types": "./dist/modules-features//admin/core/index.d.mts"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
-
"version": "0.1.
|
|
21
|
+
"version": "0.1.33",
|
|
22
22
|
"private": false,
|
|
23
23
|
"files": [
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
+
"dev": "next dev --turbopack -p 3000",
|
|
27
28
|
"gen": "barrelsby --config barrelsby.json",
|
|
28
29
|
"build": "tsup",
|
|
29
30
|
"start": "next start",
|
|
@@ -86,6 +87,7 @@
|
|
|
86
87
|
"pizzip": "^3.1.7",
|
|
87
88
|
"react": "19.0.0-rc-66855b96-20241106",
|
|
88
89
|
"react-dom": "19.0.0-rc-66855b96-20241106",
|
|
90
|
+
"react-to-print": "^3.0.6",
|
|
89
91
|
"recharts": "^2.13.3",
|
|
90
92
|
"sass": "^1.82.0",
|
|
91
93
|
"tailwind-merge": "^2.5.4",
|