@carlonicora/nextjs-jsonapi 6.23.0 → 6.25.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-PPRML5CO.js → BlockNoteEditor-TNX77GCD.js} +28 -25
  2. package/dist/BlockNoteEditor-TNX77GCD.js.map +1 -0
  3. package/dist/{BlockNoteEditor-UO4ZRCUM.mjs → BlockNoteEditor-Z5LDF47Z.mjs} +13 -10
  4. package/dist/{BlockNoteEditor-UO4ZRCUM.mjs.map → BlockNoteEditor-Z5LDF47Z.mjs.map} +1 -1
  5. package/dist/{BlockNoteViewer-K2HBF3IP.js → BlockNoteViewer-6KQJODNF.js} +9 -7
  6. package/dist/BlockNoteViewer-6KQJODNF.js.map +1 -0
  7. package/dist/{BlockNoteViewer-2TJZ6JET.mjs → BlockNoteViewer-TQ452ZYW.mjs} +8 -6
  8. package/dist/{BlockNoteViewer-2TJZ6JET.mjs.map → BlockNoteViewer-TQ452ZYW.mjs.map} +1 -1
  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-S7SPAC6X.mjs → chunk-73NKUBMP.mjs} +3 -3
  26. package/dist/chunk-743M4TIB.mjs +76 -0
  27. package/dist/chunk-743M4TIB.mjs.map +1 -0
  28. package/dist/{chunk-HN7L6RRW.js → chunk-CSBQAPHD.js} +903 -955
  29. package/dist/chunk-CSBQAPHD.js.map +1 -0
  30. package/dist/{chunk-YTDGYI62.mjs → chunk-DWPHHUMV.mjs} +3 -3
  31. package/dist/{chunk-53SD4YRF.js → chunk-FBHUUPRV.js} +5 -5
  32. package/dist/{chunk-53SD4YRF.js.map → chunk-FBHUUPRV.js.map} +1 -1
  33. package/dist/{chunk-T6G2F2BK.mjs → chunk-HJT7TXGG.mjs} +16 -68
  34. package/dist/chunk-HJT7TXGG.mjs.map +1 -0
  35. package/dist/chunk-HROKKUBQ.js +156 -0
  36. package/dist/chunk-HROKKUBQ.js.map +1 -0
  37. package/dist/{chunk-TMV7TL7O.mjs → chunk-JELEQV5T.mjs} +8 -6
  38. package/dist/{chunk-TMV7TL7O.mjs.map → chunk-JELEQV5T.mjs.map} +1 -1
  39. package/dist/{chunk-TNTCLVUR.js → chunk-JGL4P3DS.js} +17 -15
  40. package/dist/chunk-JGL4P3DS.js.map +1 -0
  41. package/dist/{chunk-7OIWOPM5.mjs → chunk-K7KLUYS7.mjs} +4 -3
  42. package/dist/chunk-K7KLUYS7.mjs.map +1 -0
  43. package/dist/{chunk-HP6DT6K3.mjs → chunk-KVYYPKRO.mjs} +311 -241
  44. package/dist/chunk-KVYYPKRO.mjs.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-R5722NLL.js → chunk-M6SNTMK6.js} +1388 -1318
  48. package/dist/chunk-M6SNTMK6.js.map +1 -0
  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-SO3YUCL6.js → chunk-OOM54Z5Z.js} +6 -5
  54. package/dist/chunk-OOM54Z5Z.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/EditorSheet.d.ts +6 -1
  72. package/dist/components/forms/EditorSheet.d.ts.map +1 -1
  73. package/dist/components/forms/FormDate.d.ts.map +1 -1
  74. package/dist/components/forms/FormDateTime.d.ts.map +1 -1
  75. package/dist/components/forms/time-cycle.d.ts +14 -0
  76. package/dist/components/forms/time-cycle.d.ts.map +1 -0
  77. package/dist/components/index.js +11 -8
  78. package/dist/components/index.js.map +1 -1
  79. package/dist/components/index.mjs +10 -7
  80. package/dist/components/tables/cells/cell.date.d.ts.map +1 -1
  81. package/dist/components/tables/cells/cell.dateTime.d.ts.map +1 -1
  82. package/dist/contexts/DateLocaleContext.d.ts +56 -0
  83. package/dist/contexts/DateLocaleContext.d.ts.map +1 -0
  84. package/dist/contexts/index.d.ts +1 -0
  85. package/dist/contexts/index.d.ts.map +1 -1
  86. package/dist/contexts/index.js +24 -8
  87. package/dist/contexts/index.js.map +1 -1
  88. package/dist/contexts/index.mjs +23 -7
  89. package/dist/core/index.js +17 -6
  90. package/dist/core/index.js.map +1 -1
  91. package/dist/core/index.mjs +19 -8
  92. package/dist/date-locale/index.d.ts +2 -0
  93. package/dist/date-locale/index.d.ts.map +1 -0
  94. package/dist/date-locale/index.js +21 -0
  95. package/dist/date-locale/index.js.map +1 -0
  96. package/dist/date-locale/index.mjs +21 -0
  97. package/dist/email-automations/index.js +131 -123
  98. package/dist/email-automations/index.js.map +1 -1
  99. package/dist/email-automations/index.mjs +23 -15
  100. package/dist/email-automations/index.mjs.map +1 -1
  101. package/dist/features/account-deletion/components/AccountDeletionAdminTrigger.d.ts.map +1 -1
  102. package/dist/features/analytics/components/AnalyticsJourneyContainer.d.ts.map +1 -1
  103. package/dist/features/analytics/components/AnalyticsSessionsTable.d.ts.map +1 -1
  104. package/dist/features/analytics/index.js +154 -147
  105. package/dist/features/analytics/index.js.map +1 -1
  106. package/dist/features/analytics/index.mjs +32 -25
  107. package/dist/features/analytics/index.mjs.map +1 -1
  108. package/dist/features/analytics/server.js +11 -9
  109. package/dist/features/analytics/server.js.map +1 -1
  110. package/dist/features/analytics/server.mjs +9 -7
  111. package/dist/features/analytics/server.mjs.map +1 -1
  112. package/dist/features/billing/components/utils/date.d.ts +3 -3
  113. package/dist/features/billing/components/utils/format-options.d.ts +6 -4
  114. package/dist/features/billing/components/utils/format-options.d.ts.map +1 -1
  115. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts +5 -1
  116. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts.map +1 -1
  117. package/dist/features/billing/stripe-usage/components/details/UsageSummaryCard.d.ts.map +1 -1
  118. package/dist/features/billing/stripe-usage/components/lists/UsageHistoryTable.d.ts.map +1 -1
  119. package/dist/features/blog/components/admin/BlogTranslationStatus.d.ts.map +1 -1
  120. package/dist/features/blog/components/public/BlogPostMeta.d.ts.map +1 -1
  121. package/dist/features/blog/hooks/useBlogPostTableStructure.d.ts.map +1 -1
  122. package/dist/features/blog/index.js +168 -162
  123. package/dist/features/blog/index.js.map +1 -1
  124. package/dist/features/blog/index.mjs +25 -19
  125. package/dist/features/blog/index.mjs.map +1 -1
  126. package/dist/features/blog/server.js +29 -27
  127. package/dist/features/blog/server.js.map +1 -1
  128. package/dist/features/blog/server.mjs +8 -6
  129. package/dist/features/blog/server.mjs.map +1 -1
  130. package/dist/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.d.ts.map +1 -1
  131. package/dist/features/handbook/components/parts/HandbookIndexStatus.d.ts.map +1 -1
  132. package/dist/features/help/components/HelpArticleBody.d.ts.map +1 -1
  133. package/dist/features/help/index.js +48 -43
  134. package/dist/features/help/index.js.map +1 -1
  135. package/dist/features/help/index.mjs +15 -10
  136. package/dist/features/help/index.mjs.map +1 -1
  137. package/dist/features/notification/components/notifications/Notification.d.ts +2 -1
  138. package/dist/features/notification/components/notifications/Notification.d.ts.map +1 -1
  139. package/dist/features/notification/contexts/NotificationContext.d.ts.map +1 -1
  140. package/dist/features/notification/hooks/useNotificationTableStructure.d.ts.map +1 -1
  141. package/dist/features/oauth/components/OAuthClientCard.d.ts.map +1 -1
  142. package/dist/features/oauth/components/OAuthClientDetail.d.ts.map +1 -1
  143. package/dist/features/tokenusage/index.js +133 -130
  144. package/dist/features/tokenusage/index.js.map +1 -1
  145. package/dist/features/tokenusage/index.mjs +10 -7
  146. package/dist/features/tokenusage/index.mjs.map +1 -1
  147. package/dist/features/tokenusage/lib/formatters.d.ts +6 -3
  148. package/dist/features/tokenusage/lib/formatters.d.ts.map +1 -1
  149. package/dist/index.js +19 -7
  150. package/dist/index.js.map +1 -1
  151. package/dist/index.mjs +23 -11
  152. package/dist/local-transport-AT4TE264.js +15 -0
  153. package/dist/{local-transport-MJPOKPTU.js.map → local-transport-AT4TE264.js.map} +1 -1
  154. package/dist/{local-transport-RVD4FZGA.mjs → local-transport-KWEUZ4GX.mjs} +5 -5
  155. package/dist/offline/index.js +56 -54
  156. package/dist/offline/index.js.map +1 -1
  157. package/dist/offline/index.mjs +23 -21
  158. package/dist/offline/index.mjs.map +1 -1
  159. package/dist/{request-4AWGPIGH.mjs → request-6GAIWWTG.mjs} +2 -2
  160. package/dist/{request-H5FZBZA2.js → request-BWO4Y434.js} +3 -3
  161. package/dist/{request-H5FZBZA2.js.map → request-BWO4Y434.js.map} +1 -1
  162. package/dist/server/ServerSession.d.ts +2 -0
  163. package/dist/server/ServerSession.d.ts.map +1 -1
  164. package/dist/server/index.js +10 -8
  165. package/dist/server/index.js.map +1 -1
  166. package/dist/server/index.mjs +9 -7
  167. package/dist/utils/date-formatter.d.ts +45 -4
  168. package/dist/utils/date-formatter.d.ts.map +1 -1
  169. package/dist/utils/index.d.ts +1 -1
  170. package/dist/utils/index.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/EditorSheet.tsx +8 -0
  181. package/src/components/forms/FormDate.tsx +5 -3
  182. package/src/components/forms/FormDateTime.tsx +75 -39
  183. package/src/components/forms/__tests__/EditorSheet.spec.tsx +30 -0
  184. package/src/components/forms/__tests__/time-cycle.spec.ts +37 -0
  185. package/src/components/forms/time-cycle.ts +27 -0
  186. package/src/components/tables/cells/cell.date.tsx +3 -5
  187. package/src/components/tables/cells/cell.dateTime.tsx +3 -7
  188. package/src/contexts/DateLocaleContext.tsx +106 -0
  189. package/src/contexts/__tests__/DateLocaleContext.spec.tsx +175 -0
  190. package/src/contexts/index.ts +1 -0
  191. package/src/date-locale/index.ts +12 -0
  192. package/src/features/account-deletion/components/AccountDeletionAdminTrigger.tsx +3 -4
  193. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +8 -8
  194. package/src/features/analytics/components/AnalyticsSessionsTable.tsx +4 -6
  195. package/src/features/auth/components/two-factor/PasskeyList.tsx +3 -3
  196. package/src/features/auth/components/two-factor/TotpAuthenticatorList.tsx +3 -3
  197. package/src/features/billing/components/utils/__tests__/billing-formatters.spec.ts +14 -6
  198. package/src/features/billing/components/utils/date.ts +5 -5
  199. package/src/features/billing/components/utils/format-options.ts +6 -4
  200. package/src/features/billing/components/utils/useBillingFormatOptions.ts +8 -2
  201. package/src/features/billing/stripe-usage/components/details/UsageSummaryCard.tsx +4 -12
  202. package/src/features/billing/stripe-usage/components/lists/UsageHistoryTable.tsx +4 -17
  203. package/src/features/blog/components/admin/BlogTranslationStatus.tsx +3 -2
  204. package/src/features/blog/components/public/BlogPostMeta.tsx +5 -4
  205. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +1 -2
  206. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +2 -3
  207. package/src/features/blog/hooks/useBlogPostTableStructure.tsx +4 -8
  208. package/src/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.tsx +11 -5
  209. package/src/features/email-blast/components/containers/EmailBlastContainer.tsx +3 -3
  210. package/src/features/email-blast/hooks/useEmailBlastTableStructure.tsx +4 -4
  211. package/src/features/handbook/components/parts/HandbookIndexStatus.tsx +4 -3
  212. package/src/features/help/components/HelpArticleBody.tsx +4 -3
  213. package/src/features/notification/components/notifications/Notification.tsx +38 -7
  214. package/src/features/notification/contexts/NotificationContext.tsx +6 -3
  215. package/src/features/notification/hooks/useNotificationTableStructure.tsx +6 -5
  216. package/src/features/oauth/components/OAuthClientCard.tsx +8 -5
  217. package/src/features/oauth/components/OAuthClientDetail.tsx +3 -6
  218. package/src/features/tokenusage/lib/__tests__/formatters.spec.ts +19 -0
  219. package/src/features/tokenusage/lib/formatters.ts +11 -6
  220. package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +5 -5
  221. package/src/server/ServerSession.ts +3 -0
  222. package/src/server/__tests__/ServerSession.read.spec.ts +18 -1
  223. package/src/utils/__tests__/date-formatter.spec.ts +134 -10
  224. package/src/utils/date-formatter.ts +200 -44
  225. package/src/utils/index.ts +11 -1
  226. package/dist/BlockNoteEditor-PPRML5CO.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-HN7L6RRW.js.map +0 -1
  231. package/dist/chunk-HP6DT6K3.mjs.map +0 -1
  232. package/dist/chunk-N2BFT7KI.mjs.map +0 -1
  233. package/dist/chunk-P7L6OFX5.js.map +0 -1
  234. package/dist/chunk-R5722NLL.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
@@ -1,3 +1,11 @@
1
+ import {
2
+ DateLocaleSourceProvider,
3
+ mapThenable,
4
+ useDateFormatter,
5
+ useDateLocale,
6
+ useDateLocaleSource,
7
+ useMountedNow
8
+ } from "./chunk-5T2AQMQ2.mjs";
1
9
  import {
2
10
  JsonApiContext
3
11
  } from "./chunk-VOXD3ZLY.mjs";
@@ -19,7 +27,7 @@ import {
19
27
  isReferralEnabled,
20
28
  isRegistrationAllowed,
21
29
  useWaitlistText
22
- } from "./chunk-TMV7TL7O.mjs";
30
+ } from "./chunk-JELEQV5T.mjs";
23
31
  import {
24
32
  getRoleId,
25
33
  isRolesConfigured
@@ -65,10 +73,8 @@ import {
65
73
  cn,
66
74
  consumeAccountDeletionCancelled,
67
75
  couponPlacesLeft,
68
- dateFormatLocale,
69
76
  formatCouponDiscount,
70
77
  formatCurrency,
71
- formatDate,
72
78
  formatInterval,
73
79
  getIconByModule,
74
80
  getInitials,
@@ -96,7 +102,11 @@ import {
96
102
  useIsMobile,
97
103
  validateItalianTaxCode,
98
104
  validatePartitaIva
99
- } from "./chunk-T6G2F2BK.mjs";
105
+ } from "./chunk-HJT7TXGG.mjs";
106
+ import {
107
+ dateFormatLocale,
108
+ formatDate
109
+ } from "./chunk-RW6XZGZG.mjs";
100
110
  import {
101
111
  useOfflineState
102
112
  } from "./chunk-OY65RYD3.mjs";
@@ -104,22 +114,24 @@ import {
104
114
  EndpointCreator,
105
115
  ModuleRegistry,
106
116
  Modules,
107
- RehydrationFactory,
108
- getI18nLink,
109
- useI18nDateFnsLocale,
110
- useI18nLocale,
111
- useI18nRouter,
112
- useI18nTranslations
113
- } from "./chunk-N2BFT7KI.mjs";
117
+ RehydrationFactory
118
+ } from "./chunk-W7U6O3OE.mjs";
114
119
  import {
115
120
  CURRENT_USER_STORAGE_KEY
116
- } from "./chunk-BE6UMM5X.mjs";
121
+ } from "./chunk-47HNJQ7U.mjs";
117
122
  import {
118
123
  isOfflineConfigured
119
124
  } from "./chunk-4ZJIUTIV.mjs";
120
125
  import {
121
126
  ENV
122
- } from "./chunk-YMCL3JXZ.mjs";
127
+ } from "./chunk-YPBIPE2B.mjs";
128
+ import {
129
+ getI18nLink,
130
+ useI18nDateFnsLocale,
131
+ useI18nLocale,
132
+ useI18nRouter,
133
+ useI18nTranslations
134
+ } from "./chunk-743M4TIB.mjs";
123
135
  import {
124
136
  __name
125
137
  } from "./chunk-PAWJFY3S.mjs";
@@ -3779,16 +3791,6 @@ __name(TooltipContent, "TooltipContent");
3779
3791
 
3780
3792
  // src/shadcnui/ui/sidebar.tsx
3781
3793
  import { PanelLeftIcon } from "lucide-react";
3782
-
3783
- // src/utils/map-thenable.ts
3784
- function mapThenable(thenable, map) {
3785
- return new Promise((resolve, reject) => {
3786
- thenable.then((value) => resolve(map(value)), reject);
3787
- });
3788
- }
3789
- __name(mapThenable, "mapThenable");
3790
-
3791
- // src/shadcnui/ui/sidebar.tsx
3792
3794
  import { jsx as jsx40, jsxs as jsxs22 } from "react/jsx-runtime";
3793
3795
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
3794
3796
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
@@ -6765,7 +6767,7 @@ __name(useHeaderLogo, "useHeaderLogo");
6765
6767
 
6766
6768
  // src/components/navigations/Breadcrumb.tsx
6767
6769
  import { useTranslations as useTranslations57 } from "next-intl";
6768
- import { Fragment as Fragment22, useState as useState49 } from "react";
6770
+ import { Fragment as Fragment23, useState as useState49 } from "react";
6769
6771
  import { ChevronDownIcon as ChevronDownIcon8 } from "lucide-react";
6770
6772
 
6771
6773
  // src/hooks/TableGeneratorRegistry.ts
@@ -8205,7 +8207,7 @@ function matchesConfirmation(status, email, value) {
8205
8207
  __name(matchesConfirmation, "matchesConfirmation");
8206
8208
  function AccountDeletionAdminTriggerInternal({ user }) {
8207
8209
  const t = useTranslations3();
8208
- const locale = useI18nLocale();
8210
+ const dates = useDateFormatter();
8209
8211
  const [status, setStatus] = useState12();
8210
8212
  const [open, setOpen] = useState12(false);
8211
8213
  const [confirmation, setConfirmation] = useState12("");
@@ -8222,7 +8224,7 @@ function AccountDeletionAdminTriggerInternal({ user }) {
8222
8224
  };
8223
8225
  }, [user.id]);
