aq-fe-framework 0.1.155 → 0.1.156

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.
Files changed (242) hide show
  1. package/dist/api/apiFactory.ts +46 -0
  2. package/dist/api/baseAxios.ts +22 -0
  3. package/dist/app/admin/(core)/core12196/page.tsx +13 -0
  4. package/dist/app/admin/(core)/core16209/page.tsx +13 -0
  5. package/dist/app/admin/(core)/core18256/page.tsx +12 -0
  6. package/dist/app/admin/(core)/core26965/page.tsx +13 -0
  7. package/dist/app/admin/(core)/core27311/page.tsx +13 -0
  8. package/dist/app/admin/(core)/core38677/page.tsx +13 -0
  9. package/dist/app/admin/(core)/core40207/page.tsx +13 -0
  10. package/dist/app/admin/(core)/core60524/page.tsx +11 -0
  11. package/dist/app/admin/(core)/core64229/page.tsx +12 -0
  12. package/dist/app/admin/(core)/core71678/page.tsx +11 -0
  13. package/dist/app/admin/(core)/core76318/page.tsx +13 -0
  14. package/dist/app/admin/(core)/core83092/page.tsx +13 -0
  15. package/dist/app/admin/[...slug]/page.tsx +7 -0
  16. package/dist/app/admin/error.tsx +42 -0
  17. package/dist/app/admin/layout.tsx +21 -0
  18. package/dist/app/admin/test/page.tsx +44 -0
  19. package/dist/app/auth/login/page.tsx +14 -0
  20. package/dist/app/globals.css +59 -0
  21. package/dist/app/layout.tsx +39 -0
  22. package/dist/app/page.tsx +18 -0
  23. package/dist/{chunk-PAHZ57DT.mjs → chunk-JLT4BL7I.mjs} +1 -1
  24. package/dist/components/Aceternity/BoxesBackground/MyBoxes.tsx +66 -0
  25. package/dist/components/Aceternity/BoxesBackground/MyBoxesBackground.tsx +31 -0
  26. package/dist/components/ActionIcons/ActionIcon/MyActionIcon.tsx +47 -0
  27. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconDelete.tsx +81 -0
  28. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconUpdate.tsx +68 -0
  29. package/dist/components/ActionIcons/ActionIconCheck/MyActionIconCheck.tsx +50 -0
  30. package/dist/components/ActionIcons/ActionIconDownloadPDF/MyActionIconDownloadPDF.tsx +13 -0
  31. package/dist/components/ActionIcons/ActionIconModal/MyActionIconModal.tsx +113 -0
  32. package/dist/components/ActionIcons/ActionIconUpload/MyActionIconUpload.tsx +19 -0
  33. package/dist/components/ActionIcons/ActionIconViewPdf/MyActionIconViewPDF.tsx +63 -0
  34. package/dist/components/ActionIcons/SwitchTheme/MySwitchTheme.tsx +36 -0
  35. package/dist/components/AppSpotlight/MyAppSpotlight.tsx +112 -0
  36. package/dist/components/Buttons/Anchor/MyAnchorViewPDF.tsx +46 -0
  37. package/dist/components/Buttons/Button/MyButton.tsx +90 -0
  38. package/dist/components/Buttons/ButtonCRUD/AQButtonCreateByImportFile.tsx +81 -0
  39. package/dist/components/Buttons/ButtonCRUD/AQButtonExportData.tsx +75 -0
  40. package/dist/components/Buttons/ButtonCRUD/MyButtonCreate.tsx +68 -0
  41. package/dist/components/Buttons/ButtonImport/MyButtonImport.tsx +29 -0
  42. package/dist/components/Buttons/ButtonImport/SelectFieldModal.tsx +100 -0
  43. package/dist/components/Buttons/ButtonImport/SelectFileModal.tsx +81 -0
  44. package/dist/components/Buttons/ButtonImport/useS_ButtonImport.ts +196 -0
  45. package/dist/components/Buttons/ButtonModal/AQSelectTableByOpenModal.tsx +71 -0
  46. package/dist/components/Buttons/ButtonModal/MyButtonModal.tsx +117 -0
  47. package/dist/components/Buttons/ButtonPrintPDF/MyButtonPrintPDF.tsx +37 -0
  48. package/dist/components/Buttons/ButtonPrintPDFTable/MyButtonPrintTablePDF.tsx +174 -0
  49. package/dist/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx +29 -0
  50. package/dist/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx +121 -0
  51. package/dist/components/Calendar/MyCalendar.tsx +118 -0
  52. package/dist/components/CenterFull/MyCenterFull.tsx +10 -0
  53. package/dist/components/Checkbox/MyCheckbox.tsx +9 -0
  54. package/dist/components/Combobox/Select/MySelect.tsx +12 -0
  55. package/dist/components/DataDisplay/Card/AQCard.tsx +49 -0
  56. package/dist/components/DataDisplay/CardInformation/MyCardInformation.tsx +77 -0
  57. package/dist/components/DataDisplay/DataTable/MyDataTable.tsx +184 -0
  58. package/dist/components/DataDisplay/IconText/MyIconText.tsx +17 -0
  59. package/dist/components/DataDisplay/KeyLabel/MyKeyLabel.tsx +15 -0
  60. package/dist/components/DataDisplay/NumberFormatter/MyNumberFormatter.tsx +9 -0
  61. package/dist/components/DataDisplay/StatCard/AQStatCard1.tsx +68 -0
  62. package/dist/components/FaviconSetter/FaviconSetter.tsx +33 -0
  63. package/dist/components/Inputs/DateInput/MyDateInput.tsx +11 -0
  64. package/dist/components/Inputs/Fieldset/MyFieldset.tsx +32 -0
  65. package/dist/components/Inputs/FileInput/MyFileInput.tsx +12 -0
  66. package/dist/components/Inputs/NumberInput/MyNumberInput.tsx +12 -0
  67. package/dist/components/Inputs/TextArea/MyTextArea.tsx +11 -0
  68. package/dist/components/Inputs/TextEditor/MyTextEditor.tsx +191 -0
  69. package/dist/components/Inputs/TextInput/MyTextInput.tsx +30 -0
  70. package/dist/components/Layouts/BasicAppShell/BasicAppShell.tsx +357 -0
  71. package/dist/components/Layouts/BasicAppShell/css.module.css +62 -0
  72. package/dist/components/Layouts/BasicAppShell/useS_BasicAppShell.ts +64 -0
  73. package/dist/components/Layouts/Container/MyContainer.tsx +16 -0
  74. package/dist/components/Layouts/FlexColumn/MyFlexColumn.tsx +14 -0
  75. package/dist/components/Layouts/FlexEnd/MyFlexEnd.tsx +14 -0
  76. package/dist/components/Layouts/FlexRow/MyFlexRow.tsx +14 -0
  77. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenu.tsx +147 -0
  78. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenuStore.ts +19 -0
  79. package/dist/components/Layouts/HeaderMegaMenu/css.module.css +50 -0
  80. package/dist/components/Layouts/HtmlWrapper/MyHtmlWrapper.tsx +29 -0
  81. package/dist/components/Layouts/PageContent/MyPageContent.tsx +67 -0
  82. package/dist/components/Layouts/Tab/MyTab.tsx +33 -0
  83. package/dist/components/Loaders/MyCardioLoader.tsx +12 -0
  84. package/dist/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx +61 -0
  85. package/dist/components/RESTAPIComponents/SelectAPIGet/MySelectAPIGet.tsx +37 -0
  86. package/dist/components/ScheduleX/MyScheduleX.tsx +58 -0
  87. package/dist/components/Skeletons/SkeletonTable/MySkeletonTable.tsx +9 -0
  88. package/dist/components/index.mjs +1 -1
  89. package/dist/components/index.ts +62 -0
  90. package/dist/constants/array/daysOfWeek.ts +9 -0
  91. package/dist/constants/enum/ENUM_EMAILCONFIG.ts +6 -0
  92. package/dist/constants/enum/global.ts +26 -0
  93. package/dist/constants/object/color.ts +5 -0
  94. package/dist/constants/object/documentTypes.ts +8 -0
  95. package/dist/{components/index.css → css.module-4ICLUKPO.module.css} +29 -16
  96. package/dist/css.module-P45UW6UZ.module.css +4 -0
  97. package/dist/data/menuData.ts +31 -0
  98. package/dist/hooks/custom-hooks/useC_MutationAction.tsx +36 -0
  99. package/dist/hooks/index.ts +2 -0
  100. package/dist/hooks/query/AQ/useQ_AQ_GetAQModule.ts +14 -0
  101. package/dist/interfaces/EmailConfig.ts +10 -0
  102. package/dist/interfaces/IAQModule.ts +21 -0
  103. package/dist/interfaces/base.ts +9 -0
  104. package/dist/interfaces/global-interface/IAQSSO.ts +15 -0
  105. package/dist/interfaces/global-interface/IAQSyncData.ts +9 -0
  106. package/dist/interfaces/global-interface/IAcademicYear.ts +12 -0
  107. package/dist/interfaces/global-interface/IChangePassWord.ts +8 -0
  108. package/dist/interfaces/global-interface/IComplaintProccess.ts +9 -0
  109. package/dist/interfaces/global-interface/ICreateAccount.ts +24 -0
  110. package/dist/interfaces/global-interface/IDocument.ts +25 -0
  111. package/dist/interfaces/global-interface/IDocumentAttribute.ts +12 -0
  112. package/dist/interfaces/global-interface/IEvent.ts +30 -0
  113. package/dist/interfaces/global-interface/IEventComplaint.ts +20 -0
  114. package/dist/interfaces/global-interface/IEventFillter.ts +14 -0
  115. package/dist/interfaces/global-interface/IFile.ts +8 -0
  116. package/dist/interfaces/global-interface/IImportStudentPaticipation.ts +8 -0
  117. package/dist/interfaces/global-interface/IPagePermission.ts +12 -0
  118. package/dist/interfaces/global-interface/IRolePermission.ts +7 -0
  119. package/dist/interfaces/global-interface/ISRMUserinfo.ts +35 -0
  120. package/dist/interfaces/global-interface/IScientificProfileProjectUser.ts +15 -0
  121. package/dist/interfaces/global-interface/IScientificProfileResearchGroup.ts +15 -0
  122. package/dist/interfaces/global-interface/IScientificProfileResearchGroupUser.ts +14 -0
  123. package/dist/interfaces/global-interface/IScientificProfileResearchProject.ts +21 -0
  124. package/dist/interfaces/global-interface/ISignIn.ts +7 -0
  125. package/dist/interfaces/global-interface/ISystemCatalogAcademicYear.ts +15 -0
  126. package/dist/interfaces/global-interface/ISystemCatalogDomainCategory.ts +11 -0
  127. package/dist/interfaces/global-interface/ISystemCatalogProjectLevelCategory.ts +11 -0
  128. package/dist/interfaces/global-interface/ISystemCatalogProjectTypeCategory.ts +11 -0
  129. package/dist/interfaces/global-interface/ISystemCatalogRoleActivity.ts +11 -0
  130. package/dist/interfaces/global-interface/ISystemCatalogTaskCategory.ts +11 -0
  131. package/dist/interfaces/global-interface/ISystemManagementAcademicHistory.ts +31 -0
  132. package/dist/interfaces/global-interface/ISystemManagementProfessionalWorkHistory.ts +14 -0
  133. package/dist/interfaces/global-interface/ISystemManagementPublishedScientificWork.ts +14 -0
  134. package/dist/interfaces/global-interface/ISystemManagementRoleGroup.ts +12 -0
  135. package/dist/interfaces/global-interface/ISystemManagementRoleGroupMenuPermission.ts +18 -0
  136. package/dist/interfaces/global-interface/ISystemManagementScientificResearchProject.ts +16 -0
  137. package/dist/interfaces/global-interface/ISystemManagementUserMenuPermission.ts +18 -0
  138. package/dist/interfaces/global-interface/IUpdateAccount.ts +15 -0
  139. package/dist/interfaces/global-interface/IUser.ts +21 -0
  140. package/dist/interfaces/global-interface/IUserPermission.ts +7 -0
  141. package/dist/lib/utils.ts +6 -0
  142. package/dist/modules-features/admin/core/MainDashboard/BarChart_CourseStatus.tsx +87 -0
  143. package/dist/modules-features/admin/core/MainDashboard/BarChart_ExamStatus.tsx +65 -0
  144. package/dist/modules-features/admin/core/MainDashboard/BarChart_RevenueByAcademicYear.tsx +82 -0
  145. package/dist/modules-features/admin/core/MainDashboard/BarChart_StudentStatusIn30Days.tsx +67 -0
  146. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseDropOutPercentage.tsx +77 -0
  147. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseProgressPercentage.tsx +77 -0
  148. package/dist/modules-features/admin/core/MainDashboard/LineChart_RevenueIn12Months.tsx +78 -0
  149. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByDiscountIn3Months.tsx +69 -0
  150. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByVoucherIn3Months.tsx +69 -0
  151. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalStudentIn12Months.tsx +64 -0
  152. package/dist/modules-features/admin/core/MainDashboard/ViewDiscountStat.tsx +311 -0
  153. package/dist/modules-features/admin/core/MainDashboard/ViewVoucherStat.tsx +311 -0
  154. package/dist/modules-features/admin/core/core12196/F_core12196.tsx +20 -0
  155. package/dist/modules-features/admin/core/core12196/F_core12196_Create.tsx +101 -0
  156. package/dist/modules-features/admin/core/core12196/F_core12196_Delete.tsx +19 -0
  157. package/dist/modules-features/admin/core/core12196/F_core12196_Read.tsx +165 -0
  158. package/dist/modules-features/admin/core/core12196/F_core12196_Update.tsx +112 -0
  159. package/dist/modules-features/admin/core/core16209/F_core16209.tsx +108 -0
  160. package/dist/modules-features/admin/core/core16209/F_core16209_Create.tsx +112 -0
  161. package/dist/modules-features/admin/core/core16209/F_core16209_Delete.tsx +17 -0
  162. package/dist/modules-features/admin/core/core16209/F_core16209_Update.tsx +114 -0
  163. package/dist/modules-features/admin/core/core18256/F_core18256.tsx +29 -0
  164. package/dist/modules-features/admin/core/core18256/F_core18256_Create.tsx +34 -0
  165. package/dist/modules-features/admin/core/core18256/F_core18256_Delete.tsx +14 -0
  166. package/dist/modules-features/admin/core/core18256/F_core18256_Read.tsx +59 -0
  167. package/dist/modules-features/admin/core/core18256/F_core18256_Select.tsx +40 -0
  168. package/dist/modules-features/admin/core/core18256/F_core18256_Update.tsx +22 -0
  169. package/dist/modules-features/admin/core/core26965/F_core26965.tsx +17 -0
  170. package/dist/modules-features/admin/core/core26965/F_core26965_Create.tsx +106 -0
  171. package/dist/modules-features/admin/core/core26965/F_core26965_Delete.tsx +19 -0
  172. package/dist/modules-features/admin/core/core26965/F_core26965_Read.tsx +165 -0
  173. package/dist/modules-features/admin/core/core26965/F_core26965_Update.tsx +112 -0
  174. package/dist/modules-features/admin/core/core27311/F_core27311.tsx +21 -0
  175. package/dist/modules-features/admin/core/core27311/F_core27311_Create.tsx +109 -0
  176. package/dist/modules-features/admin/core/core27311/F_core27311_Delete.tsx +19 -0
  177. package/dist/modules-features/admin/core/core27311/F_core27311_Read.tsx +165 -0
  178. package/dist/modules-features/admin/core/core27311/F_core27311_Update.tsx +113 -0
  179. package/dist/modules-features/admin/core/core35923/F_core35923.tsx +46 -0
  180. package/dist/modules-features/admin/core/core38677/F_core38677.tsx +28 -0
  181. package/dist/modules-features/admin/core/core38677/F_core38677_ReadUser.tsx +79 -0
  182. package/dist/modules-features/admin/core/core38677/F_core38677_Save.tsx +52 -0
  183. package/dist/modules-features/admin/core/core38677/F_core38677_ViewMenuPermissions.tsx +264 -0
  184. package/dist/modules-features/admin/core/core40207/F_core40207.tsx +9 -0
  185. package/dist/modules-features/admin/core/core40207/F_core40207_Create.tsx +81 -0
  186. package/dist/modules-features/admin/core/core40207/F_core40207_Delete.tsx +17 -0
  187. package/dist/modules-features/admin/core/core40207/F_core40207_Read.tsx +98 -0
  188. package/dist/modules-features/admin/core/core40207/F_core40207_Update.tsx +83 -0
  189. package/dist/modules-features/admin/core/core47643/F_core47643.tsx +10 -0
  190. package/dist/modules-features/admin/core/core47643/F_core47643_Delete.tsx +13 -0
  191. package/dist/modules-features/admin/core/core47643/F_core47643_Form.tsx +34 -0
  192. package/dist/modules-features/admin/core/core47643/F_core47643_Read.tsx +57 -0
  193. package/dist/modules-features/admin/core/core60524/F_core60524.tsx +13 -0
  194. package/dist/modules-features/admin/core/core60524/F_core60524_Form.tsx +111 -0
  195. package/dist/modules-features/admin/core/core60524/F_core60524_Save.tsx +56 -0
  196. package/dist/modules-features/admin/core/core60524/useS_core60524.ts +16 -0
  197. package/dist/modules-features/admin/core/core64229/F_core64229.tsx +7 -0
  198. package/dist/modules-features/admin/core/core64229/F_core64229_Delete.tsx +21 -0
  199. package/dist/modules-features/admin/core/core64229/F_core64229_Form.tsx +95 -0
  200. package/dist/modules-features/admin/core/core64229/F_core64229_Read.tsx +67 -0
  201. package/dist/modules-features/admin/core/core71678/F_core71678.tsx +8 -0
  202. package/dist/modules-features/admin/core/core71678/F_core71678_ChangePermission.tsx +117 -0
  203. package/dist/modules-features/admin/core/core71678/F_core71678_Create.tsx +61 -0
  204. package/dist/modules-features/admin/core/core71678/F_core71678_Delete.tsx +16 -0
  205. package/dist/modules-features/admin/core/core71678/F_core71678_Read.tsx +92 -0
  206. package/dist/modules-features/admin/core/core71678/F_core71678_Update.tsx +49 -0
  207. package/dist/modules-features/admin/core/core76318/F_core76318.tsx +9 -0
  208. package/dist/modules-features/admin/core/core76318/F_core76318_Create.tsx +89 -0
  209. package/dist/modules-features/admin/core/core76318/F_core76318_Delete.tsx +17 -0
  210. package/dist/modules-features/admin/core/core76318/F_core76318_Read.tsx +104 -0
  211. package/dist/modules-features/admin/core/core76318/F_core76318_Update.tsx +89 -0
  212. package/dist/modules-features/admin/core/core83092/F_core83092.tsx +27 -0
  213. package/dist/modules-features/admin/core/core83092/F_core83092_ReadUser.tsx +85 -0
  214. package/dist/modules-features/admin/core/core83092/F_core83092_Save.tsx +52 -0
  215. package/dist/modules-features/admin/core/core83092/F_core83092_ViewMenuPermissions.tsx +263 -0
  216. package/dist/modules-features/admin/core/core83092/useS_core83092.tsx +70 -0
  217. package/dist/modules-features/authenticate/F_authenticate_Login/F_authenticate_Login.tsx +154 -0
  218. package/dist/modules-features/authenticate/F_authenticate_Login/css.module.css +4 -0
  219. package/dist/modules-features/authenticate/F_authenticate_Logout.tsx +22 -0
  220. package/dist/modules-features/authenticate/F_authenticate_SplashPage.tsx +21 -0
  221. package/dist/modules-features/authenticate/useS_authenticate.ts +23 -0
  222. package/dist/modules-features/index.mjs +2 -2
  223. package/dist/modules-features/index.ts +79 -0
  224. package/dist/providers/MyMantineProvider.tsx +140 -0
  225. package/dist/providers/MyReactQueryProvider.tsx +24 -0
  226. package/dist/providers/Provider.tsx +13 -0
  227. package/dist/providers/mantine.module.css +21 -0
  228. package/dist/stores/CreateGenericStore.ts +23 -0
  229. package/dist/stores/index.ts +1 -0
  230. package/dist/types/types.ts +16 -0
  231. package/dist/utils/index.ts +9 -0
  232. package/dist/utils/utils_converter.ts +39 -0
  233. package/dist/utils/utils_currency.ts +5 -0
  234. package/dist/utils/utils_date.ts +34 -0
  235. package/dist/utils/utils_excel.ts +128 -0
  236. package/dist/utils/utils_file.ts +61 -0
  237. package/dist/utils/utils_notification.ts +46 -0
  238. package/dist/utils/utils_pdf.ts +21 -0
  239. package/dist/utils/utils_time.ts +15 -0
  240. package/dist/utils/utils_validateForm.ts +9 -0
  241. package/package.json +1 -1
  242. package/dist/modules-features/index.css +0 -100
