adminizer 4.7.0-build.224 → 5.0.0-build.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 (307) hide show
  1. package/Readme.md +2 -1
  2. package/assets/add-De0wyF0A.js +1 -0
  3. package/assets/add-group-CMWybgIR.js +1 -0
  4. package/assets/add-user-BxP23daH.js +1 -0
  5. package/assets/app-CtWuWD5N.css +1 -0
  6. package/assets/app-layout-GYMU2HO1.js +1 -0
  7. package/assets/app.js +45 -50
  8. package/assets/catalog-tImW1BnS.js +6 -0
  9. package/assets/controls/chunks/_commonjsHelpers-C6fGbg64.js +6 -0
  10. package/assets/controls/chunks/index-CjiZ2FIa.js +93 -0
  11. package/assets/controls/chunks/jsx-runtime-jIxVPx5o.js +31 -0
  12. package/assets/controls/chunks/use-appearance-CFLOwiSX.js +38 -0
  13. package/assets/controls/chunks/use-window-size-BXgBKW65.js +19 -0
  14. package/assets/controls/chunks/vanilla-picker-Dg97NL4h.js +529 -0
  15. package/assets/controls/ckeditor.es.js +83683 -0
  16. package/assets/controls/handsontable.css +1 -0
  17. package/assets/controls/handsontable.es.js +70585 -0
  18. package/assets/controls/jsoneditor.css +1 -0
  19. package/assets/controls/jsoneditor.es.js +42082 -0
  20. package/assets/controls/leaflet.css +1 -0
  21. package/assets/controls/leaflet.es.js +10299 -0
  22. package/assets/controls/monaco.es.js +618 -0
  23. package/assets/controls/toast-ui.css +1 -0
  24. package/assets/controls/toast-ui.es.js +41797 -0
  25. package/assets/dashboard-CQ4atH3N.js +3 -0
  26. package/assets/debounce-BMmXVQ06.js +1 -0
  27. package/assets/history-BileQPEi.js +1 -0
  28. package/assets/init-user-8aUohVDq.js +1 -0
  29. package/assets/list-Pz_5mfSq.js +4 -0
  30. package/assets/login-CO4laf6m.js +1 -0
  31. package/assets/manifest.json +66 -602
  32. package/assets/media-manager-BDbpSSjH.js +6 -0
  33. package/assets/media-manager-BZPjl98I.css +1 -0
  34. package/assets/module-CQiOdgZN.js +1 -0
  35. package/assets/notification-BIyv1smE.js +20 -0
  36. package/assets/register-DBYIMXGQ.js +1 -0
  37. package/assets/ru-rYKdQbWF.js +1 -0
  38. package/assets/use-appearance-_EbbjHTh.js +1 -0
  39. package/assets/user-filters-list-Aq8CvCeh.js +1 -0
  40. package/assets/welcome-DxhWYzUL.js +1 -0
  41. package/controllers/add.d.ts +1 -1
  42. package/controllers/addGroup.js +3 -3
  43. package/controllers/addUser.js +3 -3
  44. package/controllers/catalog/Catalog.d.ts +1 -1
  45. package/controllers/catalog/Catalog.js +2 -1
  46. package/controllers/catalog/FrontendCatalogAdapter.d.ts +2 -12
  47. package/controllers/catalog/FrontendCatalogAdapter.js +3 -16
  48. package/controllers/catalog/FrontentCatalogAdapter.d.ts +2 -12
  49. package/controllers/catalog/FrontentCatalogAdapter.js +0 -16
  50. package/controllers/edit.js +6 -11
  51. package/controllers/editGroup.d.ts +1 -1
  52. package/controllers/editGroup.js +3 -3
  53. package/controllers/editUser.d.ts +1 -1
  54. package/controllers/editUser.js +3 -3
  55. package/controllers/feed.js +1 -1
  56. package/controllers/filter-fields/columns.js +1 -1
  57. package/controllers/filter-fields/getAllUserFilters.js +2 -2
  58. package/controllers/filter-fields/groups.js +2 -2
  59. package/controllers/filter-fields/savedFilters.js +1 -1
  60. package/controllers/history-actions/HistoryController.js +1 -1
  61. package/controllers/initUser.js +2 -2
  62. package/controllers/list.d.ts +1 -1
  63. package/controllers/login.d.ts +1 -1
  64. package/controllers/login.js +3 -3
  65. package/controllers/media-manager/ThumbController.js +2 -2
  66. package/controllers/media-manager/mediaManagerApi.js +13 -15
  67. package/controllers/register.d.ts +1 -1
  68. package/controllers/register.js +5 -5
  69. package/controllers/remove.d.ts +1 -1
  70. package/controllers/userApiKey.js +2 -2
  71. package/controllers/view.d.ts +1 -1
  72. package/controllers/view.js +5 -5
  73. package/controllers/widgets/Action.js +5 -2
  74. package/controllers/widgets/filterInfo.js +1 -1
  75. package/files/favicon.png +0 -0
  76. package/helpers/accessRightsHelper.d.ts +6 -4
  77. package/helpers/accessRightsHelper.js +13 -0
  78. package/helpers/diffHelpers.js +1 -1
  79. package/helpers/fieldsHelper.d.ts +1 -1
  80. package/helpers/fieldsHelper.js +8 -4
  81. package/helpers/filterDatetimeHelper.d.ts +1 -1
  82. package/helpers/inertiaAddHelper.d.ts +6 -5
  83. package/helpers/inertiaAddHelper.js +45 -37
  84. package/helpers/inertiaAutHelper.js +5 -5
  85. package/helpers/inertiaGroupHelper.d.ts +4 -4
  86. package/helpers/inertiaMenuHelper.js +1 -1
  87. package/helpers/inertiaUserHelper.d.ts +3 -3
  88. package/helpers/inertiaUserHelper.js +1 -1
  89. package/helpers/menuHelper.d.ts +2 -2
  90. package/index.d.ts +19 -6
  91. package/index.js +19 -6
  92. package/interfaces/adminpanelConfig.d.ts +10 -33
  93. package/interfaces/global.d.ts +10 -15
  94. package/interfaces/listQueryBuilder.d.ts +1 -1
  95. package/lib/Adminizer.d.ts +25 -2
  96. package/lib/Adminizer.js +124 -50
  97. package/lib/DataAccessor.d.ts +9 -5
  98. package/lib/DataAccessor.js +89 -42
  99. package/lib/access-rights/AccessRightsHandler.d.ts +17 -0
  100. package/lib/access-rights/AccessRightsHandler.js +63 -0
  101. package/lib/ai-assistant/AbstractAiModelService.d.ts +5 -8
  102. package/lib/ai-assistant/AbstractAiModelService.js +3 -14
  103. package/lib/ai-assistant/AiAssistantHandler.d.ts +2 -2
  104. package/lib/app-manager/AdminizerApp.d.ts +228 -0
  105. package/lib/app-manager/AdminizerApp.js +17 -0
  106. package/lib/app-manager/AppManager.d.ts +18 -0
  107. package/lib/app-manager/AppManager.js +537 -0
  108. package/lib/app-manager/AssetHandler.d.ts +17 -0
  109. package/lib/app-manager/AssetHandler.js +67 -0
  110. package/lib/app-manager/ConfigLayerHandler.d.ts +18 -0
  111. package/lib/app-manager/ConfigLayerHandler.js +119 -0
  112. package/lib/app-manager/ControllerHandler.d.ts +25 -0
  113. package/lib/app-manager/ControllerHandler.js +140 -0
  114. package/lib/catalog/AbstractCatalog.d.ts +28 -19
  115. package/lib/catalog/AbstractCatalog.js +41 -10
  116. package/lib/catalog/CatalogHandler.d.ts +13 -0
  117. package/lib/catalog/CatalogHandler.js +48 -2
  118. package/lib/catalog/CatalogTemplateComponentHandler.d.ts +23 -0
  119. package/lib/catalog/CatalogTemplateComponentHandler.js +59 -0
  120. package/lib/controls/Control.d.ts +17 -0
  121. package/lib/controls/Control.js +1 -0
  122. package/lib/controls/ControlsHandler.d.ts +5 -6
  123. package/lib/controls/ControlsHandler.js +0 -13
  124. package/lib/controls/codeEditor/MonacoEditor.d.ts +3 -4
  125. package/lib/controls/codeEditor/MonacoEditor.js +13 -8
  126. package/lib/controls/geojsoneditor/GeoEditor.d.ts +3 -4
  127. package/lib/controls/geojsoneditor/GeoEditor.js +14 -9
  128. package/lib/controls/jsoneditor/JsonEditor.d.ts +5 -6
  129. package/lib/controls/jsoneditor/JsonEditor.js +14 -13
  130. package/lib/controls/markdown/ToastUiEditor.d.ts +5 -6
  131. package/lib/controls/markdown/ToastUiEditor.js +14 -13
  132. package/lib/controls/table/Handsontable.d.ts +5 -6
  133. package/lib/controls/table/Handsontable.js +14 -13
  134. package/lib/controls/wysiwyg/CKeditor.d.ts +5 -6
  135. package/lib/controls/wysiwyg/CKeditor.js +14 -13
  136. package/lib/filters/ConditionValidator.d.ts +1 -1
  137. package/lib/filters/FilterService.d.ts +18 -18
  138. package/lib/filters/FilterService.js +11 -11
  139. package/lib/history-actions/AbstractHistoryAdapter.d.ts +14 -14
  140. package/lib/history-actions/AbstractHistoryAdapter.js +5 -6
  141. package/lib/history-actions/DefaultHistoryAdapter.d.ts +7 -7
  142. package/lib/history-actions/DefaultHistoryAdapter.js +2 -2
  143. package/lib/list-query-builder/ListQueryBuilder.d.ts +1 -1
  144. package/lib/media-manager/AbstractMediaManager.d.ts +14 -3
  145. package/lib/media-manager/AbstractMediaManager.js +16 -5
  146. package/lib/media-manager/MediaManagerHandler.d.ts +3 -0
  147. package/lib/media-manager/MediaManagerHandler.js +30 -5
  148. package/lib/media-manager/Thumb.js +7 -13
  149. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +6 -4
  150. package/lib/media-manager/helpers/MediaManagerHelper.js +18 -18
  151. package/lib/model/AbstractModel.d.ts +9 -5
  152. package/lib/model/AbstractModel.js +9 -13
  153. package/lib/model/InternalModelAccessFactory.js +9 -10
  154. package/lib/model/ModelHandler.d.ts +45 -7
  155. package/lib/model/ModelHandler.js +168 -11
  156. package/lib/model/adapter/sequelize.d.ts +2 -4
  157. package/lib/model/adapter/sequelize.js +16 -193
  158. package/lib/model/adapter/typeorm.d.ts +2 -4
  159. package/lib/model/adapter/typeorm.js +2 -35
  160. package/lib/notifications/AbstractNotificationService.d.ts +9 -9
  161. package/lib/notifications/AbstractNotificationService.js +8 -8
  162. package/lib/notifications/GeneralNotificationService.js +1 -1
  163. package/lib/notifications/SystemNotificationService.js +1 -1
  164. package/lib/ui-i18n/uiTranslationKeys.d.ts +1 -1
  165. package/lib/ui-i18n/uiTranslationKeys.js +1 -0
  166. package/lib/widgets/abstractCustom.d.ts +5 -2
  167. package/lib/widgets/abstractCustom.js +4 -0
  168. package/lib/widgets/widgetHandler.d.ts +5 -2
  169. package/lib/widgets/widgetHandler.js +60 -14
  170. package/models/{FilterAP.d.ts → Filter.d.ts} +4 -70
  171. package/models/Filter.js +1 -0
  172. package/models/FilterColumn.d.ts +10 -0
  173. package/models/FilterColumn.js +1 -0
  174. package/models/Group.d.ts +8 -0
  175. package/models/Group.js +1 -0
  176. package/models/HistoryActions.d.ts +14 -0
  177. package/models/HistoryActions.js +1 -0
  178. package/models/MediaManagerAP.d.ts +2 -54
  179. package/models/MediaManagerAP.js +1 -51
  180. package/models/MediaManagerAssociationsAP.d.ts +1 -35
  181. package/models/MediaManagerAssociationsAP.js +1 -33
  182. package/models/MediaManagerMetaAP.d.ts +2 -30
  183. package/models/MediaManagerMetaAP.js +1 -27
  184. package/models/Notification.d.ts +13 -0
  185. package/models/Notification.js +1 -0
  186. package/models/User.d.ts +23 -0
  187. package/models/User.js +1 -0
  188. package/models/UserNotification.d.ts +7 -0
  189. package/models/UserNotification.js +1 -0
  190. package/package.json +25 -30
  191. package/services/FeedService.d.ts +5 -5
  192. package/services/FeedService.js +1 -1
  193. package/system/Router.js +2 -10
  194. package/system/bindAccessRights.js +1 -1
  195. package/system/bindAuthorization.js +2 -2
  196. package/system/bindControls.js +7 -6
  197. package/system/bindDashboardWidgets.js +3 -2
  198. package/system/bindDev.js +1 -1
  199. package/system/bindHistory.d.ts +1 -1
  200. package/system/bindHistory.js +1 -1
  201. package/system/bindInertia.js +0 -6
  202. package/system/bindMediaManager.js +4 -17
  203. package/system/bindNotifications.d.ts +1 -1
  204. package/system/bindNotifications.js +1 -1
  205. package/system/bindReqFunctions.d.ts +1 -0
  206. package/system/bindReqFunctions.js +20 -3
  207. package/system/buildInternalModelAccess.js +2 -15
  208. package/system/defaults.js +5 -10
  209. package/system/systemModelContracts.d.ts +22 -0
  210. package/system/systemModelContracts.js +155 -0
  211. package/system/validateSystemModels.d.ts +2 -0
  212. package/system/validateSystemModels.js +101 -0
  213. package/translations/ar.json +2 -1
  214. package/translations/cn.json +2 -1
  215. package/translations/de.json +2 -1
  216. package/translations/en.json +1 -0
  217. package/translations/es.json +2 -1
  218. package/translations/fr.json +2 -1
  219. package/translations/hi.json +2 -1
  220. package/translations/jp.json +2 -1
  221. package/translations/ko.json +2 -1
  222. package/translations/pt.json +2 -1
  223. package/translations/ru.json +2 -1
  224. package/translations/ua.json +2 -1
  225. package/translations/uz.json +2 -1
  226. package/translations/vi.json +2 -1
  227. package/assets/RelationDialogStack-DhThUMep.js +0 -20
  228. package/assets/add-group-L8lMigab.js +0 -1
  229. package/assets/add-group-form-o7F6t6qW.js +0 -1
  230. package/assets/add-user-BE4-TNJw.js +0 -1
  231. package/assets/add-user-form-BP_8TjxN.js +0 -1
  232. package/assets/add-w398ZkhF.js +0 -1
  233. package/assets/app-C7J5ccrI.css +0 -1
  234. package/assets/app-layout-Bg455MIY.js +0 -1
  235. package/assets/app-shell-BT2kF0We.js +0 -1
  236. package/assets/app-sidebar-CZfPUXck.js +0 -1
  237. package/assets/app-sidebar-header-UVcKhNm6.js +0 -1
  238. package/assets/breadcrumbs-CrqIBT84.js +0 -1
  239. package/assets/catalog-btkCCwiv.js +0 -6
  240. package/assets/dashboard-Bvasc1cr.js +0 -3
  241. package/assets/date-picker-kxQWOxHk.js +0 -1
  242. package/assets/del-modal-C39LR5aQ.js +0 -1
  243. package/assets/dynamic-controls-DyPP5sTC.js +0 -1
  244. package/assets/geo-json-CGNQFl6J.js +0 -1
  245. package/assets/handsontable-Dv59QFH5.js +0 -336
  246. package/assets/history-DwKR8MPu.js +0 -1
  247. package/assets/home-BrtAkCRj.js +0 -2
  248. package/assets/icon-DpUVVHmK.js +0 -1
  249. package/assets/init-user-8PiKR1zX.js +0 -1
  250. package/assets/input-error-Cbt-Y3Fj.js +0 -1
  251. package/assets/jsoneditor-CiPXPMho.js +0 -3869
  252. package/assets/list-DGsL_qii.js +0 -4
  253. package/assets/login-Br_FcBU_.js +0 -1
  254. package/assets/material-icon-DOkM71fv.js +0 -1
  255. package/assets/module-EgfgIEhF.js +0 -1
  256. package/assets/monaco-ompgKQ3_.js +0 -11
  257. package/assets/nav-footer-DzLwfBAE.js +0 -1
  258. package/assets/nav-main-CSEbjYgs.js +0 -1
  259. package/assets/nav-user-DJ0hfhfH.js +0 -1
  260. package/assets/notification-B19ZLro7.js +0 -20
  261. package/assets/pagination-render-8GvJxq55.js +0 -1
  262. package/assets/register-CZzIeT2G.js +0 -1
  263. package/assets/ru-1NdRIQNV.js +0 -1
  264. package/assets/theme-switcher-CBbEj1u-.js +0 -1
  265. package/assets/toast-editor-DwVqd1rz.js +0 -668
  266. package/assets/user-filters-list-7Im79QyS.js +0 -1
  267. package/assets/user-info-YiU17Mmy.js +0 -1
  268. package/assets/user-menu-content-gdpNF5-8.js +0 -1
  269. package/assets/vanilla-picker-B3LgXoKV.js +0 -2
  270. package/assets/vendor-l0sNRNKZ.js +0 -1
  271. package/assets/welcome-nT0eFWHb.js +0 -1
  272. package/controllers/navigation/edit.d.ts +0 -1
  273. package/controllers/navigation/edit.js +0 -8
  274. package/lib/ai-assistant/DummyAiModelService.d.ts +0 -8
  275. package/lib/ai-assistant/DummyAiModelService.js +0 -14
  276. package/lib/ai-assistant/OpenAiModelService.d.ts +0 -24
  277. package/lib/ai-assistant/OpenAiModelService.js +0 -184
  278. package/lib/catalog/Navigation.d.ts +0 -49
  279. package/lib/catalog/Navigation.js +0 -492
  280. package/lib/controls/AbstractControls.d.ts +0 -30
  281. package/lib/controls/AbstractControls.js +0 -14
  282. package/lib/media-manager/DefaultMediaManager.d.ts +0 -20
  283. package/lib/media-manager/DefaultMediaManager.js +0 -127
  284. package/lib/media-manager/Items.d.ts +0 -50
  285. package/lib/media-manager/Items.js +0 -296
  286. package/models/FilterAP.js +0 -68
  287. package/models/FilterColumnAP.d.ts +0 -32
  288. package/models/FilterColumnAP.js +0 -21
  289. package/models/GroupAP.d.ts +0 -31
  290. package/models/GroupAP.js +0 -22
  291. package/models/HistoryActionsAP.d.ts +0 -56
  292. package/models/HistoryActionsAP.js +0 -42
  293. package/models/NavigationAP.d.ts +0 -22
  294. package/models/NavigationAP.js +0 -16
  295. package/models/NotificationAP.d.ts +0 -44
  296. package/models/NotificationAP.js +0 -30
  297. package/models/UserAP.d.ts +0 -81
  298. package/models/UserAP.js +0 -57
  299. package/models/UserNotificationAP.d.ts +0 -26
  300. package/models/UserNotificationAP.js +0 -18
  301. package/system/bindAiAssistant.d.ts +0 -2
  302. package/system/bindAiAssistant.js +0 -30
  303. package/system/bindModels.d.ts +0 -2
  304. package/system/bindModels.js +0 -48
  305. package/system/bindNavigation.d.ts +0 -2
  306. package/system/bindNavigation.js +0 -38
  307. /package/assets/{RelationDialogStack-B00Ot5qS.css → controls/ckeditor.css} +0 -0
