@carlonicora/nextjs-jsonapi 5.4.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 (148) hide show
  1. package/dist/{BlockNoteEditor-YQL2SGFR.mjs → BlockNoteEditor-GVQCKRMU.mjs} +5 -5
  2. package/dist/{BlockNoteEditor-4YCAIEPT.js → BlockNoteEditor-THBJH2UR.js} +20 -20
  3. package/dist/{BlockNoteEditor-4YCAIEPT.js.map → BlockNoteEditor-THBJH2UR.js.map} +1 -1
  4. package/dist/{BlockNoteViewer-AEJKJ27Q.mjs → BlockNoteViewer-U6E3DS4F.mjs} +3 -3
  5. package/dist/{BlockNoteViewer-YL3J7J2Y.js → BlockNoteViewer-VZOVKTFO.js} +4 -4
  6. package/dist/{BlockNoteViewer-YL3J7J2Y.js.map → BlockNoteViewer-VZOVKTFO.js.map} +1 -1
  7. package/dist/billing/index.js +442 -442
  8. package/dist/billing/index.mjs +4 -4
  9. package/dist/{chunk-XCHSX3VC.mjs → chunk-3CGROPF3.mjs} +2 -2
  10. package/dist/{chunk-QMYQRPQC.mjs → chunk-6SQYXUVP.mjs} +2 -2
  11. package/dist/{chunk-NFBOSPNJ.js → chunk-G6UE6MEP.js} +59 -19
  12. package/dist/chunk-G6UE6MEP.js.map +1 -0
  13. package/dist/{chunk-YNCQSWQW.js → chunk-S4YJ5WCW.js} +8 -8
  14. package/dist/{chunk-YNCQSWQW.js.map → chunk-S4YJ5WCW.js.map} +1 -1
  15. package/dist/{chunk-3NLAXVIN.js → chunk-TY5FYP3G.js} +917 -881
  16. package/dist/chunk-TY5FYP3G.js.map +1 -0
  17. package/dist/{chunk-WC63PJSC.mjs → chunk-VC5A3AUZ.mjs} +61 -21
  18. package/dist/chunk-VC5A3AUZ.mjs.map +1 -0
  19. package/dist/{chunk-6DC2WVVB.mjs → chunk-W7F5BDSV.mjs} +2 -2
  20. package/dist/{chunk-5PPG6PL7.js → chunk-WPYT4UKJ.js} +3 -3
  21. package/dist/{chunk-5PPG6PL7.js.map → chunk-WPYT4UKJ.js.map} +1 -1
  22. package/dist/{chunk-EUKTBOI2.mjs → chunk-X5WIUUNG.mjs} +1471 -1435
  23. package/dist/chunk-X5WIUUNG.mjs.map +1 -0
  24. package/dist/{chunk-YW4ZCEWB.js → chunk-YDYVJM4I.js} +4 -4
  25. package/dist/{chunk-YW4ZCEWB.js.map → chunk-YDYVJM4I.js.map} +1 -1
  26. package/dist/client/index.js +5 -5
  27. package/dist/client/index.js.map +1 -1
  28. package/dist/client/index.mjs +4 -4
  29. package/dist/components/editors/server.d.mts +15 -0
  30. package/dist/components/editors/server.d.ts +15 -0
  31. package/dist/components/editors/server.js +38 -0
  32. package/dist/components/editors/server.js.map +1 -0
  33. package/dist/components/editors/server.mjs +38 -0
  34. package/dist/components/editors/server.mjs.map +1 -0
  35. package/dist/components/index.d.mts +33 -10
  36. package/dist/components/index.d.ts +33 -10
  37. package/dist/components/index.js +7 -5
  38. package/dist/components/index.js.map +1 -1
  39. package/dist/components/index.mjs +8 -6
  40. package/dist/contexts/index.d.mts +9 -1
  41. package/dist/contexts/index.d.ts +9 -1
  42. package/dist/contexts/index.js +5 -5
  43. package/dist/contexts/index.mjs +4 -4
  44. package/dist/core/index.js +4 -4
  45. package/dist/core/index.js.map +1 -1
  46. package/dist/core/index.mjs +3 -3
  47. package/dist/email-automations/index.d.mts +3 -0
  48. package/dist/email-automations/index.d.ts +3 -0
  49. package/dist/email-automations/index.js +99 -95
  50. package/dist/email-automations/index.js.map +1 -1
  51. package/dist/email-automations/index.mjs +30 -26
  52. package/dist/email-automations/index.mjs.map +1 -1
  53. package/dist/features/analytics/index.d.mts +11 -4
  54. package/dist/features/analytics/index.d.ts +11 -4
  55. package/dist/features/analytics/index.js +127 -135
  56. package/dist/features/analytics/index.js.map +1 -1
  57. package/dist/features/analytics/index.mjs +16 -24
  58. package/dist/features/analytics/index.mjs.map +1 -1
  59. package/dist/features/analytics/server.d.mts +5 -2
  60. package/dist/features/analytics/server.d.ts +5 -2
  61. package/dist/features/analytics/server.js +7 -7
  62. package/dist/features/analytics/server.js.map +1 -1
  63. package/dist/features/analytics/server.mjs +5 -5
  64. package/dist/features/analytics/server.mjs.map +1 -1
  65. package/dist/features/blog/index.d.mts +12 -2
  66. package/dist/features/blog/index.d.ts +12 -2
  67. package/dist/features/blog/index.js +206 -195
  68. package/dist/features/blog/index.js.map +1 -1
  69. package/dist/features/blog/index.mjs +71 -60
  70. package/dist/features/blog/index.mjs.map +1 -1
  71. package/dist/features/blog/server.d.mts +4 -1
  72. package/dist/features/blog/server.d.ts +4 -1
  73. package/dist/features/blog/server.js +49 -21
  74. package/dist/features/blog/server.js.map +1 -1
  75. package/dist/features/blog/server.mjs +36 -8
  76. package/dist/features/blog/server.mjs.map +1 -1
  77. package/dist/features/help/index.js +38 -38
  78. package/dist/features/help/index.mjs +4 -4
  79. package/dist/features/tokenusage/index.d.mts +1 -3
  80. package/dist/features/tokenusage/index.d.ts +1 -3
  81. package/dist/features/tokenusage/index.js +127 -135
  82. package/dist/features/tokenusage/index.js.map +1 -1
  83. package/dist/features/tokenusage/index.mjs +10 -18
  84. package/dist/features/tokenusage/index.mjs.map +1 -1
  85. package/dist/index.js +5 -5
  86. package/dist/index.js.map +1 -1
  87. package/dist/index.mjs +4 -4
  88. package/dist/server/index.js +4 -4
  89. package/dist/server/index.mjs +3 -3
  90. package/package.json +9 -1
  91. package/src/components/editors/server/BlockNoteServerContent.tsx +28 -0
  92. package/src/components/editors/server/__tests__/renderBlockNoteHTML.spec.ts +44 -0
  93. package/src/components/editors/server/renderBlockNoteHTML.ts +26 -0
  94. package/src/components/editors/server-entry.ts +7 -0
  95. package/src/components/index.ts +1 -0
  96. package/src/components/viewers/BlockNoteStaticViewer.tsx +44 -0
  97. package/src/features/administration/components/AdminIndexContainer.tsx +61 -33
  98. package/src/features/administration/components/__tests__/AdminIndexContainer.spec.tsx +61 -1
  99. package/src/features/administration/components/index.ts +2 -1
  100. package/src/features/administration/contexts/AdministrationContext.tsx +11 -3
  101. package/src/features/administration/contexts/__tests__/AdministrationContext.spec.tsx +40 -0
  102. package/src/features/ai-connection/ai-connection.module.ts +2 -0
  103. package/src/features/ai-connection/contexts/AiConnectionsContext.tsx +3 -16
  104. package/src/features/ai-connection/contexts/__tests__/AiConnectionsContext.spec.tsx +33 -0
  105. package/src/features/analytics/__tests__/server-entry.spec.tsx +2 -1
  106. package/src/features/analytics/analytics.modules.ts +22 -5
  107. package/src/features/analytics/components/AnalyticsAdminContainer.tsx +4 -3
  108. package/src/features/analytics/components/AnalyticsAdminPageContainer.tsx +6 -3
  109. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +4 -3
  110. package/src/features/analytics/components/__tests__/AnalyticsJourneyContainer.spec.tsx +11 -0
  111. package/src/features/analytics/components/__tests__/AnalyticsPageContainers.spec.tsx +12 -1
  112. package/src/features/analytics/components/server/AnalyticsAdminPage.tsx +6 -3
  113. package/src/features/analytics/contexts/AnalyticsAdminContext.tsx +8 -17
  114. package/src/features/analytics/contexts/__tests__/AnalyticsAdminContext.spec.tsx +17 -0
  115. package/src/features/billing/stripe-price/stripe-price.module.ts +2 -0
  116. package/src/features/billing/stripe-product/stripe-product.module.ts +2 -0
  117. package/src/features/blog/components/admin/BlogAdminContainer.tsx +13 -6
  118. package/src/features/blog/components/admin/BlogCategoriesList.tsx +1 -1
  119. package/src/features/blog/components/admin/BlogCoverImageField.tsx +1 -1
  120. package/src/features/blog/components/admin/BlogPostContainer.tsx +0 -1
  121. package/src/features/blog/components/admin/BlogPostEditor.tsx +42 -33
  122. package/src/features/blog/components/admin/BlogPostTranslationEditor.tsx +12 -4
  123. package/src/features/blog/components/admin/BlogPostsList.tsx +1 -1
  124. package/src/features/blog/components/public/BlogPostCard.tsx +2 -9
  125. package/src/features/blog/components/public/BlogPostMeta.tsx +2 -2
  126. package/src/features/blog/components/public/BlogPostView.tsx +9 -3
  127. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +2 -0
  128. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +17 -11
  129. package/src/features/blog/server/fetchers.ts +57 -8
  130. package/src/features/email-automation/components/containers/EmailAutomationsListContainer.tsx +12 -3
  131. package/src/features/rbac/contexts/RbacContext.tsx +4 -7
  132. package/src/features/rbac/contexts/__tests__/RbacContext.spec.tsx +42 -0
  133. package/src/features/tokenusage/components/TokenUsageAdminContainer.tsx +4 -3
  134. package/src/features/tokenusage/contexts/TokenUsageAdminContext.tsx +3 -18
  135. package/src/features/tokenusage/contexts/__tests__/TokenUsageAdminContext.spec.tsx +17 -0
  136. package/src/features/tokenusage/tokenusage-admin.module.ts +4 -3
  137. package/src/features/tokenusage/tokenusage.modules.ts +12 -2
  138. package/src/features/user/contexts/UserContext.tsx +18 -3
  139. package/src/features/user/contexts/__tests__/UserContext.spec.tsx +95 -0
  140. package/dist/chunk-3NLAXVIN.js.map +0 -1
  141. package/dist/chunk-EUKTBOI2.mjs.map +0 -1
  142. package/dist/chunk-NFBOSPNJ.js.map +0 -1
  143. package/dist/chunk-WC63PJSC.mjs.map +0 -1
  144. /package/dist/{BlockNoteEditor-YQL2SGFR.mjs.map → BlockNoteEditor-GVQCKRMU.mjs.map} +0 -0
  145. /package/dist/{BlockNoteViewer-AEJKJ27Q.mjs.map → BlockNoteViewer-U6E3DS4F.mjs.map} +0 -0
  146. /package/dist/{chunk-XCHSX3VC.mjs.map → chunk-3CGROPF3.mjs.map} +0 -0
  147. /package/dist/{chunk-QMYQRPQC.mjs.map → chunk-6SQYXUVP.mjs.map} +0 -0
  148. /package/dist/{chunk-6DC2WVVB.mjs.map → chunk-W7F5BDSV.mjs.map} +0 -0
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import {
3
- AdministrationProvider,
4
3
  Alert,
5
4
  AlertDescription,
6
5
  Badge,
@@ -38,8 +37,8 @@ import {
38
37
  registerTableGenerator,
39
38
  useDataListRetriever,
40
39
  usePageUrlGenerator
41
- } from "../../chunk-EUKTBOI2.mjs";
42
- import "../../chunk-QMYQRPQC.mjs";
40
+ } from "../../chunk-X5WIUUNG.mjs";
41
+ import "../../chunk-6SQYXUVP.mjs";
43
42
  import "../../chunk-PW42LRSL.mjs";
