@carlonicora/nextjs-jsonapi 6.9.0 → 6.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/{BlockNoteEditor-WN73IHXR.mjs → BlockNoteEditor-GK3DRTOP.mjs} +49 -15
  2. package/dist/BlockNoteEditor-GK3DRTOP.mjs.map +1 -0
  3. package/dist/{BlockNoteEditor-XXH3VBZ7.js → BlockNoteEditor-YOKJOVV3.js} +64 -30
  4. package/dist/BlockNoteEditor-YOKJOVV3.js.map +1 -0
  5. package/dist/billing/index.js +436 -435
  6. package/dist/billing/index.js.map +1 -1
  7. package/dist/billing/index.mjs +8 -7
  8. package/dist/billing/index.mjs.map +1 -1
  9. package/dist/{chunk-ZCM4JLM7.js → chunk-4UFMLTL2.js} +73 -71
  10. package/dist/chunk-4UFMLTL2.js.map +1 -0
  11. package/dist/{chunk-Q4XLE3QO.mjs → chunk-THZAK7S3.mjs} +9 -7
  12. package/dist/{chunk-Q4XLE3QO.mjs.map → chunk-THZAK7S3.mjs.map} +1 -1
  13. package/dist/client/index.js +2 -2
  14. package/dist/client/index.mjs +1 -1
  15. package/dist/components/index.d.mts +12 -5
  16. package/dist/components/index.d.ts +12 -5
  17. package/dist/components/index.js +2 -2
  18. package/dist/components/index.mjs +1 -1
  19. package/dist/contexts/index.js +2 -2
  20. package/dist/contexts/index.mjs +1 -1
  21. package/dist/email-automations/index.js +58 -58
  22. package/dist/email-automations/index.mjs +1 -1
  23. package/dist/features/analytics/index.js +87 -87
  24. package/dist/features/analytics/index.mjs +1 -1
  25. package/dist/features/blog/index.js +93 -93
  26. package/dist/features/blog/index.mjs +1 -1
  27. package/dist/features/help/index.js +31 -31
  28. package/dist/features/help/index.mjs +1 -1
  29. package/dist/features/tokenusage/index.js +77 -77
  30. package/dist/features/tokenusage/index.mjs +1 -1
  31. package/messages/en.json +4 -2
  32. package/messages/it.json +4 -2
  33. package/package.json +1 -1
  34. package/src/components/editors/BlockNoteEditor.tsx +69 -14
  35. package/src/components/editors/__tests__/BlockNoteEditor.ai.spec.tsx +295 -0
  36. package/src/features/assistant/components/containers/AssistantPageContainer.tsx +20 -9
  37. package/src/features/assistant/components/containers/__tests__/AssistantPageContainer.spec.tsx +116 -0
  38. package/src/features/assistant/components/parts/AssistantThread.tsx +2 -1
  39. package/src/features/assistant-message/components/MessageItem.tsx +1 -1
  40. package/src/features/assistant-message/components/MessageList.tsx +1 -1
  41. package/src/features/assistant-message/components/parts/MessageSourcesContainer.tsx +1 -1
  42. package/src/features/assistant-message/components/parts/MessageSourcesPanel.tsx +1 -1
  43. package/src/features/assistant-message/components/parts/__tests__/MessageSourcesPanel.spec.tsx +17 -1
  44. package/src/features/assistant-message/components/parts/__tests__/SuggestedQuestionsTab.spec.tsx +22 -0
  45. package/src/features/assistant-message/components/parts/tabs/SuggestedQuestionsTab.tsx +5 -3
  46. package/src/features/billing/i18n-keys.ts +2 -0
  47. package/src/features/billing/stripe-subscription/components/widgets/ProrationPreview.tsx +1 -2
  48. package/src/features/billing/stripe-subscription/components/wizards/WizardStepReview.tsx +16 -5
  49. package/dist/BlockNoteEditor-WN73IHXR.mjs.map +0 -1
  50. package/dist/BlockNoteEditor-XXH3VBZ7.js.map +0 -1
  51. package/dist/chunk-ZCM4JLM7.js.map +0 -1
@@ -37,7 +37,7 @@
37
37
 
38
38
 
39
39
 
40
- var _chunkZCM4JLM7js = require('../../chunk-ZCM4JLM7.js');
40
+ var _chunk4UFMLTL2js = require('../../chunk-4UFMLTL2.js');
41
41
  require('../../chunk-KRQRJA4J.js');
42
42
  require('../../chunk-G4JR3SFV.js');
43
43
 
@@ -138,8 +138,8 @@ function BlogCoverImageField({
138
138
  };
139
139
  }, [previewUrl]);
140
140
  const src = _nullishCoalesce(previewUrl, () => ( currentUrl));
