@carlonicora/nextjs-jsonapi 1.0.3 → 1.0.5

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 (515) hide show
  1. package/dist/{AbstractService-BKlpJA61.d.mts → AbstractService-B2n_JdiC.d.mts} +1 -1
  2. package/dist/{AbstractService-D9eSVKNa.d.ts → AbstractService-DtQTYovo.d.ts} +1 -1
  3. package/dist/{content.interface-Dg2lt_An.d.mts → AuthComponent-CPLvEerw.d.mts} +11 -15
  4. package/dist/{content.interface-BhyAiOFq.d.ts → AuthComponent-m6Qp4Hz6.d.ts} +11 -15
  5. package/dist/{BlockNoteEditor-UVO3VZZE.mjs → BlockNoteEditor-BLVXQPXV.mjs} +14 -18
  6. package/dist/{BlockNoteEditor-UVO3VZZE.mjs.map → BlockNoteEditor-BLVXQPXV.mjs.map} +1 -1
  7. package/dist/{BlockNoteEditor-VFWG6LXI.js → BlockNoteEditor-ZTDHULFT.js} +15 -19
  8. package/dist/BlockNoteEditor-ZTDHULFT.js.map +1 -0
  9. package/dist/JsonApiRequest-O7BGUMFO.mjs +23 -0
  10. package/dist/JsonApiRequest-VARLNKAF.js +23 -0
  11. package/dist/JsonApiRequest-VARLNKAF.js.map +1 -0
  12. package/dist/chunk-2LM6LCJW.mjs +1 -0
  13. package/dist/chunk-3APORDYP.mjs +7783 -0
  14. package/dist/chunk-3APORDYP.mjs.map +1 -0
  15. package/dist/{chunk-TMVHSY3Y.js → chunk-5ZEADNNP.js} +36 -17
  16. package/dist/chunk-5ZEADNNP.js.map +1 -0
  17. package/dist/{chunk-ECDTZBYO.mjs → chunk-74F6BBHH.mjs} +21 -2
  18. package/dist/chunk-74F6BBHH.mjs.map +1 -0
  19. package/dist/{chunk-GYWPEPOH.mjs → chunk-7C5RAEBO.mjs} +72 -68
  20. package/dist/chunk-7C5RAEBO.mjs.map +1 -0
  21. package/dist/chunk-A5DDIABK.js +1 -0
  22. package/dist/{chunk-TEGF6ZWG.js → chunk-AGAJMJ4T.js} +47 -9
  23. package/dist/chunk-AGAJMJ4T.js.map +1 -0
  24. package/dist/{chunk-CXQOWQSY.js → chunk-AYHKQWHH.js} +15 -2
  25. package/dist/chunk-AYHKQWHH.js.map +1 -0
  26. package/dist/{chunk-I2REI7OA.js → chunk-HMHGLXWC.js} +33 -15
  27. package/dist/chunk-HMHGLXWC.js.map +1 -0
  28. package/dist/chunk-IWFGEPAA.mjs +1 -0
  29. package/dist/chunk-JC3WJK65.js +1 -0
  30. package/dist/{chunk-L6EQEAXU.mjs → chunk-PYF2U6WG.mjs} +25 -7
  31. package/dist/chunk-PYF2U6WG.mjs.map +1 -0
  32. package/dist/{chunk-YDVTFM7X.mjs → chunk-RBIVEH2K.mjs} +42 -4
  33. package/dist/chunk-RBIVEH2K.mjs.map +1 -0
  34. package/dist/{chunk-V2JJPI7N.js → chunk-RZO2LOW4.js} +237 -233
  35. package/dist/chunk-RZO2LOW4.js.map +1 -0
  36. package/dist/{chunk-X4BIHJ2B.mjs → chunk-SM63SZCP.mjs} +15 -2
  37. package/dist/chunk-SM63SZCP.mjs.map +1 -0
  38. package/dist/chunk-WEC4YMOS.js +7783 -0
  39. package/dist/chunk-WEC4YMOS.js.map +1 -0
  40. package/dist/client/index.d.mts +21 -2
  41. package/dist/client/index.d.ts +21 -2
  42. package/dist/client/index.js +18 -245
  43. package/dist/client/index.js.map +1 -1
  44. package/dist/client/index.mjs +28 -255
  45. package/dist/client/index.mjs.map +1 -1
  46. package/dist/components/index.d.mts +293 -8
  47. package/dist/components/index.d.ts +293 -8
  48. package/dist/components/index.js +78 -2323
  49. package/dist/components/index.js.map +1 -1
  50. package/dist/components/index.mjs +172 -2417
  51. package/dist/components/index.mjs.map +1 -1
  52. package/dist/{config-hXufftVS.d.ts → config-BmnK65TD.d.mts} +1 -0
  53. package/dist/{config-hXufftVS.d.mts → config-BmnK65TD.d.ts} +1 -0
  54. package/dist/config-DQeAo9Kf.d.mts +49 -0
  55. package/dist/config-DQeAo9Kf.d.ts +49 -0
  56. package/dist/contexts/index.d.mts +109 -21
  57. package/dist/contexts/index.d.ts +109 -21
  58. package/dist/contexts/index.js +39 -7
  59. package/dist/contexts/index.js.map +1 -1
  60. package/dist/contexts/index.mjs +40 -8
  61. package/dist/core/index.d.mts +3 -4
  62. package/dist/core/index.d.ts +3 -4
  63. package/dist/core/index.js +3 -7
  64. package/dist/core/index.js.map +1 -1
  65. package/dist/core/index.mjs +4 -8
  66. package/dist/{d3.link.interface-QMdB22bC.d.mts → d3.link.interface-ClC4Irqp.d.mts} +2 -1
  67. package/dist/{d3.link.interface-QMdB22bC.d.ts → d3.link.interface-ClC4Irqp.d.ts} +2 -1
  68. package/dist/features/index.d.mts +17 -86
  69. package/dist/features/index.d.ts +17 -86
  70. package/dist/features/index.js +7 -16
  71. package/dist/features/index.js.map +1 -1
  72. package/dist/features/index.mjs +10 -19
  73. package/dist/hooks/index.d.mts +18 -43
  74. package/dist/hooks/index.d.ts +18 -43
  75. package/dist/hooks/index.js +20 -7
  76. package/dist/hooks/index.js.map +1 -1
  77. package/dist/hooks/index.mjs +19 -6
  78. package/dist/index.d.mts +10 -6
  79. package/dist/index.d.ts +10 -6
  80. package/dist/index.js +13 -10
  81. package/dist/index.js.map +1 -1
  82. package/dist/index.mjs +22 -19
  83. package/dist/interfaces/index.d.mts +2 -1
  84. package/dist/interfaces/index.d.ts +2 -1
  85. package/dist/notification.interface-BBgMUdLR.d.mts +14 -0
  86. package/dist/notification.interface-gyvT-Z2F.d.ts +14 -0
  87. package/dist/permissions/index.d.mts +2 -3
  88. package/dist/permissions/index.d.ts +2 -3
  89. package/dist/server/index.d.mts +38 -18
  90. package/dist/server/index.d.ts +38 -18
  91. package/dist/server/index.js +70 -2
  92. package/dist/server/index.js.map +1 -1
  93. package/dist/server/index.mjs +68 -0
  94. package/dist/server/index.mjs.map +1 -1
  95. package/dist/types-BUAlgqqh.d.ts +39 -0
  96. package/dist/{types-DluCaP1I.d.ts → types-Bl61ob-7.d.mts} +19 -2
  97. package/dist/{types-lQVA8d_P.d.mts → types-Bl61ob-7.d.ts} +19 -2
  98. package/dist/types-iVdVY7ba.d.mts +39 -0
  99. package/dist/useSocket-Cn7fB_B1.d.mts +25 -0
  100. package/dist/useSocket-DzMKRKCA.d.ts +25 -0
  101. package/dist/user.fields-CbdObSmS.d.mts +18 -0
  102. package/dist/user.fields-CbdObSmS.d.ts +18 -0
  103. package/dist/utils/index.d.mts +1 -2
  104. package/dist/utils/index.d.ts +1 -2
  105. package/package.json +6 -3
  106. package/src/atoms/index.ts +1 -0
  107. package/src/atoms/recentPagesAtom.ts +10 -0
  108. package/src/client/context/JsonApiContext.ts +61 -0
  109. package/src/client/context/JsonApiProvider.tsx +27 -0
  110. package/src/client/context/index.ts +2 -0
  111. package/src/client/hooks/index.ts +3 -0
  112. package/src/client/hooks/useJsonApiGet.ts +188 -0
  113. package/src/client/hooks/useJsonApiMutation.ts +193 -0
  114. package/src/client/hooks/useRehydration.ts +47 -0
  115. package/src/client/index.ts +24 -0
  116. package/src/client/request.ts +97 -0
  117. package/src/client/token.ts +10 -0
  118. package/src/components/containers/PageContainer.tsx +15 -0
  119. package/src/components/containers/ReactMarkdownContainer.tsx +119 -0
  120. package/src/components/containers/TabsContainer.tsx +93 -0
  121. package/src/components/containers/index.ts +3 -0
  122. package/src/components/contents/AttributeElement.tsx +20 -0
  123. package/src/components/contents/index.ts +1 -0
  124. package/src/components/details/AllowedUsersDetails.tsx +23 -0
  125. package/src/components/details/index.ts +1 -0
  126. package/src/components/editors/BlockNoteDiffInlineContent.tsx +152 -0
  127. package/src/components/editors/BlockNoteEditor.tsx +404 -0
  128. package/src/components/editors/BlockNoteEditorContainer.tsx +13 -0
  129. package/src/components/editors/BlockNoteEditorFormattingToolbar.tsx +38 -0
  130. package/src/components/editors/index.ts +1 -0
  131. package/src/components/errors/ErrorDetails.tsx +41 -0
  132. package/src/components/errors/errorToast.ts +9 -0
  133. package/src/components/errors/index.ts +2 -0
  134. package/src/components/forms/CommonAssociationForm.tsx +162 -0
  135. package/src/components/forms/CommonDeleter.tsx +94 -0
  136. package/src/components/forms/CommonEditorButtons.tsx +30 -0
  137. package/src/components/forms/CommonEditorHeader.tsx +35 -0
  138. package/src/components/forms/CommonEditorTrigger.tsx +26 -0
  139. package/src/components/forms/DatePickerPopover.tsx +219 -0
  140. package/src/components/forms/DateRangeSelector.tsx +110 -0
  141. package/src/components/forms/FileUploader.tsx +324 -0
  142. package/src/components/forms/FormCheckbox.tsx +66 -0
  143. package/src/components/forms/FormContainerGeneric.tsx +39 -0
  144. package/src/components/forms/FormDate.tsx +247 -0
  145. package/src/components/forms/FormDateTime.tsx +231 -0
  146. package/src/components/forms/FormInput.tsx +110 -0
  147. package/src/components/forms/FormPassword.tsx +54 -0
  148. package/src/components/forms/FormPlaceAutocomplete.tsx +286 -0
  149. package/src/components/forms/FormSelect.tsx +72 -0
  150. package/src/components/forms/FormSlider.tsx +51 -0
  151. package/src/components/forms/FormSwitch.tsx +25 -0
  152. package/src/components/forms/FormTextarea.tsx +44 -0
  153. package/src/components/forms/MultiFileUploader.tsx +107 -0
  154. package/src/components/forms/PasswordInput.tsx +47 -0
  155. package/src/components/forms/index.ts +22 -0
  156. package/src/components/index.ts +16 -0
  157. package/src/components/navigations/Breadcrumb.tsx +83 -0
  158. package/src/components/navigations/ContentTitle.tsx +39 -0
  159. package/src/components/navigations/Header.tsx +27 -0
  160. package/src/components/navigations/ModeToggleSwitch.tsx +25 -0
  161. package/src/components/navigations/PageSection.tsx +64 -0
  162. package/src/components/navigations/RecentPagesNavigator.tsx +52 -0
  163. package/src/components/navigations/index.ts +6 -0
  164. package/src/components/pages/PageContainerContentDetails.tsx +76 -0
  165. package/src/components/pages/PageContentContainer.tsx +31 -0
  166. package/src/components/pages/index.ts +2 -0
  167. package/src/components/tables/ContentListTable.tsx +166 -0
  168. package/src/components/tables/ContentTableSearch.tsx +105 -0
  169. package/src/components/tables/cells/cell.component.tsx +18 -0
  170. package/src/components/tables/cells/cell.date.tsx +16 -0
  171. package/src/components/tables/cells/cell.id.tsx +27 -0
  172. package/src/components/tables/cells/cell.link.tsx +18 -0
  173. package/src/components/tables/cells/cell.text.tsx +12 -0
  174. package/src/components/tables/cells/cell.url.tsx +13 -0
  175. package/src/components/tables/cells/index.ts +5 -0
  176. package/src/components/tables/index.ts +3 -0
  177. package/src/contexts/CommonContext.tsx +52 -0
  178. package/src/contexts/SharedContext.tsx +37 -0
  179. package/src/contexts/SocketContext.tsx +65 -0
  180. package/src/contexts/index.ts +7 -0
  181. package/src/core/abstracts/AbstractApiData.ts +138 -0
  182. package/src/core/abstracts/AbstractService.ts +263 -0
  183. package/src/core/abstracts/index.ts +2 -0
  184. package/src/core/endpoint/EndpointCreator.ts +97 -0
  185. package/src/core/endpoint/index.ts +1 -0
  186. package/src/core/factories/JsonApiDataFactory.ts +12 -0
  187. package/src/core/factories/RehydrationFactory.ts +30 -0
  188. package/src/core/factories/index.ts +2 -0
  189. package/src/core/fields/FieldSelector.ts +15 -0
  190. package/src/core/fields/index.ts +1 -0
  191. package/src/core/index.ts +20 -0
  192. package/src/core/interfaces/ApiData.ts +8 -0
  193. package/src/core/interfaces/ApiDataInterface.ts +15 -0
  194. package/src/core/interfaces/ApiRequestDataTypeInterface.ts +14 -0
  195. package/src/core/interfaces/ApiResponseInterface.ts +17 -0
  196. package/src/core/interfaces/JsonApiHydratedDataInterface.ts +5 -0
  197. package/src/core/interfaces/index.ts +5 -0
  198. package/{dist/chunk-DO2HLAZO.js → src/core/registry/DataClassRegistry.ts} +20 -17
  199. package/src/core/registry/ModuleRegistrar.ts +43 -0
  200. package/src/core/registry/ModuleRegistry.ts +64 -0
  201. package/src/core/registry/index.ts +3 -0
  202. package/src/core/utils/index.ts +2 -0
  203. package/src/core/utils/rehydrate.ts +24 -0
  204. package/src/core/utils/translateResponse.ts +125 -0
  205. package/src/features/auth/auth.module.ts +9 -0
  206. package/src/features/auth/components/containers/AuthContainer.tsx +32 -0
  207. package/src/features/auth/components/containers/index.ts +1 -0
  208. package/src/features/auth/components/details/LandingComponent.tsx +39 -0
  209. package/src/features/auth/components/details/index.ts +1 -0
  210. package/src/features/auth/components/forms/AcceptInvitation.tsx +136 -0
  211. package/src/features/auth/components/forms/ActivateAccount.tsx +75 -0
  212. package/src/features/auth/components/forms/Cookies.tsx +32 -0
  213. package/src/features/auth/components/forms/ForgotPassword.tsx +108 -0
  214. package/src/features/auth/components/forms/Login.tsx +118 -0
  215. package/src/features/auth/components/forms/Logout.tsx +19 -0
  216. package/src/features/auth/components/forms/RefreshUser.tsx +39 -0
  217. package/src/features/auth/components/forms/Register.tsx +150 -0
  218. package/src/features/auth/components/forms/ResetPassword.tsx +126 -0
  219. package/src/features/auth/components/forms/index.ts +9 -0
  220. package/src/features/auth/components/index.ts +3 -0
  221. package/src/features/auth/config.ts +57 -0
  222. package/src/features/auth/contexts/AuthContext.tsx +77 -0
  223. package/src/features/auth/contexts/index.ts +1 -0
  224. package/src/features/auth/data/auth.interface.ts +31 -0
  225. package/src/features/auth/data/auth.service.ts +159 -0
  226. package/src/features/auth/data/auth.ts +54 -0
  227. package/src/features/auth/data/index.ts +3 -0
  228. package/src/features/auth/enums/AuthComponent.ts +9 -0
  229. package/src/features/auth/enums/index.ts +1 -0
  230. package/src/features/auth/index.ts +4 -0
  231. package/src/features/auth/utils/AuthCookies.ts +134 -0
  232. package/src/features/auth/utils/index.ts +1 -0
  233. package/src/features/company/company.module.ts +10 -0
  234. package/src/features/company/components/containers/AdminCompanyContainer.tsx +26 -0
  235. package/src/features/company/components/containers/CompanyContainer.tsx +17 -0
  236. package/src/features/company/components/containers/index.ts +2 -0
  237. package/src/features/company/components/details/CompanyDetails.tsx +26 -0
  238. package/src/features/company/components/details/index.ts +1 -0
  239. package/src/features/company/components/forms/CompanyConfigurationEditor.tsx +151 -0
  240. package/src/features/company/components/forms/CompanyConfigurationSecurityForm.tsx +97 -0
  241. package/src/features/company/components/forms/CompanyDeleter.tsx +121 -0
  242. package/src/features/company/components/forms/CompanyEditor.tsx +245 -0
  243. package/src/features/company/components/forms/CompanyLicense.tsx +213 -0
  244. package/src/features/company/components/forms/index.ts +5 -0
  245. package/src/features/company/components/index.ts +4 -0
  246. package/src/features/company/components/lists/CompaniesList.tsx +31 -0
  247. package/src/features/company/components/lists/index.ts +1 -0
  248. package/src/features/company/contexts/CompanyContext.tsx +99 -0
  249. package/src/features/company/contexts/index.ts +0 -0
  250. package/src/features/company/data/company.fields.ts +6 -0
  251. package/src/features/company/data/company.interface.ts +28 -0
  252. package/src/features/company/data/company.service.ts +73 -0
  253. package/src/features/company/data/company.ts +104 -0
  254. package/src/features/company/data/index.ts +4 -0
  255. package/src/features/company/hooks/index.ts +1 -0
  256. package/src/features/company/hooks/useCompanyTableStructure.tsx +82 -0
  257. package/src/features/company/index.ts +2 -0
  258. package/src/features/content/content.module.ts +20 -0
  259. package/src/features/content/data/content.fields.ts +13 -0
  260. package/src/features/content/data/content.interface.ts +23 -0
  261. package/src/features/content/data/content.service.ts +75 -0
  262. package/src/features/content/data/content.ts +85 -0
  263. package/src/features/content/data/index.ts +4 -0
  264. package/src/features/content/index.ts +2 -0
  265. package/src/features/feature/components/forms/FormFeatures.tsx +150 -0
  266. package/src/features/feature/components/forms/index.ts +1 -0
  267. package/src/features/feature/components/index.ts +1 -0
  268. package/src/features/feature/data/feature.interface.ts +9 -0
  269. package/src/features/feature/data/feature.service.ts +19 -0
  270. package/src/features/feature/data/feature.ts +33 -0
  271. package/src/features/feature/data/index.ts +3 -0
  272. package/src/features/feature/feature.module.ts +10 -0
  273. package/src/features/feature/index.ts +2 -0
  274. package/src/features/index.ts +12 -0
  275. package/src/features/module/data/index.ts +2 -0
  276. package/src/features/module/data/module.interface.ts +12 -0
  277. package/src/features/module/data/module.ts +42 -0
  278. package/src/features/module/index.ts +2 -0
  279. package/src/features/module/module.module.ts +10 -0
  280. package/src/features/notification/components/common/NotificationErrorBoundary.tsx +51 -0
  281. package/src/features/notification/components/common/index.ts +1 -0
  282. package/src/features/notification/components/containers/NotificationsListContainer.tsx +44 -0
  283. package/src/features/notification/components/containers/index.ts +1 -0
  284. package/src/features/notification/components/index.ts +5 -0
  285. package/src/features/notification/components/lists/NotificationsList.tsx +129 -0
  286. package/src/features/notification/components/lists/index.ts +1 -0
  287. package/src/features/notification/components/modals/NotificationModal.tsx +220 -0
  288. package/src/features/notification/components/modals/index.ts +1 -0
  289. package/src/features/notification/components/notifications/Notification.tsx +120 -0
  290. package/src/features/notification/components/notifications/PushNotificationProvider.tsx +9 -0
  291. package/src/features/notification/components/notifications/index.ts +2 -0
  292. package/src/features/notification/contexts/NotificationContext.tsx +187 -0
  293. package/src/features/notification/contexts/index.ts +1 -0
  294. package/src/features/notification/data/index.ts +4 -0
  295. package/src/features/notification/data/notification.fields.ts +8 -0
  296. package/src/features/notification/data/notification.interface.ts +14 -0
  297. package/src/features/notification/data/notification.service.ts +34 -0
  298. package/src/features/notification/data/notification.ts +51 -0
  299. package/src/features/notification/index.ts +2 -0
  300. package/src/features/notification/notification.module.ts +10 -0
  301. package/src/features/push/data/index.ts +3 -0
  302. package/src/features/push/data/push.interface.ts +8 -0
  303. package/src/features/push/data/push.service.ts +17 -0
  304. package/src/features/push/data/push.ts +18 -0
  305. package/src/features/push/index.ts +2 -0
  306. package/src/features/push/push.module.ts +10 -0
  307. package/src/features/role/components/containers/RoleContainer.tsx +18 -0
  308. package/src/features/role/components/containers/index.ts +1 -0
  309. package/src/features/role/components/details/RoleDetails.tsx +21 -0
  310. package/src/features/role/components/details/index.ts +1 -0
  311. package/src/features/role/components/forms/FormRoles.tsx +82 -0
  312. package/src/features/role/components/forms/RemoveUserFromRole.tsx +108 -0
  313. package/src/features/role/components/forms/UserRoleAdd.tsx +128 -0
  314. package/src/features/role/components/forms/index.ts +3 -0
  315. package/src/features/role/components/index.ts +4 -0
  316. package/src/features/role/components/lists/RolesList.tsx +27 -0
  317. package/src/features/role/components/lists/UserRolesList.tsx +31 -0
  318. package/src/features/role/components/lists/index.ts +2 -0
  319. package/src/features/role/contexts/RoleContext.tsx +84 -0
  320. package/src/features/role/contexts/index.ts +1 -0
  321. package/src/features/role/data/index.ts +4 -0
  322. package/src/features/role/data/role.fields.ts +8 -0
  323. package/src/features/role/data/role.interface.ts +16 -0
  324. package/src/features/role/data/role.service.ts +117 -0
  325. package/src/features/role/data/role.ts +62 -0
  326. package/src/features/role/hooks/index.ts +1 -0
  327. package/src/features/role/hooks/useRoleTableStructure.tsx +72 -0
  328. package/src/features/role/index.ts +2 -0
  329. package/src/features/role/role.module.ts +10 -0
  330. package/src/features/s3/data/index.ts +3 -0
  331. package/src/features/s3/data/s3.interface.ts +11 -0
  332. package/src/features/s3/data/s3.service.ts +30 -0
  333. package/src/features/s3/data/s3.ts +60 -0
  334. package/src/features/s3/index.ts +2 -0
  335. package/src/features/s3/s3.module.ts +10 -0
  336. package/src/features/search/index.ts +1 -0
  337. package/src/features/search/interfaces/index.ts +1 -0
  338. package/src/features/search/interfaces/search.result.interface.ts +3 -0
  339. package/src/features/user/author.module.ts +10 -0
  340. package/src/features/user/components/containers/UserContainer.tsx +23 -0
  341. package/src/features/user/components/containers/UserIndexContainer.tsx +12 -0
  342. package/src/features/user/components/containers/UsersListContainer.tsx +36 -0
  343. package/src/features/user/components/containers/index.ts +3 -0
  344. package/src/features/user/components/details/UserDetails.tsx +74 -0
  345. package/src/features/user/components/details/UserIndexDetails.tsx +28 -0
  346. package/src/features/user/components/details/index.ts +2 -0
  347. package/src/features/user/components/forms/RoleUserAdd.tsx +93 -0
  348. package/src/features/user/components/forms/UserAvatarEditor.tsx +78 -0
  349. package/src/features/user/components/forms/UserDeleter.tsx +49 -0
  350. package/src/features/user/components/forms/UserEditor.tsx +319 -0
  351. package/src/features/user/components/forms/UserMultiSelect.tsx +218 -0
  352. package/src/features/user/components/forms/UserReactivator.tsx +79 -0
  353. package/src/features/user/components/forms/UserResentInvitationEmail.tsx +88 -0
  354. package/src/features/user/components/forms/UserSelector.tsx +185 -0
  355. package/src/features/user/components/forms/index.ts +8 -0
  356. package/src/features/user/components/index.ts +5 -0
  357. package/src/features/user/components/lists/AdminUsersList.tsx +41 -0
  358. package/src/features/user/components/lists/CompanyUsersList.tsx +44 -0
  359. package/src/features/user/components/lists/ContributorsList.tsx +41 -0
  360. package/src/features/user/components/lists/RelevantUsersList.tsx +30 -0
  361. package/src/features/user/components/lists/RoleUsersList.tsx +31 -0
  362. package/src/features/user/components/lists/UserListInAdd.tsx +53 -0
  363. package/src/features/user/components/lists/UsersList.tsx +30 -0
  364. package/src/features/user/components/lists/UsersListByContentIds.tsx +30 -0
  365. package/src/features/user/components/lists/index.ts +8 -0
  366. package/src/features/user/components/widgets/UserAvatar.tsx +86 -0
  367. package/src/features/user/components/widgets/UserAvatarList.tsx +31 -0
  368. package/src/features/user/components/widgets/UserSearchPopover.tsx +89 -0
  369. package/src/features/user/components/widgets/index.ts +1 -0
  370. package/src/features/user/contexts/CurrentUserContext.tsx +156 -0
  371. package/src/features/user/contexts/UserContext.tsx +106 -0
  372. package/src/features/user/contexts/index.ts +2 -0
  373. package/src/features/user/data/index.ts +4 -0
  374. package/src/features/user/data/user.fields.ts +8 -0
  375. package/src/features/user/data/user.interface.ts +41 -0
  376. package/src/features/user/data/user.service.ts +246 -0
  377. package/src/features/user/data/user.ts +162 -0
  378. package/src/features/user/hooks/index.ts +2 -0
  379. package/src/features/user/hooks/useUserSearch.ts +53 -0
  380. package/src/features/user/hooks/useUserTableStructure.tsx +115 -0
  381. package/src/features/user/index.ts +3 -0
  382. package/src/features/user/user.module.ts +21 -0
  383. package/src/hooks/TableGeneratorRegistry.ts +53 -0
  384. package/src/hooks/index.ts +37 -0
  385. package/src/hooks/types.ts +35 -0
  386. package/src/hooks/url.rewriter.ts +22 -0
  387. package/src/hooks/useCustomD3Graph.tsx +707 -0
  388. package/src/hooks/useDataListRetriever.ts +349 -0
  389. package/src/hooks/useDebounce.ts +33 -0
  390. package/src/hooks/useNotificationSync.ts +20 -0
  391. package/src/hooks/usePageTracker.ts +69 -0
  392. package/src/hooks/usePageUrlGenerator.ts +50 -0
  393. package/src/hooks/usePushNotifications.ts +82 -0
  394. package/src/hooks/useSocket.ts +201 -0
  395. package/src/hooks/useTableGenerator.ts +20 -0
  396. package/src/i18n/config.ts +74 -0
  397. package/src/i18n/index.ts +18 -0
  398. package/src/index.ts +20 -0
  399. package/src/interfaces/breadcrumb.item.data.interface.ts +4 -0
  400. package/src/interfaces/d3.link.interface.ts +8 -0
  401. package/src/interfaces/d3.node.interface.ts +12 -0
  402. package/src/interfaces/index.ts +3 -0
  403. package/src/permissions/check.ts +127 -0
  404. package/src/permissions/index.ts +2 -0
  405. package/src/permissions/types.ts +109 -0
  406. package/src/roles/config.ts +46 -0
  407. package/src/roles/index.ts +1 -0
  408. package/src/server/ServerSession.ts +103 -0
  409. package/src/server/cache.ts +28 -0
  410. package/src/server/index.ts +4 -0
  411. package/src/server/request.ts +113 -0
  412. package/src/server/token.ts +10 -0
  413. package/src/shadcnui/custom/kanban.tsx +1001 -0
  414. package/src/shadcnui/custom/link.tsx +18 -0
  415. package/src/shadcnui/custom/multi-select.tsx +382 -0
  416. package/src/shadcnui/index.ts +49 -0
  417. package/src/shadcnui/ui/accordion.tsx +52 -0
  418. package/src/shadcnui/ui/alert-dialog.tsx +141 -0
  419. package/src/shadcnui/ui/alert.tsx +43 -0
  420. package/src/shadcnui/ui/avatar.tsx +50 -0
  421. package/src/shadcnui/ui/badge.tsx +40 -0
  422. package/src/shadcnui/ui/breadcrumb.tsx +115 -0
  423. package/src/shadcnui/ui/button.tsx +51 -0
  424. package/src/shadcnui/ui/calendar.tsx +73 -0
  425. package/src/shadcnui/ui/card.tsx +43 -0
  426. package/src/shadcnui/ui/carousel.tsx +225 -0
  427. package/src/shadcnui/ui/chart.tsx +320 -0
  428. package/src/shadcnui/ui/checkbox.tsx +29 -0
  429. package/src/shadcnui/ui/collapsible.tsx +11 -0
  430. package/src/shadcnui/ui/command.tsx +155 -0
  431. package/src/shadcnui/ui/context-menu.tsx +179 -0
  432. package/src/shadcnui/ui/dialog.tsx +96 -0
  433. package/src/shadcnui/ui/drawer.tsx +89 -0
  434. package/src/shadcnui/ui/dropdown-menu.tsx +205 -0
  435. package/src/shadcnui/ui/form.tsx +138 -0
  436. package/src/shadcnui/ui/hover-card.tsx +29 -0
  437. package/src/shadcnui/ui/input.tsx +21 -0
  438. package/src/shadcnui/ui/label.tsx +26 -0
  439. package/src/shadcnui/ui/navigation-menu.tsx +168 -0
  440. package/src/shadcnui/ui/popover.tsx +33 -0
  441. package/src/shadcnui/ui/progress.tsx +25 -0
  442. package/src/shadcnui/ui/radio-group.tsx +37 -0
  443. package/src/shadcnui/ui/resizable.tsx +47 -0
  444. package/src/shadcnui/ui/scroll-area.tsx +40 -0
  445. package/src/shadcnui/ui/select.tsx +164 -0
  446. package/src/shadcnui/ui/separator.tsx +28 -0
  447. package/src/shadcnui/ui/sheet.tsx +139 -0
  448. package/src/shadcnui/ui/sidebar.tsx +677 -0
  449. package/src/shadcnui/ui/skeleton.tsx +13 -0
  450. package/src/shadcnui/ui/slider.tsx +25 -0
  451. package/src/shadcnui/ui/sonner.tsx +25 -0
  452. package/src/shadcnui/ui/switch.tsx +31 -0
  453. package/src/shadcnui/ui/table.tsx +120 -0
  454. package/src/shadcnui/ui/tabs.tsx +55 -0
  455. package/src/shadcnui/ui/textarea.tsx +24 -0
  456. package/src/shadcnui/ui/toggle.tsx +39 -0
  457. package/src/shadcnui/ui/tooltip.tsx +61 -0
  458. package/src/unified/JsonApiRequest.ts +348 -0
  459. package/src/unified/index.ts +1 -0
  460. package/src/utils/blocknote-diff.util.ts +815 -0
  461. package/src/utils/blocknote-word-diff-renderer.util.ts +413 -0
  462. package/src/utils/cn.ts +6 -0
  463. package/src/utils/compose-refs.ts +61 -0
  464. package/src/utils/date-formatter.ts +53 -0
  465. package/src/utils/exists.ts +7 -0
  466. package/src/utils/index.ts +15 -0
  467. package/src/utils/schemas/entity.object.schema.ts +8 -0
  468. package/src/utils/schemas/index.ts +2 -0
  469. package/src/utils/schemas/user.object.schema.ts +9 -0
  470. package/src/utils/table-options.ts +67 -0
  471. package/src/utils/use-mobile.tsx +21 -0
  472. package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.mts +0 -20
  473. package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.ts +0 -20
  474. package/dist/BlockNoteEditor-VFWG6LXI.js.map +0 -1
  475. package/dist/JsonApiRequest-S3ICLM7B.mjs +0 -20
  476. package/dist/JsonApiRequest-ZZLSP26T.js +0 -20
  477. package/dist/JsonApiRequest-ZZLSP26T.js.map +0 -1
  478. package/dist/chunk-366S2JCC.mjs +0 -31
  479. package/dist/chunk-366S2JCC.mjs.map +0 -1
  480. package/dist/chunk-5W6AKZE6.mjs +0 -131
  481. package/dist/chunk-5W6AKZE6.mjs.map +0 -1
  482. package/dist/chunk-A3J3AAYM.mjs +0 -97
  483. package/dist/chunk-A3J3AAYM.mjs.map +0 -1
  484. package/dist/chunk-AWONBQQP.js +0 -97
  485. package/dist/chunk-AWONBQQP.js.map +0 -1
  486. package/dist/chunk-CXQOWQSY.js.map +0 -1
  487. package/dist/chunk-DKKMWBP4.mjs +0 -1
  488. package/dist/chunk-DKKMWBP4.mjs.map +0 -1
  489. package/dist/chunk-DO2HLAZO.js.map +0 -1
  490. package/dist/chunk-DZXDB3K2.mjs +0 -17
  491. package/dist/chunk-DZXDB3K2.mjs.map +0 -1
  492. package/dist/chunk-ECDTZBYO.mjs.map +0 -1
  493. package/dist/chunk-FY4SXJGU.js +0 -806
  494. package/dist/chunk-FY4SXJGU.js.map +0 -1
  495. package/dist/chunk-GYWPEPOH.mjs.map +0 -1
  496. package/dist/chunk-H6FMOA6B.js +0 -1
  497. package/dist/chunk-H6FMOA6B.js.map +0 -1
  498. package/dist/chunk-I2REI7OA.js.map +0 -1
  499. package/dist/chunk-J4Q36PMP.js +0 -31
  500. package/dist/chunk-J4Q36PMP.js.map +0 -1
  501. package/dist/chunk-L6EQEAXU.mjs.map +0 -1
  502. package/dist/chunk-MFO27OHB.mjs +0 -48
  503. package/dist/chunk-MFO27OHB.mjs.map +0 -1
  504. package/dist/chunk-RAF7PNLG.js +0 -131
  505. package/dist/chunk-RAF7PNLG.js.map +0 -1
  506. package/dist/chunk-RUR22SVM.js +0 -17
  507. package/dist/chunk-RUR22SVM.js.map +0 -1
  508. package/dist/chunk-TEGF6ZWG.js.map +0 -1
  509. package/dist/chunk-TMVHSY3Y.js.map +0 -1
  510. package/dist/chunk-V2JJPI7N.js.map +0 -1
  511. package/dist/chunk-WWWMJZEF.mjs +0 -806
  512. package/dist/chunk-WWWMJZEF.mjs.map +0 -1
  513. package/dist/chunk-X4BIHJ2B.mjs.map +0 -1
  514. package/dist/chunk-YDVTFM7X.mjs.map +0 -1
  515. /package/dist/{JsonApiRequest-S3ICLM7B.mjs.map → JsonApiRequest-O7BGUMFO.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/navigations/Breadcrumb.tsx","../../src/components/navigations/ContentTitle.tsx","../../src/components/navigations/Header.tsx","../../src/components/navigations/ModeToggleSwitch.tsx","../../src/components/navigations/PageSection.tsx","../../src/components/navigations/RecentPagesNavigator.tsx","../../src/components/containers/PageContainer.tsx","../../src/components/containers/ReactMarkdownContainer.tsx","../../src/components/containers/TabsContainer.tsx","../../src/components/contents/AttributeElement.tsx","../../src/components/details/AllowedUsersDetails.tsx","../../src/components/editors/BlockNoteEditorContainer.tsx","../../src/components/errors/ErrorDetails.tsx","../../src/components/forms/CommonAssociationForm.tsx","../../src/components/forms/CommonDeleter.tsx","../../src/components/forms/CommonEditorButtons.tsx","../../src/components/forms/CommonEditorHeader.tsx","../../src/components/forms/CommonEditorTrigger.tsx","../../src/components/forms/DatePickerPopover.tsx","../../src/components/forms/DateRangeSelector.tsx","../../src/components/forms/FileUploader.tsx","../../src/components/forms/FormCheckbox.tsx","../../src/components/forms/FormContainerGeneric.tsx","../../src/components/forms/FormDate.tsx","../../src/components/forms/FormDateTime.tsx","../../src/components/forms/FormInput.tsx","../../src/components/forms/PasswordInput.tsx","../../src/components/forms/FormPassword.tsx","../../src/components/forms/FormPlaceAutocomplete.tsx","../../src/components/forms/FormSelect.tsx","../../src/components/forms/FormSlider.tsx","../../src/components/forms/FormSwitch.tsx","../../src/components/forms/FormTextarea.tsx","../../src/components/pages/PageContainerContentDetails.tsx","../../src/components/pages/PageContentContainer.tsx","../../src/components/tables/cells/cell.component.tsx","../../src/components/tables/cells/cell.date.tsx","../../src/components/tables/cells/cell.id.tsx","../../src/components/tables/cells/cell.link.tsx","../../src/components/tables/cells/cell.url.tsx","../../src/components/tables/ContentListTable.tsx","../../src/components/tables/ContentTableSearch.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { Fragment, useState } from \"react\";\nimport { usePageUrlGenerator } from \"../../hooks\";\nimport { BreadcrumbItemData } from \"../../interfaces\";\nimport {\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbSeparator,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Link,\n Breadcrumb as UIBreadcrumb,\n} from \"../../shadcnui\";\n\ntype BreadcrumbProps = { items: BreadcrumbItemData[] };\n\nconst ITEMS_TO_DISPLAY = 3;\n\nexport function Breadcrumb({ items }: BreadcrumbProps) {\n const generateUrl = usePageUrlGenerator();\n const t = useTranslations();\n\n const [open, setOpen] = useState<boolean>(false);\n\n return (\n <UIBreadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <Link href={generateUrl({ page: `/` })}>{t(`generic.home`)}</Link>\n </BreadcrumbItem>\n {items.length > 0 && <BreadcrumbSeparator />}\n\n {items.length > ITEMS_TO_DISPLAY ? (\n <>\n <BreadcrumbItem>\n {items[0].href ? <Link href={items[0].href}>{items[0].name}</Link> : <>{items[0].name}</>}\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger className=\"flex items-center gap-1\" aria-label=\"Toggle menu\">\n <BreadcrumbEllipsis className=\"h-4 w-4\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {items.slice(1, -ITEMS_TO_DISPLAY + 1).map((item, index) => (\n <DropdownMenuItem key={index}>\n <Link href={item.href ? item.href : \"#\"}>{item.name}</Link>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n {items.slice(-ITEMS_TO_DISPLAY + 1).map((item, index) => (\n <Fragment key={index}>\n <BreadcrumbItem>\n {item.href ? <Link href={item.href}>{item.name}</Link> : <>{item.name}</>}\n </BreadcrumbItem>\n {index < items.slice(-ITEMS_TO_DISPLAY + 1).length - 1 && <BreadcrumbSeparator />}\n </Fragment>\n ))}\n </>\n ) : (\n <>\n {items.map((item, index) => (\n <Fragment key={index}>\n <BreadcrumbItem>\n {item.href ? <Link href={item.href}>{item.name}</Link> : <>{item.name}</>}\n </BreadcrumbItem>\n {index < items.length - 1 && <BreadcrumbSeparator />}\n </Fragment>\n ))}\n </>\n )}\n </BreadcrumbList>\n </UIBreadcrumb>\n );\n}\n","\"use client\";\n\nimport { ReactNode, useEffect, useState } from \"react\";\nimport { cn } from \"../../utils\";\n\ntype TitleProps = {\n type?: string | string[];\n element?: string;\n functions?: ReactNode;\n className?: string;\n};\n\nexport function ContentTitle({ type, element, functions, className }: TitleProps) {\n const [clientFunctions, setClientFunctions] = useState<ReactNode>(null);\n const [isClient, setIsClient] = useState(false);\n\n // Defer function rendering to client-side only to prevent hydration mismatches\n // caused by Radix UI's dynamic ID generation in Dialog/AlertDialog components\n useEffect(() => {\n setIsClient(true);\n setClientFunctions(functions);\n }, [functions]);\n\n if (!element) return null;\n\n return (\n <div className={cn(`mb-4 flex w-full flex-col`, className)}>\n {(type || isClient) && (\n <div className=\"flex flex-row items-center justify-between gap-x-4\">\n {type && <div className={`text-muted-foreground text-xl font-light`}>{type}</div>}\n {isClient && clientFunctions && (\n <div className=\"flex flex-row items-center justify-start\">{clientFunctions}</div>\n )}\n </div>\n )}\n <div className={`text-primary w-full text-3xl font-semibold`}>{element}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useSharedContext } from \"../../contexts/SharedContext\";\nimport { SidebarTrigger } from \"../../shadcnui\";\nimport { Breadcrumb } from \"./Breadcrumb\";\n\ntype HeaderProps = {\n children?: React.ReactNode;\n};\n\nexport function Header({ children }: HeaderProps) {\n const { breadcrumbs } = useSharedContext();\n\n return (\n <header className={`sticky top-0 z-10 flex h-12 flex-col items-center justify-start gap-x-4 border-b`}>\n <div className=\"bg-sidebar flex h-12 w-full flex-row items-center justify-between pl-2 pr-4\">\n <SidebarTrigger aria-label=\"Toggle sidebar\" />\n <div className=\"flex w-full flex-row items-center justify-start\">\n <Breadcrumb items={breadcrumbs} />\n </div>\n <div className=\"flex w-64 flex-row items-center justify-end gap-x-4 whitespace-nowrap\">\n {children ? children : null}\n </div>\n </div>\n </header>\n );\n}\n","\"use client\";\n\nimport { MoonIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Switch } from \"../../shadcnui\";\n\nexport function ModeToggleSwitch() {\n const { theme, setTheme } = useTheme();\n\n const handleToggle = () => {\n setTheme(theme === \"light\" ? \"dark\" : \"light\");\n };\n\n return (\n <div className=\"flex items-center\">\n <Switch checked={theme === \"dark\"} onCheckedChange={handleToggle} className=\"relative\">\n {theme === \"dark\" ? (\n <MoonIcon className=\"text-primary-foreground h-4 w-4\" />\n ) : (\n <SunIcon className=\"text-primary h-4 w-4\" />\n )}\n </Switch>\n </div>\n );\n}\n","\"use client\";\n\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\nimport { ReactNode, useEffect, useState } from \"react\";\nimport { v4 } from \"uuid\";\n\ntype PageSectionProps = {\n children: ReactNode;\n title?: string;\n options?: ReactNode[];\n open?: boolean;\n small?: boolean;\n onToggle?: (isOpen: boolean) => void;\n};\n\nexport function PageSection({ children, title, options, open, small, onToggle }: PageSectionProps) {\n const [isOpen, setIsOpen] = useState<boolean>(open ?? true);\n const [shouldRender, setShouldRender] = useState<boolean>(open ?? true);\n\n useEffect(() => {\n if (onToggle) {\n onToggle(isOpen);\n }\n }, [isOpen]);\n\n const toggleOpen = () => setIsOpen(!isOpen);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n } else {\n const timer = setTimeout(() => setShouldRender(false), 300);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n return (\n <section\n id={title ? title.toLowerCase().replaceAll(\" \", \"\") : v4()}\n className={`${isOpen ? \"mb-4\" : \"my-0\"} flex w-full scroll-mt-40 flex-col`}\n >\n {title && (\n <div\n className={`${isOpen ? \"mb-4\" : \"mb-0\"} flex w-full justify-between border-b ${small ? `border-muted` : `border-primary`} pb-1`}\n >\n <div className=\"flex w-full cursor-pointer items-center justify-start gap-x-2\" onClick={toggleOpen}>\n {isOpen ? (\n <ChevronDownIcon className={`text-primary h-4 w-4`} />\n ) : (\n <ChevronRightIcon className=\"text-primary h-4 w-4\" />\n )}\n <h2 className={`flex w-full ${small === true ? `text-sm` : `text-lg`} text-primary font-semibold`}>\n {title}\n </h2>\n </div>\n {options && <div className=\"flex gap-2\">{options}</div>}\n </div>\n )}\n <div className={`overflow-hidden transition-all duration-300 ${isOpen ? \"\" : \"max-h-0\"}`}>\n {shouldRender && children}\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport { useAtomValue } from \"jotai\";\nimport { HistoryIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { recentPagesAtom } from \"../../atoms\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Link,\n useSidebar,\n} from \"../../shadcnui\";\n\nexport function RecentPagesNavigator() {\n const recentPages = useAtomValue(recentPagesAtom);\n const t = useTranslations();\n const { state } = useSidebar();\n\n if (recentPages.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <div className=\"flex w-full cursor-pointer items-center gap-2\">\n {state === \"collapsed\" ? <HistoryIcon className=\"h-4 w-4\" /> : <span>{t(`generic.recent_pages`)}</span>}\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-96\">\n <DropdownMenuLabel>{t(`generic.recent_pages`)}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {recentPages.map((page, index) => (\n <DropdownMenuItem key={`${page.url}-${index}`} asChild>\n <Link href={page.url} className=\"flex items-center gap-2\">\n <div className=\"flex flex-col\">\n <div className=\"truncate text-sm\">{page.title}</div>\n <div className=\"text-muted-foreground text-xs font-normal\">\n {t(`types.${page.moduleType}`, { count: 1 })}\n </div>\n </div>\n </Link>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../utils\";\nimport { Header } from \"../navigations\";\n\ntype PageContainerProps = { children: React.ReactNode; testId?: string; className?: string };\n\nexport function PageContainer({ children, testId, className }: PageContainerProps) {\n return (\n <div className={`flex h-full w-full flex-col`} data-testid={testId}>\n <Header />\n <main className={cn(`flex w-full flex-1 flex-col gap-y-4 pt-4 pl-4 pr-4`, className)}>{children}</main>\n </div>\n );\n}\n","\"use client\";\n\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\ntype ReactMarkdownContainerProps = {\n content: string;\n collapsible?: boolean;\n initialLines?: number;\n size?: \"small\" | \"normal\";\n};\n\nexport function ReactMarkdownContainer({\n content,\n collapsible = false,\n initialLines = 4,\n size = \"normal\",\n}: ReactMarkdownContainerProps) {\n const t = useTranslations(\"generic.buttons\");\n const [isExpanded, setIsExpanded] = useState(false);\n const [showExpandButton, setShowExpandButton] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (collapsible && contentRef.current && !isExpanded) {\n // Check if content exceeds the clamped height\n const isOverflowing = contentRef.current.scrollHeight > contentRef.current.clientHeight;\n setShowExpandButton(isOverflowing);\n }\n }, [collapsible, content, isExpanded]);\n\n const handleToggle = () => {\n setIsExpanded(!isExpanded);\n };\n\n const clampStyle =\n collapsible && !isExpanded\n ? {\n display: \"-webkit-box\",\n WebkitLineClamp: initialLines,\n WebkitBoxOrient: \"vertical\" as const,\n overflow: \"hidden\",\n }\n : {};\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"relative\">\n <div ref={contentRef} style={clampStyle} className=\"transition-all duration-300 ease-in-out\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n p: ({ children }) => <p className={size === \"small\" ? \"text-xs\" : \"\"}>{children}</p>,\n li: ({ children }) => <li className={size === \"small\" ? \"text-xs\" : \"\"}>{children}</li>,\n table: ({ children }) => <table className=\"w-full table-auto border-collapse border\">{children}</table>,\n th: ({ children }) => (\n <th className={`border px-4 py-2 text-left ${size === \"small\" ? \"px-2 py-1 text-xs\" : \"\"}`}>\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className={`border px-4 py-2 ${size === \"small\" ? \"px-2 py-1 text-xs\" : \"\"}`}>{children}</td>\n ),\n tr: ({ children }) => <tr className=\"even:bg-gray-50\">{children}</tr>,\n ul: ({ children }) => <ul className={`list-disc ${size === \"small\" ? \"pl-3\" : \"pl-4\"}`}>{children}</ul>,\n ol: ({ children }) => (\n <ol className={`list-decimal ${size === \"small\" ? \"pl-3\" : \"pl-4\"}`}>{children}</ol>\n ),\n h1: ({ children }) => (\n <h1 className={size === \"small\" ? \"my-1 mt-2 text-sm font-bold\" : \"my-2 mt-4 text-3xl font-medium\"}>\n {children}\n </h1>\n ),\n h2: ({ children }) => (\n <h2\n className={size === \"small\" ? \"my-1 mt-2 text-sm font-semibold\" : \"my-2 mt-4 text-2xl font-semibold\"}\n >\n {children}\n </h2>\n ),\n h3: ({ children }) => (\n <h3 className={size === \"small\" ? \"my-1 mt-2 text-sm font-medium\" : \"my-2 mt-4 text-xl font-semibold\"}>\n {children}\n </h3>\n ),\n h4: ({ children }) => (\n <h4 className={size === \"small\" ? \"my-1 mt-2 text-sm font-medium\" : \"my-2 mt-4 text-lg font-semibold\"}>\n {children}\n </h4>\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n\n {collapsible && !isExpanded && showExpandButton && (\n <div className=\"pointer-events-none absolute right-0 bottom-0 left-0 h-12 bg-gradient-to-t from-white to-transparent\" />\n )}\n </div>\n\n {collapsible && showExpandButton && (\n <div className=\"mt-2 flex justify-end\">\n <button\n onClick={handleToggle}\n className=\"flex items-center gap-1 rounded-md px-3 py-1.5 text-sm text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900\"\n aria-label={isExpanded ? t(\"show_less\") : t(\"show_more\")}\n >\n <span>{isExpanded ? t(\"show_less\") : t(\"show_more\")}</span>\n {isExpanded ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface } from \"../../features\";\nimport { Action, ModuleWithPermissions } from \"../../permissions\";\nimport { ScrollArea, Tabs, TabsContent, TabsList, TabsTrigger } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\nexport type Tab = {\n label: string;\n contentLabel?: React.ReactNode;\n content: React.ReactNode;\n modules?: ModuleWithPermissions[];\n action?: Action;\n};\n\ntype TabsContainerProps = {\n tabs: Tab[];\n defaultTab?: string;\n tabsListClassName?: string;\n tabsTriggerClassName?: string;\n scrollAreaClassName?: string;\n style?: \"navigation\";\n additionalComponent?: React.ReactNode;\n};\n\nexport function TabsContainer({\n tabs,\n defaultTab,\n tabsListClassName,\n tabsTriggerClassName,\n scrollAreaClassName,\n style,\n additionalComponent,\n}: TabsContainerProps) {\n const { hasPermissionToModules } = useCurrentUserContext<UserInterface>();\n\n const validTabs = tabs.filter((tab) =>\n tab.modules && tab.action ? hasPermissionToModules({ modules: tab.modules, action: tab.action }) : true,\n );\n\n if (validTabs.length === 0) return null;\n\n const defaultValue = defaultTab ?? tabs[0].label;\n\n if (validTabs.length === 1) {\n return validTabs[0].content;\n }\n\n return (\n <Tabs defaultValue={defaultValue} className=\"w-full\">\n <div className=\"flex w-full items-center justify-between\">\n <TabsList\n className={cn(\n `${style ? `my-4 flex w-full justify-start rounded-none border-b bg-transparent pb-0` : ``}`,\n tabsListClassName,\n )}\n >\n {validTabs.map((tab) => (\n <TabsTrigger\n key={tab.label}\n value={tab.label}\n className={cn(\n `${style ? `text-muted-foreground border-accent data-[state=active]:text-foreground hover:text-foreground cursor-pointer rounded-none bg-transparent pb-2 text-sm font-light hover:border-0 data-[state=active]:border-b data-[state=active]:font-medium data-[state=active]:shadow-none` : `text-primary text-xs`}`,\n tabsTriggerClassName,\n )}\n >\n {tab.contentLabel ?? tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {additionalComponent && additionalComponent}\n </div>\n {scrollAreaClassName ? (\n <ScrollArea className={scrollAreaClassName}>\n {validTabs.map((tab) => (\n <TabsContent key={tab.label} value={tab.label}>\n {tab.content}\n </TabsContent>\n ))}\n </ScrollArea>\n ) : (\n <>\n {validTabs.map((tab) => (\n <TabsContent key={tab.label} value={tab.label}>\n {tab.content}\n </TabsContent>\n ))}\n </>\n )}\n </Tabs>\n );\n}\n","\"use client\";\n\nimport { ReactElement } from \"react\";\nimport { cn } from \"../../utils\";\n\ntype AttributeElementProps = {\n inline?: boolean;\n title?: string | ReactElement<any>;\n value?: string | ReactElement<any>;\n className?: string;\n};\n\nexport function AttributeElement({ inline, title, value, className }: AttributeElementProps) {\n return (\n <div className={cn(`flex ${inline === true ? \"flex-row\" : \"flex-col\"} my-1 justify-start`, className)}>\n {title && <div className={`${inline === true ? \"min-w-48 pr-4\" : \"w-full\"} text-sm font-semibold`}>{title}</div>}\n {value && <div className=\"flex w-full flex-col text-sm\">{value}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentInterface } from \"../../features/content/data\";\nimport { ContributorsList } from \"../../features/user/components\";\n\ntype AllowedUsersDetailsProps = {\n showTitle?: boolean;\n content: ContentInterface;\n};\n\nexport function AllowedUsersDetails({ showTitle, content }: AllowedUsersDetailsProps) {\n const t = useTranslations();\n\n return (\n <div className=\"mb-2 flex w-full flex-col gap-y-2\">\n {showTitle && <h3 className=\"text-xs font-semibold\">{t(\"generic.permissions\")}</h3>}\n <div className=\"flex w-full items-center justify-start gap-x-4\">\n <ContributorsList content={content} />\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport dynamic from \"next/dynamic\";\nimport React from \"react\";\nimport { BlockNoteEditorProps } from \"./BlockNoteEditor\";\n\nconst BlockNoteEditor = dynamic(() => import(\"./BlockNoteEditor\"), {\n ssr: false,\n});\n\nexport const BlockNoteEditorContainer = React.memo(function EditorContainer(props: BlockNoteEditorProps) {\n return <BlockNoteEditor {...props} />;\n});\n","\"use client\";\n\nimport Image from \"next/image\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../shadcnui\";\n\nexport function ErrorDetails({ title, message, code }: { title?: string; message: string; code: number }) {\n if (code === 403)\n return (\n <div className=\"w-xl max-w-xl\">\n <Card className=\"w-full\">\n <CardHeader>\n <CardTitle className=\"text-foreground flex flex-col items-center gap-y-4 pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {/* <div>{code}</div> */}\n <div>Unauthorised</div>\n </CardTitle>\n <CardDescription className=\"text-center text-lg\">\n We are sorry, but you are not allowed to access this content.\n </CardDescription>\n </CardHeader>\n <CardContent></CardContent>\n </Card>\n </div>\n );\n\n return (\n <div className=\"w-xl max-w-xl\">\n <Card className=\"w-full\">\n <CardHeader>\n <CardTitle className=\"text-foreground flex flex-col items-center gap-y-4 pb-10 text-center text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n <div>{code}</div>\n <div>{title}</div>\n </CardTitle>\n <CardDescription className=\"text-center text-lg\">{message}</CardDescription>\n </CardHeader>\n <CardContent></CardContent>\n </Card>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { DataListRetriever, useDebounce } from \"../../hooks\";\nimport {\n Button,\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandList,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../shadcnui\";\n\ntype CommonAssociationTriggerProps = {\n sourceType: string;\n destinationType: string;\n hasDestination?: boolean;\n onTrigger: () => void;\n};\n\nexport function CommonAssociationTrigger({\n sourceType,\n destinationType,\n hasDestination,\n onTrigger,\n}: CommonAssociationTriggerProps) {\n const t = useTranslations();\n\n if (hasDestination)\n return (\n <div className=\"hover:text-accent cursor-pointer\" onClick={onTrigger}>\n Join\n </div>\n );\n\n return (\n <Button variant={`outline`} size={`sm`} onClick={onTrigger}>\n {t(`generic.association.label`, {\n source: sourceType,\n destination: destinationType,\n })}\n </Button>\n );\n}\n\ntype CommonAssociationCommandDialogProps = {\n show: boolean;\n setShow: (show: boolean) => void;\n data: DataListRetriever<any>;\n source: string;\n destination: string;\n destinationName: string;\n children: ReactNode;\n};\n\nexport function CommonAssociationCommandDialog({\n show,\n setShow,\n data,\n source,\n destination,\n destinationName,\n children,\n}: CommonAssociationCommandDialogProps) {\n const t = useTranslations();\n\n const searchTermRef = useRef<string>(\"\");\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n\n const refreshList = useCallback(\n async (searchedTerm: string) => {\n if (searchedTerm === searchTermRef.current) return;\n searchTermRef.current = searchedTerm;\n await data.search(searchedTerm);\n },\n [searchTerm, data],\n );\n\n const updateSearchTerm = useDebounce(refreshList, 500);\n\n useEffect(() => {\n if (show) updateSearchTerm(searchTerm);\n }, [show, searchTerm]);\n\n return (\n <CommandDialog open={show} onOpenChange={setShow}>\n <DialogHeader className=\"flex flex-col items-start p-4 pb-0\">\n <DialogTitle>\n {t(`generic.association.label`, {\n source: source,\n destination: destination,\n })}\n </DialogTitle>\n <DialogDescription>\n {t(`generic.association.description`, {\n source: source,\n destination: destination,\n destination_name: destinationName,\n })}\n </DialogDescription>\n </DialogHeader>\n <Command shouldFilter={false} className=\"p-4\">\n <CommandInput\n placeholder={t(`generic.search.placeholder`, { type: source })}\n value={searchTerm}\n onValueChange={setSearchTerm}\n />\n <CommandList className=\"mt-3 h-auto max-h-96 min-h-96 max-w-full overflow-y-auto overflow-x-hidden\">\n <CommandEmpty>{t(`generic.search.no_results`, { type: source })}</CommandEmpty>\n {children}\n </CommandList>\n </Command>\n </CommandDialog>\n );\n}\n\nexport const triggerAssociationToast = (params: {\n t: any;\n source: string;\n destination: string;\n source_name: string;\n destination_name: string;\n level?: string;\n}) => {\n if (params.level) {\n toast.message(\n params.t(`generic.association.label`, {\n source: params.source,\n destination: params.destination,\n }),\n {\n description: params.t(`generic.association.success_level`, {\n source: params.source,\n destination: params.destination,\n source_name: params.source_name,\n destination_name: params.destination_name,\n level: params.level,\n }),\n },\n );\n } else {\n toast.message(\n params.t(`generic.association.label`, {\n source: params.source,\n destination: params.destination,\n }),\n {\n description: params.t(`generic.association.success`, {\n source: params.source,\n destination: params.destination,\n source_name: params.source_name,\n destination_name: params.destination_name,\n }),\n },\n );\n }\n};\n","\"use client\";\n\nimport { LoaderCircleIcon, Trash2Icon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useI18nRouter, useI18nTranslations } from \"../../i18n\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Button,\n} from \"../../shadcnui\";\nimport { errorToast } from \"../errors\";\n\ntype CommonDeleterProps = {\n type: string;\n deleteFunction: () => Promise<void>;\n redirectTo?: string;\n forceShow?: boolean;\n};\n\nexport function CommonDeleter({ deleteFunction, redirectTo, type, forceShow }: CommonDeleterProps) {\n const t = useI18nTranslations();\n const router = useI18nRouter();\n const [open, setOpen] = useState<boolean>(forceShow || false);\n const [isDeleting, setIsDeleting] = useState<boolean>(false);\n\n const handleDelete = async () => {\n setIsDeleting(true);\n try {\n await deleteFunction();\n\n setOpen(false);\n if (redirectTo) router.push(redirectTo);\n } catch (error) {\n errorToast({ title: t(`generic.errors.delete`), error: error });\n }\n setIsDeleting(false);\n };\n\n return (\n <AlertDialog open={open} onOpenChange={setOpen}>\n {forceShow ? null : (\n <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant={\"ghost\"} className=\"text-muted-foreground hover:text-destructive\">\n <Trash2Icon />\n </Button>\n </AlertDialogTrigger>\n )}\n <AlertDialogContent className={`flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`}>\n <AlertDialogHeader>\n <AlertDialogTitle>{t(`generic.delete.title`, { type: t(`types.${type}`, { count: 1 }) })}</AlertDialogTitle>\n <AlertDialogDescription>\n {t(`generic.delete.subtitle`, { type: t(`types.${type}`, { count: 1 }) })}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <div className=\"text-destructive p-4 text-sm\">\n {t(`generic.delete.description`, { type: t(`types.${type}`, { count: 1 }) })}\n </div>\n <div className=\"flex justify-end\">\n <Button\n className=\"mr-2\"\n variant={\"outline\"}\n type={`button`}\n onClick={() => setOpen(false)}\n disabled={isDeleting}\n >\n {t(`generic.buttons.cancel`)}\n </Button>\n <Button\n type=\"submit\"\n onClick={(e) => {\n e.preventDefault();\n handleDelete();\n }}\n variant={\"destructive\"}\n disabled={isDeleting}\n >\n {isDeleting ? (\n <>\n {t(`generic.buttons.is_deleting`)}\n <LoaderCircleIcon className=\"animate-spin-slow h-5 w-5\" />\n </>\n ) : (\n t(`generic.buttons.delete`)\n )}\n </Button>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { useTranslations } from \"next-intl\";\nimport { Button } from \"../../shadcnui\";\n\ntype CommonEditorButtonsProps = {\n isEdit: boolean;\n form: any;\n disabled?: boolean;\n setOpen: (open: boolean) => void;\n};\nexport function CommonEditorButtons({ isEdit, form, disabled, setOpen }: CommonEditorButtonsProps) {\n const t = useTranslations();\n\n return (\n <div className=\"flex justify-end\">\n <Button\n className=\"mr-2\"\n variant={\"outline\"}\n type={`button`}\n onClick={() => setOpen(false)}\n data-testid={`modal-button-cancel`}\n >\n {t(`generic.buttons.cancel`)}\n </Button>\n\n <Button type=\"submit\" disabled={form.formState.isSubmitting || disabled} data-testid={`modal-button-create`}>\n {isEdit ? t(`generic.buttons.confirm_update`) : t(`generic.buttons.confirm_create`)}\n </Button>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { DialogDescription, DialogHeader, DialogTitle } from \"../../shadcnui\";\n\ntype CommonEditorHeaderProps = {\n type: string;\n name?: string;\n};\n\nexport function CommonEditorHeader({ type, name }: CommonEditorHeaderProps) {\n const t = useTranslations();\n\n return (\n <DialogHeader>\n <DialogTitle>\n {name\n ? t(`generic.edit.update.title`, {\n type: type,\n })\n : t(`generic.edit.create.title`, { type: type })}\n </DialogTitle>\n <DialogDescription>\n {name\n ? t(`generic.edit.update.description`, {\n type: type,\n name: name,\n })\n : t(`generic.edit.create.description`, {\n type: type,\n })}\n </DialogDescription>\n </DialogHeader>\n );\n}\n","\"use client\";\n\nimport { PencilIcon } from \"lucide-react\";\n\nimport { useTranslations } from \"next-intl\";\nimport { Button, DialogTrigger } from \"../../shadcnui\";\n\ntype CommonEditorTriggerProps = { isEdit: boolean; edit?: string; create?: string };\n\nexport function CommonEditorTrigger({ isEdit, edit, create }: CommonEditorTriggerProps) {\n const t = useTranslations();\n\n return (\n <DialogTrigger asChild>\n {isEdit ? (\n <Button size=\"sm\" variant={`ghost`} className=\"text-muted-foreground\">\n <PencilIcon />\n </Button>\n ) : (\n <Button size=\"sm\" variant={`outline`}>\n {create ? create : t(`generic.buttons.create`)}\n </Button>\n )}\n </DialogTrigger>\n );\n}\n","\"use client\";\n\nimport { isValid, parse } from \"date-fns\";\nimport { Calendar as CalendarIcon, CircleXIcon } from \"lucide-react\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport { useI18nDateFnsLocale, useI18nLocale } from \"../../i18n\";\nimport {\n Calendar,\n Input,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\ntype DatePickerPopoverProps = {\n children: ReactNode;\n value?: Date;\n onSelect: (date?: Date) => void;\n minDate?: Date;\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n};\n\nexport const DatePickerPopover = ({\n children,\n value,\n onSelect,\n minDate,\n align = \"start\",\n className,\n}: DatePickerPopoverProps) => {\n const locale = useI18nLocale();\n const dateFnsLocale = useI18nDateFnsLocale();\n const [isOpen, setIsOpen] = useState(false);\n const [displayMonth, setDisplayMonth] = useState<Date>(() => value || new Date());\n\n // Locale-aware date formatter\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(locale, { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" }),\n [locale],\n );\n\n // Format date for display\n const formatDate = (date: Date): string => dateFormatter.format(date);\n\n // Get placeholder based on locale format\n const datePlaceholder = useMemo(() => {\n const parts = dateFormatter.formatToParts(new Date(2000, 0, 1));\n return parts\n .map((part) => {\n if (part.type === \"day\") return \"dd\";\n if (part.type === \"month\") return \"mm\";\n if (part.type === \"year\") return \"yyyy\";\n return part.value;\n })\n .join(\"\");\n }, [dateFormatter]);\n\n // Get date-fns format string from locale\n const dateFormatPattern = useMemo(() => {\n const parts = dateFormatter.formatToParts(new Date(2000, 0, 1));\n return parts\n .map((part) => {\n if (part.type === \"day\") return \"dd\";\n if (part.type === \"month\") return \"MM\";\n if (part.type === \"year\") return \"yyyy\";\n return part.value;\n })\n .join(\"\");\n }, [dateFormatter]);\n\n const [inputValue, setInputValue] = useState<string>(() => (value ? formatDate(value) : \"\"));\n\n // Generate year options (1900 to current year + 10)\n const currentYear = new Date().getFullYear();\n const yearOptions = Array.from({ length: currentYear - 1900 + 11 }, (_, i) => 1900 + i);\n\n // Generate month names dynamically based on current locale\n const monthNames = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: \"long\" });\n return Array.from({ length: 12 }, (_, i) => {\n const monthName = formatter.format(new Date(2000, i, 1));\n return monthName.charAt(0).toUpperCase() + monthName.slice(1);\n });\n }, [locale]);\n\n // Handle text input change\n const handleInputChange = (inputValue: string) => {\n setInputValue(inputValue);\n\n // Try to parse the date using locale format\n const parsedDate = parse(inputValue, dateFormatPattern, new Date());\n\n if (isValid(parsedDate)) {\n onSelect(parsedDate);\n setDisplayMonth(parsedDate);\n } else if (inputValue === \"\") {\n onSelect(undefined);\n }\n };\n\n // Handle calendar selection\n const handleCalendarSelect = (selectedDate: Date | undefined) => {\n onSelect(selectedDate);\n if (selectedDate) {\n setInputValue(formatDate(selectedDate));\n setDisplayMonth(selectedDate);\n } else {\n setInputValue(\"\");\n }\n setIsOpen(false);\n };\n\n // Handle clear button\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onSelect(undefined);\n setInputValue(\"\");\n };\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent className={cn(\"w-auto p-0\", className)} align={align} onClick={(e) => e.stopPropagation()}>\n <div className=\"p-3\">\n {/* Manual Input */}\n <div className=\"relative mb-3\">\n <Input\n value={inputValue}\n onChange={(e) => handleInputChange(e.target.value)}\n placeholder={datePlaceholder}\n className=\"pr-16\"\n onClick={(e) => e.stopPropagation()}\n />\n <div className=\"absolute right-1 top-1/2 flex -translate-y-1/2 items-center space-x-1\">\n <button\n type=\"button\"\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-muted\"\n onClick={(e) => e.stopPropagation()}\n >\n <CalendarIcon className=\"h-4 w-4 opacity-50\" />\n </button>\n {value && (\n <button\n type=\"button\"\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-muted\"\n onClick={handleClear}\n >\n <CircleXIcon className=\"h-4 w-4 opacity-50 hover:opacity-100\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Year and Month Selectors */}\n <div className=\"mb-3 flex gap-2\">\n <Select\n value={displayMonth.getMonth().toString()}\n onValueChange={(value) => {\n const newMonth = parseInt(value);\n const newDate = new Date(displayMonth.getFullYear(), newMonth, 1);\n setDisplayMonth(newDate);\n }}\n >\n <SelectTrigger className=\"w-[130px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {monthNames.map((month, index) => (\n <SelectItem key={index} value={index.toString()}>\n {month}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={displayMonth.getFullYear().toString()}\n onValueChange={(value) => {\n const newYear = parseInt(value);\n const newDate = new Date(newYear, displayMonth.getMonth(), 1);\n setDisplayMonth(newDate);\n }}\n >\n <SelectTrigger className=\"w-[80px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {yearOptions.reverse().map((year) => (\n <SelectItem key={year} value={year.toString()}>\n {year}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Calendar */}\n <Calendar\n mode=\"single\"\n selected={value}\n onSelect={handleCalendarSelect}\n disabled={(date) => (minDate && date < minDate ? true : false)}\n locale={dateFnsLocale}\n weekStartsOn={1}\n month={displayMonth}\n onMonthChange={setDisplayMonth}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","\"use client\";\n\nimport { format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DateRange } from \"react-day-picker\";\nimport { Button, Calendar, Popover, PopoverContent, PopoverTrigger } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\ntype DateRangeSelectorProps = {\n onDateChange: (date?: DateRange) => void;\n avoidSettingDates?: boolean;\n showPreviousMonth?: boolean;\n};\n\nexport function DateRangeSelector({ onDateChange, avoidSettingDates, showPreviousMonth }: DateRangeSelectorProps) {\n const [date, setDate] = useState<DateRange | undefined>(\n avoidSettingDates\n ? undefined\n : {\n from: new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n to: new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0),\n },\n );\n\n const [open, setOpen] = useState(false);\n\n const [prevRange, setPrevRange] = useState<DateRange | undefined>(date);\n useEffect(() => {\n if (\n date?.from &&\n date?.to &&\n date.to > date.from &&\n (prevRange?.from?.getTime() !== date.from.getTime() || prevRange?.to?.getTime() !== date.to.getTime())\n ) {\n onDateChange(date);\n setPrevRange(date);\n setOpen(false);\n }\n }, [date, prevRange, onDateChange]);\n\n // Custom handler to reset end date if a new start date is picked\n const handleSelect = (range: DateRange | undefined) => {\n if (!range) {\n setDate(undefined);\n return;\n }\n // If a new start date is picked, reset end date\n if (range.from && (!date?.from || range.from.getTime() !== date.from.getTime())) {\n setDate({ from: range.from, to: undefined });\n } else {\n setDate(range);\n }\n };\n\n return (\n <div className={cn(\"grid gap-2\")}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"date\"\n variant={\"outline\"}\n className={cn(\"w-[300px] justify-start text-left font-normal\", !date && \"text-muted-foreground\")}\n >\n <CalendarIcon />\n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} - {format(date.to, \"LLL dd, y\")}\n </>\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n <span>Pick a date</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <div className=\"flex flex-col gap-2 p-2\">\n <Calendar\n mode=\"range\"\n defaultMonth={\n date?.from ??\n (showPreviousMonth ? new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1) : undefined)\n }\n selected={date}\n onSelect={handleSelect}\n numberOfMonths={2}\n />\n <Button\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n setDate(undefined);\n setPrevRange(undefined);\n onDateChange(undefined);\n setOpen(false);\n }}\n className=\"cursor-pointer\"\n disabled={!date}\n >\n Clear\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","\"use client\";\n\nimport { Trash2 as RemoveIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport {\n createContext,\n Dispatch,\n forwardRef,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { DropzoneOptions, DropzoneState, FileRejection, useDropzone } from \"react-dropzone\";\nimport { toast } from \"sonner\";\nimport { buttonVariants, Input } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\ntype DirectionOptions = \"rtl\" | \"ltr\" | undefined;\n\ntype FileUploaderContextType = {\n dropzoneState: DropzoneState;\n isLOF: boolean;\n isFileTooBig: boolean;\n removeFileFromSet: (index: number) => void;\n activeIndex: number;\n setActiveIndex: Dispatch<SetStateAction<number>>;\n orientation: \"horizontal\" | \"vertical\";\n direction: DirectionOptions;\n};\n\nconst FileUploaderContext = createContext<FileUploaderContextType | null>(null);\n\nexport const useFileUpload = () => {\n const context = useContext(FileUploaderContext);\n if (!context) {\n throw new Error(\"useFileUpload must be used within a FileUploaderProvider\");\n }\n return context;\n};\n\ntype FileUploaderProps = {\n value: File[] | null;\n reSelect?: boolean;\n onValueChange: (value: File[] | null) => void;\n dropzoneOptions: DropzoneOptions;\n orientation?: \"horizontal\" | \"vertical\";\n};\n\nexport const FileUploader = forwardRef<HTMLDivElement, FileUploaderProps & React.HTMLAttributes<HTMLDivElement>>(\n (\n { className, dropzoneOptions, value, onValueChange, reSelect, orientation = \"vertical\", children, dir, ...props },\n ref,\n ) => {\n const [isFileTooBig, setIsFileTooBig] = useState(false);\n const [isLOF, setIsLOF] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const { maxFiles = 1, maxSize = 4 * 1024 * 1024, multiple = true } = dropzoneOptions;\n const t = useTranslations();\n\n const reSelectAll = maxFiles === 1 ? true : reSelect;\n const direction: DirectionOptions = dir === \"rtl\" ? \"rtl\" : \"ltr\";\n\n const removeFileFromSet = useCallback(\n (i: number) => {\n if (!value) return;\n const newFiles = value.filter((_, index) => index !== i);\n onValueChange(newFiles);\n },\n [value, onValueChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!value) return;\n\n const moveNext = () => {\n const nextIndex = activeIndex + 1;\n setActiveIndex(nextIndex > value.length - 1 ? 0 : nextIndex);\n };\n\n const movePrev = () => {\n const nextIndex = activeIndex - 1;\n setActiveIndex(nextIndex < 0 ? value.length - 1 : nextIndex);\n };\n\n const prevKey = orientation === \"horizontal\" ? (direction === \"ltr\" ? \"ArrowLeft\" : \"ArrowRight\") : \"ArrowUp\";\n\n const nextKey = orientation === \"horizontal\" ? (direction === \"ltr\" ? \"ArrowRight\" : \"ArrowLeft\") : \"ArrowDown\";\n\n if (e.key === nextKey) {\n moveNext();\n } else if (e.key === prevKey) {\n movePrev();\n } else if (e.key === \"Enter\" || e.key === \"Space\") {\n if (activeIndex === -1) {\n dropzoneState.inputRef.current?.click();\n }\n } else if (e.key === \"Delete\" || e.key === \"Backspace\") {\n if (activeIndex !== -1) {\n removeFileFromSet(activeIndex);\n if (value.length - 1 === 0) {\n setActiveIndex(-1);\n return;\n }\n movePrev();\n }\n } else if (e.key === \"Escape\") {\n setActiveIndex(-1);\n }\n },\n [value, activeIndex, removeFileFromSet],\n );\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n const files = acceptedFiles;\n\n if (!files) {\n toast.error(t(\"generic.errors.file\"), {\n description: t(\"generic.errors.file_large\"),\n });\n return;\n }\n\n const newValues: File[] = value ? [...value] : [];\n\n if (reSelectAll) {\n newValues.splice(0, newValues.length);\n }\n\n files.forEach((file) => {\n if (newValues.length < maxFiles) {\n newValues.push(file);\n }\n });\n\n onValueChange(newValues);\n\n if (rejectedFiles.length > 0) {\n for (let i = 0; i < rejectedFiles.length; i++) {\n if (rejectedFiles[i].errors[0]?.code === \"file-too-large\") {\n toast.error(t(\"generic.errors.file\"), {\n description: t(`generic.errors.file_max`, { size: maxSize / 1024 / 1024 }),\n });\n break;\n }\n if (rejectedFiles[i].errors[0]?.message) {\n toast.error(t(`generic.errors.file`), {\n description: rejectedFiles[i].errors[0].message,\n });\n break;\n }\n }\n }\n },\n [reSelectAll, value],\n );\n\n useEffect(() => {\n if (!value) return;\n if (value.length === maxFiles) {\n // setIsLOF(true);\n return;\n }\n setIsLOF(false);\n }, [value, maxFiles]);\n\n const opts = dropzoneOptions ? dropzoneOptions : { maxFiles, maxSize, multiple };\n\n const dropzoneState = useDropzone({\n ...opts,\n onDrop,\n onDropRejected: () => setIsFileTooBig(true),\n onDropAccepted: () => setIsFileTooBig(false),\n });\n\n const { isDragActive } = dropzoneState; // Correctly get isDragActive\n\n return (\n <FileUploaderContext.Provider\n value={{\n dropzoneState,\n isLOF,\n isFileTooBig,\n removeFileFromSet,\n activeIndex,\n setActiveIndex,\n orientation,\n direction,\n }}\n >\n <div\n ref={ref}\n tabIndex={0}\n onKeyDownCapture={handleKeyDown}\n className={cn(\n \"grid w-full overflow-hidden focus:outline-none\",\n className, // Original className from props\n {\n \"gap-2\": value && value.length > 0,\n \"bg-muted border-primary border-dashed\": isDragActive, // Apply drag-active styles to the main FileUploader div\n },\n )}\n dir={dir}\n {...props}\n >\n {children}\n </div>\n </FileUploaderContext.Provider>\n );\n },\n);\n\nFileUploader.displayName = \"FileUploader\";\n\nexport const FileUploaderContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ children, className, ...props }, ref) => {\n const { orientation } = useFileUpload();\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div className={cn(\"w-full px-1\")} ref={containerRef} aria-description=\"content file holder\">\n <div\n {...props}\n ref={ref}\n className={cn(\n \"flex gap-1 rounded-xl\",\n orientation === \"horizontal\" ? \"flex-raw flex-wrap\" : \"flex-col\",\n className,\n )}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nFileUploaderContent.displayName = \"FileUploaderContent\";\n\nexport const FileUploaderItem = forwardRef<HTMLDivElement, { index: number } & React.HTMLAttributes<HTMLDivElement>>(\n ({ className, index, children, ...props }, ref) => {\n const { removeFileFromSet, activeIndex, direction } = useFileUpload();\n const isSelected = index === activeIndex;\n const t = useTranslations();\n\n return (\n <div\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"ghost\" }),\n \"relative h-6 cursor-pointer justify-between p-1\",\n className,\n isSelected ? \"bg-muted\" : \"\",\n )}\n {...props}\n >\n <div className=\"flex h-full w-full items-center gap-1.5 leading-none font-medium tracking-tight\">\n {children}\n </div>\n <button\n type=\"button\"\n className={cn(\"absolute\", direction === \"rtl\" ? \"top-1 left-1\" : \"top-1 right-1\")}\n onClick={() => removeFileFromSet(index)}\n >\n <span className=\"sr-only\">{t(`generic.remove_item`, { index: index })}</span>\n <RemoveIcon className=\"hover:stroke-destructive h-4 w-4 duration-200 ease-in-out\" />\n </button>\n </div>\n );\n },\n);\n\nFileUploaderItem.displayName = \"FileUploaderItem\";\n\nexport const FileInput = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { dropzoneState, isFileTooBig, isLOF } = useFileUpload();\n const rootProps = isLOF ? {} : dropzoneState.getRootProps();\n // Get isDragActive from the context for FileInput as well, to ensure it can react if needed, or to simplify its own styling.\n const { isDragActive: parentIsDragActive } = dropzoneState;\n\n return (\n <div\n ref={ref}\n {...props}\n className={cn(`relative w-full ${isLOF ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}`, className)}\n >\n <div\n className={cn(\n \"w-full rounded-lg duration-300 ease-in-out\",\n // Simpler border logic: if parent is drag-active, it controls the border.\n // Otherwise, FileInput can show its own accept/reject/default border.\n {\n \"border-green-500\": dropzoneState.isDragAccept && !parentIsDragActive,\n \"border-red-500\": (dropzoneState.isDragReject || isFileTooBig) && !parentIsDragActive,\n \"border-gray-300\":\n !dropzoneState.isDragAccept && !dropzoneState.isDragReject && !isFileTooBig && !parentIsDragActive,\n },\n // className from props should be last to allow overrides if necessary\n className,\n )}\n {...rootProps}\n >\n {children}\n </div>\n <Input\n ref={dropzoneState.inputRef}\n disabled={isLOF}\n {...dropzoneState.getInputProps()}\n className={`${isLOF ? \"cursor-not-allowed\" : \"\"}`}\n />\n </div>\n );\n },\n);\n\nFileInput.displayName = \"FileInput\";\n","\"use client\";\n\nimport {\n Checkbox,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../shadcnui\";\n\ntype FormCheckboxProps = {\n form: any;\n id: string;\n name: string;\n labelBefore?: boolean;\n description?: string;\n isRequired?: boolean;\n};\n\nexport function FormCheckbox({ form, id, name, labelBefore, description, isRequired }: FormCheckboxProps) {\n const simpleLabel = () => {\n return (\n <FormLabel htmlFor={id} className={`font-normal ${labelBefore ? \"\" : \"ml-3\"}`}>\n {name}\n </FormLabel>\n );\n };\n\n const label = () => {\n if (description) return simpleLabel();\n else\n return (\n <Tooltip>\n <TooltipTrigger asChild>{simpleLabel()}</TooltipTrigger>\n <TooltipContent>{description}</TooltipContent>\n </Tooltip>\n );\n };\n\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n <FormControl>\n <div className=\"flex gap-x-4\">\n {labelBefore && label()}\n {labelBefore && isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n <Checkbox id={id} defaultChecked={field.value} onCheckedChange={field.onChange} />\n {!labelBefore && label()}\n {!labelBefore && isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { ReactElement } from \"react\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage } from \"../../shadcnui\";\n\nexport function FormContainerGeneric({\n form,\n id,\n name,\n children,\n isRequired = false,\n}: {\n form: any;\n id: string;\n name?: string;\n children: ReactElement<any>;\n isRequired?: boolean;\n}) {\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && (\n <FormLabel className=\"flex items-center\">\n <span>{name}</span>\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>{children}</FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { isValid, parse } from \"date-fns\";\nimport { Calendar as CalendarIcon, CircleXIcon } from \"lucide-react\";\nimport { useMemo, useState } from \"react\";\nimport { useI18nDateFnsLocale, useI18nLocale } from \"../../i18n\";\nimport {\n Calendar,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../shadcnui\";\n\nexport function FormDate({\n form,\n id,\n name,\n minDate,\n onChange,\n isRequired = false,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n minDate?: Date;\n onChange?: (date?: Date) => Promise<void>;\n isRequired?: boolean;\n}) {\n const locale = useI18nLocale();\n const dateFnsLocale = useI18nDateFnsLocale();\n const [open, setOpen] = useState<boolean>(false);\n const [displayMonth, setDisplayMonth] = useState<Date>(() => {\n const currentValue = form.getValues(id);\n return currentValue || new Date();\n });\n\n // Locale-aware date formatter\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(locale, { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" }),\n [locale],\n );\n\n // Format date for display\n const formatDate = (date: Date): string => dateFormatter.format(date);\n\n // Get placeholder based on locale format\n const datePlaceholder = useMemo(() => {\n const parts = dateFormatter.formatToParts(new Date(2000, 0, 1));\n return parts\n .map((part) => {\n if (part.type === \"day\") return \"dd\";\n if (part.type === \"month\") return \"mm\";\n if (part.type === \"year\") return \"yyyy\";\n return part.value;\n })\n .join(\"\");\n }, [dateFormatter]);\n\n // Get date-fns format string from locale\n const dateFormatPattern = useMemo(() => {\n const parts = dateFormatter.formatToParts(new Date(2000, 0, 1));\n return parts\n .map((part) => {\n if (part.type === \"day\") return \"dd\";\n if (part.type === \"month\") return \"MM\";\n if (part.type === \"year\") return \"yyyy\";\n return part.value;\n })\n .join(\"\");\n }, [dateFormatter]);\n\n const [inputValue, setInputValue] = useState<string>(() => {\n const currentValue = form.getValues(id);\n return currentValue ? formatDate(currentValue) : \"\";\n });\n\n // Generate year options (1900 to current year)\n const currentYear = new Date().getFullYear();\n const yearOptions = Array.from({ length: currentYear - 1900 + 1 }, (_, i) => 1900 + i);\n\n // Generate month names dynamically based on current locale\n const monthNames = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: \"long\" });\n return Array.from({ length: 12 }, (_, i) => {\n const monthName = formatter.format(new Date(2000, i, 1));\n return monthName.charAt(0).toUpperCase() + monthName.slice(1);\n });\n }, [locale]);\n\n // Handle text input change\n const handleInputChange = (value: string, field: any) => {\n setInputValue(value);\n\n // Try to parse the date using locale format\n const parsedDate = parse(value, dateFormatPattern, new Date());\n\n if (isValid(parsedDate)) {\n field.onChange(parsedDate);\n setDisplayMonth(parsedDate);\n if (onChange) onChange(parsedDate);\n } else if (value === \"\") {\n field.onChange(undefined);\n if (onChange) onChange(undefined);\n }\n };\n\n // Handle calendar selection\n const handleCalendarSelect = (selectedDate: Date | undefined, field: any) => {\n field.onChange(selectedDate);\n if (selectedDate) {\n setInputValue(formatDate(selectedDate));\n setDisplayMonth(selectedDate);\n } else {\n setInputValue(\"\");\n }\n if (onChange) onChange(selectedDate);\n };\n\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"} w-full`}>\n {name && (\n <FormLabel className=\"dlex items-center\">\n {name} {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <div className=\"relative\">\n <Popover open={open} onOpenChange={setOpen} modal={true}>\n <div className=\"relative\">\n <Input\n value={inputValue}\n onChange={(e) => handleInputChange(e.target.value, field)}\n placeholder={datePlaceholder}\n className=\"pr-16\"\n />\n <div className=\"absolute right-1 top-1/2 flex -translate-y-1/2 items-center space-x-1\">\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md\"\n >\n <CalendarIcon className=\"h-4 w-4 opacity-50\" />\n </button>\n </PopoverTrigger>\n {field.value && (\n <button\n type=\"button\"\n className=\"hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md\"\n onClick={() => {\n field.onChange(undefined);\n setInputValue(\"\");\n if (onChange) onChange(undefined);\n }}\n >\n <CircleXIcon className=\"h-4 w-4 opacity-50 hover:opacity-100\" />\n </button>\n )}\n </div>\n </div>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <div className=\"p-3\">\n {/* Year and Month Selectors */}\n <div className=\"mb-3 flex gap-2\">\n <Select\n value={displayMonth.getMonth().toString()}\n onValueChange={(value) => {\n const newMonth = parseInt(value);\n const newDate = new Date(displayMonth.getFullYear(), newMonth, 1);\n setDisplayMonth(newDate);\n }}\n >\n <SelectTrigger className=\"w-[130px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {monthNames.map((month, index) => (\n <SelectItem key={index} value={index.toString()}>\n {month}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={displayMonth.getFullYear().toString()}\n onValueChange={(value) => {\n const newYear = parseInt(value);\n const newDate = new Date(newYear, displayMonth.getMonth(), 1);\n setDisplayMonth(newDate);\n }}\n >\n <SelectTrigger className=\"w-[80px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {yearOptions.reverse().map((year) => (\n <SelectItem key={year} value={year.toString()}>\n {year}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Calendar */}\n <Calendar\n mode=\"single\"\n selected={field.value}\n onSelect={(e) => {\n handleCalendarSelect(e, field);\n setOpen(false);\n }}\n disabled={(date) => (minDate && date < minDate ? true : false)}\n locale={dateFnsLocale}\n weekStartsOn={1}\n month={displayMonth}\n onMonthChange={setDisplayMonth}\n />\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { Calendar as CalendarIcon, CircleXIcon } from \"lucide-react\";\nimport { useMemo, useState } from \"react\";\nimport { useI18nDateFnsLocale, useI18nLocale, useI18nTranslations } from \"../../i18n\";\nimport {\n Button,\n Calendar,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\nexport function FormDateTime({\n form,\n id,\n name,\n minDate,\n onChange,\n allowEmpty,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n minDate?: Date;\n onChange?: (date?: Date) => Promise<void>;\n allowEmpty?: boolean;\n}) {\n const [open, setOpen] = useState<boolean>(false);\n const t = useI18nTranslations();\n const locale = useI18nLocale();\n const dateFnsLocale = useI18nDateFnsLocale();\n\n // Locale-aware date-time formatter\n const dateTimeFormatter = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }),\n [locale],\n );\n\n // Format date-time for display\n const formatDateTime = (date: Date): string => dateTimeFormatter.format(date);\n\n const [selectedHours, setSelectedHours] = useState<number>(new Date().getHours());\n const [selectedMinutes, setSelectedMinutes] = useState<number>(roundToNearestFiveMinutes(new Date().getMinutes()));\n\n const hoursOptions = Array.from({ length: 24 }, (_, i) => {\n const hour = i;\n return {\n value: hour,\n label: hour.toString().padStart(2, \"0\"),\n };\n });\n\n const minutesOptions = Array.from({ length: 12 }, (_, i) => {\n const minute = i * 5;\n return {\n value: minute,\n label: minute.toString().padStart(2, \"0\"),\n };\n });\n\n function roundToNearestFiveMinutes(minutes: number): number {\n return (Math.round(minutes / 5) * 5) % 60;\n }\n\n const handleTimeChange = (hours: number, minutes: number) => {\n const currentDate = form.getValues(id);\n if (currentDate) {\n const updatedDate = new Date(currentDate);\n updatedDate.setHours(hours);\n updatedDate.setMinutes(minutes);\n form.setValue(id, updatedDate);\n if (onChange) onChange(updatedDate);\n }\n };\n\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"} w-full`}>\n {name && <FormLabel>{name}</FormLabel>}\n <FormControl>\n <div className=\"relative flex flex-row\">\n <Popover open={open} onOpenChange={setOpen} modal={true}>\n <div className=\"flex w-full flex-row items-center justify-between\">\n <PopoverTrigger asChild>\n <FormControl>\n <Button\n variant={\"outline\"}\n className={cn(\"w-full pl-3 text-left font-normal\", !field.value && \"text-muted-foreground\")}\n >\n {field.value ? formatDateTime(field.value) : <span>{t(`generic.pick_date_time`)}</span>}\n <CalendarIcon className=\"ml-auto h-4 w-4 opacity-50\" />\n </Button>\n </FormControl>\n </PopoverTrigger>\n {field.value && allowEmpty !== false && (\n <CircleXIcon\n className=\"text-muted hover:text-destructive ml-2 h-6 w-6 cursor-pointer\"\n onClick={() => {\n if (onChange) onChange(undefined);\n form.setValue(id, \"\");\n }}\n />\n )}\n </div>\n <PopoverContent className=\"w-auto p-4\" align=\"start\">\n <div className=\"flex flex-col space-y-4\">\n <Calendar\n mode=\"single\"\n selected={field.value}\n onSelect={(date) => {\n if (date) {\n // Preserve the current time when selecting a new date\n const newDate = new Date(date);\n if (field.value) {\n const currentDate = new Date(field.value);\n newDate.setHours(currentDate.getHours(), currentDate.getMinutes());\n } else {\n newDate.setHours(selectedHours, selectedMinutes);\n }\n form.setValue(id, newDate);\n if (onChange) onChange(newDate);\n\n // Update time state values\n setSelectedHours(newDate.getHours());\n setSelectedMinutes(roundToNearestFiveMinutes(newDate.getMinutes()));\n }\n }}\n disabled={(date) => (minDate && date < minDate ? true : false)}\n locale={dateFnsLocale}\n />\n <div className=\"flex flex-row items-end justify-center space-x-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label htmlFor=\"hours-select\">{t(`generic.hours`)}</Label>\n <Select\n value={String(field.value ? new Date(field.value).getHours() : selectedHours)}\n onValueChange={(value) => {\n const hours = parseInt(value);\n setSelectedHours(hours);\n handleTimeChange(\n hours,\n field.value\n ? roundToNearestFiveMinutes(new Date(field.value).getMinutes())\n : selectedMinutes,\n );\n }}\n >\n <SelectTrigger id=\"hours-select\" className=\"w-[70px]\">\n <SelectValue placeholder=\"Hour\" />\n </SelectTrigger>\n <SelectContent>\n {hoursOptions.map((option) => (\n <SelectItem key={option.value} value={String(option.value)}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"mb-[9px] text-xl\">:</div>\n <div className=\"flex flex-col space-y-2\">\n <Label htmlFor=\"minutes-select\">{t(`generic.minutes`)}</Label>\n <Select\n value={String(\n field.value\n ? roundToNearestFiveMinutes(new Date(field.value).getMinutes())\n : selectedMinutes,\n )}\n onValueChange={(value) => {\n const minutes = parseInt(value);\n setSelectedMinutes(minutes);\n handleTimeChange(field.value ? new Date(field.value).getHours() : selectedHours, minutes);\n }}\n >\n <SelectTrigger id=\"minutes-select\" className=\"w-[70px]\">\n <SelectValue placeholder=\"Min\" />\n </SelectTrigger>\n <SelectContent>\n {minutesOptions.map((option) => (\n <SelectItem key={option.value} value={String(option.value)}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <Button\n className=\"mt-2\"\n onClick={() => {\n setOpen(false);\n }}\n >\n {t(`generic.buttons.select_date`)}\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport React from \"react\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Input } from \"../../shadcnui\";\n\nexport function FormInput({\n form,\n id,\n name,\n placeholder,\n type,\n onBlur,\n disabled,\n onKeyDown,\n autoFocus,\n onChange,\n testId,\n isRequired = false,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n type?: \"text\" | \"number\" | \"currency\" | \"password\" | \"link\";\n onBlur?: () => Promise<void>;\n disabled?: boolean;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n autoFocus?: boolean;\n onChange?: (value: string | number) => Promise<void>;\n testId?: string;\n isRequired?: boolean;\n}) {\n const t = useTranslations();\n\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => {\n const handleBlur = async (e: React.FocusEvent<HTMLInputElement>) => {\n let value = e.target.value;\n\n if (type === \"link\" && value) {\n if (!/^https?:\\/\\//i.test(value)) {\n value = \"https://\" + value;\n field.onChange(value);\n }\n try {\n new URL(value);\n form.clearErrors(id);\n } catch (error) {\n form.setError(id, {\n type: \"validate\",\n message: t(`generic.errors.valid_url`),\n });\n }\n }\n\n if (onBlur) await onBlur();\n field.onBlur();\n };\n\n return (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && (\n <FormLabel className=\"flex items-center\">\n {name}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <div className=\"relative\">\n {type === \"currency\" && (\n <span className=\"text-muted-foreground absolute top-0 left-0 pt-2 pl-3\">€</span>\n )}\n <Input\n data-testid={testId}\n {...field}\n autoFocus={autoFocus === true}\n type={\n type === \"number\" || type === \"currency\" ? \"number\" : type === \"password\" ? \"password\" : \"text\"\n }\n className={`w-full ${type === \"number\" || type === \"currency\" ? \"text-end\" : \"\"}`}\n disabled={disabled === true || form.formState.isSubmitting}\n placeholder={placeholder || \"\"}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onChange={(e) => {\n if (type === \"number\" || type === \"currency\") {\n const value = e.target.value.replace(/[^0-9]/g, \"\");\n field.onChange(+value);\n if (onChange) onChange(+value);\n } else {\n field.onChange(e.target.value);\n if (onChange) onChange(e.target.value);\n }\n }}\n />\n </div>\n </FormControl>\n <FormMessage data-testid={testId ? `${testId}-error` : undefined} />\n </FormItem>\n );\n }}\n />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { EyeIcon, EyeOffIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { Button, Input } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\nexport interface PasswordInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(({ className, type, ...props }, ref) => {\n const [showPassword, setShowPassword] = React.useState(false);\n const disabled = props.value === \"\" || props.value === undefined || props.disabled;\n const t = useTranslations();\n\n return (\n <div className=\"relative\">\n <Input type={showPassword ? \"text\" : \"password\"} className={cn(\"\", className)} ref={ref} {...props} />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent\"\n onClick={() => setShowPassword((prev) => !prev)}\n disabled={disabled}\n >\n {showPassword && !disabled ? (\n <EyeIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : (\n <EyeOffIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n )}\n <span className=\"sr-only\">{showPassword ? t(`generic.hide_password`) : t(`generic.show_password`)}</span>\n </Button>\n\n <style>{`\n\t\t\t\t\t.hide-password-toggle::-ms-reveal,\n\t\t\t\t\t.hide-password-toggle::-ms-clear {\n\t\t\t\t\t\tvisibility: hidden;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t}\n\t\t\t\t`}</style>\n </div>\n );\n});\nPasswordInput.displayName = \"PasswordInput\";\n\nexport { PasswordInput };\n","\"use client\";\n\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage } from \"../../shadcnui\";\nimport { PasswordInput } from \"./PasswordInput\";\n\nexport function FormPassword({\n form,\n id,\n name,\n placeholder,\n onBlur,\n disabled,\n testId,\n isRequired,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n onBlur?: () => Promise<void>;\n disabled?: boolean;\n testId?: string;\n isRequired?: boolean;\n}) {\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && (\n <FormLabel>\n {name}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <PasswordInput\n {...field}\n className={`w-full`}\n disabled={disabled === true || form.formState.isSubmitting}\n placeholder={placeholder ? placeholder : \"\"}\n onBlur={onBlur}\n data-testid={testId}\n />\n </FormControl>\n <FormMessage data-testid={testId ? `${testId}-error` : undefined} />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Input } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\n/**\n * FormPlaceAutocomplete component integrates Google Places API (New)\n * to provide address suggestions as the user types.\n *\n * Prerequisites:\n * 1. Set NEXT_PUBLIC_GOOGLE_MAPS_API_KEY environment variable\n * 2. Enable Places API (New) in Google Cloud Console\n * 3. Configure API key restrictions as needed\n *\n * Note: This uses the new Places API via REST calls, not the legacy JavaScript API\n */\n\ninterface PlaceSuggestion {\n place_id: string;\n description: string;\n structured_formatting: {\n main_text: string;\n secondary_text: string;\n };\n}\n\ninterface PlaceAutocompleteProps {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n disabled?: boolean;\n testId?: string;\n isRequired?: boolean;\n onPlaceSelect?: (place: PlaceSuggestion) => void;\n className?: string;\n /**\n * Optional array of place types to include in search results.\n * When not specified, defaults to address types: [\"street_address\", \"premise\", \"subpremise\"]\n * For cities, use: [\"locality\", \"administrative_area_level_3\"]\n * For regions, use: [\"administrative_area_level_1\", \"administrative_area_level_2\"]\n */\n includeTypes?: string[];\n}\n\nexport function FormPlaceAutocomplete({\n form,\n id,\n name,\n placeholder,\n disabled,\n testId,\n isRequired = false,\n onPlaceSelect,\n className,\n includeTypes,\n}: PlaceAutocompleteProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const [suggestions, setSuggestions] = useState<PlaceSuggestion[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [loadError, setLoadError] = useState(false);\n const [apiKey, setApiKey] = useState<string | null>(null);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Initialize API key\n useEffect(() => {\n const key = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;\n\n if (!key) {\n console.error(\"Google Maps API key not found. Please set NEXT_PUBLIC_GOOGLE_MAPS_API_KEY environment variable.\");\n setLoadError(true);\n return;\n }\n\n setApiKey(key);\n }, []);\n\n // Update input value when form value changes\n useEffect(() => {\n const formValue = form.getValues(id);\n if (formValue !== inputValue) {\n setInputValue(formValue || \"\");\n }\n }, [form.watch(id), id, inputValue]);\n\n // Fetch place suggestions from Google Places API (New)\n const fetchSuggestions = async (input: string) => {\n if (!apiKey) return;\n\n try {\n setIsLoading(true);\n\n // Using the new Places API autocomplete endpoint\n const response = await fetch(`https://places.googleapis.com/v1/places:autocomplete`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Goog-Api-Key\": apiKey,\n },\n body: JSON.stringify({\n input: input,\n includedPrimaryTypes: includeTypes || [\"street_address\", \"premise\", \"subpremise\"],\n languageCode: \"en\",\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Places API error: ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.suggestions) {\n const formattedSuggestions: PlaceSuggestion[] = data.suggestions.map((suggestion: any) => ({\n place_id: suggestion.placePrediction?.placeId || \"\",\n description: suggestion.placePrediction?.text?.text || \"\",\n structured_formatting: {\n main_text: suggestion.placePrediction?.structuredFormat?.mainText?.text || \"\",\n secondary_text: suggestion.placePrediction?.structuredFormat?.secondaryText?.text || \"\",\n },\n }));\n\n setSuggestions(formattedSuggestions);\n setShowSuggestions(true);\n } else {\n setSuggestions([]);\n }\n } catch (error) {\n console.error(\"Error fetching place suggestions:\", error);\n setSuggestions([]);\n } finally {\n setIsLoading(false);\n }\n };\n\n // Handle input changes with debouncing\n const handleInputChange = (value: string) => {\n setInputValue(value);\n form.setValue(id, value);\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (value.length > 2 && apiKey) {\n debounceRef.current = setTimeout(() => {\n fetchSuggestions(value);\n }, 300);\n } else {\n setSuggestions([]);\n setShowSuggestions(false);\n setIsLoading(false);\n }\n };\n\n // Handle suggestion selection\n const handleSuggestionSelect = (suggestion: PlaceSuggestion) => {\n setInputValue(suggestion.description);\n form.setValue(id, suggestion.description);\n setShowSuggestions(false);\n setSuggestions([]);\n\n if (onPlaceSelect) {\n onPlaceSelect(suggestion);\n }\n };\n\n // Close suggestions when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setShowSuggestions(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n // Cleanup debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, []);\n\n // Fallback to regular input if API key is not available\n if (loadError) {\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && (\n <FormLabel className=\"flex items-center\">\n {name}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <Input\n {...field}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testId}\n className={cn(\"w-full\", className)}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full flex-col\" ref={containerRef}>\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && (\n <FormLabel className=\"flex items-center\">\n {name}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <div className=\"relative\">\n <Input\n value={inputValue}\n onChange={(e) => handleInputChange(e.target.value)}\n onBlur={field.onBlur}\n onFocus={() => {\n if (suggestions.length > 0) {\n setShowSuggestions(true);\n }\n }}\n placeholder={placeholder}\n disabled={disabled || !apiKey}\n data-testid={testId}\n className={cn(\"w-full\", className)}\n />\n\n {/* Loading indicator */}\n {isLoading && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <div className=\"border-primary h-4 w-4 animate-spin rounded-full border-2 border-t-transparent\"></div>\n </div>\n )}\n\n {/* Suggestions dropdown */}\n {showSuggestions && suggestions.length > 0 && (\n <div className=\"bg-background absolute left-0 right-0 top-full z-50 mt-1 max-h-60 overflow-auto rounded-md border shadow-lg\">\n {suggestions.map((suggestion, index) => (\n <div\n key={suggestion.place_id || index}\n className=\"hover:bg-muted cursor-pointer px-3 py-2 text-sm\"\n onClick={() => handleSuggestionSelect(suggestion)}\n >\n <div className=\"font-medium\">{suggestion.structured_formatting?.main_text}</div>\n <div className=\"text-muted-foreground\">{suggestion.structured_formatting?.secondary_text}</div>\n </div>\n ))}\n </div>\n )}\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../shadcnui\";\n\nexport function FormSelect({\n form,\n id,\n name,\n placeholder,\n disabled,\n values,\n onChange,\n useRows,\n testId,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n disabled?: boolean;\n values: { id: string; text: string }[];\n onChange?: (value: string) => void;\n useRows?: boolean;\n testId?: string;\n}) {\n return (\n <div className={`flex w-full flex-col`}>\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`flex w-full ${useRows ? `flex-row items-center justify-between gap-x-4` : `flex-col`}`}>\n {name && <FormLabel className={`${useRows ? `min-w-28` : ``}`}>{name}</FormLabel>}\n <Select\n onValueChange={(e) => {\n field.onChange(e);\n if (onChange) onChange(e);\n }}\n defaultValue={field.value}\n data-testid={testId}\n >\n <FormControl className=\"w-full\">\n <SelectTrigger>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {values.map((type: { id: string; text: string }) => (\n <SelectItem key={type.id} value={type.id}>\n {type.text}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useWatch } from \"react-hook-form\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Slider } from \"../../shadcnui\";\n\nexport function FormSlider({\n form,\n id,\n name,\n disabled,\n showPercentage,\n}: {\n form: any;\n id: string;\n name?: string;\n placeholder?: string;\n disabled?: boolean;\n showPercentage?: boolean;\n}) {\n const value = useWatch({ control: form.control, name: id });\n\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n {name && <FormLabel>{name}</FormLabel>}\n <FormControl>\n <div>\n {showPercentage && (\n <div className=\"text-muted-foreground mb-2 flex w-full justify-center text-xs\">{`${value}%`}</div>\n )}\n <Slider\n onValueChange={(value: number[]) => form.setValue(id, value[0])}\n value={[value]}\n max={100}\n step={5}\n disabled={disabled === true || form.formState.isSubmitting}\n />\n {/* </div> */}\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Switch } from \"../../shadcnui\";\n\nexport function FormSwitch({ form, id, name, disabled }: { form: any; id: string; name?: string; disabled?: boolean }) {\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className={`${name ? \"mb-5\" : \"mb-1\"}`}>\n <FormControl>\n <div className=\"flex flex-row gap-x-4\">\n <Switch checked={field.value} onCheckedChange={field.onChange} />\n {name && <FormLabel>{name}</FormLabel>}\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Textarea } from \"../../shadcnui\";\nimport { cn } from \"../../utils\";\n\nexport function FormTextarea({\n form,\n id,\n name,\n className,\n placeholder,\n testId,\n}: {\n form: any;\n id: string;\n name: string;\n placeholder?: string;\n className?: string;\n testId?: string;\n}) {\n return (\n <div className=\"flex w-full flex-col\">\n <FormField\n control={form.control}\n name={id}\n render={({ field }) => (\n <FormItem className=\"mb-5\">\n <FormLabel>{name}</FormLabel>\n <FormControl>\n <Textarea\n {...field}\n className={cn(\"min-h-96 w-full\", className)}\n disabled={form.formState.isSubmitting}\n placeholder={placeholder}\n data-testid={testId}\n />\n </FormControl>\n <FormMessage data-testid={testId ? `${testId}-error` : undefined} />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { useUrlRewriter } from \"../../hooks/url.rewriter\";\nimport { ModuleWithPermissions } from \"../../permissions\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../shadcnui\";\n\nexport type PageContainerItems = {\n title: string;\n content: ReactNode;\n};\n\ntype PageContainerContentDetailsProps = {\n items: PageContainerItems[];\n section?: string;\n module: ModuleWithPermissions;\n id: string;\n};\n\nexport function PageContainerContentDetails({ items, section, module, id }: PageContainerContentDetailsProps) {\n const rewriteUrl = useUrlRewriter();\n const [isScrolled, setIsScrolled] = useState<boolean>(false);\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n // Use IntersectionObserver to detect when content scrolls past the TabsList\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // When sentinel is not visible (scrolled past), show border\n setIsScrolled(!entry.isIntersecting);\n },\n {\n threshold: 0,\n rootMargin: \"0px\",\n },\n );\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <Tabs\n defaultValue={section || items[0].title}\n onValueChange={(a) => rewriteUrl({ page: module, id: id, childPage: a })}\n >\n {/* Sentinel element - invisible, used to detect scroll position */}\n <div ref={sentinelRef} className=\"h-0\" />\n\n {/* Sticky TabsList with conditional border */}\n <div className={`bg-background sticky top-0 z-10 mb-2 pb-2 transition-shadow ${isScrolled ? \"border-b\" : \"\"}`}>\n <TabsList>\n {items.map((item) => (\n <TabsTrigger key={item.title} value={item.title}>\n {item.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </div>\n\n <div className=\"pr-4\">\n {items.map((item) => (\n <TabsContent key={item.title} value={item.title}>\n {item.content}\n </TabsContent>\n ))}\n </div>\n </Tabs>\n );\n}\n","\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { ResizableHandle, ResizablePanel, ResizablePanelGroup } from \"../../shadcnui\";\n\ntype PageContentContainerProps = {\n details: ReactNode;\n footer?: ReactNode;\n content?: ReactNode;\n};\n\nexport function PageContentContainer({ details, footer, content }: PageContentContainerProps) {\n return (\n <div className=\"flex h-[calc(100vh-(--spacing(16)))] w-full\">\n <ResizablePanelGroup direction=\"horizontal\" className=\"items-stretch\" autoSaveId=\"page-content-layout\">\n <ResizablePanel id=\"left-panel\" defaultSize={32} minSize={20} maxSize={40}>\n <div className=\"@container flex h-full flex-col pr-4\">\n <div className=\"flex-1 overflow-y-auto\">{details}</div>\n\n {/* Sticky footer - always visible at bottom */}\n {footer && <div className=\"flex flex-col gap-y-2 pt-2 pb-2\">{footer}</div>}\n </div>\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel id=\"right-panel\" className=\"pl-4\">\n <div className=\"h-full overflow-y-auto\">{content}</div>\n </ResizablePanel>\n </ResizablePanelGroup>\n </div>\n );\n}\n","import { ColumnDef } from \"@tanstack/react-table\";\nimport React from \"react\";\n\nexport const cellComponent = (params: {\n id: string;\n name: string;\n title: string;\n component: React.ReactNode;\n}): ColumnDef<any> => {\n return {\n id: params.name,\n accessorKey: params.name,\n header: params.title,\n cell: ({ row }) => params.component,\n enableSorting: false,\n enableHiding: false,\n };\n};\n","import { ColumnDef } from \"@tanstack/react-table\";\n\nexport const cellDate = (params: { name: string; title: string }): ColumnDef<any> => {\n return {\n id: params.name,\n accessorKey: params.name,\n header: params.title,\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">\n {row.getValue<Date>(params.name).toLocaleDateString(\"en\", { dateStyle: \"medium\" })}\n </span>\n ),\n enableSorting: false,\n enableHiding: false,\n };\n};\n","import { ColumnDef } from \"@tanstack/react-table\";\nimport { Checkbox } from \"../../../shadcnui\";\n\nexport const cellId = (params: {\n name: string;\n checkedIds?: string[];\n toggleId?: (id: string) => void;\n}): ColumnDef<any> => {\n return {\n id: params.name,\n accessorKey: params.name,\n header: \"\",\n cell: ({ row }) =>\n params.toggleId ? (\n <Checkbox\n checked={params.checkedIds?.includes(row.getValue(params.name)) || false}\n onCheckedChange={(value) => {\n row.toggleSelected(!!value);\n params.toggleId?.(row.getValue(params.name));\n }}\n aria-label=\"Select row\"\n />\n ) : null,\n enableSorting: false,\n enableHiding: true,\n };\n};\n","import { ColumnDef } from \"@tanstack/react-table\";\nimport { Link } from \"../../../shadcnui\";\n\nexport const cellLink = <T,>(params: {\n id: string;\n name: string;\n title: string;\n generateUrl: (id: string) => string;\n}): ColumnDef<T> => {\n return {\n id: params.name,\n accessorKey: params.name,\n header: params.title,\n cell: ({ row }) => <Link href={params.generateUrl(row.getValue(params.id))}>{row.getValue(params.name)}</Link>,\n enableSorting: false,\n enableHiding: false,\n };\n};\n","import { ColumnDef } from \"@tanstack/react-table\";\nimport { Link } from \"../../../shadcnui\";\n\nexport const cellUrl = (params: { name: string; title: string }): ColumnDef<any> => {\n return {\n id: params.name,\n accessorKey: params.name,\n header: params.title,\n cell: ({ row }) => <Link href={row.getValue(params.name)}>{row.getValue(params.name)}</Link>,\n enableSorting: false,\n enableHiding: false,\n };\n};\n","\"use client\";\n\nimport { flexRender, getCoreRowModel, useReactTable } from \"@tanstack/react-table\";\n\nimport { CaretLeftIcon, CaretRightIcon } from \"@radix-ui/react-icons\";\nimport { ReactNode, memo, useMemo } from \"react\";\nimport { DataListRetriever, useTableGenerator } from \"../../hooks\";\nimport { ModuleWithPermissions } from \"../../permissions\";\nimport { Button, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from \"../../shadcnui\";\nimport { ContentTableSearch } from \"./ContentTableSearch\";\n\nconst EMPTY_ARRAY: any[] = [];\n\nexport type GenerateTableStructureParams = {\n data: any[];\n toggleValueToFormIdsId: (id: string, name: string) => void;\n isSelected: (id: string) => boolean;\n};\n\ntype ContentListTableProps = {\n title?: string;\n data: DataListRetriever<any>;\n tableGenerator?: never;\n tableGeneratorType: ModuleWithPermissions;\n fields: any[];\n checkedIds?: string[];\n toggleId?: (id: string) => void;\n functions?: ReactNode;\n filters?: ReactNode;\n allowSearch?: boolean;\n context?: Record<string, any>;\n};\n\nexport const ContentListTable = memo(function ContentListTable(props: ContentListTableProps) {\n const { data, fields, checkedIds, toggleId, allowSearch, filters } = props;\n\n const { data: tableData, columns: tableColumns } = useTableGenerator(props.tableGeneratorType, {\n data: data?.data ?? EMPTY_ARRAY,\n fields: fields,\n checkedIds: checkedIds,\n toggleId: toggleId,\n dataRetriever: data,\n context: props.context,\n });\n\n const columnVisibility = useMemo(\n () =>\n fields.reduce(\n (acc, columnId) => {\n acc[columnId] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n ),\n [fields],\n );\n\n const table = useReactTable({\n data: tableData,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n initialState: {\n columnVisibility,\n },\n });\n\n // if (!data.isLoaded || !data.data) {\n // return <ContentListTableLoader />;\n // }\n\n const rowModel = tableData ? table.getRowModel() : null;\n const showFooter = !!(props.functions || data.next || data.previous);\n\n return (\n <div className=\"flex w-full flex-col\">\n <div className=\"overflow-hidden rounded-md border\">\n <Table>\n <TableHeader className=\"bg-muted font-semibold\">\n {props.title && (\n <TableRow>\n <TableHead className=\"bg-card text-primary p-4 text-left font-bold\" colSpan={tableColumns.length}>\n <div className=\"flex w-full items-center justify-between gap-x-2\">\n <div className=\"w-full\">{props.title}</div>\n {(props.functions || props.filters || allowSearch) && (\n <>\n {props.functions}\n {props.filters}\n <ContentTableSearch data={data} />\n </>\n )}\n </div>\n </TableHead>\n </TableRow>\n )}\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rowModel && rowModel.rows?.length ? (\n rowModel.rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={tableColumns.length} className=\"h-24 text-center\">\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {showFooter && (\n <TableFooter>\n <TableRow>\n <TableCell colSpan={tableColumns.length} className=\"bg-card py-4 text-right\">\n <div className=\"flex items-center justify-end space-x-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={(e) => {\n e.preventDefault();\n data.previous?.(true);\n }}\n disabled={!data.previous}\n >\n <CaretLeftIcon className=\"h-4 w-4\" />\n </Button>\n {data.pageInfo && (\n <span className=\"text-muted-foreground text-xs\">\n {data.pageInfo.startItem}-{data.pageInfo.endItem}\n </span>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={(e) => {\n e.preventDefault();\n data.next?.(true);\n }}\n disabled={!data.next}\n >\n <CaretRightIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n </TableCell>\n </TableRow>\n </TableFooter>\n )}\n </Table>\n </div>\n </div>\n );\n});\n","\"use client\";\n\nimport { RefreshCw, Search, X } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { DataListRetriever, useDebounce } from \"../../hooks\";\nimport { Input } from \"../../shadcnui\";\n\ntype ContentTableSearchProps = {\n data: DataListRetriever<any>;\n};\n\nexport function ContentTableSearch({ data }: ContentTableSearchProps) {\n const t = useTranslations();\n const searchTermRef = useRef<string>(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isSearching, setIsSearching] = useState<boolean>(false);\n\n const isExpanded = isFocused || searchTerm.length > 0;\n\n const search = useCallback(\n async (searchedTerm: string) => {\n try {\n if (searchedTerm === searchTermRef.current) return;\n searchTermRef.current = searchedTerm;\n\n await data.search(searchedTerm);\n } finally {\n setIsSearching(false);\n }\n },\n [searchTermRef, data],\n );\n\n const updateSearchTerm = useDebounce(search, 500);\n\n useEffect(() => {\n setIsSearching(true);\n updateSearchTerm(searchTerm);\n }, [updateSearchTerm, searchTerm]);\n\n const handleSearchIconClick = () => {\n if (!isExpanded) {\n setIsFocused(true);\n // Small delay to ensure the input is rendered before focusing\n setTimeout(() => inputRef.current?.focus(), 50);\n }\n };\n\n const handleBlur = () => {\n // Auto-collapse only if search is empty\n if (searchTerm.length === 0) {\n setIsFocused(false);\n }\n };\n\n const handleClear = () => {\n setSearchTerm(\"\");\n search(\"\");\n setIsFocused(false);\n };\n\n return (\n <div\n className={`relative flex h-6 items-center text-xs font-normal transition-all duration-300 ease-in-out ${\n isExpanded ? \"w-64\" : \"w-6\"\n }`}\n >\n <Search\n className={`absolute top-1 left-1 h-4 w-4 transition-colors ${\n isExpanded ? \"text-muted-foreground\" : \"text-muted-foreground hover:text-foreground cursor-pointer\"\n }`}\n onClick={handleSearchIconClick}\n />\n {isExpanded && (\n <Input\n ref={inputRef}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n handleClear();\n }\n }}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n placeholder={t(`generic.search.placeholder_global`)}\n type=\"text\"\n className=\"border-border/50 focus-visible:border-border h-10 w-full pr-8 pl-8 text-xs shadow-none focus-visible:ring-0\"\n onChange={(e) => setSearchTerm(e.target.value)}\n value={searchTerm}\n />\n )}\n {isExpanded && isSearching && (\n <RefreshCw className=\"text-muted-foreground absolute top-1 right-1 h-4 w-4 animate-spin\" />\n )}\n {isExpanded && !isSearching && searchTermRef.current && (\n <X\n className=\"text-muted-foreground hover:text-foreground absolute top-1 right-1 h-4 w-4 cursor-pointer\"\n onClick={handleClear}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["Fragment","Breadcrumb","useState","jsx","jsxs","useState","jsx","jsxs","Breadcrumb","jsx","useEffect","useState","jsx","jsxs","useState","useEffect","useTranslations","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useEffect","useState","jsx","jsxs","useTranslations","useState","useEffect","Fragment","jsx","jsxs","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","jsx","jsx","jsxs","useTranslations","useEffect","useRef","useState","jsx","jsxs","useTranslations","useRef","useState","useEffect","useState","Fragment","jsx","jsxs","useState","useTranslations","jsx","jsxs","useTranslations","useTranslations","jsx","jsxs","useTranslations","useTranslations","jsx","useTranslations","useState","jsx","jsxs","useState","inputValue","value","CalendarIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","CalendarIcon","useTranslations","useCallback","useEffect","useRef","useState","toast","jsx","jsxs","useState","useTranslations","useCallback","toast","useEffect","useRef","jsx","jsxs","jsx","jsxs","isValid","parse","CalendarIcon","CircleXIcon","useMemo","useState","jsx","jsxs","useState","useMemo","parse","isValid","CalendarIcon","CircleXIcon","CalendarIcon","CircleXIcon","useMemo","useState","jsx","jsxs","useState","useMemo","CalendarIcon","CircleXIcon","useTranslations","jsx","jsxs","useTranslations","React","useTranslations","jsx","jsxs","useTranslations","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","value","jsx","jsxs","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsx","jsx","jsx","useMemo","useTranslations","useCallback","useEffect","useRef","useState","jsx","jsxs","useTranslations","useRef","useState","useCallback","useEffect","Fragment","jsx","jsxs","ContentListTable","useMemo"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -23,6 +23,7 @@ interface I18nConfig {
