adminizer 4.2.0 → 4.3.0-build.101

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 (276) hide show
  1. package/assets/add-1E1UsMVZ.js +1 -0
  2. package/assets/add-form-CGa9QbwE.js +1 -0
  3. package/assets/add-group-7yAK6uFY.js +1 -0
  4. package/assets/add-group-form-BNmpvW8K.js +1 -0
  5. package/assets/add-user-NoYkTfZi.js +1 -0
  6. package/assets/add-user-form-DrclnTOd.js +1 -0
  7. package/assets/{app-CVnUv8s_.css → app-D8oqdt8J.css} +1 -1
  8. package/assets/app-layout-i2zN9Rn-.js +1 -0
  9. package/assets/app-shell-CHEYhVco.js +1 -0
  10. package/assets/app-sidebar-DeF8WNmW.js +1 -0
  11. package/assets/app-sidebar-header-DdM1EOrb.js +1 -0
  12. package/assets/app.js +1699 -1657
  13. package/assets/breadcrumbs-C439DWrC.js +1 -0
  14. package/assets/catalog-B9hdop59.js +6 -0
  15. package/assets/dashboard-Bi5KeZu2.js +3 -0
  16. package/assets/date-picker-DbJ8nHp5.js +1 -0
  17. package/assets/del-modal-_b3CSNHb.js +1 -0
  18. package/assets/dynamic-controls-BOYmRX_z.js +1 -0
  19. package/assets/field-renderer-4obZ_jUo.js +407 -0
  20. package/assets/{field-renderer-CsBa_tMB.css → field-renderer-CRNLShJD.css} +1 -1
  21. package/assets/form-Bte5kzjB.js +1 -0
  22. package/assets/form-oUlsuu7h.js +1 -0
  23. package/assets/geo-json-CadjdhwW.js +4 -0
  24. package/assets/handsontable-PVakPtJV.js +281 -0
  25. package/assets/home-CsUXA-O6.js +2 -0
  26. package/assets/icon-DM49pZW3.js +1 -0
  27. package/assets/init-user-DNrB8Xt5.js +1 -0
  28. package/assets/input-error--IOnWghB.js +1 -0
  29. package/assets/jsoneditor-D95dIAP2.js +3878 -0
  30. package/assets/list-CdfSnSN1.js +1 -0
  31. package/assets/list-table-Byzv346I.js +22 -0
  32. package/assets/login-6Xb8bcPq.js +1 -0
  33. package/assets/manifest.json +331 -221
  34. package/assets/material-icon-BedgD2NE.js +1 -0
  35. package/assets/media-manager-UQT6RhI8.js +14 -0
  36. package/assets/module-B4-7WkY5.js +1 -0
  37. package/assets/monaco-ICtx6xoc.js +11 -0
  38. package/assets/nav-footer-BwkQkwow.js +1 -0
  39. package/assets/nav-main-9Eb_A0rf.js +1 -0
  40. package/assets/nav-user-CRAfyE-x.js +1 -0
  41. package/assets/notification-ma2x7vka.js +27 -0
  42. package/assets/pagination-render-xsEktzA8.js +1 -0
  43. package/assets/register-BIyjCy8M.js +1 -0
  44. package/assets/tabs-BK_5wdPA.js +1 -0
  45. package/assets/theme-switcher-CKiJbMkh.js +1 -0
  46. package/assets/toast-editor-BZM5RHph.js +845 -0
  47. package/assets/user-info-CcYdmjMZ.js +1 -0
  48. package/assets/user-menu-content-DbUk8ZeY.js +1 -0
  49. package/assets/vanilla-picker-l5rcX3cq.js +8 -0
  50. package/assets/vendor-wzZzN_Jv.js +17 -0
  51. package/assets/welcome-cWh1qnl_.js +1 -0
  52. package/controllers/add.js +1 -1
  53. package/controllers/catalog/FrontentCatalogAdapter.d.ts +4 -4
  54. package/controllers/ckeditorUpload.d.ts +1 -1
  55. package/controllers/ckeditorUpload.js +50 -26
  56. package/controllers/edit.js +2 -2
  57. package/controllers/form.js +29 -13
  58. package/controllers/list.js +2 -2
  59. package/controllers/login.js +2 -2
  60. package/controllers/media-manager/mediaManagerAdapter.js +13 -2
  61. package/controllers/media-manager/mediaManagerApi.js +4 -3
  62. package/controllers/navigation/edit.js +1 -1
  63. package/controllers/notifications/NotificationController.d.ts +11 -0
  64. package/controllers/notifications/NotificationController.js +219 -0
  65. package/controllers/remove.js +2 -1
  66. package/controllers/view.js +1 -1
  67. package/files/favicon.png +0 -0
  68. package/helpers/configHelper.d.ts +1 -1
  69. package/helpers/controllerHelper.js +1 -1
  70. package/helpers/diffHelpers.d.ts +2 -0
  71. package/helpers/diffHelpers.js +69 -0
  72. package/helpers/fieldsHelper.d.ts +1 -1
  73. package/helpers/fieldsHelper.js +1 -1
  74. package/helpers/formHelper.js +3 -1
  75. package/helpers/inertiaAddHelper.d.ts +1 -1
  76. package/helpers/inertiaAutHelper.js +19 -0
  77. package/helpers/inertiaFromHelper.js +12 -0
  78. package/helpers/translationHelper.d.ts +1 -1
  79. package/helpers/translationHelper.js +1 -1
  80. package/index.d.ts +16 -14
  81. package/index.js +16 -14
  82. package/interfaces/adminpanelConfig.d.ts +18 -0
  83. package/interfaces/global.d.ts +3 -3
  84. package/interfaces/types.d.ts +44 -2
  85. package/lib/Adminizer.d.ts +16 -8
  86. package/lib/Adminizer.js +95 -12
  87. package/lib/{v4/DataAccessor.d.ts → DataAccessor.d.ts} +5 -5
  88. package/lib/{v4/DataAccessor.js → DataAccessor.js} +3 -3
  89. package/lib/{v4/I18n.js → I18n.js} +2 -2
  90. package/lib/{v4/PolicyManager.d.ts → PolicyManager.d.ts} +1 -1
  91. package/lib/{v4/PolicyManager.js → PolicyManager.js} +2 -2
  92. package/lib/{v4/catalog → catalog}/AbstractCatalog.d.ts +1 -1
  93. package/lib/{v4/catalog → catalog}/Navigation.d.ts +2 -2
  94. package/lib/{v4/catalog → catalog}/Navigation.js +1 -1
  95. package/lib/{v4/controls → controls}/AbstractControls.d.ts +1 -1
  96. package/lib/{v4/controls → controls}/codeEditor/MonacoEditor.d.ts +1 -1
  97. package/lib/{v4/controls → controls}/geojsoneditor/GeoEditor.d.ts +1 -1
  98. package/lib/{v4/controls → controls}/jsoneditor/JsonEditor.d.ts +1 -1
  99. package/lib/{v4/controls → controls}/markdown/ToastUiEditor.d.ts +1 -1
  100. package/lib/{v4/controls → controls}/table/Handsontable.d.ts +1 -1
  101. package/lib/{v4/controls → controls}/wysiwyg/CKeditor.d.ts +1 -1
  102. package/lib/{v4/controls → controls}/wysiwyg/CKeditor.js +1 -1
  103. package/lib/{v4/datatable → datatable}/NodeTable.d.ts +1 -1
  104. package/lib/media-manager/AbstractMediaManager.d.ts +3 -3
  105. package/lib/media-manager/AbstractMediaManager.js +2 -2
  106. package/lib/media-manager/DefaultMediaManager.d.ts +1 -1
  107. package/lib/media-manager/DefaultMediaManager.js +6 -8
  108. package/lib/media-manager/Items.d.ts +2 -1
  109. package/lib/media-manager/Items.js +7 -0
  110. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +10 -0
  111. package/lib/media-manager/helpers/MediaManagerHelper.js +27 -10
  112. package/lib/{v4/model → model}/AbstractModel.d.ts +12 -0
  113. package/lib/model/AbstractModel.js +178 -0
  114. package/lib/{v4/model → model}/ModelHandler.js +1 -1
  115. package/lib/{v4/model → model}/adapter/sequelize.d.ts +3 -4
  116. package/lib/{v4/model → model}/adapter/sequelize.js +41 -14
  117. package/lib/notifications/AbstractNotificationService.d.ts +163 -0
  118. package/lib/notifications/AbstractNotificationService.js +353 -0
  119. package/lib/notifications/GeneralNotificationService.d.ts +8 -0
  120. package/lib/notifications/GeneralNotificationService.js +61 -0
  121. package/lib/notifications/NotificationHandler.d.ts +27 -0
  122. package/lib/notifications/NotificationHandler.js +41 -0
  123. package/lib/notifications/SystemNotificationService.d.ts +19 -0
  124. package/lib/notifications/SystemNotificationService.js +173 -0
  125. package/lib/{v4/widgets → widgets}/abstractCustom.d.ts +1 -1
  126. package/lib/{v4/widgets → widgets}/abstractLink.d.ts +1 -1
  127. package/lib/{v4/widgets → widgets}/abstractWidgetBase.d.ts +1 -1
  128. package/lib/{v4/widgets → widgets}/widgetHandler.d.ts +2 -2
  129. package/migrations/index.d.ts +3 -0
  130. package/migrations/index.js +4 -0
  131. package/migrations/umzug/0001.d.ts +7 -0
  132. package/migrations/umzug/0001.js +121 -0
  133. package/migrations/umzugExports.d.ts +2 -0
  134. package/migrations/umzugExports.js +9 -0
  135. package/models/MediaManagerAP.d.ts +9 -3
  136. package/models/MediaManagerAP.js +11 -5
  137. package/models/MediaManagerAssociationsAP.d.ts +9 -3
  138. package/models/MediaManagerAssociationsAP.js +11 -5
  139. package/models/MediaManagerMetaAP.d.ts +9 -3
  140. package/models/MediaManagerMetaAP.js +11 -5
  141. package/models/NotificationAP.d.ts +44 -0
  142. package/models/NotificationAP.js +30 -0
  143. package/models/UserAP.d.ts +1 -1
  144. package/models/UserNotificationAP.d.ts +26 -0
  145. package/models/UserNotificationAP.js +18 -0
  146. package/package.json +17 -8
  147. package/system/Router.js +21 -7
  148. package/system/bindAssets.js +1 -0
  149. package/system/bindControls.js +6 -6
  150. package/system/bindInertia.js +9 -3
  151. package/system/bindMediaManager.js +2 -1
  152. package/system/bindNavigation.js +3 -4
  153. package/system/bindNotifications.d.ts +2 -0
  154. package/system/bindNotifications.js +14 -0
  155. package/system/bindReqFunctions.js +8 -25
  156. package/system/defaults.js +6 -0
  157. package/translations/ar.json +5 -4
  158. package/translations/cn.json +5 -4
  159. package/translations/de.json +72 -71
  160. package/translations/en.json +5 -4
  161. package/translations/es.json +5 -4
  162. package/translations/fr.json +5 -4
  163. package/translations/hi.json +5 -4
  164. package/translations/jp.json +5 -4
  165. package/translations/ko.json +5 -4
  166. package/translations/pt.json +5 -4
  167. package/translations/ru.json +2 -1
  168. package/translations/ua.json +5 -4
  169. package/translations/uz.json +73 -72
  170. package/translations/vi.json +5 -4
  171. package/ui/components/VanillaJSONEditor.d.ts +2 -0
  172. package/ui/components/VanillaJSONEditor.js +101 -0
  173. package/ui/components/handsontable.d.ts +10 -0
  174. package/ui/components/handsontable.js +51 -0
  175. package/ui/components/monaco-editor.d.ts +11 -0
  176. package/ui/components/monaco-editor.js +57 -0
  177. package/ui/components/ui/table.d.ts +1 -1
  178. package/ui/components/ui/table.js +2 -2
  179. package/ui/hooks/form-state.d.ts +4 -0
  180. package/ui/hooks/form-state.js +45 -0
  181. package/ui/hooks/use-appearance.d.ts +7 -0
  182. package/ui/hooks/use-appearance.js +76 -0
  183. package/ui/hooks/use-window-size.d.ts +5 -0
  184. package/ui/hooks/use-window-size.js +21 -0
  185. package/assets/VanillaJSONEditor-x8tDbio1.js +0 -3833
  186. package/assets/add-DOaZgoTz.js +0 -1
  187. package/assets/add-form-BjackXJe.js +0 -1
  188. package/assets/add-group-Br44s2D6.js +0 -1
  189. package/assets/add-group-form-YI6KS37x.js +0 -1
  190. package/assets/add-user-DWcH0s9-.js +0 -1
  191. package/assets/add-user-form-bv5BNX5A.js +0 -1
  192. package/assets/app-layout-DecN527i.js +0 -1
  193. package/assets/app-shell-DHzMWA1L.js +0 -1
  194. package/assets/app-sidebar-4JFP8UdU.js +0 -1
  195. package/assets/app-sidebar-header-CIKLfLsF.js +0 -1
  196. package/assets/breadcrumbs-Bo2z-LNC.js +0 -1
  197. package/assets/catalog-DVyrGTNR.js +0 -6
  198. package/assets/dashboard-Dy3pk9t7.js +0 -3
  199. package/assets/date-picker-B2z-aeuv.js +0 -1
  200. package/assets/debounce-D6eaSoDg.js +0 -1
  201. package/assets/del-modal-l3LxJWCN.js +0 -1
  202. package/assets/dynamic-controls-CSVVCONh.js +0 -1
  203. package/assets/field-renderer-BHo944Cn.js +0 -407
  204. package/assets/form-BXfnz6h5.js +0 -1
  205. package/assets/form-hP8sjbND.js +0 -1
  206. package/assets/form-state-702tb_BV.js +0 -1
  207. package/assets/geo-json-CVaNUZbb.js +0 -4
  208. package/assets/handsontable-CZQ5Ietj.js +0 -347
  209. package/assets/home-BD4MWmm9.js +0 -2
  210. package/assets/icon-C_X2cQ6W.js +0 -1
  211. package/assets/index-C148XJoK.js +0 -1
  212. package/assets/index-Vcq4gwWv.js +0 -1
  213. package/assets/init-user-DgCD4ZN1.js +0 -1
  214. package/assets/input-error-Bab-HPbn.js +0 -1
  215. package/assets/list-C-27EH39.js +0 -1
  216. package/assets/list-table-_OiQmr2A.js +0 -22
  217. package/assets/login-jzvVXgAV.js +0 -1
  218. package/assets/material-icon-DsiW0iQG.js +0 -1
  219. package/assets/media-manager-CSB_XRcE.js +0 -14
  220. package/assets/module-Ceq6vuwa.js +0 -1
  221. package/assets/monaco-editor-XX8Hz76f.js +0 -11
  222. package/assets/multi-select-BbKSrMw2.js +0 -1
  223. package/assets/nav-footer-B8gMV6Wp.js +0 -1
  224. package/assets/nav-main-BUp9qA8R.js +0 -1
  225. package/assets/nav-user-DeF3SDRj.js +0 -1
  226. package/assets/pagination-render-B9U_hVbB.js +0 -1
  227. package/assets/register-C6acWsLe.js +0 -1
  228. package/assets/theme-switcher-D8T9NgWG.js +0 -1
  229. package/assets/toast-editor-C0550yms.js +0 -845
  230. package/assets/use-appearance-CXP5cHaQ.js +0 -1
  231. package/assets/use-window-size-DLSEoR6e.js +0 -1
  232. package/assets/user-info-CAgkqARx.js +0 -1
  233. package/assets/user-menu-content-BxL0QMC9.js +0 -1
  234. package/assets/vanilla-picker-B6E6ObS_.js +0 -8
  235. package/assets/welcome-Dk7GoS5R.js +0 -1
  236. package/lib/v4/model/AbstractModel.js +0 -67
  237. package/lib/v4/model/adapter/typeorm.d.ts +0 -23
  238. package/lib/v4/model/adapter/typeorm.js +0 -68
  239. package/migrations/20230303171134-adminpanel-init.js +0 -122
  240. package/migrations/20231223215835-add-widgets.js +0 -32
  241. package/migrations/20240804191001-added-navigationap.js +0 -53
  242. package/migrations/20241121184236-v4-init.js +0 -134
  243. /package/lib/{v4/I18n.d.ts → I18n.d.ts} +0 -0
  244. /package/lib/{v4/POWCaptcha.d.ts → POWCaptcha.d.ts} +0 -0
  245. /package/lib/{v4/POWCaptcha.js → POWCaptcha.js} +0 -0
  246. /package/lib/{v4/catalog → catalog}/AbstractCatalog.js +0 -0
  247. /package/lib/{v4/catalog → catalog}/CatalogHandler.d.ts +0 -0
  248. /package/lib/{v4/catalog → catalog}/CatalogHandler.js +0 -0
  249. /package/lib/{v4/controls → controls}/AbstractControls.js +0 -0
  250. /package/lib/{v4/controls → controls}/ControlsHandler.d.ts +0 -0
  251. /package/lib/{v4/controls → controls}/ControlsHandler.js +0 -0
  252. /package/lib/{v4/controls → controls}/codeEditor/MonacoEditor.js +0 -0
  253. /package/lib/{v4/controls → controls}/geojsoneditor/GeoEditor.js +0 -0
  254. /package/lib/{v4/controls → controls}/jsoneditor/JsonEditor.js +0 -0
  255. /package/lib/{v4/controls → controls}/markdown/ToastUiEditor.js +0 -0
  256. /package/lib/{v4/controls → controls}/table/Handsontable.js +0 -0
  257. /package/lib/{v4/datatable → datatable}/NodeTable.js +0 -0
  258. /package/lib/{v4/helper → helper}/jwt.d.ts +0 -0
  259. /package/lib/{v4/helper → helper}/jwt.js +0 -0
  260. /package/lib/{v4/inertia → inertia}/flash.d.ts +0 -0
  261. /package/lib/{v4/inertia → inertia}/flash.js +0 -0
  262. /package/lib/{v4/inertia → inertia}/inertiaAdapter.d.ts +0 -0
  263. /package/lib/{v4/inertia → inertia}/inertiaAdapter.js +0 -0
  264. /package/lib/{v4/model → model}/ModelHandler.d.ts +0 -0
  265. /package/lib/{v4/model → model}/adapter/waterline.d.ts +0 -0
  266. /package/lib/{v4/model → model}/adapter/waterline.js +0 -0
  267. /package/lib/{v4/widgets → widgets}/abstractAction.d.ts +0 -0
  268. /package/lib/{v4/widgets → widgets}/abstractAction.js +0 -0
  269. /package/lib/{v4/widgets → widgets}/abstractCustom.js +0 -0
  270. /package/lib/{v4/widgets → widgets}/abstractInfo.d.ts +0 -0
  271. /package/lib/{v4/widgets → widgets}/abstractInfo.js +0 -0
  272. /package/lib/{v4/widgets → widgets}/abstractLink.js +0 -0
  273. /package/lib/{v4/widgets → widgets}/abstractSwitch.d.ts +0 -0
  274. /package/lib/{v4/widgets → widgets}/abstractSwitch.js +0 -0
  275. /package/lib/{v4/widgets → widgets}/abstractWidgetBase.js +0 -0
  276. /package/lib/{v4/widgets → widgets}/widgetHandler.js +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adminizer",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.3.0-build.101",
