@carlonicora/nextjs-jsonapi 6.24.0 → 6.26.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 (250) hide show
  1. package/dist/{BlockNoteEditor-MONT74RQ.js → BlockNoteEditor-JHXDOCS5.js} +28 -25
  2. package/dist/BlockNoteEditor-JHXDOCS5.js.map +1 -0
  3. package/dist/{BlockNoteEditor-ENDOVTAW.mjs → BlockNoteEditor-RVDSB6TF.mjs} +13 -10
  4. package/dist/{BlockNoteEditor-ENDOVTAW.mjs.map → BlockNoteEditor-RVDSB6TF.mjs.map} +1 -1
  5. package/dist/{BlockNoteViewer-2TJZ6JET.mjs → BlockNoteViewer-76CKL6W5.mjs} +8 -6
  6. package/dist/{BlockNoteViewer-2TJZ6JET.mjs.map → BlockNoteViewer-76CKL6W5.mjs.map} +1 -1
  7. package/dist/{BlockNoteViewer-K2HBF3IP.js → BlockNoteViewer-B25WKYQP.js} +9 -7
  8. package/dist/BlockNoteViewer-B25WKYQP.js.map +1 -0
  9. package/dist/JsonApiRequest-OKNQZLS6.js +26 -0
  10. package/dist/{JsonApiRequest-KC6DOHKT.js.map → JsonApiRequest-OKNQZLS6.js.map} +1 -1
  11. package/dist/{JsonApiRequest-ADLBJ5RX.mjs → JsonApiRequest-WNPDS356.mjs} +2 -2
  12. package/dist/billing/index.js +504 -517
  13. package/dist/billing/index.js.map +1 -1
  14. package/dist/billing/index.mjs +20 -33
  15. package/dist/billing/index.mjs.map +1 -1
  16. package/dist/{chunk-VNUT2D27.mjs → chunk-2PWYG2WJ.mjs} +2 -2
  17. package/dist/{chunk-W4ML6D2X.mjs → chunk-3U7YJ73T.mjs} +7 -7
  18. package/dist/{chunk-BQ2WAG4K.js → chunk-3VNDFKT7.js} +19 -19
  19. package/dist/{chunk-BQ2WAG4K.js.map → chunk-3VNDFKT7.js.map} +1 -1
  20. package/dist/{chunk-BE6UMM5X.mjs → chunk-47HNJQ7U.mjs} +3 -3
  21. package/dist/chunk-5T2AQMQ2.mjs +90 -0
  22. package/dist/chunk-5T2AQMQ2.mjs.map +1 -0
  23. package/dist/{chunk-A5M3MORY.js → chunk-5WM72MLE.js} +3 -3
  24. package/dist/{chunk-A5M3MORY.js.map → chunk-5WM72MLE.js.map} +1 -1
  25. package/dist/{chunk-OZADFYE7.mjs → chunk-64REWDSK.mjs} +308 -241
  26. package/dist/chunk-64REWDSK.mjs.map +1 -0
  27. package/dist/{chunk-S7SPAC6X.mjs → chunk-73NKUBMP.mjs} +3 -3
  28. package/dist/chunk-743M4TIB.mjs +76 -0
  29. package/dist/chunk-743M4TIB.mjs.map +1 -0
  30. package/dist/{chunk-HN7L6RRW.js → chunk-77JC2UCF.js} +903 -955
  31. package/dist/chunk-77JC2UCF.js.map +1 -0
  32. package/dist/{chunk-7OIWOPM5.mjs → chunk-7MGXQIEP.mjs} +4 -3
  33. package/dist/chunk-7MGXQIEP.mjs.map +1 -0
  34. package/dist/{chunk-YTDGYI62.mjs → chunk-DWPHHUMV.mjs} +3 -3
  35. package/dist/{chunk-SO3YUCL6.js → chunk-F3EVYBMA.js} +6 -5
  36. package/dist/chunk-F3EVYBMA.js.map +1 -0
  37. package/dist/{chunk-53SD4YRF.js → chunk-FBHUUPRV.js} +5 -5
  38. package/dist/{chunk-53SD4YRF.js.map → chunk-FBHUUPRV.js.map} +1 -1
  39. package/dist/{chunk-T6G2F2BK.mjs → chunk-FJUKLVVX.mjs} +16 -68
  40. package/dist/chunk-FJUKLVVX.mjs.map +1 -0
  41. package/dist/chunk-HROKKUBQ.js +156 -0
  42. package/dist/chunk-HROKKUBQ.js.map +1 -0
  43. package/dist/{chunk-BDWV4KYR.js → chunk-JE6QWCNE.js} +1386 -1319
  44. package/dist/chunk-JE6QWCNE.js.map +1 -0
  45. package/dist/{chunk-RCOKQ3R4.js → chunk-LNO2JLU3.js} +2 -2
  46. package/dist/{chunk-RCOKQ3R4.js.map → chunk-LNO2JLU3.js.map} +1 -1
  47. package/dist/{chunk-TMV7TL7O.mjs → chunk-M7YK5CCE.mjs} +8 -6
  48. package/dist/{chunk-TMV7TL7O.mjs.map → chunk-M7YK5CCE.mjs.map} +1 -1
  49. package/dist/{chunk-GMMDXINC.js → chunk-N3NQS7X6.js} +12 -12
  50. package/dist/{chunk-GMMDXINC.js.map → chunk-N3NQS7X6.js.map} +1 -1
  51. package/dist/chunk-NP3AFULU.js +76 -0
  52. package/dist/chunk-NP3AFULU.js.map +1 -0
  53. package/dist/{chunk-TNTCLVUR.js → chunk-ONU4WCDG.js} +17 -15
  54. package/dist/chunk-ONU4WCDG.js.map +1 -0
  55. package/dist/{chunk-YSE2Z4RB.js → chunk-PQQFOONG.js} +12 -12
  56. package/dist/{chunk-YSE2Z4RB.js.map → chunk-PQQFOONG.js.map} +1 -1
  57. package/dist/chunk-RW6XZGZG.mjs +156 -0
  58. package/dist/chunk-RW6XZGZG.mjs.map +1 -0
  59. package/dist/chunk-SYMI4IDW.js +90 -0
  60. package/dist/chunk-SYMI4IDW.js.map +1 -0
  61. package/dist/{chunk-N2BFT7KI.mjs → chunk-W7U6O3OE.mjs} +2 -71
  62. package/dist/chunk-W7U6O3OE.mjs.map +1 -0
  63. package/dist/{chunk-YMCL3JXZ.mjs → chunk-YPBIPE2B.mjs} +2 -2
  64. package/dist/{chunk-P7L6OFX5.js → chunk-Z6T2575A.js} +12 -81
  65. package/dist/chunk-Z6T2575A.js.map +1 -0
  66. package/dist/client/index.js +13 -10
  67. package/dist/client/index.js.map +1 -1
  68. package/dist/client/index.mjs +17 -14
  69. package/dist/components/forms/DatePickerPopover.d.ts.map +1 -1
  70. package/dist/components/forms/DateRangeSelector.d.ts.map +1 -1
  71. package/dist/components/forms/FormDate.d.ts.map +1 -1
  72. package/dist/components/forms/FormDateTime.d.ts.map +1 -1
  73. package/dist/components/forms/time-cycle.d.ts +14 -0
  74. package/dist/components/forms/time-cycle.d.ts.map +1 -0
  75. package/dist/components/index.js +11 -8
  76. package/dist/components/index.js.map +1 -1
  77. package/dist/components/index.mjs +10 -7
  78. package/dist/components/tables/cells/cell.date.d.ts.map +1 -1
  79. package/dist/components/tables/cells/cell.dateTime.d.ts.map +1 -1
  80. package/dist/contexts/DateLocaleContext.d.ts +56 -0
  81. package/dist/contexts/DateLocaleContext.d.ts.map +1 -0
  82. package/dist/contexts/index.d.ts +1 -0
  83. package/dist/contexts/index.d.ts.map +1 -1
  84. package/dist/contexts/index.js +24 -8
  85. package/dist/contexts/index.js.map +1 -1
  86. package/dist/contexts/index.mjs +23 -7
  87. package/dist/core/index.js +17 -6
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/index.mjs +19 -8
  90. package/dist/date-locale/index.d.ts +2 -0
  91. package/dist/date-locale/index.d.ts.map +1 -0
  92. package/dist/date-locale/index.js +21 -0
  93. package/dist/date-locale/index.js.map +1 -0
  94. package/dist/date-locale/index.mjs +21 -0
  95. package/dist/email-automations/index.js +131 -123
  96. package/dist/email-automations/index.js.map +1 -1
  97. package/dist/email-automations/index.mjs +23 -15
  98. package/dist/email-automations/index.mjs.map +1 -1
  99. package/dist/features/account-deletion/components/AccountDeletionAdminTrigger.d.ts.map +1 -1
  100. package/dist/features/analytics/components/AnalyticsJourneyContainer.d.ts.map +1 -1
  101. package/dist/features/analytics/components/AnalyticsSessionsTable.d.ts.map +1 -1
  102. package/dist/features/analytics/index.js +154 -147
  103. package/dist/features/analytics/index.js.map +1 -1
  104. package/dist/features/analytics/index.mjs +32 -25
  105. package/dist/features/analytics/index.mjs.map +1 -1
  106. package/dist/features/analytics/server.js +11 -9
  107. package/dist/features/analytics/server.js.map +1 -1
  108. package/dist/features/analytics/server.mjs +9 -7
  109. package/dist/features/analytics/server.mjs.map +1 -1
  110. package/dist/features/billing/components/utils/date.d.ts +3 -3
  111. package/dist/features/billing/components/utils/format-options.d.ts +6 -4
  112. package/dist/features/billing/components/utils/format-options.d.ts.map +1 -1
  113. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts +5 -1
  114. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts.map +1 -1
  115. package/dist/features/billing/stripe-usage/components/details/UsageSummaryCard.d.ts.map +1 -1
  116. package/dist/features/billing/stripe-usage/components/lists/UsageHistoryTable.d.ts.map +1 -1
  117. package/dist/features/blog/components/admin/BlogTranslationStatus.d.ts.map +1 -1
  118. package/dist/features/blog/components/public/BlogPostMeta.d.ts.map +1 -1
  119. package/dist/features/blog/hooks/useBlogPostTableStructure.d.ts.map +1 -1
  120. package/dist/features/blog/index.js +168 -162
  121. package/dist/features/blog/index.js.map +1 -1
  122. package/dist/features/blog/index.mjs +25 -19
  123. package/dist/features/blog/index.mjs.map +1 -1
  124. package/dist/features/blog/server.js +29 -27
  125. package/dist/features/blog/server.js.map +1 -1
  126. package/dist/features/blog/server.mjs +8 -6
  127. package/dist/features/blog/server.mjs.map +1 -1
  128. package/dist/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.d.ts.map +1 -1
  129. package/dist/features/handbook/components/parts/HandbookIndexStatus.d.ts.map +1 -1
  130. package/dist/features/help/components/HelpArticleBody.d.ts.map +1 -1
  131. package/dist/features/help/index.js +48 -43
  132. package/dist/features/help/index.js.map +1 -1
  133. package/dist/features/help/index.mjs +15 -10
  134. package/dist/features/help/index.mjs.map +1 -1
  135. package/dist/features/notification/components/notifications/Notification.d.ts +2 -1
  136. package/dist/features/notification/components/notifications/Notification.d.ts.map +1 -1
  137. package/dist/features/notification/contexts/NotificationContext.d.ts.map +1 -1
  138. package/dist/features/notification/hooks/useNotificationTableStructure.d.ts.map +1 -1
  139. package/dist/features/oauth/components/OAuthClientCard.d.ts.map +1 -1
  140. package/dist/features/oauth/components/OAuthClientDetail.d.ts.map +1 -1
  141. package/dist/features/tokenusage/index.js +133 -130
  142. package/dist/features/tokenusage/index.js.map +1 -1
  143. package/dist/features/tokenusage/index.mjs +10 -7
  144. package/dist/features/tokenusage/index.mjs.map +1 -1
  145. package/dist/features/tokenusage/lib/formatters.d.ts +6 -3
  146. package/dist/features/tokenusage/lib/formatters.d.ts.map +1 -1
  147. package/dist/index.js +19 -7
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +23 -11
  150. package/dist/local-transport-AT4TE264.js +15 -0
  151. package/dist/{local-transport-MJPOKPTU.js.map → local-transport-AT4TE264.js.map} +1 -1
  152. package/dist/{local-transport-RVD4FZGA.mjs → local-transport-KWEUZ4GX.mjs} +5 -5
  153. package/dist/offline/index.js +56 -54
  154. package/dist/offline/index.js.map +1 -1
  155. package/dist/offline/index.mjs +23 -21
  156. package/dist/offline/index.mjs.map +1 -1
  157. package/dist/{request-4AWGPIGH.mjs → request-6GAIWWTG.mjs} +2 -2
  158. package/dist/{request-H5FZBZA2.js → request-BWO4Y434.js} +3 -3
  159. package/dist/{request-H5FZBZA2.js.map → request-BWO4Y434.js.map} +1 -1
  160. package/dist/server/ServerSession.d.ts +2 -0
  161. package/dist/server/ServerSession.d.ts.map +1 -1
  162. package/dist/server/index.js +10 -8
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/index.mjs +9 -7
  165. package/dist/utils/date-formatter.d.ts +45 -4
  166. package/dist/utils/date-formatter.d.ts.map +1 -1
  167. package/dist/utils/index.d.ts +1 -1
  168. package/dist/utils/index.d.ts.map +1 -1
  169. package/dist/utils/toast.d.ts +2 -0
  170. package/dist/utils/toast.d.ts.map +1 -1
  171. package/dist/write-through-KNRI5L4V.mjs +15 -0
  172. package/dist/write-through-KNRI5L4V.mjs.map +1 -0
  173. package/dist/write-through-MYHQ6GJU.js +15 -0
  174. package/dist/{write-through-HE2QSOVI.js.map → write-through-MYHQ6GJU.js.map} +1 -1
  175. package/messages/en.json +1 -0
  176. package/messages/it.json +1 -0
  177. package/package.json +6 -1
  178. package/src/components/forms/DatePickerPopover.tsx +5 -3
  179. package/src/components/forms/DateRangeSelector.tsx +9 -7
  180. package/src/components/forms/FormDate.tsx +5 -3
  181. package/src/components/forms/FormDateTime.tsx +75 -39
  182. package/src/components/forms/__tests__/time-cycle.spec.ts +37 -0
  183. package/src/components/forms/time-cycle.ts +27 -0
  184. package/src/components/tables/cells/cell.date.tsx +3 -5
  185. package/src/components/tables/cells/cell.dateTime.tsx +3 -7
  186. package/src/contexts/DateLocaleContext.tsx +106 -0
  187. package/src/contexts/__tests__/DateLocaleContext.spec.tsx +175 -0
  188. package/src/contexts/index.ts +1 -0
  189. package/src/date-locale/index.ts +12 -0
  190. package/src/features/account-deletion/components/AccountDeletionAdminTrigger.tsx +3 -4
  191. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +8 -8
  192. package/src/features/analytics/components/AnalyticsSessionsTable.tsx +4 -6
  193. package/src/features/auth/components/two-factor/PasskeyList.tsx +3 -3
  194. package/src/features/auth/components/two-factor/TotpAuthenticatorList.tsx +3 -3
  195. package/src/features/billing/components/utils/__tests__/billing-formatters.spec.ts +14 -6
  196. package/src/features/billing/components/utils/date.ts +5 -5
  197. package/src/features/billing/components/utils/format-options.ts +6 -4
  198. package/src/features/billing/components/utils/useBillingFormatOptions.ts +8 -2
  199. package/src/features/billing/stripe-usage/components/details/UsageSummaryCard.tsx +4 -12
  200. package/src/features/billing/stripe-usage/components/lists/UsageHistoryTable.tsx +4 -17
  201. package/src/features/blog/components/admin/BlogTranslationStatus.tsx +3 -2
  202. package/src/features/blog/components/public/BlogPostMeta.tsx +5 -4
  203. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +1 -2
  204. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +2 -3
  205. package/src/features/blog/hooks/useBlogPostTableStructure.tsx +4 -8
  206. package/src/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.tsx +11 -5
  207. package/src/features/email-blast/components/containers/EmailBlastContainer.tsx +3 -3
  208. package/src/features/email-blast/hooks/useEmailBlastTableStructure.tsx +4 -4
  209. package/src/features/handbook/components/parts/HandbookIndexStatus.tsx +4 -3
  210. package/src/features/help/components/HelpArticleBody.tsx +4 -3
  211. package/src/features/notification/components/notifications/Notification.tsx +38 -7
  212. package/src/features/notification/contexts/NotificationContext.tsx +6 -3
  213. package/src/features/notification/hooks/useNotificationTableStructure.tsx +6 -5
  214. package/src/features/oauth/components/OAuthClientCard.tsx +8 -5
  215. package/src/features/oauth/components/OAuthClientDetail.tsx +3 -6
  216. package/src/features/tokenusage/lib/__tests__/formatters.spec.ts +19 -0
  217. package/src/features/tokenusage/lib/formatters.ts +11 -6
  218. package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +5 -5
  219. package/src/server/ServerSession.ts +3 -0
  220. package/src/server/__tests__/ServerSession.read.spec.ts +18 -1
  221. package/src/utils/__tests__/date-formatter.spec.ts +134 -10
  222. package/src/utils/__tests__/toast.spec.ts +39 -0
  223. package/src/utils/date-formatter.ts +200 -44
  224. package/src/utils/index.ts +11 -1
  225. package/src/utils/toast.ts +2 -0
  226. package/dist/BlockNoteEditor-MONT74RQ.js.map +0 -1
  227. package/dist/BlockNoteViewer-K2HBF3IP.js.map +0 -1
  228. package/dist/JsonApiRequest-KC6DOHKT.js +0 -26
  229. package/dist/chunk-7OIWOPM5.mjs.map +0 -1
  230. package/dist/chunk-BDWV4KYR.js.map +0 -1
  231. package/dist/chunk-HN7L6RRW.js.map +0 -1
  232. package/dist/chunk-N2BFT7KI.mjs.map +0 -1
  233. package/dist/chunk-OZADFYE7.mjs.map +0 -1
  234. package/dist/chunk-P7L6OFX5.js.map +0 -1
  235. package/dist/chunk-SO3YUCL6.js.map +0 -1
  236. package/dist/chunk-T6G2F2BK.mjs.map +0 -1
  237. package/dist/chunk-TNTCLVUR.js.map +0 -1
  238. package/dist/local-transport-MJPOKPTU.js +0 -15
  239. package/dist/write-through-7I3LA2WN.mjs +0 -15
  240. package/dist/write-through-HE2QSOVI.js +0 -15
  241. /package/dist/{JsonApiRequest-ADLBJ5RX.mjs.map → JsonApiRequest-WNPDS356.mjs.map} +0 -0
  242. /package/dist/{chunk-VNUT2D27.mjs.map → chunk-2PWYG2WJ.mjs.map} +0 -0
  243. /package/dist/{chunk-W4ML6D2X.mjs.map → chunk-3U7YJ73T.mjs.map} +0 -0
  244. /package/dist/{chunk-BE6UMM5X.mjs.map → chunk-47HNJQ7U.mjs.map} +0 -0
  245. /package/dist/{chunk-S7SPAC6X.mjs.map → chunk-73NKUBMP.mjs.map} +0 -0
  246. /package/dist/{chunk-YTDGYI62.mjs.map → chunk-DWPHHUMV.mjs.map} +0 -0
  247. /package/dist/{chunk-YMCL3JXZ.mjs.map → chunk-YPBIPE2B.mjs.map} +0 -0
  248. /package/dist/{local-transport-RVD4FZGA.mjs.map → date-locale/index.mjs.map} +0 -0
  249. /package/dist/{request-4AWGPIGH.mjs.map → local-transport-KWEUZ4GX.mjs.map} +0 -0
  250. /package/dist/{write-through-7I3LA2WN.mjs.map → request-6GAIWWTG.mjs.map} +0 -0