@@ -0,0 +1,19 @@
1
+ import { createGenericStore } from "@/stores/CreateGenericStore";
2
+
3
+ interface I {
4
+ name?: string;
5
+ }
6
+
7
+ const useStore = createGenericStore<I>({
8
+ initialState: { name: "Đăng ký khóa học" },
9
+ storageKey: 'HeaderMegaMenuStore'
10
+ });
11
+
12
+
13
+
14
+ export function useHeaderMegaMenuStore() {
15
+ const store = useStore()
16
+ return {
17
+ ...store
18
+ }
19
+ }
@@ -0,0 +1,50 @@
1
+ .header {
2
+ position: sticky; /* Giúp header dính trên cùng */
3
+ top: 0;
4
+ z-index: 1; /* Đảm bảo header nằm trên các thành phần khác */
5
+ height: 60px;
6
+ background-color: light-dark(var(--mantine-color-white), var(--mantine-color-dark));
7
+ padding-left: var(--mantine-spacing-md);
8
+ padding-right: var(--mantine-spacing-md);
9
+ border-bottom: 1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
10
+ }
11
+
12
+ .link {
13
+ display: flex;
14
+ align-items: center;
15
+ height: 100%;
16
+ padding-left: var(--mantine-spacing-md);
17
+ padding-right: var(--mantine-spacing-md);
18
+ text-decoration: none;
19
+ color: light-dark(var(--mantine-color-black), var(--mantine-color-white));
20
+ font-weight: 500;
21
+ font-size: var(--mantine-font-size-sm);
22
+
23
+ @media (max-width: $mantine-breakpoint-sm) {
24
+ height: 42px;
25
+ width: 100%;
26
+ }
27
+
28
+ @mixin hover {
29
+ background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6));
30
+ }
31
+ }
32
+
33
+ .subLink {
34
+ width: 100%;
35
+ padding: var(--mantine-spacing-xs) var(--mantine-spacing-md);
36
+ border-radius: var(--mantine-radius-md);
37
+
38
+ @mixin hover {
39
+ background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-7));
40
+ }
41
+ }
42
+
43
+ .dropdownFooter {
44
+ background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-7));
45
+ margin: calc(var(--mantine-spacing-md) * -1);
46
+ margin-top: var(--mantine-spacing-sm);
47
+ padding: var(--mantine-spacing-md) calc(var(--mantine-spacing-md) * 2);
48
+ padding-bottom: var(--mantine-spacing-xl);
49
+ border-top: 1px solid light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5));
50
+ }
@@ -0,0 +1,29 @@
1
+ import { ScrollArea, TypographyStylesProvider, TypographyStylesProviderProps } from "@mantine/core";
2
+ import pako from "pako";
3
+
4
+ interface HtmlWrapper extends TypographyStylesProviderProps {
5
+ html: string;
6
+ mah?: number | string;
7
+ zip?: boolean
8
+ }
9
+
10
+ export function MyHtmlWrapper({ html, mah, zip = false, ...rest }: HtmlWrapper) {
11
+ const extractHtmlFromZip = () => {
12
+ const binaryString = Buffer.from(html, "base64");
13
+ // Giải nén Gzip
14
+ const decompressedData = pako.inflate(binaryString, { to: "string" });
15
+ const cleanedHtml = decompressedData?.replaceAll(" font-family:'Times New Roman'; font-size:1em;", "");
16
+ return cleanedHtml.replaceAll(" font-family:'Times New Roman'; font-size:1em;", "")
17
+ }
18
+ return (
19
+ <ScrollArea.Autosize mah={mah}>
20
+ <TypographyStylesProvider {...rest}>
21
+ <div
22
+ dangerouslySetInnerHTML={{
23
+ __html: zip ? extractHtmlFromZip() : html
24
+ }}
25
+ />
26
+ </TypographyStylesProvider>
27
+ </ScrollArea.Autosize>
28
+ );
29
+ }
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { MyButtonRouterBack } from "@/components/Buttons/ButtonRouterBack/MyButtonRouterBack";
3
+ import { Code, Container, Divider, Group, Indicator, Title } from "@mantine/core";
4
+ import { ReactNode } from "react";
5
+ import { useS_BasicAppShell } from "../BasicAppShell/useS_BasicAppShell";
6
+
7
+ interface IPageContent {
8
+ title?: string;
9
+ canBack?: boolean;
10
+ rightTopBar?: ReactNode;
11
+ children?: ReactNode;
12
+ leftTopBar?: ReactNode;
13
+ status?: "Prototype" | "Beta";
14
+ }
15
+
16
+ // Hàm helper để lấy màu sắc dựa trên trạng thái
17
+ const getStatusColor = (status?: string) => {
18
+ switch (status) {
19
+ case "Prototype":
20
+ return "blue";
21
+ case "Beta":
22
+ return "orange";
23
+ default:
24
+ return "gray";
25
+ }
26
+ };
27
+
28
+ // Component riêng cho tiêu đề có trạng thái
29
+ const PageTitle = ({ title, status }: { title: string; status?: string }) => {
30
+ const color = getStatusColor(status);
31
+ return (
32
+ <Indicator label={status} size={16} inline color={color} disabled={!status} pt={6}>
33
+ <Title order={4}>{title}</Title>
34
+ </Indicator>
35
+ );
36
+ };
37
+
38
+ export function MyPageContent({
39
+ leftTopBar,
40
+ title,
41
+ canBack = false,
42
+ rightTopBar,
43
+ status,
44
+ children,
45
+ }: IPageContent) {
46
+ const basicAppShellStore = useS_BasicAppShell();
47
+ const finalTitle = title || basicAppShellStore.state.title;
48
+ return (
49
+ <Container p={0} fluid>
50
+ <Group justify="space-between">
51
+ <Group>
52
+ {canBack && <MyButtonRouterBack />}
53
+ <PageTitle title={finalTitle} status={status} />
54
+ {leftTopBar}
55
+ </Group>
56
+ <Group>
57
+ {rightTopBar}
58
+ <Code color="var(--mantine-color-blue-light)">
59
+ {basicAppShellStore.state.menuCode}
60
+ </Code>
61
+ </Group>
62
+ </Group>
63
+ <Divider my={"xs"} />
64
+ {children}
65
+ </Container>
66
+ );
67
+ }
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+ import { rem, Space, Tabs, TabsProps } from '@mantine/core'
3
+ import { Icon, IconProps } from '@tabler/icons-react'
4
+ import React, { ReactNode } from 'react'
5
+
6
+ interface ITab {
7
+ label: string,
8
+ icon?: React.ForwardRefExoticComponent<IconProps & React.RefAttributes<Icon>>
9
+ }
10
+
11
+ interface IMyTab extends TabsProps {
12
+ tabList: ITab[],
13
+ children?: ReactNode
14
+ }
15
+
16
+ export function MyTab({ tabList, children, ...rest }: IMyTab) {
17
+ const iconStyle = { width: rem(20), height: rem(20) };
18
+ return (
19
+ <Tabs defaultValue={tabList[0].label} {...rest}>
20
+ <Tabs.List>
21
+ {tabList.map((item, idx) => {
22
+ return (
23
+ <Tabs.Tab key={idx} value={item.label} leftSection={item.icon && <item.icon style={iconStyle}></item.icon>}>
24
+ {item.label}
25
+ </Tabs.Tab>
26
+ )
27
+ })}
28
+ </Tabs.List>
29
+ <Space my={'md'} />
30
+ {children}
31
+ </Tabs>
32
+ )
33
+ }
@@ -0,0 +1,12 @@
1
+ import { useEffect } from "react";
2
+
3
+ export function MyCardioLoader() {
4
+ useEffect(() => {
5
+ async function getLoader() {
6
+ const { cardio } = await import("ldrs");
7
+ cardio.register();
8
+ }
9
+ getLoader();
10
+ }, []);
11
+ return <l-cardio color="var(--cyan-400)"></l-cardio>;
12
+ }
@@ -0,0 +1,61 @@
1
+ import { MyCenterFull } from "@/components/CenterFull/MyCenterFull";
2
+ import { MyDataTable } from "@/components/DataDisplay/DataTable/MyDataTable";
3
+ import { ActionIcon, Button, Fieldset, Group, MantineSize, Modal } from "@mantine/core";
4
+ import { useDisclosure, useListState } from "@mantine/hooks";
5
+ import { IconX } from "@tabler/icons-react";
6
+ import { MRT_ColumnDef, MRT_RowData, MRT_TableInstance, MRT_TableOptions } from "mantine-react-table";
7
+ import { ReactNode } from "react";
8
+
9
+ interface IDataTable<TData extends MRT_RowData> extends Omit<MRT_TableOptions<TData>, "data"> {
10
+ listLabel?: string;
11
+ columns: MRT_ColumnDef<TData>[];
12
+ data?: TData[];
13
+ renderTopToolbarCustomActions?: ((props: {
14
+ table: MRT_TableInstance<TData>;
15
+ }) => ReactNode) | undefined,
16
+ listState: ReturnType<typeof useListState<TData>>;
17
+ selectButtonlabel?: string,
18
+ modalSize?: MantineSize
19
+ }
20
+
21
+ export function MyDataTableSelect<TData extends MRT_RowData>({ modalSize, renderTopToolbarCustomActions, data, selectButtonlabel, listState, columns, listLabel, ...rest }: IDataTable<TData>) {
22
+ const disc = useDisclosure(false)
23
+ if (data == undefined) return "Đang tải..."
24
+ return (
25
+ <Fieldset legend={listLabel ? listLabel : "Danh sách"}>
26
+ <MyDataTable
27
+ renderTopToolbarCustomActions={({ table }) => {
28
+ return (
29
+ <Group>
30
+ {renderTopToolbarCustomActions && renderTopToolbarCustomActions({ table: table })}
31
+ <Button onClick={disc[1].open}>{selectButtonlabel || "Chọn từ danh sách"}</Button>
32
+ </Group>
33
+ )
34
+ }}
35
+ columns={columns}
36
+ data={listState[0] as TData[]}
37
+ renderRowActions={({ row }) => {
38
+ return (
39
+ <MyCenterFull>
40
+ <ActionIcon color="red" onClick={() => listState[1].remove(row.index)}><IconX /></ActionIcon>
41
+ </MyCenterFull>
42
+ )
43
+ }}
44
+ {...rest} />
45
+
46
+ <Modal opened={disc[0]} onClose={disc[1].close} size={modalSize || "80%"}>
47
+ <MyDataTable
48
+ renderTopToolbarCustomActions={({ table }) => {
49
+ return <Button onClick={() => {
50
+ table.getSelectedRowModel().rows.map(item => listState[1].append(item.original))
51
+ disc[1].close()
52
+ }}>Chọn</Button>
53
+ }}
54
+ enableRowSelection
55
+ data={data!}
56
+ columns={columns}
57
+ {...rest} />
58
+ </Modal>
59
+ </Fieldset>
60
+ )
61
+ }
@@ -0,0 +1,37 @@
1
+ import baseAxios from "@/api/baseAxios";
2
+ import { Select, SelectProps } from "@mantine/core";
3
+ import { useQuery } from "@tanstack/react-query";
4
+
5
+ interface ISelect extends SelectProps {
6
+ apiGet: string;
7
+ label?: string;
8
+ dataMapper?: (item: any) => { value: string; label: string }; // Hàm tùy chỉnh cách map dữ liệu
9
+ }
10
+
11
+ export function MySelectAPIGet({ apiGet, label = "", dataMapper, ...rest }: ISelect) {
12
+ const query = useQuery({
13
+ queryKey: [apiGet],
14
+ queryFn: async () => {
15
+ return (await baseAxios.get(apiGet)).data;
16
+ },
17
+ });
18
+
19
+ if (query.isLoading) return "Loading...";
20
+
21
+ const data = query.data?.map((item: any) => {
22
+ if (dataMapper) return dataMapper(item)
23
+ return {
24
+ value: item.id?.toString()!,
25
+ label: `${item.code}-${item.name}`,
26
+ }
27
+ });
28
+
29
+ return (
30
+ <Select
31
+ label={label}
32
+ placeholder={`Chọn ${label?.toLowerCase()}`}
33
+ data={data}
34
+ {...rest}
35
+ />
36
+ );
37
+ }
@@ -0,0 +1,58 @@
1
+ 'use client'
2
+ // import '@schedule-x/theme-default/dist/index.css'
3
+ import { useNextCalendarApp, ScheduleXCalendar } from '@schedule-x/react'
4
+ import {
5
+ CalendarEventExternal,
6
+ createViewDay,
7
+ createViewMonthAgenda,
8
+ createViewMonthGrid,
9
+ createViewWeek,
10
+ } from '@schedule-x/calendar'
11
+ import { createEventsServicePlugin } from '@schedule-x/events-service'
12
+ import { useState } from "react";
13
+ import { createEventModalPlugin } from '@schedule-x/event-modal'
14
+
15
+ interface MyScheduleXProps<T extends CalendarEventExternal> {
16
+ values?: T[]
17
+ timeGridEvent?: (props: { calendarEvent: T }) => React.ReactNode
18
+ eventModal?: (props: { calendarEvent: T }) => React.ReactNode,
19
+ nDays?: number,
20
+ startDayBoundaries?: string,
21
+ endDayBoundaries?: string
22
+ }
23
+
24
+ export function MyScheduleX<T extends CalendarEventExternal>({
25
+ values,
26
+ timeGridEvent,
27
+ eventModal,
28
+ nDays,
29
+ startDayBoundaries = "05:00",
30
+ endDayBoundaries = "21:00"
31
+ }: MyScheduleXProps<T>) {
32
+ const eventsService = useState(() => createEventsServicePlugin())[0]
33
+ const eventModalPlugin = useState(() => createEventModalPlugin())[0]
34
+ const calendar = useNextCalendarApp({
35
+ locale: "vi-VN",
36
+ dayBoundaries: {
37
+ start: startDayBoundaries,
38
+ end: endDayBoundaries,
39
+ },
40
+ weekOptions: {
41
+ nDays: nDays,
42
+ gridHeight: 700
43
+ },
44
+ views: [createViewDay(), createViewWeek(), createViewMonthGrid(), createViewMonthAgenda()],
45
+ events: values,
46
+ plugins: [eventsService, eventModalPlugin],
47
+ })
48
+
49
+ return (
50
+ <ScheduleXCalendar
51
+ calendarApp={calendar}
52
+ customComponents={{
53
+ timeGridEvent: timeGridEvent,
54
+ eventModal: eventModal
55
+ }}
56
+ />
57
+ )
58
+ }
@@ -0,0 +1,9 @@
1
+ import { Skeleton, SkeletonProps } from '@mantine/core'
2
+
3
+ interface IMySkeletonTable extends SkeletonProps { }
4
+
5
+ export function MySkeletonTable({ h = 500 }: IMySkeletonTable) {
6
+ return (
7
+ <Skeleton h={h} />
8
+ )
9
+ }
@@ -66,7 +66,7 @@ import {
66
66
  useS_BasicAppShell,
67
67
  useS_ButtonImport,
68
68
  utils_layout_getItemsWithoutLinks
69
- } from "../chunk-PAHZ57DT.mjs";
69
+ } from "../chunk-JLT4BL7I.mjs";
70
70
  import "../chunk-Z6OQG54Q.mjs";
