adminizer 4.1.0-commit.d8a06d3 → 4.1.1

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 (253) hide show
  1. package/Readme.md +46 -0
  2. package/assets/{VanillaJSONEditor-D-Lx670g.js → VanillaJSONEditor-DfRefswH.js} +104 -104
  3. package/assets/add-CJ1-zeA1.js +1 -0
  4. package/assets/add-form-CbNl0wdS.js +1 -0
  5. package/assets/add-group-form-Bt_Dx9wm.js +1 -0
  6. package/assets/add-group-pIFJV5qL.js +1 -0
  7. package/assets/add-user-D2US8hL_.js +1 -0
  8. package/assets/add-user-form-Bt8Jy6S2.js +1 -0
  9. package/assets/{app-WTooYWC3.css → app-B6cCPfWk.css} +1 -1
  10. package/assets/app-layout-B86jl9bH.js +1 -0
  11. package/assets/app-shell-CiGyzQ0C.js +1 -0
  12. package/assets/app-sidebar-Bz-SRwBg.js +1 -0
  13. package/assets/app-sidebar-header-7CNCx7Rs.js +11 -0
  14. package/assets/app.js +45 -37
  15. package/assets/breadcrumbs-_jhtTcOi.js +1 -0
  16. package/assets/catalog-CON6moaA.js +16 -0
  17. package/assets/catalog-Cc6Mk9sX.css +1 -0
  18. package/assets/checkbox-CQdZw5mb.js +1 -0
  19. package/assets/dashboard-es9ZT8qk.js +3 -0
  20. package/assets/{date-picker-DI1cCO7K.js → date-picker-Dz-d-YWX.js} +2 -2
  21. package/assets/debounce-qdyXyOeG.js +1 -0
  22. package/assets/del-modal-D0mrZvki.js +11 -0
  23. package/assets/dialog-stack-BiMbfm58.js +1 -0
  24. package/assets/dropdown-menu-BSBcRiXx.js +1 -0
  25. package/assets/{field-renderer-DVHZF6HS.js → field-renderer-B6hFAeiU.js} +3 -3
  26. package/assets/form-Buslty7y.js +1 -0
  27. package/assets/form-aqiRmPix.js +1 -0
  28. package/assets/{geo-json-BjiyTtMu.js → geo-json-BKmYmu3d.js} +2 -2
  29. package/assets/{handsontable-4mjU_b0n.js → handsontable-B8xVeMAQ.js} +5 -5
  30. package/assets/home-Dr72Jk-w.js +2 -0
  31. package/assets/icon-B-a7xg54.js +1 -0
  32. package/assets/index-B68_akQe.js +1 -0
  33. package/assets/index-B7-xTDyy.js +1 -0
  34. package/assets/index-BJFFlCSo.js +1 -0
  35. package/assets/{index-Cw5o84pO.js → index-BOuMo_nl.js} +3 -3
  36. package/assets/index-BzOcGsBq.js +1 -0
  37. package/assets/index-CFbQ2Rv0.js +1 -0
  38. package/assets/{index-D5ir9iUV.js → index-Cq31rrfZ.js} +1 -1
  39. package/assets/{index-Cgp8OfuI.js → index-D5UDXTFs.js} +1 -1
  40. package/assets/index-oxIQWAdI.js +41 -0
  41. package/assets/init-user-5H689LP0.js +1 -0
  42. package/assets/input-CSJjrf2i.js +1 -0
  43. package/assets/input-error-CK92Shhm.js +1 -0
  44. package/assets/label-Muj0-Efy.js +1 -0
  45. package/assets/list-Cvh7zbyG.js +1 -0
  46. package/assets/list-table-Bs_vbQiV.js +52 -0
  47. package/assets/login-DliJrjMQ.js +6 -0
  48. package/assets/manifest.json +575 -673
  49. package/assets/material-icon-BRS58Qpk.js +1 -0
  50. package/assets/module-CjG21VCT.js +1 -0
  51. package/assets/{monaco-editor-CJs0_GlD.js → monaco-editor-9fDiyfuW.js} +2 -2
  52. package/assets/{multi-select-BvRpAW8r.js → multi-select-CMQIJ0JT.js} +2 -2
  53. package/assets/nav-footer-IGMn9NiE.js +1 -0
  54. package/assets/nav-main-DBE4rMiZ.js +1 -0
  55. package/assets/nav-user-CjyLRyq-.js +1 -0
  56. package/assets/pagination-render-DUAq2klc.js +1 -0
  57. package/assets/popover-C_cww-4_.js +1 -0
  58. package/assets/register-UzQn3J0g.js +1 -0
  59. package/assets/{select-BWepUw-9.js → select-DzBno-dc.js} +2 -2
  60. package/assets/{sidebar-CAHsHdjM.js → sidebar-Dc4iqfu-.js} +2 -2
  61. package/assets/skeleton-Dkmj2o2Z.js +1 -0
  62. package/assets/sonner-De1t71Gj.js +1 -0
  63. package/assets/{toast-editor-CMK7QtF1.js → toast-editor-1Pul3oMs.js} +2 -2
  64. package/assets/tooltip-CwPrC-HD.js +1 -0
  65. package/assets/use-appearance-J8J2w43p.js +1 -0
  66. package/assets/use-window-size-DLSEoR6e.js +1 -0
  67. package/assets/{user-info-DFrmpJ4y.js → user-info-8RyDk7qh.js} +2 -2
  68. package/assets/user-menu-content-CpxTLH56.js +6 -0
  69. package/assets/welcome-BYKI6yO-.js +1 -0
  70. package/controllers/add.js +8 -8
  71. package/controllers/catalog/Catalog.d.ts +1 -1
  72. package/controllers/catalog/Catalog.js +40 -35
  73. package/controllers/catalog/FrontentCatalogAdapter.d.ts +36 -26
  74. package/controllers/catalog/FrontentCatalogAdapter.js +71 -72
  75. package/controllers/edit.js +8 -11
  76. package/controllers/list.js +2 -2
  77. package/controllers/login.js +16 -7
  78. package/controllers/navigation/edit.js +1 -1
  79. package/controllers/remove.js +1 -1
  80. package/controllers/view.js +1 -1
  81. package/helpers/JsUtils.d.ts +1 -0
  82. package/helpers/JsUtils.js +3 -0
  83. package/helpers/accessRightsHelper.d.ts +3 -0
  84. package/helpers/accessRightsHelper.js +27 -4
  85. package/helpers/controllerHelper.js +39 -18
  86. package/helpers/fieldsHelper.d.ts +3 -2
  87. package/helpers/fieldsHelper.js +5 -1
  88. package/helpers/inertiaAddHelper.d.ts +4 -5
  89. package/helpers/inertiaAddHelper.js +25 -7
  90. package/helpers/inertiaFromHelper.js +1 -1
  91. package/helpers/inertiaMenuHelper.d.ts +1 -1
  92. package/helpers/inertiaMenuHelper.js +1 -1
  93. package/helpers/menuHelper.d.ts +8 -3
  94. package/helpers/menuHelper.js +26 -17
  95. package/index.d.ts +2 -6
  96. package/index.js +5 -6
  97. package/interfaces/adminpanelConfig.d.ts +35 -30
  98. package/interfaces/global.d.ts +5 -2
  99. package/interfaces/types.d.ts +1 -1
  100. package/lib/Adminizer.d.ts +9 -3
  101. package/lib/Adminizer.js +32 -16
  102. package/lib/media-manager/Items.js +0 -3
  103. package/lib/requestProcessor.js +10 -3
  104. package/lib/v4/DataAccessor.d.ts +3 -1
  105. package/lib/v4/DataAccessor.js +43 -18
  106. package/lib/v4/I18n.js +2 -0
  107. package/lib/{catalog → v4/catalog}/AbstractCatalog.d.ts +89 -60
  108. package/lib/{catalog → v4/catalog}/AbstractCatalog.js +59 -54
  109. package/lib/v4/catalog/Navigation.d.ts +43 -0
  110. package/lib/v4/catalog/Navigation.js +457 -0
  111. package/lib/{controls → v4/controls}/AbstractControls.d.ts +1 -1
  112. package/lib/{controls → v4/controls}/codeEditor/MonacoEditor.d.ts +1 -1
  113. package/lib/{controls → v4/controls}/geojsoneditor/GeoEditor.d.ts +1 -1
  114. package/lib/{controls → v4/controls}/jsoneditor/JsonEditor.d.ts +1 -1
  115. package/lib/{controls → v4/controls}/markdown/ToastUiEditor.d.ts +1 -1
  116. package/lib/{controls → v4/controls}/table/Handsontable.d.ts +1 -1
  117. package/lib/{controls → v4/controls}/wysiwyg/CKeditor.d.ts +1 -1
  118. package/lib/{datatable → v4/datatable}/NodeTable.d.ts +3 -3
  119. package/lib/{datatable → v4/datatable}/NodeTable.js +8 -5
  120. package/lib/v4/model/AbstractModel.d.ts +5 -1
  121. package/lib/v4/model/AbstractModel.js +2 -1
  122. package/lib/v4/model/ModelHandler.js +1 -3
  123. package/lib/v4/model/adapter/sequelize.d.ts +8 -0
  124. package/lib/v4/model/adapter/sequelize.js +274 -133
  125. package/lib/v4/model/adapter/waterline.js +5 -2
  126. package/lib/{widgets → v4/widgets}/abstractLink.d.ts +1 -1
  127. package/lib/{widgets → v4/widgets}/abstractWidgetBase.d.ts +1 -1
  128. package/lib/{widgets → v4/widgets}/widgetHandler.d.ts +11 -4
  129. package/lib/{widgets → v4/widgets}/widgetHandler.js +1 -1
  130. package/models/NavigationAP.d.ts +2 -3
  131. package/models/NavigationAP.js +5 -6
  132. package/models/UserAP.d.ts +2 -3
  133. package/package.json +17 -6
  134. package/system/Router.js +8 -11
  135. package/system/bindAccessRights.js +0 -4
  136. package/system/bindControls.js +6 -6
  137. package/system/bindDev.js +1 -0
  138. package/system/bindInertia.js +9 -4
  139. package/system/bindMediaManager.js +0 -1
  140. package/system/bindModels.js +9 -6
  141. package/system/bindNavigation.d.ts +2 -0
  142. package/system/bindNavigation.js +42 -42
  143. package/system/bindReqFunctions.js +0 -1
  144. package/system/defaults.js +13 -6
  145. package/translations/ar.json +70 -1
  146. package/translations/cn.json +70 -1
  147. package/translations/de.json +71 -3
  148. package/translations/en.json +70 -102
  149. package/translations/es.json +70 -1
  150. package/translations/fr.json +70 -1
  151. package/translations/hi.json +70 -1
  152. package/translations/jp.json +70 -1
  153. package/translations/ko.json +70 -1
  154. package/translations/pt.json +70 -1
  155. package/translations/ru.json +71 -103
  156. package/translations/ua.json +70 -1
  157. package/translations/uz.json +72 -0
  158. package/translations/vi.json +70 -1
  159. package/assets/add-BP_u3Tjl.js +0 -1
  160. package/assets/add-form-nffmiYTh.js +0 -1
  161. package/assets/add-group-D4vcHlm-.js +0 -1
  162. package/assets/add-group-form-gNJW11-q.js +0 -1
  163. package/assets/add-user-DWh3Nas0.js +0 -1
  164. package/assets/add-user-form-BJ0FsZYJ.js +0 -1
  165. package/assets/app-layout-DYsRFUuP.js +0 -1
  166. package/assets/app-shell-Dd9Eknik.js +0 -1
  167. package/assets/app-sidebar-BOmu6-Sl.js +0 -1
  168. package/assets/app-sidebar-header-CoXSzWxk.js +0 -11
  169. package/assets/breadcrumbs-BmAq4fHT.js +0 -1
  170. package/assets/button-C9B_5Jf_.js +0 -1
  171. package/assets/checkbox-Fg27sL_1.js +0 -1
  172. package/assets/compiler-runtime-hB6dAw2d.js +0 -9
  173. package/assets/dashboard-BACj996r.js +0 -3
  174. package/assets/dropdown-menu-Bhj17ENm.js +0 -1
  175. package/assets/form-BgWdwvz1.js +0 -1
  176. package/assets/form-DgtErfln.js +0 -1
  177. package/assets/home-CHntBHJa.js +0 -2
  178. package/assets/icon-Dt0vBgDO.js +0 -1
  179. package/assets/index-B8BS9wMC.js +0 -1
  180. package/assets/index-BC0yfOHo.js +0 -1
  181. package/assets/index-BKCgnGj_.js +0 -1
  182. package/assets/index-BbXEMx9n.js +0 -1
  183. package/assets/index-BykbU6Ee.js +0 -41
  184. package/assets/index-CaJgc5EZ.js +0 -1
  185. package/assets/index-DrWfGwtf.js +0 -1
  186. package/assets/init-user-JfCKJ5Ce.js +0 -1
  187. package/assets/input-CvRbIbk4.js +0 -1
  188. package/assets/input-error-DMK7cAt7.js +0 -1
  189. package/assets/label-CSLFe9Bz.js +0 -1
  190. package/assets/list-B2Oa5O_Q.js +0 -1
  191. package/assets/list-table-DA9MhywL.js +0 -62
  192. package/assets/login-DQwGtdis.js +0 -6
  193. package/assets/material-icon-BJg8o_fs.js +0 -1
  194. package/assets/module-DWXp59Vg.js +0 -1
  195. package/assets/nav-footer-Bs4dmN1d.js +0 -1
  196. package/assets/nav-main-Bq3IMk4C.js +0 -1
  197. package/assets/nav-user-CbB22J5O.js +0 -1
  198. package/assets/pagination-render-DuXDDbC_.js +0 -1
  199. package/assets/popover-DtoGI2b1.js +0 -1
  200. package/assets/register-BSogVF0h.js +0 -1
  201. package/assets/skeleton-COOcAA8f.js +0 -1
  202. package/assets/sonner-BI0IFOQN.js +0 -1
  203. package/assets/tooltip-DHwpLKOI.js +0 -1
  204. package/assets/use-appearance-DRfIqTgw.js +0 -1
  205. package/assets/use-window-size-h0Sh_NvX.js +0 -1
  206. package/assets/user-menu-content-DPXQdERj.js +0 -6
  207. package/assets/utils-DjqsqOe8.js +0 -1
  208. package/assets/welcome-B4WCIXKf.js +0 -1
  209. package/controllers/processInstallFinalize.d.ts +0 -1
  210. package/controllers/processInstallFinalize.js +0 -16
  211. package/controllers/processInstallStep.d.ts +0 -0
  212. package/controllers/processInstallStep.js +0 -122
  213. package/lib/catalog/Navigation.d.ts +0 -0
  214. package/lib/catalog/Navigation.js +0 -532
  215. package/lib/installStepper/InstallStepAbstract.d.ts +0 -52
  216. package/lib/installStepper/InstallStepAbstract.js +0 -69
  217. package/lib/installStepper/finalizeStep.d.ts +0 -21
  218. package/lib/installStepper/finalizeStep.js +0 -48
  219. package/lib/installStepper/installStepper.d.ts +0 -40
  220. package/lib/installStepper/installStepper.js +0 -195
  221. package/models/MediaManagerAP.d.ts +0 -62
  222. package/models/MediaManagerAP.js +0 -45
  223. package/models/MediaManagerAssociationsAP.d.ts +0 -38
  224. package/models/MediaManagerAssociationsAP.js +0 -27
  225. package/models/MediaManagerMetaAP.d.ts +0 -30
  226. package/models/MediaManagerMetaAP.js +0 -21
  227. package/system/bindInstallStepper.d.ts +0 -2
  228. package/system/bindInstallStepper.js +0 -23
  229. /package/lib/{catalog → v4/catalog}/CatalogHandler.d.ts +0 -0
  230. /package/lib/{catalog → v4/catalog}/CatalogHandler.js +0 -0
  231. /package/lib/{controls → v4/controls}/AbstractControls.js +0 -0
  232. /package/lib/{controls → v4/controls}/ControlsHandler.d.ts +0 -0
  233. /package/lib/{controls → v4/controls}/ControlsHandler.js +0 -0
  234. /package/lib/{controls → v4/controls}/codeEditor/MonacoEditor.js +0 -0
  235. /package/lib/{controls → v4/controls}/geojsoneditor/GeoEditor.js +0 -0
  236. /package/lib/{controls → v4/controls}/jsoneditor/JsonEditor.js +0 -0
  237. /package/lib/{controls → v4/controls}/markdown/ToastUiEditor.js +0 -0
  238. /package/lib/{controls → v4/controls}/table/Handsontable.js +0 -0
  239. /package/lib/{controls → v4/controls}/wysiwyg/CKeditor.js +0 -0
  240. /package/lib/{inertia → v4/inertia}/flash.d.ts +0 -0
  241. /package/lib/{inertia → v4/inertia}/flash.js +0 -0
  242. /package/lib/{inertia → v4/inertia}/inertiaAdapter.d.ts +0 -0
  243. /package/lib/{inertia → v4/inertia}/inertiaAdapter.js +0 -0
  244. /package/lib/{widgets → v4/widgets}/abstractAction.d.ts +0 -0
  245. /package/lib/{widgets → v4/widgets}/abstractAction.js +0 -0
  246. /package/lib/{widgets → v4/widgets}/abstractCustom.d.ts +0 -0
  247. /package/lib/{widgets → v4/widgets}/abstractCustom.js +0 -0
  248. /package/lib/{widgets → v4/widgets}/abstractInfo.d.ts +0 -0
  249. /package/lib/{widgets → v4/widgets}/abstractInfo.js +0 -0
  250. /package/lib/{widgets → v4/widgets}/abstractLink.js +0 -0
  251. /package/lib/{widgets → v4/widgets}/abstractSwitch.d.ts +0 -0
  252. /package/lib/{widgets → v4/widgets}/abstractSwitch.js +0 -0
  253. /package/lib/{widgets → v4/widgets}/abstractWidgetBase.js +0 -0
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "adminizer",
3
3
  "type": "module",
