@carlonicora/nextjs-jsonapi 5.3.0 → 5.5.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 (233) hide show
  1. package/dist/{BlockNoteEditor-WTSQANKI.mjs → BlockNoteEditor-GVQCKRMU.mjs} +9 -8
  2. package/dist/BlockNoteEditor-GVQCKRMU.mjs.map +1 -0
  3. package/dist/{BlockNoteEditor-UJ6363LC.js → BlockNoteEditor-THBJH2UR.js} +24 -23
  4. package/dist/BlockNoteEditor-THBJH2UR.js.map +1 -0
  5. package/dist/{BlockNoteViewer-JVKWJZ6J.mjs → BlockNoteViewer-U6E3DS4F.mjs} +3 -3
  6. package/dist/{BlockNoteViewer-EL4JFB6P.js → BlockNoteViewer-VZOVKTFO.js} +4 -4
  7. package/dist/{BlockNoteViewer-EL4JFB6P.js.map → BlockNoteViewer-VZOVKTFO.js.map} +1 -1
  8. package/dist/BlogCategoryFields-DO48vOTE.d.mts +14 -0
  9. package/dist/BlogCategoryFields-DO48vOTE.d.ts +14 -0
  10. package/dist/BlogPostInterface-BB_4wcDR.d.mts +124 -0
  11. package/dist/BlogPostInterface-bWAT1rfR.d.ts +124 -0
  12. package/dist/billing/index.js +442 -442
  13. package/dist/billing/index.mjs +4 -4
  14. package/dist/blog-public.types-BbrzsC1c.d.mts +30 -0
  15. package/dist/blog-public.types-BbrzsC1c.d.ts +30 -0
  16. package/dist/chunk-3CGROPF3.mjs +107 -0
  17. package/dist/chunk-3CGROPF3.mjs.map +1 -0
  18. package/dist/{chunk-QKZUE5OF.mjs → chunk-3YW35YHQ.mjs} +1 -101
  19. package/dist/chunk-3YW35YHQ.mjs.map +1 -0
  20. package/dist/{chunk-6WU74VFU.mjs → chunk-6SQYXUVP.mjs} +2 -2
  21. package/dist/{chunk-CRI4T47Y.js → chunk-G6UE6MEP.js} +814 -59
  22. package/dist/chunk-G6UE6MEP.js.map +1 -0
  23. package/dist/{chunk-XGTQWBDJ.js → chunk-KSYQEKJX.js} +11 -111
  24. package/dist/chunk-KSYQEKJX.js.map +1 -0
  25. package/dist/{chunk-EO75CV76.js → chunk-S4YJ5WCW.js} +8 -8
  26. package/dist/{chunk-EO75CV76.js.map → chunk-S4YJ5WCW.js.map} +1 -1
  27. package/dist/{chunk-3BAM23VA.js → chunk-TY5FYP3G.js} +930 -883
  28. package/dist/chunk-TY5FYP3G.js.map +1 -0
  29. package/dist/{chunk-JQWI62NV.mjs → chunk-VC5A3AUZ.mjs} +776 -21
  30. package/dist/chunk-VC5A3AUZ.mjs.map +1 -0
  31. package/dist/{chunk-FNTQQFLH.mjs → chunk-W7F5BDSV.mjs} +2 -2
  32. package/dist/{chunk-QQQE3N2X.js → chunk-WPYT4UKJ.js} +3 -3
  33. package/dist/{chunk-QQQE3N2X.js.map → chunk-WPYT4UKJ.js.map} +1 -1
  34. package/dist/{chunk-MIZTWBPX.mjs → chunk-X5WIUUNG.mjs} +1485 -1438
  35. package/dist/chunk-X5WIUUNG.mjs.map +1 -0
  36. package/dist/chunk-YDYVJM4I.js +107 -0
  37. package/dist/chunk-YDYVJM4I.js.map +1 -0
  38. package/dist/client/index.js +5 -5
  39. package/dist/client/index.js.map +1 -1
  40. package/dist/client/index.mjs +4 -4
  41. package/dist/components/editors/server.d.mts +15 -0
  42. package/dist/components/editors/server.d.ts +15 -0
  43. package/dist/components/editors/server.js +38 -0
  44. package/dist/components/editors/server.js.map +1 -0
  45. package/dist/components/editors/server.mjs +38 -0
  46. package/dist/components/editors/server.mjs.map +1 -0
  47. package/dist/components/index.d.mts +46 -12
  48. package/dist/components/index.d.ts +46 -12
  49. package/dist/components/index.js +7 -5
  50. package/dist/components/index.js.map +1 -1
  51. package/dist/components/index.mjs +8 -6
  52. package/dist/contexts/index.d.mts +9 -1
  53. package/dist/contexts/index.d.ts +9 -1
  54. package/dist/contexts/index.js +5 -5
  55. package/dist/contexts/index.mjs +4 -4
  56. package/dist/core/index.d.mts +214 -3
  57. package/dist/core/index.d.ts +214 -3
  58. package/dist/core/index.js +38 -4
  59. package/dist/core/index.js.map +1 -1
  60. package/dist/core/index.mjs +37 -3
  61. package/dist/email-automations/index.d.mts +3 -0
  62. package/dist/email-automations/index.d.ts +3 -0
  63. package/dist/email-automations/index.js +99 -95
  64. package/dist/email-automations/index.js.map +1 -1
  65. package/dist/email-automations/index.mjs +30 -26
  66. package/dist/email-automations/index.mjs.map +1 -1
  67. package/dist/features/analytics/index.d.mts +11 -4
  68. package/dist/features/analytics/index.d.ts +11 -4
  69. package/dist/features/analytics/index.js +127 -135
  70. package/dist/features/analytics/index.js.map +1 -1
  71. package/dist/features/analytics/index.mjs +16 -24
  72. package/dist/features/analytics/index.mjs.map +1 -1
  73. package/dist/features/analytics/server.d.mts +5 -2
  74. package/dist/features/analytics/server.d.ts +5 -2
  75. package/dist/features/analytics/server.js +9 -8
  76. package/dist/features/analytics/server.js.map +1 -1
  77. package/dist/features/analytics/server.mjs +7 -6
  78. package/dist/features/analytics/server.mjs.map +1 -1
  79. package/dist/features/blog/index.css +30 -0
  80. package/dist/features/blog/index.css.map +1 -0
  81. package/dist/features/blog/index.d.mts +276 -0
  82. package/dist/features/blog/index.d.ts +276 -0
  83. package/dist/features/blog/index.js +1810 -0
  84. package/dist/features/blog/index.js.map +1 -0
  85. package/dist/features/blog/index.mjs +1810 -0
  86. package/dist/features/blog/index.mjs.map +1 -0
  87. package/dist/features/blog/server.d.mts +36 -0
  88. package/dist/features/blog/server.d.ts +36 -0
  89. package/dist/features/blog/server.js +167 -0
  90. package/dist/features/blog/server.js.map +1 -0
  91. package/dist/features/blog/server.mjs +167 -0
  92. package/dist/features/blog/server.mjs.map +1 -0
  93. package/dist/features/help/index.js +38 -38
  94. package/dist/features/help/index.mjs +4 -4
  95. package/dist/features/tokenusage/index.d.mts +1 -3
  96. package/dist/features/tokenusage/index.d.ts +1 -3
  97. package/dist/features/tokenusage/index.js +127 -135
  98. package/dist/features/tokenusage/index.js.map +1 -1
  99. package/dist/features/tokenusage/index.mjs +10 -18
  100. package/dist/features/tokenusage/index.mjs.map +1 -1
  101. package/dist/index.d.mts +4 -2
  102. package/dist/index.d.ts +4 -2
  103. package/dist/index.js +39 -5
  104. package/dist/index.js.map +1 -1
  105. package/dist/index.mjs +38 -4
  106. package/dist/{s3.service-CY-jgOAM.d.ts → s3.service-Bz_K-tjz.d.ts} +11 -0
  107. package/dist/{s3.service-Sri0QP7Z.d.mts → s3.service-D5zNCEW3.d.mts} +11 -0
  108. package/dist/server/index.d.mts +1 -1
  109. package/dist/server/index.d.ts +1 -1
  110. package/dist/server/index.js +9 -7
  111. package/dist/server/index.js.map +1 -1
  112. package/dist/server/index.mjs +13 -11
  113. package/messages/en.json +93 -0
  114. package/messages/it.json +93 -0
  115. package/package.json +19 -1
  116. package/src/components/editors/BlockNoteEditor.tsx +13 -3
  117. package/src/components/editors/server/BlockNoteServerContent.tsx +28 -0
  118. package/src/components/editors/server/__tests__/renderBlockNoteHTML.spec.ts +44 -0
  119. package/src/components/editors/server/renderBlockNoteHTML.ts +26 -0
  120. package/src/components/editors/server-entry.ts +7 -0
  121. package/src/components/forms/FormBlockNote.tsx +4 -0
  122. package/src/components/index.ts +1 -0
  123. package/src/components/navigations/ContentTitle.tsx +14 -3
  124. package/src/components/viewers/BlockNoteStaticViewer.tsx +44 -0
  125. package/src/core/index.ts +4 -0
  126. package/src/core/registry/ModuleRegistry.ts +6 -0
  127. package/src/features/administration/components/AdminIndexContainer.tsx +61 -33
  128. package/src/features/administration/components/__tests__/AdminIndexContainer.spec.tsx +61 -1
  129. package/src/features/administration/components/index.ts +2 -1
  130. package/src/features/administration/contexts/AdministrationContext.tsx +11 -3
  131. package/src/features/administration/contexts/__tests__/AdministrationContext.spec.tsx +40 -0
  132. package/src/features/ai-connection/ai-connection.module.ts +2 -0
  133. package/src/features/ai-connection/contexts/AiConnectionsContext.tsx +3 -16
  134. package/src/features/ai-connection/contexts/__tests__/AiConnectionsContext.spec.tsx +33 -0
  135. package/src/features/analytics/__tests__/server-entry.spec.tsx +2 -1
  136. package/src/features/analytics/analytics.modules.ts +22 -5
  137. package/src/features/analytics/components/AnalyticsAdminContainer.tsx +4 -3
  138. package/src/features/analytics/components/AnalyticsAdminPageContainer.tsx +6 -3
  139. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +4 -3
  140. package/src/features/analytics/components/__tests__/AnalyticsJourneyContainer.spec.tsx +11 -0
  141. package/src/features/analytics/components/__tests__/AnalyticsPageContainers.spec.tsx +12 -1
  142. package/src/features/analytics/components/server/AnalyticsAdminPage.tsx +6 -3
  143. package/src/features/analytics/contexts/AnalyticsAdminContext.tsx +8 -17
  144. package/src/features/analytics/contexts/__tests__/AnalyticsAdminContext.spec.tsx +17 -0
  145. package/src/features/billing/stripe-price/stripe-price.module.ts +2 -0
  146. package/src/features/billing/stripe-product/stripe-product.module.ts +2 -0
  147. package/src/features/blog/BlogModules.ts +49 -0
  148. package/src/features/blog/components/admin/BlogAdminContainer.tsx +39 -0
  149. package/src/features/blog/components/admin/BlogCategoriesList.tsx +56 -0
  150. package/src/features/blog/components/admin/BlogCategoryEditor.tsx +230 -0
  151. package/src/features/blog/components/admin/BlogCoverImageField.tsx +123 -0
  152. package/src/features/blog/components/admin/BlogLayoutSetting.tsx +86 -0
  153. package/src/features/blog/components/admin/BlogPostComparison.tsx +54 -0
  154. package/src/features/blog/components/admin/BlogPostContainer.tsx +101 -0
  155. package/src/features/blog/components/admin/BlogPostDeleter.tsx +35 -0
  156. package/src/features/blog/components/admin/BlogPostEditor.tsx +216 -0
  157. package/src/features/blog/components/admin/BlogPostPublishButton.tsx +50 -0
  158. package/src/features/blog/components/admin/BlogPostTranslationEditor.tsx +118 -0
  159. package/src/features/blog/components/admin/BlogPostTranslationPanel.tsx +136 -0
  160. package/src/features/blog/components/admin/BlogPostsList.tsx +58 -0
  161. package/src/features/blog/components/admin/BlogTranslationStatus.tsx +104 -0
  162. package/src/features/blog/components/admin/__tests__/BlogPostTranslationPanel.spec.tsx +100 -0
  163. package/src/features/blog/components/admin/__tests__/BlogPostsList.spec.tsx +30 -0
  164. package/src/features/blog/components/admin/index.ts +14 -0
  165. package/src/features/blog/components/public/BlogCategoryChips.tsx +59 -0
  166. package/src/features/blog/components/public/BlogList.tsx +21 -0
  167. package/src/features/blog/components/public/BlogListColumn.tsx +53 -0
  168. package/src/features/blog/components/public/BlogListFeatured.tsx +57 -0
  169. package/src/features/blog/components/public/BlogListParts.tsx +74 -0
  170. package/src/features/blog/components/public/BlogListRail.tsx +62 -0
  171. package/src/features/blog/components/public/BlogPostCard.tsx +125 -0
  172. package/src/features/blog/components/public/BlogPostMeta.tsx +49 -0
  173. package/src/features/blog/components/public/BlogPostView.tsx +80 -0
  174. package/src/features/blog/components/public/BlogSearchBox.tsx +52 -0
  175. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +175 -0
  176. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +134 -0
  177. package/src/features/blog/components/public/blogPublicHelpers.ts +30 -0
  178. package/src/features/blog/components/public/index.ts +3 -0
  179. package/src/features/blog/contexts/BlogPostContext.tsx +66 -0
  180. package/src/features/blog/contexts/index.ts +1 -0
  181. package/src/features/blog/data/BlogCategory.ts +93 -0
  182. package/src/features/blog/data/BlogCategoryFields.ts +4 -0
  183. package/src/features/blog/data/BlogCategoryInterface.ts +24 -0
  184. package/src/features/blog/data/BlogCategoryService.ts +54 -0
  185. package/src/features/blog/data/BlogCategoryTranslation.ts +90 -0
  186. package/src/features/blog/data/BlogCategoryTranslationInterface.ts +22 -0
  187. package/src/features/blog/data/BlogCategoryTranslationService.ts +30 -0
  188. package/src/features/blog/data/BlogPost.spec.ts +123 -0
  189. package/src/features/blog/data/BlogPost.ts +159 -0
  190. package/src/features/blog/data/BlogPostFields.ts +7 -0
  191. package/src/features/blog/data/BlogPostInterface.ts +39 -0
  192. package/src/features/blog/data/BlogPostService.ts +82 -0
  193. package/src/features/blog/data/BlogPostTranslation.spec.ts +73 -0
  194. package/src/features/blog/data/BlogPostTranslation.ts +110 -0
  195. package/src/features/blog/data/BlogPostTranslationInterface.ts +27 -0
  196. package/src/features/blog/data/BlogPostTranslationService.ts +30 -0
  197. package/src/features/blog/data/BlogSettings.ts +37 -0
  198. package/src/features/blog/data/BlogSettingsInterface.ts +11 -0
  199. package/src/features/blog/data/BlogSettingsService.ts +24 -0
  200. package/src/features/blog/data/index.ts +17 -0
  201. package/src/features/blog/hooks/index.ts +3 -0
  202. package/src/features/blog/hooks/useBlogCategoryNames.ts +34 -0
  203. package/src/features/blog/hooks/useBlogCategoryTableStructure.tsx +84 -0
  204. package/src/features/blog/hooks/useBlogPostTableStructure.tsx +126 -0
  205. package/src/features/blog/index.ts +15 -0
  206. package/src/features/blog/server/fetchers.ts +169 -0
  207. package/src/features/blog/server/toPublic.spec.ts +91 -0
  208. package/src/features/blog/server/toPublic.ts +36 -0
  209. package/src/features/blog/server-entry.ts +17 -0
  210. package/src/features/blog/types/blog-public.types.ts +34 -0
  211. package/src/features/blog/types/blog.constants.ts +40 -0
  212. package/src/features/email-automation/components/containers/EmailAutomationsListContainer.tsx +12 -3
  213. package/src/features/rbac/contexts/RbacContext.tsx +4 -7
  214. package/src/features/rbac/contexts/__tests__/RbacContext.spec.tsx +42 -0
  215. package/src/features/s3/data/s3.service.ts +17 -0
  216. package/src/features/tokenusage/components/TokenUsageAdminContainer.tsx +4 -3
  217. package/src/features/tokenusage/contexts/TokenUsageAdminContext.tsx +3 -18
  218. package/src/features/tokenusage/contexts/__tests__/TokenUsageAdminContext.spec.tsx +17 -0
  219. package/src/features/tokenusage/tokenusage-admin.module.ts +4 -3
  220. package/src/features/tokenusage/tokenusage.modules.ts +12 -2
  221. package/src/features/user/contexts/UserContext.tsx +18 -3
  222. package/src/features/user/contexts/__tests__/UserContext.spec.tsx +95 -0
  223. package/dist/BlockNoteEditor-UJ6363LC.js.map +0 -1
  224. package/dist/BlockNoteEditor-WTSQANKI.mjs.map +0 -1
  225. package/dist/chunk-3BAM23VA.js.map +0 -1
  226. package/dist/chunk-CRI4T47Y.js.map +0 -1
  227. package/dist/chunk-JQWI62NV.mjs.map +0 -1
  228. package/dist/chunk-MIZTWBPX.mjs.map +0 -1
  229. package/dist/chunk-QKZUE5OF.mjs.map +0 -1
  230. package/dist/chunk-XGTQWBDJ.js.map +0 -1
  231. /package/dist/{BlockNoteViewer-JVKWJZ6J.mjs.map → BlockNoteViewer-U6E3DS4F.mjs.map} +0 -0
  232. /package/dist/{chunk-6WU74VFU.mjs.map → chunk-6SQYXUVP.mjs.map} +0 -0
  233. /package/dist/{chunk-FNTQQFLH.mjs.map → chunk-W7F5BDSV.mjs.map} +0 -0