@@ -37,9 +37,12 @@
37
37
 
38
38
 
39
39
 
40
- var _chunkBDWV4KYRjs = require('../../chunk-BDWV4KYR.js');
40
+ var _chunkJE6QWCNEjs = require('../../chunk-JE6QWCNE.js');
41
+
42
+
43
+ var _chunkSYMI4IDWjs = require('../../chunk-SYMI4IDW.js');
41
44
  require('../../chunk-3EPNHTMH.js');
42
- require('../../chunk-TNTCLVUR.js');
45
+ require('../../chunk-ONU4WCDG.js');
43
46
  require('../../chunk-G4JR3SFV.js');
44
47
 
45
48
 
@@ -61,19 +64,22 @@ require('../../chunk-G4JR3SFV.js');
61
64
 
62
65
 
63
66
 
64
- var _chunkHN7L6RRWjs = require('../../chunk-HN7L6RRW.js');
67
+ var _chunk77JC2UCFjs = require('../../chunk-77JC2UCF.js');
68
+ require('../../chunk-HROKKUBQ.js');
65
69
  require('../../chunk-DGN3PR2F.js');
66
70
 
67
71
 
72
+ var _chunkZ6T2575Ajs = require('../../chunk-Z6T2575A.js');
73
+ require('../../chunk-3VNDFKT7.js');
74
+ require('../../chunk-5WM72MLE.js');
75
+ require('../../chunk-WUNSG3IN.js');
76
+ require('../../chunk-LNO2JLU3.js');
77
+ require('../../chunk-LXKSUWAV.js');
68
78
 
69
79
 
70
80
 
