@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,223 @@
1
+ import { useGetIdentity, usePermissions, useResourceDefinitions, useTranslate } from 'react-admin'
2
+
3
+ import { AntDesignOutlined } from '@ant-design/icons'
4
+ import { cloneDeep } from 'lodash'
5
+ import { useMemo } from 'react'
6
+ import useMenuConfig from './useMenuConfig'
7
+
8
+ const RESOURCE_PREFIXES = ['e-', 'entities/']
9
+
10
+ const getResourceName = (name) => {
11
+ let resourceName = name
12
+ RESOURCE_PREFIXES.forEach((prefix) => {
13
+ resourceName = resourceName?.startsWith(prefix)
14
+ ? resourceName?.substring(prefix.length)
15
+ : resourceName
16
+ })
17
+ return resourceName
18
+ }
19
+
20
+ const isInGroup = (group, resource) =>
21
+ resource.options?.group === group.id || (!resource.options?.group && group.id === 'admin')
22
+
23
+ const hasPermission = (resource, permissions) => {
24
+ const name = getResourceName(resource.name)
25
+ const hasPermission = permissions?.includes(`${name}:list`)
26
+ return hasPermission
27
+ }
28
+
29
+ const getItem = (menu, id) => {
30
+ let item = menu.find((item) => item.id === id)
31
+ if (!item) {
32
+ for (let i = 0; i < menu.length; i++) {
33
+ const element = menu[i]
34
+ if (element.children) {
35
+ item = getItem(element.children, id)
36
+ if (item) {
37
+ return item
38
+ }
39
+ }
40
+ }
41
+ }
42
+ return item
43
+ }
44
+
45
+ const getGroup = (groups, resource, permissions) => {
46
+ let group = groups.find(
47
+ (g) =>
48
+ ['group', 'collapse'].indexOf(g.type) !== -1 &&
49
+ isInGroup(g, resource) /* && hasPermission(resource, permissions)*/
50
+ )
51
+ if (!group) {
52
+ for (let i = 0; i < groups.length; i++) {
53
+ const element = groups[i]
54
+ if (element.children) {
55
+ group = getGroup(element.children, resource, permissions)
56
+ if (group) {
57
+ return group
58
+ }
59
+ }
60
+ }
61
+ }
62
+ return group
63
+ }
64
+
65
+ const getGroupById = (groups, id) => {
66
+ let group = groups.find((g) => g.id === id)
67
+ if (!group) {
68
+ for (let i = 0; i < groups.length; i++) {
69
+ const element = groups[i]
70
+ if (element.children) {
71
+ group = getGroupById(element.children, id)
72
+ if (group) {
73
+ return group
74
+ }
75
+ }
76
+ }
77
+ }
78
+ return group
79
+ }
80
+ const filterNotEmpty = (group) => {
81
+ if (!group) {
82
+ return false
83
+ }
84
+ if (group.type === 'item') {
85
+ return true
86
+ }
87
+ if (group.children) {
88
+ group.children = group.children.filter(filterNotEmpty)
89
+ }
90
+ return group.children && group.children.length > 0
91
+ }
92
+
93
+ const mapParent = (group) => {
94
+ if (group.children) {
95
+ group.children.forEach((child) => {
96
+ child.parent = group
97
+ mapParent(child)
98
+ })
99
+ }
100
+ return group
101
+ }
102
+
103
+ const createNodes = ({ userGroups, resources, permissions, translate }) => {
104
+ const translateRecursive = (group) => {
105
+ group.title = translate(group.title, { _: group.title })
106
+
107
+ if (group.children) {
108
+ group.children.forEach((child) => translateRecursive(child))
109
+ }
110
+ return group
111
+ }
112
+ const resourceNames = Object.keys(resources)
113
+ const removeNotFoundResources = (group, resources) => {
114
+ if (group.children) {
115
+ group.children = group.children.filter((child) => {
116
+ if (child.resource === false) {
117
+ return true
118
+ }
119
+ if (child.type === 'item') {
120
+ return resources.includes(child.id)
121
+ }
122
+ removeNotFoundResources(child, resources)
123
+ return child.children && child.children.length > 0
124
+ })
125
+ }
126
+ return group
127
+ }
128
+
129
+ const groupsA = cloneDeep(userGroups)
130
+ .map((group) => ({
131
+ type: 'group',
132
+ icon: AntDesignOutlined,
133
+ children: [],
134
+ ...group
135
+ }))
136
+ .map(translateRecursive)
137
+ .map((group) => removeNotFoundResources(group, resourceNames))
138
+
139
+ const groupsB = Object.values(resources)
140
+ // Detect group of each configured ra resource.
141
+ .map((resource) => resource.options?.group || 'admin')
142
+ // Generate unique list of groups (because a resource can be configured with the same group of another resource)
143
+ .filter((group, index, self) => self.indexOf(group) === index)
144
+ // Remove from the list groups already defined by the user (Applica developer)
145
+ .filter((group) => group !== undefined && getGroupById(userGroups, group) === null)
146
+ .map((group) => ({
147
+ id: group,
148
+ title: translate(`ra.menu.group.${group}`),
149
+ type: 'group',
150
+ icon: AntDesignOutlined,
151
+ children: []
152
+ }))
153
+
154
+ const groups = [...groupsA, ...groupsB]
155
+
156
+ Object.values(resources).forEach((resource) => {
157
+ if (!resource.hasList) {
158
+ return
159
+ }
160
+
161
+ const group = getGroup(groups, resource, permissions)
162
+ const exists = group?.children?.some((c) => c.id === resource.name)
163
+ if (!hasPermission(resource, permissions)) {
164
+ if (exists && group?.children?.length > 0) {
165
+ group.children = group.children.filter((c) => c.id !== resource.name)
166
+ }
167
+ return
168
+ }
169
+ if (group) {
170
+ if (!group.children) {
171
+ group.children = []
172
+ }
173
+ if (exists) {
174
+ return
175
+ }
176
+ // group.children.push({
177
+ // id: resource.name,
178
+ // type: 'item',
179
+ // title: translate(resource.options?.label || `ra.menu.item.${resource.name}`, {
180
+ // _: resource.options?.label || resource.name
181
+ // }),
182
+ // url: `/${resource.name}`,
183
+ // icon: resource.options?.icon || exists?.icon || AntDesignOutlined
184
+ // })
185
+ }
186
+ })
187
+
188
+ return groups.filter(filterNotEmpty).map(mapParent)
189
+ }
190
+
191
+ const useMenu = () => {
192
+ const resources = useResourceDefinitions()
193
+ const { isLoading: loadingIdentity, data: identity } = useGetIdentity()
194
+ const { permissions } = usePermissions()
195
+ const { groups: userGroups } = useMenuConfig()
196
+ const translate = useTranslate()
197
+
198
+ const menu = useMemo(() => {
199
+ if (loadingIdentity || !identity || identity === null || identity?.id <= 0) {
200
+ return null
201
+ }
202
+
203
+ const groups = createNodes({
204
+ resources,
205
+ permissions,
206
+ translate,
207
+ userGroups
208
+ })
209
+
210
+ return groups
211
+ }, [loadingIdentity, identity, resources, permissions, translate, userGroups])
212
+
213
+ const isLoading = useMemo(() => loadingIdentity, [loadingIdentity])
214
+
215
+ return {
216
+ menu,
217
+ isLoading,
218
+ getItem: (id) => (isLoading ? false : getItem(menu, id)),
219
+ findInMenu: isLoading ? () => undefined : getItem
220
+ }
221
+ }
222
+
223
+ export default useMenu
@@ -0,0 +1,6 @@
1
+ import { MenuConfigContext } from '../contexts'
2
+ import { useContext } from 'react'
3
+
4
+ const useMenuConfig = () => useContext(MenuConfigContext)
5
+
6
+ export default useMenuConfig
@@ -0,0 +1,25 @@
1
+ import { useRecordContext, useResourceContext, useTranslate } from 'react-admin'
2
+
3
+ import { useMemo } from 'react'
4
+
5
+ const useResourceTitle = (title) => {
6
+ const record = useRecordContext()
7
+ const translate = useTranslate()
8
+ const resource = useResourceContext()
9
+ const mode = record?.id ? 'edit' : 'create'
10
+
11
+ const cardTitle = useMemo(() => {
12
+ const defaultTitle = `resources.${resource}.title`
13
+ return (
14
+ title ||
15
+ translate(`resources.${resource}.title.${mode}`, {
16
+ _: translate(defaultTitle, { _: defaultTitle }),
17
+ ...record,
18
+ })
19
+ )
20
+ }, [mode, record, resource, translate, title])
21
+
22
+ return cardTitle
23
+ }
24
+
25
+ export default useResourceTitle
@@ -0,0 +1,6 @@
1
+ import { ThemeConfigContext } from '../contexts/ThemeConfigContext'
2
+ import { useContext } from 'react'
3
+
4
+ const useThemeConfig = () => useContext(ThemeConfigContext)
5
+
6
+ export default useThemeConfig
@@ -0,0 +1,15 @@
1
+ import { get } from 'lodash'
2
+ import polyglotI18nProvider from 'ra-i18n-polyglot'
3
+
4
+ const createI18nProvider = ({ languages, defaultLocale, allowMissing = false }) =>
5
+ polyglotI18nProvider(
6
+ (locale) => {
7
+ const messages = get(languages, locale, {})
8
+ return messages
9
+ },
10
+ defaultLocale,
11
+ [{ locale: defaultLocale }],
12
+ { allowMissing },
13
+ )
14
+
15
+ export default createI18nProvider
@@ -0,0 +1,4 @@
1
+ export { default as createI18nProvider } from './createI18nProvider'
2
+ export { default as useI18nCatcher } from './useI18nCatcher'
3
+ export { default as useI18nLanguages } from './useI18nLanguages'
4
+ export { default as useI18nProvider } from './useI18nProvider'
@@ -0,0 +1,71 @@
1
+ /* eslint-disable no-console */
2
+ import * as React from 'react'
3
+
4
+ import { useLocaleState } from 'react-admin'
5
+
6
+ const queued = []
7
+
8
+ const putMessage = ({ apiUrl, endpoint, locale, message, bodyBuilder }) =>
9
+ message != null &&
10
+ message !== 'undefined' &&
11
+ message.indexOf('[') === -1 &&
12
+ message.indexOf(']') === -1 &&
13
+ queued.indexOf(`${locale}-${message}`) === -1 &&
14
+ queued.push(`${locale}-${message}`) &&
15
+ fetch(`${apiUrl}${endpoint}`, {
16
+ method: 'PUT',
17
+ headers: new Headers({
18
+ Accept: 'application/json',
19
+ 'Content-Type': 'application/json',
20
+ }),
21
+ body: JSON.stringify(bodyBuilder(locale, message)),
22
+ })
23
+
24
+ const useI18nCatcher = ({
25
+ apiUrl,
26
+ enabled = true,
27
+ endpoint = '/languages/put-message',
28
+ loading,
29
+ bodyBuilder = (locale, message) => ({
30
+ code: locale,
31
+ message: {
32
+ code: message,
33
+ text: message,
34
+ },
35
+ }),
36
+ }) => {
37
+ const [locale] = useLocaleState()
38
+ React.useMemo(() => {
39
+ if (loading) {
40
+ return
41
+ }
42
+
43
+ if (!enabled) {
44
+ return
45
+ }
46
+
47
+ const consoleError = console.error
48
+
49
+ console.error = function (message) {
50
+ if (typeof message === 'string' && message === '%c%s') {
51
+ return
52
+ }
53
+ if (typeof message === 'string' && message.indexOf('Missing translation for key: ') >= 0) {
54
+ message = message.replace('Warning: Missing translation for key: ', '')
55
+ message = message.split('"').join('').trim()
56
+ if (message === null || message.indexOf(' ') !== -1 || message.indexOf('.') === -1) {
57
+ return
58
+ }
59
+
60
+ const lc = localStorage.getItem('locale') || locale
61
+ putMessage({ apiUrl, endpoint, locale: lc, message, bodyBuilder })
62
+ return
63
+ }
64
+
65
+ consoleError.apply(console, arguments)
66
+ }
67
+ }, [apiUrl, locale, loading, bodyBuilder, endpoint, enabled])
68
+ return true
69
+ }
70
+
71
+ export default useI18nCatcher
@@ -0,0 +1,22 @@
1
+ /* eslint-disable no-console */
2
+ import React from 'react'
3
+ window.React = React
4
+ const useI18nLanguages = ({
5
+ apiUrl,
6
+ endpoint = '/languages/load',
7
+ mapper = ({ data }) => ({ data }),
8
+ }) => {
9
+ const [data, setData] = React.useState({ loading: true, languages: null })
10
+ React.useEffect(() => {
11
+ let headers = new Headers()
12
+ headers.append('Accept', 'application/json')
13
+ headers.append('Content-Type', 'application/json')
14
+ fetch(`${apiUrl}${endpoint}`, { headers })
15
+ .then((response) => response.json())
16
+ .then((response) => setData({ loading: false, ...mapper(response) }))
17
+ }, [apiUrl, endpoint, mapper])
18
+
19
+ return data
20
+ }
21
+
22
+ export default useI18nLanguages
@@ -0,0 +1,5 @@
1
+ import createI18nProvider from './createI18nProvider'
2
+
3
+ const useI18nProvider = ({ apiUrl, locale = 'en', languages = {} }) =>
4
+ createI18nProvider({ apiUrl, locale, languages })
5
+ export default useI18nProvider
package/src/index.jsx ADDED
@@ -0,0 +1,67 @@
1
+ export { default as Admin } from './Admin'
2
+ export { default as ApplicaAdmin } from './ApplicaAdmin'
3
+
4
+ export * from './hooks'
5
+ export * from './components'
6
+ export * from './contexts'
7
+ export * from './utils'
8
+
9
+ export {
10
+ ArrayInput,
11
+ ArrayInputContext,
12
+ BooleanField,
13
+ BulkDeleteWithConfirmButton,
14
+ Button,
15
+ ChipField,
16
+ choices,
17
+ Confirm,
18
+ Create,
19
+ CreateButton,
20
+ CreateContextProvider,
21
+ CustomRoutes,
22
+ DeleteWithConfirmButton,
23
+ DeleteWithUndoButton,
24
+ EditButton,
25
+ email,
26
+ Form,
27
+ HttpError,
28
+ ListToolbar,
29
+ maxLength,
30
+ maxValue,
31
+ minLength,
32
+ minValue,
33
+ number,
34
+ Pagination,
35
+ RecordContextProvider,
36
+ ReferenceArrayField,
37
+ ReferenceField,
38
+ regex,
39
+ required,
40
+ Resource,
41
+ ResourceContextProvider,
42
+ SaveButton,
43
+ SimpleFormIterator,
44
+ SimpleFormIteratorContext,
45
+ SimpleList,
46
+ SingleFieldList,
47
+ TopToolbar,
48
+ useArrayInput,
49
+ useAuthProvider,
50
+ useDataProvider,
51
+ useGetIdentity,
52
+ useGetList,
53
+ useGetMany,
54
+ useGetManyReference,
55
+ useGetOne,
56
+ useListContext,
57
+ useNotify,
58
+ usePermissions,
59
+ useRecordContext,
60
+ useResourceContext,
61
+ useResourceDefinition,
62
+ useResourceDefinitions,
63
+ useTranslate,
64
+ useUnselect,
65
+ useUnselectAll,
66
+ useUpdateMany
67
+ } from 'react-admin'
@@ -0,0 +1,18 @@
1
+ const getColors = (theme, color) => {
2
+ switch (color) {
3
+ case 'secondary':
4
+ return theme.palette.secondary
5
+ case 'error':
6
+ return theme.palette.error
7
+ case 'warning':
8
+ return theme.palette.warning
9
+ case 'info':
10
+ return theme.palette.info
11
+ case 'success':
12
+ return theme.palette.success
13
+ default:
14
+ return theme.palette.primary
15
+ }
16
+ }
17
+
18
+ export default getColors
@@ -0,0 +1,37 @@
1
+ import PropTypes from 'prop-types'
2
+
3
+ const getShadow = (theme, shadow) => {
4
+ switch (shadow) {
5
+ case 'secondary':
6
+ return theme.customShadows.secondary
7
+ case 'error':
8
+ return theme.customShadows.error
9
+ case 'warning':
10
+ return theme.customShadows.warning
11
+ case 'info':
12
+ return theme.customShadows.info
13
+ case 'success':
14
+ return theme.customShadows.success
15
+ case 'primaryButton':
16
+ return theme.customShadows.primaryButton
17
+ case 'secondaryButton':
18
+ return theme.customShadows.secondaryButton
19
+ case 'errorButton':
20
+ return theme.customShadows.errorButton
21
+ case 'warningButton':
22
+ return theme.customShadows.warningButton
23
+ case 'infoButton':
24
+ return theme.customShadows.infoButton
25
+ case 'successButton':
26
+ return theme.customShadows.successButton
27
+ default:
28
+ return theme.customShadows.primary
29
+ }
30
+ }
31
+
32
+ getShadow.propTypes = {
33
+ theme: PropTypes.object,
34
+ shadow: PropTypes.string,
35
+ }
36
+
37
+ export default getShadow
@@ -0,0 +1,70 @@
1
+ import { CssBaseline, StyledEngineProvider } from '@mui/material'
2
+ import { ThemeProvider, createTheme } from '@mui/material/styles'
3
+
4
+ import CustomShadows from './shadows'
5
+ import Palette from './palette'
6
+ import PropTypes from 'prop-types'
7
+ import Typography from './typography'
8
+ import componentsOverride from './overrides'
9
+ import getColors from './getColors'
10
+ import getShadow from './getShadow'
11
+ import { useMemo } from 'react'
12
+ import { useThemeConfig } from '../hooks'
13
+
14
+ const ThemeCustomization = ({ themeOverrides, children }) => {
15
+ const { themeDirection, mode, presetColor, fontFamily } = useThemeConfig()
16
+
17
+ const theme = useMemo(() => Palette(mode, presetColor), [mode, presetColor])
18
+
19
+ // eslint-disable-next-line react-hooks/exhaustive-deps
20
+ const themeTypography = useMemo(() => Typography(fontFamily), [fontFamily])
21
+ const themeCustomShadows = useMemo(() => CustomShadows(theme), [theme])
22
+
23
+ const themeOptions = useMemo(
24
+ () => ({
25
+ breakpoints: {
26
+ values: {
27
+ xs: 0,
28
+ sm: 768,
29
+ md: 1024,
30
+ lg: 1266,
31
+ xl: 1440,
32
+ },
33
+ },
34
+ direction: themeDirection,
35
+ mixins: {
36
+ toolbar: {
37
+ minHeight: 60,
38
+ paddingTop: 8,
39
+ paddingBottom: 8,
40
+ },
41
+ },
42
+ palette: theme.palette,
43
+ customShadows: themeCustomShadows,
44
+ typography: themeTypography,
45
+ shadows: theme.shadows.map(() => 'none'),
46
+ ...(typeof themeOverrides === 'function' ? themeOverrides(theme) : themeOverrides),
47
+ }),
48
+ [themeDirection, theme, themeTypography, themeCustomShadows, themeOverrides],
49
+ )
50
+
51
+ const themes = createTheme(themeOptions)
52
+
53
+ themes.components = componentsOverride(themes)
54
+
55
+ return (
56
+ <StyledEngineProvider injectFirst>
57
+ <ThemeProvider theme={themes}>
58
+ <CssBaseline />
59
+ {children}
60
+ </ThemeProvider>
61
+ </StyledEngineProvider>
62
+ )
63
+ }
64
+
65
+ ThemeCustomization.propTypes = {
66
+ children: PropTypes.node,
67
+ themeOverrides: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),
68
+ }
69
+
70
+ export { ThemeCustomization, getColors as getThemeColor, getShadow as getThemeShadow }
@@ -0,0 +1,27 @@
1
+ // ==============================|| OVERRIDES - ALERT TITLE ||============================== //
2
+
3
+ export default function Accordion(theme) {
4
+ return {
5
+ MuiAccordion: {
6
+ defaultProps: {
7
+ disableGutters: true,
8
+ square: true,
9
+ elevation: 0,
10
+ },
11
+ styleOverrides: {
12
+ root: {
13
+ border: `1px solid ${theme.palette.secondary.light}`,
14
+ '&:not(:last-child)': {
15
+ borderBottom: 0,
16
+ },
17
+ '&:before': {
18
+ display: 'none',
19
+ },
20
+ '&.Mui-disabled': {
21
+ backgroundColor: theme.palette.secondary.lighter,
22
+ },
23
+ },
24
+ },
25
+ },
26
+ }
27
+ }
@@ -0,0 +1,14 @@
1
+ // ==============================|| OVERRIDES - ALERT TITLE ||============================== //
2
+
3
+ export default function AccordionDetails(theme) {
4
+ return {
5
+ MuiAccordionDetails: {
6
+ styleOverrides: {
7
+ root: {
8
+ padding: theme.spacing(2),
9
+ borderTop: `1px solid ${theme.palette.secondary.light}`,
10
+ },
11
+ },
12
+ },
13
+ }
14
+ }
@@ -0,0 +1,33 @@
1
+ // assets
2
+ import { RightOutlined } from '@ant-design/icons'
3
+
4
+ // ==============================|| OVERRIDES - ALERT TITLE ||============================== //
5
+
6
+ export default function AccordionSummary(theme) {
7
+ const { palette, spacing } = theme
8
+
9
+ return {
10
+ MuiAccordionSummary: {
11
+ defaultProps: {
12
+ expandIcon: <RightOutlined style={{ fontSize: '0.75rem' }} />,
13
+ },
14
+ styleOverrides: {
15
+ root: {
16
+ backgroundColor: palette.secondary.lighter,
17
+ flexDirection: 'row-reverse',
18
+ minHeight: 46,
19
+ },
20
+ expandIconWrapper: {
21
+ '&.Mui-expanded': {
22
+ transform: 'rotate(90deg)',
23
+ },
24
+ },
25
+ content: {
26
+ marginTop: spacing(1.25),
27
+ marginBottom: spacing(1.25),
28
+ marginLeft: spacing(1),
29
+ },
30
+ },
31
+ },
32
+ }
33
+ }