@carlonicora/nextjs-jsonapi 1.8.1 → 1.9.0

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 (58) hide show
  1. package/dist/{BlockNoteEditor-N534QVBR.mjs → BlockNoteEditor-MXNV2O43.mjs} +5 -5
  2. package/dist/{BlockNoteEditor-KSPPX6JO.js → BlockNoteEditor-O32YPSNN.js} +15 -15
  3. package/dist/{BlockNoteEditor-KSPPX6JO.js.map → BlockNoteEditor-O32YPSNN.js.map} +1 -1
  4. package/dist/{JsonApiRequest-SYZ6FGCA.mjs → JsonApiRequest-ARXYJ2AG.mjs} +2 -2
  5. package/dist/JsonApiRequest-FZAFAES3.js +24 -0
  6. package/dist/{JsonApiRequest-2OM5NDAW.js.map → JsonApiRequest-FZAFAES3.js.map} +1 -1
  7. package/dist/{chunk-IGOWVLJH.mjs → chunk-33UYFFIK.mjs} +5 -1
  8. package/dist/chunk-33UYFFIK.mjs.map +1 -0
  9. package/dist/{chunk-SAL7XW2G.mjs → chunk-CHNXYTKO.mjs} +40 -1
  10. package/dist/chunk-CHNXYTKO.mjs.map +1 -0
  11. package/dist/{chunk-AGWQ75PQ.js → chunk-I7OQ5WKX.js} +5 -1
  12. package/dist/chunk-I7OQ5WKX.js.map +1 -0
  13. package/dist/{chunk-7Z7FEMEB.js → chunk-LPBABDEP.js} +43 -23
  14. package/dist/chunk-LPBABDEP.js.map +1 -0
  15. package/dist/{chunk-CK5KLBZV.mjs → chunk-MOVONDSX.mjs} +28 -8
  16. package/dist/chunk-MOVONDSX.mjs.map +1 -0
  17. package/dist/{chunk-B426TLJC.js → chunk-PVN4DI3H.js} +395 -395
  18. package/dist/{chunk-B426TLJC.js.map → chunk-PVN4DI3H.js.map} +1 -1
  19. package/dist/{chunk-CKS6SVUK.js → chunk-UVXEP2ED.js} +41 -2
  20. package/dist/chunk-UVXEP2ED.js.map +1 -0
  21. package/dist/{chunk-TLBZWOCU.mjs → chunk-YHUK7PFT.mjs} +7 -7
  22. package/dist/chunk-YHUK7PFT.mjs.map +1 -0
  23. package/dist/client/index.js +5 -5
  24. package/dist/client/index.mjs +4 -4
  25. package/dist/components/index.js +5 -5
  26. package/dist/components/index.mjs +4 -4
  27. package/dist/contexts/index.js +5 -5
  28. package/dist/contexts/index.mjs +4 -4
  29. package/dist/core/index.d.mts +35 -1
  30. package/dist/core/index.d.ts +35 -1
  31. package/dist/core/index.js +13 -3
  32. package/dist/core/index.js.map +1 -1
  33. package/dist/core/index.mjs +13 -3
  34. package/dist/index.d.mts +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.js +14 -4
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +14 -4
  39. package/dist/server/index.js +12 -12
  40. package/dist/server/index.mjs +2 -2
  41. package/package.json +1 -1
  42. package/src/client/JsonApiClient.ts +2 -0
  43. package/src/client/config.ts +3 -1
  44. package/src/components/containers/PageContainer.tsx +1 -1
  45. package/src/core/registry/ModuleRegistry.ts +33 -3
  46. package/src/core/registry/bootstrapStore.ts +63 -0
  47. package/src/core/registry/index.ts +1 -0
  48. package/src/unified/JsonApiRequest.ts +3 -1
  49. package/dist/JsonApiRequest-2OM5NDAW.js +0 -24
  50. package/dist/chunk-7Z7FEMEB.js.map +0 -1
  51. package/dist/chunk-AGWQ75PQ.js.map +0 -1
  52. package/dist/chunk-CK5KLBZV.mjs.map +0 -1
  53. package/dist/chunk-CKS6SVUK.js.map +0 -1
  54. package/dist/chunk-IGOWVLJH.mjs.map +0 -1
  55. package/dist/chunk-SAL7XW2G.mjs.map +0 -1
  56. package/dist/chunk-TLBZWOCU.mjs.map +0 -1
  57. /package/dist/{BlockNoteEditor-N534QVBR.mjs.map → BlockNoteEditor-MXNV2O43.mjs.map} +0 -0
  58. /package/dist/{JsonApiRequest-SYZ6FGCA.mjs.map → JsonApiRequest-ARXYJ2AG.mjs.map} +0 -0
