@carlonicora/nextjs-jsonapi 6.24.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 (246) hide show
  1. package/dist/{BlockNoteEditor-MONT74RQ.js → BlockNoteEditor-TNX77GCD.js} +28 -25
  2. package/dist/BlockNoteEditor-TNX77GCD.js.map +1 -0
  3. package/dist/{BlockNoteEditor-ENDOVTAW.mjs → BlockNoteEditor-Z5LDF47Z.mjs} +13 -10
  4. package/dist/{BlockNoteEditor-ENDOVTAW.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-OZADFYE7.mjs → chunk-KVYYPKRO.mjs} +308 -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-BDWV4KYR.js → chunk-M6SNTMK6.js} +1386 -1319
  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/FormDate.d.ts.map +1 -1
  72. package/dist/components/forms/FormDateTime.d.ts.map +1 -1
  73. package/dist/components/forms/time-cycle.d.ts +14 -0
  74. package/dist/components/forms/time-cycle.d.ts.map +1 -0
  75. package/dist/components/index.js +11 -8
  76. package/dist/components/index.js.map +1 -1
  77. package/dist/components/index.mjs +10 -7
  78. package/dist/components/tables/cells/cell.date.d.ts.map +1 -1
  79. package/dist/components/tables/cells/cell.dateTime.d.ts.map +1 -1
  80. package/dist/contexts/DateLocaleContext.d.ts +56 -0
  81. package/dist/contexts/DateLocaleContext.d.ts.map +1 -0
  82. package/dist/contexts/index.d.ts +1 -0
  83. package/dist/contexts/index.d.ts.map +1 -1
  84. package/dist/contexts/index.js +24 -8
  85. package/dist/contexts/index.js.map +1 -1
  86. package/dist/contexts/index.mjs +23 -7
  87. package/dist/core/index.js +17 -6
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/index.mjs +19 -8
  90. package/dist/date-locale/index.d.ts +2 -0
  91. package/dist/date-locale/index.d.ts.map +1 -0
  92. package/dist/date-locale/index.js +21 -0
  93. package/dist/date-locale/index.js.map +1 -0
  94. package/dist/date-locale/index.mjs +21 -0
  95. package/dist/email-automations/index.js +131 -123
  96. package/dist/email-automations/index.js.map +1 -1
  97. package/dist/email-automations/index.mjs +23 -15
  98. package/dist/email-automations/index.mjs.map +1 -1
  99. package/dist/features/account-deletion/components/AccountDeletionAdminTrigger.d.ts.map +1 -1
  100. package/dist/features/analytics/components/AnalyticsJourneyContainer.d.ts.map +1 -1
  101. package/dist/features/analytics/components/AnalyticsSessionsTable.d.ts.map +1 -1
  102. package/dist/features/analytics/index.js +154 -147
  103. package/dist/features/analytics/index.js.map +1 -1
  104. package/dist/features/analytics/index.mjs +32 -25
  105. package/dist/features/analytics/index.mjs.map +1 -1
  106. package/dist/features/analytics/server.js +11 -9
  107. package/dist/features/analytics/server.js.map +1 -1
  108. package/dist/features/analytics/server.mjs +9 -7
  109. package/dist/features/analytics/server.mjs.map +1 -1
  110. package/dist/features/billing/components/utils/date.d.ts +3 -3
  111. package/dist/features/billing/components/utils/format-options.d.ts +6 -4
  112. package/dist/features/billing/components/utils/format-options.d.ts.map +1 -1
  113. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts +5 -1
  114. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts.map +1 -1
  115. package/dist/features/billing/stripe-usage/components/details/UsageSummaryCard.d.ts.map +1 -1
  116. package/dist/features/billing/stripe-usage/components/lists/UsageHistoryTable.d.ts.map +1 -1
  117. package/dist/features/blog/components/admin/BlogTranslationStatus.d.ts.map +1 -1
  118. package/dist/features/blog/components/public/BlogPostMeta.d.ts.map +1 -1
  119. package/dist/features/blog/hooks/useBlogPostTableStructure.d.ts.map +1 -1
  120. package/dist/features/blog/index.js +168 -162
  121. package/dist/features/blog/index.js.map +1 -1
  122. package/dist/features/blog/index.mjs +25 -19
  123. package/dist/features/blog/index.mjs.map +1 -1
  124. package/dist/features/blog/server.js +29 -27
  125. package/dist/features/blog/server.js.map +1 -1
  126. package/dist/features/blog/server.mjs +8 -6
  127. package/dist/features/blog/server.mjs.map +1 -1
  128. package/dist/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.d.ts.map +1 -1
  129. package/dist/features/handbook/components/parts/HandbookIndexStatus.d.ts.map +1 -1
  130. package/dist/features/help/components/HelpArticleBody.d.ts.map +1 -1
  131. package/dist/features/help/index.js +48 -43
  132. package/dist/features/help/index.js.map +1 -1
  133. package/dist/features/help/index.mjs +15 -10
  134. package/dist/features/help/index.mjs.map +1 -1
  135. package/dist/features/notification/components/notifications/Notification.d.ts +2 -1
  136. package/dist/features/notification/components/notifications/Notification.d.ts.map +1 -1
  137. package/dist/features/notification/contexts/NotificationContext.d.ts.map +1 -1
  138. package/dist/features/notification/hooks/useNotificationTableStructure.d.ts.map +1 -1
  139. package/dist/features/oauth/components/OAuthClientCard.d.ts.map +1 -1
  140. package/dist/features/oauth/components/OAuthClientDetail.d.ts.map +1 -1
  141. package/dist/features/tokenusage/index.js +133 -130
  142. package/dist/features/tokenusage/index.js.map +1 -1
  143. package/dist/features/tokenusage/index.mjs +10 -7
  144. package/dist/features/tokenusage/index.mjs.map +1 -1
  145. package/dist/features/tokenusage/lib/formatters.d.ts +6 -3
  146. package/dist/features/tokenusage/lib/formatters.d.ts.map +1 -1
  147. package/dist/index.js +19 -7
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +23 -11
  150. package/dist/local-transport-AT4TE264.js +15 -0
  151. package/dist/{local-transport-MJPOKPTU.js.map → local-transport-AT4TE264.js.map} +1 -1
  152. package/dist/{local-transport-RVD4FZGA.mjs → local-transport-KWEUZ4GX.mjs} +5 -5
  153. package/dist/offline/index.js +56 -54
  154. package/dist/offline/index.js.map +1 -1
  155. package/dist/offline/index.mjs +23 -21
  156. package/dist/offline/index.mjs.map +1 -1
  157. package/dist/{request-4AWGPIGH.mjs → request-6GAIWWTG.mjs} +2 -2
  158. package/dist/{request-H5FZBZA2.js → request-BWO4Y434.js} +3 -3
  159. package/dist/{request-H5FZBZA2.js.map → request-BWO4Y434.js.map} +1 -1
  160. package/dist/server/ServerSession.d.ts +2 -0
  161. package/dist/server/ServerSession.d.ts.map +1 -1
  162. package/dist/server/index.js +10 -8
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/index.mjs +9 -7
  165. package/dist/utils/date-formatter.d.ts +45 -4
  166. package/dist/utils/date-formatter.d.ts.map +1 -1
  167. package/dist/utils/index.d.ts +1 -1
  168. package/dist/utils/index.d.ts.map +1 -1
  169. package/dist/write-through-KNRI5L4V.mjs +15 -0
  170. package/dist/write-through-KNRI5L4V.mjs.map +1 -0
  171. package/dist/write-through-MYHQ6GJU.js +15 -0
  172. package/dist/{write-through-HE2QSOVI.js.map → write-through-MYHQ6GJU.js.map} +1 -1
  173. package/messages/en.json +1 -0
  174. package/messages/it.json +1 -0
  175. package/package.json +6 -1
  176. package/src/components/forms/DatePickerPopover.tsx +5 -3
  177. package/src/components/forms/DateRangeSelector.tsx +9 -7
  178. package/src/components/forms/FormDate.tsx +5 -3
  179. package/src/components/forms/FormDateTime.tsx +75 -39
  180. package/src/components/forms/__tests__/time-cycle.spec.ts +37 -0
  181. package/src/components/forms/time-cycle.ts +27 -0
  182. package/src/components/tables/cells/cell.date.tsx +3 -5
  183. package/src/components/tables/cells/cell.dateTime.tsx +3 -7
  184. package/src/contexts/DateLocaleContext.tsx +106 -0
  185. package/src/contexts/__tests__/DateLocaleContext.spec.tsx +175 -0
  186. package/src/contexts/index.ts +1 -0
  187. package/src/date-locale/index.ts +12 -0
  188. package/src/features/account-deletion/components/AccountDeletionAdminTrigger.tsx +3 -4
  189. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +8 -8
  190. package/src/features/analytics/components/AnalyticsSessionsTable.tsx +4 -6
  191. package/src/features/auth/components/two-factor/PasskeyList.tsx +3 -3
  192. package/src/features/auth/components/two-factor/TotpAuthenticatorList.tsx +3 -3
  193. package/src/features/billing/components/utils/__tests__/billing-formatters.spec.ts +14 -6
  194. package/src/features/billing/components/utils/date.ts +5 -5
  195. package/src/features/billing/components/utils/format-options.ts +6 -4
  196. package/src/features/billing/components/utils/useBillingFormatOptions.ts +8 -2
  197. package/src/features/billing/stripe-usage/components/details/UsageSummaryCard.tsx +4 -12
  198. package/src/features/billing/stripe-usage/components/lists/UsageHistoryTable.tsx +4 -17
  199. package/src/features/blog/components/admin/BlogTranslationStatus.tsx +3 -2
  200. package/src/features/blog/components/public/BlogPostMeta.tsx +5 -4
  201. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +1 -2
  202. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +2 -3
  203. package/src/features/blog/hooks/useBlogPostTableStructure.tsx +4 -8
  204. package/src/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.tsx +11 -5
  205. package/src/features/email-blast/components/containers/EmailBlastContainer.tsx +3 -3
  206. package/src/features/email-blast/hooks/useEmailBlastTableStructure.tsx +4 -4
  207. package/src/features/handbook/components/parts/HandbookIndexStatus.tsx +4 -3
  208. package/src/features/help/components/HelpArticleBody.tsx +4 -3
  209. package/src/features/notification/components/notifications/Notification.tsx +38 -7
  210. package/src/features/notification/contexts/NotificationContext.tsx +6 -3
  211. package/src/features/notification/hooks/useNotificationTableStructure.tsx +6 -5
  212. package/src/features/oauth/components/OAuthClientCard.tsx +8 -5
  213. package/src/features/oauth/components/OAuthClientDetail.tsx +3 -6
  214. package/src/features/tokenusage/lib/__tests__/formatters.spec.ts +19 -0
  215. package/src/features/tokenusage/lib/formatters.ts +11 -6
  216. package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +5 -5
  217. package/src/server/ServerSession.ts +3 -0
  218. package/src/server/__tests__/ServerSession.read.spec.ts +18 -1
  219. package/src/utils/__tests__/date-formatter.spec.ts +134 -10
  220. package/src/utils/date-formatter.ts +200 -44
  221. package/src/utils/index.ts +11 -1
  222. package/dist/BlockNoteEditor-MONT74RQ.js.map +0 -1
  223. package/dist/BlockNoteViewer-K2HBF3IP.js.map +0 -1
  224. package/dist/JsonApiRequest-KC6DOHKT.js +0 -26
  225. package/dist/chunk-7OIWOPM5.mjs.map +0 -1
  226. package/dist/chunk-BDWV4KYR.js.map +0 -1
  227. package/dist/chunk-HN7L6RRW.js.map +0 -1
  228. package/dist/chunk-N2BFT7KI.mjs.map +0 -1
  229. package/dist/chunk-OZADFYE7.mjs.map +0 -1
  230. package/dist/chunk-P7L6OFX5.js.map +0 -1
  231. package/dist/chunk-SO3YUCL6.js.map +0 -1
  232. package/dist/chunk-T6G2F2BK.mjs.map +0 -1
  233. package/dist/chunk-TNTCLVUR.js.map +0 -1
  234. package/dist/local-transport-MJPOKPTU.js +0 -15
  235. package/dist/write-through-7I3LA2WN.mjs +0 -15
  236. package/dist/write-through-HE2QSOVI.js +0 -15
  237. /package/dist/{JsonApiRequest-ADLBJ5RX.mjs.map → JsonApiRequest-WNPDS356.mjs.map} +0 -0
  238. /package/dist/{chunk-VNUT2D27.mjs.map → chunk-2PWYG2WJ.mjs.map} +0 -0
  239. /package/dist/{chunk-W4ML6D2X.mjs.map → chunk-3U7YJ73T.mjs.map} +0 -0
  240. /package/dist/{chunk-BE6UMM5X.mjs.map → chunk-47HNJQ7U.mjs.map} +0 -0
  241. /package/dist/{chunk-S7SPAC6X.mjs.map → chunk-73NKUBMP.mjs.map} +0 -0
  242. /package/dist/{chunk-YTDGYI62.mjs.map → chunk-DWPHHUMV.mjs.map} +0 -0
  243. /package/dist/{chunk-YMCL3JXZ.mjs.map → chunk-YPBIPE2B.mjs.map} +0 -0
  244. /package/dist/{local-transport-RVD4FZGA.mjs.map → date-locale/index.mjs.map} +0 -0
  245. /package/dist/{request-4AWGPIGH.mjs.map → local-transport-KWEUZ4GX.mjs.map} +0 -0
  246. /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(
@@ -10871,7 +10875,7 @@ import { useRef as useRef18 } from "react";
10871
10875
  import dynamic from "next/dynamic";
10872
10876
  import React18 from "react";
10873
10877
  import { jsx as jsx91 } from "react/jsx-runtime";
10874
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-ENDOVTAW.mjs"), {
10878
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-Z5LDF47Z.mjs"), {
10875
10879
  ssr: false
10876
10880
  });