141
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormFieldWrapper, { form, name: id, label, children: (field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
142
- _chunkZCM4JLM7js.FileUploader,
141
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormFieldWrapper, { form, name: id, label, children: (field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
142
+ _chunk4UFMLTL2js.FileUploader,
143
143
  {
144
144
  value: files,
145
145
  onValueChange: (value) => {
@@ -152,7 +152,7 @@ function BlogCoverImageField({
152
152
  },
153
153
  dropzoneOptions: dropzone,
154
154
  className: "w-full",
155
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FileInput, { className: "text-muted-foreground/50 rounded-lg outline-1 outline-dashed", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full flex-col items-center justify-center p-4", children: src ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
155
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FileInput, { className: "text-muted-foreground/50 rounded-lg outline-1 outline-dashed", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full flex-col items-center justify-center p-4", children: src ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
156
156
  _image2.default,
157
157
  {
158
158
  src,
@@ -214,7 +214,7 @@ function BlogTranslationStatus({ aiStatus, onRetranslate }) {
214
214
  const [isRetrying, setIsRetrying] = _react.useState.call(void 0, false);
215
215
  if (aiStatus === "completed") return null;
216
216
  if (aiStatus === "pending" || aiStatus === "in_progress") {
217
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-x-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softBlue", children: [
217
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-x-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softBlue", children: [
218
218
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircleIcon, { className: "animate-spin" }),
219
219
  aiStatus === "pending" ? t("blog.translation.pending") : t("blog.translation.translating")
220
220
  ] }) });
@@ -225,14 +225,14 @@ function BlogTranslationStatus({ aiStatus, onRetranslate }) {
225
225
  try {
226
226
  await onRetranslate();
227
227
  } catch (error) {
228
- _chunkZCM4JLM7js.errorToast.call(void 0, { title: t("common.errors.error"), error });
228
+ _chunk4UFMLTL2js.errorToast.call(void 0, { title: t("common.errors.error"), error });
229
229
  } finally {
230
230
  setIsRetrying(false);
231
231
  }
232
232
  }, "retranslate");
233
233
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
234
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softRed", children: t("blog.translation.failed") }),
235
- onRetranslate && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.Button, { type: "button", size: "sm", variant: "outline", onClick: () => void retranslate(), disabled: isRetrying, children: [
234
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softRed", children: t("blog.translation.failed") }),
235
+ onRetranslate && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Button, { type: "button", size: "sm", variant: "outline", onClick: () => void retranslate(), disabled: isRetrying, children: [
236
236
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}),
237
237
  t("blog.actions.translateAgain")
238
238
  ] })
@@ -293,7 +293,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
293
293
  defaultValues: getDefaultValues()
294
294
  });
295
295
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
296
- _chunkZCM4JLM7js.EditorSheet,
296
+ _chunk4UFMLTL2js.EditorSheet,
297
297
  {
298
298
  form,
299
299
  entityType: t("blog.entities.category"),
@@ -350,7 +350,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
350
350
  trigger,
351
351
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
352
352
  !category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
353
- _chunkZCM4JLM7js.FormSelect,
353
+ _chunk4UFMLTL2js.FormSelect,
354
354
  {
355
355
  form,
356
356
  id: "originalLanguage",
@@ -359,9 +359,9 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
359
359
  isRequired: true
360
360
  }
361
361
  ),
362
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "name", name: t("blog.fields.name"), isRequired: true }),
363
- category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
364
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormTextarea, { form, id: "description", name: t("blog.fields.description") }),
362
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "name", name: t("blog.fields.name"), isRequired: true }),
363
+ category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
364
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormTextarea, { form, id: "description", name: t("blog.fields.description") }),
365
365
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
366
366
  BlogCoverImageField,
367
367
  {
@@ -376,16 +376,16 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
376
376
  }
377
377
  ),
378
378
  translations.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
379
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.SectionHeader, { className: "mt-2", children: t("blog.fields.languages") }),
380
- translations.map((translation, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.Collapsible, { className: "rounded-md border", children: [
381
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.CollapsibleTrigger, { className: "flex w-full items-center justify-between gap-x-2 px-3 py-2 text-start", children: [
379
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { className: "mt-2", children: t("blog.fields.languages") }),
380
+ translations.map((translation, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Collapsible, { className: "rounded-md border", children: [
381
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CollapsibleTrigger, { className: "flex w-full items-center justify-between gap-x-2 px-3 py-2 text-start", children: [
382
382
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-x-2 text-sm font-medium", children: [
383
383
  languageName(translation.language),
384
384
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogTranslationStatus, { aiStatus: translation.aiStatus })
385
385
  ] }),
386
386
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronDownIcon, { className: "text-muted-foreground size-4" })
387
387
  ] }),
388
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.CollapsibleContent, { className: "flex flex-col gap-y-4 border-t p-3", children: [
388
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CollapsibleContent, { className: "flex flex-col gap-y-4 border-t p-3", children: [
389
389
  translation.aiStatus === "failed" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
390
390
  BlogTranslationStatus,
391
391
  {
@@ -396,9 +396,9 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
396
396
  }
397
397
  }
398
398
  ),
399
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: `translations.${index}.name`, name: t("blog.fields.name"), isRequired: true }),
399
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: `translations.${index}.name`, name: t("blog.fields.name"), isRequired: true }),
400
400
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
401
- _chunkZCM4JLM7js.FormInput,
401
+ _chunk4UFMLTL2js.FormInput,
402
402
  {
403
403
  form,
404
404
  id: `translations.${index}.slug`,
@@ -407,7 +407,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
407
407
  }
408
408
  ),