71
- var _chunkP7L6OFX5js = require('../../chunk-P7L6OFX5.js');
72
- require('../../chunk-BQ2WAG4K.js');
73
- require('../../chunk-A5M3MORY.js');
74
- require('../../chunk-WUNSG3IN.js');
75
- require('../../chunk-RCOKQ3R4.js');
76
- require('../../chunk-LXKSUWAV.js');
81
+
82
+ var _chunkNP3AFULUjs = require('../../chunk-NP3AFULU.js');
77
83
 
78
84
 
79
85
  var _chunk7QVYU63Ejs = require('../../chunk-7QVYU63E.js');
@@ -113,7 +119,7 @@ var dropzone = {
113
119
  };
114
120
  async function uploadBlogImage(params) {
115
121
  if (!params.selection || !params.key) return;
116
- await _chunkHN7L6RRWjs.S3Service.upload({
122
+ await _chunk77JC2UCFjs.S3Service.upload({
117
123
  key: params.key,
118
124
  contentType: params.selection.contentType,
119
125
  file: params.selection.file,
@@ -143,8 +149,8 @@ function BlogCoverImageField({
143
149
  };
144
150
  }, [previewUrl]);
145
151
  const src = _nullishCoalesce(previewUrl, () => ( currentUrl));
146
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormFieldWrapper, { form, name: id, label, children: (field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
147
- _chunkBDWV4KYRjs.FileUploader,
152
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormFieldWrapper, { form, name: id, label, children: (field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
153
+ _chunkJE6QWCNEjs.FileUploader,
148
154
  {
149
155
  value: files,
150
156
  onValueChange: (value) => {
@@ -157,7 +163,7 @@ function BlogCoverImageField({
157
163
  },
158
164
  dropzoneOptions: dropzone,
159
165
  className: "w-full",
160
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.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,
166
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.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,
161
167
  _image2.default,
162
168
  {
163
169
  src,
@@ -165,7 +171,7 @@ function BlogCoverImageField({
165
171
  width: 320,
166
172
  height: 180,
167
173
  className: "h-auto max-h-48 w-auto max-w-full rounded-md object-cover",
168
- unoptimized: _chunkHN7L6RRWjs.isRemoteImageSrc.call(void 0, previewUrl ? void 0 : currentUrl)
174
+ unoptimized: _chunk77JC2UCFjs.isRemoteImageSrc.call(void 0, previewUrl ? void 0 : currentUrl)
169
175
  }
170
176
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
171
177
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.UploadIcon, { className: "my-4 h-8 w-8" }),
@@ -191,7 +197,7 @@ function blogCategoryAdminName(category) {
191
197
  }
192
198
  _chunk7QVYU63Ejs.__name.call(void 0, blogCategoryAdminName, "blogCategoryAdminName");
193
199
  function useBlogLanguageName() {
194
- const locale = _chunkP7L6OFX5js.useI18nLocale.call(void 0, );
200
+ const locale = _chunkNP3AFULUjs.useI18nLocale.call(void 0, );
195
201
  const names = _react.useMemo.call(void 0, () => {
196
202
  try {
197
203
  return new Intl.DisplayNames([locale], { type: "language" });
@@ -210,8 +216,8 @@ function useBlogLanguageName() {
210
216
  }
211
217
  _chunk7QVYU63Ejs.__name.call(void 0, useBlogLanguageName, "useBlogLanguageName");
212
218
  function useBlogDateFormatter() {
213
- const locale = _chunkP7L6OFX5js.useI18nLocale.call(void 0, );
214
- return _react.useCallback.call(void 0, (date) => date ? date.toLocaleDateString(locale, { dateStyle: "medium" }) : "", [locale]);
219
+ const dates = _chunkSYMI4IDWjs.useDateFormatter.call(void 0, );
220
+ return _react.useCallback.call(void 0, (date) => dates.format(date, "dateMedium"), [dates]);
215
221
  }
216
222
  _chunk7QVYU63Ejs.__name.call(void 0, useBlogDateFormatter, "useBlogDateFormatter");
217
223
  function BlogTranslationStatus({ aiStatus, onRetranslate }) {
@@ -219,7 +225,7 @@ function BlogTranslationStatus({ aiStatus, onRetranslate }) {
219
225
  const [isRetrying, setIsRetrying] = _react.useState.call(void 0, false);
220
226
  if (aiStatus === "completed") return null;
221
227
  if (aiStatus === "pending" || aiStatus === "in_progress") {
222
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-x-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softBlue", children: [
228
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-x-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softBlue", children: [
223
229
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircleIcon, { className: "animate-spin" }),
224
230
  aiStatus === "pending" ? t("blog.translation.pending") : t("blog.translation.translating")
225
231
  ] }) });
@@ -230,14 +236,14 @@ function BlogTranslationStatus({ aiStatus, onRetranslate }) {
230
236
  try {
231
237
  await onRetranslate();
232
238
  } catch (error) {
233
- _chunkBDWV4KYRjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
239
+ _chunkJE6QWCNEjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
234
240
  } finally {
235
241
  setIsRetrying(false);
236
242
  }
237
243
  }, "retranslate");
238
244
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
239
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softRed", children: t("blog.translation.failed") }),
240
- onRetranslate && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.Button, { type: "button", size: "sm", variant: "outline", onClick: () => void retranslate(), disabled: isRetrying, children: [
245
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softRed", children: t("blog.translation.failed") }),
246
+ onRetranslate && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.Button, { type: "button", size: "sm", variant: "outline", onClick: () => void retranslate(), disabled: isRetrying, children: [
241
247
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}),
242
248
  t("blog.actions.translateAgain")
243
249
  ] })
@@ -266,10 +272,10 @@ var sameTranslation = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (a, b
266
272
  function BlogCategoryEditor({ category, trigger, onSuccess }) {
267
273
  const t = _nextintl.useTranslations.call(void 0, );
268
274
  const formSchema = _react.useMemo.call(void 0, () => buildFormSchema(t), [t]);
269
- const locale = _chunkP7L6OFX5js.useI18nLocale.call(void 0, );
275
+ const locale = _chunkNP3AFULUjs.useI18nLocale.call(void 0, );
270
276
  const languageName = useBlogLanguageName();
271
277
  const [image, setImage] = _react.useState.call(void 0, null);
272
- const languages = _react.useMemo.call(void 0, () => _chunkP7L6OFX5js.getI18nSupportedLocales.call(void 0, ), []);
278
+ const languages = _react.useMemo.call(void 0, () => _chunkNP3AFULUjs.getI18nSupportedLocales.call(void 0, ), []);
273
279
  const original = _optionalChain([category, 'optionalAccess', _6 => _6.original]);
274
280
  const translations = _react.useMemo.call(void 0,
275
281
  () => (_nullishCoalesce(_optionalChain([category, 'optionalAccess', _7 => _7.translations]), () => ( []))).filter((translation) => !translation.isOriginal),
@@ -298,20 +304,20 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
298
304
  defaultValues: getDefaultValues()
299
305
  });
300
306
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
301
- _chunkBDWV4KYRjs.EditorSheet,
307
+ _chunkJE6QWCNEjs.EditorSheet,
302
308
  {
303
309
  form,
304
310
  entityType: t("blog.entities.category"),
305
311
  entityName: _nullishCoalesce(_optionalChain([original, 'optionalAccess', _14 => _14.name]), () => ( _optionalChain([category, 'optionalAccess', _15 => _15.name]))),
306
312
  title: category ? t("blog.admin.editCategory") : t("blog.admin.newCategory"),
307
313
  isEdit: !!category,
308
- module: _chunkP7L6OFX5js.Modules.BlogCategory,
314
+ module: _chunkZ6T2575Ajs.Modules.BlogCategory,
309
315
  size: "md",
310
316
  onSubmit: async (values) => {
311
317
  if (values.image && image) await uploadBlogImage({ key: values.image, selection: image });
312
318
  const imageKey = values.image && image ? values.image : void 0;
313
319
  if (!category) {
314
- return _chunkHN7L6RRWjs.BlogCategoryService.create({
320
+ return _chunk77JC2UCFjs.BlogCategoryService.create({
315
321
  id: values.id,
316
322
  originalLanguage: values.originalLanguage,
317
323
  name: values.name,
@@ -325,7 +331,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
325
331
  { id: defaults.id, name: defaults.name, slug: defaults.slug, description: defaults.description }
326
332
  );
327
333
  if (originalChanged) {
328
- await _chunkHN7L6RRWjs.BlogCategoryService.update({
334
+ await _chunk77JC2UCFjs.BlogCategoryService.update({
329
335
  id: values.id,
330
336
  originalLanguage: _optionalChain([category, 'optionalAccess', _16 => _16.originalLanguage]),
331
337
  name: values.name,
@@ -337,7 +343,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
337
343
  for (const translation of values.translations) {
338
344
  const before = defaults.translations.find((candidate) => candidate.id === translation.id);
339
345
  if (sameTranslation(translation, before)) continue;
340
- await _chunkHN7L6RRWjs.BlogCategoryTranslationService.update({
346
+ await _chunk77JC2UCFjs.BlogCategoryTranslationService.update({
341
347
  id: translation.id,
342
348
  name: translation.name,
343
349
  slug: translation.slug || void 0,
@@ -355,7 +361,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
355
361
  trigger,
356
362
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
357
363
  !category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
358
- _chunkBDWV4KYRjs.FormSelect,
364
+ _chunkJE6QWCNEjs.FormSelect,
359
365
  {
360
366
  form,
361
367
  id: "originalLanguage",
@@ -364,16 +370,16 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
364
370
  isRequired: true
365
371
  }
366
372
  ),
367
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "name", name: t("blog.fields.name"), isRequired: true }),
368
- category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
369
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormTextarea, { form, id: "description", name: t("blog.fields.description") }),
373
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "name", name: t("blog.fields.name"), isRequired: true }),
374
+ category && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
375
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormTextarea, { form, id: "description", name: t("blog.fields.description") }),
370
376
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
371
377
  BlogCoverImageField,
372
378
  {
373
379
  form,
374
380
  id: "image",
375
381
  label: t("blog.fields.image"),
376
- keyPrefix: _chunkHN7L6RRWjs.BLOG_CATEGORY_UPLOAD_PREFIX,
382
+ keyPrefix: _chunk77JC2UCFjs.BLOG_CATEGORY_UPLOAD_PREFIX,
377
383
  entityId: form.getValues("id"),
378
384
  currentUrl: _optionalChain([category, 'optionalAccess', _17 => _17.image]),
379
385
  selection: image,
@@ -381,29 +387,29 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
381
387
  }
382
388
  ),
383
389
  translations.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
384
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.SectionHeader, { className: "mt-2", children: t("blog.fields.languages") }),
385
- translations.map((translation, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.Collapsible, { className: "rounded-md border", children: [
386
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.CollapsibleTrigger, { className: "flex w-full items-center justify-between gap-x-2 px-3 py-2 text-start", children: [
390
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.SectionHeader, { className: "mt-2", children: t("blog.fields.languages") }),
391
+ translations.map((translation, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.Collapsible, { className: "rounded-md border", children: [
392
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.CollapsibleTrigger, { className: "flex w-full items-center justify-between gap-x-2 px-3 py-2 text-start", children: [
387
393
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-x-2 text-sm font-medium", children: [
388
394
  languageName(translation.language),
389
395
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogTranslationStatus, { aiStatus: translation.aiStatus })
390
396
  ] }),
391
397
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronDownIcon, { className: "text-muted-foreground size-4" })
392
398
  ] }),
393
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.CollapsibleContent, { className: "flex flex-col gap-y-4 border-t p-3", children: [
399
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.CollapsibleContent, { className: "flex flex-col gap-y-4 border-t p-3", children: [
394
400
  translation.aiStatus === "failed" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
395
401
  BlogTranslationStatus,
396
402
  {
397
403
  aiStatus: translation.aiStatus,
398
404
  onRetranslate: async () => {
399
- await _chunkHN7L6RRWjs.BlogCategoryTranslationService.retranslate({ id: translation.id });
405
+ await _chunk77JC2UCFjs.BlogCategoryTranslationService.retranslate({ id: translation.id });
400
406
  await _optionalChain([onSuccess, 'optionalCall', _18 => _18()]);
401
407
  }
402
408
  }
403
409
  ),
404
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: `translations.${index}.name`, name: t("blog.fields.name"), isRequired: true }),
410
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: `translations.${index}.name`, name: t("blog.fields.name"), isRequired: true }),
405
411
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
406
- _chunkBDWV4KYRjs.FormInput,
412
+ _chunkJE6QWCNEjs.FormInput,
407
413
  {
408
414
  form,
409
415
  id: `translations.${index}.slug`,
@@ -412,7 +418,7 @@ function BlogCategoryEditor({ category, trigger, onSuccess }) {
412
418
  }
413
419
  ),
414
420
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
415
- _chunkBDWV4KYRjs.FormTextarea,
421
+ _chunkJE6QWCNEjs.FormTextarea,
416
422
  {
417
423
  form,
418
424
  id: `translations.${index}.description`,
@@ -485,37 +491,37 @@ var useBlogCategoryTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call
485
491
  }, [params.fields, fieldColumnMap, t, refresh]);
486
492
  return _react.useMemo.call(void 0, () => ({ data: tableData, columns }), [tableData, columns]);
487
493
  }, "useBlogCategoryTableStructure");
488
- _chunkBDWV4KYRjs.registerTableGenerator.call(void 0, "blog-categories", useBlogCategoryTableStructure);
494
+ _chunkJE6QWCNEjs.registerTableGenerator.call(void 0, "blog-categories", useBlogCategoryTableStructure);
489
495
 
490
496
  // src/features/blog/components/admin/BlogCategoriesList.tsx
491
497
 
492
498
  function BlogCategoriesList({ fullWidth } = {}) {
493
499
  const t = _nextintl.useTranslations.call(void 0, );
494
- const data = _chunkBDWV4KYRjs.useDataListRetriever.call(void 0, {
495
- retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkHN7L6RRWjs.BlogCategoryService.findMany(params), "retriever"),
500
+ const data = _chunkJE6QWCNEjs.useDataListRetriever.call(void 0, {
501
+ retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunk77JC2UCFjs.BlogCategoryService.findMany(params), "retriever"),
496
502
  retrieverParams: {},
497
- module: _chunkP7L6OFX5js.Modules.BlogCategory
503
+ module: _chunkZ6T2575Ajs.Modules.BlogCategory
498
504
  });
499
505
  const functions = [
500
506
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
501
507
  BlogCategoryEditor,
502
508
  {
503
509
  onSuccess: data.refresh,
504
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newCategory") })
510
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newCategory") })
505
511
  },
506
512
  "create-blog-category"
507
513
  )
508
514
  ];
509
515
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
510
- _chunkBDWV4KYRjs.ContentListTable,
516
+ _chunkJE6QWCNEjs.ContentListTable,
511
517
  {
512
518
  data,
513
519
  fields: ["name" /* name */, "languages" /* languages */],
514
- tableGeneratorType: _chunkP7L6OFX5js.Modules.BlogCategory,
520
+ tableGeneratorType: _chunkZ6T2575Ajs.Modules.BlogCategory,
515
521
  functions,
516
522
  fullWidth,
517
523
  title: t("blog.entities.categories"),
518
- emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.EmptyState, { icon: _lucidereact.TagIcon, title: t("blog.admin.emptyCategories") })
524
+ emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.EmptyState, { icon: _lucidereact.TagIcon, title: t("blog.admin.emptyCategories") })
519
525
  }
520
526
  );
521
527
  }
@@ -531,7 +537,7 @@ function BlogLayoutSetting() {
531
537
  const [saving, setSaving] = _react.useState.call(void 0, false);
532
538
  _react.useEffect.call(void 0, () => {
533
539
  let active = true;
534
- _chunkHN7L6RRWjs.BlogSettingsService.get().then((settings) => {
540
+ _chunk77JC2UCFjs.BlogSettingsService.get().then((settings) => {
535
541
  if (active) setLayout(_nullishCoalesce(_optionalChain([settings, 'optionalAccess', _23 => _23.listLayout]), () => ( "featured")));
536
542
  }).catch(() => {
537
543
  if (active) setLayout("featured");
@@ -550,19 +556,19 @@ function BlogLayoutSetting() {
550
556
  setLayout(next);
551
557
  setSaving(true);
552
558
  try {
553
- await _chunkHN7L6RRWjs.BlogSettingsService.save({ id: _chunkHN7L6RRWjs.BLOG_SETTINGS_ID, listLayout: next });
554
- _chunkHN7L6RRWjs.showToast.call(void 0, t("blog.layout.saved"));
559
+ await _chunk77JC2UCFjs.BlogSettingsService.save({ id: _chunk77JC2UCFjs.BLOG_SETTINGS_ID, listLayout: next });
560
+ _chunk77JC2UCFjs.showToast.call(void 0, t("blog.layout.saved"));
555
561
  } catch (error) {
556
562
  setLayout(previous);
557
- _chunkBDWV4KYRjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
563
+ _chunkJE6QWCNEjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
558
564
  } finally {
559
565
  setSaving(false);
560
566
  }
561
567
  }, "save");
562
568
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full max-w-3xl flex-col gap-y-4 p-4", children: [
563
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.SectionHeader, { children: t("blog.layout.title") }),
569
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.SectionHeader, { children: t("blog.layout.title") }),
564
570
  layout && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
565
- _chunkBDWV4KYRjs.RadioGroup,
571
+ _chunkJE6QWCNEjs.RadioGroup,
566
572
  {
567
573
  value: layout,
568
574
  onValueChange: (value) => {
@@ -571,13 +577,13 @@ function BlogLayoutSetting() {
571
577
  },
572
578
  disabled: saving,
573
579
  className: "grid grid-cols-1 gap-3 md:grid-cols-3",
574
- children: _chunkHN7L6RRWjs.BLOG_LIST_LAYOUTS.map((option) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
580
+ children: _chunk77JC2UCFjs.BLOG_LIST_LAYOUTS.map((option) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
575
581
  "label",
576
582
  {
577
583
  htmlFor: `blog-layout-${option}`,
578
584
  className: "has-data-checked:border-primary flex cursor-pointer items-start gap-x-3 rounded-lg border p-4",
579
585
  children: [
580
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.RadioGroupItem, { value: option, id: `blog-layout-${option}`, className: "mt-0.5" }),
586
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.RadioGroupItem, { value: option, id: `blog-layout-${option}`, className: "mt-0.5" }),
581
587
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-col gap-y-1", children: [
582
588
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium", children: options[option].label }),
583
589
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs/relaxed", children: options[option].description })
@@ -606,7 +612,7 @@ function useBlogCategoryNames() {
606
612
  const [names, setNames] = _react.useState.call(void 0, {});
607
613
  _react.useEffect.call(void 0, () => {
608
614
  let cancelled = false;
609
- _chunkHN7L6RRWjs.BlogCategoryService.findMany({ fetchAll: true }).then((categories) => {
615
+ _chunk77JC2UCFjs.BlogCategoryService.findMany({ fetchAll: true }).then((categories) => {
610
616
  if (cancelled) return;
611
617
  setNames(Object.fromEntries(categories.map((category) => [category.id, blogCategoryAdminName(category)])));
612
618
  }).catch(() => {
@@ -623,8 +629,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, useBlogCategoryNames, "useBlogCategoryNames
623
629
 
624
630
  var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => {
625
631
  const t = _nextintl.useTranslations.call(void 0, );
626
- const locale = _chunkP7L6OFX5js.useI18nLocale.call(void 0, );
627
- const generateUrl = _chunkBDWV4KYRjs.usePageUrlGenerator.call(void 0, );
632
+ const dates = _chunkSYMI4IDWjs.useDateFormatter.call(void 0, );
633
+ const generateUrl = _chunkJE6QWCNEjs.usePageUrlGenerator.call(void 0, );
628
634
  const categoryName = useBlogCategoryNames();
629
635
  const tableData = _react.useMemo.call(void 0, () => {
630
636
  return params.data.map((post) => {
@@ -642,7 +648,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
642
648
  header: t("blog.fields.title"),
643
649
  cell: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ row }) => {
644
650
  const post = row.original.jsonApiData;
645
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Link, { href: generateUrl({ page: _chunkP7L6OFX5js.Modules.BlogPost, id: post.id }), children: _nullishCoalesce(_nullishCoalesce(_optionalChain([post, 'access', _24 => _24.original, 'optionalAccess', _25 => _25.title]), () => ( post.title)), () => ( post.id)) });
651
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Link, { href: generateUrl({ page: _chunkZ6T2575Ajs.Modules.BlogPost, id: post.id }), children: _nullishCoalesce(_nullishCoalesce(_optionalChain([post, 'access', _24 => _24.original, 'optionalAccess', _25 => _25.title]), () => ( post.title)), () => ( post.id)) });
646
652
  }, "cell"),
647
653
  enableSorting: false,
648
654
  enableHiding: false
@@ -658,7 +664,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
658
664
  published: t("blog.status.published"),
659
665
  unpublished: t("blog.status.unpublished")
660
666
  }[post.status];
661
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: _nullishCoalesce(BLOG_STATUS_BADGE[post.status], () => ( "softGray")), children: _nullishCoalesce(label, () => ( post.status)) });
667
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: _nullishCoalesce(BLOG_STATUS_BADGE[post.status], () => ( "softGray")), children: _nullishCoalesce(label, () => ( post.status)) });
662
668
  }, "cell"),
663
669
  enableSorting: false,
664
670
  enableHiding: false
@@ -683,7 +689,7 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
683
689
  cell: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ row }) => {
684
690
  const post = row.original.jsonApiData;
685
691
  if (!post.publishedAt) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: "\u2014" });
686
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-xs tabular-nums", children: post.publishedAt.toLocaleDateString(locale, { dateStyle: "medium" }) });
692
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-xs tabular-nums", children: dates.format(post.publishedAt, "dateMedium") });
687
693
  }, "cell"),
688
694
  enableSorting: false,
689
695
  enableHiding: false
@@ -709,10 +715,10 @@ var useBlogPostTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(voi
709
715
  };
710
716
  const columns = _react.useMemo.call(void 0, () => {
711
717
  return params.fields.map((field) => _optionalChain([fieldColumnMap, 'access', _26 => _26[field], 'optionalCall', _27 => _27()])).filter((col) => col !== void 0);
712
- }, [params.fields, fieldColumnMap, t, generateUrl, locale, categoryName]);
718
+ }, [params.fields, fieldColumnMap, t, generateUrl, dates, categoryName]);
713
719
  return _react.useMemo.call(void 0, () => ({ data: tableData, columns }), [tableData, columns]);
714
720
  }, "useBlogPostTableStructure");
715
- _chunkBDWV4KYRjs.registerTableGenerator.call(void 0, "blog-posts", useBlogPostTableStructure);
721
+ _chunkJE6QWCNEjs.registerTableGenerator.call(void 0, "blog-posts", useBlogPostTableStructure);
716
722
 
717
723
  // src/features/blog/components/admin/BlogPostEditor.tsx
718
724
 
@@ -726,13 +732,13 @@ var isBodyEmpty = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (body) =>
726
732
  function BlogPostEditor({ post, trigger, onSuccess }) {
727
733
  const t = _nextintl.useTranslations.call(void 0, );
728
734
  const categoryName = useBlogCategoryNames();
729
- const router = _chunkP7L6OFX5js.useI18nRouter.call(void 0, );
730
- const locale = _chunkP7L6OFX5js.useI18nLocale.call(void 0, );
735
+ const router = _chunkNP3AFULUjs.useI18nRouter.call(void 0, );
736
+ const locale = _chunkNP3AFULUjs.useI18nLocale.call(void 0, );
731
737
  const languageName = useBlogLanguageName();
732
738
  const original = _optionalChain([post, 'optionalAccess', _28 => _28.original]);
733
739
  const [cover, setCover] = _react.useState.call(void 0, null);
734
740
  const [isBodyEmptyState, setIsBodyEmptyState] = _react.useState.call(void 0, isBodyEmpty(_optionalChain([original, 'optionalAccess', _29 => _29.body])));
735
- const languages = _react.useMemo.call(void 0, () => _chunkP7L6OFX5js.getI18nSupportedLocales.call(void 0, ), []);
741
+ const languages = _react.useMemo.call(void 0, () => _chunkNP3AFULUjs.getI18nSupportedLocales.call(void 0, ), []);
736
742
  const formSchema = _react.useMemo.call(void 0,
737
743
  () => _zod3.z.object({
738
744
  id: _zod3.z.string().uuid(),
@@ -777,14 +783,14 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
777
783
  return Object.keys(dirty).length > 0;
778
784
  }, [dirtyFields, isBodyEmptyState]);
779
785
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
780
- _chunkBDWV4KYRjs.EditorSheet,
786
+ _chunkJE6QWCNEjs.EditorSheet,
781
787
  {
782
788
  form,
783
789
  entityType: t("blog.entities.post"),
784
790
  entityName: _optionalChain([original, 'optionalAccess', _38 => _38.title]),
785
791
  title: post ? t("blog.admin.editPost") : t("blog.admin.newPost"),
786
792
  isEdit: !!post,
787
- module: _chunkP7L6OFX5js.Modules.BlogPost,
793
+ module: _chunkZ6T2575Ajs.Modules.BlogPost,
788
794
  size: "lg",
789
795
  isFormDirty,
790
796
  onSubmit: async (values) => {
@@ -801,13 +807,13 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
801
807
  categoryIds: values.categories.map((category) => category.id)
802
808
  };
803
809
  if (post) {
804
- return _chunkHN7L6RRWjs.BlogPostService.update({
810
+ return _chunk77JC2UCFjs.BlogPostService.update({
805
811
  ...payload,
806
812
  originalLanguage: post.originalLanguage,
807
813
  slug: values.slug || void 0
808
814
  });
809
815
  }
810
- return _chunkHN7L6RRWjs.BlogPostService.create({ ...payload, originalLanguage: values.originalLanguage });
816
+ return _chunk77JC2UCFjs.BlogPostService.create({ ...payload, originalLanguage: values.originalLanguage });
811
817
  },
812
818
  onReset: () => {
813
819
  setCover(null);
@@ -819,7 +825,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
819
825
  trigger,
820
826
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
821
827
  !post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
822
- _chunkBDWV4KYRjs.FormSelect,
828
+ _chunkJE6QWCNEjs.FormSelect,
823
829
  {
824
830
  form,
825
831
  id: "originalLanguage",
@@ -828,24 +834,24 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
828
834
  isRequired: true
829
835
  }
830
836
  ),
831
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
837
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
832
838
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
833
839
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
834
- post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
840
+ post && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
835
841
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
836
- _chunkBDWV4KYRjs.EntityMultiSelector,
842
+ _chunkJE6QWCNEjs.EntityMultiSelector,
837
843
  {
838
844
  id: "categories",
839
845
  form,
840
846
  label: t("blog.fields.categories"),
841
- retriever: (params) => _chunkHN7L6RRWjs.BlogCategoryService.findMany(params),
842
- module: _chunkP7L6OFX5js.Modules.BlogCategory,
847
+ retriever: (params) => _chunk77JC2UCFjs.BlogCategoryService.findMany(params),
848
+ module: _chunkZ6T2575Ajs.Modules.BlogCategory,
843
849
  getLabel: blogCategoryAdminName,
844
850
  getFormValueLabel: (value) => value.name || categoryName(value.id)
845
851
  }
846
852
  ),
847
853
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
848
- _chunkBDWV4KYRjs.FormTextarea,
854
+ _chunkJE6QWCNEjs.FormTextarea,
849
855
  {
850
856
  form,
851
857
  id: "summary",
@@ -862,7 +868,7 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
862
868
  form,
863
869
  id: "coverImage",
864
870
  label: t("blog.fields.coverImage"),
865
- keyPrefix: _chunkHN7L6RRWjs.BLOG_POST_UPLOAD_PREFIX,
871
+ keyPrefix: _chunk77JC2UCFjs.BLOG_POST_UPLOAD_PREFIX,
866
872
  entityId: form.getValues("id"),
867
873
  currentUrl: _optionalChain([post, 'optionalAccess', _40 => _40.coverImage]),
868
874
  alt: _optionalChain([original, 'optionalAccess', _41 => _41.coverImageAlt]),
@@ -870,13 +876,13 @@ function BlogPostEditor({ post, trigger, onSuccess }) {
870
876
  onSelectionChange: setCover
871
877
  }
872
878
  ),
873
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") })
879
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") })
874
880
  ] })
875
881
  ] }),
876
882
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
877
- _chunkBDWV4KYRjs.FormBlockNote,
883
+ _chunkJE6QWCNEjs.FormBlockNote,
878
884
  {
879
- uploadKeyPrefix: _chunkHN7L6RRWjs.BLOG_POST_UPLOAD_PREFIX,
885
+ uploadKeyPrefix: _chunk77JC2UCFjs.BLOG_POST_UPLOAD_PREFIX,
880
886
  form,
881
887
  id: "body",
882
888
  name: t("blog.fields.body"),
@@ -897,22 +903,22 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostEditor, "BlogPostEditor");
897
903
 
898
904
  function BlogPostsList({ fullWidth } = {}) {
899
905
  const t = _nextintl.useTranslations.call(void 0, );
900
- const data = _chunkBDWV4KYRjs.useDataListRetriever.call(void 0, {
901
- retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkHN7L6RRWjs.BlogPostService.findMany(params), "retriever"),
906
+ const data = _chunkJE6QWCNEjs.useDataListRetriever.call(void 0, {
907
+ retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunk77JC2UCFjs.BlogPostService.findMany(params), "retriever"),
902
908
  retrieverParams: {},
903
- module: _chunkP7L6OFX5js.Modules.BlogPost
909
+ module: _chunkZ6T2575Ajs.Modules.BlogPost
904
910
  });
905
911
  const functions = [
906
912
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
907
913
  BlogPostEditor,
908
914
  {
909
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newPost") })
915
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: t("blog.admin.newPost") })
910
916
  },
911
917
  "create-blog-post"
912
918
  )
913
919
  ];
914
920
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
915
- _chunkBDWV4KYRjs.ContentListTable,
921
+ _chunkJE6QWCNEjs.ContentListTable,
916
922
  {
917
923
  data,
918
924
  fields: [
@@ -922,11 +928,11 @@ function BlogPostsList({ fullWidth } = {}) {
922
928
  "publishedAt" /* publishedAt */,
923
929
  "languages" /* languages */
924
930
  ],
925
- tableGeneratorType: _chunkP7L6OFX5js.Modules.BlogPost,
931
+ tableGeneratorType: _chunkZ6T2575Ajs.Modules.BlogPost,
926
932
  functions,
927
933
  fullWidth,
928
934
  title: t("blog.entities.posts"),
929
- emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.EmptyState, { icon: _lucidereact.NewspaperIcon, title: t("blog.admin.empty") })
935
+ emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.EmptyState, { icon: _lucidereact.NewspaperIcon, title: t("blog.admin.empty") })
930
936
  }
931
937
  );
932
938
  }
@@ -937,10 +943,10 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostsList, "BlogPostsList");
937
943
  function BlogAdminContainer() {
938
944
  const t = _nextintl.useTranslations.call(void 0, );
939
945
  const breadcrumbs = [{ name: t("blog.admin.title") }];
940
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.SharedProvider, { value: { breadcrumbs, title: { type: t("blog.admin.title") } }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
941
- _chunkBDWV4KYRjs.RoundPageContainer,
946
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.SharedProvider, { value: { breadcrumbs, title: { type: t("blog.admin.title") } }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
947
+ _chunkJE6QWCNEjs.RoundPageContainer,
942
948
  {
943
- module: _chunkP7L6OFX5js.Modules.BlogPost,
949
+ module: _chunkZ6T2575Ajs.Modules.BlogPost,
944
950
  tabs: [
945
951
  { sectionKey: "posts", label: t("blog.tabs.posts"), content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostsList, {}) },
946
952
  { sectionKey: "categories", label: t("blog.tabs.categories"), content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogCategoriesList, {}) },
@@ -963,7 +969,7 @@ var BlogPostContext = _react.createContext.call(void 0, void 0);
963
969
  var BlogPostProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ postId, children }) => {
964
970
  const [post, setPost] = _react.useState.call(void 0, void 0);
965
971
  const reload = _react.useCallback.call(void 0, async () => {
966
- const loaded = await _chunkHN7L6RRWjs.BlogPostService.findOne({ id: postId });
972
+ const loaded = await _chunk77JC2UCFjs.BlogPostService.findOne({ id: postId });
967
973
  setPost(loaded);
968
974
  }, [postId]);
969
975
  _react.useEffect.call(void 0, () => {
@@ -999,19 +1005,19 @@ var useBlogPost = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
999
1005
 
1000
1006
  function BlogPostDeleter() {
1001
1007
  const t = _nextintl.useTranslations.call(void 0, );
1002
- const generateUrl = _chunkBDWV4KYRjs.usePageUrlGenerator.call(void 0, );
1008
+ const generateUrl = _chunkJE6QWCNEjs.usePageUrlGenerator.call(void 0, );
1003
1009
  const { post } = useBlogPost();
1004
1010
  if (!post) return null;
1005
1011
  const type = t("blog.entities.post");
1006
1012
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1007
- _chunkBDWV4KYRjs.CommonDeleter,
1013
+ _chunkJE6QWCNEjs.CommonDeleter,
1008
1014
  {
1009
1015
  title: t("common.delete.title", { type }),
1010
1016
  subtitle: t("common.delete.subtitle", { type }),
1011
1017
  description: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-destructive p-4 text-sm", children: t("common.delete.description", { type }) }),
1012
1018
  showLabel: true,
1013
- deleteFunction: () => _chunkHN7L6RRWjs.BlogPostService.delete({ id: post.id }),
1014
- redirectTo: generateUrl({ page: _chunkP7L6OFX5js.Modules.BlogPost })
1019
+ deleteFunction: () => _chunk77JC2UCFjs.BlogPostService.delete({ id: post.id }),
1020
+ redirectTo: generateUrl({ page: _chunkZ6T2575Ajs.Modules.BlogPost })
1015
1021
  }
1016
1022
  );
1017
1023
  }
@@ -1031,17 +1037,17 @@ function BlogPostPublishButton() {
1031
1037
  const toggle = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
1032
1038
  setSaving(true);
1033
1039
  try {
1034
- if (isPublished) await _chunkHN7L6RRWjs.BlogPostService.unpublish({ id: post.id });
1035
- else await _chunkHN7L6RRWjs.BlogPostService.publish({ id: post.id });
1040
+ if (isPublished) await _chunk77JC2UCFjs.BlogPostService.unpublish({ id: post.id });
1041
+ else await _chunk77JC2UCFjs.BlogPostService.publish({ id: post.id });
1036
1042
  await reload();
1037
1043
  } catch (error) {
1038
- _chunkBDWV4KYRjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
1044
+ _chunkJE6QWCNEjs.errorToast.call(void 0, { title: t("common.errors.error"), error });
1039
1045
  } finally {
1040
1046
  setSaving(false);
1041
1047
  }
1042
1048
  }, "toggle");
1043
1049
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1044
- _chunkBDWV4KYRjs.Button,
1050
+ _chunkJE6QWCNEjs.Button,
1045
1051
  {
1046
1052
  type: "button",
1047
1053
  size: "sm",
@@ -1069,11 +1075,11 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostPublishButton, "BlogPostPublishButt
1069
1075
  function BlogPostTranslationFields({ translation }) {
1070
1076
  const t = _nextintl.useTranslations.call(void 0, );
1071
1077
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
1072
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.title"), value: translation.title }),
1073
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.slug"), value: translation.slug }),
1074
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.summary"), value: translation.summary }),
1075
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.coverImageAlt"), value: translation.coverImageAlt }),
1076
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.body"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.BlockNoteEditorContainer, { id: translation.id, type: "blog-post", initialContent: translation.body }) })
1078
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.title"), value: translation.title }),
1079
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.slug"), value: translation.slug }),
1080
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.summary"), value: translation.summary }),
1081
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.coverImageAlt"), value: translation.coverImageAlt }),
1082
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.body"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.BlockNoteEditorContainer, { id: translation.id, type: "blog-post", initialContent: translation.body }) })
1077
1083
  ] });
1078
1084
  }
1079
1085
  _chunk7QVYU63Ejs.__name.call(void 0, BlogPostTranslationFields, "BlogPostTranslationFields");
@@ -1083,15 +1089,15 @@ function BlogPostComparison({ original, translation }) {
1083
1089
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
1084
1090
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-muted/40 flex flex-col gap-y-4 rounded-lg border p-4", children: [
1085
1091
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
1086
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.MicroLabel, { as: "h3", children: languageName(original.language) }),
1087
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softGray", children: t("blog.translation.original") })
1092
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.MicroLabel, { as: "h3", children: languageName(original.language) }),
1093
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softGray", children: t("blog.translation.original") })
1088
1094
  ] }),