@@ -54,6 +54,39 @@ var JsonApiDataFactory = class {
54
54
  }
55
55
  };
56
56
 
57
+ // src/core/registry/bootstrapStore.ts
58
+ var _bootstrapper = null;
59
+ var _bootstrapAttempted = false;
60
+ function setBootstrapper(fn) {
61
+ _bootstrapper = fn;
62
+ }
63
+ _chunk7QVYU63Ejs.__name.call(void 0, setBootstrapper, "setBootstrapper");
64
+ function getBootstrapper() {
65
+ return _bootstrapper;
66
+ }
67
+ _chunk7QVYU63Ejs.__name.call(void 0, getBootstrapper, "getBootstrapper");
68
+ function tryBootstrap() {
69
+ if (_bootstrapAttempted && !_bootstrapper) {
70
+ return false;
71
+ }
72
+ _bootstrapAttempted = true;
73
+ if (_bootstrapper) {
74
+ _bootstrapper();
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ _chunk7QVYU63Ejs.__name.call(void 0, tryBootstrap, "tryBootstrap");
80
+ function hasBootstrapper() {
81
+ return _bootstrapper !== null;
82
+ }
83
+ _chunk7QVYU63Ejs.__name.call(void 0, hasBootstrapper, "hasBootstrapper");
84
+ function resetBootstrapStore() {
85
+ _bootstrapper = null;
86
+ _bootstrapAttempted = false;
87
+ }
88
+ _chunk7QVYU63Ejs.__name.call(void 0, resetBootstrapStore, "resetBootstrapStore");
89
+
57
90
  // src/core/utils/translateResponse.ts
58
91
  function translateData(params) {
59
92
  const factoryClass = DataClassRegistry.get(params.classKey);
@@ -147,6 +180,7 @@ var _staticConfig = null;
147
180
  function configureJsonApi(config) {
148
181
  _staticConfig = config;
149
182
  if (config.bootstrapper) {
183
+ setBootstrapper(config.bootstrapper);
150
184
  config.bootstrapper();
151
185
  }
152
186
  }
@@ -382,5 +416,10 @@ _chunk7QVYU63Ejs.__name.call(void 0, JsonApiDelete, "JsonApiDelete");
382
416
 
383
417
 
384
418
 
385
- exports.DataClassRegistry = DataClassRegistry; exports.JsonApiDataFactory = JsonApiDataFactory; exports.translateData = translateData; exports.translateResponse = translateResponse; exports.configureJsonApi = configureJsonApi; exports.getApiUrl = getApiUrl; exports.getAppUrl = getAppUrl; exports.getTrackablePages = getTrackablePages; exports.JsonApiGet = JsonApiGet; exports.JsonApiPost = JsonApiPost; exports.JsonApiPut = JsonApiPut; exports.JsonApiPatch = JsonApiPatch; exports.JsonApiDelete = JsonApiDelete;
386
- //# sourceMappingURL=chunk-CKS6SVUK.js.map
419
+
420
+
421
+
422
+
423
+
424
+ exports.DataClassRegistry = DataClassRegistry; exports.JsonApiDataFactory = JsonApiDataFactory; exports.setBootstrapper = setBootstrapper; exports.getBootstrapper = getBootstrapper; exports.tryBootstrap = tryBootstrap; exports.hasBootstrapper = hasBootstrapper; exports.resetBootstrapStore = resetBootstrapStore; exports.translateData = translateData; exports.translateResponse = translateResponse; exports.configureJsonApi = configureJsonApi; exports.getApiUrl = getApiUrl; exports.getAppUrl = getAppUrl; exports.getTrackablePages = getTrackablePages; exports.JsonApiGet = JsonApiGet; exports.JsonApiPost = JsonApiPost; exports.JsonApiPut = JsonApiPut; exports.JsonApiPatch = JsonApiPatch; exports.JsonApiDelete = JsonApiDelete;
425
+ //# sourceMappingURL=chunk-UVXEP2ED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-UVXEP2ED.js","../src/core/registry/DataClassRegistry.ts","../src/core/factories/JsonApiDataFactory.ts","../src/core/registry/bootstrapStore.ts","../src/core/utils/translateResponse.ts","../src/unified/JsonApiRequest.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-UVXEP2ED.js","sourcesContent":[null,"import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\n\nexport class DataClassRegistry {\n private static _map = new Map<string, { new (): ApiDataInterface }>();\n\n public static registerObjectClass(\n key: ApiRequestDataTypeInterface,\n classConstructor: { new (): ApiDataInterface },\n ): void {\n const classKey = key.name;\n if (!this._map.has(classKey)) {\n this._map.set(classKey, classConstructor);\n }\n }\n\n public static get(classKey: ApiRequestDataTypeInterface): {\n new (): ApiDataInterface;\n } {\n const response = this._map.get(classKey.name);\n if (!response) {\n throw new Error(`Class not registered for key: ${typeof classKey === \"string\" ? classKey : classKey.name}`);\n }\n\n return response;\n }\n\n /**\n * Bootstrap the registry with all modules.\n * This is a convenience method for apps to register all their modules at once.\n *\n * @param modules - An object with module definitions (like the app's Modules class)\n */\n public static bootstrap(modules: Record<string, ApiRequestDataTypeInterface>): void {\n Object.values(modules).forEach((module) => {\n if (module && module.model) {\n this.registerObjectClass(module, module.model);\n }\n });\n }\n\n /**\n * Clear all registered classes. Useful for testing.\n */\n public static clear(): void {\n this._map.clear();\n }\n}\n\n// Export alias for backward compatibility\nexport { DataClassRegistry as DataClass };\n","import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\nexport class JsonApiDataFactory {\n public static create(classKey: ApiRequestDataTypeInterface, data: any): any {\n const factoryClass = DataClassRegistry.get(classKey);\n\n const instance = new factoryClass() as ApiDataInterface;\n return instance.createJsonApi(data);\n }\n}\n","/**\n * Centralized bootstrap store accessible from ModuleRegistry.\n * This file has NO external dependencies to avoid circular imports.\n *\n * The bootstrap store allows ModuleRegistry to call the app's bootstrapper\n * when modules are accessed before bootstrap() was called, providing\n * self-healing behavior for module evaluation order issues.\n */\n\ntype BootstrapperFn = () => void;\n\nlet _bootstrapper: BootstrapperFn | null = null;\nlet _bootstrapAttempted = false;\n\n/**\n * Register the bootstrapper function.\n * Called by configureJsonApi() from client/config, client/JsonApiClient, or unified/JsonApiRequest.\n */\nexport function setBootstrapper(fn: BootstrapperFn): void {\n _bootstrapper = fn;\n}\n\n/**\n * Get the registered bootstrapper function.\n * Returns null if no bootstrapper has been registered.\n */\nexport function getBootstrapper(): BootstrapperFn | null {\n return _bootstrapper;\n}\n\n/**\n * Attempt to run the bootstrapper if one is registered.\n * Returns true if bootstrapper was executed, false if not available.\n * Safe to call multiple times - bootstrapper is expected to be idempotent.\n */\nexport function tryBootstrap(): boolean {\n if (_bootstrapAttempted && !_bootstrapper) {\n // Already tried and no bootstrapper available\n return false;\n }\n _bootstrapAttempted = true;\n\n if (_bootstrapper) {\n _bootstrapper();\n return true;\n }\n return false;\n}\n\n/**\n * Check if a bootstrapper has been registered.\n */\nexport function hasBootstrapper(): boolean {\n return _bootstrapper !== null;\n}\n\n/**\n * Reset the bootstrap store. Useful for testing.\n */\nexport function resetBootstrapStore(): void {\n _bootstrapper = null;\n _bootstrapAttempted = false;\n}\n","import { ApiData } from \"../interfaces/ApiData\";\nimport { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../interfaces/ApiResponseInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\n/**\n * Translates raw JSON:API data into typed objects.\n * Does not require API response metadata.\n */\nexport function translateData<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n data: any;\n}): T | T[] {\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n const included: any = params.data.included ?? [];\n\n if (Array.isArray(params.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.data.data });\n responseData.push(object as T);\n }\n\n return responseData as T[];\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.data.data,\n included: included,\n });\n\n return responseData as T;\n }\n}\n\n/**\n * Translates a full API response into a typed ApiResponseInterface.\n * Includes pagination support.\n */\nexport async function translateResponse<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n apiResponse: ApiData;\n companyId?: string;\n language: string;\n paginationHandler?: (endpoint: string) => Promise<ApiResponseInterface>;\n}): Promise<ApiResponseInterface> {\n const response: ApiResponseInterface = {\n ok: true,\n response: 0,\n data: [],\n error: \"\",\n };\n\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n response.ok = params.apiResponse.ok;\n response.response = params.apiResponse.status;\n\n if (!params.apiResponse.ok) {\n response.error = params.apiResponse?.data?.message ?? params.apiResponse.statusText;\n return response;\n }\n\n if (params.apiResponse.status === 204) return response;\n\n response.raw = params.apiResponse.data;\n\n try {\n const included: any = params.apiResponse.data.included ?? [];\n\n if (params.apiResponse.data.links) {\n response.self = params.apiResponse.data.links.self;\n\n if (params.apiResponse.data.links.next && params.paginationHandler) {\n response.next = params.apiResponse.data.links.next;\n response.nextPage = async () => params.paginationHandler!(params.apiResponse.data.links.next);\n }\n\n if (params.apiResponse.data.links.prev && params.paginationHandler) {\n response.prev = params.apiResponse.data.links.prev;\n response.prevPage = async () => params.paginationHandler!(params.apiResponse.data.links.prev);\n }\n }\n\n if (Array.isArray(params.apiResponse.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.apiResponse.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.apiResponse.data.data });\n responseData.push(object as T);\n }\n\n response.data = responseData;\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.apiResponse.data.data,\n included: included,\n });\n\n response.data = responseData;\n }\n } catch (e) {\n console.error(e);\n }\n\n return response;\n}\n","import { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiData } from \"../core/interfaces/ApiData\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { setBootstrapper } from \"../core/registry/bootstrapStore\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\n\n// Type definitions for dynamically imported functions (avoiding typeof import to prevent bundling)\ntype DirectFetchFn = (params: {\n method: string;\n url: string;\n token?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype ServerRequestFn = (params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype GetTokenFn = () => Promise<string | undefined>;\n\n// These will be dynamically imported based on environment\nlet _directFetch: DirectFetchFn;\nlet _serverRequest: ServerRequestFn;\nlet _getClientToken: GetTokenFn;\nlet _getServerToken: GetTokenFn;\n\n// Config storage for non-React contexts\nlet _staticConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for non-React contexts (e.g., server components).\n * For React contexts, use JsonApiProvider instead.\n */\nexport function configureJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _staticConfig = config;\n // Register and call bootstrapper to register all modules\n if (config.bootstrapper) {\n setBootstrapper(config.bootstrapper);\n config.bootstrapper();\n }\n}\n\nasync function getToken(): Promise<string | undefined> {\n if (typeof window === \"undefined\") {\n // Server-side\n if (!_getServerToken) {\n const serverModule = await import(\"../server/token\");\n _getServerToken = serverModule.getServerToken;\n }\n return _getServerToken();\n } else {\n // Client-side\n if (!_getClientToken) {\n const clientModule = await import(\"../client/token\");\n _getClientToken = clientModule.getClientToken;\n }\n return _getClientToken();\n }\n}\n\nasync function makeRequest(params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}): Promise<ApiData> {\n if (typeof window !== \"undefined\") {\n // Client-side: use direct fetch\n if (!_directFetch) {\n const clientModule = await import(\"../client/request\");\n _directFetch = clientModule.directFetch;\n }\n return _directFetch({\n method: params.method,\n url: params.url,\n token: params.token,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n } else {\n // Server-side: use server request with caching\n if (!_serverRequest) {\n const serverModule = await import(\"../server/request\");\n _serverRequest = serverModule.serverRequest;\n }\n return _serverRequest({\n method: params.method,\n url: params.url,\n token: params.token,\n cache: params.cache,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n }\n}\n\nexport function getApiUrl(): string {\n if (_staticConfig?.apiUrl) {\n return _staticConfig.apiUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_API_URL;\n if (!envUrl) {\n throw new Error(\"API URL not configured. Use configureJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\");\n }\n return envUrl;\n}\n\nexport function getAppUrl(): string {\n if (_staticConfig?.appUrl) {\n return _staticConfig.appUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_ADDRESS;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getTrackablePages(): ModuleWithPermissions[] {\n return _staticConfig?.trackablePages ?? [];\n}\n\nfunction runBootstrapper(): void {\n if (_staticConfig?.bootstrapper) {\n _staticConfig.bootstrapper();\n }\n}\n\nfunction buildUrl(endpoint: string): string {\n const apiUrl = getApiUrl();\n return endpoint.startsWith(\"http\") ? endpoint : `${apiUrl}${endpoint}`;\n}\n\nexport async function JsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"GET\",\n url: buildUrl(params.endpoint),\n token,\n cache: params.classKey.cache,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n JsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n }),\n });\n}\n\nexport async function JsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"POST\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PUT\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PATCH\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"DELETE\",\n url: buildUrl(params.endpoint),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"]}
@@ -9,7 +9,7 @@ import {
9
9
  useI18nLocale,
10
10
  useI18nRouter,
11
11
  useI18nTranslations
12
- } from "./chunk-IGOWVLJH.mjs";
12
+ } from "./chunk-33UYFFIK.mjs";
13
13
  import {
14
14
  AuthService,
15
15
  ClientAbstractService,
@@ -30,7 +30,7 @@ import {
30
30
  rehydrate,
31
31
  useComposedRefs,
32
32
  useIsMobile
33
- } from "./chunk-CK5KLBZV.mjs";
33
+ } from "./chunk-MOVONDSX.mjs";
34
34
  import {
35
35
  __name
36
36
  } from "./chunk-PAWJFY3S.mjs";
@@ -7434,7 +7434,7 @@ import { jsx as jsx91, jsxs as jsxs45 } from "react/jsx-runtime";
7434
7434
  function PageContainer({ children, testId, className }) {
7435
7435
  return /* @__PURE__ */ jsxs45("div", { className: `flex h-full w-full flex-col`, "data-testid": testId, children: [
7436
7436
  /* @__PURE__ */ jsx91(Header2, {}),
7437
- /* @__PURE__ */ jsx91("main", { className: cn(`flex w-full flex-1 flex-col gap-y-4 pt-4 pl-4 pr-4`, className), children })
7437
+ /* @__PURE__ */ jsx91("main", { className: cn(`flex w-full flex-1 flex-col gap-y-4 pt-4 pl-4 pr-4 pb-20`, className), children })
7438
7438
  ] });
7439
7439
  }
7440
7440
  __name(PageContainer, "PageContainer");
@@ -7594,7 +7594,7 @@ __name(AllowedUsersDetails, "AllowedUsersDetails");
7594
7594
  import dynamic from "next/dynamic";
7595
7595
  import React37 from "react";
7596
7596
  import { jsx as jsx96 } from "react/jsx-runtime";
7597
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-N534QVBR.mjs"), {
7597
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-MXNV2O43.mjs"), {
7598
7598
  ssr: false
7599
7599
  });