409
409
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
410
- _chunkZCM4JLM7js.FormTextarea,
410
+ _chunk4UFMLTL2js.FormTextarea,
411
411
  {
412
412
  form,
413
413
  id: `translations.${index}.description`,
@@ -480,13 +480,13 @@ var useBlogCategoryTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call
480
480
  }, [params.fields, fieldColumnMap, t, refresh]);
481
481
  return _react.useMemo.call(void 0, () => ({ data: tableData, columns }), [tableData, columns]);
482
482
  }, "useBlogCategoryTableStructure");
483
- _chunkZCM4JLM7js.registerTableGenerator.call(void 0, "blog-categories", useBlogCategoryTableStructure);
483
+ _chunk4UFMLTL2js.registerTableGenerator.call(void 0, "blog-categories", useBlogCategoryTableStructure);
484
484
 
485
485
  // src/features/blog/components/admin/BlogCategoriesList.tsx
486
486
 
487
487
  function BlogCategoriesList({ fullWidth } = {}) {
488
488
  const t = _nextintl.useTranslations.call(void 0, );
489
- const data = _chunkZCM4JLM7js.useDataListRetriever.call(void 0, {
489
+ const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
490
490
  retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.BlogCategoryService.findMany(params), "retriever"),
491
491
  retrieverParams: {},
492
492
  module: _chunkSQTXJPREjs.Modules.BlogCategory
@@ -496,13 +496,13 @@ function BlogCategoriesList({ fullWidth } = {}) {
496
496
  BlogCategoryEditor,
497
497
  {
498
498
  onSuccess: data.refresh,
499
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newCategory") })
499
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newCategory") })
500
500
  },
501
501
  "create-blog-category"
502
502
  )
503
503
  ];
504
504
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
505
- _chunkZCM4JLM7js.ContentListTable,
505
+ _chunk4UFMLTL2js.ContentListTable,
506
506
  {
507
507
  data,
508
508
  fields: ["name" /* name */, "languages" /* languages */],
@@ -510,7 +510,7 @@ function BlogCategoriesList({ fullWidth } = {}) {
510
510
  functions,
511
511
  fullWidth,
512
512
  title: t("blog.entities.categories"),
513
- emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.EmptyState, { icon: _lucidereact.TagIcon, title: t("blog.admin.emptyCategories") })
513
+ emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.EmptyState, { icon: _lucidereact.TagIcon, title: t("blog.admin.emptyCategories") })
514
514
  }
515
515
  );
516
516
  }
@@ -549,15 +549,15 @@ function BlogLayoutSetting() {
549
549
  _chunkSQTXJPREjs.showToast.call(void 0, t("blog.layout.saved"));
550
550
  } catch (error) {
551
551
  setLayout(previous);
552
- _chunkZCM4JLM7js.errorToast.call(void 0, { title: t("common.errors.error"), error });
552
+ _chunk4UFMLTL2js.errorToast.call(void 0, { title: t("common.errors.error"), error });
553
553
  } finally {
554
554
  setSaving(false);
555
555
  }
556
556
  }, "save");
557
557
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full max-w-3xl flex-col gap-y-4 p-4", children: [
558
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.SectionHeader, { children: t("blog.layout.title") }),
558
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("blog.layout.title") }),
559
559
  layout && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