5
5
  "main": "index.js",
6
6
  "exports": {
7
7
  ".": "./index.js",
@@ -15,6 +15,7 @@
15
15
  "dev:no-seed": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
16
16
  "dev:no-seed-clean": "cross-env VITE_ENV=dev NO_SEED_DATA=true CLEAN_TMP=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
17
17
  "dev:waterline": "cross-env VITE_ENV=dev ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
18
+ "dev:waterline:no-seed": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
18
19
  "build:assets": "vite build",
19
20
  "compile:backend": "tsc -p src/tsconfig.json",
20
21
  "compile:ui": "tsc -p tsconfig.ui.json",
@@ -32,9 +33,16 @@
32
33
  "demo": "cross-env ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts"
33
34
  },
34
35
  "keywords": [],
35
- "author": "",
36
+ "author": "Siziy Ivan <xziy88@gmail.com>",
37
+ "contributors": [
38
+ "Serebriakov Roman <rserebryakov1902@gmail.com>"
39
+ ],
36
40
  "license": "MIT",
37
- "description": "",
41
+ "description": "A modern, framework-agnostic admin panel for Node.js with TypeScript backend and React frontend",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/adminization/adminizer"
45
+ },
38
46
  "dependencies": {
39
47
  "@minoru/react-dnd-treeview": "^3.5.2",
40
48
  "@radix-ui/react-context-menu": "^2.2.15",
@@ -47,8 +55,10 @@
47
55
  "cors": "^2.8.5",
48
56
  "crypto-puzzle": "^5.0.2",
49
57
  "date-fns": "^3.6.0",
58
+ "deep-object-diff": "^1.1.9",
50
59
  "express": "^4.21.2",
51
60
  "express-session": "^1.18.1",
61
+ "image-size": "^2.0.2",
52
62
  "jsonwebtoken": "^9.0.2",
53
63
  "material-icons": "^1.13.14",
54
64
  "multer": "^1.4.5-lts.1",
@@ -58,12 +68,11 @@
58
68
  "react-dnd": "^16.0.1",
59
69
  "reflect-metadata": "^0.2.2",
60
70
  "sharp": "^0.33.5",
71
+ "sprintf-js": "^1.1.3",
61
72
  "typeorm": "^0.3.20",
62
73
  "uuid": "^11.0.5",
63
74
  "waterline": "^0.15.2",
64
- "winston": "^3.17.0",
65
- "image-size": "^2.0.2",
66
- "sequelize": "^6.37.7"
75
+ "winston": "^3.17.0"
67
76
  },