7600
7600
  var BlockNoteEditorContainer = React37.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -9588,7 +9588,7 @@ function useJsonApiGet(params) {
9588
9588
  setLoading(true);
9589
9589
  setError(null);
9590
9590
  try {
9591
- const { JsonApiGet } = await import("./JsonApiRequest-SYZ6FGCA.mjs");
9591
+ const { JsonApiGet } = await import("./JsonApiRequest-ARXYJ2AG.mjs");
9592
9592
  const language = navigator.language.split("-")[0] || "en";
9593
9593
  const apiResponse = await JsonApiGet({
9594
9594
  classKey: params.classKey,
@@ -9693,7 +9693,7 @@ function useJsonApiMutation(config) {
9693
9693
  setLoading(true);
9694
9694
  setError(null);
9695
9695
  try {
9696
- const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-SYZ6FGCA.mjs");
9696
+ const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-ARXYJ2AG.mjs");
9697
9697
  const language = navigator.language.split("-")[0] || "en";
9698
9698
  let apiResponse;
9699
9699
  switch (config.method) {
@@ -12088,4 +12088,4 @@ export {
12088
12088
  useUserTableStructure,
12089
12089
  useContentTableStructure
12090
12090
  };
12091
- //# sourceMappingURL=chunk-TLBZWOCU.mjs.map
12091
+ //# sourceMappingURL=chunk-YHUK7PFT.mjs.map