@@ -0,0 +1 @@
1
+ import{be as d,ac as l,ad as u,ae as o,af as v}from"./app.js";function m(t,e,n){const i=d(t,n),r=d(e,n);return+i==+r}function s(t,e){if(t.one!==void 0&&e===1)return t.one;const n=e%10,i=e%100;return n===1&&i!==11?t.singularNominative.replace("{{count}}",String(e)):n>=2&&n<=4&&(i<10||i>20)?t.singularGenitive.replace("{{count}}",String(e)):t.pluralGenitive.replace("{{count}}",String(e))}function a(t){return(e,n)=>n?.addSuffix?n.comparison&&n.comparison>0?t.future?s(t.future,e):"через "+s(t.regular,e):t.past?s(t.past,e):s(t.regular,e)+" назад":s(t.regular,e)}const f={lessThanXSeconds:a({regular:{one:"меньше секунды",singularNominative:"меньше {{count}} секунды",singularGenitive:"меньше {{count}} секунд",pluralGenitive:"меньше {{count}} секунд"},future:{one:"меньше, чем через секунду",singularNominative:"меньше, чем через {{count}} секунду",singularGenitive:"меньше, чем через {{count}} секунды",pluralGenitive:"меньше, чем через {{count}} секунд"}}),xSeconds:a({regular:{singularNominative:"{{count}} секунда",singularGenitive:"{{count}} секунды",pluralGenitive:"{{count}} секунд"},past:{singularNominative:"{{count}} секунду назад",singularGenitive:"{{count}} секунды назад",pluralGenitive:"{{count}} секунд назад"},future:{singularNominative:"через {{count}} секунду",singularGenitive:"через {{count}} секунды",pluralGenitive:"через {{count}} секунд"}}),halfAMinute:(t,e)=>e?.addSuffix?e.comparison&&e.comparison>0?"через полминуты":"полминуты назад":"полминуты",lessThanXMinutes:a({regular:{one:"меньше минуты",singularNominative:"меньше {{count}} минуты",singularGenitive:"меньше {{count}} минут",pluralGenitive:"меньше {{count}} минут"},future:{one:"меньше, чем через минуту",singularNominative:"меньше, чем через {{count}} минуту",singularGenitive:"меньше, чем через {{count}} минуты",pluralGenitive:"меньше, чем через {{count}} минут"}}),xMinutes:a({regular:{singularNominative:"{{count}} минута",singularGenitive:"{{count}} минуты",pluralGenitive:"{{count}} минут"},past:{singularNominative:"{{count}} минуту назад",singularGenitive:"{{count}} минуты назад",pluralGenitive:"{{count}} минут назад"},future:{singularNominative:"через {{count}} минуту",singularGenitive:"через {{count}} минуты",pluralGenitive:"через {{count}} минут"}}),aboutXHours:a({regular:{singularNominative:"около {{count}} часа",singularGenitive:"около {{count}} часов",pluralGenitive:"около {{count}} часов"},future:{singularNominative:"приблизительно через {{count}} час",singularGenitive:"приблизительно через {{count}} часа",pluralGenitive:"приблизительно через {{count}} часов"}}),xHours:a({regular:{singularNominative:"{{count}} час",singularGenitive:"{{count}} часа",pluralGenitive:"{{count}} часов"}}),xDays:a({regular:{singularNominative:"{{count}} день",singularGenitive:"{{count}} дня",pluralGenitive:"{{count}} дней"}}),aboutXWeeks:a({regular:{singularNominative:"около {{count}} недели",singularGenitive:"около {{count}} недель",pluralGenitive:"около {{count}} недель"},future:{singularNominative:"приблизительно через {{count}} неделю",singularGenitive:"приблизительно через {{count}} недели",pluralGenitive:"приблизительно через {{count}} недель"}}),xWeeks:a({regular:{singularNominative:"{{count}} неделя",singularGenitive:"{{count}} недели",pluralGenitive:"{{count}} недель"}}),aboutXMonths:a({regular:{singularNominative:"около {{count}} месяца",singularGenitive:"около {{count}} месяцев",pluralGenitive:"около {{count}} месяцев"},future:{singularNominative:"приблизительно через {{count}} месяц",singularGenitive:"приблизительно через {{count}} месяца",pluralGenitive:"приблизительно через {{count}} месяцев"}}),xMonths:a({regular:{singularNominative:"{{count}} месяц",singularGenitive:"{{count}} месяца",pluralGenitive:"{{count}} месяцев"}}),aboutXYears:a({regular:{singularNominative:"около {{count}} года",singularGenitive:"около {{count}} лет",pluralGenitive:"около {{count}} лет"},future:{singularNominative:"приблизительно через {{count}} год",singularGenitive:"приблизительно через {{count}} года",pluralGenitive:"приблизительно через {{count}} лет"}}),xYears:a({regular:{singularNominative:"{{count}} год",singularGenitive:"{{count}} года",pluralGenitive:"{{count}} лет"}}),overXYears:a({regular:{singularNominative:"больше {{count}} года",singularGenitive:"больше {{count}} лет",pluralGenitive:"больше {{count}} лет"},future:{singularNominative:"больше, чем через {{count}} год",singularGenitive:"больше, чем через {{count}} года",pluralGenitive:"больше, чем через {{count}} лет"}}),almostXYears:a({regular:{singularNominative:"почти {{count}} год",singularGenitive:"почти {{count}} года",pluralGenitive:"почти {{count}} лет"},future:{singularNominative:"почти через {{count}} год",singularGenitive:"почти через {{count}} года",pluralGenitive:"почти через {{count}} лет"}})},p=(t,e,n)=>f[t](e,n),h={full:"EEEE, d MMMM y 'г.'",long:"d MMMM y 'г.'",medium:"d MMM y 'г.'",short:"dd.MM.y"},G={full:"H:mm:ss zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},w={any:"{{date}}, {{time}}"},b={date:l({formats:h,defaultWidth:"full"}),time:l({formats:G,defaultWidth:"full"}),dateTime:l({formats:w,defaultWidth:"any"})},c=["воскресенье","понедельник","вторник","среду","четверг","пятницу","субботу"];function y(t){const e=c[t];switch(t){case 0:return"'в прошлое "+e+" в' p";case 1:case 2:case 4:return"'в прошлый "+e+" в' p";case 3:case 5:case 6:return"'в прошлую "+e+" в' p"}}function g(t){const e=c[t];return t===2?"'во "+e+" в' p":"'в "+e+" в' p"}function P(t){const e=c[t];switch(t){case 0:return"'в следующее "+e+" в' p";case 1:case 2:case 4:return"'в следующий "+e+" в' p";case 3:case 5:case 6:return"'в следующую "+e+" в' p"}}const N={lastWeek:(t,e,n)=>{const i=t.getDay();return m(t,e,n)?g(i):y(i)},yesterday:"'вчера в' p",today:"'сегодня в' p",tomorrow:"'завтра в' p",nextWeek:(t,e,n)=>{const i=t.getDay();return m(t,e,n)?g(i):P(i)},other:"P"},W=(t,e,n,i)=>{const r=N[t];return typeof r=="function"?r(e,n,i):r},M={narrow:["до н.э.","н.э."],abbreviated:["до н. э.","н. э."],wide:["до нашей эры","нашей эры"]},k={narrow:["1","2","3","4"],abbreviated:["1-й кв.","2-й кв.","3-й кв.","4-й кв."],wide:["1-й квартал","2-й квартал","3-й квартал","4-й квартал"]},x={narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],wide:["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"]},D={narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","мар.","апр.","мая","июн.","июл.","авг.","сент.","окт.","нояб.","дек."],wide:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]},F={narrow:["В","П","В","С","Ч","П","С"],short:["вс","пн","вт","ср","чт","пт","сб"],abbreviated:["вск","пнд","втр","срд","чтв","птн","суб"],wide:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]},S={narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утро",afternoon:"день",evening:"вечер",night:"ночь"}},z={narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утра",afternoon:"дня",evening:"вечера",night:"ночи"}},V=(t,e)=>{const n=Number(t),i=e?.unit;let r;return i==="date"?r="-е":i==="week"||i==="minute"||i==="second"?r="-я":r="-й",n+r},L={ordinalNumber:V,era:u({values:M,defaultWidth:"wide"}),quarter:u({values:k,defaultWidth:"wide",argumentCallback:t=>t-1}),month:u({values:x,defaultWidth:"wide",formattingValues:D,defaultFormattingWidth:"wide"}),day:u({values:F,defaultWidth:"wide"}),dayPeriod:u({values:S,defaultWidth:"any",formattingValues:z,defaultFormattingWidth:"wide"})},X=/^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i,E=/\d+/i,H={narrow:/^((до )?н\.?\s?э\.?)/i,abbreviated:/^((до )?н\.?\s?э\.?)/i,wide:/^(до нашей эры|нашей эры|наша эра)/i},O={any:[/^д/i,/^н/i]},T={narrow:/^[1234]/i,abbreviated:/^[1234](-?[ыои]?й?)? кв.?/i,wide:/^[1234](-?[ыои]?й?)? квартал/i},C={any:[/1/i,/2/i,/3/i,/4/i]},R={narrow:/^[яфмаисонд]/i,abbreviated:/^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\.?/i,wide:/^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i},Y={narrow:[/^я/i,/^ф/i,/^м/i,/^а/i,/^м/i,/^и/i,/^и/i,/^а/i,/^с/i,/^о/i,/^н/i,/^я/i],any:[/^я/i,/^ф/i,/^мар/i,/^ап/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^ав/i,/^с/i,/^о/i,/^н/i,/^д/i]},q={narrow:/^[впсч]/i,short:/^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,abbreviated:/^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,wide:/^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i},Q={narrow:[/^в/i,/^п/i,/^в/i,/^с/i,/^ч/i,/^п/i,/^с/i],any:[/^в[ос]/i,/^п[он]/i,/^в/i,/^ср/i,/^ч/i,/^п[ят]/i,/^с[уб]/i]},A={narrow:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,abbreviated:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,wide:/^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i},I={any:{am:/^дп/i,pm:/^пп/i,midnight:/^полн/i,noon:/^полд/i,morning:/^у/i,afternoon:/^д[ен]/i,evening:/^в/i,night:/^н/i}},_={ordinalNumber:v({matchPattern:X,parsePattern:E,valueCallback:t=>parseInt(t,10)}),era:o({matchPatterns:H,defaultMatchWidth:"wide",parsePatterns:O,defaultParseWidth:"any"}),quarter:o({matchPatterns:T,defaultMatchWidth:"wide",parsePatterns:C,defaultParseWidth:"any",valueCallback:t=>t+1}),month:o({matchPatterns:R,defaultMatchWidth:"wide",parsePatterns:Y,defaultParseWidth:"any"}),day:o({matchPatterns:q,defaultMatchWidth:"wide",parsePatterns:Q,defaultParseWidth:"any"}),dayPeriod:o({matchPatterns:A,defaultMatchWidth:"wide",parsePatterns:I,defaultParseWidth:"any"})},B={code:"ru",formatDistance:p,formatLong:b,formatRelative:W,localize:L,match:_,options:{weekStartsOn:1,firstWeekContainsDate:1}};export{B as r};
@@ -0,0 +1 @@
1
+ import{r as c}from"./app.js";const u=()=>typeof window>"u"?!1:window.matchMedia("(prefers-color-scheme: dark)").matches,h=(e,a,o=365)=>{if(typeof document>"u")return;const s=o*24*60*60;document.cookie=`${e}=${a};path=/;max-age=${s};SameSite=Lax`},r=e=>{const a=e==="dark"||e==="system"&&u();document.documentElement.classList.toggle("dark",a)},g=()=>typeof window>"u"?null:window.matchMedia("(prefers-color-scheme: dark)"),l=()=>{const e=localStorage.getItem("appearance");r(e||"light")};function w(){const e=localStorage.getItem("appearance")||"system";r(e),g()?.addEventListener("change",l)}function v(){const[e,a]=c.useState("system"),[o,s]=c.useState(!1),p=c.useCallback(n=>{s(!0),a(n),localStorage.setItem("appearance",n),h("appearance",n),r(n),setTimeout(()=>{s(!1),window.dispatchEvent(new Event("appearanceChanged"))},0)},[]);return c.useEffect(()=>{const n=localStorage.getItem("appearance");p(n||"system");const i=t=>{if(t.key==="appearance"){const m=t.newValue;a(m),r(m)}},d=()=>{const t=localStorage.getItem("appearance");a(t),r(t)};return window.addEventListener("storage",i),window.addEventListener("appearanceChanged",d),()=>{window.removeEventListener("storage",i),window.removeEventListener("appearanceChanged",d),g()?.removeEventListener("change",l)}},[p]),{appearance:e,updateAppearance:p,isThemeChanging:o}}export{w as i,v as u};
@@ -0,0 +1 @@
1
+ import{j as e,G as H,r as t,p as U,B as V,aW as T,d as z,S as Y,i as $,k as q,l as Q,m as A,am as W,an as X,ao as v,ap as j,aq as Z,ar as x,aR as b,N as p,aS as _,aQ as D}from"./app.js";import{A as J}from"./app-layout-GYMU2HO1.js";import"./use-appearance-_EbbjHTh.js";const K=50,ee=[];function se({visibility:o,groupNames:d,t:l}){switch(o){case"private":return e.jsxs(p,{variant:"outline",className:"gap-1 text-xs font-normal",children:[e.jsx(D,{className:"h-3 w-3"}),l("Private")]});case"public":return e.jsxs(p,{variant:"outline",className:"gap-1 text-xs font-normal border-emerald-500/50 text-emerald-600 dark:text-emerald-400",children:[e.jsx(_,{className:"h-3 w-3"}),l("Public")]});case"groups":return e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsxs(p,{variant:"outline",className:"gap-1 text-xs font-normal border-blue-500/50 text-blue-600 dark:text-blue-400",children:[e.jsx(b,{className:"h-3 w-3"}),l("Groups")]}),d&&d.map((a,u)=>e.jsx("span",{className:"text-xs text-muted-foreground",children:a},u))]});default:return e.jsx(p,{variant:"outline",className:"text-xs font-normal",children:o})}}function ae({title:o,models:d,apiEndpoint:l}){const{t:a}=H(),[u,N]=t.useState([]),[I,E]=t.useState(d),[r,g]=t.useState(""),[m,w]=t.useState("all"),[S,y]=t.useState(0),[k,M]=t.useState(!1),[h,C]=t.useState(!1),[F,R]=t.useState(!0),L=t.useRef(null),f=t.useCallback(async(s=!1)=>{if(h)return;const n=s?0:S;s&&(N([]),y(0)),C(!0);try{const c={offset:n,limit:K};r&&(c.search=r),m!=="all"&&(c.modelName=m);const i=(await U.get(l,{params:c})).data;N(s?i.filters:G=>[...G,...i.filters]),M(i.hasMore),y(n+i.filters.length),i.models&&i.models.length>0&&E(i.models)}catch(c){console.error("Failed to load filters:",c)}finally{C(!1),R(!1)}},[l,h,S,r,m]);t.useEffect(()=>{f(!0)},[]),t.useEffect(()=>{const s=setTimeout(()=>{f(!0)},300);return()=>clearTimeout(s)},[r]),t.useEffect(()=>{f(!0)},[m]),t.useEffect(()=>{const s=new IntersectionObserver(c=>{c[0].isIntersecting&&k&&!h&&f(!1)},{threshold:.1}),n=L.current;return n&&s.observe(n),()=>{n&&s.unobserve(n)}},[k,h,f]);const B=s=>{window.location.href=`/adminizer/model/${s.modelName}?filterId=${s.id}`},O=()=>{g("")},P=r||m!=="all";return F?e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx("p",{className:"text-muted-foreground",children:a("Loading...")})}):e.jsxs("div",{className:"flex flex-col gap-4 p-4 h-full",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-2xl font-semibold",children:o}),P&&e.jsxs(V,{variant:"destructive",size:"sm",onClick:()=>{g(""),w("all")},className:"gap-1.5",children:[e.jsx(T,{className:"h-4 w-4"}),a("Reset")]})]}),e.jsxs("div",{className:"flex gap-3 items-center",children:[e.jsxs("div",{className:"relative flex-1 max-w-sm",children:[e.jsx(z,{placeholder:a("Search filters..."),value:r,onChange:s=>g(s.target.value)}),r&&e.jsx("button",{className:"absolute right-0 top-0 h-full w-8 px-0 text-destructive cursor-pointer",onClick:O,children:e.jsx(T,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"w-52",children:e.jsxs(Y,{value:m,onValueChange:w,children:[e.jsx($,{children:e.jsx(q,{placeholder:a("All models")})}),e.jsxs(Q,{children:[e.jsx(A,{value:"all",children:a("All models")}),I.map(s=>e.jsx(A,{value:s.name,children:s.title},s.name))]})]})}),e.jsxs("span",{className:"text-sm text-muted-foreground ml-auto",children:[u.length," ",a("found")]})]}),e.jsx("div",{className:"rounded-md border",children:e.jsxs(W,{wrapperHeight:"overflow-y-auto h-[calc(100svh-300px)]",children:[e.jsx(X,{children:e.jsxs(v,{children:[e.jsx(j,{className:"w-[40%]",children:a("Filter Name")}),e.jsx(j,{className:"w-[20%]",children:a("Model")}),e.jsx(j,{className:"w-[15%]",children:a("Visibility")}),e.jsx(j,{className:"w-[10%]",children:a("API access (feed)")}),e.jsx(j,{className:"w-[15%]",children:a("Owner")})]})}),e.jsx(Z,{children:u.length===0?e.jsx(v,{children:e.jsx(x,{colSpan:5,className:"text-center text-muted-foreground py-12",children:e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(b,{className:"h-8 w-8 text-muted-foreground/50"}),e.jsx("p",{children:a("No filters found")})]})})}):u.map(s=>e.jsxs(v,{className:"cursor-pointer group",onClick:()=>B(s),children:[e.jsx(x,{className:"font-medium",children:e.jsx("span",{className:"text-primary group-hover:underline",children:s.name})}),e.jsx(x,{className:"text-muted-foreground",children:s.modelTitle}),e.jsx(x,{children:e.jsx(se,{visibility:s.visibility,groupNames:s.groupNames,t:a})}),e.jsx(x,{className:"text-sm text-muted-foreground",children:s.apiEnabled?a("Yes"):a("No")}),e.jsx(x,{className:"text-sm text-muted-foreground",children:e.jsx("div",{className:"flex items-center gap-1.5",children:s.isOwner?e.jsxs(e.Fragment,{children:[e.jsx(b,{className:"h-3.5 w-3.5 text-muted-foreground/50"}),a("You")]}):e.jsx(e.Fragment,{children:s.ownerName||a("Unknown")})})})]},s.id))})]})}),e.jsx("div",{ref:L,className:"h-8 flex items-center justify-center",children:h&&!F&&e.jsx("p",{className:"text-sm text-muted-foreground",children:a("Loading more...")})})]})}function ce({title:o,models:d,apiEndpoint:l}){return e.jsx(J,{breadcrumbs:ee,className:"overflow-auto h-[calc(100svh-16px)]",children:e.jsx(ae,{title:o,models:d,apiEndpoint:l})})}export{ce as default};
@@ -0,0 +1 @@
1
+ import{u as t,j as e}from"./app.js";import{A as r}from"./app-layout-GYMU2HO1.js";import"./use-appearance-_EbbjHTh.js";const l=[];function x(){const s=t();return e.jsx(r,{breadcrumbs:l,children:e.jsxs("div",{className:"flex h-full flex-1 flex-col gap-4 rounded-xl p-4",children:[s.props.title&&e.jsx("div",{className:"text-3xl mb-8",children:s.props.title}),e.jsx("div",{className:"text-3xl mb-8",children:"Adminizer"}),s.props.text&&e.jsx("div",{dangerouslySetInnerHTML:{__html:s.props.text}})]})})}export{x as default};
@@ -1 +1 @@
1
- export default function add(req: ReqType, res: ResType): Promise<import("express").Response<any, Record<string, any>>>;
1
+ export default function add(req: ReqType, res: ResType): Promise<ResType>;
@@ -4,8 +4,8 @@ import { inertiaGroupHelper } from "../helpers/inertiaGroupHelper.js";
4
4
  export default async function addGroup(req, res) {
5
5
  let modelResource = ControllerHelper.findModelResource(req);
6
6
  const internalUsers = req.adminizer.modelHandler.internal("users");
7
- const userModel = internalUsers.get("UserAP");
8
- const groupModel = internalUsers.get("GroupAP");
7
+ const userModel = internalUsers.get("User");
8
+ const groupModel = internalUsers.get("Group");
9
9
  let users;
10
10
  try {
11
11
  users = await userModel.find({ where: { isAdministrator: false } });
@@ -46,7 +46,7 @@ export default async function addGroup(req, res) {
46
46
  });
47
47
  Adminizer.log.debug(`A new group was created: `, group);
48
48
  req.flash.setFlashMessage('success', 'A new group was created !');
49
- return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/groupap`);
49
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/Group`);
50
50
  }
51
51
  catch (e) {
52
52
  Adminizer.log.error(e);
@@ -6,8 +6,8 @@ import { generateUserApiKey } from "../helpers/apiKeyHelper.js";
6
6
  export default async function (req, res) {
7
7
  let modelResource = ControllerHelper.findModelResource(req);
8
8
  const internalUsers = req.adminizer.modelHandler.internal("users");
9
- const groupModel = internalUsers.get("GroupAP");
10
- const userModel = internalUsers.get("UserAP");
9
+ const groupModel = internalUsers.get("Group");
10
+ const userModel = internalUsers.get("User");
11
11
  let groups;
12
12
  try {
13
13
  groups = await groupModel.find({});
@@ -44,7 +44,7 @@ export default async function (req, res) {
44
44
  });
45
45
  Adminizer.log.debug(`A new user was created: `, user);
46
46
  req.flash.setFlashMessage('success', 'A new user was created !');
47
- return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/userap`);
47
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/User`);
48
48
  }
49
49
  catch (e) {
50
50
  Adminizer.log.error(e);
@@ -1 +1 @@
1
- export declare function catalogController(req: ReqType, res: ResType): Promise<import("express").Response<any, Record<string, any>>>;
1
+ export declare function catalogController(req: ReqType, res: ResType): Promise<ResType>;
@@ -49,7 +49,8 @@ export async function catalogController(req, res) {
49
49
  catalogSlug: _catalog.slug,
50
50
  idList: idList
51
51
  },
52
- toolsActions: await frontendCatalog.getActions([], 'tools')
52
+ toolsActions: await frontendCatalog.getActions([], 'tools'),
53
+ templateComponents: req.adminizer.catalogTemplateComponentHandler.getByCatalog(_catalog.slug)
53
54
  });