560
- _chunkZCM4JLM7js.RadioGroup,
560
+ _chunk4UFMLTL2js.RadioGroup,
561
561
  {
562
562
  value: layout,
563
563
  onValueChange: (value) => {
@@ -572,7 +572,7 @@ function BlogLayoutSetting() {
572
572
  htmlFor: `blog-layout-${option}`,
573
573
  className: "has-data-checked:border-primary flex cursor-pointer items-start gap-x-3 rounded-lg border p-4",
574
574
  children: [
575
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.RadioGroupItem, { value: option, id: `blog-layout-${option}`, className: "mt-0.5" }),
575
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.RadioGroupItem, { value: option, id: `blog-layout-${option}`, className: "mt-0.5" }),
576
576
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-col gap-y-1", children: [
577
577
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium", children: options[option].label }),
578
578
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs/relaxed", children: options[option].description })
@@ -619,7 +619,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, useBlogCategoryNames, "useBlogCategoryNames
619
619
  var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => {
620
620
  const t = _nextintl.useTranslations.call(void 0, );
621
621
  const locale = _chunkSQTXJPREjs.useI18nLocale.call(void 0, );
622
- const generateUrl = _chunkZCM4JLM7js.usePageUrlGenerator.call(void 0, );
622
+ const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
623
623
  const categoryName = useBlogCategoryNames();
624
624
  const tableData = _react.useMemo.call(void 0, () => {
625
625
  return params.data.map((post) => {
@@ -637,7 +637,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
637
637
  header: t("blog.fields.title"),
638
638
  cell: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ row }) => {
639
639
  const post = row.original.jsonApiData;
640
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Link, { href: generateUrl({ page: _chunkSQTXJPREjs.Modules.BlogPost, id: post.id }), children: _nullishCoalesce(_nullishCoalesce(_optionalChain([post, 'access', _24 => _24.original, 'optionalAccess', _25 => _25.title]), () => ( post.title)), () => ( post.id)) });
640
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Link, { href: generateUrl({ page: _chunkSQTXJPREjs.Modules.BlogPost, id: post.id }), children: _nullishCoalesce(_nullishCoalesce(_optionalChain([post, 'access', _24 => _24.original, 'optionalAccess', _25 => _25.title]), () => ( post.title)), () => ( post.id)) });
641
641
  }, "cell"),
642
642
  enableSorting: false,
643
643
  enableHiding: false
@@ -653,7 +653,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
653
653
  published: t("blog.status.published"),
654
654
  unpublished: t("blog.status.unpublished")
655
655
  }[post.status];
656
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: _nullishCoalesce(BLOG_STATUS_BADGE[post.status], () => ( "softGray")), children: _nullishCoalesce(label, () => ( post.status)) });
656
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: _nullishCoalesce(BLOG_STATUS_BADGE[post.status], () => ( "softGray")), children: _nullishCoalesce(label, () => ( post.status)) });
657
657
  }, "cell"),
658
658
  enableSorting: false,
659
659
  enableHiding: false
@@ -707,7 +707,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
707
707
  }, [params.fields, fieldColumnMap, t, generateUrl, locale, categoryName]);
708
708
  return _react.useMemo.call(void 0, () => ({ data: tableData, columns }), [tableData, columns]);
709
709
  }, "useBlogPostTableStructure");
710
- _chunkZCM4JLM7js.registerTableGenerator.call(void 0, "blog-posts", useBlogPostTableStructure);
710
+ _chunk4UFMLTL2js.registerTableGenerator.call(void 0, "blog-posts", useBlogPostTableStructure);
711
711
 
712
712
  // src/features/blog/components/admin/BlogPostEditor.tsx
713
713
 
@@ -772,7 +772,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
772
772
  return Object.keys(dirty).length > 0;
773
773
  }, [dirtyFields, isBodyEmptyState]);
774
774
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
775
- _chunkZCM4JLM7js.EditorSheet,
775
+ _chunk4UFMLTL2js.EditorSheet,
776
776
  {
777
777
  form,
778
778
  entityType: t("blog.entities.post"),
@@ -814,7 +814,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
814
814
  trigger,
815
815
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
816
816
  !post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
817
- _chunkZCM4JLM7js.FormSelect,
817
+ _chunk4UFMLTL2js.FormSelect,
818
818
  {
819
819
  form,
820
820
  id: "originalLanguage",
@@ -823,12 +823,12 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
823
823
  isRequired: true
824
824
  }
825
825
  ),
826
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
826
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
827
827
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
828
828
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
829
- post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
829
+ post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
830
830
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
831
- _chunkZCM4JLM7js.EntityMultiSelector,
831
+ _chunk4UFMLTL2js.EntityMultiSelector,
832
832
  {
833
833
  id: "categories",
834
834
  form,
@@ -840,7 +840,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
840
840
  }
841
841
  ),
842
842
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
843
- _chunkZCM4JLM7js.FormTextarea,
843
+ _chunk4UFMLTL2js.FormTextarea,
844
844
  {
845
845
  form,
846
846
  id: "summary",
@@ -865,11 +865,11 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
865
865
  onSelectionChange: setCover
866
866
  }
867
867
  ),
868
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") })
868
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") })
869
869
  ] })
870
870
  ] }),
871
871
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
872
- _chunkZCM4JLM7js.FormBlockNote,
872
+ _chunk4UFMLTL2js.FormBlockNote,
873
873
  {
874
874
  uploadKeyPrefix: _chunkSQTXJPREjs.BLOG_POST_UPLOAD_PREFIX,
875
875
  form,
@@ -892,7 +892,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostEditor, "BlogPostEditor");
892
892
 