4
- "version": "4.1.0-commit.d8a06d3",
4
+ "version": "4.1.1",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1",
7
+ "test": "vitest --reporter verbose",
8
8
  "start": "cross-env NO_SEED_DATA=true ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
9
9
  "dev": "cross-env VITE_ENV=dev tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
10
10
  "dev:sequelize": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
@@ -16,6 +16,7 @@
16
16
  "build": "npm run copy:backend && npm run compile:backend && npm run build:assets",
17
17
  "build:module": "vite build --config modules/test/vite.config.module.ts",
18
18
  "build:react-quill": "vite build --config modules/controls/wysiwyg/vite.config.react-quill.ts",
19
+ "build:catalog-modules": "vite build --config modules/testCatalog/vite.config.module.ts",
19
20
  "copy:modules": "node copy-modules.js",
20
21
  "build:assets:modules": "npm run build:assets && npm run copy:modules",
21
22
  "start:seed": "cross-env ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
@@ -27,9 +28,8 @@
27
28
  "license": "MIT",
28
29
  "description": "",
29
30
  "dependencies": {
30
- "@radix-ui/react-menubar": "^1.1.12",
31
- "@radix-ui/react-portal": "^1.1.6",
32
- "@radix-ui/react-switch": "^1.2.4",
31
+ "@minoru/react-dnd-treeview": "^3.5.2",
32
+ "@radix-ui/react-context-menu": "^2.2.15",
33
33
  "body-parser": "^1.20.3",
34
34
  "chalk": "^5.4.1",
35
35
  "cmdk": "^1.1.1",
@@ -45,6 +45,7 @@
45
45
  "multer": "^1.4.5-lts.1",
46
46
  "next-themes": "^0.4.6",
47
47
  "password-hash": "^1.2.2",
48
+ "react-dnd": "^16.0.1",
48
49
  "sharp": "^0.33.5",
49
50
  "typeorm": "^0.3.20",
50
51
  "uuid": "^11.0.5",
@@ -52,7 +53,10 @@
52
53
  "winston": "^3.17.0"
53
54
  },