10877
10881
  var BlockNoteEditorContainer = React18.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -11029,8 +11033,9 @@ function FormDate({
11029
11033
  futureYears
11030
11034
  }) {
11031
11035
  const t = useI18nTranslations();
11032
- const locale = useI18nLocale();
11036
+ const { locale } = useDateLocale();
11033
11037
  const dateFnsLocale = useI18nDateFnsLocale();
11038
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
11034
11039
  const [open, setOpen] = useState27(false);
11035
11040
  const [displayMonth, setDisplayMonth] = useState27(() => {
11036
11041
  const currentValue = form.getValues(id);
@@ -11125,7 +11130,7 @@ function FormDate({
11125
11130
  },
11126
11131
  disabled: (date) => minDate && date < minDate ? true : false,
11127
11132
  locale: dateFnsLocale,
11128
- weekStartsOn: 1,
11133
+ weekStartsOn,
11129
11134
  month: displayMonth,
11130
11135
  onMonthChange: setDisplayMonth,
11131
11136
  startMonth: new Date(1900, 0),
@@ -11156,6 +11161,33 @@ __name(FormDate, "FormDate");
11156
11161
  // src/components/forms/FormDateTime.tsx
11157
11162
  import { Calendar as CalendarIcon4, CircleXIcon as CircleXIcon3 } from "lucide-react";
11158
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
11159
11191
  import { jsx as jsx95, jsxs as jsxs54 } from "react/jsx-runtime";
11160
11192
  function snapToFiveMinutes(date) {
11161
11193
  const snapped = new Date(date);
@@ -11179,24 +11211,15 @@ function FormDateTime({
11179
11211
  }) {
11180
11212
  const [open, setOpen] = useState28(false);
11181
11213
  const t = useI18nTranslations();
11182
- const locale = useI18nLocale();
11214
+ const { format, locale, twelveHourClock } = useDateFormatter();
11183
11215
  const dateFnsLocale = useI18nDateFnsLocale();
11216
+ const weekStartsOn = dateFnsLocale?.options?.weekStartsOn ?? 1;
11184
11217
  const [displayMonth, setDisplayMonth] = useState28(() => {
11185
11218
  const currentValue = form.getValues(id);
11186
11219
  return currentValue || defaultMonth || reference?.date || /* @__PURE__ */ new Date();
11187
11220
  });
11188
- const dateTimeFormatter = useMemo15(
11189
- () => new Intl.DateTimeFormat(locale, {
11190
- year: "numeric",
11191
- month: "long",
11192
- day: "numeric",
11193
- hour: "2-digit",
11194
- minute: "2-digit",
11195
- hour12: false
11196
- }),
11197
- [locale]
11198
- );
11199
- 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]);
11200
11223
  const initialTime = reference ? snapToFiveMinutes(reference.date) : /* @__PURE__ */ new Date();
11201
11224
  const [selectedHours, setSelectedHours] = useState28(initialTime.getHours());
11202
11225
  const [selectedMinutes, setSelectedMinutes] = useState28(roundToNearestFiveMinutes(initialTime.getMinutes()));
@@ -11208,13 +11231,23 @@ function FormDateTime({
11208
11231
  reference: "rounded-(--cell-radius) ring-1 ring-primary ring-offset-1 ring-offset-background",
11209
11232
  marked: "[&>button]:underline [&>button]:decoration-2 [&>button]:underline-offset-4"
11210
11233
  };
11211
- 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) => {
11212
11241
  const hour = i;
11213
11242
  return {
11214
11243
  value: hour,
11215
11244
  label: hour.toString().padStart(2, "0")
11216
11245
  };
11217
11246
  });
11247
+ const periodOptions = [
11248
+ { value: "am", label: periodLabels.am },
11249
+ { value: "pm", label: periodLabels.pm }
11250
+ ];
11218
11251
  const minutesOptions = Array.from({ length: 12 }, (_, i) => {
11219
11252
  const minute = i * 5;
11220
11253
  return {
@@ -11224,6 +11257,7 @@ function FormDateTime({
11224
11257
  });
11225
11258
  const hoursItems = Object.fromEntries(hoursOptions.map((option) => [String(option.value), option.label]));
11226
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]));
11227
11261
  function roundToNearestFiveMinutes(minutes) {
11228
11262
  return Math.round(minutes / 5) * 5 % 60;
11229
11263
  }
@@ -11237,6 +11271,8 @@ function FormDateTime({
11237
11271
  setSelectedHours(referenceDate.getHours());
11238
11272
  setSelectedMinutes(referenceDate.getMinutes());
11239
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");
11240
11276
  const handleTimeChange = /* @__PURE__ */ __name((hours, minutes) => {
11241
11277
  const currentDate = form.getValues(id);
11242
11278
  if (currentDate) {
@@ -11303,7 +11339,7 @@ function FormDateTime({
11303
11339
  },
11304
11340
  disabled: (date) => minDate && date < minDate ? true : false,
11305
11341
  locale: dateFnsLocale,
11306
- weekStartsOn: 1,
11342
+ weekStartsOn,
11307
11343
  startMonth: new Date(1900, 0),
11308
11344
  endMonth: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 11),
11309
11345
  modifiers: dayModifiers,
@@ -11325,18 +11361,18 @@ function FormDateTime({
11325
11361
  Select,
11326
11362
  {
11327
11363
  items: hoursItems,
11328
- value: String(field.value ? new Date(field.value).getHours() : selectedHours),
11364
+ value: String(
11365
+ twelveHourClock ? from24Hour(currentHours(field.value)).hour12 : currentHours(field.value)
11366
+ ),
11329
11367
  onValueChange: (value) => {
11330
11368
  if (!value) return;
11331
- const hours = parseInt(value);
11369
+ const picked = parseInt(value);
11370
+ const hours = twelveHourClock ? to24Hour(picked, from24Hour(currentHours(field.value)).period) : picked;
11332
11371
  setSelectedHours(hours);
11333
- handleTimeChange(
11334
- hours,
11335
- field.value ? roundToNearestFiveMinutes(new Date(field.value).getMinutes()) : selectedMinutes
11336
- );
11372
+ handleTimeChange(hours, currentMinutes(field.value));
11337
11373
  },
11338
11374
  children: [
11339
- /* @__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, {}) }),
11340
11376
  /* @__PURE__ */ jsx95(SelectContent, { children: hoursOptions.map((option) => /* @__PURE__ */ jsx95(SelectItem, { value: String(option.value), children: option.label }, option.value)) })
11341
11377
  ]
11342
11378
  }
@@ -11349,21 +11385,39 @@ function FormDateTime({
11349
11385
  Select,
11350
11386
  {
11351
11387
  items: minutesItems,
11352
- value: String(
11353
- field.value ? roundToNearestFiveMinutes(new Date(field.value).getMinutes()) : selectedMinutes
11354
- ),
11388
+ value: String(currentMinutes(field.value)),
11355
11389
  onValueChange: (value) => {
11356
11390
  if (!value) return;
11357
11391
  const minutes = parseInt(value);
11358
11392
  setSelectedMinutes(minutes);
11359
- handleTimeChange(field.value ? new Date(field.value).getHours() : selectedHours, minutes);
11393
+ handleTimeChange(currentHours(field.value), minutes);
11360
11394
  },
11361
11395
  children: [
11362
- /* @__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, {}) }),
11363
11397
  /* @__PURE__ */ jsx95(SelectContent, { children: minutesOptions.map((option) => /* @__PURE__ */ jsx95(SelectItem, { value: String(option.value), children: option.label }, option.value)) })
11364
11398
  ]
11365
11399
  }
11366
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
+ )
11367
11421
  ] })
11368
11422
  ] }),
11369
11423
  /* @__PURE__ */ jsxs54("div", { className: "mt-2 flex flex-row gap-x-2", children: [
@@ -13772,7 +13826,7 @@ import { createContext as createContext18, useCallback as useCallback23, useCont
13772
13826
 
13773
13827
  // src/features/notification/components/notifications/Notification.tsx
13774
13828
  import { useTranslations as useTranslations48 } from "next-intl";
13775
- import { useEffect as useEffect29, useState as useState39 } from "react";
13829
+ import { Suspense, useEffect as useEffect29, useState as useState39 } from "react";
13776
13830
 
13777
13831
  // src/features/notification/components/notifications/NotificationIcon.tsx
13778
13832
  import { ArchiveIcon, AudioLinesIcon, BellIcon } from "lucide-react";
@@ -13801,7 +13855,7 @@ function NotificationIcon({ notificationType, className }) {
13801
13855
  __name(NotificationIcon, "NotificationIcon");
13802
13856
 
13803
13857
  // src/features/notification/components/notifications/Notification.tsx
13804
- 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";
13805
13859
  var generateNotificationData = /* @__PURE__ */ __name((params) => {
13806
13860
  const response = {};
13807
13861
  response.actor = params.notification.actor;
@@ -13810,7 +13864,12 @@ var generateNotificationData = /* @__PURE__ */ __name((params) => {
13810
13864
  }
13811
13865
  return response;
13812
13866
  }, "generateNotificationData");
13813
- 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) {
13814
13873
  const data = generateNotificationData({ notification, generateUrl });
13815
13874
  return {
13816
13875
  title: t(`notification.${notification.notificationType}.title`),
@@ -13823,7 +13882,7 @@ function NotificationToast(notification, t, generateUrl, reouter, locale) {
13823
13882
  title: data.title,
13824
13883
  message: notification.message ?? ""
13825
13884
  }) }),
13826
- /* @__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 }) }) }) })
13827
13886
  ] })
13828
13887
  ] }),
13829
13888
  action: data.url ? {
@@ -13835,11 +13894,16 @@ function NotificationToast(notification, t, generateUrl, reouter, locale) {
13835
13894
  };
13836
13895
  }
13837
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");
13838
13903
  function NotificationMenuItem({ notification, closePopover }) {
13839
13904
  const generateUrl = usePageUrlGenerator();
13840
13905
  const [isRead, setIsRead] = useState39(false);
13841
13906
  const t = useTranslations48();
13842
- const dateLocale = dateFormatLocale(useI18nLocale());
13843
13907
  useEffect29(() => {
13844
13908
  setIsRead(notification.isRead);
13845
13909
  }, []);
@@ -13861,7 +13925,7 @@ function NotificationMenuItem({ notification, closePopover }) {
13861
13925
  title: data.title,
13862
13926
  message: notification.message ?? ""
13863
13927
  }) }),
13864
- /* @__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 }) }) })
13865
13929
  ] }),
13866
13930
  !isRead && /* @__PURE__ */ jsx145("span", { className: "bg-primary mt-1.5 size-2 shrink-0 rounded-full", "aria-hidden": true })
13867
13931
  ]
@@ -13878,7 +13942,7 @@ import { jsx as jsx146 } from "react/jsx-runtime";
13878
13942
  var NotificationContext = createContext18(void 0);
13879
13943
  var NotificationContextProvider = /* @__PURE__ */ __name(({ children }) => {
13880
13944
  const t = useTranslations49();
13881
- const locale = useI18nLocale();
13945
+ const dateLocaleSource = useDateLocaleSource();
13882
13946
  const tRef = useRef23(t);
13883
13947
  tRef.current = t;
13884
13948
  const router = useI18nRouter();
@@ -13965,7 +14029,7 @@ var NotificationContextProvider = /* @__PURE__ */ __name(({ children }) => {
13965
14029
  }
13966
14030
  }, []);
13967
14031
  const generateToastNotification = /* @__PURE__ */ __name((notification, t2, generateUrl) => {
13968
- return NotificationToast(notification, t2, generateUrl, router, locale);
14032
+ return NotificationToast(notification, t2, generateUrl, router, dateLocaleSource);
13969
14033
  }, "generateToastNotification");
13970
14034
  const generateNotification = /* @__PURE__ */ __name((notification, closePopover) => {
13971
14035
  return /* @__PURE__ */ jsx146(NotificationMenuItem, { notification, closePopover });
@@ -15654,7 +15718,7 @@ function useSocket({ token, paused = false }) {
15654
15718
  __name(useSocket, "useSocket");
15655
15719
 
15656
15720
  // src/components/navigations/Breadcrumb.tsx
15657
- 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";
15658
15722
  var ITEMS_TO_DISPLAY = 4;
15659
15723
  function BreadcrumbDesktop({
15660
15724
  items,
@@ -15665,24 +15729,24 @@ function BreadcrumbDesktop({
15665
15729
  const t = useTranslations57();
15666
15730
  const [open, setOpen] = useState49(false);
15667
15731
  return /* @__PURE__ */ jsx161(Breadcrumb, { children: /* @__PURE__ */ jsxs87(BreadcrumbList, { children: [
15668
- showRoot && /* @__PURE__ */ jsxs87(Fragment23, { children: [
15732
+ showRoot && /* @__PURE__ */ jsxs87(Fragment24, { children: [
15669
15733
  /* @__PURE__ */ jsx161(BreadcrumbItem, { children: /* @__PURE__ */ jsx161(Link, { href: generateUrl({ page: `/` }), children: rootLabel }) }),
15670
15734
  items.length > 0 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15671
15735
  ] }),
15672
- items.length > ITEMS_TO_DISPLAY ? /* @__PURE__ */ jsxs87(Fragment23, { children: [
15673
- /* @__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 }) }),
15674
15738
  /* @__PURE__ */ jsx161(BreadcrumbSeparator, {}),
15675
15739
  /* @__PURE__ */ jsx161(BreadcrumbItem, { children: /* @__PURE__ */ jsxs87(DropdownMenu, { open, onOpenChange: setOpen, children: [
15676
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") }) }),
15677
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)) })
15678
15742
  ] }) }),
15679
15743
  /* @__PURE__ */ jsx161(BreadcrumbSeparator, {}),
15680
- items.slice(-ITEMS_TO_DISPLAY + 2).map((item, index) => /* @__PURE__ */ jsxs87(Fragment22, { children: [
15681
- /* @__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 }) }),
15682
15746
  index < items.slice(-ITEMS_TO_DISPLAY + 2).length - 1 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15683
15747
  ] }, index))
15684
- ] }) : /* @__PURE__ */ jsx161(Fragment23, { children: items.map((item, index) => /* @__PURE__ */ jsxs87(Fragment22, { children: [
15685
- /* @__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 }) }),
15686
15750
  index < items.length - 1 && /* @__PURE__ */ jsx161(BreadcrumbSeparator, {})
15687
15751
  ] }, index)) })
15688
15752
  ] }) });
@@ -15846,7 +15910,7 @@ __name(Header, "Header");
15846
15910
  // src/components/navigations/MobileNavigationBar.tsx
15847
15911
  import { useTranslations as useTranslations59 } from "next-intl";
15848
15912
  import { usePathname as usePathname2 } from "next/navigation";
15849
- 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";
15850
15914
  function isActiveHref(pathname, href) {
15851
15915
  if (href === "/") return pathname === "/";
15852
15916
  return pathname === href || pathname.startsWith(`${href}/`);
@@ -15858,7 +15922,7 @@ var slotClass = cn(
15858
15922
  "transition-colors"
15859
15923
  );
15860
15924
  function SlotContent({ item }) {
15861
- if (item.render) return /* @__PURE__ */ jsx164(Fragment24, { children: item.render });
15925
+ if (item.render) return /* @__PURE__ */ jsx164(Fragment25, { children: item.render });
15862
15926
  const Icon = item.icon;
15863
15927
  return Icon ? /* @__PURE__ */ jsx164(Icon, { className: "size-6" }) : null;
15864
15928
  }
@@ -15879,7 +15943,7 @@ function MobileNavigationBar({ className } = {}) {
15879
15943
  children: items.map((item) => {
15880
15944
  const active = item.href ? isActiveHref(pathname, item.href) : false;
15881
15945
  const tone = active ? "text-primary" : "text-muted-foreground";
15882
- const body = /* @__PURE__ */ jsxs90(Fragment24, { children: [
15946
+ const body = /* @__PURE__ */ jsxs90(Fragment25, { children: [
15883
15947
  active && /* @__PURE__ */ jsx164("span", { "aria-hidden": true, className: "bg-primary absolute inset-x-0 top-0 h-0.5" }),
15884
15948
  /* @__PURE__ */ jsx164(SlotContent, { item })
15885
15949
  ] });
@@ -16295,7 +16359,7 @@ __name(ReactMarkdownContainer, "ReactMarkdownContainer");
16295
16359
  // src/components/containers/RoundPageContainerTitle.tsx
16296
16360
  import { InfoIcon as InfoIcon2 } from "lucide-react";
16297
16361
  import { useTranslations as useTranslations62 } from "next-intl";
16298
- 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";
16299
16363
  var HEADER_ROW_MIN_H = "min-h-[53px]";
16300
16364
  function RoundPageContainerTitle({
16301
16365
  module,
@@ -16355,7 +16419,7 @@ function RoundPageContainerTitle({
16355
16419
  module && module.icon ? /* @__PURE__ */ jsx171(module.icon, { className: "text-primary h-5 w-5 shrink-0" }) : title.icon,
16356
16420
  /* @__PURE__ */ jsxs95("span", { className: "truncate", children: [
16357
16421
  title.type,
16358
- title.element && /* @__PURE__ */ jsxs95(Fragment25, { children: [
16422
+ title.element && /* @__PURE__ */ jsxs95(Fragment26, { children: [
16359
16423
  /* @__PURE__ */ jsx171("span", { "aria-hidden": true, children: " \xB7 " }),
16360
16424
  /* @__PURE__ */ jsx171("span", { className: "text-primary font-semibold", children: title.element })
16361
16425
  ] })
@@ -16395,8 +16459,8 @@ __name(RoundPageContainerTitle, "RoundPageContainerTitle");
16395
16459
  // src/components/containers/RoundPageContainer.tsx
16396
16460
  import { useTranslations as useTranslations63 } from "next-intl";
16397
16461
  import { useSearchParams } from "next/navigation";
16398
- import { Fragment as Fragment26, useCallback as useCallback28, useEffect as useEffect45, useMemo as useMemo23, useRef as useRef29, useState as useState55 } from "react";
16399
- 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";
16400
16464
  var DETAILS_COOKIE_NAME = "round_page_details_state";
16401
16465
  var DETAILS_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
16402
16466
  var railTriggerClass = cn(
@@ -16512,7 +16576,7 @@ function RoundPageContainer({
16512
16576
  const innerScrollY = mobileFlow ? `` : scrollY;
16513
16577
  const showMobileSectionPicker = (tabs?.length ?? 0) > 1;
16514
16578
  if (!isReady) {
16515
- return /* @__PURE__ */ jsxs96(Fragment27, { children: [
16579
+ return /* @__PURE__ */ jsxs96(Fragment28, { children: [
16516
16580
  /* @__PURE__ */ jsx172(
16517
16581
  Header,
16518
16582
  {
@@ -16550,7 +16614,7 @@ function RoundPageContainer({
16550
16614
  )
16551
16615
  ] });
16552
16616
  }
16553
- return /* @__PURE__ */ jsxs96(Fragment27, { children: [
16617
+ return /* @__PURE__ */ jsxs96(Fragment28, { children: [
16554
16618
  /* @__PURE__ */ jsx172(
16555
16619
  Header,
16556
16620
  {
@@ -16624,7 +16688,7 @@ function RoundPageContainer({
16624
16688
  railHeader && /* @__PURE__ */ jsx172("div", { children: railHeader }),
16625
16689
  /* @__PURE__ */ jsxs96(TabsList, { className: "flex h-auto w-full flex-col items-stretch gap-0.5 bg-transparent p-0", children: [
16626
16690
  ungrouped.map((tab) => /* @__PURE__ */ jsx172(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tabValue(tab))),
16627
- groups.map((group) => /* @__PURE__ */ jsxs96(Fragment26, { children: [
16691
+ groups.map((group) => /* @__PURE__ */ jsxs96(Fragment27, { children: [
16628
16692
  /* @__PURE__ */ jsx172(MicroLabel, { as: "span", role: "presentation", className: "block px-3 pt-3 pb-1", children: group.label }),
16629
16693
  group.items.map((tab) => /* @__PURE__ */ jsx172(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tabValue(tab)))
16630
16694
  ] }, group.label))
@@ -16715,7 +16779,7 @@ function RoundPageContainer({
16715
16779
  ),
16716
16780
  children: [
16717
16781
  header,
16718
- tabs ? /* @__PURE__ */ jsxs96(Fragment27, { children: [
16782
+ tabs ? /* @__PURE__ */ jsxs96(Fragment28, { children: [
16719
16783
  /* @__PURE__ */ jsxs96(
16720
16784
  Tabs,
16721
16785
  {
@@ -16820,7 +16884,7 @@ function RoundPageContainer({
16820
16884
  __name(RoundPageContainer, "RoundPageContainer");
16821
16885
 
16822
16886
  // src/components/containers/TabsContainer.tsx
16823
- 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";
16824
16888
  function TabsContainer({
16825
16889
  tabs,
16826
16890
  defaultTab,
@@ -16865,7 +16929,7 @@ function TabsContainer({
16865
16929
  ),
16866
16930
  additionalComponent && additionalComponent
16867
16931
  ] }),
16868
- 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)) })
16869
16933
  ] });
16870
16934
  }
16871
16935
  __name(TabsContainer, "TabsContainer");
@@ -17145,7 +17209,7 @@ __name(BlockNoteEditorMentionSuggestionMenu, "BlockNoteEditorMentionSuggestionMe
17145
17209
  import dynamic2 from "next/dynamic";
17146
17210
  import React29 from "react";
17147
17211
  import { jsx as jsx178 } from "react/jsx-runtime";
17148
- 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 });
17149
17213
  var BlockNoteViewerContainer = React29.memo(/* @__PURE__ */ __name(function ViewerContainer(props) {
17150
17214
  return /* @__PURE__ */ jsx178(BlockNoteViewer, { ...props });
17151
17215
  }, "ViewerContainer"));
@@ -17302,8 +17366,8 @@ var cellComponent = /* @__PURE__ */ __name((params) => {
17302
17366
  // src/components/tables/cells/cell.date.tsx
17303
17367
  import { jsx as jsx182 } from "react/jsx-runtime";
17304
17368
  function DateCell({ date }) {
17305
- const locale = useI18nLocale();
17306
- 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") });
17307
17371
  }
17308
17372
  __name(DateCell, "DateCell");
17309
17373
  var cellDate = /* @__PURE__ */ __name((params) => {
@@ -17324,8 +17388,8 @@ var cellDate = /* @__PURE__ */ __name((params) => {
17324
17388
  // src/components/tables/cells/cell.dateTime.tsx
17325
17389
  import { jsx as jsx183 } from "react/jsx-runtime";
17326
17390
  function DateTimeCell({ date }) {
17327
- const locale = useI18nLocale();
17328
- 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") });
17329
17393
  }
17330
17394
  __name(DateTimeCell, "DateTimeCell");
17331
17395
  var cellDateTime = /* @__PURE__ */ __name((params) => {
@@ -17427,7 +17491,7 @@ function useJsonApiGet(params) {
17427
17491
  setLoading(true);
17428
17492
  setError(null);
17429
17493
  try {
17430
- const { JsonApiGet } = await import("./JsonApiRequest-ADLBJ5RX.mjs");
17494
+ const { JsonApiGet } = await import("./JsonApiRequest-WNPDS356.mjs");
17431
17495
  const language = navigator.language.split("-")[0] || "en";
17432
17496
  const apiResponse = await JsonApiGet({
17433
17497
  classKey: params.classKey,
@@ -17532,7 +17596,7 @@ function useJsonApiMutation(config) {
17532
17596
  setLoading(true);
17533
17597
  setError(null);
17534
17598
  try {
17535
- const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-ADLBJ5RX.mjs");
17599
+ const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-WNPDS356.mjs");
17536
17600
  const language = navigator.language.split("-")[0] || "en";
17537
17601
  let apiResponse;
17538
17602
  switch (config.method) {
@@ -17767,7 +17831,7 @@ __name(useSubscriptionStatus, "useSubscriptionStatus");
17767
17831
  // src/features/role/hooks/useRoleTableStructure.tsx
17768
17832
  import { useTranslations as useTranslations67 } from "next-intl";
17769
17833
  import { useMemo as useMemo29 } from "react";
17770
- import { Fragment as Fragment29, jsx as jsx189 } from "react/jsx-runtime";
17834
+ import { Fragment as Fragment30, jsx as jsx189 } from "react/jsx-runtime";
17771
17835
  var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
17772
17836
  const t = useTranslations67();
17773
17837
  const generateUrl = usePageUrlGenerator();
@@ -17804,7 +17868,7 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
17804
17868
  id: "description",
17805
17869
  accessorKey: "description",
17806
17870
  header: t(`role.fields.description.label`),
17807
- 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"),
17808
17872
  enableSorting: false,
17809
17873
  enableHiding: false
17810
17874
  }),
@@ -17826,11 +17890,11 @@ import { useMemo as useMemo31 } from "react";
17826
17890
 
17827
17891
  // src/features/billing/components/utils/date.ts
17828
17892
  function formatDate2(date, options = {}) {
17829
- const { locale, t } = options;
17893
+ const { locale, dateLocale, t } = options;
17830
17894
  if (!date) return t ? t("billing.ui.not_available") : "N/A";
17831
17895
  const dateObj = typeof date === "string" ? new Date(date) : date;
17832
17896
  try {
17833
- return new Intl.DateTimeFormat(dateFormatLocale(locale), {
17897
+ return new Intl.DateTimeFormat(dateLocale ?? dateFormatLocale(locale), {
17834
17898
  month: "short",
17835
17899
  day: "numeric",
17836
17900
  year: "numeric"
@@ -17848,7 +17912,8 @@ import { useMemo as useMemo30 } from "react";
17848
17912
  function useBillingFormatOptions() {
17849
17913
  const t = useTranslations68();
17850
17914
  const locale = useI18nLocale();
17851
- return useMemo30(() => ({ locale, t }), [locale, t]);
17915
+ const { locale: dateLocale } = useDateFormatter();
17916
+ return useMemo30(() => ({ locale, dateLocale, t }), [locale, dateLocale, t]);
17852
17917
  }
17853
17918
  __name(useBillingFormatOptions, "useBillingFormatOptions");
17854
17919
 
@@ -19056,7 +19121,7 @@ __name(formatSignupSource, "formatSignupSource");
19056
19121
  import { jsx as jsx199, jsxs as jsxs107 } from "react/jsx-runtime";
19057
19122
  var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19058
19123
  const t = useTranslations78();
19059
- const locale = useI18nLocale();
19124
+ const dates = useDateFormatter();
19060
19125
  const onInvite = params.context?.onInvite;
19061
19126
  const tableData = useMemo37(() => {
19062
19127
  return params.data.map((entry) => {
@@ -19102,7 +19167,7 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19102
19167
  cell: /* @__PURE__ */ __name(({ row }) => {
19103
19168
  const entry = row.original.jsonApiData;
19104
19169
  if (!entry.createdAt) return "-";
19105
- return new Date(entry.createdAt).toLocaleDateString(locale);
19170
+ return dates.format(entry.createdAt, "date");
19106
19171
  }, "cell"),
19107
19172
  enableSorting: false,
19108
19173
  enableHiding: false
@@ -19158,7 +19223,7 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19158
19223
  ] });
19159
19224
  }
19160
19225
  if (entry.status === "invited" && entry.invitedAt) {
19161
- 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") }) });
19162
19227
  }
19163
19228
  if (entry.status === "registered") {
19164
19229
  return /* @__PURE__ */ jsx199("span", { className: "text-muted-foreground text-sm", children: t("waitlist.admin.actions.registered") });
@@ -19171,14 +19236,14 @@ var useWaitlistTableStructure = /* @__PURE__ */ __name((params) => {
19171
19236
  };
19172
19237
  const columns = useMemo37(() => {
19173
19238
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
19174
- }, [params.fields, fieldColumnMap, t, locale]);
19239
+ }, [params.fields, fieldColumnMap, t, dates]);
19175
19240
  return useMemo37(() => ({ data: tableData, columns }), [tableData, columns]);
19176
19241
  }, "useWaitlistTableStructure");
19177
19242
 
19178
19243
  // src/features/content/hooks/useContentTableStructure.tsx
19179
19244
  import { useTranslations as useTranslations79 } from "next-intl";
19180
19245
  import { useMemo as useMemo38 } from "react";
19181
- 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";
19182
19247
  var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19183
19248
  const t = useTranslations79();
19184
19249
  const generateUrl = usePageUrlGenerator();
@@ -19209,7 +19274,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19209
19274
  const contentModule = content.contentType ? Modules.findByModelName(content.contentType) : void 0;
19210
19275
  const link = contentModule ? generateUrl({ page: contentModule, id: content.id }) : "#";
19211
19276
  return /* @__PURE__ */ jsxs108(Tooltip2, { children: [
19212
- /* @__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: [
19213
19278
  contentModule && getIconByModule({ module: contentModule, className: "h-4 w-4" }),
19214
19279
  /* @__PURE__ */ jsx200(Link, { href: link, children: content.name })
19215
19280
  ] }) }),
@@ -19225,7 +19290,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
19225
19290
  header: t(`common.relevance`),
19226
19291
  cell: /* @__PURE__ */ __name(({ row }) => {
19227
19292
  const content = row.original.jsonApiData;
19228
- if (!content.relevance) return /* @__PURE__ */ jsx200(Fragment30, {});
19293
+ if (!content.relevance) return /* @__PURE__ */ jsx200(Fragment31, {});
19229
19294
  const response = `${content.relevance.toFixed(0)}%`;
19230
19295
  return /* @__PURE__ */ jsxs108("div", { className: "relative flex h-5 w-20 items-center justify-center overflow-clip rounded border text-center", children: [
19231
19296
  /* @__PURE__ */ jsx200(
@@ -19735,7 +19800,7 @@ function ContentTableSearch({ data }) {
19735
19800
  __name(ContentTableSearch, "ContentTableSearch");
19736
19801
 
19737
19802
  // src/components/tables/ContentListTable.tsx
19738
- 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";
19739
19804
  var EMPTY_ARRAY = [];
19740
19805
  function getGroupKeys(item, field) {
19741
19806
  const value = item.jsonApiData[field];
@@ -19750,7 +19815,7 @@ function getGroupKeys(item, field) {
19750
19815
  __name(getGroupKeys, "getGroupKeys");
19751
19816
  var isClassComponent = /* @__PURE__ */ __name((component) => typeof component === "function" && !!component.prototype?.isReactComponent, "isClassComponent");
19752
19817
  function StableCell({ render, context }) {
19753
- return /* @__PURE__ */ jsx202(Fragment31, { children: render(context) });
19818
+ return /* @__PURE__ */ jsx202(Fragment32, { children: render(context) });
19754
19819
  }
19755
19820
  __name(StableCell, "StableCell");
19756
19821
  function renderCell(cellDef, context) {
@@ -19866,7 +19931,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
19866
19931
  }
19867
19932
  );
19868
19933
  const hasTitleControls = !!(props.functions || props.filters || allowSearch);
19869
- const titleControls = /* @__PURE__ */ jsxs110(Fragment31, { children: [
19934
+ const titleControls = /* @__PURE__ */ jsxs110(Fragment32, { children: [
19870
19935
  props.filters,
19871
19936
  props.functions,
19872
19937
  allowSearch !== false && /* @__PURE__ */ jsx202(ContentTableSearch, { data })
@@ -19968,7 +20033,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
19968
20033
 
19969
20034
  // src/components/grids/ContentListGrid.tsx
19970
20035
  import { useEffect as useEffect56, useRef as useRef37 } from "react";
19971
- 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";
19972
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";
19973
20038
  function ContentListGrid(props) {
19974
20039
  const { data, ItemComponent, allowSearch, fullWidth, gridClassName } = props;
@@ -19999,7 +20064,7 @@ function ContentListGrid(props) {
19999
20064
  ]
20000
20065
  }
20001
20066
  ) }),
20002
- (props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs111(Fragment32, { children: [
20067
+ (props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs111(Fragment33, { children: [
20003
20068
  props.functions,
20004
20069
  props.filters,
20005
20070
  allowSearch && /* @__PURE__ */ jsx203(ContentTableSearch, { data })
@@ -20291,14 +20356,14 @@ import { z as z7 } from "zod";
20291
20356
 
20292
20357
  // src/features/auth/components/GdprConsentSection.tsx
20293
20358
  import { useTranslations as useTranslations89 } from "next-intl";
20294
- 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";
20295
20360
  function GdprConsentSection({
20296
20361
  form,
20297
20362
  termsCheckboxId = "termsAccepted",
20298
20363
  marketingCheckboxId = "marketingConsent"
20299
20364
  }) {
20300
20365
  const t = useTranslations89("auth.gdpr");
20301
- const termsLabel = /* @__PURE__ */ jsxs118(Fragment33, { children: [
20366
+ const termsLabel = /* @__PURE__ */ jsxs118(Fragment34, { children: [
20302
20367
  t("terms_prefix"),
20303
20368
  " ",
20304
20369
  /* @__PURE__ */ jsx212(Link, { href: "/terms", target: "_blank", rel: "noopener", children: t("terms_of_service") }),
@@ -20323,7 +20388,7 @@ function GdprConsentSection({
20323
20388
  __name(GdprConsentSection, "GdprConsentSection");
20324
20389
 
20325
20390
  // src/features/auth/components/forms/Register.tsx
20326
- 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";
20327
20392
  var REFERRAL_COOKIE_NAME = "referral_code";
20328
20393
  function getReferralCode() {
20329
20394
  if (typeof document === "undefined") return null;
@@ -20445,7 +20510,7 @@ function Register() {
20445
20510
  }
20446
20511
  }, "onSubmit");
20447
20512
  if (registrationMode === "waitlist" && inviteCode && isValidatingInvite) {
20448
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20513
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20449
20514
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20450
20515
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20451
20516
  t("waitlist.invite.validating_title")
@@ -20457,7 +20522,7 @@ function Register() {
20457
20522
  ] });
20458
20523
  }
20459
20524
  if (registrationMode === "waitlist" && inviteCode && inviteError) {
20460
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20525
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20461
20526
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20462
20527
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20463
20528
  t("waitlist.invite.invalid_title")
@@ -20470,7 +20535,7 @@ function Register() {
20470
20535
  ] });
20471
20536
  }
20472
20537
  if (registrationMode === "waitlist" && !inviteCode) {
20473
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20538
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20474
20539
  /* @__PURE__ */ jsx213(CardHeader, { children: /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20475
20540
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20476
20541
  t("waitlist.invite.registration_title")
@@ -20483,13 +20548,13 @@ function Register() {
20483
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") }) })
20484
20549
  ] });
20485
20550
  }
20486
- return /* @__PURE__ */ jsxs119(Fragment34, { children: [
20551
+ return /* @__PURE__ */ jsxs119(Fragment35, { children: [
20487
20552
  /* @__PURE__ */ jsxs119(CardHeader, { children: [
20488
20553
  /* @__PURE__ */ jsxs119(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
20489
20554
  /* @__PURE__ */ jsx213(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
20490
20555
  t(`auth.buttons.register`)
20491
20556
  ] }),
20492
- /* @__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`) }) })
20493
20558
  ] }),
20494
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: [
20495
20560
  /* @__PURE__ */ jsxs119(CardContent, { children: [
@@ -20924,10 +20989,10 @@ __name(DisableTwoFactorDialog, "DisableTwoFactorDialog");
20924
20989
  import { Edit, Key, Trash2 } from "lucide-react";
20925
20990
  import { useTranslations as useTranslations93 } from "next-intl";
20926
20991
  import { useState as useState80 } from "react";
20927
- 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";
20928
20993
  function PasskeyList({ passkeys, onRefresh }) {
20929
20994
  const t = useTranslations93();
20930
- const locale = useI18nLocale();
20995
+ const dates = useDateFormatter();
20931
20996
  const [renameDialogOpen, setRenameDialogOpen] = useState80(false);
20932
20997
  const [selectedPasskey, setSelectedPasskey] = useState80(null);
20933
20998
  const [newName, setNewName] = useState80("");
@@ -20981,7 +21046,7 @@ function PasskeyList({ passkeys, onRefresh }) {
20981
21046
  if (passkeys.length === 0) {
20982
21047
  return /* @__PURE__ */ jsx219("p", { className: "text-sm text-muted-foreground text-center py-4", children: t("auth.two_factor.no_passkeys") });
20983
21048
  }
20984
- return /* @__PURE__ */ jsxs123(Fragment35, { children: [
21049
+ return /* @__PURE__ */ jsxs123(Fragment36, { children: [
20985
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: [
20986
21051
  /* @__PURE__ */ jsxs123("div", { className: "flex items-center gap-3", children: [
20987
21052
  /* @__PURE__ */ jsx219(Key, { className: "h-5 w-5 text-muted-foreground" }),
@@ -20989,7 +21054,7 @@ function PasskeyList({ passkeys, onRefresh }) {
20989
21054
  /* @__PURE__ */ jsx219("p", { className: "font-medium", children: passkey.name }),
20990
21055
  /* @__PURE__ */ jsxs123("p", { className: "text-sm text-muted-foreground", children: [
20991
21056
  passkey.backedUp && "\u2601\uFE0F ",
20992
- 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")
20993
21058
  ] })
20994
21059
  ] })
20995
21060
  ] }),
@@ -21120,7 +21185,7 @@ import { useState as useState82 } from "react";
21120
21185
  import { jsx as jsx221, jsxs as jsxs125 } from "react/jsx-runtime";
21121
21186
  function TotpAuthenticatorList({ authenticators, onDelete }) {
21122
21187
  const t = useTranslations95();
21123
- const locale = useI18nLocale();
21188
+ const dates = useDateFormatter();
21124
21189
  const [deletingId, setDeletingId] = useState82(null);
21125
21190
  const handleDelete = /* @__PURE__ */ __name(async (id) => {
21126
21191
  setDeletingId(id);
@@ -21147,7 +21212,7 @@ function TotpAuthenticatorList({ authenticators, onDelete }) {
21147
21212
  auth.lastUsedAt && /* @__PURE__ */ jsxs125("p", { className: "text-xs text-muted-foreground", children: [
21148
21213
  t("auth.two_factor.last_used"),
21149
21214
  ": ",
21150
- auth.lastUsedAt.toLocaleDateString(locale)
21215
+ dates.format(auth.lastUsedAt, "dateMedium")
21151
21216
  ] })
21152
21217
  ] })
21153
21218
  ] }),
@@ -21299,7 +21364,7 @@ function TotpSetupDialog({ onSuccess, trigger }) {
21299
21364
  __name(TotpSetupDialog, "TotpSetupDialog");
21300
21365
 
21301
21366
  // src/features/auth/components/two-factor/TwoFactorSettings.tsx
21302
- 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";
21303
21368
  function TwoFactorSettings() {
21304
21369
  const t = useTranslations97();
21305
21370
  const [status, setStatus] = useState84(null);
@@ -21386,7 +21451,7 @@ function TwoFactorSettings() {
21386
21451
  ] }),
21387
21452
  /* @__PURE__ */ jsx223(BackupCodesDialog, { remainingCodes: status?.backupCodesCount ?? 0, onRegenerate: handleRefresh })
21388
21453
  ] }) }),
21389
- !isEnabled && (authenticators.length > 0 || passkeys.length > 0) && /* @__PURE__ */ jsxs127(Fragment36, { children: [
21454
+ !isEnabled && (authenticators.length > 0 || passkeys.length > 0) && /* @__PURE__ */ jsxs127(Fragment37, { children: [
21390
21455
  /* @__PURE__ */ jsx223(Separator, {}),
21391
21456
  /* @__PURE__ */ jsxs127("div", { className: "flex items-center justify-between", children: [
21392
21457
  /* @__PURE__ */ jsxs127("div", { children: [
@@ -21396,7 +21461,7 @@ function TwoFactorSettings() {
21396
21461
  /* @__PURE__ */ jsx223(Button, { onClick: handleEnable2FA, disabled: isEnabling, children: isEnabling ? t("common.loading") : t("auth.two_factor.enable_button") })
21397
21462
  ] })
21398
21463
  ] }),
21399
- isEnabled && /* @__PURE__ */ jsxs127(Fragment36, { children: [
21464
+ isEnabled && /* @__PURE__ */ jsxs127(Fragment37, { children: [
21400
21465
  /* @__PURE__ */ jsx223(Separator, {}),
21401
21466
  /* @__PURE__ */ jsxs127("div", { className: "flex items-center justify-between", children: [
21402
21467
  /* @__PURE__ */ jsxs127("div", { children: [
@@ -21482,11 +21547,11 @@ function GoogleSignInButton({ referralCode, source }) {
21482
21547
  __name(GoogleSignInButton, "GoogleSignInButton");
21483
21548
 
21484
21549
  // src/features/auth/components/details/LandingComponent.tsx
21485
- 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";
21486
21551
  function LandingComponent() {
21487
21552
  const t = useTranslations99();
21488
21553
  const { setComponentType } = useAuthContext();
21489
- return /* @__PURE__ */ jsxs129(Fragment37, { children: [
21554
+ return /* @__PURE__ */ jsxs129(Fragment38, { children: [
21490
21555
  /* @__PURE__ */ jsxs129(CardHeader, { className: "mb-4", "data-testid": "page-pre-login-container", children: [
21491
21556
  /* @__PURE__ */ jsxs129(CardTitle, { className: "text-primary flex flex-col items-center gap-y-8 pb-8 text-4xl", children: [
21492
21557
  /* @__PURE__ */ jsx226(Image9, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
@@ -21495,7 +21560,7 @@ function LandingComponent() {
21495
21560
  /* @__PURE__ */ jsx226(CardDescription, { className: "flex w-full justify-center text-center text-sm", children: t(`common.description`) })
21496
21561
  ] }),
21497
21562
  /* @__PURE__ */ jsxs129(CardFooter, { className: "mt-4 flex w-full flex-col justify-between gap-y-4", children: [
21498
- isInternalAuthEnabled() && /* @__PURE__ */ jsxs129(Fragment37, { children: [
21563
+ isInternalAuthEnabled() && /* @__PURE__ */ jsxs129(Fragment38, { children: [
21499
21564
  isRegistrationAllowed() && /* @__PURE__ */ jsx226(
21500
21565
  Link,
21501
21566
  {
@@ -21521,7 +21586,7 @@ import Image10 from "next/image";
21521
21586
  import { useEffect as useEffect62, useState as useState85 } from "react";
21522
21587
  import { useForm as useForm7 } from "react-hook-form";
21523
21588
  import { z as z8 } from "zod";
21524
- 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";
21525
21590
  function AcceptInvitation() {
21526
21591
  const { setComponentType, params, setParams } = useAuthContext();
21527
21592
  const [showConfirmation, setShowConfirmation] = useState85(false);
@@ -21584,13 +21649,13 @@ function AcceptInvitation() {
21584
21649
  errorToast({ title: t(`common.errors.error`), error });
21585
21650
  }
21586
21651
  }, "onSubmit");
21587
- return /* @__PURE__ */ jsxs130(Fragment38, { children: [
21652
+ return /* @__PURE__ */ jsxs130(Fragment39, { children: [
21588
21653
  /* @__PURE__ */ jsxs130(CardHeader, { children: [
21589
21654
  /* @__PURE__ */ jsxs130(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21590
21655
  /* @__PURE__ */ jsx227(Image10, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21591
21656
  t("auth.accept_invitation")
21592
21657
  ] }),
21593
- /* @__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") }) })
21594
21659
  ] }),
21595
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: [
21596
21661
  /* @__PURE__ */ jsx227(
@@ -21621,7 +21686,7 @@ __name(AcceptInvitation, "AcceptInvitation");
21621
21686
  import { useTranslations as useTranslations101 } from "next-intl";
21622
21687
  import Image11 from "next/image";
21623
21688
  import { useEffect as useEffect63, useState as useState86 } from "react";
21624
- 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";
21625
21690
  function ActivateAccount() {
21626
21691
  const { setComponentType, params, setParams } = useAuthContext();
21627
21692
  const [showConfirmation, setShowConfirmation] = useState86(false);
@@ -21654,15 +21719,15 @@ function ActivateAccount() {
21654
21719
  setError(t(`auth.errors.invalid_invitation_code`));
21655
21720
  }
21656
21721
  }, []);
21657
- return /* @__PURE__ */ jsxs131(Fragment39, { children: [
21722
+ return /* @__PURE__ */ jsxs131(Fragment40, { children: [
21658
21723
  /* @__PURE__ */ jsxs131(CardHeader, { children: [
21659
21724
  /* @__PURE__ */ jsxs131(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21660
21725
  /* @__PURE__ */ jsx228(Image11, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21661
21726
  t("auth.accept_invitation")
21662
21727
  ] }),
21663
- /* @__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: " " }) })
21664
21729
  ] }),
21665
- /* @__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") }) }) })
21666
21731
  ] });
21667
21732
  }
21668
21733
  __name(ActivateAccount, "ActivateAccount");
@@ -21700,7 +21765,7 @@ import Image12 from "next/image";
21700
21765
  import { useState as useState88 } from "react";
21701
21766
  import { useForm as useForm8 } from "react-hook-form";
21702
21767
  import { z as z9 } from "zod";
21703
- 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";
21704
21769
  function ForgotPassword() {
21705
21770
  const t = useTranslations102();
21706
21771
  const { setComponentType } = useAuthContext();
@@ -21727,13 +21792,13 @@ function ForgotPassword() {
21727
21792
  errorToast({ title: t("common.errors.error"), error: e });
21728
21793
  }
21729
21794
  }, "onSubmit");
21730
- return /* @__PURE__ */ jsxs132(Fragment40, { children: [
21795
+ return /* @__PURE__ */ jsxs132(Fragment41, { children: [
21731
21796
  /* @__PURE__ */ jsxs132(CardHeader, { "data-testid": "page-forgot-password-container", children: [
21732
21797
  /* @__PURE__ */ jsxs132(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21733
21798
  /* @__PURE__ */ jsx229(Image12, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
21734
21799
  t("auth.buttons.forgot_password")
21735
21800
  ] }),
21736
- /* @__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`) }) })
21737
21802
  ] }),
21738
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: [
21739
21804
  /* @__PURE__ */ jsxs132(CardContent, { children: [
@@ -21772,7 +21837,7 @@ import { useRouter, useSearchParams as useSearchParams3 } from "next/navigation"
21772
21837
  import { useEffect as useEffect65, useState as useState89 } from "react";
21773
21838
  import { useForm as useForm9 } from "react-hook-form";
21774
21839
  import { z as z10 } from "zod";
21775
- 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";
21776
21841
  function Login() {
21777
21842
  const t = useTranslations103();
21778
21843
  const { setUser } = useCurrentUserContext();
@@ -21838,7 +21903,7 @@ function Login() {
21838
21903
  });
21839
21904
  }
21840
21905
  }, "onSubmit");
21841
- return /* @__PURE__ */ jsxs133(Fragment41, { children: [
21906
+ return /* @__PURE__ */ jsxs133(Fragment42, { children: [
21842
21907
  /* @__PURE__ */ jsxs133(CardHeader, { "data-testid": "page-login-container", children: [
21843
21908
  /* @__PURE__ */ jsxs133(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
21844
21909
  /* @__PURE__ */ jsx230(Image13, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
@@ -21847,7 +21912,7 @@ function Login() {
21847
21912
  /* @__PURE__ */ jsx230(CardDescription, { className: "text-sm", children: t(`auth.login_description`) })
21848
21913
  ] }),
21849
21914
  /* @__PURE__ */ jsx230(Form, { ...form, children: /* @__PURE__ */ jsxs133("form", { onSubmit: form.handleSubmit(onSubmit), children: [
21850
- /* @__PURE__ */ jsx230(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs133(Fragment41, { children: [
21915
+ /* @__PURE__ */ jsx230(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs133(Fragment42, { children: [
21851
21916
  /* @__PURE__ */ jsx230(
21852
21917
  FormInput,
21853
21918
  {
@@ -21914,7 +21979,7 @@ function clearClientStorage(keys) {
21914
21979
  __name(clearClientStorage, "clearClientStorage");
21915
21980
 
21916
21981
  // src/features/auth/components/forms/Logout.tsx
21917
- import { Fragment as Fragment42, jsx as jsx231 } from "react/jsx-runtime";
21982
+ import { Fragment as Fragment43, jsx as jsx231 } from "react/jsx-runtime";
21918
21983
  function Logout({ storageKeys, beforeLogout }) {
21919
21984
  const generateUrl = usePageUrlGenerator();
21920
21985
  useEffect66(() => {
@@ -21926,7 +21991,7 @@ function Logout({ storageKeys, beforeLogout }) {
21926
21991
  }, "logOut");
21927
21992
  logOut();
21928
21993
  }, []);
21929
- return /* @__PURE__ */ jsx231(Fragment42, {});
21994
+ return /* @__PURE__ */ jsx231(Fragment43, {});
21930
21995
  }
21931
21996
  __name(Logout, "Logout");
21932
21997
 
@@ -21967,7 +22032,7 @@ import Image14 from "next/image";
21967
22032
  import { useEffect as useEffect68, useState as useState90 } from "react";
21968
22033
  import { useForm as useForm10 } from "react-hook-form";
21969
22034
  import { z as z11 } from "zod";
21970
- 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";
21971
22036
  function ResetPassword() {
21972
22037
  const { setComponentType, params, setParams } = useAuthContext();
21973
22038
  const [showConfirmation, setShowConfirmation] = useState90(false);
@@ -22030,13 +22095,13 @@ function ResetPassword() {
22030
22095
  errorToast({ title: t(`common.errors.error`), error });
22031
22096
  }
22032
22097
  }, "onSubmit");
22033
- return /* @__PURE__ */ jsxs134(Fragment43, { children: [
22098
+ return /* @__PURE__ */ jsxs134(Fragment44, { children: [
22034
22099
  /* @__PURE__ */ jsxs134(CardHeader, { children: [
22035
22100
  /* @__PURE__ */ jsxs134(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
22036
22101
  /* @__PURE__ */ jsx232(Image14, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
22037
22102
  t(`auth.password_reset`)
22038
22103
  ] }),
22039
- /* @__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`) }) })
22040
22105
  ] }),
22041
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: [
22042
22107
  /* @__PURE__ */ jsx232(FormPassword, { form, id: "password", name: t(`user.fields.password.label`) }),
@@ -22096,7 +22161,7 @@ function PasskeyButton({ pendingToken, onSuccess, onError, disabled = false }) {
22096
22161
  __name(PasskeyButton, "PasskeyButton");
22097
22162
 
22098
22163
  // src/features/auth/components/forms/TwoFactorChallenge.tsx
22099
- 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";
22100
22165
  function TwoFactorChallenge() {
22101
22166
  const t = useTranslations106();
22102
22167
  const { setUser } = useCurrentUserContext();
@@ -22177,7 +22242,7 @@ function TwoFactorChallenge() {
22177
22242
  const hasTotp = availableMethods.includes("totp");
22178
22243
  const hasPasskey = availableMethods.includes("passkey");
22179
22244
  const hasBackup = availableMethods.includes("backup");
22180
- return /* @__PURE__ */ jsxs135(Fragment44, { children: [
22245
+ return /* @__PURE__ */ jsxs135(Fragment45, { children: [
22181
22246
  /* @__PURE__ */ jsxs135(CardHeader, { "data-testid": "page-2fa-challenge", children: [
22182
22247
  /* @__PURE__ */ jsx234(CardTitle, { className: "text-primary", children: t("auth.two_factor.verification_required") }),
22183
22248
  /* @__PURE__ */ jsx234(CardDescription, { children: t("auth.two_factor.enter_verification_code") })
@@ -22481,12 +22546,12 @@ import { useMemo as useMemo43 } from "react";
22481
22546
  import { TrashIcon } from "lucide-react";
22482
22547
  import { useTranslations as useTranslations109 } from "next-intl";
22483
22548
  import { useState as useState94 } from "react";
22484
- 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";
22485
22550
  function AiConnectionDeleter({ connection }) {
22486
22551
  const t = useTranslations109();
22487
22552
  const { refresh } = useAiConnections();
22488
22553
  const [open, setOpen] = useState94(false);
22489
- return /* @__PURE__ */ jsxs137(Fragment45, { children: [
22554
+ return /* @__PURE__ */ jsxs137(Fragment46, { children: [
22490
22555
  /* @__PURE__ */ jsx237(
22491
22556
  Button,
22492
22557
  {
@@ -22766,7 +22831,7 @@ function AiConnectionEditor({
22766
22831
  __name(AiConnectionEditor, "AiConnectionEditor");
22767
22832
 
22768
22833
  // src/features/ai-connection/components/lists/AiConnectionTypeCard.tsx
22769
- 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";
22770
22835
  function toInput(connection, overrides) {
22771
22836
  return {
22772
22837
  id: connection.id,
@@ -22889,7 +22954,7 @@ function AiConnectionTypeCard({ connectionType }) {
22889
22954
  children: /* @__PURE__ */ jsx239(ChevronDownIcon10, {})
22890
22955
  }
22891
22956
  ),
22892
- !readOnly && /* @__PURE__ */ jsxs139(Fragment46, { children: [
22957
+ !readOnly && /* @__PURE__ */ jsxs139(Fragment47, { children: [
22893
22958
  /* @__PURE__ */ jsx239(
22894
22959
  AiConnectionEditor,
22895
22960
  {
@@ -23147,7 +23212,7 @@ var STATUS_VARIANTS = {
23147
23212
  };
23148
23213
  var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23149
23214
  const t = useTranslations117();
23150
- const locale = useI18nLocale();
23215
+ const dates = useDateFormatter();
23151
23216
  const generateUrl = usePageUrlGenerator();
23152
23217
  const tableData = useMemo45(() => {
23153
23218
  return params.data.map((blast) => {
@@ -23210,7 +23275,7 @@ var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23210
23275
  cell: /* @__PURE__ */ __name(({ row }) => {
23211
23276
  const blast = row.original.jsonApiData;
23212
23277
  if (!blast.sentAt) return /* @__PURE__ */ jsx245("span", { className: "text-muted-foreground text-xs", children: "\u2014" });
23213
- 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") });
23214
23279
  }, "cell"),
23215
23280
  enableSorting: false,
23216
23281
  enableHiding: false
@@ -23225,7 +23290,7 @@ var useEmailBlastTableStructure = /* @__PURE__ */ __name((params) => {
23225
23290
  };
23226
23291
  const columns = useMemo45(() => {
23227
23292
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
23228
- }, [params.fields, fieldColumnMap, t, generateUrl, locale]);
23293
+ }, [params.fields, fieldColumnMap, t, generateUrl, dates]);
23229
23294
  return useMemo45(() => ({ data: tableData, columns }), [tableData, columns]);
23230
23295
  }, "useEmailBlastTableStructure");
23231
23296
  registerTableGenerator("email-blasts", useEmailBlastTableStructure);
@@ -23237,7 +23302,7 @@ import { useCallback as useCallback44, useMemo as useMemo46 } from "react";
23237
23302
  import { useForm as useForm12 } from "react-hook-form";
23238
23303
  import { v4 as v413 } from "uuid";
23239
23304
  import { z as z13 } from "zod";
23240
- 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";
23241
23306
  var TEMPLATE_VARIABLES = ["{{name}}", "{{email}}", "{{url}}"];
23242
23307
  var MARKETING_ONLY_VARIABLES = ["{{unsubscribeAllUrl}}"];
23243
23308
  function EmailBlastEditorInternal({
@@ -23341,7 +23406,7 @@ function EmailBlastEditorInternal({
23341
23406
  name: t("emailBlasts.editor.fields.body.label"),
23342
23407
  className: "min-h-72",
23343
23408
  isRequired: true,
23344
- description: /* @__PURE__ */ jsxs143(Fragment47, { children: [
23409
+ description: /* @__PURE__ */ jsxs143(Fragment48, { children: [
23345
23410
  /* @__PURE__ */ jsxs143("span", { className: "block", children: [
23346
23411
  t("emailBlasts.editor.variablesHint"),
23347
23412
  " ",
@@ -23413,7 +23478,7 @@ import { useCallback as useCallback45, useEffect as useEffect73, useState as use
23413
23478
  import { LoaderCircleIcon as LoaderCircleIcon4, SendIcon as SendIcon2 } from "lucide-react";
23414
23479
  import { useTranslations as useTranslations121 } from "next-intl";
23415
23480
  import { useEffect as useEffect72, useState as useState97 } from "react";
23416
- 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";
23417
23482
  function EmailBlastSendDialog({ blast, onSuccess }) {
23418
23483
  const t = useTranslations121();
23419
23484
  const [open, setOpen] = useState97(false);
@@ -23458,7 +23523,7 @@ function EmailBlastSendDialog({ blast, onSuccess }) {
23458
23523
  ] }),
23459
23524
  /* @__PURE__ */ jsxs144("div", { className: "flex justify-end", children: [
23460
23525
  /* @__PURE__ */ jsx249(Button, { className: "me-2", variant: "outline", type: "button", onClick: () => setOpen(false), disabled: isSending, children: t("emailBlasts.send.cancel") }),
23461
- /* @__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: [
23462
23527
  t("emailBlasts.send.action"),
23463
23528
  /* @__PURE__ */ jsx249(LoaderCircleIcon4, { className: "animate-spin-slow h-5 w-5" })
23464
23529
  ] }) : t("emailBlasts.send.action") })
@@ -23497,7 +23562,7 @@ function EmailBlastSendTestButton({ blast }) {
23497
23562
  __name(EmailBlastSendTestButton, "EmailBlastSendTestButton");
23498
23563
  function EmailBlastContainer({ blastId }) {
23499
23564
  const t = useTranslations122();
23500
- const locale = useI18nLocale();
23565
+ const dates = useDateFormatter();
23501
23566
  const generateUrl = usePageUrlGenerator();
23502
23567
  const [blast, setBlast] = useState98(void 0);
23503
23568
  const reload = useCallback45(async () => {
@@ -23573,7 +23638,7 @@ function EmailBlastContainer({ blastId }) {
23573
23638
  DetailField,
23574
23639
  {
23575
23640
  label: t("emailBlasts.detail.sentAt"),
23576
- value: blast.sentAt ? blast.sentAt.toLocaleString(locale) : "\u2014"
23641
+ value: blast.sentAt ? dates.format(blast.sentAt, "dateTimeMedium") : "\u2014"
23577
23642
  }
23578
23643
  ),
23579
23644
  /* @__PURE__ */ jsx250(DetailField, { label: t("emailBlasts.list.columns.subject"), value: blast.subject }),
@@ -23707,7 +23772,7 @@ function HowToCommandViewer({ howTo, onBack, onStartChat }) {
23707
23772
  __name(HowToCommandViewer, "HowToCommandViewer");
23708
23773
 
23709
23774
  // src/features/how-to/components/containers/HowToCommand.tsx
23710
- 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";
23711
23776
  function matchPage(pathname, pattern) {
23712
23777
  if (pattern.includes(":")) {
23713
23778
  const pathSegments = pathname.split("/").filter(Boolean);
@@ -23778,7 +23843,7 @@ function HowToCommand({ pathname, contextKeys, extraGroups, onStartChat }) {
23778
23843
  setSelectedHowTo(null);
23779
23844
  if (onStartChat) onStartChat();
23780
23845
  }, "handleStartChat");
23781
- return /* @__PURE__ */ jsxs147(Fragment49, { children: [
23846
+ return /* @__PURE__ */ jsxs147(Fragment50, { children: [
23782
23847
  /* @__PURE__ */ jsxs147(
23783
23848
  SidebarMenuButton,
23784
23849
  {
@@ -23946,7 +24011,7 @@ import { useTranslations as useTranslations128 } from "next-intl";
23946
24011
  // src/features/how-to/hooks/useHowToTableStructure.tsx
23947
24012
  import { useTranslations as useTranslations126 } from "next-intl";
23948
24013
  import { useMemo as useMemo49 } from "react";
23949
- import { Fragment as Fragment50, jsx as jsx256 } from "react/jsx-runtime";
24014
+ import { Fragment as Fragment51, jsx as jsx256 } from "react/jsx-runtime";
23950
24015
  var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23951
24016
  const t = useTranslations126();
23952
24017
  const generateUrl = usePageUrlGenerator();
@@ -23983,7 +24048,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23983
24048
  id: "description",
23984
24049
  accessorKey: "description",
23985
24050
  header: t(`howto.fields.description.label`),
23986
- 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"),
23987
24052
  enableSorting: false,
23988
24053
  enableHiding: false
23989
24054
  }),
@@ -23991,7 +24056,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
23991
24056
  id: "pages",
23992
24057
  accessorKey: "pages",
23993
24058
  header: t(`howto.fields.pages.label`),
23994
- 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"),
23995
24060
  enableSorting: false,
23996
24061
  enableHiding: false
23997
24062
  }),
@@ -24077,7 +24142,7 @@ __name(HowToListContainer, "HowToListContainer");
24077
24142
  import { CircleX as CircleX3, RefreshCwIcon as RefreshCwIcon5, SearchIcon as SearchIcon7, XIcon as XIcon13 } from "lucide-react";
24078
24143
  import { useTranslations as useTranslations129 } from "next-intl";
24079
24144
  import { useCallback as useCallback47, useEffect as useEffect75, useRef as useRef42, useState as useState101 } from "react";
24080
- 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";
24081
24146
  function HowToSelector({
24082
24147
  id,
24083
24148
  form,
@@ -24162,7 +24227,7 @@ function HowToSelector({
24162
24227
  search("");
24163
24228
  }
24164
24229
  }
24165
- ) : /* @__PURE__ */ jsx260(Fragment51, {})
24230
+ ) : /* @__PURE__ */ jsx260(Fragment52, {})
24166
24231
  ] }),
24167
24232
  /* @__PURE__ */ jsx260(CommandList, { children: data.data && data.data.length > 0 && data.data.map((howTo) => /* @__PURE__ */ jsx260(
24168
24233
  CommandItem,
@@ -24375,7 +24440,7 @@ function ReferencesTab({ references }) {
24375
24440
  __name(ReferencesTab, "ReferencesTab");
24376
24441
 
24377
24442
  // src/features/assistant-message/components/parts/tabs/CitationsTab.tsx
24378
- import { Fragment as Fragment52, useState as useState103 } from "react";
24443
+ import { Fragment as Fragment53, useState as useState103 } from "react";
24379
24444
  import { useTranslations as useTranslations135 } from "next-intl";
24380
24445
  import { ChevronDown as ChevronDown3, HelpCircle } from "lucide-react";
24381
24446
  import ReactMarkdown2 from "react-markdown";
@@ -24440,7 +24505,7 @@ function CitationsTab({ citations, sources }) {
24440
24505
  const typeLabel = chunk.nodeType ? entityLabel(chunk.nodeType) : t("features.assistant.message.sources.source");
24441
24506
  const fallbackName = chunk.nodeId ? `${typeLabel} ${chunk.nodeId.slice(0, 8)}` : typeLabel;
24442
24507
  const sourceName = resolved?.name ?? fallbackName;
24443
- return /* @__PURE__ */ jsxs153(Fragment52, { children: [
24508
+ return /* @__PURE__ */ jsxs153(Fragment53, { children: [
24444
24509
  /* @__PURE__ */ jsxs153(TableRow, { children: [
24445
24510
  /* @__PURE__ */ jsx265(TableCell, { children: /* @__PURE__ */ jsxs153(
24446
24511
  "div",
@@ -24837,7 +24902,7 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
24837
24902
  __name(MessageSourcesContainer, "MessageSourcesContainer");
24838
24903
 
24839
24904
  // src/features/assistant-message/components/MessageItem.tsx
24840
- 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";
24841
24906
  var MENTION_HREF = /^mention:\/\/([^/]+)\/(.+)$/;
24842
24907
  function mentionUrlTransform(url) {
24843
24908
  return MENTION_HREF.test(url) ? url : defaultUrlTransform(url);
@@ -24860,7 +24925,7 @@ function MessageItem({
24860
24925
  a: /* @__PURE__ */ __name(({ href, children }) => {
24861
24926
  const match = href ? MENTION_HREF.exec(href) : null;
24862
24927
  if (!match || !renderMention) return /* @__PURE__ */ jsx271("a", { href, children });
24863
- 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 ?? "") }) });
24864
24929
  }, "a")
24865
24930
  }),
24866
24931
  [renderMention]
@@ -25203,13 +25268,13 @@ function HandbookSyncButton({ refresh }) {
25203
25268
  __name(HandbookSyncButton, "HandbookSyncButton");
25204
25269
 
25205
25270
  // src/features/handbook/components/parts/HandbookIndexStatus.tsx
25206
- import { useFormatter, useTranslations as useTranslations144 } from "next-intl";
25271
+ import { useTranslations as useTranslations144 } from "next-intl";
25207
25272
  import { useMemo as useMemo53 } from "react";
25208
25273
  import { jsx as jsx277, jsxs as jsxs161 } from "react/jsx-runtime";
25209
25274
  var FAILURE_STATUSES = /* @__PURE__ */ new Set(["failed", "error"]);
25210
25275
  function HandbookIndexStatus({ pages }) {
25211
25276
  const t = useTranslations144();
25212
- const format2 = useFormatter();
25277
+ const dates = useDateFormatter();
25213
25278
  const lastSynced = useMemo53(() => {
25214
25279
  let latest = void 0;
25215
25280
  for (const page of pages) {
@@ -25226,7 +25291,7 @@ function HandbookIndexStatus({ pages }) {
25226
25291
  return /* @__PURE__ */ jsxs161("span", { className: "text-muted-foreground text-xs tabular-nums", children: [
25227
25292
  t("handbook.contents.status", {
25228
25293
  count: pages.length,
25229
- date: lastSynced ? format2.dateTime(lastSynced, { dateStyle: "medium" }) : ""
25294
+ date: lastSynced ? dates.format(lastSynced, "dateMedium") : ""
25230
25295
  }),
25231
25296
  failures > 0 ? /* @__PURE__ */ jsx277("span", { className: "text-destructive ms-2 tabular-nums", children: t("handbook.contents.failures", { count: failures }) }) : null
25232
25297
  ] });
@@ -25299,7 +25364,7 @@ function splitByNesting(pages) {
25299
25364
  __name(splitByNesting, "splitByNesting");
25300
25365
 
25301
25366
  // src/features/handbook/components/lists/HandbookContents.tsx
25302
- 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";
25303
25368
  function HandbookContents() {
25304
25369
  const t = useTranslations145();
25305
25370
  const [pages, setPages] = useState109([]);
@@ -25338,7 +25403,7 @@ function HandbookContents() {
25338
25403
  return /* @__PURE__ */ jsx279(
25339
25404
  HandbookProvider,
25340
25405
  {
25341
- functions: /* @__PURE__ */ jsxs163(Fragment54, { children: [
25406
+ functions: /* @__PURE__ */ jsxs163(Fragment55, { children: [
25342
25407
  /* @__PURE__ */ jsx279(HandbookAskSheet, {}),
25343
25408
  /* @__PURE__ */ jsx279(HandbookSyncButton, { refresh }),
25344
25409
  /* @__PURE__ */ jsx279(HandbookIndexStatus, { pages })
@@ -25729,7 +25794,7 @@ function groupThreadsByBucket(threads) {
25729
25794
  __name(groupThreadsByBucket, "groupThreadsByBucket");
25730
25795
 
25731
25796
  // src/features/assistant/components/parts/AssistantSidebar.tsx
25732
- 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";
25733
25798
  function AssistantSidebar({
25734
25799
  threads,
25735
25800
  activeId,
@@ -25766,7 +25831,7 @@ function AssistantSidebar({
25766
25831
  " ",
25767
25832
  newLabel ?? t("features.assistant.new")
25768
25833
  ] }) }),
25769
- /* @__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: [
25770
25835
  renderSection(t("features.assistant.bucket_today"), groups.today),
25771
25836
  renderSection(t("features.assistant.bucket_week"), groups.thisWeek),
25772
25837
  renderSection(t("features.assistant.bucket_earlier"), groups.earlier)
@@ -25776,7 +25841,7 @@ function AssistantSidebar({
25776
25841
  __name(AssistantSidebar, "AssistantSidebar");
25777
25842
 
25778
25843
  // src/features/handbook/components/containers/HandbookAskContainer.tsx
25779
- 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";
25780
25845
  function HandbookAskContainer({ handbookThreadId } = {}) {
25781
25846
  const t = useTranslations151();
25782
25847
  const { threads, thread, messages, sending, ask, selectThread, startNew } = useHandbookAsk({ handbookThreadId });
@@ -25817,7 +25882,7 @@ function HandbookAskContainer({ handbookThreadId } = {}) {
25817
25882
  detailsIcon: /* @__PURE__ */ jsx287(MessagesSquareIcon2, {}),
25818
25883
  details,
25819
25884
  children: /* @__PURE__ */ jsxs169("div", { className: "flex h-full min-h-0 w-full flex-col overflow-hidden", children: [
25820
- showThread ? /* @__PURE__ */ jsx287(Fragment56, { children: /* @__PURE__ */ jsx287(
25885
+ showThread ? /* @__PURE__ */ jsx287(Fragment57, { children: /* @__PURE__ */ jsx287(
25821
25886
  AssistantThread,
25822
25887
  {
25823
25888
  messages,
@@ -25852,16 +25917,16 @@ import { useTranslations as useTranslations154 } from "next-intl";
25852
25917
  import { useMemo as useMemo60 } from "react";
25853
25918
 
25854
25919
  // src/features/assistant-message/components/EntityMentionLink.tsx
25855
- import { Fragment as Fragment57, jsx as jsx288 } from "react/jsx-runtime";
25920
+ import { Fragment as Fragment58, jsx as jsx288 } from "react/jsx-runtime";
25856
25921
  function EntityMentionLinkView({ type, id, alias }) {
25857
25922
  const generate = usePageUrlGenerator();
25858
25923
  let module;
25859
25924
  try {
25860
25925
  module = ModuleRegistry.findByName(type);
25861
25926
  } catch {
25862
- return /* @__PURE__ */ jsx288(Fragment57, { children: alias });
25927
+ return /* @__PURE__ */ jsx288(Fragment58, { children: alias });
25863
25928
  }
25864
- if (!module?.pageUrl) return /* @__PURE__ */ jsx288(Fragment57, { children: alias });
25929
+ if (!module?.pageUrl) return /* @__PURE__ */ jsx288(Fragment58, { children: alias });
25865
25930
  return /* @__PURE__ */ jsx288(Link, { href: generate({ page: module, id }), children: alias });
25866
25931
  }
25867
25932
  __name(EntityMentionLinkView, "EntityMentionLinkView");
@@ -25973,7 +26038,7 @@ function AssistantThreadHeader({ assistant, onRename, onDelete, renamePlaceholde
25973
26038
  __name(AssistantThreadHeader, "AssistantThreadHeader");
25974
26039
 
25975
26040
  // src/features/assistant/components/containers/AssistantContainer.tsx
25976
- 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";
25977
26042
  function AssistantContainer({
25978
26043
  renderApprovalAction,
25979
26044
  renderMention,
@@ -26001,7 +26066,7 @@ function AssistantContainer({
26001
26066
  ),
26002
26067
  [ctx.threads, ctx.assistant?.id, ctx.selectThread, renderThreadBadge]
26003
26068
  );
26004
- const thread = /* @__PURE__ */ jsx291(Fragment58, { children: !showThread ? /* @__PURE__ */ jsx291(
26069
+ const thread = /* @__PURE__ */ jsx291(Fragment59, { children: !showThread ? /* @__PURE__ */ jsx291(
26005
26070
  AssistantEmptyState,
26006
26071
  {
26007
26072
  onSend: ctx.sendMessage,
@@ -26009,7 +26074,7 @@ function AssistantContainer({
26009
26074
  onOperatorModeChange: showOperatorToggle ? ctx.setOperatorMode : void 0,
26010
26075
  composerLeading: renderScopePicker?.()
26011
26076
  }
26012
- ) : /* @__PURE__ */ jsxs172(Fragment58, { children: [
26077
+ ) : /* @__PURE__ */ jsxs172(Fragment59, { children: [
26013
26078
  ctx.assistant ? /* @__PURE__ */ jsx291(
26014
26079
  AssistantThreadHeader,
26015
26080
  {
@@ -26165,7 +26230,7 @@ function AssistantBlockNoteComposer({
26165
26230
  __name(AssistantBlockNoteComposer, "AssistantBlockNoteComposer");
26166
26231
 
26167
26232
  // src/features/assistant/components/containers/AssistantPageContainer.tsx
26168
- 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";
26169
26234
  function AssistantPageContainer({
26170
26235
  renderApprovalAction,
26171
26236
  renderMention,
@@ -26204,7 +26269,7 @@ function AssistantPageContainer({
26204
26269
  ) })
26205
26270
  ),
26206
26271
  children: /* @__PURE__ */ jsxs174("div", { className: "bg-background flex h-full w-full flex-col overflow-hidden rounded-lg border", children: [
26207
- showThread ? /* @__PURE__ */ jsxs174(Fragment59, { children: [
26272
+ showThread ? /* @__PURE__ */ jsxs174(Fragment60, { children: [
26208
26273
  ctx.assistant ? /* @__PURE__ */ jsx293(
26209
26274
  AssistantThreadHeader,
26210
26275
  {
@@ -26251,7 +26316,7 @@ __name(AssistantPageContainer, "AssistantPageContainer");
26251
26316
  // src/features/assistant-action/components/ApprovalActionCard.tsx
26252
26317
  import { ShieldAlert as ShieldAlert2 } from "lucide-react";
26253
26318
  import { useTranslations as useTranslations157 } from "next-intl";
26254
- 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";
26255
26320
  import { jsx as jsx294, jsxs as jsxs175 } from "react/jsx-runtime";
26256
26321
  var STATUS_VARIANT2 = {
26257
26322
  pending: "softBlue",
@@ -26538,7 +26603,7 @@ function ApprovalActionCard({ actionId, summary, onResolved, hiddenRelationshipK
26538
26603
  /* @__PURE__ */ jsx294("span", { children: isUpdate ? t("features.assistant.approval.proposal.updateHeading", { entity: entityLabel }) : t("features.assistant.approval.proposal.heading", { entity: entityLabel }) }),
26539
26604
  targetLabel !== "" && /* @__PURE__ */ jsx294("span", { className: "text-foreground tracking-normal normal-case", children: targetLabel })
26540
26605
  ] }),
26541
- /* @__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: [
26542
26607
  /* @__PURE__ */ jsx294("dt", { className: "text-muted-foreground text-xs leading-relaxed break-words sm:text-sm", children: row.label }),
26543
26608
  /* @__PURE__ */ jsx294("dd", { className: "text-foreground text-sm leading-relaxed break-words whitespace-pre-wrap", children: row.value })
26544
26609
  ] }, row.key)) })
@@ -26660,7 +26725,8 @@ import { jsx as jsx298, jsxs as jsxs177 } from "react/jsx-runtime";
26660
26725
  var NOTIFICATIONS_MODULE_NAME = "notifications";
26661
26726
  var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26662
26727
  const t = useTranslations160();
26663
- const dateLocale = dateFormatLocale(useI18nLocale());
26728
+ const { locale: dateLocale } = useDateFormatter();
26729
+ const now = useMountedNow();
26664
26730
  const generateUrl = usePageUrlGenerator();
26665
26731
  const { loadNotifications } = useNotificationContext();
26666
26732
  const archived = params.context?.archived === true;
@@ -26720,7 +26786,7 @@ var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26720
26786
  meta: { className: "w-40" },
26721
26787
  cell: /* @__PURE__ */ __name(({ row }) => {
26722
26788
  const notification = row.original.jsonApiData;
26723
- 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) : "" });
26724
26790
  }, "cell"),
26725
26791
  enableSorting: false,
26726
26792
  enableHiding: false
@@ -26761,7 +26827,7 @@ var useNotificationTableStructure = /* @__PURE__ */ __name((params) => {
26761
26827
  };
26762
26828
  const columns = useMemo62(() => {
26763
26829
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
26764
- }, [params.fields, fieldColumnMap, t, generateUrl]);
26830
+ }, [params.fields, fieldColumnMap, t, generateUrl, dateLocale, now]);
26765
26831
  return useMemo62(() => ({ data: tableData, columns }), [tableData, columns]);
26766
26832
  }, "useNotificationTableStructure");
26767
26833
  registerTableGenerator(NOTIFICATIONS_MODULE_NAME, useNotificationTableStructure);
@@ -26857,7 +26923,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
26857
26923
  // src/features/notification/components/modals/NotificationModal.tsx
26858
26924
  import { BellIcon as BellIcon2, ExternalLinkIcon } from "lucide-react";
26859
26925
  import { useTranslations as useTranslations163 } from "next-intl";
26860
- 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";
26861
26927
  import { jsx as jsx301, jsxs as jsxs179 } from "react/jsx-runtime";
26862
26928
  function NotificationModalContent({ isOpen, setIsOpen }) {
26863
26929
  const _instanceId = useRef46(Math.random().toString(36).substr(2, 9));
@@ -27046,7 +27112,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
27046
27112
  ] }),
27047
27113
  isLoading && /* @__PURE__ */ jsx301("div", { className: "text-muted-foreground px-3 py-2 text-xs", children: t(`common.loading`) }),
27048
27114
  error && /* @__PURE__ */ jsx301("div", { className: "text-destructive px-3 py-2 text-xs", children: error }),
27049
- /* @__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`) }) })
27050
27116
  ] })
27051
27117
  ] });
27052
27118
  }
@@ -27057,7 +27123,7 @@ function NotificationModal(props) {
27057
27123
  __name(NotificationModal, "NotificationModal");
27058
27124
 
27059
27125
  // src/features/notification/components/notifications/PushNotificationProvider.tsx
27060
- import { Fragment as Fragment62, jsx as jsx302 } from "react/jsx-runtime";
27126
+ import { Fragment as Fragment63, jsx as jsx302 } from "react/jsx-runtime";
27061
27127
  function PushNotificationProvider({
27062
27128
  children,
27063
27129
  excludedRoleIds = []
@@ -27065,7 +27131,7 @@ function PushNotificationProvider({
27065
27131
  const { currentUser, hasRole } = useCurrentUserContext();
27066
27132
  const canSubscribe = !hasRole(getRoleId().Administrator) && !excludedRoleIds.some((roleId) => hasRole(roleId));
27067
27133
  usePushNotifications_default({ currentUser: currentUser ?? void 0, canSubscribe });
27068
- return /* @__PURE__ */ jsx302(Fragment62, { children });
27134
+ return /* @__PURE__ */ jsx302(Fragment63, { children });
27069
27135
  }
27070
27136
  __name(PushNotificationProvider, "PushNotificationProvider");
27071
27137
 
@@ -27407,11 +27473,11 @@ import { useMemo as useMemo65 } from "react";
27407
27473
  // src/features/tokenusage/lib/formatters.ts
27408
27474
  import { useLocale } from "next-intl";
27409
27475
  import { useMemo as useMemo64 } from "react";
27410
- function createUsageFormatters(locale, currency) {
27476
+ function createUsageFormatters(locale, currency, dateLocale = locale) {
27411
27477
  const symbol = new Intl.NumberFormat(locale, { style: "currency", currency, currencyDisplay: "narrowSymbol" }).formatToParts(0).find((part) => part.type === "currency")?.value ?? currency;
27412
27478
  const decimal = /* @__PURE__ */ __name((value, decimals) => value.toLocaleString(locale, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }), "decimal");
27413
- const dayFormat = new Intl.DateTimeFormat(locale, { day: "numeric", month: "short", timeZone: "UTC" });
27414
- 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" });
27415
27481
  const compactFormat = new Intl.NumberFormat(locale, { notation: "compact", maximumSignificantDigits: 3 });
27416
27482
  const collator = new Intl.Collator(locale);
27417
27483
  return {
@@ -27442,8 +27508,9 @@ function createUsageFormatters(locale, currency) {
27442
27508
  __name(createUsageFormatters, "createUsageFormatters");
27443
27509
  function useUsageFormatters() {
27444
27510
  const locale = useLocale();
27511
+ const { locale: dateLocale } = useDateFormatter();
27445
27512
  const currency = getTokenUsageCurrency();
27446
- return useMemo64(() => createUsageFormatters(locale, currency), [locale, currency]);
27513
+ return useMemo64(() => createUsageFormatters(locale, currency, dateLocale), [locale, currency, dateLocale]);
27447
27514
  }
27448
27515
  __name(useUsageFormatters, "useUsageFormatters");
27449
27516
 
@@ -28061,11 +28128,11 @@ function RoleDetails() {
28061
28128
  __name(RoleDetails, "RoleDetails");
28062
28129
 
28063
28130
  // src/features/role/components/containers/RoleContainer.tsx
28064
- 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";
28065
28132
  function RoleContainer() {
28066
28133
  const { role } = useRoleContext();
28067
28134
  if (!role) return null;
28068
- return /* @__PURE__ */ jsxs187(Fragment63, { children: [
28135
+ return /* @__PURE__ */ jsxs187(Fragment64, { children: [
28069
28136
  /* @__PURE__ */ jsx311(RoleDetails, {}),
28070
28137
  /* @__PURE__ */ jsx311(RoleUsersList, { role })
28071
28138
  ] });
@@ -28110,7 +28177,7 @@ __name(FormRoles, "FormRoles");
28110
28177
  // src/features/role/components/forms/RemoveUserFromRole.tsx
28111
28178
  import { useTranslations as useTranslations173 } from "next-intl";
28112
28179
  import { useEffect as useEffect90, useState as useState122 } from "react";
28113
- 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";
28114
28181
  function RemoveUserFromRole({ role, user, refresh }) {
28115
28182
  const [open, setOpen] = useState122(false);
28116
28183
  const [canRemove, setCanRemove] = useState122(false);
@@ -28159,7 +28226,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
28159
28226
  /* @__PURE__ */ jsx313(DialogTitle, { children: t(`role.remove_user.title`) }),
28160
28227
  /* @__PURE__ */ jsx313(DialogDescription, { children: canRemove ? t(`role.remove_user.subtitle_allowed`) : t(`role.remove_user.subtitle_not_allowed`) })
28161
28228
  ] }),
28162
- canRemove ? /* @__PURE__ */ jsxs189(Fragment64, { children: [
28229
+ canRemove ? /* @__PURE__ */ jsxs189(Fragment65, { children: [
28163
28230
  t(`role.remove_user.description_allowed`, { role: roleName, user: user.name }),
28164
28231
  /* @__PURE__ */ jsxs189("div", { className: "flex justify-end", children: [
28165
28232
  /* @__PURE__ */ jsx313(Button, { className: "me-2", variant: "outline", type: `button`, onClick: () => setOpen(false), children: t(`ui.buttons.cancel`) }),
@@ -28176,7 +28243,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
28176
28243
  }
28177
28244
  )
28178
28245
  ] })
28179
- ] }) : /* @__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 }) })
28180
28247
  ] })
28181
28248
  ] });
28182
28249
  }
@@ -28186,7 +28253,7 @@ __name(RemoveUserFromRole, "RemoveUserFromRole");
28186
28253
  import { PlusCircle as PlusCircle2 } from "lucide-react";
28187
28254
  import { useTranslations as useTranslations174 } from "next-intl";
28188
28255
  import { useCallback as useCallback56, useEffect as useEffect91, useRef as useRef49, useState as useState123 } from "react";
28189
- 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";
28190
28257
  function UserRoleAdd({ user, refresh }) {
28191
28258
  const [open, setOpen] = useState123(false);
28192
28259
  const inputRef = useRef49(null);
@@ -28233,7 +28300,7 @@ function UserRoleAdd({ user, refresh }) {
28233
28300
  useEffect91(() => {
28234
28301
  if (open) searchRoles("");
28235
28302
  }, [open]);
28236
- return /* @__PURE__ */ jsxs190(Fragment65, { children: [
28303
+ return /* @__PURE__ */ jsxs190(Fragment66, { children: [
28237
28304
  /* @__PURE__ */ jsxs190(Button, { size: "sm", onClick: () => setOpen(true), children: [
28238
28305
  /* @__PURE__ */ jsx314(PlusCircle2, { className: "me-3 h-3.5 w-3.5" }),
28239
28306
  t(`common.association.label`, {
@@ -28563,14 +28630,14 @@ __name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
28563
28630
 
28564
28631
  // src/features/oauth/components/OAuthClientCard.tsx
28565
28632
  import { useTranslations as useTranslations180 } from "next-intl";
28566
- import { formatDistanceToNow } from "date-fns";
28567
28633
  import { Key as Key2, MoreVertical, Pencil, Trash2 as Trash24 } from "lucide-react";
28568
28634
  import { jsx as jsx320, jsxs as jsxs194 } from "react/jsx-runtime";
28569
28635
  function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
28570
28636
  const t = useTranslations180();
28571
- const dateFnsLocale = useI18nDateFnsLocale();
28637
+ const { relative } = useDateFormatter();
28638
+ const now = useMountedNow();
28572
28639
  const truncatedId = client.clientId.length > 12 ? `${client.clientId.slice(0, 8)}...${client.clientId.slice(-4)}` : client.clientId;
28573
- 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");
28574
28641
  return /* @__PURE__ */ jsxs194(
28575
28642
  Card,
28576
28643
  {
@@ -28623,7 +28690,7 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
28623
28690
  ] }),
28624
28691
  /* @__PURE__ */ jsx320(CardContent, { children: /* @__PURE__ */ jsxs194("div", { className: "flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted-foreground", children: [
28625
28692
  /* @__PURE__ */ jsx320("span", { className: "tabular-nums", children: truncatedId }),
28626
- /* @__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 }) }),
28627
28694
  /* @__PURE__ */ jsx320("span", { children: client.isConfidential ? t("oauth.ui.card.confidential") : t("oauth.ui.card.public") })
28628
28695
  ] }) })
28629
28696
  ]
@@ -28858,7 +28925,7 @@ __name(OAuthClientForm, "OAuthClientForm");
28858
28925
  import { useTranslations as useTranslations183 } from "next-intl";
28859
28926
  import { useState as useState126, useCallback as useCallback61 } from "react";
28860
28927
  import { Copy as Copy4, Check as Check2, RefreshCw as RefreshCw3, Pencil as Pencil2, Trash2 as Trash25, ExternalLink } from "lucide-react";
28861
- 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";
28862
28929
  function OAuthClientDetail({
28863
28930
  client,
28864
28931
  isLoading = false,
@@ -28867,7 +28934,7 @@ function OAuthClientDetail({
28867
28934
  onRegenerateSecret
28868
28935
  }) {
28869
28936
  const t = useTranslations183();
28870
- const locale = useI18nLocale();
28937
+ const { format } = useDateFormatter();
28871
28938
  const scopeText = useOAuthScopeText();
28872
28939
  const [copiedField, setCopiedField] = useState126(null);
28873
28940
  const [showDeleteConfirm, setShowDeleteConfirm] = useState126(false);
@@ -28903,8 +28970,8 @@ function OAuthClientDetail({
28903
28970
  setShowRegenerateConfirm(false);
28904
28971
  }
28905
28972
  }, [onRegenerateSecret]);
28906
- const createdDate = client.createdAt ? new Date(client.createdAt).toLocaleDateString(dateFormatLocale(locale), { dateStyle: "long" }) : t("oauth.ui.card.unknown");
28907
- 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: [
28908
28975
  /* @__PURE__ */ jsxs197(Card, { children: [
28909
28976
  /* @__PURE__ */ jsx323(CardHeader, { children: /* @__PURE__ */ jsxs197("div", { className: "flex items-start justify-between", children: [
28910
28977
  /* @__PURE__ */ jsxs197("div", { children: [
@@ -29113,7 +29180,7 @@ function OAuthCompanySelector({ companies, value, onChange }) {
29113
29180
  __name(OAuthCompanySelector, "OAuthCompanySelector");
29114
29181
 
29115
29182
  // src/features/oauth/components/consent/OAuthConsentScreen.tsx
29116
- 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";
29117
29184
  function OAuthConsentScreen({
29118
29185
  params,
29119
29186
  logoUrl,
@@ -29147,7 +29214,7 @@ function OAuthConsentScreen({
29147
29214
  /* @__PURE__ */ jsx328(Separator, {}),
29148
29215
  /* @__PURE__ */ jsx328(OAuthScopeList, { scopes }),
29149
29216
  /* @__PURE__ */ jsx328(Separator, {}),
29150
- companies.length > 1 && /* @__PURE__ */ jsxs202(Fragment67, { children: [
29217
+ companies.length > 1 && /* @__PURE__ */ jsxs202(Fragment68, { children: [
29151
29218
  /* @__PURE__ */ jsx328(OAuthCompanySelector, { companies, value: companyId, onChange: setCompanyId }),
29152
29219
  /* @__PURE__ */ jsx328(Separator, {})
29153
29220
  ] }),
@@ -29277,7 +29344,7 @@ function WaitlistQuestionnaireRenderer({
29277
29344
  __name(WaitlistQuestionnaireRenderer, "WaitlistQuestionnaireRenderer");
29278
29345
 
29279
29346
  // src/features/waitlist/components/forms/WaitlistForm.tsx
29280
- 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";
29281
29348
  function WaitlistForm({ onSuccess }) {
29282
29349
  const t = useTranslations189();
29283
29350
  const [isSubmitting, setIsSubmitting] = useState127(false);
@@ -29397,7 +29464,7 @@ function WaitlistForm({ onSuccess }) {
29397
29464
  {
29398
29465
  form,
29399
29466
  id: "gdprConsent",
29400
- label: /* @__PURE__ */ jsxs204(Fragment68, { children: [
29467
+ label: /* @__PURE__ */ jsxs204(Fragment69, { children: [
29401
29468
  t("auth.gdpr.terms_prefix"),
29402
29469
  /* @__PURE__ */ jsx330(Link, { href: "/terms", target: "_blank", rel: "noopener", children: t("auth.gdpr.terms_of_service") }),
29403
29470
  t("auth.gdpr.and"),
@@ -29691,7 +29758,7 @@ import { Popover as PopoverPrimitive2 } from "@base-ui/react/popover";
29691
29758
  import { CheckIcon as CheckIcon10, MinusIcon as MinusIcon3, XIcon as XIcon15 } from "lucide-react";
29692
29759
  import { useTranslations as useTranslations193 } from "next-intl";
29693
29760
  import { useCallback as useCallback63, useEffect as useEffect94, useState as useState130 } from "react";
29694
- 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";
29695
29762
  function RbacPermissionPicker({
29696
29763
  open,
29697
29764
  anchor,
@@ -29777,7 +29844,7 @@ function RbacPermissionPicker({
29777
29844
  )
29778
29845
  ] })
29779
29846
  ] }),
29780
- isRoleColumn && onClear && /* @__PURE__ */ jsxs210(Fragment69, { children: [
29847
+ isRoleColumn && onClear && /* @__PURE__ */ jsxs210(Fragment70, { children: [
29781
29848
  /* @__PURE__ */ jsx336(Separator, {}),
29782
29849
  /* @__PURE__ */ jsxs210(
29783
29850
  Button,
@@ -30064,7 +30131,7 @@ __name(RbacContainer, "RbacContainer");
30064
30131
  // src/features/rbac/components/RbacByRoleContainer.tsx
30065
30132
  import { Loader2Icon as Loader2Icon5 } from "lucide-react";
30066
30133
  import { useTranslations as useTranslations195 } from "next-intl";
30067
- 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";
30068
30135
  import { jsx as jsx338, jsxs as jsxs212 } from "react/jsx-runtime";
30069
30136
  function findToken2(tokens, action) {
30070
30137
  if (!tokens) return void 0;
@@ -30190,7 +30257,7 @@ function RbacByRoleContainer() {
30190
30257
  const defaultTokens = block.default ?? [];
30191
30258
  const roleTokens = block[selectedRoleId];
30192
30259
  const moduleLabel = moduleNames?.[moduleId] ?? moduleId;
30193
- return /* @__PURE__ */ jsxs212(Fragment70, { children: [
30260
+ return /* @__PURE__ */ jsxs212(Fragment71, { children: [
30194
30261
  /* @__PURE__ */ jsx338("tr", { className: "border-b bg-muted/40", children: /* @__PURE__ */ jsx338(
30195
30262
  "td",
30196
30263
  {
@@ -30890,4 +30957,4 @@ export {
30890
30957
  useOAuthClients,
30891
30958
  useOAuthClient
30892
30959
  };
30893
- //# sourceMappingURL=chunk-OZADFYE7.mjs.map
30960
+ //# sourceMappingURL=chunk-KVYYPKRO.mjs.map