@applica-software-guru/react-admin 1.0.32 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/.eslintrc.json +43 -0
  2. package/.husky/pre-commit +4 -0
  3. package/.nvmrc +1 -0
  4. package/.prettierrc +8 -0
  5. package/bitbucket-pipelines.yml +30 -0
  6. package/dist/Admin.d.ts +1 -1
  7. package/dist/ApplicaAdmin.d.ts +3 -3
  8. package/dist/ApplicaAdmin.d.ts.map +1 -1
  9. package/dist/components/@extended/AnimateButton.d.ts +5 -5
  10. package/dist/components/@extended/Avatar.d.ts +3 -3
  11. package/dist/components/@extended/Breadcrumbs.d.ts +5 -5
  12. package/dist/components/@extended/Dot.d.ts +1 -1
  13. package/dist/components/@extended/Tooltip.d.ts +1 -1
  14. package/dist/components/ActionsMenu.d.ts +1 -1
  15. package/dist/components/ActionsMenu.d.ts.map +1 -1
  16. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.d.ts +1 -1
  17. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.d.ts.map +1 -1
  18. package/dist/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.d.ts +5 -5
  19. package/dist/components/Layout/Header/AppBarStyled.d.ts +13 -13
  20. package/dist/components/Layout/Header/HeaderContent/NotificationItem.d.ts +3 -3
  21. package/dist/components/Logo.d.ts +2 -2
  22. package/dist/components/MenuPopover/MenuPopover.d.ts +1 -1
  23. package/dist/components/Notification.d.ts +5 -1
  24. package/dist/components/Notification.d.ts.map +1 -1
  25. package/dist/components/ra-buttons/CreateInDialogButton.d.ts +16 -1
  26. package/dist/components/ra-buttons/CreateInDialogButton.d.ts.map +1 -1
  27. package/dist/components/ra-buttons/ImpersonateUserButton.d.ts +1 -1
  28. package/dist/components/ra-fields/ActionsField.d.ts +1 -1
  29. package/dist/components/ra-fields/ActionsField.d.ts.map +1 -1
  30. package/dist/components/ra-fields/AttachmentField.d.ts +19 -1
  31. package/dist/components/ra-fields/AttachmentField.d.ts.map +1 -1
  32. package/dist/components/ra-fields/BaseAttachmentField.d.ts +2 -2
  33. package/dist/components/ra-fields/CoverField.d.ts +19 -1
  34. package/dist/components/ra-fields/CoverField.d.ts.map +1 -1
  35. package/dist/components/ra-fields/EmailField.d.ts +12 -1
  36. package/dist/components/ra-fields/FileField.d.ts +19 -1
  37. package/dist/components/ra-fields/FileField.d.ts.map +1 -1
  38. package/dist/components/ra-fields/ImageField.d.ts +15 -1
  39. package/dist/components/ra-fields/ImageField.d.ts.map +1 -1
  40. package/dist/components/ra-fields/ReadonlyField.d.ts +1 -1
  41. package/dist/components/ra-fields/ReferenceManyField.d.ts +32 -2
  42. package/dist/components/ra-fields/ReferenceManyField.d.ts.map +1 -1
  43. package/dist/components/ra-forms/Edit.d.ts +24 -1
  44. package/dist/components/ra-forms/Edit.d.ts.map +1 -1
  45. package/dist/components/ra-forms/LongForm/LongFormHeader.d.ts +1 -1
  46. package/dist/components/ra-forms/LongForm/LongFormHeader.d.ts.map +1 -1
  47. package/dist/components/ra-forms/LongForm/LongFormTab.d.ts +4 -4
  48. package/dist/components/ra-forms/LongForm/LongFormTab.d.ts.map +1 -1
  49. package/dist/components/ra-forms/LongForm/LongFormTabs.d.ts +2 -2
  50. package/dist/components/ra-forms/SimpleForm.d.ts +13 -1
  51. package/dist/components/ra-forms/SimpleForm.d.ts.map +1 -1
  52. package/dist/components/ra-forms/TabbedForm.d.ts +9 -1
  53. package/dist/components/ra-forms/TabbedForm.d.ts.map +1 -1
  54. package/dist/components/ra-forms/Toolbar.d.ts +5 -1
  55. package/dist/components/ra-inputs/AttachmentInput.d.ts +20 -1
  56. package/dist/components/ra-inputs/AttachmentInput.d.ts.map +1 -1
  57. package/dist/components/ra-inputs/AutocompleteArrayInput.d.ts +1 -2
  58. package/dist/components/ra-inputs/AutocompleteArrayInput.d.ts.map +1 -1
  59. package/dist/components/ra-inputs/AutocompleteInput.d.ts +1 -2
  60. package/dist/components/ra-inputs/AutocompleteInput.d.ts.map +1 -1
  61. package/dist/components/ra-inputs/BooleanInput.d.ts +19 -2
  62. package/dist/components/ra-inputs/BooleanInput.d.ts.map +1 -1
  63. package/dist/components/ra-inputs/DateInput.d.ts +11 -1
  64. package/dist/components/ra-inputs/FileInput.d.ts +21 -1
  65. package/dist/components/ra-inputs/FileInput.d.ts.map +1 -1
  66. package/dist/components/ra-inputs/LabeledInput.d.ts +2 -2
  67. package/dist/components/ra-inputs/NumberInput.d.ts +19 -2
  68. package/dist/components/ra-inputs/RecordInput.d.ts +1 -1
  69. package/dist/components/ra-inputs/ReferenceArrayInput.d.ts +25 -2
  70. package/dist/components/ra-inputs/ReferenceArrayInput.d.ts.map +1 -1
  71. package/dist/components/ra-inputs/ReferenceInput.d.ts +26 -2
  72. package/dist/components/ra-inputs/ReferenceInput.d.ts.map +1 -1
  73. package/dist/components/ra-inputs/ReferenceManyInput.d.ts +34 -2
  74. package/dist/components/ra-inputs/ReferenceManyInput.d.ts.map +1 -1
  75. package/dist/components/ra-inputs/SelectArrayInput.d.ts +18 -1
  76. package/dist/components/ra-inputs/SelectInput.d.ts +21 -1
  77. package/dist/components/ra-inputs/SmartTextInput.d.ts +17 -1
  78. package/dist/components/ra-inputs/SmartTextInput.d.ts.map +1 -1
  79. package/dist/components/ra-inputs/TextInput.d.ts +16 -2
  80. package/dist/components/ra-inputs/TimeInput.d.ts +11 -1
  81. package/dist/components/ra-lists/Datagrid.d.ts +616 -2
  82. package/dist/components/ra-lists/List.d.ts +28 -2
  83. package/dist/contexts/AppConfigContext.d.ts +1 -1
  84. package/dist/contexts/MenuConfigContext.d.ts +4 -4
  85. package/dist/dev/useCliErrorCatcher.d.ts +5 -5
  86. package/dist/hooks/useAppConfig.d.ts +1 -1
  87. package/dist/hooks/useBreadcrumbs.d.ts +2 -2
  88. package/dist/hooks/useMenu.d.ts +2 -2
  89. package/dist/hooks/useMenu.d.ts.map +1 -1
  90. package/dist/hooks/useMenuConfig.d.ts +2 -2
  91. package/dist/i18n/createI18nProvider.d.ts +1 -1
  92. package/dist/i18n/useI18nCatcher.d.ts +4 -4
  93. package/dist/i18n/useI18nLanguages.d.ts +4 -4
  94. package/dist/i18n/useI18nProvider.d.ts +2 -2
  95. package/dist/index.d.ts +1 -1
  96. package/dist/react-admin.cjs.js +25 -25
  97. package/dist/react-admin.es.js +304 -315
  98. package/dist/react-admin.umd.js +25 -25
  99. package/dist/themes/overrides/PaginationItem.d.ts +72 -72
  100. package/jsconfig.json +31 -0
  101. package/jsconfig.node.json +10 -0
  102. package/package.json +6 -5
  103. package/playground/config-overrides.js +31 -0
  104. package/playground/jsconfig.json +9 -0
  105. package/playground/package-lock.json +17764 -0
  106. package/playground/package.json +69 -0
  107. package/playground/public/favicon-dark.png +0 -0
  108. package/playground/public/favicon-light.png +0 -0
  109. package/playground/public/index.html +46 -0
  110. package/playground/src/App.js +49 -0
  111. package/playground/src/build.json +1 -0
  112. package/playground/src/components/index.js +5 -0
  113. package/playground/src/components/pages/CustomPage.jsx +7 -0
  114. package/playground/src/components/pages/index.jsx +2 -0
  115. package/playground/src/components/ra-buttons/index.js +1 -0
  116. package/playground/src/components/ra-fields/UserPictureField.js +20 -0
  117. package/playground/src/components/ra-fields/index.js +2 -0
  118. package/playground/src/components/ra-forms/DeviceForm.js +36 -0
  119. package/playground/src/components/ra-forms/I18nMessageForm.js +24 -0
  120. package/playground/src/components/ra-forms/UserForm.js +51 -0
  121. package/playground/src/components/ra-forms/index.js +5 -0
  122. package/playground/src/components/ra-inputs/LangSelectInput.js +4 -0
  123. package/playground/src/components/ra-inputs/YesOrNoSelectInput.js +14 -0
  124. package/playground/src/components/ra-inputs/index.js +3 -0
  125. package/playground/src/components/ra-lists/DeviceList.js +33 -0
  126. package/playground/src/components/ra-lists/I18nMessageList.js +20 -0
  127. package/playground/src/components/ra-lists/UserList.js +96 -0
  128. package/playground/src/components/ra-lists/index.js +4 -0
  129. package/playground/src/config.js +19 -0
  130. package/playground/src/contexts/index.js +1 -0
  131. package/playground/src/hooks/index.js +1 -0
  132. package/playground/src/index.js +10 -0
  133. package/playground/src/menu.js +72 -0
  134. package/playground/src/react-app-env.d.js +1 -0
  135. package/playground/src/reportWebVitals.js +13 -0
  136. package/playground/src/resource/device.js +23 -0
  137. package/playground/src/resource/i18n-message.js +29 -0
  138. package/playground/src/resource/index.js +4 -0
  139. package/playground/src/resource/notification.js +18 -0
  140. package/playground/src/resource/user.js +28 -0
  141. package/playground/src/theme.js +3 -0
  142. package/src/Admin.jsx +67 -0
  143. package/src/AdminContext.jsx +26 -0
  144. package/src/ApplicaAdmin.jsx +210 -0
  145. package/src/assets/README.md +7 -0
  146. package/src/assets/logo-icon.png +0 -0
  147. package/src/assets/logo-main.png +0 -0
  148. package/src/components/@extended/AnimateButton.jsx +96 -0
  149. package/src/components/@extended/Avatar.jsx +125 -0
  150. package/src/components/@extended/Breadcrumbs.jsx +324 -0
  151. package/src/components/@extended/Dot.jsx +35 -0
  152. package/src/components/@extended/IconButton.jsx +166 -0
  153. package/src/components/@extended/LoadingButton.jsx +228 -0
  154. package/src/components/@extended/Tooltip.jsx +67 -0
  155. package/src/components/@extended/Transitions.jsx +125 -0
  156. package/src/components/@extended/index.jsx +11 -0
  157. package/src/components/@extended/progress/CircularWithLabel.jsx +34 -0
  158. package/src/components/@extended/progress/CircularWithPath.jsx +74 -0
  159. package/src/components/@extended/progress/LinearWithIcon.jsx +22 -0
  160. package/src/components/@extended/progress/LinearWithLabel.jsx +23 -0
  161. package/src/components/@extended/progress/index.jsx +6 -0
  162. package/src/components/ActionsMenu.jsx +77 -0
  163. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.jsx +440 -0
  164. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.jsx +359 -0
  165. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavItem.jsx +259 -0
  166. package/src/components/Layout/Drawer/DrawerContent/Navigation/index.jsx +73 -0
  167. package/src/components/Layout/Drawer/DrawerContent/index.jsx +19 -0
  168. package/src/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.jsx +20 -0
  169. package/src/components/Layout/Drawer/DrawerHeader/index.jsx +44 -0
  170. package/src/components/Layout/Drawer/HorizontalBar.jsx +55 -0
  171. package/src/components/Layout/Drawer/MiniDrawerStyled.jsx +47 -0
  172. package/src/components/Layout/Drawer/index.jsx +63 -0
  173. package/src/components/Layout/Footer.jsx +23 -0
  174. package/src/components/Layout/Header/AppBarStyled.jsx +34 -0
  175. package/src/components/Layout/Header/HeaderContent/MobileSection.jsx +91 -0
  176. package/src/components/Layout/Header/HeaderContent/Notification.jsx +179 -0
  177. package/src/components/Layout/Header/HeaderContent/NotificationItem.jsx +109 -0
  178. package/src/components/Layout/Header/HeaderContent/Profile.jsx +181 -0
  179. package/src/components/Layout/Header/HeaderContent/index.jsx +38 -0
  180. package/src/components/Layout/Header/index.jsx +99 -0
  181. package/src/components/Layout/index.jsx +119 -0
  182. package/src/components/Loadable.jsx +11 -0
  183. package/src/components/Loader.jsx +21 -0
  184. package/src/components/Logo.jsx +29 -0
  185. package/src/components/MainCard.jsx +111 -0
  186. package/src/components/MainIcon.jsx +20 -0
  187. package/src/components/MenuPopover/MenuPopover.jsx +61 -0
  188. package/src/components/MenuPopover/getPosition.jsx +98 -0
  189. package/src/components/MenuPopover/index.jsx +3 -0
  190. package/src/components/MenuPopover/styles.jsx +87 -0
  191. package/src/components/Notification.jsx +13 -0
  192. package/src/components/ScrollTop.jsx +24 -0
  193. package/src/components/ScrollX.jsx +10 -0
  194. package/src/components/SmallIcon.jsx +14 -0
  195. package/src/components/index.jsx +36 -0
  196. package/src/components/ra-buttons/CreateInDialogButton.jsx +203 -0
  197. package/src/components/ra-buttons/EditInDialogButton.jsx +108 -0
  198. package/src/components/ra-buttons/ImpersonateUserButton.jsx +41 -0
  199. package/src/components/ra-buttons/index.jsx +4 -0
  200. package/src/components/ra-fields/ActionsField.jsx +33 -0
  201. package/src/components/ra-fields/AttachmentField.jsx +82 -0
  202. package/src/components/ra-fields/BaseAttachmentField.jsx +72 -0
  203. package/src/components/ra-fields/CoverField.jsx +83 -0
  204. package/src/components/ra-fields/DateAgoField.jsx +35 -0
  205. package/src/components/ra-fields/DateField.jsx +27 -0
  206. package/src/components/ra-fields/EmailField.jsx +27 -0
  207. package/src/components/ra-fields/FileField.jsx +40 -0
  208. package/src/components/ra-fields/FunctionField.jsx +9 -0
  209. package/src/components/ra-fields/ImageField.jsx +20 -0
  210. package/src/components/ra-fields/ReadonlyField.jsx +107 -0
  211. package/src/components/ra-fields/ReferenceManyField.jsx +63 -0
  212. package/src/components/ra-fields/SizeField.jsx +32 -0
  213. package/src/components/ra-fields/TextField.jsx +27 -0
  214. package/src/components/ra-fields/index.jsx +28 -0
  215. package/src/components/ra-forms/CardForm.jsx +113 -0
  216. package/src/components/ra-forms/Edit.jsx +13 -0
  217. package/src/components/ra-forms/FormHeader.jsx +42 -0
  218. package/src/components/ra-forms/LongForm/DispositionProps.jsx +10 -0
  219. package/src/components/ra-forms/LongForm/LongForm.jsx +38 -0
  220. package/src/components/ra-forms/LongForm/LongFormHeader.jsx +24 -0
  221. package/src/components/ra-forms/LongForm/LongFormTab.jsx +121 -0
  222. package/src/components/ra-forms/LongForm/LongFormTabs.jsx +63 -0
  223. package/src/components/ra-forms/LongForm/LongFormView.jsx +129 -0
  224. package/src/components/ra-forms/LongForm/index.jsx +2 -0
  225. package/src/components/ra-forms/LongForm/useFormRootPath.jsx +22 -0
  226. package/src/components/ra-forms/SimpleForm.jsx +69 -0
  227. package/src/components/ra-forms/TabbedForm.jsx +19 -0
  228. package/src/components/ra-forms/Toolbar.jsx +36 -0
  229. package/src/components/ra-forms/index.jsx +8 -0
  230. package/src/components/ra-inputs/ArrayInput.jsx +29 -0
  231. package/src/components/ra-inputs/AttachmentInput.jsx +57 -0
  232. package/src/components/ra-inputs/AutocompleteArrayInput.jsx +25 -0
  233. package/src/components/ra-inputs/AutocompleteInput.jsx +24 -0
  234. package/src/components/ra-inputs/BooleanInput.jsx +54 -0
  235. package/src/components/ra-inputs/DateInput.jsx +30 -0
  236. package/src/components/ra-inputs/FileInput.jsx +98 -0
  237. package/src/components/ra-inputs/ImageInput.jsx +44 -0
  238. package/src/components/ra-inputs/LabeledInput.jsx +80 -0
  239. package/src/components/ra-inputs/NumberInput.jsx +28 -0
  240. package/src/components/ra-inputs/RecordInput.jsx +102 -0
  241. package/src/components/ra-inputs/ReferenceArrayInput.jsx +23 -0
  242. package/src/components/ra-inputs/ReferenceInput.jsx +23 -0
  243. package/src/components/ra-inputs/ReferenceManyInput.jsx +44 -0
  244. package/src/components/ra-inputs/SearchInput.jsx +14 -0
  245. package/src/components/ra-inputs/SelectArrayInput.jsx +45 -0
  246. package/src/components/ra-inputs/SelectInput.jsx +24 -0
  247. package/src/components/ra-inputs/SmartTextInput.jsx +52 -0
  248. package/src/components/ra-inputs/TextInput.jsx +20 -0
  249. package/src/components/ra-inputs/TimeInput.jsx +46 -0
  250. package/src/components/ra-inputs/index.jsx +42 -0
  251. package/src/components/ra-lists/Datagrid.jsx +42 -0
  252. package/src/components/ra-lists/Empty.jsx +94 -0
  253. package/src/components/ra-lists/List.jsx +81 -0
  254. package/src/components/ra-lists/NotificationList/NotificationList.jsx +41 -0
  255. package/src/components/ra-lists/NotificationList/button/MarkAsReadedButton.jsx +57 -0
  256. package/src/components/ra-lists/NotificationList/button/MarkAsUnreadedButton.jsx +56 -0
  257. package/src/components/ra-lists/NotificationList/button/index.jsx +2 -0
  258. package/src/components/ra-lists/NotificationList/field/NotificationField.jsx +80 -0
  259. package/src/components/ra-lists/NotificationList/field/index.jsx +1 -0
  260. package/src/components/ra-lists/NotificationList/index.jsx +2 -0
  261. package/src/components/ra-lists/index.jsx +5 -0
  262. package/src/components/third-party/SimpleBar.jsx +61 -0
  263. package/src/components/third-party/index.jsx +3 -0
  264. package/src/contexts/AppConfigContext.jsx +54 -0
  265. package/src/contexts/MenuConfigContext.jsx +93 -0
  266. package/src/contexts/MenuPropTypes.jsx +19 -0
  267. package/src/contexts/ThemeConfigContext.jsx +138 -0
  268. package/src/contexts/index.jsx +5 -0
  269. package/src/dev/index.jsx +2 -0
  270. package/src/dev/useCliErrorCatcher.jsx +86 -0
  271. package/src/hooks/index.jsx +16 -0
  272. package/src/hooks/useAppConfig.jsx +6 -0
  273. package/src/hooks/useBreadcrumbs.jsx +68 -0
  274. package/src/hooks/useLocalStorage.jsx +31 -0
  275. package/src/hooks/useMenu.jsx +223 -0
  276. package/src/hooks/useMenuConfig.jsx +6 -0
  277. package/src/hooks/useResourceTitle.jsx +25 -0
  278. package/src/hooks/useThemeConfig.jsx +6 -0
  279. package/src/i18n/createI18nProvider.jsx +15 -0
  280. package/src/i18n/index.jsx +4 -0
  281. package/src/i18n/useI18nCatcher.jsx +71 -0
  282. package/src/i18n/useI18nLanguages.jsx +22 -0
  283. package/src/i18n/useI18nProvider.jsx +5 -0
  284. package/src/index.jsx +67 -0
  285. package/src/themes/getColors.jsx +18 -0
  286. package/src/themes/getShadow.jsx +37 -0
  287. package/src/themes/index.jsx +70 -0
  288. package/src/themes/overrides/Accordion.jsx +27 -0
  289. package/src/themes/overrides/AccordionDetails.jsx +14 -0
  290. package/src/themes/overrides/AccordionSummary.jsx +33 -0
  291. package/src/themes/overrides/Alert.jsx +72 -0
  292. package/src/themes/overrides/AlertTitle.jsx +15 -0
  293. package/src/themes/overrides/Autocomplete.jsx +23 -0
  294. package/src/themes/overrides/Badge.jsx +36 -0
  295. package/src/themes/overrides/Button.jsx +229 -0
  296. package/src/themes/overrides/ButtonBase.jsx +12 -0
  297. package/src/themes/overrides/ButtonGroup.jsx +11 -0
  298. package/src/themes/overrides/CardContent.jsx +16 -0
  299. package/src/themes/overrides/Checkbox.jsx +125 -0
  300. package/src/themes/overrides/Chip.jsx +75 -0
  301. package/src/themes/overrides/Dialog.jsx +18 -0
  302. package/src/themes/overrides/DialogContentText.jsx +14 -0
  303. package/src/themes/overrides/DialogTitle.jsx +14 -0
  304. package/src/themes/overrides/Fab.jsx +77 -0
  305. package/src/themes/overrides/IconButton.jsx +28 -0
  306. package/src/themes/overrides/InputBase.jsx +13 -0
  307. package/src/themes/overrides/InputLabel.jsx +25 -0
  308. package/src/themes/overrides/LinearProgress.jsx +17 -0
  309. package/src/themes/overrides/Link.jsx +11 -0
  310. package/src/themes/overrides/ListItemButton.jsx +18 -0
  311. package/src/themes/overrides/ListItemIcon.jsx +14 -0
  312. package/src/themes/overrides/LoadingButton.jsx +17 -0
  313. package/src/themes/overrides/OutlinedInput.jsx +54 -0
  314. package/src/themes/overrides/Pagination.jsx +11 -0
  315. package/src/themes/overrides/PaginationItem.jsx +211 -0
  316. package/src/themes/overrides/Popover.jsx +13 -0
  317. package/src/themes/overrides/Radio.jsx +121 -0
  318. package/src/themes/overrides/Slider.jsx +66 -0
  319. package/src/themes/overrides/Switch.jsx +88 -0
  320. package/src/themes/overrides/Tab.jsx +24 -0
  321. package/src/themes/overrides/TableBody.jsx +27 -0
  322. package/src/themes/overrides/TableCell.jsx +44 -0
  323. package/src/themes/overrides/TableFooter.jsx +15 -0
  324. package/src/themes/overrides/TableHead.jsx +15 -0
  325. package/src/themes/overrides/TablePagination.jsx +16 -0
  326. package/src/themes/overrides/TableRow.jsx +25 -0
  327. package/src/themes/overrides/Tabs.jsx +13 -0
  328. package/src/themes/overrides/ToggleButton.jsx +20 -0
  329. package/src/themes/overrides/Tooltip.jsx +13 -0
  330. package/src/themes/overrides/TreeItem.jsx +18 -0
  331. package/src/themes/overrides/Typography.jsx +13 -0
  332. package/src/themes/overrides/index.jsx +98 -0
  333. package/src/themes/palette.jsx +78 -0
  334. package/src/themes/shadows.jsx +27 -0
  335. package/src/themes/theme/default.jsx +98 -0
  336. package/src/themes/theme/index.jsx +44 -0
  337. package/src/themes/theme/theme1.jsx +128 -0
  338. package/src/themes/theme/theme2.jsx +128 -0
  339. package/src/themes/theme/theme3.jsx +128 -0
  340. package/src/themes/theme/theme4.jsx +128 -0
  341. package/src/themes/theme/theme5.jsx +128 -0
  342. package/src/themes/theme/theme6.jsx +128 -0
  343. package/src/themes/theme/theme7.jsx +128 -0
  344. package/src/themes/theme/theme8.jsx +128 -0
  345. package/src/themes/typography.jsx +71 -0
  346. package/src/utils/index.js +2 -0
  347. package/src/utils/lang.js +12 -0
  348. package/src/utils/time.js +13 -0
  349. package/tsconfig.json +28 -0
  350. package/vite.config.js +74 -0