68
77
  "devDependencies": {
69
78
  "@babel/plugin-proposal-decorators": "^7.27.1",
@@ -73,7 +82,7 @@
73
82
  "@eslint/compat": "^1.2.9",
74
83
  "@faker-js/faker": "^9.7.0",
75
84
  "@handsontable/react": "^15.2.0",
76
- "@inertiajs/react": "^2.0.0",
85
+ "@inertiajs/react": "^2.2.0",
77
86
  "@monaco-editor/react": "^4.7.0",
78
87
  "@radix-ui/react-avatar": "^1.1.3",
79
88
  "@radix-ui/react-checkbox": "^1.1.4",
@@ -137,10 +146,10 @@
137
146
  "react-simple-wysiwyg": "^3.2.2",
138
147
  "sails-disk": "^2.1.2",
139
148
  "sails-postgresql": "^5.0.1",
149
+ "sequelize": "^6.37.7",
140
150
  "sequelize-typescript": "^2.1.6",
141
151
  "shelljs": "^0.9.2",
142
152
  "sonner": "^2.0.3",
143
- "sprintf-js": "^1.1.3",
144
153
  "sqlite3": "^5.1.7",
145
154
  "tailwind-merge": "^3.0.2",
146
155
  "tailwindcss": "^4.0.15",
package/system/Router.js CHANGED
@@ -5,7 +5,7 @@ import _edit from "../controllers/edit";
5
5
  import _add from "../controllers/add";
6
6
  import _view from "../controllers/view";
7
7
  import _remove from "../controllers/remove";
8
- import _uploadCKeditor5 from "../controllers/ckeditorUpload";
8
+ import { ckEditorUpload } from "../controllers/ckeditorUpload";
9
9
  import _form from "../controllers/form";
10
10
  import { widgetSwitchController } from "../controllers/widgets/switch";
11
11
  import _getAllWidgets from "../controllers/getAllWidgets";
@@ -18,6 +18,7 @@ import { mediaManagerController } from "../controllers/media-manager/mediaManage
18
18
  import { thumbController } from "../controllers/media-manager/ThumbController";
19
19
  import { Adminizer } from "../lib/Adminizer";
20
20
  import timezones from "../controllers/timezones";
21
+ import { NotificationController } from "../controllers/notifications/NotificationController";
21
22
  export default class Router {
22
23
  static onlyOnce = false;
23
24
  /**
@@ -67,7 +68,7 @@ export default class Router {
67
68
  * */
68
69
  adminizer.app.all(`${adminizer.config.routePrefix}/form/:slug`, adminizer.policyManager.bindPolicies(policies, _form));
69
70
  // Create a base entity route
70
- let baseRoute = `${adminizer.config.routePrefix}/:entityType/:entityName`;
71
+ let baseRoute = `${adminizer.config.routePrefix}/:entityType(form|model)/:entityName`;
71
72
  /**
72
73
  * Catalog
73
74
  */
@@ -80,6 +81,24 @@ export default class Router {
80
81
  adminizer.app.post(`${adminizer.config.routePrefix}/media-manager-uploader/:id/upload-variant`, adminizer.policyManager.bindPolicies(policies, mediaManagerController));
81
82
  adminizer.app.all(`${adminizer.config.routePrefix}/media-manager-uploader/:id`, adminizer.policyManager.bindPolicies(policies, mediaManagerController));
82
83
  adminizer.app.all(`${adminizer.config.routePrefix}/get-thumbs`, adminizer.policyManager.bindPolicies(policies, thumbController));
84
+ /**
85
+ * Upload images CKeditor5
86
+ */
87
+ adminizer.app.post(`${baseRoute}/ckeditor5/upload`, adminizer.policyManager.bindPolicies(policies, ckEditorUpload));
88
+ /**
89
+ * Notifications
90
+ */
91
+ if (adminizer.config.notifications.enabled) {
92
+ adminizer.app.get(`${adminizer.config.routePrefix}/notifications`, adminizer.policyManager.bindPolicies(policies, NotificationController.viewAll));
93
+ adminizer.app.post(`${adminizer.config.routePrefix}/notifications`, adminizer.policyManager.bindPolicies(policies, NotificationController.viewAll));
94
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/notifications/stream`, adminizer.policyManager.bindPolicies(policies, NotificationController.getNotificationsStream));
95
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/notifications/get-classes`, adminizer.policyManager.bindPolicies(policies, NotificationController.getNotificationClasses));
96
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/notifications/:notificationClass`, adminizer.policyManager.bindPolicies(policies, NotificationController.getNotificationsByClass));
97
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/notifications`, adminizer.policyManager.bindPolicies(policies, NotificationController.getUserNotifications));
98
+ adminizer.app.put(`${adminizer.config.routePrefix}/api/notifications/:notificationClass/:id/read`, adminizer.policyManager.bindPolicies(policies, NotificationController.markAsRead));
99
+ adminizer.app.put(`${adminizer.config.routePrefix}/api/notifications/read-all`, adminizer.policyManager.bindPolicies(policies, NotificationController.markAllAsRead));
100
+ adminizer.app.post(`${adminizer.config.routePrefix}/api/notifications/search`, adminizer.policyManager.bindPolicies(policies, NotificationController.search));
101
+ }
83
102
  /**
84
103
  * List of records
85
104
  */
@@ -145,11 +164,6 @@ export default class Router {
145
164
  * Remove record
146
165
  */
147
166
  adminizer.app.all(baseRoute + "/remove/:id", adminizer.policyManager.bindPolicies(policies, _remove));
148
- /**
149
- * Upload images CKeditor5
150
- */
151
- //TODO check after mediamanager upgrade possible is not need
152
- adminizer.app.all(`${baseRoute}/ckeditor5/upload`, adminizer.policyManager.bindPolicies(policies, _uploadCKeditor5));
153
167
  /**
154
168
  * Create a default dashboard
155
169
  */
@@ -2,4 +2,5 @@ import serveStatic from 'serve-static';
2
2
  import * as path from "path";
3
3
  export default function bindAssets(app, routePrefix) {
4
4
  app.use(`${routePrefix}/assets`, serveStatic(path.join(import.meta.dirname, '../assets')));
5
+ app.use(`${routePrefix}/files`, serveStatic(path.join(import.meta.dirname, '../files')));
5
6
  }
@@ -1,9 +1,9 @@
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";
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";
7
7
  export function bindControls(adminizer) {
8
8
  // bind wysiwyg
9
9
  adminizer.controlsHandler.add(new CKeditor(adminizer));
@@ -1,5 +1,5 @@
1
- import flash from "../lib/v4/inertia/flash";
2
- import inertia from "../lib/v4/inertia/inertiaAdapter";
1
+ import flash from "../lib/inertia/flash";
2
+ import inertia from "../lib/inertia/inertiaAdapter";
3
3
  import fs from "fs";
4
4
  import path from "node:path";
5
5
  import { InertiaMenuHelper } from "../helpers/inertiaMenuHelper";
@@ -17,6 +17,7 @@ export function bindInertia(adminizer) {
17
17
  <script type="module" src="/@vite/client"></script>
18
18
  <script type="module" src="/src/assets/js/app.tsx"></script>
19
19
  <script>window.routePrefix = "${adminizer.config.routePrefix}"</script>
20
+ <script>window.bindPublic = ${adminizer.config.bind?.public}</script>
20
21
  `;
21
22
  }
22
23
  else {
@@ -57,11 +58,14 @@ export function bindInertia(adminizer) {
57
58
  });
58
59
  // Route prefix script
59
60
  const routePrefixScript = `<script>window.routePrefix = "${adminizer.config.routePrefix}";</script>`;
61
+ // For Sails JS
62
+ const bindPublic = `<script>window.bindPublic = ${adminizer.config.bind?.public}</script>`;
60
63
  return `
61
64
  ${preloadLinks.join('\n')}
62
65
  ${stylesheets.join('\n')}
63
66
  ${scripts.join('\n')}
64
67
  ${routePrefixScript}
68
+ ${bindPublic}
65
69
  `;
66
70
  }
67
71
  };
@@ -71,6 +75,7 @@ export function bindInertia(adminizer) {
71
75
  <head>
72
76
  <meta name="viewport" content="width=device-width, initial-scale=1">
73
77
  <meta charset="utf-8"><title inertia></title>
78
+ <link rel="icon" type="image/png" href="${adminizer.config.routePrefix}/files/favicon.png">
74
79
  ${viteRender()}
75
80
  </head>
76
81
  <body>
@@ -127,7 +132,8 @@ export function bindInertia(adminizer) {
127
132
  title: req.i18n.__(sec.title),
128
133
  })))
129
134
  ] : null,
130
- showVersion: req.adminizer.config.showVersion ?? false
135
+ showVersion: req.adminizer.config.showVersion ?? false,
136
+ notifications: req.adminizer.config.notifications.enabled ?? false,
131
137
  });
132
138
  next();
133
139
  });
@@ -15,7 +15,8 @@ export default function bindMediaManager(adminizer) {
15
15
  }
16
16
  });
17
17
  // Bind media manager public folder
18
- adminizer.app.use(`/public`, serveStatic(adminizer.config.mediamanager.fileStoragePath));
18
+ if (adminizer.config.bind?.public && adminizer.config.mediamanager?.fileStoragePath)
19
+ adminizer.app.use(`/public`, serveStatic(adminizer.config.mediamanager.fileStoragePath));
19
20
  // Bind file icons
20
21
  adminizer.app.use(`${adminizer.config.routePrefix}/fileicons`, serveStatic(path.join(import.meta.dirname, '../fileicons')));
21
22
  }
@@ -1,4 +1,4 @@
1
- import { Navigation } from "../lib/v4/catalog/Navigation";
1
+ import { Navigation } from "../lib/catalog/Navigation";
2
2
  export default function bindNavigation(adminizer) {
3
3
  adminizer.emitter.on("adminizer:loaded", async () => {
4
4
  if (adminizer.config.navigation) {
@@ -16,7 +16,7 @@ export default function bindNavigation(adminizer) {
16
16
  updatedAt: false
17
17
  },
18
18
  navbar: {
19
- visible: true
19
+ visible: false
20
20
  },
21
21
  icon: 'storage',
22
22
  identifierField: "",
@@ -29,8 +29,7 @@ export default function bindNavigation(adminizer) {
29
29
  model: adminizer.config.navigation.model.toLowerCase(),
30
30
  remove: false,
31
31
  title: adminizer.config.navigation.model,
32
- tools: [],
33
- view: false
32
+ tools: []
34
33
  };
35
34
  }
36
35
  catch (e) {
@@ -0,0 +1,2 @@
1
+ import { Adminizer } from '../lib/Adminizer';
2
+ export declare function bindNotifications(adminizer: Adminizer): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { Adminizer } from '../lib/Adminizer';
2
+ import { NotificationHandler } from '../lib/notifications/NotificationHandler';
3
+ import { GeneralNotificationService } from '../lib/notifications/GeneralNotificationService';
4
+ import { SystemNotificationService } from '../lib/notifications/SystemNotificationService';
5
+ export async function bindNotifications(adminizer) {
6
+ // Создаем хендлер
7
+ adminizer.notificationHandler = new NotificationHandler();
8
+ // Регистрируем сервисы
9
+ const generalService = new GeneralNotificationService(adminizer);
10
+ const systemService = new SystemNotificationService(adminizer);
11
+ adminizer.notificationHandler.registerService(generalService);
12
+ adminizer.notificationHandler.registerService(systemService);
13
+ Adminizer.log.info(`Notification system initialized with 2 services: ${systemService.notificationClass}, ${systemService.notificationClass}`);
14
+ }
@@ -1,32 +1,13 @@
1
1
  import { Adminizer } from "../lib/Adminizer";
2
- import { I18n } from "../lib/v4/I18n";
2
+ import { I18n } from "../lib/I18n";
3
3
  import { parse } from "cookie";
4
- import { verifyUser } from "../lib/v4/helper/jwt";
4
+ import { verifyUser } from "../lib/helper/jwt";
5
5
  export default function bindReqFunctions(adminizer) {
6
- let bindReqFunctions = function (req, res, next) {
6
+ let bindReqFunctionsF = async function (req, res, next) {
7
7
  /**
8
8
  * Add adminizer to use in controllers
9
9
  * */
10
10
  req.adminizer = adminizer;
11
- /**
12
- * Function to upload files using multer.
13
- * Filename can be set dynamically based on you filename using simple function
14
- * */
15
- // req.upload = (options?: { destination?: string; filename?: (file: Express.Multer.File) => string }) => {
16
- // const storage = multer.diskStorage({
17
- // destination: (req, file, cb) => {
18
- // const destination = options?.destination || "uploads/";
19
- // cb(null, destination);
20
- // },
21
- // filename: (req, file, cb) => {
22
- // const filename =
23
- // options?.filename?.(file) || `${Date.now()}-${file.originalname}`;
24
- // cb(null, filename);
25
- // },
26
- // });
27
- //
28
- // return multer({storage});
29
- // };
30
11
  /**
31
12
  * Add i18n
32
13
  * */
@@ -41,7 +22,8 @@ export default function bindReqFunctions(adminizer) {
41
22
  if (token) {
42
23
  const user = verifyUser(token, req.adminizer.jwtSecret);
43
24
  if (user) {
44
- req.user = user;
25
+ req.user = await req.adminizer.modelHandler.model.get('userap')['_findOne']({ id: user.id });
26
+ // req.user = user;
45
27
  }
46
28
  }
47
29
  if (req.session.userPretended) {
@@ -49,7 +31,8 @@ export default function bindReqFunctions(adminizer) {
49
31
  }
50
32
  next();
51
33
  };
52
- adminizer.app.use('/', bindReqFunctions);
53
- adminizer.app.use('/*', bindReqFunctions);
34
+ // adminizer.app.use('/', bindReqFunctionsF);
35
+ // adminizer.app.use('/*', bindReqFunctionsF);
36
+ adminizer.app.use(bindReqFunctionsF);
54
37
  Adminizer.log.info("Adminizer upload loaded");
55
38
  }
@@ -134,6 +134,12 @@ let adminpanelConfig = {
134
134
  auth: {
135
135
  enable: false,
136
136
  captcha: true
137
+ },
138
+ bind: {
139
+ public: true
140
+ },
141
+ notifications: {
142
+ enabled: false
137
143
  }
138
144
  };
139
145
  export function setDefaultConfig(config) {
@@ -3,9 +3,10 @@
3
3
  "Actions": "ﺕﺍءﺍﺮﺟﻹﺍ",
4
4
  "All": "ﻊﻴﻤﺠﻟﺍ",
5
5
  "Are you sure?": "؟ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ",
6
- "Back": "ﻒﻠﺧ",
7
- "Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
8
- "Clean": "Clean",
6
+ "Back": "ﻒﻠﺧ",
7
+ "Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
8
+ "Additional login page": "صفحة تسجيل دخول إضافية",
9
+ "Clean": "Clean",
9
10
  "Confirm Password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
10
11
  "Confirm Password*": "*ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
11
12
  "Create": "ﻖﻠﺨﻳ",
@@ -69,4 +70,4 @@
69
70
  "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": ".ﻦﻴﻤﻴﻟﺍ ﻰﻠﻋﺃ ﻲﻓ Plus ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻨﻟﺎﺑ ﺎﻬﺘﻓﺎﺿﺇ ﻚﻨﻜﻤﻳ .ﻥﻵﺍ ﻰﺘﺣ ﺓﺩﺪﺤﻣ ﺓﺮﻐﺼﻣ ﻱﺃ ﻚﻳﺪ",
70
71
  "create": "ﻖﻠﺨﻳ",
71
72
  "create new": "ﺪﻳﺪﺟ ءﺎﺸﻧﺇ"
72
- }
73
+ }
@@ -3,9 +3,10 @@
3
3
  "Actions": "动作",
4
4
  "All": "全部",
5
5
  "Are you sure?": "你确定吗?",
6
- "Back": "后退",
7
- "Back to Login": "返回登录",
8
- "Clean": "干净的",
6
+ "Back": "后退",
7
+ "Back to Login": "返回登录",
8
+ "Additional login page": "额外的登录页面",
9
+ "Clean": "干净的",
9
10
  "Confirm Password": "确认密码",
10
11
  "Confirm Password*": "确认密码*",
11
12
  "Create": "创造",
@@ -69,4 +70,4 @@
69
70
  "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "您还没有选择任何小部件。您可以通过单击右上角的加号来添加它们。",
70
71
  "create": "创造",
71
72
  "create new": "创建新"
72
- }
73
+ }
@@ -1,72 +1,73 @@
1
1
  {
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
- }
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
+ "Additional login page": "Zusätzliche Anmeldeseite",
9
+ "Clean": "Sauber",
10
+ "Confirm Password": "Passwort bestätigen",
11
+ "Confirm Password*": "Passwort bestätigen*",
12
+ "Create": "Erstellen",
13
+ "Create a new administrator": "Erstellen Sie einen neuen Administrator",
14
+ "Create an Account": "Ein Konto erstellen",
15
+ "Custom": "Brauch",
16
+ "Delete": "Löschen",
17
+ "E-mail": "E-Mail",
18
+ "Edit": "Bearbeiten",
19
+ "Email": "E-Mail",
20
+ "Fast links": "Schnelle Links",
21
+ "Full Name": "Vollständiger Name",
22
+ "Full name": "Vollständiger Name",
23
+ "Group description": "Gruppenbeschreibung",
24
+ "Group name": "Gruppenname",
25
+ "Group settings": "Gruppeneinstellungen",
26
+ "Info": "Info",
27
+ "Is Administrator": "Ist Administrator",
28
+ "Is confirmed": "Wird bestätigt",
29
+ "Link": "Link",
30
+ "Locale": "Gebietsschema",
31
+ "Log in": "Einloggen",
32
+ "Login": "Login",
33
+ "Members": "Mitglieder",
34
+ "New record was created": "Neuer Rekord wurde erstellt",
35
+ "No": "NEIN",
36
+ "No records found !": "Keine Aufzeichnungen gefunden!",
37
+ "No widgets found": "Keine Widgets gefunden",
38
+ "Not found": "Nicht gefunden",
39
+ "OR": "ODER",
40
+ "Open in a new window": "Öffnen Sie in einem neuen Fenster",
41
+ "Password": "Passwort",
42
+ "Passwords do not match!": "Passwörter stimmen nicht überein!",
43
+ "Performing an action...": "Eine Aktion ausführen ...",
44
+ "Please fill out the fields below": "Bitte füllen Sie die folgenden Felder aus",
45
+ "Pretend to be a user": "Vorgeben, Benutzer zu sein",
46
+ "Profile expires": "Profil läuft ab",
47
+ "Quick actions": "Schnelle Aktionen",
48
+ "Record was not removed": "Rekord wurde nicht entfernt",
49
+ "Record was removed successfully !": "Rekord wurde erfolgreich entfernt!",
50
+ "Record was updated": "Der Datensatz wurde aktualisiert",
51
+ "Register": "Registrieren",
52
+ "Repeat password": "Passwort wiederholen",
53
+ "Reset": "Zurücksetzen",
54
+ "Save": "Speichern",
55
+ "Search": "Suchen",
56
+ "Select": "Wählen",
57
+ "Select Ids": "IDS auswählen",
58
+ "Select Item type": "Wählen Sie den Elementtyp",
59
+ "Select Items": "Elemente auswählen",
60
+ "Switcher": "Schalter",
61
+ "Timezone": "Zeitzone",
62
+ "Title": "Titel",
63
+ "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.",
64
+ "User groups": "Benutzergruppen",
65
+ "User settings": "Benutzereinstellungen",
66
+ "Values in \"password\" and \"repeatPassword\" fields should be the same": "Werte in \"Passwort\" und \"RepeatPassword\" -Feldern sollten gleich sein",
67
+ "View": "Sicht",
68
+ "Welcome": "Willkommen",
69
+ "Yes": "Ja",
70
+ "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.",
71
+ "create": "erstellen",
72
+ "create new": "neu erstellen"
73
+ }
@@ -3,9 +3,10 @@
3
3
  "Actions": "Actions",
4
4
  "All": "All",
5
5
  "Are you sure?": "Are you sure?",
6
- "Back": "Back",
7
- "Back to Login": "Back to Login",
8
- "Clean": "Clean",
6
+ "Back": "Back",
7
+ "Back to Login": "Back to Login",
8
+ "Additional login page": "Additional login page",
9
+ "Clean": "Clean",
9
10
  "Confirm Password": "Confirm Password",
10
11
  "Confirm Password*": "Confirm Password*",
11
12
  "Create": "Create",
@@ -139,4 +140,4 @@
139
140
  "Sizes/Ver": "Sizes/Ver",
140
141
  "Locales": "Locales",
141
142
  "Date": "Date"
142
- }
143
+ }
@@ -3,9 +3,10 @@
3
3
  "Actions": "Comportamiento",
4
4
  "All": "Todo",
5
5
  "Are you sure?": "¿Está seguro?",
6
- "Back": "Atrás",
7
- "Back to Login": "Volver a iniciar sesión",
8
- "Clean": "Limpio",
6
+ "Back": "Atrás",
7
+ "Back to Login": "Volver a iniciar sesión",
8
+ "Additional login page": "Página adicional de inicio de sesión",
9
+ "Clean": "Limpio",
9
10
  "Confirm Password": "confirmar Contraseña",
10
11
  "Confirm Password*": "Confirmar Contraseña*",
11
12
  "Create": "Crear",
@@ -69,4 +70,4 @@
69
70
  "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Todavía no tiene widgets seleccionados. Puede agregarlos haciendo clic en el signo más en la parte superior derecha.",
70
71
  "create": "crear",
71
72
  "create new": "crear nuevo"
72
- }
73
+ }
@@ -3,9 +3,10 @@
3
3
  "Actions": "Actes",
4
4
  "All": "Tous",
5
5
  "Are you sure?": "Es-tu sûr?",
6
- "Back": "Dos",
7
- "Back to Login": "Retour à la connexion",
8
- "Clean": "Faire le ménage",
6
+ "Back": "Dos",
7
+ "Back to Login": "Retour à la connexion",
8
+ "Additional login page": "Page de connexion supplémentaire",
9
+ "Clean": "Faire le ménage",
9
10
  "Confirm Password": "Confirmez le mot de passe",
10
11
  "Confirm Password*": "Confirmez le mot de passe*",
11
12
  "Create": "Créer",
@@ -69,4 +70,4 @@
69
70
  "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Vous n'avez pas encore de widgets sélectionnés. Vous pouvez les ajouter en cliquant sur le panneau Plus en haut à droite.",
70
71
  "create": "créer",
71
72
  "create new": "créer un nouveau"
72
- }
73
+ }
@@ -3,9 +3,10 @@
3
3
  "Actions": "कार्रवाई",
4
4
  "All": "सभी",
5
5
  "Are you sure?": "क्या आपको यकीन है?",
6
- "Back": "पीछे",
7
- "Back to Login": "लॉगिन पर वापस जाएं",
8
- "Clean": "साफ",
6
+ "Back": "पीछे",
7
+ "Back to Login": "लॉगिन पर वापस जाएं",
8
+ "Additional login page": "अतिरिक्त लॉगिन पृष्ठ",
9
+ "Clean": "साफ",
9
10
  "Confirm Password": "पासवर्ड की पुष्टि कीजिये",
10
11
  "Confirm Password*": "पासवर्ड की पुष्टि कीजिये*",
11
12
  "Create": "बनाएं",
@@ -69,4 +70,4 @@
69
70
  "You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "आपके पास अभी तक कोई विजेट नहीं है। आप उन्हें शीर्ष दाईं ओर प्लस साइन पर क्लिक करके जोड़ सकते हैं।",
70
71
  "create": "बनाएं",
71
72
  "create new": "नया निर्माण"
72
- }
73
+ }