44
43
  import {
45
44
  BLOG_ACTION,
@@ -65,10 +64,10 @@ import {
65
64
  showToast,
66
65
  useI18nLocale,
67
66
  useI18nRouter
68
- } from "../../chunk-WC63PJSC.mjs";
67
+ } from "../../chunk-VC5A3AUZ.mjs";
68
+ import "../../chunk-V5MI7RNB.mjs";
69
69
  import "../../chunk-AUXK7QSA.mjs";
70
70
  import "../../chunk-PI56A4DG.mjs";
71
- import "../../chunk-V5MI7RNB.mjs";
72
71
  import "../../chunk-VOXD3ZLY.mjs";
73
72
  import {
74
73
  __name
@@ -160,7 +159,7 @@ function BlogCoverImageField({
160
159
  alt: alt ?? label,
161
160
  width: 320,
162
161
  height: 180,
163
- className: "h-auto max-h-48 w-auto rounded-md object-cover",
162
+ className: "h-auto max-h-48 w-auto max-w-full rounded-md object-cover",
164
163
  unoptimized: isRemoteImageSrc(previewUrl ? void 0 : currentUrl)
165
164
  }
166
165
  ) : /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -813,7 +812,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
813
812
  onSuccess,
814
813
  onNavigate: (url) => router.push(url),
815
814
  trigger,
816
- children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full flex-col gap-y-4", children: [
815
+ children: /* @__PURE__ */ jsxs7("div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
817
816
  !post && /* @__PURE__ */ jsx8(
818
817
  FormSelect,
819
818
  {
@@ -825,43 +824,50 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
825
824
  }
826
825
  ),
827
826
  /* @__PURE__ */ jsx8(FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
828
- post && /* @__PURE__ */ jsx8(FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
829
- /* @__PURE__ */ jsx8(
830
- FormTextarea,
831
- {
832
- form,
833
- id: "summary",
834
- name: t("blog.fields.summary"),
835
- description: t("blog.fields.summaryHelp")
836
- }
837
- ),
838
- /* @__PURE__ */ jsx8(
839
- BlogCoverImageField,
840
- {
841
- form,
842
- id: "coverImage",
843
- label: t("blog.fields.coverImage"),
844
- keyPrefix: BLOG_POST_UPLOAD_PREFIX,
845
- entityId: form.getValues("id"),
846
- currentUrl: post?.coverImage,
847
- alt: original?.coverImageAlt,
848
- selection: cover,
849
- onSelectionChange: setCover
850
- }
851
- ),
852
- /* @__PURE__ */ jsx8(FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }),
853
- /* @__PURE__ */ jsx8(
854
- EntityMultiSelector,
855
- {
856
- id: "categories",
857
- form,
858
- label: t("blog.fields.categories"),
859
- retriever: (params) => BlogCategoryService.findMany(params),
860
- module: Modules.BlogCategory,
861
- getLabel: blogCategoryAdminName,
862
- getFormValueLabel: (value) => value.name || categoryName(value.id)
863
- }
864
- ),
827
+ /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
828
+ /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-y-4", children: [
829
+ post && /* @__PURE__ */ jsx8(FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
830
+ /* @__PURE__ */ jsx8(
831
+ EntityMultiSelector,
832
+ {
833
+ id: "categories",
834
+ form,
835
+ label: t("blog.fields.categories"),
836
+ retriever: (params) => BlogCategoryService.findMany(params),
837
+ module: Modules.BlogCategory,
838
+ getLabel: blogCategoryAdminName,
839
+ getFormValueLabel: (value) => value.name || categoryName(value.id)
840
+ }
841
+ ),
842
+ /* @__PURE__ */ jsx8(
843
+ FormTextarea,
844
+ {
845
+ form,
846
+ id: "summary",
847
+ name: t("blog.fields.summary"),
848
+ description: t("blog.fields.summaryHelp"),
849
+ className: "min-h-24"
850
+ }
851
+ )
852
+ ] }),
853
+ /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-y-4", children: [
854
+ /* @__PURE__ */ jsx8(
855
+ BlogCoverImageField,
856
+ {
857
+ form,
858
+ id: "coverImage",
859
+ label: t("blog.fields.coverImage"),
860
+ keyPrefix: BLOG_POST_UPLOAD_PREFIX,
861
+ entityId: form.getValues("id"),
862
+ currentUrl: post?.coverImage,
863
+ alt: original?.coverImageAlt,
864
+ selection: cover,
865
+ onSelectionChange: setCover
866
+ }
867
+ ),
868
+ /* @__PURE__ */ jsx8(FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") })
869
+ ] })
870
+ ] }),
865
871
  /* @__PURE__ */ jsx8(
866
872
  FormBlockNote,
867
873
  {
@@ -871,6 +877,8 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
871
877
  name: t("blog.fields.body"),
872
878
  type: "blog-post",
873
879
  isRequired: true,
880
+ stretch: true,
881
+ className: "min-h-96",
874
882
  onEmptyChange: setIsBodyEmptyState
875
883
  }
876
884
  )