1089
1095
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostTranslationFields, { translation: original })
1090
1096
  ] }),
1091
1097
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4 rounded-lg border p-4", children: [
1092
1098
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
1093
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.MicroLabel, { as: "h3", children: languageName(translation.language) }),
1094
- translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") })
1099
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.MicroLabel, { as: "h3", children: languageName(translation.language) }),
1100
+ translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") })
1095
1101
  ] }),
1096
1102
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostTranslationFields, { translation })
1097
1103
  ] })
@@ -1142,17 +1148,17 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1142
1148
  return Object.keys(dirty).length > 0;
1143
1149
  }, [dirtyFields, isBodyEmptyState]);
1144
1150
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1145
- _chunkBDWV4KYRjs.EditorSheet,
1151
+ _chunkJE6QWCNEjs.EditorSheet,
1146
1152
  {
1147
1153
  form,
1148
1154
  entityType: t("blog.entities.post"),
1149
1155
  entityName: translation.title,
1150
1156
  title: `${t("blog.admin.editPost")} \xB7 ${languageName(translation.language)}`,
1151
1157
  isEdit: true,
1152
- module: _chunkP7L6OFX5js.Modules.BlogPostTranslation,
1158
+ module: _chunkZ6T2575Ajs.Modules.BlogPostTranslation,
1153
1159
  size: "lg",
1154
1160
  isFormDirty,
1155
- onSubmit: async (values) => _chunkHN7L6RRWjs.BlogPostTranslationService.update({
1161
+ onSubmit: async (values) => _chunk77JC2UCFjs.BlogPostTranslationService.update({
1156
1162
  id: values.id,
1157
1163
  title: values.title,
1158
1164
  slug: values.slug || void 0,
@@ -1168,18 +1174,18 @@ function BlogPostTranslationEditor({ translation, trigger, onSuccess }) {
1168
1174
  }))),
1169
1175
  trigger,
1170
1176
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full min-h-0 w-full flex-col gap-y-4", children: [
1171
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
1177
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "title", name: t("blog.fields.title"), isRequired: true }),
1172
1178
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
1173
1179
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-4", children: [
1174
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1175
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormTextarea, { form, id: "summary", name: t("blog.fields.summary"), className: "min-h-24" })
1180
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "slug", name: t("blog.fields.slug"), description: t("blog.fields.slugHelp") }),
1181
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormTextarea, { form, id: "summary", name: t("blog.fields.summary"), className: "min-h-24" })
1176
1182
  ] }),