893
893
  function BlogPostsList({ fullWidth } = {}) {
894
894
  const t = _nextintl.useTranslations.call(void 0, );
895
- const data = _chunkZCM4JLM7js.useDataListRetriever.call(void 0, {
895
+ const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
896
896
  retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.BlogPostService.findMany(params), "retriever"),
897
897
  retrieverParams: {},
898
898
  module: _chunkSQTXJPREjs.Modules.BlogPost
@@ -901,13 +901,13 @@ function BlogPostsList({ fullWidth } = {}) {
901
901
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
902
902
  BlogPostEditor,
903
903
  {
904
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newPost") })
904
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newPost") })
905
905
  },
906
906
  "create-blog-post"
907
907
  )
908
908
  ];
909
909
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
910
- _chunkZCM4JLM7js.ContentListTable,
910
+ _chunk4UFMLTL2js.ContentListTable,
911
911
  {
912
912
  data,
913
913
  fields: [
@@ -921,7 +921,7 @@ function BlogPostsList({ fullWidth } = {}) {
921
921
  functions,
922
922
  fullWidth,
923
923
  title: t("blog.entities.posts"),
924
- emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.EmptyState, { icon: _lucidereact.NewspaperIcon, title: t("blog.admin.empty") })
924
+ emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.EmptyState, { icon: _lucidereact.NewspaperIcon, title: t("blog.admin.empty") })
925
925
  }
926
926
  );
927
927
  }
@@ -932,8 +932,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostsList, "BlogPostsList");
932
932
  function BlogAdminContainer() {
933
933
  const t = _nextintl.useTranslations.call(void 0, );
934
934
  const breadcrumbs = [{ name: t("blog.admin.title") }];
935
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.SharedProvider, { value: { breadcrumbs, title: { type: t("blog.admin.title") } }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
936
- _chunkZCM4JLM7js.RoundPageContainer,
935
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SharedProvider, { value: { breadcrumbs, title: { type: t("blog.admin.title") } }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
936
+ _chunk4UFMLTL2js.RoundPageContainer,
937
937
  {
938
938
  module: _chunkSQTXJPREjs.Modules.BlogPost,
939
939
  tabs: [
@@ -994,12 +994,12 @@ var useBlogPost = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
994
994
 
995
995
  function BlogPostDeleter() {
996
996
  const t = _nextintl.useTranslations.call(void 0, );
997
- const generateUrl = _chunkZCM4JLM7js.usePageUrlGenerator.call(void 0, );
997
+ const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
998
998
  const { post } = useBlogPost();
999
999
  if (!post) return null;
1000
1000
  const type = t("blog.entities.post");
1001
1001
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1002
- _chunkZCM4JLM7js.CommonDeleter,
1002
+ _chunk4UFMLTL2js.CommonDeleter,
1003
1003
  {
1004
1004
  title: t("common.delete.title", { type }),
1005
1005
  subtitle: t("common.delete.subtitle", { type }),
@@ -1030,13 +1030,13 @@ function BlogPostPublishButton() {
1030
1030
  else await _chunkSQTXJPREjs.BlogPostService.publish({ id: post.id });
1031
1031
  await reload();
1032
1032
  } catch (error) {
1033
- _chunkZCM4JLM7js.errorToast.call(void 0, { title: t("common.errors.error"), error });
1033
+ _chunk4UFMLTL2js.errorToast.call(void 0, { title: t("common.errors.error"), error });
1034
1034
  } finally {
1035
1035
  setSaving(false);
1036
1036
  }
1037
1037
  }, "toggle");
1038
1038
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1039
- _chunkZCM4JLM7js.Button,
1039
+ _chunk4UFMLTL2js.Button,
1040
1040
  {
1041
1041
  type: "button",
1042
1042
  size: "sm",
@@ -1064,11 +1064,11 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostPublishButton, "BlogPostPublishButt
1064
1064
  function BlogPostTranslationFields({ translation }) {
1065
1065
  const t = _nextintl.useTranslations.call(void 0, );
1066
1066
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
1067
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.title"), value: translation.title }),
1068
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.slug"), value: translation.slug }),
1069
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.summary"), value: translation.summary }),
1070
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.coverImageAlt"), value: translation.coverImageAlt }),
1071
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.body"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.BlockNoteEditorContainer, { id: translation.id, type: "blog-post", initialContent: translation.body }) })
1067
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.title"), value: translation.title }),
1068
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.slug"), value: translation.slug }),
1069
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.summary"), value: translation.summary }),
1070
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.coverImageAlt"), value: translation.coverImageAlt }),
1071
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.body"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.BlockNoteEditorContainer, { id: translation.id, type: "blog-post", initialContent: translation.body }) })
1072
1072
  ] });
1073
1073
  }
1074
1074
  _chunk7QVYU63Ejs.__name.call(void 0, BlogPostTranslationFields, "BlogPostTranslationFields");
@@ -1078,15 +1078,15 @@ function BlogPostComparison({ original, translation }) {
1078
1078
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
1079
1079
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-muted/40 flex flex-col gap-y-4 rounded-lg border p-4", children: [
1080
1080
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
1081
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.MicroLabel, { as: "h3", children: languageName(original.language) }),
1082
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softGray", children: t("blog.translation.original") })
1081
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.MicroLabel, { as: "h3", children: languageName(original.language) }),
1082
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: t("blog.translation.original") })
1083
1083
  ] }),