54
55
  "devDependencies": {
56
+ "isomorphic-webcrypto": "^2.3.8",
57
+ "@babel/plugin-proposal-decorators": "^7.27.1",
55
58
  "@ckeditor/ckeditor5-react": "^9.5.0",
59
+ "@eslint/compat": "^1.2.9",
56
60
  "@faker-js/faker": "^9.7.0",
57
61
  "@handsontable/react": "^15.2.0",
58
62
  "@inertiajs/react": "^2.0.0",
@@ -63,11 +67,14 @@
63
67
  "@radix-ui/react-dialog": "^1.1.7",
64
68
  "@radix-ui/react-dropdown-menu": "^2.1.6",
65
69
  "@radix-ui/react-label": "^2.1.2",
70
+ "@radix-ui/react-menubar": "^1.1.12",
66
71
  "@radix-ui/react-popover": "^1.1.7",
72
+ "@radix-ui/react-portal": "^1.1.6",
67
73
  "@radix-ui/react-select": "^2.1.6",
68
74
  "@radix-ui/react-separator": "^1.1.3",
69
75
  "@radix-ui/react-slider": "^1.2.3",
70
76
  "@radix-ui/react-slot": "^1.2.0",
77
+ "@radix-ui/react-switch": "^1.2.4",
71
78
  "@radix-ui/react-tooltip": "^1.1.8",
72
79
  "@tailwindcss/vite": "^4.0.15",
73
80
  "@tanstack/react-table": "^8.21.2",
@@ -80,6 +87,7 @@
80
87
  "@types/json-schema": "^7.0.15",
81
88
  "@types/jsonwebtoken": "^9.0.9",
82
89
  "@types/leaflet": "^1.9.17",
90
+ "@types/lodash": "^4.17.17",
83
91
  "@types/lodash-es": "^4.17.12",
84
92
  "@types/multer": "^1.4.12",
85
93
  "@types/node": "^22.10.5",
@@ -90,12 +98,14 @@
90
98
  "@types/sprintf-js": "^1.1.4",
91
99
  "@types/uuid": "^10.0.0",
92
100
  "@types/waterline": "^0.13.9",
101
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
93
102
  "@vitejs/plugin-react": "^4.3.4",
94
103
  "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250405",
95
104
  "ckeditor5": "^45.0.0",
96
105
  "class-variance-authority": "^0.7.1",
97
106
  "clsx": "^2.1.1",
98
107
  "cross-env": "^7.0.3",
108
+ "eslint": "^9.26.0",
99
109
  "handsontable": "^15.2.0",
100
110
  "json-schema": "^0.4.0",
101
111
  "leaflet": "^1.9.4",
@@ -127,6 +137,7 @@
127
137
  "vanilla-jsoneditor": "^3.1.1",
128
138
  "vite": "^6.1.0",
129
139
  "vite-plugin-externals": "^0.6.2",
130
- "vite-plugin-full-reload": "^1.2.0"
140
+ "vite-plugin-full-reload": "^1.2.0",
141
+ "vitest": "^3.0.7"
131
142
  }