@@ -0,0 +1,107 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkG4JR3SFVjs = require('./chunk-G4JR3SFV.js');
4
+
5
+
6
+
7
+ var _chunkG6UE6MEPjs = require('./chunk-G6UE6MEP.js');
8
+
9
+
10
+ var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
11
+
12
+ // src/server/cache.ts
13
+ var _cache = require('next/cache');
14
+ async function invalidateCacheTag(tag, profile = "max") {
15
+ _cache.revalidateTag.call(void 0, tag, profile);
16
+ }
17
+ _chunk7QVYU63Ejs.__name.call(void 0, invalidateCacheTag, "invalidateCacheTag");
18
+ async function invalidateCacheTags(tags, profile = "max") {
19
+ for (const tag of tags) {
20
+ _cache.revalidateTag.call(void 0, tag, profile);
21
+ }
22
+ }
23
+ _chunk7QVYU63Ejs.__name.call(void 0, invalidateCacheTags, "invalidateCacheTags");
24
+ async function updateCacheTag(tag) {
25
+ _cache.updateTag.call(void 0, tag);
26
+ }
27
+ _chunk7QVYU63Ejs.__name.call(void 0, updateCacheTag, "updateCacheTag");
28
+
29
+ // src/server/ServerSession.ts
30
+ var _headers = require('next/headers');
31
+ var _navigation = require('next/navigation');
32
+ var _server = require('next/server');
33
+ var _pako = require('pako');
34
+ var ServerSession = class {
35
+ static {
36
+ _chunk7QVYU63Ejs.__name.call(void 0, this, "ServerSession");
37
+ }
38
+ static async read() {
39
+ const cookieStore = await _headers.cookies.call(void 0, );
40
+ const headerStore = await _headers.headers.call(void 0, );
41
+ const token = _optionalChain([cookieStore, 'access', _ => _.get, 'call', _2 => _2("token"), 'optionalAccess', _3 => _3.value]) || void 0;
42
+ const roles = _optionalChain([cookieStore, 'access', _4 => _4.get, 'call', _5 => _5("roles"), 'optionalAccess', _6 => _6.value]);
43
+ const viewportCookie = _optionalChain([cookieStore, 'access', _7 => _7.get, 'call', _8 => _8(_chunkG6UE6MEPjs.VIEWPORT_COOKIE_NAME), 'optionalAccess', _9 => _9.value]);
44
+ return {
45
+ isLogged: !!token,
46
+ isAdministrator: !!roles && roles.includes(_chunkG4JR3SFVjs.getRoleId.call(void 0, ).Administrator),
47
+ token,
48
+ sidebarOpen: _optionalChain([cookieStore, 'access', _10 => _10.get, 'call', _11 => _11("sidebar_state"), 'optionalAccess', _12 => _12.value]) !== "false",
49
+ isMobile: viewportCookie ? viewportCookie === "1" : _server.userAgent.call(void 0, { headers: headerStore }).device.type === "mobile"
50
+ };
51
+ }
52
+ static async isLogged() {
53
+ const cookieStore = await _headers.cookies.call(void 0, );
54
+ const token = cookieStore.get("token");
55
+ if (!token || !token.value) return false;
56
+ return true;
57
+ }
58
+ static async companyId() {
59
+ const cookieStore = await _headers.cookies.call(void 0, );
60
+ return _nullishCoalesce(_optionalChain([cookieStore, 'access', _13 => _13.get, 'call', _14 => _14("companyId"), 'optionalAccess', _15 => _15.value]), () => ( ""));
61
+ }
62
+ static async userId() {
63
+ const cookieStore = await _headers.cookies.call(void 0, );
64
+ return _nullishCoalesce(_optionalChain([cookieStore, 'access', _16 => _16.get, 'call', _17 => _17("userId"), 'optionalAccess', _18 => _18.value]), () => ( ""));
65
+ }
66
+ static async checkPermission(params) {
67
+ if (!await this.hasPermissionToModule(params)) _navigation.redirect.call(void 0, `/401`);
68
+ }
69
+ static async hasRole(roleId) {
70
+ const cookieStore = await _headers.cookies.call(void 0, );
71
+ const roles = _optionalChain([cookieStore, 'access', _19 => _19.get, 'call', _20 => _20("roles"), 'optionalAccess', _21 => _21.value]);
72
+ if (!roles || !roles.includes(roleId)) return false;
73
+ return true;
74
+ }
75
+ static async hasFeature(featureId) {
76
+ const cookieStore = await _headers.cookies.call(void 0, );
77
+ const features = _optionalChain([cookieStore, 'access', _22 => _22.get, 'call', _23 => _23("features"), 'optionalAccess', _24 => _24.value]);
78
+ if (!features || !features.includes(featureId)) return false;
79
+ return true;
80
+ }
81
+ static async hasPermissionToModule(params) {
82
+ const cookieStore = await _headers.cookies.call(void 0, );
83
+ if (params.module.feature) {
84
+ const features = _optionalChain([cookieStore, 'access', _25 => _25.get, 'call', _26 => _26("features"), 'optionalAccess', _27 => _27.value]);
85
+ if (features && !features.includes(params.module.feature)) return false;
86
+ }
87
+ const rawModules = _optionalChain([cookieStore, 'access', _28 => _28.get, 'call', _29 => _29("modules"), 'optionalAccess', _30 => _30.value]);
88
+ if (!rawModules) return false;
89
+ const modules = JSON.parse(_pako.ungzip.call(void 0, Buffer.from(rawModules, "base64"), { toText: true }));
90
+ const selectedModule = modules.find((module) => module.id === params.module.moduleId);
91
+ return _chunkG6UE6MEPjs.checkPermissionsFromServer.call(void 0, {
92
+ module: params.module,
93
+ action: params.action,
94
+ data: params.data,
95
+ userId: await this.userId(),
96
+ selectedModule
97
+ });
98
+ }
99
+ };
100
+
101
+
102
+
103
+
104
+
105
+
106
+ exports.invalidateCacheTag = invalidateCacheTag; exports.invalidateCacheTags = invalidateCacheTags; exports.updateCacheTag = updateCacheTag; exports.ServerSession = ServerSession;
107
+ //# sourceMappingURL=chunk-YDYVJM4I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-YDYVJM4I.js","../src/server/cache.ts","../src/server/ServerSession.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-YDYVJM4I.js","sourcesContent":[null,"// Server-only utilities (NOT server actions - these cannot be called from client components)\n\nimport { revalidateTag, updateTag } from \"next/cache\";\n\nimport type { CacheProfile } from \"./cacheProfiles\";\n\nexport { CACHE_PROFILES, type CacheProfile } from \"./cacheProfiles\";\n\n/**\n * Revalidate a cache tag to invalidate cached data.\n * Next.js 16+ requires a profile parameter.\n *\n * With `\"max\"` the tagged entries are marked stale and served stale-while-revalidate\n * (a one-year window): the next request still gets the old data while fresh data loads\n * in the background. It is not an immediate invalidation. A Server Action that must\n * read its own write uses `updateCacheTag` instead.\n *\n * @param tag - The cache tag to invalidate\n * @param profile - The cache profile whose `expire` bounds how long stale data may be served (defaults to \"max\")\n */\nexport async function invalidateCacheTag(tag: string, profile: CacheProfile = \"max\"): Promise<void> {\n revalidateTag(tag, profile);\n}\n\n/**\n * Revalidate multiple cache tags.\n *\n * @param tags - Array of cache tags to invalidate\n * @param profile - The cache profile, see `invalidateCacheTag` (defaults to \"max\", stale-while-revalidate)\n */\nexport async function invalidateCacheTags(tags: string[], profile: CacheProfile = \"max\"): Promise<void> {\n for (const tag of tags) {\n revalidateTag(tag, profile);\n }\n}\n\n/**\n * Expire a cache tag immediately, so the same request reads fresh data (read-your-own-writes).\n * Wraps `updateTag`, which works in Server Actions only. Route Handlers use `invalidateCacheTag`.\n *\n * @param tag - The cache tag to expire\n */\nexport async function updateCacheTag(tag: string): Promise<void> {\n updateTag(tag);\n}\n","import { cookies, headers } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport { userAgent } from \"next/server\";\nimport { ungzip } from \"pako\";\nimport { Action, checkPermissionsFromServer, ModuleWithPermissions } from \"../permissions\";\nimport { getRoleId } from \"../roles/config\";\nimport { VIEWPORT_COOKIE_NAME } from \"../utils/use-mobile\";\n\nexport interface SessionSnapshot {\n isLogged: boolean;\n isAdministrator: boolean;\n token?: string;\n sidebarOpen: boolean;\n isMobile: boolean;\n}\n\nexport class ServerSession {\n static async read(): Promise<SessionSnapshot> {\n const cookieStore = await cookies();\n const headerStore = await headers();\n\n const token = cookieStore.get(\"token\")?.value || undefined;\n const roles = cookieStore.get(\"roles\")?.value;\n const viewportCookie = cookieStore.get(VIEWPORT_COOKIE_NAME)?.value;\n\n return {\n isLogged: !!token,\n isAdministrator: !!roles && roles.includes(getRoleId().Administrator),\n token,\n sidebarOpen: cookieStore.get(\"sidebar_state\")?.value !== \"false\",\n isMobile: viewportCookie ? viewportCookie === \"1\" : userAgent({ headers: headerStore }).device.type === \"mobile\",\n };\n }\n\n static async isLogged() {\n const cookieStore = await cookies();\n const token = cookieStore.get(\"token\");\n\n if (!token || !token.value) return false;\n return true;\n }\n\n static async companyId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"companyId\")?.value ?? \"\";\n }\n\n static async userId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"userId\")?.value ?? \"\";\n }\n\n static async checkPermission<M extends ModuleWithPermissions>(params: { module: M; action: Action; data?: any }) {\n if (!(await this.hasPermissionToModule(params))) redirect(`/401`);\n }\n\n static async hasRole(roleId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const roles = cookieStore.get(\"roles\")?.value;\n\n if (!roles || !roles.includes(roleId)) return false;\n\n return true;\n }\n\n static async hasFeature(featureId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const features = cookieStore.get(\"features\")?.value;\n\n if (!features || !features.includes(featureId)) return false;\n\n return true;\n }\n\n static async hasPermissionToModule<M extends ModuleWithPermissions>(params: {\n module: M;\n action: Action;\n data?: any;\n }): Promise<boolean> {\n const cookieStore = await cookies();\n\n if (params.module.feature) {\n const features = cookieStore.get(\"features\")?.value;\n\n if (features && !features.includes(params.module.feature)) return false;\n }\n\n const rawModules = cookieStore.get(\"modules\")?.value;\n if (!rawModules) return false;\n\n const modules: {\n id: string;\n permissions: {\n create: boolean | string;\n read: boolean | string;\n update: boolean | string;\n delete: boolean | string;\n };\n }[] = JSON.parse(ungzip(Buffer.from(rawModules, \"base64\"), { toText: true }));\n\n const selectedModule = modules.find((module) => module.id === params.module.moduleId);\n\n return checkPermissionsFromServer({\n module: params.module,\n action: params.action,\n data: params.data,\n userId: await this.userId(),\n selectedModule: selectedModule,\n });\n\n // if (!selectedModule) return false;\n\n // if (!selectedModule.permissions[params.action]) return false;\n // if (typeof selectedModule.permissions[params.action] === \"boolean\")\n // return selectedModule.permissions[params.action] as boolean;\n\n // if (!params.data) return false;\n\n // return params.data[selectedModule.permissions[params.action] as string] === this.userId;\n }\n}\n"]}
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- var _chunk3BAM23VAjs = require('../chunk-3BAM23VA.js');
33
+ var _chunkTY5FYP3Gjs = require('../chunk-TY5FYP3G.js');
34
34
 
