adminizer 5.0.0-build.0 → 5.0.0-build.10

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 (142) hide show
  1. package/assets/{add-a4odXvQk.js → add-BtctcXXV.js} +1 -1
  2. package/assets/{add-group-D-NleXth.js → add-group-C0LgrR0Z.js} +1 -1
  3. package/assets/add-user-CALUedTL.js +1 -0
  4. package/assets/app-DNXiApCk.css +1 -0
  5. package/assets/{app-layout-eaSzcROf.js → app-layout-CTavO9pF.js} +1 -1
  6. package/assets/app.js +33 -33
  7. package/assets/catalog-BGkKJyhR.js +6 -0
  8. package/assets/controls/ckeditor.es.js +2735 -2712
  9. package/assets/controls/handsontable.es.js +11546 -11511
  10. package/assets/controls/jsoneditor.es.js +13004 -12846
  11. package/assets/controls/leaflet.es.js +1023 -1004
  12. package/assets/controls/toast-ui.es.js +10509 -10472
  13. package/assets/dashboard-CvSStqLV.js +3 -0
  14. package/assets/{history-B8KIDy44.js → history-RlFpGr4e.js} +1 -1
  15. package/assets/list-cNVyzYi8.js +4 -0
  16. package/assets/manifest.json +25 -25
  17. package/assets/{module-D59aE9uv.js → module-B_i1LQ3L.js} +1 -1
  18. package/assets/{notification-DNoyfNmT.js → notification-DXP7ACui.js} +1 -1
  19. package/assets/user-filters-list-DWE5MBBP.js +1 -0
  20. package/assets/{welcome-37rNVUHt.js → welcome-B6-atbAF.js} +1 -1
  21. package/controllers/catalog/FrontendCatalogAdapter.d.ts +1 -1
  22. package/controllers/catalog/FrontentCatalogAdapter.d.ts +1 -1
  23. package/controllers/feedback/feedbackController.d.ts +1 -1
  24. package/controllers/history-actions/HistoryController.d.ts +1 -1
  25. package/controllers/media-manager/mediaManagerAdapter.d.ts +1 -1
  26. package/helpers/accessRightsHelper.d.ts +3 -3
  27. package/helpers/configHelper.d.ts +3 -3
  28. package/helpers/configHelper.js +8 -1
  29. package/helpers/controllerHelper.d.ts +2 -2
  30. package/helpers/fieldsHelper.d.ts +2 -2
  31. package/helpers/filterDatetimeHelper.d.ts +1 -1
  32. package/helpers/inertiaActionsHelper.d.ts +2 -2
  33. package/helpers/inertiaAddHelper.d.ts +4 -4
  34. package/helpers/inertiaGroupHelper.d.ts +3 -3
  35. package/helpers/inertiaListHelper.d.ts +3 -3
  36. package/helpers/inertiaMenuHelper.d.ts +2 -2
  37. package/helpers/inertiaUserHelper.d.ts +3 -3
  38. package/helpers/menuHelper.d.ts +2 -2
  39. package/helpers/translationHelper.d.ts +2 -2
  40. package/index.d.ts +58 -57
  41. package/index.js +1 -0
  42. package/interfaces/adminpanelConfig.d.ts +4 -4
  43. package/interfaces/global.d.ts +6 -6
  44. package/interfaces/internalModelAccess.d.ts +1 -1
  45. package/interfaces/listQueryBuilder.d.ts +1 -1
  46. package/interfaces/types.d.ts +2 -2
  47. package/lib/Adminizer.d.ts +38 -26
  48. package/lib/Adminizer.js +19 -1
  49. package/lib/DataAccessor.d.ts +6 -6
  50. package/lib/DataAccessor.js +5 -1
  51. package/lib/MiddlewareManager.d.ts +1 -1
  52. package/lib/access-rights/AccessRightsHandler.d.ts +2 -2
  53. package/lib/ai-assistant/AbstractAiModelService.d.ts +2 -2
  54. package/lib/ai-assistant/AiAssistantHandler.d.ts +15 -5
  55. package/lib/ai-assistant/AiAssistantHandler.js +31 -1
  56. package/lib/app-manager/AdminizerApp.d.ts +10 -10
  57. package/lib/app-manager/AppManager.d.ts +2 -2
  58. package/lib/app-manager/AppManager.js +11 -8
  59. package/lib/app-manager/AssetHandler.d.ts +2 -2
  60. package/lib/app-manager/ConfigLayerHandler.d.ts +2 -2
  61. package/lib/app-manager/ControllerHandler.d.ts +2 -2
  62. package/lib/catalog/AbstractCatalog.d.ts +1 -1
  63. package/lib/catalog/CatalogHandler.d.ts +1 -1
  64. package/lib/controls/ControlsHandler.d.ts +1 -1
  65. package/lib/controls/codeEditor/MonacoEditor.d.ts +1 -1
  66. package/lib/controls/geojsoneditor/GeoEditor.d.ts +1 -1
  67. package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -1
  68. package/lib/controls/markdown/ToastUiEditor.d.ts +1 -1
  69. package/lib/controls/table/Handsontable.d.ts +1 -1
  70. package/lib/controls/wysiwyg/CKeditor.d.ts +1 -1
  71. package/lib/feedback/FeedbackHandler.d.ts +2 -2
  72. package/lib/filters/ConditionValidator.d.ts +1 -1
  73. package/lib/filters/FilterCustomFieldHandler.d.ts +2 -2
  74. package/lib/filters/FilterService.d.ts +4 -4
  75. package/lib/filters/index.d.ts +6 -6
  76. package/lib/history-actions/AbstractHistoryAdapter.d.ts +6 -6
  77. package/lib/history-actions/DefaultHistoryAdapter.d.ts +4 -4
  78. package/lib/history-actions/HistoryHandler.d.ts +1 -1
  79. package/lib/list-query-builder/ListQueryBuilder.d.ts +7 -7
  80. package/lib/media-manager/AbstractMediaManager.d.ts +2 -2
  81. package/lib/media-manager/MediaManagerHandler.d.ts +1 -1
  82. package/lib/media-manager/Thumb.d.ts +1 -1
  83. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -5
  84. package/lib/model/AbstractModel.d.ts +9 -4
  85. package/lib/model/InternalModelAccessFactory.d.ts +2 -2
  86. package/lib/model/ModelHandler.d.ts +3 -3
  87. package/lib/model/adapter/sequelize.d.ts +7 -5
  88. package/lib/model/adapter/sequelize.js +79 -46
  89. package/lib/model/adapter/typeorm.d.ts +2 -2
  90. package/lib/model/adapter/typeorm.js +1 -1
  91. package/lib/model/internalModelRepository.d.ts +2 -2
  92. package/lib/notifications/AbstractNotificationService.d.ts +4 -4
  93. package/lib/notifications/GeneralNotificationService.d.ts +2 -2
  94. package/lib/notifications/GeneralNotificationService.js +5 -4
  95. package/lib/notifications/NotificationHandler.d.ts +2 -2
  96. package/lib/notifications/SystemNotificationService.d.ts +2 -2
  97. package/lib/requestProcessor.d.ts +1 -1
  98. package/lib/widgets/abstractAction.d.ts +1 -1
  99. package/lib/widgets/abstractCustom.d.ts +2 -2
  100. package/lib/widgets/abstractInfo.d.ts +1 -1
  101. package/lib/widgets/abstractLink.d.ts +2 -2
  102. package/lib/widgets/abstractSwitch.d.ts +1 -1
  103. package/lib/widgets/abstractWidgetBase.d.ts +1 -1
  104. package/lib/widgets/widgetHandler.d.ts +9 -9
  105. package/models/Filter.d.ts +1 -1
  106. package/models/FilterColumn.d.ts +1 -1
  107. package/models/Group.d.ts +1 -1
  108. package/models/HistoryActions.d.ts +1 -1
  109. package/models/MediaManagerAP.d.ts +2 -2
  110. package/models/MediaManagerAssociationsAP.d.ts +1 -1
  111. package/models/MediaManagerMetaAP.d.ts +1 -1
  112. package/models/User.d.ts +2 -2
  113. package/models/UserNotification.d.ts +1 -1
  114. package/package.json +1 -1
  115. package/services/FeedService.d.ts +3 -3
  116. package/system/Router.d.ts +1 -1
  117. package/system/Router.js +9 -1
  118. package/system/bindAccessRights.d.ts +1 -1
  119. package/system/bindAuthorization.d.ts +1 -1
  120. package/system/bindControls.d.ts +1 -1
  121. package/system/bindCors.d.ts +1 -1
  122. package/system/bindCustomFilterHandlers.d.ts +1 -1
  123. package/system/bindDashboardWidgets.d.ts +1 -1
  124. package/system/bindDev.d.ts +1 -1
  125. package/system/bindHistory.d.ts +1 -1
  126. package/system/bindInertia.d.ts +1 -1
  127. package/system/bindMediaManager.d.ts +1 -1
  128. package/system/bindNotifications.d.ts +1 -1
  129. package/system/bindReqFunctions.d.ts +1 -1
  130. package/system/bindTranslations.d.ts +1 -1
  131. package/system/buildInternalModelAccess.d.ts +3 -3
  132. package/system/defaults.d.ts +1 -1
  133. package/system/routePolicies.d.ts +1 -1
  134. package/system/systemModelContracts.d.ts +1 -1
  135. package/system/systemModelContracts.js +11 -7
  136. package/system/validateSystemModels.d.ts +1 -1
  137. package/assets/add-user-B4SVJT5P.js +0 -1
  138. package/assets/app-CtWuWD5N.css +0 -1
  139. package/assets/catalog-ByUICd5z.js +0 -6
  140. package/assets/dashboard-BYd8G2cW.js +0 -3
  141. package/assets/list-ChmtBGjG.js +0 -4
  142. package/assets/user-filters-list-BMFRwkYF.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from 'events';
