aq-fe-framework 0.1.214 → 0.1.215

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.
@@ -626,152 +626,111 @@ function MySwitchTheme() {
626
626
  }
627
627
 
628
628
  // src/components/AppSpotlight/MyAppSpotlight.tsx
629
+ import {
630
+ Badge,
631
+ Group as Group3,
632
+ Text as Text4,
633
+ TextInput as TextInput2
634
+ } from "@mantine/core";
629
635
  import { Spotlight, spotlight } from "@mantine/spotlight";
630
636
  import { IconSearch } from "@tabler/icons-react";
631
637
  import { usePathname, useRouter } from "next/navigation";
632
638
  import { useMemo, useState as useState5 } from "react";
633
-
634
- // src/components/Layouts/BasicAppShell/useS_BasicAppShell.ts
635
- var useStore = createGenericStore({
636
- initialState: {
637
- menuCode: "",
638
- moduleCode: "Module code",
639
- moduleName: "Module name",
640
- title: "",
641
- opened: true,
642
- groupMenuOpenId: []
643
- },
644
- storageKey: "useS_BasicAppShell"
645
- });
646
- function useS_BasicAppShell() {
647
- const store = useStore();
648
- const GetAQModule_query = useQ_AQ_GetAQModule();
649
- function toggle() {
650
- store.setProperty("opened", !store.state.opened);
651
- }
652
- function toggleGroupMenuOpenId(id) {
653
- const currentIds = store.state.groupMenuOpenId;
654
- if (currentIds.includes(id)) {
655
- store.setProperty(
656
- "groupMenuOpenId",
657
- currentIds.filter((existingId) => existingId !== id)
658
- );
659
- } else {
660
- store.setProperty("groupMenuOpenId", [...currentIds, id]);
661
- }
662
- }
663
- function clearGroupMenuOpenId() {
664
- store.setProperty("groupMenuOpenId", []);
665
- }
666
- function setDefault() {
667
- var _a, _b;
668
- if (!GetAQModule_query.data) return;
669
- store.setProperty("faviconFileDetail", (_a = GetAQModule_query.data) == null ? void 0 : _a.faviconFileDetail);
670
- store.setProperty("logoFileDetail", (_b = GetAQModule_query.data) == null ? void 0 : _b.logoFileDetail);
671
- }
672
- return __spreadProps(__spreadValues({}, store), {
673
- toggle,
674
- toggleGroupMenuOpenId,
675
- clearGroupMenuOpenId,
676
- setDefault
677
- });
678
- }
679
-
680
- // src/components/AppSpotlight/MyAppSpotlight.tsx
681
- import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
682
- function convertMenuToSpotlightActions(items, router, parentPath = "", sideBarStore, pathName) {
683
- let actions = [];
684
- items.forEach((item) => {
685
- if (item.link) {
686
- actions.push({
687
- id: item.label.toLowerCase().replace(/\s+/g, "-"),
688
- label: item.label,
689
- description: `Chuy\u1EC3n \u0111\u1EBFn ${item.label} (Code: ${item.link})`,
690
- onClick: () => {
691
- sideBarStore.setProperty("title", item.label);
692
- sideBarStore.setProperty("menuCode", item.link);
693
- router.push(
694
- pathName.split("/")[0] + "/" + pathName.split("/")[1] + "/" + item.link
695
- );
696
- spotlight.close();
697
- },
698
- rightSection: item.status ? item.status === "Prototype" ? "P" : item.status === "New" ? "N" : item.status === "Menu" ? "M" : null : null
699
- });
700
- }
701
- if (item.links) {
702
- actions = actions.concat(
703
- convertMenuToSpotlightActions(
704
- item.links,
705
- router,
706
- item.link || "",
707
- sideBarStore,
708
- pathName
709
- )
710
- );
711
- }
712
- });
713
- return actions;
714
- }
639
+ import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
715
640
  function MyAppSpotlight({ menu }) {
716
- const [query, setQuery] = useState5("");
717
641
  const router = useRouter();
718
642
  const pathName = usePathname();
719
- const basicAppShellStore = useS_BasicAppShell();
720
- const spotlightActions = useMemo(
721
- () => convertMenuToSpotlightActions(menu, router, "", basicAppShellStore, pathName),
722
- [menu, router, basicAppShellStore]
723
- // Add sideBarStore to the dependency array
724
- );
725
- return /* @__PURE__ */ jsx16(
726
- Spotlight,
727
- {
728
- actions: spotlightActions,
729
- query,
730
- scrollable: true,
731
- maxHeight: 800,
732
- onQueryChange: setQuery,
733
- shortcut: ["mod + K", "/"],
734
- nothingFound: "Kh\xF4ng t\xECm th\u1EA5y trang",
735
- highlightQuery: true,
736
- searchProps: {
737
- leftSection: /* @__PURE__ */ jsx16(IconSearch, { stroke: 1.5 }),
738
- placeholder: "T\xECm ki\u1EBFm trang..."
643
+ const [query, setQuery] = useState5("");
644
+ const allChildItems = useMemo(() => {
645
+ const result = [];
646
+ const extractChildren = (items) => {
647
+ items.forEach((item) => {
648
+ if (item.link) {
649
+ result.push(item);
650
+ }
651
+ if (item.links) {
652
+ extractChildren(item.links);
653
+ }
654
+ });
655
+ };
656
+ extractChildren(menu);
657
+ return result;
658
+ }, [menu]);
659
+ const filteredItems = allChildItems.filter((item) => {
660
+ var _a, _b;
661
+ const lowerQuery = query.toLowerCase().trim();
662
+ return item.label.toLowerCase().includes(lowerQuery) || ((_a = item.note) == null ? void 0 : _a.toLowerCase().includes(lowerQuery)) || ((_b = item.link) == null ? void 0 : _b.toLowerCase().includes(lowerQuery));
663
+ });
664
+ return /* @__PURE__ */ jsxs7(Fragment4, { children: [
665
+ /* @__PURE__ */ jsx16(
666
+ TextInput2,
667
+ {
668
+ mt: "md",
669
+ placeholder: "T\xECm menu (Ctrl + K)",
670
+ mx: 10,
671
+ component: "button",
672
+ onClick: spotlight.open,
673
+ leftSection: /* @__PURE__ */ jsx16(IconSearch, {}),
674
+ children: "T\xECm ki\u1EBFm (Ctrl + K)"
739
675
  }
740
- }
741
- );
742
- }
743
- function SpotlightTrigger() {
744
- return /* @__PURE__ */ jsxs7(
745
- "button",
746
- {
747
- onClick: spotlight.open,
748
- style: {
749
- background: "none",
750
- border: "none",
751
- cursor: "pointer",
752
- display: "flex",
753
- alignItems: "center",
754
- gap: "8px"
755
- },
756
- children: [
757
- /* @__PURE__ */ jsx16(IconSearch, { stroke: 1.5 }),
758
- "T\xECm ki\u1EBFm (Ctrl + K)"
759
- ]
760
- }
761
- );
676
+ ),
677
+ /* @__PURE__ */ jsxs7(
678
+ Spotlight.Root,
679
+ {
680
+ maxHeight: 800,
681
+ query,
682
+ onQueryChange: setQuery,
683
+ children: [
684
+ /* @__PURE__ */ jsx16(
685
+ Spotlight.Search,
686
+ {
687
+ placeholder: "T\xECm ki\u1EBFm menu...",
688
+ leftSection: /* @__PURE__ */ jsx16(IconSearch, { stroke: 1.5 })
689
+ }
690
+ ),
691
+ /* @__PURE__ */ jsx16(Spotlight.ActionsList, { children: filteredItems.length > 0 ? filteredItems.map((item, idx) => /* @__PURE__ */ jsx16(
692
+ Spotlight.Action,
693
+ {
694
+ onClick: () => {
695
+ router.push(
696
+ `/${pathName.split("/")[1]}/${item.link}`
697
+ );
698
+ spotlight.close();
699
+ },
700
+ children: /* @__PURE__ */ jsxs7(Group3, { wrap: "nowrap", w: "100%", children: [
701
+ /* @__PURE__ */ jsxs7("div", { style: { flex: 1 }, children: [
702
+ /* @__PURE__ */ jsx16(Text4, { children: item.label }),
703
+ /* @__PURE__ */ jsxs7(Group3, { gap: 5, children: [
704
+ item.note && /* @__PURE__ */ jsx16(Text4, { opacity: 0.6, size: "xs", children: item.note }),
705
+ /* @__PURE__ */ jsxs7(Text4, { opacity: 0.6, size: "xs", children: [
706
+ "(",
707
+ item.link,
708
+ ")"
709
+ ] })
710
+ ] })
711
+ ] }),
712
+ item.status && item.status != "Default" && /* @__PURE__ */ jsx16(Badge, { variant: "default", children: item.status })
713
+ ] })
714
+ },
715
+ idx
716
+ )) : /* @__PURE__ */ jsx16(Spotlight.Empty, { children: "Kh\xF4ng t\xECm th\u1EA5y trang..." }) })
717
+ ]
718
+ }
719
+ )
720
+ ] });
762
721
  }
763
722
 
764
723
  // src/components/Buttons/Anchor/MyAnchorViewPDF.tsx
765
- import { ActionIcon as ActionIcon8, Anchor, Group as Group3, Modal as Modal4, Paper as Paper2, Text as Text4 } from "@mantine/core";
724
+ import { ActionIcon as ActionIcon8, Anchor, Group as Group4, Modal as Modal4, Paper as Paper2, Text as Text5 } from "@mantine/core";
766
725
  import { useDisclosure as useDisclosure5 } from "@mantine/hooks";
767
726
  import { IconMaximize as IconMaximize2, IconMinimize as IconMinimize2 } from "@tabler/icons-react";
768
727
  import { useState as useState6 } from "react";
769
- import { Fragment as Fragment4, jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
728
+ import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
770
729
  function MyAnchorViewPDF({ label, pdfLink }) {
771
730
  const disc = useDisclosure5(false);
772
731
  const fullScreen = useState6(false);
773
732
  const hSize = useState6("80vh");
774
- return /* @__PURE__ */ jsxs8(Fragment4, { children: [
733
+ return /* @__PURE__ */ jsxs8(Fragment5, { children: [
775
734
  /* @__PURE__ */ jsx17(Anchor, { onClick: disc[1].open, children: label }),
776
735
  /* @__PURE__ */ jsx17(
777
736
  Modal4,
@@ -780,8 +739,8 @@ function MyAnchorViewPDF({ label, pdfLink }) {
780
739
  opened: disc[0],
781
740
  onClose: disc[1].close,
782
741
  size: "80%",
783
- title: /* @__PURE__ */ jsxs8(Group3, { children: [
784
- /* @__PURE__ */ jsx17(Text4, { children: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }),
742
+ title: /* @__PURE__ */ jsxs8(Group4, { children: [
743
+ /* @__PURE__ */ jsx17(Text5, { children: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }),
785
744
  fullScreen[0] ? /* @__PURE__ */ jsx17(
786
745
  ActionIcon8,
787
746
  {
@@ -818,7 +777,7 @@ import * as XLSX from "xlsx";
818
777
  // src/components/Buttons/ButtonModal/MyButtonModal.tsx
819
778
  import { Button as Button3, Modal as Modal5 } from "@mantine/core";
820
779
  import { IconEdit as IconEdit4, IconPlus as IconPlus4, IconTrash as IconTrash4 } from "@tabler/icons-react";
821
- import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
780
+ import { Fragment as Fragment6, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
822
781
  function MyButtonModal(_a) {
823
782
  var _b = _a, {
824
783
  fullScreen = false,
@@ -841,7 +800,7 @@ function MyButtonModal(_a) {
841
800
  ]);
842
801
  const objectNameLower = objectName == null ? void 0 : objectName.toLowerCase();
843
802
  if (crudType == "default") {
844
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
803
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
845
804
  /* @__PURE__ */ jsx18(Button3, __spreadProps(__spreadValues({ onClick: disclosure == null ? void 0 : disclosure[1].open, color: "indigo" }, rest), { children: label })),
846
805
  /* @__PURE__ */ jsx18(
847
806
  Modal5,
@@ -857,7 +816,7 @@ function MyButtonModal(_a) {
857
816
  ] });
858
817
  }
859
818
  if (crudType == "create") {
860
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
819
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
861
820
  /* @__PURE__ */ jsx18(Button3, __spreadProps(__spreadValues({ onClick: disclosure == null ? void 0 : disclosure[1].open, leftSection: /* @__PURE__ */ jsx18(IconPlus4, {}) }, rest), { children: label ? label : `Th\xEAm` })),
862
821
  /* @__PURE__ */ jsx18(
863
822
  Modal5,
@@ -873,7 +832,7 @@ function MyButtonModal(_a) {
873
832
  ] });
874
833
  }
875
834
  if (crudType == "createMultiple") {
876
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
835
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
877
836
  /* @__PURE__ */ jsx18(Button3, __spreadProps(__spreadValues({ onClick: disclosure == null ? void 0 : disclosure[1].open, color: "green", leftSection: /* @__PURE__ */ jsx18(IconPlus4, {}) }, rest), { children: label ? label : `Import ${objectNameLower}` })),
878
837
  /* @__PURE__ */ jsx18(
879
838
  Modal5,
@@ -889,7 +848,7 @@ function MyButtonModal(_a) {
889
848
  ] });
890
849
  }
891
850
  if (crudType == "update") {
892
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
851
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
893
852
  /* @__PURE__ */ jsx18(Button3, __spreadProps(__spreadValues({ onClick: disclosure == null ? void 0 : disclosure[1].open, color: "yellow", leftSection: /* @__PURE__ */ jsx18(IconEdit4, {}) }, rest), { children: label ? label : `Ch\u1EC9nh s\u1EEDa ${objectNameLower}` })),
894
853
  /* @__PURE__ */ jsx18(
895
854
  Modal5,
@@ -905,7 +864,7 @@ function MyButtonModal(_a) {
905
864
  ] });
906
865
  }
907
866
  if (crudType == "delete") {
908
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
867
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
909
868
  /* @__PURE__ */ jsx18(Button3, __spreadProps(__spreadValues({ onClick: disclosure == null ? void 0 : disclosure[1].open, color: "red", leftSection: /* @__PURE__ */ jsx18(IconTrash4, {}) }, rest), { children: label ? label : `X\xF3a ${objectNameLower}` })),
910
869
  /* @__PURE__ */ jsx18(
911
870
  Modal5,
@@ -1103,21 +1062,21 @@ function MySelect(_a) {
1103
1062
  }
1104
1063
 
1105
1064
  // src/components/Layouts/FlexEnd/MyFlexEnd.tsx
1106
- import { Group as Group4 } from "@mantine/core";
1065
+ import { Group as Group5 } from "@mantine/core";
1107
1066
  import { jsx as jsx23 } from "react/jsx-runtime";
1108
1067
  function MyFlexEnd(_a) {
1109
1068
  var _b = _a, { children } = _b, rest = __objRest(_b, ["children"]);
1110
- return /* @__PURE__ */ jsx23(Group4, __spreadProps(__spreadValues({ justify: "end", mt: "md" }, rest), { children }));
1069
+ return /* @__PURE__ */ jsx23(Group5, __spreadProps(__spreadValues({ justify: "end", mt: "md" }, rest), { children }));
1111
1070
  }
1112
1071
 
1113
1072
  // src/components/Buttons/ButtonImport/SelectFieldModal.tsx
1114
- import { Button as Button5, Divider, Fieldset, Group as Group5, Modal as Modal6, SimpleGrid, Space as Space2, Table } from "@mantine/core";
1073
+ import { Button as Button5, Divider, Fieldset, Group as Group6, Modal as Modal6, SimpleGrid, Space as Space2, Table } from "@mantine/core";
1115
1074
  import { IconArrowBackUp, IconArrowBigLeft, IconArrowBigRight, IconSquareRoundedX } from "@tabler/icons-react";
1116
1075
 
1117
1076
  // src/components/Buttons/ButtonImport/useS_ButtonImport.ts
1118
1077
  import { useEffect as useEffect4, useMemo as useMemo2 } from "react";
1119
1078
  import * as XLSX3 from "xlsx";
1120
- var useStore2 = createGenericStore({
1079
+ var useStore = createGenericStore({
1121
1080
  initialState: {
1122
1081
  data: [],
1123
1082
  title: [],
@@ -1126,7 +1085,7 @@ var useStore2 = createGenericStore({
1126
1085
  }
1127
1086
  });
1128
1087
  function useS_ButtonImport() {
1129
- const store = useStore2();
1088
+ const store = useStore();
1130
1089
  function autoMap() {
1131
1090
  if (!store.state.data || !store.state.data.length || !store.state.fieldConfig) return;
1132
1091
  const sampleRow = store.state.data[0];
@@ -1290,7 +1249,7 @@ function SelectFieldModal({ stack, onImport }) {
1290
1249
  )) })
1291
1250
  ] }),
1292
1251
  /* @__PURE__ */ jsx24(Space2, {}),
1293
- /* @__PURE__ */ jsx24(Group5, { children: /* @__PURE__ */ jsx24(
1252
+ /* @__PURE__ */ jsx24(Group6, { children: /* @__PURE__ */ jsx24(
1294
1253
  Button5,
1295
1254
  {
1296
1255
  onClick: () => {
@@ -1368,7 +1327,7 @@ function SelectFieldModal({ stack, onImport }) {
1368
1327
  }
1369
1328
 
1370
1329
  // src/components/DataDisplay/DataTable/MyDataTable.tsx
1371
- import { Button as Button6, Group as Group6, Portal } from "@mantine/core";
1330
+ import { Button as Button6, Group as Group7, Portal } from "@mantine/core";
1372
1331
  import { IconDownload as IconDownload3 } from "@tabler/icons-react";
1373
1332
  import { download, generateCsv, mkConfig } from "export-to-csv";
1374
1333
  import {
@@ -1377,7 +1336,7 @@ import {
1377
1336
  } from "mantine-react-table";
1378
1337
  import { MRT_Localization_VI } from "mantine-react-table/locales/vi/index.cjs";
1379
1338
  import { useEffect as useEffect5 } from "react";
1380
- import { Fragment as Fragment6, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
1339
+ import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
1381
1340
  function formatData(data, formats) {
1382
1341
  return data.map((row) => {
1383
1342
  const transformedRow = {};
@@ -1418,9 +1377,9 @@ function MyDataTable(_a) {
1418
1377
  columns,
1419
1378
  data,
1420
1379
  renderTopToolbarCustomActions: ({ table: table2 }) => {
1421
- return /* @__PURE__ */ jsxs13(Group6, { children: [
1380
+ return /* @__PURE__ */ jsxs13(Group7, { children: [
1422
1381
  renderTopToolbarCustomActions && renderTopToolbarCustomActions({ table: table2 }),
1423
- exportAble && /* @__PURE__ */ jsx25(Fragment6, { children: /* @__PURE__ */ jsx25(
1382
+ exportAble && /* @__PURE__ */ jsx25(Fragment7, { children: /* @__PURE__ */ jsx25(
1424
1383
  Button6,
1425
1384
  {
1426
1385
  color: "green.8",
@@ -1582,14 +1541,14 @@ function SelectFileModal({ onExportStructure, stack }) {
1582
1541
  }
1583
1542
 
1584
1543
  // src/components/Buttons/ButtonImport/MyButtonImport.tsx
1585
- import { Fragment as Fragment7, jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
1544
+ import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
1586
1545
  function MyButtonImport({
1587
1546
  onExportStructure,
1588
1547
  onImport
1589
1548
  }) {
1590
1549
  const stack = useModalsStack3(["select-file-page", "select-field-page", "implement-page"]);
1591
1550
  const store = useS_ButtonImport();
1592
- return /* @__PURE__ */ jsxs15(Fragment7, { children: [
1551
+ return /* @__PURE__ */ jsxs15(Fragment8, { children: [
1593
1552
  /* @__PURE__ */ jsx27(Button8, { color: "teal.8", onClick: () => stack.open("select-file-page"), leftSection: /* @__PURE__ */ jsx27(IconFileImport2, {}), title: "Import", children: "Import" }),
1594
1553
  /* @__PURE__ */ jsxs15(Modal8.Stack, { children: [
1595
1554
  /* @__PURE__ */ jsx27(SelectFileModal, { stack, onExportStructure }),
@@ -1601,7 +1560,7 @@ function MyButtonImport({
1601
1560
  // src/components/Buttons/ButtonModal/AQSelectTableByOpenModal.tsx
1602
1561
  import { Button as Button9, Fieldset as Fieldset3, Modal as Modal9 } from "@mantine/core";
1603
1562
  import { useDisclosure as useDisclosure8 } from "@mantine/hooks";
1604
- import { Fragment as Fragment8, jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
1563
+ import { Fragment as Fragment9, jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
1605
1564
  function AQSelectTableByOpenModal(_a) {
1606
1565
  var _b = _a, {
1607
1566
  setSelectedData,
@@ -1629,7 +1588,7 @@ function AQSelectTableByOpenModal(_a) {
1629
1588
  "closeAfterSelect"
1630
1589
  ]);
1631
1590
  const disclosure = useDisclosure8(false);
1632
- return /* @__PURE__ */ jsxs16(Fragment8, { children: [
1591
+ return /* @__PURE__ */ jsxs16(Fragment9, { children: [
1633
1592
  /* @__PURE__ */ jsx28(
1634
1593
  Button9,
1635
1594
  __spreadProps(__spreadValues({
@@ -1670,7 +1629,7 @@ import { useRef as useRef2 } from "react";
1670
1629
  import { Button as Button10 } from "@mantine/core";
1671
1630
  import { IconPrinter as IconPrinter2 } from "@tabler/icons-react";
1672
1631
  import { useReactToPrint } from "react-to-print";
1673
- import { Fragment as Fragment9, jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
1632
+ import { Fragment as Fragment10, jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
1674
1633
  function MyButtonPrintPDF(_a) {
1675
1634
  var _b = _a, { contentToPrint, children } = _b, rest = __objRest(_b, ["contentToPrint", "children"]);
1676
1635
  const printRef = useRef2(null);
@@ -1684,7 +1643,7 @@ function MyButtonPrintPDF(_a) {
1684
1643
  if (!contentToPrint) return;
1685
1644
  handlePrint();
1686
1645
  }
1687
- return /* @__PURE__ */ jsxs17(Fragment9, { children: [
1646
+ return /* @__PURE__ */ jsxs17(Fragment10, { children: [
1688
1647
  /* @__PURE__ */ jsx29("div", { style: { display: "none" }, children: /* @__PURE__ */ jsx29("div", { ref: printRef, children: contentToPrint }) }),
1689
1648
  /* @__PURE__ */ jsx29(Button10, __spreadProps(__spreadValues({ color: "orange", onClick: handleClick, leftSection: /* @__PURE__ */ jsx29(IconPrinter2, {}) }, rest), { children }))
1690
1649
  ] });
@@ -1834,7 +1793,7 @@ function MyButtonPrintTablePDF(_a) {
1834
1793
  }
1835
1794
 
1836
1795
  // src/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx
1837
- import { Button as Button11 } from "@mantine/core";
1796
+ import { ActionIcon as ActionIcon9 } from "@mantine/core";
1838
1797
  import { IconArrowBack } from "@tabler/icons-react";
1839
1798
  import { useRouter as useRouter2 } from "next/navigation";
1840
1799
  import { jsx as jsx32 } from "react/jsx-runtime";
@@ -1842,10 +1801,10 @@ function MyButtonRouterBack(_a) {
1842
1801
  var _b = _a, { url, label } = _b, rest = __objRest(_b, ["url", "label"]);
1843
1802
  const router = useRouter2();
1844
1803
  return /* @__PURE__ */ jsx32(
1845
- Button11,
1804
+ ActionIcon9,
1846
1805
  __spreadProps(__spreadValues({
1806
+ size: "xl",
1847
1807
  variant: "light",
1848
- leftSection: /* @__PURE__ */ jsx32(IconArrowBack, { stroke: 2 }),
1849
1808
  onClick: () => {
1850
1809
  if (url) {
1851
1810
  router.replace(url);
@@ -1854,27 +1813,27 @@ function MyButtonRouterBack(_a) {
1854
1813
  router.back();
1855
1814
  }
1856
1815
  }, rest), {
1857
- children: label ? label : "Tr\u1EDF v\u1EC1"
1816
+ children: /* @__PURE__ */ jsx32(IconArrowBack, { stroke: 2 })
1858
1817
  })
1859
1818
  );
1860
1819
  }
1861
1820
 
1862
1821
  // src/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx
1863
1822
  import {
1864
- ActionIcon as ActionIcon9,
1865
- Button as Button12,
1866
- Group as Group7,
1823
+ ActionIcon as ActionIcon10,
1824
+ Button as Button11,
1825
+ Group as Group8,
1867
1826
  LoadingOverlay,
1868
1827
  Modal as Modal10,
1869
1828
  Paper as Paper3,
1870
- Text as Text5,
1829
+ Text as Text6,
1871
1830
  Tooltip as Tooltip4
1872
1831
  } from "@mantine/core";
1873
1832
  import { useDisclosure as useDisclosure9 } from "@mantine/hooks";
1874
1833
  import { IconLivePhoto as IconLivePhoto2, IconMaximize as IconMaximize3, IconMinimize as IconMinimize3 } from "@tabler/icons-react";
1875
1834
  import { useQuery } from "@tanstack/react-query";
1876
1835
  import { useState as useState7 } from "react";
1877
- import { Fragment as Fragment10, jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
1836
+ import { Fragment as Fragment11, jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
1878
1837
  function MyButtonViewPDF({
1879
1838
  id,
1880
1839
  modalSize = "80%",
@@ -1899,9 +1858,9 @@ function MyButtonViewPDF({
1899
1858
  },
1900
1859
  enabled: disc[0] == true
1901
1860
  });
1902
- return /* @__PURE__ */ jsxs19(Fragment10, { children: [
1861
+ return /* @__PURE__ */ jsxs19(Fragment11, { children: [
1903
1862
  /* @__PURE__ */ jsx33(Tooltip4, { label: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp", children: isActionIcon ? /* @__PURE__ */ jsx33(
1904
- ActionIcon9,
1863
+ ActionIcon10,
1905
1864
  {
1906
1865
  onClick: () => {
1907
1866
  disc[1].open();
@@ -1909,7 +1868,7 @@ function MyButtonViewPDF({
1909
1868
  children: /* @__PURE__ */ jsx33(IconLivePhoto2, {})
1910
1869
  }
1911
1870
  ) : /* @__PURE__ */ jsx33(
1912
- Button12,
1871
+ Button11,
1913
1872
  {
1914
1873
  color: "cyan",
1915
1874
  onClick: () => {
@@ -1926,10 +1885,10 @@ function MyButtonViewPDF({
1926
1885
  opened: disc[0],
1927
1886
  onClose: disc[1].close,
1928
1887
  size: modalSize,
1929
- title: /* @__PURE__ */ jsxs19(Group7, { children: [
1930
- /* @__PURE__ */ jsx33(Text5, { children: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }),
1888
+ title: /* @__PURE__ */ jsxs19(Group8, { children: [
1889
+ /* @__PURE__ */ jsx33(Text6, { children: "Xem t\xE0i li\u1EC7u tr\u1EF1c ti\u1EBFp" }),
1931
1890
  fullScreen[0] ? /* @__PURE__ */ jsx33(
1932
- ActionIcon9,
1891
+ ActionIcon10,
1933
1892
  {
1934
1893
  onClick: () => {
1935
1894
  fullScreen[1](false);
@@ -1938,7 +1897,7 @@ function MyButtonViewPDF({
1938
1897
  children: /* @__PURE__ */ jsx33(IconMinimize3, {})
1939
1898
  }
1940
1899
  ) : /* @__PURE__ */ jsx33(
1941
- ActionIcon9,
1900
+ ActionIcon10,
1942
1901
  {
1943
1902
  onClick: () => {
1944
1903
  fullScreen[1](true);
@@ -6264,7 +6223,7 @@ var createViewMonthAgenda = () => createPreactView(config);
6264
6223
  import { createEventModalPlugin } from "@schedule-x/event-modal";
6265
6224
  import { createEventsServicePlugin } from "@schedule-x/events-service";
6266
6225
  import { ScheduleXCalendar, useNextCalendarApp } from "@schedule-x/react";
6267
- import { Paper as Paper4, Text as Text6 } from "@mantine/core";
6226
+ import { Paper as Paper4, Text as Text7 } from "@mantine/core";
6268
6227
  import "@schedule-x/theme-default/dist/index.css";
6269
6228
  import { useEffect as useEffect6 } from "react";
6270
6229
  import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
@@ -6345,12 +6304,12 @@ function MyCalendar() {
6345
6304
  timeGridEvent: ({ calendarEvent }) => {
6346
6305
  console.log(calendarEvent);
6347
6306
  return /* @__PURE__ */ jsx34(Paper4, { h: "100%", bg: calendarEvent.laLichThi ? "violet.2" : "blue.2", p: 4, children: /* @__PURE__ */ jsxs20(MyFlexColumn, { gap: 1, children: [
6348
- /* @__PURE__ */ jsxs20(Text6, { size: "sm", fw: "bold", children: [
6307
+ /* @__PURE__ */ jsxs20(Text7, { size: "sm", fw: "bold", children: [
6349
6308
  calendarEvent.laLichThi ? "(Thi) " : "(H\u1ECDc) ",
6350
6309
  calendarEvent.title
6351
6310
  ] }),
6352
- calendarEvent.laLichThi == false && /* @__PURE__ */ jsx34(Text6, { size: "sm", children: calendarEvent.giangvien }),
6353
- /* @__PURE__ */ jsx34(Text6, { size: "sm", children: calendarEvent.location })
6311
+ calendarEvent.laLichThi == false && /* @__PURE__ */ jsx34(Text7, { size: "sm", children: calendarEvent.giangvien }),
6312
+ /* @__PURE__ */ jsx34(Text7, { size: "sm", children: calendarEvent.location })
6354
6313
  ] }) });
6355
6314
  }
6356
6315
  // eventModal: ({ calendarEvent }) => {
@@ -6364,10 +6323,10 @@ function MyCalendar() {
6364
6323
  }
6365
6324
 
6366
6325
  // src/components/CenterFull/MyCenterFull.tsx
6367
- import { Center as Center2, Group as Group8 } from "@mantine/core";
6326
+ import { Center as Center2, Group as Group9 } from "@mantine/core";
6368
6327
  import { jsx as jsx35 } from "react/jsx-runtime";
6369
6328
  function MyCenterFull({ children }) {
6370
- return /* @__PURE__ */ jsx35(Center2, { w: "100%", children: /* @__PURE__ */ jsx35(Group8, { children }) });
6329
+ return /* @__PURE__ */ jsx35(Center2, { w: "100%", children: /* @__PURE__ */ jsx35(Group9, { children }) });
6371
6330
  }
6372
6331
 
6373
6332
  // src/components/Checkbox/MyCheckbox.tsx
@@ -6387,7 +6346,7 @@ function MyFlexRow(_a) {
6387
6346
  }
6388
6347
 
6389
6348
  // src/components/DataDisplay/Card/AQCard.tsx
6390
- import { Badge, Card, Center as Center3, Image, Text as Text7 } from "@mantine/core";
6349
+ import { Badge as Badge2, Card, Center as Center3, Image, Text as Text8 } from "@mantine/core";
6391
6350
  import Link from "next/link";
6392
6351
  import { jsx as jsx38, jsxs as jsxs21 } from "react/jsx-runtime";
6393
6352
  function AQCard({
@@ -6411,16 +6370,16 @@ function AQCard({
6411
6370
  }
6412
6371
  ) }) }),
6413
6372
  /* @__PURE__ */ jsxs21(MyFlexRow, { justify: "space-between", mt: "md", mb: "xs", children: [
6414
- /* @__PURE__ */ jsx38(Text7, { fw: 500, children: title }),
6415
- status && /* @__PURE__ */ jsx38(Badge, { color: "violet.5", w: "150px", children: status })
6373
+ /* @__PURE__ */ jsx38(Text8, { fw: 500, children: title }),
6374
+ status && /* @__PURE__ */ jsx38(Badge2, { color: "violet.5", w: "150px", children: status })
6416
6375
  ] }),
6417
- /* @__PURE__ */ jsx38(Text7, { size: "sm", c: "dimmed", lineClamp: 2, children: description }),
6376
+ /* @__PURE__ */ jsx38(Text8, { size: "sm", c: "dimmed", lineClamp: 2, children: description }),
6418
6377
  children
6419
6378
  ] });
6420
6379
  }
6421
6380
 
6422
6381
  // src/components/DataDisplay/CardInformation/MyCardInformation.tsx
6423
- import { Box as Box2, Flex as Flex3, Group as Group9, Paper as Paper5, Text as Text8 } from "@mantine/core";
6382
+ import { Box as Box2, Flex as Flex3, Group as Group10, Paper as Paper5, Text as Text9 } from "@mantine/core";
6424
6383
  import { IconArrowDownRight, IconArrowUpRight } from "@tabler/icons-react";
6425
6384
  import { jsx as jsx39, jsxs as jsxs22 } from "react/jsx-runtime";
6426
6385
  function MyCardInformation({
@@ -6439,10 +6398,10 @@ function MyCardInformation({
6439
6398
  p: "md",
6440
6399
  radius: "md",
6441
6400
  children: [
6442
- /* @__PURE__ */ jsxs22(Group9, { justify: "space-between", children: [
6401
+ /* @__PURE__ */ jsxs22(Group10, { justify: "space-between", children: [
6443
6402
  /* @__PURE__ */ jsxs22(Flex3, { direction: "column", children: [
6444
6403
  /* @__PURE__ */ jsx39(
6445
- Text8,
6404
+ Text9,
6446
6405
  {
6447
6406
  tt: "uppercase",
6448
6407
  size: "lg",
@@ -6450,10 +6409,10 @@ function MyCardInformation({
6450
6409
  children: title
6451
6410
  }
6452
6411
  ),
6453
- unit == "" ? /* @__PURE__ */ jsxs22(Text8, { size: "xs", style: { visibility: "hidden" }, children: [
6412
+ unit == "" ? /* @__PURE__ */ jsxs22(Text9, { size: "xs", style: { visibility: "hidden" }, children: [
6454
6413
  "\u0110\u01A1n v\u1ECB: ",
6455
6414
  /* @__PURE__ */ jsx39("strong", { children: unit })
6456
- ] }) : /* @__PURE__ */ jsxs22(Text8, { size: "xs", children: [
6415
+ ] }) : /* @__PURE__ */ jsxs22(Text9, { size: "xs", children: [
6457
6416
  "\u0110\u01A1n v\u1ECB: ",
6458
6417
  /* @__PURE__ */ jsx39("strong", { children: unit })
6459
6418
  ] })
@@ -6461,14 +6420,14 @@ function MyCardInformation({
6461
6420
  /* @__PURE__ */ jsx39(Box2, { children: icon })
6462
6421
  ] }),
6463
6422
  /* @__PURE__ */ jsxs22(
6464
- Group9,
6423
+ Group10,
6465
6424
  {
6466
6425
  mt: "5",
6467
6426
  align: "flex-end",
6468
6427
  gap: "xs",
6469
6428
  children: [
6470
6429
  /* @__PURE__ */ jsx39(
6471
- Text8,
6430
+ Text9,
6472
6431
  {
6473
6432
  fw: 700,
6474
6433
  fz: "h1",
@@ -6476,7 +6435,7 @@ function MyCardInformation({
6476
6435
  }
6477
6436
  ),
6478
6437
  /* @__PURE__ */ jsxs22(
6479
- Text8,
6438
+ Text9,
6480
6439
  {
6481
6440
  mb: "2",
6482
6441
  c: diff > 0 ? "teal" : "red",
@@ -6494,8 +6453,8 @@ function MyCardInformation({
6494
6453
  ]
6495
6454
  }
6496
6455
  ),
6497
- /* @__PURE__ */ jsxs22(Group9, { justify: "space-between", children: [
6498
- /* @__PURE__ */ jsx39(Text8, { tt: "uppercase", fz: "xs", c: "dimmed", children: description }),
6456
+ /* @__PURE__ */ jsxs22(Group10, { justify: "space-between", children: [
6457
+ /* @__PURE__ */ jsx39(Text9, { tt: "uppercase", fz: "xs", c: "dimmed", children: description }),
6499
6458
  extraControl
6500
6459
  ] })
6501
6460
  ]
@@ -6505,25 +6464,25 @@ function MyCardInformation({
6505
6464
  }
6506
6465
 
6507
6466
  // src/components/DataDisplay/IconText/MyIconText.tsx
6508
- import { Group as Group10, Text as Text9 } from "@mantine/core";
6467
+ import { Group as Group11, Text as Text10 } from "@mantine/core";
6509
6468
  import { jsx as jsx40, jsxs as jsxs23 } from "react/jsx-runtime";
6510
6469
  function MyIconText({ icon: Icon, text }) {
6511
- return /* @__PURE__ */ jsxs23(Group10, { wrap: "nowrap", gap: 10, mt: 3, children: [
6470
+ return /* @__PURE__ */ jsxs23(Group11, { wrap: "nowrap", gap: 10, mt: 3, children: [
6512
6471
  Icon && /* @__PURE__ */ jsx40(Icon, { stroke: 1.5, size: 16 }),
6513
- /* @__PURE__ */ jsx40(Text9, { fz: "lg", c: "dimmed", children: text })
6472
+ /* @__PURE__ */ jsx40(Text10, { fz: "lg", c: "dimmed", children: text })
6514
6473
  ] });
6515
6474
  }
6516
6475
 
6517
6476
  // src/components/DataDisplay/KeyLabel/MyKeyLabel.tsx
6518
- import { Group as Group11, Text as Text10 } from "@mantine/core";
6477
+ import { Group as Group12, Text as Text11 } from "@mantine/core";
6519
6478
  import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
6520
6479
  function MyKeyLabel({ keyLabel, label }) {
6521
- return /* @__PURE__ */ jsxs24(Group11, { gap: 5, children: [
6522
- /* @__PURE__ */ jsxs24(Text10, { fw: "bold", children: [
6480
+ return /* @__PURE__ */ jsxs24(Group12, { gap: 5, children: [
6481
+ /* @__PURE__ */ jsxs24(Text11, { fw: "bold", children: [
6523
6482
  keyLabel,
6524
6483
  ":"
6525
6484
  ] }),
6526
- /* @__PURE__ */ jsx41(Text10, { children: label })
6485
+ /* @__PURE__ */ jsx41(Text11, { children: label })
6527
6486
  ] });
6528
6487
  }
6529
6488
 
@@ -6536,21 +6495,21 @@ function MyNumberFormatter(_a) {
6536
6495
  }
6537
6496
 
6538
6497
  // src/components/DataDisplay/StatCard/AQStatCard1.tsx
6539
- import { Box as Box3, Button as Button14, Flex as Flex4, Group as Group12, Paper as Paper6, Text as Text11 } from "@mantine/core";
6498
+ import { Box as Box3, Button as Button13, Flex as Flex4, Group as Group13, Paper as Paper6, Text as Text12 } from "@mantine/core";
6540
6499
  import { IconArrowDownRight as IconArrowDownRight2, IconArrowUpRight as IconArrowUpRight2 } from "@tabler/icons-react";
6541
- import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs25 } from "react/jsx-runtime";
6500
+ import { Fragment as Fragment12, jsx as jsx43, jsxs as jsxs25 } from "react/jsx-runtime";
6542
6501
  function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6543
- return /* @__PURE__ */ jsx43(Fragment11, { children: /* @__PURE__ */ jsxs25(
6502
+ return /* @__PURE__ */ jsx43(Fragment12, { children: /* @__PURE__ */ jsxs25(
6544
6503
  Paper6,
6545
6504
  {
6546
6505
  withBorder: true,
6547
6506
  p: "md",
6548
6507
  radius: "md",
6549
6508
  children: [
6550
- /* @__PURE__ */ jsxs25(Group12, { justify: "space-between", children: [
6509
+ /* @__PURE__ */ jsxs25(Group13, { justify: "space-between", children: [
6551
6510
  /* @__PURE__ */ jsxs25(Flex4, { direction: "column", children: [
6552
6511
  /* @__PURE__ */ jsx43(
6553
- Text11,
6512
+ Text12,
6554
6513
  {
6555
6514
  tt: "uppercase",
6556
6515
  size: "lg",
@@ -6558,10 +6517,10 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6558
6517
  children: title
6559
6518
  }
6560
6519
  ),
6561
- unit == "" ? /* @__PURE__ */ jsxs25(Text11, { size: "xs", style: { visibility: "hidden" }, children: [
6520
+ unit == "" ? /* @__PURE__ */ jsxs25(Text12, { size: "xs", style: { visibility: "hidden" }, children: [
6562
6521
  "\u0110\u01A1n v\u1ECB: ",
6563
6522
  /* @__PURE__ */ jsx43("strong", { children: unit })
6564
- ] }) : /* @__PURE__ */ jsxs25(Text11, { size: "xs", children: [
6523
+ ] }) : /* @__PURE__ */ jsxs25(Text12, { size: "xs", children: [
6565
6524
  "\u0110\u01A1n v\u1ECB: ",
6566
6525
  /* @__PURE__ */ jsx43("strong", { children: unit })
6567
6526
  ] })
@@ -6569,14 +6528,14 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6569
6528
  /* @__PURE__ */ jsx43(Box3, { children: icons })
6570
6529
  ] }),
6571
6530
  /* @__PURE__ */ jsxs25(
6572
- Group12,
6531
+ Group13,
6573
6532
  {
6574
6533
  mt: "5",
6575
6534
  align: "flex-end",
6576
6535
  gap: "xs",
6577
6536
  children: [
6578
6537
  /* @__PURE__ */ jsx43(
6579
- Text11,
6538
+ Text12,
6580
6539
  {
6581
6540
  fw: 700,
6582
6541
  fz: "h1",
@@ -6584,7 +6543,7 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6584
6543
  }
6585
6544
  ),
6586
6545
  /* @__PURE__ */ jsxs25(
6587
- Text11,
6546
+ Text12,
6588
6547
  {
6589
6548
  mb: "2",
6590
6549
  c: diff > 0 ? "teal" : "red",
@@ -6602,10 +6561,10 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6602
6561
  ]
6603
6562
  }
6604
6563
  ),
6605
- /* @__PURE__ */ jsxs25(Group12, { justify: "space-between", children: [
6606
- /* @__PURE__ */ jsx43(Text11, { tt: "uppercase", fz: "xs", c: "dimmed", children: description }),
6564
+ /* @__PURE__ */ jsxs25(Group13, { justify: "space-between", children: [
6565
+ /* @__PURE__ */ jsx43(Text12, { tt: "uppercase", fz: "xs", c: "dimmed", children: description }),
6607
6566
  /* @__PURE__ */ jsx43(
6608
- Button14,
6567
+ Button13,
6609
6568
  {
6610
6569
  variant: "light",
6611
6570
  size: "xs",
@@ -6621,6 +6580,54 @@ function AQStatCard1({ title, value, unit = "", description, icons, diff }) {
6621
6580
 
6622
6581
  // src/components/FaviconSetter/FaviconSetter.tsx
6623
6582
  import { useEffect as useEffect7 } from "react";
6583
+
6584
+ // src/components/Layouts/BasicAppShell/useS_BasicAppShell.ts
6585
+ var useStore2 = createGenericStore({
6586
+ initialState: {
6587
+ menuCode: "",
6588
+ moduleCode: "Module code",
6589
+ moduleName: "Module name",
6590
+ title: "",
6591
+ opened: true,
6592
+ groupMenuOpenId: []
6593
+ },
6594
+ storageKey: "useS_BasicAppShell"
6595
+ });
6596
+ function useS_BasicAppShell() {
6597
+ const store = useStore2();
6598
+ const GetAQModule_query = useQ_AQ_GetAQModule();
6599
+ function toggle() {
6600
+ store.setProperty("opened", !store.state.opened);
6601
+ }
6602
+ function toggleGroupMenuOpenId(id) {
6603
+ const currentIds = store.state.groupMenuOpenId;
6604
+ if (currentIds.includes(id)) {
6605
+ store.setProperty(
6606
+ "groupMenuOpenId",
6607
+ currentIds.filter((existingId) => existingId !== id)
6608
+ );
6609
+ } else {
6610
+ store.setProperty("groupMenuOpenId", [...currentIds, id]);
6611
+ }
6612
+ }
6613
+ function clearGroupMenuOpenId() {
6614
+ store.setProperty("groupMenuOpenId", []);
6615
+ }
6616
+ function setDefault() {
6617
+ var _a, _b;
6618
+ if (!GetAQModule_query.data) return;
6619
+ store.setProperty("faviconFileDetail", (_a = GetAQModule_query.data) == null ? void 0 : _a.faviconFileDetail);
6620
+ store.setProperty("logoFileDetail", (_b = GetAQModule_query.data) == null ? void 0 : _b.logoFileDetail);
6621
+ }
6622
+ return __spreadProps(__spreadValues({}, store), {
6623
+ toggle,
6624
+ toggleGroupMenuOpenId,
6625
+ clearGroupMenuOpenId,
6626
+ setDefault
6627
+ });
6628
+ }
6629
+
6630
+ // src/components/FaviconSetter/FaviconSetter.tsx
6624
6631
  function FaviconSetter() {
6625
6632
  var _a;
6626
6633
  const store = useS_BasicAppShell();
@@ -6654,7 +6661,7 @@ function MyDateInput(_a) {
6654
6661
  }
6655
6662
 
6656
6663
  // src/components/Inputs/Fieldset/MyFieldset.tsx
6657
- import { Box as Box4, Fieldset as Fieldset4, Text as Text12 } from "@mantine/core";
6664
+ import { Box as Box4, Fieldset as Fieldset4, Text as Text13 } from "@mantine/core";
6658
6665
  import { jsx as jsx45 } from "react/jsx-runtime";
6659
6666
  function MyFieldset(_a) {
6660
6667
  var _b = _a, {
@@ -6674,7 +6681,7 @@ function MyFieldset(_a) {
6674
6681
  px: "xs",
6675
6682
  py: 2,
6676
6683
  style: { borderRadius: 4 },
6677
- children: /* @__PURE__ */ jsx45(Text12, { c: "white", fw: 500, children: title })
6684
+ children: /* @__PURE__ */ jsx45(Text13, { c: "white", fw: 500, children: title })
6678
6685
  }
6679
6686
  ),
6680
6687
  children
@@ -6886,7 +6893,7 @@ function MyTextEditor(_a) {
6886
6893
  }
6887
6894
 
6888
6895
  // src/modules-features/authenticate/F_authenticate_Logout.tsx
6889
- import { Button as Button15 } from "@mantine/core";
6896
+ import { Button as Button14 } from "@mantine/core";
6890
6897
  import { IconLogout } from "@tabler/icons-react";
6891
6898
  import { useRouter as useRouter3 } from "next/navigation";
6892
6899
 
@@ -6907,7 +6914,7 @@ import { jsx as jsx50 } from "react/jsx-runtime";
6907
6914
  function F_authenticate_Logout({ redirectURL = "/auth/login" }) {
6908
6915
  const router = useRouter3();
6909
6916
  const S_Authenticate = useS_authenticate();
6910
- return /* @__PURE__ */ jsx50(Button15, { onClick: () => {
6917
+ return /* @__PURE__ */ jsx50(Button14, { onClick: () => {
6911
6918
  S_Authenticate.setProperty("token", "");
6912
6919
  router.replace(redirectURL);
6913
6920
  }, leftSection: /* @__PURE__ */ jsx50(IconLogout, {}), fullWidth: true, justify: "start", variant: "subtle", children: "\u0110\u0103ng xu\u1EA5t" });
@@ -6915,39 +6922,48 @@ function F_authenticate_Logout({ redirectURL = "/auth/login" }) {
6915
6922
 
6916
6923
  // src/components/Layouts/BasicAppShell/BasicAppShell.tsx
6917
6924
  import {
6918
- ActionIcon as ActionIcon10,
6925
+ ActionIcon as ActionIcon11,
6919
6926
  AppShell,
6920
- Badge as Badge2,
6927
+ Badge as Badge3,
6921
6928
  Divider as Divider2,
6922
- Group as Group13,
6929
+ Group as Group14,
6923
6930
  Image as Image3,
6924
6931
  NavLink,
6925
6932
  ScrollArea as ScrollArea3,
6926
- Text as Text13,
6927
- TextInput as TextInput2,
6933
+ Text as Text14,
6928
6934
  Tooltip as Tooltip5
6929
6935
  } from "@mantine/core";
6930
6936
  import { useFavicon, useMediaQuery } from "@mantine/hooks";
6931
- import { spotlight as spotlight2 } from "@mantine/spotlight";
6932
6937
  import {
6933
6938
  IconLayoutSidebarLeftCollapse,
6934
6939
  IconLayoutSidebarLeftExpand,
6935
- IconLibraryMinus,
6936
- IconSearch as IconSearch2
6940
+ IconLibraryMinus
6937
6941
  } from "@tabler/icons-react";
6938
6942
  import Link3 from "next/link";
6939
6943
  import { usePathname as usePathname2 } from "next/navigation";
6940
- import { useEffect as useEffect9, useState as useState9 } from "react";
6941
- import { Fragment as Fragment12, jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
6944
+ import { useEffect as useEffect9, useMemo as useMemo3, useState as useState9 } from "react";
6945
+ import { Fragment as Fragment13, jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
6946
+ function findBreadcrumbPath(items, currentPath, parents = []) {
6947
+ for (const item of items) {
6948
+ if (item.link === currentPath) {
6949
+ return [...parents, item.label];
6950
+ }
6951
+ if (item.links) {
6952
+ const found = findBreadcrumbPath(item.links, currentPath, [...parents, item.label]);
6953
+ if (found) return found;
6954
+ }
6955
+ }
6956
+ return null;
6957
+ }
6942
6958
  function getRightSection(status) {
6943
6959
  if (status === "Prototype")
6944
- return /* @__PURE__ */ jsx51(Badge2, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "pink", circle: true, children: "P" });
6960
+ return /* @__PURE__ */ jsx51(Badge3, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "pink", circle: true, children: "P" });
6945
6961
  if (status === "New")
6946
- return /* @__PURE__ */ jsx51(Badge2, { styles: { root: { cursor: "pointer" } }, radius: "xs", circle: true, children: "N" });
6962
+ return /* @__PURE__ */ jsx51(Badge3, { styles: { root: { cursor: "pointer" } }, radius: "xs", circle: true, children: "N" });
6947
6963
  if (status === "Menu")
6948
- return /* @__PURE__ */ jsx51(Badge2, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "gray", circle: true, children: "M" });
6964
+ return /* @__PURE__ */ jsx51(Badge3, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "gray", circle: true, children: "M" });
6949
6965
  if (status === "Change")
6950
- return /* @__PURE__ */ jsx51(Badge2, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "green", circle: true, children: "C" });
6966
+ return /* @__PURE__ */ jsx51(Badge3, { styles: { root: { cursor: "pointer" } }, radius: "xs", color: "green", circle: true, children: "C" });
6951
6967
  return null;
6952
6968
  }
6953
6969
  function RenderNavLinks({
@@ -6955,7 +6971,7 @@ function RenderNavLinks({
6955
6971
  }) {
6956
6972
  const basicAppShellStore = useS_BasicAppShell();
6957
6973
  const pathName = usePathname2();
6958
- return /* @__PURE__ */ jsx51(Fragment12, { children: items.map((item, index) => /* @__PURE__ */ jsx51(
6974
+ return /* @__PURE__ */ jsx51(Fragment13, { children: items.map((item, index) => /* @__PURE__ */ jsx51(
6959
6975
  NavLink,
6960
6976
  {
6961
6977
  active: item.link === pathName.split("/")[2],
@@ -6973,8 +6989,6 @@ function RenderNavLinks({
6973
6989
  basicAppShellStore.toggleGroupMenuOpenId(item.label);
6974
6990
  return;
6975
6991
  }
6976
- basicAppShellStore.setProperty("menuCode", item.link);
6977
- basicAppShellStore.setProperty("title", item.label);
6978
6992
  },
6979
6993
  children: item.links && /* @__PURE__ */ jsx51(RenderNavLinks, { items: item.links })
6980
6994
  },
@@ -7041,11 +7055,27 @@ function BasicAppShell_transformMenuToEnum(prefixProjectName, menu) {
7041
7055
  }
7042
7056
  function BasicAppShell({ children, menu, extraTopRight, title }) {
7043
7057
  var _a, _b;
7058
+ const pathName = usePathname2();
7044
7059
  const basicAppShellStore = useS_BasicAppShell();
7045
7060
  const media = useMediaQuery("(min-width: 72em)");
7046
7061
  const GetAQModule_query = useQ_AQ_GetAQModule();
7047
7062
  const BasicAppShell_store = useS_BasicAppShell();
7048
7063
  const [faviconUrl, setFaviconUrl] = useState9("");
7064
+ const allChildItems = useMemo3(() => {
7065
+ const result = [];
7066
+ const extractChildren = (items) => {
7067
+ items.forEach((item) => {
7068
+ if (item.link) {
7069
+ result.push(item);
7070
+ }
7071
+ if (item.links) {
7072
+ extractChildren(item.links);
7073
+ }
7074
+ });
7075
+ };
7076
+ extractChildren(menu);
7077
+ return result;
7078
+ }, [menu]);
7049
7079
  useFavicon(faviconUrl);
7050
7080
  useEffect9(() => {
7051
7081
  var _a2;
@@ -7074,6 +7104,15 @@ function BasicAppShell({ children, menu, extraTopRight, title }) {
7074
7104
  if (!data) return;
7075
7105
  document.title = data.name || "";
7076
7106
  }, [GetAQModule_query.data]);
7107
+ useEffect9(() => {
7108
+ const linkItem = allChildItems.find((item) => pathName.includes(item.link));
7109
+ const breadcrumb = findBreadcrumbPath(menu, linkItem == null ? void 0 : linkItem.link);
7110
+ basicAppShellStore.setProperty("breadcrumb", breadcrumb);
7111
+ basicAppShellStore.setProperty("title", linkItem == null ? void 0 : linkItem.label);
7112
+ basicAppShellStore.setProperty("menuCode", linkItem == null ? void 0 : linkItem.link);
7113
+ basicAppShellStore.setProperty("note", linkItem == null ? void 0 : linkItem.note);
7114
+ basicAppShellStore.setProperty("status", linkItem == null ? void 0 : linkItem.status);
7115
+ }, [pathName]);
7077
7116
  return /* @__PURE__ */ jsxs27(
7078
7117
  AppShell,
7079
7118
  {
@@ -7088,86 +7127,72 @@ function BasicAppShell({ children, menu, extraTopRight, title }) {
7088
7127
  },
7089
7128
  padding: "md",
7090
7129
  children: [
7091
- /* @__PURE__ */ jsxs27(AppShell.Header, { children: [
7092
- /* @__PURE__ */ jsx51(MyAppSpotlight, { menu }),
7093
- media ? /* @__PURE__ */ jsxs27(Group13, { h: "100%", px: "md", justify: "space-between", align: "center", children: [
7094
- /* @__PURE__ */ jsxs27(Group13, { h: "100%", children: [
7095
- /* @__PURE__ */ jsx51(
7096
- Tooltip5,
7097
- {
7098
- label: basicAppShellStore.state.opened ? "\u1EA8n thanh menu" : "Hi\u1EC7n thanh menu",
7099
- children: /* @__PURE__ */ jsx51(
7100
- ActionIcon10,
7101
- {
7102
- size: "lg",
7103
- radius: "md",
7104
- variant: "default",
7105
- onClick: basicAppShellStore.toggle,
7106
- children: basicAppShellStore.state.opened ? /* @__PURE__ */ jsx51(IconLayoutSidebarLeftExpand, {}) : /* @__PURE__ */ jsx51(IconLayoutSidebarLeftCollapse, {})
7107
- }
7108
- )
7109
- }
7110
- ),
7111
- /* @__PURE__ */ jsx51(Tooltip5, { label: "\u0110\xF3ng t\u1EA5t c\u1EA3 menu", children: /* @__PURE__ */ jsx51(
7112
- ActionIcon10,
7113
- {
7114
- size: "lg",
7115
- radius: "md",
7116
- variant: "default",
7117
- onClick: () => basicAppShellStore.clearGroupMenuOpenId(),
7118
- children: /* @__PURE__ */ jsx51(IconLibraryMinus, {})
7119
- }
7120
- ) })
7121
- ] }),
7130
+ /* @__PURE__ */ jsx51(AppShell.Header, { children: media ? /* @__PURE__ */ jsxs27(Group14, { h: "100%", px: "md", justify: "space-between", align: "center", children: [
7131
+ /* @__PURE__ */ jsxs27(Group14, { h: "100%", children: [
7122
7132
  /* @__PURE__ */ jsx51(
7123
- Group13,
7133
+ Tooltip5,
7124
7134
  {
7125
- style: {
7126
- position: "absolute",
7127
- left: "50%",
7128
- transform: "translateX(-50%)"
7129
- },
7130
- children: /* @__PURE__ */ jsx51(Text13, { c: "green", fw: "bold", size: "sm", children: title ? title : `${basicAppShellStore.state.moduleCode} - ${basicAppShellStore.state.moduleName}` })
7135
+ label: basicAppShellStore.state.opened ? "\u1EA8n thanh menu" : "Hi\u1EC7n thanh menu",
7136
+ children: /* @__PURE__ */ jsx51(
7137
+ ActionIcon11,
7138
+ {
7139
+ size: "lg",
7140
+ radius: "md",
7141
+ variant: "default",
7142
+ onClick: basicAppShellStore.toggle,
7143
+ children: basicAppShellStore.state.opened ? /* @__PURE__ */ jsx51(IconLayoutSidebarLeftExpand, {}) : /* @__PURE__ */ jsx51(IconLayoutSidebarLeftCollapse, {})
7144
+ }
7145
+ )
7131
7146
  }
7132
7147
  ),
7133
- /* @__PURE__ */ jsxs27(Group13, { children: [
7134
- extraTopRight,
7135
- /* @__PURE__ */ jsx51(MySwitchTheme, {})
7136
- ] })
7137
- ] }) : (
7138
- // For mobile screens - simplified layout
7139
- /* @__PURE__ */ jsxs27(Group13, { h: "100%", px: "md", justify: "space-between", children: [
7140
- /* @__PURE__ */ jsx51(
7141
- ActionIcon10,
7142
- {
7143
- size: "lg",
7144
- radius: "md",
7145
- variant: "default",
7146
- onClick: basicAppShellStore.toggle,
7147
- children: basicAppShellStore.state.opened ? /* @__PURE__ */ jsx51(IconLayoutSidebarLeftExpand, {}) : /* @__PURE__ */ jsx51(IconLayoutSidebarLeftCollapse, {})
7148
- }
7149
- ),
7150
- /* @__PURE__ */ jsx51(Text13, { c: "green", fw: "bold", size: "sm", children: title ? title : `${basicAppShellStore.state.moduleCode} - ${basicAppShellStore.state.moduleName}` }),
7151
- /* @__PURE__ */ jsxs27(Group13, { children: [
7152
- extraTopRight,
7153
- /* @__PURE__ */ jsx51(MySwitchTheme, {})
7154
- ] })
7155
- ] })
7156
- )
7157
- ] }),
7158
- /* @__PURE__ */ jsxs27(AppShell.Navbar, { children: [
7148
+ /* @__PURE__ */ jsx51(Tooltip5, { label: "\u0110\xF3ng t\u1EA5t c\u1EA3 menu", children: /* @__PURE__ */ jsx51(
7149
+ ActionIcon11,
7150
+ {
7151
+ size: "lg",
7152
+ radius: "md",
7153
+ variant: "default",
7154
+ onClick: () => basicAppShellStore.clearGroupMenuOpenId(),
7155
+ children: /* @__PURE__ */ jsx51(IconLibraryMinus, {})
7156
+ }
7157
+ ) })
7158
+ ] }),
7159
7159
  /* @__PURE__ */ jsx51(
7160
- TextInput2,
7160
+ Group14,
7161
7161
  {
7162
- mt: "md",
7163
- placeholder: "T\xECm menu (Ctrl + K)",
7164
- mx: 10,
7165
- component: "button",
7166
- onClick: spotlight2.open,
7167
- leftSection: /* @__PURE__ */ jsx51(IconSearch2, {}),
7168
- children: "T\xECm ki\u1EBFm (Ctrl + K)"
7162
+ style: {
7163
+ position: "absolute",
7164
+ left: "50%",
7165
+ transform: "translateX(-50%)"
7166
+ },
7167
+ children: /* @__PURE__ */ jsx51(Text14, { c: "green", fw: "bold", size: "sm", children: title ? title : `${basicAppShellStore.state.moduleCode} - ${basicAppShellStore.state.moduleName}` })
7169
7168
  }
7170
7169
  ),
7170
+ /* @__PURE__ */ jsxs27(Group14, { children: [
7171
+ extraTopRight,
7172
+ /* @__PURE__ */ jsx51(MySwitchTheme, {})
7173
+ ] })
7174
+ ] }) : (
7175
+ // For mobile screens - simplified layout
7176
+ /* @__PURE__ */ jsxs27(Group14, { h: "100%", px: "md", justify: "space-between", children: [
7177
+ /* @__PURE__ */ jsx51(
7178
+ ActionIcon11,
7179
+ {
7180
+ size: "lg",
7181
+ radius: "md",
7182
+ variant: "default",
7183
+ onClick: basicAppShellStore.toggle,
7184
+ children: basicAppShellStore.state.opened ? /* @__PURE__ */ jsx51(IconLayoutSidebarLeftExpand, {}) : /* @__PURE__ */ jsx51(IconLayoutSidebarLeftCollapse, {})
7185
+ }
7186
+ ),
7187
+ /* @__PURE__ */ jsx51(Text14, { c: "green", fw: "bold", size: "sm", children: title ? title : `${basicAppShellStore.state.moduleCode} - ${basicAppShellStore.state.moduleName}` }),
7188
+ /* @__PURE__ */ jsxs27(Group14, { children: [
7189
+ extraTopRight,
7190
+ /* @__PURE__ */ jsx51(MySwitchTheme, {})
7191
+ ] })
7192
+ ] })
7193
+ ) }),
7194
+ /* @__PURE__ */ jsxs27(AppShell.Navbar, { children: [
7195
+ /* @__PURE__ */ jsx51(MyAppSpotlight, { menu }),
7171
7196
  /* @__PURE__ */ jsxs27(AppShell.Section, { grow: true, component: ScrollArea3, p: 5, children: [
7172
7197
  /* @__PURE__ */ jsx51(RenderNavLinks, { items: menu }),
7173
7198
  /* @__PURE__ */ jsx51(Divider2, {}),
@@ -7261,14 +7286,14 @@ var OBJECT_COlORS = {
7261
7286
  import {
7262
7287
  Box as Box5,
7263
7288
  Burger,
7264
- Button as Button16,
7289
+ Button as Button15,
7265
7290
  Container as Container2,
7266
7291
  Divider as Divider3,
7267
7292
  Drawer,
7268
- Group as Group14,
7293
+ Group as Group15,
7269
7294
  Image as Image4,
7270
7295
  ScrollArea as ScrollArea4,
7271
- Text as Text14,
7296
+ Text as Text15,
7272
7297
  TextInput as TextInput3,
7273
7298
  ThemeIcon,
7274
7299
  UnstyledButton,
@@ -7282,7 +7307,7 @@ import {
7282
7307
  IconCoin,
7283
7308
  IconFingerprint,
7284
7309
  IconNotification,
7285
- IconSearch as IconSearch3
7310
+ IconSearch as IconSearch2
7286
7311
  } from "@tabler/icons-react";
7287
7312
  import Link4 from "next/link";
7288
7313
 
@@ -7338,21 +7363,21 @@ function HeaderMegaMenu({ children, menus }) {
7338
7363
  const [linksOpened, { toggle: toggleLinks }] = useDisclosure10(false);
7339
7364
  const HeaderMegaMenuStore = useHeaderMegaMenuStore();
7340
7365
  const theme = useMantineTheme();
7341
- const links = mockdata.map((item) => /* @__PURE__ */ jsx53(UnstyledButton, { className: css_default.subLink, children: /* @__PURE__ */ jsxs28(Group14, { wrap: "nowrap", align: "flex-start", children: [
7366
+ const links = mockdata.map((item) => /* @__PURE__ */ jsx53(UnstyledButton, { className: css_default.subLink, children: /* @__PURE__ */ jsxs28(Group15, { wrap: "nowrap", align: "flex-start", children: [
7342
7367
  /* @__PURE__ */ jsx53(ThemeIcon, { size: 34, variant: "default", radius: "md", children: /* @__PURE__ */ jsx53(item.icon, { size: 22, color: theme.colors.blue[6] }) }),
7343
7368
  /* @__PURE__ */ jsxs28("div", { children: [
7344
- /* @__PURE__ */ jsx53(Text14, { size: "sm", fw: 500, children: item.title }),
7345
- /* @__PURE__ */ jsx53(Text14, { size: "xs", c: "dimmed", children: item.description })
7369
+ /* @__PURE__ */ jsx53(Text15, { size: "sm", fw: 500, children: item.title }),
7370
+ /* @__PURE__ */ jsx53(Text15, { size: "xs", c: "dimmed", children: item.description })
7346
7371
  ] })
7347
7372
  ] }) }, item.title));
7348
7373
  return /* @__PURE__ */ jsxs28(Box5, { children: [
7349
- /* @__PURE__ */ jsx53("header", { className: css_default.header, children: /* @__PURE__ */ jsxs28(Group14, { justify: "space-between", h: "100%", children: [
7350
- /* @__PURE__ */ jsxs28(Group14, { children: [
7374
+ /* @__PURE__ */ jsx53("header", { className: css_default.header, children: /* @__PURE__ */ jsxs28(Group15, { justify: "space-between", h: "100%", children: [
7375
+ /* @__PURE__ */ jsxs28(Group15, { children: [
7351
7376
  /* @__PURE__ */ jsx53(Image4, { src: "/imgs/0/IMG0LogoAQTech.png", h: 30, alt: "", w: "auto" }),
7352
- /* @__PURE__ */ jsx53(Group14, { h: "100%", gap: 5, visibleFrom: "sm", children: menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ jsx53(Button16, { component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }), children: item.label }, idx)) })
7377
+ /* @__PURE__ */ jsx53(Group15, { h: "100%", gap: 5, visibleFrom: "sm", children: menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ jsx53(Button15, { component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }), children: item.label }, idx)) })
7353
7378
  ] }),
7354
- /* @__PURE__ */ jsxs28(Group14, { children: [
7355
- /* @__PURE__ */ jsx53(TextInput3, { placeholder: "T\xECm ki\u1EBFm", leftSection: /* @__PURE__ */ jsx53(IconSearch3, {}), radius: "xl", w: "250px" }),
7379
+ /* @__PURE__ */ jsxs28(Group15, { children: [
7380
+ /* @__PURE__ */ jsx53(TextInput3, { placeholder: "T\xECm ki\u1EBFm", leftSection: /* @__PURE__ */ jsx53(IconSearch2, {}), radius: "xl", w: "250px" }),
7356
7381
  /* @__PURE__ */ jsx53(MySwitchTheme, {})
7357
7382
  ] }),
7358
7383
  /* @__PURE__ */ jsx53(Burger, { opened: drawerOpened, onClick: toggleDrawer, hiddenFrom: "sm" })
@@ -7370,7 +7395,7 @@ function HeaderMegaMenu({ children, menus }) {
7370
7395
  zIndex: 1e6,
7371
7396
  children: /* @__PURE__ */ jsxs28(ScrollArea4, { h: "calc(100vh - 80px", mx: "-md", children: [
7372
7397
  /* @__PURE__ */ jsx53(Divider3, { my: "sm" }),
7373
- /* @__PURE__ */ jsx53(MyFlexColumn, { h: "100%", gap: 0, children: menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ jsx53(Button16, { component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }), children: item.label }, idx)) }),
7398
+ /* @__PURE__ */ jsx53(MyFlexColumn, { h: "100%", gap: 0, children: menus == null ? void 0 : menus.map((item, idx) => /* @__PURE__ */ jsx53(Button15, { component: Link4, href: item.href, variant: HeaderMegaMenuStore.state.name == item.label ? "light" : "subtle", onClick: () => HeaderMegaMenuStore.setState({ name: item.label }), children: item.label }, idx)) }),
7374
7399
  /* @__PURE__ */ jsx53(Divider3, { my: "sm" })
7375
7400
  ] })
7376
7401
  }
@@ -7379,46 +7404,68 @@ function HeaderMegaMenu({ children, menus }) {
7379
7404
  }
7380
7405
 
7381
7406
  // src/components/Layouts/PageContent/MyPageContent.tsx
7382
- import { Code, Container as Container3, Divider as Divider4, Group as Group15, Indicator, Title } from "@mantine/core";
7407
+ import { Badge as Badge4, Breadcrumbs, Code, Container as Container3, Divider as Divider4, Group as Group16, Text as Text16, Title } from "@mantine/core";
7383
7408
  import { jsx as jsx54, jsxs as jsxs29 } from "react/jsx-runtime";
7384
7409
  var getStatusColor = (status) => {
7385
7410
  switch (status) {
7386
7411
  case "Prototype":
7387
- return "blue";
7388
- case "Beta":
7389
- return "orange";
7412
+ return "pink";
7390
7413
  default:
7391
- return "gray";
7414
+ return "";
7392
7415
  }
7393
7416
  };
7394
- var PageTitle = ({ title, status }) => {
7417
+ function PageTitle({ title, status, note }) {
7395
7418
  const color = getStatusColor(status);
7396
- return /* @__PURE__ */ jsx54(Indicator, { label: status, size: 16, inline: true, color, disabled: !status, pt: 6, children: /* @__PURE__ */ jsx54(Title, { order: 4, children: title }) });
7397
- };
7419
+ return /* @__PURE__ */ jsx54(Group16, { children: /* @__PURE__ */ jsxs29(MyFlexColumn, { gap: 0, children: [
7420
+ /* @__PURE__ */ jsxs29(Group16, { align: "center", children: [
7421
+ /* @__PURE__ */ jsx54(Title, { order: 3, children: title }),
7422
+ status && /* @__PURE__ */ jsx54(
7423
+ Badge4,
7424
+ {
7425
+ variant: "gradient",
7426
+ gradient: { from: color, to: `${color}.5` },
7427
+ size: "lg",
7428
+ radius: "sm",
7429
+ children: status
7430
+ }
7431
+ )
7432
+ ] }),
7433
+ /* @__PURE__ */ jsx54(Text16, { size: "lg", c: "dimmed", fs: "italic", children: note })
7434
+ ] }) });
7435
+ }
7398
7436
  function MyPageContent({
7399
7437
  leftTopBar,
7400
7438
  title,
7401
7439
  canBack = false,
7402
7440
  rightTopBar,
7403
- status,
7404
7441
  children
7405
7442
  }) {
7443
+ var _a;
7406
7444
  const basicAppShellStore = useS_BasicAppShell();
7407
7445
  const finalTitle = title || basicAppShellStore.state.title;
7408
7446
  return /* @__PURE__ */ jsxs29(Container3, { p: 0, fluid: true, children: [
7409
- /* @__PURE__ */ jsxs29(Group15, { justify: "space-between", children: [
7410
- /* @__PURE__ */ jsxs29(Group15, { children: [
7411
- canBack && /* @__PURE__ */ jsx54(MyButtonRouterBack, {}),
7412
- /* @__PURE__ */ jsx54(PageTitle, { title: finalTitle, status }),
7447
+ /* @__PURE__ */ jsxs29(Group16, { justify: "space-between", children: [
7448
+ /* @__PURE__ */ jsxs29(Group16, { children: [
7449
+ /* @__PURE__ */ jsx54(MyButtonRouterBack, {}),
7450
+ /* @__PURE__ */ jsx54(
7451
+ PageTitle,
7452
+ {
7453
+ title: finalTitle,
7454
+ status: basicAppShellStore.state.status,
7455
+ note: basicAppShellStore.state.note
7456
+ }
7457
+ ),
7413
7458
  leftTopBar
7414
7459
  ] }),
7415
- /* @__PURE__ */ jsxs29(Group15, { children: [
7460
+ /* @__PURE__ */ jsxs29(Group16, { p: "md", children: [
7416
7461
  rightTopBar,
7417
- /* @__PURE__ */ jsx54(Code, { color: "var(--mantine-color-blue-light)", children: basicAppShellStore.state.menuCode })
7462
+ /* @__PURE__ */ jsx54(Breadcrumbs, { separatorMargin: "7", children: (_a = basicAppShellStore.state.breadcrumb) == null ? void 0 : _a.map((item, idx) => /* @__PURE__ */ jsx54(Text16, { fw: "600", c: "blue", children: item }, idx)) })
7418
7463
  ] })
7419
7464
  ] }),
7420
7465
  /* @__PURE__ */ jsx54(Divider4, { my: "xs" }),
7421
- children
7466
+ children,
7467
+ /* @__PURE__ */ jsx54(Divider4, { my: "xs" }),
7468
+ /* @__PURE__ */ jsx54(MyFlexEnd, { children: /* @__PURE__ */ jsx54(Code, { color: "var(--mantine-color-blue-light)", children: basicAppShellStore.state.menuCode }) })
7422
7469
  ] });
7423
7470
  }
7424
7471
 
@@ -7438,7 +7485,7 @@ function MyTab(_a) {
7438
7485
  }
7439
7486
 
7440
7487
  // src/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx
7441
- import { ActionIcon as ActionIcon11, Button as Button17, Fieldset as Fieldset5, Group as Group16, Modal as Modal11 } from "@mantine/core";
7488
+ import { ActionIcon as ActionIcon12, Button as Button16, Fieldset as Fieldset5, Group as Group17, Modal as Modal11 } from "@mantine/core";
7442
7489
  import { useDisclosure as useDisclosure11 } from "@mantine/hooks";
7443
7490
  import { IconX as IconX2 } from "@tabler/icons-react";
7444
7491
  import { jsx as jsx56, jsxs as jsxs31 } from "react/jsx-runtime";
@@ -7451,15 +7498,15 @@ function MyDataTableSelect(_a) {
7451
7498
  MyDataTable,
7452
7499
  __spreadValues({
7453
7500
  renderTopToolbarCustomActions: ({ table }) => {
7454
- return /* @__PURE__ */ jsxs31(Group16, { children: [
7501
+ return /* @__PURE__ */ jsxs31(Group17, { children: [
7455
7502
  renderTopToolbarCustomActions && renderTopToolbarCustomActions({ table }),
7456
- /* @__PURE__ */ jsx56(Button17, { onClick: disc[1].open, children: selectButtonlabel || "Ch\u1ECDn t\u1EEB danh s\xE1ch" })
7503
+ /* @__PURE__ */ jsx56(Button16, { onClick: disc[1].open, children: selectButtonlabel || "Ch\u1ECDn t\u1EEB danh s\xE1ch" })
7457
7504
  ] });
7458
7505
  },
7459
7506
  columns,
7460
7507
  data: listState[0],
7461
7508
  renderRowActions: ({ row }) => {
7462
- return /* @__PURE__ */ jsx56(MyCenterFull, { children: /* @__PURE__ */ jsx56(ActionIcon11, { color: "red", onClick: () => listState[1].remove(row.index), children: /* @__PURE__ */ jsx56(IconX2, {}) }) });
7509
+ return /* @__PURE__ */ jsx56(MyCenterFull, { children: /* @__PURE__ */ jsx56(ActionIcon12, { color: "red", onClick: () => listState[1].remove(row.index), children: /* @__PURE__ */ jsx56(IconX2, {}) }) });
7463
7510
  }
7464
7511
  }, rest)
7465
7512
  ),
@@ -7467,7 +7514,7 @@ function MyDataTableSelect(_a) {
7467
7514
  MyDataTable,
7468
7515
  __spreadValues({
7469
7516
  renderTopToolbarCustomActions: ({ table }) => {
7470
- return /* @__PURE__ */ jsx56(Button17, { onClick: () => {
7517
+ return /* @__PURE__ */ jsx56(Button16, { onClick: () => {
7471
7518
  table.getSelectedRowModel().rows.map((item) => listState[1].append(item.original));
7472
7519
  disc[1].close();
7473
7520
  }, children: "Ch\u1ECDn" });
@@ -7578,9 +7625,7 @@ export {
7578
7625
  MyActionIconUpload,
7579
7626
  MyActionIconViewPDF,
7580
7627
  MySwitchTheme,
7581
- useS_BasicAppShell,
7582
7628
  MyAppSpotlight,
7583
- SpotlightTrigger,
7584
7629
  MyAnchorViewPDF,
7585
7630
  MyButtonModal,
7586
7631
  AQButtonCreateByImportFile,
@@ -7609,6 +7654,7 @@ export {
7609
7654
  MyKeyLabel,
7610
7655
  MyNumberFormatter,
7611
7656
  AQStatCard1,
7657
+ useS_BasicAppShell,
7612
7658
  FaviconSetter,
7613
7659
  MyDateInput,
7614
7660
  MyFieldset,