35
35
 
36
36
 
@@ -39,7 +39,7 @@ var _chunk3BAM23VAjs = require('../chunk-3BAM23VA.js');
39
39
 
40
40
 
41
41
 
42
- var _chunkEO75CV76js = require('../chunk-EO75CV76.js');
42
+ var _chunkS4YJ5WCWjs = require('../chunk-S4YJ5WCW.js');
43
43
  require('../chunk-G4JR3SFV.js');
44
44
 
45
45
 
@@ -58,14 +58,14 @@ require('../chunk-G4JR3SFV.js');
58
58
 
59
59
 
60
60
 
61
- var _chunkCRI4T47Yjs = require('../chunk-CRI4T47Y.js');
61
+ var _chunkG6UE6MEPjs = require('../chunk-G6UE6MEP.js');
62
+ require('../chunk-GHE4VT2R.js');
62
63
 
63
64
 
64
65
  var _chunkLXKSUWAVjs = require('../chunk-LXKSUWAV.js');
65
66
 
66
67
 
67
68
  var _chunkJTPRJNT2js = require('../chunk-JTPRJNT2.js');
68
- require('../chunk-GHE4VT2R.js');
69
69
 
70
70
 
71
71
 
@@ -130,5 +130,5 @@ require('../chunk-7QVYU63E.js');
130
130
 