1177
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }) })
1183
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.FormInput, { form, id: "coverImageAlt", name: t("blog.fields.coverImageAlt") }) })
1178
1184
  ] }),
1179
1185
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1180
- _chunkBDWV4KYRjs.FormBlockNote,
1186
+ _chunkJE6QWCNEjs.FormBlockNote,
1181
1187
  {
1182
- uploadKeyPrefix: _chunkHN7L6RRWjs.BLOG_POST_UPLOAD_PREFIX,
1188
+ uploadKeyPrefix: _chunk77JC2UCFjs.BLOG_POST_UPLOAD_PREFIX,
1183
1189
  form,
1184
1190
  id: "body",
1185
1191
  name: t("blog.fields.body"),
@@ -1207,7 +1213,7 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1207
1213
  const original = post.original;
1208
1214
  const reload = _nullishCoalesce(onChanged, () => ( (async () => {
1209
1215
  })));
1210
- const editTrigger = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: [
1216
+ const editTrigger = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}), nativeButton: false, size: "sm", variant: "outline", children: [
1211
1217
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PencilIcon, {}),
1212
1218
  t("blog.actions.edit")
1213
1219
  ] });
@@ -1219,7 +1225,7 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1219
1225
  }[post.status];
1220
1226
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-6 p-4", children: [
1221
1227
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-x-4", children: [
1222
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softGray", children: t("blog.translation.original") }),
1228
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softGray", children: t("blog.translation.original") }),
1223
1229
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostEditor, { post, trigger: editTrigger, onSuccess: reload })
1224
1230
  ] }),