1084
1084
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostTranslationFields, { translation: original })
1085
1085
  ] }),
1086
1086
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4 rounded-lg border p-4", children: [
1087
1087
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
1088
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.MicroLabel, { as: "h3", children: languageName(translation.language) }),
1089
- translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") })
1088
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.MicroLabel, { as: "h3", children: languageName(translation.language) }),
1089
+ translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") })
1090
1090
  ] }),
1091
1091
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostTranslationFields, { translation })
1092
1092
  ] })
@@ -1137,7 +1137,7 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1137
1137
  return Object.keys(dirty).length > 0;
1138
1138
  }, [dirtyFields, isBodyEmptyState]);
1139
1139
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1140
- _chunkZCM4JLM7js.EditorSheet,
1140
+ _chunk4UFMLTL2js.EditorSheet,
1141
1141
  {
1142
1142
  form,
1143
1143
  entityType: t("blog.entities.post"),
@@ -1163,16 +1163,16 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1163
1163
  }))),
1164
1164
  trigger,
1165
1165
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
1166
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
1166
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
1167
1167
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
1168
1168
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
1169
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1170
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormTextarea, { form, id: "summary", name: t("blog.fields.summary"), className: "min-h-24" })
1169
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1170
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormTextarea, { form, id: "summary", name: t("blog.fields.summary"), className: "min-h-24" })
1171
1171
  ] }),
1172
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }) })
1172
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }) })
1173
1173
  ] }),
1174
1174
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1175
- _chunkZCM4JLM7js.FormBlockNote,
1175
+ _chunk4UFMLTL2js.FormBlockNote,
1176
1176
  {
1177
1177
  uploadKeyPrefix: _chunkSQTXJPREjs.BLOG_POST_UPLOAD_PREFIX,
1178
1178
  form,
@@ -1202,7 +1202,7 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1202
1202
  const original = post.original;
1203
1203
  const reload = _nullishCoalesce(onChanged, () => ( (async () => {
1204
1204
  })));
1205
- const editTrigger = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: [
1205
+ const editTrigger = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: [
1206
1206
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PencilIcon, {}),
1207
1207
  t("blog.actions.edit")
1208
1208
  ] });
@@ -1214,7 +1214,7 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1214
1214
  }[post.status];
1215
1215
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-6 p-4", children: [
1216
1216
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-x-4", children: [
1217
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softGray", children: t("blog.translation.original") }),
1217
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: t("blog.translation.original") }),
1218
1218
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostEditor, { post, trigger: editTrigger, onSuccess: reload })
1219
1219
  ] }),
1220
1220
  post.coverImage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1229,10 +1229,10 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1229
1229
  }
1230
1230
  ),
1231
1231
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: [
1232
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.status"), value: statusLabel }),
1233
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.DetailField, { label: t("blog.fields.publishedAt"), value: formatDate(post.publishedAt) || "\u2014" }),
1232
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.status"), value: statusLabel }),
1233
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("blog.fields.publishedAt"), value: formatDate(post.publishedAt) || "\u2014" }),
1234
1234
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1235
- _chunkZCM4JLM7js.DetailField,
1235
+ _chunk4UFMLTL2js.DetailField,
1236
1236
  {
1237
1237
  label: t("blog.fields.categories"),
1238
1238
  value: post.categories.map((category) => categoryName(category.id)).filter(Boolean).join(", ") || "\u2014"
@@ -1244,16 +1244,16 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1244
1244
  }
1245
1245
  const isWorking = translation.aiStatus === "pending" || translation.aiStatus === "in_progress";
1246
1246
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-6 p-4", children: [
1247
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Alert, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.AlertDescription, { className: "flex flex-col gap-y-2", children: [
1247
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Alert, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.AlertDescription, { className: "flex flex-col gap-y-2", children: [
1248
1248
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap items-center gap-2", children: [
1249
- translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") }),
1249
+ translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") }),
1250
1250
  original && translation.translatedAt && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("blog.translation.translatedFrom", {
1251
1251
  language: languageName(original.language),
1252
1252
  date: formatDate(translation.translatedAt)
1253
1253
  }) })
1254
1254
  ] }),