131
131
 
132
132
 
133
- exports.ClientJsonApiDelete = _chunkCRI4T47Yjs.ClientJsonApiDelete; exports.ClientJsonApiGet = _chunkCRI4T47Yjs.ClientJsonApiGet; exports.ClientJsonApiPatch = _chunkCRI4T47Yjs.ClientJsonApiPatch; exports.ClientJsonApiPost = _chunkCRI4T47Yjs.ClientJsonApiPost; exports.ClientJsonApiPut = _chunkCRI4T47Yjs.ClientJsonApiPut; exports.JsonApiContext = _chunk3EPNHTMHjs.JsonApiContext; exports.JsonApiProvider = _chunk3BAM23VAjs.JsonApiProvider; exports.TableGeneratorRegistry = _chunk3BAM23VAjs.TableGeneratorRegistry; exports.buildClientUrl = _chunkCRI4T47Yjs.buildClientUrl; exports.computeLayeredLayout = _chunk3BAM23VAjs.computeLayeredLayout; exports.configureClientConfig = _chunkEO75CV76js.configureClientConfig; exports.configureClientJsonApi = _chunkCRI4T47Yjs.configureClientJsonApi; exports.configureI18n = _chunkCRI4T47Yjs.configureI18n; exports.configureJsonApi = _chunkEO75CV76js.configureJsonApi; exports.directFetch = _chunkJTPRJNT2js.directFetch; exports.fitLayeredLayoutToAspectRatio = _chunk3BAM23VAjs.fitLayeredLayoutToAspectRatio; exports.getApiUrl = _chunkEO75CV76js.getApiUrl; exports.getAppUrl = _chunkEO75CV76js.getAppUrl; exports.getClientApiUrl = _chunkCRI4T47Yjs.getClientApiUrl; exports.getClientAppUrl = _chunkCRI4T47Yjs.getClientAppUrl; exports.getClientToken = _chunkLXKSUWAVjs.getClientToken; exports.getClientTrackablePages = _chunkCRI4T47Yjs.getClientTrackablePages; exports.getI18nLink = _chunkCRI4T47Yjs.getI18nLink; exports.getPublicApiUrl = _chunkEO75CV76js.getPublicApiUrl; exports.getStripePublishableKey = _chunkEO75CV76js.getStripePublishableKey; exports.getTrackablePages = _chunkEO75CV76js.getTrackablePages; exports.registerTableGenerator = _chunk3BAM23VAjs.registerTableGenerator; exports.tableGeneratorRegistry = _chunk3BAM23VAjs.tableGeneratorRegistry; exports.useContentTableStructure = _chunk3BAM23VAjs.useContentTableStructure; exports.useCustomD3Graph = _chunk3BAM23VAjs.useCustomD3Graph; exports.useDataListRetriever = _chunk3BAM23VAjs.useDataListRetriever; exports.useDebounce = _chunk3BAM23VAjs.useDebounce; exports.useI18nDateFnsLocale = _chunkCRI4T47Yjs.useI18nDateFnsLocale; exports.useI18nLocale = _chunkCRI4T47Yjs.useI18nLocale; exports.useI18nRouter = _chunkCRI4T47Yjs.useI18nRouter; exports.useI18nTranslations = _chunkCRI4T47Yjs.useI18nTranslations; exports.useJsonApiConfig = _chunk3EPNHTMHjs.useJsonApiConfig; exports.useJsonApiConfigOptional = _chunk3EPNHTMHjs.useJsonApiConfigOptional; exports.useJsonApiGet = _chunk3BAM23VAjs.useJsonApiGet; exports.useJsonApiMutation = _chunk3BAM23VAjs.useJsonApiMutation; exports.useNotificationSync = _chunk3BAM23VAjs.useNotificationSync; exports.useOAuthClient = _chunk3BAM23VAjs.useOAuthClient; exports.useOAuthClients = _chunk3BAM23VAjs.useOAuthClients; exports.useOAuthConsent = _chunk3BAM23VAjs.useOAuthConsent; exports.useOAuthScopeText = _chunk3BAM23VAjs.useOAuthScopeText; exports.usePageTracker = _chunk3BAM23VAjs.usePageTracker; exports.usePageUrlGenerator = _chunk3BAM23VAjs.usePageUrlGenerator; exports.usePushNotifications = _chunk3BAM23VAjs.usePushNotifications; exports.useRehydration = _chunk3BAM23VAjs.useRehydration; exports.useRehydrationList = _chunk3BAM23VAjs.useRehydrationList; exports.useRoleTableStructure = _chunk3BAM23VAjs.useRoleTableStructure; exports.useSocket = _chunk3BAM23VAjs.useSocket; exports.useSubscriptionStatus = _chunk3BAM23VAjs.useSubscriptionStatus; exports.useTableGenerator = _chunk3BAM23VAjs.useTableGenerator; exports.useUrlRewriter = _chunk3BAM23VAjs.useUrlRewriter; exports.useUserSearch = _chunk3BAM23VAjs.useUserSearch; exports.useUserTableStructure = _chunk3BAM23VAjs.useUserTableStructure;
133
+ exports.ClientJsonApiDelete = _chunkG6UE6MEPjs.ClientJsonApiDelete; exports.ClientJsonApiGet = _chunkG6UE6MEPjs.ClientJsonApiGet; exports.ClientJsonApiPatch = _chunkG6UE6MEPjs.ClientJsonApiPatch; exports.ClientJsonApiPost = _chunkG6UE6MEPjs.ClientJsonApiPost; exports.ClientJsonApiPut = _chunkG6UE6MEPjs.ClientJsonApiPut; exports.JsonApiContext = _chunk3EPNHTMHjs.JsonApiContext; exports.JsonApiProvider = _chunkTY5FYP3Gjs.JsonApiProvider; exports.TableGeneratorRegistry = _chunkTY5FYP3Gjs.TableGeneratorRegistry; exports.buildClientUrl = _chunkG6UE6MEPjs.buildClientUrl; exports.computeLayeredLayout = _chunkTY5FYP3Gjs.computeLayeredLayout; exports.configureClientConfig = _chunkS4YJ5WCWjs.configureClientConfig; exports.configureClientJsonApi = _chunkG6UE6MEPjs.configureClientJsonApi; exports.configureI18n = _chunkG6UE6MEPjs.configureI18n; exports.configureJsonApi = _chunkS4YJ5WCWjs.configureJsonApi; exports.directFetch = _chunkJTPRJNT2js.directFetch; exports.fitLayeredLayoutToAspectRatio = _chunkTY5FYP3Gjs.fitLayeredLayoutToAspectRatio; exports.getApiUrl = _chunkS4YJ5WCWjs.getApiUrl; exports.getAppUrl = _chunkS4YJ5WCWjs.getAppUrl; exports.getClientApiUrl = _chunkG6UE6MEPjs.getClientApiUrl; exports.getClientAppUrl = _chunkG6UE6MEPjs.getClientAppUrl; exports.getClientToken = _chunkLXKSUWAVjs.getClientToken; exports.getClientTrackablePages = _chunkG6UE6MEPjs.getClientTrackablePages; exports.getI18nLink = _chunkG6UE6MEPjs.getI18nLink; exports.getPublicApiUrl = _chunkS4YJ5WCWjs.getPublicApiUrl; exports.getStripePublishableKey = _chunkS4YJ5WCWjs.getStripePublishableKey; exports.getTrackablePages = _chunkS4YJ5WCWjs.getTrackablePages; exports.registerTableGenerator = _chunkTY5FYP3Gjs.registerTableGenerator; exports.tableGeneratorRegistry = _chunkTY5FYP3Gjs.tableGeneratorRegistry; exports.useContentTableStructure = _chunkTY5FYP3Gjs.useContentTableStructure; exports.useCustomD3Graph = _chunkTY5FYP3Gjs.useCustomD3Graph; exports.useDataListRetriever = _chunkTY5FYP3Gjs.useDataListRetriever; exports.useDebounce = _chunkTY5FYP3Gjs.useDebounce; exports.useI18nDateFnsLocale = _chunkG6UE6MEPjs.useI18nDateFnsLocale; exports.useI18nLocale = _chunkG6UE6MEPjs.useI18nLocale; exports.useI18nRouter = _chunkG6UE6MEPjs.useI18nRouter; exports.useI18nTranslations = _chunkG6UE6MEPjs.useI18nTranslations; exports.useJsonApiConfig = _chunk3EPNHTMHjs.useJsonApiConfig; exports.useJsonApiConfigOptional = _chunk3EPNHTMHjs.useJsonApiConfigOptional; exports.useJsonApiGet = _chunkTY5FYP3Gjs.useJsonApiGet; exports.useJsonApiMutation = _chunkTY5FYP3Gjs.useJsonApiMutation; exports.useNotificationSync = _chunkTY5FYP3Gjs.useNotificationSync; exports.useOAuthClient = _chunkTY5FYP3Gjs.useOAuthClient; exports.useOAuthClients = _chunkTY5FYP3Gjs.useOAuthClients; exports.useOAuthConsent = _chunkTY5FYP3Gjs.useOAuthConsent; exports.useOAuthScopeText = _chunkTY5FYP3Gjs.useOAuthScopeText; exports.usePageTracker = _chunkTY5FYP3Gjs.usePageTracker; exports.usePageUrlGenerator = _chunkTY5FYP3Gjs.usePageUrlGenerator; exports.usePushNotifications = _chunkTY5FYP3Gjs.usePushNotifications; exports.useRehydration = _chunkTY5FYP3Gjs.useRehydration; exports.useRehydrationList = _chunkTY5FYP3Gjs.useRehydrationList; exports.useRoleTableStructure = _chunkTY5FYP3Gjs.useRoleTableStructure; exports.useSocket = _chunkTY5FYP3Gjs.useSocket; exports.useSubscriptionStatus = _chunkTY5FYP3Gjs.useSubscriptionStatus; exports.useTableGenerator = _chunkTY5FYP3Gjs.useTableGenerator; exports.useUrlRewriter = _chunkTY5FYP3Gjs.useUrlRewriter; exports.useUserSearch = _chunkTY5FYP3Gjs.useUserSearch; exports.useUserTableStructure = _chunkTY5FYP3Gjs.useUserTableStructure;
134
134
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/client/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yjHAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/client/index.js"}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/client/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yjHAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/client/index.js"}
@@ -29,7 +29,7 @@ import {
29
29
  useUrlRewriter,
30
30
  useUserSearch,
31
31
  useUserTableStructure
32
- } from "../chunk-MIZTWBPX.mjs";
32
+ } from "../chunk-X5WIUUNG.mjs";
33
33
  import {
34
34
  configureClientConfig,
35
35
  configureJsonApi,
@@ -38,7 +38,7 @@ import {
38
38
  getPublicApiUrl,
39
39
  getStripePublishableKey,
40
40
  getTrackablePages
41
- } from "../chunk-6WU74VFU.mjs";
41
+ } from "../chunk-6SQYXUVP.mjs";
42
42
  import "../chunk-PW42LRSL.mjs";