23
23
  useLocale?: UseLocaleHook;
24
24
  useDateFnsLocale?: UseDateFnsLocaleHook;
25
25
  Link: LinkComponent;
26
+ usePathname: () => string;
26
27
  }
27
28
  declare function configureI18n(config: I18nConfig): void;
28
29
  declare function useI18nRouter(): I18nRouter;
@@ -23,6 +23,7 @@ interface I18nConfig {
23
23
  useLocale?: UseLocaleHook;
24
24
  useDateFnsLocale?: UseDateFnsLocaleHook;
25
25
  Link: LinkComponent;
26
+ usePathname: () => string;
26
27
  }
27
28
  declare function configureI18n(config: I18nConfig): void;
28
29
  declare function useI18nRouter(): I18nRouter;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Token parameters for authentication cookie management
3
+ */
4
+ interface TokenParams {
5
+ token?: string;
6
+ refreshToken?: string;
7
+ userId?: string;
8
+ companyId?: string;
9
+ licenseExpirationDate?: Date;
10
+ roles?: string[];
11
+ features?: string[];
12
+ modules?: {
13
+ id: string;
14
+ permissions: {
15
+ create: boolean | string;
16
+ read: boolean | string;
17
+ update: boolean | string;
18
+ delete: boolean | string;
19
+ };
20
+ }[];
21
+ }
22
+ /**
23
+ * Token handler interface for dependency injection
24
+ * Apps must provide implementations of these functions via configureAuth()
25
+ */
26
+ interface TokenHandler {
27
+ updateToken: (params: TokenParams) => Promise<void>;
28
+ removeToken: () => Promise<void>;
29
+ }
30
+ /**
31
+ * Configure authentication token handling
32
+ * Call this at app startup to provide Server Actions for cookie management
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { configureAuth } from "@carlonicora/nextjs-jsonapi/features";
37
+ * import { updateToken, removeToken } from "@/features/auth/utils/AuthCookies";
38
+ *
39
+ * configureAuth({ updateToken, removeToken });
40
+ * ```
41
+ */
42
+ declare function configureAuth(handler: TokenHandler): void;
43
+ /**
44
+ * Internal getter for AuthService to access the token handler
45
+ * @internal
46
+ */
47
+ declare function getTokenHandler(): TokenHandler | null;
48
+
49
+ export { type TokenHandler as T, type TokenParams as a, configureAuth as c, getTokenHandler as g };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Token parameters for authentication cookie management
3
+ */
4
+ interface TokenParams {
5
+ token?: string;
6
+ refreshToken?: string;
7
+ userId?: string;
8
+ companyId?: string;
9
+ licenseExpirationDate?: Date;
10
+ roles?: string[];
11
+ features?: string[];
12
+ modules?: {
13
+ id: string;
14
+ permissions: {
15
+ create: boolean | string;
16
+ read: boolean | string;
17
+ update: boolean | string;
18
+ delete: boolean | string;
19
+ };
20
+ }[];
21
+ }
22
+ /**
23
+ * Token handler interface for dependency injection
24
+ * Apps must provide implementations of these functions via configureAuth()
25
+ */
26
+ interface TokenHandler {
27
+ updateToken: (params: TokenParams) => Promise<void>;
28
+ removeToken: () => Promise<void>;
29
+ }
30
+ /**
31
+ * Configure authentication token handling
32
+ * Call this at app startup to provide Server Actions for cookie management
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { configureAuth } from "@carlonicora/nextjs-jsonapi/features";
37
+ * import { updateToken, removeToken } from "@/features/auth/utils/AuthCookies";
38
+ *
39
+ * configureAuth({ updateToken, removeToken });
40
+ * ```
41
+ */
42
+ declare function configureAuth(handler: TokenHandler): void;
43
+ /**
44
+ * Internal getter for AuthService to access the token handler
45
+ * @internal
46
+ */
47
+ declare function getTokenHandler(): TokenHandler | null;
48
+
49
+ export { type TokenHandler as T, type TokenParams as a, configureAuth as c, getTokenHandler as g };