2
- import { AbstractNotificationService } from "./AbstractNotificationService";
3
- import { INotification } from '../../interfaces/types';
2
+ import { AbstractNotificationService } from "./AbstractNotificationService.js";
3
+ import { INotification } from '../../interfaces/types.js';
4
4
  export declare class NotificationHandler extends EventEmitter {
5
5
  private services;
6
6
  constructor();
@@ -1,5 +1,5 @@
1
- import { AbstractNotificationService } from './AbstractNotificationService';
2
- import { INotification } from '../../interfaces/types';
1
+ import { AbstractNotificationService } from './AbstractNotificationService.js';
2
+ import { INotification } from '../../interfaces/types.js';
3
3
  export declare class SystemNotificationService extends AbstractNotificationService {
4
4
  readonly notificationClass = "system";
5
5
  readonly displayName: string;
@@ -1,4 +1,4 @@
1
- import { Fields } from "../helpers/fieldsHelper";
1
+ import { Fields } from "../helpers/fieldsHelper.js";
2
2
  type PostParams = Record<string, string | number | boolean | object | string[] | number[] | null>;
3
3
  /**
4
4
  * Default helper that will contain all methods
@@ -1,4 +1,4 @@
1
- import { BaseWidget } from "./abstractWidgetBase";
1
+ import { BaseWidget } from "./abstractWidgetBase.js";
2
2
  export declare abstract class ActionBase extends BaseWidget {
3
3
  readonly widgetType = "action";
4
4
  /** Widget background css color */
@@ -1,5 +1,5 @@
1
- import { MaterialIcon } from "../../interfaces/MaaterialIcons";
2
- import type { AppAsset } from "../app-manager/AdminizerApp";
1
+ import { MaterialIcon } from "../../interfaces/MaaterialIcons.js";
2
+ import type { AppAsset } from "../app-manager/AdminizerApp.js";
3
3
  export declare abstract class CustomBase {
4
4
  /** Widget unique id */
5
5
  abstract readonly id: string;
@@ -1,4 +1,4 @@
1
- import { BaseWidget } from "./abstractWidgetBase";
1
+ import { BaseWidget } from "./abstractWidgetBase.js";
2
2
  export interface WidgetInfoContext {
3
3
  user?: ReqType["user"];
4
4
  }
@@ -1,5 +1,5 @@
1
- import { BaseWidget } from "./abstractWidgetBase";
2
- import { MaterialIcon } from "../../interfaces/MaaterialIcons";
1
+ import { BaseWidget } from "./abstractWidgetBase.js";
2
+ import { MaterialIcon } from "../../interfaces/MaaterialIcons.js";
3
3
  export interface Links {
4
4
  name: string;
5
5
  description: string;
@@ -1,4 +1,4 @@
1
- import { BaseWidget } from "./abstractWidgetBase";
1
+ import { BaseWidget } from "./abstractWidgetBase.js";
2
2
  export declare abstract class SwitchBase extends BaseWidget {
3
3
  readonly widgetType = "switcher";
4
4
  /** Widget background css color */
@@ -1,4 +1,4 @@
1
- import { MaterialIcon } from "../../interfaces/MaaterialIcons";
1
+ import { MaterialIcon } from "../../interfaces/MaaterialIcons.js";
2
2
  export declare abstract class BaseWidget {
3
3
  /** Widget unique id */
4
4
  abstract readonly id: string;
@@ -1,12 +1,12 @@
1
- import { SwitchBase } from "./abstractSwitch";
2
- import { InfoBase } from "./abstractInfo";
3
- import { ActionBase } from "./abstractAction";
4
- import { LinkBase } from "./abstractLink";
5
- import { CustomBase } from "./abstractCustom";
6
- import { AdminpanelIcon } from "../../interfaces/adminpanelConfig";
7
- import { Adminizer } from "../Adminizer";
8
- import { User } from "../../models/User";
9
- import { I18n } from "../I18n";
1
+ import { SwitchBase } from "./abstractSwitch.js";
2
+ import { InfoBase } from "./abstractInfo.js";
3
+ import { ActionBase } from "./abstractAction.js";
4
+ import { LinkBase } from "./abstractLink.js";
5
+ import { CustomBase } from "./abstractCustom.js";
6
+ import { AdminpanelIcon } from "../../interfaces/adminpanelConfig.js";
7
+ import { Adminizer } from "../Adminizer.js";
8
+ import { User } from "../../models/User.js";
9
+ import { I18n } from "../I18n.js";
10
10
  export type WidgetType = (SwitchBase | InfoBase | ActionBase | LinkBase | CustomBase);
11
11
  export interface WidgetConfig {
12
12
  id: string;
@@ -1,4 +1,4 @@
1
- import type { FilterColumn } from "./FilterColumn";
1
+ import type { FilterColumn } from "./FilterColumn.js";
2
2
  /**
3
3
  * Filter operators for query conditions
4
4
  */
@@ -1,4 +1,4 @@
1
- import type { Filter } from "./Filter";
1
+ import type { Filter } from "./Filter.js";
2
2
  /**
3
3
  * FilterColumn interface for TypeScript
4
4
  */
package/models/Group.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { User } from "./User";
1
+ import type { User } from "./User.js";
2
2
  export interface Group {
3
3
  id?: number;
4
4
  name: string;
@@ -1,4 +1,4 @@
1
- import type { User } from "./User";
1
+ import type { User } from "./User.js";
2
2
  export interface HistoryActions {
3
3
  id?: number;
4
4
  modelId: number | string;
@@ -1,5 +1,5 @@
1
- import type { MediaManagerAssociationsAP } from "./MediaManagerAssociationsAP";
2
- import type { MediaManagerMetaAP } from "./MediaManagerMetaAP";
1
+ import type { MediaManagerAssociationsAP } from "./MediaManagerAssociationsAP.js";
2
+ import type { MediaManagerMetaAP } from "./MediaManagerMetaAP.js";
3
3
  export interface MediaManagerAP {
4
4
  id: string;
5
5
  parent?: MediaManagerAP;
@@ -1,4 +1,4 @@
1
- import type { MediaManagerAP } from "./MediaManagerAP";
1
+ import type { MediaManagerAP } from "./MediaManagerAP.js";
2
2
  export interface MediaManagerAssociationsAP {
3
3
  id: string;
4
4
  mediaManagerId?: string;
@@ -1,4 +1,4 @@
1
- import type { MediaManagerAP } from "./MediaManagerAP";
1
+ import type { MediaManagerAP } from "./MediaManagerAP.js";
2
2
  export interface MediaManagerMetaAP {
3
3
  id?: string;
4
4
  key?: string;
package/models/User.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { WidgetConfig, WidgetsLayouts } from "../lib/widgets/widgetHandler";
2
- import type { Group } from "./Group";
1
+ import type { WidgetConfig, WidgetsLayouts } from "../lib/widgets/widgetHandler.js";
2
+ import type { Group } from "./Group.js";
3
3
  export interface User {
4
4
  id?: number;
5
5
  login: string;
@@ -1,4 +1,4 @@
1
- import type { Notification } from "./Notification";
1
+ import type { Notification } from "./Notification.js";
2
2
  export interface UserNotification {
3
3
  id: number;
4
4
  userId: number;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adminizer",
3
3
  "type": "module",
4
- "version": "5.0.0-build.0",
4
+ "version": "5.0.0-build.10",
5
5
  "main": "index.js",
6
6
  "exports": {
7
7
  ".": "./index.js",
@@ -1,6 +1,6 @@
1
- import { Adminizer } from "../lib/Adminizer";
2
- import { Filter } from "../models/Filter";
3
- import { User } from "../models/User";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
+ import { Filter } from "../models/Filter.js";
3
+ import { User } from "../models/User.js";
4
4
  /**
5
5
  * Feed export format types
6
6
  */
@@ -1,4 +1,4 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default class Router {
3
3
  adminizer: Adminizer;
4
4
  constructor(adminizer: Adminizer);
package/system/Router.js CHANGED
@@ -29,9 +29,10 @@ import { Adminizer } from "../lib/Adminizer.js";
29
29
  import timezones from "../controllers/timezones.js";
30
30
  import { NotificationController } from "../controllers/notifications/NotificationController.js";
31
31
  import { HistoryController } from "../controllers/history-actions/HistoryController.js";
32
+ import { AiAssistantController } from "../controllers/ai/AiAssistantController.js";
32
33
  import listUserFilters from "../controllers/listUserFilters.js";
33
34
  import { requireAnyPermission, requireAuthAPI, requireAuthEnabled, requireAuthUI, requirePermission } from "../policies/authPolicies.js";
34
- import { catalogToken, groupFilterVisibilityToken, historyToken, mediaManagerToken, modelCreateToken, modelDeleteToken, modelReadToken, modelUpdateToken, widgetToken, widgetsToken } from "../policies/permissionResolvers.js";
35
+ import { aiModelToken, catalogToken, groupFilterVisibilityToken, historyToken, mediaManagerToken, modelCreateToken, modelDeleteToken, modelReadToken, modelUpdateToken, widgetToken, widgetsToken } from "../policies/permissionResolvers.js";
35
36
  import { bindWithMiddlewares } from "./routePolicies.js";
36
37
  export default class Router {
37
38
  adminizer;
@@ -217,6 +218,13 @@ export default class Router {
217
218
  */
218
219
  adminizer.app.get(`${adminizer.config.routePrefix}/api/user-key`, withPolicies(getUserApiKey, requireAuthEnabled(), requireAuthAPI()));
219
220
  adminizer.app.post(`${adminizer.config.routePrefix}/api/user-key/regenerate`, withPolicies(regenerateUserApiKey, requireAuthEnabled(), requireAuthAPI()));
221
+ /**
222
+ * AI assistant — consumed by src/assets/js/contexts/AiAssistantContext.tsx
223
+ */
224
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/ai-assistant/models`, withPolicies(AiAssistantController.getModels, requireAuthAPI()));
225
+ adminizer.app.get(`${adminizer.config.routePrefix}/api/ai-assistant/history/:modelId`, withPolicies(AiAssistantController.getHistory, requireAuthAPI(), requirePermission(aiModelToken)));
226
+ adminizer.app.post(`${adminizer.config.routePrefix}/api/ai-assistant/query`, withPolicies(AiAssistantController.sendMessage, requireAuthAPI(), requirePermission(aiModelToken)));
227
+ adminizer.app.delete(`${adminizer.config.routePrefix}/api/ai-assistant/history/:modelId`, withPolicies(AiAssistantController.resetHistory, requireAuthAPI(), requirePermission(aiModelToken)));
220
228
  adminizer.app.get(`${adminizer.config.routePrefix}/get-timezones`, withPolicies(timezones, requireAuthUI()));
221
229
  if (adminizer.config.models) {
222
230
  for (let model in adminizer.config.models) {
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindAccessRights(adminizer: Adminizer): Promise<void>;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindAuthorization(adminizer: Adminizer): Promise<void>;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function bindControls(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function bindCors(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindCustomFilterHandlers(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from '../lib/Adminizer';
1
+ import { Adminizer } from '../lib/Adminizer.js';
2
2
  export default function bindDashboardWidgets(adminizer: Adminizer): Promise<void>;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindDev(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindHistory(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function bindInertia(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindMediaManager(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from '../lib/Adminizer';
1
+ import { Adminizer } from '../lib/Adminizer.js';
2
2
  export declare function bindNotifications(adminizer: Adminizer): void;
@@ -1,3 +1,3 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function createDeprecatedAdminizerProxy(adminizer: Adminizer, warn?: (message: string) => void): Adminizer;
3
3
  export default function bindReqFunctions(adminizer: Adminizer): void;
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export default function bindTranslations(adminizer: Adminizer): void;
@@ -1,4 +1,4 @@
1
- import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
2
- import { InternalModelAccessMap } from "../interfaces/internalModelAccess";
3
- import { ModelHandler } from "../lib/model/ModelHandler";
1
+ import { AdminpanelConfig } from "../interfaces/adminpanelConfig.js";
2
+ import { InternalModelAccessMap } from "../interfaces/internalModelAccess.js";
3
+ import { ModelHandler } from "../lib/model/ModelHandler.js";
4
4
  export declare function buildInternalModelAccess(config: AdminpanelConfig, modelHandler: ModelHandler): InternalModelAccessMap | undefined;
@@ -1,4 +1,4 @@
1
- import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
1
+ import { AdminpanelConfig } from "../interfaces/adminpanelConfig.js";
2
2
  export declare function setDefaultConfig(config: AdminpanelConfig): void;
3
3
  export declare function getDefaultConfig(): AdminpanelConfig;
4
4
  export declare function defaults(): {
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function bindWithMiddlewares(adminizer: Adminizer, middlewares: MiddlewareType[], action: MiddlewareType, policies?: MiddlewareType[]): MiddlewareType[];
@@ -1,4 +1,4 @@
1
- import type { AbstractModel, Attribute } from "../lib/model/AbstractModel";
1
+ import type { AbstractModel, Attribute } from "../lib/model/AbstractModel.js";
2
2
  export interface SystemModelAttributeContract {
3
3
  type?: Attribute["type"];
4
4
  required?: boolean;
@@ -61,8 +61,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
61
61
  color: { type: "string" },
62
62
  version: { type: "number" },
63
63
  columns: { relation: { kind: "many", target: "FilterColumn" } },
64
- createdAt: { type: "string" },
65
- updatedAt: { type: "string" },
64
+ createdAt: { type: "date" },
65
+ updatedAt: { type: "date" },
66
66
  },
67
67
  },
68
68
  {
@@ -87,8 +87,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
87
87
  diff: { type: "json" },
88
88
  user: { relation: { kind: "one", target: "User" } },
89
89
  isCurrent: { type: "boolean" },
90
- createdAt: { type: "string" },
91
- updatedAt: { type: "string" },
90
+ createdAt: { type: "date" },
91
+ updatedAt: { type: "date" },
92
92
  preview: { type: "boolean" },
93
93
  },
94
94
  },
@@ -102,8 +102,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
102
102
  notificationClass: { type: "string" },
103
103
  channel: { type: "string" },
104
104
  metadata: { type: "json" },
105
- createdAt: { type: "string" },
106
- updatedAt: { type: "string" },
105
+ createdAt: { type: "date" },
106
+ updatedAt: { type: "date" },
107
107
  },
108
108
  },
109
109
  {
@@ -128,7 +128,11 @@ export function validateSystemModelContract(model, contract, options = {}) {
128
128
  errors.push(`attribute "${attributeName}" is missing`);
129
129
  continue;
130
130
  }
131
- if (expected.type && actual.type !== expected.type) {
131
+ // Before `date` existed, temporal columns were reported as `string`.
132
+ // Keep accepting that from third-party adapters that have not been updated.
133
+ const typeMatches = expected.type === actual.type
134
+ || (expected.type === "date" && actual.type === "string");
135
+ if (expected.type && !typeMatches) {
132
136
  errors.push(`attribute "${attributeName}" must have type "${expected.type}", received "${actual.type}"`);
133
137
  }
134
138
  if (expected.required === true && actual.required !== true) {
@@ -1,2 +1,2 @@
1
- import { Adminizer } from "../lib/Adminizer";
1
+ import { Adminizer } from "../lib/Adminizer.js";
2
2
  export declare function validateSystemModels(adminizer: Adminizer): void;
@@ -1 +0,0 @@
1
- import{u as B,r as m,a as M,j as e,B as d,L as j,I as f,M as H,b as O,c as n,d as c,S as b,i as w,k as v,l as N,m as y,C as g,T as Y,e as _,f as $,g as G,h as J,n as Q,K as W,o as X,R as Z,p as C,t as h}from"./app.js";import{M as ee,A as se}from"./app-layout-eaSzcROf.js";import"./use-appearance-_EbbjHTh.js";function ae(){const l=B(),[k,P]=m.useState(),{fields:A,groups:F,auth:z}=l.props,[p,I]=m.useState(!1),[x,U]=m.useState(l.props.apiKey),[K,u]=m.useState(!1),{data:r,setData:S,errors:R,setError:T,clearErrors:L,post:E,processing:i}=M({...Object.fromEntries(A.map(s=>[s.name,s.value])),...Object.fromEntries(F.map(s=>[s.name,s.value]))});m.useEffect(()=>{(async()=>{const o=await C.get(`${window.routePrefix}/get-timezones`);P(o.data.timezones)})()},[]);const a=s=>l.props.fields.find(o=>o.name===s),D=s=>{if(s.preventDefault(),r.userPassword!==r.repeatUserPassword){T("repeatUserPassword",l.props.passwordError);return}E(l.props.postLink)},t=(s,o)=>{L(),S(s,o)},q=async()=>{try{const s=await C.post("/adminizer/api/user-key/regenerate");U(s.data.apiKey),h.success("User API key regenerated")}catch(s){console.error("Failed to regenerate user API key:",s),h.error("Failed to regenerate user API key")}u(!1)},V=async()=>{if(x)try{await navigator.clipboard.writeText(x),h.success("API key copied to clipboard")}catch{h.error("Failed to copy")}};return e.jsxs("div",{className:"flex h-full flex-1 flex-col gap-4 rounded-xl p-4",children:[e.jsxs("div",{className:"w-full sticky z-[1001] py-4 pb-8 top-0 h-fit bg-background flex gap-4",children:[e.jsx(d,{className:"mb-3 w-fit",asChild:!0,children:e.jsxs(j,{href:l.props.btnBack.link,children:[e.jsx(f,{iconNode:H}),l.props.btnBack.title]})}),e.jsxs(d,{variant:"green",type:"submit",className:"w-fit",form:"addUserForm",disabled:i||l.props.view,children:[i&&e.jsx(O,{className:"h-4 w-4 animate-spin"}),l.props.btnSave.title]})]}),e.jsx("form",{id:"addUserForm",onSubmit:D,className:l.props.view?"cursor-not-allowed":"",children:e.jsxs("div",{className:"flex flex-col gap-10 max-w-[1144px]",children:[e.jsx("h2",{className:"font-bold text-xl",children:l.props.head}),e.jsxs("div",{className:"flex-col xl:flex-row flex gap-16",children:[e.jsxs("div",{className:"basis-1/2 flex flex-col gap-6",children:[e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("login")?.name,children:a("login")?.label}),e.jsx(c,{id:a("login")?.name,type:"text",required:!0,tabIndex:1,autoComplete:"username",value:r.login,onChange:s=>t("login",s.target.value),disabled:i||l.props.view,placeholder:a("login")?.label})]}),e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("fullName")?.name,children:a("fullName")?.label}),e.jsx(c,{id:a("fullName")?.name,type:"text",required:!0,tabIndex:1,autoComplete:"additional-name",value:r.fullName,onChange:s=>t("fullName",s.target.value),disabled:i||l.props.view,placeholder:a("fullName")?.label})]}),e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("email")?.name,children:a("email")?.label}),e.jsx(c,{id:a("email")?.name,type:"email",required:!0,tabIndex:1,autoComplete:"email",value:r.email,onChange:s=>t("email",s.target.value),disabled:i||l.props.view,placeholder:a("email")?.label})]})]}),e.jsxs("div",{className:"basis-1/2 flex flex-col gap-6",children:[e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("timezone")?.name,children:a("timezone")?.label}),e.jsxs(b,{onValueChange:s=>t("timezone",s),defaultValue:r.timezone,disabled:i||l.props.view,children:[e.jsx(w,{className:"w-full cursor-pointer",children:e.jsx(v,{placeholder:a("timezone")?.name})}),e.jsx(N,{children:(k??[]).map(s=>e.jsx(y,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs("div",{className:"flex flex-col md:flex-row justify-start gap-4 xl:justify-between items-start md:items-center",children:[a("date")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("date")?.name,children:a("date")?.label}),e.jsx(c,{id:a("date")?.name,type:"date",className:"max-w-fit",tabIndex:1,value:r.date,onChange:s=>t("date",s.target.value),disabled:i})]}),e.jsxs("div",{className:"flex gap-6",children:[a("isAdmin")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:a("isAdmin")?.name,children:a("isAdmin")?.label}),e.jsx(g,{id:a("isAdmin")?.name,className:"cursor-pointer size-5",disabled:i||l.props.view,checked:r.isAdmin,onCheckedChange:s=>t("isAdmin",s)})]}),a("isConfirmed")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:a("isConfirmed")?.name,children:a("isConfirmed")?.label}),e.jsx(g,{id:a("isConfirmed")?.name,className:"cursor-pointer size-5",disabled:i||l.props.view,checked:r.isConfirmed,onCheckedChange:s=>t("isConfirmed",s)})]})]})]}),a("locale")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("locale")?.name,children:a("locale")?.label}),e.jsxs(b,{onValueChange:s=>t("locale",s),defaultValue:r.locale,disabled:i||l.props.view,children:[e.jsx(w,{className:"w-full cursor-pointer",children:e.jsx(v,{placeholder:a("locale")?.name})}),e.jsx(N,{children:(l.props.locales??[]).map(s=>e.jsx(y,{value:s.value,children:s.label},s.value))})]})]})]})]}),z.user.isAdministrator&&e.jsx(d,{className:"w-fit",asChild:!0,variant:"outline",children:e.jsxs(j,{href:l.props.userPretend.postLink,method:"post",data:{login:r.login,pretend:!0},children:[e.jsx(ee,{name:"masks",className:"!text-[18px]"}),l.props.userPretend.label]})}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx("label",{className:"font-bold text-xl",children:a("userPassword")?.label}),e.jsx(Y,{children:e.jsxs(_,{children:[e.jsx($,{onClick:s=>s.preventDefault(),children:e.jsx(f,{iconNode:G,className:"text-primary w-5 h-5 cursor-pointer"})}),e.jsx(J,{align:"center",side:"top",children:e.jsx("p",{children:a("userPassword")?.tooltip})})]})})]}),e.jsxs("div",{className:"grid grid-col-1 lg:grid-cols-2 grid-rows-2 gap-x-16 gap-y-6",children:[e.jsxs("div",{className:"grid gap-4 col-span-1",children:[e.jsx(n,{htmlFor:a("userPassword")?.name,children:a("userPassword")?.label}),e.jsx(c,{id:a("userPassword")?.name,type:"password",required:!l.props.edit,tabIndex:1,autoComplete:"new-password",value:r.password,onChange:s=>t("userPassword",s.target.value),disabled:i||l.props.view,placeholder:a("userPassword")?.label})]}),e.jsxs("div",{className:"grid gap-4 col-span-1 col-start-1",children:[e.jsx(n,{htmlFor:a("repeatUserPassword")?.name,children:a("repeatUserPassword")?.label}),e.jsx(c,{id:a("repeatUserPassword")?.name,type:"password",required:!l.props.edit,tabIndex:1,autoComplete:"new-password",value:r.repeatUserPassword,onChange:s=>t("repeatUserPassword",s.target.value),disabled:i||l.props.view,placeholder:a("repeatUserPassword")?.label}),e.jsx(Q,{message:R.repeatUserPassword})]})]}),l.props.groups.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"font-bold text-xl",children:l.props.groupHead}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-5 xl:grid-cols-6 gap-4",children:l.props.groups.map(s=>e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:s.name,children:s.label}),e.jsx(g,{id:s.name,disabled:i||l.props.view,className:"cursor-pointer size-5",checked:r[s.name],onCheckedChange:o=>t(s.name,o)})]},s.name))})]}),l.props.edit&&!l.props.view&&e.jsxs(e.Fragment,{children:[e.jsxs("h2",{className:"font-bold text-xl flex items-center gap-2",children:[e.jsx(W,{className:"w-5 h-5"}),"User API Key (for feeds)"]}),e.jsxs("div",{className:"flex flex-col gap-4",children:[x&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"flex-1 text-sm bg-muted px-3 py-2 rounded font-mono truncate",children:p?x:"••••••••••••••••••••••••"}),e.jsx(d,{variant:"outline",size:"sm",type:"button",onClick:()=>I(!p),children:p?"Hide":"Show"}),p&&e.jsx(d,{variant:"outline",size:"sm",type:"button",onClick:V,children:e.jsx(X,{className:"w-4 h-4"})})]}),e.jsxs(d,{variant:"outline",size:"sm",type:"button",className:"w-fit",onClick:()=>u(!0),children:[e.jsx(Z,{className:"w-4 h-4 mr-2"}),"Regenerate User API Key"]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Regenerating this key will invalidate all existing feed URLs. You will need to update the ",e.jsx("code",{className:"bg-muted px-1 text-xs",children:"?userKey="})," parameter in all feed links."]})]})]}),K&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:e.jsxs("div",{className:"bg-background rounded-lg shadow-lg max-w-md w-full p-6",children:[e.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Regenerate User API Key"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"This will invalidate all existing feed URLs. You will need to update them with the new userKey."}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",type:"button",onClick:()=>u(!1),children:"Cancel"}),e.jsx(d,{variant:"destructive",type:"button",onClick:q,children:"Regenerate"})]})]})})]})})]})}const le=[];function ne(){return e.jsx(se,{breadcrumbs:le,children:e.jsx(ae,{})})}export{ne as default};