aq-fe-framework 0.1.32 → 0.1.34

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/ButtonRouterBack/MyButtonRouterBack.tsx
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 React3, { 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__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement("div", { style: { display: "none" } }, /* @__PURE__ */ React3.createElement("div", { ref: printRef }, contentToPrint)), /* @__PURE__ */ React3.createElement(
1455
+ Button10,
1456
+ __spreadValues({
1457
+ color: "orange",
1458
+ onClick: handleClick,
1459
+ leftSection: /* @__PURE__ */ React3.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
- Button10,
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 Button11, Group as Group7, LoadingOverlay, Modal as Modal10, Paper as Paper3, Text as Text5, Tooltip as Tooltip4 } from "@mantine/core";
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(Button11, { color: "cyan", onClick: () => {
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 Button12, Flex as Flex3, Group as Group10, Paper as Paper5, Text as Text9 } from "@mantine/core";
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
- Button12,
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 Button13 } from "@mantine/core";
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(Button13, { onClick: () => {
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 Button14,
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(Button14, { 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(
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(Button14, { 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" }))
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
 
@@ -6229,17 +6258,17 @@ function MyPageContent({ leftTopBar, title, canBack = false, rightTopBar, status
6229
6258
 
6230
6259
  // src/components/Layouts/Tab/MyTab.tsx
6231
6260
  import { rem, Space as Space3, Tabs } from "@mantine/core";
6232
- import React3 from "react";
6261
+ import React4 from "react";
6233
6262
  function MyTab(_a) {
6234
6263
  var _b = _a, { tabList, children } = _b, rest = __objRest(_b, ["tabList", "children"]);
6235
6264
  const iconStyle = { width: rem(20), height: rem(20) };
6236
- return /* @__PURE__ */ React3.createElement(Tabs, __spreadValues({ defaultValue: tabList[0].label }, rest), /* @__PURE__ */ React3.createElement(Tabs.List, null, tabList.map((item, idx) => {
6237
- return /* @__PURE__ */ React3.createElement(Tabs.Tab, { key: idx, value: item.label, leftSection: item.icon && /* @__PURE__ */ React3.createElement(item.icon, { style: iconStyle }) }, item.label);
6238
- })), /* @__PURE__ */ React3.createElement(Space3, { my: "md" }), children);
6265
+ return /* @__PURE__ */ React4.createElement(Tabs, __spreadValues({ defaultValue: tabList[0].label }, rest), /* @__PURE__ */ React4.createElement(Tabs.List, null, tabList.map((item, idx) => {
6266
+ return /* @__PURE__ */ React4.createElement(Tabs.Tab, { key: idx, value: item.label, leftSection: item.icon && /* @__PURE__ */ React4.createElement(item.icon, { style: iconStyle }) }, item.label);
6267
+ })), /* @__PURE__ */ React4.createElement(Space3, { my: "md" }), children);
6239
6268
  }
6240
6269
 
6241
6270
  // src/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx
6242
- import { ActionIcon as ActionIcon11, Button as Button15, Fieldset as Fieldset5, Group as Group14, Modal as Modal11 } from "@mantine/core";
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(Button15, { onClick: disc[1].open }, selectButtonlabel || "Ch\u1ECDn t\u1EEB danh s\xE1ch"));
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(Button15, { onClick: () => {
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$5 {
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$5;
201
- setState: (newState: I$5) => void;
202
- setProperty: <K extends keyof I$5>(key: K, value: I$5[K]) => void;
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__default.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-SQDX26UQ.mjs";
63
+ } from "../chunk-MYRCQALL.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,
@@ -20,7 +20,7 @@ import {
20
20
  createGenericStore,
21
21
  groupToTwoLevels,
22
22
  utils_layout_getItemsWithoutLinks
23
- } from "../../../chunk-SQDX26UQ.mjs";
23
+ } from "../../../chunk-MYRCQALL.mjs";
24
24
  import {
25
25
  U0DateToDDMMYYYString,
26
26
  U0MyValidateEmail,
package/package.json CHANGED
@@ -18,12 +18,13 @@
18
18
  "types": "./dist/modules-features//admin/core/index.d.mts"
19
19
  }
20
20
  },
21
- "version": "0.1.32",
21
+ "version": "0.1.34",
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",