8224
8226
  if (!status) return null;
8225
- const formatDate3 = /* @__PURE__ */ __name((date) => date.toLocaleDateString(locale, { day: "numeric", month: "long", year: "numeric" }), "formatDate");
8227
+ const formatDate3 = /* @__PURE__ */ __name((date) => dates.format(date, "dateLong"), "formatDate");
8226
8228
  if (status.scheduledAt) {
8227
8229
  return /* @__PURE__ */ jsx63("span", { className: "text-destructive text-xs font-medium", children: t("accountDeletion.admin.pending", { date: formatDate3(status.scheduledAt) }) });
8228
8230
  }
@@ -9742,8 +9744,9 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9742
9744
  align = "start",
9743
9745
  className
9744
9746
  }) => {
9745
- const locale = useI18nLocale();
9747
+ const { locale } = useDateLocale();
9746
9748
  const dateFnsLocale = useI18nDateFnsLocale();
9749
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
9747
9750
  const [isOpen, setIsOpen] = useState22(false);
9748
9751
  const [displayMonth, setDisplayMonth] = useState22(() => value || /* @__PURE__ */ new Date());
9749
9752
  const dateFormatter = useMemo12(
@@ -9881,7 +9884,7 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9881
9884
  onSelect: handleCalendarSelect,
9882
9885
  disabled: (date) => minDate && date < minDate ? true : false,
9883
9886
  locale: dateFnsLocale,
9884
- weekStartsOn: 1,
9887
+ weekStartsOn,
9885
9888
  month: displayMonth,
9886
9889
  onMonthChange: setDisplayMonth
9887
9890
  }
@@ -9891,7 +9894,6 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9891
9894
  }, "DatePickerPopover");
9892
9895
 
9893
9896
  // src/components/forms/DateRangeSelector.tsx
9894
- import { format } from "date-fns";
9895
9897
  import { CalendarIcon as CalendarIcon2 } from "lucide-react";
9896
9898
  import { useTranslations as useTranslations18 } from "next-intl";
9897
9899
  import { useEffect as useEffect17, useState as useState23 } from "react";
@@ -9905,7 +9907,9 @@ function nextDateRange(params) {
9905
9907
  __name(nextDateRange, "nextDateRange");
9906
9908
  function DateRangeSelector({ onDateChange, avoidSettingDates, showPreviousMonth }) {
9907
9909
  const t = useTranslations18();
9910
+ const { format } = useDateFormatter();
9908
9911
  const dateFnsLocale = useI18nDateFnsLocale();
9912
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
9909
9913
  const [date, setDate] = useState23(
9910
9914
  avoidSettingDates ? void 0 : {
9911
9915
  from: new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth(), 1),
@@ -9938,11 +9942,10 @@ function DateRangeSelector({ onDateChange, avoidSettingDates, showPreviousMonth
9938
9942
  children: [
9939
9943
  /* @__PURE__ */ jsx87(CalendarIcon2, {}),
9940
9944
  date?.from ? date.to ? /* @__PURE__ */ jsxs48(Fragment10, { children: [
9941
- format(date.from, "d MMM yyyy", { locale: dateFnsLocale }),
9942
- " -",
9943
- " ",
9944
- format(date.to, "d MMM yyyy", { locale: dateFnsLocale })
9945
- ] }) : format(date.from, "d MMM yyyy", { locale: dateFnsLocale }) : /* @__PURE__ */ jsx87("span", { children: t("ui.labels.pick_a_date") })
9945
+ format(date.from, "dateMedium"),
9946
+ " - ",
9947
+ format(date.to, "dateMedium")
9948
+ ] }) : format(date.from, "dateMedium") : /* @__PURE__ */ jsx87("span", { children: t("ui.labels.pick_a_date") })
9946
9949
  ]
9947
9950
  }
9948
9951
  ) });
@@ -9962,11 +9965,10 @@ function DateRangeSelector({ onDateChange, avoidSettingDates, showPreviousMonth
9962
9965
  children: [
9963
9966
  /* @__PURE__ */ jsx87(CalendarIcon2, {}),
9964
9967
  date?.from ? date.to ? /* @__PURE__ */ jsxs48(Fragment10, { children: [
9965
- format(date.from, "d MMM yyyy", { locale: dateFnsLocale }),
9966
- " -",
9967
- " ",
9968
- format(date.to, "d MMM yyyy", { locale: dateFnsLocale })
9969
- ] }) : format(date.from, "d MMM yyyy", { locale: dateFnsLocale }) : /* @__PURE__ */ jsx87("span", { children: t("ui.labels.pick_a_date") })
9968
+ format(date.from, "dateMedium"),
9969
+ " - ",
9970
+ format(date.to, "dateMedium")
9971
+ ] }) : format(date.from, "dateMedium") : /* @__PURE__ */ jsx87("span", { children: t("ui.labels.pick_a_date") })
9970
9972
  ]
9971
9973
  }
9972
9974
  ),
@@ -9978,7 +9980,9 @@ function DateRangeSelector({ onDateChange, avoidSettingDates, showPreviousMonth
9978
9980
  defaultMonth: date?.from ?? (showPreviousMonth ? new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth() - 1, 1) : void 0),
9979
9981
  selected: date,
9980
9982
  onSelect: handleSelect,
9981
- numberOfMonths: 2
9983
+ numberOfMonths: 2,
9984
+ locale: dateFnsLocale,
9985
+ weekStartsOn
9982
9986
  }
9983
9987
  ),