1225
1231
  post.coverImage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1230,14 +1236,14 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1230
1236
  width: 640,
1231
1237
  height: 360,
1232
1238
  className: "h-auto max-h-72 w-auto rounded-lg object-cover",
1233
- unoptimized: _chunkHN7L6RRWjs.isRemoteImageSrc.call(void 0, post.coverImage)
1239
+ unoptimized: _chunk77JC2UCFjs.isRemoteImageSrc.call(void 0, post.coverImage)
1234
1240
  }
1235
1241
  ),
1236
1242
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: [
1237
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.status"), value: statusLabel }),
1238
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.DetailField, { label: t("blog.fields.publishedAt"), value: formatDate(post.publishedAt) || "\u2014" }),
1243
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.status"), value: statusLabel }),
1244
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.DetailField, { label: t("blog.fields.publishedAt"), value: formatDate(post.publishedAt) || "\u2014" }),
1239
1245
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1240
- _chunkBDWV4KYRjs.DetailField,
1246
+ _chunkJE6QWCNEjs.DetailField,
1241
1247
  {
1242
1248
  label: t("blog.fields.categories"),
1243
1249
  value: post.categories.map((category) => categoryName(category.id)).filter(Boolean).join(", ") || "\u2014"
@@ -1249,16 +1255,16 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1249
1255
  }
1250
1256
  const isWorking = translation.aiStatus === "pending" || translation.aiStatus === "in_progress";
1251
1257
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-6 p-4", children: [
1252
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Alert, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.AlertDescription, { className: "flex flex-col gap-y-2", children: [
1258
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Alert, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.AlertDescription, { className: "flex flex-col gap-y-2", children: [
1253
1259
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap items-center gap-2", children: [
1254
- translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") }),
1260
+ translation.source === "manual" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: "softAmber", children: t("blog.translation.editedByHand") }),
1255
1261
  original && translation.translatedAt && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("blog.translation.translatedFrom", {
1256
1262
  language: languageName(original.language),
1257
1263
  date: formatDate(translation.translatedAt)
1258
1264
  }) })
1259
1265
  ] }),
