@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.
- package/dist/{AbstractService-BKlpJA61.d.mts → AbstractService-B2n_JdiC.d.mts} +1 -1
- package/dist/{AbstractService-D9eSVKNa.d.ts → AbstractService-DtQTYovo.d.ts} +1 -1
- package/dist/{content.interface-Dg2lt_An.d.mts → AuthComponent-CPLvEerw.d.mts} +11 -15
- package/dist/{content.interface-BhyAiOFq.d.ts → AuthComponent-m6Qp4Hz6.d.ts} +11 -15
- package/dist/{BlockNoteEditor-UVO3VZZE.mjs → BlockNoteEditor-BLVXQPXV.mjs} +14 -18
- package/dist/{BlockNoteEditor-UVO3VZZE.mjs.map → BlockNoteEditor-BLVXQPXV.mjs.map} +1 -1
- package/dist/{BlockNoteEditor-VFWG6LXI.js → BlockNoteEditor-ZTDHULFT.js} +15 -19
- package/dist/BlockNoteEditor-ZTDHULFT.js.map +1 -0
- package/dist/JsonApiRequest-O7BGUMFO.mjs +23 -0
- package/dist/JsonApiRequest-VARLNKAF.js +23 -0
- package/dist/JsonApiRequest-VARLNKAF.js.map +1 -0
- package/dist/chunk-2LM6LCJW.mjs +1 -0
- package/dist/chunk-3APORDYP.mjs +7783 -0
- package/dist/chunk-3APORDYP.mjs.map +1 -0
- package/dist/{chunk-TMVHSY3Y.js → chunk-5ZEADNNP.js} +36 -17
- package/dist/chunk-5ZEADNNP.js.map +1 -0
- package/dist/{chunk-ECDTZBYO.mjs → chunk-74F6BBHH.mjs} +21 -2
- package/dist/chunk-74F6BBHH.mjs.map +1 -0
- package/dist/{chunk-GYWPEPOH.mjs → chunk-7C5RAEBO.mjs} +72 -68
- package/dist/chunk-7C5RAEBO.mjs.map +1 -0
- package/dist/chunk-A5DDIABK.js +1 -0
- package/dist/{chunk-TEGF6ZWG.js → chunk-AGAJMJ4T.js} +47 -9
- package/dist/chunk-AGAJMJ4T.js.map +1 -0
- package/dist/{chunk-CXQOWQSY.js → chunk-AYHKQWHH.js} +15 -2
- package/dist/chunk-AYHKQWHH.js.map +1 -0
- package/dist/{chunk-I2REI7OA.js → chunk-HMHGLXWC.js} +33 -15
- package/dist/chunk-HMHGLXWC.js.map +1 -0
- package/dist/chunk-IWFGEPAA.mjs +1 -0
- package/dist/chunk-JC3WJK65.js +1 -0
- package/dist/{chunk-L6EQEAXU.mjs → chunk-PYF2U6WG.mjs} +25 -7
- package/dist/chunk-PYF2U6WG.mjs.map +1 -0
- package/dist/{chunk-YDVTFM7X.mjs → chunk-RBIVEH2K.mjs} +42 -4
- package/dist/chunk-RBIVEH2K.mjs.map +1 -0
- package/dist/{chunk-V2JJPI7N.js → chunk-RZO2LOW4.js} +237 -233
- package/dist/chunk-RZO2LOW4.js.map +1 -0
- package/dist/{chunk-X4BIHJ2B.mjs → chunk-SM63SZCP.mjs} +15 -2
- package/dist/chunk-SM63SZCP.mjs.map +1 -0
- package/dist/chunk-WEC4YMOS.js +7783 -0
- package/dist/chunk-WEC4YMOS.js.map +1 -0
- package/dist/client/index.d.mts +21 -2
- package/dist/client/index.d.ts +21 -2
- package/dist/client/index.js +18 -245
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +28 -255
- package/dist/client/index.mjs.map +1 -1
- package/dist/components/index.d.mts +293 -8
- package/dist/components/index.d.ts +293 -8
- package/dist/components/index.js +78 -2323
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +172 -2417
- package/dist/components/index.mjs.map +1 -1
- package/dist/{config-hXufftVS.d.ts → config-BmnK65TD.d.mts} +1 -0
- package/dist/{config-hXufftVS.d.mts → config-BmnK65TD.d.ts} +1 -0
- package/dist/config-DQeAo9Kf.d.mts +49 -0
- package/dist/config-DQeAo9Kf.d.ts +49 -0
- package/dist/contexts/index.d.mts +109 -21
- package/dist/contexts/index.d.ts +109 -21
- package/dist/contexts/index.js +39 -7
- package/dist/contexts/index.js.map +1 -1
- package/dist/contexts/index.mjs +40 -8
- package/dist/core/index.d.mts +3 -4
- package/dist/core/index.d.ts +3 -4
- package/dist/core/index.js +3 -7
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +4 -8
- package/dist/{d3.link.interface-QMdB22bC.d.mts → d3.link.interface-ClC4Irqp.d.mts} +2 -1
- package/dist/{d3.link.interface-QMdB22bC.d.ts → d3.link.interface-ClC4Irqp.d.ts} +2 -1
- package/dist/features/index.d.mts +17 -86
- package/dist/features/index.d.ts +17 -86
- package/dist/features/index.js +7 -16
- package/dist/features/index.js.map +1 -1
- package/dist/features/index.mjs +10 -19
- package/dist/hooks/index.d.mts +18 -43
- package/dist/hooks/index.d.ts +18 -43
- package/dist/hooks/index.js +20 -7
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +19 -6
- package/dist/index.d.mts +10 -6
- package/dist/index.d.ts +10 -6
- package/dist/index.js +13 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -19
- package/dist/interfaces/index.d.mts +2 -1
- package/dist/interfaces/index.d.ts +2 -1
- package/dist/notification.interface-BBgMUdLR.d.mts +14 -0
- package/dist/notification.interface-gyvT-Z2F.d.ts +14 -0
- package/dist/permissions/index.d.mts +2 -3
- package/dist/permissions/index.d.ts +2 -3
- package/dist/server/index.d.mts +38 -18
- package/dist/server/index.d.ts +38 -18
- package/dist/server/index.js +70 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +68 -0
- package/dist/server/index.mjs.map +1 -1
- package/dist/types-BUAlgqqh.d.ts +39 -0
- package/dist/{types-DluCaP1I.d.ts → types-Bl61ob-7.d.mts} +19 -2
- package/dist/{types-lQVA8d_P.d.mts → types-Bl61ob-7.d.ts} +19 -2
- package/dist/types-iVdVY7ba.d.mts +39 -0
- package/dist/useSocket-Cn7fB_B1.d.mts +25 -0
- package/dist/useSocket-DzMKRKCA.d.ts +25 -0
- package/dist/user.fields-CbdObSmS.d.mts +18 -0
- package/dist/user.fields-CbdObSmS.d.ts +18 -0
- package/dist/utils/index.d.mts +1 -2
- package/dist/utils/index.d.ts +1 -2
- package/package.json +6 -3
- package/src/atoms/index.ts +1 -0
- package/src/atoms/recentPagesAtom.ts +10 -0
- package/src/client/context/JsonApiContext.ts +61 -0
- package/src/client/context/JsonApiProvider.tsx +27 -0
- package/src/client/context/index.ts +2 -0
- package/src/client/hooks/index.ts +3 -0
- package/src/client/hooks/useJsonApiGet.ts +188 -0
- package/src/client/hooks/useJsonApiMutation.ts +193 -0
- package/src/client/hooks/useRehydration.ts +47 -0
- package/src/client/index.ts +24 -0
- package/src/client/request.ts +97 -0
- package/src/client/token.ts +10 -0
- package/src/components/containers/PageContainer.tsx +15 -0
- package/src/components/containers/ReactMarkdownContainer.tsx +119 -0
- package/src/components/containers/TabsContainer.tsx +93 -0
- package/src/components/containers/index.ts +3 -0
- package/src/components/contents/AttributeElement.tsx +20 -0
- package/src/components/contents/index.ts +1 -0
- package/src/components/details/AllowedUsersDetails.tsx +23 -0
- package/src/components/details/index.ts +1 -0
- package/src/components/editors/BlockNoteDiffInlineContent.tsx +152 -0
- package/src/components/editors/BlockNoteEditor.tsx +404 -0
- package/src/components/editors/BlockNoteEditorContainer.tsx +13 -0
- package/src/components/editors/BlockNoteEditorFormattingToolbar.tsx +38 -0
- package/src/components/editors/index.ts +1 -0
- package/src/components/errors/ErrorDetails.tsx +41 -0
- package/src/components/errors/errorToast.ts +9 -0
- package/src/components/errors/index.ts +2 -0
- package/src/components/forms/CommonAssociationForm.tsx +162 -0
- package/src/components/forms/CommonDeleter.tsx +94 -0
- package/src/components/forms/CommonEditorButtons.tsx +30 -0
- package/src/components/forms/CommonEditorHeader.tsx +35 -0
- package/src/components/forms/CommonEditorTrigger.tsx +26 -0
- package/src/components/forms/DatePickerPopover.tsx +219 -0
- package/src/components/forms/DateRangeSelector.tsx +110 -0
- package/src/components/forms/FileUploader.tsx +324 -0
- package/src/components/forms/FormCheckbox.tsx +66 -0
- package/src/components/forms/FormContainerGeneric.tsx +39 -0
- package/src/components/forms/FormDate.tsx +247 -0
- package/src/components/forms/FormDateTime.tsx +231 -0
- package/src/components/forms/FormInput.tsx +110 -0
- package/src/components/forms/FormPassword.tsx +54 -0
- package/src/components/forms/FormPlaceAutocomplete.tsx +286 -0
- package/src/components/forms/FormSelect.tsx +72 -0
- package/src/components/forms/FormSlider.tsx +51 -0
- package/src/components/forms/FormSwitch.tsx +25 -0
- package/src/components/forms/FormTextarea.tsx +44 -0
- package/src/components/forms/MultiFileUploader.tsx +107 -0
- package/src/components/forms/PasswordInput.tsx +47 -0
- package/src/components/forms/index.ts +22 -0
- package/src/components/index.ts +16 -0
- package/src/components/navigations/Breadcrumb.tsx +83 -0
- package/src/components/navigations/ContentTitle.tsx +39 -0
- package/src/components/navigations/Header.tsx +27 -0
- package/src/components/navigations/ModeToggleSwitch.tsx +25 -0
- package/src/components/navigations/PageSection.tsx +64 -0
- package/src/components/navigations/RecentPagesNavigator.tsx +52 -0
- package/src/components/navigations/index.ts +6 -0
- package/src/components/pages/PageContainerContentDetails.tsx +76 -0
- package/src/components/pages/PageContentContainer.tsx +31 -0
- package/src/components/pages/index.ts +2 -0
- package/src/components/tables/ContentListTable.tsx +166 -0
- package/src/components/tables/ContentTableSearch.tsx +105 -0
- package/src/components/tables/cells/cell.component.tsx +18 -0
- package/src/components/tables/cells/cell.date.tsx +16 -0
- package/src/components/tables/cells/cell.id.tsx +27 -0
- package/src/components/tables/cells/cell.link.tsx +18 -0
- package/src/components/tables/cells/cell.text.tsx +12 -0
- package/src/components/tables/cells/cell.url.tsx +13 -0
- package/src/components/tables/cells/index.ts +5 -0
- package/src/components/tables/index.ts +3 -0
- package/src/contexts/CommonContext.tsx +52 -0
- package/src/contexts/SharedContext.tsx +37 -0
- package/src/contexts/SocketContext.tsx +65 -0
- package/src/contexts/index.ts +7 -0
- package/src/core/abstracts/AbstractApiData.ts +138 -0
- package/src/core/abstracts/AbstractService.ts +263 -0
- package/src/core/abstracts/index.ts +2 -0
- package/src/core/endpoint/EndpointCreator.ts +97 -0
- package/src/core/endpoint/index.ts +1 -0
- package/src/core/factories/JsonApiDataFactory.ts +12 -0
- package/src/core/factories/RehydrationFactory.ts +30 -0
- package/src/core/factories/index.ts +2 -0
- package/src/core/fields/FieldSelector.ts +15 -0
- package/src/core/fields/index.ts +1 -0
- package/src/core/index.ts +20 -0
- package/src/core/interfaces/ApiData.ts +8 -0
- package/src/core/interfaces/ApiDataInterface.ts +15 -0
- package/src/core/interfaces/ApiRequestDataTypeInterface.ts +14 -0
- package/src/core/interfaces/ApiResponseInterface.ts +17 -0
- package/src/core/interfaces/JsonApiHydratedDataInterface.ts +5 -0
- package/src/core/interfaces/index.ts +5 -0
- package/{dist/chunk-DO2HLAZO.js → src/core/registry/DataClassRegistry.ts} +20 -17
- package/src/core/registry/ModuleRegistrar.ts +43 -0
- package/src/core/registry/ModuleRegistry.ts +64 -0
- package/src/core/registry/index.ts +3 -0
- package/src/core/utils/index.ts +2 -0
- package/src/core/utils/rehydrate.ts +24 -0
- package/src/core/utils/translateResponse.ts +125 -0
- package/src/features/auth/auth.module.ts +9 -0
- package/src/features/auth/components/containers/AuthContainer.tsx +32 -0
- package/src/features/auth/components/containers/index.ts +1 -0
- package/src/features/auth/components/details/LandingComponent.tsx +39 -0
- package/src/features/auth/components/details/index.ts +1 -0
- package/src/features/auth/components/forms/AcceptInvitation.tsx +136 -0
- package/src/features/auth/components/forms/ActivateAccount.tsx +75 -0
- package/src/features/auth/components/forms/Cookies.tsx +32 -0
- package/src/features/auth/components/forms/ForgotPassword.tsx +108 -0
- package/src/features/auth/components/forms/Login.tsx +118 -0
- package/src/features/auth/components/forms/Logout.tsx +19 -0
- package/src/features/auth/components/forms/RefreshUser.tsx +39 -0
- package/src/features/auth/components/forms/Register.tsx +150 -0
- package/src/features/auth/components/forms/ResetPassword.tsx +126 -0
- package/src/features/auth/components/forms/index.ts +9 -0
- package/src/features/auth/components/index.ts +3 -0
- package/src/features/auth/config.ts +57 -0
- package/src/features/auth/contexts/AuthContext.tsx +77 -0
- package/src/features/auth/contexts/index.ts +1 -0
- package/src/features/auth/data/auth.interface.ts +31 -0
- package/src/features/auth/data/auth.service.ts +159 -0
- package/src/features/auth/data/auth.ts +54 -0
- package/src/features/auth/data/index.ts +3 -0
- package/src/features/auth/enums/AuthComponent.ts +9 -0
- package/src/features/auth/enums/index.ts +1 -0
- package/src/features/auth/index.ts +4 -0
- package/src/features/auth/utils/AuthCookies.ts +134 -0
- package/src/features/auth/utils/index.ts +1 -0
- package/src/features/company/company.module.ts +10 -0
- package/src/features/company/components/containers/AdminCompanyContainer.tsx +26 -0
- package/src/features/company/components/containers/CompanyContainer.tsx +17 -0
- package/src/features/company/components/containers/index.ts +2 -0
- package/src/features/company/components/details/CompanyDetails.tsx +26 -0
- package/src/features/company/components/details/index.ts +1 -0
- package/src/features/company/components/forms/CompanyConfigurationEditor.tsx +151 -0
- package/src/features/company/components/forms/CompanyConfigurationSecurityForm.tsx +97 -0
- package/src/features/company/components/forms/CompanyDeleter.tsx +121 -0
- package/src/features/company/components/forms/CompanyEditor.tsx +245 -0
- package/src/features/company/components/forms/CompanyLicense.tsx +213 -0
- package/src/features/company/components/forms/index.ts +5 -0
- package/src/features/company/components/index.ts +4 -0
- package/src/features/company/components/lists/CompaniesList.tsx +31 -0
- package/src/features/company/components/lists/index.ts +1 -0
- package/src/features/company/contexts/CompanyContext.tsx +99 -0
- package/src/features/company/contexts/index.ts +0 -0
- package/src/features/company/data/company.fields.ts +6 -0
- package/src/features/company/data/company.interface.ts +28 -0
- package/src/features/company/data/company.service.ts +73 -0
- package/src/features/company/data/company.ts +104 -0
- package/src/features/company/data/index.ts +4 -0
- package/src/features/company/hooks/index.ts +1 -0
- package/src/features/company/hooks/useCompanyTableStructure.tsx +82 -0
- package/src/features/company/index.ts +2 -0
- package/src/features/content/content.module.ts +20 -0
- package/src/features/content/data/content.fields.ts +13 -0
- package/src/features/content/data/content.interface.ts +23 -0
- package/src/features/content/data/content.service.ts +75 -0
- package/src/features/content/data/content.ts +85 -0
- package/src/features/content/data/index.ts +4 -0
- package/src/features/content/index.ts +2 -0
- package/src/features/feature/components/forms/FormFeatures.tsx +150 -0
- package/src/features/feature/components/forms/index.ts +1 -0
- package/src/features/feature/components/index.ts +1 -0
- package/src/features/feature/data/feature.interface.ts +9 -0
- package/src/features/feature/data/feature.service.ts +19 -0
- package/src/features/feature/data/feature.ts +33 -0
- package/src/features/feature/data/index.ts +3 -0
- package/src/features/feature/feature.module.ts +10 -0
- package/src/features/feature/index.ts +2 -0
- package/src/features/index.ts +12 -0
- package/src/features/module/data/index.ts +2 -0
- package/src/features/module/data/module.interface.ts +12 -0
- package/src/features/module/data/module.ts +42 -0
- package/src/features/module/index.ts +2 -0
- package/src/features/module/module.module.ts +10 -0
- package/src/features/notification/components/common/NotificationErrorBoundary.tsx +51 -0
- package/src/features/notification/components/common/index.ts +1 -0
- package/src/features/notification/components/containers/NotificationsListContainer.tsx +44 -0
- package/src/features/notification/components/containers/index.ts +1 -0
- package/src/features/notification/components/index.ts +5 -0
- package/src/features/notification/components/lists/NotificationsList.tsx +129 -0
- package/src/features/notification/components/lists/index.ts +1 -0
- package/src/features/notification/components/modals/NotificationModal.tsx +220 -0
- package/src/features/notification/components/modals/index.ts +1 -0
- package/src/features/notification/components/notifications/Notification.tsx +120 -0
- package/src/features/notification/components/notifications/PushNotificationProvider.tsx +9 -0
- package/src/features/notification/components/notifications/index.ts +2 -0
- package/src/features/notification/contexts/NotificationContext.tsx +187 -0
- package/src/features/notification/contexts/index.ts +1 -0
- package/src/features/notification/data/index.ts +4 -0
- package/src/features/notification/data/notification.fields.ts +8 -0
- package/src/features/notification/data/notification.interface.ts +14 -0
- package/src/features/notification/data/notification.service.ts +34 -0
- package/src/features/notification/data/notification.ts +51 -0
- package/src/features/notification/index.ts +2 -0
- package/src/features/notification/notification.module.ts +10 -0
- package/src/features/push/data/index.ts +3 -0
- package/src/features/push/data/push.interface.ts +8 -0
- package/src/features/push/data/push.service.ts +17 -0
- package/src/features/push/data/push.ts +18 -0
- package/src/features/push/index.ts +2 -0
- package/src/features/push/push.module.ts +10 -0
- package/src/features/role/components/containers/RoleContainer.tsx +18 -0
- package/src/features/role/components/containers/index.ts +1 -0
- package/src/features/role/components/details/RoleDetails.tsx +21 -0
- package/src/features/role/components/details/index.ts +1 -0
- package/src/features/role/components/forms/FormRoles.tsx +82 -0
- package/src/features/role/components/forms/RemoveUserFromRole.tsx +108 -0
- package/src/features/role/components/forms/UserRoleAdd.tsx +128 -0
- package/src/features/role/components/forms/index.ts +3 -0
- package/src/features/role/components/index.ts +4 -0
- package/src/features/role/components/lists/RolesList.tsx +27 -0
- package/src/features/role/components/lists/UserRolesList.tsx +31 -0
- package/src/features/role/components/lists/index.ts +2 -0
- package/src/features/role/contexts/RoleContext.tsx +84 -0
- package/src/features/role/contexts/index.ts +1 -0
- package/src/features/role/data/index.ts +4 -0
- package/src/features/role/data/role.fields.ts +8 -0
- package/src/features/role/data/role.interface.ts +16 -0
- package/src/features/role/data/role.service.ts +117 -0
- package/src/features/role/data/role.ts +62 -0
- package/src/features/role/hooks/index.ts +1 -0
- package/src/features/role/hooks/useRoleTableStructure.tsx +72 -0
- package/src/features/role/index.ts +2 -0
- package/src/features/role/role.module.ts +10 -0
- package/src/features/s3/data/index.ts +3 -0
- package/src/features/s3/data/s3.interface.ts +11 -0
- package/src/features/s3/data/s3.service.ts +30 -0
- package/src/features/s3/data/s3.ts +60 -0
- package/src/features/s3/index.ts +2 -0
- package/src/features/s3/s3.module.ts +10 -0
- package/src/features/search/index.ts +1 -0
- package/src/features/search/interfaces/index.ts +1 -0
- package/src/features/search/interfaces/search.result.interface.ts +3 -0
- package/src/features/user/author.module.ts +10 -0
- package/src/features/user/components/containers/UserContainer.tsx +23 -0
- package/src/features/user/components/containers/UserIndexContainer.tsx +12 -0
- package/src/features/user/components/containers/UsersListContainer.tsx +36 -0
- package/src/features/user/components/containers/index.ts +3 -0
- package/src/features/user/components/details/UserDetails.tsx +74 -0
- package/src/features/user/components/details/UserIndexDetails.tsx +28 -0
- package/src/features/user/components/details/index.ts +2 -0
- package/src/features/user/components/forms/RoleUserAdd.tsx +93 -0
- package/src/features/user/components/forms/UserAvatarEditor.tsx +78 -0
- package/src/features/user/components/forms/UserDeleter.tsx +49 -0
- package/src/features/user/components/forms/UserEditor.tsx +319 -0
- package/src/features/user/components/forms/UserMultiSelect.tsx +218 -0
- package/src/features/user/components/forms/UserReactivator.tsx +79 -0
- package/src/features/user/components/forms/UserResentInvitationEmail.tsx +88 -0
- package/src/features/user/components/forms/UserSelector.tsx +185 -0
- package/src/features/user/components/forms/index.ts +8 -0
- package/src/features/user/components/index.ts +5 -0
- package/src/features/user/components/lists/AdminUsersList.tsx +41 -0
- package/src/features/user/components/lists/CompanyUsersList.tsx +44 -0
- package/src/features/user/components/lists/ContributorsList.tsx +41 -0
- package/src/features/user/components/lists/RelevantUsersList.tsx +30 -0
- package/src/features/user/components/lists/RoleUsersList.tsx +31 -0
- package/src/features/user/components/lists/UserListInAdd.tsx +53 -0
- package/src/features/user/components/lists/UsersList.tsx +30 -0
- package/src/features/user/components/lists/UsersListByContentIds.tsx +30 -0
- package/src/features/user/components/lists/index.ts +8 -0
- package/src/features/user/components/widgets/UserAvatar.tsx +86 -0
- package/src/features/user/components/widgets/UserAvatarList.tsx +31 -0
- package/src/features/user/components/widgets/UserSearchPopover.tsx +89 -0
- package/src/features/user/components/widgets/index.ts +1 -0
- package/src/features/user/contexts/CurrentUserContext.tsx +156 -0
- package/src/features/user/contexts/UserContext.tsx +106 -0
- package/src/features/user/contexts/index.ts +2 -0
- package/src/features/user/data/index.ts +4 -0
- package/src/features/user/data/user.fields.ts +8 -0
- package/src/features/user/data/user.interface.ts +41 -0
- package/src/features/user/data/user.service.ts +246 -0
- package/src/features/user/data/user.ts +162 -0
- package/src/features/user/hooks/index.ts +2 -0
- package/src/features/user/hooks/useUserSearch.ts +53 -0
- package/src/features/user/hooks/useUserTableStructure.tsx +115 -0
- package/src/features/user/index.ts +3 -0
- package/src/features/user/user.module.ts +21 -0
- package/src/hooks/TableGeneratorRegistry.ts +53 -0
- package/src/hooks/index.ts +37 -0
- package/src/hooks/types.ts +35 -0
- package/src/hooks/url.rewriter.ts +22 -0
- package/src/hooks/useCustomD3Graph.tsx +707 -0
- package/src/hooks/useDataListRetriever.ts +349 -0
- package/src/hooks/useDebounce.ts +33 -0
- package/src/hooks/useNotificationSync.ts +20 -0
- package/src/hooks/usePageTracker.ts +69 -0
- package/src/hooks/usePageUrlGenerator.ts +50 -0
- package/src/hooks/usePushNotifications.ts +82 -0
- package/src/hooks/useSocket.ts +201 -0
- package/src/hooks/useTableGenerator.ts +20 -0
- package/src/i18n/config.ts +74 -0
- package/src/i18n/index.ts +18 -0
- package/src/index.ts +20 -0
- package/src/interfaces/breadcrumb.item.data.interface.ts +4 -0
- package/src/interfaces/d3.link.interface.ts +8 -0
- package/src/interfaces/d3.node.interface.ts +12 -0
- package/src/interfaces/index.ts +3 -0
- package/src/permissions/check.ts +127 -0
- package/src/permissions/index.ts +2 -0
- package/src/permissions/types.ts +109 -0
- package/src/roles/config.ts +46 -0
- package/src/roles/index.ts +1 -0
- package/src/server/ServerSession.ts +103 -0
- package/src/server/cache.ts +28 -0
- package/src/server/index.ts +4 -0
- package/src/server/request.ts +113 -0
- package/src/server/token.ts +10 -0
- package/src/shadcnui/custom/kanban.tsx +1001 -0
- package/src/shadcnui/custom/link.tsx +18 -0
- package/src/shadcnui/custom/multi-select.tsx +382 -0
- package/src/shadcnui/index.ts +49 -0
- package/src/shadcnui/ui/accordion.tsx +52 -0
- package/src/shadcnui/ui/alert-dialog.tsx +141 -0
- package/src/shadcnui/ui/alert.tsx +43 -0
- package/src/shadcnui/ui/avatar.tsx +50 -0
- package/src/shadcnui/ui/badge.tsx +40 -0
- package/src/shadcnui/ui/breadcrumb.tsx +115 -0
- package/src/shadcnui/ui/button.tsx +51 -0
- package/src/shadcnui/ui/calendar.tsx +73 -0
- package/src/shadcnui/ui/card.tsx +43 -0
- package/src/shadcnui/ui/carousel.tsx +225 -0
- package/src/shadcnui/ui/chart.tsx +320 -0
- package/src/shadcnui/ui/checkbox.tsx +29 -0
- package/src/shadcnui/ui/collapsible.tsx +11 -0
- package/src/shadcnui/ui/command.tsx +155 -0
- package/src/shadcnui/ui/context-menu.tsx +179 -0
- package/src/shadcnui/ui/dialog.tsx +96 -0
- package/src/shadcnui/ui/drawer.tsx +89 -0
- package/src/shadcnui/ui/dropdown-menu.tsx +205 -0
- package/src/shadcnui/ui/form.tsx +138 -0
- package/src/shadcnui/ui/hover-card.tsx +29 -0
- package/src/shadcnui/ui/input.tsx +21 -0
- package/src/shadcnui/ui/label.tsx +26 -0
- package/src/shadcnui/ui/navigation-menu.tsx +168 -0
- package/src/shadcnui/ui/popover.tsx +33 -0
- package/src/shadcnui/ui/progress.tsx +25 -0
- package/src/shadcnui/ui/radio-group.tsx +37 -0
- package/src/shadcnui/ui/resizable.tsx +47 -0
- package/src/shadcnui/ui/scroll-area.tsx +40 -0
- package/src/shadcnui/ui/select.tsx +164 -0
- package/src/shadcnui/ui/separator.tsx +28 -0
- package/src/shadcnui/ui/sheet.tsx +139 -0
- package/src/shadcnui/ui/sidebar.tsx +677 -0
- package/src/shadcnui/ui/skeleton.tsx +13 -0
- package/src/shadcnui/ui/slider.tsx +25 -0
- package/src/shadcnui/ui/sonner.tsx +25 -0
- package/src/shadcnui/ui/switch.tsx +31 -0
- package/src/shadcnui/ui/table.tsx +120 -0
- package/src/shadcnui/ui/tabs.tsx +55 -0
- package/src/shadcnui/ui/textarea.tsx +24 -0
- package/src/shadcnui/ui/toggle.tsx +39 -0
- package/src/shadcnui/ui/tooltip.tsx +61 -0
- package/src/unified/JsonApiRequest.ts +348 -0
- package/src/unified/index.ts +1 -0
- package/src/utils/blocknote-diff.util.ts +815 -0
- package/src/utils/blocknote-word-diff-renderer.util.ts +413 -0
- package/src/utils/cn.ts +6 -0
- package/src/utils/compose-refs.ts +61 -0
- package/src/utils/date-formatter.ts +53 -0
- package/src/utils/exists.ts +7 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/schemas/entity.object.schema.ts +8 -0
- package/src/utils/schemas/index.ts +2 -0
- package/src/utils/schemas/user.object.schema.ts +9 -0
- package/src/utils/table-options.ts +67 -0
- package/src/utils/use-mobile.tsx +21 -0
- package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.mts +0 -20
- package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.ts +0 -20
- package/dist/BlockNoteEditor-VFWG6LXI.js.map +0 -1
- package/dist/JsonApiRequest-S3ICLM7B.mjs +0 -20
- package/dist/JsonApiRequest-ZZLSP26T.js +0 -20
- package/dist/JsonApiRequest-ZZLSP26T.js.map +0 -1
- package/dist/chunk-366S2JCC.mjs +0 -31
- package/dist/chunk-366S2JCC.mjs.map +0 -1
- package/dist/chunk-5W6AKZE6.mjs +0 -131
- package/dist/chunk-5W6AKZE6.mjs.map +0 -1
- package/dist/chunk-A3J3AAYM.mjs +0 -97
- package/dist/chunk-A3J3AAYM.mjs.map +0 -1
- package/dist/chunk-AWONBQQP.js +0 -97
- package/dist/chunk-AWONBQQP.js.map +0 -1
- package/dist/chunk-CXQOWQSY.js.map +0 -1
- package/dist/chunk-DKKMWBP4.mjs +0 -1
- package/dist/chunk-DKKMWBP4.mjs.map +0 -1
- package/dist/chunk-DO2HLAZO.js.map +0 -1
- package/dist/chunk-DZXDB3K2.mjs +0 -17
- package/dist/chunk-DZXDB3K2.mjs.map +0 -1
- package/dist/chunk-ECDTZBYO.mjs.map +0 -1
- package/dist/chunk-FY4SXJGU.js +0 -806
- package/dist/chunk-FY4SXJGU.js.map +0 -1
- package/dist/chunk-GYWPEPOH.mjs.map +0 -1
- package/dist/chunk-H6FMOA6B.js +0 -1
- package/dist/chunk-H6FMOA6B.js.map +0 -1
- package/dist/chunk-I2REI7OA.js.map +0 -1
- package/dist/chunk-J4Q36PMP.js +0 -31
- package/dist/chunk-J4Q36PMP.js.map +0 -1
- package/dist/chunk-L6EQEAXU.mjs.map +0 -1
- package/dist/chunk-MFO27OHB.mjs +0 -48
- package/dist/chunk-MFO27OHB.mjs.map +0 -1
- package/dist/chunk-RAF7PNLG.js +0 -131
- package/dist/chunk-RAF7PNLG.js.map +0 -1
- package/dist/chunk-RUR22SVM.js +0 -17
- package/dist/chunk-RUR22SVM.js.map +0 -1
- package/dist/chunk-TEGF6ZWG.js.map +0 -1
- package/dist/chunk-TMVHSY3Y.js.map +0 -1
- package/dist/chunk-V2JJPI7N.js.map +0 -1
- package/dist/chunk-WWWMJZEF.mjs +0 -806
- package/dist/chunk-WWWMJZEF.mjs.map +0 -1
- package/dist/chunk-X4BIHJ2B.mjs.map +0 -1
- package/dist/chunk-YDVTFM7X.mjs.map +0 -1
- /package/dist/{JsonApiRequest-S3ICLM7B.mjs.map → JsonApiRequest-O7BGUMFO.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/features/company/contexts/CompanyContext.tsx","../src/hooks/TableGeneratorRegistry.ts","../src/hooks/url.rewriter.ts","../src/hooks/usePageUrlGenerator.ts","../src/hooks/useDataListRetriever.ts","../src/hooks/useDebounce.ts","../src/hooks/useTableGenerator.ts","../src/hooks/useCustomD3Graph.tsx","../src/hooks/useNotificationSync.ts","../src/hooks/usePageTracker.ts","../src/hooks/usePushNotifications.ts","../src/hooks/useSocket.ts","../src/features/user/contexts/CurrentUserContext.tsx","../src/features/user/contexts/UserContext.tsx","../src/features/user/components/forms/RoleUserAdd.tsx","../src/components/navigations/Breadcrumb.tsx","../src/components/navigations/ContentTitle.tsx","../src/contexts/SharedContext.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/features/user/components/containers/UserContainer.tsx","../src/features/user/components/details/UserDetails.tsx","../src/features/user/components/widgets/UserAvatar.tsx","../src/features/user/components/details/UserIndexDetails.tsx","../src/features/user/components/containers/UserIndexContainer.tsx","../src/features/user/components/containers/UsersListContainer.tsx","../src/features/user/components/lists/AdminUsersList.tsx","../src/features/user/components/lists/CompanyUsersList.tsx","../src/features/user/components/lists/ContributorsList.tsx","../src/features/user/components/lists/RelevantUsersList.tsx","../src/features/user/components/lists/RoleUsersList.tsx","../src/features/user/components/lists/UserListInAdd.tsx","../src/features/user/components/lists/UsersList.tsx","../src/features/user/components/lists/UsersListByContentIds.tsx","../src/components/editors/BlockNoteEditorContainer.tsx","../src/components/errors/ErrorDetails.tsx","../src/components/errors/errorToast.ts","../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/forms/MultiFileUploader.tsx","../src/features/feature/components/forms/FormFeatures.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/client/context/JsonApiContext.ts","../src/client/context/JsonApiProvider.tsx","../src/client/hooks/useJsonApiGet.ts","../src/client/hooks/useJsonApiMutation.ts","../src/client/hooks/useRehydration.ts","../src/features/company/hooks/useCompanyTableStructure.tsx","../src/features/role/hooks/useRoleTableStructure.tsx","../src/features/user/hooks/useUserSearch.ts","../src/features/user/hooks/useUserTableStructure.tsx","../src/client/index.ts","../src/components/tables/ContentListTable.tsx","../src/components/tables/ContentTableSearch.tsx","../src/features/auth/components/containers/AuthContainer.tsx","../src/features/auth/contexts/AuthContext.tsx","../src/features/auth/components/forms/Register.tsx","../src/features/auth/components/details/LandingComponent.tsx","../src/features/auth/components/forms/AcceptInvitation.tsx","../src/features/auth/components/forms/ActivateAccount.tsx","../src/features/auth/components/forms/Cookies.tsx","../src/features/auth/components/forms/ForgotPassword.tsx","../src/features/auth/components/forms/Login.tsx","../src/features/auth/components/forms/Logout.tsx","../src/features/auth/components/forms/RefreshUser.tsx","../src/features/auth/components/forms/ResetPassword.tsx","../src/features/company/components/details/CompanyDetails.tsx","../src/features/company/components/containers/AdminCompanyContainer.tsx","../src/features/company/components/containers/CompanyContainer.tsx","../src/features/company/components/forms/CompanyConfigurationEditor.tsx","../src/features/company/components/forms/CompanyConfigurationSecurityForm.tsx","../src/features/company/components/forms/CompanyDeleter.tsx","../src/features/company/components/forms/CompanyEditor.tsx","../src/features/company/components/forms/CompanyLicense.tsx","../src/features/company/components/lists/CompaniesList.tsx","../src/features/notification/components/common/NotificationErrorBoundary.tsx","../src/features/notification/components/containers/NotificationsListContainer.tsx","../src/features/notification/contexts/NotificationContext.tsx","../src/features/notification/components/notifications/Notification.tsx","../src/features/notification/components/lists/NotificationsList.tsx","../src/features/notification/components/modals/NotificationModal.tsx","../src/features/notification/components/notifications/PushNotificationProvider.tsx","../src/features/role/contexts/RoleContext.tsx","../src/features/role/components/details/RoleDetails.tsx","../src/features/role/components/containers/RoleContainer.tsx","../src/features/role/components/forms/FormRoles.tsx","../src/features/role/components/forms/RemoveUserFromRole.tsx","../src/features/role/components/forms/UserRoleAdd.tsx","../src/features/role/components/lists/RolesList.tsx","../src/features/role/components/lists/UserRolesList.tsx","../src/features/user/components/forms/UserAvatarEditor.tsx","../src/features/user/components/forms/UserDeleter.tsx","../src/features/user/components/forms/UserEditor.tsx","../src/features/user/components/forms/UserMultiSelect.tsx","../src/features/user/components/forms/UserReactivator.tsx","../src/features/user/components/forms/UserResentInvitationEmail.tsx","../src/features/user/components/forms/UserSelector.tsx","../src/contexts/CommonContext.tsx","../src/contexts/SocketContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { createContext, ReactNode, useContext, useState } from \"react\";\nimport { SharedProvider } from \"../../../contexts\";\nimport { JsonApiHydratedDataInterface, Modules, rehydrate } from \"../../../core\";\nimport { usePageUrlGenerator } from \"../../../hooks\";\nimport { BreadcrumbItemData } from \"../../../interfaces\";\nimport { Action } from \"../../../permissions\";\nimport { getRoleId } from \"../../../roles\";\nimport { UserInterface } from \"../../user\";\nimport { useCurrentUserContext } from \"../../user/contexts\";\nimport { CompanyConfigurationEditor, CompanyDeleter, CompanyEditor } from \"../components\";\nimport { CompanyInterface } from \"../data\";\n\ninterface CompanyContextType {\n company: CompanyInterface | undefined;\n setCompany: (value: CompanyInterface | undefined) => void;\n}\n\nconst CompanyContext = createContext<CompanyContextType | undefined>(undefined);\n\ntype CompanyProviderProps = {\n children: ReactNode;\n dehydratedCompany?: JsonApiHydratedDataInterface;\n};\n\nconst defaultContextValue: CompanyContextType = {\n company: undefined,\n setCompany: () => {},\n};\n\nexport const CompanyProvider = ({ children, dehydratedCompany }: CompanyProviderProps) => {\n const generateUrl = usePageUrlGenerator();\n const t = useTranslations();\n const { hasPermissionToModule, hasRole } = useCurrentUserContext<UserInterface>();\n\n const [company, setCompany] = useState<CompanyInterface | undefined>(\n dehydratedCompany ? rehydrate<CompanyInterface>(Modules.Company, dehydratedCompany) : undefined,\n );\n\n const breadcrumb = () => {\n const response: BreadcrumbItemData[] = [];\n\n if (company)\n response.push({\n name: company.name,\n href: generateUrl({ page: Modules.Company }),\n });\n\n return response;\n };\n\n const title = () => {\n const response: any = {\n type: t(`types.companies`, { count: company ? 1 : 2 }),\n };\n\n if (company) response.element = company.name;\n\n const functions: ReactNode[] = [];\n\n if (\n company &&\n hasRole(getRoleId().Administrator) &&\n hasPermissionToModule({ module: Modules.Company, action: Action.Delete })\n )\n functions.push(<CompanyDeleter key=\"companyDeleter\" company={company} />);\n\n if (\n hasRole(getRoleId().Administrator) ||\n hasPermissionToModule({ module: Modules.Company, action: Action.Update })\n ) {\n if (company) functions.push(<CompanyConfigurationEditor key=\"companyConfigurationEditor\" company={company} />);\n functions.push(<CompanyEditor key=\"companyEditor\" company={company} propagateChanges={setCompany} />);\n }\n\n if (functions.length > 0) response.functions = functions;\n\n return response;\n };\n\n return (\n <SharedProvider value={{ breadcrumbs: breadcrumb(), title: title() }}>\n <CompanyContext.Provider\n value={{\n company: company,\n setCompany: setCompany,\n }}\n >\n {children}\n </CompanyContext.Provider>\n </SharedProvider>\n );\n};\n\nexport const useCompanyContext = (): CompanyContextType => {\n return useContext(CompanyContext) ?? defaultContextValue;\n};\n","\"use client\";\n\nimport { UseTableStructureHook, UseTableStructureHookParams, UseTableStructureHookReturn } from \"./types\";\n\ntype TableGeneratorHook = UseTableStructureHook<any, any>;\n\nexport class TableGeneratorRegistry {\n private static instance: TableGeneratorRegistry;\n private registry = new Map<string, TableGeneratorHook>();\n\n private constructor() {}\n\n public static getInstance(): TableGeneratorRegistry {\n if (!TableGeneratorRegistry.instance) {\n TableGeneratorRegistry.instance = new TableGeneratorRegistry();\n }\n return TableGeneratorRegistry.instance;\n }\n\n public register<T, U>(type: string, hook: UseTableStructureHook<T, U>): void {\n if (!this.registry.has(type)) this.registry.set(type, hook as TableGeneratorHook);\n }\n\n public get<T, U>(type: string, params: UseTableStructureHookParams<T, U>): UseTableStructureHookReturn<T> {\n const hook = this.registry.get(type);\n if (!hook) {\n throw new Error(\n `Table generator for type \"${type}\" is not registered. Available types: ${Array.from(this.registry.keys()).join(\n \", \",\n )}`,\n );\n }\n return hook(params);\n }\n\n public isRegistered(type: string): boolean {\n return this.registry.has(type);\n }\n\n public getRegisteredTypes(): string[] {\n return Array.from(this.registry.keys());\n }\n\n public unregister(type: string): boolean {\n return this.registry.delete(type);\n }\n\n public clear(): void {\n this.registry.clear();\n }\n}\n\nexport const tableGeneratorRegistry = TableGeneratorRegistry.getInstance();\n","\"use client\";\n\nimport { useLocale } from \"next-intl\";\nimport { useCallback } from \"react\";\nimport { ModuleWithPermissions } from \"../permissions\";\nimport { usePageUrlGenerator } from \"./usePageUrlGenerator\";\n\nexport function useUrlRewriter() {\n const locale = useLocale();\n const generateUrl = usePageUrlGenerator();\n\n return useCallback(\n (params: { page: ModuleWithPermissions | string; id?: string; childPage?: string }): void => {\n window.history.replaceState(\n null,\n \"\",\n generateUrl({ page: params.page, id: params.id, childPage: params.childPage, language: locale }),\n );\n },\n [locale, generateUrl],\n );\n}\n","import { PageUrl } from \"../permissions/types\";\n\nexport function usePageUrlGenerator(): (params: {\n page?: PageUrl | string;\n id?: string;\n childPage?: PageUrl | string;\n childId?: string;\n additionalParameters?: { [key: string]: string | string[] | undefined };\n language?: string;\n}) => string {\n const generateUrl = (params: {\n page?: PageUrl | string;\n id?: string;\n childPage?: PageUrl | string;\n childId?: string;\n additionalParameters?: { [key: string]: string | string[] | undefined };\n language?: string;\n }): string => {\n if (!params.page) return \"/\";\n\n const pathParams: string[] = [\n `${params.language ? `/${params.language}` : \"\"}${typeof params.page === \"string\" ? params.page : params.page.pageUrl}`,\n ];\n\n if (params.id) {\n pathParams.push(params.id);\n if (params.childPage) {\n pathParams.push(typeof params.childPage === \"string\" ? params.childPage : (params.childPage.pageUrl ?? \"\"));\n if (params.childId) {\n pathParams.push(params.childId);\n }\n }\n }\n const response = pathParams.join(`/`);\n\n if (params.additionalParameters) {\n const searchParams = new URLSearchParams();\n for (const key in params.additionalParameters) {\n if (params.additionalParameters[key]) {\n searchParams.append(key, params.additionalParameters[key] as string);\n }\n }\n return `${response}?${searchParams.toString()}`;\n }\n\n return response;\n };\n\n return generateUrl;\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { AbstractService } from \"../core\";\n\nexport type PageInfo = {\n startItem: number;\n endItem: number;\n pageSize: number;\n};\n\nexport type DataListRetriever<T> = {\n ready?: boolean;\n setReady: (state: boolean) => void;\n isLoaded: boolean;\n data: T[] | undefined;\n next?: (onlyNewRecords?: boolean) => Promise<void>;\n previous?: (onlyNewRecords?: boolean) => Promise<void>;\n search: (search: string) => Promise<void>;\n refresh: () => Promise<void>;\n addAdditionalParameter: (key: string, value: any | null) => void;\n removeAdditionalParameter: (key: string) => void;\n setRefreshedElement: (element: T) => void;\n removeElement: (element: T) => void;\n isSearch: boolean;\n pageInfo?: PageInfo;\n};\n\nexport function useDataListRetriever<T>(params: {\n ready?: boolean;\n retriever: (params: any) => Promise<T[]>;\n retrieverParams?: any;\n search?: string;\n addAdditionalParameter?: (key: string, value: any | null) => void;\n requiresSearch?: boolean;\n module: any;\n}): DataListRetriever<T> {\n const [data, setData] = useState<T[] | undefined>(undefined);\n const [nextPage, setNextPage] = useState<string | undefined>(undefined);\n const [previousPage, setPreviousPage] = useState<string | undefined>(undefined);\n const [isLoaded, setIsLoaded] = useState(false);\n const [ready, setReady] = useState<boolean>(params.ready ?? true);\n const searchTermRef = useRef<string>(\"\");\n const additionalParamsRef = useRef<any>({});\n const requestIdRef = useRef(0);\n const abortControllerRef = useRef<AbortController | null>(null);\n const isFetchingRef = useRef(false);\n\n const resolvedType = params.module;\n const resolvedService = AbstractService; // We'll just use AbstractService directly for pagination\n\n // Helper to parse page params from pagination URLs\n const parsePageParams = useCallback((url: string | undefined): { offset: number; size: number } | null => {\n if (!url) return null;\n try {\n const urlObj = new URL(url);\n const offset = parseInt(urlObj.searchParams.get(\"page[offset]\") || \"0\", 10);\n const size = parseInt(urlObj.searchParams.get(\"page[size]\") || \"25\", 10);\n return { offset, size };\n } catch {\n return null;\n }\n }, []);\n\n // Helper to adjust pagination URL offset (used when removing elements)\n const adjustPaginationUrl = useCallback((url: string | undefined, delta: number): string | undefined => {\n if (!url) return undefined;\n try {\n const urlObj = new URL(url);\n const currentOffset = parseInt(urlObj.searchParams.get(\"page[offset]\") || \"0\", 10);\n const newOffset = Math.max(0, currentOffset + delta);\n urlObj.searchParams.set(\"page[offset]\", String(newOffset));\n return urlObj.toString();\n } catch {\n return url;\n }\n }, []);\n\n // Calculate pageInfo from pagination URLs and current data\n const pageInfo = useMemo((): PageInfo | undefined => {\n if (!data || data.length === 0) return undefined;\n\n // Try to determine current offset and page size from pagination URLs\n const nextParams = parsePageParams(nextPage);\n const prevParams = parsePageParams(previousPage);\n\n let currentOffset = 0;\n let pageSize = 25; // default\n\n if (nextParams) {\n // If we have a next page, current offset = next offset - page size\n pageSize = nextParams.size;\n currentOffset = Math.max(0, nextParams.offset - pageSize);\n } else if (prevParams) {\n // If we only have a previous page (we're on the last page)\n pageSize = prevParams.size;\n currentOffset = prevParams.offset + pageSize;\n }\n\n const startItem = currentOffset + 1;\n const endItem = currentOffset + data.length;\n\n return { startItem, endItem, pageSize };\n }, [data, nextPage, previousPage, parsePageParams]);\n\n const stableParams = useMemo(\n () => ({\n service: resolvedService,\n type: resolvedType,\n retriever: params.retriever,\n retrieverParams: params.retrieverParams,\n requiresSearch: params.requiresSearch,\n }),\n [resolvedService, resolvedType, params.retriever, params.retrieverParams, params.requiresSearch],\n );\n\n const fetchData = useCallback(\n async (fetchParams?: { isRefine?: boolean; isRefresh?: boolean; callNext?: boolean; callPrevious?: boolean }) => {\n if (ready === false) {\n return;\n }\n\n // Prevent concurrent fetches (unless it's a pagination call)\n if (isFetchingRef.current && !fetchParams?.callNext && !fetchParams?.callPrevious) {\n return;\n }\n\n const thisRequestId = ++requestIdRef.current;\n isFetchingRef.current = true;\n\n if (stableParams.requiresSearch === true && fetchParams?.isRefine !== true && fetchParams?.isRefresh !== true)\n return;\n\n if (\n !nextPage &&\n !previousPage &&\n isLoaded &&\n fetchParams?.callNext !== true &&\n fetchParams?.callPrevious !== true &&\n params.search === searchTermRef.current\n )\n return;\n\n const currentSearchTerm = searchTermRef.current;\n\n setIsLoaded(false);\n\n try {\n let response: T[];\n const nextRef = { next: undefined };\n const previousRef = { previous: undefined };\n const selfRef = { self: undefined };\n\n if (nextPage && fetchParams?.callNext && fetchParams?.isRefine !== true) {\n const ServiceClass = stableParams.service as typeof AbstractService;\n\n response = await ServiceClass.next<T[]>({\n type: stableParams.type,\n endpoint: nextPage,\n next: nextRef,\n previous: previousRef,\n self: selfRef,\n });\n } else if (previousPage && fetchParams?.callPrevious && fetchParams?.isRefine !== true) {\n const ServiceClass = stableParams.service as typeof AbstractService;\n\n response = await ServiceClass.previous<T[]>({\n type: stableParams.type,\n endpoint: previousPage,\n next: nextRef,\n previous: previousRef,\n self: selfRef,\n });\n } else {\n let retrieverParams = stableParams.retrieverParams ? { ...stableParams.retrieverParams } : {};\n\n retrieverParams = {\n ...retrieverParams,\n ...additionalParamsRef.current,\n };\n\n retrieverParams.search = currentSearchTerm;\n retrieverParams.next = nextRef;\n retrieverParams.previous = previousRef;\n retrieverParams.self = selfRef;\n\n response = await stableParams.retriever(retrieverParams);\n }\n\n // Only update state if this is still the latest request and wasn't aborted\n if (thisRequestId === requestIdRef.current && !abortControllerRef.current?.signal.aborted) {\n if (fetchParams?.isRefresh === true) {\n setData(response);\n } else {\n setData((prevData) => [...(prevData ? (prevData as T[]) : []), ...response]);\n }\n setIsLoaded(true);\n setNextPage(nextRef.next ? nextRef.next : undefined);\n setPreviousPage(previousRef.previous ? previousRef.previous : undefined);\n }\n } catch (error) {\n // Don't update state if request was aborted (AbortController disabled)\n if (thisRequestId === requestIdRef.current) {\n setIsLoaded(true);\n console.error(\"Error fetching data:\", error);\n }\n } finally {\n // Always reset fetching flag when done\n if (thisRequestId === requestIdRef.current) {\n isFetchingRef.current = false;\n }\n }\n },\n [stableParams, ready, params.search],\n );\n\n const setRefreshedElement = useCallback(\n (element: T) => {\n setData((prevData) => {\n if (!prevData) return prevData;\n\n const index = prevData.findIndex((data) => (data as any).id === (element as any).id);\n if (index === -1) return prevData;\n\n // Use immutable update pattern instead of mutation\n return prevData.map((item, i) => (i === index ? element : item));\n });\n },\n [setData],\n );\n\n const removeElement = useCallback(\n (element: T) => {\n setData((prevData) => {\n if (!prevData) return prevData;\n\n const index = prevData.findIndex((data) => (data as any).id === (element as any).id);\n\n if (index === -1) return prevData;\n\n // Adjust nextPage offset since we're removing an item\n setNextPage((prev) => adjustPaginationUrl(prev, -1));\n\n const newData = [...prevData];\n newData.splice(index, 1);\n return newData;\n });\n },\n [adjustPaginationUrl],\n );\n\n // Consolidated effect: Only fetch once when ready and not loaded\n // This prevents the duplicate API calls that occurred when both the mount effect\n // and ready effect fired simultaneously on initial render\n useEffect(() => {\n // Only fetch if ready and haven't loaded yet\n if (ready && !isLoaded) {\n fetchData({ isRefresh: true });\n }\n }, [ready, fetchData]);\n\n const loadNext = useCallback(\n async (onlyNewRecords?: boolean) => {\n if (nextPage) fetchData({ isRefresh: onlyNewRecords, callNext: true });\n },\n [fetchData, nextPage],\n );\n\n const loadPrevious = useCallback(\n async (onlyNewRecords?: boolean) => {\n if (previousPage) fetchData({ isRefresh: onlyNewRecords, callPrevious: true });\n },\n [fetchData, previousPage],\n );\n\n const addAdditionalParameter = useCallback(\n (key: string, value: any | null) => {\n if (value === null) {\n delete additionalParamsRef.current[key];\n } else {\n additionalParamsRef.current[key] = value;\n }\n\n setReady(true);\n setNextPage(undefined);\n setPreviousPage(undefined);\n fetchData({ isRefine: true, isRefresh: true });\n },\n [fetchData],\n );\n\n const removeAdditionalParameter = useCallback(\n (key: string) => {\n if (additionalParamsRef.current[key] !== undefined) {\n delete additionalParamsRef.current[key];\n setNextPage(undefined);\n setPreviousPage(undefined);\n fetchData({ isRefine: true, isRefresh: true });\n }\n },\n [fetchData],\n );\n\n const search = useCallback(\n async (search: string) => {\n if (search === searchTermRef.current) return;\n\n setNextPage(undefined);\n setPreviousPage(undefined);\n searchTermRef.current = search;\n fetchData({ isRefine: true, isRefresh: true });\n },\n [fetchData],\n );\n\n const isSearch = !!searchTermRef.current;\n\n const refresh = useCallback(async () => {\n setNextPage(undefined);\n setPreviousPage(undefined);\n fetchData({ isRefresh: true });\n }, [fetchData]);\n\n // Cleanup abort controller on unmount\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n return {\n ready,\n setReady,\n isLoaded: isLoaded,\n data: data as T[],\n next: nextPage ? loadNext : undefined,\n previous: previousPage ? loadPrevious : undefined,\n search: search,\n addAdditionalParameter: addAdditionalParameter,\n removeAdditionalParameter: removeAdditionalParameter,\n refresh: refresh,\n setRefreshedElement: setRefreshedElement,\n isSearch: isSearch,\n removeElement: removeElement,\n pageInfo: pageInfo,\n };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\n\nexport function useDebounce<T extends (...args: any[]) => any>(callback: T, delay: number): T & { cancel: () => void } {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const debouncedFunction = useCallback(\n (...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Attach a cancel method to clear pending timeout\n const cancel = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n\n return Object.assign(debouncedFunction, { cancel }) as T & { cancel: () => void };\n}\n\nexport default useDebounce;\n","\"use client\";\n\nimport { UseTableStructureHook, UseTableStructureHookParams, UseTableStructureHookReturn } from \"./types\";\nimport { ModuleWithPermissions } from \"../permissions\";\nimport { tableGeneratorRegistry } from \"./TableGeneratorRegistry\";\n\nexport function registerTableGenerator<T, U>(\n type: string | ModuleWithPermissions,\n hook: UseTableStructureHook<T, U>,\n): void {\n const name = typeof type === \"string\" ? type : type.name;\n tableGeneratorRegistry.register(name, hook);\n}\n\nexport function useTableGenerator<T, U>(\n type: ModuleWithPermissions,\n params: UseTableStructureHookParams<T, U>,\n): UseTableStructureHookReturn<T> {\n return tableGeneratorRegistry.get(type.name, params);\n}\n","\"use client\";\n\nimport * as d3 from \"d3\";\nimport { Loader2 } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { D3Link, D3Node } from \"../interfaces\";\n\n/**\n * Custom hook for D3 graph visualization with larger circles and more interactive features\n */\nexport function useCustomD3Graph(\n nodes: D3Node[],\n links: D3Link[],\n onNodeClick: (nodeId: string) => void,\n visibleNodeIds?: Set<string>,\n loadingNodeIds?: Set<string>,\n containerKey?: string | number,\n) {\n const svgRef = useRef<SVGSVGElement | null>(null);\n const zoomRef = useRef<d3.ZoomTransform | null>(null);\n const zoomBehaviorRef = useRef<d3.ZoomBehavior<SVGSVGElement, unknown> | null>(null);\n const nodePositionsRef = useRef<Map<string, { x: number; y: number }>>(new Map());\n const prevContainerKeyRef = useRef<string | number | undefined>(containerKey);\n\n const zoomToNode = useCallback(\n (nodeId: string, childIds: string[] = []) => {\n if (!svgRef.current || !zoomBehaviorRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const zoom = zoomBehaviorRef.current;\n\n const targetNode = nodes.find((n) => n.id === nodeId);\n const childNodes = nodes.filter((n) => childIds.includes(n.id));\n\n if (!targetNode) return;\n\n const positions: { x: number; y: number }[] = [];\n\n if (\n targetNode.fx !== undefined &&\n targetNode.fy !== undefined &&\n targetNode.fx !== null &&\n targetNode.fy !== null\n ) {\n positions.push({ x: targetNode.fx, y: targetNode.fy });\n } else if (\n targetNode.x !== undefined &&\n targetNode.y !== undefined &&\n targetNode.x !== null &&\n targetNode.y !== null\n ) {\n positions.push({ x: targetNode.x, y: targetNode.y });\n }\n\n childNodes.forEach((child) => {\n if (child.fx !== undefined && child.fy !== undefined && child.fx !== null && child.fy !== null) {\n positions.push({ x: child.fx, y: child.fy });\n } else if (child.x !== undefined && child.y !== undefined && child.x !== null && child.y !== null) {\n positions.push({ x: child.x, y: child.y });\n }\n });\n\n if (positions.length === 0) return;\n\n const bounds = {\n xMin: Math.min(...positions.map((p) => p.x)),\n xMax: Math.max(...positions.map((p) => p.x)),\n yMin: Math.min(...positions.map((p) => p.y)),\n yMax: Math.max(...positions.map((p) => p.y)),\n };\n\n const padding = 150;\n bounds.xMin -= padding;\n bounds.xMax += padding;\n bounds.yMin -= padding;\n bounds.yMax += padding;\n\n const width = svgRef.current.clientWidth;\n const height = svgRef.current.clientHeight;\n\n const contentWidth = bounds.xMax - bounds.xMin;\n const contentHeight = bounds.yMax - bounds.yMin;\n\n const scaleX = width / contentWidth;\n const scaleY = height / contentHeight;\n\n let scale = Math.min(scaleX, scaleY);\n\n scale = Math.min(Math.max(scale, 0.2), 1.5);\n\n const centerX = (bounds.xMin + bounds.xMax) / 2;\n const centerY = (bounds.yMin + bounds.yMax) / 2;\n\n const translateX = width / 2 - centerX * scale;\n const translateY = height / 2 - centerY * scale;\n\n svg\n .transition()\n .duration(750)\n .call(zoom.transform, d3.zoomIdentity.translate(translateX, translateY).scale(scale));\n },\n [nodes],\n );\n\n const colorScale = useMemo(() => {\n const accentColor = \"var(--accent)\";\n\n // Define unified color for all content types\n const contentColor = \"hsl(30, 80%, 55%)\"; // Orange for all content\n\n const groupTypes = new Set<string>();\n nodes.forEach((node) => {\n groupTypes.add(node.instanceType);\n });\n\n const typeColorMap = new Map<string, string>();\n\n Array.from(groupTypes).forEach((type, index) => {\n if (type === nodes[0]?.instanceType) {\n // Root node\n typeColorMap.set(type, accentColor);\n } else if (type === \"documents\" || type === \"articles\" || type === \"hyperlinks\") {\n // All content types get the same orange color\n typeColorMap.set(type, contentColor);\n } else {\n // Topics, Expertises, etc. - use golden angle\n const hueShift = (index * 137.508) % 360;\n typeColorMap.set(type, `hsl(${hueShift}, 32%, 52%)`);\n }\n });\n\n return typeColorMap;\n }, [nodes]);\n\n const washOutColor = useCallback((color: string): string => {\n // Parse HSL color and make it lighter and more desaturated\n const hslMatch = color.match(/hsl\\((\\d+\\.?\\d*),\\s*(\\d+\\.?\\d*)%,\\s*(\\d+\\.?\\d*)%\\)/);\n if (hslMatch) {\n const hue = parseFloat(hslMatch[1]);\n\n // Reduce saturation to 15% and increase lightness to 80%\n return `hsl(${hue}, 15%, 80%)`;\n }\n\n // For var(--accent), return a lighter version\n if (color.includes(\"var(--accent)\")) {\n return \"hsl(0, 0%, 80%)\"; // Light gray for washed out accent\n }\n\n // Fallback\n return \"hsl(0, 0%, 80%)\";\n }, []);\n\n const getNodeColor = useCallback(\n (node: D3Node) => {\n const baseColor = colorScale.get(node.instanceType) || \"gray\";\n if (node.washedOut) {\n return washOutColor(baseColor);\n }\n return baseColor;\n },\n [colorScale, washOutColor],\n );\n\n useEffect(() => {\n if (!nodes.length || !svgRef.current) return;\n\n const visibleNodes = visibleNodeIds\n ? nodes.filter((node) => visibleNodeIds.has(node.id))\n : nodes.filter((node) => node.visible !== false);\n\n const visibleNodeIdSet = new Set(visibleNodes.map((node) => node.id));\n const visibleLinks = links.filter((link) => {\n const sourceId = typeof link.source === \"string\" ? link.source : link.source.id;\n const targetId = typeof link.target === \"string\" ? link.target : link.target.id;\n return visibleNodeIdSet.has(sourceId) && visibleNodeIdSet.has(targetId);\n });\n\n const svg = d3.select<SVGSVGElement, unknown>(svgRef.current);\n svg.selectAll(\"*\").remove();\n\n const container = svgRef.current?.parentElement;\n if (!container) return;\n\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n svg.attr(\"width\", width).attr(\"height\", height).attr(\"viewBox\", `0 0 ${width} ${height}`);\n\n const graphGroup = svg.append(\"g\").attr(\"class\", \"graph-content\");\n\n const zoom = d3\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on(\"zoom\", (event) => {\n const transform = event.transform;\n graphGroup.attr(\"transform\", transform.toString());\n zoomRef.current = transform;\n });\n\n zoomBehaviorRef.current = zoom;\n\n svg\n .call(zoom as any)\n .on(\"wheel.zoom\", null)\n .on(\"dblclick.zoom\", null);\n\n const nodeRadius = 40;\n\n const childDistanceFromRoot = Math.min(width, height) * 0.4;\n const grandchildDistanceFromChild = nodeRadius * 10;\n\n const centralNodeId = nodes[0].id;\n\n const nodeHierarchy = new Map<\n string,\n {\n depth: number;\n parent: string | null;\n children: string[];\n angle?: number;\n x?: number;\n y?: number;\n }\n >();\n\n nodeHierarchy.set(centralNodeId, {\n depth: 0,\n parent: null,\n children: [],\n });\n\n visibleLinks.forEach((link) => {\n const sourceId = typeof link.source === \"string\" ? link.source : link.source.id;\n const targetId = typeof link.target === \"string\" ? link.target : link.target.id;\n\n if (sourceId === centralNodeId) {\n nodeHierarchy.set(targetId, { depth: 1, parent: centralNodeId, children: [] });\n const rootNode = nodeHierarchy.get(centralNodeId);\n if (rootNode) {\n rootNode.children.push(targetId);\n }\n }\n });\n\n visibleLinks.forEach((link) => {\n const sourceId = typeof link.source === \"string\" ? link.source : link.source.id;\n const targetId = typeof link.target === \"string\" ? link.target : link.target.id;\n\n const sourceNode = nodeHierarchy.get(sourceId);\n if (sourceNode && sourceNode.depth === 1 && !nodeHierarchy.has(targetId)) {\n nodeHierarchy.set(targetId, { depth: 2, parent: sourceId, children: [] });\n sourceNode.children.push(targetId);\n }\n });\n\n const rootChildren = nodeHierarchy.get(centralNodeId)?.children || [];\n\n const childAngleStep = (2 * Math.PI) / Math.max(rootChildren.length, 1);\n\n rootChildren.forEach((childId, index) => {\n const childNode = nodeHierarchy.get(childId);\n if (childNode) {\n const angle = index * childAngleStep;\n childNode.angle = angle;\n childNode.x = width / 2 + childDistanceFromRoot * Math.cos(angle);\n childNode.y = height / 2 + childDistanceFromRoot * Math.sin(angle);\n }\n });\n\n for (const [nodeId, node] of nodeHierarchy.entries()) {\n if (node.depth === 1 && node.angle !== undefined && node.x !== undefined && node.y !== undefined) {\n const childAngle = node.angle;\n const childX = node.x;\n const childY = node.y;\n const grandchildren = node.children;\n\n if (grandchildren.length === 0) continue;\n\n const dirX = childX - width / 2;\n const dirY = childY - height / 2;\n const dirLength = Math.sqrt(dirX * dirX + dirY * dirY);\n\n const normDirX = dirX / dirLength;\n const normDirY = dirY / dirLength;\n\n if (grandchildren.length === 1) {\n const grandchildId = grandchildren[0];\n const grandchildNode = nodeHierarchy.get(grandchildId);\n if (grandchildNode) {\n grandchildNode.x = childX + normDirX * grandchildDistanceFromChild;\n grandchildNode.y = childY + normDirY * grandchildDistanceFromChild;\n grandchildNode.angle = childAngle;\n }\n } else {\n // Multiple grandchildren - arrange in semicircular arc\n const numChildren = grandchildren.length;\n\n // Dynamic arc span: scale from 60° (2 children) to 180° (7+ children)\n const minArc = Math.PI / 3; // 60 degrees\n const maxArc = Math.PI; // 180 degrees\n const arcProgress = Math.min(1, (numChildren - 2) / 5);\n const arcSpan = minArc + arcProgress * (maxArc - minArc);\n\n // Calculate starting angle (center the arc around the radial direction)\n const startAngle = childAngle - arcSpan / 2;\n\n grandchildren.forEach((grandchildId, index) => {\n const grandchildNode = nodeHierarchy.get(grandchildId);\n if (!grandchildNode) return;\n\n // Calculate angle for this child\n const angleOffset = numChildren > 1 ? (index / (numChildren - 1)) * arcSpan : 0;\n const angle = startAngle + angleOffset;\n\n // Position at constant radius from parent\n grandchildNode.x = childX + grandchildDistanceFromChild * Math.cos(angle);\n grandchildNode.y = childY + grandchildDistanceFromChild * Math.sin(angle);\n grandchildNode.angle = angle;\n });\n }\n }\n }\n\n visibleNodes.forEach((node) => {\n const savedPosition = nodePositionsRef.current.get(node.id);\n\n if (savedPosition) {\n node.fx = savedPosition.x;\n node.fy = savedPosition.y;\n } else {\n const hierarchyNode = nodeHierarchy.get(node.id);\n if (hierarchyNode && hierarchyNode.x !== undefined && hierarchyNode.y !== undefined) {\n node.fx = hierarchyNode.x;\n node.fy = hierarchyNode.y;\n // Save the calculated position so it persists across re-renders\n nodePositionsRef.current.set(node.id, { x: hierarchyNode.x, y: hierarchyNode.y });\n } else if (node.id === centralNodeId) {\n node.fx = width / 2;\n node.fy = height / 2;\n // Save the center position\n nodePositionsRef.current.set(node.id, { x: width / 2, y: height / 2 });\n }\n }\n });\n\n const simulation = d3\n .forceSimulation<D3Node>(visibleNodes)\n .force(\n \"link\",\n d3\n .forceLink<D3Node, D3Link>(visibleLinks)\n .id((d) => d.id)\n .distance(nodeRadius * 3)\n .strength(0.1),\n )\n .force(\"charge\", d3.forceManyBody().strength(-500).distanceMax(300))\n .force(\"collision\", d3.forceCollide().radius(nodeRadius * 1.2))\n .force(\"center\", d3.forceCenter(width / 2, height / 2).strength(0.1));\n\n simulation.stop();\n for (let i = 0; i < 100; i++) {\n simulation.tick();\n }\n\n visibleNodes.forEach((node) => {\n if (node.fx === undefined) {\n node.fx = node.x;\n node.fy = node.y;\n }\n });\n\n const link = graphGroup\n .append(\"g\")\n .attr(\"stroke\", \"#999\")\n .attr(\"stroke-opacity\", 0.6)\n .selectAll(\"line\")\n .data(visibleLinks)\n .join(\"line\")\n .attr(\"x1\", (d) => (d.source as D3Node).x || 0)\n .attr(\"y1\", (d) => (d.source as D3Node).y || 0)\n .attr(\"x2\", (d) => (d.target as D3Node).x || 0)\n .attr(\"y2\", (d) => (d.target as D3Node).y || 0)\n .attr(\"stroke-width\", 1.5);\n\n const node = graphGroup\n .append(\"g\")\n .selectAll(\"g\")\n .data(visibleNodes)\n .join(\"g\")\n .attr(\"class\", \"node-group\")\n .attr(\"cursor\", \"pointer\")\n .attr(\"transform\", (d) => `translate(${d.x || 0}, ${d.y || 0})`)\n .call(\n d3\n .drag<SVGGElement, D3Node>()\n .subject(function (d) {\n return d;\n })\n .on(\"start\", function (event, d) {\n d.fx = d.x;\n d.fy = d.y;\n })\n .on(\"drag\", function (event, d) {\n d.fx = event.x;\n d.fy = event.y;\n\n d3.select(this).attr(\"transform\", `translate(${event.x}, ${event.y})`);\n\n d3.select(this).attr(\"transform\", `translate(${event.x}, ${event.y})`);\n\n nodePositionsRef.current.set(d.id, { x: event.x, y: event.y });\n\n link\n .attr(\"x1\", (l) => {\n const source = l.source as D3Node;\n return source.fx || source.x || 0;\n })\n .attr(\"y1\", (l) => {\n const source = l.source as D3Node;\n return source.fy || source.y || 0;\n })\n .attr(\"x2\", (l) => {\n const target = l.target as D3Node;\n return target.fx || target.x || 0;\n })\n .attr(\"y2\", (l) => {\n const target = l.target as D3Node;\n return target.fy || target.y || 0;\n });\n })\n .on(\"end\", function (event, d) {\n d.fx = event.x;\n d.fy = event.y;\n }) as any,\n )\n .on(\"mouseenter\", function (_event, d) {\n // Skip hover effect for root node\n if (d.instanceType === \"root\") return;\n\n const currentNode = d3.select(this);\n\n // Bring node to front\n currentNode.raise();\n\n // Get current zoom scale for counter-scaling text\n const currentZoom = zoomRef.current?.k || 1;\n const targetScreenFontSize = 20; // Target font size in screen pixels\n const baseFontSize = 12; // Base font size in graph coordinates\n\n // Calculate smooth scale factor for transform\n const textScale = targetScreenFontSize / (baseFontSize * currentZoom);\n\n // Calculate text position offset - circle stays in graph coords, only gap is counter-scaled\n const hoverTextOffset = nodeRadius * 1.4 + 5 / currentZoom;\n\n // Scale up the circle with smooth transition (unchanged)\n currentNode\n .select(\"circle\")\n .transition()\n .duration(250)\n .ease(d3.easeExpOut)\n .attr(\"r\", nodeRadius * 1.4)\n .attr(\"filter\", \"drop-shadow(0px 4px 12px rgba(0, 0, 0, 0.3))\");\n\n // Scale up the text with smooth transform scaling around its anchor point\n currentNode\n .select(\"text\")\n .transition()\n .duration(250)\n .ease(d3.easeExpOut)\n .attr(\"dy\", -hoverTextOffset)\n .attr(\"transform\", `translate(0, ${-hoverTextOffset}) scale(${textScale}) translate(0, ${hoverTextOffset})`);\n })\n .on(\"mouseleave\", function (_event, d) {\n // Skip hover effect for root node\n if (d.instanceType === \"root\") return;\n\n const currentNode = d3.select(this);\n\n // Return circle to normal size\n currentNode\n .select(\"circle\")\n .transition()\n .duration(250)\n .ease(d3.easeExpOut)\n .attr(\"r\", nodeRadius)\n .attr(\"filter\", null);\n\n // Return text to normal size with smooth transform\n const normalOffset = nodeRadius + 5;\n currentNode\n .select(\"text\")\n .transition()\n .duration(250)\n .ease(d3.easeExpOut)\n .attr(\"dy\", -normalOffset)\n .attr(\"transform\", `translate(0, ${-normalOffset}) scale(1) translate(0, ${normalOffset})`);\n });\n\n node\n .append(\"circle\")\n .attr(\"r\", nodeRadius)\n .attr(\"fill\", (d) => getNodeColor(d))\n .attr(\"stroke\", \"#fff\")\n .attr(\"stroke-width\", 1.5)\n .on(\"click\", (event, d) => {\n event.preventDefault();\n event.stopPropagation();\n if (zoomBehaviorRef.current) {\n svg.on(\".zoom\", null);\n setTimeout(() => {\n if (zoomBehaviorRef.current) {\n svg\n .call(zoomBehaviorRef.current as any)\n .on(\"wheel.zoom\", null)\n .on(\"dblclick.zoom\", null);\n }\n }, 100);\n }\n onNodeClick(d.id);\n });\n\n node.each(function (d: D3Node) {\n if (d.icon) {\n const Icon = d.icon as React.FC<{ size: number; color: string }>;\n const iconSvg = renderToStaticMarkup(<Icon size={nodeRadius / 2} color=\"white\" />);\n\n const iconGroup = d3\n .select(this)\n .append(\"g\")\n .html(iconSvg)\n .attr(\"transform\", `translate(${-nodeRadius / 4}, ${-nodeRadius / 4})`)\n .style(\"pointer-events\", \"all\")\n .on(\"click\", (event) => {\n event.stopPropagation();\n onNodeClick(d.id);\n });\n }\n });\n\n // Add loading spinner for nodes that are fetching children\n node.each(function (d: D3Node) {\n if (loadingNodeIds && loadingNodeIds.has(d.id)) {\n // Remove existing icon\n d3.select(this).selectAll(\"g\").remove();\n\n // Add spinner\n const spinnerSvg = renderToStaticMarkup(<Loader2 size={nodeRadius / 2} color=\"white\" />);\n\n d3.select(this)\n .append(\"g\")\n .html(spinnerSvg)\n .attr(\"class\", \"animate-spin\")\n .attr(\"transform\", `translate(${-nodeRadius / 4}, ${-nodeRadius / 4})`)\n .style(\"pointer-events\", \"none\");\n }\n });\n\n node.each(function (d: D3Node) {\n const textElement = d3\n .select(this)\n .append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"font-size\", 12)\n .attr(\"pointer-events\", \"none\");\n\n if (d.instanceType === \"root\") {\n // Split text by spaces for multi-line display\n const words = d.name.split(\" \");\n const lineHeight = 1.2; // em units\n const numLines = words.length;\n // Calculate starting position to center the text block vertically\n // Account for the fact that we want the middle of the entire text block at y=0\n const startY = -((numLines - 1) * lineHeight) / 2;\n\n textElement.attr(\"fill\", \"var(--accent-foreground)\").attr(\"dominant-baseline\", \"middle\");\n\n words.forEach((word, index) => {\n textElement\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", index === 0 ? `${startY}em` : `${lineHeight}em`)\n .text(word);\n });\n } else {\n // Non-root nodes: single line text above the circle\n textElement\n .attr(\"dy\", -nodeRadius - 5)\n .attr(\"fill\", \"currentColor\")\n .text(d.name);\n }\n });\n\n return () => {\n simulation.stop();\n };\n }, [nodes, links, colorScale, visibleNodeIds, loadingNodeIds, onNodeClick]);\n\n const zoomIn = useCallback(() => {\n if (!svgRef.current || !zoomBehaviorRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const zoom = zoomBehaviorRef.current;\n\n const currentTransform = zoomRef.current || d3.zoomIdentity;\n const newScale = Math.min(currentTransform.k * 1.3, 4);\n\n svg\n .transition()\n .duration(300)\n .call(zoom.transform, d3.zoomIdentity.translate(currentTransform.x, currentTransform.y).scale(newScale));\n }, []);\n\n const zoomOut = useCallback(() => {\n if (!svgRef.current || !zoomBehaviorRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const zoom = zoomBehaviorRef.current;\n\n const currentTransform = zoomRef.current || d3.zoomIdentity;\n const newScale = Math.max(currentTransform.k * 0.7, 0.1);\n\n svg\n .transition()\n .duration(300)\n .call(zoom.transform, d3.zoomIdentity.translate(currentTransform.x, currentTransform.y).scale(newScale));\n }, []);\n\n const zoomToFitAll = useCallback(() => {\n if (!svgRef.current || !zoomBehaviorRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const zoom = zoomBehaviorRef.current;\n\n // Get all visible nodes\n const visibleNodes = visibleNodeIds\n ? nodes.filter((node) => visibleNodeIds.has(node.id))\n : nodes.filter((node) => node.visible !== false);\n\n if (visibleNodes.length === 0) return;\n\n // Calculate bounds of all visible nodes\n const positions: { x: number; y: number }[] = [];\n visibleNodes.forEach((node) => {\n if (node.fx !== undefined && node.fy !== undefined && node.fx !== null && node.fy !== null) {\n positions.push({ x: node.fx, y: node.fy });\n } else if (node.x !== undefined && node.y !== undefined && node.x !== null && node.y !== null) {\n positions.push({ x: node.x, y: node.y });\n }\n });\n\n if (positions.length === 0) return;\n\n const bounds = {\n xMin: Math.min(...positions.map((p) => p.x)),\n xMax: Math.max(...positions.map((p) => p.x)),\n yMin: Math.min(...positions.map((p) => p.y)),\n yMax: Math.max(...positions.map((p) => p.y)),\n };\n\n // Add padding\n const padding = 150;\n bounds.xMin -= padding;\n bounds.xMax += padding;\n bounds.yMin -= padding;\n bounds.yMax += padding;\n\n const width = svgRef.current.clientWidth;\n const height = svgRef.current.clientHeight;\n\n const contentWidth = bounds.xMax - bounds.xMin;\n const contentHeight = bounds.yMax - bounds.yMin;\n\n const scaleX = width / contentWidth;\n const scaleY = height / contentHeight;\n\n let scale = Math.min(scaleX, scaleY);\n scale = Math.min(Math.max(scale, 0.1), 2); // Clamp between 0.1 and 2\n\n const centerX = (bounds.xMin + bounds.xMax) / 2;\n const centerY = (bounds.yMin + bounds.yMax) / 2;\n\n const translateX = width / 2 - centerX * scale;\n const translateY = height / 2 - centerY * scale;\n\n svg.transition().duration(750).call(zoom.transform, d3.zoomIdentity.translate(translateX, translateY).scale(scale));\n }, [nodes, visibleNodeIds]);\n\n // When container size changes (full-screen toggle), zoom to fit all nodes\n // This scales the view instead of recalculating positions, maintaining relative layout\n useEffect(() => {\n if (containerKey !== undefined && containerKey !== prevContainerKeyRef.current) {\n // Small delay to allow the container to finish resizing\n const timeoutId = setTimeout(() => {\n zoomToFitAll();\n }, 100);\n\n prevContainerKeyRef.current = containerKey;\n\n return () => clearTimeout(timeoutId);\n }\n }, [containerKey, zoomToFitAll]);\n\n return { svgRef, zoomIn, zoomOut, zoomToNode, zoomToFitAll };\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useNotificationContext, useSocketContext } from \"../contexts\";\n\nexport function useNotificationSync() {\n const { socketNotifications, clearSocketNotifications } = useSocketContext();\n const { addSocketNotifications } = useNotificationContext();\n\n useEffect(() => {\n if (socketNotifications.length > 0) {\n try {\n addSocketNotifications(socketNotifications);\n clearSocketNotifications();\n } catch (error) {\n console.error(\"💥 [useNotificationSync] Error processing notifications:\", error);\n }\n }\n }, [socketNotifications, addSocketNotifications, clearSocketNotifications]);\n}\n","\"use client\";\n\nimport { useAtom } from \"jotai\";\nimport { usePathname } from \"next/navigation\";\nimport { useEffect } from \"react\";\nimport { RecentPage, recentPagesAtom } from \"../atoms\";\nimport { getTrackablePages } from \"../unified/JsonApiRequest\";\n\n// Routes to exclude from tracking\nconst EXCLUDED_ROUTES = [\"/\", \"/login\", \"/register\", \"/forgot-password\", \"/reset-password\", \"/activate\"];\n\nexport function usePageTracker() {\n const pathname = usePathname();\n const [recentPages, setRecentPages] = useAtom(recentPagesAtom);\n\n useEffect(() => {\n if (!pathname) return;\n\n // Exclude certain routes\n if (EXCLUDED_ROUTES.some((route) => pathname === route || pathname.endsWith(route))) {\n return;\n }\n\n // Extract page information from pathname (already locale-free from next-intl)\n const pathParts = pathname.split(\"/\").filter(Boolean);\n\n if (pathParts.length === 0) return;\n\n // Try to find the module based on the route\n const moduleName = pathParts[0];\n const entityId = pathParts.length > 1 ? pathParts[1] : null;\n\n // Only track pages with entity IDs (detail pages)\n if (!entityId) return;\n\n // Find the module from configured trackable pages\n const trackablePages = getTrackablePages();\n const foundModule = trackablePages.find((mod) => mod.pageUrl === `/${moduleName}`);\n\n if (!foundModule) return;\n\n // Only use base path (module/id), ignoring any sub-paths\n const baseUrl = `/${moduleName}/${entityId}`;\n\n let pageTitle = foundModule.name;\n if (typeof document !== \"undefined\") {\n const titleParts = document.title.split(\"]\");\n if (titleParts[1]) {\n const cleanTitle = titleParts[1].split(\"|\")[0]?.trim();\n pageTitle = cleanTitle || foundModule.name;\n }\n }\n\n const newPage: RecentPage = {\n url: baseUrl,\n title: pageTitle,\n moduleType: foundModule.name,\n timestamp: Date.now(),\n };\n\n setRecentPages((prev) => {\n // Remove if already exists (to move to top)\n const filtered = prev.filter((page) => page.url !== newPage.url);\n\n // Add to beginning and limit to 10\n return [newPage, ...filtered].slice(0, 10);\n });\n }, [pathname, setRecentPages]);\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useCurrentUserContext } from \"../contexts\";\nimport { PushService, UserInterface } from \"../features\";\nimport { getRoleId } from \"../roles\";\nimport { getAppUrl } from \"../unified/JsonApiRequest\";\n\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = \"=\".repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n for (let i = 0; i < rawData.length; i++) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nexport default function usePushNotifications(): void {\n const { currentUser, hasRole } = useCurrentUserContext<UserInterface>();\n\n useEffect(() => {\n const register = async () => {\n if (\"serviceWorker\" in navigator && \"PushManager\" in window) {\n try {\n // Check if we've already processed push notifications for this user in this session\n const sessionKey = `push_registered_${currentUser?.id}`;\n const lastRegisteredSubscription = sessionStorage.getItem(sessionKey);\n\n const registration = await navigator.serviceWorker.register(`${getAppUrl()}/sw.js`);\n\n // Check current permission status first\n let permission = Notification.permission;\n\n // Only request permission if it's not already determined\n if (permission === \"default\") {\n permission = await Notification.requestPermission();\n }\n\n if (permission !== \"granted\") {\n return; // User denied permission, this is not an error\n }\n\n const vapidPublicKey = (process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY || \"\").trim();\n const convertedKey = urlBase64ToUint8Array(vapidPublicKey);\n\n await navigator.serviceWorker.ready;\n\n let subscription = await registration.pushManager.getSubscription();\n if (!subscription) {\n const appServerKey = new Uint8Array(Array.from(convertedKey));\n\n subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: appServerKey,\n });\n }\n\n const plainSubscription = {\n endpoint: subscription.endpoint,\n keys: subscription.toJSON().keys,\n };\n\n // Create a simple hash to detect subscription changes\n const subscriptionHash = btoa(JSON.stringify(plainSubscription));\n\n // Only call the API if subscription has changed or this is the first registration\n if (lastRegisteredSubscription !== subscriptionHash) {\n await PushService.register({ data: plainSubscription });\n // Store the current subscription hash to avoid duplicate registrations\n sessionStorage.setItem(sessionKey, subscriptionHash);\n }\n } catch (error) {\n console.error(\"Error during service worker registration or push subscription:\", error);\n }\n }\n };\n\n if (currentUser && !hasRole(getRoleId().Administrator)) register();\n }, [currentUser]);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport io from \"socket.io-client\";\nimport { Modules, rehydrate } from \"../core\";\nimport { NotificationInterface } from \"../features\";\n\ntype Socket = ReturnType<typeof io>;\n\ninterface UseSocketOptions {\n token: string;\n}\n\ninterface SocketLike {\n emit: (event: string, ...args: any[]) => void;\n on: (event: string, callback: (...args: any[]) => void) => void;\n off: (event: string, callback?: (...args: any[]) => void) => void;\n connected: boolean;\n}\n\ninterface UseSocketReturn {\n socket: SocketLike | null;\n isConnected: boolean;\n messages: any[];\n socketNotifications: NotificationInterface[];\n sendMessage: (event: string, data: any) => void;\n removeMessage: (index: number) => void;\n removeSocketNotification: (index: number) => void;\n clearMessages: () => void;\n clearSocketNotifications: () => void;\n}\n\nexport function useSocket({ token }: UseSocketOptions): UseSocketReturn {\n const errorCount = useRef(0);\n const shouldConnect = useRef(true);\n const hookInstanceId = useRef(Math.random().toString(36).substring(2, 11));\n\n const [socket, setSocket] = useState<Socket | null>(null);\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const [messages, setMessages] = useState<any[]>([]);\n const [socketNotifications, setSocketNotifications] = useState<NotificationInterface[]>([]);\n\n const socketRef = useRef<Socket | null>(null);\n\n useEffect(() => {\n if (!token) return;\n\n const globalSocketKey = `__socket_${process.env.NEXT_PUBLIC_API_URL?.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n\n if (typeof window !== \"undefined\") {\n const allSocketKeys = Object.keys(window).filter((key) => key.startsWith(\"__socket_\"));\n\n const existingSocket = (window as any)[globalSocketKey];\n if (existingSocket) {\n if (existingSocket.connected) {\n // CRITICAL: Clear existing listeners to prevent accumulation\n existingSocket.removeAllListeners();\n\n socketRef.current = existingSocket;\n setSocket(existingSocket);\n setIsConnected(existingSocket.connected);\n } else {\n existingSocket.disconnect();\n delete (window as any)[globalSocketKey];\n }\n }\n }\n\n let currentSocket: any;\n const isReusing = socketRef.current && socketRef.current.connected;\n\n if (isReusing) {\n currentSocket = socketRef.current;\n } else {\n // React StrictMode protection: Prevent double-mounting issues\n if (!shouldConnect.current) {\n return;\n }\n shouldConnect.current = false;\n\n try {\n currentSocket = io(process.env.NEXT_PUBLIC_API_URL as string, {\n auth: { token },\n transports: [\"websocket\"],\n timeout: 20000,\n });\n\n if (typeof window !== \"undefined\") {\n if (currentSocket.id && currentSocket.id !== \"undefined\") {\n (window as any)[globalSocketKey] = currentSocket;\n }\n }\n\n socketRef.current = currentSocket;\n setSocket(currentSocket);\n } catch (error) {\n return () => {}; // Return empty cleanup function on error\n }\n }\n\n const handleConnect = () => {\n setIsConnected(true);\n };\n\n const handleDisconnect = () => {\n setIsConnected(false);\n };\n\n const handleMessage = (data: any) => {\n setMessages((prevMessages) => {\n const newMessages = [...prevMessages, data];\n return newMessages;\n });\n };\n\n const handleNotification = (data: any) => {\n const notification = rehydrate(Modules.Notification, data) as NotificationInterface;\n if (notification) {\n setSocketNotifications((prev) => {\n const newNotifications = [...prev, notification];\n return newNotifications;\n });\n }\n };\n\n // Attach event listeners\n if (currentSocket) {\n currentSocket.on(\"connect\", handleConnect);\n currentSocket.on(\"disconnect\", handleDisconnect);\n currentSocket.on(\"message\", handleMessage);\n currentSocket.on(\"notification\", handleNotification);\n }\n\n return () => {\n shouldConnect.current = true;\n\n // In development, preserve socket in window for HMR but remove listeners\n if (currentSocket) {\n if (process.env.NODE_ENV === \"development\") {\n currentSocket.off(\"connect\", handleConnect);\n currentSocket.off(\"disconnect\", handleDisconnect);\n currentSocket.off(\"message\", handleMessage);\n currentSocket.off(\"notification\", handleNotification);\n } else {\n currentSocket.off(\"connect\", handleConnect);\n currentSocket.off(\"disconnect\", handleDisconnect);\n currentSocket.off(\"message\", handleMessage);\n currentSocket.off(\"notification\", handleNotification);\n\n currentSocket.disconnect();\n\n if (typeof window !== \"undefined\") {\n delete (window as any)[globalSocketKey];\n }\n }\n }\n };\n }, [token]);\n\n const sendMessage = (event: string, data: any) => {\n if (socketRef.current && isConnected) {\n socketRef.current.emit(event, data);\n }\n };\n\n const removeMessage = (index: number) => {\n setMessages((prevMessages) => {\n const newMessages = [...prevMessages];\n newMessages.splice(index, 1);\n return newMessages;\n });\n };\n\n const removeSocketNotification = (index: number) => {\n setSocketNotifications((prevNotifications) => {\n const newNotifications = [...prevNotifications];\n newNotifications.splice(index, 1);\n return newNotifications;\n });\n };\n\n const clearMessages = () => {\n setMessages([]);\n };\n\n const clearSocketNotifications = () => {\n setSocketNotifications([]);\n };\n\n return {\n socket,\n isConnected,\n messages,\n socketNotifications,\n sendMessage,\n removeMessage,\n removeSocketNotification,\n clearMessages,\n clearSocketNotifications,\n };\n}\n","\"use client\";\n\nimport { getCookie } from \"cookies-next\";\nimport { useAtom } from \"jotai\";\nimport { atomWithStorage } from \"jotai/utils\";\nimport { usePathname } from \"next/navigation\";\nimport React, { createContext, useContext, useEffect } from \"react\";\nimport { Modules, rehydrate } from \"../../../core\";\nimport { Action, checkPermissions, ModuleWithPermissions } from \"../../../permissions\";\nimport { getRoleId } from \"../../../roles\";\nimport { CompanyInterface } from \"../../company\";\nimport { FeatureInterface } from \"../../feature\";\nimport { RoleInterface } from \"../../role\";\nimport { UserInterface } from \"../data\";\n\nexport interface CurrentUserContextType<T extends UserInterface = UserInterface> {\n currentUser: T | null;\n company: CompanyInterface | null;\n setUser: (user?: T) => void;\n hasPermissionToModule: <M extends ModuleWithPermissions>(params: {\n module: M;\n action: Action;\n data?: any;\n }) => boolean;\n hasPermissionToModules: <M extends ModuleWithPermissions>(params: {\n modules: M[];\n action: Action;\n data?: any;\n }) => boolean;\n hasPermissionToPath: (path: string) => boolean;\n hasAccesToFeature: (featureIdentifier: string) => boolean;\n matchUrlToModule: (prarms?: { path: string }) => ModuleWithPermissions | undefined;\n hasRole: (roleId: string) => boolean;\n}\n\nconst userAtom = atomWithStorage(\"user\", null);\n\nconst CurrentUserContext = createContext<CurrentUserContextType | undefined>(undefined);\n\nexport const CurrentUserProvider = ({ children }: { children: React.ReactNode }) => {\n const path = usePathname();\n\n const [dehydratedUser, setDehydratedUser] = useAtom(userAtom);\n\n useEffect(() => {\n const token = getCookie(\"token\");\n if (!token && dehydratedUser) setDehydratedUser(null);\n }, [dehydratedUser, setDehydratedUser]);\n\n const matchUrlToModule = (params?: { path: string }): ModuleWithPermissions | undefined => {\n const moduleKeys = Object.getOwnPropertyNames(Modules).filter(\n (key) => key !== \"prototype\" && key !== \"_factory\" && key !== \"length\" && key !== \"name\",\n );\n\n const matchedModuleKey = moduleKeys.find((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(Modules, key);\n\n if (!descriptor?.get) return false;\n\n const selectedModule = descriptor.get.call(Modules);\n\n return path.toLowerCase().startsWith(selectedModule.pageUrl?.toLowerCase());\n });\n\n if (!matchedModuleKey) return undefined;\n\n const descriptor = Object.getOwnPropertyDescriptor(Modules, matchedModuleKey);\n return descriptor?.get?.call(Modules);\n };\n\n const currentUser = dehydratedUser ? rehydrate<UserInterface>(Modules.User, dehydratedUser) : null;\n\n const company = currentUser?.company ?? null;\n\n const setUser = (user?: UserInterface): void => {\n if (user) setDehydratedUser(user.dehydrate() as any);\n else setDehydratedUser(null);\n };\n\n const hasRole = (roleId: string): boolean => {\n if (!currentUser) return false;\n\n return !!currentUser.roles?.some((userRole: RoleInterface) => userRole.id === roleId);\n };\n\n const hasAccesToFeature = (featureIdentifier: string): boolean => {\n if (hasRole(getRoleId().Administrator)) return true;\n if (!company) return false;\n\n return company.features.some((feature: FeatureInterface) => feature.id === featureIdentifier);\n };\n\n function hasPermissionToModule<M extends ModuleWithPermissions>(params: {\n module: M;\n action: Action;\n data?: M extends ModuleWithPermissions ? any : never;\n }): boolean {\n if (!currentUser) return false;\n\n if (!!params.module.feature && !hasAccesToFeature(params.module.feature)) return false;\n\n return checkPermissions({ module: params.module, action: params.action, data: params.data, user: currentUser });\n }\n\n function hasPermissionToModules<M extends ModuleWithPermissions>(params: {\n modules: M[];\n action: Action;\n data?: M extends ModuleWithPermissions ? any : never;\n }): boolean {\n if (!currentUser) return false;\n\n if (!params.modules.every((module) => !module.feature || hasAccesToFeature(module.feature))) return false;\n\n return params.modules.every((module) =>\n checkPermissions({ module: module, action: params.action, data: params.data, user: currentUser }),\n );\n }\n\n function hasPermissionToPath(path: string): boolean {\n if (!currentUser) return false;\n if (path === \"#\" || path === \"/\") return true;\n\n const selectedModule = matchUrlToModule({ path: path });\n if (!selectedModule) return true;\n\n const response = hasPermissionToModule({ module: selectedModule, action: Action.Read });\n\n return response;\n }\n\n return (\n <CurrentUserContext.Provider\n value={{\n currentUser: currentUser,\n company: company,\n setUser: setUser,\n hasPermissionToModule: hasPermissionToModule,\n hasPermissionToModules: hasPermissionToModules,\n hasPermissionToPath: hasPermissionToPath,\n hasAccesToFeature: hasAccesToFeature,\n matchUrlToModule: matchUrlToModule,\n hasRole: hasRole,\n }}\n >\n {children}\n </CurrentUserContext.Provider>\n );\n};\n\nexport function useCurrentUserContext<T extends UserInterface = UserInterface>(): CurrentUserContextType<T> {\n const context = useContext(CurrentUserContext);\n if (context === undefined) {\n throw new Error(\"useCurrentUserContext must be used within a UserProvider\");\n }\n return context as unknown as CurrentUserContextType<T>;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { createContext, ReactNode, useContext, useState } from \"react\";\nimport { SharedProvider } from \"../../../contexts\";\nimport { JsonApiHydratedDataInterface, Modules, rehydrate } from \"../../../core\";\nimport { usePageUrlGenerator } from \"../../../hooks\";\nimport { BreadcrumbItemData } from \"../../../interfaces\";\nimport { Action } from \"../../../permissions\";\nimport { UserDeleter, UserEditor, UserReactivator, UserResentInvitationEmail } from \"../components/forms\";\nimport { UserInterface } from \"../data\";\nimport { useCurrentUserContext } from \"./CurrentUserContext\";\n\ninterface UserContextType {\n user: UserInterface | undefined;\n setUser: (value: UserInterface | undefined) => void;\n}\n\nconst UserContext = createContext<UserContextType | undefined>(undefined);\n\ntype UserProviderProps = {\n children: ReactNode;\n dehydratedUser?: JsonApiHydratedDataInterface;\n};\n\nexport const UserProvider = ({ children, dehydratedUser }: UserProviderProps) => {\n const generateUrl = usePageUrlGenerator();\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n const t = useTranslations();\n\n const [user, setUser] = useState<UserInterface | undefined>(\n dehydratedUser ? rehydrate<UserInterface>(Modules.User, dehydratedUser) : undefined,\n );\n\n const breadcrumb = () => {\n const response: BreadcrumbItemData[] = [];\n\n if (hasPermissionToModule({ module: Modules.User, action: Action.Update })) {\n response.push({\n name: t(`generic.settings`),\n href: generateUrl({ page: `/settings` }),\n });\n\n response.push({\n name: t(`types.users`, { count: 2 }),\n href: generateUrl({ page: `/settings`, id: Modules.User.pageUrl }),\n });\n }\n\n if (user)\n response.push({\n name: `${user.name}${user.isDeleted ? ` (${t(`foundations.user.deleted`)})` : \"\"}`,\n href: generateUrl({ page: Modules.User, id: user.id }),\n });\n\n return response;\n };\n\n const title = () => {\n const response: any = {\n type: t(`types.users`, { count: user ? 1 : 2 }),\n };\n\n const functions: ReactNode[] = [];\n\n if (user) {\n response.element = `${user.name}${user.isDeleted ? ` (${t(`foundations.user.deleted`)})` : \"\"}`;\n\n if (user.isDeleted) {\n functions.push(<UserReactivator key={`UserReactivator`} user={user} propagateChanges={setUser} />);\n } else {\n if (!user.isActivated)\n functions.push(<UserResentInvitationEmail key={`UserResentInvitationEmail`} user={user} />);\n\n functions.push(<UserDeleter key={`UserDeleter`} user={user} />);\n }\n\n functions.push(<UserEditor key={`UserEditor`} user={user} propagateChanges={setUser} />);\n }\n\n if (functions.length > 0) response.functions = functions;\n\n return response;\n };\n\n return (\n <SharedProvider value={{ breadcrumbs: breadcrumb(), title: title() }}>\n <UserContext.Provider\n value={{\n user: user,\n setUser: setUser,\n }}\n >\n {children}\n </UserContext.Provider>\n </SharedProvider>\n );\n};\n\nexport const useUserContext = (): UserContextType => {\n const context = useContext(UserContext);\n if (context === undefined) {\n throw new Error(\"useUserContext must be used within a UserProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useState } from \"react\";\nimport {\n CommonAssociationCommandDialog,\n CommonAssociationTrigger,\n triggerAssociationToast,\n UserListInAdd,\n} from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { RoleInterface, RoleService } from \"../../../role\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface, UserService } from \"../../data\";\n\ntype AddUserToRoleProps = {\n role: RoleInterface;\n refresh: () => Promise<void>;\n};\n\nfunction AddUserToRoleInternal({ role, refresh }: AddUserToRoleProps) {\n const { company } = useCurrentUserContext<UserInterface>();\n const [show, setShow] = useState<boolean>(false);\n const [users, setUsers] = useState<UserInterface[]>([]);\n const t = useTranslations();\n\n const [existingUsers, setExistingUsers] = useState<UserInterface[] | null>(null);\n useEffect(() => {\n const fetchExistingUsers = async () => {\n setExistingUsers(await UserService.findMany({ roleId: role.id, fetchAll: true }));\n };\n if (show) {\n setExistingUsers(null);\n fetchExistingUsers();\n }\n }, [show]);\n\n const addUserToRole = async (user: UserInterface) => {\n await RoleService.addUserToRole({\n roleId: role.id,\n userId: user.id,\n });\n setUsers(users.filter((u) => u.id !== user.id));\n\n triggerAssociationToast({\n t: t,\n source: t(`types.users`, { count: 1 }),\n destination: t(`types.roles`, { count: 1 }),\n source_name: user.name,\n destination_name: t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) }),\n });\n\n refresh();\n };\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n ready: !!company && show,\n retriever: (params) => UserService.findAllUsers(params),\n retrieverParams: { companyId: company?.id },\n module: Modules.User,\n }) as DataListRetriever<UserInterface>;\n\n useEffect(() => {\n if (!!company && show) {\n data.setReady(true);\n }\n }, [data, company, show]);\n\n return (\n <>\n <CommonAssociationTrigger\n sourceType={t(`types.users`, { count: 1 })}\n destinationType={t(`types.roles`, { count: 1 })}\n onTrigger={() => setShow(true)}\n />\n <CommonAssociationCommandDialog\n show={show}\n setShow={setShow}\n data={data}\n source={t(`types.users`, { count: 1 })}\n destination={t(`types.roles`, { count: 1 })}\n destinationName={t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) })}\n >\n <UserListInAdd data={data} existingUsers={existingUsers} setSelectedUser={addUserToRole} />\n </CommonAssociationCommandDialog>\n </>\n );\n}\n\nexport function AddUserToRole(props: AddUserToRoleProps) {\n return <AddUserToRoleInternal {...props} />;\n}\n","\"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 { createContext, ReactNode, useContext } from \"react\";\nimport { BreadcrumbItemData } from \"../interfaces\";\n\nconst SharedContext = createContext<{\n breadcrumbs: BreadcrumbItemData[];\n title: {\n type: string | string[];\n element?: string;\n functions?: ReactNode;\n };\n} | null>(null);\n\ninterface SharedProviderProps {\n children: ReactNode;\n value: {\n breadcrumbs: BreadcrumbItemData[];\n title: {\n type: string;\n element?: string;\n functions?: ReactNode;\n };\n };\n}\n\nexport const SharedProvider = ({ children, value }: SharedProviderProps) => {\n return <SharedContext.Provider value={value}>{children}</SharedContext.Provider>;\n};\n\nexport const useSharedContext = () => {\n const context = useContext(SharedContext);\n if (!context) {\n throw new Error(\"useSharedContext must be used within a SharedProvider\");\n }\n return context;\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 { useTranslations } from \"next-intl\";\nimport { useUserContext } from \"../../contexts\";\nimport { UserDetails } from \"../details\";\n\nexport function UserContainer() {\n const { user } = useUserContext();\n if (!user) return null;\n\n const t = useTranslations();\n\n return (\n <div className=\"flex w-full gap-x-4\">\n <div className=\"w-2xl flex h-[calc(100vh-theme(spacing.20))] flex-col justify-between border-r pr-4\">\n <div className=\"flex h-full overflow-y-auto\">\n <UserDetails user={user} />\n </div>\n </div>\n <div className=\"flex w-full flex-col gap-y-4\"></div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { ReactElement } from \"react\";\nimport { AttributeElement, ContentTitle } from \"../../../../components\";\nimport { useSharedContext } from \"../../../../contexts\";\nimport { Modules } from \"../../../../core\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { Badge, Link } from \"../../../../shadcnui\";\nimport { RoleInterface } from \"../../../role\";\nimport { UserInterface } from \"../../data\";\n\ntype UserDetailsProps = {\n user: UserInterface;\n};\n\nexport function UserDetails({ user }: UserDetailsProps) {\n const generateUrl = usePageUrlGenerator();\n const t = useTranslations();\n const { title } = useSharedContext();\n\n let roles: ReactElement<any> = <></>;\n\n if (user.roles && user.roles.length > 0) {\n roles = (\n <div className=\"mb-4 w-full\">\n <div className=\"flex flex-wrap gap-2\">\n {user.roles.map((role: RoleInterface, index: number) => (\n <Link key={role.id} href={generateUrl({ page: Modules.Role, id: role.id })}>\n <Badge className=\"mr-2\" variant={`default`}>\n {t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) })}\n </Badge>\n </Link>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full flex-col gap-y-2\">\n {user.avatar && (\n <div className=\"relative aspect-auto w-full max-w-md overflow-hidden rounded-lg\">\n <Image\n src={user.avatar}\n alt={user.name}\n width={800}\n height={600}\n className=\"h-auto w-full rounded-lg object-contain\"\n />\n </div>\n )}\n <ContentTitle type={title.type} element={title.element} functions={title.functions} />\n {user.isDeleted ? (\n <div>\n <Badge variant=\"destructive\">{t(`foundations.user.errors.deleted`)}</Badge>\n </div>\n ) : (\n <>\n {!user.isActivated && (\n <div>\n <Badge variant=\"destructive\">{t(`foundations.user.errors.inactive`)}</Badge>\n </div>\n )}\n </>\n )}\n {roles}\n <AttributeElement inline={true} title={t(`foundations.user.fields.title.label`)} value={user.title} />\n <AttributeElement inline={true} title={t(`generic.fields.email.label`)} value={user.email} />\n <AttributeElement inline={false} title={t(`foundations.user.fields.bio.label`)} value={user.bio} />\n </div>\n );\n}\n","\"use client\";\n\nimport { Modules } from \"../../../../core\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Link,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../../../shadcnui\";\nimport { cn } from \"../../../../utils\";\nimport { UserInterface } from \"../../data\";\n\ntype UserAvatarProps = {\n user: UserInterface;\n className?: string;\n showFull?: boolean;\n showLink?: boolean;\n};\n\nexport function UserAvatar({ user, className, showFull, showLink }: UserAvatarProps) {\n const generateUrl = usePageUrlGenerator();\n\n const getInitial = (param?: string) => {\n if (!param) return \"\";\n return param[0].toUpperCase();\n };\n\n const getInitials = (name: string) => {\n const words = name.split(\" \");\n const initials =\n words.length > 1 ? getInitial(words[0][0]) + getInitial(words[words.length - 1][0]) : getInitial(words[0][0]);\n\n return initials ?? \"\";\n };\n\n const getAvatar = () => {\n return (\n <div className=\"*:ring-border *:ring-1\">\n <Avatar className={`h-6 w-6 ${className}`}>\n <AvatarImage className=\"object-cover\" src={user?.avatar} />\n <AvatarFallback>{getInitials(user.name)}</AvatarFallback>\n </Avatar>\n </div>\n );\n };\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {showLink === false ? (\n // If showLink is explicitly false, never show a link\n showFull ? (\n <div className={cn(`mb-2 flex w-full flex-row items-center justify-start gap-x-2 text-sm`, className)}>\n {getAvatar()}\n {user.name}\n </div>\n ) : (\n getAvatar()\n )\n ) : showFull ? (\n <Link\n href={generateUrl({ page: Modules.User, id: user.id })}\n className={cn(`mb-2 flex w-full flex-row items-center justify-start gap-x-2 text-sm`, className)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex w-full flex-row items-center gap-x-2\">\n {getAvatar()}\n {user.name}\n </div>\n </Link>\n ) : showLink ? (\n <Link href={generateUrl({ page: Modules.User, id: user.id })} className={className}>\n {getAvatar()}\n </Link>\n ) : (\n getAvatar()\n )}\n </TooltipTrigger>\n <TooltipContent>{user.name}</TooltipContent>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport { Card, CardContent } from \"../../../../shadcnui\";\nimport { useCurrentUserContext, useUserContext } from \"../../contexts\";\nimport { UserInterface } from \"../../data\";\nimport { UserAvatar } from \"../widgets\";\n\nexport function UserIndexDetails() {\n const { user } = useUserContext();\n const { currentUser } = useCurrentUserContext<UserInterface>();\n if (!user || !currentUser) return null;\n\n return (\n <div className=\"flex w-full flex-row gap-x-4\">\n <Card className=\"min-h-96 w-96 flex-shrink-0 self-start p-2\">\n <CardContent className=\"flex h-full flex-col gap-y-4 p-2\">\n <div className=\"flex w-full justify-start gap-x-4\">\n {user.avatar && <UserAvatar user={user} className=\"h-40 w-40\" />}\n <div className=\"flex flex-col justify-start gap-y-2\">\n <div className=\"text-primary text-2xl font-semibold\">{user.name}</div>\n <div className=\"text-muted-foreground text-xs\">{user.bio ?? \"\"}</div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n","\"use client\";\n\nimport { PageContentContainer } from \"../../../../components\";\nimport { useUserContext } from \"../../contexts\";\nimport { UserIndexDetails } from \"../details\";\n\nexport function UserIndexContainer() {\n const { user } = useUserContext();\n if (!user) return null;\n\n return <PageContentContainer details={<UserIndexDetails />} />;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { CompanyUsersList, Tab, TabsContainer } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { Action } from \"../../../../permissions\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface } from \"../../data\";\n\nfunction UsersListContainerInternal() {\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n const t = useTranslations();\n\n if (!hasPermissionToModule({ module: Modules.User, action: Action.Delete })) return <CompanyUsersList />;\n\n const tabs: Tab[] = [\n {\n label: t(`types.users`, { count: 2 }),\n content: <CompanyUsersList />,\n modules: [Modules.Company],\n action: Action.Read,\n },\n {\n label: t(`foundations.user.deleted`),\n content: <CompanyUsersList isDeleted={true} />,\n modules: [Modules.Company],\n action: Action.Update,\n },\n ];\n\n return <TabsContainer tabs={tabs} />;\n}\n\nexport function UsersListContainer() {\n return <UsersListContainerInternal />;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { useCompanyContext } from \"../../../../contexts\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { CompanyInterface } from \"../../../company\";\nimport { UserFields, UserInterface, UserService } from \"../../data\";\nimport { UserEditor } from \"../forms\";\n\ntype AdminUsersListProps = {\n company: CompanyInterface;\n};\n\nfunction AdminUsersListInternal({ company }: AdminUsersListProps) {\n const t = useTranslations();\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n retriever: (params) => UserService.findManyForAmin(params),\n retrieverParams: { companyId: company.id },\n module: Modules.User,\n });\n\n return (\n <ContentListTable\n title={t(`types.users`, { count: 2 })}\n data={data}\n fields={[UserFields.name, UserFields.email, UserFields.createdAt]}\n tableGeneratorType={Modules.User}\n functions={<UserEditor propagateChanges={data.refresh} adminCreated />}\n />\n );\n}\n\nexport function AdminUsersList() {\n const { company } = useCompanyContext();\n if (!company) return null;\n\n return <AdminUsersListInternal company={company} />;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ReactNode, useEffect } from \"react\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserFields, UserInterface, UserService } from \"../../data\";\nimport { UserEditor } from \"../forms\";\n\ntype CompanyUsersListProps = {\n isDeleted?: boolean;\n};\n\nexport function CompanyUsersList({ isDeleted }: CompanyUsersListProps) {\n const { company } = useCurrentUserContext<UserInterface>();\n const t = useTranslations();\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n ready: !!company,\n retriever: (params) => UserService.findAllUsers(params),\n retrieverParams: { companyId: company?.id, isDeleted: isDeleted },\n module: Modules.User,\n }) as DataListRetriever<UserInterface>;\n\n useEffect(() => {\n if (company) data.setReady(true);\n }, [company]);\n\n const functions: ReactNode[] = [\n isDeleted ? undefined : <UserEditor key=\"create-user\" propagateChanges={data.refresh} />,\n ];\n\n return (\n <ContentListTable\n data={data}\n fields={[UserFields.name, UserFields.email]}\n tableGeneratorType={Modules.User}\n functions={functions}\n title={t(`types.users`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport { Modules } from \"../../../../core\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { Link } from \"../../../../shadcnui\";\nimport { ContentInterface } from \"../../../content\";\nimport { UserInterface } from \"../../data\";\nimport { UserAvatar } from \"../widgets\";\n\ntype ContributorsListProps = {\n content: ContentInterface;\n};\n\nexport function ContributorsList({ content }: ContributorsListProps) {\n const generateUrl = usePageUrlGenerator();\n\n return (\n <div className=\"flex flex-row items-center\">\n <Link\n key={content.author.id}\n href={generateUrl({ page: Modules.User, id: content.author.id })}\n onClick={(e) => e.stopPropagation()}\n >\n <UserAvatar user={content.author} className=\"mr-1 h-6 w-6\" />\n </Link>\n <div className=\"flex flex-row-reverse justify-end -space-x-1 space-x-reverse\">\n {content.editors\n .filter((editor: UserInterface) => editor.id !== content.author.id)\n .map((editor: UserInterface) => (\n <Link\n key={editor.id}\n href={generateUrl({ page: Modules.User, id: editor.id })}\n onClick={(e) => e.stopPropagation()}\n >\n <UserAvatar user={editor} className=\"h-5 w-5\" />\n </Link>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { UserFields, UserInterface, UserService } from \"../../data\";\n\ntype RelevantUsersListProps = {\n id: string;\n};\n\nexport function RelevantUsersList({ id }: RelevantUsersListProps) {\n const t = useTranslations();\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n module: Modules.User,\n retriever: (params) => UserService.findRelevant(params),\n retrieverParams: { id: id },\n }) as DataListRetriever<UserInterface>;\n\n return (\n <ContentListTable\n data={data}\n fields={[UserFields.name, UserFields.email, UserFields.relevance]}\n tableGeneratorType={Modules.User}\n title={t(`generic.relevant_users`)}\n />\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { RoleInterface } from \"../../../role\";\nimport { UserFields, UserInterface, UserService } from \"../../data\";\n\ntype RoleUsersListProps = {\n role: RoleInterface;\n};\n\nexport function RoleUsersList({ role }: RoleUsersListProps) {\n const t = useTranslations();\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n retriever: (params) => UserService.findAllUsersByRole(params),\n retrieverParams: { roleId: role.id },\n module: Modules.User,\n }) as DataListRetriever<UserInterface>;\n\n return (\n <ContentListTable\n data={data}\n fields={[UserFields.name, UserFields.email]}\n tableGeneratorType={Modules.User}\n title={t(`types.users`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { DataListRetriever } from \"../../../../hooks\";\nimport { CommandItem } from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../data\";\nimport { UserAvatar } from \"../widgets\";\n\ntype UserListInAddProps = {\n data: DataListRetriever<UserInterface>;\n existingUsers: UserInterface[] | null;\n setSelectedUser: (user: UserInterface) => void;\n setLevelOpen?: (open: boolean) => void;\n};\n\nexport function UserListInAdd({ data, existingUsers, setSelectedUser, setLevelOpen }: UserListInAddProps) {\n return (\n <>\n {data.data !== undefined &&\n (data.data as UserInterface[])\n .filter(\n (user: UserInterface) =>\n existingUsers && !existingUsers.find((existingUser: UserInterface) => existingUser.id === user.id),\n )\n .map((user: UserInterface) => {\n return (\n <React.Fragment key={user.id}>\n <CommandItem\n className=\"cursor-pointer\"\n key={user.id}\n onClick={(e) => {\n setSelectedUser(user);\n setLevelOpen?.(true);\n }}\n onSelect={(e) => {\n setSelectedUser(user);\n setLevelOpen?.(true);\n }}\n >\n <div className=\"flex w-full flex-row items-center justify-between px-4 py-1\">\n <UserAvatar user={user} />\n <div className=\"ml-5 flex w-full flex-col\">\n <div className=\"text-sm font-medium\">{user.name}</div>\n <div className=\"text-xs font-normal\">{user.email}</div>\n </div>\n </div>\n </CommandItem>\n </React.Fragment>\n );\n })}\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ReactElement } from \"react\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever } from \"../../../../hooks\";\nimport { UserFields, UserInterface } from \"../../data\";\n\ntype UsersListProps = {\n data: DataListRetriever<UserInterface>;\n optionComponents?: ReactElement<any>[];\n removeFunction?: (user: UserInterface) => Promise<void>;\n hideOptions?: boolean;\n showRelevance?: boolean;\n restrictToJoinRequests?: boolean;\n};\n\nexport function UsersList({ data, optionComponents, removeFunction, hideOptions, showRelevance }: UsersListProps) {\n const t = useTranslations();\n\n return (\n <ContentListTable\n data={data}\n fields={[UserFields.name, UserFields.email]}\n tableGeneratorType={Modules.User}\n title={t(`types.users`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { UserFields, UserInterface, UserService } from \"../../data\";\n\ntype UsersListByContentIdsProps = {\n contentIds: string[];\n};\n\nexport function UsersListByContentIds({ contentIds }: UsersListByContentIdsProps) {\n const t = useTranslations();\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n module: Modules.User,\n retriever: (params) => UserService.findManyByContentIds(params),\n retrieverParams: { contentIds: contentIds },\n });\n\n return (\n <ContentListTable\n data={data}\n fields={[UserFields.name, UserFields.email]}\n tableGeneratorType={Modules.User}\n title={t(`generic.relevant_users`)}\n />\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","// import { toast } from \"@/hooks/use-toast\";\n\nimport { toast } from \"sonner\";\n\nexport function errorToast(params: { title?: string; error: any }) {\n toast.error(params?.title ?? \"Error\", {\n description: params.error instanceof Error ? params.error.message : String(params.error),\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 { FileIcon, FileImageIcon, FileSpreadsheetIcon, FileTextIcon, UploadIcon, XIcon } from \"lucide-react\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { DropzoneOptions } from \"react-dropzone\";\nimport { cn } from \"../../utils\";\nimport { FileInput, FileUploader } from \"./FileUploader\";\n\ntype MultiFileUploaderProps = {\n files: File[];\n setFiles: (files: File[]) => void;\n};\n\nconst dropzone = {\n multiple: false,\n maxSize: 100 * 1024 * 1024,\n preventDropOnDocument: false,\n accept: {\n \"application/images\": [\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".svg\", \".docx\", \".xslx\", \".pdf\", \".txt\", \".md\"],\n },\n} satisfies DropzoneOptions;\n\nexport default function MultiFileUploader({ files, setFiles }: MultiFileUploaderProps) {\n const uploadFiles = (newFiles: File[] | null) => {\n if (!newFiles) return;\n\n setFiles([...files, ...newFiles]);\n };\n\n const handleRemoveFile = (indexToRemove: number) => {\n setFiles(files.filter((_, index) => index !== indexToRemove));\n };\n\n return (\n <div className=\"grid w-full grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6\">\n <FileUploader\n value={files}\n onValueChange={uploadFiles}\n dropzoneOptions={dropzone}\n className=\"text-muted-foreground hover:text-primary relative aspect-square h-full cursor-pointer overflow-hidden rounded-lg border\"\n >\n <FileInput className={cn(\"text-muted-foreground flex h-full w-full flex-col items-center justify-center\")}>\n <UploadIcon className=\"my-4 h-8 w-8\" />\n </FileInput>\n </FileUploader>\n {files.map((file, index) => (\n <FilePreviewItem key={file.name + \"-\" + index} file={file} onRemoveClick={() => handleRemoveFile(index)} />\n ))}\n </div>\n );\n}\n\nconst FilePreviewItem = ({ file, onRemoveClick }: { file: File; onRemoveClick: () => void }) => {\n const [objectUrl, setObjectUrl] = useState<string | null>(null);\n\n useEffect(() => {\n if (file.type.startsWith(\"image/\")) {\n const url = URL.createObjectURL(file);\n setObjectUrl(url);\n return () => URL.revokeObjectURL(url);\n }\n setObjectUrl(null);\n }, [file]);\n\n const getFileIcon = () => {\n const extension = file.name.split(\".\").pop()?.toLowerCase();\n if (file.type.startsWith(\"image/\")) {\n return <FileImageIcon className=\"text-muted h-10 w-10 sm:h-12 sm:w-12\" />;\n }\n if (file.type === \"application/pdf\") {\n return <FileTextIcon className=\"text-destructive h-10 w-10 sm:h-12 sm:w-12\" />;\n }\n if (file.type.includes(\"wordprocessingml\") || extension === \"docx\" || extension === \"doc\") {\n return <FileTextIcon className=\"text-primary h-10 w-10 sm:h-12 sm:w-12\" />;\n }\n if (file.type.includes(\"spreadsheetml\") || extension === \"xlsx\" || extension === \"xls\") {\n return <FileSpreadsheetIcon className=\"text-secondary h-10 w-10 sm:h-12 sm:w-12\" />;\n }\n if (file.type.startsWith(\"text/\")) {\n return <FileTextIcon className=\"h-10 w-10 sm:h-12 sm:w-12\" />;\n }\n return <FileIcon className=\"text-muted h-10 w-10 sm:h-12 sm:w-12\" />;\n };\n\n return (\n <div className=\"text-muted-foreground group relative aspect-square h-full overflow-hidden rounded-lg border\">\n <button\n onClick={onRemoveClick}\n className=\"absolute top-1.5 right-1.5 z-20 rounded-full bg-black/60 p-1 text-white opacity-0 transition-all duration-200 ease-in-out group-hover:opacity-100 hover:bg-red-600 focus:outline-none\"\n aria-label=\"Remove file\"\n >\n <XIcon className=\"h-3.5 w-3.5\" />\n </button>\n {objectUrl ? (\n <Image src={objectUrl} alt={file.name} className=\"h-full w-full object-cover\" width={200} height={200} />\n ) : (\n <div className=\"bg-muted/30 flex h-full w-full flex-col items-center justify-center p-2\">\n {getFileIcon()}\n <span className=\"text-foreground/80 mt-2 w-full truncate px-1 text-center text-[10px] sm:text-xs\">\n {file.name}\n </span>\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Checkbox,\n FormLabel,\n FormMessage,\n} from \"../../../../shadcnui\";\nimport { ModuleInterface } from \"../../../module\";\nimport { FeatureInterface } from \"../../data\";\n\ntype FormFeaturesProps = {\n form: any;\n name?: string;\n features: FeatureInterface[];\n featureField?: string;\n moduleField?: string;\n};\n\nexport function FormFeatures({\n form,\n name,\n features,\n featureField = \"featureIds\",\n moduleField = \"moduleIds\",\n}: FormFeaturesProps) {\n const selectedFeatures: string[] = form.watch(featureField);\n const selectedModules: string[] = form.watch(moduleField);\n\n const toggleFeature = (feature: FeatureInterface, checked: boolean) => {\n let newFeatureIds = [...selectedFeatures];\n let newModuleIds = [...selectedModules];\n\n if (checked) {\n if (!newFeatureIds.includes(feature.id)) {\n newFeatureIds.push(feature.id);\n }\n feature.modules.forEach((module) => {\n if (!newModuleIds.includes(module.id)) {\n newModuleIds.push(module.id);\n }\n });\n } else {\n newFeatureIds = newFeatureIds.filter((id) => id !== feature.id);\n feature.modules.forEach((module) => {\n newModuleIds = newModuleIds.filter((id) => id !== module.id);\n });\n }\n form.setValue(featureField, newFeatureIds);\n form.setValue(moduleField, newModuleIds);\n };\n\n const toggleModule = (feature: FeatureInterface, module: ModuleInterface, checked: boolean) => {\n const modulesForFeature = feature.modules.map((m) => m.id);\n let newModuleIds = [...selectedModules];\n\n if (checked) {\n if (!selectedFeatures.includes(feature.id)) {\n newModuleIds = newModuleIds.filter((id) => !modulesForFeature.includes(id));\n newModuleIds.push(module.id);\n form.setValue(featureField, [...selectedFeatures, feature.id]);\n } else {\n if (!newModuleIds.includes(module.id)) {\n newModuleIds.push(module.id);\n }\n }\n } else {\n newModuleIds = newModuleIds.filter((id) => id !== module.id);\n const remaining = feature.modules.filter((m) => newModuleIds.includes(m.id));\n if (remaining.length === 0) {\n form.setValue(\n featureField,\n selectedFeatures.filter((id) => id !== feature.id),\n );\n }\n }\n form.setValue(moduleField, newModuleIds);\n };\n\n const isFeatureChecked = (feature: FeatureInterface) =>\n selectedFeatures.includes(feature.id) || feature.modules.every((module) => selectedModules.includes(module.id));\n\n return (\n <div className=\"flex w-full flex-col\">\n {name && <h2 className=\"mb-5 font-semibold\">{name}</h2>}\n {features.map((feature) => (\n <Accordion\n key={feature.id}\n type=\"single\"\n collapsible\n // className={`w-full p-0 ${feature.modules.filter((module) => !module.isCore).length === 0 ? \"border-t\" : \"\"}`}\n className={`w-full p-0`}\n >\n <AccordionItem value={feature.id} className=\"p-0\">\n <div\n className={`flex items-center justify-between p-0 ${feature.modules.filter((module) => !module.isCore).length === 0 ? \"py-4\" : \"\"}`}\n >\n <div className=\"flex items-center\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n id={feature.id}\n checked={isFeatureChecked(feature)}\n onCheckedChange={(val) => {\n toggleFeature(feature, val === true);\n }}\n />\n <FormLabel htmlFor={feature.id} className=\"ml-3 cursor-pointer font-normal\">\n {feature.name}\n </FormLabel>\n </div>\n {feature.modules.filter((module) => !module.isCore).length > 0 && (\n <AccordionTrigger asChild>\n <div className=\"w-full\"></div>\n </AccordionTrigger>\n )}\n </div>\n {feature.modules.filter((module) => !module.isCore).length > 0 && (\n <AccordionContent className=\"pl-6\">\n {feature.modules\n .filter((module) => !module.isCore)\n .sort((a: ModuleInterface, b: ModuleInterface) => a.name.localeCompare(b.name))\n .map((module: ModuleInterface) => (\n <div\n key={module.id}\n className=\"flex items-center border-t py-2\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n id={module.id}\n checked={selectedModules.includes(module.id)}\n onCheckedChange={(val) => {\n toggleModule(feature, module, val === true);\n }}\n />\n <FormLabel htmlFor={module.id} className=\"ml-3 cursor-pointer font-normal\">\n {module.name}\n </FormLabel>\n </div>\n ))}\n </AccordionContent>\n )}\n </AccordionItem>\n </Accordion>\n ))}\n <FormMessage />\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 { createContext, useContext } from \"react\";\n\nexport type CacheProfile = \"seconds\" | \"minutes\" | \"hours\" | \"days\" | \"weeks\" | \"max\" | \"default\";\n\nexport interface JsonApiConfig {\n /**\n * The base URL for API requests (e.g., https://api.example.com)\n */\n apiUrl: string;\n\n /**\n * Custom token getter function. If not provided, will use default cookie-based token retrieval.\n */\n tokenGetter?: () => Promise<string | undefined>;\n\n /**\n * Custom language getter function. If not provided, will use browser locale or next-intl.\n */\n languageGetter?: () => Promise<string>;\n\n /**\n * Default headers to include in all requests\n */\n defaultHeaders?: Record<string, string>;\n\n /**\n * Global error handler for failed requests (client-side only)\n */\n onError?: (status: number, message: string) => void;\n\n /**\n * Cache configuration\n */\n cacheConfig?: {\n defaultProfile: CacheProfile;\n };\n\n /**\n * Function to bootstrap the data class registry.\n * Will be called automatically when needed.\n */\n bootstrapper?: () => void;\n}\n\nconst JsonApiContext = createContext<JsonApiConfig | null>(null);\n\nexport function useJsonApiConfig(): JsonApiConfig {\n const config = useContext(JsonApiContext);\n if (!config) {\n throw new Error(\"useJsonApiConfig must be used within a JsonApiProvider\");\n }\n return config;\n}\n\nexport function useJsonApiConfigOptional(): JsonApiConfig | null {\n return useContext(JsonApiContext);\n}\n\nexport { JsonApiContext };\n","\"use client\";\n\nimport React, { useEffect, useMemo } from \"react\";\nimport { JsonApiConfig, JsonApiContext } from \"./JsonApiContext\";\n\nexport interface JsonApiProviderProps {\n config: JsonApiConfig;\n children: React.ReactNode;\n}\n\nexport function JsonApiProvider({ config, children }: JsonApiProviderProps) {\n // Run bootstrapper on mount if provided\n useEffect(() => {\n if (config.bootstrapper) {\n config.bootstrapper();\n }\n }, [config.bootstrapper]);\n\n // Memoize config to prevent unnecessary re-renders\n const memoizedConfig = useMemo(() => config, [config]);\n\n return (\n <JsonApiContext.Provider value={memoizedConfig}>\n {children}\n </JsonApiContext.Provider>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport { ApiDataInterface } from \"../../core/interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../../core/interfaces/ApiResponseInterface\";\n\nexport interface UseJsonApiGetOptions {\n /**\n * Whether to enable the query. If false, the query won't run.\n */\n enabled?: boolean;\n /**\n * Dependencies that trigger a refetch when changed.\n */\n deps?: any[];\n}\n\nexport interface UseJsonApiGetResult<T> {\n /**\n * The fetched data, or null if not yet fetched.\n */\n data: T | null;\n /**\n * Whether the query is currently loading.\n */\n loading: boolean;\n /**\n * Error message if the query failed.\n */\n error: string | null;\n /**\n * The full API response (includes raw data, pagination, etc.)\n */\n response: ApiResponseInterface | null;\n /**\n * Function to manually refetch the data.\n */\n refetch: () => Promise<void>;\n /**\n * Whether there is a next page available.\n */\n hasNextPage: boolean;\n /**\n * Whether there is a previous page available.\n */\n hasPreviousPage: boolean;\n /**\n * Function to fetch the next page.\n */\n fetchNextPage: () => Promise<void>;\n /**\n * Function to fetch the previous page.\n */\n fetchPreviousPage: () => Promise<void>;\n}\n\n/**\n * Hook for fetching data from a JSON:API endpoint.\n *\n * @example\n * ```tsx\n * const { data, loading, error, refetch } = useJsonApiGet<Article>({\n * classKey: Modules.Article,\n * endpoint: `/articles/${id}`,\n * });\n *\n * if (loading) return <Loading />;\n * if (error) return <Error message={error} />;\n * return <ArticleView article={data} />;\n * ```\n */\nexport function useJsonApiGet<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n options?: UseJsonApiGetOptions;\n}): UseJsonApiGetResult<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [response, setResponse] = useState<ApiResponseInterface | null>(null);\n const isMounted = useRef(true);\n\n const fetchData = useCallback(async () => {\n if (params.options?.enabled === false) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const { JsonApiGet } = await import(\"../../unified/JsonApiRequest\");\n const language = navigator.language.split(\"-\")[0] || \"en\";\n\n const apiResponse = await JsonApiGet({\n classKey: params.classKey,\n endpoint: params.endpoint,\n companyId: params.companyId,\n language,\n });\n\n if (!isMounted.current) return;\n\n setResponse(apiResponse);\n\n if (apiResponse.ok) {\n setData(apiResponse.data as T);\n } else {\n setError(apiResponse.error);\n }\n } catch (err) {\n if (!isMounted.current) return;\n setError(err instanceof Error ? err.message : \"Unknown error\");\n } finally {\n if (isMounted.current) {\n setLoading(false);\n }\n }\n }, [params.classKey, params.endpoint, params.companyId, params.options?.enabled]);\n\n const fetchNextPage = useCallback(async () => {\n if (!response?.nextPage) return;\n\n setLoading(true);\n try {\n const nextResponse = await response.nextPage();\n if (!isMounted.current) return;\n\n setResponse(nextResponse);\n if (nextResponse.ok) {\n setData(nextResponse.data as T);\n } else {\n setError(nextResponse.error);\n }\n } catch (err) {\n if (!isMounted.current) return;\n setError(err instanceof Error ? err.message : \"Unknown error\");\n } finally {\n if (isMounted.current) {\n setLoading(false);\n }\n }\n }, [response]);\n\n const fetchPreviousPage = useCallback(async () => {\n if (!response?.prevPage) return;\n\n setLoading(true);\n try {\n const prevResponse = await response.prevPage();\n if (!isMounted.current) return;\n\n setResponse(prevResponse);\n if (prevResponse.ok) {\n setData(prevResponse.data as T);\n } else {\n setError(prevResponse.error);\n }\n } catch (err) {\n if (!isMounted.current) return;\n setError(err instanceof Error ? err.message : \"Unknown error\");\n } finally {\n if (isMounted.current) {\n setLoading(false);\n }\n }\n }, [response]);\n\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [fetchData, ...(params.options?.deps || [])]);\n\n return {\n data,\n loading,\n error,\n response,\n refetch: fetchData,\n hasNextPage: !!response?.next,\n hasPreviousPage: !!response?.prev,\n fetchNextPage,\n fetchPreviousPage,\n };\n}\n","\"use client\";\n\nimport { useState, useCallback } from \"react\";\nimport { ApiDataInterface } from \"../../core/interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../../core/interfaces/ApiResponseInterface\";\n\nexport type MutationMethod = \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport interface UseJsonApiMutationResult<T> {\n /**\n * The result data from the mutation, or null if not yet executed.\n */\n data: T | null;\n /**\n * Whether the mutation is currently in progress.\n */\n loading: boolean;\n /**\n * Error message if the mutation failed.\n */\n error: string | null;\n /**\n * The full API response.\n */\n response: ApiResponseInterface | null;\n /**\n * Execute the mutation.\n */\n mutate: (params: MutationParams) => Promise<T | null>;\n /**\n * Reset the mutation state.\n */\n reset: () => void;\n}\n\nexport interface MutationParams {\n /**\n * The endpoint to call.\n */\n endpoint: string;\n /**\n * The request body.\n */\n body?: any;\n /**\n * Files to upload.\n */\n files?: { [key: string]: File | Blob } | File | Blob;\n /**\n * Company ID for multi-tenant requests.\n */\n companyId?: string;\n /**\n * Override the default JSON:API body creation.\n */\n overridesJsonApiCreation?: boolean;\n /**\n * Response type if different from the request type.\n */\n responseType?: ApiRequestDataTypeInterface;\n}\n\n/**\n * Hook for making mutations (POST, PUT, PATCH, DELETE) to a JSON:API endpoint.\n *\n * @example\n * ```tsx\n * const { mutate, loading, error } = useJsonApiMutation<Article>({\n * method: \"POST\",\n * classKey: Modules.Article,\n * });\n *\n * const handleSubmit = async (data: ArticleInput) => {\n * const result = await mutate({\n * endpoint: \"/articles\",\n * body: data,\n * });\n * if (result) {\n * // Success!\n * }\n * };\n * ```\n */\nexport function useJsonApiMutation<T extends ApiDataInterface>(config: {\n method: MutationMethod;\n classKey: ApiRequestDataTypeInterface;\n onSuccess?: (data: T) => void;\n onError?: (error: string) => void;\n}): UseJsonApiMutationResult<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [response, setResponse] = useState<ApiResponseInterface | null>(null);\n\n const reset = useCallback(() => {\n setData(null);\n setLoading(false);\n setError(null);\n setResponse(null);\n }, []);\n\n const mutate = useCallback(\n async (params: MutationParams): Promise<T | null> => {\n setLoading(true);\n setError(null);\n\n try {\n const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import(\"../../unified/JsonApiRequest\");\n const language = navigator.language.split(\"-\")[0] || \"en\";\n\n let apiResponse: ApiResponseInterface;\n\n switch (config.method) {\n case \"POST\":\n apiResponse = await JsonApiPost({\n classKey: config.classKey,\n endpoint: params.endpoint,\n companyId: params.companyId,\n body: params.body,\n overridesJsonApiCreation: params.overridesJsonApiCreation,\n files: params.files,\n language,\n responseType: params.responseType,\n });\n break;\n case \"PUT\":\n apiResponse = await JsonApiPut({\n classKey: config.classKey,\n endpoint: params.endpoint,\n companyId: params.companyId,\n body: params.body,\n files: params.files,\n language,\n responseType: params.responseType,\n });\n break;\n case \"PATCH\":\n apiResponse = await JsonApiPatch({\n classKey: config.classKey,\n endpoint: params.endpoint,\n companyId: params.companyId,\n body: params.body,\n overridesJsonApiCreation: params.overridesJsonApiCreation,\n files: params.files,\n language,\n responseType: params.responseType,\n });\n break;\n case \"DELETE\":\n apiResponse = await JsonApiDelete({\n classKey: config.classKey,\n endpoint: params.endpoint,\n companyId: params.companyId,\n language,\n responseType: params.responseType,\n });\n break;\n }\n\n setResponse(apiResponse);\n\n if (apiResponse.ok) {\n const resultData = apiResponse.data as T;\n setData(resultData);\n config.onSuccess?.(resultData);\n return resultData;\n } else {\n setError(apiResponse.error);\n config.onError?.(apiResponse.error);\n return null;\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : \"Unknown error\";\n setError(errorMessage);\n config.onError?.(errorMessage);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [config],\n );\n\n return {\n data,\n loading,\n error,\n response,\n mutate,\n reset,\n };\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { ApiDataInterface } from \"../../core/interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../../core/interfaces/ApiRequestDataTypeInterface\";\nimport { JsonApiHydratedDataInterface } from \"../../core/interfaces/JsonApiHydratedDataInterface\";\nimport { RehydrationFactory } from \"../../core/factories/RehydrationFactory\";\n\n/**\n * Hook to rehydrate server-passed data into typed objects.\n * Use this when passing data from server components to client components.\n *\n * @example\n * ```tsx\n * // In server component\n * const article = await ArticleService.findOne(id);\n * return <ArticleDetails data={article.dehydrate()} />;\n *\n * // In client component\n * function ArticleDetails({ data }: { data: JsonApiHydratedDataInterface }) {\n * const article = useRehydration<Article>(Modules.Article, data);\n * return <div>{article.title}</div>;\n * }\n * ```\n */\nexport function useRehydration<T extends ApiDataInterface>(\n classKey: ApiRequestDataTypeInterface,\n data: JsonApiHydratedDataInterface | null | undefined,\n): T | null {\n return useMemo(() => {\n if (!data) return null;\n return RehydrationFactory.rehydrate<T>(classKey, data);\n }, [classKey, data]);\n}\n\n/**\n * Hook to rehydrate a list of server-passed data into typed objects.\n */\nexport function useRehydrationList<T extends ApiDataInterface>(\n classKey: ApiRequestDataTypeInterface,\n data: JsonApiHydratedDataInterface[] | null | undefined,\n): T[] {\n return useMemo(() => {\n if (!data || data.length === 0) return [];\n return RehydrationFactory.rehydrateList<T>(classKey, data);\n }, [classKey, data]);\n}\n","\"use client\";\n\nimport { ColumnDef, Row } from \"@tanstack/react-table\";\nimport { useTranslations } from \"next-intl\";\nimport { useMemo } from \"react\";\nimport { cellDate, cellId } from \"../../../components\";\nimport { Modules } from \"../../../core\";\nimport { TableContent, usePageUrlGenerator, UseTableStructureHook } from \"../../../hooks\";\nimport { getRoleId } from \"../../../roles\";\nimport { Link } from \"../../../shadcnui\";\nimport { UserInterface } from \"../../user\";\nimport { useCurrentUserContext } from \"../../user/contexts\";\nimport { CompanyFields, CompanyInterface } from \"../data\";\n\nexport const useCompanyTableStructure: UseTableStructureHook<CompanyInterface, CompanyFields> = (params) => {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const { hasRole } = useCurrentUserContext<UserInterface>();\n\n // Memoize tableData to prevent infinite re-renders\n const tableData = useMemo(() => {\n return params.data.map((company: CompanyInterface) => {\n const entry: TableContent<CompanyInterface> = {\n jsonApiData: company,\n };\n entry[CompanyFields.companyId] = company.id;\n params.fields.forEach((field) => {\n entry[field] = company[field as keyof CompanyInterface];\n });\n return entry;\n });\n }, [params.data, params.fields]);\n\n const fieldColumnMap: Partial<Record<CompanyFields, () => any>> = {\n [CompanyFields.companyId]: () =>\n cellId({\n name: \"companyId\",\n checkedIds: params.checkedIds,\n toggleId: params.toggleId,\n }),\n [CompanyFields.name]: () => ({\n id: \"name\",\n accessorKey: \"name\",\n header: t(`foundations.user.fields.name.label`),\n cell: ({ row }: { row: Row<TableContent<CompanyInterface>> }) => {\n const company = row.original.jsonApiData as CompanyInterface;\n return (\n <Link\n href={\n hasRole(getRoleId().Administrator)\n ? generateUrl({\n page: \"/administration\",\n id: Modules.Company.pageUrl?.substring(1),\n childPage: company.id,\n })\n : generateUrl({ page: Modules.Company, id: company.id })\n }\n >\n {row.getValue(\"name\")}\n </Link>\n );\n },\n enableSorting: false,\n enableHiding: false,\n }),\n [CompanyFields.createdAt]: () =>\n cellDate({\n name: \"createdAt\",\n title: t(`generic.date.create`),\n }),\n };\n\n // Memoize columns to prevent infinite re-renders\n const columns = useMemo(() => {\n return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== undefined) as ColumnDef<\n TableContent<CompanyInterface>\n >[];\n }, [params.fields, fieldColumnMap, t, generateUrl, hasRole]);\n\n // Memoize the return object to prevent infinite re-renders\n return useMemo(() => ({ data: tableData, columns: columns }), [tableData, columns]);\n};\n","\"use client\";\n\nimport { ColumnDef, Row } from \"@tanstack/react-table\";\nimport { useTranslations } from \"next-intl\";\nimport { useMemo } from \"react\";\nimport { cellDate, cellId } from \"../../../components\";\nimport { Modules } from \"../../../core\";\nimport { TableContent, usePageUrlGenerator, UseTableStructureHook } from \"../../../hooks\";\nimport { Link } from \"../../../shadcnui\";\nimport { RoleFields, RoleInterface } from \"../data\";\n\nexport const useRoleTableStructure: UseTableStructureHook<RoleInterface, RoleFields> = (params) => {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n\n // Memoize tableData to prevent infinite re-renders\n const tableData = useMemo(() => {\n return params.data.map((role: RoleInterface) => {\n const entry: TableContent<RoleInterface> = {\n jsonApiData: role,\n };\n entry[RoleFields.roleId] = role.id;\n params.fields.forEach((field) => {\n entry[field] = role[field as keyof RoleInterface];\n });\n return entry;\n });\n }, [params.data, params.fields]);\n\n const fieldColumnMap: Partial<Record<RoleFields, () => any>> = {\n [RoleFields.roleId]: () =>\n cellId({\n name: \"roleId\",\n checkedIds: params.checkedIds,\n toggleId: params.toggleId,\n }),\n [RoleFields.name]: () => ({\n id: \"name\",\n accessorKey: \"name\",\n header: t(`foundations.role.fields.name.label`),\n cell: ({ row }: { row: Row<TableContent<RoleInterface>> }) => {\n const role = row.original.jsonApiData as RoleInterface;\n return <Link href={generateUrl({ page: Modules.Role, id: role.id })}>{row.getValue(\"name\")}</Link>;\n },\n enableSorting: false,\n enableHiding: false,\n }),\n [RoleFields.description]: () => ({\n id: \"description\",\n accessorKey: \"description\",\n header: t(`foundations.role.fields.description.label`),\n cell: ({ row }: { row: Row<TableContent<RoleInterface>> }) => <>{row.getValue(\"description\")}</>,\n enableSorting: false,\n enableHiding: false,\n }),\n [RoleFields.createdAt]: () =>\n cellDate({\n name: \"createdAt\",\n title: t(`generic.date.create`),\n }),\n };\n\n // Memoize columns to prevent infinite re-renders\n const columns = useMemo(() => {\n return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== undefined) as ColumnDef<\n TableContent<RoleInterface>\n >[];\n }, [params.fields, fieldColumnMap, t, generateUrl]);\n\n // Memoize the return object to prevent infinite re-renders\n return useMemo(() => ({ data: tableData, columns: columns }), [tableData, columns]);\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useDebounce } from \"../../../hooks/useDebounce\";\nimport { UserInterface, UserService } from \"../data\";\n\nexport const useUserSearch = () => {\n const [users, setUsers] = useState<UserInterface[]>([]);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const searchQueryRef = useRef(\"\");\n\n const loadUsers = useCallback(\n async (search: string) => {\n try {\n if (search === searchQueryRef.current && users.length > 0) return;\n setIsLoading(true);\n searchQueryRef.current = search;\n const fetchedUsers = await UserService.findMany({ search, fetchAll: true });\n setUsers(fetchedUsers);\n } catch (error) {\n console.error(\"Failed to load users:\", error);\n } finally {\n setIsLoading(false);\n }\n },\n [users.length],\n );\n\n const debouncedLoadUsers = useDebounce(loadUsers, 500);\n\n useEffect(() => {\n if (searchQuery !== searchQueryRef.current) {\n setIsLoading(true);\n debouncedLoadUsers(searchQuery);\n }\n }, [searchQuery, debouncedLoadUsers]);\n\n const clearSearch = () => {\n setSearchQuery(\"\");\n searchQueryRef.current = \"\";\n };\n\n return {\n users,\n searchQuery,\n setSearchQuery,\n isLoading,\n loadUsers,\n clearSearch,\n searchQueryRef,\n };\n};\n","\"use client\";\n\nimport { ColumnDef, Row } from \"@tanstack/react-table\";\nimport { useTranslations } from \"next-intl\";\nimport { useMemo } from \"react\";\nimport { cellDate, cellId, UserAvatar } from \"../../../components\";\nimport { Modules } from \"../../../core\";\nimport { TableContent, UseTableStructureHook } from \"../../../hooks/types\";\nimport { usePageUrlGenerator } from \"../../../hooks/usePageUrlGenerator\";\nimport { Link } from \"../../../shadcnui\";\nimport { cn } from \"../../../utils\";\nimport { UserFields, UserInterface } from \"../data\";\n\nexport const useUserTableStructure: UseTableStructureHook<UserInterface, UserFields> = (params) => {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n\n // Memoize tableData to prevent infinite re-renders\n const tableData = useMemo(() => {\n return params.data.map((user: UserInterface) => {\n const entry: TableContent<UserInterface> = {\n jsonApiData: user,\n };\n entry[UserFields.userId] = user.id;\n params.fields.forEach((field) => {\n entry[field] = user[field as keyof UserInterface];\n });\n return entry;\n });\n }, [params.data, params.fields]);\n\n const fieldColumnMap: Partial<Record<UserFields, () => any>> = {\n [UserFields.userId]: () =>\n cellId({\n name: \"userId\",\n checkedIds: params.checkedIds,\n toggleId: params.toggleId,\n }),\n [UserFields.name]: () => ({\n id: \"name\",\n accessorKey: \"name\",\n header: t(`foundations.user.fields.name.label`),\n cell: ({ row }: { row: Row<TableContent<UserInterface>> }) => {\n const user = row.original.jsonApiData as UserInterface;\n return (\n <Link\n href={generateUrl({ page: Modules.User, id: user.id })}\n className={cn(\n `flex items-center justify-start gap-2`,\n user.isDeleted || !user.isActivated ? \"text-muted-foreground italic\" : \"\",\n )}\n >\n <UserAvatar user={user} />\n {user.name}\n {user.isDeleted ? ` - ${t(\"foundations.user.errors.deleted\")}` : \"\"}\n {!user.isActivated ? ` - ${t(\"foundations.user.errors.inactive\")}` : \"\"}\n </Link>\n );\n },\n enableSorting: false,\n enableHiding: false,\n }),\n [UserFields.email]: () => ({\n id: \"email\",\n accessorKey: \"email\",\n header: t(`generic.fields.email.label`),\n cell: ({ row }: { row: Row<TableContent<UserInterface>> }) => <>{row.getValue(\"email\")}</>,\n enableSorting: false,\n enableHiding: false,\n }),\n [UserFields.relevance]: () => ({\n id: \"relevance\",\n accessorKey: \"relevance\",\n header: t(`generic.relevance`),\n cell: ({ row }: { row: TableContent<UserInterface> }) => {\n const user: UserInterface = row.original.jsonApiData;\n\n if (!user.relevance) return <></>;\n\n const response = `${user.relevance.toFixed(0)}%`;\n\n return (\n <div className=\"relative flex h-5 w-20 items-center justify-center overflow-hidden rounded border text-center\">\n <div\n className={`bg-accent absolute top-0 left-0 h-full opacity-${Math.round(user.relevance)}`}\n style={{ width: `${user.relevance}%` }}\n ></div>\n <span\n className={`relative text-xs ${user.relevance < 40 ? \"text-muted-foreground\" : \"text-accent-foreground font-semibold\"}`}\n >\n {response}\n </span>\n </div>\n );\n },\n enableSorting: false,\n enableHiding: false,\n }),\n [UserFields.createdAt]: () =>\n cellDate({\n name: \"createdAt\",\n title: t(`generic.date.create`),\n }),\n };\n\n // Memoize columns to prevent infinite re-renders\n const columns = useMemo(() => {\n return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== undefined) as ColumnDef<\n TableContent<UserInterface>\n >[];\n }, [params.fields, fieldColumnMap, t, generateUrl]);\n\n // Memoize the return object to prevent infinite re-renders\n return useMemo(() => ({ data: tableData, columns: columns }), [tableData, columns]);\n};\n","\"use client\";\n\n// Context and Provider\nexport * from \"./context\";\n\n// Hooks\nexport * from \"./hooks\";\n\n// Client-side request utilities\nexport * from \"./request\";\nexport * from \"./token\";\n\nimport { useCompanyTableStructure } from \"../features/company/hooks\";\n// Table generator registration (must be in client-only context)\nimport { useRoleTableStructure } from \"../features/role/hooks\";\nimport { useUserTableStructure } from \"../features/user/hooks\";\nimport { registerTableGenerator } from \"../hooks\";\n\nexport * from \"../features/role/hooks\";\nexport * from \"../features/user/hooks\";\n\nregisterTableGenerator(\"roles\", useRoleTableStructure);\nregisterTableGenerator(\"users\", useUserTableStructure);\nregisterTableGenerator(\"companies\", useCompanyTableStructure);\n","\"use client\";\nimport \"../../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","\"use client\";\n\nimport Image from \"next/image\";\nimport { Card } from \"../../../../shadcnui\";\nimport { AuthContextProvider, useAuthContext } from \"../../contexts\";\nimport { AuthComponent } from \"../../enums\";\n\ntype AuthContainerProps = {\n componentType: AuthComponent;\n params?: { code?: string };\n};\n\nexport function AuthContainer({ componentType, params }: AuthContainerProps) {\n return (\n <AuthContextProvider initialComponentType={componentType} initialParams={params}>\n <InnerAuthContainer />\n </AuthContextProvider>\n );\n}\n\nfunction InnerAuthContainer() {\n const { activeComponent } = useAuthContext();\n\n if (activeComponent === null)\n return (\n <div className=\"max-w-sm\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} className=\"animate-spin-slow\" priority />\n </div>\n );\n\n return <Card className=\"w-full max-w-md\">{activeComponent}</Card>;\n}\n","\"use client\";\n\nimport { createContext, ReactElement, useContext, useMemo, useState } from \"react\";\nimport {\n AcceptInvitation,\n ActivateAccount,\n ForgotPassword,\n LandingComponent,\n Login,\n ResetPassword,\n} from \"../components\";\nimport Register from \"../components/forms/Register\";\nimport { AuthComponent } from \"../enums\";\n\ninterface AuthContextType {\n activeComponent: ReactElement<any> | null;\n setComponentType: (componentType: AuthComponent) => void;\n setParams: (params?: { code?: string }) => void;\n params?: { code?: string };\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport const AuthContextProvider = ({\n children,\n initialComponentType,\n initialParams,\n}: {\n children: React.ReactNode;\n initialComponentType?: AuthComponent;\n initialParams?: { code?: string };\n}) => {\n const [componentType, setComponentType] = useState<AuthComponent | undefined>(initialComponentType);\n const [params, setParams] = useState<{ code?: string } | undefined>(initialParams);\n\n const activeComponent = useMemo(() => {\n if (componentType === undefined) return null;\n\n switch (componentType) {\n case AuthComponent.Login:\n return <Login />;\n case AuthComponent.Register:\n return <Register />;\n case AuthComponent.ForgotPassword:\n return <ForgotPassword />;\n case AuthComponent.ActivateAccount:\n return <ActivateAccount />;\n case AuthComponent.ResetPassword:\n return <ResetPassword />;\n case AuthComponent.AcceptInvitation:\n return <AcceptInvitation />;\n default:\n return <LandingComponent />;\n }\n }, [componentType]);\n\n return (\n <AuthContext.Provider\n value={{\n activeComponent,\n setComponentType,\n setParams,\n params,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport const useAuthContext = (): AuthContextType => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error(\"useAuthContext must be used within a AuthComponentProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { v4 } from \"uuid\";\nimport { z } from \"zod\";\nimport { errorToast, FormInput, FormPassword } from \"../../../../components\";\nimport {\n Button,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Form,\n Link,\n} from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport default function Register() {\n const t = useTranslations();\n const { setComponentType } = useAuthContext();\n\n const [showConfirmation, setShowConfirmation] = useState<boolean>(false);\n\n const formSchema = z.object({\n company: z.string().min(1, {\n message: t(`generic.errors.missing_company_name`),\n }),\n name: z.string().min(1, {\n message: t(\"generic.errors.missing_name\"),\n }),\n email: z.string().email({\n message: t(`generic.errors.invalid_email`),\n }),\n password: z\n .string()\n .min(8, t(`foundations.auth.errors.password_too_short`))\n .regex(/^(?=.*[0-9])(?=.*[^a-zA-Z0-9]).*$/, {\n message: t(`foundations.auth.errors.password_invalid_format`),\n }),\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n company: \"\",\n name: \"\",\n email: \"\",\n password: \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n try {\n const payload = {\n id: v4(),\n companyName: values.company,\n name: values.name,\n email: values.email,\n password: values.password,\n };\n\n await AuthService.register(payload);\n setShowConfirmation(true);\n } catch (e) {\n errorToast({ error: e });\n }\n };\n\n return (\n <>\n <CardHeader>\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(`foundations.auth.register`)}\n </CardTitle>\n <CardDescription className=\"text-sm\">\n {showConfirmation ? <> </> : <>{t(`foundations.auth.register_description`)}</>}\n </CardDescription>\n </CardHeader>\n {showConfirmation ? (\n <CardContent>\n <CardDescription className=\"text-center text-xl\">\n {t(\"foundations.auth.register_confirmation\")}\n </CardDescription>\n </CardContent>\n ) : (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>\n <CardContent>\n <FormInput\n isRequired\n form={form}\n id=\"company\"\n name={t(`foundations.company.fields.name.label`)}\n placeholder={t(`foundations.company.fields.name.placeholder`)}\n />\n <FormInput\n isRequired\n form={form}\n id=\"name\"\n name={t(`foundations.user.fields.name.label`)}\n placeholder={t(`foundations.user.fields.name.placeholder`)}\n />\n <FormInput\n isRequired\n form={form}\n id=\"email\"\n name={t(`generic.fields.email.label`)}\n placeholder={t(`generic.fields.email.placeholder`)}\n />\n <FormPassword\n isRequired\n form={form}\n id=\"password\"\n name={t(`foundations.user.fields.password.label`)}\n placeholder={t(`foundations.user.fields.password.placeholder`)}\n />\n <Button className=\"mt-4 w-full\" type={\"submit\"}>\n {t(`foundations.auth.buttons.register`)}\n </Button>\n </CardContent>\n <CardFooter className=\"flex w-full flex-row justify-between\">\n <Link\n href=\"#\"\n className=\"flex w-full justify-start\"\n onClick={() => setComponentType(AuthComponent.Login)}\n >\n {t(`foundations.auth.buttons.login`)}\n </Link>\n <Link\n href=\"#\"\n className=\"flex w-full justify-end\"\n onClick={() => setComponentType(AuthComponent.ForgotPassword)}\n >\n {t(`foundations.auth.buttons.forgot_password`)}\n </Link>\n </CardFooter>\n </form>\n </Form>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { Button, CardDescription, CardFooter, CardHeader, CardTitle, Link } from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function LandingComponent() {\n const t = useTranslations();\n\n const { setComponentType } = useAuthContext();\n\n return (\n <>\n <CardHeader className=\"mb-4\" data-testid=\"page-pre-login-container\">\n <CardTitle className=\"text-primary flex flex-col items-center gap-y-8 pb-8 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(`generic.title`)}\n </CardTitle>\n <CardDescription className=\"flex w-full justify-center text-center text-sm\">\n {t(`generic.description`)}\n </CardDescription>\n </CardHeader>\n <CardFooter className=\"mt-4 flex w-full flex-col justify-between\">\n <Link href=\"#\" className=\"flex w-full justify-start\" onClick={() => setComponentType(AuthComponent.Register)}>\n <Button className=\"mt-4 w-full\" variant={`default`}>\n {t(`foundations.auth.buttons.register`)}\n </Button>\n </Link>\n <Link href=\"#\" className=\"flex w-full justify-end\" onClick={() => setComponentType(AuthComponent.Login)}>\n <Button className=\"mt-4 w-full\" variant={`outline`} data-testid=\"page-login-button-initial-login\">\n {t(`foundations.auth.buttons.login`)}\n </Button>\n </Link>\n </CardFooter>\n </>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { errorToast, FormPassword } from \"../../../../components\";\nimport { Button, CardContent, CardDescription, CardHeader, CardTitle, Form } from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function AcceptInvitation() {\n const { setComponentType, params, setParams } = useAuthContext();\n const [showConfirmation, setShowConfirmation] = useState<boolean>(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const t = useTranslations();\n\n useEffect(() => {\n async function validateCode(code: string) {\n try {\n const payload: any = {\n code: code,\n };\n\n await AuthService.validateCode(payload);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n errorToast({ title: t(`generic.errors.error`), error: e });\n }\n }\n\n if (params && params.code) {\n validateCode(params.code);\n } else {\n setError(t(`foundations.auth.errors.invalid_invitation_code`));\n }\n }, []);\n\n const formSchema = z\n .object({\n password: z.string().min(1, {\n message: t(`foundations.user.fields.password.error`),\n }),\n passwordRetype: z.string().min(1, {\n message: t(\"foundations.auth.errors.password_retype_required\"),\n }),\n })\n .refine((data) => data.password === data.passwordRetype, {\n message: t(\"foundations.auth.fields.retype_password.error_not_match\"),\n path: [\"passwordRetype\"],\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\",\n passwordRetype: \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n try {\n if (!params?.code) return;\n\n const payload = {\n code: params?.code,\n password: values.password,\n };\n\n await AuthService.acceptInvitation(payload);\n setShowConfirmation(true);\n\n toast.success(t(\"foundations.auth.account_activated\"), {\n description: t(\"foundations.auth.account_activated_description\"),\n });\n\n setTimeout(() => {\n setComponentType(AuthComponent.Login);\n setParams(undefined);\n }, 2000);\n } catch (e) {\n errorToast({ title: t(`generic.errors.error`), error });\n }\n };\n\n return (\n <>\n <CardHeader>\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(\"foundations.auth.accept_invitation\")}\n </CardTitle>\n <CardDescription className=\"text-center text-sm\">\n {error ? (\n <>{t(\"foundations.auth.errors.activating_account\")}</>\n ) : (\n <>{t(\"foundations.auth.select_password\")}</>\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {showConfirmation ? (\n <CardDescription className=\"text-center text-xl\">\n {t(\"foundations.auth.activation_description\")}\n </CardDescription>\n ) : error ? (\n <CardDescription className=\"text-center text-xl\">{error}</CardDescription>\n ) : (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>\n <FormPassword\n form={form}\n id=\"password\"\n name={t(`foundations.user.fields.password.label`)}\n placeholder={t(`foundations.user.fields.password.placeholder`)}\n />\n <FormPassword\n form={form}\n id=\"passwordRetype\"\n name={t(\"foundations.auth.fields.retype_password.label\")}\n placeholder={t(`foundations.auth.fields.retype_password.placeholder`)}\n />\n <Button className=\"mt-4 w-full\" type={\"submit\"}>\n {t(\"foundations.auth.accept_invitation\")}\n </Button>\n </form>\n </Form>\n )}\n </CardContent>\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { errorToast } from \"../../../../components\";\nimport { CardContent, CardDescription, CardHeader, CardTitle } from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function ActivateAccount() {\n const { setComponentType, params, setParams } = useAuthContext();\n const [showConfirmation, setShowConfirmation] = useState<boolean>(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const t = useTranslations();\n\n useEffect(() => {\n async function ActivateAccount(code: string) {\n try {\n const payload = {\n activationCode: code,\n };\n\n await AuthService.activate(payload);\n setShowConfirmation(true);\n\n setParams(undefined);\n\n toast.success(t(\"foundations.auth.account_activated\"), {\n description: t(\"foundations.auth.account_activated_description\"),\n });\n\n setTimeout(() => {\n setComponentType(AuthComponent.Login);\n }, 2000);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n errorToast({ title: t(`generic.errors.error`), error: e });\n }\n }\n\n if (params && params.code) {\n ActivateAccount(params.code);\n } else {\n setError(t(`foundations.auth.errors.invalid_invitation_code`));\n }\n }, []);\n\n return (\n <>\n <CardHeader>\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(\"foundations.auth.accept_invitation\")}\n </CardTitle>\n <CardDescription className=\"text-center text-sm\">\n {error ? <>{t(\"foundations.auth.errors.activating_account\")}</> : <> </>}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <CardDescription className=\"text-center text-xl\">\n {showConfirmation ? (\n <>{t(\"foundations.auth.activation_description\")}</>\n ) : error ? (\n <>{error}</>\n ) : (\n <>{t(\"foundations.auth.activation_wait\")}</>\n )}\n </CardDescription>\n </CardContent>\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { JsonApiHydratedDataInterface, Modules, rehydrate } from \"../../../../core\";\nimport { useI18nRouter } from \"../../../../i18n\";\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { AuthInterface, AuthService } from \"../../data\";\n\nexport function Cookies({ dehydratedAuth, page }: { dehydratedAuth: JsonApiHydratedDataInterface; page?: string }) {\n const { setUser } = useCurrentUserContext<UserInterface>();\n const router = useI18nRouter();\n const [hasSaved, setHasSaved] = useState(false);\n\n useEffect(() => {\n if (hasSaved) return;\n async function saveTokenOnServer() {\n await AuthService.saveToken({ dehydratedAuth });\n const auth: AuthInterface = rehydrate(Modules.Auth, dehydratedAuth) as AuthInterface;\n setUser(auth.user as UserInterface);\n setHasSaved(true);\n\n if (page) {\n if (page.startsWith(\"/\")) router.push(page ?? \"/\");\n window.location.href = page;\n }\n }\n saveTokenOnServer();\n }, [dehydratedAuth, setUser, hasSaved, router]);\n\n return null;\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { z } from \"zod\";\nimport { errorToast, FormInput } from \"../../../../components\";\nimport {\n Button,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Form,\n Link,\n} from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function ForgotPassword() {\n const t = useTranslations();\n const { setComponentType } = useAuthContext();\n\n const [showConfirmation, setShowConfirmation] = useState<boolean>(false);\n\n const formSchema = z.object({\n email: z.string().email({\n message: t(`generic.errors.invalid_email`),\n }),\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n try {\n const payload = {\n email: values.email,\n };\n\n await AuthService.initialiseForgotPassword(payload);\n setShowConfirmation(true);\n } catch (e) {\n errorToast({ error: e });\n }\n };\n\n return (\n <>\n <CardHeader data-testid=\"page-forgot-password-container\">\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlows\" width={100} height={100} priority />\n {t(\"foundations.auth.forgot_password\")}\n </CardTitle>\n <CardDescription className=\"text-sm\">\n {showConfirmation ? <> </> : <>{t(`foundations.auth.add_email_to_reset`)}</>}\n </CardDescription>\n </CardHeader>\n {showConfirmation ? (\n <CardContent>\n <CardDescription className=\"text-center text-xl\">{t(`foundations.auth.reset_confirmation`)}</CardDescription>\n </CardContent>\n ) : (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>\n <CardContent>\n <FormInput\n form={form}\n id=\"email\"\n name={t(`generic.fields.email.label`)}\n placeholder={t(`generic.fields.email.placeholder`)}\n testId=\"form-forgot-password-input-email\"\n />\n <Button className=\"mt-4 w-full\" type={\"submit\"} data-testid=\"form-forgot-password-button-reset\">\n {t(`foundations.auth.buttons.reset_password`)}\n </Button>\n </CardContent>\n <CardFooter className=\"flex w-full flex-row justify-between\">\n {/* <Link\n href=\"#\"\n className=\"flex w-full justify-start\"\n onClick={() => setComponentType(AuthComponent.Register)}\n >\n {t(\"foundations.auth.buttons.register\")}\n </Link> */}\n <Link\n href=\"#\"\n className=\"flex w-full justify-end\"\n onClick={() => setComponentType(AuthComponent.Login)}\n data-testid=\"form-forgot-password-link-login\"\n >\n {t(`foundations.auth.buttons.login`)}\n </Link>\n </CardFooter>\n </form>\n </Form>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { z } from \"zod\";\nimport { errorToast, FormInput, FormPassword } from \"../../../../components\";\nimport { useI18nRouter, usePageUrlGenerator } from \"../../../../hooks\";\nimport {\n Button,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Form,\n Link,\n} from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function Login() {\n const t = useTranslations();\n const { setUser } = useCurrentUserContext<UserInterface>();\n const { setComponentType } = useAuthContext();\n const generateUrl = usePageUrlGenerator();\n const router = useI18nRouter();\n\n const formSchema = z.object({\n email: z.string().email({\n message: t(`generic.errors.invalid_email`),\n }),\n password: z.string().min(3, { message: t(`foundations.auth.errors.password_too_short`) }),\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: \"\",\n password: \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n try {\n const user: UserInterface = (await AuthService.login({\n email: values.email,\n password: values.password,\n })) as UserInterface;\n\n setUser(user);\n router.replace(generateUrl({ page: `/` }));\n } catch (e) {\n errorToast({\n title: t(`generic.errors.error`),\n error: e,\n });\n }\n };\n\n return (\n <>\n <CardHeader data-testid=\"page-login-container\">\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(\"foundations.auth.login\")}\n </CardTitle>\n\n <CardDescription className=\"text-sm\">{t(`foundations.auth.login_description`)}</CardDescription>\n </CardHeader>\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>\n <CardContent>\n <FormInput\n autoFocus\n form={form}\n id=\"email\"\n name={t(`generic.fields.email.label`)}\n placeholder={t(`generic.fields.email.placeholder`)}\n testId=\"form-login-input-email\"\n />\n <FormPassword\n form={form}\n id=\"password\"\n name={t(`foundations.user.fields.password.label`)}\n placeholder={t(`foundations.user.fields.password.placeholder`)}\n testId=\"form-login-input-password\"\n />\n <Button className=\"mt-4 w-full\" type={\"submit\"} data-testid=\"form-login-button-submit\">\n {t(`foundations.auth.login`)}\n </Button>\n </CardContent>\n <CardFooter className=\"flex w-full flex-row justify-between\">\n <Link\n href=\"#\"\n className=\"flex w-full justify-start\"\n onClick={() => setComponentType(AuthComponent.Register)}\n >\n {t(`foundations.auth.register`)}\n </Link>\n <Link\n href=\"#\"\n className=\"flex w-full justify-end\"\n onClick={() => setComponentType(AuthComponent.ForgotPassword)}\n data-testid=\"form-login-link-forgot-password\"\n >\n {t(`foundations.auth.forgot_password`)}\n </Link>\n </CardFooter>\n </form>\n </Form>\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { AuthService } from \"../../data\";\n\nexport function Logout() {\n const generateUrl = usePageUrlGenerator();\n\n useEffect(() => {\n const logOut = async () => {\n await AuthService.logout();\n window.location.href = generateUrl({ page: `/` });\n };\n logOut();\n }, []);\n\n return <></>;\n}\n","\"use client\";\n\nimport { deleteCookie, getCookie } from \"cookies-next\";\nimport { useEffect } from \"react\";\nimport { UserInterface, UserService } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { getTokenHandler } from \"../../config\";\n\nexport function RefreshUser() {\n const { setUser } = useCurrentUserContext<UserInterface>();\n\n const loadFullUser = async () => {\n const fullUser = await UserService.findFullUser();\n\n if (fullUser) {\n setUser(fullUser);\n const token = {\n userId: fullUser.id,\n companyId: fullUser.company?.id,\n licenseExpirationDate: fullUser.company?.licenseExpirationDate,\n roles: fullUser.roles.map((role) => role.id),\n features: fullUser.company?.features?.map((feature) => feature.id) ?? [],\n modules: fullUser.modules.map((module) => {\n return { id: module.id, permissions: module.permissions };\n }),\n };\n\n await getTokenHandler()?.updateToken(token);\n deleteCookie(\"reloadData\");\n }\n };\n\n useEffect(() => {\n const reloadData = getCookie(\"reloadData\");\n if (reloadData !== undefined) loadFullUser();\n }, []);\n\n return null;\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { errorToast, FormPassword } from \"../../../../components\";\nimport { Button, CardContent, CardDescription, CardHeader, CardTitle, Form } from \"../../../../shadcnui\";\nimport { useAuthContext } from \"../../contexts\";\nimport { AuthService } from \"../../data\";\nimport { AuthComponent } from \"../../enums\";\n\nexport function ResetPassword() {\n const { setComponentType, params, setParams } = useAuthContext();\n const [showConfirmation, setShowConfirmation] = useState<boolean>(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const t = useTranslations();\n\n useEffect(() => {\n async function validateResetPasswordCode(code: string) {\n try {\n const payload: any = {\n code: code,\n };\n\n await AuthService.validateCode(payload);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n errorToast({ title: t(`generic.errors.error`), error: e });\n }\n }\n\n if (params && params.code) {\n validateResetPasswordCode(params.code);\n } else {\n setError(t(`foundations.auth.errors.invalid_password_reset_code`));\n }\n }, []);\n\n const formSchema = z\n .object({\n password: z.string().min(1, {\n message: t(`foundations.user.fields.password.error`),\n }),\n passwordRetype: z.string().min(1, {\n message: t(`foundations.auth.fields.retype_password.error`),\n }),\n })\n .refine((data) => data.password === data.passwordRetype, {\n message: t(`foundations.auth.fields.retype_password.error_not_match`),\n path: [\"passwordRetype\"],\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\",\n passwordRetype: \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n try {\n if (!params?.code) return;\n\n const payload = {\n code: params?.code,\n password: values.password,\n };\n\n await AuthService.resetPassword(payload);\n setShowConfirmation(true);\n\n toast.success(t(`foundations.auth.reset_success`), {\n description: t(`foundations.auth.reset_success_description`),\n });\n\n setTimeout(() => {\n setComponentType(AuthComponent.Login);\n setParams(undefined);\n }, 2000);\n } catch (e) {\n errorToast({ title: t(`generic.errors.error`), error });\n }\n };\n\n return (\n <>\n <CardHeader>\n <CardTitle className=\"text-primary flex flex-col items-center pb-10 text-4xl\">\n <Image src=\"/phlow-logo.webp\" alt=\"Phlow\" width={100} height={100} priority />\n {t(`foundations.auth.password_reset`)}\n </CardTitle>\n <CardDescription className=\"text-center text-sm\">\n {error ? (\n <>{t(`foundations.auth.errors.password_reset_error`)}</>\n ) : (\n <>{t(`foundations.auth.reset_password`)}</>\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {showConfirmation ? (\n <CardDescription className=\"text-center text-xl\">\n {t(`foundations.auth.reset_success_description`)}\n </CardDescription>\n ) : error ? (\n <CardDescription className=\"text-center text-xl\">{error}</CardDescription>\n ) : (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>\n <FormPassword form={form} id=\"password\" name={\"Password\"} />\n <FormPassword form={form} id=\"passwordRetype\" name={\"Retype Password\"} />\n <Button className=\"mt-4 w-full\" type={\"submit\"}>\n {t(`foundations.auth.buttons.reset_password`)}\n </Button>\n </form>\n </Form>\n )}\n </CardContent>\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { ContentTitle } from \"../../../../components\";\nimport { useSharedContext } from \"../../../../contexts\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { useCompanyContext } from \"../../contexts/CompanyContext\";\n\nexport function CompanyDetails() {\n const t = useTranslations();\n const { title } = useSharedContext();\n const generateUrl = usePageUrlGenerator();\n\n const { company } = useCompanyContext();\n if (!company) return null;\n\n return (\n <div className=\"flex w-full flex-col gap-y-2\">\n <ContentTitle type={title.type} element={title.element} functions={title.functions} />\n {company.logo && (\n <Image src={company.logo} alt={company.name} width={150} height={150} className=\"mb-4 rounded-md\" />\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { getRoleId } from \"../../../../roles\";\nimport { UserInterface } from \"../../../user\";\nimport { AdminUsersList } from \"../../../user/components\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { useCompanyContext } from \"../../contexts/CompanyContext\";\nimport { CompanyDetails } from \"../details/CompanyDetails\";\n\nfunction AdminCompanyContainerInternal() {\n const { company } = useCompanyContext();\n const { hasRole } = useCurrentUserContext<UserInterface>();\n\n if (!company || !hasRole(getRoleId().Administrator)) return null;\n\n return (\n <>\n <CompanyDetails />\n <AdminUsersList />\n </>\n );\n}\n\nexport function AdminCompanyContainer() {\n return <AdminCompanyContainerInternal />;\n}\n","\"use client\";\n\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { CompanyProvider } from \"../../contexts/CompanyContext\";\nimport { CompanyDetails } from \"../details/CompanyDetails\";\n\nexport function CompanyContainer() {\n const { currentUser } = useCurrentUserContext<UserInterface>();\n if (!currentUser) return null;\n\n return (\n <CompanyProvider dehydratedCompany={currentUser.company}>\n <CompanyDetails />\n </CompanyProvider>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Settings2Icon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport z from \"zod\";\nimport { CommonEditorButtons, errorToast } from \"../../../../components\";\nimport { getRoleId } from \"../../../../roles\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n Form,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../../../shadcnui\";\nimport { UserInterface, UserService } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { CompanyInput, CompanyInterface, CompanyService } from \"../../data\";\nimport { CompanyConfigurationSecurityForm } from \"./CompanyConfigurationSecurityForm\";\n\ntype CompanyConfigurationEditorProps = {\n company: CompanyInterface;\n};\n\nfunction CompanyConfigurationEditorInternal({ company }: CompanyConfigurationEditorProps) {\n const [open, setOpen] = useState<boolean>(false);\n const t = useTranslations();\n const { setUser } = useCurrentUserContext<UserInterface>();\n\n const defaultValues = useMemo(() => {\n return {\n isManagedKnowledge: company.configurations?.isManagedKnowledge ?? false,\n allowPublicBot: company.configurations?.allowPublicBot ?? false,\n };\n }, [company.configurations]);\n\n const close = () => {\n setOpen(false);\n form.reset();\n };\n\n const formSchema = z.object({\n isManagedKnowledge: z.boolean().optional(),\n allowPublicBot: z.boolean().optional(),\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: defaultValues,\n shouldUnregister: false,\n });\n\n useEffect(() => {\n if (open) {\n form.reset({\n isManagedKnowledge: company.configurations?.isManagedKnowledge ?? false,\n allowPublicBot: company.configurations?.allowPublicBot ?? false,\n });\n }\n }, [company, open]);\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values) => {\n const payload: CompanyInput = {\n id: company.id,\n configurations: {\n isManagedKnowledge: values.isManagedKnowledge ?? false,\n allowPublicBot: values.allowPublicBot ?? false,\n },\n };\n\n try {\n await CompanyService.updateConfigurations(payload);\n\n // Refresh user data to update localStorage with new company configurations\n const fullUser = await UserService.findFullUser();\n if (fullUser) {\n setUser(fullUser);\n }\n\n toast.message(\"Configurations Updated\", {\n description: `The system configurations have been updated successfully.`,\n });\n close();\n } catch (error) {\n errorToast({\n title: t(`generic.errors.update`),\n error,\n });\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button size=\"sm\" variant={`ghost`} className=\"cursor-pointer\">\n <Settings2Icon className=\"h-3.5 w-3.5\" />\n </Button>\n </DialogTrigger>\n <DialogContent className={`flex max-h-[70vh] max-w-4xl flex-col overflow-y-auto`}>\n <DialogHeader>\n <DialogTitle>{t(`types.configurations`, { count: 2 })}</DialogTitle>\n <DialogDescription className=\"text-destructive\">\n {t(`features.configuration.warning_description`)}\n </DialogDescription>\n </DialogHeader>\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className={`flex w-full flex-col gap-y-4`}>\n <div className={`flex flex-row gap-x-4`}>\n <div className={`flex w-full flex-col justify-start gap-y-4`}>\n <Tabs defaultValue={process.env.NEXT_PUBLIC_PRIVATE_INSTALLATION ? \"security\" : \"ai\"}>\n <TabsList>\n <TabsTrigger value=\"security\">Privacy & Security</TabsTrigger>\n </TabsList>\n <TabsContent value=\"features\">\n <div className=\"space-y-4\">\n <p className=\"text-muted-foreground text-sm\">\n Feature configuration will be implemented in future updates.\n </p>\n </div>\n </TabsContent>\n <TabsContent value=\"security\">\n <CompanyConfigurationSecurityForm form={form} />\n </TabsContent>\n </Tabs>\n </div>\n </div>\n <CommonEditorButtons form={form} setOpen={setOpen} isEdit={true} />\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function CompanyConfigurationEditor(props: CompanyConfigurationEditorProps) {\n const { hasRole } = useCurrentUserContext<UserInterface>();\n\n if (hasRole(getRoleId().Administrator)) return <CompanyConfigurationEditorInternal {...props} />;\n\n return <CompanyConfigurationEditorInternal {...props} />;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { UseFormReturn } from \"react-hook-form\";\nimport { Checkbox, FormControl, FormField, FormItem, FormLabel, FormMessage, Input } from \"../../../../shadcnui\";\n\ntype SecurityConfigurationFormProps = {\n form: UseFormReturn<any>;\n};\n\ntype Fields = {\n fields: string[];\n defaults: Record<string, any>;\n};\n\nconst providerConfig: Fields = {\n fields: [\"isManagedKnowledge\", \"allowPublicBot\"],\n defaults: {},\n};\n\nexport function CompanyConfigurationSecurityForm({ form }: SecurityConfigurationFormProps) {\n const t = useTranslations();\n\n const renderProviderFields = () => {\n const config = providerConfig;\n if (!config) return null;\n\n return config.fields.map((currentField) => {\n const isRequired = currentField === \"\";\n\n let label = \"\";\n let placeholder = \"\";\n let type = \"text\";\n\n switch (currentField) {\n case \"isManagedKnowledge\":\n label = \"Limit Require structured knowledge management\";\n placeholder =\n \"Enforce single-nesting expertises, require expertise associations to content, and enable knowledge manager roles for better long-term organization.\";\n type = \"checkbox\";\n break;\n case \"allowPublicBot\":\n label = \"Allow Public Bot\";\n placeholder = \"Enable this to allow the public to access public information.\";\n type = \"checkbox\";\n break;\n }\n\n return (\n <FormField\n key={currentField}\n control={form.control}\n name={currentField}\n render={({ field: formField }) =>\n type === \"checkbox\" ? (\n <FormItem className=\"flex items-start space-x-4\">\n <FormControl>\n <Checkbox\n id={currentField}\n checked={formField.value}\n onCheckedChange={(checked) => {\n return checked ? formField.onChange(true) : formField.onChange(false);\n }}\n />\n </FormControl>\n <div className=\"grid gap-2\">\n <FormLabel htmlFor={currentField}>\n {label} {isRequired && <span className=\"text-destructive\">*</span>}\n </FormLabel>\n <p className=\"text-muted-foreground text-sm\">{placeholder}</p>\n </div>\n <FormLabel></FormLabel>\n <FormMessage />\n </FormItem>\n ) : (\n <FormItem>\n <FormLabel>\n {label} {isRequired && <span className=\"text-destructive\">*</span>}\n </FormLabel>\n <FormControl>\n <Input type={type} placeholder={placeholder} {...formField} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )\n }\n />\n );\n });\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-4 border-t pt-4\">{renderProviderFields()}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport { LoaderCircleIcon, Trash2Icon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useState } from \"react\";\nimport { errorToast } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { useI18nRouter } from \"../../../../i18n\";\nimport { Action } from \"../../../../permissions\";\nimport { getRoleId } from \"../../../../roles\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Button,\n Input,\n Label,\n} from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { CompanyInterface, CompanyService } from \"../../data\";\n\ntype CompanyDeleterProps = {\n company: CompanyInterface;\n};\n\nfunction CompanyDeleterInternal({ company }: CompanyDeleterProps) {\n const t = useTranslations();\n const router = useI18nRouter();\n const [open, setOpen] = useState<boolean>(false);\n const [isDeleting, setIsDeleting] = useState<boolean>(false);\n const [companyName, setCompanyName] = useState<string>(\"\");\n\n const handleDelete = async () => {\n setIsDeleting(true);\n try {\n await CompanyService.delete({ companyId: company.id });\n router.push(\"/\");\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 <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant={\"destructive\"}>\n <Trash2Icon className=\"mr-3 h-3.5 w-3.5\" />\n {t(`generic.buttons.delete`)}\n </Button>\n </AlertDialogTrigger>\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.companies`, { count: 1 }) })}</AlertDialogTitle>\n <AlertDialogDescription>\n {t(`generic.delete.subtitle`, { type: t(`types.companies`, { count: 1 }) })}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <div className=\"text-destructive p-4 text-sm\">\n {t(`generic.delete.description`, { type: t(`types.companies`, { count: 1 }) })}\n </div>\n <div className=\"flex w-full flex-col gap-y-2\">\n <div>{t(`generic.delete.confirmation`, { type: t(`types.companies`, { count: 1 }) })}</div>\n <div className=\"flex w-full flex-col\">\n <Label className=\"flex items-center\">\n {t(`foundations.company.fields.name.label`)}\n <span className=\"text-destructive ml-2 font-semibold\">*</span>\n </Label>\n <Input\n className={`w-full`}\n placeholder={t(`foundations.company.fields.name.placeholder`)}\n onChange={(e) => setCompanyName(e.target.value)}\n />\n </div>\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={company.name !== companyName || 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\nexport function CompanyDeleter({ company }: CompanyDeleterProps) {\n const { hasPermissionToModule, hasRole } = useCurrentUserContext<UserInterface>();\n\n if (!hasRole(getRoleId().Administrator) && !hasPermissionToModule({ module: Modules.Company, action: Action.Delete }))\n return null;\n\n return <CompanyDeleterInternal company={company} />;\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { setCookie } from \"cookies-next\";\nimport { UploadIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { DropzoneOptions } from \"react-dropzone\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { v4 } from \"uuid\";\nimport { z } from \"zod\";\nimport {\n CommonEditorButtons,\n CommonEditorHeader,\n CommonEditorTrigger,\n errorToast,\n FileInput,\n FileUploader,\n FormFeatures,\n FormInput,\n} from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { useI18nRouter } from \"../../../../i18n\";\nimport { getRoleId } from \"../../../../roles\";\nimport { Dialog, DialogContent, Form, ScrollArea } from \"../../../../shadcnui\";\nimport { FeatureInterface, FeatureService } from \"../../../feature\";\nimport { S3Interface, S3Service } from \"../../../s3\";\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { CompanyInput, CompanyInterface, CompanyService } from \"../../data\";\n\ntype CompanyEditorProps = {\n company?: CompanyInterface;\n propagateChanges?: (company: CompanyInterface) => void;\n onRevalidate?: (path: string) => Promise<void>;\n};\n\nfunction CompanyEditorInternal({ company, propagateChanges, onRevalidate }: CompanyEditorProps) {\n const { hasRole } = useCurrentUserContext<UserInterface>();\n const router = useI18nRouter();\n const [open, setOpen] = useState<boolean>(false);\n const [features, setFeatures] = useState<FeatureInterface[]>([]);\n const [file, setFile] = useState<File | null>(null);\n const [files, setFiles] = useState<File[] | null>(null);\n const [contentType, setContentType] = useState<string | null>(null);\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n\n const formSchema = z.object({\n id: z.uuidv4(),\n name: z.string().min(1, {\n message: t(`foundations.company.fields.name.error`),\n }),\n featureIds: z.array(z.string()).optional(),\n moduleIds: z.array(z.string()).optional(),\n logo: z.string().optional(),\n });\n\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n id: company?.id || v4(),\n name: company?.name || \"\",\n featureIds: company?.features.map((feature) => feature.id) || [],\n moduleIds: company?.modules.map((module) => module.id) || [],\n logo: company?.logo || \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n if (values.logo && contentType) {\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: values.logo,\n contentType: contentType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n }\n\n const payload: CompanyInput = {\n id: company?.id ?? v4(),\n name: values.name,\n logo: files && contentType ? values.logo : undefined,\n featureIds: values.featureIds,\n moduleIds: values.moduleIds,\n };\n\n try {\n const updatedCompany = company ? await CompanyService.update(payload) : await CompanyService.create(payload);\n\n if (onRevalidate) {\n await onRevalidate(generateUrl({ page: Modules.Company, id: updatedCompany.id, language: `[locale]` }));\n }\n if (company && propagateChanges) {\n setCookie(\"reloadData\", \"true\", { path: \"/\" });\n propagateChanges(updatedCompany);\n setOpen(false);\n } else {\n router.push(`/administration/companies/${updatedCompany.id}`);\n }\n } catch (error) {\n errorToast({\n title: company ? t(`generic.errors.update`) : t(`generic.errors.create`),\n error,\n });\n }\n };\n\n useEffect(() => {\n async function fetchFeatures() {\n const allfeatures = await FeatureService.findMany({});\n if (hasRole(getRoleId().Administrator)) {\n setFeatures(allfeatures);\n } else {\n setFeatures(allfeatures.filter((feature) => feature.isProduction));\n }\n }\n if (\n open &&\n features.length === 0 &&\n (hasRole(getRoleId().Administrator) ||\n (hasRole(getRoleId().CompanyAdministrator) &&\n process.env.NEXT_PUBLIC_PRIVATE_INSTALLATION?.toLowerCase() === \"true\"))\n )\n fetchFeatures();\n }, [open, features]);\n\n useEffect(() => {\n if (file && company) {\n const id = form.getValues(\"id\");\n const fileType = file.type;\n let extension = \"\";\n\n switch (fileType) {\n default:\n extension = file.type.split(\"/\").pop() ?? \"\";\n break;\n }\n\n const timestamp = new Date().toISOString().replace(/[-:T]/g, \"\").split(\".\")[0];\n\n const fileUrl = `companies/${form.getValues(\"id\")}/companies/${id}/${id}.${timestamp}.${extension}`;\n form.setValue(\"logo\", fileUrl);\n\n setContentType(fileType);\n } else {\n setContentType(null);\n }\n }, [file]);\n\n useEffect(() => {\n if (files && files.length > 0) {\n setFile(files[0]);\n }\n }, [files]);\n\n const dropzone = {\n multiple: false,\n maxSize: 100 * 1024 * 1024,\n preventDropOnDocument: false,\n accept: {\n \"application/images\": [\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".svg\"],\n },\n } satisfies DropzoneOptions;\n\n const canAccessFeatures =\n hasRole(getRoleId().Administrator) ||\n (hasRole(getRoleId().CompanyAdministrator) &&\n process.env.NEXT_PUBLIC_PRIVATE_INSTALLATION?.toLowerCase() === \"true\");\n\n const isAdministrator = hasRole(getRoleId().Administrator);\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <CommonEditorTrigger isEdit={!!company} />\n <DialogContent\n className={`flex max-h-[70vh] w-full ${isAdministrator || canAccessFeatures ? `max-w-5xl` : `max-w-4xl`} flex-col overflow-y-auto`}\n >\n <CommonEditorHeader type={t(`types.companies`, { count: 1 })} name={company?.name} />\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className={`flex w-full flex-col gap-y-4`}>\n <div className=\"flex w-full items-start justify-between gap-x-4\">\n <div className={`flex w-96 flex-col justify-start gap-y-4`}>\n <FileUploader value={files} onValueChange={setFiles} dropzoneOptions={dropzone} className=\"w-full p-4\">\n <FileInput className=\"text-neutral-300 outline-dashed\">\n <div className=\"flex w-full flex-col items-center justify-center pt-3 pb-4\">\n <div className=\"flex w-full flex-col items-center justify-center pt-3 pb-4\">\n {file || company?.logo ? (\n <Image\n src={file ? URL.createObjectURL(file) : company?.logo || \"\"}\n alt=\"Company Logo\"\n width={200}\n height={200}\n />\n ) : (\n <>\n <UploadIcon className=\"my-4 h-8 w-8\" />\n <p className=\"mb-1 flex w-full text-center text-sm\">\n {t(`foundations.company.click_drag_logo`)}\n </p>\n </>\n )}\n </div>\n </div>\n </FileInput>\n </FileUploader>\n </div>\n <div className={`flex w-full flex-col justify-start gap-y-4`}>\n <FormInput\n form={form}\n id=\"name\"\n name={t(`foundations.company.fields.name.label`)}\n placeholder={t(`foundations.company.fields.name.placeholder`)}\n />\n </div>\n {canAccessFeatures && (\n <div className={`flex w-96 flex-col justify-start gap-y-4`}>\n <ScrollArea className=\"h-max\">\n <FormFeatures\n form={form}\n name={t(`foundations.company.features_and_modules`)}\n features={features}\n />\n </ScrollArea>\n </div>\n )}\n </div>\n <CommonEditorButtons form={form} setOpen={setOpen} isEdit={!!company} />\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function CompanyEditor(props: CompanyEditorProps) {\n return <CompanyEditorInternal {...props} />;\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { deleteCookie } from \"cookies-next\";\nimport { ClipboardIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport z from \"zod\";\nimport { errorToast, FormInput, FormTextarea } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { useI18nRouter, usePageUrlGenerator } from \"../../../../hooks\";\nimport { getRoleId } from \"../../../../roles\";\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Form,\n Input,\n Label,\n Link,\n} from \"../../../../shadcnui\";\nimport { UserInterface, UserService } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { CompanyInput, CompanyService } from \"../../data\";\n\ntype TokenPayload = {\n userId: string;\n companyId?: string;\n licenseExpirationDate?: Date;\n roles: string[];\n features: string[];\n modules: {\n id: string;\n permissions: {\n create: boolean | string;\n read: boolean | string;\n update: boolean | string;\n delete: boolean | string;\n };\n }[];\n};\n\ntype CompanyLicenseProps = {\n onRevalidate?: (path: string) => Promise<void>;\n onUpdateToken?: (token: TokenPayload) => Promise<void>;\n};\n\nexport default function CompanyLicense({ onRevalidate, onUpdateToken }: CompanyLicenseProps = {}) {\n const { currentUser, setUser, hasRole } = useCurrentUserContext<UserInterface>();\n\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const router = useI18nRouter();\n\n const copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text);\n toast(\"Copied to clipboard\");\n };\n\n const formSchema = z.object({\n license: z.string().min(1, {\n message: `License is required`,\n }),\n privateKey: z.string().min(1, {\n message: `Private key is required`,\n }),\n });\n\n const defaultValues = {\n license:\n \"09001678dca2f4a6d2d32bb984811278:3e93a432f6130579e543a511346c0d2c6ca7a97d49c7ff2d3e789ca7c7c8d79b864fd3406c8315e72aa5febf6232776dfaea51d72168ddcdd34a59ea1a05b3b3dd60ac3af6c3934203d19ea68642293aa5b79f012633b4ba2e4a474e9ceed6b6cda13d8dedc8e60ece61886843ee6edc1af6d2da5e07945033295507df6f87994f8347b5759b446aa20b1185d7b5c54c67509ae280e729913d0e68e95b5f090b0577a8a735f24fb7c1df8f6586886d840af4a43f9dc74d5d1f291058a45ace759176fa19fe5e164f5d8307981e8bcd166f346e97b676dd0242d1c30ec4fe744f22621fae603b1caaac25f198d2b29be0e0f2afc81a40edeb20242345e2feac8666027d0c30aa8dadbca742dd68ade46602545979f473b344021d27921553d5b284fd96a717b74573ca7e693723876357013e3c0d07a35d270a0e32654d2c244220e2492380279aa34a4744d145b89d06a8abef49cc2ef0dd0171e0eefcf16724decf53e545d10d9bfd8e0c4b03ca720b0fc63d8a20ca2c71d74cb0cf7e547637dbcc8d27257414b5b0b40eabe9eb53a4b5f61ca2250d5933a13565f785a89fc5e3e3c468acbeddf14627aa4109f32af641fc96513e52edc21849e81331cafc900ea85f58927d583aafe5a959af69ce5c967d0cd5d9050cf6601a615e8e3ccf32e6a04227f1f228d94f9bd24073c7b0ec2550f4efc69bddde745144dcb279864fb3e7e7d57d1e96d0701b55f0d6f3bd688880e4a78adb0974cba278cd34bc02753e8a736a4b3a4e48afdf206b9330fee4e29a3c28dec8457e0f44adc10735c1d1992b798e0dd710053ce98ff38b6ff59004079a5face769950401b49fdc13e4cd3324d7df2cf0f40593f51c117debbafd\",\n privateKey:\n \"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCKDXrjEXBcYx6p\\nChtixITGiFqZeaurD3n2SeJl8QuniKlbl7ytC71gS9BzIG5Q/ENhAE41qa7FaHdN\\nHLQ2anfAjS/wd/41wx9ilvQeN/IcDb5Dx3Qd07OMLdrgDvkhlUPSvt7Y5/yft1IX\\nS8NaDrKoO4zjpVB9SeLYGyFXmfP0ciJ97AkWDfXp3l2WjwwxEQByo5uXOMzpEZla\\nkqBFy7kkO3c/SJWqnuXbXrUVr7AjZ9zMCPP/NbvvOkGzovrOYHN5WO9Rg7m+wIFK\\n+gTL2e3RnyjUUSoX5/NMZO9oyDNEaaWgIv6LOG72A2Xq55gpNQihjltZWd/o+xFb\\nIRZzbmllAgMBAAECggEABrrvgcBo5OgkJ4OJoEAKZQ9is1a+KsG/ZWVmtyeQNOOx\\ntfhox1rqKZaom+Q53JLfygvUxEL4dUFJh6Xdl0WLfwSjEKsY5pATqJ/JWOvLTtjQ\\nrMc9fvLCLxRRNlkkhiGbw9twS8zLgRHT27Ti2jIbPZ5hmPuHOARxHa386yNjREh1\\n14Vlhk+dvhmqtYt11AKWuU8nHuf92wCCetATUg/pfNQ1itf6XDlygUZTl4GkoJg/\\nVrt1MnsrTKcGzP+gvpNH0aOuUbgtUWtBIKaSuGgY6lMMny6AApeJ+kXZR8cyPVSi\\nYm/185AcxQDlPunoyl3QzvV41zJUccoMI576wFTUQQKBgQC8QQtNXjfcQvYDeVv8\\ntWKAxgk+OE6/3ntLkbYxPw2H5IOikhb5OjNirzUzRs4CKjnGhx0zDzCi4TV2xwZf\\nwDHpd9VEhEXmKBJe43RCQs0vb1jwz4ttRk9eoz1Oa4cNij3yH5F4oNu5ZnOSZWi/\\n1c4mIsGjjTWzeOkJ6J+fCc6ztQKBgQC7u53nuvMubVhNW3FyuHaXuE+nUlNaw2gc\\n9mhm17DY+MBf2YqdJOCY1B44WMIZe3k/75qXrZEYG4ikdlAGzrh7q3/8GMKCxk8P\\n5y+YeKODdURM1SsUoOqAzga7s2vFxnChtWxk3KfXCzjKUoX/9zWX/zfIAl9VsVVC\\nhrARyffM8QKBgC6pIJgIpmfd4QRzbC1y9/tbGqdlZX+BMaZFc5c5Pa1VIpuFAlS7\\n7EiljNYs0psOxEtE6iPhu/hjQdEy+414IebwYNgewQSPIh6K2iIiVKFRRAZMKw7m\\nwn1+kI+Db3IXtcrxsCjqFgwaLMM4h4IlCHfDXaOgOJNHgNuH4SiWUbmRAoGAUGD4\\nLuugi1RN5nEslc3dGQDVOfLJtabMwPnPoZjgI0X+OAvQiY/sigLoHYADOx3ewD06\\nl468/PFtA92UThXcbzbyyWFghtWZrFlzy3h7qiFfaPYsR9zOCvAredpMXpWkS9h9\\n3IGNa0lmu1mx/fI+hCHGJGC/qNUQiDda04MCEkECgYAxDhQW7sRox+7Pn0TsRotN\\nTv6AJggyTjBaF45fVy+28sn53f/9HE++Rxn8W5xQl+hEOywT95OcWB9b4CiZsp1P\\nZyjkByeUuraVM1DoFh66UdXUvC2FECdyz4N3JyKHvV82GdrTPsQLVPCsGfzkj7V8\\nX+iuQoeEbUvwnnrg3pbClQ==\\n-----END PRIVATE KEY-----\\n\",\n };\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: defaultValues,\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n if (!currentUser || !currentUser.company) {\n errorToast({\n title: t(\"generic.errors.error\"),\n error: new Error(\"User or company not found\"),\n });\n return;\n }\n\n const payload: CompanyInput = {\n id: currentUser.company.id,\n license: values.license,\n privateKey: values.privateKey,\n };\n\n try {\n const updatedLicense = await CompanyService.activateLicense(payload);\n\n const fullUser = await UserService.findFullUser();\n\n if (fullUser) {\n setUser(fullUser);\n const token = {\n userId: fullUser.id,\n companyId: fullUser.company?.id,\n licenseExpirationDate: fullUser.company?.licenseExpirationDate,\n roles: fullUser.roles.map((role) => role.id),\n features: fullUser.company?.features?.map((feature) => feature.id) ?? [],\n modules: fullUser.modules.map((module) => {\n return { id: module.id, permissions: module.permissions };\n }),\n };\n\n if (onUpdateToken) {\n await onUpdateToken(token);\n }\n deleteCookie(\"reloadData\");\n }\n\n if (onRevalidate) {\n await onRevalidate(generateUrl({ page: Modules.Company, id: updatedLicense.id, language: `[locale]` }));\n }\n router.push(generateUrl({ page: \"/\" }));\n } catch (error) {\n errorToast({\n title: t(`generic.errors.update`),\n error,\n });\n }\n };\n\n if (!currentUser || !currentUser.company) return null;\n\n return (\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(onSubmit)}\n className=\"relative flex min-h-screen w-full flex-col items-center justify-center\"\n >\n <div className=\"absolute top-4 left-4 z-0\">\n <Image\n src={`/phlow-logo.webp`}\n className=\"object-contain p-4\"\n height={300}\n width={300}\n alt={\"Phlow\"}\n priority\n />\n </div>\n <Card className=\"z-10 w-3xl\">\n {hasRole(getRoleId().CompanyAdministrator) ? (\n <>\n <CardHeader>\n <CardTitle>Company License Required</CardTitle>\n <CardDescription className={`flex w-full flex-col`}>\n <div>You need to activate your license to use Phlow.</div>\n <div>\n <span>To obtain your license, please visit</span>\n <Link href=\"https://phlow.com\" target=\"_blank\" className={`text-primary`}>\n our website (https://phlow.com)\n </Link>\n <span>, register for an account and follow the instructions provided.</span>\n </div>\n <div>You will be required to provide the installation identifier provided below.</div>\n <div>\n Once you have activated your license, please paste your license and private key in the fields below.\n </div>\n </CardDescription>\n </CardHeader>\n <CardContent className=\"flex flex-col gap-y-4\">\n <div>\n <Label>Installation Identifier</Label>\n <div className=\"flex items-center\">\n <Input disabled value={currentUser.company.id} />\n <ClipboardIcon\n className=\"text-muted-foreground ml-2 cursor-pointer\"\n onClick={() => copyToClipboard(currentUser!.company!.id)}\n />\n </div>\n </div>\n <div>\n <FormInput form={form} id=\"license\" name={\"license\"} placeholder=\"Enter your license\" />\n </div>\n <div>\n <FormTextarea name=\"Private Key\" form={form} id=\"privateKey\" placeholder=\"Enter your private key\" />\n </div>\n </CardContent>\n <CardFooter className=\"flex justify-end\">\n <Button type=\"submit\">Activate License</Button>\n </CardFooter>\n </>\n ) : (\n <>\n <CardHeader>\n <CardTitle>Company License Required</CardTitle>\n <CardDescription className={`flex w-full flex-col`}>\n The company license is either missing or expired.\n </CardDescription>\n </CardHeader>\n <CardContent>Please contact your system administrator to resolve this issue.</CardContent>\n </>\n )}\n </Card>\n </form>\n </Form>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ReactNode } from \"react\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { CompanyFields, CompanyInterface, CompanyService } from \"../../data\";\nimport { CompanyEditor } from \"../forms/CompanyEditor\";\n\nexport function CompaniesList() {\n const t = useTranslations();\n\n const data: DataListRetriever<CompanyInterface> = useDataListRetriever({\n retriever: (params) => CompanyService.findMany(params),\n retrieverParams: {},\n module: Modules.Company,\n });\n\n const functions: ReactNode[] = [<CompanyEditor key=\"create-account\" />];\n\n return (\n <ContentListTable\n data={data}\n fields={[CompanyFields.name, CompanyFields.createdAt]}\n tableGeneratorType={Modules.Company}\n functions={functions}\n title={t(`types.companies`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport React, { Component, ReactNode } from \"react\";\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n}\n\nexport class NotificationErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): State {\n // Update state so the next render will show the fallback UI\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"🚨 [NotificationErrorBoundary] Caught error:\", error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n this.props.fallback || (\n <div className=\"flex items-center justify-center p-4 text-center\">\n <div className=\"text-muted-foreground text-sm\">\n <p>Something went wrong with notifications.</p>\n <button\n onClick={() => this.setState({ hasError: false })}\n className=\"text-primary mt-2 underline hover:no-underline\"\n >\n Try again\n </button>\n </div>\n </div>\n )\n );\n }\n\n return this.props.children;\n }\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { Tab, TabsContainer } from \"../../../../components\";\nimport { useNotificationContext } from \"../../contexts/NotificationContext\";\nimport { NotificationErrorBoundary } from \"../common\";\nimport { NotificationsList } from \"../lists/NotificationsList\";\n\nfunction NotificationsListContainerContent() {\n const t = useTranslations();\n const { notifications, isLoading, error } = useNotificationContext();\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center p-8 text-center\">\n <div className=\"text-destructive text-sm\">\n <p>Error loading notifications: {error}</p>\n <p className=\"text-muted-foreground mt-2\">Please try refreshing the page.</p>\n </div>\n </div>\n );\n }\n\n const tabs: Tab[] = [\n {\n label: t(`foundations.notification.inbox`),\n content: <NotificationsList archived={false} />,\n },\n {\n label: t(`foundations.notification.archived`),\n content: <NotificationsList archived={true} />,\n },\n ];\n\n return <TabsContainer tabs={tabs} />;\n}\n\nexport function NotificationsListContainer() {\n return (\n <NotificationErrorBoundary>\n <NotificationsListContainerContent />\n </NotificationErrorBoundary>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport React, { createContext, ReactElement, useCallback, useContext, useState } from \"react\";\nimport { SharedProvider } from \"../../../contexts\";\nimport { Modules } from \"../../../core\";\nimport { useI18nRouter } from \"../../../i18n\";\nimport { BreadcrumbItemData } from \"../../../interfaces\";\nimport { NotificationMenuItem, NotificationToast } from \"../components/notifications/Notification\";\nimport { NotificationInterface, NotificationService } from \"../data\";\n\ninterface NotificationContextType {\n notifications: NotificationInterface[];\n setNotifications: (notifications: NotificationInterface[]) => void;\n addNotification: (notification: NotificationInterface) => void;\n addSocketNotifications: (socketNotifications: NotificationInterface[]) => void;\n loadNotifications: () => Promise<void>;\n generateNotification: (notification: NotificationInterface, closePopover: () => void) => ReactElement<any>;\n generateToastNotification: (\n notification: NotificationInterface,\n t: any,\n generateUrl: any,\n ) => {\n title: string;\n description: string | ReactElement<any>;\n action?: {\n label: string;\n onClick: () => void;\n };\n };\n markNotificationsAsRead: (ids: string[]) => Promise<void>;\n isLoading: boolean;\n error: string | null;\n lastLoaded: number;\n shouldRefresh: boolean;\n}\n\nconst NotificationContext = createContext<NotificationContextType | undefined>(undefined);\n\ntype NotificationContextProviderProps = {\n children: React.ReactNode;\n};\n\nexport const NotificationContextProvider = ({ children }: NotificationContextProviderProps) => {\n const t = useTranslations();\n const router = useI18nRouter();\n\n const [notifications, setNotifications] = useState<NotificationInterface[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [lastLoaded, setLastLoaded] = useState(0);\n\n // Calculate shouldRefresh (5 minute cache)\n const shouldRefresh = Date.now() - lastLoaded > 5 * 60 * 1000;\n\n const addNotification = useCallback((notification: NotificationInterface) => {\n setNotifications((prev) => {\n // Check if notification already exists to prevent duplicates\n const exists = prev.some((n) => n.id === notification.id);\n if (exists) return prev;\n return [notification, ...prev];\n });\n }, []);\n\n const addSocketNotifications = useCallback((socketNotifications: NotificationInterface[]) => {\n setNotifications((prev) => {\n const newNotifications = socketNotifications.filter(\n (newNotif) => !prev.some((existingNotif) => existingNotif.id === newNotif.id),\n );\n return [...prev, ...newNotifications];\n });\n }, []);\n\n const loadNotifications = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const fetchedNotifications = await NotificationService.findMany({});\n setNotifications(fetchedNotifications);\n setLastLoaded(Date.now());\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Failed to load notifications\";\n setError(errorMessage);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const markNotificationsAsRead = useCallback(async (ids: string[]) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const data: any = {\n data: ids.map((id: string) => ({\n type: Modules.Notification.name,\n id: id,\n attributes: {\n isRead: true,\n },\n meta: {},\n relationships: {},\n })),\n };\n\n await NotificationService.markAsRead({ data: data });\n const allNotifications = await NotificationService.findMany({});\n setNotifications(allNotifications);\n setLastLoaded(Date.now());\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Failed to mark notifications as read\";\n setError(errorMessage);\n throw error;\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const generateToastNotification = (\n notification: NotificationInterface,\n t: any,\n generateUrl: any,\n ): {\n title: string;\n description: string | ReactElement<any>;\n action?: {\n label: string;\n onClick: () => void;\n };\n } => {\n return NotificationToast(notification, t, generateUrl, router);\n };\n\n const generateNotification = (notification: NotificationInterface, closePopover: () => void) => {\n return <NotificationMenuItem notification={notification} closePopover={closePopover} />;\n };\n\n const breadcrumb = () => {\n const response: BreadcrumbItemData[] = [];\n\n response.push({\n name: t(`types.notifications`, { count: 2 }),\n });\n\n return response;\n };\n\n const title = () => {\n const response: any = {\n type: t(`types.notifications`, { count: 2 }),\n };\n\n return response;\n };\n\n return (\n <SharedProvider value={{ breadcrumbs: breadcrumb(), title: title() }}>\n <NotificationContext.Provider\n value={{\n notifications,\n setNotifications,\n addNotification,\n addSocketNotifications,\n loadNotifications,\n generateNotification,\n generateToastNotification,\n markNotificationsAsRead,\n isLoading,\n error,\n lastLoaded,\n shouldRefresh,\n }}\n >\n {children}\n </NotificationContext.Provider>\n </SharedProvider>\n );\n};\n\nexport const useNotificationContext = (): NotificationContextType => {\n const context = useContext(NotificationContext);\n if (context === undefined) {\n throw new Error(`Notification.messages.errors.use_context`);\n }\n return context;\n};\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ReactElement, useEffect, useState } from \"react\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport { Link } from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../../user\";\nimport { UserAvatar } from \"../../../user/components\";\nimport { NotificationInterface } from \"../../data\";\n\ntype TaskCommentedOnProps = {\n notification: NotificationInterface;\n closePopover: () => void;\n};\n\nexport const generateNotificationData = (params: {\n notification: NotificationInterface;\n generateUrl: any;\n}): { title: string; actor?: UserInterface; url?: string; taskId?: string } => {\n const response: any = {};\n\n response.actor = params.notification.actor;\n\n return response;\n};\n\nexport function NotificationToast(\n notification: NotificationInterface,\n t: any,\n generateUrl: any,\n reouter: any,\n): {\n title: string;\n description: string | ReactElement<any>;\n action?: {\n label: string;\n onClick: () => void;\n };\n} {\n const data = generateNotificationData({ notification: notification, generateUrl: generateUrl });\n\n return {\n title: t(`foundations.notification.${notification.notificationType}.title`),\n description: (\n <div className={`flex w-full flex-row items-center p-2`}>\n {data.actor ? (\n <div className=\"flex w-12 max-w-12 px-2\">\n <UserAvatar user={data.actor} className=\"h-8 w-8\" />\n </div>\n ) : (\n <div className=\"flex w-14 max-w-14 px-2\"></div>\n )}\n <div className=\"flex w-full flex-col\">\n <p className=\"text-sm\">\n {t.rich(`foundations.notification.${notification.notificationType}.description`, {\n strong: (chunks: any) => <strong>{chunks}</strong>,\n actor: data.actor?.name ?? \"\",\n title: data.title,\n })}\n </p>\n <div className=\"text-muted-foreground mt-1 w-full text-xs\">\n {new Date(notification.createdAt).toLocaleString()}\n </div>\n </div>\n </div>\n ),\n action: data.url\n ? {\n label: t(`foundations.notification.${notification.notificationType}.buttons.action`),\n onClick: () => {\n reouter.push(data.url!);\n },\n }\n : undefined,\n };\n}\n\nexport function NotificationMenuItem({ notification, closePopover }: TaskCommentedOnProps) {\n const generateUrl = usePageUrlGenerator();\n const [isRead, setIsRead] = useState<boolean>(false);\n const t = useTranslations();\n\n useEffect(() => {\n setIsRead(notification.isRead);\n }, []);\n\n const data = generateNotificationData({ notification: notification, generateUrl: generateUrl });\n\n const response = (\n <div className={`flex w-full flex-row p-2 ${isRead ? \"\" : \"bg-muted\"} items-center`}>\n {data.actor ? (\n <div className=\"flex w-12 max-w-12 px-2\">\n <UserAvatar user={data.actor} className=\"h-8 w-8\" />\n </div>\n ) : (\n <div className=\"flex w-14 max-w-14 px-2\"></div>\n )}\n <div className=\"flex w-full flex-col\">\n <p className=\"text-sm\">\n {t.rich(`foundations.notification.${notification.notificationType}.description` as any, {\n strong: (chunks: any) => <strong>{chunks}</strong>,\n actor: data.actor?.name ?? \"\",\n title: data.title,\n })}\n </p>\n <div className=\"text-muted-foreground mt-1 w-full text-xs\">\n {new Date(notification.createdAt).toLocaleString()}\n </div>\n </div>\n </div>\n );\n\n if (!data.url) return response;\n\n return (\n <Link href={data.url} onClick={closePopover}>\n {response}\n </Link>\n );\n}\n","\"use client\";\n\nimport { ArchiveIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever, usePageUrlGenerator } from \"../../../../hooks\";\nimport {\n Button,\n Card,\n CardContent,\n Link,\n Skeleton,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../../../shadcnui\";\nimport { UserAvatar } from \"../../../user/components\";\nimport { NotificationInterface, NotificationService } from \"../../data\";\nimport { generateNotificationData } from \"../notifications/Notification\";\n\ntype NotificationsListProps = {\n archived: boolean;\n};\n\nexport function NotificationsList({ archived }: NotificationsListProps) {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n\n const data: DataListRetriever<NotificationInterface> = useDataListRetriever({\n retriever: (params) => NotificationService.findMany(params),\n retrieverParams: { isArchived: archived },\n module: Modules.Notification,\n });\n\n const archiveNotification = async (notification: NotificationInterface) => {\n await NotificationService.archive({ id: notification.id });\n data.removeElement(notification);\n };\n\n const LoadingSkeleton = () => (\n <div className=\"space-y-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Card key={i}>\n <CardContent className=\"p-2\">\n <div className=\"flex w-full flex-row items-center\">\n <Skeleton className=\"mr-4 h-8 w-8 rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n <Skeleton className=\"h-8 w-20\" />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n );\n\n return (\n <div className=\"space-y-4\">\n {data.isLoaded ? (\n (data.data as NotificationInterface[])?.map((notification: NotificationInterface) => {\n const notificationData = generateNotificationData({ notification: notification, generateUrl: generateUrl });\n\n return (\n <Card key={notification.id}>\n <CardContent className=\"p-0\">\n <div className={`flex w-full flex-row items-center p-2`}>\n {notificationData.actor ? (\n <div className=\"flex w-12 max-w-12 px-2\">\n <Link href={generateUrl({ page: Modules.User, id: notificationData.actor.id })}>\n <UserAvatar user={notificationData.actor} className=\"h-8 w-8\" />\n </Link>\n </div>\n ) : (\n <div className=\"flex w-14 max-w-14 px-2\"></div>\n )}\n <div className=\"flex w-full flex-col\">\n <p className=\"text-sm\">\n {t.rich(`foundations.notification.${notification.notificationType}.description` as any, {\n strong: (chunks: any) => <strong>{chunks}</strong>,\n actor: notificationData.actor?.name ?? \"\",\n title: notificationData.title,\n })}\n </p>\n <div className=\"text-muted-foreground mt-1 w-full text-xs\">\n {new Date(notification.createdAt).toLocaleString()}\n </div>\n </div>\n <div className=\"flex flex-row items-center\">\n {notificationData.url ? (\n <Link href={notificationData.url}>\n <Button variant={`outline`} size={`sm`} onClick={(e) => e.stopPropagation()}>\n {t(`foundations.notification.${notification.notificationType}.buttons.action` as any)}\n </Button>\n </Link>\n ) : (\n <></>\n )}\n {!archived && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant={`link`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n archiveNotification(notification);\n }}\n className=\"text-muted-foreground hover:text-destructive ml-2\"\n >\n <ArchiveIcon className=\"h-4 w-4 cursor-pointer\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t(`foundations.notification.buttons.archive`)}</TooltipContent>\n </Tooltip>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })\n ) : (\n <LoadingSkeleton />\n )}\n </div>\n );\n}\n","import { BellIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { Fragment, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { useSocketContext } from \"../../../../contexts\";\nimport { usePageUrlGenerator } from \"../../../../hooks\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n Popover,\n PopoverContent,\n PopoverTrigger,\n ScrollArea,\n Separator,\n SidebarMenuButton,\n} from \"../../../../shadcnui\";\nimport { useNotificationContext } from \"../../contexts/NotificationContext\";\nimport { NotificationInterface } from \"../../data\";\nimport { NotificationErrorBoundary } from \"../common\";\n\ninterface NotificationModalProps {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n}\n\nfunction NotificationModalContent({ isOpen, setIsOpen }: NotificationModalProps) {\n const instanceId = useRef(Math.random().toString(36).substr(2, 9));\n const {\n notifications,\n addNotification,\n generateNotification,\n generateToastNotification,\n markNotificationsAsRead,\n isLoading,\n error,\n } = useNotificationContext();\n const { socketNotifications, removeSocketNotification, clearSocketNotifications } = useSocketContext();\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const [newNotifications, setNewNotifications] = useState<boolean>(false);\n const preventAutoClose = useRef(false);\n\n const circuitBreakerRef = useRef({\n count: 0,\n resetTime: 0,\n isOpen: false,\n });\n\n const checkCircuitBreaker = useCallback(() => {\n const now = Date.now();\n const breaker = circuitBreakerRef.current;\n\n // Reset counter every 10 seconds\n if (now > breaker.resetTime) {\n breaker.count = 0;\n breaker.resetTime = now + 10000; // 10 seconds\n breaker.isOpen = false;\n }\n\n // Trip breaker if more than 20 notifications in 10 seconds\n breaker.count++;\n if (breaker.count > 20) {\n breaker.isOpen = true;\n return false;\n }\n\n return !breaker.isOpen;\n }, []);\n\n const { unreadCount, unreadIds } = useMemo(() => {\n const unreadNotifications = notifications.filter((notif) => !notif.isRead);\n return {\n unreadCount: unreadNotifications.length,\n unreadIds: unreadNotifications.map((notif) => notif.id),\n };\n }, [notifications]);\n\n useEffect(() => {\n setNewNotifications(unreadCount > 0);\n }, [unreadCount]);\n\n const processSocketNotificationsRef = useRef<NodeJS.Timeout | null>(null);\n\n const processSocketNotifications = useCallback(() => {\n if (socketNotifications.length === 0) {\n return;\n }\n\n if (!checkCircuitBreaker()) {\n clearSocketNotifications(); // Still clear to prevent memory leaks\n return;\n }\n\n const currentSocketNotifications = [...socketNotifications];\n clearSocketNotifications();\n\n // Process notifications in smaller batches to prevent UI freeze\n const batchSize = 3;\n const batches = [];\n for (let i = 0; i < currentSocketNotifications.length; i += batchSize) {\n batches.push(currentSocketNotifications.slice(i, i + batchSize));\n }\n\n batches.forEach((batch, batchIndex) => {\n setTimeout(() => {\n batch.forEach((notification) => {\n addNotification(notification);\n const toastNotification = generateToastNotification(notification, t, generateUrl);\n\n toast.message(toastNotification.title, {\n description: toastNotification.description,\n action: toastNotification.action,\n });\n });\n\n // Only set newNotifications on the last batch\n if (batchIndex === batches.length - 1) {\n setNewNotifications(true);\n }\n }, batchIndex * 100); // 100ms delay between batches\n });\n }, [\n socketNotifications,\n clearSocketNotifications,\n addNotification,\n generateToastNotification,\n t,\n generateUrl,\n checkCircuitBreaker,\n ]);\n\n // 🔗 SOCKET: Throttled processing with 300ms delay\n useEffect(() => {\n if (processSocketNotificationsRef.current) {\n clearTimeout(processSocketNotificationsRef.current);\n }\n\n processSocketNotificationsRef.current = setTimeout(() => {\n processSocketNotifications();\n }, 300); // 300ms throttle\n\n return () => {\n if (processSocketNotificationsRef.current) {\n clearTimeout(processSocketNotificationsRef.current);\n }\n };\n }, [processSocketNotifications]);\n\n const handleOpenChange = (newlyRequestedOpenState: boolean) => {\n if (!newlyRequestedOpenState && preventAutoClose.current) {\n return;\n }\n\n setIsOpen(newlyRequestedOpenState);\n\n if (newlyRequestedOpenState) {\n preventAutoClose.current = true;\n\n if (unreadIds.length > 0) {\n markNotificationsAsRead(unreadIds)\n .catch((error) => {\n console.error(\"❌ [NotificationModal] Failed to mark notifications as read:\", error);\n })\n .finally(() => {\n preventAutoClose.current = false;\n // Workaround: re-open if it was open before\n setIsOpen(true);\n });\n } else {\n preventAutoClose.current = false;\n }\n setNewNotifications(false);\n }\n };\n\n const unreadNotifications = newNotifications && unreadCount > 0;\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpenChange} data-testid={`sidebar-notification button`}>\n <PopoverTrigger asChild>\n <SidebarMenuButton className=\"text-muted-foreground h-6\" disabled={isLoading}>\n <BellIcon\n className={`h-5 w-5 cursor-pointer ${unreadNotifications ? \"text-destructive\" : \"\"} ${isLoading ? \"animate-pulse\" : \"\"}`}\n />\n {t(`types.notifications`, { count: 2 })}\n </SidebarMenuButton>\n </PopoverTrigger>\n <PopoverContent className=\"relative left-10 w-80 border-0 p-0 shadow-none\">\n <Card>\n <CardHeader className=\"p-4\">\n <CardTitle>{t(`types.notifications`, { count: 2 })}</CardTitle>\n {isLoading && <div className=\"text-muted-foreground text-xs\">Loading...</div>}\n {error && <div className=\"text-destructive text-xs\">Error: {error}</div>}\n </CardHeader>\n <Separator />\n <ScrollArea className=\"h-96\">\n {notifications.length > 0 ? (\n notifications.map((notification: NotificationInterface) => (\n <Fragment key={notification.id}>{generateNotification(notification, () => setIsOpen(false))}</Fragment>\n ))\n ) : (\n <div className=\"p-4 text-center text-sm text-gray-500\">\n {t(`foundations.notification.empty`, { count: 2 })}\n </div>\n )}\n </ScrollArea>\n </Card>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function NotificationModal(props: NotificationModalProps) {\n return (\n <NotificationErrorBoundary>\n <NotificationModalContent {...props} />\n </NotificationErrorBoundary>\n );\n}\n","\"use client\";\n\nimport { ReactNode, type JSX } from \"react\";\nimport usePushNotifications from \"../../../../hooks/usePushNotifications\";\n\nexport function PushNotificationProvider({ children }: { children: ReactNode }): JSX.Element {\n usePushNotifications();\n return <>{children}</>;\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { createContext, ReactNode, useContext, useState } from \"react\";\nimport { SharedProvider } from \"../../../contexts\";\nimport { JsonApiHydratedDataInterface, Modules, rehydrate } from \"../../../core\";\nimport { usePageUrlGenerator } from \"../../../hooks\";\nimport { BreadcrumbItemData } from \"../../../interfaces\";\nimport { RoleInterface } from \"../data\";\n\ninterface RoleContextType {\n role: RoleInterface | undefined;\n setRole: (value: RoleInterface | undefined) => void;\n}\n\nconst RoleContext = createContext<RoleContextType | undefined>(undefined);\n\ntype RoleProviderProps = {\n children: ReactNode;\n dehydratedRole?: JsonApiHydratedDataInterface;\n};\n\nexport const RoleProvider = ({ children, dehydratedRole }: RoleProviderProps) => {\n const generateUrl = usePageUrlGenerator();\n const t = useTranslations();\n\n const [role, setRole] = useState<RoleInterface | undefined>(\n dehydratedRole ? rehydrate<RoleInterface>(Modules.Role, dehydratedRole) : undefined,\n );\n\n const breadcrumb = () => {\n const response: BreadcrumbItemData[] = [];\n\n response.push({\n name: t(`types.roles`, { count: 2 }),\n href: generateUrl({ page: Modules.Role }),\n });\n\n if (role)\n response.push({\n name: role.name,\n href: generateUrl({ page: Modules.Role, id: role.id }),\n });\n\n return response;\n };\n\n const title = () => {\n const response: any = {\n type: t(`types.roles`, { count: role ? 1 : 2 }),\n };\n\n const functions: ReactNode[] = [];\n\n if (role) {\n response.element = role.name;\n }\n\n if (functions.length > 0) response.functions = functions;\n\n return response;\n };\n\n return (\n <SharedProvider value={{ breadcrumbs: breadcrumb(), title: title() }}>\n <RoleContext.Provider\n value={{\n role: role,\n setRole: setRole,\n }}\n >\n {children}\n </RoleContext.Provider>\n </SharedProvider>\n );\n};\n\nexport const useRoleContext = (): RoleContextType => {\n const context = useContext(RoleContext);\n if (context === undefined) {\n throw new Error(\"useRoleContext must be used within a RoleProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { AttributeElement } from \"../../../../components\";\nimport { Card, CardContent } from \"../../../../shadcnui\";\nimport { useRoleContext } from \"../../contexts\";\n\nexport function RoleDetails() {\n const { role } = useRoleContext();\n const t = useTranslations();\n\n if (!role) return null;\n\n return (\n <Card className=\"w-full\">\n <CardContent className=\"p-4\">\n <AttributeElement title={t(`foundations.role.fields.description.label`)} value={role.description} />\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport { RoleUsersList } from \"../../../user/components/lists/RoleUsersList\";\nimport { useRoleContext } from \"../../contexts\";\nimport { RoleDetails } from \"../details\";\n\nexport function RoleContainer() {\n const { role } = useRoleContext();\n\n if (!role) return null;\n\n return (\n <>\n <RoleDetails />\n <RoleUsersList role={role} />\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport {\n Checkbox,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../../user\";\nimport { useCurrentUserContext } from \"../../../user/contexts\";\nimport { RoleInterface } from \"../../data\";\n\ntype FormRolesProps = {\n form: any;\n id: string;\n name: string;\n roles: RoleInterface[];\n};\n\nexport function FormRoles({ form, id, name, roles }: FormRolesProps) {\n const t = useTranslations();\n const { hasAccesToFeature } = useCurrentUserContext<UserInterface>();\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>\n <div className=\"text-sm font-semibold\">{name}</div>\n {roles\n .filter((role: RoleInterface) => role.isSelectable)\n .sort((a: RoleInterface, b: RoleInterface) => a.name.localeCompare(b.name))\n .map((role: RoleInterface) => {\n if (role.requiredFeature && !hasAccesToFeature(role.requiredFeature.id)) return null;\n\n return (\n <div key={role.id}>\n <Checkbox\n defaultChecked={(field.value as string[]).some((roleId: string) => roleId === role.id)}\n onCheckedChange={(checked) => {\n if (checked) {\n form.setValue(id, [...(field.value as string[]), role.id]);\n } else {\n form.setValue(\n id,\n (field.value as string[]).filter((roleId: string) => roleId !== role.id),\n );\n }\n }}\n />\n <Tooltip>\n <TooltipTrigger asChild>\n <FormLabel className=\"ml-3 font-normal\">\n {t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) })}\n </FormLabel>\n </TooltipTrigger>\n <TooltipContent>\n {t(`foundations.role.roles_descriptions`, { role: role.id.replaceAll(`-`, ``) })}\n </TooltipContent>\n </Tooltip>\n </div>\n );\n })}\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useState } from \"react\";\nimport { errorToast } from \"../../../../components\";\nimport { getRoleId } from \"../../../../roles\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../../../shadcnui\";\nimport { UserInterface, UserService } from \"../../../user\";\nimport { RoleInterface, RoleService } from \"../../data\";\n\ntype RemoveUserFromRoleProps = {\n user: UserInterface;\n role: RoleInterface;\n refresh: () => Promise<void>;\n};\n\nexport function RemoveUserFromRole({ role, user, refresh }: RemoveUserFromRoleProps) {\n const [open, setOpen] = useState<boolean>(false);\n const [canRemove, setCanRemove] = useState<boolean>(false);\n const t = useTranslations();\n\n useEffect(() => {\n async function checkCompanyAdminDeletability(): Promise<void> {\n const roleUsers = await UserService.findAllUsersByRole({\n roleId: role.id,\n });\n\n if (roleUsers.length > 1) setCanRemove(true);\n }\n\n if (role.id !== getRoleId().CompanyAdministrator) {\n setCanRemove(true);\n return;\n }\n\n checkCompanyAdminDeletability();\n }, [role]);\n\n const remove = async () => {\n try {\n await RoleService.removeUserFromRole({\n roleId: role.id,\n userId: user.id,\n });\n\n setOpen(false);\n refresh();\n } catch (error) {\n errorToast({ title: t(`generic.errors.error`), error: error });\n }\n };\n\n const roleName = t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) });\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setOpen(true);\n }}\n >\n <span className=\"hover:text-destructive cursor-pointer\">{t(`foundations.role.remove_user.title`)}</span>\n </DialogTrigger>\n <DialogContent className={`flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`}>\n <DialogHeader>\n <DialogTitle>{t(`foundations.role.remove_user.title`)}</DialogTitle>\n <DialogDescription>\n {canRemove\n ? t(`foundations.role.remove_user.subtitle_allowed`)\n : t(`foundations.role.remove_user.subtitle_not_allowed`)}\n </DialogDescription>\n </DialogHeader>\n {canRemove ? (\n <>\n {t(`foundations.role.remove_user.description_allowed`, { role: roleName, user: user.name })}\n <div className=\"flex justify-end\">\n <Button className=\"mr-2\" variant={\"outline\"} type={`button`} onClick={() => setOpen(false)}>\n {t(`generic.buttons.cancel`)}\n </Button>\n <Button\n type=\"submit\"\n onClick={(e) => {\n e.preventDefault();\n remove();\n }}\n variant={\"destructive\"}\n >\n {t(`generic.buttons.confirm_delete`)}\n </Button>\n </div>\n </>\n ) : (\n <>{t(`foundations.role.remove_user.description_not_allowed`, { role: roleName, user: user.name })}</>\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport { PlusCircle } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { useDebounce } from \"../../../../hooks\";\nimport {\n Button,\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n DialogDescription,\n DialogTitle,\n} from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../../user\";\nimport { RoleInterface, RoleService } from \"../../data\";\n\ntype UserRoleAddProps = {\n user: UserInterface;\n refresh: () => Promise<void>;\n};\n\nexport function UserRoleAdd({ user, refresh }: UserRoleAddProps) {\n const [open, setOpen] = useState<boolean>(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n const [roles, setRoles] = useState<RoleInterface[]>([]);\n const t = useTranslations();\n\n const addUserToRole = async (role: RoleInterface) => {\n await RoleService.addUserToRole({\n roleId: role.id,\n userId: user.id,\n });\n setRoles(roles.filter((u) => u.id !== role.id));\n\n toast.message(\n t(`generic.association.label`, {\n source: t(`types.roles`, { count: 1 }),\n destination: t(`types.users`, { count: 1 }),\n }),\n {\n description: t(`generic.association.success`, {\n source: t(`types.roles`, { count: 1 }),\n destination: t(`types.users`, { count: 1 }),\n source_name: role.name,\n destination_name: user.name,\n }),\n },\n );\n\n refresh();\n };\n\n const searchRoles = useCallback(\n async (term: string) => {\n setRoles(\n await RoleService.findAllRolesUserNotIn({\n search: term,\n userId: user.id,\n }),\n );\n },\n [searchTerm, user],\n );\n\n const updateSearchTerm = useDebounce(searchRoles, 500);\n\n useEffect(() => {\n if (open) updateSearchTerm(searchTerm);\n }, [open, searchTerm]);\n\n useEffect(() => {\n if (open) searchRoles(\"\");\n }, [open]);\n\n return (\n <>\n <Button size=\"sm\" onClick={() => setOpen(true)}>\n <PlusCircle className=\"mr-3 h-3.5 w-3.5\" />\n {t(`generic.association.label`, {\n source: t(`types.roles`, { count: 1 }),\n destination: t(`types.users`, { count: 1 }),\n })}\n </Button>\n <CommandDialog open={open} onOpenChange={setOpen}>\n <DialogTitle>\n {t(`generic.association.label`, {\n source: t(`types.roles`, { count: 1 }),\n destination: t(`types.users`, { count: 1 }),\n })}\n </DialogTitle>\n <DialogDescription>\n {t(`generic.association.description`, {\n source: t(`types.roles`, { count: 1 }),\n destination: t(`types.users`, { count: 1 }),\n destination_name: user.name,\n })}\n </DialogDescription>\n <Command shouldFilter={false}>\n <CommandInput\n placeholder={t(`generic.search.placeholder`, { type: t(`types.roles`, { count: 1 }) })}\n value={searchTerm}\n onValueChange={setSearchTerm}\n ref={inputRef}\n />\n <CommandList className=\"mt-3 h-auto max-h-96 min-h-96 max-w-full overflow-x-hidden overflow-y-auto\">\n <CommandEmpty>{t(`generic.search.no_results`, { type: t(`types.roles`, { count: 1 }) })}</CommandEmpty>\n {roles.map((role: RoleInterface) => (\n <CommandItem\n className=\"cursor-pointer\"\n key={role.id}\n onSelect={() => addUserToRole(role)}\n onClick={() => addUserToRole(role)}\n >\n {t(`foundations.role.roles`, { role: role.id.replaceAll(`-`, ``) })}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </CommandDialog>\n </>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { RoleFields, RoleInterface, RoleService } from \"../../data\";\nimport \"../../hooks/useRoleTableStructure\";\n\nexport function RolesList() {\n const t = useTranslations();\n\n const data: DataListRetriever<RoleInterface> = useDataListRetriever({\n retriever: (params) => RoleService.findAllRoles(params),\n retrieverParams: {},\n module: Modules.Role,\n });\n\n return (\n <ContentListTable\n data={data}\n fields={[RoleFields.name, RoleFields.description]}\n tableGeneratorType={Modules.Role}\n title={t(`types.roles`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { ContentListTable } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever } from \"../../../../hooks\";\nimport { UserInterface } from \"../../../user\";\nimport { RoleFields, RoleInterface, RoleService } from \"../../data\";\n\ntype UserRolesListProps = {\n user: UserInterface;\n};\n\nexport function UserRolesList({ user }: UserRolesListProps) {\n const t = useTranslations();\n\n const data: DataListRetriever<RoleInterface> = useDataListRetriever({\n retriever: (params) => RoleService.findAllRolesByUser(params),\n retrieverParams: { userId: user.id },\n module: Modules.Role,\n });\n\n return (\n <ContentListTable\n data={data}\n fields={[RoleFields.name, RoleFields.description]}\n tableGeneratorType={Modules.Role}\n title={t(`types.roles`, { count: 2 })}\n />\n );\n}\n","\"use client\";\n\nimport { UploadIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport Image from \"next/image\";\nimport { useEffect, useState } from \"react\";\nimport { DropzoneOptions } from \"react-dropzone\";\nimport { FileInput, FileUploader } from \"../../../../components\";\nimport { Button } from \"../../../../shadcnui\";\nimport { UserInterface } from \"../../data\";\n\ntype UserAvatarEditorProps = {\n user?: UserInterface;\n file?: File | null;\n setFile: (file: File | null) => void;\n resetImage: boolean;\n setResetImage: (reset: boolean) => void;\n};\n\nexport function UserAvatarEditor({ user, file, setFile, resetImage, setResetImage }: UserAvatarEditorProps) {\n const [files, setFiles] = useState<File[] | null>(null);\n const t = useTranslations();\n\n useEffect(() => {\n if (files && files.length > 0) {\n setResetImage(false);\n setFile(files[0]);\n }\n }, [files]);\n\n const dropzone = {\n multiple: false,\n maxSize: 100 * 1024 * 1024,\n preventDropOnDocument: false,\n accept: {\n \"application/images\": [\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".svg\"],\n },\n } satisfies DropzoneOptions;\n\n return (\n <div className=\"flex w-40 flex-col gap-y-4\">\n <FileUploader\n value={files}\n onValueChange={setFiles}\n dropzoneOptions={dropzone}\n className=\"h-40 w-40 rounded-full p-0\"\n >\n <FileInput className=\"bg-muted text-muted-foreground flex h-full w-full flex-col items-center justify-center\">\n {!resetImage && (file || user?.avatar) ? (\n <Image\n src={file ? URL.createObjectURL(file) : user?.avatar || \"\"}\n alt={t(`generic.avatar`)}\n width={200}\n height={200}\n />\n ) : (\n <UploadIcon className=\"my-4 h-8 w-8\" />\n )}\n </FileInput>\n </FileUploader>\n {!resetImage && (file || user?.avatar) && (\n <Button\n className=\"\"\n size={`sm`}\n variant={`outline`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setFile(null);\n setResetImage(true);\n }}\n >\n {t(`generic.buttons.remove`)}\n </Button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\nimport { CommonDeleter } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { useI18nRouter, usePageUrlGenerator } from \"../../../../hooks\";\nimport { Action } from \"../../../../permissions\";\nimport { getRoleId } from \"../../../../roles\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface, UserService } from \"../../data\";\n\ntype UserDeleterProps = {\n user: UserInterface;\n companyId?: string;\n onDeleted?: () => void;\n};\n\nfunction UserDeleterInternal({ user, onDeleted, companyId }: UserDeleterProps) {\n const { currentUser, company } = useCurrentUserContext<UserInterface>();\n const generateUrl = usePageUrlGenerator();\n const router = useI18nRouter();\n const t = useTranslations();\n\n let cId;\n if (currentUser?.roles.find((role) => role.id === getRoleId().Administrator) && companyId) {\n cId = companyId;\n } else {\n if (!company) return;\n cId = company.id;\n }\n\n return (\n <CommonDeleter\n type={`users`}\n deleteFunction={() =>\n UserService.delete({ userId: user.id, companyId: cId }).then(() =>\n onDeleted ? onDeleted() : router.push(generateUrl({ page: Modules.User })),\n )\n }\n />\n );\n}\n\nexport function UserDeleter(props: UserDeleterProps) {\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n if (!hasPermissionToModule({ module: Modules.User, action: Action.Delete, data: props.user })) return null;\n\n return <UserDeleterInternal {...props} />;\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { v4 } from \"uuid\";\nimport { z } from \"zod\";\nimport {\n CommonEditorButtons,\n CommonEditorHeader,\n CommonEditorTrigger,\n errorToast,\n FormCheckbox,\n FormInput,\n FormPassword,\n FormRoles,\n FormTextarea,\n} from \"../../../../components\";\nimport { useCompanyContext } from \"../../../../contexts\";\nimport { Modules } from \"../../../../core\";\nimport { useI18nRouter, usePageUrlGenerator } from \"../../../../hooks\";\nimport { Action } from \"../../../../permissions\";\nimport { getRoleId } from \"../../../../roles\";\nimport { Dialog, DialogContent, DialogTrigger, Form } from \"../../../../shadcnui\";\nimport { CompanyInterface } from \"../../../company\";\nimport { RoleInterface, RoleService } from \"../../../role\";\nimport { S3Interface, S3Service } from \"../../../s3\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInput, UserInterface, UserService } from \"../../data\";\nimport { UserAvatarEditor } from \"./UserAvatarEditor\";\nimport { UserDeleter } from \"./UserDeleter\";\n\ntype UserEditorProps = {\n user?: UserInterface;\n propagateChanges?: (user: UserInterface) => void;\n adminCreated?: boolean;\n trigger?: React.ReactNode;\n onRevalidate?: (path: string) => Promise<void>;\n};\n\nfunction UserEditorInternal({ user, propagateChanges, adminCreated, trigger, onRevalidate }: UserEditorProps) {\n const {\n company: userCompany,\n hasPermissionToModule,\n hasRole,\n currentUser,\n setUser,\n } = useCurrentUserContext<UserInterface>();\n const { company: companyFromContext } = useCompanyContext();\n const generateUrl = usePageUrlGenerator();\n const router = useI18nRouter();\n const [open, setOpen] = useState<boolean>(false);\n const [roles, setRoles] = useState<RoleInterface[]>([]);\n const [file, setFile] = useState<File | null>(null);\n const [contentType, setContentType] = useState<string | null>(null);\n const t = useTranslations();\n const [resetImage, setResetImage] = useState<boolean>(false);\n const [company, setCompany] = useState<CompanyInterface | null>(companyFromContext || userCompany);\n\n useEffect(() => {\n if (!companyFromContext && userCompany) setCompany(userCompany);\n }, [company]);\n\n const formSchema = z.object({\n id: z.uuidv4(),\n name: z.string().min(1, { message: t(`foundations.user.fields.name.error`) }),\n email: z.string().min(1, { message: t(`generic.fields.email.error`) }),\n password: z.string().optional(),\n title: z.string().optional(),\n bio: z.string().optional(),\n phone: z.string().optional(),\n roleIds: z.array(z.string()).optional(),\n sendInvitationEmail: z.boolean().optional(),\n avatar: z.string().optional(),\n });\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n id: user?.id || v4(),\n name: user?.name || \"\",\n title: user?.title || \"\",\n bio: user?.bio || \"\",\n email: user?.email || \"\",\n phone: user?.phone || \"\",\n password: \"\",\n roleIds: user?.roles.map((role: RoleInterface) => role.id) || [],\n sendInvitationEmail: false,\n avatar: user?.avatarUrl || \"\",\n },\n });\n\n const onSubmit: SubmitHandler<z.infer<typeof formSchema>> = async (values: z.infer<typeof formSchema>) => {\n if (!user) {\n try {\n const existingUser = await UserService.findByEmail({ email: values.email });\n if (existingUser) {\n form.setError(\"email\", {\n type: \"manual\",\n message: t(`foundations.user.errors.email_exists`),\n });\n errorToast({ title: t(`foundations.user.errors.email_exists`), error: \"\" });\n return;\n }\n } catch (error) {\n // User does not exist, proceed\n }\n }\n\n if (values.avatar && contentType) {\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: values.avatar,\n contentType: contentType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n }\n\n const payload: UserInput = {\n id: values.id,\n email: values.email,\n name: values.name,\n title: values.title,\n bio: values.bio,\n phone: values.phone,\n password: values.password,\n avatar: resetImage ? undefined : values.avatar,\n roleIds: values.roleIds,\n sendInvitationEmail: values.sendInvitationEmail,\n companyId: company!.id,\n adminCreated: adminCreated,\n };\n\n try {\n const updatedUser = user\n ? ((await UserService.update(payload)) as UserInterface)\n : ((await UserService.create(payload)) as UserInterface);\n\n if (currentUser?.id === updatedUser.id) setUser(updatedUser);\n\n if (onRevalidate) {\n await onRevalidate(generateUrl({ page: Modules.User, id: updatedUser.id, language: `[locale]` }));\n }\n if (propagateChanges) {\n propagateChanges(updatedUser);\n setOpen(false);\n } else {\n router.push(generateUrl({ page: Modules.User, id: updatedUser.id }));\n }\n } catch (error) {\n errorToast({ title: user ? t(`generic.errors.update`) : t(`generic.errors.create`), error });\n }\n };\n\n useEffect(() => {\n async function fetchRoles() {\n const roles = await RoleService.findAllRoles({});\n\n const availableRoles = roles.filter(\n (role: RoleInterface) =>\n role.id !== getRoleId().Administrator &&\n (role.requiredFeature === undefined ||\n company?.features.some((feature) => feature.id === role.requiredFeature?.id)),\n );\n\n setRoles(availableRoles);\n }\n\n if (\n open &&\n (company || currentUser?.roles.find((role: RoleInterface) => role.id === getRoleId().Administrator)) &&\n roles.length === 0\n )\n fetchRoles();\n }, [company, open]);\n\n useEffect(() => {\n if (file && company) {\n const id = form.getValues(\"id\");\n const fileType = file.type;\n let extension = \"\";\n\n switch (fileType) {\n default:\n extension = file.type.split(\"/\").pop() ?? \"\";\n break;\n }\n\n const timestamp = new Date().toISOString().replace(/[-:T]/g, \"\").split(\".\")[0];\n\n const fileUrl = `companies/${company.id}/users/${id}/${id}.${timestamp}.${extension}`;\n form.setValue(\"avatar\", fileUrl);\n\n setContentType(fileType);\n } else {\n setContentType(null);\n }\n }, [file]);\n\n const canChangeRoles =\n !(currentUser?.id === user?.id && hasRole(getRoleId().Administrator)) &&\n (hasPermissionToModule({ module: Modules.User, action: Action.Update }) || hasRole(getRoleId().Administrator));\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : <CommonEditorTrigger isEdit={!!user} />}\n <DialogContent\n className={`flex max-h-[70vh] ${canChangeRoles ? `max-w-[90vw]` : `max-w-3xl`} min-h-3xl max-h-[90vh] flex-col overflow-y-auto`}\n >\n <CommonEditorHeader type={t(`types.users`, { count: 1 })} name={user?.name} />\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className={`flex w-full flex-col gap-y-4`}>\n <div className={`flex flex-row gap-x-4`}>\n <div className={`flex w-40 flex-col justify-start gap-y-2`}>\n <UserAvatarEditor\n user={user}\n file={file}\n setFile={setFile}\n resetImage={resetImage}\n setResetImage={setResetImage}\n />\n </div>\n <div className={`flex w-full flex-col justify-start`}>\n <FormInput\n form={form}\n id=\"name\"\n name={t(`foundations.user.fields.name.label`)}\n placeholder={t(`foundations.user.fields.name.placeholder`)}\n />\n <FormInput\n form={form}\n id=\"email\"\n name={t(`generic.fields.email.label`)}\n placeholder={t(`generic.fields.email.placeholder`)}\n />\n <FormInput\n form={form}\n id=\"phone\"\n name={t(`foundations.user.fields.phone.label`)}\n placeholder={t(`foundations.user.fields.phone.placeholder`)}\n />\n <FormPassword\n form={form}\n id=\"password\"\n name={t(`foundations.user.fields.password.label`)}\n placeholder={t(`foundations.user.fields.password.placeholder`)}\n />\n <FormInput\n form={form}\n id=\"title\"\n name={t(`foundations.user.fields.title.label`)}\n placeholder={t(`foundations.user.fields.title.placeholder`)}\n />\n <FormTextarea\n form={form}\n id=\"bio\"\n name={t(`foundations.user.fields.bio.label`)}\n placeholder={t(`foundations.user.fields.bio.placeholder`)}\n className=\"min-h-40\"\n />\n </div>\n {canChangeRoles && (\n <div className=\"flex w-1/3 flex-col\">\n {canChangeRoles && (\n <FormRoles form={form} id=\"roleIds\" name={t(`types.roles`, { count: 2 })} roles={roles} />\n )}\n {!user && (\n <div className=\"flex flex-col gap-y-4\">\n <div className=\"text-sm font-semibold\">{t(`foundations.user.send_activation_email`)}</div>\n <FormCheckbox\n form={form}\n id=\"sendInvitationEmail\"\n name={t(`foundations.user.send_activation_email`)}\n />\n </div>\n )}\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end gap-x-4\">\n {user && currentUser?.roles.find((role: RoleInterface) => role.id === getRoleId().Administrator) && (\n <UserDeleter\n companyId={user.company?.id}\n user={user}\n onDeleted={() => {\n setOpen(false);\n if (propagateChanges) propagateChanges(user);\n }}\n />\n )}\n <CommonEditorButtons form={form} setOpen={setOpen} isEdit={!!user} />\n </div>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function UserEditor(props: UserEditorProps) {\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n if (\n !hasPermissionToModule({\n module: Modules.User,\n action: props.user ? Action.Update : Action.Create,\n data: props.user,\n })\n )\n return null;\n\n return <UserEditorInternal {...props} />;\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useWatch } from \"react-hook-form\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever, useDebounce } from \"../../../../hooks\";\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n MultiSelect,\n} from \"../../../../shadcnui\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface, UserService } from \"../../data\";\n\n// Type for user objects in the form\ntype UserSelectType = {\n id: string;\n name: string;\n avatar?: string;\n};\n\ntype UserMultiSelectProps = {\n id: string;\n form: any;\n currentUser?: UserInterface;\n label?: string;\n placeholder?: string;\n onChange?: (users?: UserInterface[]) => void;\n maxCount?: number;\n isRequired?: boolean;\n};\n\nfunction UserAvatarIcon({ className, url, name }: { className?: string; url?: string; name?: string }) {\n return (\n <Avatar className={`${className || \"h-4 w-4\"}`}>\n <AvatarImage src={url} />\n <AvatarFallback>\n {name\n ? name\n .split(\" \")\n .map((n: string) => n.charAt(0).toUpperCase())\n .join(\"\")\n : \"U\"}\n </AvatarFallback>\n </Avatar>\n );\n}\n\nexport function UserMultiSelect({\n id,\n form,\n currentUser,\n label,\n placeholder,\n onChange,\n maxCount = 3,\n isRequired = false,\n}: UserMultiSelectProps) {\n const { company } = useCurrentUserContext<UserInterface>();\n\n const searchTermRef = useRef<string>(\"\");\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n const [isSearching, setIsSearching] = useState<boolean>(false);\n const [userOptions, setUserOptions] = useState<any[]>([]);\n\n // Get the current selected users from the form\n const selectedUsers: UserSelectType[] = useWatch({ control: form.control, name: id }) || [];\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n ready: !!company,\n retriever: (params) => {\n return UserService.findAllUsers(params);\n },\n retrieverParams: { companyId: company?.id },\n module: Modules.User,\n }) as DataListRetriever<UserInterface>;\n\n useEffect(() => {\n if (company) data.setReady(true);\n }, [company]);\n\n const search = useCallback(\n async (searchedTerm: string) => {\n try {\n if (searchedTerm === searchTermRef.current) return;\n setIsSearching(true);\n searchTermRef.current = searchedTerm;\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 // Update userOptions when data changes or when initial selected users are available\n useEffect(() => {\n if (data.data && data.data.length > 0) {\n const users = data.data as UserInterface[];\n const filteredUsers = users.filter((user) => user.id !== currentUser?.id);\n\n const options = filteredUsers.map((user) => ({\n label: user.name,\n value: user.id,\n icon: ({ className }: { className?: string }) => (\n <UserAvatarIcon className={className} url={user.avatar} name={user.name} />\n ),\n userData: user,\n }));\n\n setUserOptions(options);\n }\n }, [data.data, currentUser]);\n\n // Add options for any already selected users that aren't in search results\n useEffect(() => {\n if (selectedUsers.length > 0) {\n // Create a map of existing option IDs for quick lookup\n const existingOptionIds = new Set(userOptions.map((option) => option.value));\n\n // Find selected users that don't have an option yet\n const missingOptions = selectedUsers\n .filter((user) => !existingOptionIds.has(user.id))\n .map((user) => ({\n label: user.name,\n value: user.id,\n icon: ({ className }: { className?: string }) => (\n <UserAvatarIcon className={className} url={user.avatar} name={user.name} />\n ),\n userData: user,\n }));\n\n // Add missing options if there are any\n if (missingOptions.length > 0) {\n setUserOptions((prev) => [...prev, ...missingOptions]);\n }\n }\n }, [selectedUsers, userOptions]);\n\n const handleValueChange = (selectedIds: string[]) => {\n // Map selected IDs to user objects for the form\n const updatedSelectedUsers = selectedIds.map((id) => {\n // First check if user is already in the selected users (preserve existing data)\n const existingUser = selectedUsers.find((user) => user.id === id);\n if (existingUser) {\n return existingUser;\n }\n\n // Otherwise, get user data from the options\n const option = userOptions.find((option) => option.value === id);\n if (option?.userData) {\n return {\n id: option.userData.id,\n name: option.userData.name,\n avatar: option.userData.avatar,\n };\n }\n\n // Fallback to just the ID if no data is available\n return { id, name: id };\n });\n\n form.setValue(id, updatedSelectedUsers);\n\n if (onChange) {\n const fullSelectedUsers = selectedIds\n .map((id) => userOptions.find((option) => option.value === id)?.userData)\n .filter(Boolean) as UserInterface[];\n onChange(fullSelectedUsers);\n }\n };\n\n // Extract just the IDs for the MultiSelect component\n const selectedUserIds = selectedUsers.map((user: UserSelectType) => user.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={`${label ? \"mb-5\" : \"mb-1\"}`}>\n {label && (\n <FormLabel className=\"flex items-center\">\n {label}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <MultiSelect\n options={userOptions}\n onValueChange={handleValueChange}\n defaultValue={selectedUserIds}\n placeholder={placeholder}\n maxCount={maxCount}\n animation={0}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { UserCheckIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useState } from \"react\";\nimport { errorToast } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { Action } from \"../../../../permissions\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../../../shadcnui\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface, UserService } from \"../../data\";\n\ntype UserReactivatorProps = {\n user: UserInterface;\n propagateChanges: (user: UserInterface) => void;\n};\n\nfunction UserReactivatorInterface({ user, propagateChanges }: UserReactivatorProps) {\n const [open, setOpen] = useState<boolean>(false);\n const t = useTranslations();\n\n const reactivateUser = async () => {\n try {\n const updatedUser = (await UserService.reactivate({ userId: user.id })) as UserInterface;\n\n setOpen(false);\n propagateChanges(updatedUser);\n } catch (error) {\n errorToast({ title: t(`generic.errors.error`), error: error });\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button size=\"sm\">\n <UserCheckIcon className=\"mr-3 h-3.5 w-3.5\" />\n {t(`foundations.user.buttons.reactivate`)}\n </Button>\n </DialogTrigger>\n <DialogContent className={`flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`}>\n <DialogHeader>\n <DialogTitle>{t(`foundations.user.reactivate.title`)}</DialogTitle>\n <DialogDescription>{t(`foundations.user.reactivate.subtitle`)}</DialogDescription>\n </DialogHeader>\n {t(`foundations.user.reactivate.description`, { name: user.name })}\n <div className=\"flex justify-end\">\n <Button className=\"mr-2\" variant={\"outline\"} type={`button`} onClick={() => setOpen(false)}>\n {t(`generic.buttons.cancel`)}\n </Button>\n <Button\n type=\"submit\"\n onClick={(e) => {\n e.preventDefault();\n reactivateUser();\n }}\n >\n {t(`foundations.user.buttons.reactivate`)}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function UserReactivator(props: UserReactivatorProps) {\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n if (!hasPermissionToModule({ module: Modules.User, action: Action.Update, data: props.user })) return null;\n\n return <UserReactivatorInterface {...props} />;\n}\n","\"use client\";\n\nimport { MailIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { errorToast } from \"../../../../components\";\nimport { Modules } from \"../../../../core\";\nimport { Action } from \"../../../../permissions\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../../../shadcnui\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { UserInterface, UserService } from \"../../data\";\n\ntype UserResentInvitationEmailProps = {\n user: UserInterface;\n};\n\nfunction UserResentInvitationEmailInternal({ user }: UserResentInvitationEmailProps) {\n const [open, setOpen] = useState<boolean>(false);\n const t = useTranslations();\n\n const sendInvitationEmail = async () => {\n try {\n await UserService.sendInvitation({ userId: user.id, companyId: user.company!.id });\n\n setOpen(false);\n toast.message(t(`foundations.user.resend_activation.email_sent`), {\n description: t(`foundations.user.resend_activation.email_sent_description`, { email: user.email }),\n });\n } catch (error) {\n errorToast({ title: t(`generic.errors.error`), error: error });\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button size=\"sm\" variant={`ghost`} className=\"text-muted-foreground\">\n <MailIcon />\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>{t(`foundations.user.buttons.resend_activation`)}</TooltipContent>\n </Tooltip>\n <DialogContent className={`flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`}>\n <DialogHeader>\n <DialogTitle>{t(`foundations.user.resend_activation.title`)}</DialogTitle>\n <DialogDescription>{t(`foundations.user.resend_activation.subtitle`)}</DialogDescription>\n </DialogHeader>\n {t(`foundations.user.resend_activation.description`, { email: user.email })}\n <div className=\"flex justify-end\">\n <Button className=\"mr-2\" variant={\"outline\"} type={`button`} onClick={() => setOpen(false)}>\n {t(`generic.buttons.cancel`)}\n </Button>\n <Button\n type=\"submit\"\n onClick={(e) => {\n e.preventDefault();\n sendInvitationEmail();\n }}\n >\n {t(`foundations.user.buttons.resend_activation`)}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function UserResentInvitationEmail(props: UserResentInvitationEmailProps) {\n const { hasPermissionToModule } = useCurrentUserContext<UserInterface>();\n if (!hasPermissionToModule({ module: Modules.User, action: Action.Update, data: props.user })) return null;\n\n return <UserResentInvitationEmailInternal {...props} />;\n}\n","\"use client\";\n\nimport { CircleX, RefreshCwIcon, SearchIcon, XIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Modules } from \"../../../../core\";\nimport { DataListRetriever, useDataListRetriever, useDebounce } from \"../../../../hooks\";\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Command,\n CommandItem,\n CommandList,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../../../shadcnui\";\nimport { UserInterface, UserService } from \"../../data\";\nimport { UserAvatar } from \"../widgets\";\n\ntype UserSelectorProps = {\n id: string;\n form: any;\n label?: string;\n placeholder?: string;\n onChange?: (user?: UserInterface) => void;\n isRequired?: boolean;\n};\n\nexport function UserSelector({ id, form, label, placeholder, onChange, isRequired = false }: UserSelectorProps) {\n const t = useTranslations();\n\n const [open, setOpen] = useState<boolean>(false);\n\n const searchTermRef = useRef<string>(\"\");\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n\n const [isSearching, setIsSearching] = useState<boolean>(false);\n\n const data: DataListRetriever<UserInterface> = useDataListRetriever({\n retriever: (params) => {\n return UserService.findMany(params);\n },\n retrieverParams: {},\n module: Modules.User,\n });\n\n const search = useCallback(\n async (searchedTerm: string) => {\n try {\n if (searchedTerm === searchTermRef.current) return;\n setIsSearching(true);\n searchTermRef.current = searchedTerm;\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 setUser = (user?: UserInterface) => {\n if (onChange) onChange(user);\n if (!user) {\n form.setValue(id, undefined);\n setOpen(false);\n return;\n }\n\n form.setValue(id, { id: user.id, name: user.name, avatar: user.avatar });\n setOpen(false);\n\n setTimeout(() => {\n setOpen(false);\n }, 0);\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={`${label ? \"mb-5\" : \"mb-1\"}`}>\n {label && (\n <FormLabel className=\"flex items-center\">\n {label}\n {isRequired && <span className=\"text-destructive ml-2 font-semibold\">*</span>}\n </FormLabel>\n )}\n <FormControl>\n <Popover open={open} onOpenChange={setOpen} modal={true}>\n <div className=\"flex w-full flex-row items-center justify-between\">\n <PopoverTrigger className=\"w-full\">\n <div className=\"flex w-full flex-row items-center justify-start rounded-md\">\n {field.value ? (\n <>\n <div className=\"flex w-full flex-row items-center justify-start rounded-md border p-2\">\n <div className=\"*:ring-border *:ring-1\">\n <Avatar className={`mr-2 h-6 w-6`}>\n <AvatarImage src={field.value?.avatar} />\n <AvatarFallback>\n {field.value?.name\n ? field.value?.name.split(\" \").map((name: string) => name.charAt(0).toUpperCase())\n : \"X\"}\n </AvatarFallback>\n </Avatar>\n </div>\n <span className=\"\">{field.value?.name ?? \"\"}</span>\n </div>\n </>\n ) : (\n <div className=\"text-muted-foreground mr-7 flex h-10 w-full flex-row items-center justify-start rounded-md border p-2 text-sm\">\n {placeholder ?? t(`generic.search.placeholder`, { type: t(`types.users`, { count: 1 }) })}\n </div>\n )}\n </div>\n </PopoverTrigger>\n {field.value && (\n <CircleX\n className=\"text-muted hover:text-destructive ml-2 h-6 w-6 cursor-pointer\"\n onClick={() => setUser()}\n />\n )}\n </div>\n <PopoverContent>\n <Command shouldFilter={false}>\n <div className=\"relative mb-2 w-full\">\n <SearchIcon className=\"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4\" />\n <Input\n placeholder={t(`generic.search.placeholder`, { type: t(`types.users`, { count: 1 }) })}\n type=\"text\"\n className=\"w-full pr-8 pl-8\"\n onChange={(e) => setSearchTerm(e.target.value)}\n value={searchTerm}\n />\n {isSearching ? (\n <RefreshCwIcon className=\"text-muted-foreground absolute top-2.5 right-2.5 h-4 w-4 animate-spin\" />\n ) : searchTermRef.current ? (\n <XIcon\n className={`absolute top-2.5 right-2.5 h-4 w-4 ${searchTermRef.current ? \"cursor-pointer\" : \"text-muted-foreground\"}`}\n onClick={() => {\n setSearchTerm(\"\");\n search(\"\");\n }}\n />\n ) : (\n <></>\n )}\n </div>\n <CommandList>\n {data.data &&\n data.data.length > 0 &&\n (data.data as UserInterface[]).map((user: UserInterface) => (\n <CommandItem className=\"cursor-pointer\" key={user.id} onSelect={() => setUser(user)}>\n <UserAvatar user={user} className={`mr-2 h-4 w-4`} />\n <span className=\"\">{user.name}</span>\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslations } from \"next-intl\";\n\nimport { createContext, ReactNode, useContext } from \"react\";\nimport { UserInterface } from \"../features\";\nimport { useCurrentUserContext } from \"../features/user/contexts\";\nimport { BreadcrumbItemData } from \"../interfaces\";\nimport { SharedProvider } from \"./SharedContext\";\n\ninterface CommonContextType {}\n\nconst CommonContext = createContext<CommonContextType | undefined>(undefined);\n\ntype CommonProviderProps = {\n children: ReactNode;\n};\n\nexport const CommonProvider = ({ children }: CommonProviderProps) => {\n const { company } = useCurrentUserContext<UserInterface>();\n const t = useTranslations();\n\n const breadcrumb = () => {\n const response: BreadcrumbItemData[] = [];\n\n return response;\n };\n\n const title = () => {\n const response: any = {\n type: t(`generic.title`),\n };\n\n if (company) response.element = company.name;\n\n return response;\n };\n\n return (\n <SharedProvider value={{ breadcrumbs: breadcrumb(), title: title() }}>\n <CommonContext.Provider value={{}}>{children}</CommonContext.Provider>\n </SharedProvider>\n );\n};\n\nexport const useCommonContext = (): CommonContextType => {\n const context = useContext(CommonContext);\n if (context === undefined) {\n throw new Error(\"useCommonContext must be used within a CommonProvider\");\n }\n return context;\n};\n","\"use client\";\n\nimport React, { createContext, useContext } from \"react\";\nimport { NotificationInterface } from \"../features\";\nimport { useSocket } from \"../hooks\";\n\ninterface SocketContextProps {\n socket: ReturnType<typeof useSocket>[\"socket\"];\n isConnected: boolean;\n messages: any[];\n socketNotifications: NotificationInterface[];\n sendMessage: (event: string, data: any) => void;\n removeMessage: (index: number) => void;\n removeSocketNotification: (index: number) => void;\n clearMessages: () => void;\n clearSocketNotifications: () => void;\n}\n\nconst defaultContextValue: SocketContextProps = {\n socket: null,\n isConnected: false,\n messages: [],\n socketNotifications: [],\n sendMessage: () => {},\n removeMessage: () => {},\n removeSocketNotification: () => {},\n clearMessages: () => {},\n clearSocketNotifications: () => {},\n};\n\nexport const SocketContext = createContext<SocketContextProps>(defaultContextValue);\n\ninterface SocketProviderProps {\n token?: string;\n children: React.ReactNode;\n}\n\nexport const SocketProvider: React.FC<SocketProviderProps> = ({ token, children }) => {\n const socketHookData = token ? useSocket({ token }) : null;\n\n const sendMessage = (event: string, data: any) => {\n const currentSocket = socketHookData ? socketHookData.socket : defaultContextValue.socket;\n const currentIsConnected = socketHookData ? socketHookData.isConnected : defaultContextValue.isConnected;\n\n if (currentSocket && currentIsConnected) {\n currentSocket.emit(event, data);\n }\n };\n\n const value: SocketContextProps = {\n ...defaultContextValue,\n ...(socketHookData || {}),\n sendMessage: sendMessage,\n };\n\n return <SocketContext.Provider value={value}>{children}</SocketContext.Provider>;\n};\n\nexport const useSocketContext = () => {\n const context = useContext(SocketContext);\n if (!context) {\n throw new Error(\"useSocketContext must be used within a SocketProvider\");\n }\n return context;\n};\n"],"mappings":"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","names":["useTranslations","createContext","useContext","useState","useCallback","useCallback","data","search","useCallback","useEffect","useRef","useRef","useEffect","useCallback","useCallback","useEffect","useMemo","useRef","useRef","useCallback","zoom","useMemo","useEffect","node","link","useEffect","useEffect","useEffect","useEffect","useEffect","useEffect","useEffect","useRef","useState","useRef","useState","useEffect","useAtom","usePathname","useEffect","jsx","usePathname","useAtom","useEffect","descriptor","path","useTranslations","createContext","useContext","useState","useTranslations","useEffect","useState","useState","Fragment","jsx","Breadcrumb","useState","useEffect","useState","jsx","jsxs","useState","useEffect","createContext","useContext","jsx","createContext","useContext","jsx","jsxs","Breadcrumb","jsx","useEffect","useState","jsx","jsxs","useState","useEffect","useTranslations","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useEffect","useRef","useState","jsx","jsxs","useTranslations","useState","useRef","useEffect","Fragment","jsx","jsxs","jsx","jsxs","useTranslations","useTranslations","useTranslations","Fragment","jsx","jsxs","useTranslations","jsx","jsxs","jsx","jsxs","jsx","jsxs","useTranslations","jsx","useTranslations","jsx","useTranslations","useTranslations","jsx","useTranslations","useTranslations","useEffect","jsx","useTranslations","useEffect","jsx","jsxs","useTranslations","jsx","useTranslations","useTranslations","jsx","useTranslations","React","Fragment","jsx","jsxs","React","useTranslations","jsx","useTranslations","useTranslations","jsx","useTranslations","jsx","jsxs","useTranslations","React","jsx","React","Image","jsx","jsxs","Image","useTranslations","useCallback","useEffect","useRef","useState","toast","jsx","jsxs","useTranslations","useRef","useState","useCallback","useEffect","toast","useState","Fragment","jsx","jsxs","useState","useTranslations","jsx","jsxs","useTranslations","useTranslations","jsx","jsxs","useTranslations","useTranslations","jsx","useTranslations","useMemo","useState","jsx","jsxs","useState","useMemo","inputValue","value","CalendarIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","CalendarIcon","useTranslations","createContext","useCallback","useContext","useEffect","useRef","useState","toast","jsx","jsxs","createContext","useContext","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","Image","useEffect","useState","jsx","jsxs","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsx","jsx","jsx","createContext","useContext","createContext","useContext","useEffect","useMemo","jsx","useEffect","useMemo","useState","useEffect","useCallback","useRef","useState","useRef","useCallback","useEffect","useState","useCallback","useState","useCallback","useMemo","useMemo","useTranslations","useMemo","jsx","useTranslations","useMemo","useTranslations","useMemo","Fragment","jsx","useTranslations","useMemo","useCallback","useEffect","useRef","useState","useState","useRef","useCallback","useEffect","useTranslations","useMemo","Fragment","jsx","jsxs","useTranslations","useMemo","useMemo","useTranslations","useCallback","useEffect","useRef","useState","jsx","jsxs","useTranslations","useRef","useState","useCallback","useEffect","Fragment","jsx","jsxs","ContentListTable","useMemo","Image","createContext","useContext","useMemo","useState","useTranslations","Image","useState","v4","Fragment","jsx","jsxs","useTranslations","useState","v4","Image","jsx","createContext","useState","useMemo","useContext","jsx","Image","useTranslations","Image","Fragment","jsx","jsxs","useTranslations","Image","zodResolver","useTranslations","Image","useEffect","useState","useForm","toast","z","Fragment","jsx","jsxs","useState","useTranslations","useEffect","z","useForm","zodResolver","toast","Image","useTranslations","Image","useEffect","useState","toast","Fragment","jsx","jsxs","useState","useTranslations","useEffect","ActivateAccount","toast","Image","useEffect","useState","useState","useEffect","zodResolver","useTranslations","Image","useState","useForm","z","Fragment","jsx","jsxs","useTranslations","useState","z","useForm","zodResolver","Image","zodResolver","useTranslations","Image","useForm","z","Fragment","jsx","jsxs","useTranslations","z","useForm","zodResolver","Image","useEffect","Fragment","jsx","useEffect","getCookie","useEffect","useEffect","getCookie","zodResolver","useTranslations","Image","useEffect","useState","useForm","toast","z","Fragment","jsx","jsxs","useState","useTranslations","useEffect","z","useForm","zodResolver","toast","Image","useTranslations","Image","jsx","jsxs","useTranslations","Image","Fragment","jsx","jsxs","jsx","zodResolver","useTranslations","useEffect","useMemo","useState","useForm","toast","z","useTranslations","jsx","jsxs","useTranslations","jsx","jsxs","useState","useTranslations","useMemo","z","useForm","zodResolver","useEffect","toast","LoaderCircleIcon","Trash2Icon","useTranslations","useState","Fragment","jsx","jsxs","useTranslations","useState","Trash2Icon","LoaderCircleIcon","zodResolver","UploadIcon","useTranslations","Image","useEffect","useState","useForm","v4","z","Fragment","jsx","jsxs","useState","useTranslations","z","useForm","zodResolver","v4","useEffect","dropzone","Image","UploadIcon","zodResolver","deleteCookie","useTranslations","Image","useForm","toast","z","Fragment","jsx","jsxs","useTranslations","jsx","useTranslations","jsx","jsxs","useTranslations","useTranslations","createContext","useCallback","useContext","useState","useTranslations","useEffect","useState","jsx","jsxs","useState","useTranslations","useEffect","jsx","createContext","useTranslations","useState","useCallback","error","t","useContext","useTranslations","Fragment","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useTranslations","Fragment","useCallback","useEffect","useMemo","useRef","useState","toast","jsx","jsxs","useRef","useTranslations","useState","useCallback","useMemo","unreadNotifications","useEffect","toast","error","Fragment","Fragment","jsx","useTranslations","createContext","useContext","useState","jsx","createContext","useTranslations","useState","useContext","useTranslations","jsx","useTranslations","Fragment","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useTranslations","useEffect","useState","Fragment","jsx","jsxs","useState","useTranslations","useEffect","useTranslations","useCallback","useEffect","useRef","useState","toast","Fragment","jsx","jsxs","useState","useRef","useTranslations","toast","useCallback","useEffect","useTranslations","jsx","useTranslations","useTranslations","jsx","useTranslations","Fragment","jsx","jsxs","useState","useTranslations","useEffect","UploadIcon","useTranslations","Image","useEffect","useState","jsx","jsxs","useState","useTranslations","useEffect","dropzone","Image","UploadIcon","useTranslations","jsx","useTranslations","zodResolver","useTranslations","useEffect","useState","useForm","v4","z","jsx","jsxs","useState","useTranslations","useEffect","z","useForm","zodResolver","v4","roles","useCallback","useEffect","useRef","useState","useWatch","jsx","jsxs","useRef","useState","useWatch","useEffect","useCallback","id","option","useTranslations","useState","jsx","jsxs","useState","useTranslations","useTranslations","useState","toast","jsx","jsxs","useState","useTranslations","toast","XIcon","useTranslations","useCallback","useEffect","useRef","useState","Fragment","jsx","jsxs","useTranslations","useState","useRef","useCallback","useEffect","XIcon","jsx","createContext","useTranslations","useState","useContext","jsx","createContext","useTranslations","useState","useContext","useTranslations","createContext","useContext","jsx","createContext","useTranslations","useContext","createContext","useContext","jsx","defaultContextValue","createContext","useContext"]}
|