43
43
  import {
44
44
  ClientJsonApiDelete,
@@ -57,14 +57,14 @@ import {
57
57
  useI18nLocale,
58
58
  useI18nRouter,
59
59
  useI18nTranslations
60
- } from "../chunk-JQWI62NV.mjs";
60
+ } from "../chunk-VC5A3AUZ.mjs";
61
+ import "../chunk-V5MI7RNB.mjs";
61
62
  import {
62
63
  getClientToken
63
64
  } from "../chunk-AUXK7QSA.mjs";
64
65
  import {
65
66
  directFetch
66
67
  } from "../chunk-PI56A4DG.mjs";
67
- import "../chunk-V5MI7RNB.mjs";
68
68
  import {
69
69
  JsonApiContext,
70
70
  useJsonApiConfig,
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { PartialBlock } from '@blocknote/core';
3
+
4
+ /**
5
+ * Read-only rich text rendered on the server, so the text is in the HTML that
6
+ * crawlers read. For public read-only pages only: everywhere else, display goes
7
+ * through BlockNoteEditorContainer.
8
+ */
9
+ declare function BlockNoteServerContent({ content, size, className, }: {
10
+ content?: PartialBlock[];
11
+ size?: "default" | "sm";
12
+ className?: string;
13
+ }): Promise<React.JSX.Element | null>;
14
+
15
+ export { BlockNoteServerContent };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { PartialBlock } from '@blocknote/core';
3
+
4
+ /**
5
+ * Read-only rich text rendered on the server, so the text is in the HTML that
6
+ * crawlers read. For public read-only pages only: everywhere else, display goes
7
+ * through BlockNoteEditorContainer.
8
+ */
9
+ declare function BlockNoteServerContent({ content, size, className, }: {
10
+ content?: PartialBlock[];
11
+ size?: "default" | "sm";
12
+ className?: string;
13
+ }): Promise<React.JSX.Element | null>;
14
+
15
+ export { BlockNoteServerContent };
@@ -0,0 +1,38 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunk7QVYU63Ejs = require('../../chunk-7QVYU63E.js');
4
+
5
+ // src/components/editors/server/BlockNoteServerContent.tsx
6
+ require('@blocknote/shadcn/style.css');
7
+ var _components = require('@carlonicora/nextjs-jsonapi/components');
8
+
9
+ // src/components/editors/server/renderBlockNoteHTML.ts
10
+ var _serverutil = require('@blocknote/server-util');
11
+ var editor;
12
+ var queue = Promise.resolve();
13
+ function renderBlockNoteHTML(blocks) {
14
+ const run = queue.then(() => {
15
+ editor ??= _serverutil.ServerBlockNoteEditor.create();
16
+ return editor.blocksToFullHTML(blocks);
17
+ });
18
+ queue = run.catch(() => void 0);
19
+ return run;
20
+ }
21
+ _chunk7QVYU63Ejs.__name.call(void 0, renderBlockNoteHTML, "renderBlockNoteHTML");
22
+
23
+ // src/components/editors/server/BlockNoteServerContent.tsx
24
+ var _jsxruntime = require('react/jsx-runtime');
25
+ async function BlockNoteServerContent({
26
+ content,
27
+ size,
28
+ className
29
+ }) {
30
+ if (!Array.isArray(content) || content.length === 0) return null;
31
+ const html = await renderBlockNoteHTML(content);
32
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _components.BlockNoteStaticViewer, { html, size, className });
33
+ }
34
+ _chunk7QVYU63Ejs.__name.call(void 0, BlockNoteServerContent, "BlockNoteServerContent");
35
+
36
+
37
+ exports.BlockNoteServerContent = BlockNoteServerContent;
38
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/components/editors/server.js","../../../src/components/editors/server/BlockNoteServerContent.tsx","../../../src/components/editors/server/renderBlockNoteHTML.ts"],"names":[],"mappings":"AAAA;AACE;AACF,0DAAgC;AAChC;AACA;ACHA,uCAAO;AAIP,oEAAsC;ADEtC;AACA;AEPA,oDAAsC;AAKtC,IAAI,MAAA;AAMJ,IAAI,MAAA,EAA0B,OAAA,CAAQ,OAAA,CAAQ,CAAA;AAMvC,SAAS,mBAAA,CAAoB,MAAA,EAAyC;AAC3E,EAAA,MAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,GAAM;AAC3B,IAAA,OAAA,IAAW,iCAAA,CAAsB,MAAA,CAAO,CAAA;AACxC,IAAA,OAAO,MAAA,CAAO,gBAAA,CAAiB,MAAM,CAAA;AAAA,EACvC,CAAC,CAAA;AACD,EAAA,MAAA,EAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAA,GAAM,KAAA,CAAS,CAAA;AACjC,EAAA,OAAO,GAAA;AACT;AAPgB,qCAAA,mBAAA,EAAA,qBAAA,CAAA;AFGhB;AACA;ACIS,+CAAA;AAbT,MAAA,SAAsB,sBAAA,CAAuB;AAAA,EAC3C,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,GAAA,CAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,EAAA,GAAK,OAAA,CAAQ,OAAA,IAAW,CAAA,EAAG,OAAO,IAAA;AAE5D,EAAA,MAAM,KAAA,EAAO,MAAM,mBAAA,CAAoB,OAAO,CAAA;AAE9C,EAAA,uBAAO,6BAAA,iCAAC,EAAA,EAAsB,IAAA,EAAY,IAAA,EAAY,UAAA,CAAsB,CAAA;AAC9E;AAdsB,qCAAA,sBAAA,EAAA,wBAAA,CAAA;ADqBtB;AACE;AACF,wDAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/components/editors/server.js","sourcesContent":[null,"import type { PartialBlock } from \"@blocknote/core\";\nimport \"@blocknote/shadcn/style.css\";\n// Imported through the package's own client subpath, like the analytics server\n// pages: the built server entry must reach the viewer through the \"use client\"\n// bundle, not inline it.\nimport { BlockNoteStaticViewer } from \"@carlonicora/nextjs-jsonapi/components\";\nimport { renderBlockNoteHTML } from \"./renderBlockNoteHTML\";\n\n/**\n * Read-only rich text rendered on the server, so the text is in the HTML that\n * crawlers read. For public read-only pages only: everywhere else, display goes\n * through BlockNoteEditorContainer.\n */\nexport async function BlockNoteServerContent({\n content,\n size,\n className,\n}: {\n content?: PartialBlock[];\n size?: \"default\" | \"sm\";\n className?: string;\n}) {\n if (!Array.isArray(content) || content.length === 0) return null;\n\n const html = await renderBlockNoteHTML(content);\n\n return <BlockNoteStaticViewer html={html} size={size} className={className} />;\n}\n","import type { PartialBlock } from \"@blocknote/core\";\nimport { ServerBlockNoteEditor } from \"@blocknote/server-util\";\n\n// Default schema only, the same one BlockNoteViewer uses: the editor's mention\n// and diff inline specs are React specs from \"use client\" modules (next/link,\n// hover cards), so they cannot run here.\nlet editor: ServerBlockNoteEditor | undefined;\n\n// ServerBlockNoteEditor swaps globalThis.window/document for its JSDOM around\n// each call and restores them after an await. Two overlapping calls would\n// restore each other's values and could leave the JSDOM window on the server's\n// globals, so calls run one at a time.\nlet queue: Promise<unknown> = Promise.resolve();\n\n/**\n * Renders a BlockNote blocks array to the HTML the editor itself would render,\n * through BlockNote's own server editor (`blocksToFullHTML`). Server only.\n */\nexport function renderBlockNoteHTML(blocks: PartialBlock[]): Promise<string> {\n const run = queue.then(() => {\n editor ??= ServerBlockNoteEditor.create();\n return editor.blocksToFullHTML(blocks);\n });\n queue = run.catch(() => undefined);\n return run;\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import {
2
+ __name
3
+ } from "../../chunk-PAWJFY3S.mjs";
4
+
5
+ // src/components/editors/server/BlockNoteServerContent.tsx
6
+ import "@blocknote/shadcn/style.css";
7
+ import { BlockNoteStaticViewer } from "@carlonicora/nextjs-jsonapi/components";
8
+
9
+ // src/components/editors/server/renderBlockNoteHTML.ts
10
+ import { ServerBlockNoteEditor } from "@blocknote/server-util";
11
+ var editor;
12
+ var queue = Promise.resolve();
13
+ function renderBlockNoteHTML(blocks) {
14
+ const run = queue.then(() => {
15
+ editor ??= ServerBlockNoteEditor.create();
16
+ return editor.blocksToFullHTML(blocks);
17
+ });
18
+ queue = run.catch(() => void 0);
19
+ return run;
20
+ }
21
+ __name(renderBlockNoteHTML, "renderBlockNoteHTML");
22
+
23
+ // src/components/editors/server/BlockNoteServerContent.tsx
24
+ import { jsx } from "react/jsx-runtime";
25
+ async function BlockNoteServerContent({
26
+ content,
27
+ size,
28
+ className
29
+ }) {
30
+ if (!Array.isArray(content) || content.length === 0) return null;
31
+ const html = await renderBlockNoteHTML(content);
32
+ return /* @__PURE__ */ jsx(BlockNoteStaticViewer, { html, size, className });
33
+ }
34
+ __name(BlockNoteServerContent, "BlockNoteServerContent");
35
+ export {
36
+ BlockNoteServerContent
37
+ };
38
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/editors/server/BlockNoteServerContent.tsx","../../../src/components/editors/server/renderBlockNoteHTML.ts"],"sourcesContent":["import type { PartialBlock } from \"@blocknote/core\";\nimport \"@blocknote/shadcn/style.css\";\n// Imported through the package's own client subpath, like the analytics server\n// pages: the built server entry must reach the viewer through the \"use client\"\n// bundle, not inline it.\nimport { BlockNoteStaticViewer } from \"@carlonicora/nextjs-jsonapi/components\";\nimport { renderBlockNoteHTML } from \"./renderBlockNoteHTML\";\n\n/**\n * Read-only rich text rendered on the server, so the text is in the HTML that\n * crawlers read. For public read-only pages only: everywhere else, display goes\n * through BlockNoteEditorContainer.\n */\nexport async function BlockNoteServerContent({\n content,\n size,\n className,\n}: {\n content?: PartialBlock[];\n size?: \"default\" | \"sm\";\n className?: string;\n}) {\n if (!Array.isArray(content) || content.length === 0) return null;\n\n const html = await renderBlockNoteHTML(content);\n\n return <BlockNoteStaticViewer html={html} size={size} className={className} />;\n}\n","import type { PartialBlock } from \"@blocknote/core\";\nimport { ServerBlockNoteEditor } from \"@blocknote/server-util\";\n\n// Default schema only, the same one BlockNoteViewer uses: the editor's mention\n// and diff inline specs are React specs from \"use client\" modules (next/link,\n// hover cards), so they cannot run here.\nlet editor: ServerBlockNoteEditor | undefined;\n\n// ServerBlockNoteEditor swaps globalThis.window/document for its JSDOM around\n// each call and restores them after an await. Two overlapping calls would\n// restore each other's values and could leave the JSDOM window on the server's\n// globals, so calls run one at a time.\nlet queue: Promise<unknown> = Promise.resolve();\n\n/**\n * Renders a BlockNote blocks array to the HTML the editor itself would render,\n * through BlockNote's own server editor (`blocksToFullHTML`). Server only.\n */\nexport function renderBlockNoteHTML(blocks: PartialBlock[]): Promise<string> {\n const run = queue.then(() => {\n editor ??= ServerBlockNoteEditor.create();\n return editor.blocksToFullHTML(blocks);\n });\n queue = run.catch(() => undefined);\n return run;\n}\n"],"mappings":";;;;;AACA,OAAO;AAIP,SAAS,6BAA6B;;;ACJtC,SAAS,6BAA6B;AAKtC,IAAI;AAMJ,IAAI,QAA0B,QAAQ,QAAQ;AAMvC,SAAS,oBAAoB,QAAyC;AAC3E,QAAM,MAAM,MAAM,KAAK,MAAM;AAC3B,eAAW,sBAAsB,OAAO;AACxC,WAAO,OAAO,iBAAiB,MAAM;AAAA,EACvC,CAAC;AACD,UAAQ,IAAI,MAAM,MAAM,MAAS;AACjC,SAAO;AACT;AAPgB;;;ADQP;AAbT,eAAsB,uBAAuB;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,EAAG,QAAO;AAE5D,QAAM,OAAO,MAAM,oBAAoB,OAAO;AAE9C,SAAO,oBAAC,yBAAsB,MAAY,MAAY,WAAsB;AAC9E;AAdsB;","names":[]}
@@ -525,6 +525,13 @@ type BlockNoteEditorProps = {
525
525
  diffContent?: PartialBlock[];
526
526
  placeholder?: string;
527
527
  bordered?: boolean;
528
+ /**
529
+ * Storage folder for pasted images, used instead of the current company's
530
+ * `companies/<companyId>/<type>` folder: the image key becomes
531
+ * `<uploadKeyPrefix>/<id>/<file name>`. For platform content edited by users
532
+ * who belong to no company (the blog). Omitted: the company folder, as before.
533
+ */
534
+ uploadKeyPrefix?: string;
528
535
  inlineContentSpecs?: Record<string, any>;
529
536
  renderOverlays?: (editor: any) => React__default.ReactNode;
530
537
  enableMentions?: boolean;
@@ -553,6 +560,17 @@ declare const BlockNoteViewerContainer: React__default.MemoExoticComponent<(prop
553
560
  size?: "default" | "sm";
554
561
  }) => React__default.JSX.Element>;