54
55
  }
55
56
  case 'createItem':
@@ -23,23 +23,13 @@ interface RequestData {
23
23
  reqParent: NodeModel<NodeData>;
24
24
  _method: string;
25
25
  }
26
- /**
27
- * @deprecated Now is React
28
- * // TODO: refactor for react name
29
- */
30
26
  export declare class FrontendCatalog {
31
27
  catalog: AbstractCatalog;
32
28
  constructor(_catalog: AbstractCatalog);
33
29
  setId(id: string): void;
34
30
  getItemType(type: string): import("../..").BaseItem<Item>;
35
- getAddTemplate(item: any, req: ReqType): Promise<{
36
- type: "component" | "navigation.group" | "navigation.link" | "model" | "model.link";
37
- data: any;
38
- }>;
39
- getEditTemplate(item: any, id: string | number, req: ReqType, modelId: string | number): Promise<{
40
- type: "component" | "navigation.group" | "navigation.link" | "model" | "model.link";
41
- data: any;
42
- }>;
31
+ getAddTemplate(item: any, req: ReqType): Promise<import("../..").CatalogTemplate<any>>;
32
+ getEditTemplate(item: any, id: string | number, req: ReqType, modelId: string | number): Promise<import("../..").CatalogTemplate<any>>;
43
33
  getitemTypes(): {
44
34
  type: string;
45
35
  name: string;
@@ -1,7 +1,3 @@
1
- /**
2
- * @deprecated Now is React
3
- * // TODO: refactor for react name
4
- */
5
1
  export class FrontendCatalog {
6
2
  catalog;
7
3
  constructor(_catalog) {
@@ -90,13 +86,6 @@ export class FrontendCatalog {
90
86
  return FrontendCatalogUtils.arrayToNode(rootItems, this.catalog.getGroupType().type);
91
87
  }
92
88
  async createItem(data, req) {
93
- // TODO It's not clear why it's here.
94
- //data = VueCatalogUtils.refinement(data);
95
- // if (this.catalog.slug !== "navigation") {
96
- // let item = data.record;
97
- // item.parenId = data.parenId;
98
- // return await this.catalog.createItem(item, req);
99
- // } else {
100
89
  if (data.parentId === 0)
101
90
  data.parentId = null;
102
91
  return await this.catalog.createItem(data, req);
@@ -137,11 +126,6 @@ export class FrontendCatalog {
137
126
  return Promise.resolve('ok');
138
127
  }
139
128
  async updateItem(item, modelId, data, req) {
140
- //TODO It's not clear why it's here.
141
- //data = VueCatalogUtils.refinement(data);
142
- // if (this.catalog.slug !== "navigation") {
143
- // return await this.catalog.updateModelItems(data.modelId, data.type, data.record, req);
144
- // } else {
145
129
  let normalizedModelId = modelId;
146
130
  if (normalizedModelId === '0')
147
131
  normalizedModelId = null;
@@ -173,6 +157,9 @@ export class FrontendCatalogUtils {
173
157
  * Normalizes data for frontend: replaces null parentId with 0
174
158
  */
175
159
  static normalizeForFrontend(item) {
160
+ if (!item) {
161
+ throw new Error("Cannot normalize empty catalog item for frontend");
162
+ }
176
163
  return { ...item, parentId: item.parentId === null ? 0 : item.parentId };
177
164
  }
178
165
  static arrayToNode(items, groupTypeName) {
@@ -23,23 +23,13 @@ interface RequestData {
23
23
  reqParent: NodeModel<NodeData>;
24
24
  _method: string;
25
25
  }
26
- /**
27
- * @deprecated Now is React
28
- * // TODO: refactor for react name
29
- */
30
26
  export declare class FrontendCatalog {
31
27
  catalog: AbstractCatalog;
32
28
  constructor(_catalog: AbstractCatalog);
33
29
  setId(id: string): void;
34
30
  getItemType(type: string): import("../..").BaseItem<Item>;
35
- getAddTemplate(item: any, req: ReqType): Promise<{
36
- type: "component" | "navigation.group" | "navigation.link" | "model" | "model.link";
37
- data: any;
38
- }>;
39
- getEditTemplate(item: any, id: string | number, req: ReqType, modelId: string | number): Promise<{
40
- type: "component" | "navigation.group" | "navigation.link" | "model" | "model.link";
41
- data: any;
42
- }>;
31
+ getAddTemplate(item: any, req: ReqType): Promise<import("../..").CatalogTemplate<any>>;
32
+ getEditTemplate(item: any, id: string | number, req: ReqType, modelId: string | number): Promise<import("../..").CatalogTemplate<any>>;
43
33
  getitemTypes(): {
44
34
  type: string;
45
35
  name: string;
@@ -1,7 +1,3 @@
1
- /**
2
- * @deprecated Now is React
3
- * // TODO: refactor for react name
4
- */
5
1
  export class FrontendCatalog {
6
2
  catalog;
7
3
  constructor(_catalog) {
@@ -90,13 +86,6 @@ export class FrontendCatalog {
90
86
  return FrontendCatalogUtils.arrayToNode(rootItems, this.catalog.getGroupType().type);
91
87
  }
92
88
  async createItem(data, req) {
93
- // TODO It's not clear why it's here.
94
- //data = VueCatalogUtils.refinement(data);
95
- // if (this.catalog.slug !== "navigation") {
96
- // let item = data.record;
97
- // item.parenId = data.parenId;
98
- // return await this.catalog.createItem(item, req);
99
- // } else {
100
89
  if (data.parentId === 0)
101
90
  data.parentId = null;
102
91
  return await this.catalog.createItem(data, req);
@@ -136,11 +125,6 @@ export class FrontendCatalog {
136
125
  return Promise.resolve('ok');
137
126
  }
138
127
  async updateItem(item, modelId, data, req) {
139
- //TODO It's not clear why it's here.
140
- //data = VueCatalogUtils.refinement(data);
141
- // if (this.catalog.slug !== "navigation") {
142
- // return await this.catalog.updateModelItems(data.modelId, data.type, data.record, req);
143
- // } else {
144
128
  let normalizedModelId = modelId;
145
129
  if (normalizedModelId === '0')
146
130
  normalizedModelId = null;
@@ -106,17 +106,12 @@ export default async function edit(req, res) {
106
106
  return res.json({ record: newRecord });
107
107
  }
108
108
  else {
109
- // update navigation tree after model updated
110
- if (req.adminizer.config.navigation) {
111
- for (const section of req.adminizer.config.navigation.sections) {
112
- let navigation = req.adminizer.catalogHandler.getCatalog('navigation');
113
- navigation.setId(section);
114
- let navItem = navigation.itemTypes.find(item => item.type === modelResource.name.toLowerCase());
115
- if (navItem) {
116
- await navItem.updateModelItems(newRecord[0].id, { record: newRecord[0] }, section);
117
- }
118
- }
119
- }
109
+ await req.adminizer.emitAsync("model:updated", {
110
+ modelName: modelResource.name,
111
+ modelResource,
112
+ record: newRecord[0],
113
+ action: "update",
114
+ });
120
115
  req.flash.setFlashMessage('success', req.i18n.__('Record was updated'));
121
116
  const redirectId = newRecord[0]?.[identifierField] ?? req.params.id;
122
117
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/${modelResource.name}/edit/${redirectId}`);
@@ -1 +1 @@
1
- export default function editGroup(req: ReqType, res: ResType): Promise<import("express").Response<any, Record<string, any>>>;
1
+ export default function editGroup(req: ReqType, res: ResType): Promise<ResType>;
@@ -4,8 +4,8 @@ import { inertiaGroupHelper } from "../helpers/inertiaGroupHelper.js";
4
4
  export default async function editGroup(req, res) {
5
5
  let modelResource = ControllerHelper.findModelResource(req);
6
6
  const internalUsers = req.adminizer.modelHandler.internal("users");
7
- const userModel = internalUsers.get("UserAP");
8
- const groupModel = internalUsers.get("GroupAP");
7
+ const userModel = internalUsers.get("User");
8
+ const groupModel = internalUsers.get("Group");
9
9
  //Check id
10
10
  if (!req.params.id) {
11
11
  return res.status(404).send({ error: 'Not Found' });
@@ -60,7 +60,7 @@ export default async function editGroup(req, res) {
60
60
  });
61
61
  Adminizer.log.debug(`Group was updated: `, updatedGroup);
62
62
  req.flash.setFlashMessage('success', 'Group was updated !');
63
- return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/groupap`);
63
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/Group`);
64
64
  }
65
65
  catch (e) {
66
66
  Adminizer.log.error(e);
@@ -1 +1 @@
1
- export default function (req: ReqType, res: ResType): Promise<import("express").Response<any, Record<string, any>>>;
1
+ export default function (req: ReqType, res: ResType): Promise<ResType>;
@@ -5,8 +5,8 @@ import { inertiaUserHelper } from "../helpers/inertiaUserHelper.js";
5
5
  export default async function (req, res) {
6
6
  let modelResource = ControllerHelper.findModelResource(req);
7
7
  const internalUsers = req.adminizer.modelHandler.internal("users");
8
- const userModel = internalUsers.get("UserAP");
9
- const groupModel = internalUsers.get("GroupAP");
8
+ const userModel = internalUsers.get("User");
9
+ const groupModel = internalUsers.get("Group");
10
10
  // Check id
11
11
  if (!req.params.id) {
12
12
  return res.status(404).send({ error: 'Not Found' });
@@ -62,7 +62,7 @@ export default async function (req, res) {
62
62
  }
63
63
  Adminizer.log.debug(`User was updated: `, updatedUser);
64
64
  req.flash.setFlashMessage('success', 'User was updated !');
65
- return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/userap`);
65
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/User`);
66
66
  }
67
67
  catch (e) {
68
68
  Adminizer.log.error(e);
@@ -36,7 +36,7 @@ export default async function feedController(req, res) {
36
36
  }
37
37
  const user = await req.adminizer.modelHandler
38
38
  .internal("feed")
39
- .get("UserAP")
39
+ .get("User")
40
40
  .findOne({ where: { apiKey: userKey } });
41
41
  if (!user) {
42
42
  return res.status(403).json({ error: 'Invalid userKey' });
@@ -85,7 +85,7 @@ export async function updateFilterColumns(req, res) {
85
85
  if (!filter) {
86
86
  return res.status(404).send({ error: req.i18n.__('Filter not found or access denied') });
87
87
  }
88
- // Convert frontend column format to FilterColumnAP format
88
+ // Convert frontend column format to FilterColumn format
89
89
  const filterColumns = columns.map((col, index) => ({
90
90
  fieldName: col.fieldName,
91
91
  order: col.order !== undefined ? col.order : index
@@ -7,8 +7,8 @@ import { Adminizer } from "../../lib/Adminizer.js";
7
7
  */
8
8
  export async function getAllUserFilters(req, res) {
9
9
  const filterService = new FilterService(req.adminizer);
10
- const userModel = req.adminizer.modelHandler.model.get('userap');
11
- const groupModel = req.adminizer.modelHandler.model.get('groupap');
10
+ const userModel = req.adminizer.modelHandler.model.get('User');
11
+ const groupModel = req.adminizer.modelHandler.model.get('Group');
12
12
  // Cache for group names: { groupId: groupName }
13
13
  const groupNamesCache = {};
14
14
  const getGroupName = async (groupId) => {
@@ -4,9 +4,9 @@
4
4
  */
5
5
  export async function getAllGroups(req, res) {
6
6
  try {
7
- const groupModel = req.adminizer.modelHandler.model.get('groupap');
7
+ const groupModel = req.adminizer.modelHandler.model.get('Group');
8
8
  if (!groupModel) {
9
- return res.status(500).send({ error: req.i18n.__('GroupAP model not found') });
9
+ return res.status(500).send({ error: req.i18n.__('Group model not found') });
10
10
  }
11
11
  const groups = await groupModel['_find']({});
12
12
  return res.json({
@@ -71,7 +71,7 @@ export async function getSavedFilters(req, res) {
71
71
  includeSystem: false
72
72
  });
73
73
  // Load owner info for each filter
74
- const userModel = req.adminizer.modelHandler.model.get('userap');
74
+ const userModel = req.adminizer.modelHandler.model.get('User');
75
75
  const filtersWithOwner = await Promise.all(filters.map(async (filter) => {
76
76
  let ownerInfo = null;
77
77
  if (userModel && filter.ownerId) {
@@ -13,7 +13,7 @@ export class HistoryController {
13
13
  `users-history-${adapter.id}`
14
14
  ], req.user);
15
15
  if (accessToUsersHistory)
16
- users = await req.adminizer.modelHandler.model.get('userap')['_find']({});
16
+ users = await req.adminizer.modelHandler.model.get('User')['_find']({});
17
17
  // Getting an array of config.models keys in lowercase for comparison
18
18
  const normalizedModelConfig = new Map(Object.entries(req.adminizer.config.models || {}).map(([key, value]) => [
19
19
  key.toLowerCase(),
@@ -6,10 +6,10 @@ export default async function initUser(req, res) {
6
6
  if (!req.adminizer.config.auth.enable) {
7
7
  return res.redirect(`${req.adminizer.config.routePrefix}/`);
8
8
  }
9
- const userModel = req.adminizer.modelHandler.internal("auth").get("UserAP");
9
+ const userModel = req.adminizer.modelHandler.internal("auth").get("User");
10
10
  let admins = await userModel.find({ where: { isAdministrator: true } });
11
11
  if (admins.length) {
12
- res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
12
+ res.redirect(`${req.adminizer.config.routePrefix}/model/User/login`);
13
13
  }
14
14
  if (req.method.toUpperCase() === "POST") {
15
15
  let login = req.body.login;
@@ -1 +1 @@
1
- export default function list(req: ReqType, res: ResType): Promise<import("express").Response<any, Record<string, any>>>;
1
+ export default function list(req: ReqType, res: ResType): Promise<ResType>;
@@ -1 +1 @@
1
- export default function login(req: ReqType, res: ResType): Promise<void | (import("express-session").Session & Partial<import("express-session").SessionData> & reqSession) | import("express").Response<any, Record<string, any>>>;
1
+ export default function login(req: ReqType, res: ResType): Promise<void | (import("express-session").Session & Partial<import("express-session").SessionData> & reqSession) | ResType>;
@@ -14,7 +14,7 @@ export default async function login(req, res) {
14
14
  let login = req.body.login;
15
15
  let password = req.body.password;
16
16
  let captchaSolution = req.body.captchaSolution;
17
- const userModel = req.adminizer.modelHandler.internal("auth").get("UserAP");
17
+ const userModel = req.adminizer.modelHandler.internal("auth").get("User");
18
18
  let user;
19
19
  try {
20
20
  user = await userModel.findOne({ where: { login: login } });
@@ -122,9 +122,9 @@ export default async function login(req, res) {
122
122
  }));
123
123
  // Force full page reload after logout
124
124
  if (req.headers['x-inertia']) {
125
- return res.writeHead(409, { 'x-inertia-location': `${req.adminizer.config.routePrefix}/model/userap/login` }).end();
125
+ return res.writeHead(409, { 'x-inertia-location': `${req.adminizer.config.routePrefix}/model/User/login` }).end();
126
126
  }
127
- return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
127
+ return res.redirect(`${req.adminizer.config.routePrefix}/model/User/login`);
128
128
  }
129
129
  return res.status(404);
130
130
  }
@@ -3,8 +3,8 @@ export async function thumbController(req, res) {
3
3
  const method = req.method.toUpperCase();
4
4
  const id = req.query.id;
5
5
  const managerId = req.query.managerId;
6
- if (method === 'GET') {
7
- res.setHeader('Content-Type', 'image/webp');
6
+ if (method === "GET") {
7
+ res.setHeader("Content-Type", "image/webp");
8
8
  res.send(await MediaManagerThumb.getThumb(id, managerId, req.adminizer));
9
9
  }
10
10
  }
@@ -1,39 +1,37 @@
1
1
  import { MediaManagerAdapter } from "./mediaManagerAdapter.js";
2
2
  export async function mediaManagerController(req, res) {
3
3
  const method = req.method.toUpperCase();
4
- let id = req.params.id ? req.params.id : '';
5
- // const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
6
- // await delay(1000);
4
+ const id = req.params.id ? req.params.id : "";
7
5
  if (!id) {
8
6
  return res.sendStatus(404);
9
7
  }
10
- const _manager = req.adminizer.mediaManagerHandler.get(id);
11
- const manager = new MediaManagerAdapter(_manager);
12
- if (method === 'GET') {
13
- if (req.query._method === 'getLocales') {
8
+ const mediaManager = req.adminizer.mediaManagerHandler.get(id);
9
+ const manager = new MediaManagerAdapter(mediaManager);
10
+ if (method === "GET") {
11
+ if (req.query._method === "getLocales") {
14
12
  return res.json({ data: manager.getLocales(req) });
15
13
  }
16
14
  return await manager.get(req, res);
17
15
  }
18
- if (method === 'POST') {
19
- if (req.path.endsWith('/upload')) {
16
+ if (method === "POST") {
17
+ if (req.path.endsWith("/upload")) {
20
18
  return await manager.upload(req, res);
21
19
  }
22
- if (req.path.endsWith('/upload-variant')) {
20
+ if (req.path.endsWith("/upload-variant")) {
23
21
  return await manager.uploadVariant(req, res);
24
22
  }
25
23
  switch (req.body._method) {
26
- case 'addMeta':
24
+ case "addMeta":
27
25
  return await manager.setMeta(req, res);
28
- case 'getMeta':
26
+ case "getMeta":
29
27
  return await manager.getMeta(req, res);
30
- case 'getChildren':
28
+ case "getChildren":
31
29
  return await manager.getVariants(req, res);
32
- case 'search':
30
+ case "search":
33
31
  return await manager.search(req, res);
34
32
  }
35
33
  }
36
- if (method === 'DELETE') {
34
+ if (method === "DELETE") {
37
35
  return await manager.delete(req, res);
38
36
  }
39
37
  }
@@ -1 +1 @@
1
- export default function register(req: ReqType, res: ResType): Promise<void | import("express").Response<any, Record<string, any>>>;
1
+ export default function register(req: ReqType, res: ResType): Promise<void | ResType>;
@@ -6,8 +6,8 @@ export default async function register(req, res) {
6
6
  return res.redirect(`${req.adminizer.config.routePrefix}/`);
7
7
  }
8
8
  const authModels = req.adminizer.modelHandler.internal("auth");
9
- const userModel = authModels.get("UserAP");
10
- const groupModel = authModels.get("GroupAP");
9
+ const userModel = authModels.get("User");
10
+ const groupModel = authModels.get("Group");
11
11
  if (req.method.toUpperCase() === "POST") {
12
12
  for (const key of ["login", "fullName", "password"]) {
13
13
  if (!req.body[key]) {
@@ -44,7 +44,7 @@ export default async function register(req, res) {
44
44
  try {
45
45
  let passwordHashed = generate(req.body.login + req.body.password + process.env.AP_PASSWORD_SALT);
46
46
  let password = 'masked';
47
- let userap = await userModel.create({
47
+ let User = await userModel.create({
48
48
  login: req.body.login,
49
49
  passwordHashed: passwordHashed,
50
50
  fullName: req.body.fullName,
@@ -53,9 +53,9 @@ export default async function register(req, res) {
53
53
  apiKey: generateUserApiKey()
54
54
  });
55
55
  let defaultUserGroup = await groupModel.findOne({ where: { name: req.adminizer.config.registration.defaultUserGroup } });
56
- await userModel.updateOne({ where: { id: userap.id } }, {
56
+ await userModel.updateOne({ where: { id: User.id } }, {
57
57
  groups: [defaultUserGroup.id]
58
- }); // instead of UserAP.addToCollection;
58
+ }); // instead of User.addToCollection;
59
59
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}`);
60
60
  }
61
61
  catch (e) {
@@ -1 +1 @@
1
- export default function remove(req: ReqType, res: ResType): Promise<void | import("express").Response<any, Record<string, any>>>;
1
+ export default function remove(req: ReqType, res: ResType): Promise<void | ResType>;
@@ -10,7 +10,7 @@ export async function getUserApiKey(req, res) {
10
10
  if (!req.user.apiKey) {
11
11
  const newKey = generateUserApiKey();
12
12
  try {
13
- const userModel = req.adminizer.modelHandler.internal("auth").get("UserAP");
13
+ const userModel = req.adminizer.modelHandler.internal("auth").get("User");
14
14
  await userModel.updateOne({ where: { id: req.user.id } }, { apiKey: newKey });
15
15
  req.user.apiKey = newKey;
16
16
  }
@@ -24,7 +24,7 @@ export async function getUserApiKey(req, res) {
24
24
  export async function regenerateUserApiKey(req, res) {
25
25
  const newKey = generateUserApiKey();
26
26
  try {
27
- const userModel = req.adminizer.modelHandler.internal("auth").get("UserAP");
27
+ const userModel = req.adminizer.modelHandler.internal("auth").get("User");
28
28
  await userModel.updateOne({ where: { id: req.user.id } }, { apiKey: newKey });
29
29
  Adminizer.log.debug(`User ${req.user.id} regenerated their API key`);
30
30
  return res.json({ apiKey: newKey });
@@ -1 +1 @@
1
- export default function view(req: ReqType, res: ResType): Promise<void | import("express").Response<any, Record<string, any>>>;
1
+ export default function view(req: ReqType, res: ResType): Promise<void | ResType>;
@@ -30,10 +30,10 @@ export default async function view(req, res) {
30
30
  return res.status(500).send({ error: 'Internal Server Error' });
31
31
  }
32
32
  switch (modelResource.config.model) {
33
- case 'userap':
33
+ case 'User':
34
34
  let groups;
35
35
  try {
36
- groups = await req.adminizer.modelHandler.internal("users").get("GroupAP").find({});
36
+ groups = await req.adminizer.modelHandler.internal("users").get("Group").find({});
37
37
  }
38
38
  catch (e) {
39
39
  Adminizer.log.error(e);
@@ -43,17 +43,17 @@ export default async function view(req, res) {
43
43
  component: 'add-user',
44
44
  props: userProps
45
45
  });
46
- case 'groupap':
46
+ case 'Group':
47
47
  let users;
48
48
  try {
49
- users = await req.adminizer.modelHandler.internal("users").get("UserAP").find({ where: { isAdministrator: false } });
49
+ users = await req.adminizer.modelHandler.internal("users").get("User").find({ where: { isAdministrator: false } });
50
50
  }
51
51
  catch (e) {
52
52
  Adminizer.log.error(e);
53
53
  }
54
54
  let group;
55
55
  try {
56
- group = await req.adminizer.modelHandler.internal("users").get("GroupAP").findOne({ where: { id: Number(req.params.id) } });
56
+ group = await req.adminizer.modelHandler.internal("users").get("Group").findOne({ where: { id: Number(req.params.id) } });
57
57
  }
58
58
  catch (e) {
59
59
  Adminizer.log.error('Admin edit error: ');