9984
9988
  /* @__PURE__ */ jsx87(
@@ -10149,6 +10153,7 @@ function EditorSheet({
10149
10153
  form,
10150
10154
  onSubmit,
10151
10155
  onBeforeSubmit,
10156
+ onSubmitError,
10152
10157
  onReset,
10153
10158
  isFormDirty: isFormDirtyProp,
10154
10159
  entityType,
@@ -10224,6 +10229,7 @@ function EditorSheet({
10224
10229
  }
10225
10230
  }
10226
10231
  } catch (error) {
10232
+ if (onSubmitError?.(error)) return;
10227
10233
  errorToast({
10228
10234
  title: isEdit ? t("generic.errors.update") : t("generic.errors.create"),
10229
10235
  error
@@ -10233,6 +10239,7 @@ function EditorSheet({
10233
10239
  [
10234
10240
  onSubmit,
10235
10241
  onBeforeSubmit,
10242
+ onSubmitError,
10236
10243
  setOpen,
10237
10244
  onSuccess,
10238
10245
  onSaved,
@@ -10868,7 +10875,7 @@ import { useRef as useRef18 } from "react";
10868
10875
  import dynamic from "next/dynamic";
10869
10876
  import React18 from "react";
10870
10877
  import { jsx as jsx91 } from "react/jsx-runtime";
10871
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-UO4ZRCUM.mjs"), {
10878
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-Z5LDF47Z.mjs"), {
10872
10879
  ssr: false
10873
10880
  });
10874
10881
  var BlockNoteEditorContainer = React18.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -11026,8 +11033,9 @@ function FormDate({
11026
11033
  futureYears
11027
11034
  }) {
11028
11035
  const t = useI18nTranslations();
11029
- const locale = useI18nLocale();
11036
+ const { locale } = useDateLocale();
11030
11037
  const dateFnsLocale = useI18nDateFnsLocale();
11038
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
11031
11039
  const [open, setOpen] = useState27(false);
11032
11040
  const [displayMonth, setDisplayMonth] = useState27(() => {
11033
11041
  const currentValue = form.getValues(id);
@@ -11122,7 +11130,7 @@ function FormDate({
11122
11130
  },
11123
11131
  disabled: (date) => minDate && date < minDate ? true : false,
11124
11132
  locale: dateFnsLocale,
11125
- weekStartsOn: 1,
11133
+ weekStartsOn,
11126
11134
  month: displayMonth,
11127
11135
  onMonthChange: setDisplayMonth,
11128
11136
  startMonth: new Date(1900, 0),
@@ -11153,6 +11161,33 @@ __name(FormDate, "FormDate");
11153
11161
  // src/components/forms/FormDateTime.tsx
11154
11162
  import { Calendar as CalendarIcon4, CircleXIcon as CircleXIcon3 } from "lucide-react";
11155
11163
  import { useMemo as useMemo15, useState as useState28 } from "react";
11164
+
11165
+ // src/components/forms/time-cycle.ts
11166
+ function to24Hour(hour12, period) {
11167
+ const base = hour12 % 12;
11168
+ return period === "pm" ? base + 12 : base;
11169
+ }
11170
+ __name(to24Hour, "to24Hour");
11171
+ function from24Hour(hour24) {
11172
+ const period = hour24 >= 12 ? "pm" : "am";
11173
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
11174
+ return { hour12, period };
11175
+ }
11176
+ __name(from24Hour, "from24Hour");
11177
+ function dayPeriodOf(formatter, date) {
11178
+ return formatter.formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
11179
+ }
11180
+ __name(dayPeriodOf, "dayPeriodOf");
11181
+ function dayPeriodLabels(locale) {
11182
+ const formatter = new Intl.DateTimeFormat(locale, { hour: "numeric", hourCycle: "h12" });
11183
+ return {
11184
+ am: dayPeriodOf(formatter, new Date(2e3, 0, 1, 1, 0)),
11185
+ pm: dayPeriodOf(formatter, new Date(2e3, 0, 1, 13, 0))
11186
+ };
11187
+ }
11188
+ __name(dayPeriodLabels, "dayPeriodLabels");
11189
+
11190
+ // src/components/forms/FormDateTime.tsx
11156
11191
  import { jsx as jsx95, jsxs as jsxs54 } from "react/jsx-runtime";
11157
11192
  function snapToFiveMinutes(date) {
11158
11193
  const snapped = new Date(date);
@@ -11176,24 +11211,15 @@ function FormDateTime({
11176
11211
  }) {
11177
11212
  const [open, setOpen] = useState28(false);
11178
11213
  const t = useI18nTranslations();
11179
- const locale = useI18nLocale();
11214
+ const { format, locale, twelveHourClock } = useDateFormatter();
11180
11215
  const dateFnsLocale = useI18nDateFnsLocale();
11216
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
11181
11217
  const [displayMonth, setDisplayMonth] = useState28(() => {
11182
11218
  const currentValue = form.getValues(id);
11183
11219
  return currentValue || defaultMonth || reference?.date || /* @__PURE__ */ new Date();
11184
11220
  });
11185
- const dateTimeFormatter = useMemo15(
11186
- () => new Intl.DateTimeFormat(locale, {
11187
- year: "numeric",
11188
- month: "long",
11189
- day: "numeric",
11190
- hour: "2-digit",
11191
- minute: "2-digit",
11192
- hour12: false
11193
- }),
11194
- [locale]
11195
- );
11196
- const formatDateTime = /* @__PURE__ */ __name((date) => dateTimeFormatter.format(date), "formatDateTime");
11221
+ const formatDateTime = /* @__PURE__ */ __name((date) => format(date, "dateTimeLong"), "formatDateTime");
11222
+ const periodLabels = useMemo15(() => dayPeriodLabels(locale), [locale]);
11197
11223
  const initialTime = reference ? snapToFiveMinutes(reference.date) : /* @__PURE__ */ new Date();
11198
11224
  const [selectedHours, setSelectedHours] = useState28(initialTime.getHours());
11199
11225
  const [selectedMinutes, setSelectedMinutes] = useState28(roundToNearestFiveMinutes(initialTime.getMinutes()));
@@ -11205,13 +11231,23 @@ function FormDateTime({
11205
11231
  reference: "rounded-(--cell-radius) ring-1 ring-primary ring-offset-1 ring-offset-background",
11206
11232
  marked: "[&>button]:underline [&>button]:decoration-2 [&>button]:underline-offset-4"
11207
11233
  };
11208
- const hoursOptions = Array.from({ length: 24 }, (_, i) => {
11234
+ const hoursOptions = twelveHourClock ? Array.from({ length: 12 }, (_, i) => {
11235
+ const hour = i + 1;
11236
+ return {
11237
+ value: hour,
11238
+ label: hour.toString()
11239
+ };
11240
+ }) : Array.from({ length: 24 }, (_, i) => {
11209
11241
  const hour = i;
11210
11242
  return {
11211
11243
  value: hour,
11212
11244
  label: hour.toString().padStart(2, "0")
11213
11245
  };
11214
11246
  });
11247
+ const periodOptions = [
11248
+ { value: "am", label: periodLabels.am },
11249
+ { value: "pm", label: periodLabels.pm }
11250
+ ];
11215
11251
  const minutesOptions = Array.from({ length: 12 }, (_, i) => {
11216
11252
  const minute = i * 5;
11217
11253
  return {
@@ -11221,6 +11257,7 @@ function FormDateTime({
11221
11257
  });
11222
11258
  const hoursItems = Object.fromEntries(hoursOptions.map((option) => [String(option.value), option.label]));
11223
11259
  const minutesItems = Object.fromEntries(minutesOptions.map((option) => [String(option.value), option.label]));
11260
+ const periodItems = Object.fromEntries(periodOptions.map((option) => [option.value, option.label]));
11224
11261
  function roundToNearestFiveMinutes(minutes) {
11225
11262
  return Math.round(minutes / 5) * 5 % 60;
11226
11263
  }
@@ -11234,6 +11271,8 @@ function FormDateTime({
11234
11271
  setSelectedHours(referenceDate.getHours());
11235
11272
  setSelectedMinutes(referenceDate.getMinutes());
11236
11273
  }, "handleUseReference");
11274
+ const currentHours = /* @__PURE__ */ __name((value) => value ? new Date(value).getHours() : selectedHours, "currentHours");
11275
+ const currentMinutes = /* @__PURE__ */ __name((value) => value ? roundToNearestFiveMinutes(new Date(value).getMinutes()) : selectedMinutes, "currentMinutes");
11237
11276
  const handleTimeChange = /* @__PURE__ */ __name((hours, minutes) => {
11238
11277
  const currentDate = form.getValues(id);
11239
11278
  if (currentDate) {
@@ -11300,7 +11339,7 @@ function FormDateTime({
11300
11339
  },
11301
11340
  disabled: (date) => minDate && date < minDate ? true : false,
11302
11341
  locale: dateFnsLocale,
11303
- weekStartsOn: 1,
11342
+ weekStartsOn,
11304
11343
  startMonth: new Date(1900, 0),
11305
11344
  endMonth: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 11),
11306
11345
  modifiers: dayModifiers,
@@ -11322,18 +11361,18 @@ function FormDateTime({
11322
11361
  Select,
11323
11362
  {
11324
11363
  items: hoursItems,
11325
- value: String(field.value ? new Date(field.value).getHours() : selectedHours),
11364
+ value: String(
11365
+ twelveHourClock ? from24Hour(currentHours(field.value)).hour12 : currentHours(field.value)
11366
+ ),
11326
11367
  onValueChange: (value) => {
11327
11368
  if (!value) return;
11328
- const hours = parseInt(value);
11369
+ const picked = parseInt(value);
11370
+ const hours = twelveHourClock ? to24Hour(picked, from24Hour(currentHours(field.value)).period) : picked;
11329
11371
  setSelectedHours(hours);
11330
- handleTimeChange(
11331
- hours,
11332
- field.value ? roundToNearestFiveMinutes(new Date(field.value).getMinutes()) : selectedMinutes
11333
- );
11372
+ handleTimeChange(hours, currentMinutes(field.value));
11334
11373
  },
11335
11374
  children: [
11336
- /* @__PURE__ */ jsx95(SelectTrigger, { id: "hours-select", className: "w-[70px]", children: /* @__PURE__ */ jsx95(SelectValue, {}) }),
11375
+ /* @__PURE__ */ jsx95(SelectTrigger, { id: "hours-select", "data-testid": "form-datetime-hours", className: "w-[70px]", children: /* @__PURE__ */ jsx95(SelectValue, {}) }),
11337
11376
  /* @__PURE__ */ jsx95(SelectContent, { children: hoursOptions.map((option) => /* @__PURE__ */ jsx95(SelectItem, { value: String(option.value), children: option.label }, option.value)) })
11338
11377
  ]
11339
11378
  }
@@ -11346,21 +11385,39 @@ function FormDateTime({
11346
11385
  Select,
11347
11386
  {
11348
11387
  items: minutesItems,
11349
- value: String(
11350
- field.value ? roundToNearestFiveMinutes(new Date(field.value).getMinutes()) : selectedMinutes
11351
- ),
11388
+ value: String(currentMinutes(field.value)),
11352
11389
  onValueChange: (value) => {
11353
11390
  if (!value) return;
11354
11391
  const minutes = parseInt(value);
11355
11392
  setSelectedMinutes(minutes);
11356
- handleTimeChange(field.value ? new Date(field.value).getHours() : selectedHours, minutes);
11393
+ handleTimeChange(currentHours(field.value), minutes);
11357
11394
  },
11358
11395
  children: [
11359
- /* @__PURE__ */ jsx95(SelectTrigger, { id: "minutes-select", className: "w-[70px]", children: /* @__PURE__ */ jsx95(SelectValue, {}) }),
11396
+ /* @__PURE__ */ jsx95(SelectTrigger, { id: "minutes-select", "data-testid": "form-datetime-minutes", className: "w-[70px]", children: /* @__PURE__ */ jsx95(SelectValue, {}) }),
11360
11397
  /* @__PURE__ */ jsx95(SelectContent, { children: minutesOptions.map((option) => /* @__PURE__ */ jsx95(SelectItem, { value: String(option.value), children: option.label }, option.value)) })
11361
11398
  ]
11362
11399
  }
11363
11400
  )
11401
+ ] }),
11402
+ twelveHourClock && /* @__PURE__ */ jsxs54("div", { className: "flex flex-col space-y-2", children: [
11403
+ /* @__PURE__ */ jsx95(Label, { htmlFor: "period-select", children: t(`common.dayPeriod`) }),
11404
+ /* @__PURE__ */ jsxs54(
11405
+ Select,
11406
+ {
11407
+ items: periodItems,
11408
+ value: from24Hour(currentHours(field.value)).period,
11409
+ onValueChange: (value) => {
11410
+ if (!value) return;
11411
+ const hours = to24Hour(from24Hour(currentHours(field.value)).hour12, value);
11412
+ setSelectedHours(hours);
11413
+ handleTimeChange(hours, currentMinutes(field.value));
11414
+ },
11415
+ children: [
11416
+ /* @__PURE__ */ jsx95(SelectTrigger, { id: "period-select", "data-testid": "form-datetime-period", className: "w-[70px]", children: /* @__PURE__ */ jsx95(SelectValue, {}) }),
11417
+ /* @__PURE__ */ jsx95(SelectContent, { children: periodOptions.map((option) => /* @__PURE__ */ jsx95(SelectItem, { value: option.value, children: option.label }, option.value)) })
11418
+ ]
11419
+ }
11420
+ )
11364
11421
  ] })
11365
11422
  ] }),
11366
11423
  /* @__PURE__ */ jsxs54("div", { className: "mt-2 flex flex-row gap-x-2", children: [
@@ -13769,7 +13826,7 @@ import { createContext as createContext18, useCallback as useCallback23, useCont
13769
13826
 
13770
13827
  // src/features/notification/components/notifications/Notification.tsx
13771
13828
  import { useTranslations as useTranslations48 } from "next-intl";
13772
- import { useEffect as useEffect29, useState as useState39 } from "react";
13829
+ import { Suspense, useEffect as useEffect29, useState as useState39 } from "react";
13773
13830
 
13774
13831
  // src/features/notification/components/notifications/NotificationIcon.tsx
13775
13832
  import { ArchiveIcon, AudioLinesIcon, BellIcon } from "lucide-react";
@@ -13798,7 +13855,7 @@ function NotificationIcon({ notificationType, className }) {
13798
13855
  __name(NotificationIcon, "NotificationIcon");
13799
13856
 
13800
13857
  // src/features/notification/components/notifications/Notification.tsx
13801
- import { jsx as jsx145, jsxs as jsxs82 } from "react/jsx-runtime";
13858
+ import { Fragment as Fragment22, jsx as jsx145, jsxs as jsxs82 } from "react/jsx-runtime";
13802
13859
  var generateNotificationData = /* @__PURE__ */ __name((params) => {
13803
13860
  const response = {};
13804
13861
  response.actor = params.notification.actor;
@@ -13807,7 +13864,12 @@ var generateNotificationData = /* @__PURE__ */ __name((params) => {
13807
13864
  }
13808
13865
  return response;
13809
13866
  }, "generateNotificationData");
13810
- function NotificationToast(notification, t, generateUrl, reouter, locale) {
13867
+ function NotificationToastTime({ date }) {
13868
+ const { format } = useDateFormatter();
13869
+ return /* @__PURE__ */ jsx145(Fragment22, { children: format(new Date(date), "dateTime") });
13870
+ }
13871
+ __name(NotificationToastTime, "NotificationToastTime");
13872
+ function NotificationToast(notification, t, generateUrl, reouter, dateLocaleSource = null) {
13811
13873
  const data = generateNotificationData({ notification, generateUrl });
13812
13874
  return {
13813
13875
  title: t(`notification.${notification.notificationType}.title`),
@@ -13820,7 +13882,7 @@ function NotificationToast(notification, t, generateUrl, reouter, locale) {
13820
13882
  title: data.title,
13821
13883
  message: notification.message ?? ""
13822
13884
  }) }),
13823
- /* @__PURE__ */ jsx145("div", { className: "text-muted-foreground mt-1 w-full text-xs", children: formatDate(new Date(notification.createdAt), "dateTime", dateFormatLocale(locale)) })
13885
+ /* @__PURE__ */ jsx145("div", { className: "text-muted-foreground mt-1 w-full text-xs", children: /* @__PURE__ */ jsx145(DateLocaleSourceProvider, { value: dateLocaleSource, children: /* @__PURE__ */ jsx145(Suspense, { fallback: null, children: /* @__PURE__ */ jsx145(NotificationToastTime, { date: notification.createdAt }) }) }) })
13824
13886
  ] })
13825
13887
  ] }),
13826
13888
  action: data.url ? {
@@ -13832,11 +13894,16 @@ function NotificationToast(notification, t, generateUrl, reouter, locale) {
13832
13894
  };
13833
13895
  }
13834
13896
  __name(NotificationToast, "NotificationToast");
13897
+ function NotificationMenuItemTime({ date }) {
13898
+ const { locale } = useDateFormatter();
13899
+ const now = useMountedNow();
13900
+ return /* @__PURE__ */ jsx145(Fragment22, { children: now ? formatDate(new Date(date), "default", locale, now) : "" });
13901
+ }
13902
+ __name(NotificationMenuItemTime, "NotificationMenuItemTime");
13835
13903
  function NotificationMenuItem({ notification, closePopover }) {
13836
13904
  const generateUrl = usePageUrlGenerator();
13837
13905
  const [isRead, setIsRead] = useState39(false);
13838
13906
  const t = useTranslations48();
13839
- const dateLocale = dateFormatLocale(useI18nLocale());
13840
13907
  useEffect29(() => {
13841
13908
  setIsRead(notification.isRead);
13842
13909
  }, []);
@@ -13858,7 +13925,7 @@ function NotificationMenuItem({ notification, closePopover }) {
13858
13925
  title: data.title,
13859
13926
  message: notification.message ?? ""
13860
13927
  }) }),
13861
- /* @__PURE__ */ jsx145("div", { className: "text-muted-foreground mt-0.5 text-xs", children: formatDate(new Date(notification.createdAt), "default", dateLocale) })
13928
+ /* @__PURE__ */ jsx145("div", { className: "text-muted-foreground mt-0.5 text-xs", children: /* @__PURE__ */ jsx145(Suspense, { fallback: null, children: /* @__PURE__ */ jsx145(NotificationMenuItemTime, { date: notification.createdAt }) }) })
13862
13929
  ] }),
13863
13930
  !isRead && /* @__PURE__ */ jsx145("span", { className: "bg-primary mt-1.5 size-2 shrink-0 rounded-full", "aria-hidden": true })
13864
13931
  ]
@@ -13875,7 +13942,7 @@ import { jsx as jsx146 } from "react/jsx-runtime";
13875
13942
  var NotificationContext = createContext18(void 0);
13876
13943
  var NotificationContextProvider = /* @__PURE__ */ __name(({ children }) => {
13877
13944
  const t = useTranslations49();
13878
- const locale = useI18nLocale();
13945
+ const dateLocaleSource = useDateLocaleSource();
13879
13946
  const tRef = useRef23(t);
13880
13947
  tRef.current = t;
13881
13948
  const router = useI18nRouter();
@@ -13962,7 +14029,7 @@ var NotificationContextProvider = /* @__PURE__ */ __name(({ children }) => {
13962
14029
  }
13963
14030
  }, []);
13964
14031
  const generateToastNotification = /* @__PURE__ */ __name((notification, t2, generateUrl) => {
13965
- return NotificationToast(notification, t2, generateUrl, router, locale);
14032
+ return NotificationToast(notification, t2, generateUrl, router, dateLocaleSource);
13966
14033
  }, "generateToastNotification");
13967
14034
  const generateNotification = /* @__PURE__ */ __name((notification, closePopover) => {
13968
14035
  return /* @__PURE__ */ jsx146(NotificationMenuItem, { notification, closePopover });
@@ -15651,7 +15718,7 @@ function useSocket({ token, paused = false }) {
15651
15718
  __name(useSocket, "useSocket");
15652
15719
 
15653
15720
  // src/components/navigations/Breadcrumb.tsx
15654
- import { Fragment as Fragment23, jsx as jsx161, jsxs as jsxs87 } from "react/jsx-runtime";
15721
+ import { Fragment as Fragment24, jsx as jsx161, jsxs as jsxs87 } from "react/jsx-runtime";
15655
15722
  var ITEMS_TO_DISPLAY = 4;
15656
15723
  function BreadcrumbDesktop({
15657
15724
  items,
@@ -15662,24 +15729,24 @@ function BreadcrumbDesktop({
15662
15729
  const t = useTranslations57();
15663
15730
  const [open, setOpen] = useState49(false);
15664
15731
  return /* @__PURE__ */ jsx161(Breadcrumb, { children: /* @__PURE__ */ jsxs87(BreadcrumbList, { children: [
15665
- showRoot && /* @__PURE__ */ jsxs87(Fragment23, { children: [
15732
+ showRoot && /* @__PURE__ */ jsxs87(Fragment24, { children: [
15666
15733
  /* @__PURE__ */ jsx161(BreadcrumbItem, { children: /* @__PURE__ */ jsx161(Link, { href: generateUrl({ page: `/` }), children: rootLabel }) }),
15667
15734
  items.length > 0 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15668
15735
  ] }),
15669
- items.length > ITEMS_TO_DISPLAY ? /* @__PURE__ */ jsxs87(Fragment23, { children: [
15670
- /* @__PURE__ */ jsx161(BreadcrumbItem, { children: items[0].href ? /* @__PURE__ */ jsx161(Link, { href: items[0].href, onClick: items[0].onClick, children: items[0].name }) : /* @__PURE__ */ jsx161(Fragment23, { children: items[0].name }) }),
15736
+ items.length > ITEMS_TO_DISPLAY ? /* @__PURE__ */ jsxs87(Fragment24, { children: [
15737
+ /* @__PURE__ */ jsx161(BreadcrumbItem, { children: items[0].href ? /* @__PURE__ */ jsx161(Link, { href: items[0].href, onClick: items[0].onClick, children: items[0].name }) : /* @__PURE__ */ jsx161(Fragment24, { children: items[0].name }) }),
15671
15738
  /* @__PURE__ */ jsx161(BreadcrumbSeparator, {}),
15672
15739
  /* @__PURE__ */ jsx161(BreadcrumbItem, { children: /* @__PURE__ */ jsxs87(DropdownMenu, { open, onOpenChange: setOpen, children: [
15673
15740
  /* @__PURE__ */ jsx161(DropdownMenuTrigger, { className: "flex items-center gap-1", "aria-label": t("ui.labels.toggle_menu"), children: /* @__PURE__ */ jsx161(BreadcrumbEllipsis, { className: "h-4 w-4", label: t("ui.labels.more") }) }),
15674
15741
  /* @__PURE__ */ jsx161(DropdownMenuContent, { align: "start", children: items.slice(1, -ITEMS_TO_DISPLAY + 2).map((item, index) => /* @__PURE__ */ jsx161(DropdownMenuItem, { children: /* @__PURE__ */ jsx161(Link, { href: item.href ? item.href : "#", onClick: item.onClick, children: item.name }) }, index)) })
15675
15742
  ] }) }),
15676
15743
  /* @__PURE__ */ jsx161(BreadcrumbSeparator, {}),
15677
- items.slice(-ITEMS_TO_DISPLAY + 2).map((item, index) => /* @__PURE__ */ jsxs87(Fragment22, { children: [
15678
- /* @__PURE__ */ jsx161(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsx161(Link, { href: item.href, onClick: item.onClick, children: item.name }) : /* @__PURE__ */ jsx161(Fragment23, { children: item.name }) }),
15744
+ items.slice(-ITEMS_TO_DISPLAY + 2).map((item, index) => /* @__PURE__ */ jsxs87(Fragment23, { children: [
15745
+ /* @__PURE__ */ jsx161(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsx161(Link, { href: item.href, onClick: item.onClick, children: item.name }) : /* @__PURE__ */ jsx161(Fragment24, { children: item.name }) }),
15679
15746
  index < items.slice(-ITEMS_TO_DISPLAY + 2).length - 1 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15680
15747
  ] }, index))
15681
- ] }) : /* @__PURE__ */ jsx161(Fragment23, { children: items.map((item, index) => /* @__PURE__ */ jsxs87(Fragment22, { children: [
15682
- /* @__PURE__ */ jsx161(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsx161(Link, { href: item.href, onClick: item.onClick, children: item.name }) : /* @__PURE__ */ jsx161(Fragment23, { children: item.name }) }),
15748
+ ] }) : /* @__PURE__ */ jsx161(Fragment24, { children: items.map((item, index) => /* @__PURE__ */ jsxs87(Fragment23, { children: [
15749
+ /* @__PURE__ */ jsx161(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsx161(Link, { href: item.href, onClick: item.onClick, children: item.name }) : /* @__PURE__ */ jsx161(Fragment24, { children: item.name }) }),
15683
15750
  index < items.length - 1 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15684
15751
  ] }, index)) })
15685
15752
  ] }) });
@@ -15843,7 +15910,7 @@ __name(Header, "Header");
15843
15910
  // src/components/navigations/MobileNavigationBar.tsx
15844
15911
  import { useTranslations as useTranslations59 } from "next-intl";
15845
15912
  import { usePathname as usePathname2 } from "next/navigation";
15846
- import { Fragment as Fragment24, jsx as jsx164, jsxs as jsxs90 } from "react/jsx-runtime";
15913
+ import { Fragment as Fragment25, jsx as jsx164, jsxs as jsxs90 } from "react/jsx-runtime";
15847
15914
  function isActiveHref(pathname, href) {
15848
15915
  if (href === "/") return pathname === "/";
15849
15916
  return pathname === href || pathname.startsWith(`${href}/`);
@@ -15855,7 +15922,7 @@ var slotClass = cn(
15855
15922
  "transition-colors"
15856
15923
  );
15857
15924
  function SlotContent({ item }) {
15858
- if (item.render) return /* @__PURE__ */ jsx164(Fragment24, { children: item.render });
15925
+ if (item.render) return /* @__PURE__ */ jsx164(Fragment25, { children: item.render });
15859
15926
  const Icon = item.icon;
15860
15927
  return Icon ? /* @__PURE__ */ jsx164(Icon, { className: "size-6" }) : null;
15861
15928
  }
@@ -15876,7 +15943,7 @@ function MobileNavigationBar({ className } = {}) {
15876
15943
  children: items.map((item) => {
15877
15944
  const active = item.href ? isActiveHref(pathname, item.href) : false;
15878
15945
  const tone = active ? "text-primary" : "text-muted-foreground";
15879
- const body = /* @__PURE__ */ jsxs90(Fragment24, { children: [
15946
+ const body = /* @__PURE__ */ jsxs90(Fragment25, { children: [
15880
15947
  active && /* @__PURE__ */ jsx164("span", { "aria-hidden": true, className: "bg-primary absolute inset-x-0 top-0 h-0.5" }),
15881
15948
  /* @__PURE__ */ jsx164(SlotContent, { item })
15882
15949
  ] });
@@ -16292,7 +16359,7 @@ __name(ReactMarkdownContainer, "ReactMarkdownContainer");
16292
16359
  // src/components/containers/RoundPageContainerTitle.tsx
16293
16360
  import { InfoIcon as InfoIcon2 } from "lucide-react";
16294
16361
  import { useTranslations as useTranslations62 } from "next-intl";
16295
- import { Fragment as Fragment25, jsx as jsx171, jsxs as jsxs95 } from "react/jsx-runtime";
16362
+ import { Fragment as Fragment26, jsx as jsx171, jsxs as jsxs95 } from "react/jsx-runtime";
16296
16363
  var HEADER_ROW_MIN_H = "min-h-[53px]";
16297
16364
  function RoundPageContainerTitle({
16298
16365
  module,
@@ -16352,7 +16419,7 @@ function RoundPageContainerTitle({
16352
16419
  module && module.icon ? /* @__PURE__ */ jsx171(module.icon, { className: "text-primary h-5 w-5 shrink-0" }) : title.icon,
16353
16420
  /* @__PURE__ */ jsxs95("span", { className: "truncate", children: [
16354
16421
  title.type,
16355
- title.element && /* @__PURE__ */ jsxs95(Fragment25, { children: [
16422
+ title.element && /* @__PURE__ */ jsxs95(Fragment26, { children: [
16356
16423
  /* @__PURE__ */ jsx171("span", { "aria-hidden": true, children: " \xB7 " }),
16357
16424
  /* @__PURE__ */ jsx171("span", { className: "text-primary font-semibold", children: title.element })
16358
16425
  ] })
@@ -16392,8 +16459,8 @@ __name(RoundPageContainerTitle, "RoundPageContainerTitle");
16392
16459
  // src/components/containers/RoundPageContainer.tsx
16393
16460
  import { useTranslations as useTranslations63 } from "next-intl";
16394
16461
  import { useSearchParams } from "next/navigation";
16395
- import { Fragment as Fragment26, useCallback as useCallback28, useEffect as useEffect45, useMemo as useMemo23, useRef as useRef29, useState as useState55 } from "react";
16396
- import { Fragment as Fragment27, jsx as jsx172, jsxs as jsxs96 } from "react/jsx-runtime";
16462
+ import { Fragment as Fragment27, useCallback as useCallback28, useEffect as useEffect45, useMemo as useMemo23, useRef as useRef29, useState as useState55 } from "react";
16463
+ import { Fragment as Fragment28, jsx as jsx172, jsxs as jsxs96 } from "react/jsx-runtime";
16397
16464
  var DETAILS_COOKIE_NAME = "round_page_details_state";
16398
16465
  var DETAILS_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
16399
16466
  var railTriggerClass = cn(
@@ -16509,7 +16576,7 @@ function RoundPageContainer({
16509
16576
  const innerScrollY = mobileFlow ? `` : scrollY;
16510
16577
  const showMobileSectionPicker = (tabs?.length ?? 0) > 1;
16511
16578
  if (!isReady) {
16512
- return /* @__PURE__ */ jsxs96(Fragment27, { children: [
16579
+ return /* @__PURE__ */ jsxs96(Fragment28, { children: [
16513
16580
  /* @__PURE__ */ jsx172(
16514
16581
  Header,
16515
16582
  {
@@ -16547,7 +16614,7 @@ function RoundPageContainer({
16547
16614
  )
16548
16615
  ] });
16549
16616
  }
16550
- return /* @__PURE__ */ jsxs96(Fragment27, { children: [
16617
+ return /* @__PURE__ */ jsxs96(Fragment28, { children: [
16551
16618
  /* @__PURE__ */ jsx172(
16552
16619
  Header,
16553
16620
  {
@@ -16621,7 +16688,7 @@ function RoundPageContainer({
16621
16688
  railHeader && /* @__PURE__ */ jsx172("div", { children: railHeader }),
16622
16689
  /* @__PURE__ */ jsxs96(TabsList, { className: "flex h-auto w-full flex-col items-stretch gap-0.5 bg-transparent p-0", children: [
16623
16690
  ungrouped.map((tab) => /* @__PURE__ */ jsx172(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tabValue(tab))),
16624
- groups.map((group) => /* @__PURE__ */ jsxs96(Fragment26, { children: [
16691
+ groups.map((group) => /* @__PURE__ */ jsxs96(Fragment27, { children: [
16625
16692
  /* @__PURE__ */ jsx172(MicroLabel, { as: "span", role: "presentation", className: "block px-3 pt-3 pb-1", children: group.label }),
16626
16693
  group.items.map((tab) => /* @__PURE__ */ jsx172(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tabValue(tab)))
16627
16694
  ] }, group.label))
@@ -16712,7 +16779,7 @@ function RoundPageContainer({
16712
16779
  ),
16713
16780
  children: [
16714
16781
  header,
16715
- tabs ? /* @__PURE__ */ jsxs96(Fragment27, { children: [
16782
+ tabs ? /* @__PURE__ */ jsxs96(Fragment28, { children: [
16716
16783
  /* @__PURE__ */ jsxs96(
16717
16784
  Tabs,
16718
16785
  {
@@ -16817,7 +16884,7 @@ function RoundPageContainer({
16817
16884
  __name(RoundPageContainer, "RoundPageContainer");
16818
16885
 
16819
16886
  // src/components/containers/TabsContainer.tsx
16820
- import { Fragment as Fragment28, jsx as jsx173, jsxs as jsxs97 } from "react/jsx-runtime";
16887
+ import { Fragment as Fragment29, jsx as jsx173, jsxs as jsxs97 } from "react/jsx-runtime";
16821
16888
  function TabsContainer({
16822
16889
  tabs,
16823
16890
  defaultTab,
@@ -16862,7 +16929,7 @@ function TabsContainer({
16862
16929
  ),
16863
16930
  additionalComponent && additionalComponent
16864
16931
  ] }),
16865
- scrollAreaClassName ? /* @__PURE__ */ jsx173(ScrollArea, { className: scrollAreaClassName, children: validTabs.map((tab) => /* @__PURE__ */ jsx173(TabsContent, { value: tab.label, children: tab.content }, tab.label)) }) : /* @__PURE__ */ jsx173(Fragment28, { children: validTabs.map((tab) => /* @__PURE__ */ jsx173(TabsContent, { value: tab.label, children: tab.content }, tab.label)) })
16932
+ scrollAreaClassName ? /* @__PURE__ */ jsx173(ScrollArea, { className: scrollAreaClassName, children: validTabs.map((tab) => /* @__PURE__ */ jsx173(TabsContent, { value: tab.label, children: tab.content }, tab.label)) }) : /* @__PURE__ */ jsx173(Fragment29, { children: validTabs.map((tab) => /* @__PURE__ */ jsx173(TabsContent, { value: tab.label, children: tab.content }, tab.label)) })
16866
16933
  ] });
16867
16934
  }
16868
16935
  __name(TabsContainer, "TabsContainer");
@@ -17142,7 +17209,7 @@ __name(BlockNoteEditorMentionSuggestionMenu, "BlockNoteEditorMentionSuggestionMe
17142
17209
  import dynamic2 from "next/dynamic";
17143
17210
  import React29 from "react";
17144
17211
  import { jsx as jsx178 } from "react/jsx-runtime";
17145
- var BlockNoteViewer = dynamic2(() => import("./BlockNoteViewer-2TJZ6JET.mjs").then((m) => m.BlockNoteViewer), { ssr: false });
17212
+ var BlockNoteViewer = dynamic2(() => import("./BlockNoteViewer-TQ452ZYW.mjs").then((m) => m.BlockNoteViewer), { ssr: false });
17146
17213
  var BlockNoteViewerContainer = React29.memo(/* @__PURE__ */ __name(function ViewerContainer(props) {
17147
17214
  return /* @__PURE__ */ jsx178(BlockNoteViewer, { ...props });
17148
17215
  }, "ViewerContainer"));
@@ -17299,8 +17366,8 @@ var cellComponent = /* @__PURE__ */ __name((params) => {
17299
17366
  // src/components/tables/cells/cell.date.tsx
17300
17367
  import { jsx as jsx182 } from "react/jsx-runtime";
17301
17368
  function DateCell({ date }) {
17302
- const locale = useI18nLocale();
17303
- return /* @__PURE__ */ jsx182("span", { className: "text-muted-foreground text-xs", children: date.toLocaleDateString(locale, { dateStyle: "medium" }) });
17369
+ const { format } = useDateFormatter();
17370
+ return /* @__PURE__ */ jsx182("span", { className: "text-muted-foreground text-xs", children: format(date, "dateMedium") });
17304
17371
  }
17305
17372
  __name(DateCell, "DateCell");
17306
17373
  var cellDate = /* @__PURE__ */ __name((params) => {
@@ -17321,8 +17388,8 @@ var cellDate = /* @__PURE__ */ __name((params) => {
17321
17388
  // src/components/tables/cells/cell.dateTime.tsx
17322
17389
  import { jsx as jsx183 } from "react/jsx-runtime";
17323
17390
  function DateTimeCell({ date }) {
17324
- const locale = useI18nLocale();
17325
- return /* @__PURE__ */ jsx183("span", { className: "text-muted-foreground text-xs", children: date.toLocaleString(locale, { dateStyle: "medium", timeStyle: "short", hour12: false }) });
17391
+ const { format } = useDateFormatter();
17392
+ return /* @__PURE__ */ jsx183("span", { className: "text-muted-foreground text-xs", children: format(date, "dateTimeMedium") });
17326
17393
  }
17327
17394
  __name(DateTimeCell, "DateTimeCell");
17328
17395
  var cellDateTime = /* @__PURE__ */ __name((params) => {
@@ -17424,7 +17491,7 @@ function useJsonApiGet(params) {
17424
17491
  setLoading(true);
17425
17492
  setError(null);
17426
17493
  try {
17427
- const { JsonApiGet } = await import("./JsonApiRequest-ADLBJ5RX.mjs");
17494
+ const { JsonApiGet } = await import("./JsonApiRequest-WNPDS356.mjs");
17428
17495
  const language = navigator.language.split("-")[0] || "en";
17429
17496
  const apiResponse = await JsonApiGet({
17430
17497
  classKey: params.classKey,
@@ -17529,7 +17596,7 @@ function useJsonApiMutation(config) {
17529
17596
  setLoading(true);
17530
17597
  setError(null);
17531
17598
  try {
17532
- const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-ADLBJ5RX.mjs");
17599
+ const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-WNPDS356.mjs");
17533
17600
  const language = navigator.language.split("-")[0] || "en";
17534
17601
  let apiResponse;
17535
17602
  switch (config.method) {
@@ -17764,7 +17831,7 @@ __name(useSubscriptionStatus, "useSubscriptionStatus");
17764
17831
  // src/features/role/hooks/useRoleTableStructure.tsx
17765
17832
  import { useTranslations as useTranslations67 } from "next-intl";
17766
17833
  import { useMemo as useMemo29 } from "react";
17767
- import { Fragment as Fragment29, jsx as jsx189 } from "react/jsx-runtime";
17834
+ import { Fragment as Fragment30, jsx as jsx189 } from "react/jsx-runtime";
17768
17835
  var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
17769
17836
  const t = useTranslations67();
17770
17837
  const generateUrl = usePageUrlGenerator();
@@ -17801,7 +17868,7 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
17801
17868
  id: "description",
17802
17869
  accessorKey: "description",
17803
17870
  header: t(`role.fields.description.label`),
17804
- cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx189(Fragment29, { children: row.getValue("description") }), "cell"),
17871
+ cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx189(Fragment30, { children: row.getValue("description") }), "cell"),
17805
17872
  enableSorting: false,
17806
17873
  enableHiding: false
17807
17874
  }),
@@ -17823,11 +17890,11 @@ import { useMemo as useMemo31 } from "react";
17823
17890
 
17824
17891
  // src/features/billing/components/utils/date.ts
17825
17892
  function formatDate2(date, options = {}) {
17826
- const { locale, t } = options;
17893
+ const { locale, dateLocale, t } = options;
17827
17894
  if (!date) return t ? t("billing.ui.not_available") : "N/A";
17828
17895
  const dateObj = typeof date === "string" ? new Date(date) : date;
17829
17896
  try {
17830
- return new Intl.DateTimeFormat(dateFormatLocale(locale), {
17897
+ return new Intl.DateTimeFormat(dateLocale ?? dateFormatLocale(locale), {
17831
17898
  month: "short",
17832
17899
  day: "numeric",
17833
17900
  year: "numeric"
@@ -17845,7 +17912,8 @@ import { useMemo as useMemo30 } from "react";
17845
17912
  function useBillingFormatOptions() {
17846
17913
  const t = useTranslations68();
17847
17914
  const locale = useI18nLocale();
17848
- return useMemo30(() => ({ locale, t }), [locale, t]);
17915
+ const { locale: dateLocale } = useDateFormatter();
17916
+ return useMemo30(() => ({ locale, dateLocale, t }), [locale, dateLocale, t]);
17849
17917
  }
17850
17918
  __name(useBillingFormatOptions, "useBillingFormatOptions");
17851
17919
 
@@ -19053,7 +19121,7 @@ __name(formatSignupSource, "formatSignupSource");
19053
19121
  import { jsx as jsx199, jsxs as jsxs107 } from "react/jsx-runtime";
19054
19122
  var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19055
19123
  const t = useTranslations78();
19056
- const locale = useI18nLocale();
19124
+ const dates = useDateFormatter();
19057
19125
  const onInvite = params.context?.onInvite;
19058
19126
  const tableData = useMemo37(() => {
19059
19127
  return params.data.map((entry) => {
@@ -19099,7 +19167,7 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19099
19167
  cell: /* @__PURE__ */ __name(({ row }) => {
19100
19168
  const entry = row.original.jsonApiData;
19101
19169
  if (!entry.createdAt) return "-";
19102
- return new Date(entry.createdAt).toLocaleDateString(locale);
19170
+ return dates.format(entry.createdAt, "date");
19103
19171
  }, "cell"),
19104
19172
  enableSorting: false,
19105
19173
  enableHiding: false
@@ -19155,7 +19223,7 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19155
19223
  ] });
19156
19224
  }
19157
19225
  if (entry.status === "invited" && entry.invitedAt) {
19158
- return /* @__PURE__ */ jsx199("span", { className: "text-muted-foreground text-xs", children: t("waitlist.admin.actions.invited_on", { date: new Date(entry.invitedAt).toLocaleDateString(locale) }) });
19226
+ return /* @__PURE__ */ jsx199("span", { className: "text-muted-foreground text-xs", children: t("waitlist.admin.actions.invited_on", { date: dates.format(entry.invitedAt, "dateMedium") }) });
19159
19227
  }
19160
19228
  if (entry.status === "registered") {
19161
19229
  return /* @__PURE__ */ jsx199("span", { className: "text-muted-foreground text-sm", children: t("waitlist.admin.actions.registered") });
@@ -19168,14 +19236,14 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19168
19236
  };
19169
19237
  const columns = useMemo37(() => {
19170
19238
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
19171
- }, [params.fields, fieldColumnMap, t, locale]);
19239
+ }, [params.fields, fieldColumnMap, t, dates]);
19172
19240
  return useMemo37(() => ({ data: tableData, columns }), [tableData, columns]);
19173
19241
  }, "useWaitlistTableStructure");
19174
19242
 
19175
19243
  // src/features/content/hooks/useContentTableStructure.tsx
19176
19244
  import { useTranslations as useTranslations79 } from "next-intl";
19177
19245
  import { useMemo as useMemo38 } from "react";
19178
- import { Fragment as Fragment30, jsx as jsx200, jsxs as jsxs108 } from "react/jsx-runtime";
19246
+ import { Fragment as Fragment31, jsx as jsx200, jsxs as jsxs108 } from "react/jsx-runtime";
19179
19247
  var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19180
19248
  const t = useTranslations79();
19181
19249
  const generateUrl = usePageUrlGenerator();
@@ -19206,7 +19274,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19206
19274
  const contentModule = content.contentType ? Modules.findByModelName(content.contentType) : void 0;
19207
19275
  const link = contentModule ? generateUrl({ page: contentModule, id: content.id }) : "#";
19208
19276
  return /* @__PURE__ */ jsxs108(Tooltip2, { children: [
19209
- /* @__PURE__ */ jsx200(TooltipTrigger, { className: "flex items-center justify-start space-x-2", children: /* @__PURE__ */ jsxs108(Fragment30, { children: [
19277
+ /* @__PURE__ */ jsx200(TooltipTrigger, { className: "flex items-center justify-start space-x-2", children: /* @__PURE__ */ jsxs108(Fragment31, { children: [
19210
19278
  contentModule && getIconByModule({ module: contentModule, className: "h-4 w-4" }),
19211
19279
  /* @__PURE__ */ jsx200(Link, { href: link, children: content.name })
19212
19280
  ] }) }),
@@ -19222,7 +19290,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19222
19290
  header: t(`common.relevance`),
19223
19291
  cell: /* @__PURE__ */ __name(({ row }) => {
19224
19292
  const content = row.original.jsonApiData;
19225
- if (!content.relevance) return /* @__PURE__ */ jsx200(Fragment30, {});
19293
+ if (!content.relevance) return /* @__PURE__ */ jsx200(Fragment31, {});
19226
19294
  const response = `${content.relevance.toFixed(0)}%`;
19227
19295
  return /* @__PURE__ */ jsxs108("div", { className: "relative flex h-5 w-20 items-center justify-center overflow-clip rounded border text-center", children: [
19228
19296
  /* @__PURE__ */ jsx200(
@@ -19732,7 +19800,7 @@ function ContentTableSearch({ data }) {
19732
19800
  __name(ContentTableSearch, "ContentTableSearch");
19733
19801
 
19734
19802
  // src/components/tables/ContentListTable.tsx
19735
- import { Fragment as Fragment31, jsx as jsx202, jsxs as jsxs110 } from "react/jsx-runtime";
19803
+ import { Fragment as Fragment32, jsx as jsx202, jsxs as jsxs110 } from "react/jsx-runtime";
19736
19804
  var EMPTY_ARRAY = [];
19737
19805
  function getGroupKeys(item, field) {
19738
19806
  const value = item.jsonApiData[field];
@@ -19747,7 +19815,7 @@ function getGroupKeys(item, field) {
19747
19815
  __name(getGroupKeys, "getGroupKeys");
19748
19816
  var isClassComponent = /* @__PURE__ */ __name((component) => typeof component === "function" && !!component.prototype?.isReactComponent, "isClassComponent");
19749
19817
  function StableCell({ render, context }) {
19750
- return /* @__PURE__ */ jsx202(Fragment31, { children: render(context) });
19818
+ return /* @__PURE__ */ jsx202(Fragment32, { children: render(context) });
19751
19819
  }
19752
19820
  __name(StableCell, "StableCell");
19753
19821
  function renderCell(cellDef, context) {
@@ -19863,7 +19931,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
19863
19931
  }
19864
19932
  );
19865
19933
  const hasTitleControls = !!(props.functions || props.filters || allowSearch);
19866
- const titleControls = /* @__PURE__ */ jsxs110(Fragment31, { children: [
19934
+ const titleControls = /* @__PURE__ */ jsxs110(Fragment32, { children: [
19867
19935
  props.filters,
19868
19936
  props.functions,
19869
19937
  allowSearch !== false && /* @__PURE__ */ jsx202(ContentTableSearch, { data })
@@ -19965,7 +20033,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
19965
20033
 
19966
20034
  // src/components/grids/ContentListGrid.tsx
19967
20035
  import { useEffect as useEffect56, useRef as useRef37 } from "react";
19968
- import { Fragment as Fragment32, jsx as jsx203, jsxs as jsxs111 } from "react/jsx-runtime";
20036
+ import { Fragment as Fragment33, jsx as jsx203, jsxs as jsxs111 } from "react/jsx-runtime";
19969
20037
  var DEFAULT_GRID_CLASSES = "grid grid-cols-2 gap-4 p-4 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5";
19970
20038
  function ContentListGrid(props) {
19971
20039
  const { data, ItemComponent, allowSearch, fullWidth, gridClassName } = props;
@@ -19996,7 +20064,7 @@ function ContentListGrid(props) {
19996
20064
  ]
19997
20065
  }
19998
20066
  ) }),
19999
- (props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs111(Fragment32, { children: [
20067
+ (props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs111(Fragment33, { children: [
20000
20068
  props.functions,
20001
20069
  props.filters,
20002
20070
  allowSearch && /* @__PURE__ */ jsx203(ContentTableSearch, { data })
@@ -20288,14 +20356,14 @@ import { z as z7 } from "zod";
20288
20356
 
20289
20357
  // src/features/auth/components/GdprConsentSection.tsx
20290
20358
  import { useTranslations as useTranslations89 } from "next-intl";
20291
- import { Fragment as Fragment33, jsx as jsx212, jsxs as jsxs118 } from "react/jsx-runtime";
20359
+ import { Fragment as Fragment34, jsx as jsx212, jsxs as jsxs118 } from "react/jsx-runtime";
20292
20360
  function GdprConsentSection({
20293
20361
  form,
20294
20362
  termsCheckboxId = "termsAccepted",
20295
20363
  marketingCheckboxId = "marketingConsent"
20296
20364
  }) {
20297
20365
  const t = useTranslations89("auth.gdpr");
20298
- const termsLabel = /* @__PURE__ */ jsxs118(Fragment33, { children: [
20366
+ const termsLabel = /* @__PURE__ */ jsxs118(Fragment34, { children: [
20299
20367
  t("terms_prefix"),
20300
20368
  " ",
20301
20369
  /* @__PURE__ */ jsx212(Link, { href: "/terms", target: "_blank", rel: "noopener", children: t("terms_of_service") }),
@@ -20320,7 +20388,7 @@ function GdprConsentSection({
20320
20388
  __name(GdprConsentSection, "GdprConsentSection");
20321
20389
 
20322
20390
  // src/features/auth/components/forms/Register.tsx
20323
- import { Fragment as Fragment34, jsx as jsx213, jsxs as jsxs119 } from "react/jsx-runtime";
20391
+ import { Fragment as Fragment35, jsx as jsx213, jsxs as jsxs119 } from "react/jsx-runtime";
20324
20392
  var REFERRAL_COOKIE_NAME = "referral_code";
20325
20393
  function getReferralCode() {
20326
20394
  if (typeof document === "undefined") return null;
@@ -20442,7 +20510,7 @@ function Register() {
20442
20510
  }
20443
20511
  }, "onSubmit");
20444
20512
  if (registrationMode === "waitlist" && inviteCode && isValidatingInvite) {
20445
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20513
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20446
20514
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20447
20515
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20448
20516
  t("waitlist.invite.validating_title")
@@ -20454,7 +20522,7 @@ function Register() {
20454
20522
  ] });
20455
20523
  }
20456
20524
  if (registrationMode === "waitlist" && inviteCode && inviteError) {
20457
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20525
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20458
20526
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20459
20527
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20460
20528
  t("waitlist.invite.invalid_title")
@@ -20467,7 +20535,7 @@ function Register() {
20467
20535
  ] });
20468
20536
  }
20469
20537
  if (registrationMode === "waitlist" && !inviteCode) {
20470
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20538
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20471
20539
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20472
20540
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20473
20541
  t("waitlist.invite.registration_title")
@@ -20480,13 +20548,13 @@ function Register() {
20480
20548
  /* @__PURE__ */ jsx213(CardFooter, { className: "flex w-full flex-row justify-between", children: /* @__PURE__ */ jsx213(Link, { href: "#", className: "flex w-full justify-start", onClick: () => setComponentType(0 /* Login */), children: t("auth.buttons.login") }) })
20481
20549
  ] });
20482
20550
  }
20483
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20551
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20484
20552
  /* @__PURE__ */ jsxs119(CardHeader, { children: [
20485
20553
  /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20486
20554
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20487
20555
  t(`auth.buttons.register`)
20488
20556
  ] }),
20489
- /* @__PURE__ */ jsx213(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx213(Fragment34, { children: " " }) : /* @__PURE__ */ jsx213(Fragment34, { children: t(`auth.register_description`) }) })
20557
+ /* @__PURE__ */ jsx213(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx213(Fragment35, { children: " " }) : /* @__PURE__ */ jsx213(Fragment35, { children: t(`auth.register_description`) }) })
20490
20558
  ] }),
20491
20559
  showConfirmation ? /* @__PURE__ */ jsx213(CardContent, { children: /* @__PURE__ */ jsx213(CardDescription, { className: "text-center text-xl", children: t("auth.register_confirmation") }) }) : /* @__PURE__ */ jsx213(Form, { ...form, children: /* @__PURE__ */ jsxs119("form", { onSubmit: form.handleSubmit(onSubmit), children: [
20492
20560
  /* @__PURE__ */ jsxs119(CardContent, { children: [
@@ -20921,10 +20989,10 @@ __name(DisableTwoFactorDialog, "DisableTwoFactorDialog");
20921
20989
  import { Edit, Key, Trash2 } from "lucide-react";
20922
20990
  import { useTranslations as useTranslations93 } from "next-intl";
20923
20991
  import { useState as useState80 } from "react";
20924
- import { Fragment as Fragment35, jsx as jsx219, jsxs as jsxs123 } from "react/jsx-runtime";
20992
+ import { Fragment as Fragment36, jsx as jsx219, jsxs as jsxs123 } from "react/jsx-runtime";
20925
20993
  function PasskeyList({ passkeys, onRefresh }) {
20926
20994
  const t = useTranslations93();
20927
- const locale = useI18nLocale();
20995
+ const dates = useDateFormatter();
20928
20996
  const [renameDialogOpen, setRenameDialogOpen] = useState80(false);
20929
20997
  const [selectedPasskey, setSelectedPasskey] = useState80(null);
20930
20998
  const [newName, setNewName] = useState80("");
@@ -20978,7 +21046,7 @@ function PasskeyList({ passkeys, onRefresh }) {
20978
21046
  if (passkeys.length === 0) {
20979
21047
  return /* @__PURE__ */ jsx219("p", { className: "text-sm text-muted-foreground text-center py-4", children: t("auth.two_factor.no_passkeys") });
20980
21048
  }
20981
- return /* @__PURE__ */ jsxs123(Fragment35, { children: [
21049
+ return /* @__PURE__ */ jsxs123(Fragment36, { children: [
20982
21050
  /* @__PURE__ */ jsx219("div", { className: "space-y-2", children: passkeys.map((passkey) => /* @__PURE__ */ jsxs123("div", { className: "flex items-center justify-between p-3 border rounded-lg", children: [
20983
21051
  /* @__PURE__ */ jsxs123("div", { className: "flex items-center gap-3", children: [
20984
21052
  /* @__PURE__ */ jsx219(Key, { className: "h-5 w-5 text-muted-foreground" }),
@@ -20986,7 +21054,7 @@ function PasskeyList({ passkeys, onRefresh }) {
20986
21054
  /* @__PURE__ */ jsx219("p", { className: "font-medium", children: passkey.name }),
20987
21055
  /* @__PURE__ */ jsxs123("p", { className: "text-sm text-muted-foreground", children: [
20988
21056
  passkey.backedUp && "\u2601\uFE0F ",
20989
- passkey.lastUsedAt ? `${t("auth.two_factor.last_used")}: ${new Date(passkey.lastUsedAt).toLocaleDateString(locale)}` : t("auth.two_factor.never_used")
21057
+ passkey.lastUsedAt ? `${t("auth.two_factor.last_used")}: ${dates.format(passkey.lastUsedAt, "dateMedium")}` : t("auth.two_factor.never_used")
20990
21058
  ] })
20991
21059
  ] })
20992
21060
  ] }),
@@ -21117,7 +21185,7 @@ import { useState as useState82 } from "react";
21117
21185
  import { jsx as jsx221, jsxs as jsxs125 } from "react/jsx-runtime";
21118
21186
  function TotpAuthenticatorList({ authenticators, onDelete }) {
21119
21187
  const t = useTranslations95();
21120
- const locale = useI18nLocale();
21188
+ const dates = useDateFormatter();
21121
21189
  const [deletingId, setDeletingId] = useState82(null);
21122
21190
  const handleDelete = /* @__PURE__ */ __name(async (id) => {
21123
21191
  setDeletingId(id);
@@ -21144,7 +21212,7 @@ function TotpAuthenticatorList({ authenticators, onDelete }) {
21144
21212
  auth.lastUsedAt && /* @__PURE__ */ jsxs125("p", { className: "text-xs text-muted-foreground", children: [
21145
21213
  t("auth.two_factor.last_used"),
21146
21214
  ": ",
21147
- auth.lastUsedAt.toLocaleDateString(locale)
21215
+ dates.format(auth.lastUsedAt, "dateMedium")
21148
21216
  ] })
21149
21217
  ] })
21150
21218
  ] }),
@@ -21296,7 +21364,7 @@ function TotpSetupDialog({ onSuccess, trigger }) {
21296
21364
  __name(TotpSetupDialog, "TotpSetupDialog");
21297
21365
 
21298
21366
  // src/features/auth/components/two-factor/TwoFactorSettings.tsx
21299
- import { Fragment as Fragment36, jsx as jsx223, jsxs as jsxs127 } from "react/jsx-runtime";
21367
+ import { Fragment as Fragment37, jsx as jsx223, jsxs as jsxs127 } from "react/jsx-runtime";
21300
21368
  function TwoFactorSettings() {
21301
21369
  const t = useTranslations97();
21302
21370
  const [status, setStatus] = useState84(null);
@@ -21383,7 +21451,7 @@ function TwoFactorSettings() {
21383
21451
  ] }),
21384
21452
  /* @__PURE__ */ jsx223(BackupCodesDialog, { remainingCodes: status?.backupCodesCount ?? 0, onRegenerate: handleRefresh })
21385
21453
  ] }) }),
21386
- !isEnabled && (authenticators.length > 0 || passkeys.length > 0) && /* @__PURE__ */ jsxs127(Fragment36, { children: [
21454
+ !isEnabled && (authenticators.length > 0 || passkeys.length > 0) && /* @__PURE__ */ jsxs127(Fragment37, { children: [
21387
21455
  /* @__PURE__ */ jsx223(Separator, {}),
21388
21456
  /* @__PURE__ */ jsxs127("div", { className: "flex items-center justify-between", children: [
21389
21457
  /* @__PURE__ */ jsxs127("div", { children: [
@@ -21393,7 +21461,7 @@ function TwoFactorSettings() {
21393
21461
  /* @__PURE__ */ jsx223(Button, { onClick: handleEnable2FA, disabled: isEnabling, children: isEnabling ? t("common.loading") : t("auth.two_factor.enable_button") })
21394
21462
  ] })
21395
21463
  ] }),
21396
- isEnabled && /* @__PURE__ */ jsxs127(Fragment36, { children: [
21464
+ isEnabled && /* @__PURE__ */ jsxs127(Fragment37, { children: [
21397
21465
  /* @__PURE__ */ jsx223(Separator, {}),
21398
21466
  /* @__PURE__ */ jsxs127("div", { className: "flex items-center justify-between", children: [
21399
21467
  /* @__PURE__ */ jsxs127("div", { children: [
@@ -21479,11 +21547,11 @@ function GoogleSignInButton({ referralCode, source }) {
21479
21547
  __name(GoogleSignInButton, "GoogleSignInButton");
21480
21548
 
21481
21549
  // src/features/auth/components/details/LandingComponent.tsx
21482
- import { Fragment as Fragment37, jsx as jsx226, jsxs as jsxs129 } from "react/jsx-runtime";
21550
+ import { Fragment as Fragment38, jsx as jsx226, jsxs as jsxs129 } from "react/jsx-runtime";
21483
21551
  function LandingComponent() {
21484
21552
  const t = useTranslations99();
21485
21553
  const { setComponentType } = useAuthContext();
21486
- return /* @__PURE__ */ jsxs129(Fragment37, { children: [
21554
+ return /* @__PURE__ */ jsxs129(Fragment38, { children: [
21487
21555
  /* @__PURE__ */ jsxs129(CardHeader, { className: "mb-4", "data-testid": "page-pre-login-container", children: [
21488
21556
  /* @__PURE__ */ jsxs129(CardTitle, { className: "text-primary flex flex-col items-center gap-y-8 pb-8 text-4xl", children: [
21489
21557
  /* @__PURE__ */ jsx226(Image9, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
@@ -21492,7 +21560,7 @@ function LandingComponent() {
21492
21560
  /* @__PURE__ */ jsx226(CardDescription, { className: "flex w-full justify-center text-center text-sm", children: t(`common.description`) })
21493
21561
  ] }),
21494
21562
  /* @__PURE__ */ jsxs129(CardFooter, { className: "mt-4 flex w-full flex-col justify-between gap-y-4", children: [
21495
- isInternalAuthEnabled() && /* @__PURE__ */ jsxs129(Fragment37, { children: [
21563
+ isInternalAuthEnabled() && /* @__PURE__ */ jsxs129(Fragment38, { children: [
21496
21564
  isRegistrationAllowed() && /* @__PURE__ */ jsx226(
21497
21565
  Link,
21498
21566
  {
@@ -21518,7 +21586,7 @@ import Image10 from "next/image";
21518
21586
  import { useEffect as useEffect62, useState as useState85 } from "react";
21519
21587
  import { useForm as useForm7 } from "react-hook-form";
21520
21588
  import { z as z8 } from "zod";
21521
- import { Fragment as Fragment38, jsx as jsx227, jsxs as jsxs130 } from "react/jsx-runtime";
21589
+ import { Fragment as Fragment39, jsx as jsx227, jsxs as jsxs130 } from "react/jsx-runtime";
21522
21590
  function AcceptInvitation() {
21523
21591
  const { setComponentType, params, setParams } = useAuthContext();
21524
21592
  const [showConfirmation, setShowConfirmation] = useState85(false);
@@ -21581,13 +21649,13 @@ function AcceptInvitation() {
21581
21649
  errorToast({ title: t(`common.errors.error`), error });
21582
21650
  }
21583
21651
  }, "onSubmit");
21584
- return /* @__PURE__ */ jsxs130(Fragment38, { children: [
21652
+ return /* @__PURE__ */ jsxs130(Fragment39, { children: [
21585
21653
  /* @__PURE__ */ jsxs130(CardHeader, { children: [
21586
21654
  /* @__PURE__ */ jsxs130(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21587
21655
  /* @__PURE__ */ jsx227(Image10, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21588
21656
  t("auth.accept_invitation")
21589
21657
  ] }),
21590
- /* @__PURE__ */ jsx227(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx227(Fragment38, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx227(Fragment38, { children: t("auth.select_password") }) })
21658
+ /* @__PURE__ */ jsx227(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx227(Fragment39, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx227(Fragment39, { children: t("auth.select_password") }) })
21591
21659
  ] }),
21592
21660
  /* @__PURE__ */ jsx227(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx227(CardDescription, { className: "text-center text-xl", children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx227(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx227(Form, { ...form, children: /* @__PURE__ */ jsxs130("form", { onSubmit: form.handleSubmit(onSubmit), children: [
21593
21661
  /* @__PURE__ */ jsx227(
@@ -21618,7 +21686,7 @@ __name(AcceptInvitation, "AcceptInvitation");
21618
21686
  import { useTranslations as useTranslations101 } from "next-intl";
21619
21687
  import Image11 from "next/image";
21620
21688
  import { useEffect as useEffect63, useState as useState86 } from "react";
21621
- import { Fragment as Fragment39, jsx as jsx228, jsxs as jsxs131 } from "react/jsx-runtime";
21689
+ import { Fragment as Fragment40, jsx as jsx228, jsxs as jsxs131 } from "react/jsx-runtime";
21622
21690
  function ActivateAccount() {
21623
21691
  const { setComponentType, params, setParams } = useAuthContext();
21624
21692
  const [showConfirmation, setShowConfirmation] = useState86(false);
@@ -21651,15 +21719,15 @@ function ActivateAccount() {
21651
21719
  setError(t(`auth.errors.invalid_invitation_code`));
21652
21720
  }
21653
21721
  }, []);
21654
- return /* @__PURE__ */ jsxs131(Fragment39, { children: [
21722
+ return /* @__PURE__ */ jsxs131(Fragment40, { children: [
21655
21723
  /* @__PURE__ */ jsxs131(CardHeader, { children: [
21656
21724
  /* @__PURE__ */ jsxs131(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21657
21725
  /* @__PURE__ */ jsx228(Image11, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21658
21726
  t("auth.accept_invitation")
21659
21727
  ] }),
21660
- /* @__PURE__ */ jsx228(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx228(Fragment39, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx228(Fragment39, { children: " " }) })
21728
+ /* @__PURE__ */ jsx228(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx228(Fragment40, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx228(Fragment40, { children: " " }) })
21661
21729
  ] }),
21662
- /* @__PURE__ */ jsx228(CardContent, { children: /* @__PURE__ */ jsx228(CardDescription, { className: "text-center text-xl", children: showConfirmation ? /* @__PURE__ */ jsx228(Fragment39, { children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx228(Fragment39, { children: error }) : /* @__PURE__ */ jsx228(Fragment39, { children: t("auth.activation_wait") }) }) })
21730
+ /* @__PURE__ */ jsx228(CardContent, { children: /* @__PURE__ */ jsx228(CardDescription, { className: "text-center text-xl", children: showConfirmation ? /* @__PURE__ */ jsx228(Fragment40, { children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx228(Fragment40, { children: error }) : /* @__PURE__ */ jsx228(Fragment40, { children: t("auth.activation_wait") }) }) })
21663
21731
  ] });
21664
21732
  }
21665
21733
  __name(ActivateAccount, "ActivateAccount");
@@ -21697,7 +21765,7 @@ import Image12 from "next/image";
21697
21765
  import { useState as useState88 } from "react";
21698
21766
  import { useForm as useForm8 } from "react-hook-form";
21699
21767
  import { z as z9 } from "zod";
21700
- import { Fragment as Fragment40, jsx as jsx229, jsxs as jsxs132 } from "react/jsx-runtime";
21768
+ import { Fragment as Fragment41, jsx as jsx229, jsxs as jsxs132 } from "react/jsx-runtime";
21701
21769
  function ForgotPassword() {
21702
21770
  const t = useTranslations102();
21703
21771
  const { setComponentType } = useAuthContext();
@@ -21724,13 +21792,13 @@ function ForgotPassword() {
21724
21792
  errorToast({ title: t("common.errors.error"), error: e });
21725
21793
  }
21726
21794
  }, "onSubmit");
21727
- return /* @__PURE__ */ jsxs132(Fragment40, { children: [
21795
+ return /* @__PURE__ */ jsxs132(Fragment41, { children: [
21728
21796
  /* @__PURE__ */ jsxs132(CardHeader, { "data-testid": "page-forgot-password-container", children: [
21729
21797
  /* @__PURE__ */ jsxs132(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21730
21798
  /* @__PURE__ */ jsx229(Image12, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21731
21799
  t("auth.buttons.forgot_password")
21732
21800
  ] }),
21733
- /* @__PURE__ */ jsx229(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx229(Fragment40, { children: " " }) : /* @__PURE__ */ jsx229(Fragment40, { children: t(`auth.add_email_to_reset`) }) })
21801
+ /* @__PURE__ */ jsx229(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx229(Fragment41, { children: " " }) : /* @__PURE__ */ jsx229(Fragment41, { children: t(`auth.add_email_to_reset`) }) })
21734
21802
  ] }),
21735
21803
  showConfirmation ? /* @__PURE__ */ jsx229(CardContent, { children: /* @__PURE__ */ jsx229(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_confirmation`) }) }) : /* @__PURE__ */ jsx229(Form, { ...form, children: /* @__PURE__ */ jsxs132("form", { onSubmit: form.handleSubmit(onSubmit), children: [
21736
21804
  /* @__PURE__ */ jsxs132(CardContent, { children: [
@@ -21769,7 +21837,7 @@ import { useRouter, useSearchParams as useSearchParams3 } from "next/navigation"
21769
21837
  import { useEffect as useEffect65, useState as useState89 } from "react";
21770
21838
  import { useForm as useForm9 } from "react-hook-form";
21771
21839
  import { z as z10 } from "zod";
21772
- import { Fragment as Fragment41, jsx as jsx230, jsxs as jsxs133 } from "react/jsx-runtime";
21840
+ import { Fragment as Fragment42, jsx as jsx230, jsxs as jsxs133 } from "react/jsx-runtime";
21773
21841
  function Login() {
21774
21842
  const t = useTranslations103();
21775
21843
  const { setUser } = useCurrentUserContext();
@@ -21835,7 +21903,7 @@ function Login() {
21835
21903
  });
21836
21904
  }
21837
21905
  }, "onSubmit");
21838
- return /* @__PURE__ */ jsxs133(Fragment41, { children: [
21906
+ return /* @__PURE__ */ jsxs133(Fragment42, { children: [
21839
21907
  /* @__PURE__ */ jsxs133(CardHeader, { "data-testid": "page-login-container", children: [
21840
21908
  /* @__PURE__ */ jsxs133(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21841
21909
  /* @__PURE__ */ jsx230(Image13, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
@@ -21844,7 +21912,7 @@ function Login() {
21844
21912
  /* @__PURE__ */ jsx230(CardDescription, { className: "text-sm", children: t(`auth.login_description`) })
21845
21913
  ] }),
21846
21914
  /* @__PURE__ */ jsx230(Form, { ...form, children: /* @__PURE__ */ jsxs133("form", { onSubmit: form.handleSubmit(onSubmit), children: [
21847
- /* @__PURE__ */ jsx230(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs133(Fragment41, { children: [
21915
+ /* @__PURE__ */ jsx230(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs133(Fragment42, { children: [
21848
21916
  /* @__PURE__ */ jsx230(
21849
21917
  FormInput,
21850
21918
  {
@@ -21911,7 +21979,7 @@ function clearClientStorage(keys) {
21911
21979
  __name(clearClientStorage, "clearClientStorage");
21912
21980
 
21913
21981
  // src/features/auth/components/forms/Logout.tsx
21914
- import { Fragment as Fragment42, jsx as jsx231 } from "react/jsx-runtime";
21982
+ import { Fragment as Fragment43, jsx as jsx231 } from "react/jsx-runtime";
21915
21983
  function Logout({ storageKeys, beforeLogout }) {
21916
21984
  const generateUrl = usePageUrlGenerator();
21917
21985
  useEffect66(() => {
@@ -21923,7 +21991,7 @@ function Logout({ storageKeys, beforeLogout }) {
21923
21991
  }, "logOut");
21924
21992
  logOut();
21925
21993
  }, []);
21926
- return /* @__PURE__ */ jsx231(Fragment42, {});
21994
+ return /* @__PURE__ */ jsx231(Fragment43, {});
21927
21995
  }
21928
21996
  __name(Logout, "Logout");
21929
21997
 
@@ -21964,7 +22032,7 @@ import Image14 from "next/image";
21964
22032
  import { useEffect as useEffect68, useState as useState90 } from "react";
21965
22033
  import { useForm as useForm10 } from "react-hook-form";
21966
22034
  import { z as z11 } from "zod";
21967
- import { Fragment as Fragment43, jsx as jsx232, jsxs as jsxs134 } from "react/jsx-runtime";
22035
+ import { Fragment as Fragment44, jsx as jsx232, jsxs as jsxs134 } from "react/jsx-runtime";
21968
22036
  function ResetPassword() {
21969
22037
  const { setComponentType, params, setParams } = useAuthContext();
21970
22038
  const [showConfirmation, setShowConfirmation] = useState90(false);
@@ -22027,13 +22095,13 @@ function ResetPassword() {
22027
22095
  errorToast({ title: t(`common.errors.error`), error });
22028
22096
  }
22029
22097
  }, "onSubmit");
22030
- return /* @__PURE__ */ jsxs134(Fragment43, { children: [
22098
+ return /* @__PURE__ */ jsxs134(Fragment44, { children: [
22031
22099
  /* @__PURE__ */ jsxs134(CardHeader, { children: [
22032
22100
  /* @__PURE__ */ jsxs134(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
22033
22101
  /* @__PURE__ */ jsx232(Image14, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
22034
22102
  t(`auth.password_reset`)
22035
22103
  ] }),
22036
- /* @__PURE__ */ jsx232(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx232(Fragment43, { children: t(`auth.errors.password_reset_error`) }) : /* @__PURE__ */ jsx232(Fragment43, { children: t(`auth.reset_password`) }) })
22104
+ /* @__PURE__ */ jsx232(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx232(Fragment44, { children: t(`auth.errors.password_reset_error`) }) : /* @__PURE__ */ jsx232(Fragment44, { children: t(`auth.reset_password`) }) })
22037
22105
  ] }),
22038
22106
  /* @__PURE__ */ jsx232(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx232(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_success_description`) }) : error ? /* @__PURE__ */ jsx232(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx232(Form, { ...form, children: /* @__PURE__ */ jsxs134("form", { onSubmit: form.handleSubmit(onSubmit), children: [
22039
22107
  /* @__PURE__ */ jsx232(FormPassword, { form, id: "password", name: t(`user.fields.password.label`) }),
@@ -22093,7 +22161,7 @@ function PasskeyButton({ pendingToken, onSuccess, onError, disabled = false }) {
22093
22161
  __name(PasskeyButton, "PasskeyButton");
22094
22162
 
22095
22163
  // src/features/auth/components/forms/TwoFactorChallenge.tsx
22096
- import { Fragment as Fragment44, jsx as jsx234, jsxs as jsxs135 } from "react/jsx-runtime";
22164
+ import { Fragment as Fragment45, jsx as jsx234, jsxs as jsxs135 } from "react/jsx-runtime";
22097
22165
  function TwoFactorChallenge() {
22098
22166
  const t = useTranslations106();
22099
22167
  const { setUser } = useCurrentUserContext();
@@ -22174,7 +22242,7 @@ function TwoFactorChallenge() {
22174
22242
  const hasTotp = availableMethods.includes("totp");
22175
22243
  const hasPasskey = availableMethods.includes("passkey");
22176
22244
  const hasBackup = availableMethods.includes("backup");
22177
- return /* @__PURE__ */ jsxs135(Fragment44, { children: [
22245
+ return /* @__PURE__ */ jsxs135(Fragment45, { children: [
22178
22246
  /* @__PURE__ */ jsxs135(CardHeader, { "data-testid": "page-2fa-challenge", children: [
22179
22247
  /* @__PURE__ */ jsx234(CardTitle, { className: "text-primary", children: t("auth.two_factor.verification_required") }),
22180
22248
  /* @__PURE__ */ jsx234(CardDescription, { children: t("auth.two_factor.enter_verification_code") })
@@ -22478,12 +22546,12 @@ import { useMemo as useMemo43 } from "react";
22478
22546
  import { TrashIcon } from "lucide-react";
22479
22547
  import { useTranslations as useTranslations109 } from "next-intl";
22480
22548
  import { useState as useState94 } from "react";
22481
- import { Fragment as Fragment45, jsx as jsx237, jsxs as jsxs137 } from "react/jsx-runtime";
22549
+ import { Fragment as Fragment46, jsx as jsx237, jsxs as jsxs137 } from "react/jsx-runtime";
22482
22550
  function AiConnectionDeleter({ connection }) {
22483
22551
  const t = useTranslations109();
22484
22552
  const { refresh } = useAiConnections();
22485
22553
  const [open, setOpen] = useState94(false);
22486
- return /* @__PURE__ */ jsxs137(Fragment45, { children: [
22554
+ return /* @__PURE__ */ jsxs137(Fragment46, { children: [
22487
22555
  /* @__PURE__ */ jsx237(
22488
22556
  Button,
22489
22557
  {
@@ -22763,7 +22831,7 @@ function AiConnectionEditor({
22763
22831
  __name(AiConnectionEditor, "AiConnectionEditor");
22764
22832
 
22765
22833
  // src/features/ai-connection/components/lists/AiConnectionTypeCard.tsx
22766
- import { Fragment as Fragment46, jsx as jsx239, jsxs as jsxs139 } from "react/jsx-runtime";
22834
+ import { Fragment as Fragment47, jsx as jsx239, jsxs as jsxs139 } from "react/jsx-runtime";
22767
22835
  function toInput(connection, overrides) {
22768
22836
  return {
22769
22837
  id: connection.id,
@@ -22886,7 +22954,7 @@ function AiConnectionTypeCard({ connectionType }) {
22886
22954
  children: /* @__PURE__ */ jsx239(ChevronDownIcon10, {})
22887
22955
  }
22888
22956
  ),
22889
- !readOnly && /* @__PURE__ */ jsxs139(Fragment46, { children: [
22957
+ !readOnly && /* @__PURE__ */ jsxs139(Fragment47, { children: [
22890
22958
  /* @__PURE__ */ jsx239(
22891
22959
  AiConnectionEditor,
22892
22960
  {
@@ -23144,7 +23212,7 @@ var STATUS_VARIANTS = {
23144
23212
  };
23145
23213
  var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23146
23214
  const t = useTranslations117();
23147
- const locale = useI18nLocale();
23215
+ const dates = useDateFormatter();
23148
23216
  const generateUrl = usePageUrlGenerator();
23149
23217
  const tableData = useMemo45(() => {
23150
23218
  return params.data.map((blast) => {
@@ -23207,7 +23275,7 @@ var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23207
23275
  cell: /* @__PURE__ */ __name(({ row }) => {
23208
23276
  const blast = row.original.jsonApiData;
23209
23277
  if (!blast.sentAt) return /* @__PURE__ */ jsx245("span", { className: "text-muted-foreground text-xs", children: "\u2014" });
23210
- return /* @__PURE__ */ jsx245("span", { className: "text-sm", children: blast.sentAt.toLocaleDateString(locale) });
23278
+ return /* @__PURE__ */ jsx245("span", { className: "text-sm", children: dates.format(blast.sentAt, "date") });
23211
23279
  }, "cell"),
23212
23280
  enableSorting: false,
23213
23281
  enableHiding: false
@@ -23222,7 +23290,7 @@ var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23222
23290
  };
23223
23291
  const columns = useMemo45(() => {
23224
23292
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
23225
- }, [params.fields, fieldColumnMap, t, generateUrl, locale]);
23293
+ }, [params.fields, fieldColumnMap, t, generateUrl, dates]);
23226
23294
  return useMemo45(() => ({ data: tableData, columns }), [tableData, columns]);
23227
23295
  }, "useEmailBlastTableStructure");
23228
23296
  registerTableGenerator("email-blasts", useEmailBlastTableStructure);
@@ -23234,7 +23302,7 @@ import { useCallback as useCallback44, useMemo as useMemo46 } from "react";
23234
23302
  import { useForm as useForm12 } from "react-hook-form";
23235
23303
  import { v4 as v413 } from "uuid";
23236
23304
  import { z as z13 } from "zod";
23237
- import { Fragment as Fragment47, jsx as jsx246, jsxs as jsxs143 } from "react/jsx-runtime";
23305
+ import { Fragment as Fragment48, jsx as jsx246, jsxs as jsxs143 } from "react/jsx-runtime";
23238
23306
  var TEMPLATE_VARIABLES = ["{{name}}", "{{email}}", "{{url}}"];
23239
23307
  var MARKETING_ONLY_VARIABLES = ["{{unsubscribeAllUrl}}"];
23240
23308
  function EmailBlastEditorInternal({
@@ -23338,7 +23406,7 @@ function EmailBlastEditorInternal({
23338
23406
  name: t("emailBlasts.editor.fields.body.label"),
23339
23407
  className: "min-h-72",
23340
23408
  isRequired: true,
23341
- description: /* @__PURE__ */ jsxs143(Fragment47, { children: [
23409
+ description: /* @__PURE__ */ jsxs143(Fragment48, { children: [
23342
23410
  /* @__PURE__ */ jsxs143("span", { className: "block", children: [
23343
23411
  t("emailBlasts.editor.variablesHint"),
23344
23412
  " ",
@@ -23410,7 +23478,7 @@ import { useCallback as useCallback45, useEffect as useEffect73, useState as use
23410
23478
  import { LoaderCircleIcon as LoaderCircleIcon4, SendIcon as SendIcon2 } from "lucide-react";
23411
23479
  import { useTranslations as useTranslations121 } from "next-intl";
23412
23480
  import { useEffect as useEffect72, useState as useState97 } from "react";
23413
- import { Fragment as Fragment48, jsx as jsx249, jsxs as jsxs144 } from "react/jsx-runtime";
23481
+ import { Fragment as Fragment49, jsx as jsx249, jsxs as jsxs144 } from "react/jsx-runtime";
23414
23482
  function EmailBlastSendDialog({ blast, onSuccess }) {
23415
23483
  const t = useTranslations121();
23416
23484
  const [open, setOpen] = useState97(false);
@@ -23455,7 +23523,7 @@ function EmailBlastSendDialog({ blast, onSuccess }) {
23455
23523
  ] }),
23456
23524
  /* @__PURE__ */ jsxs144("div", { className: "flex justify-end", children: [
23457
23525
  /* @__PURE__ */ jsx249(Button, { className: "me-2", variant: "outline", type: "button", onClick: () => setOpen(false), disabled: isSending, children: t("emailBlasts.send.cancel") }),
23458
- /* @__PURE__ */ jsx249(Button, { type: "button", variant: "default", onClick: handleSend, disabled: !canSend, children: isSending ? /* @__PURE__ */ jsxs144(Fragment48, { children: [
23526
+ /* @__PURE__ */ jsx249(Button, { type: "button", variant: "default", onClick: handleSend, disabled: !canSend, children: isSending ? /* @__PURE__ */ jsxs144(Fragment49, { children: [
23459
23527
  t("emailBlasts.send.action"),
23460
23528
  /* @__PURE__ */ jsx249(LoaderCircleIcon4, { className: "animate-spin-slow h-5 w-5" })
23461
23529
  ] }) : t("emailBlasts.send.action") })
@@ -23494,7 +23562,7 @@ function EmailBlastSendTestButton({ blast }) {
23494
23562
  __name(EmailBlastSendTestButton, "EmailBlastSendTestButton");
23495
23563
  function EmailBlastContainer({ blastId }) {
23496
23564
  const t = useTranslations122();
23497
- const locale = useI18nLocale();
23565
+ const dates = useDateFormatter();
23498
23566
  const generateUrl = usePageUrlGenerator();
23499
23567
  const [blast, setBlast] = useState98(void 0);
23500
23568
  const reload = useCallback45(async () => {
@@ -23570,7 +23638,7 @@ function EmailBlastContainer({ blastId }) {
23570
23638
  DetailField,
23571
23639
  {
23572
23640
  label: t("emailBlasts.detail.sentAt"),
23573
- value: blast.sentAt ? blast.sentAt.toLocaleString(locale) : "\u2014"
23641
+ value: blast.sentAt ? dates.format(blast.sentAt, "dateTimeMedium") : "\u2014"
23574
23642
  }
23575
23643
  ),
23576
23644
  /* @__PURE__ */ jsx250(DetailField, { label: t("emailBlasts.list.columns.subject"), value: blast.subject }),
@@ -23704,7 +23772,7 @@ function HowToCommandViewer({ howTo, onBack, onStartChat }) {
23704
23772
  __name(HowToCommandViewer, "HowToCommandViewer");
23705
23773
 
23706
23774
  // src/features/how-to/components/containers/HowToCommand.tsx
23707
- import { Fragment as Fragment49, jsx as jsx252, jsxs as jsxs147 } from "react/jsx-runtime";
23775
+ import { Fragment as Fragment50, jsx as jsx252, jsxs as jsxs147 } from "react/jsx-runtime";
23708
23776
  function matchPage(pathname, pattern) {
23709
23777
  if (pattern.includes(":")) {
23710
23778
  const pathSegments = pathname.split("/").filter(Boolean);
@@ -23775,7 +23843,7 @@ function HowToCommand({ pathname, contextKeys, extraGroups, onStartChat }) {
23775
23843
  setSelectedHowTo(null);
23776
23844
  if (onStartChat) onStartChat();
23777
23845
  }, "handleStartChat");
23778
- return /* @__PURE__ */ jsxs147(Fragment49, { children: [
23846
+ return /* @__PURE__ */ jsxs147(Fragment50, { children: [
23779
23847
  /* @__PURE__ */ jsxs147(
23780
23848
  SidebarMenuButton,
23781
23849
  {
@@ -23943,7 +24011,7 @@ import { useTranslations as useTranslations128 } from "next-intl";
23943
24011
  // src/features/how-to/hooks/useHowToTableStructure.tsx
23944
24012
  import { useTranslations as useTranslations126 } from "next-intl";
23945
24013
  import { useMemo as useMemo49 } from "react";
23946
- import { Fragment as Fragment50, jsx as jsx256 } from "react/jsx-runtime";
24014
+ import { Fragment as Fragment51, jsx as jsx256 } from "react/jsx-runtime";
23947
24015
  var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23948
24016
  const t = useTranslations126();
23949
24017
  const generateUrl = usePageUrlGenerator();
@@ -23980,7 +24048,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23980
24048
  id: "description",
23981
24049
  accessorKey: "description",
23982
24050
  header: t(`howto.fields.description.label`),
23983
- cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx256(Fragment50, { children: row.getValue("description") }), "cell"),
24051
+ cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx256(Fragment51, { children: row.getValue("description") }), "cell"),
23984
24052
  enableSorting: false,
23985
24053
  enableHiding: false
23986
24054
  }),
@@ -23988,7 +24056,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23988
24056
  id: "pages",
23989
24057
  accessorKey: "pages",
23990
24058
  header: t(`howto.fields.pages.label`),
23991
- cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx256(Fragment50, { children: row.getValue("pages") }), "cell"),
24059
+ cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx256(Fragment51, { children: row.getValue("pages") }), "cell"),
23992
24060
  enableSorting: false,
23993
24061
  enableHiding: false
23994
24062
  }),
@@ -24074,7 +24142,7 @@ __name(HowToListContainer, "HowToListContainer");
24074
24142
  import { CircleX as CircleX3, RefreshCwIcon as RefreshCwIcon5, SearchIcon as SearchIcon7, XIcon as XIcon13 } from "lucide-react";
24075
24143
  import { useTranslations as useTranslations129 } from "next-intl";
24076
24144
  import { useCallback as useCallback47, useEffect as useEffect75, useRef as useRef42, useState as useState101 } from "react";
24077
- import { Fragment as Fragment51, jsx as jsx260, jsxs as jsxs149 } from "react/jsx-runtime";
24145
+ import { Fragment as Fragment52, jsx as jsx260, jsxs as jsxs149 } from "react/jsx-runtime";
24078
24146
  function HowToSelector({
24079
24147
  id,
24080
24148
  form,
@@ -24159,7 +24227,7 @@ function HowToSelector({
24159
24227
  search("");
24160
24228
  }
24161
24229
  }
24162
- ) : /* @__PURE__ */ jsx260(Fragment51, {})
24230
+ ) : /* @__PURE__ */ jsx260(Fragment52, {})
24163
24231
  ] }),
24164
24232
  /* @__PURE__ */ jsx260(CommandList, { children: data.data && data.data.length > 0 && data.data.map((howTo) => /* @__PURE__ */ jsx260(
24165
24233
  CommandItem,
@@ -24372,7 +24440,7 @@ function ReferencesTab({ references }) {
24372
24440
  __name(ReferencesTab, "ReferencesTab");
24373
24441
 
24374
24442
  // src/features/assistant-message/components/parts/tabs/CitationsTab.tsx
24375
- import { Fragment as Fragment52, useState as useState103 } from "react";
24443
+ import { Fragment as Fragment53, useState as useState103 } from "react";
24376
24444
  import { useTranslations as useTranslations135 } from "next-intl";
24377
24445
  import { ChevronDown as ChevronDown3, HelpCircle } from "lucide-react";
24378
24446
  import ReactMarkdown2 from "react-markdown";
@@ -24437,7 +24505,7 @@ function CitationsTab({ citations, sources }) {
24437
24505
  const typeLabel = chunk.nodeType ? entityLabel(chunk.nodeType) : t("features.assistant.message.sources.source");
24438
24506
  const fallbackName = chunk.nodeId ? `${typeLabel} ${chunk.nodeId.slice(0, 8)}` : typeLabel;
24439
24507
  const sourceName = resolved?.name ?? fallbackName;
24440
- return /* @__PURE__ */ jsxs153(Fragment52, { children: [
24508
+ return /* @__PURE__ */ jsxs153(Fragment53, { children: [
24441
24509
  /* @__PURE__ */ jsxs153(TableRow, { children: [
24442
24510
  /* @__PURE__ */ jsx265(TableCell, { children: /* @__PURE__ */ jsxs153(
24443
24511
  "div",
@@ -24834,7 +24902,7 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
24834
24902
  __name(MessageSourcesContainer, "MessageSourcesContainer");
24835
24903
 
24836
24904
  // src/features/assistant-message/components/MessageItem.tsx
24837
- import { Fragment as Fragment53, jsx as jsx271, jsxs as jsxs157 } from "react/jsx-runtime";
24905
+ import { Fragment as Fragment54, jsx as jsx271, jsxs as jsxs157 } from "react/jsx-runtime";
24838
24906
  var MENTION_HREF = /^mention:\/\/([^/]+)\/(.+)$/;
24839
24907
  function mentionUrlTransform(url) {
24840
24908
  return MENTION_HREF.test(url) ? url : defaultUrlTransform(url);
@@ -24857,7 +24925,7 @@ function MessageItem({
24857
24925
  a: /* @__PURE__ */ __name(({ href, children }) => {
24858
24926
  const match = href ? MENTION_HREF.exec(href) : null;
24859
24927
  if (!match || !renderMention) return /* @__PURE__ */ jsx271("a", { href, children });
24860
- return /* @__PURE__ */ jsx271(Fragment53, { children: renderMention({ type: match[1], id: match[2], alias: String(children ?? "") }) });
24928
+ return /* @__PURE__ */ jsx271(Fragment54, { children: renderMention({ type: match[1], id: match[2], alias: String(children ?? "") }) });
24861
24929
  }, "a")
24862
24930
  }),
24863
24931
  [renderMention]
@@ -25200,13 +25268,13 @@ function HandbookSyncButton({ refresh }) {
25200
25268
  __name(HandbookSyncButton, "HandbookSyncButton");
25201
25269
 
25202
25270
  // src/features/handbook/components/parts/HandbookIndexStatus.tsx
25203
- import { useFormatter, useTranslations as useTranslations144 } from "next-intl";
25271
+ import { useTranslations as useTranslations144 } from "next-intl";
25204
25272
  import { useMemo as useMemo53 } from "react";
25205
25273
  import { jsx as jsx277, jsxs as jsxs161 } from "react/jsx-runtime";
25206
25274
  var FAILURE_STATUSES = /* @__PURE__ */ new Set(["failed", "error"]);
25207
25275
  function HandbookIndexStatus({ pages }) {
25208
25276
  const t = useTranslations144();
25209
- const format2 = useFormatter();
25277
+ const dates = useDateFormatter();
25210
25278
  const lastSynced = useMemo53(() => {
25211
25279
  let latest = void 0;
25212
25280
  for (const page of pages) {
@@ -25223,7 +25291,7 @@ function HandbookIndexStatus({ pages }) {
25223
25291
  return /* @__PURE__ */ jsxs161("span", { className: "text-muted-foreground text-xs tabular-nums", children: [
25224
25292
  t("handbook.contents.status", {
25225
25293
  count: pages.length,
25226
- date: lastSynced ? format2.dateTime(lastSynced, { dateStyle: "medium" }) : ""
25294
+ date: lastSynced ? dates.format(lastSynced, "dateMedium") : ""
25227
25295
  }),
25228
25296
  failures > 0 ? /* @__PURE__ */ jsx277("span", { className: "text-destructive ms-2 tabular-nums", children: t("handbook.contents.failures", { count: failures }) }) : null
25229
25297
  ] });
@@ -25296,7 +25364,7 @@ function splitByNesting(pages) {
25296
25364
  __name(splitByNesting, "splitByNesting");
25297
25365
 
25298
25366
  // src/features/handbook/components/lists/HandbookContents.tsx
25299
- import { Fragment as Fragment54, jsx as jsx279, jsxs as jsxs163 } from "react/jsx-runtime";
25367
+ import { Fragment as Fragment55, jsx as jsx279, jsxs as jsxs163 } from "react/jsx-runtime";
25300
25368
  function HandbookContents() {
25301
25369
  const t = useTranslations145();
25302
25370
  const [pages, setPages] = useState109([]);
@@ -25335,7 +25403,7 @@ function HandbookContents() {
25335
25403
  return /* @__PURE__ */ jsx279(
25336
25404
  HandbookProvider,
25337
25405
  {
25338
- functions: /* @__PURE__ */ jsxs163(Fragment54, { children: [
25406
+ functions: /* @__PURE__ */ jsxs163(Fragment55, { children: [
25339
25407
  /* @__PURE__ */ jsx279(HandbookAskSheet, {}),
25340
25408
  /* @__PURE__ */ jsx279(HandbookSyncButton, { refresh }),
25341
25409
  /* @__PURE__ */ jsx279(HandbookIndexStatus, { pages })
@@ -25726,7 +25794,7 @@ function groupThreadsByBucket(threads) {
25726
25794
  __name(groupThreadsByBucket, "groupThreadsByBucket");
25727
25795
 
25728
25796
  // src/features/assistant/components/parts/AssistantSidebar.tsx
25729
- import { Fragment as Fragment55, jsx as jsx286, jsxs as jsxs168 } from "react/jsx-runtime";
25797
+ import { Fragment as Fragment56, jsx as jsx286, jsxs as jsxs168 } from "react/jsx-runtime";
25730
25798
  function AssistantSidebar({
25731
25799
  threads,
25732
25800
  activeId,
@@ -25763,7 +25831,7 @@ function AssistantSidebar({
25763
25831
  " ",
25764
25832
  newLabel ?? t("features.assistant.new")
25765
25833
  ] }) }),
25766
- /* @__PURE__ */ jsx286("div", { className: "flex-1 overflow-y-auto p-2", children: threads.length === 0 ? /* @__PURE__ */ jsx286("div", { className: "text-muted-foreground mt-6 text-center text-xs", children: emptyLabel ?? t("features.assistant.empty_sidebar") }) : /* @__PURE__ */ jsxs168(Fragment55, { children: [
25834
+ /* @__PURE__ */ jsx286("div", { className: "flex-1 overflow-y-auto p-2", children: threads.length === 0 ? /* @__PURE__ */ jsx286("div", { className: "text-muted-foreground mt-6 text-center text-xs", children: emptyLabel ?? t("features.assistant.empty_sidebar") }) : /* @__PURE__ */ jsxs168(Fragment56, { children: [
25767
25835
  renderSection(t("features.assistant.bucket_today"), groups.today),
25768
25836
  renderSection(t("features.assistant.bucket_week"), groups.thisWeek),
25769
25837
  renderSection(t("features.assistant.bucket_earlier"), groups.earlier)
@@ -25773,7 +25841,7 @@ function AssistantSidebar({
25773
25841
  __name(AssistantSidebar, "AssistantSidebar");
25774
25842
 
25775
25843
  // src/features/handbook/components/containers/HandbookAskContainer.tsx
25776
- import { Fragment as Fragment56, jsx as jsx287, jsxs as jsxs169 } from "react/jsx-runtime";
25844
+ import { Fragment as Fragment57, jsx as jsx287, jsxs as jsxs169 } from "react/jsx-runtime";
25777
25845
  function HandbookAskContainer({ handbookThreadId } = {}) {
25778
25846
  const t = useTranslations151();
25779
25847
  const { threads, thread, messages, sending, ask, selectThread, startNew } = useHandbookAsk({ handbookThreadId });
@@ -25814,7 +25882,7 @@ function HandbookAskContainer({ handbookThreadId } = {}) {
25814
25882
  detailsIcon: /* @__PURE__ */ jsx287(MessagesSquareIcon2, {}),
25815
25883
  details,
25816
25884
  children: /* @__PURE__ */ jsxs169("div", { className: "flex h-full min-h-0 w-full flex-col overflow-hidden", children: [
25817
- showThread ? /* @__PURE__ */ jsx287(Fragment56, { children: /* @__PURE__ */ jsx287(
25885
+ showThread ? /* @__PURE__ */ jsx287(Fragment57, { children: /* @__PURE__ */ jsx287(
25818
25886
  AssistantThread,
25819
25887
  {
25820
25888
  messages,
@@ -25849,16 +25917,16 @@ import { useTranslations as useTranslations154 } from "next-intl";
25849
25917
  import { useMemo as useMemo60 } from "react";
25850
25918
 
25851
25919
  // src/features/assistant-message/components/EntityMentionLink.tsx
25852
- import { Fragment as Fragment57, jsx as jsx288 } from "react/jsx-runtime";
25920
+ import { Fragment as Fragment58, jsx as jsx288 } from "react/jsx-runtime";
25853
25921
  function EntityMentionLinkView({ type, id, alias }) {
25854
25922
  const generate = usePageUrlGenerator();
25855
25923
  let module;
25856
25924
  try {
25857
25925
  module = ModuleRegistry.findByName(type);
25858
25926
  } catch {
25859
- return /* @__PURE__ */ jsx288(Fragment57, { children: alias });
25927
+ return /* @__PURE__ */ jsx288(Fragment58, { children: alias });
25860
25928
  }
25861
- if (!module?.pageUrl) return /* @__PURE__ */ jsx288(Fragment57, { children: alias });
25929
+ if (!module?.pageUrl) return /* @__PURE__ */ jsx288(Fragment58, { children: alias });
25862
25930
  return /* @__PURE__ */ jsx288(Link, { href: generate({ page: module, id }), children: alias });
25863
25931
  }
25864
25932
  __name(EntityMentionLinkView, "EntityMentionLinkView");
@@ -25970,7 +26038,7 @@ function AssistantThreadHeader({ assistant, onRename, onDelete, renamePlaceholde
25970
26038
  __name(AssistantThreadHeader, "AssistantThreadHeader");
25971
26039
 
25972
26040
  // src/features/assistant/components/containers/AssistantContainer.tsx
25973
- import { Fragment as Fragment58, jsx as jsx291, jsxs as jsxs172 } from "react/jsx-runtime";
26041
+ import { Fragment as Fragment59, jsx as jsx291, jsxs as jsxs172 } from "react/jsx-runtime";
25974
26042
  function AssistantContainer({
25975
26043
  renderApprovalAction,
25976
26044
  renderMention,
@@ -25998,7 +26066,7 @@ function AssistantContainer({
25998
26066
  ),
25999
26067
  [ctx.threads, ctx.assistant?.id, ctx.selectThread, renderThreadBadge]
26000
26068
  );
26001
- const thread = /* @__PURE__ */ jsx291(Fragment58, { children: !showThread ? /* @__PURE__ */ jsx291(
26069
+ const thread = /* @__PURE__ */ jsx291(Fragment59, { children: !showThread ? /* @__PURE__ */ jsx291(
26002
26070
  AssistantEmptyState,
26003
26071
  {
26004
26072
  onSend: ctx.sendMessage,
@@ -26006,7 +26074,7 @@ function AssistantContainer({
26006
26074
  onOperatorModeChange: showOperatorToggle ? ctx.setOperatorMode : void 0,
26007
26075
  composerLeading: renderScopePicker?.()
26008
26076
  }
26009
- ) : /* @__PURE__ */ jsxs172(Fragment58, { children: [
26077
+ ) : /* @__PURE__ */ jsxs172(Fragment59, { children: [
26010
26078
  ctx.assistant ? /* @__PURE__ */ jsx291(
26011
26079
  AssistantThreadHeader,
26012
26080
  {
@@ -26162,7 +26230,7 @@ function AssistantBlockNoteComposer({
26162
26230
  __name(AssistantBlockNoteComposer, "AssistantBlockNoteComposer");
26163
26231
 
26164
26232
  // src/features/assistant/components/containers/AssistantPageContainer.tsx
26165
- import { Fragment as Fragment59, jsx as jsx293, jsxs as jsxs174 } from "react/jsx-runtime";
26233
+ import { Fragment as Fragment60, jsx as jsx293, jsxs as jsxs174 } from "react/jsx-runtime";
26166
26234
  function AssistantPageContainer({
26167
26235
  renderApprovalAction,
26168
26236
  renderMention,
@@ -26201,7 +26269,7 @@ function AssistantPageContainer({
26201
26269
  ) })
26202
26270
  ),
26203
26271
  children: /* @__PURE__ */ jsxs174("div", { className: "bg-background flex h-full w-full flex-col overflow-hidden rounded-lg border", children: [
26204
- showThread ? /* @__PURE__ */ jsxs174(Fragment59, { children: [
26272
+ showThread ? /* @__PURE__ */ jsxs174(Fragment60, { children: [
26205
26273
  ctx.assistant ? /* @__PURE__ */ jsx293(
26206
26274
  AssistantThreadHeader,
26207
26275
  {
@@ -26248,7 +26316,7 @@ __name(AssistantPageContainer, "AssistantPageContainer");
26248
26316
  // src/features/assistant-action/components/ApprovalActionCard.tsx
26249
26317
  import { ShieldAlert as ShieldAlert2 } from "lucide-react";
26250
26318
  import { useTranslations as useTranslations157 } from "next-intl";
26251
- import { Fragment as Fragment60, useEffect as useEffect83, useMemo as useMemo61, useState as useState115 } from "react";
26319
+ import { Fragment as Fragment61, useEffect as useEffect83, useMemo as useMemo61, useState as useState115 } from "react";
26252
26320
  import { jsx as jsx294, jsxs as jsxs175 } from "react/jsx-runtime";
26253
26321
  var STATUS_VARIANT2 = {
26254
26322
  pending: "softBlue",
@@ -26535,7 +26603,7 @@ function ApprovalActionCard({ actionId, summary, onResolved, hiddenRelationshipK
26535
26603
  /* @__PURE__ */ jsx294("span", { children: isUpdate ? t("features.assistant.approval.proposal.updateHeading", { entity: entityLabel }) : t("features.assistant.approval.proposal.heading", { entity: entityLabel }) }),
26536
26604
  targetLabel !== "" && /* @__PURE__ */ jsx294("span", { className: "text-foreground tracking-normal normal-case", children: targetLabel })
26537
26605
  ] }),
26538
- /* @__PURE__ */ jsx294("dl", { className: "grid grid-cols-1 gap-x-4 gap-y-1.5 sm:grid-cols-[minmax(0,10rem)_minmax(0,1fr)]", children: rows.map((row) => /* @__PURE__ */ jsxs175(Fragment60, { children: [
26606
+ /* @__PURE__ */ jsx294("dl", { className: "grid grid-cols-1 gap-x-4 gap-y-1.5 sm:grid-cols-[minmax(0,10rem)_minmax(0,1fr)]", children: rows.map((row) => /* @__PURE__ */ jsxs175(Fragment61, { children: [
26539
26607
  /* @__PURE__ */ jsx294("dt", { className: "text-muted-foreground text-xs leading-relaxed break-words sm:text-sm", children: row.label }),
26540
26608
  /* @__PURE__ */ jsx294("dd", { className: "text-foreground text-sm leading-relaxed break-words whitespace-pre-wrap", children: row.value })
26541
26609
  ] }, row.key)) })
@@ -26657,7 +26725,8 @@ import { jsx as jsx298, jsxs as jsxs177 } from "react/jsx-runtime";
26657
26725
  var NOTIFICATIONS_MODULE_NAME = "notifications";
26658
26726
  var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26659
26727
  const t = useTranslations160();
26660
- const dateLocale = dateFormatLocale(useI18nLocale());
26728
+ const { locale: dateLocale } = useDateFormatter();
26729
+ const now = useMountedNow();
26661
26730
  const generateUrl = usePageUrlGenerator();
26662
26731
  const { loadNotifications } = useNotificationContext();
26663
26732
  const archived = params.context?.archived === true;
@@ -26717,7 +26786,7 @@ var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26717
26786
  meta: { className: "w-40" },
26718
26787
  cell: /* @__PURE__ */ __name(({ row }) => {
26719
26788
  const notification = row.original.jsonApiData;
26720
- return /* @__PURE__ */ jsx298("span", { className: "text-muted-foreground text-xs", children: formatDate(new Date(notification.createdAt), "default", dateLocale) });
26789
+ return /* @__PURE__ */ jsx298("span", { className: "text-muted-foreground text-xs", children: now ? formatDate(new Date(notification.createdAt), "default", dateLocale, now) : "" });
26721
26790
  }, "cell"),
26722
26791
  enableSorting: false,
26723
26792
  enableHiding: false
@@ -26758,7 +26827,7 @@ var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26758
26827
  };
26759
26828
  const columns = useMemo62(() => {
26760
26829
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
26761
- }, [params.fields, fieldColumnMap, t, generateUrl]);
26830
+ }, [params.fields, fieldColumnMap, t, generateUrl, dateLocale, now]);
26762
26831
  return useMemo62(() => ({ data: tableData, columns }), [tableData, columns]);
26763
26832
  }, "useNotificationTableStructure");
26764
26833
  registerTableGenerator(NOTIFICATIONS_MODULE_NAME, useNotificationTableStructure);
@@ -26854,7 +26923,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
26854
26923
  // src/features/notification/components/modals/NotificationModal.tsx
26855
26924
  import { BellIcon as BellIcon2, ExternalLinkIcon } from "lucide-react";
26856
26925
  import { useTranslations as useTranslations163 } from "next-intl";
26857
- import { Fragment as Fragment61, useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo63, useRef as useRef46, useState as useState117 } from "react";
26926
+ import { Fragment as Fragment62, useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo63, useRef as useRef46, useState as useState117 } from "react";
26858
26927
  import { jsx as jsx301, jsxs as jsxs179 } from "react/jsx-runtime";
26859
26928
  function NotificationModalContent({ isOpen, setIsOpen }) {
26860
26929
  const _instanceId = useRef46(Math.random().toString(36).substr(2, 9));
@@ -27043,7 +27112,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
27043
27112
  ] }),
27044
27113
  isLoading && /* @__PURE__ */ jsx301("div", { className: "text-muted-foreground px-3 py-2 text-xs", children: t(`common.loading`) }),
27045
27114
  error && /* @__PURE__ */ jsx301("div", { className: "text-destructive px-3 py-2 text-xs", children: error }),
27046
- /* @__PURE__ */ jsx301(ScrollArea, { className: "[&_[data-slot=scroll-area-scrollbar]]:w-2.5 [&_[data-slot=scroll-area-thumb]]:bg-muted-foreground/40 [&>[data-slot=scroll-area-viewport]]:max-h-[min(32rem,calc(var(--available-height,32rem)-3.5rem))]", children: notifications.length > 0 ? /* @__PURE__ */ jsx301("div", { className: "divide-border divide-y", children: notifications.map((notification) => /* @__PURE__ */ jsx301(Fragment61, { children: generateNotification(notification, () => setIsOpen(false)) }, notification.id)) }) : /* @__PURE__ */ jsx301("div", { className: "text-muted-foreground p-6 text-center text-sm", children: t(`notification.empty`) }) })
27115
+ /* @__PURE__ */ jsx301(ScrollArea, { className: "[&_[data-slot=scroll-area-scrollbar]]:w-2.5 [&_[data-slot=scroll-area-thumb]]:bg-muted-foreground/40 [&>[data-slot=scroll-area-viewport]]:max-h-[min(32rem,calc(var(--available-height,32rem)-3.5rem))]", children: notifications.length > 0 ? /* @__PURE__ */ jsx301("div", { className: "divide-border divide-y", children: notifications.map((notification) => /* @__PURE__ */ jsx301(Fragment62, { children: generateNotification(notification, () => setIsOpen(false)) }, notification.id)) }) : /* @__PURE__ */ jsx301("div", { className: "text-muted-foreground p-6 text-center text-sm", children: t(`notification.empty`) }) })
27047
27116
  ] })
27048
27117
  ] });
27049
27118
  }
@@ -27054,7 +27123,7 @@ function NotificationModal(props) {
27054
27123
  __name(NotificationModal, "NotificationModal");
27055
27124
 
27056
27125
  // src/features/notification/components/notifications/PushNotificationProvider.tsx
27057
- import { Fragment as Fragment62, jsx as jsx302 } from "react/jsx-runtime";
27126
+ import { Fragment as Fragment63, jsx as jsx302 } from "react/jsx-runtime";
27058
27127
  function PushNotificationProvider({
27059
27128
  children,
27060
27129
  excludedRoleIds = []
@@ -27062,7 +27131,7 @@ function PushNotificationProvider({
27062
27131
  const { currentUser, hasRole } = useCurrentUserContext();
27063
27132
  const canSubscribe = !hasRole(getRoleId().Administrator) && !excludedRoleIds.some((roleId) => hasRole(roleId));
27064
27133
  usePushNotifications_default({ currentUser: currentUser ?? void 0, canSubscribe });
27065
- return /* @__PURE__ */ jsx302(Fragment62, { children });
27134
+ return /* @__PURE__ */ jsx302(Fragment63, { children });
27066
27135
  }
27067
27136
  __name(PushNotificationProvider, "PushNotificationProvider");
27068
27137
 
@@ -27404,11 +27473,11 @@ import { useMemo as useMemo65 } from "react";
27404
27473
  // src/features/tokenusage/lib/formatters.ts
27405
27474
  import { useLocale } from "next-intl";
27406
27475
  import { useMemo as useMemo64 } from "react";
27407
- function createUsageFormatters(locale, currency) {
27476
+ function createUsageFormatters(locale, currency, dateLocale = locale) {
27408
27477
  const symbol = new Intl.NumberFormat(locale, { style: "currency", currency, currencyDisplay: "narrowSymbol" }).formatToParts(0).find((part) => part.type === "currency")?.value ?? currency;
27409
27478
  const decimal = /* @__PURE__ */ __name((value, decimals) => value.toLocaleString(locale, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }), "decimal");
27410
- const dayFormat = new Intl.DateTimeFormat(locale, { day: "numeric", month: "short", timeZone: "UTC" });
27411
- const monthFormat = new Intl.DateTimeFormat(locale, { month: "short", year: "numeric", timeZone: "UTC" });
27479
+ const dayFormat = new Intl.DateTimeFormat(dateLocale, { day: "numeric", month: "short", timeZone: "UTC" });
27480
+ const monthFormat = new Intl.DateTimeFormat(dateLocale, { month: "short", year: "numeric", timeZone: "UTC" });
27412
27481
  const compactFormat = new Intl.NumberFormat(locale, { notation: "compact", maximumSignificantDigits: 3 });
27413
27482
  const collator = new Intl.Collator(locale);
27414
27483
  return {
@@ -27439,8 +27508,9 @@ function createUsageFormatters(locale, currency) {
27439
27508
  __name(createUsageFormatters, "createUsageFormatters");
27440
27509
  function useUsageFormatters() {
27441
27510
  const locale = useLocale();
27511
+ const { locale: dateLocale } = useDateFormatter();
27442
27512
  const currency = getTokenUsageCurrency();
27443
- return useMemo64(() => createUsageFormatters(locale, currency), [locale, currency]);
27513
+ return useMemo64(() => createUsageFormatters(locale, currency, dateLocale), [locale, currency, dateLocale]);
27444
27514
  }
27445
27515
  __name(useUsageFormatters, "useUsageFormatters");
27446
27516
 
@@ -28058,11 +28128,11 @@ function RoleDetails() {
28058
28128
  __name(RoleDetails, "RoleDetails");
28059
28129
 
28060
28130
  // src/features/role/components/containers/RoleContainer.tsx
28061
- import { Fragment as Fragment63, jsx as jsx311, jsxs as jsxs187 } from "react/jsx-runtime";
28131
+ import { Fragment as Fragment64, jsx as jsx311, jsxs as jsxs187 } from "react/jsx-runtime";
28062
28132
  function RoleContainer() {
28063
28133
  const { role } = useRoleContext();
28064
28134
  if (!role) return null;
28065
- return /* @__PURE__ */ jsxs187(Fragment63, { children: [
28135
+ return /* @__PURE__ */ jsxs187(Fragment64, { children: [
28066
28136
  /* @__PURE__ */ jsx311(RoleDetails, {}),
28067
28137
  /* @__PURE__ */ jsx311(RoleUsersList, { role })
28068
28138
  ] });
@@ -28107,7 +28177,7 @@ __name(FormRoles, "FormRoles");
28107
28177
  // src/features/role/components/forms/RemoveUserFromRole.tsx
28108
28178
  import { useTranslations as useTranslations173 } from "next-intl";
28109
28179
  import { useEffect as useEffect90, useState as useState122 } from "react";
28110
- import { Fragment as Fragment64, jsx as jsx313, jsxs as jsxs189 } from "react/jsx-runtime";
28180
+ import { Fragment as Fragment65, jsx as jsx313, jsxs as jsxs189 } from "react/jsx-runtime";
28111
28181
  function RemoveUserFromRole({ role, user, refresh }) {
28112
28182
  const [open, setOpen] = useState122(false);
28113
28183
  const [canRemove, setCanRemove] = useState122(false);
@@ -28156,7 +28226,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
28156
28226
  /* @__PURE__ */ jsx313(DialogTitle, { children: t(`role.remove_user.title`) }),
28157
28227
  /* @__PURE__ */ jsx313(DialogDescription, { children: canRemove ? t(`role.remove_user.subtitle_allowed`) : t(`role.remove_user.subtitle_not_allowed`) })
28158
28228
  ] }),
28159
- canRemove ? /* @__PURE__ */ jsxs189(Fragment64, { children: [
28229
+ canRemove ? /* @__PURE__ */ jsxs189(Fragment65, { children: [
28160
28230
  t(`role.remove_user.description_allowed`, { role: roleName, user: user.name }),
28161
28231
  /* @__PURE__ */ jsxs189("div", { className: "flex justify-end", children: [
28162
28232
  /* @__PURE__ */ jsx313(Button, { className: "me-2", variant: "outline", type: `button`, onClick: () => setOpen(false), children: t(`ui.buttons.cancel`) }),
@@ -28173,7 +28243,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
28173
28243
  }
28174
28244
  )
28175
28245
  ] })
28176
- ] }) : /* @__PURE__ */ jsx313(Fragment64, { children: t(`role.remove_user.description_not_allowed`, { role: roleName, user: user.name }) })
28246
+ ] }) : /* @__PURE__ */ jsx313(Fragment65, { children: t(`role.remove_user.description_not_allowed`, { role: roleName, user: user.name }) })
28177
28247
  ] })
28178
28248
  ] });
28179
28249
  }
@@ -28183,7 +28253,7 @@ __name(RemoveUserFromRole, "RemoveUserFromRole");
28183
28253
  import { PlusCircle as PlusCircle2 } from "lucide-react";
28184
28254
  import { useTranslations as useTranslations174 } from "next-intl";
28185
28255
  import { useCallback as useCallback56, useEffect as useEffect91, useRef as useRef49, useState as useState123 } from "react";
28186
- import { Fragment as Fragment65, jsx as jsx314, jsxs as jsxs190 } from "react/jsx-runtime";
28256
+ import { Fragment as Fragment66, jsx as jsx314, jsxs as jsxs190 } from "react/jsx-runtime";
28187
28257
  function UserRoleAdd({ user, refresh }) {
28188
28258
  const [open, setOpen] = useState123(false);
28189
28259
  const inputRef = useRef49(null);
@@ -28230,7 +28300,7 @@ function UserRoleAdd({ user, refresh }) {
28230
28300
  useEffect91(() => {
28231
28301
  if (open) searchRoles("");
28232
28302
  }, [open]);
28233
- return /* @__PURE__ */ jsxs190(Fragment65, { children: [
28303
+ return /* @__PURE__ */ jsxs190(Fragment66, { children: [
28234
28304
  /* @__PURE__ */ jsxs190(Button, { size: "sm", onClick: () => setOpen(true), children: [
28235
28305
  /* @__PURE__ */ jsx314(PlusCircle2, { className: "me-3 h-3.5 w-3.5" }),
28236
28306
  t(`common.association.label`, {
@@ -28560,14 +28630,14 @@ __name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
28560
28630
 
28561
28631
  // src/features/oauth/components/OAuthClientCard.tsx
28562
28632
  import { useTranslations as useTranslations180 } from "next-intl";
28563
- import { formatDistanceToNow } from "date-fns";
28564
28633
  import { Key as Key2, MoreVertical, Pencil, Trash2 as Trash24 } from "lucide-react";
28565
28634
  import { jsx as jsx320, jsxs as jsxs194 } from "react/jsx-runtime";
28566
28635
  function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
28567
28636
  const t = useTranslations180();
28568
- const dateFnsLocale = useI18nDateFnsLocale();
28637
+ const { relative } = useDateFormatter();
28638
+ const now = useMountedNow();
28569
28639
  const truncatedId = client.clientId.length > 12 ? `${client.clientId.slice(0, 8)}...${client.clientId.slice(-4)}` : client.clientId;
28570
- const createdAgo = client.createdAt ? formatDistanceToNow(new Date(client.createdAt), { addSuffix: true, locale: dateFnsLocale }) : t("oauth.ui.card.unknown");
28640
+ const createdAgo = client.createdAt ? now ? relative(new Date(client.createdAt), { now }) : void 0 : t("oauth.ui.card.unknown");
28571
28641
  return /* @__PURE__ */ jsxs194(
28572
28642
  Card,
28573
28643
  {
@@ -28620,7 +28690,7 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
28620
28690
  ] }),
28621
28691
  /* @__PURE__ */ jsx320(CardContent, { children: /* @__PURE__ */ jsxs194("div", { className: "flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted-foreground", children: [
28622
28692
  /* @__PURE__ */ jsx320("span", { className: "tabular-nums", children: truncatedId }),
28623
- /* @__PURE__ */ jsx320("span", { children: t("oauth.ui.card.created", { ago: createdAgo }) }),
28693
+ createdAgo !== void 0 && /* @__PURE__ */ jsx320("span", { children: t("oauth.ui.card.created", { ago: createdAgo }) }),
28624
28694
  /* @__PURE__ */ jsx320("span", { children: client.isConfidential ? t("oauth.ui.card.confidential") : t("oauth.ui.card.public") })
28625
28695
  ] }) })
28626
28696
  ]
@@ -28855,7 +28925,7 @@ __name(OAuthClientForm, "OAuthClientForm");
28855
28925
  import { useTranslations as useTranslations183 } from "next-intl";
28856
28926
  import { useState as useState126, useCallback as useCallback61 } from "react";
28857
28927
  import { Copy as Copy4, Check as Check2, RefreshCw as RefreshCw3, Pencil as Pencil2, Trash2 as Trash25, ExternalLink } from "lucide-react";
28858
- import { Fragment as Fragment66, jsx as jsx323, jsxs as jsxs197 } from "react/jsx-runtime";
28928
+ import { Fragment as Fragment67, jsx as jsx323, jsxs as jsxs197 } from "react/jsx-runtime";
28859
28929
  function OAuthClientDetail({
28860
28930
  client,
28861
28931
  isLoading = false,
@@ -28864,7 +28934,7 @@ function OAuthClientDetail({
28864
28934
  onRegenerateSecret
28865
28935
  }) {
28866
28936
  const t = useTranslations183();
28867
- const locale = useI18nLocale();
28937
+ const { format } = useDateFormatter();
28868
28938
  const scopeText = useOAuthScopeText();
28869
28939
  const [copiedField, setCopiedField] = useState126(null);
28870
28940
  const [showDeleteConfirm, setShowDeleteConfirm] = useState126(false);
@@ -28900,8 +28970,8 @@ function OAuthClientDetail({
28900
28970
  setShowRegenerateConfirm(false);
28901
28971
  }
28902
28972
  }, [onRegenerateSecret]);
28903
- const createdDate = client.createdAt ? new Date(client.createdAt).toLocaleDateString(dateFormatLocale(locale), { dateStyle: "long" }) : t("oauth.ui.card.unknown");
28904
- return /* @__PURE__ */ jsxs197(Fragment66, { children: [
28973
+ const createdDate = client.createdAt ? format(new Date(client.createdAt), "dateLong") : t("oauth.ui.card.unknown");
28974
+ return /* @__PURE__ */ jsxs197(Fragment67, { children: [
28905
28975
  /* @__PURE__ */ jsxs197(Card, { children: [
28906
28976
  /* @__PURE__ */ jsx323(CardHeader, { children: /* @__PURE__ */ jsxs197("div", { className: "flex items-start justify-between", children: [
28907
28977
  /* @__PURE__ */ jsxs197("div", { children: [
@@ -29110,7 +29180,7 @@ function OAuthCompanySelector({ companies, value, onChange }) {
29110
29180
  __name(OAuthCompanySelector, "OAuthCompanySelector");
29111
29181
 
29112
29182
  // src/features/oauth/components/consent/OAuthConsentScreen.tsx
29113
- import { Fragment as Fragment67, jsx as jsx328, jsxs as jsxs202 } from "react/jsx-runtime";
29183
+ import { Fragment as Fragment68, jsx as jsx328, jsxs as jsxs202 } from "react/jsx-runtime";
29114
29184
  function OAuthConsentScreen({
29115
29185
  params,
29116
29186
  logoUrl,
@@ -29144,7 +29214,7 @@ function OAuthConsentScreen({
29144
29214
  /* @__PURE__ */ jsx328(Separator, {}),
29145
29215
  /* @__PURE__ */ jsx328(OAuthScopeList, { scopes }),
29146
29216
  /* @__PURE__ */ jsx328(Separator, {}),
29147
- companies.length > 1 && /* @__PURE__ */ jsxs202(Fragment67, { children: [
29217
+ companies.length > 1 && /* @__PURE__ */ jsxs202(Fragment68, { children: [
29148
29218
  /* @__PURE__ */ jsx328(OAuthCompanySelector, { companies, value: companyId, onChange: setCompanyId }),
29149
29219
  /* @__PURE__ */ jsx328(Separator, {})
29150
29220
  ] }),
@@ -29274,7 +29344,7 @@ function WaitlistQuestionnaireRenderer({
29274
29344
  __name(WaitlistQuestionnaireRenderer, "WaitlistQuestionnaireRenderer");
29275
29345
 
29276
29346
  // src/features/waitlist/components/forms/WaitlistForm.tsx
29277
- import { Fragment as Fragment68, jsx as jsx330, jsxs as jsxs204 } from "react/jsx-runtime";
29347
+ import { Fragment as Fragment69, jsx as jsx330, jsxs as jsxs204 } from "react/jsx-runtime";
29278
29348
  function WaitlistForm({ onSuccess }) {
29279
29349
  const t = useTranslations189();
29280
29350
  const [isSubmitting, setIsSubmitting] = useState127(false);
@@ -29394,7 +29464,7 @@ function WaitlistForm({ onSuccess }) {
29394
29464
  {
29395
29465
  form,
29396
29466
  id: "gdprConsent",
29397
- label: /* @__PURE__ */ jsxs204(Fragment68, { children: [
29467
+ label: /* @__PURE__ */ jsxs204(Fragment69, { children: [
29398
29468
  t("auth.gdpr.terms_prefix"),
29399
29469
  /* @__PURE__ */ jsx330(Link, { href: "/terms", target: "_blank", rel: "noopener", children: t("auth.gdpr.terms_of_service") }),
29400
29470
  t("auth.gdpr.and"),
@@ -29688,7 +29758,7 @@ import { Popover as PopoverPrimitive2 } from "@base-ui/react/popover";
29688
29758
  import { CheckIcon as CheckIcon10, MinusIcon as MinusIcon3, XIcon as XIcon15 } from "lucide-react";
29689
29759
  import { useTranslations as useTranslations193 } from "next-intl";
29690
29760
  import { useCallback as useCallback63, useEffect as useEffect94, useState as useState130 } from "react";
29691
- import { Fragment as Fragment69, jsx as jsx336, jsxs as jsxs210 } from "react/jsx-runtime";
29761
+ import { Fragment as Fragment70, jsx as jsx336, jsxs as jsxs210 } from "react/jsx-runtime";
29692
29762
  function RbacPermissionPicker({
29693
29763
  open,
29694
29764
  anchor,
@@ -29774,7 +29844,7 @@ function RbacPermissionPicker({
29774
29844
  )
29775
29845
  ] })
29776
29846
  ] }),
29777
- isRoleColumn && onClear && /* @__PURE__ */ jsxs210(Fragment69, { children: [
29847
+ isRoleColumn && onClear && /* @__PURE__ */ jsxs210(Fragment70, { children: [
29778
29848
  /* @__PURE__ */ jsx336(Separator, {}),
29779
29849
  /* @__PURE__ */ jsxs210(
29780
29850
  Button,
@@ -30061,7 +30131,7 @@ __name(RbacContainer, "RbacContainer");
30061
30131
  // src/features/rbac/components/RbacByRoleContainer.tsx
30062
30132
  import { Loader2Icon as Loader2Icon5 } from "lucide-react";
30063
30133
  import { useTranslations as useTranslations195 } from "next-intl";
30064
- import { Fragment as Fragment70, memo as memo3, useCallback as useCallback65, useEffect as useEffect96, useMemo as useMemo71, useRef as useRef51, useState as useState132 } from "react";
30134
+ import { Fragment as Fragment71, memo as memo3, useCallback as useCallback65, useEffect as useEffect96, useMemo as useMemo71, useRef as useRef51, useState as useState132 } from "react";
30065
30135
  import { jsx as jsx338, jsxs as jsxs212 } from "react/jsx-runtime";
30066
30136
  function findToken2(tokens, action) {
30067
30137
  if (!tokens) return void 0;
@@ -30187,7 +30257,7 @@ function RbacByRoleContainer() {
30187
30257
  const defaultTokens = block.default ?? [];
30188
30258
  const roleTokens = block[selectedRoleId];
30189
30259
  const moduleLabel = moduleNames?.[moduleId] ?? moduleId;
30190
- return /* @__PURE__ */ jsxs212(Fragment70, { children: [
30260
+ return /* @__PURE__ */ jsxs212(Fragment71, { children: [
30191
30261
  /* @__PURE__ */ jsx338("tr", { className: "border-b bg-muted/40", children: /* @__PURE__ */ jsx338(
30192
30262
  "td",
30193
30263
  {
@@ -30887,4 +30957,4 @@ export {
30887
30957
  useOAuthClients,
30888
30958
  useOAuthClient
30889
30959
  };
30890
- //# sourceMappingURL=chunk-HP6DT6K3.mjs.map
30960
+ //# sourceMappingURL=chunk-KVYYPKRO.mjs.map