@@ -0,0 +1,20 @@
1
+ import { Box } from '@mui/material'
2
+ import PropTypes from 'prop-types'
3
+ import { styled } from '@mui/material/styles'
4
+
5
+ const DrawerHeaderStyled = styled(Box, { shouldForwardProp: (prop) => prop !== 'open' })(
6
+ ({ theme, open }) => ({
7
+ ...theme.mixins.toolbar,
8
+ display: 'flex',
9
+ alignItems: 'center',
10
+ justifyContent: open ? 'flex-start' : 'center',
11
+ paddingLeft: theme.spacing(open ? 3 : 0),
12
+ }),
13
+ )
14
+
15
+ DrawerHeaderStyled.propTypes = {
16
+ theme: PropTypes.object,
17
+ open: PropTypes.bool,
18
+ }
19
+
20
+ export default DrawerHeaderStyled
@@ -0,0 +1,44 @@
1
+ import DrawerHeaderStyled from './DrawerHeaderStyled'
2
+ import Logo from '../../../Logo'
3
+ import PropTypes from 'prop-types'
4
+ import { useMediaQuery } from '@mui/material'
5
+ import { useTheme } from '@mui/material/styles'
6
+ import { useThemeConfig } from '../../../../hooks'
7
+
8
+ const DrawerHeader = ({ open, logoMain, logoIcon }) => {
9
+ const theme = useTheme()
10
+
11
+ const downLG = useMediaQuery(theme.breakpoints.down('lg'))
12
+
13
+ const { menuOrientation, isHorizontalLayout } = useThemeConfig()
14
+ const isHorizontal = isHorizontalLayout(menuOrientation) && !downLG
15
+
16
+ return (
17
+ <DrawerHeaderStyled
18
+ theme={theme}
19
+ open={open}
20
+ sx={{
21
+ minHeight: isHorizontal ? 'unset' : '60px',
22
+ width: isHorizontal ? { xs: '100%', lg: '424px' } : 'inherit',
23
+ paddingTop: isHorizontal ? { xs: '10px', lg: '0' } : '8px',
24
+ paddingBottom: isHorizontal ? { xs: '18px', lg: '0' } : '8px',
25
+ paddingLeft: isHorizontal ? { xs: '24px', lg: '0' } : open ? '24px' : 0,
26
+ }}
27
+ >
28
+ <Logo
29
+ isIcon={!open}
30
+ sx={{ width: open ? 'auto' : 35, height: 35 }}
31
+ logoMain={logoMain}
32
+ logoIcon={logoIcon}
33
+ />
34
+ </DrawerHeaderStyled>
35
+ )
36
+ }
37
+
38
+ DrawerHeader.propTypes = {
39
+ open: PropTypes.bool,
40
+ logoMain: PropTypes.node,
41
+ logoIcon: PropTypes.node,
42
+ }
43
+
44
+ export default DrawerHeader
@@ -0,0 +1,55 @@
1
+ import { AppBar, Box, Container, useScrollTrigger } from '@mui/material'
2
+
3
+ import Navigation from './DrawerContent/Navigation'
4
+ import React from 'react'
5
+ import { useTheme } from '@mui/material/styles'
6
+ import { useThemeConfig } from '../../../hooks'
7
+
8
+ function ElevationScroll({ children, window }) {
9
+ const theme = useTheme()
10
+ // Note that you normally won't need to set the window ref as useScrollTrigger
11
+ // will default to window.
12
+ // This is only being set here because the demo is in an iframe.
13
+ const trigger = useScrollTrigger({
14
+ disableHysteresis: true,
15
+ threshold: 0,
16
+ target: window,
17
+ })
18
+
19
+ theme.shadows[4] = theme.customShadows.z1
20
+
21
+ return React.cloneElement(children, {
22
+ elevation: trigger ? 4 : 0,
23
+ })
24
+ }
25
+
26
+ const CustomAppBar = () => {
27
+ const theme = useTheme()
28
+ const { container } = useThemeConfig()
29
+
30
+ return (
31
+ <ElevationScroll>
32
+ <AppBar
33
+ sx={{
34
+ top: 60,
35
+ bgcolor: theme.palette.background.paper,
36
+ width: '100%',
37
+ height: 62,
38
+ justifyContent: 'center',
39
+ borderTop: `1px solid ${theme.palette.divider}`,
40
+ borderBottom: `1px solid ${theme.palette.divider}`,
41
+ zIndex: 1098,
42
+ color: theme.palette.grey[500],
43
+ }}
44
+ >
45
+ <Container maxWidth={container ? 'xl' : false}>
46
+ <Box sx={{ display: 'flex', alignItems: 'center' }}>
47
+ <Navigation />
48
+ </Box>
49
+ </Container>
50
+ </AppBar>
51
+ </ElevationScroll>
52
+ )
53
+ }
54
+
55
+ export default CustomAppBar
@@ -0,0 +1,47 @@
1
+ import Drawer from '@mui/material/Drawer'
2
+ import { styled } from '@mui/material/styles'
3
+ import { useThemeConfig } from '../../../hooks'
4
+
5
+ const openedMixin = (theme, drawerWidth) => ({
6
+ width: drawerWidth,
7
+ borderRight: `1px solid ${theme.palette.divider}`,
8
+ transition: theme.transitions.create('width', {
9
+ easing: theme.transitions.easing.sharp,
10
+ duration: theme.transitions.duration.enteringScreen,
11
+ }),
12
+ overflowX: 'hidden',
13
+ boxShadow: theme.palette.mode === 'dark' ? theme.customShadows.z1 : 'none',
14
+ })
15
+
16
+ const closedMixin = (theme) => ({
17
+ transition: theme.transitions.create('width', {
18
+ easing: theme.transitions.easing.sharp,
19
+ duration: theme.transitions.duration.leavingScreen,
20
+ }),
21
+ overflowX: 'hidden',
22
+ width: theme.spacing(7.5),
23
+ borderRight: 'none',
24
+ boxShadow: theme.customShadows.z1,
25
+ })
26
+
27
+ const MiniDrawerStyled = styled(Drawer, { shouldForwardProp: (prop) => prop !== 'open' })(
28
+ ({ theme, open }) => {
29
+ const { drawerWidth } = useThemeConfig()
30
+ return {
31
+ width: drawerWidth,
32
+ flexShrink: 0,
33
+ whiteSpace: 'nowrap',
34
+ boxSizing: 'border-box',
35
+ ...(open && {
36
+ ...openedMixin(theme, drawerWidth),
37
+ '& .MuiDrawer-paper': openedMixin(theme, drawerWidth),
38
+ }),
39
+ ...(!open && {
40
+ ...closedMixin(theme),
41
+ '& .MuiDrawer-paper': closedMixin(theme),
42
+ }),
43
+ }
44
+ },
45
+ )
46
+
47
+ export default MiniDrawerStyled
@@ -0,0 +1,63 @@
1
+ import { Box, Drawer, useMediaQuery } from '@mui/material'
2
+
3
+ import DrawerContent from './DrawerContent'
4
+ import DrawerHeader from './DrawerHeader'
5
+ import MiniDrawerStyled from './MiniDrawerStyled'
6
+ import PropTypes from 'prop-types'
7
+ import { useMemo } from 'react'
8
+ import { useTheme } from '@mui/material/styles'
9
+ import { useThemeConfig } from '../../../hooks'
10
+
11
+ const MainDrawer = ({ open, handleDrawerToggle, window, logoMain, logoIcon }) => {
12
+ const theme = useTheme()
13
+ const matchDownMD = useMediaQuery(theme.breakpoints.down('lg'))
14
+ const container = window !== undefined ? () => window().document.body : undefined
15
+ const drawerContent = useMemo(() => <DrawerContent />, [])
16
+ const drawerHeader = useMemo(
17
+ () => <DrawerHeader open={open} logoMain={logoMain} logoIcon={logoIcon} />,
18
+ [open, logoMain, logoIcon],
19
+ )
20
+ const { drawerWidth } = useThemeConfig()
21
+
22
+ return (
23
+ <Box component="nav" sx={{ flexShrink: { md: 0 }, zIndex: 1200 }} aria-label="mailbox folders">
24
+ {!matchDownMD ? (
25
+ <MiniDrawerStyled variant="permanent" open={open}>
26
+ {drawerHeader}
27
+ {drawerContent}
28
+ </MiniDrawerStyled>
29
+ ) : (
30
+ <Drawer
31
+ container={container}
32
+ variant="temporary"
33
+ open={open}
34
+ onClose={handleDrawerToggle}
35
+ ModalProps={{ keepMounted: true }}
36
+ sx={{
37
+ display: { xs: 'block', lg: 'none' },
38
+ '& .MuiDrawer-paper': {
39
+ boxSizing: 'border-box',
40
+ width: drawerWidth,
41
+ borderRight: `1px solid ${theme.palette.divider}`,
42
+ backgroundImage: 'none',
43
+ boxShadow: 'inherit',
44
+ },
45
+ }}
46
+ >
47
+ {drawerHeader}
48
+ {drawerContent}
49
+ </Drawer>
50
+ )}
51
+ </Box>
52
+ )
53
+ }
54
+
55
+ MainDrawer.propTypes = {
56
+ open: PropTypes.bool,
57
+ window: PropTypes.object,
58
+ handleDrawerToggle: PropTypes.func,
59
+ logoMain: PropTypes.node,
60
+ logoIcon: PropTypes.node,
61
+ }
62
+
63
+ export default MainDrawer
@@ -0,0 +1,23 @@
1
+ import { Stack, Typography } from '@mui/material'
2
+
3
+ import PropTypes from 'prop-types'
4
+
5
+ const Footer = ({ name, version }) => (
6
+ <Stack
7
+ direction="row"
8
+ justifyContent="space-between"
9
+ alignItems="center"
10
+ sx={{ p: '24px 16px 0px', mt: 'auto' }}
11
+ >
12
+ <Typography variant="caption">
13
+ &copy; Applica Software Guru for {name} - {version}
14
+ </Typography>
15
+ </Stack>
16
+ )
17
+
18
+ Footer.propTypes = {
19
+ name: PropTypes.string.isRequired,
20
+ version: PropTypes.string.isRequired,
21
+ }
22
+
23
+ export default Footer
@@ -0,0 +1,34 @@
1
+ import AppBar from '@mui/material/AppBar'
2
+ import PropTypes from 'prop-types'
3
+ import { styled } from '@mui/material/styles'
4
+ import { useThemeConfig } from '../../../hooks'
5
+
6
+ const AppBarStyled = styled(AppBar, { shouldForwardProp: (prop) => prop !== 'open' })(
7
+ ({ theme, open }) => {
8
+ const { drawerWidth } = useThemeConfig()
9
+ return {
10
+ zIndex: theme.zIndex.drawer + 1,
11
+ transition: theme.transitions.create(['width', 'margin'], {
12
+ easing: theme.transitions.easing.sharp,
13
+ duration: theme.transitions.duration.leavingScreen,
14
+ }),
15
+ ...(!open && {
16
+ width: `calc(100% - ${theme.spacing(7.5)})`,
17
+ }),
18
+ ...(open && {
19
+ marginLeft: drawerWidth,
20
+ width: `calc(100% - ${drawerWidth}px)`,
21
+ transition: theme.transitions.create(['width', 'margin'], {
22
+ easing: theme.transitions.easing.sharp,
23
+ duration: theme.transitions.duration.enteringScreen,
24
+ }),
25
+ }),
26
+ }
27
+ },
28
+ )
29
+
30
+ AppBarStyled.propTypes = {
31
+ open: PropTypes.bool,
32
+ }
33
+
34
+ export default AppBarStyled
@@ -0,0 +1,91 @@
1
+ import { AppBar, Box, ClickAwayListener, Paper, Popper, Toolbar } from '@mui/material'
2
+ import { IconButton, Transitions } from '../../../@extended'
3
+ import { useEffect, useRef, useState } from 'react'
4
+
5
+ import { MoreOutlined } from '@ant-design/icons'
6
+ import Profile from './Profile'
7
+ import { useTheme } from '@mui/material/styles'
8
+
9
+ const MobileSection = () => {
10
+ const theme = useTheme()
11
+
12
+ const [open, setOpen] = useState(false)
13
+ const anchorRef = useRef(null)
14
+
15
+ const handleToggle = () => {
16
+ setOpen((prevOpen) => !prevOpen)
17
+ }
18
+
19
+ const handleClose = (event) => {
20
+ if (anchorRef.current && anchorRef.current.contains(event.target)) {
21
+ return
22
+ }
23
+ setOpen(false)
24
+ }
25
+
26
+ const prevOpen = useRef(open)
27
+ useEffect(() => {
28
+ if (prevOpen.current === true && open === false) {
29
+ anchorRef.current.focus()
30
+ }
31
+
32
+ prevOpen.current = open
33
+ }, [open])
34
+
35
+ const iconBackColorOpen = theme.palette.mode === 'dark' ? 'grey.200' : 'grey.300'
36
+ const iconBackColor = theme.palette.mode === 'dark' ? 'background.default' : 'grey.100'
37
+
38
+ return (
39
+ <>
40
+ <Box sx={{ flexShrink: 0, ml: 0.75 }}>
41
+ <IconButton
42
+ sx={{ color: 'text.primary', bgcolor: open ? iconBackColorOpen : iconBackColor }}
43
+ aria-label="open more menu"
44
+ ref={anchorRef}
45
+ aria-controls={open ? 'menu-list-grow' : undefined}
46
+ aria-haspopup="true"
47
+ onClick={handleToggle}
48
+ color="secondary"
49
+ variant="light"
50
+ >
51
+ <MoreOutlined />
52
+ </IconButton>
53
+ </Box>
54
+ <Popper
55
+ placement="bottom-end"
56
+ open={open}
57
+ anchorEl={anchorRef.current}
58
+ role={undefined}
59
+ transition
60
+ disablePortal
61
+ style={{ width: '100%' }}
62
+ popperOptions={{
63
+ modifiers: [
64
+ {
65
+ name: 'offset',
66
+ options: {
67
+ offset: [0, 9],
68
+ },
69
+ },
70
+ ],
71
+ }}
72
+ >
73
+ {({ TransitionProps }) => (
74
+ <Transitions type="fade" in={open} {...TransitionProps}>
75
+ <Paper sx={{ boxShadow: theme.customShadows.z1 }}>
76
+ <ClickAwayListener onClickAway={handleClose}>
77
+ <AppBar color="inherit">
78
+ <Toolbar>
79
+ <Profile />
80
+ </Toolbar>
81
+ </AppBar>
82
+ </ClickAwayListener>
83
+ </Paper>
84
+ </Transitions>
85
+ )}
86
+ </Popper>
87
+ </>
88
+ )
89
+ }
90
+
91
+ export default MobileSection
@@ -0,0 +1,179 @@
1
+ import {
2
+ Badge,
3
+ Box,
4
+ ClickAwayListener,
5
+ List,
6
+ Paper,
7
+ Popper,
8
+ Tooltip,
9
+ useMediaQuery
10
+ } from '@mui/material'
11
+ import { BellOutlined, CheckCircleOutlined } from '@ant-design/icons'
12
+ import { IconButton, Transitions } from '../../../@extended'
13
+ import { useEffect, useRef, useState } from 'react'
14
+
15
+ import MainCard from '../../../MainCard'
16
+ import NotificationItem from './NotificationItem'
17
+ import PropTypes from 'prop-types'
18
+ import { useGetList } from 'react-admin'
19
+ import { useTheme } from '@mui/material/styles'
20
+
21
+ const avatarSX = {
22
+ width: 36,
23
+ height: 36,
24
+ fontSize: '1rem'
25
+ }
26
+
27
+ const actionSX = {
28
+ mt: '6px',
29
+ ml: 1,
30
+ top: 'auto',
31
+ right: 'auto',
32
+ alignSelf: 'flex-start',
33
+
34
+ transform: 'none'
35
+ }
36
+
37
+ const Notification = ({ resource }) => {
38
+ const theme = useTheme()
39
+ const matchesXs = useMediaQuery(theme.breakpoints.down('md'))
40
+
41
+ const anchorRef = useRef(null)
42
+ const [open, setOpen] = useState(false)
43
+ const handleToggle = () => {
44
+ setOpen((prevOpen) => !prevOpen)
45
+ }
46
+
47
+ const handleClose = (event) => {
48
+ if (anchorRef.current && anchorRef.current.contains(event.target)) {
49
+ return
50
+ }
51
+ setOpen(false)
52
+ }
53
+
54
+ const iconBackColorOpen = theme.palette.mode === 'dark' ? 'grey.200' : 'grey.300'
55
+ const iconBackColor = theme.palette.mode === 'dark' ? 'background.default' : 'grey.100'
56
+
57
+ const { data, isLoading } = useGetList(resource, {
58
+ pagination: { page: 1, perPage: 50 },
59
+ sort: { field: 'created', order: 'DESC' },
60
+ filter: {
61
+ readed: false
62
+ }
63
+ })
64
+ const [notifications, setNotifications] = useState([])
65
+ useEffect(() => setNotifications(!isLoading && data ? data : []), [data, isLoading])
66
+ const read = notifications.filter((item) => item.readed === null).length
67
+
68
+ return (
69
+ <Box sx={{ flexShrink: 0, ml: 0.75 }}>
70
+ <IconButton
71
+ color="secondary"
72
+ variant="light"
73
+ sx={{ color: 'text.primary', bgcolor: open ? iconBackColorOpen : iconBackColor }}
74
+ aria-label="open profile"
75
+ ref={anchorRef}
76
+ aria-controls={open ? 'profile-grow' : undefined}
77
+ aria-haspopup="true"
78
+ onClick={handleToggle}
79
+ >
80
+ <Badge badgeContent={read} color="primary">
81
+ <BellOutlined />
82
+ </Badge>
83
+ </IconButton>
84
+ <Popper
85
+ placement={matchesXs ? 'bottom' : 'bottom-end'}
86
+ open={open}
87
+ anchorEl={anchorRef.current}
88
+ role={undefined}
89
+ transition
90
+ disablePortal
91
+ popperOptions={{
92
+ modifiers: [
93
+ {
94
+ name: 'offset',
95
+ options: {
96
+ offset: [matchesXs ? -5 : 0, 9]
97
+ }
98
+ }
99
+ ]
100
+ }}
101
+ >
102
+ {({ TransitionProps }) => (
103
+ <Transitions
104
+ type="grow"
105
+ position={matchesXs ? 'top' : 'top-right'}
106
+ sx={{ overflow: 'hidden' }}
107
+ in={open}
108
+ {...TransitionProps}
109
+ >
110
+ <Paper
111
+ sx={{
112
+ boxShadow: theme.customShadows.z1,
113
+ width: '100%',
114
+ minWidth: 285,
115
+ maxWidth: 420,
116
+ [theme.breakpoints.down('md')]: {
117
+ maxWidth: 285
118
+ }
119
+ }}
120
+ >
121
+ <ClickAwayListener onClickAway={handleClose}>
122
+ <MainCard
123
+ title="Notification"
124
+ elevation={0}
125
+ border={true}
126
+ content={false}
127
+ secondary={
128
+ <>
129
+ {read > 0 && (
130
+ <Tooltip title="Mark as all read">
131
+ <IconButton color="success" size="small">
132
+ <CheckCircleOutlined style={{ fontSize: '1.15rem' }} />
133
+ </IconButton>
134
+ </Tooltip>
135
+ )}
136
+ </>
137
+ }
138
+ >
139
+ <List
140
+ component="nav"
141
+ sx={{
142
+ p: 0,
143
+ '& .MuiListItemButton-root': {
144
+ py: 0.5,
145
+ '&.Mui-selected': { bgcolor: 'grey.50', color: 'text.primary' },
146
+ '& .MuiAvatar-root': avatarSX,
147
+ '& .MuiListItemSecondaryAction-root': { ...actionSX, position: 'relative' }
148
+ }
149
+ }}
150
+ >
151
+ {notifications.map((item) => (
152
+ <NotificationItem
153
+ resource={resource}
154
+ key={item.id}
155
+ selected={read > 0}
156
+ notification={item}
157
+ onClick={handleClose}
158
+ />
159
+ ))}
160
+ </List>
161
+ </MainCard>
162
+ </ClickAwayListener>
163
+ </Paper>
164
+ </Transitions>
165
+ )}
166
+ </Popper>
167
+ </Box>
168
+ )
169
+ }
170
+
171
+ Notification.displayName = 'Notification'
172
+ Notification.defaultProps = {
173
+ resource: 'entities/notification'
174
+ }
175
+ Notification.propTypes = {
176
+ resource: PropTypes.string.isRequired
177
+ }
178
+
179
+ export default Notification
@@ -0,0 +1,109 @@
1
+ import {
2
+ Avatar,
3
+ Divider,
4
+ ListItemAvatar,
5
+ ListItemButton,
6
+ ListItemSecondaryAction,
7
+ ListItemText,
8
+ Typography
9
+ } from '@mui/material'
10
+ import { useCallback, useMemo } from 'react'
11
+ import { useLocaleState, useNotify, useRedirect, useUpdate } from 'react-admin'
12
+
13
+ import { MessageOutlined } from '@ant-design/icons'
14
+ import PropTypes from 'prop-types'
15
+ import dayjs from 'dayjs'
16
+
17
+ const NotificationItem = ({ resource, selected, notification, onClick }) => {
18
+ const notify = useNotify()
19
+ const redirect = useRedirect()
20
+ const [update] = useUpdate(
21
+ resource,
22
+ {
23
+ id: notification?.id,
24
+ data: {
25
+ ...notification,
26
+ readed: dayjs().format('YYYY-MM-DD HH:mm:ss')
27
+ }
28
+ },
29
+ {
30
+ onSuccess: () => {
31
+ if (notification?.resource) {
32
+ if (notification?.resource.startsWith('/')) {
33
+ redirect(notification?.resource)
34
+ onClick()
35
+ } else {
36
+ document.location.href = notification?.resource
37
+ }
38
+ } else {
39
+ onClick()
40
+ }
41
+ },
42
+ onFailure: () => {
43
+ notify('resources.notifications.messages.readed.error', 'warning')
44
+ }
45
+ }
46
+ )
47
+ const handleClick = useCallback(() => update(), [update])
48
+ const [locale] = useLocaleState()
49
+ const ago = useMemo(
50
+ () => dayjs(notification.created).locale(locale).fromNow(),
51
+ [notification, locale]
52
+ )
53
+ return (
54
+ <>
55
+ <ListItemButton selected={selected} onClick={handleClick}>
56
+ <ListItemAvatar>
57
+ <Avatar
58
+ sx={{
59
+ color: 'primary.main',
60
+ bgcolor: 'primary.lighter'
61
+ }}
62
+ >
63
+ <MessageOutlined />
64
+ </Avatar>
65
+ </ListItemAvatar>
66
+ <ListItemText
67
+ primary={
68
+ <Typography variant="h6">
69
+ {notification.title}
70
+ <Typography component="span" variant="subtitle1">
71
+ {notification.content}
72
+ </Typography>
73
+ </Typography>
74
+ }
75
+ secondary="2 min ago"
76
+ />
77
+ <ListItemSecondaryAction>
78
+ <Typography variant="caption" noWrap>
79
+ {ago}
80
+ </Typography>
81
+ </ListItemSecondaryAction>
82
+ </ListItemButton>
83
+ <Divider />
84
+ </>
85
+ )
86
+ }
87
+
88
+ NotificationItem.displayName = 'NotificationItem'
89
+
90
+ NotificationItem.defaultProps = {
91
+ resource: 'entities/notification',
92
+ selected: false
93
+ }
94
+
95
+ NotificationItem.propTypes = {
96
+ resource: PropTypes.string.isRequired,
97
+ selected: PropTypes.bool.isRequired,
98
+ notification: PropTypes.shape({
99
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
100
+ title: PropTypes.string.isRequired,
101
+ content: PropTypes.string.isRequired,
102
+ resource: PropTypes.string,
103
+ readed: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.instanceOf(Date)]),
104
+ created: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.instanceOf(Date)])
105
+ .isRequired
106
+ }).isRequired,
107
+ onClick: PropTypes.func.isRequired
108
+ }
109
+ export default NotificationItem