1260
1266
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("blog.translation.overwriteWarning") }),
1261
- original && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Button, { type: "button", size: "sm", variant: "ghost", onClick: () => setIsComparing((value) => !value), children: isComparing ? t("blog.actions.hideComparison") : t("blog.actions.compareWithOriginal") }) })
1267
+ original && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Button, { type: "button", size: "sm", variant: "ghost", onClick: () => setIsComparing((value) => !value), children: isComparing ? t("blog.actions.hideComparison") : t("blog.actions.compareWithOriginal") }) })
1262
1268
  ] }) }),
1263
1269
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-x-4", children: [
1264
1270
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1266,7 +1272,7 @@ function BlogPostTranslationPanel({ post, translation, onChanged }) {
1266
1272
  {
1267
1273
  aiStatus: translation.aiStatus,
1268
1274
  onRetranslate: async () => {
1269
- await _chunkHN7L6RRWjs.BlogPostTranslationService.retranslate({ id: translation.id });
1275
+ await _chunk77JC2UCFjs.BlogPostTranslationService.retranslate({ id: translation.id });
1270
1276
  await reload();
1271
1277
  }
1272
1278
  }
@@ -1286,7 +1292,7 @@ function BlogPostContainer({ postId }) {
1286
1292
  _chunk7QVYU63Ejs.__name.call(void 0, BlogPostContainer, "BlogPostContainer");
1287
1293
  function BlogPostShell() {
1288
1294
  const t = _nextintl.useTranslations.call(void 0, );
1289
- const generateUrl = _chunkBDWV4KYRjs.usePageUrlGenerator.call(void 0, );
1295
+ const generateUrl = _chunkJE6QWCNEjs.usePageUrlGenerator.call(void 0, );
1290
1296
  const languageName = useBlogLanguageName();
1291
1297
  const { post, reload } = useBlogPost();
1292
1298
  const translations = _react.useMemo.call(void 0, () => {
@@ -1299,7 +1305,7 @@ function BlogPostShell() {
1299
1305
  if (!post) return null;
1300
1306
  const title = _nullishCoalesce(_nullishCoalesce(_optionalChain([post, 'access', _44 => _44.original, 'optionalAccess', _45 => _45.title]), () => ( post.title)), () => ( ""));
1301
1307
  const breadcrumbs = [
1302
- { name: t("blog.admin.title"), href: generateUrl({ page: _chunkP7L6OFX5js.Modules.BlogPost }) },
1308
+ { name: t("blog.admin.title"), href: generateUrl({ page: _chunkZ6T2575Ajs.Modules.BlogPost }) },
1303
1309
  { name: title }
1304
1310
  ];
1305
1311
  const statusLabel = {
@@ -1316,7 +1322,7 @@ function BlogPostShell() {
1316
1322
  return parts.join(" \xB7 ");
1317
1323
  }, "tabLabel");
1318
1324
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1319
- _chunkBDWV4KYRjs.SharedProvider,
1325
+ _chunkJE6QWCNEjs.SharedProvider,
1320
1326
  {
1321
1327
  value: {
1322
1328
  breadcrumbs,
@@ -1324,16 +1330,16 @@ function BlogPostShell() {
1324
1330
  type: t("blog.admin.title"),
1325
1331
  element: title,
1326
1332
  functions: [
1327
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Badge, { variant: BLOG_STATUS_BADGE[post.status], children: statusLabel }, "blogPostStatus"),
1333
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Badge, { variant: BLOG_STATUS_BADGE[post.status], children: statusLabel }, "blogPostStatus"),
1328
1334
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostPublishButton, {}, "blogPostPublish"),
1329
1335
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostDeleter, {}, "blogPostDeleter")
1330
1336
  ]
1331
1337
  }
1332
1338
  },
1333
1339
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1334
- _chunkBDWV4KYRjs.RoundPageContainer,
1340
+ _chunkJE6QWCNEjs.RoundPageContainer,
1335
1341
  {
1336
- module: _chunkP7L6OFX5js.Modules.BlogPost,
1342
+ module: _chunkZ6T2575Ajs.Modules.BlogPost,
1337
1343
  id: post.id,
1338
1344
  forceHeader: true,
1339
1345
  tabs: translations.map((translation) => ({
@@ -1395,10 +1401,10 @@ function BlogCategoryChips(props) {
1395
1401
  ];
1396
1402
  const inactiveVariant = variant === "chips" ? "outline" : "ghost";
1397
1403
  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,
1398
- _chunkBDWV4KYRjs.Badge,
1404
+ _chunkJE6QWCNEjs.Badge,
1399
1405
  {
1400
1406
  variant: item.active ? "default" : inactiveVariant,
1401
- render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Link, { href: item.href, "aria-current": item.active ? "page" : void 0 }),
1407
+ render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Link, { href: item.href, "aria-current": item.active ? "page" : void 0 }),
1402
1408
  children: item.label
1403
1409
  }
1404
1410
  ) }, item.key)) }) });
@@ -1413,12 +1419,12 @@ function BlogListHeader(props) {
1413
1419
  const t = _nextintl.useTranslations.call(void 0, );
1414
1420
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "header", { className: align === "center" ? "text-center" : void 0, children: [
1415
1421
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1416
- _chunkBDWV4KYRjs.ContentTitle,
1422
+ _chunkJE6QWCNEjs.ContentTitle,
1417
1423
  {
1418
1424
  type: t("blog.public.eyebrow"),
1419
1425
  element: t("blog.public.title"),
1420
1426
  headingLevel: 1,
1421
- className: _chunkHN7L6RRWjs.cn.call(void 0, "mb-0", align === "center" && "[&_div]:justify-center")
1427
+ className: _chunk77JC2UCFjs.cn.call(void 0, "mb-0", align === "center" && "[&_div]:justify-center")
1422
1428
  }
1423
1429
  ),
1424
1430
  showSubtitle ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mt-3 text-sm leading-relaxed", children: t("blog.public.subtitle") }) : null
@@ -1427,18 +1433,18 @@ function BlogListHeader(props) {
1427
1433
  _chunk7QVYU63Ejs.__name.call(void 0, BlogListHeader, "BlogListHeader");
1428
1434
  function BlogListEmpty(props) {
1429
1435
  const t = _nextintl.useTranslations.call(void 0, );
1430
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunkHN7L6RRWjs.cn.call(void 0, "text-muted-foreground py-12 text-center text-sm", props.className), children: props.query ? t("blog.public.noResults") : t("blog.public.empty") });
1436
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunk77JC2UCFjs.cn.call(void 0, "text-muted-foreground py-12 text-center text-sm", props.className), children: props.query ? t("blog.public.noResults") : t("blog.public.empty") });
1431
1437
  }
1432
1438
  _chunk7QVYU63Ejs.__name.call(void 0, BlogListEmpty, "BlogListEmpty");
1433
1439
  function BlogLoadMore(props) {
1434
1440
  const { basePath, page, activeCategorySlug, query, className } = props;
1435
1441
  const t = _nextintl.useTranslations.call(void 0, );
1436
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkHN7L6RRWjs.cn.call(void 0, "flex justify-center", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1437
- _chunkBDWV4KYRjs.Link,
1442
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk77JC2UCFjs.cn.call(void 0, "flex justify-center", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1443
+ _chunkJE6QWCNEjs.Link,
1438
1444
  {
1439
1445
  href: blogListHref(basePath, { category: activeCategorySlug, q: query, page: page + 1 }),
1440
1446
  scroll: false,
1441
- className: _chunkBDWV4KYRjs.buttonVariants.call(void 0, { variant: "outline" }),
1447
+ className: _chunkJE6QWCNEjs.buttonVariants.call(void 0, { variant: "outline" }),
1442
1448
  children: t("blog.public.loadMore")
1443
1449
  }
1444
1450
  ) });
@@ -1455,17 +1461,17 @@ var ONE_DAY_MS = 24 * 60 * 60 * 1e3;
1455
1461
  function BlogPostMeta(props) {
1456
1462
  const { post, showAuthor, showDate, showUpdated, className } = props;
1457
1463
  const t = _nextintl.useTranslations.call(void 0, );
1458
- const format = _nextintl.useFormatter.call(void 0, );
1464
+ const dates = _chunkSYMI4IDWjs.useDateFormatter.call(void 0, );
1459
1465
  const parts = [];
1460
1466
  if (showAuthor && post.authorName) parts.push(t("blog.public.by", { author: post.authorName }));
1461
1467
  if (showDate && post.publishedAt) {
1462
- parts.push(format.dateTime(new Date(post.publishedAt), { dateStyle: "medium" }));
1468
+ parts.push(dates.format(post.publishedAt, "dateMedium"));
1463
1469
  }
1464
1470
  if (showUpdated && post.publishedAt && post.updatedAt && new Date(post.updatedAt).getTime() - new Date(post.publishedAt).getTime() > ONE_DAY_MS) {
1465
- parts.push(t("blog.public.updated", { date: format.dateTime(new Date(post.updatedAt), { dateStyle: "medium" }) }));
1471
+ parts.push(t("blog.public.updated", { date: dates.format(post.updatedAt, "dateMedium") }));
1466
1472
  }
1467
1473
  parts.push(t("blog.public.readingTime", { minutes: post.readingMinutes }));
1468
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunkHN7L6RRWjs.cn.call(void 0, "text-muted-foreground text-xs", className), children: parts.map((part, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
1474
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunk77JC2UCFjs.cn.call(void 0, "text-muted-foreground text-xs", className), children: parts.map((part, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
1469
1475
  index > 0 ? " \xB7 " : null,
1470
1476
  part
1471
1477
  ] }, index)) });
@@ -1476,7 +1482,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostMeta, "BlogPostMeta");
1476
1482
 
1477
1483
  function BlogPostCover(props) {
1478
1484
  const { src, alt, sizes, priority, className } = props;
1479
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkHN7L6RRWjs.cn.call(void 0, "border-border bg-primary/10 relative overflow-hidden rounded-lg border", className), children: src ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1485
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk77JC2UCFjs.cn.call(void 0, "border-border bg-primary/10 relative overflow-hidden rounded-lg border", className), children: src ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1480
1486
  _image2.default,
1481
1487
  {
1482
1488
  src,
@@ -1485,7 +1491,7 @@ function BlogPostCover(props) {
1485
1491
  sizes,
1486
1492
  priority,
1487
1493
  className: "object-cover",
1488
- unoptimized: _chunkHN7L6RRWjs.isRemoteImageSrc.call(void 0, src)
1494
+ unoptimized: _chunk77JC2UCFjs.isRemoteImageSrc.call(void 0, src)
1489
1495
  }
1490
1496
  ) : null });
1491
1497
  }