71
71
  import "../chunk-Y3YGC5IH.mjs";
72
72
  import "../chunk-5U2JSHSJ.mjs";
@@ -0,0 +1,62 @@
1
+ export * from './Aceternity/BoxesBackground/MyBoxes';
2
+ export * from './Aceternity/BoxesBackground/MyBoxesBackground';
3
+ export * from './ActionIcons/ActionIcon/MyActionIcon';
4
+ export * from './ActionIcons/ActionIconCheck/MyActionIconCheck';
5
+ export * from './ActionIcons/ActionIconCRUD/MyActionIconDelete';
6
+ export * from './ActionIcons/ActionIconCRUD/MyActionIconUpdate';
7
+ export * from './ActionIcons/ActionIconDownloadPDF/MyActionIconDownloadPDF';
8
+ export * from './ActionIcons/ActionIconModal/MyActionIconModal';
9
+ export * from './ActionIcons/ActionIconUpload/MyActionIconUpload';
10
+ export * from './ActionIcons/ActionIconViewPdf/MyActionIconViewPDF';
11
+ export * from './ActionIcons/SwitchTheme/MySwitchTheme';
12
+ export * from './AppSpotlight/MyAppSpotlight';
13
+ export * from './Buttons/Anchor/MyAnchorViewPDF';
14
+ export * from './Buttons/Button/MyButton';
15
+ export * from './Buttons/ButtonCRUD/AQButtonCreateByImportFile';
16
+ export * from './Buttons/ButtonCRUD/AQButtonExportData';
17
+ export * from './Buttons/ButtonCRUD/MyButtonCreate';
18
+ export * from './Buttons/ButtonImport/MyButtonImport';
19
+ export * from './Buttons/ButtonImport/SelectFieldModal';
20
+ export * from './Buttons/ButtonImport/SelectFileModal';
21
+ export * from './Buttons/ButtonImport/useS_ButtonImport';
22
+ export * from './Buttons/ButtonModal/AQSelectTableByOpenModal';
23
+ export * from './Buttons/ButtonModal/MyButtonModal';
24
+ export * from './Buttons/ButtonPrintPDF/MyButtonPrintPDF';
25
+ export * from './Buttons/ButtonPrintPDFTable/MyButtonPrintTablePDF';
26
+ export * from './Buttons/ButtonRouterBack/MyButtonRouterBack';
27
+ export * from './Buttons/ButtonViewPDF/MyButtonViewPDF';
28
+ export * from './Calendar/MyCalendar';
29
+ export * from './CenterFull/MyCenterFull';
30
+ export * from './Checkbox/MyCheckbox';
31
+ export * from './Combobox/Select/MySelect';
32
+ export * from './DataDisplay/Card/AQCard';
33
+ export * from './DataDisplay/CardInformation/MyCardInformation';
34
+ export * from './DataDisplay/DataTable/MyDataTable';
35
+ export * from './DataDisplay/IconText/MyIconText';
36
+ export * from './DataDisplay/KeyLabel/MyKeyLabel';
37
+ export * from './DataDisplay/NumberFormatter/MyNumberFormatter';
38
+ export * from './DataDisplay/StatCard/AQStatCard1';
39
+ export * from './FaviconSetter/FaviconSetter';
40
+ export * from './Inputs/DateInput/MyDateInput';
41
+ export * from './Inputs/Fieldset/MyFieldset';
42
+ export * from './Inputs/FileInput/MyFileInput';
43
+ export * from './Inputs/NumberInput/MyNumberInput';
44
+ export * from './Inputs/TextArea/MyTextArea';
45
+ export * from './Inputs/TextEditor/MyTextEditor';
46
+ export * from './Inputs/TextInput/MyTextInput';
47
+ export * from './Layouts/BasicAppShell/BasicAppShell';
48
+ export * from './Layouts/BasicAppShell/useS_BasicAppShell';
49
+ export * from './Layouts/Container/MyContainer';
50
+ export * from './Layouts/FlexColumn/MyFlexColumn';
51
+ export * from './Layouts/FlexEnd/MyFlexEnd';
52
+ export * from './Layouts/FlexRow/MyFlexRow';
53
+ export * from './Layouts/HeaderMegaMenu/HeaderMegaMenu';
54
+ export * from './Layouts/HeaderMegaMenu/HeaderMegaMenuStore';
55
+ export * from './Layouts/HtmlWrapper/MyHtmlWrapper';
56
+ export * from './Layouts/PageContent/MyPageContent';
57
+ export * from './Layouts/Tab/MyTab';
58
+ export * from './Loaders/MyCardioLoader';
59
+ export * from './RESTAPIComponents/DataTableSelect/MyDataTableSelect';
60
+ export * from './RESTAPIComponents/SelectAPIGet/MySelectAPIGet';
61
+ export * from './ScheduleX/MyScheduleX';
62
+ export * from './Skeletons/SkeletonTable/MySkeletonTable';
@@ -0,0 +1,9 @@
1
+ export const ARRAY_DAYS_OF_WEEK = [
2
+ "Thứ Hai",
3
+ "Thứ Ba",
4
+ "Thứ Tư",
5
+ "Thứ Năm",
6
+ "Thứ Sáu",
7
+ "Thứ Bảy",
8
+ "Chủ Nhật"
9
+ ]
@@ -0,0 +1,6 @@
1
+ export enum ENUM_EMAILCONFIG_MODULE {
2
+ "Đào tạo" = 1,
3
+ "Tuyển sinh" = 2,
4
+ "Sinh viên" = 3,
5
+ "Khảo thí" = 4
6
+ }
@@ -0,0 +1,26 @@
1
+ export enum ENUM_DAYS_OF_WEEK {
2
+ "Chủ Nhật" = 0,
3
+ "Thứ Hai" = 1,
4
+ "Thứ Ba" = 2,
5
+ "Thứ Tư" = 3,
6
+ "Thứ Năm" = 4,
7
+ "Thứ Sáu" = 5,
8
+ "Thứ Bảy" = 6
9
+ }
10
+
11
+ export enum ENUM_GENDER {
12
+ "Nam" = 1,
13
+ "Nữ" = 2,
14
+ }
15
+
16
+ export enum ENUM_QUESTION_TYPE {
17
+ "Trắc nghiệm" = 1,
18
+ "Tự luận" = 2,
19
+ "Trắc nghiệm + Tự luận" = 3,
20
+ "Tiểu luận" = 4,
21
+ "Vấn đáp" = 5,
22
+ }
23
+
24
+ export enum ENUM_ASSESSMENT_TOOL {
25
+ Rubrics = 1,
26
+ }
@@ -0,0 +1,5 @@
1
+ export const OBJECT_COlORS = {
2
+ mantineBackgroundPrimary: "light-dark(var(--mantine-color-white), var(--mantine-color-dark))",
3
+ mantineBackgroundSecondary: "light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-8))",
4
+ mantineBackgroundBlueLight: "var(--mantine-color-blue-light)",
5
+ };
@@ -0,0 +1,8 @@
1
+ export const OBJECT_DOCUMENT_TYPES = {
2
+ Security: 1,
3
+ Refinement: 2,
4
+ Guideline: 3,
5
+ Regulations: 4,
6
+ Workflow: 5,
7
+ Form: 6,
8
+ };
@@ -1,22 +1,22 @@
1
- /* src/components/Layouts/HeaderMegaMenu/css.module.css */
2
1
  .header {
3
- position: sticky;
2
+ position: sticky; /* Giúp header dính trên cùng */
4
3
  top: 0;
5
- z-index: 1;
4
+ z-index: 1; /* Đảm bảo header nằm trên các thành phần khác */
6
5
  height: calc(3.75rem * var(--mantine-scale));
7
6
  background-color: var(--mantine-color-white);
8
7
  }