1255
1255
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("blog.translation.overwriteWarning") }),
1256
- original && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Button, { type: "button", size: "sm", variant: "ghost", onClick: () => setIsComparing((value) => !value), children: isComparing ? t("blog.actions.hideComparison") : t("blog.actions.compareWithOriginal") }) })
1256
+ original && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { type: "button", size: "sm", variant: "ghost", onClick: () => setIsComparing((value) => !value), children: isComparing ? t("blog.actions.hideComparison") : t("blog.actions.compareWithOriginal") }) })
1257
1257
  ] }) }),
1258
1258
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-x-4", children: [
1259
1259
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1281,7 +1281,7 @@ function BlogPostContainer({ postId }) {
1281
1281
  _chunk7QVYU63Ejs.__name.call(void 0, BlogPostContainer, "BlogPostContainer");
1282
1282
  function BlogPostShell() {
1283
1283
  const t = _nextintl.useTranslations.call(void 0, );
1284
- const generateUrl = _chunkZCM4JLM7js.usePageUrlGenerator.call(void 0, );
1284
+ const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
1285
1285
  const languageName = useBlogLanguageName();
1286
1286
  const { post, reload } = useBlogPost();
1287
1287
  const translations = _react.useMemo.call(void 0, () => {
@@ -1311,7 +1311,7 @@ function BlogPostShell() {
1311
1311
  return parts.join(" \xB7 ");
1312
1312
  }, "tabLabel");
1313
1313
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1314
- _chunkZCM4JLM7js.SharedProvider,
1314
+ _chunk4UFMLTL2js.SharedProvider,
1315
1315
  {
1316
1316
  value: {
1317
1317
  breadcrumbs,
@@ -1319,14 +1319,14 @@ function BlogPostShell() {
1319
1319
  type: t("blog.admin.title"),
1320
1320
  element: title,
1321
1321
  functions: [
1322
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Badge, { variant: BLOG_STATUS_BADGE[post.status], children: statusLabel }, "blogPostStatus"),
1322
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: BLOG_STATUS_BADGE[post.status], children: statusLabel }, "blogPostStatus"),
1323
1323
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostPublishButton, {}, "blogPostPublish"),
1324
1324
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostDeleter, {}, "blogPostDeleter")
1325
1325
  ]
1326
1326
  }
1327
1327
  },
1328
1328
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1329
- _chunkZCM4JLM7js.RoundPageContainer,
1329
+ _chunk4UFMLTL2js.RoundPageContainer,
1330
1330
  {
1331
1331
  module: _chunkSQTXJPREjs.Modules.BlogPost,
1332
1332
  id: post.id,
@@ -1390,10 +1390,10 @@ function BlogCategoryChips(props) {
1390
1390
  ];
1391
1391
  const inactiveVariant = variant === "chips" ? "outline" : "ghost";
1392
1392
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": t("blog.entities.categories"), className, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: variant === "chips" ? "flex flex-wrap items-center gap-2" : "flex flex-col items-start gap-2", children: items.map((item) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1393
- _chunkZCM4JLM7js.Badge,
1393
+ _chunk4UFMLTL2js.Badge,
1394
1394
  {
1395
1395
  variant: item.active ? "default" : inactiveVariant,
1396
- render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Link, { href: item.href, "aria-current": item.active ? "page" : void 0 }),
1396
+ render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Link, { href: item.href, "aria-current": item.active ? "page" : void 0 }),
1397
1397
  children: item.label
1398
1398
  }
1399
1399
  ) }, item.key)) }) });
@@ -1408,7 +1408,7 @@ function BlogListHeader(props) {
1408
1408
  const t = _nextintl.useTranslations.call(void 0, );
1409
1409
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "header", { className: align === "center" ? "text-center" : void 0, children: [
1410
1410
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1411
- _chunkZCM4JLM7js.ContentTitle,
1411
+ _chunk4UFMLTL2js.ContentTitle,
1412
1412
  {
1413
1413
  type: t("blog.public.eyebrow"),
1414
1414
  element: t("blog.public.title"),
@@ -1429,11 +1429,11 @@ function BlogLoadMore(props) {
1429
1429
  const { basePath, page, activeCategorySlug, query, className } = props;
1430
1430
  const t = _nextintl.useTranslations.call(void 0, );
1431
1431
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkSQTXJPREjs.cn.call(void 0, "flex justify-center", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1432
- _chunkZCM4JLM7js.Link,
1432
+ _chunk4UFMLTL2js.Link,
1433
1433
  {
1434
1434
  href: blogListHref(basePath, { category: activeCategorySlug, q: query, page: page + 1 }),
1435
1435
  scroll: false,
1436
- className: _chunkZCM4JLM7js.buttonVariants.call(void 0, { variant: "outline" }),
1436
+ className: _chunk4UFMLTL2js.buttonVariants.call(void 0, { variant: "outline" }),
1437
1437
  children: t("blog.public.loadMore")
1438
1438
  }
1439
1439
  ) });
@@ -1491,8 +1491,8 @@ function BlogPostCard(props) {
1491
1491
  const isProminent = variant === "hero" || variant === "large";
1492
1492
  const eyebrow = _optionalChain([category, 'optionalAccess', _46 => _46.name]);
1493
1493
  const text = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col", children: [
1494
- eyebrow ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.MicroLabel, { as: "span", children: eyebrow }) : null,
1495
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.SectionHeader, { level: headingLevel === "h3" ? 3 : 2, className: "mt-1.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.Link, { href: blogPostHref(basePath, post.slug), className: "after:absolute after:inset-0", children: post.title }) }),
1494
+ eyebrow ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.MicroLabel, { as: "span", children: eyebrow }) : null,
1495
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { level: headingLevel === "h3" ? 3 : 2, className: "mt-1.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Link, { href: blogPostHref(basePath, post.slug), className: "after:absolute after:inset-0", children: post.title }) }),
1496
1496
  post.summary ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mt-2 text-sm leading-relaxed", children: post.summary }) : null,
1497
1497
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostMeta, { post, showAuthor: isProminent, className: "mt-3" })
1498
1498
  ] });