132
143
  }
package/system/Router.js CHANGED
@@ -1,5 +1,3 @@
1
- // import _processInstallStep from "../controllers/processInstallStep";
2
- // import _processInstallFinalize from "../controllers/processInstallFinalize";
3
1
  import _dashboard from "../controllers/dashboard";
4
2
  import _welcome from "../controllers/welcome";
5
3
  import _list from "../controllers/list";
@@ -30,6 +28,11 @@ export default class Router {
30
28
  Adminizer.log.error(`This method allowed for run only one time`);
31
29
  return;
32
30
  }
31
+ if (typeof adminizer.defaultMiddleware === 'function' &&
32
+ adminizer.defaultMiddleware.length >= 3 &&
33
+ adminizer.defaultMiddleware.length <= 4) {
34
+ adminizer.app.use(adminizer.defaultMiddleware);
35
+ }
33
36
  /**
34
37
  * List or one policy that should be bound to actions
35
38
  * @type {MiddlewareType[]}
@@ -59,12 +62,6 @@ export default class Router {
59
62
  * Widgets Custom
60
63
  */
61
64
  adminizer.app.all(`${adminizer.config.routePrefix}/widgets-action/:widgetId`, adminizer.policyManager.bindPolicies(policies, widgetCustomController));
62
- // /**
63
- // * Module Install Stepper
64
- // * @deprecated
65
- // * */
66
- // adminizer.app.all(`/install/:id`, adminizer.policyManager.bindPolicies(policies, _processInstallStep));
67
- // adminizer.app.all(`/install/:id/finalize`, adminizer.policyManager.bindPolicies(policies, _processInstallFinalize));
68
65
  /**
69
66
  * Edit form
70
67
  * */