@@ -1496,8 +1502,8 @@ function BlogPostCard(props) {
1496
1502
  const isProminent = variant === "hero" || variant === "large";
1497
1503
  const eyebrow = _optionalChain([category, 'optionalAccess', _46 => _46.name]);
1498
1504
  const text = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col", children: [
1499
- eyebrow ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.MicroLabel, { as: "span", children: eyebrow }) : null,
1500
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.SectionHeader, { level: headingLevel === "h3" ? 3 : 2, className: "mt-1.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.Link, { href: blogPostHref(basePath, post.slug), className: "after:absolute after:inset-0", children: post.title }) }),
1505
+ eyebrow ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.MicroLabel, { as: "span", children: eyebrow }) : null,
1506
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.SectionHeader, { level: headingLevel === "h3" ? 3 : 2, className: "mt-1.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.Link, { href: blogPostHref(basePath, post.slug), className: "after:absolute after:inset-0", children: post.title }) }),
1501
1507
  post.summary ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mt-2 text-sm leading-relaxed", children: post.summary }) : null,
1502
1508
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostMeta, { post, showAuthor: isProminent, className: "mt-3" })
1503
1509
  ] });
@@ -1555,7 +1561,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostCard, "BlogPostCard");
1555
1561
  function BlogSearchBox(props) {
1556
1562
  const { basePath, query, activeCategorySlug, className } = props;
1557
1563
  const t = _nextintl.useTranslations.call(void 0, );
1558
- const router = _chunkP7L6OFX5js.useI18nRouter.call(void 0, );
1564
+ const router = _chunkNP3AFULUjs.useI18nRouter.call(void 0, );
1559
1565
  const [value, setValue] = _react.useState.call(void 0, _nullishCoalesce(query, () => ( "")));
1560
1566
  _react.useEffect.call(void 0, () => setValue(_nullishCoalesce(query, () => ( ""))), [query]);
1561
1567
  const onSubmit = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (event) => {
@@ -1563,10 +1569,10 @@ function BlogSearchBox(props) {
1563
1569
  const q = value.trim();
1564
1570
  router.push(blogListHref(basePath, { category: activeCategorySlug, q: q || void 0 }));
1565
1571
  }, "onSubmit");
1566
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "form", { role: "search", onSubmit, className, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.InputGroup, { children: [
1567
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.InputGroupAddon, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchIcon, {}) }),
1572
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "form", { role: "search", onSubmit, className, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.InputGroup, { children: [
1573
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.InputGroupAddon, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchIcon, {}) }),
1568
1574
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1569
- _chunkBDWV4KYRjs.InputGroupInput,
1575
+ _chunkJE6QWCNEjs.InputGroupInput,
1570
1576
  {
1571
1577
  type: "search",
1572
1578
  name: "q",
@@ -1678,7 +1684,7 @@ function BlogListRail(props) {
1678
1684
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogListHeader, { showSubtitle: false }),
1679
1685
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogSearchBox, { basePath, query, activeCategorySlug }),
1680
1686
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
1681
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.MicroLabel, { as: "span", className: "block", children: t("blog.entities.categories") }),
1687
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.MicroLabel, { as: "span", className: "block", children: t("blog.entities.categories") }),
1682
1688
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1683
1689
  BlogCategoryChips,
1684
1690
  {
@@ -1736,12 +1742,12 @@ function BlogPostView(props) {
1736
1742
  const more = related.slice(0, 3);
1737
1743
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: "px-4 pt-12 pb-20 md:pt-16", children: [
1738
1744
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mx-auto max-w-3xl", children: [
1739
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBDWV4KYRjs.Link, { href: basePath, className: "inline-flex items-center gap-1.5", children: [
1745
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJE6QWCNEjs.Link, { href: basePath, className: "inline-flex items-center gap-1.5", children: [
1740
1746
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArrowLeftIcon, { className: "size-4 rtl:rotate-180" }),
1741
1747
  t("blog.public.back")
1742
1748
  ] }),
1743
1749
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "header", { className: "mt-8", children: [
1744
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.ContentTitle, { type: _optionalChain([category, 'optionalAccess', _47 => _47.name]), element: post.title, headingLevel: 1, className: "mb-0" }),
1750
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.ContentTitle, { type: _optionalChain([category, 'optionalAccess', _47 => _47.name]), element: post.title, headingLevel: 1, className: "mb-0" }),
1745
1751
  post.summary ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mt-3 text-sm leading-relaxed", children: post.summary }) : null,
1746
1752
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BlogPostMeta, { post, showAuthor: true, className: "mt-4" })
1747
1753
  ] }),
@@ -1755,10 +1761,10 @@ function BlogPostView(props) {
1755
1761
  className: "mt-8 aspect-[16/9]"
1756
1762
  }
1757
1763
  ) : null,
1758
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-8", children: _nullishCoalesce(body, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }))) })
1764
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-8", children: _nullishCoalesce(body, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.BlockNoteEditorContainer, { id: post.id, type: "blog-post", initialContent: post.body }))) })
1759
1765
  ] }),
1760
1766
  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: [
1761
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBDWV4KYRjs.SectionHeader, { level: 2, children: t("blog.public.moreIn", { category: _nullishCoalesce(_optionalChain([category, 'optionalAccess', _48 => _48.name]), () => ( "")) }) }),
1767
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJE6QWCNEjs.SectionHeader, { level: 2, children: t("blog.public.moreIn", { category: _nullishCoalesce(_optionalChain([category, 'optionalAccess', _48 => _48.name]), () => ( "")) }) }),
1762
1768
  /* @__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,
1763
1769
  BlogPostCard,
1764
1770
  {
@@ -1811,5 +1817,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlogPostView, "BlogPostView");
1811
1817
 
1812
1818
 
1813
1819
 
1814
- exports.BLOG_ACTION = _chunkHN7L6RRWjs.BLOG_ACTION; exports.BLOG_CATEGORY_UPLOAD_PREFIX = _chunkHN7L6RRWjs.BLOG_CATEGORY_UPLOAD_PREFIX; exports.BLOG_LIST_LAYOUTS = _chunkHN7L6RRWjs.BLOG_LIST_LAYOUTS; exports.BLOG_MODULE_ID = _chunkHN7L6RRWjs.BLOG_MODULE_ID; exports.BLOG_POST_STATUSES = _chunkHN7L6RRWjs.BLOG_POST_STATUSES; exports.BLOG_POST_UPLOAD_PREFIX = _chunkHN7L6RRWjs.BLOG_POST_UPLOAD_PREFIX; exports.BLOG_PUBLIC_PREFIX = _chunkHN7L6RRWjs.BLOG_PUBLIC_PREFIX; exports.BLOG_SETTINGS_ID = _chunkHN7L6RRWjs.BLOG_SETTINGS_ID; exports.BLOG_STATUS_BADGE = BLOG_STATUS_BADGE; exports.BLOG_TRANSLATION_SOURCES = _chunkHN7L6RRWjs.BLOG_TRANSLATION_SOURCES; exports.BLOG_UPLOAD_ROOT = _chunkHN7L6RRWjs.BLOG_UPLOAD_ROOT; exports.BlogAdminContainer = BlogAdminContainer; exports.BlogCategoriesList = BlogCategoriesList; exports.BlogCategoryEditor = BlogCategoryEditor; exports.BlogCoverImageField = BlogCoverImageField; exports.BlogLayoutSetting = BlogLayoutSetting; exports.BlogList = BlogList; exports.BlogPostComparison = BlogPostComparison; exports.BlogPostContainer = BlogPostContainer; exports.BlogPostDeleter = BlogPostDeleter; exports.BlogPostEditor = BlogPostEditor; exports.BlogPostProvider = BlogPostProvider; exports.BlogPostPublishButton = BlogPostPublishButton; exports.BlogPostTranslationEditor = BlogPostTranslationEditor; exports.BlogPostTranslationFields = BlogPostTranslationFields; exports.BlogPostTranslationPanel = BlogPostTranslationPanel; exports.BlogPostView = BlogPostView; exports.BlogPostsList = BlogPostsList; exports.BlogTranslationStatus = BlogTranslationStatus; exports.blogCategoryAdminName = blogCategoryAdminName; exports.uploadBlogImage = uploadBlogImage; exports.useBlogCategoryNames = useBlogCategoryNames; exports.useBlogCategoryTableStructure = useBlogCategoryTableStructure; exports.useBlogDateFormatter = useBlogDateFormatter; exports.useBlogLanguageName = useBlogLanguageName; exports.useBlogPost = useBlogPost; exports.useBlogPostTableStructure = useBlogPostTableStructure;
1820
+ exports.BLOG_ACTION = _chunk77JC2UCFjs.BLOG_ACTION; exports.BLOG_CATEGORY_UPLOAD_PREFIX = _chunk77JC2UCFjs.BLOG_CATEGORY_UPLOAD_PREFIX; exports.BLOG_LIST_LAYOUTS = _chunk77JC2UCFjs.BLOG_LIST_LAYOUTS; exports.BLOG_MODULE_ID = _chunk77JC2UCFjs.BLOG_MODULE_ID; exports.BLOG_POST_STATUSES = _chunk77JC2UCFjs.BLOG_POST_STATUSES; exports.BLOG_POST_UPLOAD_PREFIX = _chunk77JC2UCFjs.BLOG_POST_UPLOAD_PREFIX; exports.BLOG_PUBLIC_PREFIX = _chunk77JC2UCFjs.BLOG_PUBLIC_PREFIX; exports.BLOG_SETTINGS_ID = _chunk77JC2UCFjs.BLOG_SETTINGS_ID; exports.BLOG_STATUS_BADGE = BLOG_STATUS_BADGE; exports.BLOG_TRANSLATION_SOURCES = _chunk77JC2UCFjs.BLOG_TRANSLATION_SOURCES; exports.BLOG_UPLOAD_ROOT = _chunk77JC2UCFjs.BLOG_UPLOAD_ROOT; exports.BlogAdminContainer = BlogAdminContainer; exports.BlogCategoriesList = BlogCategoriesList; exports.BlogCategoryEditor = BlogCategoryEditor; exports.BlogCoverImageField = BlogCoverImageField; exports.BlogLayoutSetting = BlogLayoutSetting; exports.BlogList = BlogList; exports.BlogPostComparison = BlogPostComparison; exports.BlogPostContainer = BlogPostContainer; exports.BlogPostDeleter = BlogPostDeleter; exports.BlogPostEditor = BlogPostEditor; exports.BlogPostProvider = BlogPostProvider; exports.BlogPostPublishButton = BlogPostPublishButton; exports.BlogPostTranslationEditor = BlogPostTranslationEditor; exports.BlogPostTranslationFields = BlogPostTranslationFields; exports.BlogPostTranslationPanel = BlogPostTranslationPanel; exports.BlogPostView = BlogPostView; exports.BlogPostsList = BlogPostsList; exports.BlogTranslationStatus = BlogTranslationStatus; exports.blogCategoryAdminName = blogCategoryAdminName; exports.uploadBlogImage = uploadBlogImage; exports.useBlogCategoryNames = useBlogCategoryNames; exports.useBlogCategoryTableStructure = useBlogCategoryTableStructure; exports.useBlogDateFormatter = useBlogDateFormatter; exports.useBlogLanguageName = useBlogLanguageName; exports.useBlogPost = useBlogPost; exports.useBlogPostTableStructure = useBlogPostTableStructure;
1815
1821
  //# sourceMappingURL=index.js.map