@@ -923,14 +931,14 @@ __name(BlogPostsList, "BlogPostsList");
923
931
  import { jsx as jsx10 } from "react/jsx-runtime";
924
932
  function BlogAdminContainer() {
925
933
  const t = useTranslations9();
926
- return /* @__PURE__ */ jsx10(AdministrationProvider, { children: /* @__PURE__ */ jsx10(
934
+ const breadcrumbs = [{ name: t("blog.admin.title") }];
935
+ return /* @__PURE__ */ jsx10(SharedProvider, { value: { breadcrumbs, title: { type: t("blog.admin.title") } }, children: /* @__PURE__ */ jsx10(
927
936
  RoundPageContainer,
928
937
  {
929
938
  module: Modules.BlogPost,
930
- fullWidth: true,
931
939
  tabs: [
932
- { sectionKey: "posts", label: t("blog.tabs.posts"), content: /* @__PURE__ */ jsx10(BlogPostsList, { fullWidth: true }) },
933
- { sectionKey: "categories", label: t("blog.tabs.categories"), content: /* @__PURE__ */ jsx10(BlogCategoriesList, { fullWidth: true }) },
940
+ { sectionKey: "posts", label: t("blog.tabs.posts"), content: /* @__PURE__ */ jsx10(BlogPostsList, {}) },
941
+ { sectionKey: "categories", label: t("blog.tabs.categories"), content: /* @__PURE__ */ jsx10(BlogCategoriesList, {}) },
934
942
  { sectionKey: "layout", label: t("blog.tabs.layout"), content: /* @__PURE__ */ jsx10(BlogLayoutSetting, {}) }
935
943
  ]
936
944
  }
@@ -1154,11 +1162,15 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1154
1162
  onSuccess: onSuccess ?? (() => {
1155
1163
  }),
1156
1164
  trigger,
1157
- children: /* @__PURE__ */ jsxs10("div", { className: "flex w-full flex-col gap-y-4", children: [
1165
+ children: /* @__PURE__ */ jsxs10("div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
1158
1166
  /* @__PURE__ */ jsx15(FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
1159
- /* @__PURE__ */ jsx15(FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1160
- /* @__PURE__ */ jsx15(FormTextarea, { form, id: "summary", name: t("blog.fields.summary") }),
1161
- /* @__PURE__ */ jsx15(FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }),
1167
+ /* @__PURE__ */ jsxs10("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
1168
+ /* @__PURE__ */ jsxs10("div", { className: "flex flex-col gap-y-4", children: [
1169
+ /* @__PURE__ */ jsx15(FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1170
+ /* @__PURE__ */ jsx15(FormTextarea, { form, id: "summary", name: t("blog.fields.summary"), className: "min-h-24" })
1171
+ ] }),
1172
+ /* @__PURE__ */ jsx15("div", { className: "flex flex-col gap-y-4", children: /* @__PURE__ */ jsx15(FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }) })
1173
+ ] }),
1162
1174
  /* @__PURE__ */ jsx15(
1163
1175
  FormBlockNote,
1164
1176
  {
@@ -1168,6 +1180,8 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1168
1180
  name: t("blog.fields.body"),
1169
1181
  type: "blog-post",
1170
1182
  isRequired: true,
1183
+ stretch: true,
1184
+ className: "min-h-96",
1171
1185
  onEmptyChange: setIsBodyEmptyState
1172
1186
  }
1173
1187
  )
@@ -1316,7 +1330,6 @@ function BlogPostShell() {
1316
1330
  {
1317
1331
  module: Modules.BlogPost,
1318
1332
  id: post.id,
1319
- fullWidth: true,
1320
1333
  forceHeader: true,
1321
1334
  tabs: translations.map((translation) => ({
1322
1335
  sectionKey: translation.language,
@@ -1428,7 +1441,6 @@ function BlogLoadMore(props) {
1428
1441
  __name(BlogLoadMore, "BlogLoadMore");
1429
1442
 
1430
1443
  // src/features/blog/components/public/BlogPostCard.tsx
1431
- import { useFormatter as useFormatter2 } from "next-intl";
1432
1444
  import Image3 from "next/image";
1433
1445
 
1434
1446
  // src/features/blog/components/public/BlogPostMeta.tsx
@@ -1475,15 +1487,14 @@ function BlogPostCover(props) {
1475
1487
  __name(BlogPostCover, "BlogPostCover");
1476
1488
  function BlogPostCard(props) {
1477
1489
  const { post, categories, basePath, variant = "card", priority, headingLevel = "h2" } = props;
1478
- const format = useFormatter2();
1479
1490
  const category = resolvePostCategory(post, categories);
1480
1491
  const isProminent = variant === "hero" || variant === "large";
1481
- const eyebrow = variant === "row" && post.publishedAt ? [category?.name, format.dateTime(new Date(post.publishedAt), { day: "numeric", month: "short" })].filter(Boolean).join(" \xB7 ") : category?.name;
1492
+ const eyebrow = category?.name;
1482
1493
  const text = /* @__PURE__ */ jsxs14("div", { className: "flex min-w-0 flex-col", children: [
1483
1494
  eyebrow ? /* @__PURE__ */ jsx21(MicroLabel, { as: "span", children: eyebrow }) : null,
1484
1495
  /* @__PURE__ */ jsx21(SectionHeader, { level: headingLevel === "h3" ? 3 : 2, className: "mt-1.5", children: /* @__PURE__ */ jsx21(Link, { href: blogPostHref(basePath, post.slug), className: "after:absolute after:inset-0", children: post.title }) }),
1485
1496
  post.summary ? /* @__PURE__ */ jsx21("p", { className: "text-muted-foreground mt-2 text-sm leading-relaxed", children: post.summary }) : null,
1486
- /* @__PURE__ */ jsx21(BlogPostMeta, { post, showAuthor: isProminent, showDate: isProminent, className: "mt-3" })
1497
+ /* @__PURE__ */ jsx21(BlogPostMeta, { post, showAuthor: isProminent, className: "mt-3" })
1487
1498
  ] });
1488
1499
  if (variant === "hero") {
1489
1500
  return /* @__PURE__ */ jsxs14("article", { className: "group relative grid items-center gap-6 md:grid-cols-[1.4fr_1fr] md:gap-10", children: [
@@ -1714,7 +1725,7 @@ import { ArrowLeftIcon } from "lucide-react";
1714
1725
  import { useTranslations as useTranslations21 } from "next-intl";
1715
1726
  import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
1716
1727
  function BlogPostView(props) {
1717
- const { post, categories, related, basePath } = props;
1728
+ const { post, categories, related, basePath, body } = props;
1718
1729
  const t = useTranslations21();
1719
1730
  const category = resolvePostCategory(post, categories);
1720
1731
  const more = related.slice(0, 3);
@@ -1727,7 +1738,7 @@ function BlogPostView(props) {
1727
1738
  /* @__PURE__ */ jsxs19("header", { className: "mt-8", children: [
1728
1739
  /* @__PURE__ */ jsx27(ContentTitle, { type: category?.name, element: post.title, headingLevel: 1, className: "mb-0" }),
1729
1740
  post.summary ? /* @__PURE__ */ jsx27("p", { className: "text-muted-foreground mt-3 text-sm leading-relaxed", children: post.summary }) : null,
1730
- /* @__PURE__ */ jsx27(BlogPostMeta, { post, showAuthor: true, showDate: true, showUpdated: true, className: "mt-4" })
1741
+ /* @__PURE__ */ jsx27(BlogPostMeta, { post, showAuthor: true, className: "mt-4" })
1731
1742
  ] }),
1732
1743
  post.coverImage ? /* @__PURE__ */ jsx27(
1733
1744
  BlogPostCover,
@@ -1739,7 +1750,7 @@ function BlogPostView(props) {
1739
1750
  className: "mt-8 aspect-[16/9]"
1740
1751
  }
1741
1752
  ) : null,
1742
- /* @__PURE__ */ jsx27("div", { className: "mt-8", children: /* @__PURE__ */ jsx27(BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }) })
1753
+ /* @__PURE__ */ jsx27("div", { className: "mt-8", children: body ?? /* @__PURE__ */ jsx27(BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }) })
1743
1754
  ] }),
1744
1755
  more.length > 0 ? /* @__PURE__ */ jsx27("section", { className: "mx-auto mt-16 max-w-5xl", children: /* @__PURE__ */ jsxs19("div", { className: "border-border border-t pt-10", children: [
1745
1756
  /* @__PURE__ */ jsx27(SectionHeader, { level: 2, children: t("blog.public.moreIn", { category: category?.name ?? "" }) }),