@@ -1558,10 +1558,10 @@ function BlogSearchBox(props) {
1558
1558
  const q = value.trim();
1559
1559
  router.push(blogListHref(basePath, { category: activeCategorySlug, q: q || void 0 }));
1560
1560
  }, "onSubmit");
1561
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "form", { role: "search", onSubmit, className, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.InputGroup, { children: [
1562
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.InputGroupAddon, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchIcon, {}) }),
1561
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "form", { role: "search", onSubmit, className, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.InputGroup, { children: [
1562
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.InputGroupAddon, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchIcon, {}) }),
1563
1563
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1564
- _chunkZCM4JLM7js.InputGroupInput,
1564
+ _chunk4UFMLTL2js.InputGroupInput,
1565
1565
  {
1566
1566
  type: "search",
1567
1567
  name: "q",
@@ -1673,7 +1673,7 @@ function BlogListRail(props) {
1673
1673
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogListHeader, { showSubtitle: false }),
1674
1674
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogSearchBox, { basePath, query, activeCategorySlug }),
1675
1675
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
1676
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.MicroLabel, { as: "span", className: "block", children: t("blog.entities.categories") }),
1676
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.MicroLabel, { as: "span", className: "block", children: t("blog.entities.categories") }),
1677
1677
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1678
1678
  BlogCategoryChips,
1679
1679
  {
@@ -1731,12 +1731,12 @@ function BlogPostView(props) {
1731
1731
  const more = related.slice(0, 3);
1732
1732
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: "px-4 pt-12 pb-20 md:pt-16", children: [
1733
1733
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mx-auto max-w-3xl", children: [
1734
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZCM4JLM7js.Link, { href: basePath, className: "inline-flex items-center gap-1.5", children: [
1734
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Link, { href: basePath, className: "inline-flex items-center gap-1.5", children: [
1735
1735
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArrowLeftIcon, { className: "size-4 rtl:rotate-180" }),
1736
1736
  t("blog.public.back")
1737
1737
  ] }),
1738
1738
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "header", { className: "mt-8", children: [
1739
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.ContentTitle, { type: _optionalChain([category, 'optionalAccess', _47 => _47.name]), element: post.title, headingLevel: 1, className: "mb-0" }),
1739
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.ContentTitle, { type: _optionalChain([category, 'optionalAccess', _47 => _47.name]), element: post.title, headingLevel: 1, className: "mb-0" }),
1740
1740
  post.summary ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mt-3 text-sm leading-relaxed", children: post.summary }) : null,
1741
1741
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostMeta, { post, showAuthor: true, className: "mt-4" })
1742
1742
  ] }),
@@ -1750,10 +1750,10 @@ function BlogPostView(props) {
1750
1750
  className: "mt-8 aspect-[16/9]"
1751
1751
  }
1752
1752
  ) : null,
1753
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-8", children: _nullishCoalesce(body, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }))) })
1753
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-8", children: _nullishCoalesce(body, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }))) })
1754
1754
  ] }),
1755
1755
  more.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "section", { className: "mx-auto mt-16 max-w-5xl", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "border-border border-t pt-10", children: [
1756
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZCM4JLM7js.SectionHeader, { level: 2, children: t("blog.public.moreIn", { category: _nullishCoalesce(_optionalChain([category, 'optionalAccess', _48 => _48.name]), () => ( "")) }) }),
1756
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { level: 2, children: t("blog.public.moreIn", { category: _nullishCoalesce(_optionalChain([category, 'optionalAccess', _48 => _48.name]), () => ( "")) }) }),
1757
1757
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-6 grid gap-x-6 gap-y-10 sm:grid-cols-2 lg:grid-cols-3", children: more.map((relatedPost) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1758
1758
  BlogPostCard,
1759
1759
  {