@@ -74,8 +71,8 @@ export default class Router {
74
71
  /**
75
72
  * Catalog
76
73
  */
77
- adminizer.app.all(`/catalog/:slug/:id`, adminizer.policyManager.bindPolicies(policies, catalogController));
78
- adminizer.app.all(`/catalog/:slug`, adminizer.policyManager.bindPolicies(policies, catalogController));
74
+ adminizer.app.all(`${adminizer.config.routePrefix}/catalog/:slug/:id`, adminizer.policyManager.bindPolicies(policies, catalogController));
75
+ adminizer.app.all(`${adminizer.config.routePrefix}/catalog/:slug`, adminizer.policyManager.bindPolicies(policies, catalogController));
79
76
  /**
80
77
  * Media Manager
81
78
  */
@@ -154,7 +151,7 @@ export default class Router {
154
151
  /**
155
152
  * Create a default dashboard
156
153
  */
157
- if (Boolean(adminizer.config.dashboard)) {
154
+ if (adminizer.config.dashboard) {
158
155
  adminizer.app.all(adminizer.config.routePrefix, adminizer.policyManager.bindPolicies(policies, _dashboard));
159
156
  }
160
157
  else {
@@ -55,10 +55,6 @@ export default async function bindAccessRights(adminizer) {
55
55
  });
56
56
  }
57
57
  }
58
- adminizer.accessRightsHelper.registerToken({
59
- id: `process-install-step`, name: "Process install step",
60
- description: "Access to '/processInstallStep' route", department: "Routes"
61
- });
62
58
  // Widgets
63
59
  adminizer.accessRightsHelper.registerToken({
64
60
  id: `widgets`, name: "Widgets",
@@ -1,9 +1,9 @@
1
- import { CKeditor } from "../lib/controls/wysiwyg/CKeditor";
2
- import { ToastUiEditor } from "../lib/controls/markdown/ToastUiEditor";
3
- import { Handsontable } from "../lib/controls/table/Handsontable";
4
- import { JsonEditor } from "../lib/controls/jsoneditor/JsonEditor";
5
- import { MonacoEditor } from "../lib/controls/codeEditor/MonacoEditor";
6
- import { GeoEditor } from "../lib/controls/geojsoneditor/GeoEditor";
1
+ import { CKeditor } from "../lib/v4/controls/wysiwyg/CKeditor";
2
+ import { ToastUiEditor } from "../lib/v4/controls/markdown/ToastUiEditor";
3
+ import { Handsontable } from "../lib/v4/controls/table/Handsontable";
4
+ import { JsonEditor } from "../lib/v4/controls/jsoneditor/JsonEditor";
5
+ import { MonacoEditor } from "../lib/v4/controls/codeEditor/MonacoEditor";
6
+ import { GeoEditor } from "../lib/v4/controls/geojsoneditor/GeoEditor";
7
7
  export function bindControls(adminizer) {
8
8
  // bind wysiwyg
9
9
  adminizer.controlsHandler.add(new CKeditor(adminizer));
package/system/bindDev.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export default function bindDev(adminizer) {
2
2
  if (adminizer.config.models) {
3
3
  Object.keys(adminizer.config.models).forEach((modelname) => {
4
+ // if(["userap", "groupap"].includes(modelname)) return;
4
5
  if (typeof adminizer.config.models[modelname] !== "boolean") {
5
6
  let modelName = adminizer.config.models[modelname].model;
6
7
  adminizer.config.models[`dev-${modelName}`] = {
@@ -1,5 +1,5 @@
1
- import flash from "../lib/inertia/flash";
2
- import inertia from "../lib/inertia/inertiaAdapter";
1
+ import flash from "../lib/v4/inertia/flash";
2
+ import inertia from "../lib/v4/inertia/inertiaAdapter";
3
3
  import fs from "fs";
4
4
  import path from "node:path";
5
5
  import { InertiaMenuHelper } from "../helpers/inertiaMenuHelper";
@@ -110,9 +110,10 @@ export function bindInertia(adminizer) {
110
110
  user: req.session.userPretended ?? req.user
111
111
  },
112
112
  menu: req.user ? menuHelper.getMenuItems(req) : null,
113
+ title: menuHelper.getBrandTitle(),
113
114
  brand: menuHelper.getBrandTitle(),
114
115
  logout: menuHelper.getLogoutUrl(),
115
- logoutBtn: req.user?.locale == 'ru' ? 'Выход' : "Log out",
116
+ logoutBtn: req.i18n.__("Log out"),
116
117
  section: req.user ? [
117
118
  {
118
119
  title: req.i18n.__("Adminpanel"),
@@ -120,7 +121,11 @@ export function bindInertia(adminizer) {
120
121
  link: req.adminizer.config.routePrefix,
121
122
  icon: "rocket_launch",
122
123
  },
123
- ...(req.adminizer.configHelper.getConfig().sections)
124
+ ...((req.adminizer.configHelper.getConfig().sections || [])
125
+ .map((sec) => ({
126
+ ...sec,
127
+ title: req.i18n.__(sec.title),
128
+ })))
124
129
  ] : null,
125
130
  showVersion: req.adminizer.config.showVersion ?? false
126
131
  });
@@ -15,7 +15,6 @@
15
15
  //
16
16
  // MediaManagerHandler.add(mediaManager)
17
17
  // } catch (e) {
18
- // console.log('bindMediaManager Error: ', e)
19
18
  // }
20
19
  // })
21
20
  // }
@@ -11,10 +11,11 @@ export default async function bindModels(adminizer) {
11
11
  throw new Error("Default ORM adapter was not provided");
12
12
  }
13
13
  const systemModelsDir = path.resolve(import.meta.dirname, "../models");
14
- const systemModelsFiles = fs.readdirSync(systemModelsDir).filter(file => file.endsWith(".js"));
14
+ // Фильтруем только .js и .ts файлы, исключая .d.ts
15
+ const systemModelsFiles = fs.readdirSync(systemModelsDir).filter(file => (file.endsWith(".js") || (file.endsWith(".ts") && !file.endsWith(".d.ts"))));
15
16
  // Bind system models reading them from ../models and get the whole list of them for further checks
16
17
  const systemModels = systemModelsFiles.map((file) => {
17
- const modelName = path.basename(file, ".js");
18
+ const modelName = path.basename(file, path.extname(file)); // убираем .js/.ts
18
19
  const ormAdapter = adminizer.getOrmAdapter(defaultOrmAdapter);
19
20
  // Create model adapter instance and add it to model handler
20
21
  const registeredModel = ormAdapter.getModel(modelName.toLowerCase());
@@ -22,21 +23,23 @@ export default async function bindModels(adminizer) {
22
23
  adminizer.modelHandler.add(modelName, model);
23
24
  return modelName.toLowerCase();
24
25
  });
25
- const modelsFromConfig = Object.values(adminizer.config.models)
26
- .filter((item) => typeof item !== "boolean" && item?.model !== undefined)
27
- .map(item => item.model.toLowerCase());
26
+ const modelsFromConfig = Object.keys(adminizer.config.models);
27
+ Adminizer.log.debug(`Bind models > Models from config: ${modelsFromConfig}`);
28
28
  // Bind project models using config
29
29
  modelsFromConfig.forEach((modelName) => {
30
30
  const modelConfig = Object.entries(adminizer.config.models)
31
31
  .find(([key, value]) => value && typeof value !== "boolean" && value.model.toLowerCase() === modelName)?.[1];
32
32
  if (!systemModels.includes(modelName)) {
33
- const adapterName = typeof modelConfig !== "boolean" ? modelConfig.adapter || defaultOrmAdapter : defaultOrmAdapter;
33
+ const adapterName = typeof modelConfig !== "boolean" ? modelConfig?.adapter || defaultOrmAdapter : defaultOrmAdapter;
34
34
  const ormAdapter = adminizer.getOrmAdapter(adapterName);
35
35
  if (!ormAdapter) {
36
36
  throw new Error(`Adapter ${adapterName} was not found for model ${modelName}. Please check your configuration`);
37
37
  }
38
38
  // Create model adapter instance and add it to model handler
39
39
  const registeredModel = ormAdapter.getModel(modelName);
40
+ if (!registeredModel) {
41
+ throw `Bind models > Model not found: ${modelName}`;
42
+ }
40
43
  const model = new ormAdapter.Model(modelName, registeredModel);
41
44
  adminizer.modelHandler.add(modelName, model);
42
45
  }
@@ -0,0 +1,2 @@
1
+ import { Adminizer } from "../lib/Adminizer";
2
+ export default function bindNavigation(adminizer: Adminizer): void;
@@ -1,42 +1,42 @@
1
- "use strict";
2
- // import {Navigation} from "../lib/catalog/Navigation";
3
- // import {CatalogHandler} from "../lib/catalog/CatalogHandler";
4
- // import {Adminizer} from "../lib/Adminizer";
5
- //
6
- // export default function bindNavigation(adminizer: Adminizer) {
7
- // adminizer.emitter.on("orm:loaded", async () => {
8
- // if (adminizer.config.navigation) {
9
- // try {
10
- // adminizer.config.navigation.model = adminizer.config.navigation.model ? adminizer.config.navigation.model : 'navigationap'
11
- // let navigation = new Navigation(adminizer, adminizer.config.navigation)
12
- // CatalogHandler.add(navigation)
13
- // adminizer.config.models[adminizer.config.navigation.model.toLowerCase()] = {
14
- // add: false,
15
- // edit: {
16
- // controller: '../controllers/navigation/edit',
17
- // },
18
- // fields: {
19
- // createdAt: false,
20
- // updatedAt: false
21
- // },
22
- // hide: false,
23
- // icon: 'storage',
24
- // identifierField: "",
25
- // list: {
26
- // fields: {
27
- // tree: false,
28
- // id: false,
29
- // },
30
- // },
31
- // model: adminizer.config.navigation.model.toLowerCase(),
32
- // remove: false,
33
- // title: adminizer.config.navigation.model,
34
- // tools: [],
35
- // view: false
36
- // }
37
- // } catch (e) {
38
- // console.log('bindNavigation Error: ', e)
39
- // }
40
- // }
41
- // })
42
- // }
1
+ import { Navigation } from "../lib/v4/catalog/Navigation";
2
+ import { CatalogHandler } from "../lib/v4/catalog/CatalogHandler";
3
+ export default function bindNavigation(adminizer) {
4
+ adminizer.emitter.on("adminizer:loaded", async () => {
5
+ if (adminizer.config.navigation) {
6
+ try {
7
+ adminizer.config.navigation.model = adminizer.config.navigation.model ? adminizer.config.navigation.model : 'NavigationAP';
8
+ let navigation = new Navigation(adminizer, adminizer.config.navigation);
9
+ CatalogHandler.add(navigation);
10
+ adminizer.config.models[adminizer.config.navigation.model.toLowerCase()] = {
11
+ add: false,
12
+ edit: {
13
+ controller: '../controllers/navigation/edit',
14
+ },
15
+ fields: {
16
+ createdAt: false,
17
+ updatedAt: false
18
+ },
19
+ navbar: {
20
+ visible: true
21
+ },
22
+ icon: 'storage',
23
+ identifierField: "",
24
+ list: {
25
+ fields: {
26
+ tree: false,
27
+ id: false,
28
+ },
29
+ },
30
+ model: adminizer.config.navigation.model.toLowerCase(),
31
+ remove: false,
32
+ title: adminizer.config.navigation.model,
33
+ tools: [],
34
+ view: false
35
+ };
36
+ }
37
+ catch (e) {
38
+ console.log('bindNavigation Error: ', e);
39
+ }
40
+ }
41
+ });
42
+ }
@@ -33,7 +33,6 @@ export default function bindReqFunctions(adminizer) {
33
33
  if (res.locals) {
34
34
  req.i18n.registerMethods(res.locals, req);
35
35
  }
36
- // TODO: I made it quickly, you need to spread for architecture to different files, or re -ize this file to a girlfriend
37
36
  // NOTE: This is here because inertia should receive data to routes
38
37
  // JWT token
39
38
  const cookies = parse(req.headers.cookie || '');
@@ -4,7 +4,7 @@ import timezones from "../lib/timezones";
4
4
  /**
5
5
  * Default admin config
6
6
  */
7
- var adminpanelConfig = {
7
+ let adminpanelConfig = {
8
8
  /** Default route prefix */
9
9
  routePrefix: '/adminizer',
10
10
  /**
@@ -29,10 +29,13 @@ var adminpanelConfig = {
29
29
  * List of admin pages
30
30
  */
31
31
  models: {
32
- userap: {
33
- title: "Users AP",
32
+ UserAP: {
33
+ title: "Users",
34
34
  model: "userap",
35
35
  icon: "people",
36
+ navbar: {
37
+ section: "System"
38
+ },
36
39
  add: {
37
40
  controller: "../controllers/addUser"
38
41
  },
@@ -71,10 +74,13 @@ var adminpanelConfig = {
71
74
  }
72
75
  }
73
76
  },
74
- groupap: {
75
- title: "Groups AP",
77
+ GroupAP: {
78
+ title: "Groups",
76
79
  model: "groupap",
77
80
  icon: "group_add",
81
+ navbar: {
82
+ section: "System"
83
+ },
78
84
  add: {
79
85
  controller: "../controllers/addGroup"
80
86
  },
@@ -126,7 +132,8 @@ var adminpanelConfig = {
126
132
  confirmationRequired: true
127
133
  },
128
134
  auth: {
129
- enable: false
135
+ enable: false,
136
+ captcha: true
130
137
  }
131
138
  };
132
139
  export function setDefaultConfig(config) {
@@ -1,3 +1,72 @@
1
1
  {
2
-
2
+ "Action completed": "ﻞﻤﻌﻟﺍ ﻦﻣ ءﺎﻬﺘﻧﻻﺍ",
3
+ "Actions": "ﺕﺍءﺍﺮﺟﻹﺍ",
4
+ "All": "ﻊﻴﻤﺠﻟﺍ",
5
+ "Are you sure?": "؟ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ",
6
+ "Back": "ﻒﻠﺧ",
7
+ "Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
8
+ "Clean": "Clean",
9
+ "Confirm Password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
10
+ "Confirm Password*": "*ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
11
+ "Create": "ﻖﻠﺨﻳ",
12
+ "Create a new administrator": "ﺪﻳﺪﺟ ﻝﻭﺆﺴﻣ ءﺎﺸﻧﺇ",
13
+ "Create an Account": "ﺏﺎﺴﺣ ءﺎﺸﻧﺇ",
14
+ "Custom": "ﺺﺼﺨﻣ",
15
+ "Delete": "ﺢﺴﻤﻳ",
16
+ "E-mail": "ﻲﻧﻭﺮﺘﻜﻟﺇ ﺪﻳﺮﺑ",
17
+ "Edit": "ﺭﺮﺤﻳ",
18
+ "Email": "ﻲﻧﻭﺮﺘﻜﻟﺇ ﺪﻳﺮﺑ",
19
+ "Fast links": "ﺔﻌﻳﺮﺳ ﻂﺑﺍﻭﺭ",
20
+ "Full Name": "ﻞﻣﺎﻜﻟﺍ ﻢﺳﻻﺍ",
21
+ "Full name": "ﻞﻣﺎﻜﻟﺍ ﻢﺳﻻﺍ",
22
+ "Group description": "ﺔﻋﻮﻤﺠﻤﻟﺍ ﻒﺻﻭ",
23
+ "Group name": "ﺔﻋﻮﻤﺠﻤﻟﺍ ﻢﺳﺍ",
24
+ "Group settings": "ﺔﻋﻮﻤﺠﻤﻟﺍ ﺕﺍﺩﺍﺪﻋﺇ",
25
+ "Info": "ﺕﺎﻣﻮﻠﻌﻣ",
26
+ "Is Administrator": "ﻝﻭﺆﺴﻤﻟﺍ ﻮﻫ",
27
+ "Is confirmed": "ﺪﻴﻛﺄﺗ ﻢﺗ",
28
+ "Link": "ﺔﻠﺻﻭ",
29
+ "Locale": "ﺔﻐﻟ",
30
+ "Log in": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ",
31
+ "Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ",
32
+ "Members": "ءﺎﻀﻋﺃ",
33
+ "New record was created": "ﺪﻳﺪﺟ ﻞﺠﺳ ءﺎﺸﻧﺇ ﻢﺗ",
34
+ "No": "ﻻ",
35
+ "No records found !": "!ﺕﻼﺠﺳ ﻰﻠﻋ ﺭﻮﺜﻌﻟﺍ ﻢﺘﻳ ﻢﻟ",
36
+ "No widgets found": "ﻡﺪﺨﺘﺴﻤﻟﺍ ﺔﻬﺟﺍﻭ ﺮﺻﺎﻨﻋ ﻰﻠﻋ ﺭﻮﺜﻌﻟﺍ ﻢﺘﻳ ﻢﻟ",
37
+ "Not found": "ﺎﻬﻴﻠﻋ ﺭﻮﺜﻌﻟﺍ ﻢﺘﻳ ﻢﻟ",
38
+ "OR": "ﻭﺃ",
39
+ "Open in a new window": "ﺓﺪﻳﺪﺟ ﺓﺬﻓﺎﻧ ﻲﻓ ﺢﺘﻓﺍ",
40
+ "Password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ",
41
+ "Passwords do not match!": "!ﻖﺑﺎﻄﺘﺗ ﻻ ﺭﻭﺮﻤﻟﺍ ﺕﺎﻤﻠﻛ",
42
+ "Performing an action...": "... ﻞﻤﻌﻟﺍ ءﺍﺩﺃ",
43
+ "Please fill out the fields below": "ﻩﺎﻧﺩﺃ ﻝﻮﻘﺤﻟﺍ ءﻞﻣ ﻰﺟﺮﻳ",
44
+ "Pretend to be a user": "ﻡﺪﺨﺘﺴﻣ ﻪﻧﺄﺑ ﺮﻫﺎﻈﺘﻟﺍ",
45
+ "Profile expires": "ﻲﺼﺨﺸﻟﺍ ﻒﻠﻤﻟﺍ ﻲﻬﺘﻨﻳ",
46
+ "Quick actions": "ﺔﻌﻳﺮﺳ ﺕﺍءﺍﺮﺟﺇ",
47
+ "Record was not removed": "ﻞﺠﺴﻟﺍ ﺔﻟﺍﺯﺇ ﻢﺘﺗ ﻢﻟ",
48
+ "Record was removed successfully !": "!ﺡﺎﺠﻨﺑ ﻞﺠﺴﻟﺍ ﺔﻟﺍﺯﺇ ﺖﻤﺗ",
49
+ "Record was updated": "ﻞﺠﺴﻟﺍ ﺚﻳﺪﺤﺗ ﻢﺗ",
50
+ "Register": "ﻞﺠﺴﻳ",
51
+ "Repeat password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺭﺮﻛ",
52
+ "Reset": "ﻂﺒﺿ ﺓﺩﺎﻋﺇ",
53
+ "Save": "ﻆﻔﺤﻳ",
54
+ "Search": "ﺚﺤﺒﻳ",
55
+ "Select": "ﺭﺎﺘﺨﻳ",
56
+ "Select Ids": "ﺕﺎﻓﺮﻌﻣ ﺩﺪﺣ",
57
+ "Select Item type": "ﺮﺼﻨﻌﻟﺍ ﻉﻮﻧ ﺩﺪﺣ",
58
+ "Select Items": "ﺮﺻﺎﻨﻌﻟﺍ ﺩﺪﺣ",
59
+ "Switcher": "ﻝﻮﺤﻤﻟﺍ",
60
+ "Timezone": "ﺔﻴﻨﻣﺰﻟﺍ ﺔﻘﻄﻨﻤﻟﺍ",
61
+ "Title": "ﻥﺍﻮﻨﻋ",
62
+ "Toggle to change the grid. To save the grid, turn it off.": ".ﺎﻬﺌﻔﻃﺃ ، ﺔﻜﺒﺸﻟﺍ ﻆﻔﺤﻟ .ﺔﻜﺒﺸﻟﺍ ﺮﻴﻴﻐﺘﻟ ﻞﻳﺪﺒﺗ",
63
+ "User groups": "ﻦﻴﻣﺪﺨﺘﺴﻤﻟﺍ ﺕﺎﻋﻮﻤﺠﻣ",
64
+ "User settings": "ﻡﺪﺨﺘﺴﻤﻟﺍ ﺕﺍﺩﺍﺪﻋﺇ",
65
+ "Values in \"password\" and \"repeatPassword\" fields should be the same": "ﺎﻬﺴﻔﻧ ﻲﻫ \"REPERPASSWORD\" ﻭ \"ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ\" ﻲﻓ ﻢﻴﻘﻟﺍ ﻥﻮﻜﺗ ﻥﺃ ﺐﺠﻳ",
66
+ "View": "ﺮﻈﻨﻣ",
67
+ "Welcome": "ﺎًﺒﺣﺮﻣ",
68
+ "Yes": "ﻢﻌﻧ",
69
+ "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": ".ﻦﻴﻤﻴﻟﺍ ﻰﻠﻋﺃ ﻲﻓ Plus ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻨﻟﺎﺑ ﺎﻬﺘﻓﺎﺿﺇ ﻚﻨﻜﻤﻳ .ﻥﻵﺍ ﻰﺘﺣ ﺓﺩﺪﺤﻣ ﺓﺮﻐﺼﻣ ﻱﺃ ﻚﻳﺪ",
70
+ "create": "ﻖﻠﺨﻳ",
71
+ "create new": "ﺪﻳﺪﺟ ءﺎﺸﻧﺇ"
3
72
  }
@@ -1,3 +1,72 @@
1
1
  {
2
-
2
+ "Action completed": "动作完成了",
3
+ "Actions": "动作",
4
+ "All": "全部",
5
+ "Are you sure?": "你确定吗?",
6
+ "Back": "后退",
7
+ "Back to Login": "返回登录",
8
+ "Clean": "干净的",
9
+ "Confirm Password": "确认密码",
10
+ "Confirm Password*": "确认密码*",
11
+ "Create": "创造",
12
+ "Create a new administrator": "创建一个新的管理员",
13
+ "Create an Account": "创建一个帐户",
14
+ "Custom": "风俗",
15
+ "Delete": "删除",
16
+ "E-mail": "电子邮件",
17
+ "Edit": "编辑",
18
+ "Email": "电子邮件",
19
+ "Fast links": "快速链接",
20
+ "Full Name": "姓名",
21
+ "Full name": "姓名",
22
+ "Group description": "小组描述",
23
+ "Group name": "组名",
24
+ "Group settings": "组设置",
25
+ "Info": "信息",
26
+ "Is Administrator": "是管理员",
27
+ "Is confirmed": "被确认",
28
+ "Link": "关联",
29
+ "Locale": "语言环境",
30
+ "Log in": "登录",
31
+ "Login": "登录",
32
+ "Members": "成员",
33
+ "New record was created": "创建了新记录",
34
+ "No": "不",
35
+ "No records found !": "找不到记录!",
36
+ "No widgets found": "找不到小部件",
37
+ "Not found": "未找到",
38
+ "OR": "或者",
39
+ "Open in a new window": "在新窗口中打开",
40
+ "Password": "密码",
41
+ "Passwords do not match!": "密码不匹配!",
42
+ "Performing an action...": "执行动作...",
43
+ "Please fill out the fields below": "请填写以下字段",
44
+ "Pretend to be a user": "假装是用户",
45
+ "Profile expires": "配置文件到期",
46
+ "Quick actions": "快速动作",
47
+ "Record was not removed": "记录没有删除",
48
+ "Record was removed successfully !": "记录成功地删除了!",
49
+ "Record was updated": "记录已更新",
50
+ "Register": "登记",
51
+ "Repeat password": "重复密码",
52
+ "Reset": "重置",
53
+ "Save": "节省",
54
+ "Search": "搜索",
55
+ "Select": "选择",
56
+ "Select Ids": "选择ID",
57
+ "Select Item type": "选择项目类型",
58
+ "Select Items": "选择项目",
59
+ "Switcher": "切换器",
60
+ "Timezone": "时区",
61
+ "Title": "标题",
62
+ "Toggle to change the grid. To save the grid, turn it off.": "切换以更改网格。要保存网格,请将其关闭。",
63
+ "User groups": "用户组",
64
+ "User settings": "用户设置",
65
+ "Values in \"password\" and \"repeatPassword\" fields should be the same": "“密码”和“重复通信”字段中的值应相同",
66
+ "View": "看法",
67
+ "Welcome": "欢迎",
68
+ "Yes": "是的",
69
+ "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "您还没有选择任何小部件。您可以通过单击右上角的加号来添加它们。",
70
+ "create": "创造",
71
+ "create new": "创建新"
3
72
  }
@@ -1,4 +1,72 @@
1
1
  {
2
- "Welcome": "Adminpanel Willkommen",
3
- "A brand new app.": "Adminpanel Eine neue App."
4
- }
2
+ "Action completed": "Aktion abgeschlossen",
3
+ "Actions": "Aktionen",
4
+ "All": "Alle",
5
+ "Are you sure?": "Bist du sicher?",
6
+ "Back": "Zurück",
7
+ "Back to Login": "Zurück zum Anmeldung",
8
+ "Clean": "Sauber",
9
+ "Confirm Password": "Passwort bestätigen",
10
+ "Confirm Password*": "Passwort bestätigen*",
11
+ "Create": "Erstellen",
12
+ "Create a new administrator": "Erstellen Sie einen neuen Administrator",
13
+ "Create an Account": "Ein Konto erstellen",
14
+ "Custom": "Brauch",
15
+ "Delete": "Löschen",
16
+ "E-mail": "E-Mail",
17
+ "Edit": "Bearbeiten",
18
+ "Email": "E-Mail",
19
+ "Fast links": "Schnelle Links",
20
+ "Full Name": "Vollständiger Name",
21
+ "Full name": "Vollständiger Name",
22
+ "Group description": "Gruppenbeschreibung",
23
+ "Group name": "Gruppenname",
24
+ "Group settings": "Gruppeneinstellungen",
25
+ "Info": "Info",
26
+ "Is Administrator": "Ist Administrator",
27
+ "Is confirmed": "Wird bestätigt",
28
+ "Link": "Link",
29
+ "Locale": "Gebietsschema",
30
+ "Log in": "Einloggen",
31
+ "Login": "Login",
32
+ "Members": "Mitglieder",
33
+ "New record was created": "Neuer Rekord wurde erstellt",
34
+ "No": "NEIN",
35
+ "No records found !": "Keine Aufzeichnungen gefunden!",
36
+ "No widgets found": "Keine Widgets gefunden",
37
+ "Not found": "Nicht gefunden",
38
+ "OR": "ODER",
39
+ "Open in a new window": "Öffnen Sie in einem neuen Fenster",
40
+ "Password": "Passwort",
41
+ "Passwords do not match!": "Passwörter stimmen nicht überein!",
42
+ "Performing an action...": "Eine Aktion ausführen ...",
43
+ "Please fill out the fields below": "Bitte füllen Sie die folgenden Felder aus",
44
+ "Pretend to be a user": "Vorgeben, Benutzer zu sein",
45
+ "Profile expires": "Profil läuft ab",
46
+ "Quick actions": "Schnelle Aktionen",
47
+ "Record was not removed": "Rekord wurde nicht entfernt",
48
+ "Record was removed successfully !": "Rekord wurde erfolgreich entfernt!",
49
+ "Record was updated": "Der Datensatz wurde aktualisiert",
50
+ "Register": "Registrieren",
51
+ "Repeat password": "Passwort wiederholen",
52
+ "Reset": "Zurücksetzen",
53
+ "Save": "Speichern",
54
+ "Search": "Suchen",
55
+ "Select": "Wählen",
56
+ "Select Ids": "IDS auswählen",
57
+ "Select Item type": "Wählen Sie den Elementtyp",
58
+ "Select Items": "Elemente auswählen",
59
+ "Switcher": "Schalter",
60
+ "Timezone": "Zeitzone",
61
+ "Title": "Titel",
62
+ "Toggle to change the grid. To save the grid, turn it off.": "Umschalten, um das Netz zu ändern. Um das Netz zu retten, schalten Sie es aus.",
63
+ "User groups": "Benutzergruppen",
64
+ "User settings": "Benutzereinstellungen",
65
+ "Values in \"password\" and \"repeatPassword\" fields should be the same": "Werte in \"Passwort\" und \"RepeatPassword\" -Feldern sollten gleich sein",
66
+ "View": "Sicht",
67
+ "Welcome": "Willkommen",
68
+ "Yes": "Ja",
69
+ "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Sie haben noch keine Widgets ausgewählt. Sie können sie hinzufügen, indem Sie oben rechts auf das Pluszeichen klicken.",
70
+ "create": "erstellen",
71
+ "create new": "neu erstellen"
72
+ }