555
562
 
563
+ /**
564
+ * Shows HTML produced by BlockNoteServerContent inside the same container
565
+ * markup BlockNoteView renders, so BlockNote's stylesheet and the app's
566
+ * `.BlockNoteView` rules apply as they do to BlockNoteViewer.
567
+ */
568
+ declare function BlockNoteStaticViewer({ html, size, className, }: {
569
+ html: string;
570
+ size?: "default" | "sm";
571
+ className?: string;
572
+ }): React$1.JSX.Element;
573
+
556
574
  declare function ErrorDetails({ title, message, code }: {
557
575
  title?: string;
558
576
  message: string;
@@ -902,7 +920,7 @@ declare const FileUploaderItem: React$1.ForwardRefExoticComponent<{
902
920
  } & React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
903
921
  declare const FileInput: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
904
922
 
905
- declare function FormBlockNote({ form, id, name, placeholder, type, isRequired, description, testId, onEmptyChange, inlineContentSpecs, renderOverlays, className, stretch, enableMentions, mentionSearchFn, mentionSearchParams, mentionResolveFn, suggestionMenuComponent, mentionNameResolver, onWarmMentions, aiConfig, aiHandleRef, headerAction, }: {
923
+ declare function FormBlockNote({ form, id, name, placeholder, type, isRequired, description, testId, onEmptyChange, inlineContentSpecs, renderOverlays, className, stretch, enableMentions, mentionSearchFn, mentionSearchParams, mentionResolveFn, suggestionMenuComponent, mentionNameResolver, onWarmMentions, aiConfig, aiHandleRef, headerAction, uploadKeyPrefix, }: {
906
924
  form: any;
907
925
  id: string;
908
926
  name?: string;
@@ -932,6 +950,8 @@ declare function FormBlockNote({ form, id, name, placeholder, type, isRequired,
932
950
  aiHandleRef?: React__default.MutableRefObject<BlockNoteAiHandle | null>;
933
951
  /** Rendered on the label row, right-aligned — e.g. a "Suggest impression" button. */
934
952
  headerAction?: React__default.ReactNode;
953
+ /** See `BlockNoteEditorProps.uploadKeyPrefix`. */
954
+ uploadKeyPrefix?: string;
935
955
  }): React__default.JSX.Element;
936
956
 
937
957
  type FormCheckboxProps = {
@@ -1206,8 +1226,10 @@ type TitleProps = {
1206
1226
  className?: string;
1207
1227
  module?: ModuleWithPermissions;
1208
1228
  prioritizeFunctions?: boolean;
1229
+ /** Renders the title line as a real heading (public SEO pages). Omitted: a plain div, as before. */
1230
+ headingLevel?: 1 | 2;
1209
1231
  };
1210
- declare function ContentTitle({ module, type, element, functions, className, prioritizeFunctions }: TitleProps): React$1.JSX.Element | null;
1232
+ declare function ContentTitle({ module, type, element, functions, className, prioritizeFunctions, headingLevel, }: TitleProps): React$1.JSX.Element | null;
1211
1233
 
1212
1234
  type HeaderProps = {
1213
1235
  children?: React.ReactNode;
@@ -1622,7 +1644,26 @@ type AdminGroup = {
1622
1644
 
1623
1645
  /** Keys of the built-in platform sections, for `hiddenSections`. */
1624
1646
  type PlatformSectionKey = "companies" | "users" | "token-usage" | "ai-connections" | "rbac" | "billing";
1647
+ /**
1648
+ * The sections every NJA project has, by key. Hrefs are constants rather than
1649
+ * props: the path convention IS the contract that makes this component
1650
+ * reusable. Exported so an app that passes its own `groups` places these
1651
+ * entries without retyping their keys, icons and copy.
1652
+ *
1653
+ * `billing` is the only conditional entry: the default platform group shows it
1654
+ * only when Stripe is configured (see AdminIndexGrid). An app that places it in
1655
+ * its own `groups` applies the same check itself.
1656
+ */
1657
+ declare const ADMIN_PLATFORM_SECTIONS: Record<PlatformSectionKey, AdminSection>;
1625
1658
  type AdminIndexProps = {
1659
+ /**
1660
+ * Replaces the default groups (the built-in platform group plus
1661
+ * `additionalGroups`) with exactly these, in this order. For an app that
1662
+ * arranges its administration by its own headings; it places the platform
1663
+ * entries it wants from ADMIN_PLATFORM_SECTIONS. When set, `additionalGroups`
1664
+ * is ignored and the Stripe check on `billing` is the app's to apply.
1665
+ */
1666
+ groups?: AdminGroup[];
1626
1667
  /** Project-specific groups, appended after the built-in platform group. */
1627
1668
  additionalGroups?: AdminGroup[];
1628
1669
  /**
@@ -1638,13 +1679,13 @@ type AdminIndexProps = {
1638
1679
  * The grid itself, with no page shell — this is what the specs render, because
1639
1680
  * RoundPageContainer pulls in the app Header and its four header contexts.
1640
1681
  */
1641
- declare function AdminIndexGrid({ additionalGroups, hiddenSections }: AdminIndexProps): React$1.JSX.Element;
1682
+ declare function AdminIndexGrid({ groups: customGroups, additionalGroups, hiddenSections }: AdminIndexProps): React$1.JSX.Element;
1642
1683
  /**
1643
1684
  * Drop-in administration landing page. Mount it bare — it brings its own shell
1644
1685
  * and its own page chrome (AdministrationProvider), so it does not inherit the
1645
1686
  * title and breadcrumb of whatever page rendered before it.
1646
1687
  */
1647
- declare function AdminIndexContainer({ additionalGroups, hiddenSections }: AdminIndexProps): React$1.JSX.Element;
1688
+ declare function AdminIndexContainer({ groups, additionalGroups, hiddenSections }: AdminIndexProps): React$1.JSX.Element;
1648
1689
 
1649
1690
  /**
1650
1691
  * The fixed namespace of i18n keys the administration index reads via
@@ -1677,13 +1718,6 @@ declare const ADMINISTRATION_I18N_KEYS: readonly ["administration.title", "admin
1677
1718
  */
1678
1719
  declare const AI_CONNECTIONS_I18N_KEYS: readonly ["ai_connections.admin.title", "ai_connections.admin.entity", "ai_connections.admin.create", "ai_connections.admin.scope.global", "ai_connections.admin.scope.company", "ai_connections.admin.scope.inherits_global", "ai_connections.admin.env_fallback", "ai_connections.admin.empty.title", "ai_connections.admin.empty.description", "ai_connections.admin.types.ai", "ai_connections.admin.types.aiLite", "ai_connections.admin.types.aiLarge", "ai_connections.admin.types.vision", "ai_connections.admin.types.audio", "ai_connections.admin.types.image", "ai_connections.admin.types.embedder", "ai_connections.admin.types.transcriber", "ai_connections.admin.types.documentAi", "ai_connections.admin.fields.name", "ai_connections.admin.fields.provider", "ai_connections.admin.fields.model", "ai_connections.admin.fields.url", "ai_connections.admin.fields.apiKey", "ai_connections.admin.fields.region", "ai_connections.admin.fields.instance", "ai_connections.admin.fields.apiVersion", "ai_connections.admin.fields.googleCredentialsBase64", "ai_connections.admin.fields.allowFallbacks", "ai_connections.admin.fields.reasoningEffort", "ai_connections.admin.fields.maxOutputTokens", "ai_connections.admin.fields.dimensions", "ai_connections.admin.fields.inputCostPer1MTokens", "ai_connections.admin.fields.outputCostPer1MTokens", "ai_connections.admin.fields.cachedInputCostPer1MTokens", "ai_connections.admin.fields.costPerMinute", "ai_connections.admin.fields.costPerPage", "ai_connections.admin.fields.directUrl", "ai_connections.admin.fields.language", "ai_connections.admin.fields.directFormat", "ai_connections.admin.fields.directProvider", "ai_connections.admin.fields.costPerImage", "ai_connections.admin.fields.negativePrompt", "ai_connections.admin.fields.width", "ai_connections.admin.fields.height", "ai_connections.admin.fields.steps", "ai_connections.admin.fields.cfgScale", "ai_connections.admin.fields.safeMode", "ai_connections.admin.fields.hideWatermark", "ai_connections.admin.fields.imageFormat", "ai_connections.admin.fields.enabled", "ai_connections.admin.fields.costs_section", "ai_connections.admin.placeholders.name", "ai_connections.admin.placeholders.secret_unchanged", "ai_connections.admin.reorder.up", "ai_connections.admin.reorder.down", "ai_connections.admin.errors.name", "ai_connections.admin.errors.required_field", "ai_connections.admin.embedder_warning.title", "ai_connections.admin.embedder_warning.description", "ai_connections.admin.delete.title", "ai_connections.admin.delete.description", "ai_connections.admin.delete.confirm", "administration.ai_connections.description"];
1679
1720
 
1680
- /**
1681
- * Route the breadcrumb links back to. Constant rather than a prop for the same
1682
- * reason TOKEN_USAGE_ADMIN_PAGE_URL is
1683
- * (features/tokenusage/contexts/TokenUsageAdminContext.tsx): the breadcrumb is
1684
- * built here, not by the consuming app, and the path convention IS the contract.
1685
- */
1686
- declare const AI_CONNECTIONS_ADMIN_PAGE_URL = "/administration/ai-connections";
1687
1721
  interface AiConnectionsContextType {
1688
1722
  /** Every connection, both scopes — the cards filter per scope themselves. */
1689
1723
  connections: AiConnectionInterface[];
@@ -3994,4 +4028,4 @@ interface MultipleSelectorRef {
3994
4028
  declare function useDebounce<T>(value: T, delay?: number): T;
3995
4029
  declare const MultipleSelector: React$1.ForwardRefExoticComponent<MultipleSelectorProps & React$1.RefAttributes<MultipleSelectorRef>>;
3996
4030
 
3997
- export { ADMINISTRATION_I18N_KEYS, AI_CONNECTIONS_ADMIN_PAGE_URL, AI_CONNECTIONS_I18N_KEYS, AI_CONNECTION_TYPE_ORDER, AcceptInvitation, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivateAccount, AddUserToRole, AdminCompanyContainer, type AdminGroup, AdminIndexContainer, AdminIndexGrid, type AdminSection, AdminUsersList, AiConnectionDeleter, type AiConnectionDeleterProps, AiConnectionEditor, type AiConnectionEditorProps, AiConnectionEnvDefaults, AiConnectionInterface, AiConnectionTypeCard, type AiConnectionTypeCardProps, AiConnectionsContainer, type AiConnectionsContextType, AiConnectionsProvider, type AiConnectionsProviderProps, AiProviderRegistry, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AllUsersListContainer, AllowedUsersDetails, ApprovalActionCard, type ApprovalActionRenderer, AssistantBlockNoteComposer, AssistantComposer, AssistantContainer, AssistantContainerWithApprovals, AssistantPageContainer, AssistantThread, AttributeElement, AuthContainer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, BackupCodesDialog, Badge, type BadgeProps, type BlockNoteAiConfig, type BlockNoteAiGenerateAction, type BlockNoteAiHandle, BlockNoteEditorContainer, BlockNoteEditorMentionHoverCard, BlockNoteEditorMentionSuggestionMenu, type BlockNoteEditorProps, BlockNoteViewerContainer, KanbanBoard as Board, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbNavigation, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, KanbanColumn as Column, KanbanColumnHandle as ColumnHandle, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommonAddTrigger, CommonAssociationCommandDialog, CommonAssociationTrigger, CommonDeleter, CommonEditorButtons, CommonEditorDiscardDialog, CommonEditorHeader, CommonEditorTrigger, CompaniesList, CompaniesListContainer, CompanyConfigurationEditor, CompanyContainer, CompanyContent, CompanyDeleter, CompanyDetails, CompanyEditor, CompanyUsersList, ConfirmDialog, type ConfirmDialogProps, ContentListGrid, type ContentListGridProps, ContentListTable, ContentTableSearch, ContentTitle, ContentsList, ContentsListById, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ContributorsList, Cookies, CurrencyInput, type CurrencyInputProps, DatePickerPopover, DateRangeSelector, DetailField, type DetailFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisableTwoFactorDialog, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableAvatar, EditorSheet, type EditorSheetProps, EmptyState, EntityAvatar, EntityHero, EntityHeroAvatar, EntityHeroLayout, EntityHeroMetaRow, EntityMentionLink, EntityMultiSelector, EntitySection, EntitySelector, ErrorDetails, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FileInput, FileUploader, FileUploaderContent, FileUploaderItem, FiscalDataDisplay, type FiscalDataHandle, ForgotPassword, Form, FormBlockNote, FormBody, FormCheckbox, FormCol, FormDate, FormDateTime, FormFeatures, FormFieldWrapper, FormInput, FormPassword, FormPlaceAutocomplete, FormRoles, FormRow, FormSection, FormSelect, FormSlider, FormSwitch, FormTextarea, GdprConsentCheckbox, GdprConsentSection, type GenerateTableStructureParams, HEADER_ROW_MIN_H, HandbookAdminContainer, HandbookAskContainer, HandbookAskSheet, HandbookContents, HandbookIndexStatus, HandbookPageContainer, HandbookPageDetails, HandbookPageNavigator, HandbookPageNeighbours, HandbookPageToc, HandbookSectionGroup, HandbookSyncButton, Header, HoverCard, HoverCardContent, HoverCardTrigger, HowToCommand, HowToCommandViewer, HowToContainer, HowToContent, HowToDeleter, HowToDetails, HowToEditor, HowToList, HowToListContainer, HowToMultiSelector, HowToReindexButton, HowToSelector, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, ItalianFiscalData, ItalianFiscalDataDisplay, type ItalianFiscalDataProps, KanbanItem as Item, KanbanItemHandle as ItemHandle, KanbanRoot as Kanban, KanbanBoard, KanbanColumn, KanbanColumnHandle, KanbanItem, KanbanItemHandle, KanbanOverlay, Label, LandingComponent, Link, type LinkProps, Login, Logout, type MentionHoverCardProps, type MentionInsertFn, type MentionItem, type MentionNameResolver, type MentionRenderProps, type MentionRenderer, type MentionResolveFn, type MentionResolveResult, type MentionSearchFn, type MentionSuggestionItem, MermaidDiagram, MessageItem, MessageList, MessageSourcesPanel, MicroLabel, type MicroLabelProps, MobileNavigationBar, ModeToggleSwitch, MultiFileUploader, MultiSelect, MultipleSelector, type MultipleSelectorProps, type MultipleSelectorRef, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NotificationErrorBoundary, NotificationIcon, NotificationMenuItem, NotificationModal, NotificationToast, type NotificationViewMode, NotificationViewSwitcher, NotificationsList, NotificationsListContainer, OAuthClientCard, type OAuthClientCardProps, OAuthClientDetail, type OAuthClientDetailProps, OAuthClientForm, type OAuthClientFormProps, OAuthClientList, type OAuthClientListProps, OAuthClientSecretDisplay, type OAuthClientSecretDisplayProps, OAuthCompanySelector, type OAuthCompanySelectorProps, OAuthConsentActions, type OAuthConsentActionsProps, OAuthConsentHeader, type OAuthConsentHeaderProps, OAuthConsentScreen, type OAuthConsentScreenProps, OAuthRedirectUriInput, type OAuthRedirectUriInputProps, OAuthScopeList, type OAuthScopeListProps, OAuthScopeSelector, type OAuthScopeSelectorProps, OnboardingCard, type Option, KanbanOverlay as Overlay, PageContainer, PageContainerContentDetails, type PageContainerItems, PageContentContainer, PageSection, type PartitionedTabs, PasskeyButton, PasskeyList, PasskeySetupDialog, PasswordInput, type PasswordInputProps, type PlaceAddressComponents, type PlaceSuggestion, PlatformUsersContainer, PlatformUsersList, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, PushNotificationProvider, RadioGroup, RadioGroupItem, RbacByRoleContainer, RbacContainer, RbacPermissionCell, RbacPermissionPicker, ReactMarkdownContainer, RecentPagesNavigator, ReferralCodeCapture, ReferralDialog, type ReferralDialogProps, type ReferralDialogTranslations, ReferralWidget, type ReferralWidgetProps, type ReferralWidgetTranslations, RefreshUser, RelevantContentsList, RelevantUsersList, RemoveUserFromRole, ResetPassword, ResizableHandle, ResizablePanel, ResizablePanelGroup, RoleContainer, RoleDetails, RoleUsersList, RolesList, KanbanRoot as Root, RoundPageContainer, RoundPageContainerTitle, ScrollArea, ScrollBar, SectionHeader, type SectionHeaderProps, SecurityContainer, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupSourceCapture, Skeleton, Slider, Spinner, Switch, type Tab, Table, TableBody, TableCaption, TableCell, TableCellAvatar, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContainer, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, TokenStatusIndicator, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TotpAuthenticatorList, TotpInput, TotpSetupDialog, TwoFactorChallenge, TwoFactorSettings, UserAvatar, UserAvatarEditor, UserAvatarList, UserContainer, UserContent, UserDeleter, UserEditor, UserIndexContainer, UserIndexDetails, UserListInAdd, UserMultiSelect, UserReactivator, UserResentInvitationEmail, UserRoleAdd, UserRolesList, UserSearchPopover, UserSelector, UserStanadaloneDetails, UsersList, UsersListByContentIds, UsersListContainer, WaitlistConfirmation, WaitlistForm, WaitlistHeroSection, WaitlistList, WaitlistQuestionnaireRenderer, WaitlistSuccessState, badgeVariants, buttonVariants, cellComponent, cellDate, cellDateTime, cellId, cellLink, cellUrl, commandFilterByKeywords, createMentionInlineContentSpec, errorToast, generateNotificationData, hasOpenInnerLayer, mentionDataAttrs, navigationMenuTriggerStyle, nextDateRange, parseFiscalData, parseMentionElement, partitionTabs, spinnerVariants, tabsListVariants, toggleVariants, triggerAssociationToast, useAiConnections, useCarousel, useComboboxAnchor, useDebounce, useEditorDialog, useFileUpload, useMentionInsert, useOptionalSidebar, useSidebar, useSidebarControls };
4031
+ export { ADMINISTRATION_I18N_KEYS, ADMIN_PLATFORM_SECTIONS, AI_CONNECTIONS_I18N_KEYS, AI_CONNECTION_TYPE_ORDER, AcceptInvitation, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivateAccount, AddUserToRole, AdminCompanyContainer, type AdminGroup, AdminIndexContainer, AdminIndexGrid, type AdminSection, AdminUsersList, AiConnectionDeleter, type AiConnectionDeleterProps, AiConnectionEditor, type AiConnectionEditorProps, AiConnectionEnvDefaults, AiConnectionInterface, AiConnectionTypeCard, type AiConnectionTypeCardProps, AiConnectionsContainer, type AiConnectionsContextType, AiConnectionsProvider, type AiConnectionsProviderProps, AiProviderRegistry, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AllUsersListContainer, AllowedUsersDetails, ApprovalActionCard, type ApprovalActionRenderer, AssistantBlockNoteComposer, AssistantComposer, AssistantContainer, AssistantContainerWithApprovals, AssistantPageContainer, AssistantThread, AttributeElement, AuthContainer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, BackupCodesDialog, Badge, type BadgeProps, type BlockNoteAiConfig, type BlockNoteAiGenerateAction, type BlockNoteAiHandle, BlockNoteEditorContainer, BlockNoteEditorMentionHoverCard, BlockNoteEditorMentionSuggestionMenu, type BlockNoteEditorProps, BlockNoteStaticViewer, BlockNoteViewerContainer, KanbanBoard as Board, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbNavigation, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, KanbanColumn as Column, KanbanColumnHandle as ColumnHandle, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommonAddTrigger, CommonAssociationCommandDialog, CommonAssociationTrigger, CommonDeleter, CommonEditorButtons, CommonEditorDiscardDialog, CommonEditorHeader, CommonEditorTrigger, CompaniesList, CompaniesListContainer, CompanyConfigurationEditor, CompanyContainer, CompanyContent, CompanyDeleter, CompanyDetails, CompanyEditor, CompanyUsersList, ConfirmDialog, type ConfirmDialogProps, ContentListGrid, type ContentListGridProps, ContentListTable, ContentTableSearch, ContentTitle, ContentsList, ContentsListById, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ContributorsList, Cookies, CurrencyInput, type CurrencyInputProps, DatePickerPopover, DateRangeSelector, DetailField, type DetailFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DisableTwoFactorDialog, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableAvatar, EditorSheet, type EditorSheetProps, EmptyState, EntityAvatar, EntityHero, EntityHeroAvatar, EntityHeroLayout, EntityHeroMetaRow, EntityMentionLink, EntityMultiSelector, EntitySection, EntitySelector, ErrorDetails, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FileInput, FileUploader, FileUploaderContent, FileUploaderItem, FiscalDataDisplay, type FiscalDataHandle, ForgotPassword, Form, FormBlockNote, FormBody, FormCheckbox, FormCol, FormDate, FormDateTime, FormFeatures, FormFieldWrapper, FormInput, FormPassword, FormPlaceAutocomplete, FormRoles, FormRow, FormSection, FormSelect, FormSlider, FormSwitch, FormTextarea, GdprConsentCheckbox, GdprConsentSection, type GenerateTableStructureParams, HEADER_ROW_MIN_H, HandbookAdminContainer, HandbookAskContainer, HandbookAskSheet, HandbookContents, HandbookIndexStatus, HandbookPageContainer, HandbookPageDetails, HandbookPageNavigator, HandbookPageNeighbours, HandbookPageToc, HandbookSectionGroup, HandbookSyncButton, Header, HoverCard, HoverCardContent, HoverCardTrigger, HowToCommand, HowToCommandViewer, HowToContainer, HowToContent, HowToDeleter, HowToDetails, HowToEditor, HowToList, HowToListContainer, HowToMultiSelector, HowToReindexButton, HowToSelector, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, ItalianFiscalData, ItalianFiscalDataDisplay, type ItalianFiscalDataProps, KanbanItem as Item, KanbanItemHandle as ItemHandle, KanbanRoot as Kanban, KanbanBoard, KanbanColumn, KanbanColumnHandle, KanbanItem, KanbanItemHandle, KanbanOverlay, Label, LandingComponent, Link, type LinkProps, Login, Logout, type MentionHoverCardProps, type MentionInsertFn, type MentionItem, type MentionNameResolver, type MentionRenderProps, type MentionRenderer, type MentionResolveFn, type MentionResolveResult, type MentionSearchFn, type MentionSuggestionItem, MermaidDiagram, MessageItem, MessageList, MessageSourcesPanel, MicroLabel, type MicroLabelProps, MobileNavigationBar, ModeToggleSwitch, MultiFileUploader, MultiSelect, MultipleSelector, type MultipleSelectorProps, type MultipleSelectorRef, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NotificationErrorBoundary, NotificationIcon, NotificationMenuItem, NotificationModal, NotificationToast, type NotificationViewMode, NotificationViewSwitcher, NotificationsList, NotificationsListContainer, OAuthClientCard, type OAuthClientCardProps, OAuthClientDetail, type OAuthClientDetailProps, OAuthClientForm, type OAuthClientFormProps, OAuthClientList, type OAuthClientListProps, OAuthClientSecretDisplay, type OAuthClientSecretDisplayProps, OAuthCompanySelector, type OAuthCompanySelectorProps, OAuthConsentActions, type OAuthConsentActionsProps, OAuthConsentHeader, type OAuthConsentHeaderProps, OAuthConsentScreen, type OAuthConsentScreenProps, OAuthRedirectUriInput, type OAuthRedirectUriInputProps, OAuthScopeList, type OAuthScopeListProps, OAuthScopeSelector, type OAuthScopeSelectorProps, OnboardingCard, type Option, KanbanOverlay as Overlay, PageContainer, PageContainerContentDetails, type PageContainerItems, PageContentContainer, PageSection, type PartitionedTabs, PasskeyButton, PasskeyList, PasskeySetupDialog, PasswordInput, type PasswordInputProps, type PlaceAddressComponents, type PlaceSuggestion, type PlatformSectionKey, PlatformUsersContainer, PlatformUsersList, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, PushNotificationProvider, RadioGroup, RadioGroupItem, RbacByRoleContainer, RbacContainer, RbacPermissionCell, RbacPermissionPicker, ReactMarkdownContainer, RecentPagesNavigator, ReferralCodeCapture, ReferralDialog, type ReferralDialogProps, type ReferralDialogTranslations, ReferralWidget, type ReferralWidgetProps, type ReferralWidgetTranslations, RefreshUser, RelevantContentsList, RelevantUsersList, RemoveUserFromRole, ResetPassword, ResizableHandle, ResizablePanel, ResizablePanelGroup, RoleContainer, RoleDetails, RoleUsersList, RolesList, KanbanRoot as Root, RoundPageContainer, RoundPageContainerTitle, ScrollArea, ScrollBar, SectionHeader, type SectionHeaderProps, SecurityContainer, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupSourceCapture, Skeleton, Slider, Spinner, Switch, type Tab, Table, TableBody, TableCaption, TableCell, TableCellAvatar, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContainer, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, TokenStatusIndicator, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TotpAuthenticatorList, TotpInput, TotpSetupDialog, TwoFactorChallenge, TwoFactorSettings, UserAvatar, UserAvatarEditor, UserAvatarList, UserContainer, UserContent, UserDeleter, UserEditor, UserIndexContainer, UserIndexDetails, UserListInAdd, UserMultiSelect, UserReactivator, UserResentInvitationEmail, UserRoleAdd, UserRolesList, UserSearchPopover, UserSelector, UserStanadaloneDetails, UsersList, UsersListByContentIds, UsersListContainer, WaitlistConfirmation, WaitlistForm, WaitlistHeroSection, WaitlistList, WaitlistQuestionnaireRenderer, WaitlistSuccessState, badgeVariants, buttonVariants, cellComponent, cellDate, cellDateTime, cellId, cellLink, cellUrl, commandFilterByKeywords, createMentionInlineContentSpec, errorToast, generateNotificationData, hasOpenInnerLayer, mentionDataAttrs, navigationMenuTriggerStyle, nextDateRange, parseFiscalData, parseMentionElement, partitionTabs, spinnerVariants, tabsListVariants, toggleVariants, triggerAssociationToast, useAiConnections, useCarousel, useComboboxAnchor, useDebounce, useEditorDialog, useFileUpload, useMentionInsert, useOptionalSidebar, useSidebar, useSidebarControls };