9
- [data-mantine-color-scheme=dark] .header {
8
+ [data-mantine-color-scheme='dark'] .header {
10
9
  background-color: var(--mantine-color-dark);
11
10
  }
12
- .header {
11
+ .header {
13
12
  padding-left: var(--mantine-spacing-md);
14
13
  padding-right: var(--mantine-spacing-md);
15
14
  border-bottom: 1px solid var(--mantine-color-gray-3);
16
15
  }
17
- [data-mantine-color-scheme=dark] .header {
16
+ [data-mantine-color-scheme='dark'] .header {
18
17
  border-bottom: 1px solid var(--mantine-color-dark-4);
19
18
  }
19
+
20
20
  .link {
21
21
  display: flex;
22
22
  align-items: center;
@@ -26,62 +26,74 @@
26
26
  text-decoration: none;
27
27
  color: var(--mantine-color-black);
28
28
  }
29
- [data-mantine-color-scheme=dark] .link {
29
+
30
+ [data-mantine-color-scheme='dark'] .link {
30
31
  color: var(--mantine-color-white);
31
32
  }
33
+
32
34
  .link {
33
35
  font-weight: 500;
34
36
  font-size: var(--mantine-font-size-sm);
35
37
  }
38
+
36
39
  @media (max-width: $mantine-breakpoint-sm) {
37
- .link {
40
+
41
+ .link {
38
42
  height: calc(2.625rem * var(--mantine-scale));
39
- width: 100%;
40
- }
43
+ width: 100%
41
44
  }
45
+ }
46
+
42
47
  @media (hover: hover) {
43
48
  .link:hover {
44
49
  background-color: var(--mantine-color-gray-0);
45
50
  }
46
- [data-mantine-color-scheme=dark] .link:hover {
51
+ [data-mantine-color-scheme='dark'] .link:hover {
47
52
  background-color: var(--mantine-color-dark-6);
48
53
  }
49
54
  }
55
+
50
56
  @media (hover: none) {
51
57
  .link:active {
52
58
  background-color: var(--mantine-color-gray-0);
53
59
  }
54
- [data-mantine-color-scheme=dark] .link:active {
60
+ [data-mantine-color-scheme='dark'] .link:active {
55
61
  background-color: var(--mantine-color-dark-6);
56
62
  }
57
63
  }
64
+
58
65
  .subLink {
59
66
  width: 100%;
60
67
  padding: var(--mantine-spacing-xs) var(--mantine-spacing-md);
61
68
  border-radius: var(--mantine-radius-md);
62
69
  }
70
+
63
71
  @media (hover: hover) {
64
72
  .subLink:hover {
65
73
  background-color: var(--mantine-color-gray-0);
66
74
  }
67
- [data-mantine-color-scheme=dark] .subLink:hover {
75
+ [data-mantine-color-scheme='dark'] .subLink:hover {
68
76
  background-color: var(--mantine-color-dark-7);
69
77
  }
70
78
  }
79
+
71
80
  @media (hover: none) {
72
81
  .subLink:active {
73
82
  background-color: var(--mantine-color-gray-0);
74
83
  }
75
- [data-mantine-color-scheme=dark] .subLink:active {
84
+ [data-mantine-color-scheme='dark'] .subLink:active {
76
85
  background-color: var(--mantine-color-dark-7);
77
86
  }
78
87
  }
88
+
79
89
  .dropdownFooter {
80
90
  background-color: var(--mantine-color-gray-0);
81
91
  }
82
- [data-mantine-color-scheme=dark] .dropdownFooter {
92
+
93
+ [data-mantine-color-scheme='dark'] .dropdownFooter {
83
94
  background-color: var(--mantine-color-dark-7);
84
95
  }
96
+
85
97
  .dropdownFooter {
86
98
  margin: calc(var(--mantine-spacing-md) * -1);
87
99
  margin-top: var(--mantine-spacing-sm);
@@ -89,6 +101,7 @@
89
101
  padding-bottom: var(--mantine-spacing-xl);
90
102
  border-top: 1px solid var(--mantine-color-gray-1);
91
103
  }
92
- [data-mantine-color-scheme=dark] .dropdownFooter {
104
+
105
+ [data-mantine-color-scheme='dark'] .dropdownFooter {
93
106
  border-top: 1px solid var(--mantine-color-dark-5);
94
107
  }
@@ -0,0 +1,4 @@
1
+ .title {
2
+ font-family: Greycliff CF, var(--mantine-font-family);
3
+ font-weight: 900;
4
+ }