From 315593c95bed19cb7c379d5c575226d699014b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Tue, 14 Oct 2025 10:28:19 +0200 Subject: [PATCH 001/112] remove old web --- web/.biomeignore | 2 - web/.editorconfig | 29 - web/.gitignore | 2 - web/.npmrc | 1 - web/.nvmrc | 1 - web/.prettierignore | 4 - web/.prettierrc | 8 - web/.typesafe-i18n.json | 5 - web/README.md | 73 - web/biome.json | 84 - web/index.html | 39 - web/nginx.conf | 38 - web/package.json | 145 - web/pnpm-lock.yaml | 5979 ------- web/postcss.config.js | 5 - web/public/fonts/Poppins/Poppins-Black.woff2 | Bin 49324 -> 0 bytes .../fonts/Poppins/Poppins-BlackItalic.woff2 | Bin 53968 -> 0 bytes web/public/fonts/Poppins/Poppins-Bold.woff2 | Bin 50576 -> 0 bytes .../fonts/Poppins/Poppins-BoldItalic.woff2 | Bin 57304 -> 0 bytes .../fonts/Poppins/Poppins-ExtraBold.woff2 | Bin 50492 -> 0 bytes .../Poppins/Poppins-ExtraBoldItalic.woff2 | Bin 57108 -> 0 bytes .../fonts/Poppins/Poppins-ExtraLight.woff2 | Bin 50788 -> 0 bytes .../Poppins/Poppins-ExtraLightItalic.woff2 | Bin 57796 -> 0 bytes web/public/fonts/Poppins/Poppins-Italic.woff2 | Bin 58560 -> 0 bytes web/public/fonts/Poppins/Poppins-Light.woff2 | Bin 50908 -> 0 bytes .../fonts/Poppins/Poppins-LightItalic.woff2 | Bin 58232 -> 0 bytes web/public/fonts/Poppins/Poppins-Medium.woff2 | Bin 50488 -> 0 bytes .../fonts/Poppins/Poppins-MediumItalic.woff2 | Bin 57128 -> 0 bytes .../fonts/Poppins/Poppins-Regular.woff2 | Bin 51148 -> 0 bytes .../fonts/Poppins/Poppins-SemiBold.woff2 | Bin 51092 -> 0 bytes .../Poppins/Poppins-SemiBoldItalic.woff2 | Bin 58116 -> 0 bytes web/public/fonts/Poppins/Poppins-Thin.woff2 | Bin 47212 -> 0 bytes .../fonts/Poppins/Poppins-ThinItalic.woff2 | Bin 54088 -> 0 bytes web/public/fonts/Roboto/Roboto-Black.woff2 | Bin 64168 -> 0 bytes .../fonts/Roboto/Roboto-BlackItalic.woff2 | Bin 70972 -> 0 bytes web/public/fonts/Roboto/Roboto-Bold.woff2 | Bin 63920 -> 0 bytes .../fonts/Roboto/Roboto-BoldItalic.woff2 | Bin 69248 -> 0 bytes web/public/fonts/Roboto/Roboto-Italic.woff2 | Bin 69156 -> 0 bytes web/public/fonts/Roboto/Roboto-Light.woff2 | Bin 63232 -> 0 bytes .../fonts/Roboto/Roboto-LightItalic.woff2 | Bin 69572 -> 0 bytes web/public/fonts/Roboto/Roboto-Medium.woff2 | Bin 64732 -> 0 bytes .../fonts/Roboto/Roboto-MediumItalic.woff2 | Bin 70256 -> 0 bytes web/public/fonts/Roboto/Roboto-Regular.woff2 | Bin 63748 -> 0 bytes web/public/fonts/Roboto/Roboto-Thin.woff2 | Bin 61912 -> 0 bytes .../fonts/Roboto/Roboto-ThinItalic.woff2 | Bin 67348 -> 0 bytes .../SourceCodePro/SourceCodePro-Italic.woff2 | Bin 40196 -> 0 bytes .../SourceCodePro/SourceCodePro-Regular.woff2 | Bin 47120 -> 0 bytes web/src/components/App/App.tsx | 216 - web/src/components/AppLoader.tsx | 171 - web/src/components/I18nProvider.tsx | 46 - web/src/components/Navigation/Navigation.tsx | 267 - .../ApplicationVersion/ApplicationVersion.tsx | 33 - .../components/ApplicationVersion/style.scss | 30 - .../components/DevicesPageNavigationIcon.tsx | 52 - .../NavigationBar/NavigationBar.tsx | 64 - .../components/NavigationBar/style.scss | 123 - .../NavigationCollapse/NavigationCollapse.tsx | 62 - .../NavigationCollapse/style.scss | 31 - .../NavigationDesktop/NavigationDesktop.tsx | 19 - .../NavigationLink/NavigationLink.tsx | 57 - .../components/NavigationLink/style.scss | 32 - .../MobileNavModal/MobileNavModal.tsx | 30 - .../MobileNavModal/style.scss | 37 - .../NavigationMobile/NavigationMobile.tsx | 106 - .../components/NavigationMobile/style.scss | 39 - .../icons/NavigationActivityLogPageIcon.tsx | 50 - web/src/components/Navigation/config.ts | 6 - .../Navigation/hooks/useNavigationStore.ts | 34 - web/src/components/Navigation/style.scss | 1 - web/src/components/Navigation/types.ts | 20 - web/src/gif.d.ts | 4 - web/src/i18n/en/index.ts | 2759 ---- web/src/i18n/formatters.ts | 14 - web/src/i18n/i18n-react.tsx | 16 - web/src/i18n/i18n-types.ts | 13367 ---------------- web/src/i18n/i18n-util.async.ts | 28 - web/src/i18n/i18n-util.sync.ts | 28 - web/src/i18n/i18n-util.ts | 39 - web/src/i18n/ko/index.ts | 1725 -- web/src/i18n/pl/index.ts | 2394 --- web/src/main.tsx | 32 - web/src/markdown.d.ts | 4 - web/src/pages/acl/AclCreateDataProvider.tsx | 102 - .../pages/acl/AclCreatePage/AclCreatePage.tsx | 648 - .../components/DialogSelect/DialogSelect.tsx | 124 - .../DialogSelect/DialogSelectButtonIcon.tsx | 13 - .../DialogSelectModal/DialogSelectModal.tsx | 156 - .../DialogSelect/DialogSelectModal/style.scss | 76 - .../DialogSelect/FormDialogSelect.tsx | 55 - .../components/DialogSelect/style.scss | 180 - .../components/DialogSelect/types.ts | 20 - web/src/pages/acl/AclCreatePage/style.scss | 115 - .../pages/acl/AclIndexPage/AclIndexPage.tsx | 54 - .../AclIndexAliases/AclIndexAliases.tsx | 470 - .../AclAliasStatus/AclAliasStatus.tsx | 34 - .../components/AclAliasStatus/style.scss | 28 - .../components/AliasEditButton.tsx | 91 - .../components/AliasesList.tsx | 198 - .../AclAliasApplyConfirmModal.tsx | 42 - .../AclAliasApplyConfirmModal/style.scss | 26 - .../AclAliasDeleteBlockModal.tsx | 55 - .../modals/AclAliasDeleteBlockModal/store.tsx | 33 - .../AclAliasDeleteBlockModal/style.scss | 26 - .../AlcAliasCEModal/AlcAliasCEModal.tsx | 216 - .../modals/AlcAliasCEModal/store.tsx | 41 - .../modals/AlcAliasCEModal/style.scss | 33 - .../components/AclIndexAliases/style.scss | 65 - .../components/AclIndexAliases/types.ts | 13 - .../AclIndexRules/AclIndexRules.tsx | 891 - .../AclRuleStatus/AclRuleStatus.tsx | 54 - .../components/AclRuleStatus/style.scss | 46 - .../AclRulesApplyConfirmModal.tsx | 38 - .../components/AclIndexRules/style.scss | 111 - .../AclListSkeleton/AclListSkeleton.tsx | 14 - .../components/AclListSkeleton/style.scss | 11 - .../components/DeployChangesIcon.tsx | 20 - .../components/shared/AclAliasKindIcon.tsx | 45 - .../AclMessageBoxes/AclMessageBoxes.tsx | 68 - .../shared/AclMessageBoxes/style.scss | 18 - .../components/shared/DividerHeader.tsx | 16 - .../shared/NetworkAccessTypeIcon.tsx | 59 - .../AclIndexPage/components/shared/types.ts | 5 - web/src/pages/acl/AclIndexPage/style.scss | 105 - web/src/pages/acl/AclRoutes.tsx | 37 - web/src/pages/acl/acl-context.tsx | 64 - web/src/pages/acl/types.ts | 73 - web/src/pages/acl/utils.ts | 141 - web/src/pages/acl/validators.ts | 150 - .../pages/activity-log/ActivityLogPage.tsx | 319 - .../activity-log/components/ActivityList.tsx | 173 - .../components/ActivityTimeRangeModal.tsx | 106 - web/src/pages/activity-log/style.scss | 168 - web/src/pages/activity-log/types.ts | 163 - web/src/pages/addDevice/AddDevicePage.tsx | 169 - .../addDevice/hooks/useAddDevicePageStore.tsx | 73 - .../AddDeviceClientConfigurationStep.tsx | 306 - .../style.scss | 50 - .../AddDeviceConfigStep.tsx | 88 - .../steps/AddDeviceConfigStep/style.scss | 21 - .../AddDeviceSetupMethodStep.tsx | 112 - .../DeviceSetupMethodCard.tsx | 365 - .../DeviceSetupMethodCard/style.scss | 67 - .../steps/AddDeviceSetupMethodStep/style.scss | 45 - .../steps/AddDeviceSetupMethodStep/types.ts | 4 - .../AddDeviceSetupStep/AddDeviceSetupStep.tsx | 215 - .../steps/AddDeviceSetupStep/style.scss | 9 - web/src/pages/addDevice/style.scss | 111 - web/src/pages/addDevice/types.ts | 16 - .../addDevice/utils/enrollmentToToken.ts | 17 - web/src/pages/allow/OpenidAllowPage.tsx | 156 - web/src/pages/allow/style.scss | 68 - web/src/pages/auth/AuthPage.tsx | 178 - web/src/pages/auth/Callback/Callback.tsx | 99 - web/src/pages/auth/Callback/style.scss | 12 - web/src/pages/auth/Login/Login.tsx | 163 - .../auth/Login/components/OidcButtons.tsx | 193 - .../pages/auth/Login/components/style.scss | 120 - web/src/pages/auth/Login/style.scss | 47 - .../pages/auth/MFARoute/MFAEmail/MFAEmail.tsx | 142 - web/src/pages/auth/MFARoute/MFANav/MFANav.tsx | 111 - .../auth/MFARoute/MFARecovery/MFARecovery.tsx | 101 - web/src/pages/auth/MFARoute/MFARoute.tsx | 55 - .../auth/MFARoute/MFATOTPAuth/MFATOTPAuth.tsx | 102 - .../auth/MFARoute/MFAWebAuthN/MFAWebAuthN.tsx | 79 - web/src/pages/auth/MFARoute/style.scss | 68 - .../pages/auth/shared/hooks/useMFAStore.tsx | 35 - web/src/pages/auth/style.scss | 48 - web/src/pages/devices/DevicesPage.tsx | 115 - .../devices/components/AddDeviceIcon.tsx | 49 - .../components/DevicesList/DevicesList.tsx | 213 - .../modals/ConfirmDeviceDeleteModal.tsx | 67 - .../devices/components/DevicesList/style.scss | 118 - .../hooks/useDeleteStandaloneDeviceModal.tsx | 30 - .../pages/devices/hooks/useDevicesPage.tsx | 21 - .../hooks/useEditStandaloneDeviceModal.tsx | 29 - .../AddStandaloneDeviceModal.tsx | 66 - .../steps/FinishCliStep/FinishCliStep.tsx | 35 - .../steps/FinishCliStep/style.scss | 27 - .../FinishManualStep/FinishManualStep.tsx | 164 - .../steps/FinishManualStep/style.scss | 37 - .../steps/MethodStep/MethodStep.tsx | 238 - .../steps/MethodStep/style.scss | 43 - .../steps/SetupCliStep/SetupCliStep.tsx | 149 - .../steps/SetupManualStep/SetupManualStep.tsx | 150 - .../steps/SetupManualStep/style.scss | 7 - .../modals/AddStandaloneDeviceModal/store.tsx | 69 - .../AddStandaloneDeviceModal/style.scss | 59 - .../modals/AddStandaloneDeviceModal/types.ts | 31 - .../EditStandaloneModal.tsx | 184 - .../EditStandaloneDeviceModal/style.scss | 47 - .../StandaloneDeviceConfigModal.tsx | 63 - .../StandaloneDeviceConfigModal/store.tsx | 32 - .../StandaloneDeviceEnrollmentModal.tsx | 48 - .../StandaloneDeviceEnrollmentModal/store.tsx | 32 - ...StandaloneDeviceModalEnrollmentContent.tsx | 68 - .../style.scss | 19 - .../StandaloneDeviceModalForm.tsx | 267 - .../StandaloneDeviceModalForm/formSchema.ts | 64 - .../StandaloneDeviceModalForm/style.scss | 14 - .../pages/devices/modals/components/types.ts | 5 - web/src/pages/devices/style.scss | 7 - web/src/pages/devices/types.ts | 0 web/src/pages/enrollment/EnrollmentPage.tsx | 60 - .../EnrollmentEmail/EnrollmentEmail.tsx | 117 - .../components/EnrollmentEmail/style.scss | 82 - .../EnrollmentVPN/EnrollmentVPN.tsx | 111 - .../components/EnrollmentVPN/style.scss | 7 - .../EnrollmentWelcomeMessage.tsx | 87 - .../EnrollmentWelcomeMessage/style.scss | 59 - .../enrollment/hooks/useEnrollmentStore.tsx | 25 - web/src/pages/enrollment/style.scss | 104 - web/src/pages/groups/GroupsPage.tsx | 14 - .../components/GroupsList/GroupsList.tsx | 188 - .../groups/components/GroupsList/style.scss | 76 - .../GroupsManagement/GroupsManagement.tsx | 56 - .../components/GroupsManagement/style.scss | 69 - .../modals/AddGroupModal/AddGroupModal.tsx | 217 - .../GroupFormSelectAll/GroupFormSelectAll.tsx | 40 - .../components/UserSelect/UserSelect.tsx | 43 - .../modals/AddGroupModal/style.scss | 89 - .../modals/AddGroupModal/useAddGroupModal.tsx | 29 - web/src/pages/groups/style.scss | 19 - web/src/pages/loader/LoaderPage.tsx | 16 - web/src/pages/loader/style.scss | 19 - .../NetworkControls/NetworkControls.tsx | 158 - .../pages/network/NetworkControls/style.scss | 43 - .../NetworkEditForm/NetworkEditForm.tsx | 404 - .../components/DividerHeader.tsx | 16 - .../pages/network/NetworkEditForm/style.scss | 61 - .../network/NetworkGateway/NetworkGateway.tsx | 154 - .../pages/network/NetworkGateway/style.scss | 74 - web/src/pages/network/NetworkPage.tsx | 52 - .../pages/network/NetworkTabs/NetworkTabs.tsx | 42 - .../network/hooks/useNetworkPageStore.ts | 31 - web/src/pages/network/style.scss | 128 - .../OpenidClientsListPage.tsx | 372 - .../openid/OpenidClientsListPage/style.scss | 325 - .../OpenIdClientModal/OpenIdClientModal.tsx | 42 - .../OpenIdClientModalForm.tsx | 272 - .../OpenIdClientModalFormScopes.tsx | 72 - .../modals/OpenIdClientModal/style.scss | 70 - .../openid/modals/OpenIdClientModal/types.ts | 15 - .../overview-index/OverviewIndexPage.tsx | 191 - .../EditLocationsSettingsButton.tsx | 41 - .../OverviewNetworkSelection.tsx | 80 - .../OverviewTimeSelection.tsx | 36 - .../hooks/useOverviewTimeSelection.ts | 26 - web/src/pages/overview-index/style.scss | 106 - .../OverviewConnectedUsers.tsx | 21 - .../UserConnectionCard/UserConnectionCard.tsx | 381 - .../formatConnectionTime.ts | 33 - .../UserConnectionCard/style.scss | 324 - .../UserConnectionListItem.tsx | 251 - .../UserConnectionListItem/style.scss | 172 - .../NetworkUsageChart/NetworkUsageChart.tsx | 70 - .../OverviewConnectedUsers/style.scss | 28 - .../OverviewExpandable/OverviewExpandable.tsx | 48 - .../overview/OverviewExpandable/style.scss | 56 - .../OverviewHeader/OverviewHeader.tsx | 44 - .../OverviewNetworkSelect.tsx | 60 - web/src/pages/overview/OverviewPage.tsx | 176 - .../overview/OverviewStats/OverviewStats.tsx | 373 - .../pages/overview/OverviewStats/style.scss | 204 - web/src/pages/overview/OverviewStats/utils.ts | 49 - .../OverviewViewSelect/OverviewViewSelect.tsx | 94 - web/src/pages/overview/helpers/stats.ts | 131 - .../overview/hooks/store/useOverviewStore.ts | 27 - web/src/pages/overview/style.scss | 175 - .../pages/provisioners/ProvisionersPage.tsx | 154 - .../ProvisionersList/ProvisionersList.tsx | 141 - .../components/ProvisionersList/style.scss | 83 - .../ProvisioningStationSetupCard.tsx | 99 - .../ProvisioningStationSetupCard/style.scss | 86 - .../modals/DeleteProvisionerModal.tsx | 66 - .../modals/useDeleteProvisionerModal.tsx | 29 - web/src/pages/provisioners/style.scss | 177 - web/src/pages/redirect/RedirectPage.tsx | 21 - web/src/pages/redirect/style.scss | 42 - web/src/pages/settings/SettingsPage.tsx | 182 - .../ActivityLogStreamSettings.tsx | 244 - .../CreateActivityLogStreamModal.tsx | 102 - .../CreateActivityLogStreamModal/store.tsx | 27 - .../CreateActivityLogStreamModal/style.scss | 60 - .../LogStashHttpStreamCEModal.tsx | 237 - .../LogStashHttpStreamCEModal/store.tsx | 54 - .../VectorHttpStreamCEModal.tsx | 223 - .../modals/VectorHttpStreamCEModal/store.tsx | 45 - .../ActivityLogStreamSettings/style.scss | 82 - .../utils/activityLogStreamToLabel.ts | 18 - .../EnterpriseSettings/EnterpriseSettings.tsx | 55 - .../components/EnterpriseForm.tsx | 95 - .../EnterpriseSettings/components/styles.scss | 19 - .../GlobalSettings/GlobalSettings.tsx | 3 - .../GlobalSettingsForm/GlobalSettingsForm.tsx | 249 - .../components/GlobalSettingsForm/styles.scss | 0 .../LicenseSettings/LicenseSettings.tsx | 122 - .../components/LicenseSettings/styles.scss | 56 - .../components/GlobalSettings/types.ts | 20 - .../components/LdapSettings/LdapSettings.tsx | 27 - .../components/LdapConnectionTest.tsx | 44 - .../components/LdapSettingsForm.tsx | 384 - .../components/LdapSettings/style.scss | 7 - .../NotificationSettings.tsx | 10 - .../components/GatewayNotificationsForm.tsx | 70 - .../components/NotificationSettingsForm.tsx | 132 - .../OpenIdSettings/OpenIdSettings.tsx | 30 - .../components/DirectorySyncSettings.tsx | 268 - .../components/OpenIdGeneralSettings.tsx | 82 - .../components/OpenIdProviderSettings.tsx | 167 - .../components/OpenIdSettingsForm.tsx | 312 - .../components/SupportedProviders.ts | 1 - .../OpenIdSettings/components/style.scss | 91 - .../components/OpenIdSettings/style.scss | 23 - .../components/SmtpSettings/SmtpSettings.tsx | 7 - .../SmtpSettingsForm/SmtpSettingsForm.tsx | 263 - .../components/SmtpSettingsForm/style.scss | 24 - .../components/SmtpTest/SmtpTest.tsx | 95 - .../components/SmtpTest/SmtpTestModal.tsx | 148 - .../components/SmtpTest/style.scss | 41 - .../components/SmtpTest/useSmtpTestModal.ts | 27 - .../components/SmtpSettings/styles.scss | 1 - .../pages/settings/hooks/useSettingsPage.tsx | 31 - web/src/pages/settings/style.scss | 196 - web/src/pages/support/SupportPage.tsx | 25 - .../components/BuiltByCard/BuiltByCard.tsx | 15 - .../support/components/BuiltByCard/style.scss | 25 - .../DebugDataCard/DebugDataCard.tsx | 114 - .../components/SendSupportDataModal.tsx | 50 - .../components/DebugDataCard/style.scss | 82 - .../components/SupportCard/SupportCard.tsx | 22 - .../support/components/SupportCard/style.scss | 56 - web/src/pages/support/style.scss | 70 - .../ProfileDetails/ProfileDetails.tsx | 158 - .../ProfileDetailsForm/ProfileDetailsForm.tsx | 364 - .../ProfileDetailsFormAppsField.tsx | 40 - .../ProfileDetailsForm/style.scss | 16 - .../UserProfile/ProfileDetails/style.scss | 103 - .../ApiTokenItem/ApiTokenItem.tsx | 88 - .../ApiTokenList/ApiTokenList.tsx | 44 - .../UserApiTokens/ApiTokenList/style.scss | 130 - .../DeleteApiTokenModal.tsx | 66 - .../useDeleteApiTokenModal.ts | 33 - .../UserApiTokens/UserApiTokens.tsx | 40 - .../UserProfile/UserApiTokens/style.scss | 11 - .../UserProfile/UserAuthInfo/UserAuthInfo.tsx | 62 - .../UserAuthInfo/UserAuthInfoMFA.tsx | 307 - .../UserAuthInfo/UserAuthInfoPassword.tsx | 55 - .../UserAuthInfo/UserAuthInfoRecovery.tsx | 36 - .../ChangeSelfPasswordModal.tsx | 20 - .../components/ChangeSelfPasswordForm.tsx | 119 - .../hooks/useChangeSelfPasswordModal.ts | 25 - .../ManageWebAuthNModal.tsx | 84 - .../components/RegisterWebAuthNForm.tsx | 168 - .../components/WebAuthNKeyRow.tsx | 68 - .../modals/ManageWebAuthNModal/style.scss | 58 - .../RecoveryCodesModal/RecoveryCodesModal.tsx | 118 - .../modals/RecoveryCodesModal/style.scss | 51 - .../RegisterEmailMFAModal.tsx | 48 - .../RegisterMFAEmailForm.tsx | 164 - .../RegisterMFAEmailForm/style.scss | 15 - .../hooks/useEmailMFAModal.tsx | 27 - .../modals/RegisterEmailMFAModal/style.scss | 19 - .../RegisterTOTPModal/RegisterTOTPModal.tsx | 206 - .../modals/RegisterTOTPModal/style.scss | 44 - .../users/UserProfile/UserAuthInfo/style.scss | 132 - .../AuthenticationKeyItem.tsx | 98 - .../AuthenticationKeyItemYubiKey.tsx | 162 - .../AuthenticationKeyList.tsx | 104 - .../AuthenticationKeyList/style.scss | 130 - .../DeleteAuthenticationKeyModal.tsx | 83 - .../useDeleteAuthenticationKeyModal.ts | 34 - .../UserAuthenticationKeys.tsx | 41 - .../UserAuthenticationKeys/style.scss | 11 - .../UserDevices/DeviceCard/DeviceCard.tsx | 343 - .../UserDevices/DeviceCard/style.scss | 190 - .../UserProfile/UserDevices/UserDevices.tsx | 89 - .../UserDevices/hooks/useDeleteDeviceModal.ts | 31 - .../hooks/useDeviceConfigModal.tsx | 39 - .../UserDevices/hooks/useEditDeviceModal.ts | 31 - .../DeleteUserDeviceModal.tsx | 65 - .../DeviceConfigModal/DeviceConfigModal.tsx | 55 - .../modals/DeviceConfigModal/style.scss | 7 - .../EditUserDeviceModal.tsx | 22 - .../UserDeviceEditForm.tsx | 124 - .../users/UserProfile/UserDevices/style.scss | 51 - .../pages/users/UserProfile/UserProfile.tsx | 211 - web/src/pages/users/UserProfile/style.scss | 214 - .../users/UsersOverview/UsersOverview.tsx | 251 - .../UserEditButton/ResetPasswordButton.tsx | 47 - .../UserEditButton/UserEditButton.tsx | 145 - .../components/UsersList/UsersList.tsx | 112 - .../UsersList/components/UserListRow.tsx | 64 - .../UsersList/components/UsersListGroups.tsx | 101 - .../UserGroupsListModal.tsx | 36 - .../modals/UserGroupsListModal/style.scss | 67 - .../useUserGroupsListModal.ts | 29 - .../components/UsersList/style.scss | 153 - .../components/UsersList/types.ts | 0 .../modals/AddUserModal/AddUserModal.tsx | 50 - .../components/AddUserForm/AddUserForm.tsx | 301 - .../components/AddUserForm/style.scss | 51 - .../EnrollmentTokenCard.tsx | 69 - .../components/EnrollmentTokenCard/style.scss | 46 - .../StartEnrollmentForm.tsx | 214 - .../components/StartEnrollmentForm/style.scss | 10 - .../AddUserModal/hooks/useAddUserModal.tsx | 41 - .../modals/AddUserModal/style.scss | 15 - .../AssignGroupsModal/AssignGroupsModal.tsx | 163 - .../modals/AssignGroupsModal/store.ts | 30 - .../modals/AssignGroupsModal/style.scss | 93 - web/src/pages/users/UsersOverview/style.scss | 198 - web/src/pages/users/UsersPage.tsx | 21 - web/src/pages/users/UsersSharedModals.tsx | 20 - .../AddComponentBox/AddButtonIcon.tsx | 38 - .../AddComponentBox/AddComponentBox.tsx | 128 - .../components/AddComponentBox/style.scss | 43 - .../users/shared/components/KeyBox/KeyBox.tsx | 44 - .../users/shared/components/KeyBox/style.scss | 28 - .../AddApiTokenModal/AddApiTokenModal.tsx | 36 - .../AddApiTokenForm/AddApiTokenForm.tsx | 153 - .../components/AddApiTokenForm/style.scss | 24 - .../shared/modals/AddApiTokenModal/style.scss | 60 - .../AddApiTokenModal/useAddApiTokenModal.ts | 35 - .../AddAuthenticationKeyModal.tsx | 122 - .../AddAuthenticationKeyForm.tsx | 140 - .../AddAuthenticationKeyForm/style.scss | 14 - .../AddAuthenticationKeyYubikey.tsx | 193 - .../components/ProvisionerRow.tsx | 39 - .../AddAuthenticationKeyYubikey/style.scss | 86 - .../AddAuthenticationKeyModal/style.scss | 60 - .../modals/AddAuthenticationKeyModal/types.ts | 1 - .../useAddAuthorizationKeyModal.ts | 37 - .../ChangePasswordForm.tsx | 137 - .../ChangeUserPasswordModal.tsx | 21 - .../DeleteUserModal/DeleteUserModal.tsx | 69 - .../DisableMfaModal/DisableMfaModal.tsx | 68 - .../shared/modals/DisableMfaModal/store.ts | 30 - .../RenameApiTokenModal.tsx | 147 - .../useRenameApiTokenModal.tsx | 35 - .../RenameAuthenticationKeyModal.tsx | 168 - .../useRenameAuthenticationKeyModal.tsx | 38 - .../ToggleUserModal/ToggleUserModal.tsx | 101 - web/src/pages/users/style.scss | 3 - web/src/pages/webhooks/WebhooksListPage.tsx | 370 - .../modals/WebhookModal/WebhookForm.tsx | 217 - .../modals/WebhookModal/WebhookModal.tsx | 35 - .../webhooks/modals/WebhookModal/style.scss | 32 - web/src/pages/webhooks/style.scss | 311 - web/src/pages/wizard/WizardPage.tsx | 106 - .../WizardMapDevices/WizardMapDevices.tsx | 183 - .../components/MapDeviceRow.tsx | 89 - .../components/WizardMapDevices/style.scss | 69 - .../components/WizardMapDevices/types.ts | 22 - .../wizard/components/WizardNav/WizardNav.tsx | 109 - .../wizard/components/WizardNav/style.scss | 117 - .../WizardNetworkConfiguration.tsx | 299 - .../components/DividerHeader.tsx | 16 - .../WizardNetworkConfiguration/style.scss | 55 - .../WizardNetworkImport.tsx | 246 - .../components/WizardNetworkImport/style.scss | 24 - .../components/WizardType/WizardType.tsx | 51 - .../WizardTypeOptionCard.tsx | 48 - .../WizardTypeOptionCard/style.scss | 60 - .../wizard/components/WizardType/style.scss | 21 - .../WizardWelcome/WizardWelcome.tsx | 37 - .../components/WizardWelcome/style.scss | 49 - web/src/pages/wizard/hooks/useWizardStore.ts | 102 - web/src/pages/wizard/style.scss | 54 - web/src/pages/wizard/types/interfaces.ts | 5 - web/src/pages/wizard/types/types.ts | 32 - web/src/pwa/appstore.png | Bin 46403 -> 0 bytes web/src/pwa/icons/android-icon-144x144.png | Bin 4967 -> 0 bytes web/src/pwa/icons/android-icon-192x192.png | Bin 5521 -> 0 bytes web/src/pwa/icons/android-icon-36x36.png | Bin 947 -> 0 bytes web/src/pwa/icons/android-icon-48x48.png | Bin 1078 -> 0 bytes web/src/pwa/icons/android-icon-72x72.png | Bin 2037 -> 0 bytes web/src/pwa/icons/android-icon-96x96.png | Bin 2257 -> 0 bytes web/src/pwa/icons/app/100.png | Bin 1711 -> 0 bytes web/src/pwa/icons/app/102.png | Bin 2089 -> 0 bytes web/src/pwa/icons/app/1024.png | Bin 46403 -> 0 bytes web/src/pwa/icons/app/114.png | Bin 1830 -> 0 bytes web/src/pwa/icons/app/120.png | Bin 2064 -> 0 bytes web/src/pwa/icons/app/128.png | Bin 1966 -> 0 bytes web/src/pwa/icons/app/144.png | Bin 2465 -> 0 bytes web/src/pwa/icons/app/152.png | Bin 2654 -> 0 bytes web/src/pwa/icons/app/16.png | Bin 464 -> 0 bytes web/src/pwa/icons/app/167.png | Bin 2989 -> 0 bytes web/src/pwa/icons/app/172.png | Bin 3184 -> 0 bytes web/src/pwa/icons/app/180.png | Bin 3287 -> 0 bytes web/src/pwa/icons/app/196.png | Bin 3621 -> 0 bytes web/src/pwa/icons/app/20.png | Bin 230 -> 0 bytes web/src/pwa/icons/app/216.png | Bin 4778 -> 0 bytes web/src/pwa/icons/app/256.png | Bin 5128 -> 0 bytes web/src/pwa/icons/app/29.png | Bin 386 -> 0 bytes web/src/pwa/icons/app/32.png | Bin 424 -> 0 bytes web/src/pwa/icons/app/40.png | Bin 572 -> 0 bytes web/src/pwa/icons/app/48.png | Bin 763 -> 0 bytes web/src/pwa/icons/app/50.png | Bin 778 -> 0 bytes web/src/pwa/icons/app/512.png | Bin 13565 -> 0 bytes web/src/pwa/icons/app/55.png | Bin 913 -> 0 bytes web/src/pwa/icons/app/57.png | Bin 948 -> 0 bytes web/src/pwa/icons/app/58.png | Bin 978 -> 0 bytes web/src/pwa/icons/app/60.png | Bin 1004 -> 0 bytes web/src/pwa/icons/app/64.png | Bin 1069 -> 0 bytes web/src/pwa/icons/app/66.png | Bin 1516 -> 0 bytes web/src/pwa/icons/app/72.png | Bin 1133 -> 0 bytes web/src/pwa/icons/app/76.png | Bin 1361 -> 0 bytes web/src/pwa/icons/app/80.png | Bin 1363 -> 0 bytes web/src/pwa/icons/app/87.png | Bin 1428 -> 0 bytes web/src/pwa/icons/app/88.png | Bin 1462 -> 0 bytes web/src/pwa/icons/app/92.png | Bin 1954 -> 0 bytes web/src/pwa/icons/apple-icon-114x114.png | Bin 4773 -> 0 bytes web/src/pwa/icons/apple-icon-120x120.png | Bin 4313 -> 0 bytes web/src/pwa/icons/apple-icon-144x144.png | Bin 4967 -> 0 bytes web/src/pwa/icons/apple-icon-152x152.png | Bin 6485 -> 0 bytes web/src/pwa/icons/apple-icon-180x180.png | Bin 10004 -> 0 bytes web/src/pwa/icons/apple-icon-57x57.png | Bin 1539 -> 0 bytes web/src/pwa/icons/apple-icon-60x60.png | Bin 1676 -> 0 bytes web/src/pwa/icons/apple-icon-72x72.png | Bin 2037 -> 0 bytes web/src/pwa/icons/apple-icon-76x76.png | Bin 2303 -> 0 bytes web/src/pwa/icons/apple-icon-precomposed.png | Bin 5521 -> 0 bytes web/src/pwa/icons/apple-icon.png | Bin 5521 -> 0 bytes web/src/pwa/icons/favicon-16x16.png | Bin 325 -> 0 bytes web/src/pwa/icons/favicon-32x32.png | Bin 640 -> 0 bytes web/src/pwa/icons/favicon-96x96.png | Bin 2257 -> 0 bytes web/src/pwa/icons/favicon.ico | Bin 1150 -> 0 bytes web/src/pwa/icons/ms-icon-144x144.png | Bin 4967 -> 0 bytes web/src/pwa/icons/ms-icon-150x150.png | Bin 3503 -> 0 bytes web/src/pwa/icons/ms-icon-310x310.png | Bin 8356 -> 0 bytes web/src/pwa/icons/ms-icon-70x70.png | Bin 1604 -> 0 bytes web/src/pwa/manifest.webmanifest | 216 - web/src/pwa/playstore.png | Bin 9449 -> 0 bytes web/src/shared/assets/LICENSE.md | 23 - .../FormAclDefaultPolicy.tsx | 44 - .../FormLocationMfaModeSelect.tsx | 82 - .../Form/FormLocationMfaModeSelect/style.scss | 59 - .../components/Layout/DateInput/DateInput.tsx | 203 - .../Layout/DateInput/FormDateInput.tsx | 55 - .../components/Layout/DateInput/style.scss | 276 - .../components/Layout/DateInput/types.ts | 9 - .../EnterpriseUpgradeToast.tsx | 75 - .../Layout/EnterpriseUpgradeToast/style.scss | 99 - .../Layout/EnterpriseUpgradeToast/types.ts | 7 - .../ExpandableSection/ExpandableSection.tsx | 49 - .../Layout/ExpandableSection/style.scss | 59 - .../Layout/ListCellTags/ListCellTags.tsx | 74 - .../components/Layout/ListCellTags/style.scss | 72 - .../Layout/ListHeader/ListHeader.tsx | 158 - .../components/Layout/ListHeader/style.scss | 70 - .../components/Layout/ListHeader/types.ts | 6 - .../ManagementPageLayout.tsx | 55 - .../Layout/ManagementPageLayout/style.scss | 80 - .../Layout/ManagementPageLayout/types.ts | 21 - .../Layout/PageContainer/PageContainer.tsx | 31 - .../Layout/PageContainer/style.scss | 38 - .../Layout/PageLayout/PageLayout.tsx | 29 - .../components/Layout/PageLayout/style.scss | 26 - .../Layout/PageLimiter/PageLimiter.tsx | 23 - .../components/Layout/PageLimiter/style.scss | 20 - .../Layout/RenderMarkdown/RenderMarkdown.tsx | 59 - .../SectionWithCard/SectionWithCard.tsx | 22 - .../Layout/SectionWithCard/style.scss | 12 - .../UpgradeLicenseModal.tsx | 135 - .../Layout/UpgradeLicenseModal/checkbox.svg | 4 - .../Layout/UpgradeLicenseModal/store.tsx | 68 - .../Layout/UpgradeLicenseModal/style.scss | 130 - .../Layout/UpgradeLicenseModal/types.ts | 6 - .../VersionUpdateToast/VersionUpdateToast.tsx | 112 - .../Layout/VersionUpdateToast/style.scss | 63 - .../Layout/VersionUpdateToast/types.ts | 7 - .../WireguardConfigExpandable.tsx | 113 - .../WireguardConfigExpandable/style.scss | 18 - .../Layout/buttons/AddButton/AddButton.tsx | 35 - .../Layout/buttons/AddButton/style.scss | 0 .../buttons/FilterButton/FilterButton.tsx | 63 - .../Layout/buttons/FilterButton/style.scss | 0 .../OpenDesktopClientButton.tsx | 30 - .../Guards/ProtectedRoute/ProtectedRoute.tsx | 78 - .../RenderTranslation/RenderTranslation.tsx | 28 - .../FilterGroupsModal/FilterGroupsModal.tsx | 329 - .../modals/FilterGroupsModal/style.scss | 157 - .../modals/FilterGroupsModal/types.ts | 12 - .../OutdatedComponentsModal.tsx | 119 - .../modals/OutdatedComponentsModal/style.scss | 145 - .../useOutdatedComponentsModal.tsx | 27 - .../UpdateNotificationModal.tsx | 95 - .../UpdateNotificationModalIcons.tsx | 62 - .../modals/UpdateNotificationModal/style.scss | 206 - .../DeviceConfigsCard/DeviceConfigsCard.tsx | 181 - .../network/DeviceConfigsCard/style.scss | 18 - .../network/DeviceConfigsCard/types.ts | 4 - .../AllNetworksGatewaysStatus.tsx | 94 - .../AllNetworksGatewaysStatus/style.scss | 21 - .../GatewaysStatus/GatewayStatusIcon.tsx | 55 - .../GatewaysFloatingStatus.tsx | 125 - .../GatewaysFloatingStatus/style.scss | 60 - .../GatewaysStatusInfo/GatewaysStatusInfo.tsx | 111 - .../GatewaysStatusInfo/style.scss | 62 - .../NetworkGatewaysStatus.tsx | 44 - .../network/GatewaysStatus/style.scss | 120 - .../network/GatewaysStatus/types.ts | 7 - web/src/shared/components/svg/.eslintrc | 7 - .../shared/components/svg/Avatar01Blue.tsx | 14 - .../shared/components/svg/Avatar01Gray.tsx | 14 - .../shared/components/svg/Avatar02Blue.tsx | 18 - .../shared/components/svg/Avatar02Gray.tsx | 18 - .../shared/components/svg/Avatar03Blue.tsx | 18 - .../shared/components/svg/Avatar03Gray.tsx | 18 - .../shared/components/svg/Avatar04Blue.tsx | 18 - .../shared/components/svg/Avatar04Gray.tsx | 18 - .../shared/components/svg/Avatar05Blue.tsx | 18 - .../shared/components/svg/Avatar05Gray.tsx | 18 - .../shared/components/svg/Avatar06Blue.tsx | 18 - .../shared/components/svg/Avatar06Gray.tsx | 18 - .../shared/components/svg/Avatar07Blue.tsx | 14 - .../shared/components/svg/Avatar07Gray.tsx | 14 - .../shared/components/svg/Avatar08Blue.tsx | 14 - .../shared/components/svg/Avatar08Gray.tsx | 14 - .../shared/components/svg/Avatar09Blue.tsx | 18 - .../shared/components/svg/Avatar09Gray.tsx | 18 - .../shared/components/svg/Avatar10Blue.tsx | 18 - .../shared/components/svg/Avatar10Gray.tsx | 18 - .../shared/components/svg/Avatar11Blue.tsx | 18 - .../shared/components/svg/Avatar11Gray.tsx | 18 - .../shared/components/svg/Avatar12Blue.tsx | 18 - .../shared/components/svg/Avatar12Gray.tsx | 18 - .../shared/components/svg/DefguardLogo.tsx | 25 - .../components/svg/DefguardLogoLogin.tsx | 22 - .../shared/components/svg/DefguardNavLogo.tsx | 29 - .../svg/DefguardNavLogoCollapsed.tsx | 25 - .../shared/components/svg/DefguardNoIcon.tsx | 18 - web/src/shared/components/svg/GlowIcon.tsx | 122 - .../components/svg/Icon24HConnections.tsx | 24 - .../components/svg/IconActiveConnections.tsx | 19 - .../shared/components/svg/IconActivityAdd.tsx | 44 - .../components/svg/IconActivityRemoved.tsx | 53 - .../components/svg/IconActivityWarning.tsx | 40 - .../shared/components/svg/IconArrowDouble.tsx | 18 - .../svg/IconArrowDoubleGrayLeft.tsx | 48 - .../components/svg/IconArrowGrayDown.tsx | 46 - .../components/svg/IconArrowGrayDown1.tsx | 46 - .../components/svg/IconArrowGrayLeft.tsx | 45 - .../components/svg/IconArrowGrayRight.tsx | 45 - .../components/svg/IconArrowGraySmall.tsx | 34 - .../shared/components/svg/IconArrowGrayUp.tsx | 46 - .../components/svg/IconArrowGrayUp1.tsx | 46 - .../shared/components/svg/IconArrowSingle.tsx | 31 - .../components/svg/IconArrowSingle2.tsx | 31 - .../components/svg/IconArrowWhiteLeft.tsx | 45 - web/src/shared/components/svg/IconAsterix.tsx | 53 - .../components/svg/IconAuthenticationKey.tsx | 11 - web/src/shared/components/svg/IconCancel.tsx | 22 - .../shared/components/svg/IconCancelAlt.tsx | 46 - .../shared/components/svg/IconCheckmark.tsx | 22 - .../components/svg/IconCheckmarkGreen.tsx | 46 - .../components/svg/IconCheckmarkWhite.tsx | 46 - .../components/svg/IconCheckmarkWhite1.tsx | 46 - .../components/svg/IconCheckmarkWhiteBig.tsx | 47 - web/src/shared/components/svg/IconClip.tsx | 32 - .../shared/components/svg/IconCloseGray.tsx | 46 - .../shared/components/svg/IconCollapse.tsx | 22 - .../shared/components/svg/IconConnected.tsx | 55 - web/src/shared/components/svg/IconCopy.tsx | 64 - .../shared/components/svg/IconDeactivated.tsx | 64 - web/src/shared/components/svg/IconDelete.tsx | 71 - .../components/svg/IconDfgOpenidRedirect.tsx | 74 - .../components/svg/IconDisconnected.tsx | 38 - .../shared/components/svg/IconDownload.tsx | 22 - web/src/shared/components/svg/IconEdit.tsx | 18 - web/src/shared/components/svg/IconEditAlt.tsx | 38 - .../components/svg/IconEditAltHover.tsx | 38 - .../shared/components/svg/IconEditHover.tsx | 38 - .../shared/components/svg/IconEditNetwork.tsx | 34 - web/src/shared/components/svg/IconEth.tsx | 24 - web/src/shared/components/svg/IconExpand.tsx | 22 - web/src/shared/components/svg/IconFilter.tsx | 38 - .../components/svg/IconHamburgerClose.tsx | 53 - .../components/svg/IconHamburgerMenu.tsx | 54 - .../components/svg/IconHamburgerMenu1.tsx | 54 - .../shared/components/svg/IconHourglass.tsx | 33 - .../components/svg/IconHourglassHover.tsx | 33 - web/src/shared/components/svg/IconInfo.tsx | 41 - .../shared/components/svg/IconInfoError.tsx | 28 - .../shared/components/svg/IconInfoNormal.tsx | 41 - .../shared/components/svg/IconInfoSuccess.tsx | 43 - .../components/svg/IconInfoSuccess1.tsx | 43 - .../shared/components/svg/IconInfoWarning.tsx | 39 - web/src/shared/components/svg/IconKey.tsx | 41 - .../components/svg/IconListOrderDown.tsx | 79 - .../components/svg/IconListOrderDownHover.tsx | 84 - .../shared/components/svg/IconListOrderUp.tsx | 79 - .../components/svg/IconListOrderUpHover.tsx | 79 - .../shared/components/svg/IconNavGroups.tsx | 20 - .../components/svg/IconNavHamburger.tsx | 18 - web/src/shared/components/svg/IconNavKey.tsx | 22 - .../components/svg/IconNavLocations.tsx | 20 - .../shared/components/svg/IconNavLogout.tsx | 18 - .../shared/components/svg/IconNavOpenid.tsx | 18 - .../shared/components/svg/IconNavOverview.tsx | 18 - .../shared/components/svg/IconNavProfile.tsx | 18 - .../shared/components/svg/IconNavProfile1.tsx | 20 - .../components/svg/IconNavProvisioners.tsx | 24 - .../shared/components/svg/IconNavSettings.tsx | 18 - .../shared/components/svg/IconNavSupport.tsx | 19 - .../shared/components/svg/IconNavUsers.tsx | 18 - web/src/shared/components/svg/IconNavVpn.tsx | 17 - .../shared/components/svg/IconNavWebhook.tsx | 22 - .../shared/components/svg/IconNavWebhooks.tsx | 24 - .../shared/components/svg/IconNavYubikey.tsx | 24 - .../shared/components/svg/IconNetworkLoad.tsx | 20 - .../shared/components/svg/IconOpenModal.tsx | 71 - .../shared/components/svg/IconPacketsIn.tsx | 61 - .../shared/components/svg/IconPacketsOut.tsx | 61 - .../shared/components/svg/IconPlusGray.tsx | 45 - .../shared/components/svg/IconPlusWhite.tsx | 45 - .../shared/components/svg/IconPopupClose.tsx | 46 - .../shared/components/svg/IconReadMore.tsx | 53 - .../shared/components/svg/IconRedirect.tsx | 164 - web/src/shared/components/svg/IconSearch.tsx | 33 - .../shared/components/svg/IconSearchHover.tsx | 33 - .../shared/components/svg/IconSettings.tsx | 18 - .../components/svg/IconSuccessLarge.tsx | 23 - .../shared/components/svg/IconTagDismiss.tsx | 37 - web/src/shared/components/svg/IconTrash.tsx | 35 - web/src/shared/components/svg/IconUpgrade.tsx | 39 - .../shared/components/svg/IconUserAddNew.tsx | 18 - .../shared/components/svg/IconUserList.tsx | 54 - .../components/svg/IconUserListElement.tsx | 60 - .../components/svg/IconUserListExpanded.tsx | 100 - .../components/svg/IconUserListHover.tsx | 53 - web/src/shared/components/svg/IconWaiting.tsx | 40 - .../components/svg/IconWaitingHover.tsx | 40 - web/src/shared/components/svg/IconWallet.tsx | 18 - web/src/shared/components/svg/IconWarning.tsx | 28 - web/src/shared/components/svg/IconX.tsx | 33 - .../components/svg/ImageMeshNetwork.tsx | 157 - .../components/svg/ImageRegularNetwork.tsx | 165 - .../shared/components/svg/ImportConfig.tsx | 69 - .../components/svg/LogoDefguardWhite.tsx | 22 - .../shared/components/svg/ManualConfig.tsx | 76 - .../shared/components/svg/MetamaskIcon.tsx | 122 - web/src/shared/components/svg/PhantomIcon.tsx | 83 - web/src/shared/components/svg/QrIconWhite.tsx | 72 - web/src/shared/components/svg/Subtract.tsx | 20 - .../shared/components/svg/WireguardLogo.tsx | 54 - .../svg/YubikeyProvisioningGraphic.tsx | 58 - .../utils/DelayRender/DelayRender.tsx | 24 - web/src/shared/constants.ts | 46 - web/src/shared/defguard-ui | 1 - web/src/shared/helpers/displayDate.ts | 8 - web/src/shared/helpers/getUserFullName.ts | 4 - web/src/shared/hooks/api/api-client.ts | 6 - web/src/shared/hooks/api/api.ts | 741 - web/src/shared/hooks/api/axios-client.ts | 19 - web/src/shared/hooks/api/provider.tsx | 42 - web/src/shared/hooks/api/store.ts | 37 - web/src/shared/hooks/store/useAppStore.ts | 44 - web/src/shared/hooks/store/useAuthStore.ts | 36 - .../hooks/store/useEnterpriseUpgradeStore.tsx | 51 - web/src/shared/hooks/store/useModalStore.ts | 146 - .../hooks/store/useOpenidClientStore.tsx | 11 - .../shared/hooks/store/useUpdatesStore.tsx | 97 - .../shared/hooks/store/useUserProfileStore.ts | 36 - web/src/shared/hooks/useApi.tsx | 13 - web/src/shared/hooks/useClipboard.tsx | 35 - web/src/shared/hooks/useToaster.tsx | 3 - web/src/shared/images/gif/tnt-built.gif | Bin 35755 -> 0 bytes web/src/shared/images/png/auto-config-1.png | Bin 6885 -> 0 bytes web/src/shared/images/png/auto-config-2.png | Bin 20037 -> 0 bytes web/src/shared/images/png/manual-config-1.png | Bin 14540 -> 0 bytes web/src/shared/images/svg/avatar_01_blue.svg | 6 - web/src/shared/images/svg/avatar_01_gray.svg | 6 - web/src/shared/images/svg/avatar_02_blue.svg | 6 - web/src/shared/images/svg/avatar_02_gray.svg | 6 - web/src/shared/images/svg/avatar_03_blue.svg | 6 - web/src/shared/images/svg/avatar_03_gray.svg | 6 - web/src/shared/images/svg/avatar_04_blue.svg | 6 - web/src/shared/images/svg/avatar_04_gray.svg | 6 - web/src/shared/images/svg/avatar_05_blue.svg | 6 - web/src/shared/images/svg/avatar_05_gray.svg | 6 - web/src/shared/images/svg/avatar_06_blue.svg | 6 - web/src/shared/images/svg/avatar_06_gray.svg | 6 - web/src/shared/images/svg/avatar_07_blue.svg | 6 - web/src/shared/images/svg/avatar_07_gray.svg | 6 - web/src/shared/images/svg/avatar_08_blue.svg | 6 - web/src/shared/images/svg/avatar_08_gray.svg | 6 - web/src/shared/images/svg/avatar_09_blue.svg | 6 - web/src/shared/images/svg/avatar_09_gray.svg | 6 - web/src/shared/images/svg/avatar_10_blue.svg | 6 - web/src/shared/images/svg/avatar_10_gray.svg | 6 - web/src/shared/images/svg/avatar_11_blue.svg | 6 - web/src/shared/images/svg/avatar_11_gray.svg | 6 - web/src/shared/images/svg/avatar_12_blue.svg | 6 - web/src/shared/images/svg/avatar_12_gray.svg | 6 - .../shared/images/svg/defguard-logo-login.svg | 36 - web/src/shared/images/svg/defguard-logo.svg | 12 - .../svg/defguard-nav-logo-collapsed.svg | 12 - .../shared/images/svg/defguard-nav-logo.svg | 36 - .../shared/images/svg/defguard-no-icon.svg | 25 - web/src/shared/images/svg/glow-icon.svg | 1 - .../images/svg/icon-24h-connections.svg | 1 - web/src/shared/images/svg/icon-X.svg | 15 - .../images/svg/icon-active-connections.svg | 1 - .../shared/images/svg/icon-activity-add.svg | 1 - .../images/svg/icon-activity-removed.svg | 1 - .../images/svg/icon-activity-warning.svg | 1 - .../svg/icon-arrow-double-gray-left.svg | 14 - .../shared/images/svg/icon-arrow-double.svg | 10 - .../images/svg/icon-arrow-gray-down-1.svg | 1 - .../images/svg/icon-arrow-gray-down.svg | 1 - .../images/svg/icon-arrow-gray-left.svg | 1 - .../images/svg/icon-arrow-gray-right.svg | 1 - .../images/svg/icon-arrow-gray-small.svg | 12 - .../images/svg/icon-arrow-gray-up-1.svg | 1 - .../shared/images/svg/icon-arrow-gray-up.svg | 1 - .../shared/images/svg/icon-arrow-single-2.svg | 15 - .../shared/images/svg/icon-arrow-single.svg | 15 - .../images/svg/icon-arrow-white-left.svg | 1 - web/src/shared/images/svg/icon-asterix.svg | 1 - web/src/shared/images/svg/icon-cancel-alt.svg | 1 - web/src/shared/images/svg/icon-cancel.svg | 4 - .../images/svg/icon-checkmark-green.svg | 1 - .../images/svg/icon-checkmark-white-1.svg | 1 - .../images/svg/icon-checkmark-white-big.svg | 1 - .../images/svg/icon-checkmark-white.svg | 1 - web/src/shared/images/svg/icon-checkmark.svg | 4 - web/src/shared/images/svg/icon-clip.svg | 21 - web/src/shared/images/svg/icon-close-gray.svg | 1 - web/src/shared/images/svg/icon-collapse.svg | 6 - web/src/shared/images/svg/icon-connected.svg | 1 - web/src/shared/images/svg/icon-copy.svg | 18 - .../shared/images/svg/icon-deactivated.svg | 1 - web/src/shared/images/svg/icon-delete.svg | 1 - .../images/svg/icon-dfg-openid-redirect.svg | 36 - .../shared/images/svg/icon-disconnected.svg | 1 - web/src/shared/images/svg/icon-download.svg | 4 - web/src/shared/images/svg/icon-edit.svg | 3 - web/src/shared/images/svg/icon-eth.svg | 1 - web/src/shared/images/svg/icon-expand.svg | 8 - web/src/shared/images/svg/icon-filter.svg | 1 - .../images/svg/icon-hamburger-close.svg | 1 - .../images/svg/icon-hamburger-menu-1.svg | 1 - .../shared/images/svg/icon-hamburger-menu.svg | 1 - .../images/svg/icon-hourglass-hover.svg | 1 - web/src/shared/images/svg/icon-hourglass.svg | 1 - web/src/shared/images/svg/icon-info-error.svg | 6 - .../shared/images/svg/icon-info-normal.svg | 1 - .../shared/images/svg/icon-info-success-1.svg | 1 - .../shared/images/svg/icon-info-success.svg | 1 - .../shared/images/svg/icon-info-warning.svg | 7 - web/src/shared/images/svg/icon-info.svg | 1 - web/src/shared/images/svg/icon-key.svg | 17 - .../images/svg/icon-list-order-down-hover.svg | 1 - .../images/svg/icon-list-order-down.svg | 1 - .../images/svg/icon-list-order-up-hover.svg | 1 - .../shared/images/svg/icon-list-order-up.svg | 1 - web/src/shared/images/svg/icon-nav-groups.svg | 3 - .../shared/images/svg/icon-nav-hamburger.svg | 5 - web/src/shared/images/svg/icon-nav-key.svg | 4 - web/src/shared/images/svg/icon-nav-logout.svg | 4 - web/src/shared/images/svg/icon-nav-openid.svg | 3 - .../shared/images/svg/icon-nav-overview.svg | 3 - .../shared/images/svg/icon-nav-profile.svg | 4 - .../shared/images/svg/icon-nav-settings.svg | 3 - .../shared/images/svg/icon-nav-support.svg | 4 - web/src/shared/images/svg/icon-nav-users.svg | 3 - .../shared/images/svg/icon-nav-webhook.svg | 5 - .../shared/images/svg/icon-nav-yubikey.svg | 4 - .../shared/images/svg/icon-network-load.svg | 1 - web/src/shared/images/svg/icon-open-modal.svg | 19 - web/src/shared/images/svg/icon-packets-in.svg | 1 - .../shared/images/svg/icon-packets-out.svg | 1 - web/src/shared/images/svg/icon-plus-gray.svg | 1 - web/src/shared/images/svg/icon-plus-white.svg | 1 - .../shared/images/svg/icon-popup-close.svg | 1 - web/src/shared/images/svg/icon-read-more.svg | 1 - web/src/shared/images/svg/icon-redirect.svg | 58 - .../shared/images/svg/icon-search-hover.svg | 1 - web/src/shared/images/svg/icon-search.svg | 1 - web/src/shared/images/svg/icon-settings.svg | 3 - .../shared/images/svg/icon-success-large.svg | 9 - .../shared/images/svg/icon-tag-dismiss.svg | 11 - web/src/shared/images/svg/icon-trash.svg | 13 - .../shared/images/svg/icon-user-add-new.svg | 4 - .../images/svg/icon-user-list-element.svg | 1 - .../images/svg/icon-user-list-expanded.svg | 1 - .../images/svg/icon-user-list-hover.svg | 1 - web/src/shared/images/svg/icon-user-list.svg | 1 - .../shared/images/svg/icon-waiting-hover.svg | 1 - web/src/shared/images/svg/icon-waiting.svg | 1 - web/src/shared/images/svg/icon-wallet.svg | 4 - web/src/shared/images/svg/icon-warning.svg | 6 - .../shared/images/svg/image-mesh-network.svg | 1 - .../images/svg/image-regular-network.svg | 1 - web/src/shared/images/svg/import-config.svg | 41 - .../shared/images/svg/logo-defguard-white.svg | 36 - web/src/shared/images/svg/manual-config.svg | 36 - web/src/shared/images/svg/metamask-icon.svg | 43 - web/src/shared/images/svg/phantom-icon.svg | 1 - web/src/shared/images/svg/qr-icon-white.svg | 22 - web/src/shared/images/svg/subtract.svg | 3 - web/src/shared/images/svg/wireguard-logo.svg | 15 - .../svg/yubikey-provisioning-graphic.svg | 21 - web/src/shared/links.ts | 29 - web/src/shared/messageIds.ts | 3 - web/src/shared/mutations.ts | 48 - web/src/shared/patterns.ts | 77 - web/src/shared/queries.ts | 42 - web/src/shared/query-client.ts | 11 - web/src/shared/scss/_legacy-variables.scss | 34 - web/src/shared/scss/base/_base.scss | 188 - web/src/shared/scss/base/_index.scss | 6 - web/src/shared/scss/base/_scrollbar.scss | 17 - .../shared/scss/base/variables/_colors.scss | 23 - .../shared/scss/base/variables/_index.scss | 3 - web/src/shared/scss/base/variables/_nav.scss | 2 - web/src/shared/scss/base/variables/_text.scss | 12 - web/src/shared/scss/global/_index.scss | 6 - web/src/shared/scss/global/_mixins.scss | 103 - web/src/shared/scss/global/bootstrap/LICENCE | 23 - .../scss/global/bootstrap/_breakpoints.scss | 98 - .../scss/global/bootstrap/_functions.scss | 13 - .../shared/scss/global/bootstrap/_index.scss | 2 - web/src/shared/scss/styles.scss | 3 - web/src/shared/types.ts | 1428 -- web/src/shared/utils/chainName.ts | 28 - web/src/shared/utils/checkPlatform.ts | 16 - web/src/shared/utils/detectClickOutside.ts | 22 - web/src/shared/utils/displayDate.ts | 3 - web/src/shared/utils/downloadWGConfig.ts | 10 - web/src/shared/utils/extractInitials.ts | 10 - web/src/shared/utils/form/selectifyNetwork.ts | 9 - web/src/shared/utils/generateWGKeys.ts | 9 - .../shared/utils/invalidateMultipleQueries.ts | 18 - web/src/shared/utils/localeToDatepicker.ts | 10 - web/src/shared/utils/omitNull.ts | 4 - web/src/shared/utils/removeEmptyStrings.ts | 12 - web/src/shared/utils/removeNulls.ts | 9 - web/src/shared/utils/searchByKeys.ts | 25 - web/src/shared/utils/sortByDate.ts | 19 - web/src/shared/utils/stringToBlob.ts | 6 - web/src/shared/utils/titleCase.ts | 4 - web/src/shared/utils/trimObjectStrings.ts | 25 - web/src/shared/validators.ts | 97 - web/src/shared/validators/password.ts | 22 - web/src/shared/variants.ts | 37 - web/src/vite.d.ts | 3 - web/tsconfig.app.json | 42 - web/tsconfig.app.tsbuildinfo | 1 - web/tsconfig.json | 14 - web/tsconfig.node.json | 26 - web/vite.config.mts | 74 - 952 files changed, 80926 deletions(-) delete mode 100644 web/.biomeignore delete mode 100644 web/.editorconfig delete mode 100644 web/.gitignore delete mode 100644 web/.npmrc delete mode 100644 web/.nvmrc delete mode 100644 web/.prettierignore delete mode 100644 web/.prettierrc delete mode 100644 web/.typesafe-i18n.json delete mode 100644 web/README.md delete mode 100644 web/biome.json delete mode 100644 web/index.html delete mode 100644 web/nginx.conf delete mode 100644 web/package.json delete mode 100644 web/pnpm-lock.yaml delete mode 100644 web/postcss.config.js delete mode 100644 web/public/fonts/Poppins/Poppins-Black.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-BlackItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Bold.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-BoldItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-ExtraBold.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-ExtraBoldItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-ExtraLight.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-ExtraLightItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Italic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Light.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-LightItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Medium.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-MediumItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Regular.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-SemiBold.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-SemiBoldItalic.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-Thin.woff2 delete mode 100644 web/public/fonts/Poppins/Poppins-ThinItalic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Black.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-BlackItalic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Bold.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-BoldItalic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Italic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Light.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-LightItalic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Medium.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-MediumItalic.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Regular.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-Thin.woff2 delete mode 100644 web/public/fonts/Roboto/Roboto-ThinItalic.woff2 delete mode 100644 web/public/fonts/SourceCodePro/SourceCodePro-Italic.woff2 delete mode 100644 web/public/fonts/SourceCodePro/SourceCodePro-Regular.woff2 delete mode 100644 web/src/components/App/App.tsx delete mode 100644 web/src/components/AppLoader.tsx delete mode 100644 web/src/components/I18nProvider.tsx delete mode 100644 web/src/components/Navigation/Navigation.tsx delete mode 100644 web/src/components/Navigation/components/ApplicationVersion/ApplicationVersion.tsx delete mode 100644 web/src/components/Navigation/components/ApplicationVersion/style.scss delete mode 100644 web/src/components/Navigation/components/DevicesPageNavigationIcon.tsx delete mode 100644 web/src/components/Navigation/components/NavigationBar/NavigationBar.tsx delete mode 100644 web/src/components/Navigation/components/NavigationBar/style.scss delete mode 100644 web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/NavigationCollapse.tsx delete mode 100644 web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/style.scss delete mode 100644 web/src/components/Navigation/components/NavigationDesktop/NavigationDesktop.tsx delete mode 100644 web/src/components/Navigation/components/NavigationLink/NavigationLink.tsx delete mode 100644 web/src/components/Navigation/components/NavigationLink/style.scss delete mode 100644 web/src/components/Navigation/components/NavigationMobile/MobileNavModal/MobileNavModal.tsx delete mode 100644 web/src/components/Navigation/components/NavigationMobile/MobileNavModal/style.scss delete mode 100644 web/src/components/Navigation/components/NavigationMobile/NavigationMobile.tsx delete mode 100644 web/src/components/Navigation/components/NavigationMobile/style.scss delete mode 100644 web/src/components/Navigation/components/icons/NavigationActivityLogPageIcon.tsx delete mode 100644 web/src/components/Navigation/config.ts delete mode 100644 web/src/components/Navigation/hooks/useNavigationStore.ts delete mode 100644 web/src/components/Navigation/style.scss delete mode 100644 web/src/components/Navigation/types.ts delete mode 100644 web/src/gif.d.ts delete mode 100644 web/src/i18n/en/index.ts delete mode 100644 web/src/i18n/formatters.ts delete mode 100644 web/src/i18n/i18n-react.tsx delete mode 100644 web/src/i18n/i18n-types.ts delete mode 100644 web/src/i18n/i18n-util.async.ts delete mode 100644 web/src/i18n/i18n-util.sync.ts delete mode 100644 web/src/i18n/i18n-util.ts delete mode 100644 web/src/i18n/ko/index.ts delete mode 100644 web/src/i18n/pl/index.ts delete mode 100644 web/src/main.tsx delete mode 100644 web/src/markdown.d.ts delete mode 100644 web/src/pages/acl/AclCreateDataProvider.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/AclCreatePage.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelect.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectButtonIcon.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/DialogSelectModal.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/style.scss delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/FormDialogSelect.tsx delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/style.scss delete mode 100644 web/src/pages/acl/AclCreatePage/components/DialogSelect/types.ts delete mode 100644 web/src/pages/acl/AclCreatePage/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/AclIndexPage.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/AclIndexAliases.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/AclAliasStatus.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasEditButton.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasesList.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/AclAliasApplyConfirmModal.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/AclAliasDeleteBlockModal.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/store.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/AlcAliasCEModal.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/store.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexAliases/types.ts delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexRules/AclIndexRules.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/AclRuleStatus.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRulesApplyConfirmModal/AclRulesApplyConfirmModal.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclIndexRules/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclListSkeleton/AclListSkeleton.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/AclListSkeleton/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/DeployChangesIcon.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/AclAliasKindIcon.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/AclMessageBoxes.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/style.scss delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/DividerHeader.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/NetworkAccessTypeIcon.tsx delete mode 100644 web/src/pages/acl/AclIndexPage/components/shared/types.ts delete mode 100644 web/src/pages/acl/AclIndexPage/style.scss delete mode 100644 web/src/pages/acl/AclRoutes.tsx delete mode 100644 web/src/pages/acl/acl-context.tsx delete mode 100644 web/src/pages/acl/types.ts delete mode 100644 web/src/pages/acl/utils.ts delete mode 100644 web/src/pages/acl/validators.ts delete mode 100644 web/src/pages/activity-log/ActivityLogPage.tsx delete mode 100644 web/src/pages/activity-log/components/ActivityList.tsx delete mode 100644 web/src/pages/activity-log/components/ActivityTimeRangeModal.tsx delete mode 100644 web/src/pages/activity-log/style.scss delete mode 100644 web/src/pages/activity-log/types.ts delete mode 100644 web/src/pages/addDevice/AddDevicePage.tsx delete mode 100644 web/src/pages/addDevice/hooks/useAddDevicePageStore.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/AddDeviceClientConfigurationStep.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/style.scss delete mode 100644 web/src/pages/addDevice/steps/AddDeviceConfigStep/AddDeviceConfigStep.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceConfigStep/style.scss delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/AddDeviceSetupMethodStep.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/DeviceSetupMethodCard.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/style.scss delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/style.scss delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/types.ts delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupStep/AddDeviceSetupStep.tsx delete mode 100644 web/src/pages/addDevice/steps/AddDeviceSetupStep/style.scss delete mode 100644 web/src/pages/addDevice/style.scss delete mode 100644 web/src/pages/addDevice/types.ts delete mode 100644 web/src/pages/addDevice/utils/enrollmentToToken.ts delete mode 100644 web/src/pages/allow/OpenidAllowPage.tsx delete mode 100644 web/src/pages/allow/style.scss delete mode 100644 web/src/pages/auth/AuthPage.tsx delete mode 100644 web/src/pages/auth/Callback/Callback.tsx delete mode 100644 web/src/pages/auth/Callback/style.scss delete mode 100644 web/src/pages/auth/Login/Login.tsx delete mode 100644 web/src/pages/auth/Login/components/OidcButtons.tsx delete mode 100644 web/src/pages/auth/Login/components/style.scss delete mode 100644 web/src/pages/auth/Login/style.scss delete mode 100644 web/src/pages/auth/MFARoute/MFAEmail/MFAEmail.tsx delete mode 100644 web/src/pages/auth/MFARoute/MFANav/MFANav.tsx delete mode 100644 web/src/pages/auth/MFARoute/MFARecovery/MFARecovery.tsx delete mode 100644 web/src/pages/auth/MFARoute/MFARoute.tsx delete mode 100644 web/src/pages/auth/MFARoute/MFATOTPAuth/MFATOTPAuth.tsx delete mode 100644 web/src/pages/auth/MFARoute/MFAWebAuthN/MFAWebAuthN.tsx delete mode 100644 web/src/pages/auth/MFARoute/style.scss delete mode 100644 web/src/pages/auth/shared/hooks/useMFAStore.tsx delete mode 100644 web/src/pages/auth/style.scss delete mode 100644 web/src/pages/devices/DevicesPage.tsx delete mode 100644 web/src/pages/devices/components/AddDeviceIcon.tsx delete mode 100644 web/src/pages/devices/components/DevicesList/DevicesList.tsx delete mode 100644 web/src/pages/devices/components/DevicesList/modals/ConfirmDeviceDeleteModal.tsx delete mode 100644 web/src/pages/devices/components/DevicesList/style.scss delete mode 100644 web/src/pages/devices/hooks/useDeleteStandaloneDeviceModal.tsx delete mode 100644 web/src/pages/devices/hooks/useDevicesPage.tsx delete mode 100644 web/src/pages/devices/hooks/useEditStandaloneDeviceModal.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/AddStandaloneDeviceModal.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/FinishCliStep.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/style.scss delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/FinishManualStep.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/style.scss delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/MethodStep.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/style.scss delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupCliStep/SetupCliStep.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/SetupManualStep.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/style.scss delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/store.tsx delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/style.scss delete mode 100644 web/src/pages/devices/modals/AddStandaloneDeviceModal/types.ts delete mode 100644 web/src/pages/devices/modals/EditStandaloneDeviceModal/EditStandaloneModal.tsx delete mode 100644 web/src/pages/devices/modals/EditStandaloneDeviceModal/style.scss delete mode 100644 web/src/pages/devices/modals/StandaloneDeviceConfigModal/StandaloneDeviceConfigModal.tsx delete mode 100644 web/src/pages/devices/modals/StandaloneDeviceConfigModal/store.tsx delete mode 100644 web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/StandaloneDeviceEnrollmentModal.tsx delete mode 100644 web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/store.tsx delete mode 100644 web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent.tsx delete mode 100644 web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/style.scss delete mode 100644 web/src/pages/devices/modals/components/StandaloneDeviceModalForm/StandaloneDeviceModalForm.tsx delete mode 100644 web/src/pages/devices/modals/components/StandaloneDeviceModalForm/formSchema.ts delete mode 100644 web/src/pages/devices/modals/components/StandaloneDeviceModalForm/style.scss delete mode 100644 web/src/pages/devices/modals/components/types.ts delete mode 100644 web/src/pages/devices/style.scss delete mode 100644 web/src/pages/devices/types.ts delete mode 100644 web/src/pages/enrollment/EnrollmentPage.tsx delete mode 100644 web/src/pages/enrollment/components/EnrollmentEmail/EnrollmentEmail.tsx delete mode 100644 web/src/pages/enrollment/components/EnrollmentEmail/style.scss delete mode 100644 web/src/pages/enrollment/components/EnrollmentVPN/EnrollmentVPN.tsx delete mode 100644 web/src/pages/enrollment/components/EnrollmentVPN/style.scss delete mode 100644 web/src/pages/enrollment/components/EnrollmentWelcomeMessage/EnrollmentWelcomeMessage.tsx delete mode 100644 web/src/pages/enrollment/components/EnrollmentWelcomeMessage/style.scss delete mode 100644 web/src/pages/enrollment/hooks/useEnrollmentStore.tsx delete mode 100644 web/src/pages/enrollment/style.scss delete mode 100644 web/src/pages/groups/GroupsPage.tsx delete mode 100644 web/src/pages/groups/components/GroupsList/GroupsList.tsx delete mode 100644 web/src/pages/groups/components/GroupsList/style.scss delete mode 100644 web/src/pages/groups/components/GroupsManagement/GroupsManagement.tsx delete mode 100644 web/src/pages/groups/components/GroupsManagement/style.scss delete mode 100644 web/src/pages/groups/components/modals/AddGroupModal/AddGroupModal.tsx delete mode 100644 web/src/pages/groups/components/modals/AddGroupModal/components/GroupFormSelectAll/GroupFormSelectAll.tsx delete mode 100644 web/src/pages/groups/components/modals/AddGroupModal/components/UserSelect/UserSelect.tsx delete mode 100644 web/src/pages/groups/components/modals/AddGroupModal/style.scss delete mode 100644 web/src/pages/groups/components/modals/AddGroupModal/useAddGroupModal.tsx delete mode 100644 web/src/pages/groups/style.scss delete mode 100644 web/src/pages/loader/LoaderPage.tsx delete mode 100644 web/src/pages/loader/style.scss delete mode 100644 web/src/pages/network/NetworkControls/NetworkControls.tsx delete mode 100644 web/src/pages/network/NetworkControls/style.scss delete mode 100644 web/src/pages/network/NetworkEditForm/NetworkEditForm.tsx delete mode 100644 web/src/pages/network/NetworkEditForm/components/DividerHeader.tsx delete mode 100644 web/src/pages/network/NetworkEditForm/style.scss delete mode 100644 web/src/pages/network/NetworkGateway/NetworkGateway.tsx delete mode 100644 web/src/pages/network/NetworkGateway/style.scss delete mode 100644 web/src/pages/network/NetworkPage.tsx delete mode 100644 web/src/pages/network/NetworkTabs/NetworkTabs.tsx delete mode 100644 web/src/pages/network/hooks/useNetworkPageStore.ts delete mode 100644 web/src/pages/network/style.scss delete mode 100644 web/src/pages/openid/OpenidClientsListPage/OpenidClientsListPage.tsx delete mode 100644 web/src/pages/openid/OpenidClientsListPage/style.scss delete mode 100644 web/src/pages/openid/modals/OpenIdClientModal/OpenIdClientModal.tsx delete mode 100644 web/src/pages/openid/modals/OpenIdClientModal/OpenIdClientModalForm.tsx delete mode 100644 web/src/pages/openid/modals/OpenIdClientModal/components/OpenIdClientModalFormScopes.tsx delete mode 100644 web/src/pages/openid/modals/OpenIdClientModal/style.scss delete mode 100644 web/src/pages/openid/modals/OpenIdClientModal/types.ts delete mode 100644 web/src/pages/overview-index/OverviewIndexPage.tsx delete mode 100644 web/src/pages/overview-index/components/EditLocationsSettingsButton/EditLocationsSettingsButton.tsx delete mode 100644 web/src/pages/overview-index/components/OverviewNetworkSelection/OverviewNetworkSelection.tsx delete mode 100644 web/src/pages/overview-index/components/OverviewTimeSelection/OverviewTimeSelection.tsx delete mode 100644 web/src/pages/overview-index/components/hooks/useOverviewTimeSelection.ts delete mode 100644 web/src/pages/overview-index/style.scss delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/OverviewConnectedUsers.tsx delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/UserConnectionCard.tsx delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/formatConnectionTime.ts delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/style.scss delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/UserConnectionListItem.tsx delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/style.scss delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart.tsx delete mode 100644 web/src/pages/overview/OverviewConnectedUsers/style.scss delete mode 100644 web/src/pages/overview/OverviewExpandable/OverviewExpandable.tsx delete mode 100644 web/src/pages/overview/OverviewExpandable/style.scss delete mode 100644 web/src/pages/overview/OverviewHeader/OverviewHeader.tsx delete mode 100644 web/src/pages/overview/OverviewHeader/OverviewNetworkSelect/OverviewNetworkSelect.tsx delete mode 100644 web/src/pages/overview/OverviewPage.tsx delete mode 100644 web/src/pages/overview/OverviewStats/OverviewStats.tsx delete mode 100644 web/src/pages/overview/OverviewStats/style.scss delete mode 100644 web/src/pages/overview/OverviewStats/utils.ts delete mode 100644 web/src/pages/overview/OverviewViewSelect/OverviewViewSelect.tsx delete mode 100644 web/src/pages/overview/helpers/stats.ts delete mode 100644 web/src/pages/overview/hooks/store/useOverviewStore.ts delete mode 100644 web/src/pages/overview/style.scss delete mode 100644 web/src/pages/provisioners/ProvisionersPage.tsx delete mode 100644 web/src/pages/provisioners/components/ProvisionersList/ProvisionersList.tsx delete mode 100644 web/src/pages/provisioners/components/ProvisionersList/style.scss delete mode 100644 web/src/pages/provisioners/components/ProvisioningStationSetupCard/ProvisioningStationSetupCard.tsx delete mode 100644 web/src/pages/provisioners/components/ProvisioningStationSetupCard/style.scss delete mode 100644 web/src/pages/provisioners/components/modals/DeleteProvisionerModal.tsx delete mode 100644 web/src/pages/provisioners/components/modals/useDeleteProvisionerModal.tsx delete mode 100644 web/src/pages/provisioners/style.scss delete mode 100644 web/src/pages/redirect/RedirectPage.tsx delete mode 100644 web/src/pages/redirect/style.scss delete mode 100644 web/src/pages/settings/SettingsPage.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/ActivityLogStreamSettings.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/CreateActivityLogStreamModal.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/store.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/style.scss delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/LogStashHttpStreamCEModal.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/store.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/VectorHttpStreamCEModal.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/store.tsx delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/style.scss delete mode 100644 web/src/pages/settings/components/ActivityLogStreamSettings/utils/activityLogStreamToLabel.ts delete mode 100644 web/src/pages/settings/components/EnterpriseSettings/EnterpriseSettings.tsx delete mode 100644 web/src/pages/settings/components/EnterpriseSettings/components/EnterpriseForm.tsx delete mode 100644 web/src/pages/settings/components/EnterpriseSettings/components/styles.scss delete mode 100644 web/src/pages/settings/components/GlobalSettings/GlobalSettings.tsx delete mode 100644 web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/GlobalSettingsForm.tsx delete mode 100644 web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/styles.scss delete mode 100644 web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/LicenseSettings.tsx delete mode 100644 web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/styles.scss delete mode 100644 web/src/pages/settings/components/GlobalSettings/types.ts delete mode 100644 web/src/pages/settings/components/LdapSettings/LdapSettings.tsx delete mode 100644 web/src/pages/settings/components/LdapSettings/components/LdapConnectionTest.tsx delete mode 100644 web/src/pages/settings/components/LdapSettings/components/LdapSettingsForm.tsx delete mode 100644 web/src/pages/settings/components/LdapSettings/style.scss delete mode 100644 web/src/pages/settings/components/NotificationSettings/NotificationSettings.tsx delete mode 100644 web/src/pages/settings/components/NotificationSettings/components/GatewayNotificationsForm.tsx delete mode 100644 web/src/pages/settings/components/NotificationSettings/components/NotificationSettingsForm.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/OpenIdSettings.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/DirectorySyncSettings.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/OpenIdGeneralSettings.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/OpenIdProviderSettings.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/OpenIdSettingsForm.tsx delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/SupportedProviders.ts delete mode 100644 web/src/pages/settings/components/OpenIdSettings/components/style.scss delete mode 100644 web/src/pages/settings/components/OpenIdSettings/style.scss delete mode 100644 web/src/pages/settings/components/SmtpSettings/SmtpSettings.tsx delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/SmtpSettingsForm.tsx delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/style.scss delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTest.tsx delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTestModal.tsx delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpTest/style.scss delete mode 100644 web/src/pages/settings/components/SmtpSettings/components/SmtpTest/useSmtpTestModal.ts delete mode 100644 web/src/pages/settings/components/SmtpSettings/styles.scss delete mode 100644 web/src/pages/settings/hooks/useSettingsPage.tsx delete mode 100644 web/src/pages/settings/style.scss delete mode 100644 web/src/pages/support/SupportPage.tsx delete mode 100644 web/src/pages/support/components/BuiltByCard/BuiltByCard.tsx delete mode 100644 web/src/pages/support/components/BuiltByCard/style.scss delete mode 100644 web/src/pages/support/components/DebugDataCard/DebugDataCard.tsx delete mode 100644 web/src/pages/support/components/DebugDataCard/components/SendSupportDataModal.tsx delete mode 100644 web/src/pages/support/components/DebugDataCard/style.scss delete mode 100644 web/src/pages/support/components/SupportCard/SupportCard.tsx delete mode 100644 web/src/pages/support/components/SupportCard/style.scss delete mode 100644 web/src/pages/support/style.scss delete mode 100644 web/src/pages/users/UserProfile/ProfileDetails/ProfileDetails.tsx delete mode 100644 web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/ProfileDetailsForm.tsx delete mode 100644 web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/ProfileDetailsFormAppsField.tsx delete mode 100644 web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/style.scss delete mode 100644 web/src/pages/users/UserProfile/ProfileDetails/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/ApiTokenList/ApiTokenItem/ApiTokenItem.tsx delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/ApiTokenList/ApiTokenList.tsx delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/ApiTokenList/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/DeleteApiTokenModal/DeleteApiTokenModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/DeleteApiTokenModal/useDeleteApiTokenModal.ts delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/UserApiTokens.tsx delete mode 100644 web/src/pages/users/UserProfile/UserApiTokens/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfo.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoMFA.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoRecovery.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/ChangeSelfPasswordModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/hooks/useChangeSelfPasswordModal.ts delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ManageWebAuthNModal/ManageWebAuthNModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ManageWebAuthNModal/components/RegisterWebAuthNForm.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ManageWebAuthNModal/components/WebAuthNKeyRow.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/ManageWebAuthNModal/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RecoveryCodesModal/RecoveryCodesModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RecoveryCodesModal/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterEmailMFAModal/RegisterEmailMFAModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterEmailMFAModal/components/RegisterMFAEmailForm/RegisterMFAEmailForm.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterEmailMFAModal/components/RegisterMFAEmailForm/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterEmailMFAModal/hooks/useEmailMFAModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterEmailMFAModal/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterTOTPModal/RegisterTOTPModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/modals/RegisterTOTPModal/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthInfo/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyItem/AuthenticationKeyItem.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyItemYubiKey/AuthenticationKeyItemYubiKey.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyList.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/DeleteAuthenticationKeyModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/useDeleteAuthenticationKeyModal.ts delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/UserAuthenticationKeys.tsx delete mode 100644 web/src/pages/users/UserProfile/UserAuthenticationKeys/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserDevices/DeviceCard/DeviceCard.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/DeviceCard/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserDevices/UserDevices.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/hooks/useDeleteDeviceModal.ts delete mode 100644 web/src/pages/users/UserProfile/UserDevices/hooks/useDeviceConfigModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/hooks/useEditDeviceModal.ts delete mode 100644 web/src/pages/users/UserProfile/UserDevices/modals/DeleteUserDeviceModal/DeleteUserDeviceModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/DeviceConfigModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/EditUserDeviceModal.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/UserDeviceEditForm.tsx delete mode 100644 web/src/pages/users/UserProfile/UserDevices/style.scss delete mode 100644 web/src/pages/users/UserProfile/UserProfile.tsx delete mode 100644 web/src/pages/users/UserProfile/style.scss delete mode 100644 web/src/pages/users/UsersOverview/UsersOverview.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UserEditButton/ResetPasswordButton.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UserEditButton/UserEditButton.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/components/UserListRow.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/components/UsersListGroups.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/modals/UserGroupsListModal/UserGroupsListModal.tsx delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/modals/UserGroupsListModal/style.scss delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/modals/UserGroupsListModal/useUserGroupsListModal.ts delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/style.scss delete mode 100644 web/src/pages/users/UsersOverview/components/UsersList/types.ts delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/AddUserModal.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/AddUserForm/AddUserForm.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/AddUserForm/style.scss delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/EnrollmentTokenCard/EnrollmentTokenCard.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/EnrollmentTokenCard/style.scss delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/StartEnrollmentForm/StartEnrollmentForm.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/components/StartEnrollmentForm/style.scss delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/hooks/useAddUserModal.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AddUserModal/style.scss delete mode 100644 web/src/pages/users/UsersOverview/modals/AssignGroupsModal/AssignGroupsModal.tsx delete mode 100644 web/src/pages/users/UsersOverview/modals/AssignGroupsModal/store.ts delete mode 100644 web/src/pages/users/UsersOverview/modals/AssignGroupsModal/style.scss delete mode 100644 web/src/pages/users/UsersOverview/style.scss delete mode 100644 web/src/pages/users/UsersPage.tsx delete mode 100644 web/src/pages/users/UsersSharedModals.tsx delete mode 100644 web/src/pages/users/shared/components/AddComponentBox/AddButtonIcon.tsx delete mode 100644 web/src/pages/users/shared/components/AddComponentBox/AddComponentBox.tsx delete mode 100644 web/src/pages/users/shared/components/AddComponentBox/style.scss delete mode 100644 web/src/pages/users/shared/components/KeyBox/KeyBox.tsx delete mode 100644 web/src/pages/users/shared/components/KeyBox/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddApiTokenModal/AddApiTokenModal.tsx delete mode 100644 web/src/pages/users/shared/modals/AddApiTokenModal/components/AddApiTokenForm/AddApiTokenForm.tsx delete mode 100644 web/src/pages/users/shared/modals/AddApiTokenModal/components/AddApiTokenForm/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddApiTokenModal/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddApiTokenModal/useAddApiTokenModal.ts delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/AddAuthenticationKeyModal.tsx delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/components/AddAuthenticationKeyForm/AddAuthenticationKeyForm.tsx delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/components/AddAuthenticationKeyForm/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/components/AddAuthenticationKeyYubikey/AddAuthenticationKeyYubikey.tsx delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/components/AddAuthenticationKeyYubikey/components/ProvisionerRow.tsx delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/components/AddAuthenticationKeyYubikey/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/style.scss delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/types.ts delete mode 100644 web/src/pages/users/shared/modals/AddAuthenticationKeyModal/useAddAuthorizationKeyModal.ts delete mode 100644 web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangePasswordForm.tsx delete mode 100644 web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangeUserPasswordModal.tsx delete mode 100644 web/src/pages/users/shared/modals/DeleteUserModal/DeleteUserModal.tsx delete mode 100644 web/src/pages/users/shared/modals/DisableMfaModal/DisableMfaModal.tsx delete mode 100644 web/src/pages/users/shared/modals/DisableMfaModal/store.ts delete mode 100644 web/src/pages/users/shared/modals/RenameApiTokenModal/RenameApiTokenModal.tsx delete mode 100644 web/src/pages/users/shared/modals/RenameApiTokenModal/useRenameApiTokenModal.tsx delete mode 100644 web/src/pages/users/shared/modals/RenameAuthenticationKeyModal/RenameAuthenticationKeyModal.tsx delete mode 100644 web/src/pages/users/shared/modals/RenameAuthenticationKeyModal/useRenameAuthenticationKeyModal.tsx delete mode 100644 web/src/pages/users/shared/modals/ToggleUserModal/ToggleUserModal.tsx delete mode 100644 web/src/pages/users/style.scss delete mode 100644 web/src/pages/webhooks/WebhooksListPage.tsx delete mode 100644 web/src/pages/webhooks/modals/WebhookModal/WebhookForm.tsx delete mode 100644 web/src/pages/webhooks/modals/WebhookModal/WebhookModal.tsx delete mode 100644 web/src/pages/webhooks/modals/WebhookModal/style.scss delete mode 100644 web/src/pages/webhooks/style.scss delete mode 100644 web/src/pages/wizard/WizardPage.tsx delete mode 100644 web/src/pages/wizard/components/WizardMapDevices/WizardMapDevices.tsx delete mode 100644 web/src/pages/wizard/components/WizardMapDevices/components/MapDeviceRow.tsx delete mode 100644 web/src/pages/wizard/components/WizardMapDevices/style.scss delete mode 100644 web/src/pages/wizard/components/WizardMapDevices/types.ts delete mode 100644 web/src/pages/wizard/components/WizardNav/WizardNav.tsx delete mode 100644 web/src/pages/wizard/components/WizardNav/style.scss delete mode 100644 web/src/pages/wizard/components/WizardNetworkConfiguration/WizardNetworkConfiguration.tsx delete mode 100644 web/src/pages/wizard/components/WizardNetworkConfiguration/components/DividerHeader.tsx delete mode 100644 web/src/pages/wizard/components/WizardNetworkConfiguration/style.scss delete mode 100644 web/src/pages/wizard/components/WizardNetworkImport/WizardNetworkImport.tsx delete mode 100644 web/src/pages/wizard/components/WizardNetworkImport/style.scss delete mode 100644 web/src/pages/wizard/components/WizardType/WizardType.tsx delete mode 100644 web/src/pages/wizard/components/WizardType/components/WizardTypeOptionCard/WizardTypeOptionCard.tsx delete mode 100644 web/src/pages/wizard/components/WizardType/components/WizardTypeOptionCard/style.scss delete mode 100644 web/src/pages/wizard/components/WizardType/style.scss delete mode 100644 web/src/pages/wizard/components/WizardWelcome/WizardWelcome.tsx delete mode 100644 web/src/pages/wizard/components/WizardWelcome/style.scss delete mode 100644 web/src/pages/wizard/hooks/useWizardStore.ts delete mode 100644 web/src/pages/wizard/style.scss delete mode 100644 web/src/pages/wizard/types/interfaces.ts delete mode 100644 web/src/pages/wizard/types/types.ts delete mode 100644 web/src/pwa/appstore.png delete mode 100644 web/src/pwa/icons/android-icon-144x144.png delete mode 100644 web/src/pwa/icons/android-icon-192x192.png delete mode 100644 web/src/pwa/icons/android-icon-36x36.png delete mode 100644 web/src/pwa/icons/android-icon-48x48.png delete mode 100644 web/src/pwa/icons/android-icon-72x72.png delete mode 100644 web/src/pwa/icons/android-icon-96x96.png delete mode 100644 web/src/pwa/icons/app/100.png delete mode 100644 web/src/pwa/icons/app/102.png delete mode 100644 web/src/pwa/icons/app/1024.png delete mode 100644 web/src/pwa/icons/app/114.png delete mode 100644 web/src/pwa/icons/app/120.png delete mode 100644 web/src/pwa/icons/app/128.png delete mode 100644 web/src/pwa/icons/app/144.png delete mode 100644 web/src/pwa/icons/app/152.png delete mode 100644 web/src/pwa/icons/app/16.png delete mode 100644 web/src/pwa/icons/app/167.png delete mode 100644 web/src/pwa/icons/app/172.png delete mode 100644 web/src/pwa/icons/app/180.png delete mode 100644 web/src/pwa/icons/app/196.png delete mode 100644 web/src/pwa/icons/app/20.png delete mode 100644 web/src/pwa/icons/app/216.png delete mode 100644 web/src/pwa/icons/app/256.png delete mode 100644 web/src/pwa/icons/app/29.png delete mode 100644 web/src/pwa/icons/app/32.png delete mode 100644 web/src/pwa/icons/app/40.png delete mode 100644 web/src/pwa/icons/app/48.png delete mode 100644 web/src/pwa/icons/app/50.png delete mode 100644 web/src/pwa/icons/app/512.png delete mode 100644 web/src/pwa/icons/app/55.png delete mode 100644 web/src/pwa/icons/app/57.png delete mode 100644 web/src/pwa/icons/app/58.png delete mode 100644 web/src/pwa/icons/app/60.png delete mode 100644 web/src/pwa/icons/app/64.png delete mode 100644 web/src/pwa/icons/app/66.png delete mode 100644 web/src/pwa/icons/app/72.png delete mode 100644 web/src/pwa/icons/app/76.png delete mode 100644 web/src/pwa/icons/app/80.png delete mode 100644 web/src/pwa/icons/app/87.png delete mode 100644 web/src/pwa/icons/app/88.png delete mode 100644 web/src/pwa/icons/app/92.png delete mode 100644 web/src/pwa/icons/apple-icon-114x114.png delete mode 100644 web/src/pwa/icons/apple-icon-120x120.png delete mode 100644 web/src/pwa/icons/apple-icon-144x144.png delete mode 100644 web/src/pwa/icons/apple-icon-152x152.png delete mode 100644 web/src/pwa/icons/apple-icon-180x180.png delete mode 100644 web/src/pwa/icons/apple-icon-57x57.png delete mode 100644 web/src/pwa/icons/apple-icon-60x60.png delete mode 100644 web/src/pwa/icons/apple-icon-72x72.png delete mode 100644 web/src/pwa/icons/apple-icon-76x76.png delete mode 100644 web/src/pwa/icons/apple-icon-precomposed.png delete mode 100644 web/src/pwa/icons/apple-icon.png delete mode 100644 web/src/pwa/icons/favicon-16x16.png delete mode 100644 web/src/pwa/icons/favicon-32x32.png delete mode 100644 web/src/pwa/icons/favicon-96x96.png delete mode 100644 web/src/pwa/icons/favicon.ico delete mode 100644 web/src/pwa/icons/ms-icon-144x144.png delete mode 100644 web/src/pwa/icons/ms-icon-150x150.png delete mode 100644 web/src/pwa/icons/ms-icon-310x310.png delete mode 100644 web/src/pwa/icons/ms-icon-70x70.png delete mode 100644 web/src/pwa/manifest.webmanifest delete mode 100644 web/src/pwa/playstore.png delete mode 100644 web/src/shared/assets/LICENSE.md delete mode 100644 web/src/shared/components/Form/FormAclDefaultPolicySelect/FormAclDefaultPolicy.tsx delete mode 100644 web/src/shared/components/Form/FormLocationMfaModeSelect/FormLocationMfaModeSelect.tsx delete mode 100644 web/src/shared/components/Form/FormLocationMfaModeSelect/style.scss delete mode 100644 web/src/shared/components/Layout/DateInput/DateInput.tsx delete mode 100644 web/src/shared/components/Layout/DateInput/FormDateInput.tsx delete mode 100644 web/src/shared/components/Layout/DateInput/style.scss delete mode 100644 web/src/shared/components/Layout/DateInput/types.ts delete mode 100644 web/src/shared/components/Layout/EnterpriseUpgradeToast/EnterpriseUpgradeToast.tsx delete mode 100644 web/src/shared/components/Layout/EnterpriseUpgradeToast/style.scss delete mode 100644 web/src/shared/components/Layout/EnterpriseUpgradeToast/types.ts delete mode 100644 web/src/shared/components/Layout/ExpandableSection/ExpandableSection.tsx delete mode 100644 web/src/shared/components/Layout/ExpandableSection/style.scss delete mode 100644 web/src/shared/components/Layout/ListCellTags/ListCellTags.tsx delete mode 100644 web/src/shared/components/Layout/ListCellTags/style.scss delete mode 100644 web/src/shared/components/Layout/ListHeader/ListHeader.tsx delete mode 100644 web/src/shared/components/Layout/ListHeader/style.scss delete mode 100644 web/src/shared/components/Layout/ListHeader/types.ts delete mode 100644 web/src/shared/components/Layout/ManagementPageLayout/ManagementPageLayout.tsx delete mode 100644 web/src/shared/components/Layout/ManagementPageLayout/style.scss delete mode 100644 web/src/shared/components/Layout/ManagementPageLayout/types.ts delete mode 100644 web/src/shared/components/Layout/PageContainer/PageContainer.tsx delete mode 100644 web/src/shared/components/Layout/PageContainer/style.scss delete mode 100644 web/src/shared/components/Layout/PageLayout/PageLayout.tsx delete mode 100644 web/src/shared/components/Layout/PageLayout/style.scss delete mode 100644 web/src/shared/components/Layout/PageLimiter/PageLimiter.tsx delete mode 100644 web/src/shared/components/Layout/PageLimiter/style.scss delete mode 100644 web/src/shared/components/Layout/RenderMarkdown/RenderMarkdown.tsx delete mode 100644 web/src/shared/components/Layout/SectionWithCard/SectionWithCard.tsx delete mode 100644 web/src/shared/components/Layout/SectionWithCard/style.scss delete mode 100644 web/src/shared/components/Layout/UpgradeLicenseModal/UpgradeLicenseModal.tsx delete mode 100644 web/src/shared/components/Layout/UpgradeLicenseModal/checkbox.svg delete mode 100644 web/src/shared/components/Layout/UpgradeLicenseModal/store.tsx delete mode 100644 web/src/shared/components/Layout/UpgradeLicenseModal/style.scss delete mode 100644 web/src/shared/components/Layout/UpgradeLicenseModal/types.ts delete mode 100644 web/src/shared/components/Layout/VersionUpdateToast/VersionUpdateToast.tsx delete mode 100644 web/src/shared/components/Layout/VersionUpdateToast/style.scss delete mode 100644 web/src/shared/components/Layout/VersionUpdateToast/types.ts delete mode 100644 web/src/shared/components/Layout/WireguardConfigExpandable/WireguardConfigExpandable.tsx delete mode 100644 web/src/shared/components/Layout/WireguardConfigExpandable/style.scss delete mode 100644 web/src/shared/components/Layout/buttons/AddButton/AddButton.tsx delete mode 100644 web/src/shared/components/Layout/buttons/AddButton/style.scss delete mode 100644 web/src/shared/components/Layout/buttons/FilterButton/FilterButton.tsx delete mode 100644 web/src/shared/components/Layout/buttons/FilterButton/style.scss delete mode 100644 web/src/shared/components/Layout/buttons/OpenDesktopClientButton/OpenDesktopClientButton.tsx delete mode 100644 web/src/shared/components/Router/Guards/ProtectedRoute/ProtectedRoute.tsx delete mode 100644 web/src/shared/components/i18n/RenderTranslation/RenderTranslation.tsx delete mode 100644 web/src/shared/components/modals/FilterGroupsModal/FilterGroupsModal.tsx delete mode 100644 web/src/shared/components/modals/FilterGroupsModal/style.scss delete mode 100644 web/src/shared/components/modals/FilterGroupsModal/types.ts delete mode 100644 web/src/shared/components/modals/OutdatedComponentsModal/OutdatedComponentsModal.tsx delete mode 100644 web/src/shared/components/modals/OutdatedComponentsModal/style.scss delete mode 100644 web/src/shared/components/modals/OutdatedComponentsModal/useOutdatedComponentsModal.tsx delete mode 100644 web/src/shared/components/modals/UpdateNotificationModal/UpdateNotificationModal.tsx delete mode 100644 web/src/shared/components/modals/UpdateNotificationModal/components/UpdateNotificationModalIcons.tsx delete mode 100644 web/src/shared/components/modals/UpdateNotificationModal/style.scss delete mode 100644 web/src/shared/components/network/DeviceConfigsCard/DeviceConfigsCard.tsx delete mode 100644 web/src/shared/components/network/DeviceConfigsCard/style.scss delete mode 100644 web/src/shared/components/network/DeviceConfigsCard/types.ts delete mode 100644 web/src/shared/components/network/GatewaysStatus/AllNetworksGatewaysStatus/AllNetworksGatewaysStatus.tsx delete mode 100644 web/src/shared/components/network/GatewaysStatus/AllNetworksGatewaysStatus/style.scss delete mode 100644 web/src/shared/components/network/GatewaysStatus/GatewayStatusIcon.tsx delete mode 100644 web/src/shared/components/network/GatewaysStatus/GatewaysFloatingStatus/GatewaysFloatingStatus.tsx delete mode 100644 web/src/shared/components/network/GatewaysStatus/GatewaysFloatingStatus/style.scss delete mode 100644 web/src/shared/components/network/GatewaysStatus/GatewaysStatusInfo/GatewaysStatusInfo.tsx delete mode 100644 web/src/shared/components/network/GatewaysStatus/GatewaysStatusInfo/style.scss delete mode 100644 web/src/shared/components/network/GatewaysStatus/NetworkGatewaysStatus/NetworkGatewaysStatus.tsx delete mode 100644 web/src/shared/components/network/GatewaysStatus/style.scss delete mode 100644 web/src/shared/components/network/GatewaysStatus/types.ts delete mode 100644 web/src/shared/components/svg/.eslintrc delete mode 100644 web/src/shared/components/svg/Avatar01Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar01Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar02Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar02Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar03Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar03Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar04Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar04Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar05Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar05Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar06Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar06Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar07Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar07Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar08Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar08Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar09Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar09Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar10Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar10Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar11Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar11Gray.tsx delete mode 100644 web/src/shared/components/svg/Avatar12Blue.tsx delete mode 100644 web/src/shared/components/svg/Avatar12Gray.tsx delete mode 100644 web/src/shared/components/svg/DefguardLogo.tsx delete mode 100644 web/src/shared/components/svg/DefguardLogoLogin.tsx delete mode 100644 web/src/shared/components/svg/DefguardNavLogo.tsx delete mode 100644 web/src/shared/components/svg/DefguardNavLogoCollapsed.tsx delete mode 100644 web/src/shared/components/svg/DefguardNoIcon.tsx delete mode 100644 web/src/shared/components/svg/GlowIcon.tsx delete mode 100644 web/src/shared/components/svg/Icon24HConnections.tsx delete mode 100644 web/src/shared/components/svg/IconActiveConnections.tsx delete mode 100644 web/src/shared/components/svg/IconActivityAdd.tsx delete mode 100644 web/src/shared/components/svg/IconActivityRemoved.tsx delete mode 100644 web/src/shared/components/svg/IconActivityWarning.tsx delete mode 100644 web/src/shared/components/svg/IconArrowDouble.tsx delete mode 100644 web/src/shared/components/svg/IconArrowDoubleGrayLeft.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayDown.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayDown1.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayLeft.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayRight.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGraySmall.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayUp.tsx delete mode 100644 web/src/shared/components/svg/IconArrowGrayUp1.tsx delete mode 100644 web/src/shared/components/svg/IconArrowSingle.tsx delete mode 100644 web/src/shared/components/svg/IconArrowSingle2.tsx delete mode 100644 web/src/shared/components/svg/IconArrowWhiteLeft.tsx delete mode 100644 web/src/shared/components/svg/IconAsterix.tsx delete mode 100644 web/src/shared/components/svg/IconAuthenticationKey.tsx delete mode 100644 web/src/shared/components/svg/IconCancel.tsx delete mode 100644 web/src/shared/components/svg/IconCancelAlt.tsx delete mode 100644 web/src/shared/components/svg/IconCheckmark.tsx delete mode 100644 web/src/shared/components/svg/IconCheckmarkGreen.tsx delete mode 100644 web/src/shared/components/svg/IconCheckmarkWhite.tsx delete mode 100644 web/src/shared/components/svg/IconCheckmarkWhite1.tsx delete mode 100644 web/src/shared/components/svg/IconCheckmarkWhiteBig.tsx delete mode 100644 web/src/shared/components/svg/IconClip.tsx delete mode 100644 web/src/shared/components/svg/IconCloseGray.tsx delete mode 100644 web/src/shared/components/svg/IconCollapse.tsx delete mode 100644 web/src/shared/components/svg/IconConnected.tsx delete mode 100644 web/src/shared/components/svg/IconCopy.tsx delete mode 100644 web/src/shared/components/svg/IconDeactivated.tsx delete mode 100644 web/src/shared/components/svg/IconDelete.tsx delete mode 100644 web/src/shared/components/svg/IconDfgOpenidRedirect.tsx delete mode 100644 web/src/shared/components/svg/IconDisconnected.tsx delete mode 100644 web/src/shared/components/svg/IconDownload.tsx delete mode 100644 web/src/shared/components/svg/IconEdit.tsx delete mode 100644 web/src/shared/components/svg/IconEditAlt.tsx delete mode 100644 web/src/shared/components/svg/IconEditAltHover.tsx delete mode 100644 web/src/shared/components/svg/IconEditHover.tsx delete mode 100644 web/src/shared/components/svg/IconEditNetwork.tsx delete mode 100644 web/src/shared/components/svg/IconEth.tsx delete mode 100644 web/src/shared/components/svg/IconExpand.tsx delete mode 100644 web/src/shared/components/svg/IconFilter.tsx delete mode 100644 web/src/shared/components/svg/IconHamburgerClose.tsx delete mode 100644 web/src/shared/components/svg/IconHamburgerMenu.tsx delete mode 100644 web/src/shared/components/svg/IconHamburgerMenu1.tsx delete mode 100644 web/src/shared/components/svg/IconHourglass.tsx delete mode 100644 web/src/shared/components/svg/IconHourglassHover.tsx delete mode 100644 web/src/shared/components/svg/IconInfo.tsx delete mode 100644 web/src/shared/components/svg/IconInfoError.tsx delete mode 100644 web/src/shared/components/svg/IconInfoNormal.tsx delete mode 100644 web/src/shared/components/svg/IconInfoSuccess.tsx delete mode 100644 web/src/shared/components/svg/IconInfoSuccess1.tsx delete mode 100644 web/src/shared/components/svg/IconInfoWarning.tsx delete mode 100644 web/src/shared/components/svg/IconKey.tsx delete mode 100644 web/src/shared/components/svg/IconListOrderDown.tsx delete mode 100644 web/src/shared/components/svg/IconListOrderDownHover.tsx delete mode 100644 web/src/shared/components/svg/IconListOrderUp.tsx delete mode 100644 web/src/shared/components/svg/IconListOrderUpHover.tsx delete mode 100644 web/src/shared/components/svg/IconNavGroups.tsx delete mode 100644 web/src/shared/components/svg/IconNavHamburger.tsx delete mode 100644 web/src/shared/components/svg/IconNavKey.tsx delete mode 100644 web/src/shared/components/svg/IconNavLocations.tsx delete mode 100644 web/src/shared/components/svg/IconNavLogout.tsx delete mode 100644 web/src/shared/components/svg/IconNavOpenid.tsx delete mode 100644 web/src/shared/components/svg/IconNavOverview.tsx delete mode 100644 web/src/shared/components/svg/IconNavProfile.tsx delete mode 100644 web/src/shared/components/svg/IconNavProfile1.tsx delete mode 100644 web/src/shared/components/svg/IconNavProvisioners.tsx delete mode 100644 web/src/shared/components/svg/IconNavSettings.tsx delete mode 100644 web/src/shared/components/svg/IconNavSupport.tsx delete mode 100644 web/src/shared/components/svg/IconNavUsers.tsx delete mode 100644 web/src/shared/components/svg/IconNavVpn.tsx delete mode 100644 web/src/shared/components/svg/IconNavWebhook.tsx delete mode 100644 web/src/shared/components/svg/IconNavWebhooks.tsx delete mode 100644 web/src/shared/components/svg/IconNavYubikey.tsx delete mode 100644 web/src/shared/components/svg/IconNetworkLoad.tsx delete mode 100644 web/src/shared/components/svg/IconOpenModal.tsx delete mode 100644 web/src/shared/components/svg/IconPacketsIn.tsx delete mode 100644 web/src/shared/components/svg/IconPacketsOut.tsx delete mode 100644 web/src/shared/components/svg/IconPlusGray.tsx delete mode 100644 web/src/shared/components/svg/IconPlusWhite.tsx delete mode 100644 web/src/shared/components/svg/IconPopupClose.tsx delete mode 100644 web/src/shared/components/svg/IconReadMore.tsx delete mode 100644 web/src/shared/components/svg/IconRedirect.tsx delete mode 100644 web/src/shared/components/svg/IconSearch.tsx delete mode 100644 web/src/shared/components/svg/IconSearchHover.tsx delete mode 100644 web/src/shared/components/svg/IconSettings.tsx delete mode 100644 web/src/shared/components/svg/IconSuccessLarge.tsx delete mode 100644 web/src/shared/components/svg/IconTagDismiss.tsx delete mode 100644 web/src/shared/components/svg/IconTrash.tsx delete mode 100644 web/src/shared/components/svg/IconUpgrade.tsx delete mode 100644 web/src/shared/components/svg/IconUserAddNew.tsx delete mode 100644 web/src/shared/components/svg/IconUserList.tsx delete mode 100644 web/src/shared/components/svg/IconUserListElement.tsx delete mode 100644 web/src/shared/components/svg/IconUserListExpanded.tsx delete mode 100644 web/src/shared/components/svg/IconUserListHover.tsx delete mode 100644 web/src/shared/components/svg/IconWaiting.tsx delete mode 100644 web/src/shared/components/svg/IconWaitingHover.tsx delete mode 100644 web/src/shared/components/svg/IconWallet.tsx delete mode 100644 web/src/shared/components/svg/IconWarning.tsx delete mode 100644 web/src/shared/components/svg/IconX.tsx delete mode 100644 web/src/shared/components/svg/ImageMeshNetwork.tsx delete mode 100644 web/src/shared/components/svg/ImageRegularNetwork.tsx delete mode 100644 web/src/shared/components/svg/ImportConfig.tsx delete mode 100644 web/src/shared/components/svg/LogoDefguardWhite.tsx delete mode 100644 web/src/shared/components/svg/ManualConfig.tsx delete mode 100644 web/src/shared/components/svg/MetamaskIcon.tsx delete mode 100644 web/src/shared/components/svg/PhantomIcon.tsx delete mode 100644 web/src/shared/components/svg/QrIconWhite.tsx delete mode 100644 web/src/shared/components/svg/Subtract.tsx delete mode 100644 web/src/shared/components/svg/WireguardLogo.tsx delete mode 100644 web/src/shared/components/svg/YubikeyProvisioningGraphic.tsx delete mode 100644 web/src/shared/components/utils/DelayRender/DelayRender.tsx delete mode 100644 web/src/shared/constants.ts delete mode 160000 web/src/shared/defguard-ui delete mode 100644 web/src/shared/helpers/displayDate.ts delete mode 100644 web/src/shared/helpers/getUserFullName.ts delete mode 100644 web/src/shared/hooks/api/api-client.ts delete mode 100644 web/src/shared/hooks/api/api.ts delete mode 100644 web/src/shared/hooks/api/axios-client.ts delete mode 100644 web/src/shared/hooks/api/provider.tsx delete mode 100644 web/src/shared/hooks/api/store.ts delete mode 100644 web/src/shared/hooks/store/useAppStore.ts delete mode 100644 web/src/shared/hooks/store/useAuthStore.ts delete mode 100644 web/src/shared/hooks/store/useEnterpriseUpgradeStore.tsx delete mode 100644 web/src/shared/hooks/store/useModalStore.ts delete mode 100644 web/src/shared/hooks/store/useOpenidClientStore.tsx delete mode 100644 web/src/shared/hooks/store/useUpdatesStore.tsx delete mode 100644 web/src/shared/hooks/store/useUserProfileStore.ts delete mode 100644 web/src/shared/hooks/useApi.tsx delete mode 100644 web/src/shared/hooks/useClipboard.tsx delete mode 100644 web/src/shared/hooks/useToaster.tsx delete mode 100644 web/src/shared/images/gif/tnt-built.gif delete mode 100644 web/src/shared/images/png/auto-config-1.png delete mode 100644 web/src/shared/images/png/auto-config-2.png delete mode 100644 web/src/shared/images/png/manual-config-1.png delete mode 100644 web/src/shared/images/svg/avatar_01_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_01_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_02_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_02_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_03_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_03_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_04_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_04_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_05_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_05_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_06_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_06_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_07_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_07_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_08_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_08_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_09_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_09_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_10_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_10_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_11_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_11_gray.svg delete mode 100644 web/src/shared/images/svg/avatar_12_blue.svg delete mode 100644 web/src/shared/images/svg/avatar_12_gray.svg delete mode 100644 web/src/shared/images/svg/defguard-logo-login.svg delete mode 100644 web/src/shared/images/svg/defguard-logo.svg delete mode 100644 web/src/shared/images/svg/defguard-nav-logo-collapsed.svg delete mode 100644 web/src/shared/images/svg/defguard-nav-logo.svg delete mode 100644 web/src/shared/images/svg/defguard-no-icon.svg delete mode 100644 web/src/shared/images/svg/glow-icon.svg delete mode 100644 web/src/shared/images/svg/icon-24h-connections.svg delete mode 100644 web/src/shared/images/svg/icon-X.svg delete mode 100644 web/src/shared/images/svg/icon-active-connections.svg delete mode 100644 web/src/shared/images/svg/icon-activity-add.svg delete mode 100644 web/src/shared/images/svg/icon-activity-removed.svg delete mode 100644 web/src/shared/images/svg/icon-activity-warning.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-double-gray-left.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-double.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-down-1.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-down.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-left.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-right.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-small.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-up-1.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-gray-up.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-single-2.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-single.svg delete mode 100644 web/src/shared/images/svg/icon-arrow-white-left.svg delete mode 100644 web/src/shared/images/svg/icon-asterix.svg delete mode 100644 web/src/shared/images/svg/icon-cancel-alt.svg delete mode 100644 web/src/shared/images/svg/icon-cancel.svg delete mode 100644 web/src/shared/images/svg/icon-checkmark-green.svg delete mode 100644 web/src/shared/images/svg/icon-checkmark-white-1.svg delete mode 100644 web/src/shared/images/svg/icon-checkmark-white-big.svg delete mode 100644 web/src/shared/images/svg/icon-checkmark-white.svg delete mode 100644 web/src/shared/images/svg/icon-checkmark.svg delete mode 100644 web/src/shared/images/svg/icon-clip.svg delete mode 100644 web/src/shared/images/svg/icon-close-gray.svg delete mode 100644 web/src/shared/images/svg/icon-collapse.svg delete mode 100644 web/src/shared/images/svg/icon-connected.svg delete mode 100644 web/src/shared/images/svg/icon-copy.svg delete mode 100644 web/src/shared/images/svg/icon-deactivated.svg delete mode 100644 web/src/shared/images/svg/icon-delete.svg delete mode 100644 web/src/shared/images/svg/icon-dfg-openid-redirect.svg delete mode 100644 web/src/shared/images/svg/icon-disconnected.svg delete mode 100644 web/src/shared/images/svg/icon-download.svg delete mode 100644 web/src/shared/images/svg/icon-edit.svg delete mode 100644 web/src/shared/images/svg/icon-eth.svg delete mode 100644 web/src/shared/images/svg/icon-expand.svg delete mode 100644 web/src/shared/images/svg/icon-filter.svg delete mode 100644 web/src/shared/images/svg/icon-hamburger-close.svg delete mode 100644 web/src/shared/images/svg/icon-hamburger-menu-1.svg delete mode 100644 web/src/shared/images/svg/icon-hamburger-menu.svg delete mode 100644 web/src/shared/images/svg/icon-hourglass-hover.svg delete mode 100644 web/src/shared/images/svg/icon-hourglass.svg delete mode 100644 web/src/shared/images/svg/icon-info-error.svg delete mode 100644 web/src/shared/images/svg/icon-info-normal.svg delete mode 100644 web/src/shared/images/svg/icon-info-success-1.svg delete mode 100644 web/src/shared/images/svg/icon-info-success.svg delete mode 100644 web/src/shared/images/svg/icon-info-warning.svg delete mode 100644 web/src/shared/images/svg/icon-info.svg delete mode 100644 web/src/shared/images/svg/icon-key.svg delete mode 100644 web/src/shared/images/svg/icon-list-order-down-hover.svg delete mode 100644 web/src/shared/images/svg/icon-list-order-down.svg delete mode 100644 web/src/shared/images/svg/icon-list-order-up-hover.svg delete mode 100644 web/src/shared/images/svg/icon-list-order-up.svg delete mode 100644 web/src/shared/images/svg/icon-nav-groups.svg delete mode 100644 web/src/shared/images/svg/icon-nav-hamburger.svg delete mode 100644 web/src/shared/images/svg/icon-nav-key.svg delete mode 100644 web/src/shared/images/svg/icon-nav-logout.svg delete mode 100644 web/src/shared/images/svg/icon-nav-openid.svg delete mode 100644 web/src/shared/images/svg/icon-nav-overview.svg delete mode 100644 web/src/shared/images/svg/icon-nav-profile.svg delete mode 100644 web/src/shared/images/svg/icon-nav-settings.svg delete mode 100644 web/src/shared/images/svg/icon-nav-support.svg delete mode 100644 web/src/shared/images/svg/icon-nav-users.svg delete mode 100644 web/src/shared/images/svg/icon-nav-webhook.svg delete mode 100644 web/src/shared/images/svg/icon-nav-yubikey.svg delete mode 100644 web/src/shared/images/svg/icon-network-load.svg delete mode 100644 web/src/shared/images/svg/icon-open-modal.svg delete mode 100644 web/src/shared/images/svg/icon-packets-in.svg delete mode 100644 web/src/shared/images/svg/icon-packets-out.svg delete mode 100644 web/src/shared/images/svg/icon-plus-gray.svg delete mode 100644 web/src/shared/images/svg/icon-plus-white.svg delete mode 100644 web/src/shared/images/svg/icon-popup-close.svg delete mode 100644 web/src/shared/images/svg/icon-read-more.svg delete mode 100644 web/src/shared/images/svg/icon-redirect.svg delete mode 100644 web/src/shared/images/svg/icon-search-hover.svg delete mode 100644 web/src/shared/images/svg/icon-search.svg delete mode 100644 web/src/shared/images/svg/icon-settings.svg delete mode 100644 web/src/shared/images/svg/icon-success-large.svg delete mode 100644 web/src/shared/images/svg/icon-tag-dismiss.svg delete mode 100644 web/src/shared/images/svg/icon-trash.svg delete mode 100644 web/src/shared/images/svg/icon-user-add-new.svg delete mode 100644 web/src/shared/images/svg/icon-user-list-element.svg delete mode 100644 web/src/shared/images/svg/icon-user-list-expanded.svg delete mode 100644 web/src/shared/images/svg/icon-user-list-hover.svg delete mode 100644 web/src/shared/images/svg/icon-user-list.svg delete mode 100644 web/src/shared/images/svg/icon-waiting-hover.svg delete mode 100644 web/src/shared/images/svg/icon-waiting.svg delete mode 100644 web/src/shared/images/svg/icon-wallet.svg delete mode 100644 web/src/shared/images/svg/icon-warning.svg delete mode 100644 web/src/shared/images/svg/image-mesh-network.svg delete mode 100644 web/src/shared/images/svg/image-regular-network.svg delete mode 100644 web/src/shared/images/svg/import-config.svg delete mode 100644 web/src/shared/images/svg/logo-defguard-white.svg delete mode 100644 web/src/shared/images/svg/manual-config.svg delete mode 100644 web/src/shared/images/svg/metamask-icon.svg delete mode 100644 web/src/shared/images/svg/phantom-icon.svg delete mode 100644 web/src/shared/images/svg/qr-icon-white.svg delete mode 100644 web/src/shared/images/svg/subtract.svg delete mode 100644 web/src/shared/images/svg/wireguard-logo.svg delete mode 100644 web/src/shared/images/svg/yubikey-provisioning-graphic.svg delete mode 100644 web/src/shared/links.ts delete mode 100644 web/src/shared/messageIds.ts delete mode 100644 web/src/shared/mutations.ts delete mode 100644 web/src/shared/patterns.ts delete mode 100644 web/src/shared/queries.ts delete mode 100644 web/src/shared/query-client.ts delete mode 100644 web/src/shared/scss/_legacy-variables.scss delete mode 100644 web/src/shared/scss/base/_base.scss delete mode 100644 web/src/shared/scss/base/_index.scss delete mode 100644 web/src/shared/scss/base/_scrollbar.scss delete mode 100644 web/src/shared/scss/base/variables/_colors.scss delete mode 100644 web/src/shared/scss/base/variables/_index.scss delete mode 100644 web/src/shared/scss/base/variables/_nav.scss delete mode 100644 web/src/shared/scss/base/variables/_text.scss delete mode 100644 web/src/shared/scss/global/_index.scss delete mode 100644 web/src/shared/scss/global/_mixins.scss delete mode 100644 web/src/shared/scss/global/bootstrap/LICENCE delete mode 100644 web/src/shared/scss/global/bootstrap/_breakpoints.scss delete mode 100644 web/src/shared/scss/global/bootstrap/_functions.scss delete mode 100644 web/src/shared/scss/global/bootstrap/_index.scss delete mode 100644 web/src/shared/scss/styles.scss delete mode 100644 web/src/shared/types.ts delete mode 100644 web/src/shared/utils/chainName.ts delete mode 100644 web/src/shared/utils/checkPlatform.ts delete mode 100644 web/src/shared/utils/detectClickOutside.ts delete mode 100644 web/src/shared/utils/displayDate.ts delete mode 100644 web/src/shared/utils/downloadWGConfig.ts delete mode 100644 web/src/shared/utils/extractInitials.ts delete mode 100644 web/src/shared/utils/form/selectifyNetwork.ts delete mode 100644 web/src/shared/utils/generateWGKeys.ts delete mode 100644 web/src/shared/utils/invalidateMultipleQueries.ts delete mode 100644 web/src/shared/utils/localeToDatepicker.ts delete mode 100644 web/src/shared/utils/omitNull.ts delete mode 100644 web/src/shared/utils/removeEmptyStrings.ts delete mode 100644 web/src/shared/utils/removeNulls.ts delete mode 100644 web/src/shared/utils/searchByKeys.ts delete mode 100644 web/src/shared/utils/sortByDate.ts delete mode 100644 web/src/shared/utils/stringToBlob.ts delete mode 100644 web/src/shared/utils/titleCase.ts delete mode 100644 web/src/shared/utils/trimObjectStrings.ts delete mode 100644 web/src/shared/validators.ts delete mode 100644 web/src/shared/validators/password.ts delete mode 100644 web/src/shared/variants.ts delete mode 100644 web/src/vite.d.ts delete mode 100644 web/tsconfig.app.json delete mode 100644 web/tsconfig.app.tsbuildinfo delete mode 100644 web/tsconfig.json delete mode 100644 web/tsconfig.node.json delete mode 100644 web/vite.config.mts diff --git a/web/.biomeignore b/web/.biomeignore deleted file mode 100644 index 8260f01a7..000000000 --- a/web/.biomeignore +++ /dev/null @@ -1,2 +0,0 @@ -src/i18n/*.ts -src/i18n/*.tsx diff --git a/web/.editorconfig b/web/.editorconfig deleted file mode 100644 index 57516b7ac..000000000 --- a/web/.editorconfig +++ /dev/null @@ -1,29 +0,0 @@ -root = false - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.{ts,tsx}] -indent_style = space -indent_size = 2 -rulers = 90 - -[*.{scss}] -indent_style = space -indent_size = 2 -rulers = 90 - -[*.{html}] -indent_style = space -indent_size = 2 -rulers = 90 - -[*.{json,yaml}] -insert_final_newline = true -indent_style = space -indent_size = 2 -rulers = 80 diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 88e111584..000000000 --- a/web/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.local* -./*.env diff --git a/web/.npmrc b/web/.npmrc deleted file mode 100644 index 319e41e69..000000000 --- a/web/.npmrc +++ /dev/null @@ -1 +0,0 @@ -strict-peer-dependencies=false diff --git a/web/.nvmrc b/web/.nvmrc deleted file mode 100644 index 53a256a2e..000000000 --- a/web/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v24.7 diff --git a/web/.prettierignore b/web/.prettierignore deleted file mode 100644 index 74dbecd59..000000000 --- a/web/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -/src/i18n/*.ts -/src/i18n/*.tsx -/src/**/*.tsx -/src/**/*.ts diff --git a/web/.prettierrc b/web/.prettierrc deleted file mode 100644 index 71a0f3291..000000000 --- a/web/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "singleQuote": true, - "useTabs": false, - "printWidth": 90, - "endOfLine": "lf" -} diff --git a/web/.typesafe-i18n.json b/web/.typesafe-i18n.json deleted file mode 100644 index 28148cbaf..000000000 --- a/web/.typesafe-i18n.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "adapter": "react", - "$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json", - "baseLocale": "en" -} diff --git a/web/README.md b/web/README.md deleted file mode 100644 index c88e39e5b..000000000 --- a/web/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Defguard frontend - -React.js based, web user interface for Defguard project. - -## Run development server - -Install dependencies - -```bash - pnpm install -``` - -Start the dev server - -```bash - pnpm run dev -``` - -You can configure API proxy by changing `target` key value under `/api` path within `vite.config.ts` file. - -## Build docker image - -```bash -docker build . -``` - -## Linting - -For linting this project uses [prettier](https://www.npmjs.com/package/prettier), [eslint](https://www.npmjs.com/package/eslint) and [stylelint](https://stylelint.io/) - -#### Available commands - -Check linting in all supported files ( both prettier and eslint ) - -```bash -pnpm run lint -``` - -Fix all autofixable problems with eslint - -```bash -pnpm run eslint-fix -``` - -Fix all autofixable probles with prettier - -```bash -pnpm run prettier-fix -``` - -Fix all autofixable problems with pretter and eslint - -```bash -pnpm fix-lint -``` - -#### Adding new SVG components - -Move .svg files into `src/shared/images/svg` then use command: - -```bash -pnpm parse-svgs -``` - -This will generate new components within `src/shared/components/svg`, they can be used as a regular components. Also this command doesn't replace or modify already existing files. - -## Conventional Commits - -Using [commitlint](https://commitlint.js.org/#/) with this [config](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional). - -## Versioning - -Using [standard-version](https://github.com/conventional-changelog/standard-version) diff --git a/web/biome.json b/web/biome.json deleted file mode 100644 index 2bcbfd1d7..000000000 --- a/web/biome.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.2.2/schema.json", - "vcs": { "enabled": false, "clientKind": "git", "useIgnoreFile": false }, - "files": { - "ignoreUnknown": false, - "includes": ["src/**", "!src/i18n", "!**/svg"] - }, - "formatter": { - "enabled": true, - "formatWithErrors": false, - "indentStyle": "space", - "indentWidth": 2, - "lineEnding": "lf", - "lineWidth": 90, - "attributePosition": "auto", - "bracketSameLine": false, - "bracketSpacing": true, - "expand": "auto", - "useEditorconfig": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "a11y": "off", - "complexity": { - "noBannedTypes": "error", - "noUselessTypeConstraint": "error" - }, - "correctness": { - "noChildrenProp": "error", - "noPrecisionLoss": "error", - "noUnusedVariables": "error", - "useExhaustiveDependencies": "error", - "useHookAtTopLevel": "error", - "useJsxKeyInIterable": "error", - "useUniqueElementIds": "off" - }, - "security": { "noDangerouslySetInnerHtmlWithChildren": "error" }, - "style": { - "noNamespace": "error", - "noNonNullAssertion": "error", - "useArrayLiterals": "error", - "useAsConstAssertion": "error", - "useBlockStatements": "off", - "useLiteralEnumMembers": "off" - }, - "suspicious": { - "noCommentText": "error", - "noDuplicateJsxProps": "error", - "noExplicitAny": "error", - "noExtraNonNullAssertion": "error", - "noMisleadingInstantiator": "error", - "noUnsafeDeclarationMerging": "error", - "noArrayIndexKey": "off" - } - } - }, - "javascript": { - "formatter": { - "jsxQuoteStyle": "double", - "quoteProperties": "asNeeded", - "trailingCommas": "all", - "semicolons": "always", - "arrowParentheses": "always", - "quoteStyle": "single", - "attributePosition": "auto", - "bracketSameLine": false, - "bracketSpacing": true - } - }, - "assist": { - "enabled": true, - "actions": { "source": { "organizeImports": "on" } } - }, - "overrides": [ - { - "includes": ["src/shared/links.ts"], - "formatter": { - "enabled": false - } - } - ] -} diff --git a/web/index.html b/web/index.html deleted file mode 100644 index 33c26718f..000000000 --- a/web/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - \ No newline at end of file diff --git a/web/nginx.conf b/web/nginx.conf deleted file mode 100644 index aad3a639a..000000000 --- a/web/nginx.conf +++ /dev/null @@ -1,38 +0,0 @@ -http { - server { - listen 80; - server_name prl; - root /web/; - access_log /var/log/nginx/prl.access.log; - error_log /var/log/nginx/prl.error.log; - - ignore_invalid_headers off; - large_client_header_buffers 4 16k; - - gzip on; - gzip_disable "msie6"; - - gzip_vary on; - gzip_proxied any; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types application/atom+xml application/javascript application/json application/rss+xml - application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml - application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass_request_headers on; - - location / { - include /etc/nginx/mime.types; - try_files $uri $uri/ /index.html =404; - } - } -} - -events { - worker_connections 1024; ## Default: 1024 -} diff --git a/web/package.json b/web/package.json deleted file mode 100644 index 72f2c3acb..000000000 --- a/web/package.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "name": "web", - "type": "module", - "scripts": { - "preview": "pnpm run build && pnpm run vite preview", - "dev": "concurrently \"pnpm run vite\" \"pnpm run typesafe-i18n\"", - "build": "pnpm run typecheck && vite build", - "serve": "vite preview", - "typecheck": "tsc --project ./tsconfig.app.json", - "generate-translation-types": "typesafe-i18n --no-watch", - "fix": "biome check ./src --write --assist-enabled=true && prettier src/**/*.scss -w --log-level silent", - "fix-unsafe": "biome check ./src --write --unsafe --assist-enabled=true && prettier src/**/*.scss -w --log-level silent", - "lint": "biome check ./src --error-on-warnings --formatter-enabled=true --enforce-assist=true --linter-enabled=true && pnpm run typecheck && prettier src/**/*.scss --check --log-level error", - "typesafe-i18n": "typesafe-i18n", - "vite": "vite", - "prettier": "prettier", - "biome": "biome" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "pnpm": { - "peerDependencyRules": { - "ignoreMissing": [ - "react-native" - ] - }, - "ignoredBuiltDependencies": [ - "@swc/core", - "esbuild" - ], - "onlyBuiltDependencies": [ - "@swc/core" - ] - }, - "dependencies": { - "@floating-ui/react": "^0.27.16", - "@github/webauthn-json": "^2.1.1", - "@hookform/resolvers": "^5.2.2", - "@react-hook/resize-observer": "^2.0.2", - "@react-rxjs/core": "^0.10.8", - "@stablelib/base64": "^2.0.1", - "@stablelib/x25519": "^2.0.1", - "@tanstack/query-core": "^5.90.2", - "@tanstack/react-query": "^5.90.2", - "@tanstack/react-virtual": "3.13.12", - "@tanstack/virtual-core": "3.13.12", - "@use-gesture/react": "^10.3.1", - "axios": "^1.12.2", - "byte-size": "^9.0.1", - "classnames": "^2.5.1", - "clsx": "^2.1.1", - "date-fns": "^4.1.0", - "dayjs": "^1.11.18", - "deepmerge-ts": "^7.1.5", - "detect-browser": "^5.3.0", - "dice-coefficient": "^2.1.1", - "events": "^3.3.0", - "fast-deep-equal": "^3.1.3", - "file-saver": "^2.0.5", - "fuse.js": "^7.1.0", - "get-text-width": "^1.0.3", - "hex-rgb": "^5.0.0", - "html-react-parser": "^5.2.6", - "humanize-duration": "^3.33.1", - "ipaddr.js": "^2.2.0", - "itertools": "^2.5.0", - "js-base64": "^3.7.8", - "lodash-es": "^4.17.21", - "merge-refs": "^2.0.0", - "millify": "^6.1.0", - "motion": "^12.23.22", - "numbro": "^2.5.0", - "qrcode": "^1.5.4", - "qs": "^6.14.0", - "radash": "^12.1.1", - "react": "^19.1.1", - "react-click-away-listener": "^2.4.0", - "react-datepicker": "^8.7.0", - "react-dom": "^19.1.1", - "react-hook-form": "^7.63.0", - "react-idle-timer": "^5.7.2", - "react-intersection-observer": "^9.16.0", - "react-is": "^19.1.1", - "react-loading-skeleton": "^3.5.0", - "react-markdown": "^10.1.0", - "react-qr-code": "^2.0.18", - "react-resize-detector": "^12.3.0", - "react-router": "^6.30.1", - "react-router-dom": "^6.30.1", - "react-tracked": "^2.0.1", - "react-virtualized-auto-sizer": "^1.0.26", - "recharts": "^3.2.1", - "rehype-external-links": "^3.0.0", - "rehype-raw": "^7.0.0", - "rehype-sanitize": "^6.0.0", - "rxjs": "^7.8.2", - "scheduler": "^0.26.0", - "text-case": "^1.2.9", - "typesafe-i18n": "^5.26.2", - "use-breakpoint": "^4.0.6", - "zod": "^3.25.76", - "zustand": "^5.0.8" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@biomejs/biome": "2.2.2", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@hookform/devtools": "^4.4.0", - "@tanstack/react-query-devtools": "^5.90.2", - "@types/byte-size": "^8.1.2", - "@types/file-saver": "^2.0.7", - "@types/humanize-duration": "^3.27.4", - "@types/lodash-es": "^4.17.12", - "@types/node": "^24.5.2", - "@types/qs": "^6.14.0", - "@types/react": "^19.1.13", - "@types/react-dom": "^19.1.9", - "@types/react-router-dom": "^5.3.3", - "@vitejs/plugin-react-swc": "^4.1.0", - "autoprefixer": "^10.4.21", - "concurrently": "^9.2.1", - "dotenv": "^17.2.2", - "esbuild": "^0.25.10", - "globals": "^16.4.0", - "postcss": "^8.5.6", - "prettier": "^3.6.2", - "sass": "~1.70.0", - "standard-version": "^9.5.0", - "type-fest": "^4.41.0", - "typescript": "~5.9.2", - "vite": "^7.1.7", - "vite-plugin-package-version": "^1.1.0" - } -} diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml deleted file mode 100644 index a8738b891..000000000 --- a/web/pnpm-lock.yaml +++ /dev/null @@ -1,5979 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@floating-ui/react': - specifier: ^0.27.16 - version: 0.27.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@github/webauthn-json': - specifier: ^2.1.1 - version: 2.1.1 - '@hookform/resolvers': - specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.63.0(react@19.1.1)) - '@react-hook/resize-observer': - specifier: ^2.0.2 - version: 2.0.2(react@19.1.1) - '@react-rxjs/core': - specifier: ^0.10.8 - version: 0.10.8(react@19.1.1)(rxjs@7.8.2) - '@stablelib/base64': - specifier: ^2.0.1 - version: 2.0.1 - '@stablelib/x25519': - specifier: ^2.0.1 - version: 2.0.1 - '@tanstack/query-core': - specifier: ^5.90.2 - version: 5.90.2 - '@tanstack/react-query': - specifier: ^5.90.2 - version: 5.90.2(react@19.1.1) - '@tanstack/react-virtual': - specifier: 3.13.12 - version: 3.13.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/virtual-core': - specifier: 3.13.12 - version: 3.13.12 - '@use-gesture/react': - specifier: ^10.3.1 - version: 10.3.1(react@19.1.1) - axios: - specifier: ^1.12.2 - version: 1.12.2 - byte-size: - specifier: ^9.0.1 - version: 9.0.1 - classnames: - specifier: ^2.5.1 - version: 2.5.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - dayjs: - specifier: ^1.11.18 - version: 1.11.18 - deepmerge-ts: - specifier: ^7.1.5 - version: 7.1.5 - detect-browser: - specifier: ^5.3.0 - version: 5.3.0 - dice-coefficient: - specifier: ^2.1.1 - version: 2.1.1 - events: - specifier: ^3.3.0 - version: 3.3.0 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - file-saver: - specifier: ^2.0.5 - version: 2.0.5 - fuse.js: - specifier: ^7.1.0 - version: 7.1.0 - get-text-width: - specifier: ^1.0.3 - version: 1.0.3 - hex-rgb: - specifier: ^5.0.0 - version: 5.0.0 - html-react-parser: - specifier: ^5.2.6 - version: 5.2.6(@types/react@19.1.13)(react@19.1.1) - humanize-duration: - specifier: ^3.33.1 - version: 3.33.1 - ipaddr.js: - specifier: ^2.2.0 - version: 2.2.0 - itertools: - specifier: ^2.5.0 - version: 2.5.0 - js-base64: - specifier: ^3.7.8 - version: 3.7.8 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 - merge-refs: - specifier: ^2.0.0 - version: 2.0.0(@types/react@19.1.13) - millify: - specifier: ^6.1.0 - version: 6.1.0 - motion: - specifier: ^12.23.22 - version: 12.23.22(@emotion/is-prop-valid@1.4.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - numbro: - specifier: ^2.5.0 - version: 2.5.0 - qrcode: - specifier: ^1.5.4 - version: 1.5.4 - qs: - specifier: ^6.14.0 - version: 6.14.0 - radash: - specifier: ^12.1.1 - version: 12.1.1 - react: - specifier: ^19.1.1 - version: 19.1.1 - react-click-away-listener: - specifier: ^2.4.0 - version: 2.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-datepicker: - specifier: ^8.7.0 - version: 8.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-dom: - specifier: ^19.1.1 - version: 19.1.1(react@19.1.1) - react-hook-form: - specifier: ^7.63.0 - version: 7.63.0(react@19.1.1) - react-idle-timer: - specifier: ^5.7.2 - version: 5.7.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-intersection-observer: - specifier: ^9.16.0 - version: 9.16.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-is: - specifier: ^19.1.1 - version: 19.1.1 - react-loading-skeleton: - specifier: ^3.5.0 - version: 3.5.0(react@19.1.1) - react-markdown: - specifier: ^10.1.0 - version: 10.1.0(@types/react@19.1.13)(react@19.1.1) - react-qr-code: - specifier: ^2.0.18 - version: 2.0.18(react@19.1.1) - react-resize-detector: - specifier: ^12.3.0 - version: 12.3.0(react@19.1.1) - react-router: - specifier: ^6.30.1 - version: 6.30.1(react@19.1.1) - react-router-dom: - specifier: ^6.30.1 - version: 6.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-tracked: - specifier: ^2.0.1 - version: 2.0.1(react@19.1.1)(scheduler@0.26.0) - react-virtualized-auto-sizer: - specifier: ^1.0.26 - version: 1.0.26(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - recharts: - specifier: ^3.2.1 - version: 3.2.1(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1) - rehype-external-links: - specifier: ^3.0.0 - version: 3.0.0 - rehype-raw: - specifier: ^7.0.0 - version: 7.0.0 - rehype-sanitize: - specifier: ^6.0.0 - version: 6.0.0 - rxjs: - specifier: ^7.8.2 - version: 7.8.2 - scheduler: - specifier: ^0.26.0 - version: 0.26.0 - text-case: - specifier: ^1.2.9 - version: 1.2.9 - typesafe-i18n: - specifier: ^5.26.2 - version: 5.26.2(typescript@5.9.2) - use-breakpoint: - specifier: ^4.0.6 - version: 4.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - zod: - specifier: ^3.25.76 - version: 3.25.76 - zustand: - specifier: ^5.0.8 - version: 5.0.8(@types/react@19.1.13)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) - devDependencies: - '@babel/core': - specifier: ^7.28.4 - version: 7.28.4 - '@biomejs/biome': - specifier: 2.2.2 - version: 2.2.2 - '@csstools/css-parser-algorithms': - specifier: ^3.0.5 - version: 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': - specifier: ^3.0.4 - version: 3.0.4 - '@hookform/devtools': - specifier: ^4.4.0 - version: 4.4.0(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/react-query-devtools': - specifier: ^5.90.2 - version: 5.90.2(@tanstack/react-query@5.90.2(react@19.1.1))(react@19.1.1) - '@types/byte-size': - specifier: ^8.1.2 - version: 8.1.2 - '@types/file-saver': - specifier: ^2.0.7 - version: 2.0.7 - '@types/humanize-duration': - specifier: ^3.27.4 - version: 3.27.4 - '@types/lodash-es': - specifier: ^4.17.12 - version: 4.17.12 - '@types/node': - specifier: ^24.5.2 - version: 24.5.2 - '@types/qs': - specifier: ^6.14.0 - version: 6.14.0 - '@types/react': - specifier: ^19.1.13 - version: 19.1.13 - '@types/react-dom': - specifier: ^19.1.9 - version: 19.1.9(@types/react@19.1.13) - '@types/react-router-dom': - specifier: ^5.3.3 - version: 5.3.3 - '@vitejs/plugin-react-swc': - specifier: ^4.1.0 - version: 4.1.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1)) - autoprefixer: - specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.6) - concurrently: - specifier: ^9.2.1 - version: 9.2.1 - dotenv: - specifier: ^17.2.2 - version: 17.2.2 - esbuild: - specifier: ^0.25.10 - version: 0.25.10 - globals: - specifier: ^16.4.0 - version: 16.4.0 - postcss: - specifier: ^8.5.6 - version: 8.5.6 - prettier: - specifier: ^3.6.2 - version: 3.6.2 - sass: - specifier: ~1.70.0 - version: 1.70.0 - standard-version: - specifier: ^9.5.0 - version: 9.5.0 - type-fest: - specifier: ^4.41.0 - version: 4.41.0 - typescript: - specifier: ~5.9.2 - version: 5.9.2 - vite: - specifier: ^7.1.7 - version: 7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1) - vite-plugin-package-version: - specifier: ^1.1.0 - version: 1.1.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1)) - -packages: - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - - '@biomejs/biome@2.2.2': - resolution: {integrity: sha512-j1omAiQWCkhuLgwpMKisNKnsM6W8Xtt1l0WZmqY/dFj8QPNkIoTvk4tSsi40FaAAkBE1PU0AFG2RWFBWenAn+w==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.2.2': - resolution: {integrity: sha512-6ePfbCeCPryWu0CXlzsWNZgVz/kBEvHiPyNpmViSt6A2eoDf4kXs3YnwQPzGjy8oBgQulrHcLnJL0nkCh80mlQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.2.2': - resolution: {integrity: sha512-Tn4JmVO+rXsbRslml7FvKaNrlgUeJot++FkvYIhl1OkslVCofAtS35MPlBMhXgKWF9RNr9cwHanrPTUUXcYGag==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.2.2': - resolution: {integrity: sha512-/MhYg+Bd6renn6i1ylGFL5snYUn/Ct7zoGVKhxnro3bwekiZYE8Kl39BSb0MeuqM+72sThkQv4TnNubU9njQRw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@2.2.2': - resolution: {integrity: sha512-JfrK3gdmWWTh2J5tq/rcWCOsImVyzUnOS2fkjhiYKCQ+v8PqM+du5cfB7G1kXas+7KQeKSWALv18iQqdtIMvzw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@2.2.2': - resolution: {integrity: sha512-ZCLXcZvjZKSiRY/cFANKg+z6Fhsf9MHOzj+NrDQcM+LbqYRT97LyCLWy2AS+W2vP+i89RyRM+kbGpUzbRTYWig==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@2.2.2': - resolution: {integrity: sha512-Ogb+77edO5LEP/xbNicACOWVLt8mgC+E1wmpUakr+O4nKwLt9vXe74YNuT3T1dUBxC/SnrVmlzZFC7kQJEfquQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@2.2.2': - resolution: {integrity: sha512-wBe2wItayw1zvtXysmHJQoQqXlTzHSpQRyPpJKiNIR21HzH/CrZRDFic1C1jDdp+zAPtqhNExa0owKMbNwW9cQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.2.2': - resolution: {integrity: sha512-DAuHhHekGfiGb6lCcsT4UyxQmVwQiBCBUMwVra/dcOSs9q8OhfaZgey51MlekT3p8UwRqtXQfFuEJBhJNdLZwg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/is-prop-valid@1.4.0': - resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/styled@11.14.1': - resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - - '@esbuild/aix-ppc64@0.25.10': - resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.10': - resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.10': - resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.10': - resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.10': - resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.10': - resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.10': - resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.10': - resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.10': - resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.10': - resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.10': - resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.10': - resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.10': - resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.10': - resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.10': - resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.10': - resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.10': - resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.10': - resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.10': - resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.10': - resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.10': - resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.10': - resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.10': - resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.10': - resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.10': - resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.10': - resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.27.16': - resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@github/webauthn-json@2.1.1': - resolution: {integrity: sha512-XrftRn4z75SnaJOmZQbt7Mk+IIjqVHw+glDGOxuHwXkZBZh/MBoRS7MHjSZMDaLhT4RjN2VqiEU7EOYleuJWSQ==} - deprecated: 'Deprecated: Modern browsers support built-in WebAuthn JSON methods. Please use native browser methods instead. For more information, visit https://github.com/github/webauthn-json' - hasBin: true - - '@hookform/devtools@4.4.0': - resolution: {integrity: sha512-Mtlic+uigoYBPXlfvPBfiYYUZuyMrD3pTjDpVIhL6eCZTvQkHsKBSKeZCvXWUZr8fqrkzDg27N+ZuazLKq6Vmg==} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: ^16.8.0 || ^17 || ^18 || ^19 - - '@hookform/resolvers@5.2.2': - resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} - peerDependencies: - react-hook-form: ^7.55.0 - - '@hutson/parse-repository-url@3.0.2': - resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} - engines: {node: '>=6.9.0'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@react-hook/latest@1.0.3': - resolution: {integrity: sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==} - peerDependencies: - react: '>=16.8' - - '@react-hook/passive-layout-effect@1.2.1': - resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} - peerDependencies: - react: '>=16.8' - - '@react-hook/resize-observer@2.0.2': - resolution: {integrity: sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA==} - peerDependencies: - react: '>=18' - - '@react-rxjs/core@0.10.8': - resolution: {integrity: sha512-vCA7dDpJ7whvBJCerCqY5wvrPnIo4EvxYihQNuDy0u0OhN4kYafs2H755sMLeUXBwSihiskd9Z3v8SHpmcEdzQ==} - peerDependencies: - react: '>=16.8.0' - rxjs: '>=7' - - '@reduxjs/toolkit@2.9.0': - resolution: {integrity: sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 || ^19 - react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true - - '@remix-run/router@1.23.0': - resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} - engines: {node: '>=14.0.0'} - - '@rolldown/pluginutils@1.0.0-beta.35': - resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} - - '@rollup/rollup-android-arm-eabi@4.52.2': - resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.52.2': - resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.52.2': - resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.52.2': - resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.52.2': - resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.52.2': - resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.52.2': - resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.52.2': - resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.52.2': - resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.52.2': - resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.52.2': - resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.52.2': - resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.52.2': - resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.52.2': - resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.52.2': - resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.52.2': - resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.52.2': - resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openharmony-arm64@4.52.2': - resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.52.2': - resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.52.2': - resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.52.2': - resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.52.2': - resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==} - cpu: [x64] - os: [win32] - - '@rx-state/core@0.1.4': - resolution: {integrity: sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ==} - peerDependencies: - rxjs: '>=7' - - '@stablelib/base64@2.0.1': - resolution: {integrity: sha512-P2z89A7N1ETt6RxgpVdDT2xlg8cnm3n6td0lY9gyK7EiWK3wdq388yFX/hLknkCC0we05OZAD1rfxlQJUbl5VQ==} - - '@stablelib/binary@2.0.1': - resolution: {integrity: sha512-U9iAO8lXgEDONsA0zPPSgcf3HUBNAqHiJmSHgZz62OvC3Hi2Bhc5kTnQ3S1/L+sthDTHtCMhcEiklmIly6uQ3w==} - - '@stablelib/bytes@2.0.1': - resolution: {integrity: sha512-QIzI6V7nkJA5CjOZ7GoceBd4CIKrJoC471VaI6jh1xPQ2cMhkhQK4HddyzCXOR2y+fBF3/5B2HO3FXXI9C+Xzg==} - - '@stablelib/int@2.0.1': - resolution: {integrity: sha512-Ht63fQp3wz/F8U4AlXEPb7hfJOIILs8Lq55jgtD7KueWtyjhVuzcsGLSTAWtZs3XJDZYdF1WcSKn+kBtbzupww==} - - '@stablelib/keyagreement@2.0.1': - resolution: {integrity: sha512-2+tWBLCMtWlHQ7GqjD5L+lQRyWtun4Lou0IOdTML8zuTuAS0EgihnHFx+4uMZwYU1In40J/WlpyKSLidHfStRQ==} - - '@stablelib/random@2.0.1': - resolution: {integrity: sha512-W6GAtXEEs7r+dSbuBsvoFmlyL3gLxle41tQkjKu17dDWtDdjhVUbtRfRCQcCUeczwkgjQxMPopgwYEvxXtHXGw==} - - '@stablelib/wipe@2.0.1': - resolution: {integrity: sha512-1eU2K9EgOcV4qc9jcP6G72xxZxEm5PfeI5H55l08W95b4oRJaqhmlWRc4xZAm6IVSKhVNxMi66V67hCzzuMTAg==} - - '@stablelib/x25519@2.0.1': - resolution: {integrity: sha512-qi04HS2puHaBf50kM/kes5QcZFGsx8yF0YmCjLCOa/LPmnBaKEKX9ZR82OnnCwMn72YH13R/bBZgr/UP0aPFfA==} - - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - - '@swc/core-darwin-arm64@1.13.19': - resolution: {integrity: sha512-NxDyte9tCJSJ8+R62WDtqwg8eI57lubD52sHyGOfezpJBOPr36bUSGGLyO3Vod9zTGlOu2CpkuzA/2iVw92u1g==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.13.19': - resolution: {integrity: sha512-+w5DYrJndSygFFRDcuPYmx5BljD6oYnAohZ15K1L6SfORHp/BTSIbgSFRKPoyhjuIkDiq3W0um8RoMTOBAcQjQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.13.19': - resolution: {integrity: sha512-7LlfgpdwwYq2q7himNkAAFo4q6jysMLFNoBH6GRP7WL29NcSsl5mPMJjmYZymK+sYq/9MTVieDTQvChzYDsapw==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.13.19': - resolution: {integrity: sha512-ml3I6Lm2marAQ3UC/TS9t/yILBh/eDSVHAdPpikp652xouWAVW1znUeV6bBSxe1sSZIenv+p55ubKAWq/u84sQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.13.19': - resolution: {integrity: sha512-M/otFc3/rWWkbF6VgbOXVzUKVoE7MFcphTaStxJp4bwb7oP5slYlxMZN51Dk/OTOfvCDo9pTAFDKNyixbkXMDQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.13.19': - resolution: {integrity: sha512-NoMUKaOJEdouU4tKF88ggdDHFiRRING+gYLxDqnTfm+sUXaizB5OGBRzvSVDYSXQb1SuUuChnXFPFzwTWbt3ZQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.13.19': - resolution: {integrity: sha512-r6krlZwyu8SBaw24QuS1lau2I9q8M+eJV6ITz0rpb6P1Bx0elf9ii5Bhh8ddmIqXXH8kOGSjC/dwcdHbZqAhgw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.13.19': - resolution: {integrity: sha512-awcZSIuxyVn0Dw28VjMvgk1qiDJ6CeQwHkZNUjg2UxVlq23zE01NMMp+zkoGFypmLG9gaGmJSzuoqvk/WCQ5tw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.13.19': - resolution: {integrity: sha512-H5d+KO7ISoLNgYvTbOcCQjJZNM3R7yaYlrMAF13lUr6GSiOUX+92xtM31B+HvzAWI7HtvVe74d29aC1b1TpXFA==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.13.19': - resolution: {integrity: sha512-qNoyCpXvv2O3JqXKanRIeoMn03Fho/As+N4Fhe7u0FsYh4VYqGQah4DGDzEP/yjl4Gx1IElhqLGDhCCGMwWaDw==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.13.19': - resolution: {integrity: sha512-V1r4wFdjaZIUIZZrV2Mb/prEeu03xvSm6oatPxsvnXKF9lNh5Jtk9QvUdiVfD9rrvi7bXrAVhg9Wpbmv/2Fl1g==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.25': - resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - - '@tanstack/query-core@5.90.2': - resolution: {integrity: sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==} - - '@tanstack/query-devtools@5.90.1': - resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} - - '@tanstack/react-query-devtools@5.90.2': - resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} - peerDependencies: - '@tanstack/react-query': ^5.90.2 - react: ^18 || ^19 - - '@tanstack/react-query@5.90.2': - resolution: {integrity: sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==} - peerDependencies: - react: ^18 || ^19 - - '@tanstack/react-virtual@3.13.12': - resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/virtual-core@3.13.12': - resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} - - '@types/byte-size@8.1.2': - resolution: {integrity: sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==} - - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-shape@3.1.7': - resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/file-saver@2.0.7': - resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/history@4.7.11': - resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - - '@types/humanize-duration@3.27.4': - resolution: {integrity: sha512-yaf7kan2Sq0goxpbcwTQ+8E9RP6HutFBPv74T/IA/ojcHKhuKVlk2YFYyHhWZeLvZPzzLE3aatuQB4h0iqyyUA==} - - '@types/lodash-es@4.17.12': - resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@24.5.2': - resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} - - '@types/react-dom@19.1.9': - resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} - peerDependencies: - '@types/react': ^19.0.0 - - '@types/react-router-dom@5.3.3': - resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} - - '@types/react-router@5.1.20': - resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - - '@types/react@19.1.13': - resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@use-gesture/core@10.3.1': - resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} - - '@use-gesture/react@10.3.1': - resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==} - peerDependencies: - react: '>= 16.8.0' - - '@vitejs/plugin-react-swc@4.1.0': - resolution: {integrity: sha512-Ff690TUck0Anlh7wdIcnsVMhofeEVgm44Y4OYdeeEEPSKyZHzDI9gfVBvySEhDfXtBp8tLCbfsVKPWEMEjq8/g==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4 || ^5 || ^6 || ^7 - - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - add-stream@1.0.0: - resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - axios@1.12.2: - resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - baseline-browser-mapping@2.8.7: - resolution: {integrity: sha512-bxxN2M3a4d1CRoQC//IqsR5XrLh0IJ8TCv2x6Y9N0nckNz/rTjZB3//GGscZziZOxmjP55rzxg/ze7usFI9FqQ==} - hasBin: true - - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.26.2: - resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - byte-size@9.0.1: - resolution: {integrity: sha512-YLe9x3rabBrcI0cueCdLS2l5ONUKywcRpTs02B8KP9/Cimhj7o3ZccGrPnRvcbyHMbb7W79/3MUJl7iGgTXKEw==} - engines: {node: '>=12.17'} - peerDependencies: - '@75lb/nature': latest - peerDependenciesMeta: - '@75lb/nature': - optional: true - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001745: - resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-stream@2.0.0: - resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} - engines: {'0': node >= 6.0} - - concurrently@9.2.1: - resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} - engines: {node: '>=18'} - hasBin: true - - conventional-changelog-angular@5.0.13: - resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} - engines: {node: '>=10'} - - conventional-changelog-atom@2.0.8: - resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} - engines: {node: '>=10'} - - conventional-changelog-codemirror@2.0.8: - resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} - engines: {node: '>=10'} - - conventional-changelog-config-spec@2.1.0: - resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} - - conventional-changelog-conventionalcommits@4.6.3: - resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} - engines: {node: '>=10'} - - conventional-changelog-core@4.2.4: - resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} - engines: {node: '>=10'} - - conventional-changelog-ember@2.0.9: - resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} - engines: {node: '>=10'} - - conventional-changelog-eslint@3.0.9: - resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} - engines: {node: '>=10'} - - conventional-changelog-express@2.0.6: - resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} - engines: {node: '>=10'} - - conventional-changelog-jquery@3.0.11: - resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} - engines: {node: '>=10'} - - conventional-changelog-jshint@2.0.9: - resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} - engines: {node: '>=10'} - - conventional-changelog-preset-loader@2.3.4: - resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} - engines: {node: '>=10'} - - conventional-changelog-writer@5.0.1: - resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} - engines: {node: '>=10'} - hasBin: true - - conventional-changelog@3.1.25: - resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} - engines: {node: '>=10'} - - conventional-commits-filter@2.0.7: - resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} - engines: {node: '>=10'} - - conventional-commits-parser@3.2.4: - resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} - engines: {node: '>=10'} - hasBin: true - - conventional-recommended-bump@6.1.0: - resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} - engines: {node: '>=10'} - hasBin: true - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - dateformat@3.0.3: - resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} - - dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decimal.js-light@2.5.1: - resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - - deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-browser@5.3.0: - resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - dice-coefficient@2.1.1: - resolution: {integrity: sha512-vPTcHmOQAuGvU6eyBtj7QCBwDJh2I7QpbBU51lbgfv7592KjBl6dm0baRBSh9ekt2X91MNAz7OpJrXCIUtDzlw==} - hasBin: true - - dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - - dotenv@17.2.2: - resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==} - engines: {node: '>=12'} - - dotgitignore@2.1.0: - resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} - engines: {node: '>=6'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - electron-to-chromium@1.5.224: - resolution: {integrity: sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-toolkit@1.39.10: - resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} - - esbuild@0.25.10: - resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - - file-saver@2.0.5: - resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - framer-motion@12.23.22: - resolution: {integrity: sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - fuse.js@7.1.0: - resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} - engines: {node: '>=10'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-pkg-repo@4.2.1: - resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} - engines: {node: '>=6.9.0'} - hasBin: true - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-text-width@1.0.3: - resolution: {integrity: sha512-kv1MaexPcR/qaZ4kN8sUDjG5pRp5ptHvxcDGDBTeGld1cmo7MnlCMH22jevyvs/VV7Ran203o7qAOq2+kWw9cA==} - - git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true - - git-remote-origin-url@2.0.0: - resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} - engines: {node: '>=4'} - - git-semver-tags@4.1.1: - resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} - engines: {node: '>=10'} - hasBin: true - - gitconfiglocal@1.0.0: - resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} - engines: {node: '>=18'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - - hast-util-sanitize@5.0.2: - resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - hex-rgb@5.0.0: - resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==} - engines: {node: '>=12'} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - html-dom-parser@5.1.1: - resolution: {integrity: sha512-+o4Y4Z0CLuyemeccvGN4bAO20aauB2N9tFEAep5x4OW34kV4PTarBHm6RL02afYt2BMKcr0D2Agep8S3nJPIBg==} - - html-react-parser@5.2.6: - resolution: {integrity: sha512-qcpPWLaSvqXi+TndiHbCa+z8qt0tVzjMwFGFBAa41ggC+ZA5BHaMIeMJla9g3VSp4SmiZb9qyQbmbpHYpIfPOg==} - peerDependencies: - '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 - react: 0.14 || 15 || 16 || 17 || 18 || 19 - peerDependenciesMeta: - '@types/react': - optional: true - - html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} - - humanize-duration@3.33.1: - resolution: {integrity: sha512-hwzSCymnRdFx9YdRkQQ0OYequXiVAV6ZGQA2uzocwB0F4309Ke6pO8dg0P8LHhRQJyVjGteRTAA/zNfEcpXn8A==} - - immer@10.1.3: - resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} - - immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - - is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-text-path@1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - itertools@2.5.0: - resolution: {integrity: sha512-4ghJEXkRGkw4veNQhfO0cLY8+zePMXbe9wGt3ckSVFtrQVyyoKCUESaG2HsjuEfidVtuIEj1Dt1BlmTL3GUWFg==} - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - little-state-machine@4.8.1: - resolution: {integrity: sha512-liPHqaWMQ7rzZryQUDnbZ1Gclnnai3dIyaJ0nAgwZRXMzqbYrydrlCI0NDojRUbE5VYh5vu6hygEUZiH77nQkQ==} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.ismatch@4.4.0: - resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} - - merge-refs@2.0.0: - resolution: {integrity: sha512-3+B21mYK2IqUWnd2EivABLT7ueDhb0b8/dGK8LoFQPrU61YITeCMn14F7y7qZafWNZhUEKb24cJdiT5Wxs3prg==} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - millify@6.1.0: - resolution: {integrity: sha512-H/E3J6t+DQs/F2YgfDhxUVZz/dF8JXPPKTLHL/yHCcLZLtCXJDUaqvhJXQwqOVBvbyNn4T0WjLpIHd7PAw7fBA==} - hasBin: true - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - modify-values@1.0.1: - resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} - engines: {node: '>=0.10.0'} - - motion-dom@12.23.21: - resolution: {integrity: sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ==} - - motion-utils@12.23.6: - resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} - - motion@12.23.22: - resolution: {integrity: sha512-iSq6X9vLHbeYwmHvhK//+U74ROaPnZmBuy60XZzqNl0QtZkWfoZyMDHYnpKuWFv0sNMqHgED8aCXk94LCoQPGg==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - n-gram@2.0.2: - resolution: {integrity: sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - node-releases@2.0.21: - resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - numbro@2.5.0: - resolution: {integrity: sha512-xDcctDimhzko/e+y+Q2/8i3qNC9Svw1QgOkSkQoO0kIPI473tR9QRbo2KP88Ty9p8WbPy+3OpTaAIzehtuHq+A==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - - pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - - proxy-compare@3.0.1: - resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - deprecated: |- - You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - - qr.js@0.0.0: - resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} - - qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} - hasBin: true - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - - radash@12.1.1: - resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} - engines: {node: '>=14.18.0'} - - react-click-away-listener@2.4.0: - resolution: {integrity: sha512-jDkXY8Q9qM8e197K7c7AoVhhk2meQO5POyjRJrKN2vUQUvIef49h/paM3JA6q+lf+JygDy9ENOBOsZalARUIeg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react-datepicker@8.7.0: - resolution: {integrity: sha512-r5OJbiLWc3YiVNy69Kau07/aVgVGsFVMA6+nlqCV7vyQ8q0FUOnJ+wAI4CgVxHejG3i5djAEiebrF8/Eip4rIw==} - peerDependencies: - react: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc - - react-dom@19.1.1: - resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} - peerDependencies: - react: ^19.1.1 - - react-hook-form@7.63.0: - resolution: {integrity: sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-idle-timer@5.7.2: - resolution: {integrity: sha512-+BaPfc7XEUU5JFkwZCx6fO1bLVK+RBlFH+iY4X34urvIzZiZINP6v2orePx3E6pAztJGE7t4DzvL7if2SL/0GQ==} - peerDependencies: - react: '>=16' - react-dom: '>=16' - - react-intersection-observer@9.16.0: - resolution: {integrity: sha512-w9nJSEp+DrW9KmQmeWHQyfaP6b03v+TdXynaoA964Wxt7mdR3An11z4NNCQgL4gKSK7y1ver2Fq+JKH6CWEzUA==} - peerDependencies: - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - react-dom: - optional: true - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@19.1.1: - resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} - - react-loading-skeleton@3.5.0: - resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==} - peerDependencies: - react: '>=16.8.0' - - react-markdown@10.1.0: - resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' - - react-property@2.0.2: - resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} - - react-qr-code@2.0.18: - resolution: {integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==} - peerDependencies: - react: '*' - - react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} - peerDependencies: - '@types/react': ^18.2.25 || ^19 - react: ^18.0 || ^19 - redux: ^5.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - redux: - optional: true - - react-resize-detector@12.3.0: - resolution: {integrity: sha512-mIDOVrTHKGnKe6qEUWi8dFdfHM5CPyTOpqoHctdMQf89Ljm/0qqDIzkP3vTRZZJi9/raaMiRxDEOqO4you5x+A==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - - react-router-dom@6.30.1: - resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.30.1: - resolution: {integrity: sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - - react-simple-animate@3.5.3: - resolution: {integrity: sha512-Ob+SmB5J1tXDEZyOe2Hf950K4M8VaWBBmQ3cS2BUnTORqHjhK0iKG8fB+bo47ZL15t8d3g/Y0roiqH05UBjG7A==} - peerDependencies: - react-dom: ^16.8.0 || ^17 || ^18 || ^19 - - react-tracked@2.0.1: - resolution: {integrity: sha512-qjbmtkO2IcW+rB2cFskRWDTjKs/w9poxvNnduacjQA04LWxOoLy9J8WfIEq1ahifQ/tVJQECrQPBm+UEzKRDtg==} - peerDependencies: - react: '>=18.0.0' - scheduler: '>=0.19.0' - - react-virtualized-auto-sizer@1.0.26: - resolution: {integrity: sha512-CblNyiNVw2o+hsa5/49NH2ogGxZ+t+3aweRvNSq7TVjDIlwk7ir4lencEg5HxHeSzwNarSkNkiu0qJSOXtxm5A==} - peerDependencies: - react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react@19.1.1: - resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} - engines: {node: '>=0.10.0'} - - read-pkg-up@3.0.0: - resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} - engines: {node: '>=4'} - - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - recharts@3.2.1: - resolution: {integrity: sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw==} - engines: {node: '>=18'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - redux-thunk@3.1.0: - resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} - peerDependencies: - redux: ^5.0.0 - - redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - - rehype-external-links@3.0.0: - resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - rehype-sanitize@6.0.0: - resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - reselect@5.1.1: - resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - rollup@4.52.2: - resolution: {integrity: sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - sass@1.70.0: - resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} - - split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - - split@1.0.1: - resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} - - standard-version@9.5.0: - resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==} - engines: {node: '>=10'} - hasBin: true - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - stringify-package@1.0.1: - resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==} - deprecated: This module is not used anymore, and has been replaced by @npmcli/package-json - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - style-to-js@1.1.17: - resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} - - style-to-object@1.0.9: - resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} - - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - - terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} - engines: {node: '>=10'} - hasBin: true - - text-camel-case@1.2.9: - resolution: {integrity: sha512-wKYs9SgRxYizJE1mneR7BbLNlGw2IYzJAS8XwkWIry0CTbO1gvvPkFsx5Z1/hr+VqUaBqx9q3yKd30HpZLdMsQ==} - - text-capital-case@1.2.9: - resolution: {integrity: sha512-X5zV8U8pxtq2xS2t46lgAWqZdDbgWMKq03MQSNwY2CJdQCsdTNh144E2Q/q9wBxWzSBUXn+jRc9kF+Gs8/pGhA==} - - text-case@1.2.9: - resolution: {integrity: sha512-zZVdA8rMcjx9zhekdUuOPZShc25UTV7W8/ddKbgbPtfCEvIiToPtWiSd2lXLSuiGMovNhJ4+Tw49xll9o9ts+Q==} - - text-constant-case@1.2.9: - resolution: {integrity: sha512-Vosm6nC7Gag+JFakJHwqS9AXRNgl07j5KZ7srU9cYuKRzYwrxzeJ4RpEogRBNHw7CfmOm0j5FGEznblWtu7pIw==} - - text-dot-case@1.2.9: - resolution: {integrity: sha512-N83hsnvGdSO9q9AfNSB9Cy1LFDNN2MCx53LcxtaPoDWPUTk47fv0JlvIY1tgY0wyzCiThF03kVj3jworvAOScA==} - - text-extensions@1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - - text-header-case@1.2.9: - resolution: {integrity: sha512-TqryEKcYisQAfWLbtT3xPnZlMZ/mySO1uS+LUg+B0eNuqgETrSzVpXIUj5E6Zf/EyJHgpZf4VndbAXtOMJuT4w==} - - text-is-lower-case@1.2.9: - resolution: {integrity: sha512-cEurrWSnYVYqL8FSwl5cK4mdfqF7qNDCcKJgXI3NnfTesiB8umxAhdlQoErrRYI1xEvYr2WN0MI333EehUhQjg==} - - text-is-upper-case@1.2.9: - resolution: {integrity: sha512-HxsWr3VCsXXiLlhD0c+Ey+mS2lOTCiSJbkepjaXNHl2bp33KiscQaiG0qLwQmmpZQm4SJCg2s9FkndxS0RNDLQ==} - - text-kebab-case@1.2.9: - resolution: {integrity: sha512-nOUyNR5Ej2B9D/wyyXfwUEv26+pQuOb1pEX+ojE37mCIWo8QeOxw5y6nxuqDmG7NrEPzbO6265UMV+EICH13Cw==} - - text-lower-case-first@1.2.9: - resolution: {integrity: sha512-iiphHTV7PVH0MljrEQUA9iBE7jfDpXoi4RQju3WzZU3BRVbS6540cNZgxR19hWa0z6z/7cJTH0Ls9LPBaiUfKg==} - - text-lower-case@1.2.9: - resolution: {integrity: sha512-53AOnDrhPpiAUQkgY1SHleKUXp/u7GsqRX13NcCREZscmtjLLJ099uxMRjkK7q2KwHkFYVPl9ytkQlTkTQLS0w==} - - text-no-case@1.2.9: - resolution: {integrity: sha512-IcCt328KaapimSrytP4ThfC8URmHZb2DgOqCL9BYvGjpxY2lDiqCkIQk9sClZtwcELs2gTnq83a7jNc573FTLA==} - - text-param-case@1.2.9: - resolution: {integrity: sha512-nR/Ju9amY3aQS1en2CUCgqN/ZiZIVdDyjlJ3xX5J92ChBevGuA4o9K10fh3JGMkbzK97Vcb+bWQJ4Q+Svz+GyQ==} - - text-pascal-case@1.2.9: - resolution: {integrity: sha512-o6ZxMGjWDTUW54pcghpXes+C2PqbYRMdU5mHrIhueb6z6nq1NueiIOeCUdrSjN/3wXfhCmnFjK7/d9aRGZNqSg==} - - text-path-case@1.2.9: - resolution: {integrity: sha512-s8cJ6r5TkJp5ticXMgtxd7f12odEN4d1CfX5u4aoz6jcUtBR2lDqzIhVimkqWFMJ4UKPSrmilUha8Xc2BPi+ow==} - - text-sentence-case@1.2.9: - resolution: {integrity: sha512-/G/Yi5kZfUa1edFRV4O3lGZAkbDZTFvlwW8CYfH7szkEGe2k2MYEYbOyAkGRVQEGV6V6JiuUAaP3VS9c1tB6nQ==} - - text-snake-case@1.2.9: - resolution: {integrity: sha512-+ZrqK19ynF/TLQZ7ynqVrL2Dy04uu9syYZwsm8PhzUdsY3XrwPy6QiRqhIEFqhyWbShPcfyfmheer5UEQqFxlw==} - - text-swap-case@1.2.9: - resolution: {integrity: sha512-g5fp12ldktYKK9wdHRMvvtSCQrZYNv/D+ZGLumDsvAY4q9T5bCMO2IWMkIP1F5gVQrysdHH6Xv877P/pjUq1iw==} - - text-title-case@1.2.9: - resolution: {integrity: sha512-RAtC9cdmPp41ns5/HXZBsaQg71BsHT7uZpj2ojTtuFa8o2dNuRYYOrSmy5YdLRIAJQ6WK5hQVpV3jHuq7a+4Tw==} - - text-upper-case-first@1.2.9: - resolution: {integrity: sha512-wEDD1B6XqJmEV+xEnBJd+2sBCHZ+7fvA/8Rv/o8+dAsp05YWjYP/kjB8sPH6zqzW0s6jtehIg4IlcKjcYxk2CQ==} - - text-upper-case@1.2.9: - resolution: {integrity: sha512-K/0DNT7a4z8eah2spARtoJllTZyrNTo6Uc0ujhN/96Ir9uJ/slpahfs13y46H9osL3daaLl3O7iXOkW4xtX6bg==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - typesafe-i18n@5.26.2: - resolution: {integrity: sha512-2QAriFmiY5JwUAJtG7yufoE/XZ1aFBY++wj7YFS2yo89a3jLBfKoWSdq5JfQYk1V2BS7V2c/u+KEcaCQoE65hw==} - hasBin: true - peerDependencies: - typescript: '>=3.5.1' - - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} - hasBin: true - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - undici-types@7.12.0: - resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - use-breakpoint@4.0.6: - resolution: {integrity: sha512-1s7vUjf36eeZYTgY1KkmPNXrTbKJVRA9cjBFQdYjK8+pDr0qJgH6/cuX5qQ2zcfkqxN5LieVd/DTVK6ofnwRTQ==} - peerDependencies: - react: '>=18' - react-dom: '>=18' - - use-context-selector@2.0.0: - resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} - peerDependencies: - react: '>=18.0.0' - scheduler: '>=0.19.0' - - use-deep-compare-effect@1.8.1: - resolution: {integrity: sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - react: '>=16.13' - - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - victory-vendor@37.3.6: - resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - - vite-plugin-package-version@1.1.0: - resolution: {integrity: sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==} - peerDependencies: - vite: '>=2.0.0-beta.69' - - vite@7.1.7: - resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zustand@5.0.8: - resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.4': {} - - '@babel/core@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.3': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.4 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 - - '@babel/runtime@7.28.4': {} - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - - '@babel/traverse@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.4': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@biomejs/biome@2.2.2': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.2.2 - '@biomejs/cli-darwin-x64': 2.2.2 - '@biomejs/cli-linux-arm64': 2.2.2 - '@biomejs/cli-linux-arm64-musl': 2.2.2 - '@biomejs/cli-linux-x64': 2.2.2 - '@biomejs/cli-linux-x64-musl': 2.2.2 - '@biomejs/cli-win32-arm64': 2.2.2 - '@biomejs/cli-win32-x64': 2.2.2 - - '@biomejs/cli-darwin-arm64@2.2.2': - optional: true - - '@biomejs/cli-darwin-x64@2.2.2': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.2.2': - optional: true - - '@biomejs/cli-linux-arm64@2.2.2': - optional: true - - '@biomejs/cli-linux-x64-musl@2.2.2': - optional: true - - '@biomejs/cli-linux-x64@2.2.2': - optional: true - - '@biomejs/cli-win32-arm64@2.2.2': - optional: true - - '@biomejs/cli-win32-x64@2.2.2': - optional: true - - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-tokenizer@3.0.4': {} - - '@emotion/babel-plugin@11.13.5': - dependencies: - '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.28.4 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.14.0': - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/is-prop-valid@1.4.0': - dependencies: - '@emotion/memoize': 0.9.0 - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.4 - '@emotion/babel-plugin': 11.13.5 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.1.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.4 - '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) - '@emotion/utils': 1.4.2 - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - transitivePeerDependencies: - - supports-color - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.1)': - dependencies: - react: 19.1.1 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.4.0': {} - - '@esbuild/aix-ppc64@0.25.10': - optional: true - - '@esbuild/android-arm64@0.25.10': - optional: true - - '@esbuild/android-arm@0.25.10': - optional: true - - '@esbuild/android-x64@0.25.10': - optional: true - - '@esbuild/darwin-arm64@0.25.10': - optional: true - - '@esbuild/darwin-x64@0.25.10': - optional: true - - '@esbuild/freebsd-arm64@0.25.10': - optional: true - - '@esbuild/freebsd-x64@0.25.10': - optional: true - - '@esbuild/linux-arm64@0.25.10': - optional: true - - '@esbuild/linux-arm@0.25.10': - optional: true - - '@esbuild/linux-ia32@0.25.10': - optional: true - - '@esbuild/linux-loong64@0.25.10': - optional: true - - '@esbuild/linux-mips64el@0.25.10': - optional: true - - '@esbuild/linux-ppc64@0.25.10': - optional: true - - '@esbuild/linux-riscv64@0.25.10': - optional: true - - '@esbuild/linux-s390x@0.25.10': - optional: true - - '@esbuild/linux-x64@0.25.10': - optional: true - - '@esbuild/netbsd-arm64@0.25.10': - optional: true - - '@esbuild/netbsd-x64@0.25.10': - optional: true - - '@esbuild/openbsd-arm64@0.25.10': - optional: true - - '@esbuild/openbsd-x64@0.25.10': - optional: true - - '@esbuild/openharmony-arm64@0.25.10': - optional: true - - '@esbuild/sunos-x64@0.25.10': - optional: true - - '@esbuild/win32-arm64@0.25.10': - optional: true - - '@esbuild/win32-ia32@0.25.10': - optional: true - - '@esbuild/win32-x64@0.25.10': - optional: true - - '@floating-ui/core@1.7.3': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.4': - dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - '@floating-ui/react@0.27.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@floating-ui/utils': 0.2.10 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - tabbable: 6.2.0 - - '@floating-ui/utils@0.2.10': {} - - '@github/webauthn-json@2.1.1': {} - - '@hookform/devtools@4.4.0(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@emotion/react': 11.14.0(@types/react@19.1.13)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) - '@types/lodash': 4.17.20 - little-state-machine: 4.8.1(react@19.1.1) - lodash: 4.17.21 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - react-simple-animate: 3.5.3(react-dom@19.1.1(react@19.1.1)) - use-deep-compare-effect: 1.8.1(react@19.1.1) - uuid: 8.3.2 - transitivePeerDependencies: - - '@types/react' - - supports-color - - '@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@19.1.1))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.63.0(react@19.1.1) - - '@hutson/parse-repository-url@3.0.2': {} - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.11': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - optional: true - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@react-hook/latest@1.0.3(react@19.1.1)': - dependencies: - react: 19.1.1 - - '@react-hook/passive-layout-effect@1.2.1(react@19.1.1)': - dependencies: - react: 19.1.1 - - '@react-hook/resize-observer@2.0.2(react@19.1.1)': - dependencies: - '@react-hook/latest': 1.0.3(react@19.1.1) - '@react-hook/passive-layout-effect': 1.2.1(react@19.1.1) - react: 19.1.1 - - '@react-rxjs/core@0.10.8(react@19.1.1)(rxjs@7.8.2)': - dependencies: - '@rx-state/core': 0.1.4(rxjs@7.8.2) - react: 19.1.1 - rxjs: 7.8.2 - use-sync-external-store: 1.5.0(react@19.1.1) - - '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.1.13)(react@19.1.1)(redux@5.0.1))(react@19.1.1)': - dependencies: - '@standard-schema/spec': 1.0.0 - '@standard-schema/utils': 0.3.0 - immer: 10.1.3 - redux: 5.0.1 - redux-thunk: 3.1.0(redux@5.0.1) - reselect: 5.1.1 - optionalDependencies: - react: 19.1.1 - react-redux: 9.2.0(@types/react@19.1.13)(react@19.1.1)(redux@5.0.1) - - '@remix-run/router@1.23.0': {} - - '@rolldown/pluginutils@1.0.0-beta.35': {} - - '@rollup/rollup-android-arm-eabi@4.52.2': - optional: true - - '@rollup/rollup-android-arm64@4.52.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.52.2': - optional: true - - '@rollup/rollup-darwin-x64@4.52.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.52.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.52.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.52.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.52.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.52.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.52.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.52.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.52.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.52.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.52.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.52.2': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.52.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.52.2': - optional: true - - '@rx-state/core@0.1.4(rxjs@7.8.2)': - dependencies: - rxjs: 7.8.2 - - '@stablelib/base64@2.0.1': {} - - '@stablelib/binary@2.0.1': - dependencies: - '@stablelib/int': 2.0.1 - - '@stablelib/bytes@2.0.1': {} - - '@stablelib/int@2.0.1': {} - - '@stablelib/keyagreement@2.0.1': - dependencies: - '@stablelib/bytes': 2.0.1 - - '@stablelib/random@2.0.1': - dependencies: - '@stablelib/binary': 2.0.1 - '@stablelib/wipe': 2.0.1 - - '@stablelib/wipe@2.0.1': {} - - '@stablelib/x25519@2.0.1': - dependencies: - '@stablelib/keyagreement': 2.0.1 - '@stablelib/random': 2.0.1 - '@stablelib/wipe': 2.0.1 - - '@standard-schema/spec@1.0.0': {} - - '@standard-schema/utils@0.3.0': {} - - '@swc/core-darwin-arm64@1.13.19': - optional: true - - '@swc/core-darwin-x64@1.13.19': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.13.19': - optional: true - - '@swc/core-linux-arm64-gnu@1.13.19': - optional: true - - '@swc/core-linux-arm64-musl@1.13.19': - optional: true - - '@swc/core-linux-x64-gnu@1.13.19': - optional: true - - '@swc/core-linux-x64-musl@1.13.19': - optional: true - - '@swc/core-win32-arm64-msvc@1.13.19': - optional: true - - '@swc/core-win32-ia32-msvc@1.13.19': - optional: true - - '@swc/core-win32-x64-msvc@1.13.19': - optional: true - - '@swc/core@1.13.19': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.13.19 - '@swc/core-darwin-x64': 1.13.19 - '@swc/core-linux-arm-gnueabihf': 1.13.19 - '@swc/core-linux-arm64-gnu': 1.13.19 - '@swc/core-linux-arm64-musl': 1.13.19 - '@swc/core-linux-x64-gnu': 1.13.19 - '@swc/core-linux-x64-musl': 1.13.19 - '@swc/core-win32-arm64-msvc': 1.13.19 - '@swc/core-win32-ia32-msvc': 1.13.19 - '@swc/core-win32-x64-msvc': 1.13.19 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.25': - dependencies: - '@swc/counter': 0.1.3 - - '@tanstack/query-core@5.90.2': {} - - '@tanstack/query-devtools@5.90.1': {} - - '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.2(react@19.1.1))(react@19.1.1)': - dependencies: - '@tanstack/query-devtools': 5.90.1 - '@tanstack/react-query': 5.90.2(react@19.1.1) - react: 19.1.1 - - '@tanstack/react-query@5.90.2(react@19.1.1)': - dependencies: - '@tanstack/query-core': 5.90.2 - react: 19.1.1 - - '@tanstack/react-virtual@3.13.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@tanstack/virtual-core': 3.13.12 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - '@tanstack/virtual-core@3.13.12': {} - - '@types/byte-size@8.1.2': {} - - '@types/d3-array@3.2.2': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-shape@3.1.7': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.8 - - '@types/estree@1.0.8': {} - - '@types/file-saver@2.0.7': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/history@4.7.11': {} - - '@types/humanize-duration@3.27.4': {} - - '@types/lodash-es@4.17.12': - dependencies: - '@types/lodash': 4.17.20 - - '@types/lodash@4.17.20': {} - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/minimist@1.2.5': {} - - '@types/ms@2.1.0': {} - - '@types/node@24.5.2': - dependencies: - undici-types: 7.12.0 - - '@types/normalize-package-data@2.4.4': {} - - '@types/parse-json@4.0.2': {} - - '@types/qs@6.14.0': {} - - '@types/react-dom@19.1.9(@types/react@19.1.13)': - dependencies: - '@types/react': 19.1.13 - - '@types/react-router-dom@5.3.3': - dependencies: - '@types/history': 4.7.11 - '@types/react': 19.1.13 - '@types/react-router': 5.1.20 - - '@types/react-router@5.1.20': - dependencies: - '@types/history': 4.7.11 - '@types/react': 19.1.13 - - '@types/react@19.1.13': - dependencies: - csstype: 3.1.3 - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@types/use-sync-external-store@0.0.6': {} - - '@ungap/structured-clone@1.3.0': {} - - '@use-gesture/core@10.3.1': {} - - '@use-gesture/react@10.3.1(react@19.1.1)': - dependencies: - '@use-gesture/core': 10.3.1 - react: 19.1.1 - - '@vitejs/plugin-react-swc@4.1.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1))': - dependencies: - '@rolldown/pluginutils': 1.0.0-beta.35 - '@swc/core': 1.13.19 - vite: 7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1) - transitivePeerDependencies: - - '@swc/helpers' - - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - - acorn@8.15.0: - optional: true - - add-stream@1.0.0: {} - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - array-ify@1.0.0: {} - - arrify@1.0.1: {} - - asynckit@0.4.0: {} - - autoprefixer@10.4.21(postcss@8.5.6): - dependencies: - browserslist: 4.26.2 - caniuse-lite: 1.0.30001745 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - axios@1.12.2: - dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.28.4 - cosmiconfig: 7.1.0 - resolve: 1.22.10 - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - baseline-browser-mapping@2.8.7: {} - - bignumber.js@9.3.1: {} - - binary-extensions@2.3.0: {} - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.26.2: - dependencies: - baseline-browser-mapping: 2.8.7 - caniuse-lite: 1.0.30001745 - electron-to-chromium: 1.5.224 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) - - buffer-from@1.1.2: {} - - byte-size@9.0.1: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - - caniuse-lite@1.0.30001745: {} - - ccount@2.0.1: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - classnames@2.5.1: {} - - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@2.1.1: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - comma-separated-tokens@2.0.3: {} - - commander@2.20.3: - optional: true - - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - - concat-map@0.0.1: {} - - concat-stream@2.0.0: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - typedarray: 0.0.6 - - concurrently@9.2.1: - dependencies: - chalk: 4.1.2 - rxjs: 7.8.2 - shell-quote: 1.8.3 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - - conventional-changelog-angular@5.0.13: - dependencies: - compare-func: 2.0.0 - q: 1.5.1 - - conventional-changelog-atom@2.0.8: - dependencies: - q: 1.5.1 - - conventional-changelog-codemirror@2.0.8: - dependencies: - q: 1.5.1 - - conventional-changelog-config-spec@2.1.0: {} - - conventional-changelog-conventionalcommits@4.6.3: - dependencies: - compare-func: 2.0.0 - lodash: 4.17.21 - q: 1.5.1 - - conventional-changelog-core@4.2.4: - dependencies: - add-stream: 1.0.0 - conventional-changelog-writer: 5.0.1 - conventional-commits-parser: 3.2.4 - dateformat: 3.0.3 - get-pkg-repo: 4.2.1 - git-raw-commits: 2.0.11 - git-remote-origin-url: 2.0.0 - git-semver-tags: 4.1.1 - lodash: 4.17.21 - normalize-package-data: 3.0.3 - q: 1.5.1 - read-pkg: 3.0.0 - read-pkg-up: 3.0.0 - through2: 4.0.2 - - conventional-changelog-ember@2.0.9: - dependencies: - q: 1.5.1 - - conventional-changelog-eslint@3.0.9: - dependencies: - q: 1.5.1 - - conventional-changelog-express@2.0.6: - dependencies: - q: 1.5.1 - - conventional-changelog-jquery@3.0.11: - dependencies: - q: 1.5.1 - - conventional-changelog-jshint@2.0.9: - dependencies: - compare-func: 2.0.0 - q: 1.5.1 - - conventional-changelog-preset-loader@2.3.4: {} - - conventional-changelog-writer@5.0.1: - dependencies: - conventional-commits-filter: 2.0.7 - dateformat: 3.0.3 - handlebars: 4.7.8 - json-stringify-safe: 5.0.1 - lodash: 4.17.21 - meow: 8.1.2 - semver: 6.3.1 - split: 1.0.1 - through2: 4.0.2 - - conventional-changelog@3.1.25: - dependencies: - conventional-changelog-angular: 5.0.13 - conventional-changelog-atom: 2.0.8 - conventional-changelog-codemirror: 2.0.8 - conventional-changelog-conventionalcommits: 4.6.3 - conventional-changelog-core: 4.2.4 - conventional-changelog-ember: 2.0.9 - conventional-changelog-eslint: 3.0.9 - conventional-changelog-express: 2.0.6 - conventional-changelog-jquery: 3.0.11 - conventional-changelog-jshint: 2.0.9 - conventional-changelog-preset-loader: 2.3.4 - - conventional-commits-filter@2.0.7: - dependencies: - lodash.ismatch: 4.4.0 - modify-values: 1.0.1 - - conventional-commits-parser@3.2.4: - dependencies: - JSONStream: 1.3.5 - is-text-path: 1.0.1 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - - conventional-recommended-bump@6.1.0: - dependencies: - concat-stream: 2.0.0 - conventional-changelog-preset-loader: 2.3.4 - conventional-commits-filter: 2.0.7 - conventional-commits-parser: 3.2.4 - git-raw-commits: 2.0.11 - git-semver-tags: 4.1.1 - meow: 8.1.2 - q: 1.5.1 - - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} - - core-util-is@1.0.3: {} - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - csstype@3.1.3: {} - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-ease@3.0.1: {} - - d3-format@3.1.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@3.1.0: {} - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - dargs@7.0.0: {} - - date-fns@4.1.0: {} - - dateformat@3.0.3: {} - - dayjs@1.11.18: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - - decimal.js-light@2.5.1: {} - - decode-named-character-reference@1.2.0: - dependencies: - character-entities: 2.0.2 - - deepmerge-ts@7.1.5: {} - - delayed-stream@1.0.0: {} - - dequal@2.0.3: {} - - detect-browser@5.3.0: {} - - detect-indent@6.1.0: {} - - detect-newline@3.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - dice-coefficient@2.1.1: - dependencies: - n-gram: 2.0.2 - - dijkstrajs@1.0.3: {} - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - - dotenv@17.2.2: {} - - dotgitignore@2.1.0: - dependencies: - find-up: 3.0.0 - minimatch: 3.1.2 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - electron-to-chromium@1.5.224: {} - - emoji-regex@8.0.0: {} - - entities@4.5.0: {} - - entities@6.0.1: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-toolkit@1.39.10: {} - - esbuild@0.25.10: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.10 - '@esbuild/android-arm': 0.25.10 - '@esbuild/android-arm64': 0.25.10 - '@esbuild/android-x64': 0.25.10 - '@esbuild/darwin-arm64': 0.25.10 - '@esbuild/darwin-x64': 0.25.10 - '@esbuild/freebsd-arm64': 0.25.10 - '@esbuild/freebsd-x64': 0.25.10 - '@esbuild/linux-arm': 0.25.10 - '@esbuild/linux-arm64': 0.25.10 - '@esbuild/linux-ia32': 0.25.10 - '@esbuild/linux-loong64': 0.25.10 - '@esbuild/linux-mips64el': 0.25.10 - '@esbuild/linux-ppc64': 0.25.10 - '@esbuild/linux-riscv64': 0.25.10 - '@esbuild/linux-s390x': 0.25.10 - '@esbuild/linux-x64': 0.25.10 - '@esbuild/netbsd-arm64': 0.25.10 - '@esbuild/netbsd-x64': 0.25.10 - '@esbuild/openbsd-arm64': 0.25.10 - '@esbuild/openbsd-x64': 0.25.10 - '@esbuild/openharmony-arm64': 0.25.10 - '@esbuild/sunos-x64': 0.25.10 - '@esbuild/win32-arm64': 0.25.10 - '@esbuild/win32-ia32': 0.25.10 - '@esbuild/win32-x64': 0.25.10 - - escalade@3.2.0: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - estree-util-is-identifier-name@3.0.0: {} - - eventemitter3@5.0.1: {} - - events@3.3.0: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - figures@3.2.0: - dependencies: - escape-string-regexp: 1.0.5 - - file-saver@2.0.5: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-root@1.1.0: {} - - find-up@2.1.0: - dependencies: - locate-path: 2.0.0 - - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - follow-redirects@1.15.11: {} - - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - fraction.js@4.3.7: {} - - framer-motion@12.23.22(@emotion/is-prop-valid@1.4.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - motion-dom: 12.23.21 - motion-utils: 12.23.6 - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.4.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - fuse.js@7.1.0: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-pkg-repo@4.2.1: - dependencies: - '@hutson/parse-repository-url': 3.0.2 - hosted-git-info: 4.1.0 - through2: 2.0.5 - yargs: 16.2.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-text-width@1.0.3: {} - - git-raw-commits@2.0.11: - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - - git-remote-origin-url@2.0.0: - dependencies: - gitconfiglocal: 1.0.0 - pify: 2.3.0 - - git-semver-tags@4.1.1: - dependencies: - meow: 8.1.2 - semver: 6.3.1 - - gitconfiglocal@1.0.0: - dependencies: - ini: 1.3.8 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - globals@16.4.0: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - hard-rejection@2.1.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.1.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-raw@9.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.3.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-sanitize@5.0.2: - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.0 - unist-util-position: 5.0.0 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.17 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - - hex-rgb@5.0.0: {} - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hosted-git-info@2.8.9: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - html-dom-parser@5.1.1: - dependencies: - domhandler: 5.0.3 - htmlparser2: 10.0.0 - - html-react-parser@5.2.6(@types/react@19.1.13)(react@19.1.1): - dependencies: - domhandler: 5.0.3 - html-dom-parser: 5.1.1 - react: 19.1.1 - react-property: 2.0.2 - style-to-js: 1.1.17 - optionalDependencies: - '@types/react': 19.1.13 - - html-url-attributes@3.0.1: {} - - html-void-elements@3.0.0: {} - - htmlparser2@10.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 6.0.1 - - humanize-duration@3.33.1: {} - - immer@10.1.3: {} - - immutable@4.3.7: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - indent-string@4.0.0: {} - - inherits@2.0.4: {} - - ini@1.3.8: {} - - inline-style-parser@0.2.4: {} - - internmap@2.0.3: {} - - ipaddr.js@2.2.0: {} - - is-absolute-url@4.0.1: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-arrayish@0.2.1: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-decimal@2.0.1: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@2.0.1: {} - - is-number@7.0.0: {} - - is-obj@2.0.0: {} - - is-plain-obj@1.1.0: {} - - is-plain-obj@4.1.0: {} - - is-text-path@1.0.1: - dependencies: - text-extensions: 1.9.0 - - isarray@1.0.0: {} - - itertools@2.5.0: {} - - jiti@2.4.2: - optional: true - - js-base64@3.7.8: {} - - js-tokens@4.0.0: {} - - jsesc@3.1.0: {} - - json-parse-better-errors@1.0.2: {} - - json-parse-even-better-errors@2.3.1: {} - - json-stringify-safe@5.0.1: {} - - json5@2.2.3: {} - - jsonparse@1.3.1: {} - - kind-of@6.0.3: {} - - lines-and-columns@1.2.4: {} - - little-state-machine@4.8.1(react@19.1.1): - dependencies: - react: 19.1.1 - - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash-es@4.17.21: {} - - lodash.ismatch@4.4.0: {} - - lodash@4.17.21: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - map-obj@1.0.1: {} - - map-obj@4.3.0: {} - - math-intrinsics@1.1.0: {} - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - meow@8.1.2: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - - merge-refs@2.0.0(@types/react@19.1.13): - optionalDependencies: - '@types/react': 19.1.13 - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - millify@6.1.0: - dependencies: - yargs: 17.7.2 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - min-indent@1.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - - minimist@1.2.8: {} - - modify-values@1.0.1: {} - - motion-dom@12.23.21: - dependencies: - motion-utils: 12.23.6 - - motion-utils@12.23.6: {} - - motion@12.23.22(@emotion/is-prop-valid@1.4.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - framer-motion: 12.23.22(@emotion/is-prop-valid@1.4.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.4.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - ms@2.1.3: {} - - n-gram@2.0.2: {} - - nanoid@3.3.11: {} - - neo-async@2.6.2: {} - - node-releases@2.0.21: {} - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-package-data@3.0.3: - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.16.1 - semver: 7.7.2 - validate-npm-package-license: 3.0.4 - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - numbro@2.5.0: - dependencies: - bignumber.js: 9.3.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - p-limit@1.3.0: - dependencies: - p-try: 1.0.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-try@1.0.0: {} - - p-try@2.2.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.2.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@4.0.0: - dependencies: - error-ex: 1.3.4 - json-parse-better-errors: 1.0.2 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - path-exists@3.0.0: {} - - path-exists@4.0.0: {} - - path-parse@1.0.7: {} - - path-type@3.0.0: - dependencies: - pify: 3.0.0 - - path-type@4.0.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pify@2.3.0: {} - - pify@3.0.0: {} - - pngjs@5.0.0: {} - - postcss-value-parser@4.2.0: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier@3.6.2: {} - - process-nextick-args@2.0.1: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - property-information@6.5.0: {} - - property-information@7.1.0: {} - - proxy-compare@3.0.1: {} - - proxy-from-env@1.1.0: {} - - q@1.5.1: {} - - qr.js@0.0.0: {} - - qrcode@1.5.4: - dependencies: - dijkstrajs: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - quick-lru@4.0.1: {} - - radash@12.1.1: {} - - react-click-away-listener@2.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - react-datepicker@8.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - '@floating-ui/react': 0.27.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - clsx: 2.1.1 - date-fns: 4.1.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - react-dom@19.1.1(react@19.1.1): - dependencies: - react: 19.1.1 - scheduler: 0.26.0 - - react-hook-form@7.63.0(react@19.1.1): - dependencies: - react: 19.1.1 - - react-idle-timer@5.7.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - react-intersection-observer@9.16.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - react: 19.1.1 - optionalDependencies: - react-dom: 19.1.1(react@19.1.1) - - react-is@16.13.1: {} - - react-is@19.1.1: {} - - react-loading-skeleton@3.5.0(react@19.1.1): - dependencies: - react: 19.1.1 - - react-markdown@10.1.0(@types/react@19.1.13)(react@19.1.1): - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/react': 19.1.13 - devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 - html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 - react: 19.1.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - unified: 11.0.5 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - react-property@2.0.2: {} - - react-qr-code@2.0.18(react@19.1.1): - dependencies: - prop-types: 15.8.1 - qr.js: 0.0.0 - react: 19.1.1 - - react-redux@9.2.0(@types/react@19.1.13)(react@19.1.1)(redux@5.0.1): - dependencies: - '@types/use-sync-external-store': 0.0.6 - react: 19.1.1 - use-sync-external-store: 1.5.0(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - redux: 5.0.1 - - react-resize-detector@12.3.0(react@19.1.1): - dependencies: - es-toolkit: 1.39.10 - react: 19.1.1 - - react-router-dom@6.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - '@remix-run/router': 1.23.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - react-router: 6.30.1(react@19.1.1) - - react-router@6.30.1(react@19.1.1): - dependencies: - '@remix-run/router': 1.23.0 - react: 19.1.1 - - react-simple-animate@3.5.3(react-dom@19.1.1(react@19.1.1)): - dependencies: - react-dom: 19.1.1(react@19.1.1) - - react-tracked@2.0.1(react@19.1.1)(scheduler@0.26.0): - dependencies: - proxy-compare: 3.0.1 - react: 19.1.1 - scheduler: 0.26.0 - use-context-selector: 2.0.0(react@19.1.1)(scheduler@0.26.0) - - react-virtualized-auto-sizer@1.0.26(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - react@19.1.1: {} - - read-pkg-up@3.0.0: - dependencies: - find-up: 2.1.0 - read-pkg: 3.0.0 - - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - recharts@3.2.1(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1): - dependencies: - '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.1.13)(react@19.1.1)(redux@5.0.1))(react@19.1.1) - clsx: 2.1.1 - decimal.js-light: 2.5.1 - es-toolkit: 1.39.10 - eventemitter3: 5.0.1 - immer: 10.1.3 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - react-is: 19.1.1 - react-redux: 9.2.0(@types/react@19.1.13)(react@19.1.1)(redux@5.0.1) - reselect: 5.1.1 - tiny-invariant: 1.3.3 - use-sync-external-store: 1.5.0(react@19.1.1) - victory-vendor: 37.3.6 - transitivePeerDependencies: - - '@types/react' - - redux - - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - redux-thunk@3.1.0(redux@5.0.1): - dependencies: - redux: 5.0.1 - - redux@5.0.1: {} - - rehype-external-links@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.0 - hast-util-is-element: 3.0.0 - is-absolute-url: 4.0.1 - space-separated-tokens: 2.0.2 - unist-util-visit: 5.0.0 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 - vfile: 6.0.3 - - rehype-sanitize@6.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-sanitize: 5.0.2 - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - vfile: 6.0.3 - - require-directory@2.1.1: {} - - require-main-filename@2.0.0: {} - - reselect@5.1.1: {} - - resolve-from@4.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - rollup@4.52.2: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.2 - '@rollup/rollup-android-arm64': 4.52.2 - '@rollup/rollup-darwin-arm64': 4.52.2 - '@rollup/rollup-darwin-x64': 4.52.2 - '@rollup/rollup-freebsd-arm64': 4.52.2 - '@rollup/rollup-freebsd-x64': 4.52.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.2 - '@rollup/rollup-linux-arm-musleabihf': 4.52.2 - '@rollup/rollup-linux-arm64-gnu': 4.52.2 - '@rollup/rollup-linux-arm64-musl': 4.52.2 - '@rollup/rollup-linux-loong64-gnu': 4.52.2 - '@rollup/rollup-linux-ppc64-gnu': 4.52.2 - '@rollup/rollup-linux-riscv64-gnu': 4.52.2 - '@rollup/rollup-linux-riscv64-musl': 4.52.2 - '@rollup/rollup-linux-s390x-gnu': 4.52.2 - '@rollup/rollup-linux-x64-gnu': 4.52.2 - '@rollup/rollup-linux-x64-musl': 4.52.2 - '@rollup/rollup-openharmony-arm64': 4.52.2 - '@rollup/rollup-win32-arm64-msvc': 4.52.2 - '@rollup/rollup-win32-ia32-msvc': 4.52.2 - '@rollup/rollup-win32-x64-gnu': 4.52.2 - '@rollup/rollup-win32-x64-msvc': 4.52.2 - fsevents: 2.3.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - sass@1.70.0: - dependencies: - chokidar: 3.6.0 - immutable: 4.3.7 - source-map-js: 1.2.1 - - scheduler@0.26.0: {} - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.2: {} - - set-blocking@2.0.0: {} - - shell-quote@1.8.3: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - optional: true - - source-map@0.5.7: {} - - source-map@0.6.1: {} - - space-separated-tokens@2.0.2: {} - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 - - spdx-license-ids@3.0.22: {} - - split2@3.2.2: - dependencies: - readable-stream: 3.6.2 - - split@1.0.1: - dependencies: - through: 2.3.8 - - standard-version@9.5.0: - dependencies: - chalk: 2.4.2 - conventional-changelog: 3.1.25 - conventional-changelog-config-spec: 2.1.0 - conventional-changelog-conventionalcommits: 4.6.3 - conventional-recommended-bump: 6.1.0 - detect-indent: 6.1.0 - detect-newline: 3.1.0 - dotgitignore: 2.1.0 - figures: 3.2.0 - find-up: 5.0.0 - git-semver-tags: 4.1.1 - semver: 7.7.2 - stringify-package: 1.0.1 - yargs: 16.2.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - stringify-package@1.0.1: {} - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - style-to-js@1.1.17: - dependencies: - style-to-object: 1.0.9 - - style-to-object@1.0.9: - dependencies: - inline-style-parser: 0.2.4 - - stylis@4.2.0: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - tabbable@6.2.0: {} - - terser@5.37.0: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - - text-camel-case@1.2.9: - dependencies: - text-pascal-case: 1.2.9 - - text-capital-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - text-upper-case-first: 1.2.9 - - text-case@1.2.9: - dependencies: - text-camel-case: 1.2.9 - text-capital-case: 1.2.9 - text-constant-case: 1.2.9 - text-dot-case: 1.2.9 - text-header-case: 1.2.9 - text-is-lower-case: 1.2.9 - text-is-upper-case: 1.2.9 - text-kebab-case: 1.2.9 - text-lower-case: 1.2.9 - text-lower-case-first: 1.2.9 - text-no-case: 1.2.9 - text-param-case: 1.2.9 - text-pascal-case: 1.2.9 - text-path-case: 1.2.9 - text-sentence-case: 1.2.9 - text-snake-case: 1.2.9 - text-swap-case: 1.2.9 - text-title-case: 1.2.9 - text-upper-case: 1.2.9 - text-upper-case-first: 1.2.9 - - text-constant-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - text-upper-case: 1.2.9 - - text-dot-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - - text-extensions@1.9.0: {} - - text-header-case@1.2.9: - dependencies: - text-capital-case: 1.2.9 - - text-is-lower-case@1.2.9: {} - - text-is-upper-case@1.2.9: {} - - text-kebab-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - - text-lower-case-first@1.2.9: {} - - text-lower-case@1.2.9: {} - - text-no-case@1.2.9: - dependencies: - text-lower-case: 1.2.9 - - text-param-case@1.2.9: - dependencies: - text-dot-case: 1.2.9 - - text-pascal-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - - text-path-case@1.2.9: - dependencies: - text-dot-case: 1.2.9 - - text-sentence-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - text-upper-case-first: 1.2.9 - - text-snake-case@1.2.9: - dependencies: - text-dot-case: 1.2.9 - - text-swap-case@1.2.9: {} - - text-title-case@1.2.9: - dependencies: - text-no-case: 1.2.9 - text-upper-case-first: 1.2.9 - - text-upper-case-first@1.2.9: {} - - text-upper-case@1.2.9: {} - - through2@2.0.5: - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - - through@2.3.8: {} - - tiny-invariant@1.3.3: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tree-kill@1.2.2: {} - - trim-lines@3.0.1: {} - - trim-newlines@3.0.1: {} - - trough@2.2.0: {} - - tslib@2.8.1: {} - - type-fest@0.18.1: {} - - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - - type-fest@4.41.0: {} - - typedarray@0.0.6: {} - - typesafe-i18n@5.26.2(typescript@5.9.2): - dependencies: - typescript: 5.9.2 - - typescript@5.9.2: {} - - uglify-js@3.19.3: - optional: true - - undici-types@7.12.0: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - update-browserslist-db@1.1.3(browserslist@4.26.2): - dependencies: - browserslist: 4.26.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - use-breakpoint@4.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - - use-context-selector@2.0.0(react@19.1.1)(scheduler@0.26.0): - dependencies: - react: 19.1.1 - scheduler: 0.26.0 - - use-deep-compare-effect@1.8.1(react@19.1.1): - dependencies: - '@babel/runtime': 7.28.4 - dequal: 2.0.3 - react: 19.1.1 - - use-sync-external-store@1.5.0(react@19.1.1): - dependencies: - react: 19.1.1 - - util-deprecate@1.0.2: {} - - uuid@8.3.2: {} - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - victory-vendor@37.3.6: - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-ease': 3.0.2 - '@types/d3-interpolate': 3.0.4 - '@types/d3-scale': 4.0.9 - '@types/d3-shape': 3.1.7 - '@types/d3-time': 3.0.4 - '@types/d3-timer': 3.0.2 - d3-array: 3.2.4 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-scale: 4.0.2 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-timer: 3.0.1 - - vite-plugin-package-version@1.1.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1)): - dependencies: - vite: 7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1) - - vite@7.1.7(@types/node@24.5.2)(jiti@2.4.2)(sass@1.70.0)(terser@5.37.0)(yaml@2.6.1): - dependencies: - esbuild: 0.25.10 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.2 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.5.2 - fsevents: 2.3.3 - jiti: 2.4.2 - sass: 1.70.0 - terser: 5.37.0 - yaml: 2.6.1 - - web-namespaces@2.0.1: {} - - which-module@2.0.1: {} - - wordwrap@1.0.0: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - xtend@4.0.2: {} - - y18n@4.0.3: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yaml@1.10.2: {} - - yaml@2.6.1: - optional: true - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - - yargs-parser@20.2.9: {} - - yargs-parser@21.1.1: {} - - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@0.1.0: {} - - zod@3.25.76: {} - - zustand@5.0.8(@types/react@19.1.13)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): - optionalDependencies: - '@types/react': 19.1.13 - immer: 10.1.3 - react: 19.1.1 - use-sync-external-store: 1.5.0(react@19.1.1) - - zwitch@2.0.4: {} diff --git a/web/postcss.config.js b/web/postcss.config.js deleted file mode 100644 index a47ef4f95..000000000 --- a/web/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {}, - }, -}; diff --git a/web/public/fonts/Poppins/Poppins-Black.woff2 b/web/public/fonts/Poppins/Poppins-Black.woff2 deleted file mode 100644 index 2dfde80a5f0be9ac250aa41f84a30aaaf3ebafd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49324 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 diff --git a/web/public/fonts/Poppins/Poppins-BlackItalic.woff2 b/web/public/fonts/Poppins/Poppins-BlackItalic.woff2 deleted file mode 100644 index c53e44b3bea85fb40b0de88d10f5e76f65951fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53968 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 diff --git a/web/public/fonts/Poppins/Poppins-Bold.woff2 b/web/public/fonts/Poppins/Poppins-Bold.woff2 deleted file mode 100644 index 13e0e28bc33e1208b2995864fde7347cb04c31ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50576 zcmV)9K*hgzPew8T0RR910L7314FCWD0$f}G0L3=|0RR9100000000000000000000 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 F003DowblRt diff --git a/web/public/fonts/Poppins/Poppins-BoldItalic.woff2 b/web/public/fonts/Poppins/Poppins-BoldItalic.woff2 deleted file mode 100644 index f7f7fe4bcf6dda4e823ce045ec4bea3cd187a3ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57304 zcmV)9K*hgzPew8T0RR910N>aE4FCWD0=C2e0N;QB0RR9100000000000000000000 z0000QKpUuj9L#tIU;u?u3W(bzhmjQvp%4H8HUcCAp$r5d1&byJ#T8pUK#~Hv#(q;y zL9Hs?WWcX}OP^*PYN{*9Hrz~89(AW} z)^@;+0gzgWR{w9WX(|g5z2s7@NGqkWk5Oxr+tR(z)GDp{B3r%J%?lW4RgV=DH~6%K z_I-jQx%07|4^vZKdH4FB6OxdGBqZ?x{lx>k@|;r*>9`;hi)Yva$_C!D?8p-Opf@YD zl7QKCCoqmvl~Sqxo_69KDaXIm==!+92`!l$`7s1KHY< z8ze&+p$B~7^U#ZwnD_7!l=aaRO-h9Scs<7N7S7~|FGw?T1lI4|VM2f1!6VU>_`m!Kh=aAA=zB8k;NCdG~rU(wSx3thGo7fTWizx zIT@ho?2snVm^9jmc#}5TNYgY)Q?WF4Me4aKQdSBT1BR59QW)DF+tA-L=CBQB{xf@> z4zSH~A@=RCu%I2&Is3w6K?|aSm0wZmTe$uI%#gRxP4;YVDPF9I71L|}#dXzHNjFRg z_dZQ?MW5giA=oC0jU`vyQ%}3%u$Jou^I#s#gXwPTuQr&4V7{0S=8JhSUqoxcJea4L z27GdDM=4?RH*pdvd8PXTr1<~xHm$IGzh?sp%s3K}5{cdW?>O$i*=Ii|CWVw#L~?IF zOzR)`h25Jjq)r3d^t^NSKD0HM^n{Ww9VMAC%1UL1pKnu>D{ME?NB3!ejdq?@#3l;) z=gagaN-`7hEfqx?KD?Ry-&$&K@@MWi$-D{CmB5ILO57wuRf2H4x05-TA7F5#%6kP; zO;lc0WnX0-fdbT#RTZ+8Rkc;7LI^Tx)@+*`Uu!a`tWc7x%eV~uYB`Az28$9ni}D8l zOEqm53^JWETX!m5v?&yodNl>{_AeIL1we9f$-q&^Ayp1#*<*C)WUADqczr@>Z|ZE0=pw$qeS z>wRb7ONxXfT=a!agp5lE+Y!wnAeRqF-Og_kAU@bV6|azGT)K+$w$lnub)4pG zE4GkZ!%i#R$35=hnA5Qxx3uGBk2&VJx8t6+u>b=ZaKiuhYs&|_@z+eOq7TsoRkYDy zL!l;ZCTWKR+aN-)yz}58Kud#wWv8lc(c_E~#lLosS z5epE0LgC)LkWz`+nO*JzAWT8wZQ1@1V|7LMMOl1#e&5oP&P-MHCGFigg~yEyuui5# zs;)odz5X@Y6dWTo%xKq03!s@z@L^>5?|k`s?mRP=lvhz>MMRBkzjo(aeYNbto}=nr zp$J6?g(nyzv_c3Wyv7?s&2j$iGMz*r6`R$B(&yN;rZphR?r2Q*nwUgQqbjHn; z{y1l4PD7+<{sC@lK!N4mSmz!x_5G6CSvH}6j~Gpi7*hvYC&BCg`)U0;(V4R`j$iMq zl?1Ryu~b0H1@#zHi&?*Cwu>kVPJ}xU(_vC~1uqP1lg5>Z;bf?_XvYO>Him2Dr%K=W#ENAe+m zqQyPEN2P}S&(B?#FS~f>?a>_PAUk=sBl0+Fo3u$;-WHk7_*TzQdeXLWX-IWSQ?O}i zXlVc*OJ#4E0`U*ts&F(#`fdeL0DD{Ey%dBv=-5F)wUBNBd4uH^!C zwHQ#5_oA$VwZCvk zAuVp_(!s)Gz0?Y)G|t@{sIvt6{~tl}{C34qIKLDFK$|w^Y~=u*H!#$&iJ<-+Y!#OZ zk-K3=b^@Zg+f(ul9|)*ZgtUA}rng|*G1zqmg(X9>xo|9BpvyTti~^LKS0&K8DrVD# zP42tAmHc{1C{+RW>03YsbW61~EU#;dAoc&8Li5cvvG`((E;2Scval0!Ec@>X1vEu^ zIN6L5)}{bA(bJH%lDXZsp-MbMVlZIoipX-W#C1TXyn(vt>RQMQxth6 zdu0_y*)I}-$6JVcfvQ@DiVuJLrd z!1_#)L+RS8ee&RdTIE?Z{7GdAcT}%fEjKA|a@gg1U)jF9-l*^JPo7C|#1Kak$)u1< zCbb_ zEb!a^B2%Y}7$y(1)j^ol#yZbW(!40^rtO#O{xJk9gU#WNV}Nn_!v1ku!iPml4(w_R zwQ6IPRpyVwfYvPY+?+M|SDRkQA)ckkVS!opq{F#r;l?b&5N(X*Vm2KbI|7kVg}p#C zc?j7!H;6gtk?G-OwlEdH#?qRb*H$U(kSU^&)1{{jYNEAB(p_7GX5qWN2@Ov#@dHvF zQ9N5Ny%QN3%>*0}fm0BA2<$aYl{K9w?pA@R;(khW=6_h-2N7DirQ?k{UlAg|umhvp*WDW(>S5%-)f`KC1+4~Ayl%PTe(QZ6F&<ywL>`F>_PFbRfLS(9wyhs$LGLA_CLL~WWm{kZ+N zs5)(We`DjEy|X)d?3)!eRU2;_wmz9)TG#0ecSkZr9338XA{eM#{#Vs$qc8NDyNHJ2l`Or+%JV^VM&;!5sVX02RDA*{<_Wos=fV-Se|r%;?jd zoj?7_T$zEX$*zo`?4a0@we zcM)yoF+)gF;}>U6npfXOYYrQ>ls3F`@l@{)wCsJfVpa-&{X1*MIMFr=bKRoec(%j1 z^T8i!`vELg24Ojs>b47k5q<1Lb~(iAW21h09LH3Wxa>!&24%*s%^;YmhJE^jht!ZRbG@R);1fZVxHl#m+(<& z=nS{vA3I2&0niAhdNna{A2zYygu%zq+xKy6{}c{(p?^Z5yg3020d(UN7WHat6*4yU_M zgXt|s8)K|-#+yLlkwIs*?QRZ0!=ko|s!in|F1hp#9?1i1XnGjDgM$JPW8t7z>?@FB z#fI}ecP0|Z{KoqHe0#-VTy9)Hh;Hxb zT#^(f`4;~YSb{b<#*H@FYDW%)r;N<#vW7>xkvVB2L73rMQiTLWGN$sJK zsQ_4ESe~;yZS)#?2|b%G1}cjk=3eD)pq5edsF_qQWxl_n(_uN>gaMdXVrJx7{e+#I zf5qhkT@?$UnYAY^Yo;Si)%myV#7!=x-{(wedw0`zn`VeG=i1J^DaP^175>RQlQ50k z3_8+GfK(i>9@b0@QYdPq2%JC;M&roAU@ST4jp1e8%LERdW6HH?6OX5rb#jPIN+87K zminrjv@3g&13J;d6$td|)H&yyIeyN0=QyfKwh(4~5^&PW)qS2FQACbPQFu&USn9Kg zUunCkObEgCLb*s#y-Nh(UoQ|ZJnnJ`JZvO?o$+Vn(9R z>o<3YY{L4#Hdo&AS?Y@g{&4UYJk8N|jKP4XTrpkoF%2ep^`BFD^Cwx?_&N@vx zqt*k)3oF-bOfG+>zKYMYhPBq3dbQR))<;$obo>Rm8NF`1_ocbc4UfV6)vQ^8dJS*mdqz3jGaqk||dg9iL>NJ+}w@g&JP?C|g^6utU~B~S!@&3AM6nZIrI`b}H5lW7~pe{r$Yytw#ePg}EK2kl{2^)uikb;GklS)v`pm8(qQ>;dvbw6Mz8bhKp zrPC|GZ12?@cHld|LEf7ZK{6iEg~d+}uat})BSy_SDo=q@O`3J8@e#1 zYZQZRznBElSg2lqDM=H1ttvUx$pmZgdg4hWn|ulg5YkOfK}qY379Bcu>osVktPIPi zD1xZX!s@V>49Z&5i0rU{{QYp;$9$WNSmH=0i$dnA(4bk@WUhDpqL;4MYD}iO@_2K| zC66HKJl|BRRhxD_`Yx(16X0r74@Ki0fERY@`dT`8BptMZjx0WDAmJK*q~Wx2{DG@7 z4;}4CKoj>fW)1-L*(un!C?aYtY|{QWLr=lR1v6+5mDJ5UB4(h2q67XWz5j9eA)`_Ec zC^iVeSfVgYsUYXtZ>`Sw9u<8YrTsGs_z`)0tL5@$P(qtZn^~Y5^#77bOHtgKtpz{D z&b%@^MR1N0&>;%7j{@x?TiaimhMwcb4d~FITB!m#G9|lgSf8XYFFPX*86i2OX-W=j zrl(jwjhHc;R5WWMtRQ01Fc+3R^*Mm2$7~tN>+la#rU-;>%1CDwy2kq?x{;W$rS}~T8^4EBd;5>;Zta$^cK+( zVQ>~w&4NlHApVGxuNo`Q(61$2Zbgq0&RE}<<3<7lm(c$L*_gQNp%t^n4e8Nl|Fn!A zD@PUOhN^`Jfq(;c*uZL!fA;|HgEu-Hcv(KJ)*;|?J!k95Pm3bDlk;=8h zm)E@F1<(DIDcj!Ss3$2akAX+ULt9SBx&gC!sdJXi?xw^&P_4%b-Mj~N?$dddh1&0GwKaQ0b+M}ISXpUW z-k@vfbq{ZMGp5sR+PfvtM1yM#pi1Q_BgH~=yOxroMq%gYDae!ef(!ts6G8gct*ms7 zq`7o>t*u>+EzRaqZ=h>q2y&-rGOMy^3>6_r*``LiD;Yrfs(iQ~YC56cGIC1Y5=bsL zeM3$&hwyIAb!N9IIn62?f$L=XnoiE}De0tK5;Hx>Qm-SCsg7%*Mz=o7OCv zG^9(DYExf8MXHOegl752%)DbpzNut!h7#)-Hxfkz;e>F>7fmEUe#sM0%Shw;3g-Hyz3(LK&y{7`eP+IEHM4Xnh&hv-KHe z^c;uF*faH0sdP!vwpODrxCu>b_{i$!SWOYD_L-H(ALmT~DHXLEio++*C&``nt{ypdWx>_?CyAL@9eSKNA>B@q(-?SxwE

t(AsSBUOmCgK&l%)lob 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 diff --git a/web/public/fonts/Poppins/Poppins-Medium.woff2 b/web/public/fonts/Poppins/Poppins-Medium.woff2 deleted file mode 100644 index 406acb6670a3b15de79eae274bb8c093f19c2e08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50488 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 F008RsBVGUi diff --git a/web/public/fonts/Poppins/Poppins-Regular.woff2 b/web/public/fonts/Poppins/Poppins-Regular.woff2 deleted file mode 100644 index 964d6d2f21743c84f4a2cc3216fb8a4f26e2be53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51148 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 j$%fry|l;m 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 m@pU diff --git a/web/public/fonts/Poppins/Poppins-SemiBoldItalic.woff2 b/web/public/fonts/Poppins/Poppins-SemiBoldItalic.woff2 deleted file mode 100644 index 605065152219bd1a1edae8085589faaf0eec45e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58116 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 F0sug5fe`=z diff --git a/web/public/fonts/Poppins/Poppins-Thin.woff2 b/web/public/fonts/Poppins/Poppins-Thin.woff2 deleted file mode 100644 index f98239af25793baf33b330885db1216dc09a9014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47212 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

>M-k^&1w3KGDHm>X@{Z~ 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 QoEiT6`juR8Q3L=002n1okN^Mx diff --git a/web/public/fonts/Poppins/Poppins-ThinItalic.woff2 b/web/public/fonts/Poppins/Poppins-ThinItalic.woff2 deleted file mode 100644 index 86ee4fd46e6127bad00a3a09ba9876f311586072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54088 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 diff --git a/web/public/fonts/Roboto/Roboto-Black.woff2 b/web/public/fonts/Roboto/Roboto-Black.woff2 deleted file mode 100644 index beeec681b4fcbd89c9b416baf76c8c93b40486f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64168 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 AF#rGn diff --git a/web/public/fonts/Roboto/Roboto-Bold.woff2 b/web/public/fonts/Roboto/Roboto-Bold.woff2 deleted file mode 100644 index b102004e81829b0934bfd25600f2cff9beaf6aad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63920 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 c4E}tB7;m*QQ#yV*`c6gs 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%0D#1BA3;tZ9Wy+`}vP@ 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 z≪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 diff --git a/web/public/fonts/Roboto/Roboto-Italic.woff2 b/web/public/fonts/Roboto/Roboto-Italic.woff2 deleted file mode 100644 index 3d60e74894f951254fdddf88c34a433f3f9e3a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69156 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

r%};QSBc+kKL4)IgAcks+_k!OHG}w3|kLO z^V`bEB4Tx4nRHHOIi8NM=MA*5xt$lcBgX9mO&q&To}hf45|_|!UOG(>G{{@WHz2^w zvKDfyMiC*>j0jQ)_?xPB*bI-`b-FOUkmgR%7Z42lm-zhy3^IBsiDc9i=~E=y>L;$#BzD@7;LIX zpb4puWYq02{B2d&&@(OtC}~NsoQcLLMog$gw^IQ}5MPPm|u1vqjY@@Hmz|B9kuX*iYq zeEJGn=IUr^5LCB!;R2_=7IMoFKN@6{yyd9f2L{N+g1Dw&b^q2L?j? z2=3=ewfcYp!la@gA^PkCV9Y62o7dbJw1}bk*C6orO-EOBIX^Fx%RnPXj^8U%#!ZAP zkfF4u4NULB7}I)WI&LVKvc}$zkiTb_Y}g(fvdh$Y$SAjG>4z8dBoXg}K&Du&)ccXV zQzFZu@J&hxBuM1^z(Zog0eFC7$5Ha$dJG<{u#!RzmAqJVW~uSB5hQ0Xy$lI1lD1$Nm(G4Oc}0lCFGGVR|DL7wo(|?g%L)xvq?oX`mwy>HJ8;y zk5)+yI+cTcFdAZ_93I3vc`D{2K(%$M7;I!rk^0c-D+5H#(Ab8JA=iwmnLwf^qu#^g zJ#@$7Kh;w;o$C5ny4p78pElOQ%>Bl40_n#UOxe6{w;TD;*7EyThFWoKJhQY|x@HiLC%leJPZ$l^Z=*d_4n)7IgCIs;K6iYy_h9~ zSO#9;2KHbL9pDY_-~h_Sy7DXTb5Rgsw}!|Mp6~rC`QQ%#_TXt`1x)XBqPI_;`g@Rdabcs0?OLs?Yt!!e|NwBcXbaFaq`Qg^9AZTFz1J z^)>_%c5OQM7}V@b4dQg|lrhTid|od(i0_j9pMM8#cM|^j?(GBG^#kKf~M5 zQIU8K--b`ZA?5msJRDb9smj}V#(g}J8uf%s8IFfj_Ty>0Uhzq2?T)DQM&%8tmE-bf z5lj8y5vc;81f>^IMRX<~h*UT_BONAu!UwJ{KMBa=dr+gEdl9ReM5$0?1wXYFJTIN} zdJ2ZT+7>p+rfuZv4z&`WnN|Q2KLO?l#nuh*NRetzz!geOosVQyTqqs!3yb}-)t15LeEq3&oG+`3bSz)i{7Y7%>B6hI z;Z9a|J_}Oil1q+rM?j!ohm|+cj zn3Jcd9k+*hORv`r#bda`aeF3|V8an|h{e1PG%;LaUdkaKLr#xLsf3sjev6@fnaQs} zUe-TMJm1-5vA8e`3#=XlG*YOQw1)^ME{(`CFVOa{KjnT*E@Eo27`Z?r8tGu1GWV0u z*gV0f?4kW8NlV#S#rZ0y66Rkgl*&bWs-UHPI^|;!zDAReWr_%V-YSh+tVnFyif1N$ zi$qvSkS`WqB+?AdC5UThas*K464IxkFn(hmL!!W*PVuB`kvVRx;teQ2cMwkk6^kXE zENcAHHL1xzvGF&vlBm{mUvufHFC>tA@O>rKQBJCd<)WK!gnC6S)DBS(t}-A;WcX zJ&-#tWpPNC*weDqjL(D3&I&v-XzpN4x|igvvh|t;RZvBpX1#4ud_qq{d{m}u zE9H>GuqfB40)PQ1uBx13nOMvp$Z_TpU!lx(e_W`CuJ_%CO%RbQLdoiOHW$!ln_QZz z2p9qIWzZf0L_&Jop>Q#hK8vIcX)nd1D)Zx;`CV4iv3D5eICEP1O7B%#q_lO@d)#uv zOXBPnZy*G4fX&4(Ff-mH^1e-B?xSjUO|4>X^40zTbjCdo4#g_LouT#H7)lYyQR)+{ z*(YdZoG%|1NAr3-myxkQC0xq$6|Frn`Xhn+)Y443^r^`#-9wTc!jQT`h~SAmz5C*Jiz=MF?av7DyMzVmQf$_O3CTt_{ z@ezMfsqqRcmWc!aD}Ns_Q2Rj6jt| zjO)xkUL9}G?AKTQ?p@8BPgbb3j##D-H~w4ypW4g5-Qn)(m-JU^$`uPcN+vD7UY;Ts z=>LVU;W2pahr4_OpTTbdOQL@I`@)UFy)!jGgM_!|w}w_d3l`u4qJUc)&?s_=l}cpn zx%Ru6smy|}7;QaQS+V)CLY$Jc0Nq$lpkIj>WNZcc;p&5ZqcEpWwE zHXO@>5&L-)a&rE(hLA0(#R?#T0mu=y>chma{o#NsGg>E)T*BmB^jxm0r9gxIEs}3- za^}W^Z;|vQh)NJMyP+wEZMkB1;<|rWf!fpIo{ZG6O1P9jItj z3jhEdKy`^(>Jp{CWlU;Rm_`cf+dNG(ELbs7M!2$au5dWn^Mo&t_^0%*N!3|An$i!? z)@Dh$oE9?>(8igWbxa=!h*`v|S#7i*A3pGV zdYr72SODskIj!0sv)@-U)&!YW3iv#==u?7pqPI<#^mn?Z zmZs+Tf84)atUbV7wZ{M%A?ORL5OS>D)1+HBy2vojDA)#X@2$q?W^??{WWTd>X4%L* zTWNwSKk!4ontqyQQcXWS>(}&aTf|W-+0MnzOQy$4ijd`F<1jibaG-Pk?_p|249X%+?-c{!KLMREKMgpmuII zt9{7VQy7HyHaUDM#rCj1!%=!&hV!pGaC0uIW{3b{GcUnloG&Di8rdGe@KRNZwP^8$ zOc0a9kSsb11Y12o1`JS+C8*1-*ef9E)^8eFE~# z1~zf~)Utdd66KU*x0Ui{sqQN}yB!HrW@uGxoW+^{W+pbRZjG)aQnTsmhO6ATjWt_| zt^8Ch`vP1%T*Dn!wQ6*nxQukFIB=9|^>#xkb_RLZ;(FbZV+{%&p>e0BMp8){-Xj)? zeh_7^pe-$7M7U#jvF=c8ECG&K7;^Mh4x#oWHAh}Ot`xA=VjH!G`HD80CCF8(P7n9a zwFfMcb&eWQn^kfjKe^>&_5?rEQ|W?)+3ZA~b6ysIMT3~i!05x(L3`d3@>}hxO4n@x z@ot=P$w7>y60!IwOq4Z~G&uHrr%+{qQAiEBquuKkgjOf2sr0Cd6v;jm z1Z%Tb5U94g982DKy-*<{nd;3Xq#JYqiXTF~yes6i#I|`N9-aiS2ud+9!m^gUS^l z_%K&Sr0EOQRggGiNt2v!1sB%Br!6)6hI=yDi0XjLp6K5XFho!m^Vi{i3ysnD*REu% zC#Xy6)mm5EX*g87>4*+V2mf?2X{LnfJ4VsjoNvzYPVI0b9W3(+i#Wg`1B_hD8fwr0 zQg=*!*;{)X=uu}S+ruS?{qgR#U*OH8b>9z*hnIoMw}mwT9Kw8nPHSF}A*A;&6WEsA zA8tGyzuLX~yVG|Aeem+cHyQ!A%j-Z^ucpKGExpY%H}iHWBz=G1P4Ms@0u394Eg%HP z;l`nM;l|Y%g>eZMo(g1;8VwxB#Z8!H=!7hl5diOOdp#TbmY!TE33$sd!`298_w&7qk+1Rap0TncuF2L3-ZdRtU%&oozcATiq{@?F!cC((ph#gnJ{}> zl66(=EtS)a(g#m*ZB72xM}F*v*C4%xYjES`S!2~WHcpLA$rhT!4*1v()A77%gvPp2 z;xVV-j9kImFli+XQa=r66!(1%dK3KR^<{aIMH?V`ni*9KFL_tm19fX%!pc#Cv0|*D;;RrC!pEZg`)rfgN`K_9-$2Phj6s#@({SBM%$ zTndjLqcv|;l%tGFlxW+DdU3t|b+CS#v?*fCh9k@K!evY@9#H53g&NQ}-3`V$R91i_ zZ&dAoC*SWtIJ5~N>D`E>wn%{e!A8pLOP&zh;Qr5JqDcI6^R`6$sfnJS0H65P&aV%3 zRrYHS{%}`uTn^b6MHxD_V;Y@yxRHcqMsfUo%21FUJmVxc-I(;dfA|@-IAZ-Q%|0as zmG1ai*@=B(SvmLWVff)^gMG0lqXL)dZdK1_oG;()TJ5-f+7H&dKTS6{YHIqD-M(i< zvXj1lqYm7APUeR zkF<$;UtoqA3BexXBV-2R)zL7xD-(Tp$88db>&#u+Z<2p+5fkJ@n% zIv1S}9Tr$Rzbvnc>~LBs6_f(@q&v{z69lKYxLS9_oe${8bv}1KcR0bO{Ts^4FIk66 z=|M89A942Q4yO+L4#y6=4tKTVVR>MA^~lOng?%~-lB}HY6gF#bYWlpWXv$>S0~Zgo^z|aJ12&@ubhGO z-##9~+FjWBBYkK{j3{+-Tv{()f2;0%-h|C5=lT)Wmv!4kJmtP1l~1sJ+DsfIkQ-?3 z+kGJmyqD2cX?8BhrN2y0Jj5a$^RCh|2j!`m!*Hf&i>KG=Ux6|Wrc$3kz-^wX8mLZH z?wJmX`a`nv8$sy#jD@+#KS5_fuL{Dt$^PzV{oBW-44jn9?%nglF{95xKlg6p&zDj7-^bwBcs)!;kp!fq!vD*QAiU(j0$1zlwp2@k z=nSOLF>Qj9QR*rAZe%Uy7thffUPbr%Jv!Csgckx-*EGSgdN{T$*p1WB_dM*XiS7b{ z;Hme$DA)K_D`0@uF41n=tnYzvgSN9pMd5Ra0UyOj3`K%O+O_th?6c?SYK5U49aS>+ zMQB(8!P2PzxKXZx;Aa^n4U$vO4%l=)6Xn(3rVTNIfK#-3_YD|Zd{$32b~{i!4);(| zEcTljGcCLlWOtZeNHfyl+D@}eRet7;2uqK3*AUZAJwaYZT6$MDSIzWp7PHsAG2Ub3 zC`{WJGPb8jizlzFnH_^gclzD6W?he?S4DO`5c0;y96$4Pa=o2!-NA;YxGXK8?)v6L z;oKc50a^^D^Oq9@e!mxY4EkC)kjtWndaBuor^GiD+HL1>peZrle>d|k^ODRcI4Ut% z>zi#(dLG>LTA)=T4!8sgiKi5zx%Pb#gEwA0bx~f$&yKug%BGx8XC}k}8KX+$91tgA zrLNXK-(t%*h{LEnVw34dZX7*Rfepr?QA75PZAqLBUQ7#kT8mS@q9 z0n@t2xf^LYwsAo9B&+F|oDk!IHlWVli69XK&1g!&Bf@c-C|7U{_Z3=DT|ton6!~?Q z+Gmsn^<@!Fu1{~NLX{Z+0U#_lTXy93KM$V&oME~S0PxOVoc0rdFGlg}zd7Zn>jpif zK|u>p06+lCivMQ;tZVc?L1jhe!hoE>)|j(#g_g3TCXW3Yr=bOs$kN$|6iyP5=Unhx z!d$8`+N_LADbQletrDaIDJUmQ%Mdqtb-^o50j9thT!8@pfC|dNM=oDO9I_?l`qgRB z9GeM3om9V|AWgIG}hp1>_!K($_a;kEbq#+{|sxcBykDDU&z>#v{HFc2_DPPF~iqNfwn;w z7pc7r9v_OH!#LR&^9#kY6$iKdmr}FpeSh9HRa3d{Z9c6o2v1k;V zMB_e|gLU;th#sqAy{BCrq^CB94)vNyXZ3iOgRZ8THsPFer41)bpNerhD>M2leJt+p~Ao62^Sn8a~KLWXNLT2lyW*_}G!?T)#=iqL>ndcf*6 zuwntMJ_BnHfwie3AoRbO$V`!)JjnPJ{9T*R zV??G`lh^|m+OWf`S&=R+G_o9(#d={5M=bQ}jNmiRs|DDIot89b(PE?@hzjSX>$L}M zYjF_USfMzb&WhKfN(U}JxbSi91-JwyNhmse=2c}T`Wy}_bh2>zjnzej5YNG>|B&Ys zj-1ILoUZBj;&RZuI>g48v7RpeOC=}%!oH~^cO53x{}6jb^B9$xVU%7?T2HAH6WF$o zX+V;>1p9-zz}lbB?3@Zlwx<7CN&VbU;)ggI5O;hbs%Qjq(^ghoB^l$a&fod9gskfVIpc1xHFK#&f!T;{&#u4kCMEx zPOrjhF|RoHaxQ&NP;qF^zaYgf92;L$E&KDlgEKgtM7@qBuP9A|pxmo8aj-dMl=+T+ zJNPSsJlRd0VuT=p8l zxsnwHX=A-6H}YAB0Kq}T9zRk!6GSzBMNg+S{GSV`jcLsQ#(qG|Dmo%IQ^)U z|G^4?;g5QpdA9eCy*mn$3+pC2hSKtsE zyp+s3tTY*P;X$Rk3o>B>++pK)sH!pH6?`$@)XTn>ja)(FtU&hvKq78GQJgHCw4KqN!VKtrV~4Kd4P^PG#VmC z3u2PIv#7cLm0ylAYMxJRg1bs2{R zCL2kTKsx@gHa*aE3CSY8I_;sluE=-!!!Mj$y1;6_`n5-S&q7n~rQ6-{$x2hYV_)e- zj{^=%U^g6u8rYH=M{<$vxld;PLz{WL5}I4-*`eTl(6c;oeB@ zN^^2D+C)-*b+FJ<6E;MFH7J3Kd~($+6fil6F%z6hvmx1g2<@}fWLV4}@)RWAz|U!{ z$l3{3MEh@3mjCF*R9`W>a*6fzqRanVL5De<2mTc4Xb$Z&~fDL80$$1 zcVVuS{WJ^+-m0-lk7TTcr=BMJX1xr+7Xy;5D&VRC0Q75HW<9y{0nylAc-O>n>nv z5imw?4p=wii@5jgBZt>wo^*bSZFA(-n`bNSCe8%gw>kY95iKIrd!6q$$aId#SjvCD zY3)sl@;Mf)^z%PPvxcJY8}E)#%WyP}o2aFdnnc@ZnR(;A4E zv*nYyzpc$`^tbapp92Gd>rtSSR0t9T@F-xRr=fv>N7@X7Wdh*6z~A>kY|#!Xrr(3f z6u&-k4@pO-re(#6d*~cpyN8KA{Cil$L%D}dA|1*1aEg@uo8=bdYLbG&E)rQ8nI&N+ z8D)IGLL>JA&a9jEK+pVmOglXscQNpSjSH>CKudJmw7R4NH}$bQiJmfjwDGmAcx^9! zZP%|h<1DPN!!f*Unq{`C_FASJZEtGRG&SSGS&PuBw8uc?gzTsHw}%zus!qa2uaV3| zOPzFkq>t`{W{d!^vpU*Z{wTEiQ5OwIwIa36v;pdnh!G+|2boEGM&9~B{_B6nOO^to?NVx+ahugNYPjmr&Ko0~4 z<)jyIubn@ltGdENI_cO3=n*K$oah4ohmy~5$Nl~iAbI~HEg)%s%LK{Zx+X zQ2W#`p`J(YU!-DG)d6q+w;bfCzEsuptqAp;ygx>DsH^hV);GET`oe?2lX00060#VY^+(!U8Po(2HmCF{Ry|5^Y423D{kc0iX5P89-}K0pi*ga%{~4$*>Y20Hb1Et0N-R1im!7|2w{9v#lD-4JY$r5GcjVWbRP z;c?Ulx0|mHqv{kiC!c@=y>im%KF#u$T1hBOA%!=M3hPTpjIy02axO1u*Y_{oKd(1o(%#c3+zLRJQrbd+mRmS z0}6#zHdk1T(DZgxHqj6AJhI;<2MmiF_=`Z{zvbIYxVlTt&>Ah-^Yzhf`Ert}AE&cl zm?C}T!32f&_`?Va_z?Mu%nsPiX&;D1Ukk7=C@pJAKXGxsx-EJwv>ylvanqElg)t68 zsMHTDX%t$}RE>>huL!?-xV(v^VxvNT!CcGJNi>PT%iH~O^EUIG^sHrLB*bIFnaWXM zglHJz>o^NYKbM!q;GaE?+-KUES)oU%ypUGy;fIVF+ZXn5gKm z>b-fUqwxtNer}loY?19qBg5e-Q|^x5H6qH&+`W3TTzigla>_{m_I5|Kd9yPi#*^<2 zN4?s^@ElQM`rANZWJ!}_W_x?oNV7kq;wJ(hfCmBZ3EpV@sE%*PUCDnab$+wyl{{-R0es zj3f@ZW!DOoGY95_VxP>pj!fJq`}OqxUN_w&9pq0j%k04u1%NGp;I?S~E}NHMlnzdQ zmUU6JMi zxdVDY1eKXN6`MnBOF{D-{t$9CjXMQ+R(o(1*^iz@?0(){ZKus;#wF&XP^B)g2yr1i z%<4J)tvu8CsaSxx$fi4=fmAlYaFXD6#@X7oPEE9aD6M?-(Dj4=wR!H|c4bnE%XKF~ zGq8uF6q5`l55BYW^S!Qm)!FM*aDm=;aGS-}>f6CDgro4iB+?d-fu4g%Lu4vetBHRM z(f(Go-lCF2?H+$rYq6h36H*ya@hib2c6_O^KoG!iVrxwu>5vaCmMFaILkl(uH`ks7 zutVbwp=ZtM7+X@Cs|s31rQAQL!`ydu1!JN zlN&vAF82q%n#O@LiJa+2%(nU{)_9B6zUc>S_XSS=muok-kKlaLzZgMU5^Zf;XxUDC zYKwUkWjJDXeokH#sh&w?-!ujquLAw23EGaVEo*=@N+XdB-W~vdkKAVZBCGN~fk2cJ zTMmkW#!A_nKP+ldPp^xj?cWE#xap_VVhw%(cA>PyReDi-Ml!0Py9~QCHL7n4fB+%^ znz$ig5mX$rB&JIwa3SO9!Z^w3N_ed+QQ(piHFI+{LwB)~6V-V)TV=W21CG#08c7Yv z%w5ohl6ex;Y;7~~%!>Og@umnO;3c`?MXbqu*xa9$^z)f7$`jv2b_7f5f_|XmrXHf= zyxQEh`6sQ*_oi~w_Eu_{Du>LUTLGyOBIht?^l#EmB(_M`x;DP=%f8tj00JWjAtKW! z5#@w}6^I3H>g7>wD%WMUfJIEP+mV*VuB4Y5R~4^W%WXDn&Lp2~G_xRrA4>a~hkIwH zYxb_`nSnp&PfLFes8$~wbs7;guw37P$4{N#a?@ju5#Zm{26iC9U*E3o+PB; z;$`+RLw$>k#A)KzdA@z1%-=k0QuID1CCj3P_ysoJxQr2N&8Deyw0OzlfSxg(ZhBhC z@-3)?bST^_S&4nE2)v)#2clz%0=%=1(>dz8 zeD)ndA75xcTnH#c1{5X#eIj@UtbqPA6ZmKr2#h3*d_zoSjIyk*vTZ-RZ9ToI0_ zQ^ss{A4qCDz^mMqK0JE77w0g2FD|gp>c{%qiJs4ReIY8VcLEMFccC}Jc zYGw!+8l@PxOM4bU09+t4N0jSdGk2UdzKeG|t~I{%OfGQiyrzj60PTeH->C_Z8nc97 zQ~v-6^DzN2AW1+1N&rAWlzeiad=TK|{ttSfd;paLAYd{mG^$_lJ^%!oKGP(R5Dybz zH4qL^az+P?(^PgC0N6SExPYMmbb9QyRuWqebR7S#J<5~I6VWWQ7QCE zu?g}?qvNm%`S`FgWMiGQa_%8rqdLr7K&&EtC*pL5;MhOjhq z-DB^vhA;(g_(=PnDN5J!Dh3A->TaslXh7KdK8hZYzA`QwPPFSF6p^e1VA?yCN2+Wy zWClywuSn-N`Vk}^H@u%29?&D3Vy8$UMJ$k^CMs_Ndx3cEfRMjz4tIq`I0*h#!AU2G=0K=q=YDRoA3hMNeKn{E zQpBvN2opS(h){Lb*~{+OC3a5gM$}r}&(*a8seJcf*QcN6e{7tpZfy7m0he)XWxG%I1OzNB)oRK<2>hLM zNlpdBB-?av@B^-fyCU*F&Ig!${T5g=(G~XfPnR`rv@fnm4<#CYmx4LxS#+9mGJ}i^ zy=5I1-0ZoBH?9!jgk~%YlTBg1pqk^{rGr zpJc~22iYWK*>YqQ^bV(ix%jNB&zkHX6-v9jnivO!(N*}DCx3vtGA?Kj7@QZEG7@im zmIs~QH&!c8gXvsV+lG@-&G~w4R;W}rP!X$2q3|tIupF07JY0YWU^40Ug)`5W3#J~r z(7-qL0X_#P;`XS-=M$?Rwt;ljh=-f;MLZ7c@tThL@!Yie$Ya6*=prK< z@8!`5@fn*^M(XRTfu8IN1jQq3R8OJLn@>< zGHO=oqOrV_|AG9_q`a$Q+H(`!lkfkc4c;HnQ`jm815|MP5=m`*Gd!Z`+7QjfQa0@4 zRn)4!RCiT-7Fuqwab`YP(_S7eN$-Ivw9CXTGURWt3dq+Yd7;fXK)4J)WDNVc$>UrI z8Xm0?mx?fxPsv^6-E4h(lJY{Dv$~d6uyZEp|GS(J{3K|GG=G{i`QAfCkN#0GpmXuN zJ#qX~Vf@}0FvnubEe!2IXuG%F58c^C=lBP}O^bSe+}_ztqgoQ?l~p=WudFNl@*)1# zlSCSG8ChN|EI_l0o@q3m)(h8Bf0a^xrxW#^uN8^(Qn}RdyHX{lNNhTE$zrRXOg2kM zV67RgdD?urQ>f!Q}!6AKMEk2&~O`>C9KVp1}adt|Ac%&@r#qR@>j`9?57^;iV*AGR-EmkV8zg-` zaYIzo;wz=NywjMkK8oPW4a}0pma%I|=+S=AK_0LB?V%UfA0Zks5GnU?@uWD-V>a`T zvUo4VuGMf~=GD^0>RS*sa|%gI_OpM%MX?bFh7Ex58l}vP$SHh0_XL?zIKL3$> zIh*enCGg~wolV$sRn zCxnoYnCNKVLalNeo)6f`)wLC{_GE7w4v2y_1A#DZ7a47r#Uk&Duw9V@iS{S1eS8kG z92YBtWlT2a+v5(^9gUElce2Vvb;rL0_ukIjLi#8dk*Z~MWeDmjY-zbTVoj$TBVSm* z;CXA7_28ADlPI--65t<(l?i6PQO&iv-RTTz+buE=wNK@QmT{@#`6lDU#zDj7n1>yEEdZ>DMPAbzL_Gj3S-aS!r>G3x5HK z5!`QYRiRy|KOQF=qO>&@iu7DC?064D*W^rqgG?#e>QM4W@_DI=CvQB3UcLt?|nED?%hNc^K|74DG*7QEWsha~8$~W6={bSFe=mfJ$MrKGxIACuuH)n3{wvbALRh zpUco^j|YE&kr;O0m)+3~$t8dY{NHgP0+83*qaREWGUyjBsJ}CT%vIrjp_!YP$#uNc z<{8OQ4;y39Nj!q@{_Gn<$BLD2I4ms!=dy4AnJhzi{kkS@VVRbk{6x`|RJz@KzHw<@ z>pG{?@#ud)mh?5FKS?;Rjc5?&825y2!sn&X@a&kq!x_o`wbF-L?j&|!7-3|ug)+HFqjyb9F4V%Yexo= zaY!X1O5$`1Yi1j7WfHH%m=e#6$fdMt1z>BTo%_JiX8?!Z%LtP=>HP|;5N$u*QnRMQ zg?EQ1d5SK_=MJG5URX>fy+MCC^g7xAH4RCB<>?cus1Hs61FUpOU-?zAtO!Nh5a$YX z=ji&%!@N^GvBdoH(+iZq#5|0-Ik?XgEzM)mXBE=fQLt#_I2D zHs+0W=d}TH!ia@PRjcm;mo`f6$rnC`vAS5O#F0gc$+_vWvCdQ<$HtCC* zb-WGjFI+8M`~LvccPHNWYTI^0+NlLfJi6*XM3PE|WYvnf(TZRkRkGRW9F~<|FV4K2 z8YTXb6rrX`lva}Tyh`p?N{>W>Ebhy-WPuH6EtBuMBq#{{?|J6!mLShQm`>~M3oH{t z+`)`|;2}Q?)NveUowtqE(CQv?n5}AVd;ylGDt}X{yy&_fJ=T0GCLZB@0cAh{CQjdQ zkQUF9r0Q(+K^w6 z^6to3d7iC3eDkGxEmpkszx8$URNpb-9d zA(tUjpz^CX2*p%j`iK%piKQ2OcEak-@J*dX7zip31p4U^zq2j)gn2;9G*ZodLx|A; z@cPabG!lhUiRbuClJeWnhe3gZU@*9-xG9$>^ef31S*+MGq!E4`y5Eb4|fl0`8Xx(vGw>W=vov|>yVjIZ0Jfqga(?cFlVUp zRrr0ApkFNdT;Z=b=v;AFVK6AvRRx;81<9Gb^{U4;H{t)l>K*u07qjY8G;I3;X#>rG z>#WTe66Vq-jaZKHA4=L6Oe4w~$t{uQOea`#n=^wXC7>16ZOASJ#MIbfT}$bUMv*JK zv2e%}q8;)s209AfdFPLSQj5%g!?z@qLWC9S6>UF9``JC@{F6M}N4dmPWjTJ{^dPsg zCKGEDmUO4_;UKZ1R13>L5|thi^BGO}9QBH=K>atLbGO6gj>%f`@3<6m@vo4VUX{g$->gndKVTUd|q z&ne(jjNv6+@liO@8Q!$HZD-_*0`GDBfB~pH(Jj8o7o0JVh}E{$`A|MaCe>WeRvy0# zg;i2G^|0#PRQW0ddOtY0#B}hW?C%Rfc!%mo_Y*a{nt>at3o~91q!wqz+cSNc(kq)X z+u>R>aH}z=wKHOi?(rTEvNRt&Gk&Y#&5cW6Ch5@c#2jwYFv_DAstl||E*A4ZTP?kX z>$&O3nqkFmQi*KIDcjkb{$#P|bMau`)_P*Q!Xcq=wCKjiw0MFsxuM$U)2ve%#K&z^ zw}DPK#Mr1#bHA{cL5FkbZceRwuJwz@J%aJwAVIdj^s5mP;J{skcd02pmMj9pk!c)> zUoi+7DHD3f_O1{wNH`X9xdu>IUB0YC_ZY(@6FSo0ZIQG~iQ!YXHAEC5Ud%bv=x67l z7YQM|L|k1tr;>HAZAG-Hbes}GaB%SmtpCU=BlEc_^JPU+X^kl4t0?DQYxZU)5gw{E znWnrdmCHQOicnMn3b_Fp;dYM!QMQ%_RImaPrW}1}@9u6yq+70i}VDC|)5hac{fs5g6$Ky6Ajt{r&aTVch zk7dPq6{ZmF&zk46c3a06FNXvY4h$2**QMExtjwOzzOI;EEIrf23>KBQ2+`j?7MD?8 zNC}M8nz}3xdq7ea(uva{xpaaYx^{vyX5*n?OlURhH8}a^LpiSLusi@kq2P!$qQRll z$2I|=xElyL#zkN~&VS`=$lj39JNcCz`?OrYt_$^z)0O8gv?2A4VA1KNk(5(I)QWOU z7}DvSF9+-r&+Gzc-k;*jhOKVK^M^nZ(f?(DvnXB*n1;l%W-TLxwY2nB^2_a&7mZ6v zC*cWo9FWYC4GaNyN7uHBPgv^A5}H`h>)>3Xtgq!o(KYJ7N5va+7A$(4Xmcbq3BSI& zq6o#u$q}U1`4d3NMMG9C2nhkjjU@QcB+1~_pBx#dJa8VJvtD}bT-3`_S1~5hQv%bu&w!iu#1{P)l?ScSEh`;= zB|XLg1f*H_l;ks4wd@&Ka`-q9o-mmV2cki#*{s{rtDJ=fm@9bqZo;oc&XEICLmt!{ zX5^xYqme;A&uVtD!(`i^EX^bXxi47DDbAUI_ySexOEOo-OBQHB9FWA4IHsg;+Hh3QsT(b6 z9dSZ!|A0{8s5dwxdCl{S^@IG=$h+D9E0nhd00~+~ zNV0MKP%q>z<(wk@g>T(@FZv4epY>wIpSZ8n^Mv!EKiKIwUC8}v@UJt#%xO}3*IhN_ zM`c*yhx+t2RzEfa^5I|OhD^!s5O6v^VX@=$4*9=tO|An2ZB1Va1q=lRH_1w9F7!Yz z%$Fj4u|BnEZ;CT33dBNvs1LfKs!I7IiB#3(2;wRZfxV6aL2!a(5XPzDp}f@|?%p-b zMwZ48yR*Zd>DDGuY(j)8TW$)1dcYN8rIWn75W)`ONg85W#BX`AL$#(xUP# z&u<=4enx+41kHNSL;!9_Jh@)L0KTes_n7ea+AH%H6g-fUvBLir7=(RXSaXRS3V00eI)LgKI1oomu@0X~@I$|p3M!nU8t zpa1~A$WZ8e*Iz_S%_bx;Aidb_=c%hT_P1Z(Mh(5iC<65rSMoRSdz3AOh0g=&U)a$u zr%;T^0MPwQ63(eXhu7NUJHww*d(YUdc}&oJsQ5WNd=VD(Pw7s#VPz6_35A_v^RGxv zNnRPi{tUVNs!xzQt;Vc3clkvz}tJVa6bNWU+K4%N*3BG&Xnv2M@=7eNlD+ zC^RbF#r{mxzj_N+bxw_e7xf2dSlmcZXmVmqDljX_so9Mck^FR~Pn*2er#f5mf%!O( zB7T>yuUfv?^IsYCIw;2UgT5wtRn|q~wBNeng@H@YLp}@2HGebnKTZsQ-2g?iA04^h ztyN;6Wk^_zvkVfOnx&$Y0-X>k?A8Z6S5C=q?kk|;CxtoQWdBxcb$P`H3I_WB5?ui^ zeQ}SwDy8Sz>5FnXcoTeyUZNmpHRem)JKkcyyv#DZTf3S#fuva;#m5Q+-@%sErtE=}B2`@lUdlGLdgYkfFgr}I2)7raMklFWGCnmm5BCwZD1 z?nn6)QKdx$#bHGQI*43Ipkv?5SNTRJ9aDPA+;p)~7%?-Z7BS=^*(n1DTj9q6yScZ4 zig-2@94k}{dEryKV6Z|*tSuXpY|-s%6^*+|k1KT;f&B!BlG zVoAsIOU9@c?QsgM!7i9_7ckoRo2rUDrUV`6!cKFGJP=NEfgh#s$$NH zgbOI8NCaHCGO6Ts0Kq`_Bc)`UpXA&0lcLflgb_Qr1T zf(aHp1hDtSiCVM$uk`(8Sa6sm?aOJF_OblMnoO~-@U)26I6v zZ=Ib_x=Y!4)N3R}#muG1PAFJVB^qI0-j>7oWCw@J<=lzYLB;TvN_c9Z-?=)tBI+PQ zlBYqmA@M2>Y8*Fx;7c$QX{LQz>TgJkYRzhE-}ATrNYUTA^vm-@#{4uJ{n9BC{w90> zP1d5kQY2*YZ!4`K9~=!HIpm9lP;@4M=|d5ixaBFZlxH*vFrCJP zA8Km`gD9j8cIVyC{2^qRATTBY%pFN2VQz?EPr9|J-ElzMaK|?D(EgLT9UxGDdh39K z=lFn;J-xd16!iL>@cNk3JC^rC&t}cYRXQf{*oE_j#jbAa!2d8jDY@hQ_JB;FFbC1| zR#+dA-Ig;MGN?<}c@!CC&S*Fs@sA&>`L@Bi$7G9E+!3UKi5R0S5U}fr*m!g%PZx>}O6E}W;I(dFLA=U z35=aF7LDLE_SFxYiTCBAk&k77xf$ZU@ti*vPG(Wz3-zdg=z|_WbY?pF?aO`ON1;I{ zbKo3SNcSa)7$W5wPq6Keg` z4f*1Ta%dR@BVyA^08wq6frHVv+8c%`R?k5qEw2%c|4>CiJ_RGWLotzQR65L)U;#-S zz}@X5CP4s69;$5ggACp=RIuOEKLAm~m`Gp}Cr}8I9iTFlA1g}ze)5E1$?>{h$8VIfJ^

%M- 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 diff --git a/web/public/fonts/Roboto/Roboto-LightItalic.woff2 b/web/public/fonts/Roboto/Roboto-LightItalic.woff2 deleted file mode 100644 index a0238dfea253781487797564a4037d594afa3ef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69572 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 T8oASEU#|i}o1^XL@F<`HOc2C@ diff --git a/web/public/fonts/Roboto/Roboto-Medium.woff2 b/web/public/fonts/Roboto/Roboto-Medium.woff2 deleted file mode 100644 index 8b1aebb23d79df1d3fe3c1aa9d232d35a8285e00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64732 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 z 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

vvIK{Pm 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 O9w2gB{OJiU=mY>Df{N$> diff --git a/web/public/fonts/Roboto/Roboto-Thin.woff2 b/web/public/fonts/Roboto/Roboto-Thin.woff2 deleted file mode 100644 index 85c029e111a22e2b97ad3157f5023c012ff289f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61912 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 diff --git a/web/public/fonts/Roboto/Roboto-ThinItalic.woff2 b/web/public/fonts/Roboto/Roboto-ThinItalic.woff2 deleted file mode 100644 index f698c77d4de5d57bf9b4a6826156438fde15595e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67348 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%0D#R? zGcASs8QU=^sa&0uAoThc2Al>sgY$Rw3_Lw7LLw>=RAoTvCGeQ$MbJeD!rV_bAuUQ} z2OU0U0&}qwm^^r-o_lyv(Uoni#S??KvIT6`c?qD*D6hfy+al*uT%=)#*#`DPO%a~) z)vHBVhF4)5sI&9xtJNn2?RggrYTxg;bc341{mYI=E)W!0L@k87t^IeW>X@6_9s9TLs}rPiS~ z!3dMldHeUzqg4;y!+qcDG%u2DV&{0MAL7uw_t=ytq6Q#F@RVQ-Tpxh&?g{q_{Vd2W z`#KQCm>VsqDhs|qqc%akGO8=MCoG{}&9!+nnh%rwz@rqNi)Xss;TXyqmxd@FT}Im? z_PMVj&^eb{*>-rn*eNb&8b2j=U_dZuXmdH3vIAi3-~2q(1p%e*p%GZqgC{@>8GlCG zr@+nG&=@Hmy#ZroCubQnm)ijC377Sh!1Ec)Hwg$HH&$i-veBv*5h80`(v@rD3g-%k zMM->UPDHSl*2^o$FIoKPFIKOQSHz8R6-~i=y=nlxTC{K#OHgtMR>|8so?4hy?ko|W@8dRP6Z!uMin7JW%$ zs3#L0iB7SWdb3CH*kyJ9iRlc$TEeVq1S~4mX4-}thS7juI9agdVm;MO+TxU%pyGr~ zJ7fSaF1|JAFRe&gkf)h2)4T$mOip9qm;{B(7Eou{d8y;fSloGrm*7BVzeS9AqavPc zdihN0r)aoQJ0&2#X+Ag&t_H6Mp@&Ecl88W3v&aY;IM%bSi{{4Q5Q;!r@9TD(v_;o=}s}B@G#fcPtCiM_B>y}}i*4Y4Su;v?C^@cOW+PUMlv~~Z|9_6eH z*Wlz4ITCSdM&KH`C@}u=k=chHfxpW+Pq(^`fa|d2#9Z!@qA)Hy!klngfTE+yuU}lY1psNG#v0LxqbWrpc}cvM*#qa+aS9D zQ6mu#hSr|I=2^6|P<<@kibADEBGGgBFCKLF7jEaJ@S+mm#GSa{6N?-Gz|ire`h$Cw zZ|=liX@z_m6ZulWC#%I0eWj=6FBY%YqhSLe^jk& zZMh+A?>gGO#HA=S)Rc&lkp_@1h#iv9A_igc;N1S~W|Z_$cocq#V!SYZEW-`Jqv=y% zL^fCJqV=AERJJy+GtMTxBC;2Rpt>EPDn#r+7N?sCMKeF7ZStGa!i4#QJUq{H_8w6Y zCGFmSL({Zo5#$}B+66(D{;>3OZX=?z+*1luh&!<(+mO|mU~xl{*|-Ht0#Im-j@$oD1_bkYE6$_c{_aHO`2^(viT&A+ z!4X7l!3#0s{0^_C?oy4W{OBp?UKZ9Ms2p**S~KseL1#x^_0M(93wR#D>=L4bxc4U! zlGV$KaL`$-Y)%{gB1)G9E>-W%G>nYF3jL64rRqmx0o>6dJ?{jgqtwNBN5K4tc*Yye zP%<}~z>T-Teb3-3F>cnFTjvF3rg>g4H-)gG< zsvv4;tUE`HM3Bfh4hNF;R0sd7L9BXahnMNQj0VbVP9alP%7w5H=L6e#_elnxV=kO$ zC%9H{W)Q1L$gygquJs$7rEm|27PnM|c4bDOha(EzkTMO~#yotHc%!45A&}ISm&Fkr zV-ZIVUT)Z$e!53o4~5wV&>ZP{FxGBIY5n^Xw?-S-P7z&3P4shAMc<;k=u$uHuv$W_ zqP7^S#=KABi}NgxWwXSt*ujA)2-a_7qqhQ_pz9=Xa#&++F+LQ6s4am@Hw&yo!N88T z3Pdk>m2zUHR-0RMYL~F-NM^Tn5QUe)!S?5}n_Xb!yHi&@s@G~6_`!pEvDV7>J=*P) zu*VIGg;->^2l5>zdlf0QcMw@_M;Ofz5JnjeW7HKn{`o)_`Dz8F zV(Nft(bTzhy%)5MIr=HbxUuP0k+E~T3z68bQIrW|&WDjAvDeaSLH?W;Rv5ez!PDd4 z9eEcLN7vs<-k!F{6!WxtdUUZ| zvj;-HoLDLH8LppC>)v@HGC#{ETCqhhp*NW=1?S}kGlUd;0yRLP zj2SqP#7sk)iqwrhOHIy&@jNqQB?+fHoU3#my&cSuAhC)?wp4+-QTd@zLOzEGP955w z`v(Pl?;&O|GfDjvJA$UOpJVc7V%{8@D{?47n!K}Pkh(k-*GmV|bdo&QDvXVvZ@}0{ z1=B7YAbd=@g9`A{&=Lp;Ha}wR0#qHK7>V2&a|pDvdlZNYj<|vLi7Vbko}=$(g7&zI zK&WqWzfDo*m5@+Sguk?@Z)>quaeyf(nntGF(3+9)M;|no%i50U7Ia0SXvM}rwz-Fs z>!G>}@pT8m>h{F63+9r1G8TZ%7V>O426REsRyG+$fB7A{=g26?!C9GC*WAgTHa76K z@(#KkzK#)IJwqg*Q7*r5$A`qLSd3f4#Bswwr}6pwHHNyJV9y0Ks=BapMo%UmE(nR1 zgWD>ET0AP9`{GnP09}ikg*MDRAlS!T|6nqbBmT*JzA!TL<#H=XC#3}(i2bo(E$MVt z(W{V%S!ka&2>D8V5!Q(H%@em&JAfJ|mFYSYenczgKiO;xgd+5WoJ*6PCq}KNs5XL< zeFtuI6GD;DWwr0ek<`P&d!gtq#uC!UQ7r_h4#<*yN8yaKC74u@)vlkxG3O!^_EBrE zg86fnmbWS^AVAX1+1)N$U=>ZbLvBtD2{5#Pp3tj9;^bfJVViIT4FBuP*J_?QUCh?n zS?^$ty@yx8-PVeR+xL#~w{kDYU|l=IWbF^IB+Dg!&HA!#>YwYX#-p;M;(LqK3ZGpB zFkYG$yj9*rgM_t2ZTgVpozn-aS&SmpO>lhM``62v8#VCk8)R0S23#lg5D8NfNpk%n zrShs$-_)JD$fpEVa#v<*147koR_SG+Dw1I0*4fBKezj>=inm~RAp6bKt1Kh6Z-_o; z#-3A{4tA9`jdBnvIsufDG`p*ER9CORQoAtT7Q5Ik!*gmRscCb6#SM z#=lP@ng7tw9|HNM<(V42J}*R{-U`ND+8&NmUv#8=>esFD`yDLBYlND_0j_*s*?D7w z0lw}5Nt!|ZaF)dSun-|-|&F=Yq1VG(sk0-Bgb@QMFy#(l;0^}HeOb?^5E zwMnLx;FV-nAsd*OC6B46-Q7Ni5k7C2BKhSv{7sXMJ|-9LMP|a=RGaXLTE@QL+j(qg z5=F)a!sr~U#y6*r`e8K;SB~#u#|RvPH2B`5bGB1A^U(ZyKdWYt1RNzfo??`Klyus? zPk5T~7EvlW2}$OQyda0z(_ikfyA|zRX|ffOc01*Lrd14Y9W=quK@|Yh*kI#=TO9YL zSDdhM2zd$D9+R9C%RX&Dv>DCq1I%Y{rL0I+sZTCVu8ADYPpa2}Vx_7XGh`ckdO7%W z44NS2oCI8=2g<(h!xT72bg{GafU}XOA}`A2OyY)bHZI40T#Z9eFcRGe2xCIknk|c{ z?4Q6>A| zZ^r!RReA6jnqj}vu$Lu7qLsqC)Qm~7v?-07%;06+wFE^8kwupmr3 zDOf_g2TMKrwX%-gcVZui%MQeW>fPdYsKT>o&E4%~3d+=i>rknivundCJzKy@ohKbR z0~pp(Ga5H_SlWx_ftvk{b}(u_yOH7xZCED7o%z%Prde5vH%qrnS}E+NwPnIRwb}Sk zEJZ$?<7WL}%bH38W!)A{Q%>1Sl?*1>zzWU6z&AejwOQTMtu5b4*{H?T8HV?>QS0FZ z{i4Q#72wUbGu{rR+OLH9YH8)|_qY*{lo5hRyNOiGDLi75Aql<6{w^Dv^t=e(W*Tos znZ1gPfdCy44tA~^<_F02I0P?#3KG$!1bpuP#-XB8|H8WsC$ACiljDvH&vsA$;h)&i~lc8+63jb^Q?iCVK6 zm3J6A93n;^ILacbE=u-IQi!C}m;-*^GM5juC7K+|d`QgS=XUBVd^ z&$1P{G!0Q*675}?hIlj!L6548E&+sE*5rFiLdc<*X=9k?&Lb8RTX1yyO2(9?yfE2T zO51BAy1E@r-H~=W#8RF$Z#u0*DU9=M1X^Id&glwhrY8CB=ACK22#uJ1JBrBH!k24K zM`z^riig0(cWi^RlV5G_c@*wFKHZ{#kbm8ZVEX0>CNMDJgOw(CJ1SD}W`r@)(d%tM zGPZrDegmVt?m@-5v>V7Up&f)}!nX3lCWyAa1UZ=A4TprH7m9`cQ2x>9n2&D#8Z*0# zLKHGDH4}9BKwZ4Ty_h?K404758;v;njjp0$TyYVTf$4cXf%7Qpp=weiTJz%kUPfCO zj*6ZxK;F`Y-H|jCBORw?%M+Pt1L_1QNL5r-s2Z>$wssBBe>WS=*(|0=;@@H`LJXGblx{!B19KgbV8qt;~IDXT7a0erb^TQAZ#LOe-I-NSgsv(UkLp>gU5guWF+}veI=Dul8 z_C4g(Hor_e)r)j{wtd@v-=4SJ>I(g`*_O~3B=(3}mKgNw+fEOfx8|w2dOJYg1es?* zHup`}T$>3WCMfw9a_}eV-a;%9w8s~{ZG7JDiH-h=_Xo{S(+7sDf?RJvP6z@kXv=$S zGqU}@-XnIITz|&rSMjsvng~#@6pjQhNaZ1}qo(I3_l`h?dnW)LK0RnYcppH$SEfK1 z9TP1-9L5Hj|5B;@Wga#5qUZHIMuSG+oPah3W|ozN=>Cv_4v>;=5*fOuh2a%%(BO0G z!~KKit+_sSoqEul{&8xaCjB&AhvD_Z@qt%@^6ns3xi+7L^DqGLDp12dYL*K&FOP@G z8i#KC+X?r*rywdPE2TYV(+L(mnH7|O2Vk$kuYg{A zdGPNquTs{+Ps1NO*IJM8f41=dTVJH#_#ZuW?!Ld;l-$Ne28z!1GzOday~M|O57ksp z(ydmy$ZDmFgoXLxC5O{4$1bNXE0#93K}n3^RYQUg&(mLtpPFFeg>D(@P4j9@&4j27 z0eTY!eHS0@VJY@@$1%`Xt6rwlF8eO$+YX3oNa)8To|VlO#dIyC+4$55iOqxUW&YGp z&mZnt(8d`lSx>thg}IwDPipbi!7addUTMB+Uc3%y z$?(18cG~TcA;B>~x}<}bF}C`NiZ^Z}dJ&sSq%C7L1p6E9WqxvfRySt1IT*NtjPfN0 zDvIR)pAJ9|C%jgInoqlTxQ*#h@-?BoloY+` zrVvDv6+u+Xq)n82jK@G#c!17Z{@)kDoQ#Hnv;ipOziyd5=yTQFxtbgXp*;0?R$>E{ zZGos^yc8@XT6iEX02Fw0b4<*%QM;Lbj^VKhn-Mn81`}K^9&|R0#cTQ0W2T>Ds$h{v z+6_QZzaVrhnLIWB02}JGORjt+uo&&k``hhJ<8?2)zjiOWzjRMs-pd?+hntWFJ>QZr zho9=)o+9Qft>g2|l(+*H3!&N!d-_Z>S>u805@GFr>t1%hcCWfTmU-@%gK~A!hbBkR z4F_?K_+X0%x9-nfZgA=TRDMnK1-?!TKZ-Q@hj@zNrc6q1QJ0r4*DjyBT)MoKKQOzN zr3~U3%3S8UWXF-k!8S>hEHS$DCEMJ(OvC-uFGxfNylAG8$i4>egwezcBeQM~Yjy44 zMl|+m2O59g@^ibhcI@kU=e#8U>`v{@PmSO!rdeQyq1e1K|7R8C zUZ2QqRE1uHshUj_y)Vu;Gnw2$8Y2!P;Td+Lb}U3{77R9+0MOi`Q>%lRR{?b=oj;qd z^?J^u@z-6c^83AU0cH+PZC(-&NsW}W*bta59&V*i%C~D2CQUft+5V#<`9y==(^r>A zPSY$abU2x|G>n%Tu*s1_H54fPfbGt^Bm~@%eMDDkYV-6{83!$ofu&QL*--( z%m6zkYqEt^$mufqz)Gx)TlR>9TpmkSj-gdM)~@D4YEyUJ=)e?aNz(Fe!?xK7hS-ej zcLqI%Oj+QdQfSXPh8F>|_?bh8&eES5P9264RSnlycK@eRp=FlAp1GQ@#h)BhgV9+2 zWca?n)$FQna~olUd^O*0c}l7Ca~@_|(;#sg%;HS%2v5_^#O|EI6KEq%JesZr z(|q@+c8Yn`o*_Ao@Y{wh)a6pLj4Gnw^!3In78Z?|h{a=K05iPJH^3KG;&ye+Hw#=oY04Djb3$kJ`o%ya0EO&@PJn1thwh=$$i0o!oe9~DM zz`*AM5H5NOfGnRQGN%sV`HTW)B7y7JBGTT8u!EfxgVP2E5UEYYc~xu5dUu1VAV|nh zQNXbmL`kt^aD%ioM5P!4Q%sUUdvH^5-pGD)2Vv6Ya)(@kzwxl#Xiw+JWjw2C3zD-rL3C`w_(rC z_K?#TnMH6>IRlk?pj1IPLF2&&zGkA`SZ=hYYZk(^5{UYsQrtKs#Lf~S8H~`5o1n`2 zUv`7?`<);FphVufNcw%Auj~8`yYvD80Dk%xj%xq_en*akc9-mLJvsI{>We)3TZVRIom@NS42&> zRc&bIE>6AcxrD>B2y!uwEB26UJbcL`uEj3aR>XYF)lB5FDrOqbQ&in^RTRFA4<~1k zaf$Y*Np!KijYFG@GvQ)YF3AC_3DpTAs}m#xp+eF@J?u9{zQ*q2Q1wrVuB%6i@I&`Kwwn0m4JQF-FeshFueenG z?o_|~Jhg1I94XyLj%nsvGOOPyEY_gHDdr2B_>u9&Oqq(w-lC+(Nc}vj)SS=Nanx6e zi;ffPP);_ZGg85^qRb?w7KJh!aq)mqUU8jOUYiK_&4CWH=qJIGdKiW|^smjS&%e!4 zBsrdS+9xhnDC}cN^j;3L;;gI^I0kkgqp6dy4ngS*`VUcneGs5c3|2_OakNv343Ph2 z@pxO;M@zCfhxlZ8<Vq$fjGCaRd$1zh@f|m<&2@>fN|*ky(X+$l3>*SE zEj9It;_OxS2~W++OQ8!XCZ1cO(&%+|Nn(-+mSF=^yjgGJte2F4Wyapc?88Rho2Ezp zF9$ZKYcnRoKwCdw7euer5gD7&(<+qBgHI;YF@!9G%0#4qt4-;fN8;j!TAWY;;H?xf zv2X^Z=r7E@UdaJBIqUdhEFQZMYeevsopt?hiNHmOGTqp=&_e*q5(+Wsm z^FLIwNp!hcgkI0lYaDzlhbwo;3u ze4O$fdLz5Oo|L}EhLHP%XVWT~`x%RM;Q#zRY3#GaUk|DBb zv`FxY+L7$&C~>tg^z!GLXr?>R#5g9#L9Xw)Cd_lb#WSU^U__k6h}_J5iD?R)!YzTU zU&^+)OfI8*--7wBP>LQBufKxwRH08KgpC{`mquR;zKr#W2EcXzBuAAdg0pmIeTywg z4bu=*gWn-cEmH{tDaLQ)9DNk+OB0t%+=@ zAz*9uy&T+>hhO)%*nVNM602dk$MG)@*aHWrb%A)+B)sYx1x^l1_C#e&!jA=h2Le%` zMIR|{D=_YK4Bv4-dlpu$_VrHPGAyLjpMhtH8V|rF& zhMa6O*fTl@_g1WM%kCc@0lNt58vL1|jm0pMBw<_v;enf+tOU1i`KrXmzEXPHo z{jjl;Zmx=R1|4%lc_?2OO#f~km)t`EfCYd0+k#B}B27AA9lAKqZKQGl(K_U%6D{jl3l`%7-)I zDGzhfwLbxm3s#3Xn{*F5Bb3c;PRTa3Y?4DpW2Sv7wxFyB4&j~j6qB7$QlwH@)p5J= zKOJddIc&C!4(scZ{R0mjR1CRaN`1gxd&VU&*MQ)y5^R0|*1}V-6fhRP8bX^%;(`%d zmB3X40Q9eJnT({>s|BoiXAyQ(J-k-LqnPlOLSv9C(6f5LB%C4h$@D~$nH9fF3!9V9 zSaK~{q|EOykqcwCv>W1aX|kMRt|h*H371uvQ5mr@K5gMfzUO!uv%XgB@_9cDQ=U~@ z!5ay991{Zsmt*5HVN^^CGmqZ!&)P*>?fxqT`ana5Kw}47GhUBN(Cz`Wy{tQi_x)QW zX!!v8{u_HJw7-)3iT+=Mm$ZZ7(pzExJL!Q<3^0>~zF!6wWgLNZCG5(-;4+#=SuFM( z$4p|_Gn^|#N{)&@vjbKWo{U^eFGdzt%6ED8I}XR*7G8-@TFk2&?j+2u z9quDTVeo=3T-|zWZ@k6ab5HA!Bz@U=y$Q6zKI7@|arB_;$=OL=I*0Lec9ACWfY{q} z$T(9aYu=fsUg`qr-Nsn@;T=<>dY{n)-@UeWuip#`GEPu#vZqFmof8k+;EHJPqH$LuOC^W$L576}+I$ z+ca)~j{QbMdf(T<%eC<{9g&(@;*LKdN%Md)`{!)VQW$Ffg*}`r_L+-$a`;1z!$c

%gYSSNwznQ%u4BQZ{o{1mP#=5gv^?8e=Y+*9 zZDPYp(-sSRynx)LXdC)tkGsu%@Wj62G(>MA<=%GNxu1t|)B3;V%(;&-Kqcb$E6z4Z zf%}QyH_*CGFac&(FSmNukG18+&cn*lBW#kvbih_pP~<|wfboE}JGKSp72;}7{9DcGDW;VIa5|HMy`kJ02# zWI^$2EvLjh8d*DrJ#H5{I7>@>)QP+#)f?caNAw!(bi2JQJJsJtD)mb>IG0U1RBu6B z1!DX1qi+XCo0kL@tD970b5hqOtxsb+(mRodKuY!@3rZ%+Kh*2MB|FGPLR@NMWzpu8 zL)R9{Aq7>S?v-aips4otjcGg-M~|(r*{!6ihM&mAuR+LR^@(!bvBU7X(!p{c*XK>iT!HIV3OH%hCv@jz=sE@f-I z@9=-7I{dO6;8?b|de?e_!aF?+&8gWlVq%bdy=&PpVaz+GjG>_`hS-dUJQ6wBT=zJ_ jwvJ4UdHV`osdp_;<{dN0&?uV2S@I(d1AgAV=Kufz^RdF? diff --git a/web/public/fonts/SourceCodePro/SourceCodePro-Italic.woff2 b/web/public/fonts/SourceCodePro/SourceCodePro-Italic.woff2 deleted file mode 100644 index 6f9d8a73f11438ce392144794ca8264aace06ed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40196 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 z 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%0DBULo{mOy@0Z2;Vvz*F~ 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 { - const currentUser = useAuthStore((state) => state.user); - const isAdmin = useAuthStore((state) => state.user?.is_admin); - return ( - <> -

- - - ); -}; - -export default App; diff --git a/web/src/components/AppLoader.tsx b/web/src/components/AppLoader.tsx deleted file mode 100644 index dd78829b1..000000000 --- a/web/src/components/AppLoader.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { lazy, Suspense, useEffect } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../i18n/i18n-react'; -import { LoaderPage } from '../pages/loader/LoaderPage'; -import { useOutdatedComponentsModal } from '../shared/components/modals/OutdatedComponentsModal/useOutdatedComponentsModal'; -import { useToaster } from '../shared/defguard-ui/hooks/toasts/useToaster'; -import { isPresent } from '../shared/defguard-ui/utils/isPresent'; -import { useAppStore } from '../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../shared/hooks/store/useAuthStore'; -import { useUpdatesStore } from '../shared/hooks/store/useUpdatesStore'; -import useApi from '../shared/hooks/useApi'; -import { QueryKeys } from '../shared/queries'; - -/** - * Fetches data needed by app before it's rendered. - * **/ -export const AppLoader = () => { - const toaster = useToaster(); - const [currentUser, resetAuthState, setAuthState] = useAuthStore( - (state) => [state.user, state.resetState, state.setState], - shallow, - ); - const appSettings = useAppStore((state) => state.settings); - const { - getAppInfo, - getNewVersion, - getOutdatedInfo, - user: { getMe }, - settings: { getEssentialSettings, getEnterpriseSettings }, - } = useApi(); - const setAppStore = useAppStore((state) => state.setState); - const { LL } = useI18nContext(); - const setUpdateStore = useUpdatesStore((s) => s.setUpdate); - const openOutdatedComponentsModal = useOutdatedComponentsModal((s) => s.open); - - const { data: outdatedInfo } = useQuery({ - queryFn: getOutdatedInfo, - queryKey: ['outdated'], - enabled: isPresent(currentUser) && currentUser.is_admin, - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const { - data: meData, - isLoading: userLoading, - error: meFetchError, - } = useQuery({ - queryFn: getMe, - queryKey: [QueryKeys.FETCH_ME], - refetchOnMount: true, - refetchOnWindowFocus: false, - retry: false, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: sideEffect - useEffect(() => { - if (meFetchError && currentUser) { - if (currentUser) { - resetAuthState(); - } - } - }, [meFetchError]); - - useEffect(() => { - if (meData) { - setAuthState({ user: meData }); - } - }, [meData, setAuthState]); - - const { data: appInfoData, error: appInfoError } = useQuery({ - queryFn: getAppInfo, - queryKey: [QueryKeys.FETCH_APP_INFO], - refetchOnWindowFocus: true, - refetchOnMount: true, - enabled: !isUndefined(currentUser), - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: sideEffect - useEffect(() => { - if (appInfoError) { - toaster.error(LL.messages.errorVersion()); - console.error(appInfoError); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [appInfoError]); - - useEffect(() => { - if (appInfoData) { - setAppStore({ appInfo: appInfoData }); - } - }, [appInfoData, setAppStore]); - - const { data: enterpriseSettingsData, error: enterpriseSettingsError } = useQuery({ - queryFn: getEnterpriseSettings, - queryKey: [QueryKeys.FETCH_ENTERPRISE_SETTINGS], - refetchOnWindowFocus: true, - retry: false, - enabled: !isUndefined(currentUser), - }); - - useEffect(() => { - if (enterpriseSettingsError) { - console.error(enterpriseSettingsError); - } - }, [enterpriseSettingsError]); - - useEffect(() => { - setAppStore({ enterprise_settings: enterpriseSettingsData }); - }, [setAppStore, enterpriseSettingsData]); - - const { isLoading: settingsLoading, data: essentialSettings } = useQuery({ - queryFn: getEssentialSettings, - queryKey: [QueryKeys.FETCH_ESSENTIAL_SETTINGS], - refetchOnMount: true, - }); - - // setAppSettings - useEffect(() => { - if (essentialSettings) { - if (document.title !== essentialSettings.instance_name) { - document.title = essentialSettings.instance_name; - } - setAppStore({ settings: essentialSettings }); - } - }, [essentialSettings, setAppStore]); - - const { data: newVersionData, error: newVersionError } = useQuery({ - queryFn: getNewVersion, - queryKey: [QueryKeys.FETCH_NEW_VERSION], - refetchOnWindowFocus: false, - refetchOnMount: true, - enabled: !isUndefined(currentUser) && currentUser.is_admin, - }); - - useEffect(() => { - if (newVersionError) { - console.error(newVersionError); - } - }, [newVersionError]); - - useEffect(() => { - if (newVersionData) { - setUpdateStore(newVersionData); - } - }, [newVersionData, setUpdateStore]); - - useEffect(() => { - if ( - outdatedInfo && - (outdatedInfo.proxy != null || outdatedInfo.gateways.length > 0) - ) { - openOutdatedComponentsModal(outdatedInfo); - } - }, [outdatedInfo, openOutdatedComponentsModal]); - - if (userLoading || (settingsLoading && isUndefined(appSettings))) { - return ; - } - - return ( - }> - - - ); -}; - -const App = lazy(() => import('./App/App')); diff --git a/web/src/components/I18nProvider.tsx b/web/src/components/I18nProvider.tsx deleted file mode 100644 index 23b54ed28..000000000 --- a/web/src/components/I18nProvider.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { enUS as datePickerLocaleEnUS } from 'date-fns/locale/en-US'; -import { ko as datePickerLocaleKO } from 'date-fns/locale/ko'; -import { pl as datePickerLocalePL } from 'date-fns/locale/pl'; -import { type PropsWithChildren, useEffect, useState } from 'react'; -import { registerLocale, setDefaultLocale } from 'react-datepicker'; -import { navigatorDetector } from 'typesafe-i18n/detectors'; -import { shallow } from 'zustand/shallow'; - -import TypesafeI18n from '../i18n/i18n-react'; -import { baseLocale, detectLocale } from '../i18n/i18n-util'; -import { loadLocale } from '../i18n/i18n-util.sync'; -import { useAppStore } from '../shared/hooks/store/useAppStore'; -import { localeToDatePicker } from '../shared/utils/localeToDatepicker'; - -// Setups i18n so useI18nContext hooks can work -export const I18nProvider = ({ children }: PropsWithChildren) => { - const setAppState = useAppStore((s) => s.setState, shallow); - const detectedLocale = detectLocale(navigatorDetector); - const [localeLoaded, setLocaleLoaded] = useState(false); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration - useEffect(() => { - const lang = detectedLocale ?? baseLocale; - loadLocale(lang); - setLocaleLoaded(true); - setAppState({ language: lang }); - document.documentElement.lang = lang; - //react-datepicker - switch (lang) { - case 'en': - registerLocale('en-US', datePickerLocaleEnUS); - break; - case 'ko': - registerLocale('ko', datePickerLocaleKO); - break; - case 'pl': - registerLocale('pl', datePickerLocalePL); - } - setDefaultLocale(localeToDatePicker(lang)); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [detectedLocale]); - - if (!localeLoaded) return null; - - return {children}; -}; diff --git a/web/src/components/Navigation/Navigation.tsx b/web/src/components/Navigation/Navigation.tsx deleted file mode 100644 index 4f67f60b0..000000000 --- a/web/src/components/Navigation/Navigation.tsx +++ /dev/null @@ -1,267 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useMemo } from 'react'; -import { useLocation } from 'react-router'; -import { useBreakpoint } from 'use-breakpoint'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import SvgIconNavGroups from '../../shared/components/svg/IconNavGroups'; -import SvgIconNavKey from '../../shared/components/svg/IconNavKey'; -import SvgIconNavOpenId from '../../shared/components/svg/IconNavOpenid'; -import SvgIconNavProfile from '../../shared/components/svg/IconNavProfile'; -import SvgIconNavProvisioners from '../../shared/components/svg/IconNavProvisioners'; -import SvgIconNavSettings from '../../shared/components/svg/IconNavSettings'; -import SvgIconNavSupport from '../../shared/components/svg/IconNavSupport'; -import SvgIconNavUsers from '../../shared/components/svg/IconNavUsers'; -import SvgIconNavVpn from '../../shared/components/svg/IconNavVpn'; -import SvgIconNavWebhooks from '../../shared/components/svg/IconNavWebhooks'; -import { deviceBreakpoints } from '../../shared/constants'; -import { useAppStore } from '../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../shared/hooks/store/useAuthStore'; -import { useUserProfileStore } from '../../shared/hooks/store/useUserProfileStore'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import type { User } from '../../shared/types'; -import { invalidateMultipleQueries } from '../../shared/utils/invalidateMultipleQueries'; -import { DevicePageNavigationIcon } from './components/DevicesPageNavigationIcon'; -import { NavigationActivityLogPageIcon } from './components/icons/NavigationActivityLogPageIcon'; -import { NavigationDesktop } from './components/NavigationDesktop/NavigationDesktop'; -import { NavigationMobile } from './components/NavigationMobile/NavigationMobile'; -import { navigationExcludedRoutes } from './config'; -import { useNavigationStore } from './hooks/useNavigationStore'; -import type { NavigationItem, NavigationItems } from './types'; - -export const Navigation = () => { - const { pathname } = useLocation(); - const { LL } = useI18nContext(); - const [currentUser, resetAuthStore] = useAuthStore( - (state) => [state.user, state.resetState], - shallow, - ); - const setStore = useNavigationStore((state) => state.setState); - const networksPresent = useAppStore((state) => state.appInfo?.network_present); - const resetUserProfile = useUserProfileStore((state) => state.reset); - const queryClient = useQueryClient(); - const isAdmin = useAuthStore((s) => s.user?.is_admin ?? false); - - const { - auth: { logout }, - network: { getNetworks }, - } = useApi(); - - const { data: networks } = useQuery({ - queryKey: ['network'], - queryFn: getNetworks, - enabled: isAdmin, - }); - - const onlyOneNetworkPresent = useMemo(() => { - if (networks) { - return networks.length === 1; - } - return false; - }, [networks]); - - const { mutate: logOutMutation } = useMutation({ - mutationFn: logout, - onSuccess: () => { - resetAuthStore(); - resetUserProfile(); - setStore({ isOpen: false }); - }, - }); - - const settings = useAppStore((state) => state.settings); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - - const navItems = useMemo((): NavigationItems => { - if (!currentUser) { - return { - middle: [], - bottom: [], - }; - } - - let overviewLink = '/admin/overview'; - - if (!networksPresent) { - overviewLink = '/admin/overview'; - } - - if (networks && onlyOneNetworkPresent) { - const networkId = networks[0].id; - overviewLink = `/admin/overview/${networkId}`; - } - - let bottom: NavigationItem[] = [ - { - title: LL.navigation.bar.settings(), - linkPath: '/admin/settings', - icon: , - adminOnly: true, - enabled: true, - }, - { - title: LL.navigation.bar.support(), - icon: , - linkPath: '/support', - adminOnly: false, - enabled: true, - className: 'support', - }, - ]; - let middle: NavigationItem[] = [ - { - title: LL.navigation.bar.overview(), - linkPath: overviewLink, - icon: , - adminOnly: true, - enabled: settings?.wireguard_enabled, - }, - { - title: LL.navigation.bar.users(), - linkPath: '/admin/users', - icon: , - adminOnly: true, - enabled: true, - }, - { - title: LL.navigation.bar.groups(), - linkPath: '/admin/groups', - icon: , - adminOnly: true, - enabled: true, - }, - { - title: LL.navigation.bar.acl(), - linkPath: '/admin/acl', - icon: ( - - - - ), - adminOnly: true, - enabled: true, - enterpriseOnly: true, - }, - { - title: LL.navigation.bar.devices(), - linkPath: '/admin/devices', - icon: , - adminOnly: true, - enabled: true, - }, - { - title: LL.navigation.bar.openId(), - linkPath: '/admin/openid', - icon: , - adminOnly: true, - enabled: settings?.openid_enabled, - }, - { - title: LL.navigation.bar.webhooks(), - linkPath: '/admin/webhooks', - icon: , - adminOnly: true, - enabled: settings?.webhooks_enabled, - }, - { - title: LL.navigation.bar.provisioners(), - linkPath: '/admin/provisioners', - icon: , - adminOnly: true, - enabled: settings?.worker_enabled, - }, - { - title: LL.navigation.bar.enrollment(), - linkPath: '/admin/enrollment', - icon: , - adminOnly: true, - enabled: true, - }, - { - title: LL.navigation.bar.activity(), - linkPath: '/activity', - icon: , - adminOnly: false, - enabled: true, - }, - { - title: LL.navigation.bar.myProfile(), - linkPath: `/me`, - icon: , - adminOnly: false, - enabled: true, - onClick: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_ME], - [QueryKeys.FETCH_USER_PROFILE], - ]); - }, - }, - ]; - middle = filterNavItems(middle, currentUser); - bottom = filterNavItems(bottom, currentUser); - return { - middle, - bottom, - }; - }, [ - LL.navigation.bar, - currentUser, - networks, - networksPresent, - onlyOneNetworkPresent, - queryClient, - settings?.openid_enabled, - settings?.webhooks_enabled, - settings?.wireguard_enabled, - settings?.worker_enabled, - ]); - - const renderNav = useMemo(() => { - for (const path of navigationExcludedRoutes) { - if (pathname.includes(path)) { - return false; - } - } - return true; - }, [pathname]); - - if (!renderNav) return null; - - return ( - <> - {breakpoint === 'desktop' && ( - logOutMutation()} /> - )} - {breakpoint !== 'desktop' && ( - logOutMutation()} /> - )} - - ); -}; - -const filterNavItems = (items: NavigationItem[], currentUser: User): NavigationItem[] => - items - .filter((item) => item.enabled) - .filter((item) => { - if (item.adminOnly) { - return currentUser ? currentUser.is_admin : false; - } else { - return true; - } - }); diff --git a/web/src/components/Navigation/components/ApplicationVersion/ApplicationVersion.tsx b/web/src/components/Navigation/components/ApplicationVersion/ApplicationVersion.tsx deleted file mode 100644 index 462f6f668..000000000 --- a/web/src/components/Navigation/components/ApplicationVersion/ApplicationVersion.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; - -type Props = { - isOpen: boolean; -}; - -export const ApplicationVersion = ({ isOpen }: Props) => { - const version = useAppStore((store) => store.appInfo?.version); - const { LL } = useI18nContext(); - - return ( - - ); -}; diff --git a/web/src/components/Navigation/components/ApplicationVersion/style.scss b/web/src/components/Navigation/components/ApplicationVersion/style.scss deleted file mode 100644 index e0dbbd316..000000000 --- a/web/src/components/Navigation/components/ApplicationVersion/style.scss +++ /dev/null @@ -1,30 +0,0 @@ -@use '@scssutils' as *; - -.app-version { - display: flex; - flex-flow: column; - width: 100%; - align-items: center; - justify-content: center; - align-content: center; - box-sizing: border-box; - min-height: 60px; - max-width: 100%; - overflow: hidden; - - span, - a { - @include typography-legacy(10px, 13px, regular, var(--gray-light)); - display: inline-block; - } - - p { - @include typography-legacy(10px, 13px, regular, var(--gray-light)); - } - - a { - text-wrap: auto; - word-break: break-word; - text-align: center; - } -} diff --git a/web/src/components/Navigation/components/DevicesPageNavigationIcon.tsx b/web/src/components/Navigation/components/DevicesPageNavigationIcon.tsx deleted file mode 100644 index 5f16eb874..000000000 --- a/web/src/components/Navigation/components/DevicesPageNavigationIcon.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useId } from 'react'; - -export const DevicePageNavigationIcon = () => { - const id = useId(); - return ( - - - - - - - - - - - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationBar/NavigationBar.tsx b/web/src/components/Navigation/components/NavigationBar/NavigationBar.tsx deleted file mode 100644 index 2ecee40ac..000000000 --- a/web/src/components/Navigation/components/NavigationBar/NavigationBar.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import clsx from 'clsx'; -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgDefguardNavLogoCollapsed from '../../../../shared/components/svg/DefguardNavLogoCollapsed'; -import SvgIconNavLogout from '../../../../shared/components/svg/IconNavLogout'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import type { NavigationItems } from '../../types'; -import { ApplicationVersion } from '../ApplicationVersion/ApplicationVersion'; -import { NavigationLink } from '../NavigationLink/NavigationLink'; - -type Props = { - navItems: NavigationItems; - onLogout: () => void; - isOpen: boolean; -}; - -export const NavigationBar = ({ navItems, onLogout, isOpen }: Props) => { - const settings = useAppStore((state) => state.settings); - const { LL } = useI18nContext(); - - const cn = useMemo( - () => - classNames('nav-bar', { - open: isOpen, - }), - [isOpen], - ); - - return ( - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationBar/style.scss b/web/src/components/Navigation/components/NavigationBar/style.scss deleted file mode 100644 index 233f358d8..000000000 --- a/web/src/components/Navigation/components/NavigationBar/style.scss +++ /dev/null @@ -1,123 +0,0 @@ -.nav-bar { - display: grid; - grid-template-rows: 108px 1fr 70px; - grid-template-columns: 1fr; - height: 100%; - width: 88px; - position: fixed; - inset: 0; - overflow-x: hidden; - overflow-y: auto; - max-height: 100%; - background-color: var(--white); - box-sizing: border-box; - border-right: 1px solid var(--gray-border); - - &::-webkit-scrollbar { - display: none; - } - - -ms-overflow-style: none; - scrollbar-width: none; - - .logo-container { - user-select: none; - height: 100%; - width: 100%; - display: flex; - flex-flow: row nowrap; - overflow: hidden; - align-items: center; - justify-content: center; - box-sizing: border-box; - border-bottom: 1px solid var(--gray-border); - } - - &.open { - width: 230px; - } - - .links { - border-bottom: 1px solid var(--gray-border); - width: 100%; - box-sizing: border-box; - display: grid; - grid-template-rows: 1fr auto; - - .middle, - .bottom { - width: 100%; - } - - .middle { - display: flex; - flex-flow: column; - height: 100%; - align-items: center; - justify-content: center; - } - - a, - .log-out { - user-select: none; - position: relative; - display: grid; - grid-template-rows: 1fr; - align-items: center; - justify-items: start; - width: 100%; - column-gap: 18px; - box-sizing: border-box; - padding: var(--spacing-xs) var(--spacing-s); - max-width: 100%; - overflow: hidden; - background-color: transparent; - border: 0px solid transparent; - text-decoration: none; - cursor: pointer; - color: var(--text-body-tertiary); - grid-template-columns: 24px 1fr; - - &.compact { - grid-template-columns: 1fr; - align-items: center; - justify-items: center; - } - - & > span { - @include typography(app-side-bar); - color: inherit; - overflow: hidden; - max-width: 100%; - display: inline-block; - word-break: normal; - text-wrap: wrap; - text-align: left; - } - - &:hover, - &.active { - color: var(--text-main); - - & > svg { - g, - path, - rect { - fill: var(--primary); - } - } - } - - & > .active-line { - content: ' '; - display: block; - height: 100%; - width: 2px; - background-color: var(--primary); - position: absolute; - right: 0; - top: 0; - } - } - } -} diff --git a/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/NavigationCollapse.tsx b/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/NavigationCollapse.tsx deleted file mode 100644 index 5eb8dcafe..000000000 --- a/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/NavigationCollapse.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import { motion, type TargetAndTransition } from 'motion/react'; -import { useMemo, useState } from 'react'; - -import { ColorsRGB } from '../../../../../shared/constants'; -import { useNavigationStore } from '../../../hooks/useNavigationStore'; - -export const NavigationCollapse = () => { - const [hovered, setHovered] = useState(false); - const isOpen = useNavigationStore((state) => state.isOpen); - const setState = useNavigationStore((state) => state.setState); - const getAnimate = useMemo((): TargetAndTransition => { - const res: TargetAndTransition = { - borderColor: ColorsRGB.GrayBorder, - backgroundColor: ColorsRGB.White, - }; - if (hovered) { - res.borderColor = ColorsRGB.Primary; - res.backgroundColor = ColorsRGB.Primary; - } - return res; - }, [hovered]); - - const cn = classNames('navigation-collapse', { - open: isOpen, - }); - - return ( - setState({ isOpen: !isOpen })} - animate={getAnimate} - initial={false} - onMouseEnter={() => setHovered(true)} - onMouseLeave={() => setHovered(false)} - > - - - - - - - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/style.scss b/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/style.scss deleted file mode 100644 index 266779740..000000000 --- a/web/src/components/Navigation/components/NavigationDesktop/NavigationCollapse/style.scss +++ /dev/null @@ -1,31 +0,0 @@ -@use '@scssutils' as *; - -.navigation-collapse { - width: 30px; - height: 30px; - box-sizing: border-box; - border: 1px solid var(--gray-border); - border-radius: 10px; - display: flex; - flex-flow: row nowrap; - overflow: hidden; - align-items: center; - justify-content: center; - cursor: pointer; - position: fixed; - top: 40px; - left: 73px; - background-color: var(--white); - z-index: 3; - padding: 0; - margin: 0; - - &.open { - left: 215px; - } - - &:hover { - border-color: var(--primary); - background-color: var(--primary); - } -} diff --git a/web/src/components/Navigation/components/NavigationDesktop/NavigationDesktop.tsx b/web/src/components/Navigation/components/NavigationDesktop/NavigationDesktop.tsx deleted file mode 100644 index 2509cd77d..000000000 --- a/web/src/components/Navigation/components/NavigationDesktop/NavigationDesktop.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useNavigationStore } from '../../hooks/useNavigationStore'; -import type { NavigationItems } from '../../types'; -import { NavigationBar } from '../NavigationBar/NavigationBar'; -import { NavigationCollapse } from './NavigationCollapse/NavigationCollapse'; - -type Props = { - navItems: NavigationItems; - onLogout: () => void; -}; - -export const NavigationDesktop = ({ navItems, onLogout }: Props) => { - const isOpen = useNavigationStore((state) => state.isOpen); - return ( - <> - - - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationLink/NavigationLink.tsx b/web/src/components/Navigation/components/NavigationLink/NavigationLink.tsx deleted file mode 100644 index 54f7e7189..000000000 --- a/web/src/components/Navigation/components/NavigationLink/NavigationLink.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { useMatch } from 'react-router'; -import { Link } from 'react-router-dom'; -import { shallow } from 'zustand/shallow'; - -import { useUpgradeLicenseModal } from '../../../../shared/components/Layout/UpgradeLicenseModal/store'; -import { UpgradeLicenseModalVariant } from '../../../../shared/components/Layout/UpgradeLicenseModal/types'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { useNavigationStore } from '../../hooks/useNavigationStore'; -import type { NavigationItem } from '../../types'; - -interface NavigationLinkProps { - item: NavigationItem; - callback?: () => void; -} - -export const NavigationLink = ({ item, callback }: NavigationLinkProps) => { - const isOpen = useNavigationStore((s) => s.isOpen); - const openUpgradeLicenseModal = useUpgradeLicenseModal((s) => s.open, shallow); - const enterpriseEnabled = useAppStore((s) => s.appInfo?.license_info.enterprise); - const match = useMatch(item.linkPath); - - return ( - { - if (item.enterpriseOnly && !enterpriseEnabled) { - event.preventDefault(); - openUpgradeLicenseModal({ - modalVariant: UpgradeLicenseModalVariant.ENTERPRISE_NOTICE, - }); - } - if (callback) { - callback(); - } - if (item.onClick) { - item.onClick(); - } - }} - > - {item.icon} - {isOpen && {item.title}} - {match ?
: null} - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationLink/style.scss b/web/src/components/Navigation/components/NavigationLink/style.scss deleted file mode 100644 index cd1d84e41..000000000 --- a/web/src/components/Navigation/components/NavigationLink/style.scss +++ /dev/null @@ -1,32 +0,0 @@ -.navigation-link { - svg { - rect { - fill: var(--surface-icon-primary); - } - - path { - fill: var(--surface-icon-primary); - } - - circle { - stroke: var(--surface-icon-primary); - } - } - - &:hover, - &.active { - svg { - rect { - fill: var(--surface-main-primary); - } - - path { - fill: var(--surface-main-primary); - } - - circle { - stroke: var(--surface-main-primary); - } - } - } -} diff --git a/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/MobileNavModal.tsx b/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/MobileNavModal.tsx deleted file mode 100644 index 877f27b8c..000000000 --- a/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/MobileNavModal.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import './style.scss'; - -import SvgIconHamburgerClose from '../../../../../shared/components/svg/IconHamburgerClose'; -import { Modal } from '../../../../../shared/defguard-ui/components/Layout/modals/Modal/Modal'; -import { useNavigationStore } from '../../../hooks/useNavigationStore'; -import type { NavigationItems } from '../../../types'; -import { NavigationBar } from '../../NavigationBar/NavigationBar'; - -interface Props { - navItems: NavigationItems; - onLogout: () => void; -} - -export const MobileNavModal = ({ navItems, onLogout }: Props) => { - const setStore = useNavigationStore((state) => state.setState); - const isOpen = useNavigationStore((state) => state.isOpen); - return ( - setStore({ isOpen: val })} - backdrop - > - - - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/style.scss b/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/style.scss deleted file mode 100644 index f92f93ebe..000000000 --- a/web/src/components/Navigation/components/NavigationMobile/MobileNavModal/style.scss +++ /dev/null @@ -1,37 +0,0 @@ -.modal-root { - & > .modal-wrap { - & > .modal { - &.mobile-nav { - height: 100%; - padding: 0; - - .modal-content { - width: 230px; - position: relative; - border-radius: 0; - display: flex; - flex-direction: column; - background-color: transparent; - - .close-mobile-nav { - position: fixed; - left: 240px; - top: 15px; - height: 40px; - width: 40px; - border-radius: 1rem; - box-shadow: none; - border: 0 solid transparent; - background-color: var(--white); - display: flex; - flex-direction: column; - align-content: center; - align-items: center; - justify-content: center; - cursor: pointer; - } - } - } - } - } -} diff --git a/web/src/components/Navigation/components/NavigationMobile/NavigationMobile.tsx b/web/src/components/Navigation/components/NavigationMobile/NavigationMobile.tsx deleted file mode 100644 index 07bd0e0f9..000000000 --- a/web/src/components/Navigation/components/NavigationMobile/NavigationMobile.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import './style.scss'; - -import { useMemo } from 'react'; -import { useLocation } from 'react-router'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgDefguardNavLogoCollapsed from '../../../../shared/components/svg/DefguardNavLogoCollapsed'; -import SvgIconNavHamburger from '../../../../shared/components/svg/IconNavHamburger'; -import { useNavigationStore } from '../../hooks/useNavigationStore'; -import type { NavigationItems } from '../../types'; -import { MobileNavModal } from './MobileNavModal/MobileNavModal'; - -type Props = { - onLogout: () => void; - navItems: NavigationItems; -}; - -export const NavigationMobile = ({ navItems, onLogout }: Props) => { - const { LL } = useI18nContext(); - const { pathname } = useLocation(); - const setStore = useNavigationStore((state) => state.setState); - - const titleMap = useMemo( - () => [ - { - path: '/admin/settings', - title: LL.navigation.mobileTitles.settings(), - }, - { - path: '/admin/users', - title: LL.navigation.mobileTitles.users(), - }, - { - path: '/admin/user', - title: LL.navigation.mobileTitles.user(), - }, - { - path: '/admin/me', - title: LL.navigation.mobileTitles.user(), - }, - { - path: '/admin/provisioners', - title: LL.navigation.mobileTitles.provisioners(), - }, - { - path: '/admin/webhooks', - title: LL.navigation.mobileTitles.webhooks(), - }, - { - path: '/admin/wizard', - title: LL.navigation.mobileTitles.wizard(), - }, - { - path: '/admin/activity', - title: LL.navigation.mobileTitles.activity(), - }, - { - path: '/admin/network', - title: LL.navigation.mobileTitles.networkSettings(), - }, - { - path: '/admin/overview', - title: LL.navigation.mobileTitles.overview(), - }, - { - path: '/admin/enrollment', - title: LL.navigation.mobileTitles.enrollment(), - }, - { - path: '/admin/openid', - title: LL.navigation.mobileTitles.openId(), - }, - { - path: '/admin/groups', - title: LL.navigation.mobileTitles.groups(), - }, - { - path: '/admin/devices', - title: LL.navigation.mobileTitles.devices(), - }, - ], - [LL.navigation.mobileTitles], - ); - - const getPageTitle = useMemo(() => { - for (const item of titleMap) { - if (pathname.includes(item.path)) { - return item.title; - } - } - return ''; - }, [pathname, titleMap]); - - return ( - <> - - - - ); -}; diff --git a/web/src/components/Navigation/components/NavigationMobile/style.scss b/web/src/components/Navigation/components/NavigationMobile/style.scss deleted file mode 100644 index 7ee817068..000000000 --- a/web/src/components/Navigation/components/NavigationMobile/style.scss +++ /dev/null @@ -1,39 +0,0 @@ -.nav-mobile { - height: 60px; - position: fixed; - inset: 0; - width: 100%; - box-sizing: border-box; - padding: 0 20px; - display: grid; - grid-template-rows: 1fr; - grid-template-columns: 40px 1fr 40px; - align-items: center; - justify-items: center; - background-color: var(--white); - column-gap: 10px; - - .page-title { - width: 100%; - max-width: 100%; - text-align: center; - user-select: none; - - @include text-overflow-dots; - @include typography-legacy(20px, 1.2, semiBold, var(--text-main), 'Poppins'); - } - - .hamburger { - width: 40px; - height: 40px; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - padding: 0; - margin: 0; - background-color: transparent; - border: 0 solid transparent; - cursor: pointer; - } -} diff --git a/web/src/components/Navigation/components/icons/NavigationActivityLogPageIcon.tsx b/web/src/components/Navigation/components/icons/NavigationActivityLogPageIcon.tsx deleted file mode 100644 index 3cc0b40f3..000000000 --- a/web/src/components/Navigation/components/icons/NavigationActivityLogPageIcon.tsx +++ /dev/null @@ -1,50 +0,0 @@ -export const NavigationActivityLogPageIcon = () => { - return ( - - - - - - - - - - - - ); -}; diff --git a/web/src/components/Navigation/config.ts b/web/src/components/Navigation/config.ts deleted file mode 100644 index a4d02754b..000000000 --- a/web/src/components/Navigation/config.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const navigationExcludedRoutes: string[] = [ - '/auth', - '/authorize', - '/redirect', - '/consent', -]; diff --git a/web/src/components/Navigation/hooks/useNavigationStore.ts b/web/src/components/Navigation/hooks/useNavigationStore.ts deleted file mode 100644 index 2ac18853e..000000000 --- a/web/src/components/Navigation/hooks/useNavigationStore.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { pick } from 'lodash-es'; -import { persist } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaultState: StoreValues = { - isOpen: false, -}; - -export const useNavigationStore = createWithEqualityFn()( - persist( - (set) => ({ - ...defaultState, - setState: (values) => set((old) => ({ ...old, ...values })), - reset: () => set(defaultState), - }), - { - version: 1.5, - name: 'navigation-store', - partialize: (state) => pick(state, ['isOpen']), - }, - ), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - isOpen: boolean; -}; - -type StoreMethods = { - setState: (values: Partial) => void; - reset: () => void; -}; diff --git a/web/src/components/Navigation/style.scss b/web/src/components/Navigation/style.scss deleted file mode 100644 index 007442690..000000000 --- a/web/src/components/Navigation/style.scss +++ /dev/null @@ -1 +0,0 @@ -@use '@scssutils' as *; diff --git a/web/src/components/Navigation/types.ts b/web/src/components/Navigation/types.ts deleted file mode 100644 index 601945d5d..000000000 --- a/web/src/components/Navigation/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface NavigationItem { - title: string; - linkPath: string; - icon?: React.ReactNode; - adminOnly?: boolean; - enabled: boolean | undefined; - onClick?: () => void; - className?: string; - enterpriseOnly?: boolean; -} - -export type NavigationTitleMapItem = { - path: string; - title: string; -}; - -export type NavigationItems = { - middle: NavigationItem[]; - bottom: NavigationItem[]; -}; diff --git a/web/src/gif.d.ts b/web/src/gif.d.ts deleted file mode 100644 index 3b59542ad..000000000 --- a/web/src/gif.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.gif' { - const val: string; - export default val; -} diff --git a/web/src/i18n/en/index.ts b/web/src/i18n/en/index.ts deleted file mode 100644 index b8a7a4472..000000000 --- a/web/src/i18n/en/index.ts +++ /dev/null @@ -1,2759 +0,0 @@ -import type { BaseTranslation } from '../i18n-types'; - -const en: BaseTranslation = { - common: { - conditions: { - or: 'or', - and: 'and', - equal: 'equal', - }, - controls: { - timeRange: 'Time range', - addNew: 'Add new', - add: 'Add', - accept: 'Accept', - next: 'Next', - back: 'Back', - cancel: 'Cancel', - confirm: 'Confirm', - submit: 'Submit', - close: 'Close', - select: 'Select', - finish: 'Finish', - saveChanges: 'Save changes', - save: 'Save', - RestoreDefault: 'Restore default', - delete: 'Delete', - rename: 'Rename', - copy: 'Copy', - edit: 'Edit', - dismiss: 'Dismiss', - show: 'Show', - enable: 'Enable', - enabled: 'Enabled', - disable: 'Disable', - disabled: 'Disabled', - selectAll: 'Select all', - clear: 'Clear', - clearAll: 'Clear all', - filter: 'Filter', - filters: 'Filters', - }, - key: 'Key', - name: 'Name', - noData: 'No data', - unavailable: 'Unavailable', - notSet: 'Not set', - search: 'Search', - time: 'Time', - from: 'From', - until: 'Until', - }, - messages: { - error: 'Error has occurred.', - success: 'Operation succeeded', - errorVersion: 'Failed to get application version.', - insecureContext: 'Context is not secure.', - details: 'Details:', - clipboard: { - error: 'Clipboard is not accessible.', - success: 'Content copied to clipboard.', - }, - }, - modals: { - outdatedComponentsModal: { - title: 'Version mismatch', - subtitle: 'Defguard detected unsupported version in some components.', - content: { - title: 'Incompatible components:', - unknownVersion: 'Unknown version', - unknownHostname: 'Unknown hostname', - }, - }, - upgradeLicenseModal: { - enterprise: { - title: 'Upgrade to Enterprise', - //md - subTitle: `This functionality is an **enterprise feature** and you've exceeded the user, device or network limits to use it. In order to use this feature, purchase an enterprise license or upgrade your existing one.`, - }, - limit: { - title: 'Upgrade', - //md - subTitle: ` - You have **reached the limit** of this functionality. To **[ manage more locations/users/devices ]** purchase of the Enterprise license is required. - `, - }, - //md - content: ` -You can find out more about features like: -- Real time and automatic client synchronization -- External SSO -- Controlling VPN clients behavior - -Full enterprise feature list: [https://docs.defguard.net/enterprise/enterprise-features](https://docs.defguard.net/enterprise/enterprise-features)
-Licensing information: [https://docs.defguard.net/enterprise/license](https://docs.defguard.net/enterprise/license) - `, - controls: { - cancel: 'Maybe later', - confirm: 'See all Enterprise plans', - }, - }, - standaloneDeviceEnrollmentModal: { - title: 'Network device token', - toasters: { - error: 'Token generation failed.', - }, - }, - standaloneDeviceConfigModal: { - title: 'Network device config', - cardTitle: 'Config', - toasters: { - getConfig: { - error: 'Failed to get device config.', - }, - }, - }, - editStandaloneModal: { - title: 'Edit network device', - toasts: { - success: 'Device modified', - failure: 'Modifying the device failed', - }, - }, - deleteStandaloneDevice: { - title: 'Delete network device', - content: 'Device {name: string} will be deleted.', - messages: { - success: 'Device deleted', - error: 'Failed to remove device.', - }, - }, - addStandaloneDevice: { - toasts: { - deviceCreated: 'Device added', - creationFailed: 'Device could not be added.', - }, - infoBox: { - setup: - 'Here you can add definitions or generate configurations for devices that can connect to your VPN. Only locations without Multi-Factor Authentication are available here, as MFA is only supported in Defguard Desktop Client for now.', - }, - form: { - submit: 'Add Device', - labels: { - deviceName: 'Device Name', - location: 'Location', - assignedAddress: 'Assigned IP Address', - description: 'Description', - generation: { - auto: 'Generate key pair', - manual: 'Use my own public key', - }, - publicKey: 'Provide Your Public Key', - }, - }, - steps: { - method: { - title: 'Choose a preferred method', - cards: { - cli: { - title: 'Defguard Command Line Client', - subtitle: - 'When using defguard-cli your device will be automatically configured.', - docs: 'Defguard CLI download and documentation', - }, - manual: { - title: 'Manual WireGuard Client', - subtitle: - 'If your device does not support our CLI binaries you can always generate a WireGuard configuration file and configure it manually - but any updates to the VPN location configuration will require manual changes in device configuration.', - }, - }, - }, - manual: { - title: 'Add new VPN device using WireGuard Client', - finish: { - messageTop: - 'Download the provided configuration file to your device and import it into your VPN client to complete the setup.', - ctaInstruction: - "Use provided configuration file below by scanning QR code or importing it as file on your device's WireGuard app.", - // MD - warningMessage: ` - Please remember that Defguard **doesn't store private keys**. We will securely generate the public and private key pair in your browser, but only store the public key in Defguard database. Please download the configuration generated with the private key for the device, as it will not be accessible later. - `, - actionCard: { - title: 'Config', - }, - }, - }, - cli: { - title: 'Add device using Defguard Command Line Client', - finish: { - topMessage: - 'First download Defguard command line client binary and install it on your server.', - downloadButton: 'Download Defguard CLI Client', - commandCopy: 'Copy and paste this command in your terminal on the device', - }, - setup: { - stepMessage: - 'Here you can add definitions or generate configurations for devices that can connect to your VPN. Only locations without Multi-Factor Authentication are available here, as MFA is only supported in Defguard Desktop Client for now.', - form: { - submit: 'Add Device', - }, - }, - }, - }, - }, - updatesNotificationToaster: { - title: 'New version available {version: string}', - controls: { - more: "See what's new", - }, - }, - enterpriseUpgradeToaster: { - title: `You've reached the enterprise functionality limit.`, - message: `You've exceeded the limit of your current Defguard plan and the enterprise - features will be disabled. Purchase an enterprise license or upgrade your - existing one to continue using these features.`, - link: 'See all enterprise plans', - }, - updatesNotification: { - header: { - title: 'Update Available', - newVersion: 'new version {version: string}', - criticalBadge: 'critical update', - }, - controls: { - visitRelease: 'Visit release page', - }, - }, - addGroup: { - title: 'Add group', - selectAll: 'Select all users', - groupName: 'Group name', - searchPlaceholder: 'Filter/Search', - submit: 'Create group', - groupSettings: 'Group settings', - adminGroup: 'Admin group', - }, - editGroup: { - title: 'Edit group', - selectAll: 'Select all users', - groupName: 'Group name', - searchPlaceholder: 'Filter/Search', - submit: 'Update group', - groupSettings: 'Group settings', - adminGroup: 'Admin group', - }, - deleteGroup: { - title: 'Delete group {name:string}', - subTitle: 'This action will permanently delete this group.', - locationListHeader: 'This group is currently assigned to following VPN Locations:', - locationListFooter: `If this is the only allowed group for a given location, the location will become accessible to all users.`, - submit: 'Delete group', - cancel: 'Cancel', - }, - deviceConfig: { - title: 'Device VPN configurations', - }, - changePasswordSelf: { - title: 'Change password', - messages: { - success: 'Password has been changed', - error: 'Failed to changed password', - }, - form: { - labels: { - newPassword: 'New password', - oldPassword: 'Current password', - repeat: 'Confirm new password', - }, - }, - controls: { - submit: 'Change password', - cancel: 'Cancel', - }, - }, - disableMfa: { - title: 'Disable MFA', - message: 'Do you want to disable MFA for user {username: string}?', - messages: { - success: 'MFA for user {username: string} has been disabled', - error: 'Failed to disable MFA for user {username: string}', - }, - controls: { - submit: 'Disable MFA', - cancel: 'Cancel', - }, - }, - startEnrollment: { - title: 'Start enrollment', - desktopTitle: 'Desktop activation', - messages: { - success: 'User enrollment started', - successDesktop: 'Desktop configuration started', - error: 'Failed to start user enrollment', - errorDesktop: 'Failed to start desktop activation', - }, - messageBox: { - clientForm: - 'You can share the following URL and token with the user to configure their Defguard desktop or mobile client.', - clientQr: - 'You can share this QR code for easy Defguard mobile client configuration.', - }, - form: { - email: { - label: 'Email', - }, - mode: { - options: { - email: 'Send token by email', - manual: 'Deliver token yourself', - }, - }, - submit: 'Start enrollment', - submitDesktop: 'Activate desktop', - smtpDisabled: 'Configure SMTP to send token by email. Go to Settings -> SMTP.', - }, - tokenCard: { - title: 'Activation token', - }, - urlCard: { - title: 'Defguard Instance URL', - }, - }, - deleteNetwork: { - title: 'Delete {name:string} location', - subTitle: 'This action will permanently delete this location.', - submit: 'Delete location', - cancel: 'Cancel', - }, - changeWebhook: { - messages: { - success: 'Webhook changed.', - }, - }, - manageWebAuthNKeys: { - title: 'Security keys', - messages: { - deleted: 'WebAuthN key has been deleted.', - duplicateKeyError: 'Key is already registered', - }, - infoMessage: ` -

- Security keys can be used as your second factor of authentication - instead of a verification code. Learn more about configuring a - security key. -

-`, - form: { - messages: { - success: 'Security key added.', - }, - fields: { - name: { - label: 'New key name', - }, - }, - controls: { - submit: 'Add new Key', - }, - }, - }, - recoveryCodes: { - title: 'Recovery codes', - submit: 'I have saved my codes', - messages: { - copied: 'Codes copied.', - }, - infoMessage: ` -

- Treat your recovery codes with the same level of attention as you - would your password! We recommend saving them with a password manager - such as Lastpass, bitwarden or Keeper. -

-`, - }, - registerTOTP: { - title: 'Authenticator App Setup', - infoMessage: ` -

- To setup your MFA, scan this QR code with your authenticator app, then - enter the code in the field below: -

-`, - messages: { - totpCopied: 'TOTP path copied.', - success: 'TOTP Enabled', - }, - copyPath: 'Copy TOTP path', - form: { - fields: { - code: { - label: 'Authenticator code', - error: 'Code is invalid', - }, - }, - controls: { - submit: 'Verify code', - }, - }, - }, - registerEmailMFA: { - title: 'Email MFA Setup', - infoMessage: ` -

- To setup your MFA enter the code that was sent to your account email: {email: string} -

-`, - messages: { - success: 'Email MFA Enabled', - resend: 'Verification code resent', - }, - form: { - fields: { - code: { - label: 'Email code', - error: 'Code is invalid', - }, - }, - controls: { - submit: 'Verify code', - resend: 'Resend email', - }, - }, - }, - editDevice: { - title: 'Edit device', - messages: { - success: 'Device has been updated.', - }, - form: { - fields: { - name: { - label: 'Device Name', - }, - publicKey: { - label: 'Device Public Key (WireGuard)', - }, - }, - controls: { - submit: 'Edit device', - }, - }, - }, - deleteDevice: { - title: 'Delete device', - message: 'Do you want to delete {deviceName} device ?', - submit: 'Delete device', - messages: { - success: 'Device has been deleted.', - }, - }, - keyDetails: { - title: 'YubiKey details', - downloadAll: 'Download all keys', - }, - deleteUser: { - title: 'Delete account', - controls: { - submit: 'Delete account', - }, - message: 'Do you want to delete {username: string} account permanently?', - messages: { - success: '{username: string} deleted.', - }, - }, - disableUser: { - title: 'Disable account', - controls: { - submit: 'Disable account', - }, - message: 'Do you want to disable {username: string} account?', - messages: { - success: '{username: string} disabled.', - }, - }, - enableUser: { - title: 'Enable account', - controls: { - submit: 'Enable account', - }, - message: 'Do you want to enable {username: string} account?', - messages: { - success: '{username: string} enabled.', - }, - }, - deleteProvisioner: { - title: 'Delete provisioner', - controls: { - submit: 'Delete provisioner', - }, - message: 'Do you want to delete {id: string} provisioner?', - messages: { - success: '{provisioner: string} deleted.', - }, - }, - changeUserPassword: { - messages: { - success: 'Password changed.', - }, - title: 'Change user password', - form: { - controls: { - submit: 'Save new password', - }, - fields: { - newPassword: { - label: 'New password', - }, - confirmPassword: { - label: 'Repeat password', - }, - }, - }, - }, - provisionKeys: { - title: 'Yubikey provisioning:', - warning: - 'Please be advised that this operation wll wipe openpgp application on yubikey and reconfigure it.', - infoBox: `The selected provisioner must have a clean YubiKey - plugged in be provisioned. To clean a used YubiKey - gpg --card-edit before provisioning.`, - selectionLabel: 'Select one of the following provisioners to provision a YubiKey:', - noData: { - workers: 'No workers found, waiting...', - }, - controls: { - submit: 'Provision YubiKey', - }, - messages: { - success: 'Keys provisioned', - errorStatus: 'Error while getting worker status.', - }, - }, - addUser: { - title: 'Add new user', - messages: { - userAdded: 'User added', - }, - form: { - submit: 'Add user', - error: { - emailReserved: 'Email already taken', - }, - fields: { - username: { - placeholder: 'login', - label: 'Login', - }, - password: { - placeholder: 'Password', - label: 'Password', - }, - email: { - placeholder: 'User e-mail', - label: 'User e-mail', - }, - firstName: { - placeholder: 'First name', - label: 'First name', - }, - lastName: { - placeholder: 'Last name', - label: 'Last name', - }, - phone: { - placeholder: 'Phone', - label: 'Phone', - }, - enableEnrollment: { - label: 'Use user self-enrollment process', - link: 'more information here', - }, - }, - }, - }, - webhookModal: { - title: { - addWebhook: 'Add webhook.', - editWebhook: 'Edit webhook', - }, - messages: { - clientIdCopy: 'Client ID copied.', - clientSecretCopy: 'Client secret copied.', - }, - form: { - triggers: 'Trigger events:', - messages: { - successAdd: 'Webhook created.', - successModify: 'Webhook modified.', - }, - error: { - urlRequired: 'URL is required.', - validUrl: 'Must be a valid URL.', - scopeValidation: 'Must have at least one trigger.', - tokenRequired: 'Token is required.', - }, - fields: { - description: { - label: 'Description', - placeholder: 'Webhook to create gmail account on new user', - }, - token: { - label: 'Secret token', - placeholder: 'Authorization token', - }, - url: { - label: 'Webhook URL', - placeholder: 'https://example.com/webhook', - }, - userCreated: { - label: 'New user Created', - }, - userDeleted: { - label: 'User deleted', - }, - userModified: { - label: 'User modified', - }, - hwkeyProvision: { - label: 'User Yubikey provision', - }, - }, - }, - }, - deleteWebhook: { - title: 'Delete webhook', - message: 'Do you want to delete {name: string} webhook ?', - submit: 'Delete', - messages: { - success: 'Webhook deleted.', - }, - }, - }, - addDevicePage: { - title: 'Add device', - helpers: { - setupOpt: `You can add a device using this wizard. Opt for our native application "defguard" or any other WireGuard client. If you're unsure, we recommend using defguard for simplicity.`, - client: `Please download defguard desktop client here and then follow this guide.`, - }, - messages: { - deviceAdded: 'Device added', - }, - steps: { - setupMethod: { - title: 'Choose Your Connection Method', - message: - "You can add a device using this wizard. To proceed, you'll need to install the defguard Client on the device you're adding. You can also use any standard WireGuard® client, but for the best experience and ease of setup, we recommend using our native defguard Client.", - methods: { - client: { - title: 'Remote Device Activation', - description: - 'Use the Defguard Client to set up your device. Easily configure it with a single token or by scanning a QR code.', - }, - wg: { - title: 'Manual WireGuard Client', - description: - 'For advanced users, get a unique config via download or QR code. Download any WireGuard® client and take control of your VPN setup.', - }, - }, - }, - client: { - title: 'Client Activation', - desktopDeepLinkHelp: - 'If you want to configure your Defguard desktop client, please install the client (links below), open it and just press the One-Click Desktop Configuration button', - //md - message: - 'If you are having trouble with the One-Click configuration you can do it manually by clicking *Add Instance* in the desktop client, and entering the following URL and Token:', - qrDescription: - "Scan the QR code with your installed Defguard app. If you haven't installed it yet, use your device's app store or the link below.", - qrHelp: - 'If you want to configure your Mobile Defguard Client, please just scan this QR code in the app:', - desktopDownload: 'Download for Desktop', - tokenCopy: 'Token copied to clipboard', - tokenFailure: 'Failed to prepare client setup', - labels: { - mergedToken: 'Defguard Instance Token (new)', - token: 'Authentication Token', - url: 'URL', - }, - }, - configDevice: { - title: 'Configure device', - messages: { - copyConfig: 'Configuration has been copied to the clipboard', - }, - helpers: { - warningAutoMode: ` -

- Please be advised that you have to download the configuration now, - since we do not store your private key. After this - page is closed, you will not be able to get your - full configuration file (with private keys, only blank template). -

-`, - warningManualMode: ` -

- Please be advised that configuration provided here does not include private key and uses public key to fill it's place you will need to replace it on your own for configuration to work properly. -

-`, - warningNoNetworks: "You don't have access to any network.", - qrHelper: ` -

- You can setup your device faster with wireguard application by scanning this QR code. -

`, - }, - qrInfo: - 'Use provided configuration file below by scanning QR Code or importing it as file on your devices WireGuard instance.', - inputNameLabel: 'Device Name', - qrLabel: 'WireGuard Config File', - }, - setupDevice: { - title: 'Create VPN device', - infoMessage: ` -

- You need to configure WireGuard® VPN on your device, please visit  - documentation if you don't know how to do it. -

-`, - options: { - auto: 'Generate key pair', - manual: 'Use my own public key', - }, - form: { - fields: { - name: { - label: 'Device Name', - }, - publicKey: { - label: 'Provide Your Public Key', - }, - }, - errors: { - name: { - duplicatedName: 'Device with this name already exists', - }, - }, - }, - }, - copyToken: { - title: 'Client activation', - tokenCardTitle: 'Activation token', - urlCardTitle: 'Defguard Instance URL', - }, - }, - }, - userPage: { - title: { - view: 'User Profile', - edit: 'Edit User Profile', - }, - messages: { - editSuccess: 'User updated.', - failedToFetchUserData: 'Could not get user information.', - passwordResetEmailSent: 'Password reset email has been sent.', - }, - userDetails: { - header: 'Profile Details', - messages: { - deleteApp: 'App and all tokens deleted.', - }, - warningModals: { - title: 'Warning', - content: { - usernameChange: `Changing the username has a significant impact on services the user has logged into using Defguard. After changing it, the user may lose access to applications (since they will not recognize them). Are you sure you want to proceed?`, - emailChange: `If you are using external OpenID Connect (OIDC) providers to authenticate users, changing a user's email address may have a significant impact on their ability to log in to Defguard. Are you sure you want to proceed?`, - }, - buttons: { - proceed: 'Proceed', - cancel: 'Cancel', - }, - }, - fields: { - username: { - label: 'Username', - }, - firstName: { - label: 'First name', - }, - lastName: { - label: 'Last name', - }, - phone: { - label: 'Phone number', - }, - email: { - label: 'E-mail', - }, - status: { - label: 'Status', - active: 'Active', - disabled: 'Disabled', - }, - groups: { - label: 'User groups', - noData: 'No groups', - }, - apps: { - label: 'Authorized apps', - noData: 'No authorized apps', - }, - }, - }, - userAuthInfo: { - header: 'Password and authentication', - password: { - header: 'Password settings', - changePassword: 'Change password', - ldap_change_heading: '{ldapName:string} password update required', - ldap_change_message: - "Defguard doesn't store your password in plain text, so we can’t retrieve it for automatic synchronization with your {ldapName:string} credentials. To enable {ldapName:string} login to other services, please update your Defguard password for your {ldapName:string} password to be set — you can re-enter your current password if you wish. This step is necessary to ensure consistent and secure authentication across both systems.", - }, - recovery: { - header: 'Recovery options', - codes: { - label: 'Recovery Codes', - viewed: 'Viewed', - }, - }, - mfa: { - header: 'Two-factor methods', - edit: { - disable: 'Disable MFA', - }, - messages: { - mfaDisabled: 'MFA disabled.', - OTPDisabled: 'One time password disabled.', - EmailMFADisabled: 'Email MFA disabled.', - changeMFAMethod: 'MFA method changed', - }, - securityKey: { - singular: 'security key', - plural: 'security keys', - }, - default: 'default', - enabled: 'Enabled', - disabled: 'Disabled', - labels: { - totp: 'Time based one time passwords', - email: 'Email', - webauth: 'Security keys', - }, - editMode: { - enable: 'Enable', - disable: 'Disable', - makeDefault: 'Make default', - webauth: { - manage: 'Manage security keys', - }, - }, - }, - }, - controls: { - editButton: 'Edit profile', - deleteAccount: 'Delete account', - }, - devices: { - header: 'User devices', - addDevice: { - web: 'Add new device', - desktop: 'Add this device', - }, - card: { - labels: { - publicIP: 'Public IP', - connectedThrough: 'Connected through', - connectionDate: 'Connected date', - lastLocation: 'Last connected from', - lastConnected: 'Last connected', - assignedIp: 'Assigned IP', - active: 'active', - noData: 'Never connected', - }, - edit: { - edit: 'Edit device', - delete: 'Delete device', - showConfigurations: 'Show configuration', - }, - }, - }, - yubiKey: { - header: 'User YubiKey', - provision: 'Provision a YubiKey', - keys: { - pgp: 'PGP key', - ssh: 'SSH key', - }, - noLicense: { - moduleName: 'YubiKey module', - line1: 'This is enterprise module for YubiKey', - line2: 'management and provisioning.', - }, - }, - authenticationKeys: { - header: 'User Authentication Keys', - addKey: 'Add new Key', - keysList: { - common: { - rename: 'Rename', - key: 'Key', - download: 'Download', - copy: 'Copy', - serialNumber: 'Serial Number', - delete: 'Delete', - }, - }, - deleteModal: { - title: 'Delete Authentication Key', - confirmMessage: 'Key {name: string} will be deleted permanently.', - }, - addModal: { - header: 'Add new Authentication Key', - keyType: 'Key Type', - keyForm: { - placeholders: { - title: 'Key Name', - key: { - ssh: 'Begins with ssh-rsa, ecdsa-sha2-nistp256, ...', - gpg: 'Begins with -----BEGIN PGP PUBLIC KEY BLOCK-----', - }, - }, - labels: { - title: 'Name', - key: 'Key', - }, - submit: 'Add {name: string} key', - }, - yubikeyForm: { - selectWorker: { - info: 'Please be advised that this operation will wipe openpgp application on YubiKey and reconfigure it.', - selectLabel: 'Select on of the following provisioners to provision a YubiKey', - noData: 'No workers are registered right now.', - available: 'Available', - unavailable: 'Unavailable', - }, - provisioning: { - inProgress: 'Provisioning in progress, please wait.', - error: 'Provisioning failed !', - success: 'Yubikey provisioned successfully', - }, - submit: 'Provision Yubikey', - }, - messages: { - keyAdded: 'Key added.', - keyExists: 'Key has already been added.', - unsupportedKeyFormat: 'Unsupported key format.', - genericError: 'Could not add the key. Please try again later.', - }, - }, - }, - apiTokens: { - header: 'User API Tokens', - addToken: 'Add new API Token', - tokensList: { - common: { - rename: 'Rename', - token: 'Token', - copy: 'Copy', - delete: 'Delete', - createdAt: 'Created at', - }, - }, - deleteModal: { - title: 'Delete API Token', - confirmMessage: 'API token {name: string} will be deleted permanently.', - }, - addModal: { - header: 'Add new API Token', - tokenForm: { - placeholders: { - name: 'API Token Name', - }, - labels: { - name: 'Name', - }, - submit: 'Add API token', - }, - copyToken: { - warningMessage: - "Please copy the API token below now. You won't be able to see it again.", - header: 'Copy new API Token', - }, - messages: { - tokenAdded: 'API token added.', - genericError: 'Could not add API token. Please try again later.', - }, - }, - }, - }, - usersOverview: { - pageTitle: 'Users', - grid: { - usersTitle: 'Connected Users', - devicesTitle: 'Connected Network Devices', - }, - search: { - placeholder: 'Find users', - }, - filterLabels: { - all: 'All users', - admin: 'Admins only', - users: 'Users only', - }, - usersCount: 'All users', - addNewUser: 'Add new', - list: { - headers: { - name: 'User name', - username: 'Login', - phone: 'Phone', - actions: 'Actions', - }, - editButton: { - changePassword: 'Change password', - edit: 'Edit account', - addYubikey: 'Add YubiKey', - addSSH: 'Add SSH Key', - addGPG: 'Add GPG Key', - delete: 'Delete account', - startEnrollment: 'Start enrollment', - activateDesktop: 'Configure Desktop Client', - resetPassword: 'Reset password', - disableMfa: 'Disable MFA', - }, - }, - }, - navigation: { - bar: { - overview: 'VPN Overview', - users: 'Users', - provisioners: 'YubiKeys', - webhooks: 'Webhooks', - openId: 'OpenID Apps', - myProfile: 'My Profile', - settings: 'Settings', - logOut: 'Log out', - enrollment: 'Enrollment', - support: 'Support', - groups: 'Groups', - devices: 'Network Devices', - acl: 'Access Control', - activity: 'Activity log', - }, - mobileTitles: { - activity: 'Activity log', - groups: 'Groups', - wizard: 'Create location', - users: 'Users', - settings: 'Settings', - user: 'User Profile', - provisioners: 'Yubikey', - webhooks: 'Webhooks', - openId: 'OpenId Apps', - overview: 'Location Overview', - networkSettings: 'Edit Location', - enrollment: 'Enrollment', - support: 'Support', - devices: 'Network Devices', - }, - copyright: 'Copyright ©2023-2025', - version: { - open: 'Application version: {version: string}', - closed: 'v{version: string}', - }, - }, - form: { - download: 'Download', - copy: 'Copy', - saveChanges: 'Save changes', - submit: 'Submit', - login: 'Sign in', - cancel: 'Cancel', - close: 'Close', - placeholders: { - password: 'Password', - username: 'Username', - username_or_email: 'Username or email', - }, - error: { - urlInvalid: 'Enter valid URL', - reservedName: 'Name is already taken.', - invalidIp: 'IP is invalid.', - reservedIp: 'IP is already in use.', - forbiddenCharacter: 'Field contains forbidden characters.', - usernameTaken: 'Username is already in use.', - invalidKey: 'Key is invalid.', - invalid: 'Field is invalid.', - required: 'Field is required.', - invalidCode: 'Submitted code is invalid.', - maximumLength: 'Maximum length exceeded.', - maximumLengthOf: `Field length cannot exceed {length: number}`, - minimumLength: 'Minimum length not reached.', - minimumLengthOf: `Minimum length of {length: number} not reached.`, - noSpecialChars: 'No special characters are allowed.', - oneDigit: 'One digit required.', - oneSpecial: 'Special character required.', - oneUppercase: 'One uppercase character required.', - oneLowercase: 'One lowercase character required.', - portMax: 'Maximum port is 65535.', - endpoint: 'Enter a valid endpoint.', - address: 'Enter a valid address.', - addressNetmask: 'Enter a valid address with a netmask.', - validPort: 'Enter a valid port.', - validCode: 'Code should have 6 digits.', - allowedIps: 'Only valid IP or domain is allowed.', - startFromNumber: 'Cannot start from number.', - repeat: `Fields don't match.`, - number: 'Expected a valid number.', - minimumValue: `Minimum value of {value: number} not reached.`, - maximumValue: 'Maximum value of {value: number} exceeded.', - tooManyBadLoginAttempts: `Too many bad login attempts. Please try again in a few minutes.`, - }, - floatingErrors: { - title: 'Please correct the following:', - }, - }, - components: { - openClientDeepLink: 'One-Click Desktop Configuration', - aclDefaultPolicySelect: { - label: 'Default ACL Policy', - options: { - allow: 'Allow', - deny: 'Deny', - }, - }, - standaloneDeviceTokenModalContent: { - headerMessage: - 'First download defguard command line client binaries and install them on your server.', - downloadButton: 'Download Defguard CLI Client', - expandableCard: { - title: 'Copy and paste this command in your terminal on the device', - }, - }, - deviceConfigsCard: { - cardTitle: 'WireGuard Config for location:', - messages: { - copyConfig: 'Configuration copied to the clipboard', - }, - }, - gatewaysStatus: { - label: 'Gateways', - states: { - all: 'All ({count: number}) Connected', - some: 'Some ({count: number}) Connected', - none: 'None connected', - error: 'Status check failed', - }, - messages: { - error: 'Failed to get gateways status', - deleteError: 'Failed to delete gateway', - }, - }, - noLicenseBox: { - footer: { - get: 'Get an enterprise license', - contact: 'by contacting:', - }, - }, - locationMfaModeSelect: { - label: 'MFA Requirement', - options: { - disabled: 'Do not enforce MFA', - internal: 'Internal MFA', - external: 'External MFA', - }, - }, - }, - settingsPage: { - title: 'Settings', - tabs: { - smtp: 'SMTP', - global: 'Global settings', - ldap: 'LDAP', - openid: 'OpenID', - enterprise: 'Enterprise features', - gatewayNotifications: 'Gateway notifications', - activityLogStream: 'Activity log streaming', - }, - messages: { - editSuccess: 'Settings updated', - challengeSuccess: 'Challenge message changed', - }, - enterpriseOnly: { - title: 'This feature is available only in Defguard Enterprise.', - currentExpired: 'Your current license has expired.', - subtitle: 'To learn more, visit our ', - website: 'website', - }, - activityLogStreamSettings: { - messages: { - destinationCrud: { - create: '{destination: string} destination added', - modify: '{destination: string} destination modified', - delete: '{destination: string} destination removed', - }, - }, - modals: { - selectDestination: { - title: 'Select destination', - }, - vector: { - create: 'Add Vector destination', - modify: 'Edit Vector destination', - }, - logstash: { - create: 'Add Logstash destination', - modify: 'Edit Logstash destination', - }, - shared: { - formLabels: { - name: 'Name', - url: 'Url', - username: 'Username', - password: 'Password', - cert: 'Certificate', - }, - }, - }, - title: 'Activity log streaming', - list: { - noData: 'No destinations', - headers: { - name: 'Name', - destination: 'Destination', - }, - }, - }, - ldapSettings: { - title: 'LDAP Settings', - sync: { - header: 'LDAP two-way synchronization', - info: 'Before enabling synchronization, please read more about it in our [documentation](https://docs.defguard.net/features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization).', - info_enterprise: 'This feature is available only in Defguard Enterprise.', - helpers: { - heading: - 'Configure LDAP synchronization settings here. If configured, Defguard will pull user information from LDAP and synchronize it with local users.', - sync_enabled: - 'If enabled, Defguard will attempt to pull LDAP user data at the specified interval.', - authority: `Defguard will use the selected server as the authoritative source of - user data, meaning that if LDAP is selected, Defguard data will be overwritten with the LDAP - data in case of a desynchronization. If Defguard was selected as the authority, it's data will - overwrite LDAP data if necessary. - Make sure to check the documentation to understand the implications of this - setting.`, - interval: 'The interval with which the synchronization will be attempted.', - groups: `Defguard will attempt to synchronize only users belonging to the provided groups. Provide a comma-separated list of groups. If empty, all users will be synchronized.`, - }, - }, - form: { - labels: { - ldap_enable: 'Enable LDAP integration', - ldap_url: 'URL', - ldap_bind_username: 'Bind Username', - ldap_bind_password: 'Bind Password', - ldap_member_attr: 'Member Attribute', - ldap_username_attr: 'Username Attribute', - ldap_user_obj_class: 'User Object Class', - ldap_user_search_base: 'User Search Base', - ldap_user_auxiliary_obj_classes: 'Additional User Object Classes', - ldap_groupname_attr: 'Groupname Attribute', - ldap_group_search_base: 'Group Search Base', - ldap_group_member_attr: 'Group Member Attribute', - ldap_group_obj_class: 'Group Object Class', - ldap_sync_enabled: 'Enable LDAP two-way synchronization', - ldap_authoritative_source: 'Consider the following source as the authority', - ldap_sync_interval: 'Synchronization interval', - ldap_use_starttls: 'Use StartTLS', - ldap_tls_verify_cert: 'Verify TLS certificate', - ldap_uses_ad: 'LDAP server is Active Directory', - ldap_user_rdn_attr: 'User RDN Attribute', - ldap_sync_groups: 'Limit synchronization to these groups', - }, - helpers: { - ldap_user_obj_class: - 'The object class that will be added to the user object during its creation. This is used to determine if an LDAP object is a user.', - ldap_user_auxiliary_obj_classes: - "The additional object classes that will be added to the user object during its creation. They may also influence the added user's attributes (e.g. simpleSecurityObject class will add userPassword attribute).", - user_settings: - 'Configure LDAP user settings here. These settings determine how Defguard maps and synchronizes LDAP user information with local users.', - connection_settings: - 'Configure LDAP connection settings here. These settings determine how Defguard connects to your LDAP server. Encrypted connections are also supported (StartTLS, LDAPS).', - group_settings: - 'Configure LDAP group settings here. These settings determine how Defguard maps and synchronizes LDAP group information with local groups.', - ldap_group_obj_class: - 'The object class that represents a group in LDAP. This is used to determine if an LDAP object is a group.', - ldap_user_rdn_attr: - "If your user's RDN attribute is different than your username attribute, please provide it here, otherwise leave it empty to use the username attribute as the user's RDN.", - }, - headings: { - user_settings: 'User settings', - connection_settings: 'Connection settings', - group_settings: 'Group settings', - }, - delete: 'Delete configuration', - }, - test: { - title: 'Test LDAP Connection', - submit: 'Test', - messages: { - success: 'LDAP connected successfully', - error: 'LDAP connection rejected', - }, - }, - }, - openIdSettings: { - heading: 'External OpenID settings', - general: { - title: 'General settings', - helper: 'Here you can change general OpenID behavior in your Defguard instance.', - createAccount: { - label: - 'Automatically create user account when logging in for the first time through external OpenID.', - helper: - 'If this option is enabled, Defguard automatically creates new accounts for users who log in for the first time using an external OpenID provider. Otherwise, the user account must first be created by an administrator.', - }, - usernameHandling: { - label: 'Username handling', - helper: - 'Configure the method for handling invalid characters in usernames provided by your identity provider.', - options: { - remove: 'Remove forbidden characters', - replace: 'Replace forbidden characters', - prune_email: 'Prune email domain', - }, - }, - }, - form: { - title: 'Client settings', - helper: - 'Here you can configure the OpenID client settings with values provided by your external OpenID provider.', - custom: 'Custom', - none: 'None', - documentation: - 'Make sure to check our [documentation](https://docs.defguard.net/features/external-openid-providers) for more information and examples.', - delete: 'Delete provider', - directory_sync_settings: { - title: 'Directory synchronization settings', - helper: - "Directory synchronization allows you to automatically synchronize users' status and groups from an external provider.", - notSupported: 'Directory sync is not supported for this provider.', - connectionTest: { - success: 'Connection successful', - error: 'Connection failed with error:', - }, - }, - selects: { - synchronize: { - all: 'All', - users: 'Users', - groups: 'Groups', - }, - behavior: { - keep: 'Keep', - disable: 'Disable', - delete: 'Delete', - }, - }, - labels: { - provider: { - label: 'Provider', - helper: - 'Select your OpenID provider. You can use custom provider and fill in the base URL by yourself.', - }, - client_id: { - label: 'Client ID', - helper: 'Client ID provided by your OpenID provider.', - }, - client_secret: { - label: 'Client Secret', - helper: 'Client Secret provided by your OpenID provider.', - }, - base_url: { - label: 'Base URL', - helper: - 'Base URL of your OpenID provider, e.g. https://accounts.google.com. Make sure to check our documentation for more information and examples.', - }, - display_name: { - label: 'Display Name', - helper: - "Name of the OpenID provider to display on the login's page button. If not provided, the button will display generic 'Login with OIDC' text.", - }, - enable_directory_sync: { - label: 'Enable directory synchronization', - }, - sync_target: { - label: 'Synchronize', - helper: - "What to synchronize from the external provider. You can choose between synchronizing both users' state and group memberships, or narrow it down to just one of these.", - }, - sync_interval: { - label: 'Synchronization interval', - helper: 'Interval in seconds between directory synchronizations.', - }, - user_behavior: { - label: 'User behavior', - helper: - 'Choose how to handle users that are not present in the external provider anymore. You can select between keeping, disabling, or deleting them.', - }, - admin_behavior: { - label: 'Admin behavior', - helper: - 'Choose how to handle Defguard admins that are not present in the external provider anymore. You can select between keeping them, disabling them or completely deleting them.', - }, - admin_email: { - label: 'Admin email', - helper: - 'Email address of the account on which behalf the synchronization checks will be performed, e.g. the person who setup the Google service account. See our documentation for more details.', - }, - service_account_used: { - label: 'Service account in use', - helper: - 'The service account currently being used for synchronization. You can change it by uploading a new service account key file.', - }, - service_account_key_file: { - label: 'Service Account Key file', - helper: - "Upload a new service account key file to set the service account used for synchronization. NOTE: The uploaded file won't be visible after saving the settings and reloading the page as it's contents are sensitive and are never sent back to the dashboard.", - uploaded: 'File uploaded', - uploadPrompt: 'Upload a service account key file', - }, - okta_client_id: { - label: 'Directory Sync Client ID', - helper: 'Client ID for the Okta directory sync application.', - }, - okta_client_key: { - label: 'Directory Sync Client Private Key', - helper: - "Client private key for the Okta directory sync application in the JWK format. It won't be shown again here.", - }, - jumpcloud_api_key: { - label: 'JumpCloud API Key', - helper: - 'API Key for the JumpCloud directory sync. It will be used to periodically query JumpCloud for user state and group membership changes.', - }, - group_match: { - label: 'Sync only matching groups', - helper: - 'Provide a comma separated list of group names that should be synchronized. If left empty, all groups from the provider will be synchronized.', - }, - }, - }, - }, - modulesVisibility: { - header: 'Modules Visibility', - helper: `

- Hide unused modules. -

- - Read more in documentation. - `, - fields: { - wireguard_enabled: { - label: 'WireGuard VPN', - }, - webhooks_enabled: { - label: 'Webhooks', - }, - worker_enabled: { - label: 'Yubikey provisioning', - }, - openid_enabled: { - label: 'OpenID Connect', - }, - }, - }, - defaultNetworkSelect: { - header: 'Default location view', - helper: `

Here you can change your default location view.

- - Read more in documentation. - `, - filterLabels: { - grid: 'Grid view', - list: 'List view', - }, - }, - instanceBranding: { - header: 'Instance Branding', - form: { - title: 'Name & Logo:', - fields: { - instanceName: { - label: 'Instance name', - placeholder: 'Defguard', - }, - mainLogoUrl: { - label: 'Login logo url', - helper: 'Maximum picture size is 250x100 px', - placeholder: 'Default image', - }, - navLogoUrl: { - label: 'Menu & navigation small logo', - helper: 'Maximum picture size is 100x100 px', - placeholder: 'Default image', - }, - }, - controls: { - restoreDefault: 'Restore default', - submit: 'Save changes', - }, - }, - helper: ` -

- Here you can add url of your logo and name for your defguard - instance it will be displayed instead of defguard. -

- - Read more in documentation. - - `, - }, - license: { - header: 'Enterprise', - helpers: { - enterpriseHeader: { - text: 'Here you can manage your Defguard Enterprise version license.', - link: 'To learn more about Defguard Enterprise, visit our webiste.', - }, - licenseKey: { - text: 'Enter your Defguard Enterprise license key below. You should receive it via email after purchasing the license.', - link: 'You can purchase the license here.', - }, - }, - form: { - title: 'License', - fields: { - key: { - label: 'License key', - placeholder: 'Your Defguard license key', - }, - }, - }, - licenseInfo: { - title: 'License information', - status: { - noLicense: 'No valid license', - expired: 'Expired', - limitsExceeded: 'Limits Exceeded', - active: 'Active', - }, - licenseNotRequired: - "

You have access to this enterprise feature, as you haven't exceeded any of the usage limits yet. Check the documentation for more information.

", - types: { - subscription: { - label: 'Subscription', - helper: 'A license that automatically renews at regular intervals', - }, - offline: { - label: 'Offline', - helper: - 'The license is valid until the expiry date and does not automatically renew', - }, - }, - fields: { - status: { - label: 'Status', - active: 'Active', - expired: 'Expired', - subscriptionHelper: - 'A subscription license is considered valid for some time after the expiration date to account for possible automatic payment delays.', - }, - type: { - label: 'Type', - }, - validUntil: { - label: 'Valid until', - }, - }, - }, - }, - smtp: { - form: { - title: 'SMTP configuration', - sections: { - server: 'Server settings', - }, - fields: { - encryption: { - label: 'Encryption', - }, - server: { - label: 'Server address', - placeholder: 'Address', - }, - port: { - label: 'Server port', - placeholder: 'Port', - }, - user: { - label: 'Server username', - placeholder: 'Username', - }, - password: { - label: 'Server password', - placeholder: 'Password', - }, - sender: { - label: 'Sender email address', - placeholder: 'Address', - helper: ` -

- System messages will be sent from this address. - E.g. no-reply@my-company.com. -

- `, - }, - }, - controls: { - submit: 'Save changes', - }, - }, - delete: 'Delete configuration', - testForm: { - title: 'Send test email', - subtitle: 'Enter recipent email address', - fields: { - to: { - label: 'Send test email to', - placeholder: 'Address', - }, - }, - controls: { - submit: 'Send', - resend: 'Resend', - retry: 'Retry', - success: 'Test email sent', - error: 'Error sending email', - }, - success: { - message: 'Test email has been sent successully.', - }, - error: { - message: - 'There was an error sending the test email. Please check your SMTP configuration and try again.', - fullError: 'Error: {error: string}', - }, - }, - helper: `Here you can configure SMTP server used to send system messages to the users.`, - }, - enrollment: { - helper: - 'Enrollment is a process by which a new employee will be able to activate their new account, create a password and configure a VPN device.', - vpnOptionality: { - header: 'VPN step optionality', - helper: - 'You can choose whether creating a VPN device is optional or mandatory during enrollment', - }, - welcomeMessage: { - header: 'Welcome message', - helper: ` -

In this text input you can use Markdown:

-
    -
  • Headings start with a hash #
  • -
  • Use asterisks for *italics*
  • -
  • Use two asterisks for **bold**
  • -
- `, - }, - welcomeEmail: { - header: 'Welcome e-mail', - helper: ` -

In this text input you can use Markdown:

-
    -
  • Headings start with a hash #
  • -
  • Use asterisks for *italics*
  • -
  • Use two asterisks for **bold**
  • -
- `, - }, - form: { - controls: { - submit: 'Save changes', - }, - welcomeMessage: { - helper: - 'This information will be displayed for the user once enrollment is completed. We advise you to insert relevant links and explain next steps briefly.', - placeholder: 'Please input welcome message', - }, - welcomeEmail: { - helper: - 'This information will be sent to the user once enrollment is completed. We advise you to insert relevant links and explain next steps briefly. You can reuse the welcome message here.', - placeholder: 'Please input welcome email', - }, - welcomeEmailSubject: { - label: 'Subject', - }, - useMessageAsEmail: { - label: 'Same as welcome message', - }, - }, - }, - enterprise: { - header: 'Enterprise Features', - helper: 'Here you can change enterprise settings.', - fields: { - deviceManagement: { - label: "Disable users' ability to manage their devices", - helper: - "When this option is enabled, only users in the Admin group can manage devices in user profile (it's disabled for all other users)", - }, - disableAllTraffic: { - label: 'Disable the option to route all traffic through VPN', - helper: - 'When this option is enabled, users will not be able to route all traffic through the VPN using the defguard client.', - }, - manualConfig: { - label: "Disable users' ability to manually configure WireGuard client", - helper: - "When this option is enabled, users won't be able to view or download configuration for the manual WireGuard client setup. Only the Defguard desktop client configuration will be available.", - }, - }, - }, - gatewayNotifications: { - smtpWarning: 'To enable notifications you must first configure an SMTP server', - header: 'Notifications', - sections: { - gateway: 'Gateway disconnect notifications', - }, - helper: 'Here you can manage email notifications.', - form: { - submit: 'Save changes', - fields: { - disconnectNotificationsEnabled: { - label: 'Enable gateway disconnect notifications', - help: 'Send email notification to admin users once a gateway is disconnected', - }, - inactivityThreshold: { - label: 'Gateway inactivity time [minutes]', - help: 'Time (in minutes) that a gateway needs to stay disconnected before a notification is sent', - }, - reconnectNotificationsEnabled: { - label: 'Enable gateway reconnect notifications', - help: 'Send email notification to admin users once a gateway is reconnected', - }, - }, - }, - }, - }, - openidOverview: { - pageTitle: 'OpenID Apps', - search: { - placeholder: 'Find apps', - }, - filterLabels: { - all: 'All apps', - enabled: 'Enabled', - disabled: 'Disabled', - }, - clientCount: 'All apps', - addNewApp: 'Add new', - list: { - headers: { - name: 'Name', - status: 'Status', - actions: 'Actions', - }, - editButton: { - edit: 'Edit app', - delete: 'Delete app', - disable: 'Disable', - enable: 'Enable', - copy: 'Copy client ID', - }, - status: { - enabled: 'Enabled', - disabled: 'Disabled', - }, - }, - messages: { - copySuccess: 'Client ID copied.', - noLicenseMessage: "You don't have a license for this feature.", - noClientsFound: 'No results found.', - }, - deleteApp: { - title: 'Delete app', - message: 'Do you want to delete {appName: string} app ?', - submit: 'Delete app', - messages: { - success: 'App deleted.', - }, - }, - enableApp: { - messages: { - success: 'App enabled.', - }, - }, - disableApp: { - messages: { - success: 'App disabled.', - }, - }, - modals: { - openidClientModal: { - title: { - addApp: 'Add Application', - editApp: 'Edit {appName: string} app', - }, - scopes: 'Scopes:', - messages: { - clientIdCopy: 'Client ID copied.', - clientSecretCopy: 'Client secret copied.', - }, - form: { - messages: { - successAdd: 'App created.', - successModify: 'App modified.', - }, - error: { - urlRequired: 'URL is required.', - validUrl: 'Must be a valid URL.', - scopeValidation: 'Must have at least one scope.', - }, - fields: { - name: { - label: 'App name', - }, - redirectUri: { - label: 'Redirect URL {count: number}', - placeholder: 'https://example.com/redirect', - }, - openid: { - label: 'OpenID', - }, - profile: { - label: 'Profile', - }, - email: { - label: 'Email', - }, - phone: { - label: 'Phone', - }, - groups: { - label: 'Groups', - }, - }, - controls: { - addUrl: 'Add URL', - }, - }, - clientId: 'Client ID', - clientSecret: 'Client secret', - }, - }, - }, - webhooksOverview: { - pageTitle: 'Webhooks', - search: { - placeholder: 'Find webhooks by url', - }, - filterLabels: { - all: 'All webhooks', - enabled: 'Enabled', - disabled: 'Disabled', - }, - webhooksCount: 'All webhooks', - addNewWebhook: 'Add new', - noWebhooksFound: 'No webhooks found.', - list: { - headers: { - name: 'Name', - description: 'Description', - status: 'Status', - actions: 'Actions', - }, - editButton: { - edit: 'Edit', - delete: 'Delete webhook', - disable: 'Disable', - enable: 'Enable', - }, - status: { - enabled: 'Enabled', - disabled: 'Disabled', - }, - }, - }, - provisionersOverview: { - pageTitle: 'Provisioners', - search: { - placeholder: 'Find provisioners', - }, - filterLabels: { - all: 'All', - available: 'Available', - unavailable: 'Unavailable', - }, - provisionersCount: 'All provisioners', - noProvisionersFound: 'No provisioners found.', - noLicenseMessage: "You don't have a license for this feature.", - provisioningStation: { - header: 'YubiKey provisioning station', - content: `In order to be able to provision your YubiKeys, first you need to set up - physical machine with USB slot. Run provided command on your chosen - machine to register it and start provisioning your keys.`, - dockerCard: { - title: 'Provisioning station docker setup command', - }, - tokenCard: { - title: 'Access token', - }, - }, - list: { - headers: { - name: 'Name', - ip: 'IP address', - status: 'Status', - actions: 'Actions', - }, - editButton: { - delete: 'Delete provisioner', - }, - status: { - available: 'Available', - unavailable: 'Unavailable', - }, - }, - messages: { - copy: { - token: 'Token copied', - command: 'Command copied', - }, - }, - }, - openidAllow: { - header: '{name: string} would like to:', - scopes: { - openid: 'Use your profile data for future logins.', - profile: 'Know basic information from your profile like name, profile picture etc.', - email: 'Know your email address.', - phone: 'Know your phone number.', - groups: 'Know your groups membership.', - }, - controls: { - accept: 'Accept', - cancel: 'Cancel', - }, - }, - networkOverview: { - networkSelection: { - all: 'All locations summary', - placeholder: 'Select location', - }, - timeRangeSelectionLabel: '{value: number}h period', - pageTitle: 'Location overview', - controls: { - editNetworks: 'Edit Locations settings', - selectNetwork: { - placeholder: 'Loading locations', - }, - }, - filterLabels: { - grid: 'Grid view', - list: 'List view', - }, - gatewayStatus: { - all: 'All ({count: number}) Connected', - some: 'Some ({count: number}) Connected', - none: 'None connected', - }, - stats: { - currentlyActiveUsers: 'Currently active users', - currentlyActiveNetworkDevices: 'Currently active network devices', - totalUserDevices: 'Total user devices: {count: number}', - activeNetworkDevices: 'Active network devices in {hour: number}h', - activeUsersFilter: 'Active users in {hour: number}h', - activeDevicesFilter: 'Active devices in {hour: number}h', - activityIn: 'Activity in {hour: number}H', - networkUsage: 'Network usage', - peak: 'Peak', - in: 'In:', - out: 'Out:', - gatewayDisconnected: 'Gateway disconnected', - }, - cardsLabels: { - users: 'Connected Users', - devices: 'Connected Network Devices', - }, - }, - connectedUsersOverview: { - pageTitle: 'Connected users', - noUsersMessage: 'Currently there are no connected users', - userList: { - username: 'Username', - device: 'Device', - connected: 'Connected', - deviceLocation: 'Device location', - networkUsage: 'Network usage', - }, - }, - networkPage: { - pageTitle: 'Edit Location', - addNetwork: '+ Add new location', - controls: { - networkSelect: { - label: 'Location choice', - }, - }, - }, - activityOverview: { - header: 'Activity stream', - noData: 'Currently there is no activity detected', - }, - networkConfiguration: { - messages: { - delete: { - success: 'Network deleted', - error: 'Failed to delete network', - }, - }, - header: 'Location configuration', - importHeader: 'Location import', - form: { - helpers: { - address: - 'Based on this address VPN network address will be defined, eg. 10.10.10.1/24 (and VPN network will be: 10.10.10.0/24). You can optionally specify multiple addresses separated by a comma. The first address is the primary address, and this one will be used for IP address assignment for devices. The other IP addresses are auxiliary and are not managed by Defguard.', - endpoint: - 'Public IP address or domain name to which the remote peers/users will connect to. This address will be used in the configuration for the clients, but Defguard Gateways do not bind to this address.', - gateway: 'Gateway public address, used by VPN users to connect', - dns: 'Specify the DNS resolvers to query when the wireguard interface is up.', - allowedIps: - 'List of addresses/masks that should be routed through the VPN network.', - allowedGroups: - 'By default, all users will be allowed to connect to this location. If you want to restrict access to this location to a specific group, please select it below.', - aclFeatureDisabled: - "ACL functionality is an enterprise feature and you've exceeded the user, device or network limits to use it. In order to use this feature, purchase an enterprise license or upgrade your existing one.", - peerDisconnectThreshold: - 'Clients authorized with MFA will be disconnected from the location once there has been no network activity detected between them and the VPN gateway for a length of time configured below.', - locationMfaMode: { - description: 'Choose how MFA is enforced when connecting to this location:', - internal: - "Internal MFA - MFA is enforced using Defguard's built-in MFA (e.g. TOTP, WebAuthn) with internal identity", - external: - 'External MFA - If configured (see [OpenID settings](settings)) this option uses external identity provider for MFA', - }, - }, - sections: { - accessControl: { - header: 'Access Control & Firewall', - }, - mfa: { - header: 'Multi-Factor Authentication', - }, - }, - messages: { - networkModified: 'Location modified.', - networkCreated: 'Location created', - }, - fields: { - name: { - label: 'Location name', - }, - address: { - label: 'Gateway VPN IP address and netmask', - }, - endpoint: { - label: 'Gateway IP address or domain name', - }, - allowedIps: { - label: 'Allowed Ips', - }, - port: { - label: 'Gateway port', - }, - dns: { - label: 'DNS', - }, - allowedGroups: { - label: 'Allowed groups', - placeholder: 'All groups', - }, - keepalive_interval: { - label: 'Keepalive interval [seconds]', - }, - peer_disconnect_threshold: { - label: 'Client disconnect threshold [seconds]', - }, - acl_enabled: { - label: 'Enable ACL for this location', - }, - acl_default_allow: { - label: 'Default ACL policy', - }, - location_mfa_mode: { - label: 'MFA requirement', - }, - }, - controls: { - submit: 'Save changes', - cancel: 'Back to Overview', - delete: 'Remove location', - }, - }, - }, - gatewaySetup: { - header: { - main: 'Gateway server setup', - dockerBasedGatewaySetup: `Docker Based Gateway Setup`, - fromPackage: `From Package`, - oneLineInstall: `One Line Install`, - }, - card: { - title: 'Docker based gateway setup', - authToken: `Authentication Token`, - }, - button: { - availablePackages: `Available Packages`, - }, - controls: { - status: 'Check connection status', - }, - messages: { - runCommand: `Defguard requires to deploy a gateway node to control wireguard VPN on the vpn server. - More details can be found in the [documentation]({setupGatewayDocs:string}). - There are several ways to deploy the gateway server, - below is a Docker based example, for other examples please visit [documentation]({setupGatewayDocs:string}).`, - createNetwork: `Please create the network before running the gateway process.`, - noConnection: `No connection established, please run provided command.`, - connected: `Gateway connected.`, - statusError: 'Failed to get gateway status', - oneLineInstall: `If you are doing one line install: https://docs.defguard.net/getting-started/one-line-install - you don't need to do anything.`, - fromPackage: `Install the package available at https://github.com/DefGuard/gateway/releases/latest and configure \`/etc/defguard/gateway.toml\` - according to the [documentation]({setupGatewayDocs:string}).`, - authToken: `Token below is required to authenticate and configure the gateway node. Ensure you keep this token secure and follow the deployment instructions - provided in the [documentation]({setupGatewayDocs:string}) to successfully set up the gateway server. - For more details and exact steps, please refer to the [documentation]({setupGatewayDocs:string}).`, - dockerBasedGatewaySetup: `Below is a Docker based example. For more details and exact steps, please refer to the [documentation]({setupGatewayDocs:string}).`, - }, - }, - loginPage: { - pageTitle: 'Enter your credentials', - oidcLogin: 'Sign in with', - callback: { - return: 'Go back to login', - error: 'An error occurred during external OpenID login', - }, - mfa: { - title: 'Two-factor authentication', - controls: { - useAuthenticator: 'Use Authenticator app instead', - useWebauthn: 'Use security key instead', - useRecoveryCode: 'Use recovery code instead', - useEmail: 'Use E-mail instead', - }, - email: { - header: 'Use code we sent to your e-mail to proceed.', - form: { - labels: { - code: 'Code', - }, - controls: { - resendCode: 'Resend Code', - }, - }, - }, - totp: { - header: 'Use code from your authentication app and click button to proceed.', - form: { - fields: { - code: { - placeholder: 'Enter Authenticator code', - }, - }, - controls: { - submit: 'Use authenticator code', - }, - }, - }, - recoveryCode: { - header: 'Enter one of active recovery codes and click button to log in.', - form: { - fields: { - code: { - placeholder: 'Recovery code', - }, - }, - controls: { - submit: 'Use recovery code', - }, - }, - }, - webauthn: { - header: 'When you are ready to authenticate, press the button below.', - controls: { - submit: 'Use security key', - }, - messages: { - error: 'Failed to read key. Please try again.', - }, - }, - }, - }, - wizard: { - completed: 'Location setup completed', - configuration: { - successMessage: 'Location created', - }, - welcome: { - header: 'Welcome to location wizard!', - sub: 'Before you start using VPN you need to setup your first location. When in doubt click on icon.', - button: 'Setup location', - }, - navigation: { - top: 'Location setup', - titles: { - welcome: 'Location setup', - choseNetworkSetup: 'Chose Location setup', - importConfig: 'Import existing location', - manualConfig: 'Configure location', - mapDevices: 'Map imported devices', - }, - buttons: { - next: 'Next', - back: 'Back', - }, - }, - deviceMap: { - messages: { - crateSuccess: 'Devices added', - errorsInForm: 'Please fill marked fields.', - }, - list: { - headers: { - deviceName: 'Device Name', - deviceIP: 'IP', - user: 'User', - }, - }, - }, - wizardType: { - manual: { - title: 'Manual Configuration', - description: 'Manual location configuration', - }, - import: { - title: 'Import From File', - description: 'Import from WireGuard config file', - }, - createNetwork: 'Create location', - }, - common: { - select: 'Select', - }, - locations: { - form: { - name: 'Name', - ip: 'IP address', - user: 'User', - fileName: 'File', - selectFile: 'Select file', - messages: { devicesCreated: 'Devices created' }, - validation: { invalidAddress: 'Invalid address' }, - }, - }, - }, - layout: { - select: { - addNewOptionDefault: 'Add new +', - }, - }, - redirectPage: { - title: 'You have been logged in', - subtitle: 'You will be redirected in a moment...', - }, - enrollmentPage: { - title: 'Enrollment', - controls: { - default: 'Restore default', - save: 'Save changes', - }, - messages: { - edit: { - success: 'Settings changed', - error: 'Save failed', - }, - }, - messageBox: - 'Enrollment is a process by which a new employee will be able to activate their new account, create a password and configure a VPN device. You can customize it here.', - settings: { - welcomeMessage: { - title: 'Welcome message', - messageBox: - 'This information will be displayed for user in service once enrollment is completed. We advise to insert links and explain next steps briefly. You can use same message as in the e-mail.', - }, - vpnOptionality: { - title: 'VPN set optionallity', - select: { - options: { - optional: 'Optional', - mandatory: 'Mandatory', - }, - }, - }, - welcomeEmail: { - title: 'Welcome e-mail', - subject: { - label: 'E-mail subject', - }, - messageBox: - 'This information will be sent to user once enrollment is completed. We advise to insert links and explain next steps briefly.', - controls: { - duplicateWelcome: 'Same as welcome message', - }, - }, - }, - }, - supportPage: { - title: 'Support', - modals: { - confirmDataSend: { - title: 'Send Support Data', - subTitle: - 'Please confirm that you actually want to send support debug information. None of your private information will be sent (wireguard keys, email addresses, etc. will not be sent).', - submit: 'Send support data', - }, - }, - debugDataCard: { - title: 'Support data', - body: ` -If you need assistance or you were asked to generate support data by our team (for example on our Matrix support channel: **#defguard-support:teonite.com**), you have two options: -* Either you can configure SMTP settings and click "Send support data" -* Or click "Download support data" and create a bug report in our GitHub attaching this file. -`, - downloadSupportData: 'Download support data', - downloadLogs: 'Download logs', - sendMail: 'Send support data', - mailSent: 'Email sent', - mailError: 'Error sending email', - }, - supportCard: { - title: 'Support', - body: ` -Before contacting or submitting any issues to GitHub please get familiar with Defguard documentation available at [docs.defguard.net](https://docs.defguard.net/) - -To submit: -* Bugs - please go to [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=bug&template=bug_report.md&title=) -* Feature request - please go to [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=feature&template=feature_request.md&title=) - -Any other requests you can reach us at: support@defguard.net -`, - }, - }, - devicesPage: { - title: 'Network Devices', - search: { - placeholder: 'Find', - }, - bar: { - itemsCount: 'All devices', - filters: {}, - actions: { - addNewDevice: 'Add new', - }, - }, - list: { - columns: { - labels: { - name: 'Device Name', - location: 'Location', - assignedIps: 'IP Addresses', - description: 'Description', - addedBy: 'Added By', - addedAt: 'Add Date', - edit: 'Edit', - }, - }, - edit: { - actionLabels: { - config: 'View config', - generateToken: 'Generate auth token', - }, - }, - }, - }, - acl: { - messageBoxes: { - aclAliasKind: { - component: { - name: 'Component', - description: 'combined with manually configured destination fields in ACL', - }, - destination: { - name: 'Destination', - description: 'translated into a separate set of firewall rules', - }, - }, - networkSelectionIndicatorsHelper: { - //md - denied: ` - Location access **denied** by default – network traffic not explicitly defined by the rules will be blocked. - `, - //md - allowed: ` - Location access **allowed** by default – network traffic not explicitly defined by the rules will be passed. - `, - //md - unmanaged: ` - Location access unmanaged (ACL disabled) - `, - }, - }, - sharedTitle: 'Access Control List', - fieldsSelectionLabels: { - ports: 'All ports', - protocols: 'All protocols', - }, - ruleStatus: { - new: 'New', - applied: 'Applied', - modified: 'Pending Change', - deleted: 'Pending Deletion', - enable: 'Enable', - enabled: 'Enabled', - disable: 'Disable', - disabled: 'Disabled', - expired: 'Expired', - }, - listPage: { - tabs: { - rules: 'Rules', - aliases: 'Aliases', - }, - message: { - changeDiscarded: 'Change discarded', - changeAdded: 'Pending change added', - changeFail: 'Failed to make change', - applyChanges: 'Pending changes applied', - applyFail: 'Failed to apply changes', - }, - rules: { - modals: { - applyConfirm: { - title: 'Deploy pending changes', - subtitle: '{count: number} changes will be deployed', - submit: 'Deploy changes', - }, - filterGroupsModal: { - groupHeaders: { - alias: 'Aliases', - location: 'Locations', - groups: 'Groups', - status: 'Status', - }, - submit: 'Save Filter', - }, - }, - listControls: { - searchPlaceholder: 'Find name', - addNew: 'Add new', - filter: { - nothingApplied: 'Filter', - applied: 'Filters ({count: number})', - }, - apply: { - noChanges: 'Deploy pending changes', - all: 'Deploy pending changes ({count: number})', - selective: 'Deploy selected changes ({count: number})', - }, - }, - list: { - pendingList: { - title: 'Pending Changes', - noData: 'No pending changes', - noDataSearch: 'No pending changes found', - }, - deployedList: { - title: 'Deployed Rules', - noData: 'No deployed rules', - noDataSearch: 'No deployed rules found', - }, - headers: { - name: 'Rule name', - id: 'ID', - destination: 'Destination', - allowed: 'Allowed', - denied: 'Denied', - locations: 'Locations', - status: 'Status', - edit: 'Edit', - }, - tags: { - all: 'All', - allDenied: 'All denied', - allAllowed: 'All allowed', - }, - editMenu: { - discard: 'Discard Changes', - delete: 'Mark for Deletion', - }, - }, - }, - aliases: { - message: { - rulesApply: 'Pending changes applied', - rulesApplyFail: 'Failed to apply changes', - aliasDeleted: 'Alias deleted', - aliasDeleteFail: 'Alias deletion failed', - }, - modals: { - applyConfirm: { - title: 'Confirm Alias Deployment', - message: `The updated aliases will modify the following rule(s) currently deployed on the gateway.\nPlease ensure these changes are intended before proceeding.`, - listLabel: 'Affected Rules', - submit: 'Deploy Changes', - }, - deleteBlock: { - title: 'Deletion blocked', - //md - content: ` -This alias is currently in use by the following rule(s) and cannot be deleted. To proceed with deletion, you must first remove it from these rules({rulesCount: number}): -`, - }, - filterGroupsModal: { - groupLabels: { - rules: 'Rules', - status: 'Status', - }, - }, - create: { - labels: { - name: 'Alias name', - kind: 'Alias kind', - ip: 'IPv4/6 CIDR range address', - ports: 'Ports or Port Ranges', - protocols: 'Protocols', - }, - placeholders: { - protocols: 'All Protocols', - ports: 'All Ports', - ip: 'All IP addresses', - }, - kindOptions: { - destination: 'Destination', - component: 'Component', - }, - controls: { - cancel: 'Cancel', - edit: 'Edit Alias', - create: 'Create Alias', - }, - messages: { - modified: 'Alias modified', - created: 'Alias created', - }, - }, - }, - listControls: { - searchPlaceholder: 'Find name', - addNew: 'Add new', - filter: { - nothingApplied: 'Filter', - applied: 'Filters ({count: number})', - }, - apply: { - noChanges: 'Deploy pending changes', - all: 'Deploy pending changes ({count: number})', - selective: 'Deploy selected changes ({count: number})', - }, - }, - list: { - pendingList: { - title: 'Pending Changes', - noData: 'No pending changes', - noDataSearch: 'No pending changes found', - }, - deployedList: { - title: 'Deployed Aliases', - noData: 'No deployed aliases', - noDataSearch: 'No deployed aliases found', - }, - headers: { - id: 'ID', - name: 'Alias name', - kind: 'Alias kind', - ip: 'IPv4/6 CIDR range address', - ports: 'Ports', - protocols: 'Protocols', - status: 'Status', - edit: 'Edit', - rules: 'Rules', - }, - status: { - applied: 'Applied', - changed: 'Modified', - }, - tags: { - allDenied: 'All denied', - allAllowed: 'All allowed', - }, - editMenu: { - discardChanges: 'Discard changes', - delete: 'Delete alias', - }, - }, - }, - }, - createPage: { - formError: { - allowDenyConflict: 'Conflicting members', - allowNotConfigured: 'Must configure some allowed users, groups or devices', - }, - infoBox: { - // md - allowInstructions: ` - Specify one or more fields (Users, Groups or Devices) to define this rule. The rule will consider all inputs provided for matching conditions. Leave any fields blank if not needed.`, - // md - destinationInstructions: ` - Specify one or more fields (IP Addresses or Ports) to define this rule. The rule will consider all inputs provided for matching conditions. Leave any fields blank if not needed.`, - }, - message: { - create: 'Rule created and added to pending changes.', - createFail: 'Rule creation failed', - }, - headers: { - rule: 'Rule', - createRule: 'Create Rule', - allowed: 'Allowed Users/Groups/Devices', - denied: 'Denied Users/Groups/Devices', - destination: 'Destination', - }, - labels: { - name: 'Rule name', - priority: 'Priority', - status: 'Status', - locations: 'Locations', - allowAllUsers: 'Allow all users', - allowAllNetworks: 'Include all locations', - allowAllNetworkDevices: 'Allow all network devices', - denyAllUsers: 'Deny all users', - denyAllNetworkDevices: 'Deny all network devices', - users: 'Users', - groups: 'Groups', - devices: 'Network devices', - protocols: 'Protocols', - manualIp: 'IPv4/6 CIDR range or address', - ports: 'Ports', - aliases: 'Aliases', - expires: 'Expiration Date', - manualInput: 'Manual Input', - }, - placeholders: { - allProtocols: 'All protocols', - allIps: 'All IP addresses', - }, - }, - }, - activity: { - title: 'Activity log', - modals: { - timeRange: { - title: 'Activity time', - }, - }, - list: { - allLabel: 'All activity', - headers: { - date: 'Date', - user: 'User', - ip: 'IP', - location: 'Location', - event: 'Event', - module: 'Module', - device: 'Device', - description: 'Description', - }, - noData: { - data: 'No activities present', - search: 'No activities found', - }, - }, - }, - enums: { - activityLogEventType: { - user_login: 'User login', - user_login_failed: 'User login failed', - user_mfa_login: 'User MFA login', - user_mfa_login_failed: 'User MFA login failed', - recovery_code_used: 'Recovery code used', - user_logout: 'User logout', - user_added: 'User added', - user_removed: 'User removed', - user_modified: 'User modified', - user_groups_modified: 'User groups modified', - mfa_enabled: 'MFA enabled', - mfa_disabled: 'MFA disabled', - user_mfa_disabled: 'User MFA disabled', - mfa_totp_enabled: 'MFA TOTP enabled', - mfa_totp_disabled: 'MFA TOTP disabled', - mfa_email_enabled: 'MFA email enabled', - mfa_email_disabled: 'MFA email disabled', - mfa_security_key_added: 'MFA security key added', - mfa_security_key_removed: 'MFA security key removed', - device_added: 'Device added', - device_removed: 'Device removed', - device_modified: 'Device modified', - network_device_added: 'Network device added', - network_device_removed: 'Network device removed', - network_device_modified: 'Network device modified', - activity_log_stream_created: 'Activity log stream created', - activity_log_stream_modified: 'Activity log stream modified', - activity_log_stream_removed: 'Activity log stream removed', - vpn_client_connected: 'VPN client connected', - vpn_client_disconnected: 'VPN client disconnected', - vpn_client_connected_mfa: 'VPN client connected to MFA location', - vpn_client_disconnected_mfa: 'VPN client disconnected from MFA location', - vpn_client_mfa_failed: 'VPN client failed MFA authentication', - enrollment_token_added: 'Enrollment token added', - enrollment_started: 'Enrollment started', - enrollment_device_added: 'Device added', - enrollment_completed: 'Enrollment completed', - password_reset_requested: 'Password reset requested', - password_reset_started: 'Password reset started', - password_reset_completed: 'Password reset completed', - vpn_location_added: 'VPN location added', - vpn_location_removed: 'VPN location removed', - vpn_location_modified: 'VPN location modified', - api_token_added: 'API token added', - api_token_removed: 'API token removed', - api_token_renamed: 'API token renamed', - open_id_app_added: 'OpenID app added', - open_id_app_removed: 'OpenID app removed', - open_id_app_modified: 'OpenID app modified', - open_id_app_state_changed: 'OpenID app state changed', - open_id_provider_removed: 'OpenID provider removed', - open_id_provider_modified: 'OpenID provider modified', - settings_updated: 'Settings updated', - settings_updated_partial: 'Settings partially updated', - settings_default_branding_restored: 'Default branding restored', - groups_bulk_assigned: 'Groups bulk assigned', - group_added: 'Group added', - group_modified: 'Group modified', - group_removed: 'Group removed', - group_member_added: 'Group member added', - group_member_removed: 'Group member removed', - group_members_modified: 'Group members modified', - web_hook_added: 'Webhook added', - web_hook_modified: 'Webhook modified', - web_hook_removed: 'Webhook removed', - web_hook_state_changed: 'Webhook state changed', - authentication_key_added: 'Authentication key added', - authentication_key_removed: 'Authentication key removed', - authentication_key_renamed: 'Authentication key renamed', - password_changed: 'Password changed', - password_changed_by_admin: 'Password changed by admin', - password_reset: 'Password reset', - client_configuration_token_added: 'Client configuration token added', - user_snat_binding_added: 'User SNAT binding added', - user_snat_binding_modified: 'User SNAT binding modified', - user_snat_binding_removed: 'User SNAT binding removed', - }, - activityLogModule: { - defguard: 'Defguard', - client: 'Client', - enrollment: 'Enrollment', - vpn: 'VPN', - }, - }, -}; - -export default en; diff --git a/web/src/i18n/formatters.ts b/web/src/i18n/formatters.ts deleted file mode 100644 index 6f3d0997e..000000000 --- a/web/src/i18n/formatters.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { FormattersInitializer } from 'typesafe-i18n'; - -import type { Formatters, Locales } from './i18n-types'; - -export const initFormatters: FormattersInitializer = ( - //@ts-ignore - locale: Locales, -) => { - const formatters: Formatters = { - // add your formatter functions here - }; - - return formatters; -}; diff --git a/web/src/i18n/i18n-react.tsx b/web/src/i18n/i18n-react.tsx deleted file mode 100644 index f113051fa..000000000 --- a/web/src/i18n/i18n-react.tsx +++ /dev/null @@ -1,16 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { useContext } from 'react' -import { initI18nReact } from 'typesafe-i18n/react' -import type { I18nContextType } from 'typesafe-i18n/react' -import type { Formatters, Locales, TranslationFunctions, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales } from './i18n-util' - -const { component: TypesafeI18n, context: I18nContext } = initI18nReact(loadedLocales, loadedFormatters) - -const useI18nContext = (): I18nContextType => useContext(I18nContext) - -export { I18nContext, useI18nContext } - -export default TypesafeI18n diff --git a/web/src/i18n/i18n-types.ts b/web/src/i18n/i18n-types.ts deleted file mode 100644 index 2bd9e2058..000000000 --- a/web/src/i18n/i18n-types.ts +++ /dev/null @@ -1,13367 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ -import type { BaseTranslation as BaseTranslationType, LocalizedString, RequiredParams } from 'typesafe-i18n' - -export type BaseTranslation = BaseTranslationType -export type BaseLocale = 'en' - -export type Locales = - | 'en' - | 'ko' - | 'pl' - -export type Translation = RootTranslation - -export type Translations = RootTranslation - -type RootTranslation = { - common: { - conditions: { - /** - * o​r - */ - or: string - /** - * a​n​d - */ - and: string - /** - * e​q​u​a​l - */ - equal: string - } - controls: { - /** - * T​i​m​e​ ​r​a​n​g​e - */ - timeRange: string - /** - * A​d​d​ ​n​e​w - */ - addNew: string - /** - * A​d​d - */ - add: string - /** - * A​c​c​e​p​t - */ - accept: string - /** - * N​e​x​t - */ - next: string - /** - * B​a​c​k - */ - back: string - /** - * C​a​n​c​e​l - */ - cancel: string - /** - * C​o​n​f​i​r​m - */ - confirm: string - /** - * S​u​b​m​i​t - */ - submit: string - /** - * C​l​o​s​e - */ - close: string - /** - * S​e​l​e​c​t - */ - select: string - /** - * F​i​n​i​s​h - */ - finish: string - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - saveChanges: string - /** - * S​a​v​e - */ - save: string - /** - * R​e​s​t​o​r​e​ ​d​e​f​a​u​l​t - */ - RestoreDefault: string - /** - * D​e​l​e​t​e - */ - 'delete': string - /** - * R​e​n​a​m​e - */ - rename: string - /** - * C​o​p​y - */ - copy: string - /** - * E​d​i​t - */ - edit: string - /** - * D​i​s​m​i​s​s - */ - dismiss: string - /** - * S​h​o​w - */ - show: string - /** - * E​n​a​b​l​e - */ - enable: string - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - /** - * S​e​l​e​c​t​ ​a​l​l - */ - selectAll: string - /** - * C​l​e​a​r - */ - clear: string - /** - * C​l​e​a​r​ ​a​l​l - */ - clearAll: string - /** - * F​i​l​t​e​r - */ - filter: string - /** - * F​i​l​t​e​r​s - */ - filters: string - } - /** - * K​e​y - */ - key: string - /** - * N​a​m​e - */ - name: string - /** - * N​o​ ​d​a​t​a - */ - noData: string - /** - * U​n​a​v​a​i​l​a​b​l​e - */ - unavailable: string - /** - * N​o​t​ ​s​e​t - */ - notSet: string - /** - * S​e​a​r​c​h - */ - search: string - /** - * T​i​m​e - */ - time: string - /** - * F​r​o​m - */ - from: string - /** - * U​n​t​i​l - */ - until: string - } - messages: { - /** - * E​r​r​o​r​ ​h​a​s​ ​o​c​c​u​r​r​e​d​. - */ - error: string - /** - * O​p​e​r​a​t​i​o​n​ ​s​u​c​c​e​e​d​e​d - */ - success: string - /** - * F​a​i​l​e​d​ ​t​o​ ​g​e​t​ ​a​p​p​l​i​c​a​t​i​o​n​ ​v​e​r​s​i​o​n​. - */ - errorVersion: string - /** - * C​o​n​t​e​x​t​ ​i​s​ ​n​o​t​ ​s​e​c​u​r​e​. - */ - insecureContext: string - /** - * D​e​t​a​i​l​s​: - */ - details: string - clipboard: { - /** - * C​l​i​p​b​o​a​r​d​ ​i​s​ ​n​o​t​ ​a​c​c​e​s​s​i​b​l​e​. - */ - error: string - /** - * C​o​n​t​e​n​t​ ​c​o​p​i​e​d​ ​t​o​ ​c​l​i​p​b​o​a​r​d​. - */ - success: string - } - } - modals: { - outdatedComponentsModal: { - /** - * V​e​r​s​i​o​n​ ​m​i​s​m​a​t​c​h - */ - title: string - /** - * D​e​f​g​u​a​r​d​ ​d​e​t​e​c​t​e​d​ ​u​n​s​u​p​p​o​r​t​e​d​ ​v​e​r​s​i​o​n​ ​i​n​ ​s​o​m​e​ ​c​o​m​p​o​n​e​n​t​s​. - */ - subtitle: string - content: { - /** - * I​n​c​o​m​p​a​t​i​b​l​e​ ​c​o​m​p​o​n​e​n​t​s​: - */ - title: string - /** - * U​n​k​n​o​w​n​ ​v​e​r​s​i​o​n - */ - unknownVersion: string - /** - * U​n​k​n​o​w​n​ ​h​o​s​t​n​a​m​e - */ - unknownHostname: string - } - } - upgradeLicenseModal: { - enterprise: { - /** - * U​p​g​r​a​d​e​ ​t​o​ ​E​n​t​e​r​p​r​i​s​e - */ - title: string - /** - * T​h​i​s​ ​f​u​n​c​t​i​o​n​a​l​i​t​y​ ​i​s​ ​a​n​ ​*​*​e​n​t​e​r​p​r​i​s​e​ ​f​e​a​t​u​r​e​*​*​ ​a​n​d​ ​y​o​u​'​v​e​ ​e​x​c​e​e​d​e​d​ ​t​h​e​ ​u​s​e​r​,​ ​d​e​v​i​c​e​ ​o​r​ ​n​e​t​w​o​r​k​ ​l​i​m​i​t​s​ ​t​o​ ​u​s​e​ ​i​t​.​ ​I​n​ ​o​r​d​e​r​ ​t​o​ ​u​s​e​ ​t​h​i​s​ ​f​e​a​t​u​r​e​,​ ​p​u​r​c​h​a​s​e​ ​a​n​ ​e​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e​ ​o​r​ ​u​p​g​r​a​d​e​ ​y​o​u​r​ ​e​x​i​s​t​i​n​g​ ​o​n​e​. - */ - subTitle: string - } - limit: { - /** - * U​p​g​r​a​d​e - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​Y​o​u​ ​h​a​v​e​ ​*​*​r​e​a​c​h​e​d​ ​t​h​e​ ​l​i​m​i​t​*​*​ ​o​f​ ​t​h​i​s​ ​f​u​n​c​t​i​o​n​a​l​i​t​y​.​ ​T​o​ ​*​*​[​ ​m​a​n​a​g​e​ ​m​o​r​e​ ​l​o​c​a​t​i​o​n​s​/​u​s​e​r​s​/​d​e​v​i​c​e​s​ ​]​*​*​ ​p​u​r​c​h​a​s​e​ ​o​f​ ​t​h​e​ ​E​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e​ ​i​s​ ​r​e​q​u​i​r​e​d​.​ - ​ ​ ​ ​ ​ ​ ​ ​ - */ - subTitle: string - } - /** - * - ​Y​o​u​ ​c​a​n​ ​f​i​n​d​ ​o​u​t​ ​m​o​r​e​ ​a​b​o​u​t​ ​f​e​a​t​u​r​e​s​ ​l​i​k​e​:​ - ​-​ ​R​e​a​l​ ​t​i​m​e​ ​a​n​d​ ​a​u​t​o​m​a​t​i​c​ ​c​l​i​e​n​t​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ - ​-​ ​E​x​t​e​r​n​a​l​ ​S​S​O​ - ​-​ ​C​o​n​t​r​o​l​l​i​n​g​ ​V​P​N​ ​c​l​i​e​n​t​s​ ​b​e​h​a​v​i​o​r​ - ​ - ​F​u​l​l​ ​e​n​t​e​r​p​r​i​s​e​ ​f​e​a​t​u​r​e​ ​l​i​s​t​:​ ​[​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​e​n​t​e​r​p​r​i​s​e​/​e​n​t​e​r​p​r​i​s​e​-​f​e​a​t​u​r​e​s​]​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​e​n​t​e​r​p​r​i​s​e​/​e​n​t​e​r​p​r​i​s​e​-​f​e​a​t​u​r​e​s​)​<​/​b​r​>​ - ​L​i​c​e​n​s​i​n​g​ ​i​n​f​o​r​m​a​t​i​o​n​:​ ​[​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​e​n​t​e​r​p​r​i​s​e​/​l​i​c​e​n​s​e​]​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​e​n​t​e​r​p​r​i​s​e​/​l​i​c​e​n​s​e​)​ - ​ ​ ​ ​ ​ ​ - */ - content: string - controls: { - /** - * M​a​y​b​e​ ​l​a​t​e​r - */ - cancel: string - /** - * S​e​e​ ​a​l​l​ ​E​n​t​e​r​p​r​i​s​e​ ​p​l​a​n​s - */ - confirm: string - } - } - standaloneDeviceEnrollmentModal: { - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​ ​t​o​k​e​n - */ - title: string - toasters: { - /** - * T​o​k​e​n​ ​g​e​n​e​r​a​t​i​o​n​ ​f​a​i​l​e​d​. - */ - error: string - } - } - standaloneDeviceConfigModal: { - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​ ​c​o​n​f​i​g - */ - title: string - /** - * C​o​n​f​i​g - */ - cardTitle: string - toasters: { - getConfig: { - /** - * F​a​i​l​e​d​ ​t​o​ ​g​e​t​ ​d​e​v​i​c​e​ ​c​o​n​f​i​g​. - */ - error: string - } - } - } - editStandaloneModal: { - /** - * E​d​i​t​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e - */ - title: string - toasts: { - /** - * D​e​v​i​c​e​ ​m​o​d​i​f​i​e​d - */ - success: string - /** - * M​o​d​i​f​y​i​n​g​ ​t​h​e​ ​d​e​v​i​c​e​ ​f​a​i​l​e​d - */ - failure: string - } - } - deleteStandaloneDevice: { - /** - * D​e​l​e​t​e​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e - */ - title: string - /** - * D​e​v​i​c​e​ ​{​n​a​m​e​}​ ​w​i​l​l​ ​b​e​ ​d​e​l​e​t​e​d​. - * @param {string} name - */ - content: RequiredParams<'name'> - messages: { - /** - * D​e​v​i​c​e​ ​d​e​l​e​t​e​d - */ - success: string - /** - * F​a​i​l​e​d​ ​t​o​ ​r​e​m​o​v​e​ ​d​e​v​i​c​e​. - */ - error: string - } - } - addStandaloneDevice: { - toasts: { - /** - * D​e​v​i​c​e​ ​a​d​d​e​d - */ - deviceCreated: string - /** - * D​e​v​i​c​e​ ​c​o​u​l​d​ ​n​o​t​ ​b​e​ ​a​d​d​e​d​. - */ - creationFailed: string - } - infoBox: { - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​a​d​d​ ​d​e​f​i​n​i​t​i​o​n​s​ ​o​r​ ​g​e​n​e​r​a​t​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​s​ ​f​o​r​ ​d​e​v​i​c​e​s​ ​t​h​a​t​ ​c​a​n​ ​c​o​n​n​e​c​t​ ​t​o​ ​y​o​u​r​ ​V​P​N​.​ ​O​n​l​y​ ​l​o​c​a​t​i​o​n​s​ ​w​i​t​h​o​u​t​ ​M​u​l​t​i​-​F​a​c​t​o​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​a​r​e​ ​a​v​a​i​l​a​b​l​e​ ​h​e​r​e​,​ ​a​s​ ​M​F​A​ ​i​s​ ​o​n​l​y​ ​s​u​p​p​o​r​t​e​d​ ​i​n​ ​D​e​f​g​u​a​r​d​ ​D​e​s​k​t​o​p​ ​C​l​i​e​n​t​ ​f​o​r​ ​n​o​w​. - */ - setup: string - } - form: { - /** - * A​d​d​ ​D​e​v​i​c​e - */ - submit: string - labels: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - deviceName: string - /** - * L​o​c​a​t​i​o​n - */ - location: string - /** - * A​s​s​i​g​n​e​d​ ​I​P​ ​A​d​d​r​e​s​s - */ - assignedAddress: string - /** - * D​e​s​c​r​i​p​t​i​o​n - */ - description: string - generation: { - /** - * G​e​n​e​r​a​t​e​ ​k​e​y​ ​p​a​i​r - */ - auto: string - /** - * U​s​e​ ​m​y​ ​o​w​n​ ​p​u​b​l​i​c​ ​k​e​y - */ - manual: string - } - /** - * P​r​o​v​i​d​e​ ​Y​o​u​r​ ​P​u​b​l​i​c​ ​K​e​y - */ - publicKey: string - } - } - steps: { - method: { - /** - * C​h​o​o​s​e​ ​a​ ​p​r​e​f​e​r​r​e​d​ ​m​e​t​h​o​d - */ - title: string - cards: { - cli: { - /** - * D​e​f​g​u​a​r​d​ ​C​o​m​m​a​n​d​ ​L​i​n​e​ ​C​l​i​e​n​t - */ - title: string - /** - * W​h​e​n​ ​u​s​i​n​g​ ​d​e​f​g​u​a​r​d​-​c​l​i​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​w​i​l​l​ ​b​e​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​c​o​n​f​i​g​u​r​e​d​. - */ - subtitle: string - /** - * D​e​f​g​u​a​r​d​ ​C​L​I​ ​d​o​w​n​l​o​a​d​ ​a​n​d​ ​d​o​c​u​m​e​n​t​a​t​i​o​n - */ - docs: string - } - manual: { - /** - * M​a​n​u​a​l​ ​W​i​r​e​G​u​a​r​d​ ​C​l​i​e​n​t - */ - title: string - /** - * I​f​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​d​o​e​s​ ​n​o​t​ ​s​u​p​p​o​r​t​ ​o​u​r​ ​C​L​I​ ​b​i​n​a​r​i​e​s​ ​y​o​u​ ​c​a​n​ ​a​l​w​a​y​s​ ​g​e​n​e​r​a​t​e​ ​a​ ​W​i​r​e​G​u​a​r​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​a​n​d​ ​c​o​n​f​i​g​u​r​e​ ​i​t​ ​m​a​n​u​a​l​l​y​ ​-​ ​b​u​t​ ​a​n​y​ ​u​p​d​a​t​e​s​ ​t​o​ ​t​h​e​ ​V​P​N​ ​l​o​c​a​t​i​o​n​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​w​i​l​l​ ​r​e​q​u​i​r​e​ ​m​a​n​u​a​l​ ​c​h​a​n​g​e​s​ ​i​n​ ​d​e​v​i​c​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​. - */ - subtitle: string - } - } - } - manual: { - /** - * A​d​d​ ​n​e​w​ ​V​P​N​ ​d​e​v​i​c​e​ ​u​s​i​n​g​ ​W​i​r​e​G​u​a​r​d​ ​C​l​i​e​n​t - */ - title: string - finish: { - /** - * D​o​w​n​l​o​a​d​ ​t​h​e​ ​p​r​o​v​i​d​e​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​t​o​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​a​n​d​ ​i​m​p​o​r​t​ ​i​t​ ​i​n​t​o​ ​y​o​u​r​ ​V​P​N​ ​c​l​i​e​n​t​ ​t​o​ ​c​o​m​p​l​e​t​e​ ​t​h​e​ ​s​e​t​u​p​. - */ - messageTop: string - /** - * U​s​e​ ​p​r​o​v​i​d​e​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​b​e​l​o​w​ ​b​y​ ​s​c​a​n​n​i​n​g​ ​Q​R​ ​c​o​d​e​ ​o​r​ ​i​m​p​o​r​t​i​n​g​ ​i​t​ ​a​s​ ​f​i​l​e​ ​o​n​ ​y​o​u​r​ ​d​e​v​i​c​e​'​s​ ​W​i​r​e​G​u​a​r​d​ ​a​p​p​. - */ - ctaInstruction: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​r​e​m​e​m​b​e​r​ ​t​h​a​t​ ​D​e​f​g​u​a​r​d​ ​*​*​d​o​e​s​n​'​t​ ​s​t​o​r​e​ ​p​r​i​v​a​t​e​ ​k​e​y​s​*​*​.​ ​W​e​ ​w​i​l​l​ ​s​e​c​u​r​e​l​y​ ​g​e​n​e​r​a​t​e​ ​t​h​e​ ​p​u​b​l​i​c​ ​a​n​d​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​p​a​i​r​ ​i​n​ ​y​o​u​r​ ​b​r​o​w​s​e​r​,​ ​b​u​t​ ​o​n​l​y​ ​s​t​o​r​e​ ​t​h​e​ ​p​u​b​l​i​c​ ​k​e​y​ ​i​n​ ​D​e​f​g​u​a​r​d​ ​d​a​t​a​b​a​s​e​.​ ​P​l​e​a​s​e​ ​d​o​w​n​l​o​a​d​ ​t​h​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​g​e​n​e​r​a​t​e​d​ ​w​i​t​h​ ​t​h​e​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​f​o​r​ ​t​h​e​ ​d​e​v​i​c​e​,​ ​a​s​ ​i​t​ ​w​i​l​l​ ​n​o​t​ ​b​e​ ​a​c​c​e​s​s​i​b​l​e​ ​l​a​t​e​r​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - warningMessage: string - actionCard: { - /** - * C​o​n​f​i​g - */ - title: string - } - } - } - cli: { - /** - * A​d​d​ ​d​e​v​i​c​e​ ​u​s​i​n​g​ ​D​e​f​g​u​a​r​d​ ​C​o​m​m​a​n​d​ ​L​i​n​e​ ​C​l​i​e​n​t - */ - title: string - finish: { - /** - * F​i​r​s​t​ ​d​o​w​n​l​o​a​d​ ​D​e​f​g​u​a​r​d​ ​c​o​m​m​a​n​d​ ​l​i​n​e​ ​c​l​i​e​n​t​ ​b​i​n​a​r​y​ ​a​n​d​ ​i​n​s​t​a​l​l​ ​i​t​ ​o​n​ ​y​o​u​r​ ​s​e​r​v​e​r​. - */ - topMessage: string - /** - * D​o​w​n​l​o​a​d​ ​D​e​f​g​u​a​r​d​ ​C​L​I​ ​C​l​i​e​n​t - */ - downloadButton: string - /** - * C​o​p​y​ ​a​n​d​ ​p​a​s​t​e​ ​t​h​i​s​ ​c​o​m​m​a​n​d​ ​i​n​ ​y​o​u​r​ ​t​e​r​m​i​n​a​l​ ​o​n​ ​t​h​e​ ​d​e​v​i​c​e - */ - commandCopy: string - } - setup: { - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​a​d​d​ ​d​e​f​i​n​i​t​i​o​n​s​ ​o​r​ ​g​e​n​e​r​a​t​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​s​ ​f​o​r​ ​d​e​v​i​c​e​s​ ​t​h​a​t​ ​c​a​n​ ​c​o​n​n​e​c​t​ ​t​o​ ​y​o​u​r​ ​V​P​N​.​ ​O​n​l​y​ ​l​o​c​a​t​i​o​n​s​ ​w​i​t​h​o​u​t​ ​M​u​l​t​i​-​F​a​c​t​o​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​a​r​e​ ​a​v​a​i​l​a​b​l​e​ ​h​e​r​e​,​ ​a​s​ ​M​F​A​ ​i​s​ ​o​n​l​y​ ​s​u​p​p​o​r​t​e​d​ ​i​n​ ​D​e​f​g​u​a​r​d​ ​D​e​s​k​t​o​p​ ​C​l​i​e​n​t​ ​f​o​r​ ​n​o​w​. - */ - stepMessage: string - form: { - /** - * A​d​d​ ​D​e​v​i​c​e - */ - submit: string - } - } - } - } - } - updatesNotificationToaster: { - /** - * N​e​w​ ​v​e​r​s​i​o​n​ ​a​v​a​i​l​a​b​l​e​ ​{​v​e​r​s​i​o​n​} - * @param {string} version - */ - title: RequiredParams<'version'> - controls: { - /** - * S​e​e​ ​w​h​a​t​'​s​ ​n​e​w - */ - more: string - } - } - enterpriseUpgradeToaster: { - /** - * Y​o​u​'​v​e​ ​r​e​a​c​h​e​d​ ​t​h​e​ ​e​n​t​e​r​p​r​i​s​e​ ​f​u​n​c​t​i​o​n​a​l​i​t​y​ ​l​i​m​i​t​. - */ - title: string - /** - * Y​o​u​'​v​e​ ​e​x​c​e​e​d​e​d​ ​t​h​e​ ​l​i​m​i​t​ ​o​f​ ​y​o​u​r​ ​c​u​r​r​e​n​t​ ​D​e​f​g​u​a​r​d​ ​p​l​a​n​ ​a​n​d​ ​t​h​e​ ​e​n​t​e​r​p​r​i​s​e​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​f​e​a​t​u​r​e​s​ ​w​i​l​l​ ​b​e​ ​d​i​s​a​b​l​e​d​.​ ​P​u​r​c​h​a​s​e​ ​a​n​ ​e​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e​ ​o​r​ ​u​p​g​r​a​d​e​ ​y​o​u​r​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​e​x​i​s​t​i​n​g​ ​o​n​e​ ​t​o​ ​c​o​n​t​i​n​u​e​ ​u​s​i​n​g​ ​t​h​e​s​e​ ​f​e​a​t​u​r​e​s​. - */ - message: string - /** - * S​e​e​ ​a​l​l​ ​e​n​t​e​r​p​r​i​s​e​ ​p​l​a​n​s - */ - link: string - } - updatesNotification: { - header: { - /** - * U​p​d​a​t​e​ ​A​v​a​i​l​a​b​l​e - */ - title: string - /** - * n​e​w​ ​v​e​r​s​i​o​n​ ​{​v​e​r​s​i​o​n​} - * @param {string} version - */ - newVersion: RequiredParams<'version'> - /** - * c​r​i​t​i​c​a​l​ ​u​p​d​a​t​e - */ - criticalBadge: string - } - controls: { - /** - * V​i​s​i​t​ ​r​e​l​e​a​s​e​ ​p​a​g​e - */ - visitRelease: string - } - } - addGroup: { - /** - * A​d​d​ ​g​r​o​u​p - */ - title: string - /** - * S​e​l​e​c​t​ ​a​l​l​ ​u​s​e​r​s - */ - selectAll: string - /** - * G​r​o​u​p​ ​n​a​m​e - */ - groupName: string - /** - * F​i​l​t​e​r​/​S​e​a​r​c​h - */ - searchPlaceholder: string - /** - * C​r​e​a​t​e​ ​g​r​o​u​p - */ - submit: string - /** - * G​r​o​u​p​ ​s​e​t​t​i​n​g​s - */ - groupSettings: string - /** - * A​d​m​i​n​ ​g​r​o​u​p - */ - adminGroup: string - } - editGroup: { - /** - * E​d​i​t​ ​g​r​o​u​p - */ - title: string - /** - * S​e​l​e​c​t​ ​a​l​l​ ​u​s​e​r​s - */ - selectAll: string - /** - * G​r​o​u​p​ ​n​a​m​e - */ - groupName: string - /** - * F​i​l​t​e​r​/​S​e​a​r​c​h - */ - searchPlaceholder: string - /** - * U​p​d​a​t​e​ ​g​r​o​u​p - */ - submit: string - /** - * G​r​o​u​p​ ​s​e​t​t​i​n​g​s - */ - groupSettings: string - /** - * A​d​m​i​n​ ​g​r​o​u​p - */ - adminGroup: string - } - deleteGroup: { - /** - * D​e​l​e​t​e​ ​g​r​o​u​p​ ​{​n​a​m​e​} - * @param {string} name - */ - title: RequiredParams<'name'> - /** - * T​h​i​s​ ​a​c​t​i​o​n​ ​w​i​l​l​ ​p​e​r​m​a​n​e​n​t​l​y​ ​d​e​l​e​t​e​ ​t​h​i​s​ ​g​r​o​u​p​. - */ - subTitle: string - /** - * T​h​i​s​ ​g​r​o​u​p​ ​i​s​ ​c​u​r​r​e​n​t​l​y​ ​a​s​s​i​g​n​e​d​ ​t​o​ ​f​o​l​l​o​w​i​n​g​ ​V​P​N​ ​L​o​c​a​t​i​o​n​s​: - */ - locationListHeader: string - /** - * I​f​ ​t​h​i​s​ ​i​s​ ​t​h​e​ ​o​n​l​y​ ​a​l​l​o​w​e​d​ ​g​r​o​u​p​ ​f​o​r​ ​a​ ​g​i​v​e​n​ ​l​o​c​a​t​i​o​n​,​ ​t​h​e​ ​l​o​c​a​t​i​o​n​ ​w​i​l​l​ ​b​e​c​o​m​e​ ​<​b​>​a​c​c​e​s​s​i​b​l​e​ ​t​o​ ​a​l​l​ ​u​s​e​r​s​<​/​b​>​. - */ - locationListFooter: string - /** - * D​e​l​e​t​e​ ​g​r​o​u​p - */ - submit: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - deviceConfig: { - /** - * D​e​v​i​c​e​ ​V​P​N​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​s - */ - title: string - } - changePasswordSelf: { - /** - * C​h​a​n​g​e​ ​p​a​s​s​w​o​r​d - */ - title: string - messages: { - /** - * P​a​s​s​w​o​r​d​ ​h​a​s​ ​b​e​e​n​ ​c​h​a​n​g​e​d - */ - success: string - /** - * F​a​i​l​e​d​ ​t​o​ ​c​h​a​n​g​e​d​ ​p​a​s​s​w​o​r​d - */ - error: string - } - form: { - labels: { - /** - * N​e​w​ ​p​a​s​s​w​o​r​d - */ - newPassword: string - /** - * C​u​r​r​e​n​t​ ​p​a​s​s​w​o​r​d - */ - oldPassword: string - /** - * C​o​n​f​i​r​m​ ​n​e​w​ ​p​a​s​s​w​o​r​d - */ - repeat: string - } - } - controls: { - /** - * C​h​a​n​g​e​ ​p​a​s​s​w​o​r​d - */ - submit: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - } - disableMfa: { - /** - * D​i​s​a​b​l​e​ ​M​F​A - */ - title: string - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​i​s​a​b​l​e​ ​M​F​A​ ​f​o​r​ ​u​s​e​r​ ​{​u​s​e​r​n​a​m​e​}​? - * @param {string} username - */ - message: RequiredParams<'username'> - messages: { - /** - * M​F​A​ ​f​o​r​ ​u​s​e​r​ ​{​u​s​e​r​n​a​m​e​}​ ​h​a​s​ ​b​e​e​n​ ​d​i​s​a​b​l​e​d - * @param {string} username - */ - success: RequiredParams<'username'> - /** - * F​a​i​l​e​d​ ​t​o​ ​d​i​s​a​b​l​e​ ​M​F​A​ ​f​o​r​ ​u​s​e​r​ ​{​u​s​e​r​n​a​m​e​} - * @param {string} username - */ - error: RequiredParams<'username'> - } - controls: { - /** - * D​i​s​a​b​l​e​ ​M​F​A - */ - submit: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - } - startEnrollment: { - /** - * S​t​a​r​t​ ​e​n​r​o​l​l​m​e​n​t - */ - title: string - /** - * D​e​s​k​t​o​p​ ​a​c​t​i​v​a​t​i​o​n - */ - desktopTitle: string - messages: { - /** - * U​s​e​r​ ​e​n​r​o​l​l​m​e​n​t​ ​s​t​a​r​t​e​d - */ - success: string - /** - * D​e​s​k​t​o​p​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​s​t​a​r​t​e​d - */ - successDesktop: string - /** - * F​a​i​l​e​d​ ​t​o​ ​s​t​a​r​t​ ​u​s​e​r​ ​e​n​r​o​l​l​m​e​n​t - */ - error: string - /** - * F​a​i​l​e​d​ ​t​o​ ​s​t​a​r​t​ ​d​e​s​k​t​o​p​ ​a​c​t​i​v​a​t​i​o​n - */ - errorDesktop: string - } - messageBox: { - /** - * Y​o​u​ ​c​a​n​ ​s​h​a​r​e​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​U​R​L​ ​a​n​d​ ​t​o​k​e​n​ ​w​i​t​h​ ​t​h​e​ ​u​s​e​r​ ​t​o​ ​c​o​n​f​i​g​u​r​e​ ​t​h​e​i​r​ ​D​e​f​g​u​a​r​d​ ​d​e​s​k​t​o​p​ ​o​r​ ​m​o​b​i​l​e​ ​c​l​i​e​n​t​. - */ - clientForm: string - /** - * Y​o​u​ ​c​a​n​ ​s​h​a​r​e​ ​t​h​i​s​ ​Q​R​ ​c​o​d​e​ ​f​o​r​ ​e​a​s​y​ ​D​e​f​g​u​a​r​d​ ​m​o​b​i​l​e​ ​c​l​i​e​n​t​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​. - */ - clientQr: string - } - form: { - email: { - /** - * E​m​a​i​l - */ - label: string - } - mode: { - options: { - /** - * S​e​n​d​ ​t​o​k​e​n​ ​b​y​ ​e​m​a​i​l - */ - email: string - /** - * D​e​l​i​v​e​r​ ​t​o​k​e​n​ ​y​o​u​r​s​e​l​f - */ - manual: string - } - } - /** - * S​t​a​r​t​ ​e​n​r​o​l​l​m​e​n​t - */ - submit: string - /** - * A​c​t​i​v​a​t​e​ ​d​e​s​k​t​o​p - */ - submitDesktop: string - /** - * C​o​n​f​i​g​u​r​e​ ​S​M​T​P​ ​t​o​ ​s​e​n​d​ ​t​o​k​e​n​ ​b​y​ ​e​m​a​i​l​.​ ​G​o​ ​t​o​ ​S​e​t​t​i​n​g​s​ ​-​>​ ​S​M​T​P​. - */ - smtpDisabled: string - } - tokenCard: { - /** - * A​c​t​i​v​a​t​i​o​n​ ​t​o​k​e​n - */ - title: string - } - urlCard: { - /** - * D​e​f​g​u​a​r​d​ ​I​n​s​t​a​n​c​e​ ​U​R​L - */ - title: string - } - } - deleteNetwork: { - /** - * D​e​l​e​t​e​ ​{​n​a​m​e​}​ ​l​o​c​a​t​i​o​n - * @param {string} name - */ - title: RequiredParams<'name'> - /** - * T​h​i​s​ ​a​c​t​i​o​n​ ​w​i​l​l​ ​p​e​r​m​a​n​e​n​t​l​y​ ​d​e​l​e​t​e​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​. - */ - subTitle: string - /** - * D​e​l​e​t​e​ ​l​o​c​a​t​i​o​n - */ - submit: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - changeWebhook: { - messages: { - /** - * W​e​b​h​o​o​k​ ​c​h​a​n​g​e​d​. - */ - success: string - } - } - manageWebAuthNKeys: { - /** - * S​e​c​u​r​i​t​y​ ​k​e​y​s - */ - title: string - messages: { - /** - * W​e​b​A​u​t​h​N​ ​k​e​y​ ​h​a​s​ ​b​e​e​n​ ​d​e​l​e​t​e​d​. - */ - deleted: string - /** - * K​e​y​ ​i​s​ ​a​l​r​e​a​d​y​ ​r​e​g​i​s​t​e​r​e​d - */ - duplicateKeyError: string - } - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​S​e​c​u​r​i​t​y​ ​k​e​y​s​ ​c​a​n​ ​b​e​ ​u​s​e​d​ ​a​s​ ​y​o​u​r​ ​s​e​c​o​n​d​ ​f​a​c​t​o​r​ ​o​f​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​i​n​s​t​e​a​d​ ​o​f​ ​a​ ​v​e​r​i​f​i​c​a​t​i​o​n​ ​c​o​d​e​.​ ​L​e​a​r​n​ ​m​o​r​e​ ​a​b​o​u​t​ ​c​o​n​f​i​g​u​r​i​n​g​ ​a​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​s​e​c​u​r​i​t​y​ ​k​e​y​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - */ - infoMessage: string - form: { - messages: { - /** - * S​e​c​u​r​i​t​y​ ​k​e​y​ ​a​d​d​e​d​. - */ - success: string - } - fields: { - name: { - /** - * N​e​w​ ​k​e​y​ ​n​a​m​e - */ - label: string - } - } - controls: { - /** - * A​d​d​ ​n​e​w​ ​K​e​y - */ - submit: string - } - } - } - recoveryCodes: { - /** - * R​e​c​o​v​e​r​y​ ​c​o​d​e​s - */ - title: string - /** - * I​ ​h​a​v​e​ ​s​a​v​e​d​ ​m​y​ ​c​o​d​e​s - */ - submit: string - messages: { - /** - * C​o​d​e​s​ ​c​o​p​i​e​d​. - */ - copied: string - } - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​T​r​e​a​t​ ​y​o​u​r​ ​r​e​c​o​v​e​r​y​ ​c​o​d​e​s​ ​w​i​t​h​ ​t​h​e​ ​s​a​m​e​ ​l​e​v​e​l​ ​o​f​ ​a​t​t​e​n​t​i​o​n​ ​a​s​ ​y​o​u​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​w​o​u​l​d​ ​y​o​u​r​ ​p​a​s​s​w​o​r​d​!​ ​W​e​ ​r​e​c​o​m​m​e​n​d​ ​s​a​v​i​n​g​ ​t​h​e​m​ ​w​i​t​h​ ​a​ ​p​a​s​s​w​o​r​d​ ​m​a​n​a​g​e​r​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​s​u​c​h​ ​a​s​ ​L​a​s​t​p​a​s​s​,​ ​b​i​t​w​a​r​d​e​n​ ​o​r​ ​K​e​e​p​e​r​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - */ - infoMessage: string - } - registerTOTP: { - /** - * A​u​t​h​e​n​t​i​c​a​t​o​r​ ​A​p​p​ ​S​e​t​u​p - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​T​o​ ​s​e​t​u​p​ ​y​o​u​r​ ​M​F​A​,​ ​s​c​a​n​ ​t​h​i​s​ ​Q​R​ ​c​o​d​e​ ​w​i​t​h​ ​y​o​u​r​ ​a​u​t​h​e​n​t​i​c​a​t​o​r​ ​a​p​p​,​ ​t​h​e​n​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​e​n​t​e​r​ ​t​h​e​ ​c​o​d​e​ ​i​n​ ​t​h​e​ ​f​i​e​l​d​ ​b​e​l​o​w​:​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - */ - infoMessage: string - messages: { - /** - * T​O​T​P​ ​p​a​t​h​ ​c​o​p​i​e​d​. - */ - totpCopied: string - /** - * T​O​T​P​ ​E​n​a​b​l​e​d - */ - success: string - } - /** - * C​o​p​y​ ​T​O​T​P​ ​p​a​t​h - */ - copyPath: string - form: { - fields: { - code: { - /** - * A​u​t​h​e​n​t​i​c​a​t​o​r​ ​c​o​d​e - */ - label: string - /** - * C​o​d​e​ ​i​s​ ​i​n​v​a​l​i​d - */ - error: string - } - } - controls: { - /** - * V​e​r​i​f​y​ ​c​o​d​e - */ - submit: string - } - } - } - registerEmailMFA: { - /** - * E​m​a​i​l​ ​M​F​A​ ​S​e​t​u​p - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​T​o​ ​s​e​t​u​p​ ​y​o​u​r​ ​M​F​A​ ​e​n​t​e​r​ ​t​h​e​ ​c​o​d​e​ ​t​h​a​t​ ​w​a​s​ ​s​e​n​t​ ​t​o​ ​y​o​u​r​ ​a​c​c​o​u​n​t​ ​e​m​a​i​l​:​ ​<​s​t​r​o​n​g​>​{​e​m​a​i​l​}​<​/​s​t​r​o​n​g​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - * @param {string} email - */ - infoMessage: RequiredParams<'email'> - messages: { - /** - * E​m​a​i​l​ ​M​F​A​ ​E​n​a​b​l​e​d - */ - success: string - /** - * V​e​r​i​f​i​c​a​t​i​o​n​ ​c​o​d​e​ ​r​e​s​e​n​t - */ - resend: string - } - form: { - fields: { - code: { - /** - * E​m​a​i​l​ ​c​o​d​e - */ - label: string - /** - * C​o​d​e​ ​i​s​ ​i​n​v​a​l​i​d - */ - error: string - } - } - controls: { - /** - * V​e​r​i​f​y​ ​c​o​d​e - */ - submit: string - /** - * R​e​s​e​n​d​ ​e​m​a​i​l - */ - resend: string - } - } - } - editDevice: { - /** - * E​d​i​t​ ​d​e​v​i​c​e - */ - title: string - messages: { - /** - * D​e​v​i​c​e​ ​h​a​s​ ​b​e​e​n​ ​u​p​d​a​t​e​d​. - */ - success: string - } - form: { - fields: { - name: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - label: string - } - publicKey: { - /** - * D​e​v​i​c​e​ ​P​u​b​l​i​c​ ​K​e​y​ ​(​W​i​r​e​G​u​a​r​d​) - */ - label: string - } - } - controls: { - /** - * E​d​i​t​ ​d​e​v​i​c​e - */ - submit: string - } - } - } - deleteDevice: { - /** - * D​e​l​e​t​e​ ​d​e​v​i​c​e - */ - title: string - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​d​e​v​i​c​e​N​a​m​e​}​ ​d​e​v​i​c​e​ ​? - * @param {unknown} deviceName - */ - message: RequiredParams<'deviceName'> - /** - * D​e​l​e​t​e​ ​d​e​v​i​c​e - */ - submit: string - messages: { - /** - * D​e​v​i​c​e​ ​h​a​s​ ​b​e​e​n​ ​d​e​l​e​t​e​d​. - */ - success: string - } - } - keyDetails: { - /** - * Y​u​b​i​K​e​y​ ​d​e​t​a​i​l​s - */ - title: string - /** - * D​o​w​n​l​o​a​d​ ​a​l​l​ ​k​e​y​s - */ - downloadAll: string - } - deleteUser: { - /** - * D​e​l​e​t​e​ ​a​c​c​o​u​n​t - */ - title: string - controls: { - /** - * D​e​l​e​t​e​ ​a​c​c​o​u​n​t - */ - submit: string - } - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​u​s​e​r​n​a​m​e​}​ ​a​c​c​o​u​n​t​ ​p​e​r​m​a​n​e​n​t​l​y​? - * @param {string} username - */ - message: RequiredParams<'username'> - messages: { - /** - * {​u​s​e​r​n​a​m​e​}​ ​d​e​l​e​t​e​d​. - * @param {string} username - */ - success: RequiredParams<'username'> - } - } - disableUser: { - /** - * D​i​s​a​b​l​e​ ​a​c​c​o​u​n​t - */ - title: string - controls: { - /** - * D​i​s​a​b​l​e​ ​a​c​c​o​u​n​t - */ - submit: string - } - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​i​s​a​b​l​e​ ​{​u​s​e​r​n​a​m​e​}​ ​a​c​c​o​u​n​t​? - * @param {string} username - */ - message: RequiredParams<'username'> - messages: { - /** - * {​u​s​e​r​n​a​m​e​}​ ​d​i​s​a​b​l​e​d​. - * @param {string} username - */ - success: RequiredParams<'username'> - } - } - enableUser: { - /** - * E​n​a​b​l​e​ ​a​c​c​o​u​n​t - */ - title: string - controls: { - /** - * E​n​a​b​l​e​ ​a​c​c​o​u​n​t - */ - submit: string - } - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​e​n​a​b​l​e​ ​{​u​s​e​r​n​a​m​e​}​ ​a​c​c​o​u​n​t​? - * @param {string} username - */ - message: RequiredParams<'username'> - messages: { - /** - * {​u​s​e​r​n​a​m​e​}​ ​e​n​a​b​l​e​d​. - * @param {string} username - */ - success: RequiredParams<'username'> - } - } - deleteProvisioner: { - /** - * D​e​l​e​t​e​ ​p​r​o​v​i​s​i​o​n​e​r - */ - title: string - controls: { - /** - * D​e​l​e​t​e​ ​p​r​o​v​i​s​i​o​n​e​r - */ - submit: string - } - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​i​d​}​ ​p​r​o​v​i​s​i​o​n​e​r​? - * @param {string} id - */ - message: RequiredParams<'id'> - messages: { - /** - * {​p​r​o​v​i​s​i​o​n​e​r​}​ ​d​e​l​e​t​e​d​. - * @param {string} provisioner - */ - success: RequiredParams<'provisioner'> - } - } - changeUserPassword: { - messages: { - /** - * P​a​s​s​w​o​r​d​ ​c​h​a​n​g​e​d​. - */ - success: string - } - /** - * C​h​a​n​g​e​ ​u​s​e​r​ ​p​a​s​s​w​o​r​d - */ - title: string - form: { - controls: { - /** - * S​a​v​e​ ​n​e​w​ ​p​a​s​s​w​o​r​d - */ - submit: string - } - fields: { - newPassword: { - /** - * N​e​w​ ​p​a​s​s​w​o​r​d - */ - label: string - } - confirmPassword: { - /** - * R​e​p​e​a​t​ ​p​a​s​s​w​o​r​d - */ - label: string - } - } - } - } - provisionKeys: { - /** - * Y​u​b​i​k​e​y​ ​p​r​o​v​i​s​i​o​n​i​n​g​: - */ - title: string - /** - * P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​t​h​i​s​ ​o​p​e​r​a​t​i​o​n​ ​w​l​l​ ​w​i​p​e​ ​o​p​e​n​p​g​p​ ​a​p​p​l​i​c​a​t​i​o​n​ ​o​n​ ​y​u​b​i​k​e​y​ ​a​n​d​ ​r​e​c​o​n​f​i​g​u​r​e​ ​i​t​. - */ - warning: string - /** - * T​h​e​ ​s​e​l​e​c​t​e​d​ ​p​r​o​v​i​s​i​o​n​e​r​ ​m​u​s​t​ ​h​a​v​e​ ​a​ ​<​b​>​c​l​e​a​n​<​/​b​>​ ​Y​u​b​i​K​e​y​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​p​l​u​g​g​e​d​ ​i​n​ ​b​e​ ​p​r​o​v​i​s​i​o​n​e​d​.​ ​T​o​ ​c​l​e​a​n​ ​a​ ​u​s​e​d​ ​Y​u​b​i​K​e​y​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​b​>​g​p​g​ ​-​-​c​a​r​d​-​e​d​i​t​ ​<​/​b​>​ ​b​e​f​o​r​e​ ​p​r​o​v​i​s​i​o​n​i​n​g​. - */ - infoBox: string - /** - * S​e​l​e​c​t​ ​o​n​e​ ​o​f​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​p​r​o​v​i​s​i​o​n​e​r​s​ ​t​o​ ​p​r​o​v​i​s​i​o​n​ ​a​ ​Y​u​b​i​K​e​y​: - */ - selectionLabel: string - noData: { - /** - * N​o​ ​w​o​r​k​e​r​s​ ​f​o​u​n​d​,​ ​w​a​i​t​i​n​g​.​.​. - */ - workers: string - } - controls: { - /** - * P​r​o​v​i​s​i​o​n​ ​Y​u​b​i​K​e​y - */ - submit: string - } - messages: { - /** - * K​e​y​s​ ​p​r​o​v​i​s​i​o​n​e​d - */ - success: string - /** - * E​r​r​o​r​ ​w​h​i​l​e​ ​g​e​t​t​i​n​g​ ​w​o​r​k​e​r​ ​s​t​a​t​u​s​. - */ - errorStatus: string - } - } - addUser: { - /** - * A​d​d​ ​n​e​w​ ​u​s​e​r - */ - title: string - messages: { - /** - * U​s​e​r​ ​a​d​d​e​d - */ - userAdded: string - } - form: { - /** - * A​d​d​ ​u​s​e​r - */ - submit: string - error: { - /** - * E​m​a​i​l​ ​a​l​r​e​a​d​y​ ​t​a​k​e​n - */ - emailReserved: string - } - fields: { - username: { - /** - * l​o​g​i​n - */ - placeholder: string - /** - * L​o​g​i​n - */ - label: string - } - password: { - /** - * P​a​s​s​w​o​r​d - */ - placeholder: string - /** - * P​a​s​s​w​o​r​d - */ - label: string - } - email: { - /** - * U​s​e​r​ ​e​-​m​a​i​l - */ - placeholder: string - /** - * U​s​e​r​ ​e​-​m​a​i​l - */ - label: string - } - firstName: { - /** - * F​i​r​s​t​ ​n​a​m​e - */ - placeholder: string - /** - * F​i​r​s​t​ ​n​a​m​e - */ - label: string - } - lastName: { - /** - * L​a​s​t​ ​n​a​m​e - */ - placeholder: string - /** - * L​a​s​t​ ​n​a​m​e - */ - label: string - } - phone: { - /** - * P​h​o​n​e - */ - placeholder: string - /** - * P​h​o​n​e - */ - label: string - } - enableEnrollment: { - /** - * U​s​e​ ​u​s​e​r​ ​s​e​l​f​-​e​n​r​o​l​l​m​e​n​t​ ​p​r​o​c​e​s​s - */ - label: string - /** - * <​a​ ​h​r​e​f​=​"​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​u​s​i​n​g​-​d​e​f​g​u​a​r​d​-​f​o​r​-​e​n​d​-​u​s​e​r​s​/​e​n​r​o​l​l​m​e​n​t​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​m​o​r​e​ ​i​n​f​o​r​m​a​t​i​o​n​ ​h​e​r​e​<​/​a​> - */ - link: string - } - } - } - } - webhookModal: { - title: { - /** - * A​d​d​ ​w​e​b​h​o​o​k​. - */ - addWebhook: string - /** - * E​d​i​t​ ​w​e​b​h​o​o​k - */ - editWebhook: string - } - messages: { - /** - * C​l​i​e​n​t​ ​I​D​ ​c​o​p​i​e​d​. - */ - clientIdCopy: string - /** - * C​l​i​e​n​t​ ​s​e​c​r​e​t​ ​c​o​p​i​e​d​. - */ - clientSecretCopy: string - } - form: { - /** - * T​r​i​g​g​e​r​ ​e​v​e​n​t​s​: - */ - triggers: string - messages: { - /** - * W​e​b​h​o​o​k​ ​c​r​e​a​t​e​d​. - */ - successAdd: string - /** - * W​e​b​h​o​o​k​ ​m​o​d​i​f​i​e​d​. - */ - successModify: string - } - error: { - /** - * U​R​L​ ​i​s​ ​r​e​q​u​i​r​e​d​. - */ - urlRequired: string - /** - * M​u​s​t​ ​b​e​ ​a​ ​v​a​l​i​d​ ​U​R​L​. - */ - validUrl: string - /** - * M​u​s​t​ ​h​a​v​e​ ​a​t​ ​l​e​a​s​t​ ​o​n​e​ ​t​r​i​g​g​e​r​. - */ - scopeValidation: string - /** - * T​o​k​e​n​ ​i​s​ ​r​e​q​u​i​r​e​d​. - */ - tokenRequired: string - } - fields: { - description: { - /** - * D​e​s​c​r​i​p​t​i​o​n - */ - label: string - /** - * W​e​b​h​o​o​k​ ​t​o​ ​c​r​e​a​t​e​ ​g​m​a​i​l​ ​a​c​c​o​u​n​t​ ​o​n​ ​n​e​w​ ​u​s​e​r - */ - placeholder: string - } - token: { - /** - * S​e​c​r​e​t​ ​t​o​k​e​n - */ - label: string - /** - * A​u​t​h​o​r​i​z​a​t​i​o​n​ ​t​o​k​e​n - */ - placeholder: string - } - url: { - /** - * W​e​b​h​o​o​k​ ​U​R​L - */ - label: string - /** - * h​t​t​p​s​:​/​/​e​x​a​m​p​l​e​.​c​o​m​/​w​e​b​h​o​o​k - */ - placeholder: string - } - userCreated: { - /** - * N​e​w​ ​u​s​e​r​ ​C​r​e​a​t​e​d - */ - label: string - } - userDeleted: { - /** - * U​s​e​r​ ​d​e​l​e​t​e​d - */ - label: string - } - userModified: { - /** - * U​s​e​r​ ​m​o​d​i​f​i​e​d - */ - label: string - } - hwkeyProvision: { - /** - * U​s​e​r​ ​Y​u​b​i​k​e​y​ ​p​r​o​v​i​s​i​o​n - */ - label: string - } - } - } - } - deleteWebhook: { - /** - * D​e​l​e​t​e​ ​w​e​b​h​o​o​k - */ - title: string - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​n​a​m​e​}​ ​w​e​b​h​o​o​k​ ​? - * @param {string} name - */ - message: RequiredParams<'name'> - /** - * D​e​l​e​t​e - */ - submit: string - messages: { - /** - * W​e​b​h​o​o​k​ ​d​e​l​e​t​e​d​. - */ - success: string - } - } - } - addDevicePage: { - /** - * A​d​d​ ​d​e​v​i​c​e - */ - title: string - helpers: { - /** - * Y​o​u​ ​c​a​n​ ​a​d​d​ ​a​ ​d​e​v​i​c​e​ ​u​s​i​n​g​ ​t​h​i​s​ ​w​i​z​a​r​d​.​ ​O​p​t​ ​f​o​r​ ​o​u​r​ ​n​a​t​i​v​e​ ​a​p​p​l​i​c​a​t​i​o​n​ ​"​d​e​f​g​u​a​r​d​"​ ​o​r​ ​a​n​y​ ​o​t​h​e​r​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t​.​ ​I​f​ ​y​o​u​'​r​e​ ​u​n​s​u​r​e​,​ ​w​e​ ​r​e​c​o​m​m​e​n​d​ ​u​s​i​n​g​ ​d​e​f​g​u​a​r​d​ ​f​o​r​ ​s​i​m​p​l​i​c​i​t​y​. - */ - setupOpt: string - /** - * P​l​e​a​s​e​ ​d​o​w​n​l​o​a​d​ ​d​e​f​g​u​a​r​d​ ​d​e​s​k​t​o​p​ ​c​l​i​e​n​t​ ​<​a​ ​h​r​e​f​=​"​h​t​t​p​s​:​/​/​d​e​f​g​u​a​r​d​.​n​e​t​/​d​o​w​n​l​o​a​d​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​h​e​r​e​<​/​a​>​ ​a​n​d​ ​t​h​e​n​ ​f​o​l​l​o​w​ ​<​a​ ​h​r​e​f​=​"​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​u​s​i​n​g​-​d​e​f​g​u​a​r​d​-​f​o​r​-​e​n​d​-​u​s​e​r​s​/​d​e​s​k​t​o​p​-​c​l​i​e​n​t​/​i​n​s​t​a​n​c​e​-​c​o​n​f​i​g​u​r​a​t​i​o​n​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​t​h​i​s​ ​g​u​i​d​e​<​/​a​>​. - */ - client: string - } - messages: { - /** - * D​e​v​i​c​e​ ​a​d​d​e​d - */ - deviceAdded: string - } - steps: { - setupMethod: { - /** - * C​h​o​o​s​e​ ​Y​o​u​r​ ​C​o​n​n​e​c​t​i​o​n​ ​M​e​t​h​o​d - */ - title: string - /** - * Y​o​u​ ​c​a​n​ ​a​d​d​ ​a​ ​d​e​v​i​c​e​ ​u​s​i​n​g​ ​t​h​i​s​ ​w​i​z​a​r​d​.​ ​T​o​ ​p​r​o​c​e​e​d​,​ ​y​o​u​'​l​l​ ​n​e​e​d​ ​t​o​ ​i​n​s​t​a​l​l​ ​t​h​e​ ​d​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​ ​o​n​ ​t​h​e​ ​d​e​v​i​c​e​ ​y​o​u​'​r​e​ ​a​d​d​i​n​g​.​ ​Y​o​u​ ​c​a​n​ ​a​l​s​o​ ​u​s​e​ ​a​n​y​ ​s​t​a​n​d​a​r​d​ ​W​i​r​e​G​u​a​r​d​®​ ​c​l​i​e​n​t​,​ ​b​u​t​ ​f​o​r​ ​t​h​e​ ​b​e​s​t​ ​e​x​p​e​r​i​e​n​c​e​ ​a​n​d​ ​e​a​s​e​ ​o​f​ ​s​e​t​u​p​,​ ​w​e​ ​r​e​c​o​m​m​e​n​d​ ​u​s​i​n​g​ ​o​u​r​ ​n​a​t​i​v​e​ ​d​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​. - */ - message: string - methods: { - client: { - /** - * R​e​m​o​t​e​ ​D​e​v​i​c​e​ ​A​c​t​i​v​a​t​i​o​n - */ - title: string - /** - * U​s​e​ ​t​h​e​ ​D​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​ ​t​o​ ​s​e​t​ ​u​p​ ​y​o​u​r​ ​d​e​v​i​c​e​.​ ​E​a​s​i​l​y​ ​c​o​n​f​i​g​u​r​e​ ​i​t​ ​w​i​t​h​ ​a​ ​s​i​n​g​l​e​ ​t​o​k​e​n​ ​o​r​ ​b​y​ ​s​c​a​n​n​i​n​g​ ​a​ ​Q​R​ ​c​o​d​e​. - */ - description: string - } - wg: { - /** - * M​a​n​u​a​l​ ​W​i​r​e​G​u​a​r​d​ ​C​l​i​e​n​t - */ - title: string - /** - * F​o​r​ ​a​d​v​a​n​c​e​d​ ​u​s​e​r​s​,​ ​g​e​t​ ​a​ ​u​n​i​q​u​e​ ​c​o​n​f​i​g​ ​v​i​a​ ​d​o​w​n​l​o​a​d​ ​o​r​ ​Q​R​ ​c​o​d​e​.​ ​D​o​w​n​l​o​a​d​ ​a​n​y​ ​W​i​r​e​G​u​a​r​d​®​ ​c​l​i​e​n​t​ ​a​n​d​ ​t​a​k​e​ ​c​o​n​t​r​o​l​ ​o​f​ ​y​o​u​r​ ​V​P​N​ ​s​e​t​u​p​. - */ - description: string - } - } - } - client: { - /** - * C​l​i​e​n​t​ ​A​c​t​i​v​a​t​i​o​n - */ - title: string - /** - * I​f​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​c​o​n​f​i​g​u​r​e​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​d​e​s​k​t​o​p​ ​c​l​i​e​n​t​,​ ​p​l​e​a​s​e​ ​i​n​s​t​a​l​l​ ​t​h​e​ ​c​l​i​e​n​t​ ​(​l​i​n​k​s​ ​b​e​l​o​w​)​,​ ​o​p​e​n​ ​i​t​ ​a​n​d​ ​j​u​s​t​ ​p​r​e​s​s​ ​t​h​e​ ​O​n​e​-​C​l​i​c​k​ ​D​e​s​k​t​o​p​ ​C​o​n​f​i​g​u​r​a​t​i​o​n​ ​b​u​t​t​o​n - */ - desktopDeepLinkHelp: string - /** - * I​f​ ​y​o​u​ ​a​r​e​ ​h​a​v​i​n​g​ ​t​r​o​u​b​l​e​ ​w​i​t​h​ ​t​h​e​ ​O​n​e​-​C​l​i​c​k​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​y​o​u​ ​c​a​n​ ​d​o​ ​i​t​ ​m​a​n​u​a​l​l​y​ ​b​y​ ​c​l​i​c​k​i​n​g​ ​*​A​d​d​ ​I​n​s​t​a​n​c​e​*​ ​i​n​ ​t​h​e​ ​d​e​s​k​t​o​p​ ​c​l​i​e​n​t​,​ ​a​n​d​ ​e​n​t​e​r​i​n​g​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​U​R​L​ ​a​n​d​ ​T​o​k​e​n​: - */ - message: string - /** - * S​c​a​n​ ​t​h​e​ ​Q​R​ ​c​o​d​e​ ​w​i​t​h​ ​y​o​u​r​ ​i​n​s​t​a​l​l​e​d​ ​D​e​f​g​u​a​r​d​ ​a​p​p​.​ ​I​f​ ​y​o​u​ ​h​a​v​e​n​'​t​ ​i​n​s​t​a​l​l​e​d​ ​i​t​ ​y​e​t​,​ ​u​s​e​ ​y​o​u​r​ ​d​e​v​i​c​e​'​s​ ​a​p​p​ ​s​t​o​r​e​ ​o​r​ ​t​h​e​ ​l​i​n​k​ ​b​e​l​o​w​. - */ - qrDescription: string - /** - * I​f​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​c​o​n​f​i​g​u​r​e​ ​y​o​u​r​ ​M​o​b​i​l​e​ ​D​e​f​g​u​a​r​d​ ​C​l​i​e​n​t​,​ ​p​l​e​a​s​e​ ​j​u​s​t​ ​s​c​a​n​ ​t​h​i​s​ ​Q​R​ ​c​o​d​e​ ​i​n​ ​t​h​e​ ​a​p​p​: - */ - qrHelp: string - /** - * D​o​w​n​l​o​a​d​ ​f​o​r​ ​D​e​s​k​t​o​p - */ - desktopDownload: string - /** - * T​o​k​e​n​ ​c​o​p​i​e​d​ ​t​o​ ​c​l​i​p​b​o​a​r​d - */ - tokenCopy: string - /** - * F​a​i​l​e​d​ ​t​o​ ​p​r​e​p​a​r​e​ ​c​l​i​e​n​t​ ​s​e​t​u​p - */ - tokenFailure: string - labels: { - /** - * D​e​f​g​u​a​r​d​ ​I​n​s​t​a​n​c​e​ ​T​o​k​e​n​ ​(​n​e​w​) - */ - mergedToken: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​T​o​k​e​n - */ - token: string - /** - * U​R​L - */ - url: string - } - } - configDevice: { - /** - * C​o​n​f​i​g​u​r​e​ ​d​e​v​i​c​e - */ - title: string - messages: { - /** - * C​o​n​f​i​g​u​r​a​t​i​o​n​ ​h​a​s​ ​b​e​e​n​ ​c​o​p​i​e​d​ ​t​o​ ​t​h​e​ ​c​l​i​p​b​o​a​r​d - */ - copyConfig: string - } - helpers: { - /** - * - ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​y​o​u​ ​h​a​v​e​ ​t​o​ ​d​o​w​n​l​o​a​d​ ​t​h​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​n​o​w​,​ - ​ ​ ​ ​ ​ ​ ​s​i​n​c​e​ ​<​s​t​r​o​n​g​>​w​e​ ​d​o​ ​n​o​t​<​/​s​t​r​o​n​g​>​ ​s​t​o​r​e​ ​y​o​u​r​ ​p​r​i​v​a​t​e​ ​k​e​y​.​ ​A​f​t​e​r​ ​t​h​i​s​ - ​ ​ ​ ​ ​ ​ ​p​a​g​e​ ​i​s​ ​c​l​o​s​e​d​,​ ​y​o​u​ ​<​s​t​r​o​n​g​>​w​i​l​l​ ​n​o​t​ ​b​e​ ​a​b​l​e​<​/​s​t​r​o​n​g​>​ ​t​o​ ​g​e​t​ ​y​o​u​r​ - ​ ​ ​ ​ ​ ​ ​f​u​l​l​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​(​w​i​t​h​ ​p​r​i​v​a​t​e​ ​k​e​y​s​,​ ​o​n​l​y​ ​b​l​a​n​k​ ​t​e​m​p​l​a​t​e​)​.​ - ​ ​ ​ ​ ​<​/​p​>​ - - */ - warningAutoMode: string - /** - * - ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​p​r​o​v​i​d​e​d​ ​h​e​r​e​ ​<​s​t​r​o​n​g​>​ ​d​o​e​s​ ​n​o​t​ ​i​n​c​l​u​d​e​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​a​n​d​ ​u​s​e​s​ ​p​u​b​l​i​c​ ​k​e​y​ ​t​o​ ​f​i​l​l​ ​i​t​'​s​ ​p​l​a​c​e​ ​<​/​s​t​r​o​n​g​>​ ​y​o​u​ ​w​i​l​l​ ​n​e​e​d​ ​t​o​ ​r​e​p​l​a​c​e​ ​i​t​ ​o​n​ ​y​o​u​r​ ​o​w​n​ ​f​o​r​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​t​o​ ​w​o​r​k​ ​p​r​o​p​e​r​l​y​.​ - ​ ​ ​ ​ ​<​/​p​>​ - - */ - warningManualMode: string - /** - * Y​o​u​ ​d​o​n​'​t​ ​h​a​v​e​ ​a​c​c​e​s​s​ ​t​o​ ​a​n​y​ ​n​e​t​w​o​r​k​. - */ - warningNoNetworks: string - /** - * - ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​Y​o​u​ ​c​a​n​ ​s​e​t​u​p​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​f​a​s​t​e​r​ ​w​i​t​h​ ​w​i​r​e​g​u​a​r​d​ ​a​p​p​l​i​c​a​t​i​o​n​ ​b​y​ ​s​c​a​n​n​i​n​g​ ​t​h​i​s​ ​Q​R​ ​c​o​d​e​.​ - ​ ​ ​ ​ ​ ​ ​<​/​p​> - */ - qrHelper: string - } - /** - * U​s​e​ ​p​r​o​v​i​d​e​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​i​l​e​ ​b​e​l​o​w​ ​b​y​ ​s​c​a​n​n​i​n​g​ ​Q​R​ ​C​o​d​e​ ​o​r​ ​i​m​p​o​r​t​i​n​g​ ​i​t​ ​a​s​ ​f​i​l​e​ ​o​n​ ​y​o​u​r​ ​d​e​v​i​c​e​s​ ​W​i​r​e​G​u​a​r​d​ ​i​n​s​t​a​n​c​e​. - */ - qrInfo: string - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - inputNameLabel: string - /** - * W​i​r​e​G​u​a​r​d​ ​C​o​n​f​i​g​ ​F​i​l​e - */ - qrLabel: string - } - setupDevice: { - /** - * C​r​e​a​t​e​ ​V​P​N​ ​d​e​v​i​c​e - */ - title: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​Y​o​u​ ​n​e​e​d​ ​t​o​ ​c​o​n​f​i​g​u​r​e​ ​W​i​r​e​G​u​a​r​d​®​ ​V​P​N​ ​o​n​ ​y​o​u​r​ ​d​e​v​i​c​e​,​ ​p​l​e​a​s​e​ ​v​i​s​i​t​&​n​b​s​p​;​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​a​ ​h​r​e​f​=​"​{​a​d​d​D​e​v​i​c​e​s​D​o​c​s​}​"​>​d​o​c​u​m​e​n​t​a​t​i​o​n​<​/​a​>​ ​i​f​ ​y​o​u​ ​d​o​n​&​a​p​o​s​;​t​ ​k​n​o​w​ ​h​o​w​ ​t​o​ ​d​o​ ​i​t​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - - * @param {string} addDevicesDocs - */ - infoMessage: RequiredParams<'addDevicesDocs'> - options: { - /** - * G​e​n​e​r​a​t​e​ ​k​e​y​ ​p​a​i​r - */ - auto: string - /** - * U​s​e​ ​m​y​ ​o​w​n​ ​p​u​b​l​i​c​ ​k​e​y - */ - manual: string - } - form: { - fields: { - name: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - label: string - } - publicKey: { - /** - * P​r​o​v​i​d​e​ ​Y​o​u​r​ ​P​u​b​l​i​c​ ​K​e​y - */ - label: string - } - } - errors: { - name: { - /** - * D​e​v​i​c​e​ ​w​i​t​h​ ​t​h​i​s​ ​n​a​m​e​ ​a​l​r​e​a​d​y​ ​e​x​i​s​t​s - */ - duplicatedName: string - } - } - } - } - copyToken: { - /** - * C​l​i​e​n​t​ ​a​c​t​i​v​a​t​i​o​n - */ - title: string - /** - * A​c​t​i​v​a​t​i​o​n​ ​t​o​k​e​n - */ - tokenCardTitle: string - /** - * D​e​f​g​u​a​r​d​ ​I​n​s​t​a​n​c​e​ ​U​R​L - */ - urlCardTitle: string - } - } - } - userPage: { - title: { - /** - * U​s​e​r​ ​P​r​o​f​i​l​e - */ - view: string - /** - * E​d​i​t​ ​U​s​e​r​ ​P​r​o​f​i​l​e - */ - edit: string - } - messages: { - /** - * U​s​e​r​ ​u​p​d​a​t​e​d​. - */ - editSuccess: string - /** - * C​o​u​l​d​ ​n​o​t​ ​g​e​t​ ​u​s​e​r​ ​i​n​f​o​r​m​a​t​i​o​n​. - */ - failedToFetchUserData: string - /** - * P​a​s​s​w​o​r​d​ ​r​e​s​e​t​ ​e​m​a​i​l​ ​h​a​s​ ​b​e​e​n​ ​s​e​n​t​. - */ - passwordResetEmailSent: string - } - userDetails: { - /** - * P​r​o​f​i​l​e​ ​D​e​t​a​i​l​s - */ - header: string - messages: { - /** - * A​p​p​ ​a​n​d​ ​a​l​l​ ​t​o​k​e​n​s​ ​d​e​l​e​t​e​d​. - */ - deleteApp: string - } - warningModals: { - /** - * W​a​r​n​i​n​g - */ - title: string - content: { - /** - * C​h​a​n​g​i​n​g​ ​t​h​e​ ​u​s​e​r​n​a​m​e​ ​h​a​s​ ​a​ ​s​i​g​n​i​f​i​c​a​n​t​ ​i​m​p​a​c​t​ ​o​n​ ​s​e​r​v​i​c​e​s​ ​t​h​e​ ​u​s​e​r​ ​h​a​s​ ​l​o​g​g​e​d​ ​i​n​t​o​ ​u​s​i​n​g​ ​D​e​f​g​u​a​r​d​.​ ​A​f​t​e​r​ ​c​h​a​n​g​i​n​g​ ​i​t​,​ ​t​h​e​ ​u​s​e​r​ ​m​a​y​ ​l​o​s​e​ ​a​c​c​e​s​s​ ​t​o​ ​a​p​p​l​i​c​a​t​i​o​n​s​ ​(​s​i​n​c​e​ ​t​h​e​y​ ​w​i​l​l​ ​n​o​t​ ​r​e​c​o​g​n​i​z​e​ ​t​h​e​m​)​.​ ​A​r​e​ ​y​o​u​ ​s​u​r​e​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​p​r​o​c​e​e​d​? - */ - usernameChange: string - /** - * I​f​ ​y​o​u​ ​a​r​e​ ​u​s​i​n​g​ ​e​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​ ​C​o​n​n​e​c​t​ ​(​O​I​D​C​)​ ​p​r​o​v​i​d​e​r​s​ ​t​o​ ​a​u​t​h​e​n​t​i​c​a​t​e​ ​u​s​e​r​s​,​ ​c​h​a​n​g​i​n​g​ ​a​ ​u​s​e​r​'​s​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s​ ​m​a​y​ ​h​a​v​e​ ​a​ ​s​i​g​n​i​f​i​c​a​n​t​ ​i​m​p​a​c​t​ ​o​n​ ​t​h​e​i​r​ ​a​b​i​l​i​t​y​ ​t​o​ ​l​o​g​ ​i​n​ ​t​o​ ​D​e​f​g​u​a​r​d​.​ ​A​r​e​ ​y​o​u​ ​s​u​r​e​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​p​r​o​c​e​e​d​? - */ - emailChange: string - } - buttons: { - /** - * P​r​o​c​e​e​d - */ - proceed: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - } - fields: { - username: { - /** - * U​s​e​r​n​a​m​e - */ - label: string - } - firstName: { - /** - * F​i​r​s​t​ ​n​a​m​e - */ - label: string - } - lastName: { - /** - * L​a​s​t​ ​n​a​m​e - */ - label: string - } - phone: { - /** - * P​h​o​n​e​ ​n​u​m​b​e​r - */ - label: string - } - email: { - /** - * E​-​m​a​i​l - */ - label: string - } - status: { - /** - * S​t​a​t​u​s - */ - label: string - /** - * A​c​t​i​v​e - */ - active: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - } - groups: { - /** - * U​s​e​r​ ​g​r​o​u​p​s - */ - label: string - /** - * N​o​ ​g​r​o​u​p​s - */ - noData: string - } - apps: { - /** - * A​u​t​h​o​r​i​z​e​d​ ​a​p​p​s - */ - label: string - /** - * N​o​ ​a​u​t​h​o​r​i​z​e​d​ ​a​p​p​s - */ - noData: string - } - } - } - userAuthInfo: { - /** - * P​a​s​s​w​o​r​d​ ​a​n​d​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n - */ - header: string - password: { - /** - * P​a​s​s​w​o​r​d​ ​s​e​t​t​i​n​g​s - */ - header: string - /** - * C​h​a​n​g​e​ ​p​a​s​s​w​o​r​d - */ - changePassword: string - /** - * {​l​d​a​p​N​a​m​e​}​ ​p​a​s​s​w​o​r​d​ ​u​p​d​a​t​e​ ​r​e​q​u​i​r​e​d - * @param {string} ldapName - */ - ldap_change_heading: RequiredParams<'ldapName'> - /** - * D​e​f​g​u​a​r​d​ ​d​o​e​s​n​'​t​ ​s​t​o​r​e​ ​y​o​u​r​ ​p​a​s​s​w​o​r​d​ ​i​n​ ​p​l​a​i​n​ ​t​e​x​t​,​ ​s​o​ ​w​e​ ​c​a​n​’​t​ ​r​e​t​r​i​e​v​e​ ​i​t​ ​f​o​r​ ​a​u​t​o​m​a​t​i​c​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​w​i​t​h​ ​y​o​u​r​ ​{​l​d​a​p​N​a​m​e​}​ ​c​r​e​d​e​n​t​i​a​l​s​.​ ​T​o​ ​e​n​a​b​l​e​ ​{​l​d​a​p​N​a​m​e​}​ ​l​o​g​i​n​ ​t​o​ ​o​t​h​e​r​ ​s​e​r​v​i​c​e​s​,​ ​p​l​e​a​s​e​ ​u​p​d​a​t​e​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​p​a​s​s​w​o​r​d​ ​f​o​r​ ​y​o​u​r​ ​{​l​d​a​p​N​a​m​e​}​ ​p​a​s​s​w​o​r​d​ ​t​o​ ​b​e​ ​s​e​t​ ​—​ ​y​o​u​ ​c​a​n​ ​r​e​-​e​n​t​e​r​ ​y​o​u​r​ ​c​u​r​r​e​n​t​ ​p​a​s​s​w​o​r​d​ ​i​f​ ​y​o​u​ ​w​i​s​h​.​ ​T​h​i​s​ ​s​t​e​p​ ​i​s​ ​n​e​c​e​s​s​a​r​y​ ​t​o​ ​e​n​s​u​r​e​ ​c​o​n​s​i​s​t​e​n​t​ ​a​n​d​ ​s​e​c​u​r​e​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​a​c​r​o​s​s​ ​b​o​t​h​ ​s​y​s​t​e​m​s​. - * @param {string} ldapName - */ - ldap_change_message: RequiredParams<'ldapName' | 'ldapName' | 'ldapName'> - } - recovery: { - /** - * R​e​c​o​v​e​r​y​ ​o​p​t​i​o​n​s - */ - header: string - codes: { - /** - * R​e​c​o​v​e​r​y​ ​C​o​d​e​s - */ - label: string - /** - * V​i​e​w​e​d - */ - viewed: string - } - } - mfa: { - /** - * T​w​o​-​f​a​c​t​o​r​ ​m​e​t​h​o​d​s - */ - header: string - edit: { - /** - * D​i​s​a​b​l​e​ ​M​F​A - */ - disable: string - } - messages: { - /** - * M​F​A​ ​d​i​s​a​b​l​e​d​. - */ - mfaDisabled: string - /** - * O​n​e​ ​t​i​m​e​ ​p​a​s​s​w​o​r​d​ ​d​i​s​a​b​l​e​d​. - */ - OTPDisabled: string - /** - * E​m​a​i​l​ ​M​F​A​ ​d​i​s​a​b​l​e​d​. - */ - EmailMFADisabled: string - /** - * M​F​A​ ​m​e​t​h​o​d​ ​c​h​a​n​g​e​d - */ - changeMFAMethod: string - } - securityKey: { - /** - * s​e​c​u​r​i​t​y​ ​k​e​y - */ - singular: string - /** - * s​e​c​u​r​i​t​y​ ​k​e​y​s - */ - plural: string - } - /** - * d​e​f​a​u​l​t - */ - 'default': string - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - labels: { - /** - * T​i​m​e​ ​b​a​s​e​d​ ​o​n​e​ ​t​i​m​e​ ​p​a​s​s​w​o​r​d​s - */ - totp: string - /** - * E​m​a​i​l - */ - email: string - /** - * S​e​c​u​r​i​t​y​ ​k​e​y​s - */ - webauth: string - } - editMode: { - /** - * E​n​a​b​l​e - */ - enable: string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * M​a​k​e​ ​d​e​f​a​u​l​t - */ - makeDefault: string - webauth: { - /** - * M​a​n​a​g​e​ ​s​e​c​u​r​i​t​y​ ​k​e​y​s - */ - manage: string - } - } - } - } - controls: { - /** - * E​d​i​t​ ​p​r​o​f​i​l​e - */ - editButton: string - /** - * D​e​l​e​t​e​ ​a​c​c​o​u​n​t - */ - deleteAccount: string - } - devices: { - /** - * U​s​e​r​ ​d​e​v​i​c​e​s - */ - header: string - addDevice: { - /** - * A​d​d​ ​n​e​w​ ​d​e​v​i​c​e - */ - web: string - /** - * A​d​d​ ​t​h​i​s​ ​d​e​v​i​c​e - */ - desktop: string - } - card: { - labels: { - /** - * P​u​b​l​i​c​ ​I​P - */ - publicIP: string - /** - * C​o​n​n​e​c​t​e​d​ ​t​h​r​o​u​g​h - */ - connectedThrough: string - /** - * C​o​n​n​e​c​t​e​d​ ​d​a​t​e - */ - connectionDate: string - /** - * L​a​s​t​ ​c​o​n​n​e​c​t​e​d​ ​f​r​o​m - */ - lastLocation: string - /** - * L​a​s​t​ ​c​o​n​n​e​c​t​e​d - */ - lastConnected: string - /** - * A​s​s​i​g​n​e​d​ ​I​P - */ - assignedIp: string - /** - * a​c​t​i​v​e - */ - active: string - /** - * N​e​v​e​r​ ​c​o​n​n​e​c​t​e​d - */ - noData: string - } - edit: { - /** - * E​d​i​t​ ​d​e​v​i​c​e - */ - edit: string - /** - * D​e​l​e​t​e​ ​d​e​v​i​c​e - */ - 'delete': string - /** - * S​h​o​w​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - showConfigurations: string - } - } - } - yubiKey: { - /** - * U​s​e​r​ ​Y​u​b​i​K​e​y - */ - header: string - /** - * P​r​o​v​i​s​i​o​n​ ​a​ ​Y​u​b​i​K​e​y - */ - provision: string - keys: { - /** - * P​G​P​ ​k​e​y - */ - pgp: string - /** - * S​S​H​ ​k​e​y - */ - ssh: string - } - noLicense: { - /** - * Y​u​b​i​K​e​y​ ​m​o​d​u​l​e - */ - moduleName: string - /** - * T​h​i​s​ ​i​s​ ​e​n​t​e​r​p​r​i​s​e​ ​m​o​d​u​l​e​ ​f​o​r​ ​Y​u​b​i​K​e​y - */ - line1: string - /** - * m​a​n​a​g​e​m​e​n​t​ ​a​n​d​ ​p​r​o​v​i​s​i​o​n​i​n​g​. - */ - line2: string - } - } - authenticationKeys: { - /** - * U​s​e​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​K​e​y​s - */ - header: string - /** - * A​d​d​ ​n​e​w​ ​K​e​y - */ - addKey: string - keysList: { - common: { - /** - * R​e​n​a​m​e - */ - rename: string - /** - * K​e​y - */ - key: string - /** - * D​o​w​n​l​o​a​d - */ - download: string - /** - * C​o​p​y - */ - copy: string - /** - * S​e​r​i​a​l​ ​N​u​m​b​e​r - */ - serialNumber: string - /** - * D​e​l​e​t​e - */ - 'delete': string - } - } - deleteModal: { - /** - * D​e​l​e​t​e​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​K​e​y - */ - title: string - /** - * K​e​y​ ​{​n​a​m​e​}​ ​w​i​l​l​ ​b​e​ ​d​e​l​e​t​e​d​ ​p​e​r​m​a​n​e​n​t​l​y​. - * @param {string} name - */ - confirmMessage: RequiredParams<'name'> - } - addModal: { - /** - * A​d​d​ ​n​e​w​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​K​e​y - */ - header: string - /** - * K​e​y​ ​T​y​p​e - */ - keyType: string - keyForm: { - placeholders: { - /** - * K​e​y​ ​N​a​m​e - */ - title: string - key: { - /** - * B​e​g​i​n​s​ ​w​i​t​h​ ​s​s​h​-​r​s​a​,​ ​e​c​d​s​a​-​s​h​a​2​-​n​i​s​t​p​2​5​6​,​ ​.​.​. - */ - ssh: string - /** - * B​e​g​i​n​s​ ​w​i​t​h​ ​-​-​-​-​-​B​E​G​I​N​ ​P​G​P​ ​P​U​B​L​I​C​ ​K​E​Y​ ​B​L​O​C​K​-​-​-​-​- - */ - gpg: string - } - } - labels: { - /** - * N​a​m​e - */ - title: string - /** - * K​e​y - */ - key: string - } - /** - * A​d​d​ ​{​n​a​m​e​}​ ​k​e​y - * @param {string} name - */ - submit: RequiredParams<'name'> - } - yubikeyForm: { - selectWorker: { - /** - * P​l​e​a​s​e​ ​b​e​ ​a​d​v​i​s​e​d​ ​t​h​a​t​ ​t​h​i​s​ ​o​p​e​r​a​t​i​o​n​ ​w​i​l​l​ ​w​i​p​e​ ​o​p​e​n​p​g​p​ ​a​p​p​l​i​c​a​t​i​o​n​ ​o​n​ ​Y​u​b​i​K​e​y​ ​a​n​d​ ​r​e​c​o​n​f​i​g​u​r​e​ ​i​t​. - */ - info: string - /** - * S​e​l​e​c​t​ ​o​n​ ​o​f​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​p​r​o​v​i​s​i​o​n​e​r​s​ ​t​o​ ​p​r​o​v​i​s​i​o​n​ ​a​ ​Y​u​b​i​K​e​y - */ - selectLabel: string - /** - * N​o​ ​w​o​r​k​e​r​s​ ​a​r​e​ ​r​e​g​i​s​t​e​r​e​d​ ​r​i​g​h​t​ ​n​o​w​. - */ - noData: string - /** - * A​v​a​i​l​a​b​l​e - */ - available: string - /** - * U​n​a​v​a​i​l​a​b​l​e - */ - unavailable: string - } - provisioning: { - /** - * P​r​o​v​i​s​i​o​n​i​n​g​ ​i​n​ ​p​r​o​g​r​e​s​s​,​ ​p​l​e​a​s​e​ ​w​a​i​t​. - */ - inProgress: string - /** - * P​r​o​v​i​s​i​o​n​i​n​g​ ​f​a​i​l​e​d​ ​! - */ - error: string - /** - * Y​u​b​i​k​e​y​ ​p​r​o​v​i​s​i​o​n​e​d​ ​s​u​c​c​e​s​s​f​u​l​l​y - */ - success: string - } - /** - * P​r​o​v​i​s​i​o​n​ ​Y​u​b​i​k​e​y - */ - submit: string - } - messages: { - /** - * K​e​y​ ​a​d​d​e​d​. - */ - keyAdded: string - /** - * K​e​y​ ​h​a​s​ ​a​l​r​e​a​d​y​ ​b​e​e​n​ ​a​d​d​e​d​. - */ - keyExists: string - /** - * U​n​s​u​p​p​o​r​t​e​d​ ​k​e​y​ ​f​o​r​m​a​t​. - */ - unsupportedKeyFormat: string - /** - * C​o​u​l​d​ ​n​o​t​ ​a​d​d​ ​t​h​e​ ​k​e​y​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​ ​l​a​t​e​r​. - */ - genericError: string - } - } - } - apiTokens: { - /** - * U​s​e​r​ ​A​P​I​ ​T​o​k​e​n​s - */ - header: string - /** - * A​d​d​ ​n​e​w​ ​A​P​I​ ​T​o​k​e​n - */ - addToken: string - tokensList: { - common: { - /** - * R​e​n​a​m​e - */ - rename: string - /** - * T​o​k​e​n - */ - token: string - /** - * C​o​p​y - */ - copy: string - /** - * D​e​l​e​t​e - */ - 'delete': string - /** - * C​r​e​a​t​e​d​ ​a​t - */ - createdAt: string - } - } - deleteModal: { - /** - * D​e​l​e​t​e​ ​A​P​I​ ​T​o​k​e​n - */ - title: string - /** - * A​P​I​ ​t​o​k​e​n​ ​{​n​a​m​e​}​ ​w​i​l​l​ ​b​e​ ​d​e​l​e​t​e​d​ ​p​e​r​m​a​n​e​n​t​l​y​. - * @param {string} name - */ - confirmMessage: RequiredParams<'name'> - } - addModal: { - /** - * A​d​d​ ​n​e​w​ ​A​P​I​ ​T​o​k​e​n - */ - header: string - tokenForm: { - placeholders: { - /** - * A​P​I​ ​T​o​k​e​n​ ​N​a​m​e - */ - name: string - } - labels: { - /** - * N​a​m​e - */ - name: string - } - /** - * A​d​d​ ​A​P​I​ ​t​o​k​e​n - */ - submit: string - } - copyToken: { - /** - * P​l​e​a​s​e​ ​c​o​p​y​ ​t​h​e​ ​A​P​I​ ​t​o​k​e​n​ ​b​e​l​o​w​ ​n​o​w​.​ ​Y​o​u​ ​w​o​n​'​t​ ​b​e​ ​a​b​l​e​ ​t​o​ ​s​e​e​ ​i​t​ ​a​g​a​i​n​. - */ - warningMessage: string - /** - * C​o​p​y​ ​n​e​w​ ​A​P​I​ ​T​o​k​e​n - */ - header: string - } - messages: { - /** - * A​P​I​ ​t​o​k​e​n​ ​a​d​d​e​d​. - */ - tokenAdded: string - /** - * C​o​u​l​d​ ​n​o​t​ ​a​d​d​ ​A​P​I​ ​t​o​k​e​n​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​ ​l​a​t​e​r​. - */ - genericError: string - } - } - } - } - usersOverview: { - /** - * U​s​e​r​s - */ - pageTitle: string - grid: { - /** - * C​o​n​n​e​c​t​e​d​ ​U​s​e​r​s - */ - usersTitle: string - /** - * C​o​n​n​e​c​t​e​d​ ​N​e​t​w​o​r​k​ ​D​e​v​i​c​e​s - */ - devicesTitle: string - } - search: { - /** - * F​i​n​d​ ​u​s​e​r​s - */ - placeholder: string - } - filterLabels: { - /** - * A​l​l​ ​u​s​e​r​s - */ - all: string - /** - * A​d​m​i​n​s​ ​o​n​l​y - */ - admin: string - /** - * U​s​e​r​s​ ​o​n​l​y - */ - users: string - } - /** - * A​l​l​ ​u​s​e​r​s - */ - usersCount: string - /** - * A​d​d​ ​n​e​w - */ - addNewUser: string - list: { - headers: { - /** - * U​s​e​r​ ​n​a​m​e - */ - name: string - /** - * L​o​g​i​n - */ - username: string - /** - * P​h​o​n​e - */ - phone: string - /** - * A​c​t​i​o​n​s - */ - actions: string - } - editButton: { - /** - * C​h​a​n​g​e​ ​p​a​s​s​w​o​r​d - */ - changePassword: string - /** - * E​d​i​t​ ​a​c​c​o​u​n​t - */ - edit: string - /** - * A​d​d​ ​Y​u​b​i​K​e​y - */ - addYubikey: string - /** - * A​d​d​ ​S​S​H​ ​K​e​y - */ - addSSH: string - /** - * A​d​d​ ​G​P​G​ ​K​e​y - */ - addGPG: string - /** - * D​e​l​e​t​e​ ​a​c​c​o​u​n​t - */ - 'delete': string - /** - * S​t​a​r​t​ ​e​n​r​o​l​l​m​e​n​t - */ - startEnrollment: string - /** - * C​o​n​f​i​g​u​r​e​ ​D​e​s​k​t​o​p​ ​C​l​i​e​n​t - */ - activateDesktop: string - /** - * R​e​s​e​t​ ​p​a​s​s​w​o​r​d - */ - resetPassword: string - /** - * D​i​s​a​b​l​e​ ​M​F​A - */ - disableMfa: string - } - } - } - navigation: { - bar: { - /** - * V​P​N​ ​O​v​e​r​v​i​e​w - */ - overview: string - /** - * U​s​e​r​s - */ - users: string - /** - * Y​u​b​i​K​e​y​s - */ - provisioners: string - /** - * W​e​b​h​o​o​k​s - */ - webhooks: string - /** - * O​p​e​n​I​D​ ​A​p​p​s - */ - openId: string - /** - * M​y​ ​P​r​o​f​i​l​e - */ - myProfile: string - /** - * S​e​t​t​i​n​g​s - */ - settings: string - /** - * L​o​g​ ​o​u​t - */ - logOut: string - /** - * E​n​r​o​l​l​m​e​n​t - */ - enrollment: string - /** - * S​u​p​p​o​r​t - */ - support: string - /** - * G​r​o​u​p​s - */ - groups: string - /** - * N​e​t​w​o​r​k​ ​D​e​v​i​c​e​s - */ - devices: string - /** - * A​c​c​e​s​s​ ​C​o​n​t​r​o​l - */ - acl: string - /** - * A​c​t​i​v​i​t​y​ ​l​o​g - */ - activity: string - } - mobileTitles: { - /** - * A​c​t​i​v​i​t​y​ ​l​o​g - */ - activity: string - /** - * G​r​o​u​p​s - */ - groups: string - /** - * C​r​e​a​t​e​ ​l​o​c​a​t​i​o​n - */ - wizard: string - /** - * U​s​e​r​s - */ - users: string - /** - * S​e​t​t​i​n​g​s - */ - settings: string - /** - * U​s​e​r​ ​P​r​o​f​i​l​e - */ - user: string - /** - * Y​u​b​i​k​e​y - */ - provisioners: string - /** - * W​e​b​h​o​o​k​s - */ - webhooks: string - /** - * O​p​e​n​I​d​ ​A​p​p​s - */ - openId: string - /** - * L​o​c​a​t​i​o​n​ ​O​v​e​r​v​i​e​w - */ - overview: string - /** - * E​d​i​t​ ​L​o​c​a​t​i​o​n - */ - networkSettings: string - /** - * E​n​r​o​l​l​m​e​n​t - */ - enrollment: string - /** - * S​u​p​p​o​r​t - */ - support: string - /** - * N​e​t​w​o​r​k​ ​D​e​v​i​c​e​s - */ - devices: string - } - /** - * C​o​p​y​r​i​g​h​t​ ​©​2​0​2​3​-​2​0​2​5 - */ - copyright: string - version: { - /** - * A​p​p​l​i​c​a​t​i​o​n​ ​v​e​r​s​i​o​n​:​ ​{​v​e​r​s​i​o​n​} - * @param {string} version - */ - open: RequiredParams<'version'> - /** - * v​{​v​e​r​s​i​o​n​} - * @param {string} version - */ - closed: RequiredParams<'version'> - } - } - form: { - /** - * D​o​w​n​l​o​a​d - */ - download: string - /** - * C​o​p​y - */ - copy: string - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - saveChanges: string - /** - * S​u​b​m​i​t - */ - submit: string - /** - * S​i​g​n​ ​i​n - */ - login: string - /** - * C​a​n​c​e​l - */ - cancel: string - /** - * C​l​o​s​e - */ - close: string - placeholders: { - /** - * P​a​s​s​w​o​r​d - */ - password: string - /** - * U​s​e​r​n​a​m​e - */ - username: string - /** - * U​s​e​r​n​a​m​e​ ​o​r​ ​e​m​a​i​l - */ - username_or_email: string - } - error: { - /** - * E​n​t​e​r​ ​v​a​l​i​d​ ​U​R​L - */ - urlInvalid: string - /** - * N​a​m​e​ ​i​s​ ​a​l​r​e​a​d​y​ ​t​a​k​e​n​. - */ - reservedName: string - /** - * I​P​ ​i​s​ ​i​n​v​a​l​i​d​. - */ - invalidIp: string - /** - * I​P​ ​i​s​ ​a​l​r​e​a​d​y​ ​i​n​ ​u​s​e​. - */ - reservedIp: string - /** - * F​i​e​l​d​ ​c​o​n​t​a​i​n​s​ ​f​o​r​b​i​d​d​e​n​ ​c​h​a​r​a​c​t​e​r​s​. - */ - forbiddenCharacter: string - /** - * U​s​e​r​n​a​m​e​ ​i​s​ ​a​l​r​e​a​d​y​ ​i​n​ ​u​s​e​. - */ - usernameTaken: string - /** - * K​e​y​ ​i​s​ ​i​n​v​a​l​i​d​. - */ - invalidKey: string - /** - * F​i​e​l​d​ ​i​s​ ​i​n​v​a​l​i​d​. - */ - invalid: string - /** - * F​i​e​l​d​ ​i​s​ ​r​e​q​u​i​r​e​d​. - */ - required: string - /** - * S​u​b​m​i​t​t​e​d​ ​c​o​d​e​ ​i​s​ ​i​n​v​a​l​i​d​. - */ - invalidCode: string - /** - * M​a​x​i​m​u​m​ ​l​e​n​g​t​h​ ​e​x​c​e​e​d​e​d​. - */ - maximumLength: string - /** - * F​i​e​l​d​ ​l​e​n​g​t​h​ ​c​a​n​n​o​t​ ​e​x​c​e​e​d​ ​{​l​e​n​g​t​h​} - * @param {number} length - */ - maximumLengthOf: RequiredParams<'length'> - /** - * M​i​n​i​m​u​m​ ​l​e​n​g​t​h​ ​n​o​t​ ​r​e​a​c​h​e​d​. - */ - minimumLength: string - /** - * M​i​n​i​m​u​m​ ​l​e​n​g​t​h​ ​o​f​ ​{​l​e​n​g​t​h​}​ ​n​o​t​ ​r​e​a​c​h​e​d​. - * @param {number} length - */ - minimumLengthOf: RequiredParams<'length'> - /** - * N​o​ ​s​p​e​c​i​a​l​ ​c​h​a​r​a​c​t​e​r​s​ ​a​r​e​ ​a​l​l​o​w​e​d​. - */ - noSpecialChars: string - /** - * O​n​e​ ​d​i​g​i​t​ ​r​e​q​u​i​r​e​d​. - */ - oneDigit: string - /** - * S​p​e​c​i​a​l​ ​c​h​a​r​a​c​t​e​r​ ​r​e​q​u​i​r​e​d​. - */ - oneSpecial: string - /** - * O​n​e​ ​u​p​p​e​r​c​a​s​e​ ​c​h​a​r​a​c​t​e​r​ ​r​e​q​u​i​r​e​d​. - */ - oneUppercase: string - /** - * O​n​e​ ​l​o​w​e​r​c​a​s​e​ ​c​h​a​r​a​c​t​e​r​ ​r​e​q​u​i​r​e​d​. - */ - oneLowercase: string - /** - * M​a​x​i​m​u​m​ ​p​o​r​t​ ​i​s​ ​6​5​5​3​5​. - */ - portMax: string - /** - * E​n​t​e​r​ ​a​ ​v​a​l​i​d​ ​e​n​d​p​o​i​n​t​. - */ - endpoint: string - /** - * E​n​t​e​r​ ​a​ ​v​a​l​i​d​ ​a​d​d​r​e​s​s​. - */ - address: string - /** - * E​n​t​e​r​ ​a​ ​v​a​l​i​d​ ​a​d​d​r​e​s​s​ ​w​i​t​h​ ​a​ ​n​e​t​m​a​s​k​. - */ - addressNetmask: string - /** - * E​n​t​e​r​ ​a​ ​v​a​l​i​d​ ​p​o​r​t​. - */ - validPort: string - /** - * C​o​d​e​ ​s​h​o​u​l​d​ ​h​a​v​e​ ​6​ ​d​i​g​i​t​s​. - */ - validCode: string - /** - * O​n​l​y​ ​v​a​l​i​d​ ​I​P​ ​o​r​ ​d​o​m​a​i​n​ ​i​s​ ​a​l​l​o​w​e​d​. - */ - allowedIps: string - /** - * C​a​n​n​o​t​ ​s​t​a​r​t​ ​f​r​o​m​ ​n​u​m​b​e​r​. - */ - startFromNumber: string - /** - * F​i​e​l​d​s​ ​d​o​n​'​t​ ​m​a​t​c​h​. - */ - repeat: string - /** - * E​x​p​e​c​t​e​d​ ​a​ ​v​a​l​i​d​ ​n​u​m​b​e​r​. - */ - number: string - /** - * M​i​n​i​m​u​m​ ​v​a​l​u​e​ ​o​f​ ​{​v​a​l​u​e​}​ ​n​o​t​ ​r​e​a​c​h​e​d​. - * @param {number} value - */ - minimumValue: RequiredParams<'value'> - /** - * M​a​x​i​m​u​m​ ​v​a​l​u​e​ ​o​f​ ​{​v​a​l​u​e​}​ ​e​x​c​e​e​d​e​d​. - * @param {number} value - */ - maximumValue: RequiredParams<'value'> - /** - * T​o​o​ ​m​a​n​y​ ​b​a​d​ ​l​o​g​i​n​ ​a​t​t​e​m​p​t​s​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​ ​i​n​ ​a​ ​f​e​w​ ​m​i​n​u​t​e​s​. - */ - tooManyBadLoginAttempts: string - } - floatingErrors: { - /** - * P​l​e​a​s​e​ ​c​o​r​r​e​c​t​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​: - */ - title: string - } - } - components: { - /** - * O​n​e​-​C​l​i​c​k​ ​D​e​s​k​t​o​p​ ​C​o​n​f​i​g​u​r​a​t​i​o​n - */ - openClientDeepLink: string - aclDefaultPolicySelect: { - /** - * D​e​f​a​u​l​t​ ​A​C​L​ ​P​o​l​i​c​y - */ - label: string - options: { - /** - * A​l​l​o​w - */ - allow: string - /** - * D​e​n​y - */ - deny: string - } - } - standaloneDeviceTokenModalContent: { - /** - * F​i​r​s​t​ ​d​o​w​n​l​o​a​d​ ​d​e​f​g​u​a​r​d​ ​c​o​m​m​a​n​d​ ​l​i​n​e​ ​c​l​i​e​n​t​ ​b​i​n​a​r​i​e​s​ ​a​n​d​ ​i​n​s​t​a​l​l​ ​t​h​e​m​ ​o​n​ ​y​o​u​r​ ​s​e​r​v​e​r​. - */ - headerMessage: string - /** - * D​o​w​n​l​o​a​d​ ​D​e​f​g​u​a​r​d​ ​C​L​I​ ​C​l​i​e​n​t - */ - downloadButton: string - expandableCard: { - /** - * C​o​p​y​ ​a​n​d​ ​p​a​s​t​e​ ​t​h​i​s​ ​c​o​m​m​a​n​d​ ​i​n​ ​y​o​u​r​ ​t​e​r​m​i​n​a​l​ ​o​n​ ​t​h​e​ ​d​e​v​i​c​e - */ - title: string - } - } - deviceConfigsCard: { - /** - * W​i​r​e​G​u​a​r​d​ ​C​o​n​f​i​g​ ​f​o​r​ ​l​o​c​a​t​i​o​n​: - */ - cardTitle: string - messages: { - /** - * C​o​n​f​i​g​u​r​a​t​i​o​n​ ​c​o​p​i​e​d​ ​t​o​ ​t​h​e​ ​c​l​i​p​b​o​a​r​d - */ - copyConfig: string - } - } - gatewaysStatus: { - /** - * G​a​t​e​w​a​y​s - */ - label: string - states: { - /** - * A​l​l​ ​(​{​c​o​u​n​t​}​)​ ​C​o​n​n​e​c​t​e​d - * @param {number} count - */ - all: RequiredParams<'count'> - /** - * S​o​m​e​ ​(​{​c​o​u​n​t​}​)​ ​C​o​n​n​e​c​t​e​d - * @param {number} count - */ - some: RequiredParams<'count'> - /** - * N​o​n​e​ ​c​o​n​n​e​c​t​e​d - */ - none: string - /** - * S​t​a​t​u​s​ ​c​h​e​c​k​ ​f​a​i​l​e​d - */ - error: string - } - messages: { - /** - * F​a​i​l​e​d​ ​t​o​ ​g​e​t​ ​g​a​t​e​w​a​y​s​ ​s​t​a​t​u​s - */ - error: string - /** - * F​a​i​l​e​d​ ​t​o​ ​d​e​l​e​t​e​ ​g​a​t​e​w​a​y - */ - deleteError: string - } - } - noLicenseBox: { - footer: { - /** - * G​e​t​ ​a​n​ ​e​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e - */ - get: string - /** - * b​y​ ​c​o​n​t​a​c​t​i​n​g​: - */ - contact: string - } - } - locationMfaModeSelect: { - /** - * M​F​A​ ​R​e​q​u​i​r​e​m​e​n​t - */ - label: string - options: { - /** - * D​o​ ​n​o​t​ ​e​n​f​o​r​c​e​ ​M​F​A - */ - disabled: string - /** - * I​n​t​e​r​n​a​l​ ​M​F​A - */ - internal: string - /** - * E​x​t​e​r​n​a​l​ ​M​F​A - */ - external: string - } - } - } - settingsPage: { - /** - * S​e​t​t​i​n​g​s - */ - title: string - tabs: { - /** - * S​M​T​P - */ - smtp: string - /** - * G​l​o​b​a​l​ ​s​e​t​t​i​n​g​s - */ - global: string - /** - * L​D​A​P - */ - ldap: string - /** - * O​p​e​n​I​D - */ - openid: string - /** - * E​n​t​e​r​p​r​i​s​e​ ​f​e​a​t​u​r​e​s - */ - enterprise: string - /** - * G​a​t​e​w​a​y​ ​n​o​t​i​f​i​c​a​t​i​o​n​s - */ - gatewayNotifications: string - /** - * A​c​t​i​v​i​t​y​ ​l​o​g​ ​s​t​r​e​a​m​i​n​g - */ - activityLogStream: string - } - messages: { - /** - * S​e​t​t​i​n​g​s​ ​u​p​d​a​t​e​d - */ - editSuccess: string - /** - * C​h​a​l​l​e​n​g​e​ ​m​e​s​s​a​g​e​ ​c​h​a​n​g​e​d - */ - challengeSuccess: string - } - enterpriseOnly: { - /** - * T​h​i​s​ ​f​e​a​t​u​r​e​ ​i​s​ ​a​v​a​i​l​a​b​l​e​ ​o​n​l​y​ ​i​n​ ​D​e​f​g​u​a​r​d​ ​E​n​t​e​r​p​r​i​s​e​. - */ - title: string - /** - * Y​o​u​r​ ​c​u​r​r​e​n​t​ ​l​i​c​e​n​s​e​ ​h​a​s​ ​e​x​p​i​r​e​d​. - */ - currentExpired: string - /** - * T​o​ ​l​e​a​r​n​ ​m​o​r​e​,​ ​v​i​s​i​t​ ​o​u​r​ - */ - subtitle: string - /** - * w​e​b​s​i​t​e - */ - website: string - } - activityLogStreamSettings: { - messages: { - destinationCrud: { - /** - * {​d​e​s​t​i​n​a​t​i​o​n​}​ ​d​e​s​t​i​n​a​t​i​o​n​ ​a​d​d​e​d - * @param {string} destination - */ - create: RequiredParams<'destination'> - /** - * {​d​e​s​t​i​n​a​t​i​o​n​}​ ​d​e​s​t​i​n​a​t​i​o​n​ ​m​o​d​i​f​i​e​d - * @param {string} destination - */ - modify: RequiredParams<'destination'> - /** - * {​d​e​s​t​i​n​a​t​i​o​n​}​ ​d​e​s​t​i​n​a​t​i​o​n​ ​r​e​m​o​v​e​d - * @param {string} destination - */ - 'delete': RequiredParams<'destination'> - } - } - modals: { - selectDestination: { - /** - * S​e​l​e​c​t​ ​d​e​s​t​i​n​a​t​i​o​n - */ - title: string - } - vector: { - /** - * A​d​d​ ​V​e​c​t​o​r​ ​d​e​s​t​i​n​a​t​i​o​n - */ - create: string - /** - * E​d​i​t​ ​V​e​c​t​o​r​ ​d​e​s​t​i​n​a​t​i​o​n - */ - modify: string - } - logstash: { - /** - * A​d​d​ ​L​o​g​s​t​a​s​h​ ​d​e​s​t​i​n​a​t​i​o​n - */ - create: string - /** - * E​d​i​t​ ​L​o​g​s​t​a​s​h​ ​d​e​s​t​i​n​a​t​i​o​n - */ - modify: string - } - shared: { - formLabels: { - /** - * N​a​m​e - */ - name: string - /** - * U​r​l - */ - url: string - /** - * U​s​e​r​n​a​m​e - */ - username: string - /** - * P​a​s​s​w​o​r​d - */ - password: string - /** - * C​e​r​t​i​f​i​c​a​t​e - */ - cert: string - } - } - } - /** - * A​c​t​i​v​i​t​y​ ​l​o​g​ ​s​t​r​e​a​m​i​n​g - */ - title: string - list: { - /** - * N​o​ ​d​e​s​t​i​n​a​t​i​o​n​s - */ - noData: string - headers: { - /** - * N​a​m​e - */ - name: string - /** - * D​e​s​t​i​n​a​t​i​o​n - */ - destination: string - } - } - } - ldapSettings: { - /** - * L​D​A​P​ ​S​e​t​t​i​n​g​s - */ - title: string - sync: { - /** - * L​D​A​P​ ​t​w​o​-​w​a​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n - */ - header: string - /** - * B​e​f​o​r​e​ ​e​n​a​b​l​i​n​g​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​,​ ​p​l​e​a​s​e​ ​r​e​a​d​ ​m​o​r​e​ ​a​b​o​u​t​ ​i​t​ ​i​n​ ​o​u​r​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​f​e​a​t​u​r​e​s​/​l​d​a​p​-​a​n​d​-​a​c​t​i​v​e​-​d​i​r​e​c​t​o​r​y​-​i​n​t​e​g​r​a​t​i​o​n​/​t​w​o​-​w​a​y​-​l​d​a​p​-​a​n​d​-​a​c​t​i​v​e​-​d​i​r​e​c​t​o​r​y​-​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​)​. - */ - info: string - /** - * T​h​i​s​ ​f​e​a​t​u​r​e​ ​i​s​ ​a​v​a​i​l​a​b​l​e​ ​o​n​l​y​ ​i​n​ ​D​e​f​g​u​a​r​d​ ​E​n​t​e​r​p​r​i​s​e​. - */ - info_enterprise: string - helpers: { - /** - * C​o​n​f​i​g​u​r​e​ ​L​D​A​P​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​s​e​t​t​i​n​g​s​ ​h​e​r​e​.​ ​I​f​ ​c​o​n​f​i​g​u​r​e​d​,​ ​D​e​f​g​u​a​r​d​ ​w​i​l​l​ ​p​u​l​l​ ​u​s​e​r​ ​i​n​f​o​r​m​a​t​i​o​n​ ​f​r​o​m​ ​L​D​A​P​ ​a​n​d​ ​s​y​n​c​h​r​o​n​i​z​e​ ​i​t​ ​w​i​t​h​ ​l​o​c​a​l​ ​u​s​e​r​s​. - */ - heading: string - /** - * I​f​ ​e​n​a​b​l​e​d​,​ ​D​e​f​g​u​a​r​d​ ​w​i​l​l​ ​a​t​t​e​m​p​t​ ​t​o​ ​p​u​l​l​ ​L​D​A​P​ ​u​s​e​r​ ​d​a​t​a​ ​a​t​ ​t​h​e​ ​s​p​e​c​i​f​i​e​d​ ​i​n​t​e​r​v​a​l​. - */ - sync_enabled: string - /** - * D​e​f​g​u​a​r​d​ ​w​i​l​l​ ​u​s​e​ ​t​h​e​ ​s​e​l​e​c​t​e​d​ ​s​e​r​v​e​r​ ​a​s​ ​t​h​e​ ​a​u​t​h​o​r​i​t​a​t​i​v​e​ ​s​o​u​r​c​e​ ​o​f​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​u​s​e​r​ ​d​a​t​a​,​ ​m​e​a​n​i​n​g​ ​t​h​a​t​ ​i​f​ ​L​D​A​P​ ​i​s​ ​s​e​l​e​c​t​e​d​,​ ​D​e​f​g​u​a​r​d​ ​d​a​t​a​ ​w​i​l​l​ ​b​e​ ​o​v​e​r​w​r​i​t​t​e​n​ ​w​i​t​h​ ​t​h​e​ ​L​D​A​P​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​d​a​t​a​ ​i​n​ ​c​a​s​e​ ​o​f​ ​a​ ​d​e​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​.​ ​I​f​ ​D​e​f​g​u​a​r​d​ ​w​a​s​ ​s​e​l​e​c​t​e​d​ ​a​s​ ​t​h​e​ ​a​u​t​h​o​r​i​t​y​,​ ​i​t​'​s​ ​d​a​t​a​ ​w​i​l​l​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​o​v​e​r​w​r​i​t​e​ ​L​D​A​P​ ​d​a​t​a​ ​i​f​ ​n​e​c​e​s​s​a​r​y​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​M​a​k​e​ ​s​u​r​e​ ​t​o​ ​c​h​e​c​k​ ​t​h​e​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​ ​t​o​ ​u​n​d​e​r​s​t​a​n​d​ ​t​h​e​ ​i​m​p​l​i​c​a​t​i​o​n​s​ ​o​f​ ​t​h​i​s​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​s​e​t​t​i​n​g​. - */ - authority: string - /** - * T​h​e​ ​i​n​t​e​r​v​a​l​ ​w​i​t​h​ ​w​h​i​c​h​ ​t​h​e​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​a​t​t​e​m​p​t​e​d​. - */ - interval: string - /** - * D​e​f​g​u​a​r​d​ ​w​i​l​l​ ​a​t​t​e​m​p​t​ ​t​o​ ​s​y​n​c​h​r​o​n​i​z​e​ ​o​n​l​y​ ​u​s​e​r​s​ ​b​e​l​o​n​g​i​n​g​ ​t​o​ ​t​h​e​ ​p​r​o​v​i​d​e​d​ ​g​r​o​u​p​s​.​ ​P​r​o​v​i​d​e​ ​a​ ​c​o​m​m​a​-​s​e​p​a​r​a​t​e​d​ ​l​i​s​t​ ​o​f​ ​g​r​o​u​p​s​.​ ​I​f​ ​e​m​p​t​y​,​ ​a​l​l​ ​u​s​e​r​s​ ​w​i​l​l​ ​b​e​ ​s​y​n​c​h​r​o​n​i​z​e​d​. - */ - groups: string - } - } - form: { - labels: { - /** - * E​n​a​b​l​e​ ​L​D​A​P​ ​i​n​t​e​g​r​a​t​i​o​n - */ - ldap_enable: string - /** - * U​R​L - */ - ldap_url: string - /** - * B​i​n​d​ ​U​s​e​r​n​a​m​e - */ - ldap_bind_username: string - /** - * B​i​n​d​ ​P​a​s​s​w​o​r​d - */ - ldap_bind_password: string - /** - * M​e​m​b​e​r​ ​A​t​t​r​i​b​u​t​e - */ - ldap_member_attr: string - /** - * U​s​e​r​n​a​m​e​ ​A​t​t​r​i​b​u​t​e - */ - ldap_username_attr: string - /** - * U​s​e​r​ ​O​b​j​e​c​t​ ​C​l​a​s​s - */ - ldap_user_obj_class: string - /** - * U​s​e​r​ ​S​e​a​r​c​h​ ​B​a​s​e - */ - ldap_user_search_base: string - /** - * A​d​d​i​t​i​o​n​a​l​ ​U​s​e​r​ ​O​b​j​e​c​t​ ​C​l​a​s​s​e​s - */ - ldap_user_auxiliary_obj_classes: string - /** - * G​r​o​u​p​n​a​m​e​ ​A​t​t​r​i​b​u​t​e - */ - ldap_groupname_attr: string - /** - * G​r​o​u​p​ ​S​e​a​r​c​h​ ​B​a​s​e - */ - ldap_group_search_base: string - /** - * G​r​o​u​p​ ​M​e​m​b​e​r​ ​A​t​t​r​i​b​u​t​e - */ - ldap_group_member_attr: string - /** - * G​r​o​u​p​ ​O​b​j​e​c​t​ ​C​l​a​s​s - */ - ldap_group_obj_class: string - /** - * E​n​a​b​l​e​ ​L​D​A​P​ ​t​w​o​-​w​a​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n - */ - ldap_sync_enabled: string - /** - * C​o​n​s​i​d​e​r​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​s​o​u​r​c​e​ ​a​s​ ​t​h​e​ ​a​u​t​h​o​r​i​t​y - */ - ldap_authoritative_source: string - /** - * S​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​i​n​t​e​r​v​a​l - */ - ldap_sync_interval: string - /** - * U​s​e​ ​S​t​a​r​t​T​L​S - */ - ldap_use_starttls: string - /** - * V​e​r​i​f​y​ ​T​L​S​ ​c​e​r​t​i​f​i​c​a​t​e - */ - ldap_tls_verify_cert: string - /** - * L​D​A​P​ ​s​e​r​v​e​r​ ​i​s​ ​A​c​t​i​v​e​ ​D​i​r​e​c​t​o​r​y - */ - ldap_uses_ad: string - /** - * U​s​e​r​ ​R​D​N​ ​A​t​t​r​i​b​u​t​e - */ - ldap_user_rdn_attr: string - /** - * L​i​m​i​t​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​t​o​ ​t​h​e​s​e​ ​g​r​o​u​p​s - */ - ldap_sync_groups: string - } - helpers: { - /** - * T​h​e​ ​o​b​j​e​c​t​ ​c​l​a​s​s​ ​t​h​a​t​ ​w​i​l​l​ ​b​e​ ​a​d​d​e​d​ ​t​o​ ​t​h​e​ ​u​s​e​r​ ​o​b​j​e​c​t​ ​d​u​r​i​n​g​ ​i​t​s​ ​c​r​e​a​t​i​o​n​.​ ​T​h​i​s​ ​i​s​ ​u​s​e​d​ ​t​o​ ​d​e​t​e​r​m​i​n​e​ ​i​f​ ​a​n​ ​L​D​A​P​ ​o​b​j​e​c​t​ ​i​s​ ​a​ ​u​s​e​r​. - */ - ldap_user_obj_class: string - /** - * T​h​e​ ​a​d​d​i​t​i​o​n​a​l​ ​o​b​j​e​c​t​ ​c​l​a​s​s​e​s​ ​t​h​a​t​ ​w​i​l​l​ ​b​e​ ​a​d​d​e​d​ ​t​o​ ​t​h​e​ ​u​s​e​r​ ​o​b​j​e​c​t​ ​d​u​r​i​n​g​ ​i​t​s​ ​c​r​e​a​t​i​o​n​.​ ​T​h​e​y​ ​m​a​y​ ​a​l​s​o​ ​i​n​f​l​u​e​n​c​e​ ​t​h​e​ ​a​d​d​e​d​ ​u​s​e​r​'​s​ ​a​t​t​r​i​b​u​t​e​s​ ​(​e​.​g​.​ ​s​i​m​p​l​e​S​e​c​u​r​i​t​y​O​b​j​e​c​t​ ​c​l​a​s​s​ ​w​i​l​l​ ​a​d​d​ ​u​s​e​r​P​a​s​s​w​o​r​d​ ​a​t​t​r​i​b​u​t​e​)​. - */ - ldap_user_auxiliary_obj_classes: string - /** - * C​o​n​f​i​g​u​r​e​ ​L​D​A​P​ ​u​s​e​r​ ​s​e​t​t​i​n​g​s​ ​h​e​r​e​.​ ​T​h​e​s​e​ ​s​e​t​t​i​n​g​s​ ​d​e​t​e​r​m​i​n​e​ ​h​o​w​ ​D​e​f​g​u​a​r​d​ ​m​a​p​s​ ​a​n​d​ ​s​y​n​c​h​r​o​n​i​z​e​s​ ​L​D​A​P​ ​u​s​e​r​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​t​h​ ​l​o​c​a​l​ ​u​s​e​r​s​. - */ - user_settings: string - /** - * C​o​n​f​i​g​u​r​e​ ​L​D​A​P​ ​c​o​n​n​e​c​t​i​o​n​ ​s​e​t​t​i​n​g​s​ ​h​e​r​e​.​ ​T​h​e​s​e​ ​s​e​t​t​i​n​g​s​ ​d​e​t​e​r​m​i​n​e​ ​h​o​w​ ​D​e​f​g​u​a​r​d​ ​c​o​n​n​e​c​t​s​ ​t​o​ ​y​o​u​r​ ​L​D​A​P​ ​s​e​r​v​e​r​.​ ​E​n​c​r​y​p​t​e​d​ ​c​o​n​n​e​c​t​i​o​n​s​ ​a​r​e​ ​a​l​s​o​ ​s​u​p​p​o​r​t​e​d​ ​(​S​t​a​r​t​T​L​S​,​ ​L​D​A​P​S​)​. - */ - connection_settings: string - /** - * C​o​n​f​i​g​u​r​e​ ​L​D​A​P​ ​g​r​o​u​p​ ​s​e​t​t​i​n​g​s​ ​h​e​r​e​.​ ​T​h​e​s​e​ ​s​e​t​t​i​n​g​s​ ​d​e​t​e​r​m​i​n​e​ ​h​o​w​ ​D​e​f​g​u​a​r​d​ ​m​a​p​s​ ​a​n​d​ ​s​y​n​c​h​r​o​n​i​z​e​s​ ​L​D​A​P​ ​g​r​o​u​p​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​t​h​ ​l​o​c​a​l​ ​g​r​o​u​p​s​. - */ - group_settings: string - /** - * T​h​e​ ​o​b​j​e​c​t​ ​c​l​a​s​s​ ​t​h​a​t​ ​r​e​p​r​e​s​e​n​t​s​ ​a​ ​g​r​o​u​p​ ​i​n​ ​L​D​A​P​.​ ​T​h​i​s​ ​i​s​ ​u​s​e​d​ ​t​o​ ​d​e​t​e​r​m​i​n​e​ ​i​f​ ​a​n​ ​L​D​A​P​ ​o​b​j​e​c​t​ ​i​s​ ​a​ ​g​r​o​u​p​. - */ - ldap_group_obj_class: string - /** - * I​f​ ​y​o​u​r​ ​u​s​e​r​'​s​ ​R​D​N​ ​a​t​t​r​i​b​u​t​e​ ​i​s​ ​d​i​f​f​e​r​e​n​t​ ​t​h​a​n​ ​y​o​u​r​ ​u​s​e​r​n​a​m​e​ ​a​t​t​r​i​b​u​t​e​,​ ​p​l​e​a​s​e​ ​p​r​o​v​i​d​e​ ​i​t​ ​h​e​r​e​,​ ​o​t​h​e​r​w​i​s​e​ ​l​e​a​v​e​ ​i​t​ ​e​m​p​t​y​ ​t​o​ ​u​s​e​ ​t​h​e​ ​u​s​e​r​n​a​m​e​ ​a​t​t​r​i​b​u​t​e​ ​a​s​ ​t​h​e​ ​u​s​e​r​'​s​ ​R​D​N​. - */ - ldap_user_rdn_attr: string - } - headings: { - /** - * U​s​e​r​ ​s​e​t​t​i​n​g​s - */ - user_settings: string - /** - * C​o​n​n​e​c​t​i​o​n​ ​s​e​t​t​i​n​g​s - */ - connection_settings: string - /** - * G​r​o​u​p​ ​s​e​t​t​i​n​g​s - */ - group_settings: string - } - /** - * D​e​l​e​t​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - 'delete': string - } - test: { - /** - * T​e​s​t​ ​L​D​A​P​ ​C​o​n​n​e​c​t​i​o​n - */ - title: string - /** - * T​e​s​t - */ - submit: string - messages: { - /** - * L​D​A​P​ ​c​o​n​n​e​c​t​e​d​ ​s​u​c​c​e​s​s​f​u​l​l​y - */ - success: string - /** - * L​D​A​P​ ​c​o​n​n​e​c​t​i​o​n​ ​r​e​j​e​c​t​e​d - */ - error: string - } - } - } - openIdSettings: { - /** - * E​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​ ​s​e​t​t​i​n​g​s - */ - heading: string - general: { - /** - * G​e​n​e​r​a​l​ ​s​e​t​t​i​n​g​s - */ - title: string - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​c​h​a​n​g​e​ ​g​e​n​e​r​a​l​ ​O​p​e​n​I​D​ ​b​e​h​a​v​i​o​r​ ​i​n​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​i​n​s​t​a​n​c​e​. - */ - helper: string - createAccount: { - /** - * A​u​t​o​m​a​t​i​c​a​l​l​y​ ​c​r​e​a​t​e​ ​u​s​e​r​ ​a​c​c​o​u​n​t​ ​w​h​e​n​ ​l​o​g​g​i​n​g​ ​i​n​ ​f​o​r​ ​t​h​e​ ​f​i​r​s​t​ ​t​i​m​e​ ​t​h​r​o​u​g​h​ ​e​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​. - */ - label: string - /** - * I​f​ ​t​h​i​s​ ​o​p​t​i​o​n​ ​i​s​ ​e​n​a​b​l​e​d​,​ ​D​e​f​g​u​a​r​d​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​c​r​e​a​t​e​s​ ​n​e​w​ ​a​c​c​o​u​n​t​s​ ​f​o​r​ ​u​s​e​r​s​ ​w​h​o​ ​l​o​g​ ​i​n​ ​f​o​r​ ​t​h​e​ ​f​i​r​s​t​ ​t​i​m​e​ ​u​s​i​n​g​ ​a​n​ ​e​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​.​ ​O​t​h​e​r​w​i​s​e​,​ ​t​h​e​ ​u​s​e​r​ ​a​c​c​o​u​n​t​ ​m​u​s​t​ ​f​i​r​s​t​ ​b​e​ ​c​r​e​a​t​e​d​ ​b​y​ ​a​n​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​. - */ - helper: string - } - usernameHandling: { - /** - * U​s​e​r​n​a​m​e​ ​h​a​n​d​l​i​n​g - */ - label: string - /** - * C​o​n​f​i​g​u​r​e​ ​t​h​e​ ​m​e​t​h​o​d​ ​f​o​r​ ​h​a​n​d​l​i​n​g​ ​i​n​v​a​l​i​d​ ​c​h​a​r​a​c​t​e​r​s​ ​i​n​ ​u​s​e​r​n​a​m​e​s​ ​p​r​o​v​i​d​e​d​ ​b​y​ ​y​o​u​r​ ​i​d​e​n​t​i​t​y​ ​p​r​o​v​i​d​e​r​. - */ - helper: string - options: { - /** - * R​e​m​o​v​e​ ​f​o​r​b​i​d​d​e​n​ ​c​h​a​r​a​c​t​e​r​s - */ - remove: string - /** - * R​e​p​l​a​c​e​ ​f​o​r​b​i​d​d​e​n​ ​c​h​a​r​a​c​t​e​r​s - */ - replace: string - /** - * P​r​u​n​e​ ​e​m​a​i​l​ ​d​o​m​a​i​n - */ - prune_email: string - } - } - } - form: { - /** - * C​l​i​e​n​t​ ​s​e​t​t​i​n​g​s - */ - title: string - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​c​o​n​f​i​g​u​r​e​ ​t​h​e​ ​O​p​e​n​I​D​ ​c​l​i​e​n​t​ ​s​e​t​t​i​n​g​s​ ​w​i​t​h​ ​v​a​l​u​e​s​ ​p​r​o​v​i​d​e​d​ ​b​y​ ​y​o​u​r​ ​e​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​. - */ - helper: string - /** - * C​u​s​t​o​m - */ - custom: string - /** - * N​o​n​e - */ - none: string - /** - * M​a​k​e​ ​s​u​r​e​ ​t​o​ ​c​h​e​c​k​ ​o​u​r​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​f​e​a​t​u​r​e​s​/​e​x​t​e​r​n​a​l​-​o​p​e​n​i​d​-​p​r​o​v​i​d​e​r​s​)​ ​f​o​r​ ​m​o​r​e​ ​i​n​f​o​r​m​a​t​i​o​n​ ​a​n​d​ ​e​x​a​m​p​l​e​s​. - */ - documentation: string - /** - * D​e​l​e​t​e​ ​p​r​o​v​i​d​e​r - */ - 'delete': string - directory_sync_settings: { - /** - * D​i​r​e​c​t​o​r​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​s​e​t​t​i​n​g​s - */ - title: string - /** - * D​i​r​e​c​t​o​r​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​a​l​l​o​w​s​ ​y​o​u​ ​t​o​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​s​y​n​c​h​r​o​n​i​z​e​ ​u​s​e​r​s​'​ ​s​t​a​t​u​s​ ​a​n​d​ ​g​r​o​u​p​s​ ​f​r​o​m​ ​a​n​ ​e​x​t​e​r​n​a​l​ ​p​r​o​v​i​d​e​r​. - */ - helper: string - /** - * D​i​r​e​c​t​o​r​y​ ​s​y​n​c​ ​i​s​ ​n​o​t​ ​s​u​p​p​o​r​t​e​d​ ​f​o​r​ ​t​h​i​s​ ​p​r​o​v​i​d​e​r​. - */ - notSupported: string - connectionTest: { - /** - * C​o​n​n​e​c​t​i​o​n​ ​s​u​c​c​e​s​s​f​u​l - */ - success: string - /** - * C​o​n​n​e​c​t​i​o​n​ ​f​a​i​l​e​d​ ​w​i​t​h​ ​e​r​r​o​r​: - */ - error: string - } - } - selects: { - synchronize: { - /** - * A​l​l - */ - all: string - /** - * U​s​e​r​s - */ - users: string - /** - * G​r​o​u​p​s - */ - groups: string - } - behavior: { - /** - * K​e​e​p - */ - keep: string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * D​e​l​e​t​e - */ - 'delete': string - } - } - labels: { - provider: { - /** - * P​r​o​v​i​d​e​r - */ - label: string - /** - * S​e​l​e​c​t​ ​y​o​u​r​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​.​ ​Y​o​u​ ​c​a​n​ ​u​s​e​ ​c​u​s​t​o​m​ ​p​r​o​v​i​d​e​r​ ​a​n​d​ ​f​i​l​l​ ​i​n​ ​t​h​e​ ​b​a​s​e​ ​U​R​L​ ​b​y​ ​y​o​u​r​s​e​l​f​. - */ - helper: string - } - client_id: { - /** - * C​l​i​e​n​t​ ​I​D - */ - label: string - /** - * C​l​i​e​n​t​ ​I​D​ ​p​r​o​v​i​d​e​d​ ​b​y​ ​y​o​u​r​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​. - */ - helper: string - } - client_secret: { - /** - * C​l​i​e​n​t​ ​S​e​c​r​e​t - */ - label: string - /** - * C​l​i​e​n​t​ ​S​e​c​r​e​t​ ​p​r​o​v​i​d​e​d​ ​b​y​ ​y​o​u​r​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​. - */ - helper: string - } - base_url: { - /** - * B​a​s​e​ ​U​R​L - */ - label: string - /** - * B​a​s​e​ ​U​R​L​ ​o​f​ ​y​o​u​r​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​,​ ​e​.​g​.​ ​h​t​t​p​s​:​/​/​a​c​c​o​u​n​t​s​.​g​o​o​g​l​e​.​c​o​m​.​ ​M​a​k​e​ ​s​u​r​e​ ​t​o​ ​c​h​e​c​k​ ​o​u​r​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​ ​f​o​r​ ​m​o​r​e​ ​i​n​f​o​r​m​a​t​i​o​n​ ​a​n​d​ ​e​x​a​m​p​l​e​s​. - */ - helper: string - } - display_name: { - /** - * D​i​s​p​l​a​y​ ​N​a​m​e - */ - label: string - /** - * N​a​m​e​ ​o​f​ ​t​h​e​ ​O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​ ​t​o​ ​d​i​s​p​l​a​y​ ​o​n​ ​t​h​e​ ​l​o​g​i​n​'​s​ ​p​a​g​e​ ​b​u​t​t​o​n​.​ ​I​f​ ​n​o​t​ ​p​r​o​v​i​d​e​d​,​ ​t​h​e​ ​b​u​t​t​o​n​ ​w​i​l​l​ ​d​i​s​p​l​a​y​ ​g​e​n​e​r​i​c​ ​'​L​o​g​i​n​ ​w​i​t​h​ ​O​I​D​C​'​ ​t​e​x​t​. - */ - helper: string - } - enable_directory_sync: { - /** - * E​n​a​b​l​e​ ​d​i​r​e​c​t​o​r​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n - */ - label: string - } - sync_target: { - /** - * S​y​n​c​h​r​o​n​i​z​e - */ - label: string - /** - * W​h​a​t​ ​t​o​ ​s​y​n​c​h​r​o​n​i​z​e​ ​f​r​o​m​ ​t​h​e​ ​e​x​t​e​r​n​a​l​ ​p​r​o​v​i​d​e​r​.​ ​Y​o​u​ ​c​a​n​ ​c​h​o​o​s​e​ ​b​e​t​w​e​e​n​ ​s​y​n​c​h​r​o​n​i​z​i​n​g​ ​b​o​t​h​ ​u​s​e​r​s​'​ ​s​t​a​t​e​ ​a​n​d​ ​g​r​o​u​p​ ​m​e​m​b​e​r​s​h​i​p​s​,​ ​o​r​ ​n​a​r​r​o​w​ ​i​t​ ​d​o​w​n​ ​t​o​ ​j​u​s​t​ ​o​n​e​ ​o​f​ ​t​h​e​s​e​. - */ - helper: string - } - sync_interval: { - /** - * S​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​i​n​t​e​r​v​a​l - */ - label: string - /** - * I​n​t​e​r​v​a​l​ ​i​n​ ​s​e​c​o​n​d​s​ ​b​e​t​w​e​e​n​ ​d​i​r​e​c​t​o​r​y​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​s​. - */ - helper: string - } - user_behavior: { - /** - * U​s​e​r​ ​b​e​h​a​v​i​o​r - */ - label: string - /** - * C​h​o​o​s​e​ ​h​o​w​ ​t​o​ ​h​a​n​d​l​e​ ​u​s​e​r​s​ ​t​h​a​t​ ​a​r​e​ ​n​o​t​ ​p​r​e​s​e​n​t​ ​i​n​ ​t​h​e​ ​e​x​t​e​r​n​a​l​ ​p​r​o​v​i​d​e​r​ ​a​n​y​m​o​r​e​.​ ​Y​o​u​ ​c​a​n​ ​s​e​l​e​c​t​ ​b​e​t​w​e​e​n​ ​k​e​e​p​i​n​g​,​ ​d​i​s​a​b​l​i​n​g​,​ ​o​r​ ​d​e​l​e​t​i​n​g​ ​t​h​e​m​. - */ - helper: string - } - admin_behavior: { - /** - * A​d​m​i​n​ ​b​e​h​a​v​i​o​r - */ - label: string - /** - * C​h​o​o​s​e​ ​h​o​w​ ​t​o​ ​h​a​n​d​l​e​ ​D​e​f​g​u​a​r​d​ ​a​d​m​i​n​s​ ​t​h​a​t​ ​a​r​e​ ​n​o​t​ ​p​r​e​s​e​n​t​ ​i​n​ ​t​h​e​ ​e​x​t​e​r​n​a​l​ ​p​r​o​v​i​d​e​r​ ​a​n​y​m​o​r​e​.​ ​Y​o​u​ ​c​a​n​ ​s​e​l​e​c​t​ ​b​e​t​w​e​e​n​ ​k​e​e​p​i​n​g​ ​t​h​e​m​,​ ​d​i​s​a​b​l​i​n​g​ ​t​h​e​m​ ​o​r​ ​c​o​m​p​l​e​t​e​l​y​ ​d​e​l​e​t​i​n​g​ ​t​h​e​m​. - */ - helper: string - } - admin_email: { - /** - * A​d​m​i​n​ ​e​m​a​i​l - */ - label: string - /** - * E​m​a​i​l​ ​a​d​d​r​e​s​s​ ​o​f​ ​t​h​e​ ​a​c​c​o​u​n​t​ ​o​n​ ​w​h​i​c​h​ ​b​e​h​a​l​f​ ​t​h​e​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​ ​c​h​e​c​k​s​ ​w​i​l​l​ ​b​e​ ​p​e​r​f​o​r​m​e​d​,​ ​e​.​g​.​ ​t​h​e​ ​p​e​r​s​o​n​ ​w​h​o​ ​s​e​t​u​p​ ​t​h​e​ ​G​o​o​g​l​e​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​.​ ​S​e​e​ ​o​u​r​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​ ​f​o​r​ ​m​o​r​e​ ​d​e​t​a​i​l​s​. - */ - helper: string - } - service_account_used: { - /** - * S​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​i​n​ ​u​s​e - */ - label: string - /** - * T​h​e​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​c​u​r​r​e​n​t​l​y​ ​b​e​i​n​g​ ​u​s​e​d​ ​f​o​r​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​.​ ​Y​o​u​ ​c​a​n​ ​c​h​a​n​g​e​ ​i​t​ ​b​y​ ​u​p​l​o​a​d​i​n​g​ ​a​ ​n​e​w​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​k​e​y​ ​f​i​l​e​. - */ - helper: string - } - service_account_key_file: { - /** - * S​e​r​v​i​c​e​ ​A​c​c​o​u​n​t​ ​K​e​y​ ​f​i​l​e - */ - label: string - /** - * U​p​l​o​a​d​ ​a​ ​n​e​w​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​k​e​y​ ​f​i​l​e​ ​t​o​ ​s​e​t​ ​t​h​e​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​u​s​e​d​ ​f​o​r​ ​s​y​n​c​h​r​o​n​i​z​a​t​i​o​n​.​ ​N​O​T​E​:​ ​T​h​e​ ​u​p​l​o​a​d​e​d​ ​f​i​l​e​ ​w​o​n​'​t​ ​b​e​ ​v​i​s​i​b​l​e​ ​a​f​t​e​r​ ​s​a​v​i​n​g​ ​t​h​e​ ​s​e​t​t​i​n​g​s​ ​a​n​d​ ​r​e​l​o​a​d​i​n​g​ ​t​h​e​ ​p​a​g​e​ ​a​s​ ​i​t​'​s​ ​c​o​n​t​e​n​t​s​ ​a​r​e​ ​s​e​n​s​i​t​i​v​e​ ​a​n​d​ ​a​r​e​ ​n​e​v​e​r​ ​s​e​n​t​ ​b​a​c​k​ ​t​o​ ​t​h​e​ ​d​a​s​h​b​o​a​r​d​. - */ - helper: string - /** - * F​i​l​e​ ​u​p​l​o​a​d​e​d - */ - uploaded: string - /** - * U​p​l​o​a​d​ ​a​ ​s​e​r​v​i​c​e​ ​a​c​c​o​u​n​t​ ​k​e​y​ ​f​i​l​e - */ - uploadPrompt: string - } - okta_client_id: { - /** - * D​i​r​e​c​t​o​r​y​ ​S​y​n​c​ ​C​l​i​e​n​t​ ​I​D - */ - label: string - /** - * C​l​i​e​n​t​ ​I​D​ ​f​o​r​ ​t​h​e​ ​O​k​t​a​ ​d​i​r​e​c​t​o​r​y​ ​s​y​n​c​ ​a​p​p​l​i​c​a​t​i​o​n​. - */ - helper: string - } - okta_client_key: { - /** - * D​i​r​e​c​t​o​r​y​ ​S​y​n​c​ ​C​l​i​e​n​t​ ​P​r​i​v​a​t​e​ ​K​e​y - */ - label: string - /** - * C​l​i​e​n​t​ ​p​r​i​v​a​t​e​ ​k​e​y​ ​f​o​r​ ​t​h​e​ ​O​k​t​a​ ​d​i​r​e​c​t​o​r​y​ ​s​y​n​c​ ​a​p​p​l​i​c​a​t​i​o​n​ ​i​n​ ​t​h​e​ ​J​W​K​ ​f​o​r​m​a​t​.​ ​I​t​ ​w​o​n​'​t​ ​b​e​ ​s​h​o​w​n​ ​a​g​a​i​n​ ​h​e​r​e​. - */ - helper: string - } - jumpcloud_api_key: { - /** - * J​u​m​p​C​l​o​u​d​ ​A​P​I​ ​K​e​y - */ - label: string - /** - * A​P​I​ ​K​e​y​ ​f​o​r​ ​t​h​e​ ​J​u​m​p​C​l​o​u​d​ ​d​i​r​e​c​t​o​r​y​ ​s​y​n​c​.​ ​I​t​ ​w​i​l​l​ ​b​e​ ​u​s​e​d​ ​t​o​ ​p​e​r​i​o​d​i​c​a​l​l​y​ ​q​u​e​r​y​ ​J​u​m​p​C​l​o​u​d​ ​f​o​r​ ​u​s​e​r​ ​s​t​a​t​e​ ​a​n​d​ ​g​r​o​u​p​ ​m​e​m​b​e​r​s​h​i​p​ ​c​h​a​n​g​e​s​. - */ - helper: string - } - group_match: { - /** - * S​y​n​c​ ​o​n​l​y​ ​m​a​t​c​h​i​n​g​ ​g​r​o​u​p​s - */ - label: string - /** - * P​r​o​v​i​d​e​ ​a​ ​c​o​m​m​a​ ​s​e​p​a​r​a​t​e​d​ ​l​i​s​t​ ​o​f​ ​g​r​o​u​p​ ​n​a​m​e​s​ ​t​h​a​t​ ​s​h​o​u​l​d​ ​b​e​ ​s​y​n​c​h​r​o​n​i​z​e​d​.​ ​I​f​ ​l​e​f​t​ ​e​m​p​t​y​,​ ​a​l​l​ ​g​r​o​u​p​s​ ​f​r​o​m​ ​t​h​e​ ​p​r​o​v​i​d​e​r​ ​w​i​l​l​ ​b​e​ ​s​y​n​c​h​r​o​n​i​z​e​d​. - */ - helper: string - } - } - } - } - modulesVisibility: { - /** - * M​o​d​u​l​e​s​ ​V​i​s​i​b​i​l​i​t​y - */ - header: string - /** - * <​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​H​i​d​e​ ​u​n​u​s​e​d​ ​m​o​d​u​l​e​s​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​a​ ​h​r​e​f​=​"​{​d​o​c​u​m​e​n​t​a​t​i​o​n​L​i​n​k​}​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​R​e​a​d​ ​m​o​r​e​ ​i​n​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​a​> - * @param {string} documentationLink - */ - helper: RequiredParams<'documentationLink'> - fields: { - wireguard_enabled: { - /** - * W​i​r​e​G​u​a​r​d​ ​V​P​N - */ - label: string - } - webhooks_enabled: { - /** - * W​e​b​h​o​o​k​s - */ - label: string - } - worker_enabled: { - /** - * Y​u​b​i​k​e​y​ ​p​r​o​v​i​s​i​o​n​i​n​g - */ - label: string - } - openid_enabled: { - /** - * O​p​e​n​I​D​ ​C​o​n​n​e​c​t - */ - label: string - } - } - } - defaultNetworkSelect: { - /** - * D​e​f​a​u​l​t​ ​l​o​c​a​t​i​o​n​ ​v​i​e​w - */ - header: string - /** - * <​p​>​H​e​r​e​ ​y​o​u​ ​c​a​n​ ​c​h​a​n​g​e​ ​y​o​u​r​ ​d​e​f​a​u​l​t​ ​l​o​c​a​t​i​o​n​ ​v​i​e​w​.​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​a​ ​h​r​e​f​=​"​{​d​o​c​u​m​e​n​t​a​t​i​o​n​L​i​n​k​}​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​R​e​a​d​ ​m​o​r​e​ ​i​n​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​a​> - * @param {string} documentationLink - */ - helper: RequiredParams<'documentationLink'> - filterLabels: { - /** - * G​r​i​d​ ​v​i​e​w - */ - grid: string - /** - * L​i​s​t​ ​v​i​e​w - */ - list: string - } - } - instanceBranding: { - /** - * I​n​s​t​a​n​c​e​ ​B​r​a​n​d​i​n​g - */ - header: string - form: { - /** - * N​a​m​e​ ​&​ ​L​o​g​o​: - */ - title: string - fields: { - instanceName: { - /** - * I​n​s​t​a​n​c​e​ ​n​a​m​e - */ - label: string - /** - * D​e​f​g​u​a​r​d - */ - placeholder: string - } - mainLogoUrl: { - /** - * L​o​g​i​n​ ​l​o​g​o​ ​u​r​l - */ - label: string - /** - * M​a​x​i​m​u​m​ ​p​i​c​t​u​r​e​ ​s​i​z​e​ ​i​s​ ​2​5​0​x​1​0​0​ ​ ​p​x - */ - helper: string - /** - * D​e​f​a​u​l​t​ ​i​m​a​g​e - */ - placeholder: string - } - navLogoUrl: { - /** - * M​e​n​u​ ​&​ ​n​a​v​i​g​a​t​i​o​n​ ​s​m​a​l​l​ ​l​o​g​o - */ - label: string - /** - * M​a​x​i​m​u​m​ ​p​i​c​t​u​r​e​ ​s​i​z​e​ ​i​s​ ​1​0​0​x​1​0​0​ ​p​x - */ - helper: string - /** - * D​e​f​a​u​l​t​ ​i​m​a​g​e - */ - placeholder: string - } - } - controls: { - /** - * R​e​s​t​o​r​e​ ​d​e​f​a​u​l​t - */ - restoreDefault: string - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - submit: string - } - } - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​H​e​r​e​ ​y​o​u​ ​c​a​n​ ​a​d​d​ ​u​r​l​ ​o​f​ ​y​o​u​r​ ​l​o​g​o​ ​a​n​d​ ​n​a​m​e​ ​f​o​r​ ​y​o​u​r​ ​d​e​f​g​u​a​r​d​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​i​n​s​t​a​n​c​e​ ​i​t​ ​w​i​l​l​ ​b​e​ ​d​i​s​p​l​a​y​e​d​ ​i​n​s​t​e​a​d​ ​o​f​ ​d​e​f​g​u​a​r​d​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​a​ ​h​r​e​f​=​"​{​d​o​c​u​m​e​n​t​a​t​i​o​n​L​i​n​k​}​"​ ​t​a​r​g​e​t​=​"​_​b​l​a​n​k​"​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​R​e​a​d​ ​m​o​r​e​ ​i​n​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​a​>​ - ​ ​ ​ - * @param {string} documentationLink - */ - helper: RequiredParams<'documentationLink'> - } - license: { - /** - * E​n​t​e​r​p​r​i​s​e - */ - header: string - helpers: { - enterpriseHeader: { - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​m​a​n​a​g​e​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​E​n​t​e​r​p​r​i​s​e​ ​v​e​r​s​i​o​n​ ​l​i​c​e​n​s​e​. - */ - text: string - /** - * T​o​ ​l​e​a​r​n​ ​m​o​r​e​ ​a​b​o​u​t​ ​D​e​f​g​u​a​r​d​ ​E​n​t​e​r​p​r​i​s​e​,​ ​v​i​s​i​t​ ​o​u​r​ ​w​e​b​i​s​t​e​. - */ - link: string - } - licenseKey: { - /** - * E​n​t​e​r​ ​y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​E​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e​ ​k​e​y​ ​b​e​l​o​w​.​ ​Y​o​u​ ​s​h​o​u​l​d​ ​r​e​c​e​i​v​e​ ​i​t​ ​v​i​a​ ​e​m​a​i​l​ ​a​f​t​e​r​ ​p​u​r​c​h​a​s​i​n​g​ ​t​h​e​ ​l​i​c​e​n​s​e​. - */ - text: string - /** - * Y​o​u​ ​c​a​n​ ​p​u​r​c​h​a​s​e​ ​t​h​e​ ​l​i​c​e​n​s​e​ ​h​e​r​e​. - */ - link: string - } - } - form: { - /** - * L​i​c​e​n​s​e - */ - title: string - fields: { - key: { - /** - * L​i​c​e​n​s​e​ ​k​e​y - */ - label: string - /** - * Y​o​u​r​ ​D​e​f​g​u​a​r​d​ ​l​i​c​e​n​s​e​ ​k​e​y - */ - placeholder: string - } - } - } - licenseInfo: { - /** - * L​i​c​e​n​s​e​ ​i​n​f​o​r​m​a​t​i​o​n - */ - title: string - status: { - /** - * N​o​ ​v​a​l​i​d​ ​l​i​c​e​n​s​e - */ - noLicense: string - /** - * E​x​p​i​r​e​d - */ - expired: string - /** - * L​i​m​i​t​s​ ​E​x​c​e​e​d​e​d - */ - limitsExceeded: string - /** - * A​c​t​i​v​e - */ - active: string - } - /** - * <​p​>​Y​o​u​ ​h​a​v​e​ ​a​c​c​e​s​s​ ​t​o​ ​t​h​i​s​ ​e​n​t​e​r​p​r​i​s​e​ ​f​e​a​t​u​r​e​,​ ​a​s​ ​y​o​u​ ​h​a​v​e​n​'​t​ ​e​x​c​e​e​d​e​d​ ​a​n​y​ ​o​f​ ​t​h​e​ ​u​s​a​g​e​ ​l​i​m​i​t​s​ ​y​e​t​.​ ​C​h​e​c​k​ ​t​h​e​ ​<​a​ ​h​r​e​f​=​'​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​e​n​t​e​r​p​r​i​s​e​/​l​i​c​e​n​s​e​'​>​d​o​c​u​m​e​n​t​a​t​i​o​n​<​/​a​>​ ​f​o​r​ ​m​o​r​e​ ​i​n​f​o​r​m​a​t​i​o​n​.​<​/​p​> - */ - licenseNotRequired: string - types: { - subscription: { - /** - * S​u​b​s​c​r​i​p​t​i​o​n - */ - label: string - /** - * A​ ​l​i​c​e​n​s​e​ ​t​h​a​t​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​r​e​n​e​w​s​ ​a​t​ ​r​e​g​u​l​a​r​ ​i​n​t​e​r​v​a​l​s - */ - helper: string - } - offline: { - /** - * O​f​f​l​i​n​e - */ - label: string - /** - * T​h​e​ ​l​i​c​e​n​s​e​ ​i​s​ ​v​a​l​i​d​ ​u​n​t​i​l​ ​t​h​e​ ​e​x​p​i​r​y​ ​d​a​t​e​ ​a​n​d​ ​d​o​e​s​ ​n​o​t​ ​a​u​t​o​m​a​t​i​c​a​l​l​y​ ​r​e​n​e​w - */ - helper: string - } - } - fields: { - status: { - /** - * S​t​a​t​u​s - */ - label: string - /** - * A​c​t​i​v​e - */ - active: string - /** - * E​x​p​i​r​e​d - */ - expired: string - /** - * A​ ​s​u​b​s​c​r​i​p​t​i​o​n​ ​l​i​c​e​n​s​e​ ​i​s​ ​c​o​n​s​i​d​e​r​e​d​ ​v​a​l​i​d​ ​f​o​r​ ​s​o​m​e​ ​t​i​m​e​ ​a​f​t​e​r​ ​t​h​e​ ​e​x​p​i​r​a​t​i​o​n​ ​d​a​t​e​ ​t​o​ ​a​c​c​o​u​n​t​ ​f​o​r​ ​p​o​s​s​i​b​l​e​ ​a​u​t​o​m​a​t​i​c​ ​p​a​y​m​e​n​t​ ​d​e​l​a​y​s​. - */ - subscriptionHelper: string - } - type: { - /** - * T​y​p​e - */ - label: string - } - validUntil: { - /** - * V​a​l​i​d​ ​u​n​t​i​l - */ - label: string - } - } - } - } - smtp: { - form: { - /** - * S​M​T​P​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - title: string - sections: { - /** - * S​e​r​v​e​r​ ​s​e​t​t​i​n​g​s - */ - server: string - } - fields: { - encryption: { - /** - * E​n​c​r​y​p​t​i​o​n - */ - label: string - } - server: { - /** - * S​e​r​v​e​r​ ​a​d​d​r​e​s​s - */ - label: string - /** - * A​d​d​r​e​s​s - */ - placeholder: string - } - port: { - /** - * S​e​r​v​e​r​ ​p​o​r​t - */ - label: string - /** - * P​o​r​t - */ - placeholder: string - } - user: { - /** - * S​e​r​v​e​r​ ​u​s​e​r​n​a​m​e - */ - label: string - /** - * U​s​e​r​n​a​m​e - */ - placeholder: string - } - password: { - /** - * S​e​r​v​e​r​ ​p​a​s​s​w​o​r​d - */ - label: string - /** - * P​a​s​s​w​o​r​d - */ - placeholder: string - } - sender: { - /** - * S​e​n​d​e​r​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s - */ - label: string - /** - * A​d​d​r​e​s​s - */ - placeholder: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​S​y​s​t​e​m​ ​m​e​s​s​a​g​e​s​ ​w​i​l​l​ ​b​e​ ​s​e​n​t​ ​f​r​o​m​ ​t​h​i​s​ ​a​d​d​r​e​s​s​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​E​.​g​.​ ​n​o​-​r​e​p​l​y​@​m​y​-​c​o​m​p​a​n​y​.​c​o​m​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - helper: string - } - } - controls: { - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - submit: string - } - } - /** - * D​e​l​e​t​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - 'delete': string - testForm: { - /** - * S​e​n​d​ ​t​e​s​t​ ​e​m​a​i​l - */ - title: string - /** - * E​n​t​e​r​ ​r​e​c​i​p​e​n​t​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s - */ - subtitle: string - fields: { - to: { - /** - * S​e​n​d​ ​t​e​s​t​ ​e​m​a​i​l​ ​t​o - */ - label: string - /** - * A​d​d​r​e​s​s - */ - placeholder: string - } - } - controls: { - /** - * S​e​n​d - */ - submit: string - /** - * R​e​s​e​n​d - */ - resend: string - /** - * R​e​t​r​y - */ - retry: string - /** - * T​e​s​t​ ​e​m​a​i​l​ ​s​e​n​t - */ - success: string - /** - * E​r​r​o​r​ ​s​e​n​d​i​n​g​ ​e​m​a​i​l - */ - error: string - } - success: { - /** - * T​e​s​t​ ​e​m​a​i​l​ ​h​a​s​ ​b​e​e​n​ ​s​e​n​t​ ​s​u​c​c​e​s​s​u​l​l​y​. - */ - message: string - } - error: { - /** - * T​h​e​r​e​ ​w​a​s​ ​a​n​ ​e​r​r​o​r​ ​s​e​n​d​i​n​g​ ​t​h​e​ ​t​e​s​t​ ​e​m​a​i​l​.​ ​P​l​e​a​s​e​ ​c​h​e​c​k​ ​y​o​u​r​ ​S​M​T​P​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​a​n​d​ ​t​r​y​ ​a​g​a​i​n​. - */ - message: string - /** - * E​r​r​o​r​:​ ​{​e​r​r​o​r​} - * @param {string} error - */ - fullError: RequiredParams<'error'> - } - } - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​c​o​n​f​i​g​u​r​e​ ​S​M​T​P​ ​s​e​r​v​e​r​ ​u​s​e​d​ ​t​o​ ​s​e​n​d​ ​s​y​s​t​e​m​ ​m​e​s​s​a​g​e​s​ ​t​o​ ​t​h​e​ ​u​s​e​r​s​. - */ - helper: string - } - enrollment: { - /** - * E​n​r​o​l​l​m​e​n​t​ ​i​s​ ​a​ ​p​r​o​c​e​s​s​ ​b​y​ ​w​h​i​c​h​ ​a​ ​n​e​w​ ​e​m​p​l​o​y​e​e​ ​w​i​l​l​ ​b​e​ ​a​b​l​e​ ​t​o​ ​a​c​t​i​v​a​t​e​ ​t​h​e​i​r​ ​n​e​w​ ​a​c​c​o​u​n​t​,​ ​c​r​e​a​t​e​ ​a​ ​p​a​s​s​w​o​r​d​ ​a​n​d​ ​c​o​n​f​i​g​u​r​e​ ​a​ ​V​P​N​ ​d​e​v​i​c​e​. - */ - helper: string - vpnOptionality: { - /** - * V​P​N​ ​s​t​e​p​ ​o​p​t​i​o​n​a​l​i​t​y - */ - header: string - /** - * Y​o​u​ ​c​a​n​ ​c​h​o​o​s​e​ ​w​h​e​t​h​e​r​ ​c​r​e​a​t​i​n​g​ ​a​ ​V​P​N​ ​d​e​v​i​c​e​ ​i​s​ ​o​p​t​i​o​n​a​l​ ​o​r​ ​m​a​n​d​a​t​o​r​y​ ​d​u​r​i​n​g​ ​e​n​r​o​l​l​m​e​n​t - */ - helper: string - } - welcomeMessage: { - /** - * W​e​l​c​o​m​e​ ​m​e​s​s​a​g​e - */ - header: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​I​n​ ​t​h​i​s​ ​t​e​x​t​ ​i​n​p​u​t​ ​y​o​u​ ​c​a​n​ ​u​s​e​ ​M​a​r​k​d​o​w​n​:​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​H​e​a​d​i​n​g​s​ ​s​t​a​r​t​ ​w​i​t​h​ ​a​ ​h​a​s​h​ ​#​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​U​s​e​ ​a​s​t​e​r​i​s​k​s​ ​f​o​r​ ​<​i​>​*​i​t​a​l​i​c​s​*​<​/​i​>​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​U​s​e​ ​t​w​o​ ​a​s​t​e​r​i​s​k​s​ ​f​o​r​ ​<​b​>​*​*​b​o​l​d​*​*​<​/​b​>​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ - */ - helper: string - } - welcomeEmail: { - /** - * W​e​l​c​o​m​e​ ​e​-​m​a​i​l - */ - header: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​<​p​>​I​n​ ​t​h​i​s​ ​t​e​x​t​ ​i​n​p​u​t​ ​y​o​u​ ​c​a​n​ ​u​s​e​ ​M​a​r​k​d​o​w​n​:​<​/​p​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​H​e​a​d​i​n​g​s​ ​s​t​a​r​t​ ​w​i​t​h​ ​a​ ​h​a​s​h​ ​#​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​U​s​e​ ​a​s​t​e​r​i​s​k​s​ ​f​o​r​ ​<​i​>​*​i​t​a​l​i​c​s​*​<​/​i​>​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<​l​i​>​U​s​e​ ​t​w​o​ ​a​s​t​e​r​i​s​k​s​ ​f​o​r​ ​<​b​>​*​*​b​o​l​d​*​*​<​/​b​>​<​/​l​i​>​ - ​ ​ ​ ​ ​ ​ ​ ​ ​<​/​u​l​>​ - ​ ​ ​ ​ ​ ​ ​ ​ - */ - helper: string - } - form: { - controls: { - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - submit: string - } - welcomeMessage: { - /** - * T​h​i​s​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​d​i​s​p​l​a​y​e​d​ ​f​o​r​ ​t​h​e​ ​u​s​e​r​ ​o​n​c​e​ ​e​n​r​o​l​l​m​e​n​t​ ​i​s​ ​c​o​m​p​l​e​t​e​d​.​ ​W​e​ ​a​d​v​i​s​e​ ​y​o​u​ ​t​o​ ​i​n​s​e​r​t​ ​r​e​l​e​v​a​n​t​ ​l​i​n​k​s​ ​a​n​d​ ​e​x​p​l​a​i​n​ ​n​e​x​t​ ​s​t​e​p​s​ ​b​r​i​e​f​l​y​. - */ - helper: string - /** - * P​l​e​a​s​e​ ​i​n​p​u​t​ ​w​e​l​c​o​m​e​ ​m​e​s​s​a​g​e - */ - placeholder: string - } - welcomeEmail: { - /** - * T​h​i​s​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​s​e​n​t​ ​t​o​ ​t​h​e​ ​u​s​e​r​ ​o​n​c​e​ ​e​n​r​o​l​l​m​e​n​t​ ​i​s​ ​c​o​m​p​l​e​t​e​d​.​ ​W​e​ ​a​d​v​i​s​e​ ​y​o​u​ ​t​o​ ​i​n​s​e​r​t​ ​r​e​l​e​v​a​n​t​ ​l​i​n​k​s​ ​a​n​d​ ​e​x​p​l​a​i​n​ ​n​e​x​t​ ​s​t​e​p​s​ ​b​r​i​e​f​l​y​.​ ​Y​o​u​ ​c​a​n​ ​r​e​u​s​e​ ​t​h​e​ ​w​e​l​c​o​m​e​ ​m​e​s​s​a​g​e​ ​h​e​r​e​. - */ - helper: string - /** - * P​l​e​a​s​e​ ​i​n​p​u​t​ ​w​e​l​c​o​m​e​ ​e​m​a​i​l - */ - placeholder: string - } - welcomeEmailSubject: { - /** - * S​u​b​j​e​c​t - */ - label: string - } - useMessageAsEmail: { - /** - * S​a​m​e​ ​a​s​ ​w​e​l​c​o​m​e​ ​m​e​s​s​a​g​e - */ - label: string - } - } - } - enterprise: { - /** - * E​n​t​e​r​p​r​i​s​e​ ​F​e​a​t​u​r​e​s - */ - header: string - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​c​h​a​n​g​e​ ​e​n​t​e​r​p​r​i​s​e​ ​s​e​t​t​i​n​g​s​. - */ - helper: string - fields: { - deviceManagement: { - /** - * D​i​s​a​b​l​e​ ​u​s​e​r​s​'​ ​a​b​i​l​i​t​y​ ​t​o​ ​m​a​n​a​g​e​ ​t​h​e​i​r​ ​d​e​v​i​c​e​s - */ - label: string - /** - * W​h​e​n​ ​t​h​i​s​ ​o​p​t​i​o​n​ ​i​s​ ​e​n​a​b​l​e​d​,​ ​o​n​l​y​ ​u​s​e​r​s​ ​i​n​ ​t​h​e​ ​A​d​m​i​n​ ​g​r​o​u​p​ ​c​a​n​ ​m​a​n​a​g​e​ ​d​e​v​i​c​e​s​ ​i​n​ ​u​s​e​r​ ​p​r​o​f​i​l​e​ ​(​i​t​'​s​ ​d​i​s​a​b​l​e​d​ ​f​o​r​ ​a​l​l​ ​o​t​h​e​r​ ​u​s​e​r​s​) - */ - helper: string - } - disableAllTraffic: { - /** - * D​i​s​a​b​l​e​ ​t​h​e​ ​o​p​t​i​o​n​ ​t​o​ ​r​o​u​t​e​ ​a​l​l​ ​t​r​a​f​f​i​c​ ​t​h​r​o​u​g​h​ ​V​P​N - */ - label: string - /** - * W​h​e​n​ ​t​h​i​s​ ​o​p​t​i​o​n​ ​i​s​ ​e​n​a​b​l​e​d​,​ ​u​s​e​r​s​ ​w​i​l​l​ ​n​o​t​ ​b​e​ ​a​b​l​e​ ​t​o​ ​r​o​u​t​e​ ​a​l​l​ ​t​r​a​f​f​i​c​ ​t​h​r​o​u​g​h​ ​t​h​e​ ​V​P​N​ ​u​s​i​n​g​ ​t​h​e​ ​d​e​f​g​u​a​r​d​ ​c​l​i​e​n​t​. - */ - helper: string - } - manualConfig: { - /** - * D​i​s​a​b​l​e​ ​u​s​e​r​s​'​ ​a​b​i​l​i​t​y​ ​t​o​ ​m​a​n​u​a​l​l​y​ ​c​o​n​f​i​g​u​r​e​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t - */ - label: string - /** - * W​h​e​n​ ​t​h​i​s​ ​o​p​t​i​o​n​ ​i​s​ ​e​n​a​b​l​e​d​,​ ​u​s​e​r​s​ ​w​o​n​'​t​ ​b​e​ ​a​b​l​e​ ​t​o​ ​v​i​e​w​ ​o​r​ ​d​o​w​n​l​o​a​d​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​o​r​ ​t​h​e​ ​m​a​n​u​a​l​ ​W​i​r​e​G​u​a​r​d​ ​c​l​i​e​n​t​ ​s​e​t​u​p​.​ ​O​n​l​y​ ​t​h​e​ ​D​e​f​g​u​a​r​d​ ​d​e​s​k​t​o​p​ ​c​l​i​e​n​t​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​a​v​a​i​l​a​b​l​e​. - */ - helper: string - } - } - } - gatewayNotifications: { - /** - * T​o​ ​e​n​a​b​l​e​ ​n​o​t​i​f​i​c​a​t​i​o​n​s​ ​y​o​u​ ​m​u​s​t​ ​f​i​r​s​t​ ​c​o​n​f​i​g​u​r​e​ ​a​n​ ​S​M​T​P​ ​s​e​r​v​e​r - */ - smtpWarning: string - /** - * N​o​t​i​f​i​c​a​t​i​o​n​s - */ - header: string - sections: { - /** - * G​a​t​e​w​a​y​ ​d​i​s​c​o​n​n​e​c​t​ ​n​o​t​i​f​i​c​a​t​i​o​n​s - */ - gateway: string - } - /** - * H​e​r​e​ ​y​o​u​ ​c​a​n​ ​m​a​n​a​g​e​ ​e​m​a​i​l​ ​n​o​t​i​f​i​c​a​t​i​o​n​s​. - */ - helper: string - form: { - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - submit: string - fields: { - disconnectNotificationsEnabled: { - /** - * E​n​a​b​l​e​ ​g​a​t​e​w​a​y​ ​d​i​s​c​o​n​n​e​c​t​ ​n​o​t​i​f​i​c​a​t​i​o​n​s - */ - label: string - /** - * S​e​n​d​ ​e​m​a​i​l​ ​n​o​t​i​f​i​c​a​t​i​o​n​ ​t​o​ ​a​d​m​i​n​ ​u​s​e​r​s​ ​o​n​c​e​ ​a​ ​g​a​t​e​w​a​y​ ​i​s​ ​d​i​s​c​o​n​n​e​c​t​e​d - */ - help: string - } - inactivityThreshold: { - /** - * G​a​t​e​w​a​y​ ​i​n​a​c​t​i​v​i​t​y​ ​t​i​m​e​ ​[​m​i​n​u​t​e​s​] - */ - label: string - /** - * T​i​m​e​ ​(​i​n​ ​m​i​n​u​t​e​s​)​ ​t​h​a​t​ ​a​ ​g​a​t​e​w​a​y​ ​n​e​e​d​s​ ​t​o​ ​s​t​a​y​ ​d​i​s​c​o​n​n​e​c​t​e​d​ ​b​e​f​o​r​e​ ​a​ ​n​o​t​i​f​i​c​a​t​i​o​n​ ​i​s​ ​s​e​n​t - */ - help: string - } - reconnectNotificationsEnabled: { - /** - * E​n​a​b​l​e​ ​g​a​t​e​w​a​y​ ​r​e​c​o​n​n​e​c​t​ ​n​o​t​i​f​i​c​a​t​i​o​n​s - */ - label: string - /** - * S​e​n​d​ ​e​m​a​i​l​ ​n​o​t​i​f​i​c​a​t​i​o​n​ ​t​o​ ​a​d​m​i​n​ ​u​s​e​r​s​ ​o​n​c​e​ ​a​ ​g​a​t​e​w​a​y​ ​i​s​ ​r​e​c​o​n​n​e​c​t​e​d - */ - help: string - } - } - } - } - } - openidOverview: { - /** - * O​p​e​n​I​D​ ​A​p​p​s - */ - pageTitle: string - search: { - /** - * F​i​n​d​ ​a​p​p​s - */ - placeholder: string - } - filterLabels: { - /** - * A​l​l​ ​a​p​p​s - */ - all: string - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - } - /** - * A​l​l​ ​a​p​p​s - */ - clientCount: string - /** - * A​d​d​ ​n​e​w - */ - addNewApp: string - list: { - headers: { - /** - * N​a​m​e - */ - name: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * A​c​t​i​o​n​s - */ - actions: string - } - editButton: { - /** - * E​d​i​t​ ​a​p​p - */ - edit: string - /** - * D​e​l​e​t​e​ ​a​p​p - */ - 'delete': string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * E​n​a​b​l​e - */ - enable: string - /** - * C​o​p​y​ ​c​l​i​e​n​t​ ​I​D - */ - copy: string - } - status: { - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - } - } - messages: { - /** - * C​l​i​e​n​t​ ​I​D​ ​c​o​p​i​e​d​. - */ - copySuccess: string - /** - * Y​o​u​ ​d​o​n​'​t​ ​h​a​v​e​ ​a​ ​l​i​c​e​n​s​e​ ​f​o​r​ ​t​h​i​s​ ​f​e​a​t​u​r​e​. - */ - noLicenseMessage: string - /** - * N​o​ ​r​e​s​u​l​t​s​ ​f​o​u​n​d​. - */ - noClientsFound: string - } - deleteApp: { - /** - * D​e​l​e​t​e​ ​a​p​p - */ - title: string - /** - * D​o​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​d​e​l​e​t​e​ ​{​a​p​p​N​a​m​e​}​ ​a​p​p​ ​? - * @param {string} appName - */ - message: RequiredParams<'appName'> - /** - * D​e​l​e​t​e​ ​a​p​p - */ - submit: string - messages: { - /** - * A​p​p​ ​d​e​l​e​t​e​d​. - */ - success: string - } - } - enableApp: { - messages: { - /** - * A​p​p​ ​e​n​a​b​l​e​d​. - */ - success: string - } - } - disableApp: { - messages: { - /** - * A​p​p​ ​d​i​s​a​b​l​e​d​. - */ - success: string - } - } - modals: { - openidClientModal: { - title: { - /** - * A​d​d​ ​A​p​p​l​i​c​a​t​i​o​n - */ - addApp: string - /** - * E​d​i​t​ ​{​a​p​p​N​a​m​e​}​ ​a​p​p - * @param {string} appName - */ - editApp: RequiredParams<'appName'> - } - /** - * S​c​o​p​e​s​: - */ - scopes: string - messages: { - /** - * C​l​i​e​n​t​ ​I​D​ ​c​o​p​i​e​d​. - */ - clientIdCopy: string - /** - * C​l​i​e​n​t​ ​s​e​c​r​e​t​ ​c​o​p​i​e​d​. - */ - clientSecretCopy: string - } - form: { - messages: { - /** - * A​p​p​ ​c​r​e​a​t​e​d​. - */ - successAdd: string - /** - * A​p​p​ ​m​o​d​i​f​i​e​d​. - */ - successModify: string - } - error: { - /** - * U​R​L​ ​i​s​ ​r​e​q​u​i​r​e​d​. - */ - urlRequired: string - /** - * M​u​s​t​ ​b​e​ ​a​ ​v​a​l​i​d​ ​U​R​L​. - */ - validUrl: string - /** - * M​u​s​t​ ​h​a​v​e​ ​a​t​ ​l​e​a​s​t​ ​o​n​e​ ​s​c​o​p​e​. - */ - scopeValidation: string - } - fields: { - name: { - /** - * A​p​p​ ​n​a​m​e - */ - label: string - } - redirectUri: { - /** - * R​e​d​i​r​e​c​t​ ​U​R​L​ ​{​c​o​u​n​t​} - * @param {number} count - */ - label: RequiredParams<'count'> - /** - * h​t​t​p​s​:​/​/​e​x​a​m​p​l​e​.​c​o​m​/​r​e​d​i​r​e​c​t - */ - placeholder: string - } - openid: { - /** - * O​p​e​n​I​D - */ - label: string - } - profile: { - /** - * P​r​o​f​i​l​e - */ - label: string - } - email: { - /** - * E​m​a​i​l - */ - label: string - } - phone: { - /** - * P​h​o​n​e - */ - label: string - } - groups: { - /** - * G​r​o​u​p​s - */ - label: string - } - } - controls: { - /** - * A​d​d​ ​U​R​L - */ - addUrl: string - } - } - /** - * C​l​i​e​n​t​ ​I​D - */ - clientId: string - /** - * C​l​i​e​n​t​ ​s​e​c​r​e​t - */ - clientSecret: string - } - } - } - webhooksOverview: { - /** - * W​e​b​h​o​o​k​s - */ - pageTitle: string - search: { - /** - * F​i​n​d​ ​w​e​b​h​o​o​k​s​ ​b​y​ ​u​r​l - */ - placeholder: string - } - filterLabels: { - /** - * A​l​l​ ​w​e​b​h​o​o​k​s - */ - all: string - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - } - /** - * A​l​l​ ​w​e​b​h​o​o​k​s - */ - webhooksCount: string - /** - * A​d​d​ ​n​e​w - */ - addNewWebhook: string - /** - * N​o​ ​w​e​b​h​o​o​k​s​ ​f​o​u​n​d​. - */ - noWebhooksFound: string - list: { - headers: { - /** - * N​a​m​e - */ - name: string - /** - * D​e​s​c​r​i​p​t​i​o​n - */ - description: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * A​c​t​i​o​n​s - */ - actions: string - } - editButton: { - /** - * E​d​i​t - */ - edit: string - /** - * D​e​l​e​t​e​ ​w​e​b​h​o​o​k - */ - 'delete': string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * E​n​a​b​l​e - */ - enable: string - } - status: { - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - } - } - } - provisionersOverview: { - /** - * P​r​o​v​i​s​i​o​n​e​r​s - */ - pageTitle: string - search: { - /** - * F​i​n​d​ ​p​r​o​v​i​s​i​o​n​e​r​s - */ - placeholder: string - } - filterLabels: { - /** - * A​l​l - */ - all: string - /** - * A​v​a​i​l​a​b​l​e - */ - available: string - /** - * U​n​a​v​a​i​l​a​b​l​e - */ - unavailable: string - } - /** - * A​l​l​ ​p​r​o​v​i​s​i​o​n​e​r​s - */ - provisionersCount: string - /** - * N​o​ ​p​r​o​v​i​s​i​o​n​e​r​s​ ​f​o​u​n​d​. - */ - noProvisionersFound: string - /** - * Y​o​u​ ​d​o​n​'​t​ ​h​a​v​e​ ​a​ ​l​i​c​e​n​s​e​ ​f​o​r​ ​t​h​i​s​ ​f​e​a​t​u​r​e​. - */ - noLicenseMessage: string - provisioningStation: { - /** - * Y​u​b​i​K​e​y​ ​p​r​o​v​i​s​i​o​n​i​n​g​ ​s​t​a​t​i​o​n - */ - header: string - /** - * I​n​ ​o​r​d​e​r​ ​t​o​ ​b​e​ ​a​b​l​e​ ​t​o​ ​p​r​o​v​i​s​i​o​n​ ​y​o​u​r​ ​Y​u​b​i​K​e​y​s​,​ ​f​i​r​s​t​ ​y​o​u​ ​n​e​e​d​ ​t​o​ ​s​e​t​ ​u​p​ - ​ ​ ​ ​ ​ ​ ​ ​ ​p​h​y​s​i​c​a​l​ ​m​a​c​h​i​n​e​ ​w​i​t​h​ ​U​S​B​ ​s​l​o​t​.​ ​R​u​n​ ​p​r​o​v​i​d​e​d​ ​c​o​m​m​a​n​d​ ​o​n​ ​y​o​u​r​ ​c​h​o​s​e​n​ - ​ ​ ​ ​ ​ ​ ​ ​ ​m​a​c​h​i​n​e​ ​t​o​ ​r​e​g​i​s​t​e​r​ ​i​t​ ​a​n​d​ ​s​t​a​r​t​ ​p​r​o​v​i​s​i​o​n​i​n​g​ ​y​o​u​r​ ​k​e​y​s​. - */ - content: string - dockerCard: { - /** - * P​r​o​v​i​s​i​o​n​i​n​g​ ​s​t​a​t​i​o​n​ ​d​o​c​k​e​r​ ​s​e​t​u​p​ ​c​o​m​m​a​n​d - */ - title: string - } - tokenCard: { - /** - * A​c​c​e​s​s​ ​t​o​k​e​n - */ - title: string - } - } - list: { - headers: { - /** - * N​a​m​e - */ - name: string - /** - * I​P​ ​a​d​d​r​e​s​s - */ - ip: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * A​c​t​i​o​n​s - */ - actions: string - } - editButton: { - /** - * D​e​l​e​t​e​ ​p​r​o​v​i​s​i​o​n​e​r - */ - 'delete': string - } - status: { - /** - * A​v​a​i​l​a​b​l​e - */ - available: string - /** - * U​n​a​v​a​i​l​a​b​l​e - */ - unavailable: string - } - } - messages: { - copy: { - /** - * T​o​k​e​n​ ​c​o​p​i​e​d - */ - token: string - /** - * C​o​m​m​a​n​d​ ​c​o​p​i​e​d - */ - command: string - } - } - } - openidAllow: { - /** - * {​n​a​m​e​}​ ​w​o​u​l​d​ ​l​i​k​e​ ​t​o​: - * @param {string} name - */ - header: RequiredParams<'name'> - scopes: { - /** - * U​s​e​ ​y​o​u​r​ ​p​r​o​f​i​l​e​ ​d​a​t​a​ ​f​o​r​ ​f​u​t​u​r​e​ ​l​o​g​i​n​s​. - */ - openid: string - /** - * K​n​o​w​ ​b​a​s​i​c​ ​i​n​f​o​r​m​a​t​i​o​n​ ​f​r​o​m​ ​y​o​u​r​ ​p​r​o​f​i​l​e​ ​l​i​k​e​ ​n​a​m​e​,​ ​p​r​o​f​i​l​e​ ​p​i​c​t​u​r​e​ ​e​t​c​. - */ - profile: string - /** - * K​n​o​w​ ​y​o​u​r​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s​. - */ - email: string - /** - * K​n​o​w​ ​y​o​u​r​ ​p​h​o​n​e​ ​n​u​m​b​e​r​. - */ - phone: string - /** - * K​n​o​w​ ​y​o​u​r​ ​g​r​o​u​p​s​ ​m​e​m​b​e​r​s​h​i​p​. - */ - groups: string - } - controls: { - /** - * A​c​c​e​p​t - */ - accept: string - /** - * C​a​n​c​e​l - */ - cancel: string - } - } - networkOverview: { - networkSelection: { - /** - * A​l​l​ ​l​o​c​a​t​i​o​n​s​ ​s​u​m​m​a​r​y - */ - all: string - /** - * S​e​l​e​c​t​ ​l​o​c​a​t​i​o​n - */ - placeholder: string - } - /** - * {​v​a​l​u​e​}​h​ ​p​e​r​i​o​d - * @param {number} value - */ - timeRangeSelectionLabel: RequiredParams<'value'> - /** - * L​o​c​a​t​i​o​n​ ​o​v​e​r​v​i​e​w - */ - pageTitle: string - controls: { - /** - * E​d​i​t​ ​L​o​c​a​t​i​o​n​s​ ​s​e​t​t​i​n​g​s - */ - editNetworks: string - selectNetwork: { - /** - * L​o​a​d​i​n​g​ ​l​o​c​a​t​i​o​n​s - */ - placeholder: string - } - } - filterLabels: { - /** - * G​r​i​d​ ​v​i​e​w - */ - grid: string - /** - * L​i​s​t​ ​v​i​e​w - */ - list: string - } - gatewayStatus: { - /** - * A​l​l​ ​(​{​c​o​u​n​t​}​)​ ​C​o​n​n​e​c​t​e​d - * @param {number} count - */ - all: RequiredParams<'count'> - /** - * S​o​m​e​ ​(​{​c​o​u​n​t​}​)​ ​C​o​n​n​e​c​t​e​d - * @param {number} count - */ - some: RequiredParams<'count'> - /** - * N​o​n​e​ ​c​o​n​n​e​c​t​e​d - */ - none: string - } - stats: { - /** - * C​u​r​r​e​n​t​l​y​ ​a​c​t​i​v​e​ ​u​s​e​r​s - */ - currentlyActiveUsers: string - /** - * C​u​r​r​e​n​t​l​y​ ​a​c​t​i​v​e​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e​s - */ - currentlyActiveNetworkDevices: string - /** - * T​o​t​a​l​ ​u​s​e​r​ ​d​e​v​i​c​e​s​:​ ​{​c​o​u​n​t​} - * @param {number} count - */ - totalUserDevices: RequiredParams<'count'> - /** - * A​c​t​i​v​e​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e​s​ ​i​n​ ​{​h​o​u​r​}​h - * @param {number} hour - */ - activeNetworkDevices: RequiredParams<'hour'> - /** - * A​c​t​i​v​e​ ​u​s​e​r​s​ ​i​n​ ​{​h​o​u​r​}​h - * @param {number} hour - */ - activeUsersFilter: RequiredParams<'hour'> - /** - * A​c​t​i​v​e​ ​d​e​v​i​c​e​s​ ​i​n​ ​{​h​o​u​r​}​h - * @param {number} hour - */ - activeDevicesFilter: RequiredParams<'hour'> - /** - * A​c​t​i​v​i​t​y​ ​i​n​ ​{​h​o​u​r​}​H - * @param {number} hour - */ - activityIn: RequiredParams<'hour'> - /** - * N​e​t​w​o​r​k​ ​u​s​a​g​e - */ - networkUsage: string - /** - * P​e​a​k - */ - peak: string - /** - * I​n​: - */ - 'in': string - /** - * O​u​t​: - */ - out: string - /** - * G​a​t​e​w​a​y​ ​d​i​s​c​o​n​n​e​c​t​e​d - */ - gatewayDisconnected: string - } - cardsLabels: { - /** - * C​o​n​n​e​c​t​e​d​ ​U​s​e​r​s - */ - users: string - /** - * C​o​n​n​e​c​t​e​d​ ​N​e​t​w​o​r​k​ ​D​e​v​i​c​e​s - */ - devices: string - } - } - connectedUsersOverview: { - /** - * C​o​n​n​e​c​t​e​d​ ​u​s​e​r​s - */ - pageTitle: string - /** - * C​u​r​r​e​n​t​l​y​ ​t​h​e​r​e​ ​a​r​e​ ​n​o​ ​c​o​n​n​e​c​t​e​d​ ​u​s​e​r​s - */ - noUsersMessage: string - userList: { - /** - * U​s​e​r​n​a​m​e - */ - username: string - /** - * D​e​v​i​c​e - */ - device: string - /** - * C​o​n​n​e​c​t​e​d - */ - connected: string - /** - * D​e​v​i​c​e​ ​l​o​c​a​t​i​o​n - */ - deviceLocation: string - /** - * N​e​t​w​o​r​k​ ​u​s​a​g​e - */ - networkUsage: string - } - } - networkPage: { - /** - * E​d​i​t​ ​L​o​c​a​t​i​o​n - */ - pageTitle: string - /** - * +​ ​A​d​d​ ​n​e​w​ ​l​o​c​a​t​i​o​n - */ - addNetwork: string - controls: { - networkSelect: { - /** - * L​o​c​a​t​i​o​n​ ​c​h​o​i​c​e - */ - label: string - } - } - } - activityOverview: { - /** - * A​c​t​i​v​i​t​y​ ​s​t​r​e​a​m - */ - header: string - /** - * C​u​r​r​e​n​t​l​y​ ​t​h​e​r​e​ ​i​s​ ​n​o​ ​a​c​t​i​v​i​t​y​ ​d​e​t​e​c​t​e​d - */ - noData: string - } - networkConfiguration: { - messages: { - 'delete': { - /** - * N​e​t​w​o​r​k​ ​d​e​l​e​t​e​d - */ - success: string - /** - * F​a​i​l​e​d​ ​t​o​ ​d​e​l​e​t​e​ ​n​e​t​w​o​r​k - */ - error: string - } - } - /** - * L​o​c​a​t​i​o​n​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - header: string - /** - * L​o​c​a​t​i​o​n​ ​i​m​p​o​r​t - */ - importHeader: string - form: { - helpers: { - /** - * B​a​s​e​d​ ​o​n​ ​t​h​i​s​ ​a​d​d​r​e​s​s​ ​V​P​N​ ​n​e​t​w​o​r​k​ ​a​d​d​r​e​s​s​ ​w​i​l​l​ ​b​e​ ​d​e​f​i​n​e​d​,​ ​e​g​.​ ​1​0​.​1​0​.​1​0​.​1​/​2​4​ ​(​a​n​d​ ​V​P​N​ ​n​e​t​w​o​r​k​ ​w​i​l​l​ ​b​e​:​ ​1​0​.​1​0​.​1​0​.​0​/​2​4​)​.​ ​Y​o​u​ ​c​a​n​ ​o​p​t​i​o​n​a​l​l​y​ ​s​p​e​c​i​f​y​ ​m​u​l​t​i​p​l​e​ ​a​d​d​r​e​s​s​e​s​ ​s​e​p​a​r​a​t​e​d​ ​b​y​ ​a​ ​c​o​m​m​a​.​ ​T​h​e​ ​f​i​r​s​t​ ​a​d​d​r​e​s​s​ ​i​s​ ​t​h​e​ ​p​r​i​m​a​r​y​ ​a​d​d​r​e​s​s​,​ ​a​n​d​ ​t​h​i​s​ ​o​n​e​ ​w​i​l​l​ ​b​e​ ​u​s​e​d​ ​f​o​r​ ​I​P​ ​a​d​d​r​e​s​s​ ​a​s​s​i​g​n​m​e​n​t​ ​f​o​r​ ​d​e​v​i​c​e​s​.​ ​T​h​e​ ​o​t​h​e​r​ ​I​P​ ​a​d​d​r​e​s​s​e​s​ ​a​r​e​ ​a​u​x​i​l​i​a​r​y​ ​a​n​d​ ​a​r​e​ ​n​o​t​ ​m​a​n​a​g​e​d​ ​b​y​ ​D​e​f​g​u​a​r​d​. - */ - address: string - /** - * P​u​b​l​i​c​ ​I​P​ ​a​d​d​r​e​s​s​ ​o​r​ ​d​o​m​a​i​n​ ​n​a​m​e​ ​t​o​ ​w​h​i​c​h​ ​t​h​e​ ​r​e​m​o​t​e​ ​p​e​e​r​s​/​u​s​e​r​s​ ​w​i​l​l​ ​c​o​n​n​e​c​t​ ​t​o​.​ ​T​h​i​s​ ​a​d​d​r​e​s​s​ ​w​i​l​l​ ​b​e​ ​u​s​e​d​ ​i​n​ ​t​h​e​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​f​o​r​ ​t​h​e​ ​c​l​i​e​n​t​s​,​ ​b​u​t​ ​D​e​f​g​u​a​r​d​ ​G​a​t​e​w​a​y​s​ ​d​o​ ​n​o​t​ ​b​i​n​d​ ​t​o​ ​t​h​i​s​ ​a​d​d​r​e​s​s​. - */ - endpoint: string - /** - * G​a​t​e​w​a​y​ ​p​u​b​l​i​c​ ​a​d​d​r​e​s​s​,​ ​u​s​e​d​ ​b​y​ ​V​P​N​ ​u​s​e​r​s​ ​t​o​ ​c​o​n​n​e​c​t - */ - gateway: string - /** - * S​p​e​c​i​f​y​ ​t​h​e​ ​D​N​S​ ​r​e​s​o​l​v​e​r​s​ ​t​o​ ​q​u​e​r​y​ ​w​h​e​n​ ​t​h​e​ ​w​i​r​e​g​u​a​r​d​ ​i​n​t​e​r​f​a​c​e​ ​i​s​ ​u​p​. - */ - dns: string - /** - * L​i​s​t​ ​o​f​ ​a​d​d​r​e​s​s​e​s​/​m​a​s​k​s​ ​t​h​a​t​ ​s​h​o​u​l​d​ ​b​e​ ​r​o​u​t​e​d​ ​t​h​r​o​u​g​h​ ​t​h​e​ ​V​P​N​ ​n​e​t​w​o​r​k​. - */ - allowedIps: string - /** - * B​y​ ​d​e​f​a​u​l​t​,​ ​a​l​l​ ​u​s​e​r​s​ ​w​i​l​l​ ​b​e​ ​a​l​l​o​w​e​d​ ​t​o​ ​c​o​n​n​e​c​t​ ​t​o​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​.​ ​I​f​ ​y​o​u​ ​w​a​n​t​ ​t​o​ ​r​e​s​t​r​i​c​t​ ​a​c​c​e​s​s​ ​t​o​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​ ​t​o​ ​a​ ​s​p​e​c​i​f​i​c​ ​g​r​o​u​p​,​ ​p​l​e​a​s​e​ ​s​e​l​e​c​t​ ​i​t​ ​b​e​l​o​w​. - */ - allowedGroups: string - /** - * A​C​L​ ​f​u​n​c​t​i​o​n​a​l​i​t​y​ ​i​s​ ​a​n​ ​e​n​t​e​r​p​r​i​s​e​ ​f​e​a​t​u​r​e​ ​a​n​d​ ​y​o​u​'​v​e​ ​e​x​c​e​e​d​e​d​ ​t​h​e​ ​u​s​e​r​,​ ​d​e​v​i​c​e​ ​o​r​ ​n​e​t​w​o​r​k​ ​l​i​m​i​t​s​ ​t​o​ ​u​s​e​ ​i​t​.​ ​I​n​ ​o​r​d​e​r​ ​t​o​ ​u​s​e​ ​t​h​i​s​ ​f​e​a​t​u​r​e​,​ ​p​u​r​c​h​a​s​e​ ​a​n​ ​e​n​t​e​r​p​r​i​s​e​ ​l​i​c​e​n​s​e​ ​o​r​ ​u​p​g​r​a​d​e​ ​y​o​u​r​ ​e​x​i​s​t​i​n​g​ ​o​n​e​. - */ - aclFeatureDisabled: string - /** - * C​l​i​e​n​t​s​ ​a​u​t​h​o​r​i​z​e​d​ ​w​i​t​h​ ​M​F​A​ ​w​i​l​l​ ​b​e​ ​d​i​s​c​o​n​n​e​c​t​e​d​ ​f​r​o​m​ ​t​h​e​ ​l​o​c​a​t​i​o​n​ ​o​n​c​e​ ​t​h​e​r​e​ ​h​a​s​ ​b​e​e​n​ ​n​o​ ​n​e​t​w​o​r​k​ ​a​c​t​i​v​i​t​y​ ​d​e​t​e​c​t​e​d​ ​b​e​t​w​e​e​n​ ​t​h​e​m​ ​a​n​d​ ​t​h​e​ ​V​P​N​ ​g​a​t​e​w​a​y​ ​f​o​r​ ​a​ ​l​e​n​g​t​h​ ​o​f​ ​t​i​m​e​ ​c​o​n​f​i​g​u​r​e​d​ ​b​e​l​o​w​. - */ - peerDisconnectThreshold: string - locationMfaMode: { - /** - * C​h​o​o​s​e​ ​h​o​w​ ​M​F​A​ ​i​s​ ​e​n​f​o​r​c​e​d​ ​w​h​e​n​ ​c​o​n​n​e​c​t​i​n​g​ ​t​o​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n​: - */ - description: string - /** - * I​n​t​e​r​n​a​l​ ​M​F​A​ ​-​ ​M​F​A​ ​i​s​ ​e​n​f​o​r​c​e​d​ ​u​s​i​n​g​ ​D​e​f​g​u​a​r​d​'​s​ ​b​u​i​l​t​-​i​n​ ​M​F​A​ ​(​e​.​g​.​ ​T​O​T​P​,​ ​W​e​b​A​u​t​h​n​)​ ​w​i​t​h​ ​i​n​t​e​r​n​a​l​ ​i​d​e​n​t​i​t​y - */ - internal: string - /** - * E​x​t​e​r​n​a​l​ ​M​F​A​ ​-​ ​I​f​ ​c​o​n​f​i​g​u​r​e​d​ ​(​s​e​e​ ​[​O​p​e​n​I​D​ ​s​e​t​t​i​n​g​s​]​(​s​e​t​t​i​n​g​s​)​)​ ​t​h​i​s​ ​o​p​t​i​o​n​ ​u​s​e​s​ ​e​x​t​e​r​n​a​l​ ​i​d​e​n​t​i​t​y​ ​p​r​o​v​i​d​e​r​ ​f​o​r​ ​M​F​A - */ - external: string - } - } - sections: { - accessControl: { - /** - * A​c​c​e​s​s​ ​C​o​n​t​r​o​l​ ​&​ ​F​i​r​e​w​a​l​l - */ - header: string - } - mfa: { - /** - * M​u​l​t​i​-​F​a​c​t​o​r​ ​A​u​t​h​e​n​t​i​c​a​t​i​o​n - */ - header: string - } - } - messages: { - /** - * L​o​c​a​t​i​o​n​ ​m​o​d​i​f​i​e​d​. - */ - networkModified: string - /** - * L​o​c​a​t​i​o​n​ ​c​r​e​a​t​e​d - */ - networkCreated: string - } - fields: { - name: { - /** - * L​o​c​a​t​i​o​n​ ​n​a​m​e - */ - label: string - } - address: { - /** - * G​a​t​e​w​a​y​ ​V​P​N​ ​I​P​ ​a​d​d​r​e​s​s​ ​a​n​d​ ​n​e​t​m​a​s​k - */ - label: string - } - endpoint: { - /** - * G​a​t​e​w​a​y​ ​I​P​ ​a​d​d​r​e​s​s​ ​o​r​ ​d​o​m​a​i​n​ ​n​a​m​e - */ - label: string - } - allowedIps: { - /** - * A​l​l​o​w​e​d​ ​I​p​s - */ - label: string - } - port: { - /** - * G​a​t​e​w​a​y​ ​p​o​r​t - */ - label: string - } - dns: { - /** - * D​N​S - */ - label: string - } - allowedGroups: { - /** - * A​l​l​o​w​e​d​ ​g​r​o​u​p​s - */ - label: string - /** - * A​l​l​ ​g​r​o​u​p​s - */ - placeholder: string - } - keepalive_interval: { - /** - * K​e​e​p​a​l​i​v​e​ ​i​n​t​e​r​v​a​l​ ​[​s​e​c​o​n​d​s​] - */ - label: string - } - peer_disconnect_threshold: { - /** - * C​l​i​e​n​t​ ​d​i​s​c​o​n​n​e​c​t​ ​t​h​r​e​s​h​o​l​d​ ​[​s​e​c​o​n​d​s​] - */ - label: string - } - acl_enabled: { - /** - * E​n​a​b​l​e​ ​A​C​L​ ​f​o​r​ ​t​h​i​s​ ​l​o​c​a​t​i​o​n - */ - label: string - } - acl_default_allow: { - /** - * D​e​f​a​u​l​t​ ​A​C​L​ ​p​o​l​i​c​y - */ - label: string - } - location_mfa_mode: { - /** - * M​F​A​ ​r​e​q​u​i​r​e​m​e​n​t - */ - label: string - } - } - controls: { - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - submit: string - /** - * B​a​c​k​ ​t​o​ ​O​v​e​r​v​i​e​w - */ - cancel: string - /** - * R​e​m​o​v​e​ ​l​o​c​a​t​i​o​n - */ - 'delete': string - } - } - } - gatewaySetup: { - header: { - /** - * G​a​t​e​w​a​y​ ​s​e​r​v​e​r​ ​s​e​t​u​p - */ - main: string - /** - * D​o​c​k​e​r​ ​B​a​s​e​d​ ​G​a​t​e​w​a​y​ ​S​e​t​u​p - */ - dockerBasedGatewaySetup: string - /** - * F​r​o​m​ ​P​a​c​k​a​g​e - */ - fromPackage: string - /** - * O​n​e​ ​L​i​n​e​ ​I​n​s​t​a​l​l - */ - oneLineInstall: string - } - card: { - /** - * D​o​c​k​e​r​ ​b​a​s​e​d​ ​g​a​t​e​w​a​y​ ​s​e​t​u​p - */ - title: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​T​o​k​e​n - */ - authToken: string - } - button: { - /** - * A​v​a​i​l​a​b​l​e​ ​P​a​c​k​a​g​e​s - */ - availablePackages: string - } - controls: { - /** - * C​h​e​c​k​ ​c​o​n​n​e​c​t​i​o​n​ ​s​t​a​t​u​s - */ - status: string - } - messages: { - /** - * D​e​f​g​u​a​r​d​ ​r​e​q​u​i​r​e​s​ ​t​o​ ​d​e​p​l​o​y​ ​a​ ​g​a​t​e​w​a​y​ ​n​o​d​e​ ​t​o​ ​c​o​n​t​r​o​l​ ​w​i​r​e​g​u​a​r​d​ ​V​P​N​ ​o​n​ ​t​h​e​ ​v​p​n​ ​s​e​r​v​e​r​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​M​o​r​e​ ​d​e​t​a​i​l​s​ ​c​a​n​ ​b​e​ ​f​o​u​n​d​ ​i​n​ ​t​h​e​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​T​h​e​r​e​ ​a​r​e​ ​s​e​v​e​r​a​l​ ​w​a​y​s​ ​t​o​ ​d​e​p​l​o​y​ ​t​h​e​ ​g​a​t​e​w​a​y​ ​s​e​r​v​e​r​,​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​b​e​l​o​w​ ​i​s​ ​a​ ​D​o​c​k​e​r​ ​b​a​s​e​d​ ​e​x​a​m​p​l​e​,​ ​f​o​r​ ​o​t​h​e​r​ ​e​x​a​m​p​l​e​s​ ​p​l​e​a​s​e​ ​v​i​s​i​t​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​. - * @param {string} setupGatewayDocs - */ - runCommand: RequiredParams<'setupGatewayDocs' | 'setupGatewayDocs'> - /** - * P​l​e​a​s​e​ ​c​r​e​a​t​e​ ​t​h​e​ ​n​e​t​w​o​r​k​ ​b​e​f​o​r​e​ ​r​u​n​n​i​n​g​ ​t​h​e​ ​g​a​t​e​w​a​y​ ​p​r​o​c​e​s​s​. - */ - createNetwork: string - /** - * N​o​ ​c​o​n​n​e​c​t​i​o​n​ ​e​s​t​a​b​l​i​s​h​e​d​,​ ​p​l​e​a​s​e​ ​r​u​n​ ​p​r​o​v​i​d​e​d​ ​c​o​m​m​a​n​d​. - */ - noConnection: string - /** - * G​a​t​e​w​a​y​ ​c​o​n​n​e​c​t​e​d​. - */ - connected: string - /** - * F​a​i​l​e​d​ ​t​o​ ​g​e​t​ ​g​a​t​e​w​a​y​ ​s​t​a​t​u​s - */ - statusError: string - /** - * I​f​ ​y​o​u​ ​a​r​e​ ​d​o​i​n​g​ ​o​n​e​ ​l​i​n​e​ ​i​n​s​t​a​l​l​:​ ​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​g​e​t​t​i​n​g​-​s​t​a​r​t​e​d​/​o​n​e​-​l​i​n​e​-​i​n​s​t​a​l​l​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​y​o​u​ ​d​o​n​'​t​ ​n​e​e​d​ ​t​o​ ​d​o​ ​a​n​y​t​h​i​n​g​. - */ - oneLineInstall: string - /** - * I​n​s​t​a​l​l​ ​t​h​e​ ​p​a​c​k​a​g​e​ ​a​v​a​i​l​a​b​l​e​ ​a​t​ ​h​t​t​p​s​:​/​/​g​i​t​h​u​b​.​c​o​m​/​D​e​f​G​u​a​r​d​/​g​a​t​e​w​a​y​/​r​e​l​e​a​s​e​s​/​l​a​t​e​s​t​ ​a​n​d​ ​c​o​n​f​i​g​u​r​e​ ​`​/​e​t​c​/​d​e​f​g​u​a​r​d​/​g​a​t​e​w​a​y​.​t​o​m​l​`​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​a​c​c​o​r​d​i​n​g​ ​t​o​ ​t​h​e​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​. - * @param {string} setupGatewayDocs - */ - fromPackage: RequiredParams<'setupGatewayDocs'> - /** - * T​o​k​e​n​ ​b​e​l​o​w​ ​i​s​ ​r​e​q​u​i​r​e​d​ ​t​o​ ​a​u​t​h​e​n​t​i​c​a​t​e​ ​a​n​d​ ​c​o​n​f​i​g​u​r​e​ ​t​h​e​ ​g​a​t​e​w​a​y​ ​n​o​d​e​.​ ​E​n​s​u​r​e​ ​y​o​u​ ​k​e​e​p​ ​t​h​i​s​ ​t​o​k​e​n​ ​s​e​c​u​r​e​ ​a​n​d​ ​f​o​l​l​o​w​ ​t​h​e​ ​d​e​p​l​o​y​m​e​n​t​ ​i​n​s​t​r​u​c​t​i​o​n​s​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​p​r​o​v​i​d​e​d​ ​i​n​ ​t​h​e​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​ ​t​o​ ​s​u​c​c​e​s​s​f​u​l​l​y​ ​s​e​t​ ​u​p​ ​t​h​e​ ​g​a​t​e​w​a​y​ ​s​e​r​v​e​r​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​F​o​r​ ​m​o​r​e​ ​d​e​t​a​i​l​s​ ​a​n​d​ ​e​x​a​c​t​ ​s​t​e​p​s​,​ ​p​l​e​a​s​e​ ​r​e​f​e​r​ ​t​o​ ​t​h​e​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​. - * @param {string} setupGatewayDocs - */ - authToken: RequiredParams<'setupGatewayDocs' | 'setupGatewayDocs'> - /** - * B​e​l​o​w​ ​i​s​ ​a​ ​D​o​c​k​e​r​ ​b​a​s​e​d​ ​e​x​a​m​p​l​e​.​ ​F​o​r​ ​m​o​r​e​ ​d​e​t​a​i​l​s​ ​a​n​d​ ​e​x​a​c​t​ ​s​t​e​p​s​,​ ​p​l​e​a​s​e​ ​r​e​f​e​r​ ​t​o​ ​t​h​e​ ​[​d​o​c​u​m​e​n​t​a​t​i​o​n​]​(​{​s​e​t​u​p​G​a​t​e​w​a​y​D​o​c​s​}​)​. - * @param {string} setupGatewayDocs - */ - dockerBasedGatewaySetup: RequiredParams<'setupGatewayDocs'> - } - } - loginPage: { - /** - * E​n​t​e​r​ ​y​o​u​r​ ​c​r​e​d​e​n​t​i​a​l​s - */ - pageTitle: string - /** - * S​i​g​n​ ​i​n​ ​w​i​t​h - */ - oidcLogin: string - callback: { - /** - * G​o​ ​b​a​c​k​ ​t​o​ ​l​o​g​i​n - */ - 'return': string - /** - * A​n​ ​e​r​r​o​r​ ​o​c​c​u​r​r​e​d​ ​d​u​r​i​n​g​ ​e​x​t​e​r​n​a​l​ ​O​p​e​n​I​D​ ​l​o​g​i​n - */ - error: string - } - mfa: { - /** - * T​w​o​-​f​a​c​t​o​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n - */ - title: string - controls: { - /** - * U​s​e​ ​A​u​t​h​e​n​t​i​c​a​t​o​r​ ​a​p​p​ ​i​n​s​t​e​a​d - */ - useAuthenticator: string - /** - * U​s​e​ ​s​e​c​u​r​i​t​y​ ​k​e​y​ ​i​n​s​t​e​a​d - */ - useWebauthn: string - /** - * U​s​e​ ​r​e​c​o​v​e​r​y​ ​c​o​d​e​ ​i​n​s​t​e​a​d - */ - useRecoveryCode: string - /** - * U​s​e​ ​E​-​m​a​i​l​ ​i​n​s​t​e​a​d - */ - useEmail: string - } - email: { - /** - * U​s​e​ ​c​o​d​e​ ​w​e​ ​s​e​n​t​ ​t​o​ ​y​o​u​r​ ​e​-​m​a​i​l​ ​t​o​ ​p​r​o​c​e​e​d​. - */ - header: string - form: { - labels: { - /** - * C​o​d​e - */ - code: string - } - controls: { - /** - * R​e​s​e​n​d​ ​C​o​d​e - */ - resendCode: string - } - } - } - totp: { - /** - * U​s​e​ ​c​o​d​e​ ​f​r​o​m​ ​y​o​u​r​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​a​p​p​ ​a​n​d​ ​c​l​i​c​k​ ​b​u​t​t​o​n​ ​t​o​ ​p​r​o​c​e​e​d​. - */ - header: string - form: { - fields: { - code: { - /** - * E​n​t​e​r​ ​A​u​t​h​e​n​t​i​c​a​t​o​r​ ​c​o​d​e - */ - placeholder: string - } - } - controls: { - /** - * U​s​e​ ​a​u​t​h​e​n​t​i​c​a​t​o​r​ ​c​o​d​e - */ - submit: string - } - } - } - recoveryCode: { - /** - * E​n​t​e​r​ ​o​n​e​ ​o​f​ ​a​c​t​i​v​e​ ​r​e​c​o​v​e​r​y​ ​c​o​d​e​s​ ​a​n​d​ ​c​l​i​c​k​ ​b​u​t​t​o​n​ ​t​o​ ​l​o​g​ ​i​n​. - */ - header: string - form: { - fields: { - code: { - /** - * R​e​c​o​v​e​r​y​ ​c​o​d​e - */ - placeholder: string - } - } - controls: { - /** - * U​s​e​ ​r​e​c​o​v​e​r​y​ ​c​o​d​e - */ - submit: string - } - } - } - webauthn: { - /** - * W​h​e​n​ ​y​o​u​ ​a​r​e​ ​r​e​a​d​y​ ​t​o​ ​a​u​t​h​e​n​t​i​c​a​t​e​,​ ​p​r​e​s​s​ ​t​h​e​ ​b​u​t​t​o​n​ ​b​e​l​o​w​. - */ - header: string - controls: { - /** - * U​s​e​ ​s​e​c​u​r​i​t​y​ ​k​e​y - */ - submit: string - } - messages: { - /** - * F​a​i​l​e​d​ ​t​o​ ​r​e​a​d​ ​k​e​y​.​ ​P​l​e​a​s​e​ ​t​r​y​ ​a​g​a​i​n​. - */ - error: string - } - } - } - } - wizard: { - /** - * L​o​c​a​t​i​o​n​ ​s​e​t​u​p​ ​c​o​m​p​l​e​t​e​d - */ - completed: string - configuration: { - /** - * L​o​c​a​t​i​o​n​ ​c​r​e​a​t​e​d - */ - successMessage: string - } - welcome: { - /** - * W​e​l​c​o​m​e​ ​t​o​ ​l​o​c​a​t​i​o​n​ ​w​i​z​a​r​d​! - */ - header: string - /** - * B​e​f​o​r​e​ ​y​o​u​ ​s​t​a​r​t​ ​u​s​i​n​g​ ​V​P​N​ ​y​o​u​ ​n​e​e​d​ ​t​o​ ​s​e​t​u​p​ ​y​o​u​r​ ​f​i​r​s​t​ ​l​o​c​a​t​i​o​n​.​ ​W​h​e​n​ ​i​n​ ​d​o​u​b​t​ ​c​l​i​c​k​ ​o​n​ ​<​R​e​a​c​t​>​ ​i​c​o​n​. - */ - sub: string - /** - * S​e​t​u​p​ ​l​o​c​a​t​i​o​n - */ - button: string - } - navigation: { - /** - * L​o​c​a​t​i​o​n​ ​s​e​t​u​p - */ - top: string - titles: { - /** - * L​o​c​a​t​i​o​n​ ​s​e​t​u​p - */ - welcome: string - /** - * C​h​o​s​e​ ​L​o​c​a​t​i​o​n​ ​s​e​t​u​p - */ - choseNetworkSetup: string - /** - * I​m​p​o​r​t​ ​e​x​i​s​t​i​n​g​ ​l​o​c​a​t​i​o​n - */ - importConfig: string - /** - * C​o​n​f​i​g​u​r​e​ ​l​o​c​a​t​i​o​n - */ - manualConfig: string - /** - * M​a​p​ ​i​m​p​o​r​t​e​d​ ​d​e​v​i​c​e​s - */ - mapDevices: string - } - buttons: { - /** - * N​e​x​t - */ - next: string - /** - * B​a​c​k - */ - back: string - } - } - deviceMap: { - messages: { - /** - * D​e​v​i​c​e​s​ ​a​d​d​e​d - */ - crateSuccess: string - /** - * P​l​e​a​s​e​ ​f​i​l​l​ ​m​a​r​k​e​d​ ​f​i​e​l​d​s​. - */ - errorsInForm: string - } - list: { - headers: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - deviceName: string - /** - * I​P - */ - deviceIP: string - /** - * U​s​e​r - */ - user: string - } - } - } - wizardType: { - manual: { - /** - * M​a​n​u​a​l​ ​C​o​n​f​i​g​u​r​a​t​i​o​n - */ - title: string - /** - * M​a​n​u​a​l​ ​l​o​c​a​t​i​o​n​ ​c​o​n​f​i​g​u​r​a​t​i​o​n - */ - description: string - } - 'import': { - /** - * I​m​p​o​r​t​ ​F​r​o​m​ ​F​i​l​e - */ - title: string - /** - * I​m​p​o​r​t​ ​f​r​o​m​ ​W​i​r​e​G​u​a​r​d​ ​c​o​n​f​i​g​ ​f​i​l​e - */ - description: string - } - /** - * C​r​e​a​t​e​ ​l​o​c​a​t​i​o​n - */ - createNetwork: string - } - common: { - /** - * S​e​l​e​c​t - */ - select: string - } - locations: { - form: { - /** - * N​a​m​e - */ - name: string - /** - * I​P​ ​a​d​d​r​e​s​s - */ - ip: string - /** - * U​s​e​r - */ - user: string - /** - * F​i​l​e - */ - fileName: string - /** - * S​e​l​e​c​t​ ​f​i​l​e - */ - selectFile: string - messages: { - /** - * D​e​v​i​c​e​s​ ​c​r​e​a​t​e​d - */ - devicesCreated: string - } - validation: { - /** - * I​n​v​a​l​i​d​ ​a​d​d​r​e​s​s - */ - invalidAddress: string - } - } - } - } - layout: { - select: { - /** - * A​d​d​ ​n​e​w​ ​+ - */ - addNewOptionDefault: string - } - } - redirectPage: { - /** - * Y​o​u​ ​h​a​v​e​ ​b​e​e​n​ ​l​o​g​g​e​d​ ​i​n - */ - title: string - /** - * Y​o​u​ ​w​i​l​l​ ​b​e​ ​r​e​d​i​r​e​c​t​e​d​ ​i​n​ ​a​ ​m​o​m​e​n​t​.​.​. - */ - subtitle: string - } - enrollmentPage: { - /** - * E​n​r​o​l​l​m​e​n​t - */ - title: string - controls: { - /** - * R​e​s​t​o​r​e​ ​d​e​f​a​u​l​t - */ - 'default': string - /** - * S​a​v​e​ ​c​h​a​n​g​e​s - */ - save: string - } - messages: { - edit: { - /** - * S​e​t​t​i​n​g​s​ ​c​h​a​n​g​e​d - */ - success: string - /** - * S​a​v​e​ ​f​a​i​l​e​d - */ - error: string - } - } - /** - * E​n​r​o​l​l​m​e​n​t​ ​i​s​ ​a​ ​p​r​o​c​e​s​s​ ​b​y​ ​w​h​i​c​h​ ​a​ ​n​e​w​ ​e​m​p​l​o​y​e​e​ ​w​i​l​l​ ​b​e​ ​a​b​l​e​ ​t​o​ ​a​c​t​i​v​a​t​e​ ​t​h​e​i​r​ ​n​e​w​ ​a​c​c​o​u​n​t​,​ ​c​r​e​a​t​e​ ​a​ ​p​a​s​s​w​o​r​d​ ​a​n​d​ ​c​o​n​f​i​g​u​r​e​ ​a​ ​V​P​N​ ​d​e​v​i​c​e​.​ ​Y​o​u​ ​c​a​n​ ​c​u​s​t​o​m​i​z​e​ ​i​t​ ​h​e​r​e​. - */ - messageBox: string - settings: { - welcomeMessage: { - /** - * W​e​l​c​o​m​e​ ​m​e​s​s​a​g​e - */ - title: string - /** - * T​h​i​s​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​d​i​s​p​l​a​y​e​d​ ​f​o​r​ ​u​s​e​r​ ​i​n​ ​s​e​r​v​i​c​e​ ​o​n​c​e​ ​e​n​r​o​l​l​m​e​n​t​ ​i​s​ ​c​o​m​p​l​e​t​e​d​.​ ​W​e​ ​a​d​v​i​s​e​ ​t​o​ ​i​n​s​e​r​t​ ​l​i​n​k​s​ ​a​n​d​ ​e​x​p​l​a​i​n​ ​n​e​x​t​ ​s​t​e​p​s​ ​b​r​i​e​f​l​y​.​ ​Y​o​u​ ​c​a​n​ ​u​s​e​ ​s​a​m​e​ ​m​e​s​s​a​g​e​ ​a​s​ ​i​n​ ​t​h​e​ ​e​-​m​a​i​l​. - */ - messageBox: string - } - vpnOptionality: { - /** - * V​P​N​ ​s​e​t​ ​o​p​t​i​o​n​a​l​l​i​t​y - */ - title: string - select: { - options: { - /** - * O​p​t​i​o​n​a​l - */ - optional: string - /** - * M​a​n​d​a​t​o​r​y - */ - mandatory: string - } - } - } - welcomeEmail: { - /** - * W​e​l​c​o​m​e​ ​e​-​m​a​i​l - */ - title: string - subject: { - /** - * E​-​m​a​i​l​ ​s​u​b​j​e​c​t - */ - label: string - } - /** - * T​h​i​s​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​s​e​n​t​ ​t​o​ ​u​s​e​r​ ​o​n​c​e​ ​e​n​r​o​l​l​m​e​n​t​ ​i​s​ ​c​o​m​p​l​e​t​e​d​.​ ​W​e​ ​a​d​v​i​s​e​ ​t​o​ ​i​n​s​e​r​t​ ​l​i​n​k​s​ ​a​n​d​ ​e​x​p​l​a​i​n​ ​n​e​x​t​ ​s​t​e​p​s​ ​b​r​i​e​f​l​y​. - */ - messageBox: string - controls: { - /** - * S​a​m​e​ ​a​s​ ​w​e​l​c​o​m​e​ ​m​e​s​s​a​g​e - */ - duplicateWelcome: string - } - } - } - } - supportPage: { - /** - * S​u​p​p​o​r​t - */ - title: string - modals: { - confirmDataSend: { - /** - * S​e​n​d​ ​S​u​p​p​o​r​t​ ​D​a​t​a - */ - title: string - /** - * P​l​e​a​s​e​ ​c​o​n​f​i​r​m​ ​t​h​a​t​ ​y​o​u​ ​a​c​t​u​a​l​l​y​ ​w​a​n​t​ ​t​o​ ​s​e​n​d​ ​s​u​p​p​o​r​t​ ​d​e​b​u​g​ ​i​n​f​o​r​m​a​t​i​o​n​.​ ​N​o​n​e​ ​o​f​ ​y​o​u​r​ ​p​r​i​v​a​t​e​ ​i​n​f​o​r​m​a​t​i​o​n​ ​w​i​l​l​ ​b​e​ ​s​e​n​t​ ​(​w​i​r​e​g​u​a​r​d​ ​k​e​y​s​,​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s​e​s​,​ ​e​t​c​.​ ​w​i​l​l​ ​n​o​t​ ​b​e​ ​s​e​n​t​)​. - */ - subTitle: string - /** - * S​e​n​d​ ​s​u​p​p​o​r​t​ ​d​a​t​a - */ - submit: string - } - } - debugDataCard: { - /** - * S​u​p​p​o​r​t​ ​d​a​t​a - */ - title: string - /** - * - ​I​f​ ​y​o​u​ ​n​e​e​d​ ​a​s​s​i​s​t​a​n​c​e​ ​o​r​ ​y​o​u​ ​w​e​r​e​ ​a​s​k​e​d​ ​t​o​ ​g​e​n​e​r​a​t​e​ ​s​u​p​p​o​r​t​ ​d​a​t​a​ ​b​y​ ​o​u​r​ ​t​e​a​m​ ​(​f​o​r​ ​e​x​a​m​p​l​e​ ​o​n​ ​o​u​r​ ​M​a​t​r​i​x​ ​s​u​p​p​o​r​t​ ​c​h​a​n​n​e​l​:​ ​*​*​#​d​e​f​g​u​a​r​d​-​s​u​p​p​o​r​t​:​t​e​o​n​i​t​e​.​c​o​m​*​*​)​,​ ​y​o​u​ ​h​a​v​e​ ​t​w​o​ ​o​p​t​i​o​n​s​:​ - ​*​ ​E​i​t​h​e​r​ ​y​o​u​ ​c​a​n​ ​c​o​n​f​i​g​u​r​e​ ​S​M​T​P​ ​s​e​t​t​i​n​g​s​ ​a​n​d​ ​c​l​i​c​k​ ​"​S​e​n​d​ ​s​u​p​p​o​r​t​ ​d​a​t​a​"​ - ​*​ ​O​r​ ​c​l​i​c​k​ ​"​D​o​w​n​l​o​a​d​ ​s​u​p​p​o​r​t​ ​d​a​t​a​"​ ​a​n​d​ ​c​r​e​a​t​e​ ​a​ ​b​u​g​ ​r​e​p​o​r​t​ ​i​n​ ​o​u​r​ ​G​i​t​H​u​b​ ​a​t​t​a​c​h​i​n​g​ ​t​h​i​s​ ​f​i​l​e​.​ - - */ - body: string - /** - * D​o​w​n​l​o​a​d​ ​s​u​p​p​o​r​t​ ​d​a​t​a - */ - downloadSupportData: string - /** - * D​o​w​n​l​o​a​d​ ​l​o​g​s - */ - downloadLogs: string - /** - * S​e​n​d​ ​s​u​p​p​o​r​t​ ​d​a​t​a - */ - sendMail: string - /** - * E​m​a​i​l​ ​s​e​n​t - */ - mailSent: string - /** - * E​r​r​o​r​ ​s​e​n​d​i​n​g​ ​e​m​a​i​l - */ - mailError: string - } - supportCard: { - /** - * S​u​p​p​o​r​t - */ - title: string - /** - * - ​B​e​f​o​r​e​ ​c​o​n​t​a​c​t​i​n​g​ ​o​r​ ​s​u​b​m​i​t​t​i​n​g​ ​a​n​y​ ​i​s​s​u​e​s​ ​t​o​ ​G​i​t​H​u​b​ ​p​l​e​a​s​e​ ​g​e​t​ ​f​a​m​i​l​i​a​r​ ​w​i​t​h​ ​D​e​f​g​u​a​r​d​ ​d​o​c​u​m​e​n​t​a​t​i​o​n​ ​a​v​a​i​l​a​b​l​e​ ​a​t​ ​[​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​]​(​h​t​t​p​s​:​/​/​d​o​c​s​.​d​e​f​g​u​a​r​d​.​n​e​t​/​)​ - ​ - ​T​o​ ​s​u​b​m​i​t​:​ - ​*​ ​B​u​g​s​ ​-​ ​p​l​e​a​s​e​ ​g​o​ ​t​o​ ​[​G​i​t​H​u​b​]​(​h​t​t​p​s​:​/​/​g​i​t​h​u​b​.​c​o​m​/​D​e​f​G​u​a​r​d​/​d​e​f​g​u​a​r​d​/​i​s​s​u​e​s​/​n​e​w​?​a​s​s​i​g​n​e​e​s​=​&​l​a​b​e​l​s​=​b​u​g​&​t​e​m​p​l​a​t​e​=​b​u​g​_​r​e​p​o​r​t​.​m​d​&​t​i​t​l​e​=​)​ - ​*​ ​F​e​a​t​u​r​e​ ​r​e​q​u​e​s​t​ ​-​ ​p​l​e​a​s​e​ ​g​o​ ​t​o​ ​[​G​i​t​H​u​b​]​(​h​t​t​p​s​:​/​/​g​i​t​h​u​b​.​c​o​m​/​D​e​f​G​u​a​r​d​/​d​e​f​g​u​a​r​d​/​i​s​s​u​e​s​/​n​e​w​?​a​s​s​i​g​n​e​e​s​=​&​l​a​b​e​l​s​=​f​e​a​t​u​r​e​&​t​e​m​p​l​a​t​e​=​f​e​a​t​u​r​e​_​r​e​q​u​e​s​t​.​m​d​&​t​i​t​l​e​=​)​ - ​ - ​A​n​y​ ​o​t​h​e​r​ ​r​e​q​u​e​s​t​s​ ​y​o​u​ ​c​a​n​ ​r​e​a​c​h​ ​u​s​ ​a​t​:​ ​s​u​p​p​o​r​t​@​d​e​f​g​u​a​r​d​.​n​e​t​ - - */ - body: string - } - } - devicesPage: { - /** - * N​e​t​w​o​r​k​ ​D​e​v​i​c​e​s - */ - title: string - search: { - /** - * F​i​n​d - */ - placeholder: string - } - bar: { - /** - * A​l​l​ ​d​e​v​i​c​e​s - */ - itemsCount: string - filters: { - } - actions: { - /** - * A​d​d​ ​n​e​w - */ - addNewDevice: string - } - } - list: { - columns: { - labels: { - /** - * D​e​v​i​c​e​ ​N​a​m​e - */ - name: string - /** - * L​o​c​a​t​i​o​n - */ - location: string - /** - * I​P​ ​A​d​d​r​e​s​s​e​s - */ - assignedIps: string - /** - * D​e​s​c​r​i​p​t​i​o​n - */ - description: string - /** - * A​d​d​e​d​ ​B​y - */ - addedBy: string - /** - * A​d​d​ ​D​a​t​e - */ - addedAt: string - /** - * E​d​i​t - */ - edit: string - } - } - edit: { - actionLabels: { - /** - * V​i​e​w​ ​c​o​n​f​i​g - */ - config: string - /** - * G​e​n​e​r​a​t​e​ ​a​u​t​h​ ​t​o​k​e​n - */ - generateToken: string - } - } - } - } - acl: { - messageBoxes: { - aclAliasKind: { - component: { - /** - * C​o​m​p​o​n​e​n​t - */ - name: string - /** - * c​o​m​b​i​n​e​d​ ​w​i​t​h​ ​m​a​n​u​a​l​l​y​ ​c​o​n​f​i​g​u​r​e​d​ ​d​e​s​t​i​n​a​t​i​o​n​ ​f​i​e​l​d​s​ ​i​n​ ​A​C​L - */ - description: string - } - destination: { - /** - * D​e​s​t​i​n​a​t​i​o​n - */ - name: string - /** - * t​r​a​n​s​l​a​t​e​d​ ​i​n​t​o​ ​a​ ​s​e​p​a​r​a​t​e​ ​s​e​t​ ​o​f​ ​f​i​r​e​w​a​l​l​ ​r​u​l​e​s - */ - description: string - } - } - networkSelectionIndicatorsHelper: { - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​L​o​c​a​t​i​o​n​ ​a​c​c​e​s​s​ ​*​*​d​e​n​i​e​d​*​*​ ​b​y​ ​d​e​f​a​u​l​t​ ​–​ ​n​e​t​w​o​r​k​ ​t​r​a​f​f​i​c​ ​n​o​t​ ​e​x​p​l​i​c​i​t​l​y​ ​d​e​f​i​n​e​d​ ​b​y​ ​t​h​e​ ​r​u​l​e​s​ ​w​i​l​l​ ​b​e​ ​b​l​o​c​k​e​d​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - denied: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​L​o​c​a​t​i​o​n​ ​a​c​c​e​s​s​ ​*​*​a​l​l​o​w​e​d​*​*​ ​b​y​ ​d​e​f​a​u​l​t​ ​–​ ​n​e​t​w​o​r​k​ ​t​r​a​f​f​i​c​ ​n​o​t​ ​e​x​p​l​i​c​i​t​l​y​ ​d​e​f​i​n​e​d​ ​b​y​ ​t​h​e​ ​r​u​l​e​s​ ​w​i​l​l​ ​b​e​ ​p​a​s​s​e​d​.​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - allowed: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​L​o​c​a​t​i​o​n​ ​a​c​c​e​s​s​ ​u​n​m​a​n​a​g​e​d​ ​(​A​C​L​ ​d​i​s​a​b​l​e​d​)​ - ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ - */ - unmanaged: string - } - } - /** - * A​c​c​e​s​s​ ​C​o​n​t​r​o​l​ ​L​i​s​t - */ - sharedTitle: string - fieldsSelectionLabels: { - /** - * A​l​l​ ​p​o​r​t​s - */ - ports: string - /** - * A​l​l​ ​p​r​o​t​o​c​o​l​s - */ - protocols: string - } - ruleStatus: { - /** - * N​e​w - */ - 'new': string - /** - * A​p​p​l​i​e​d - */ - applied: string - /** - * P​e​n​d​i​n​g​ ​C​h​a​n​g​e - */ - modified: string - /** - * P​e​n​d​i​n​g​ ​D​e​l​e​t​i​o​n - */ - deleted: string - /** - * E​n​a​b​l​e - */ - enable: string - /** - * E​n​a​b​l​e​d - */ - enabled: string - /** - * D​i​s​a​b​l​e - */ - disable: string - /** - * D​i​s​a​b​l​e​d - */ - disabled: string - /** - * E​x​p​i​r​e​d - */ - expired: string - } - listPage: { - tabs: { - /** - * R​u​l​e​s - */ - rules: string - /** - * A​l​i​a​s​e​s - */ - aliases: string - } - message: { - /** - * C​h​a​n​g​e​ ​d​i​s​c​a​r​d​e​d - */ - changeDiscarded: string - /** - * P​e​n​d​i​n​g​ ​c​h​a​n​g​e​ ​a​d​d​e​d - */ - changeAdded: string - /** - * F​a​i​l​e​d​ ​t​o​ ​m​a​k​e​ ​c​h​a​n​g​e - */ - changeFail: string - /** - * P​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​a​p​p​l​i​e​d - */ - applyChanges: string - /** - * F​a​i​l​e​d​ ​t​o​ ​a​p​p​l​y​ ​c​h​a​n​g​e​s - */ - applyFail: string - } - rules: { - modals: { - applyConfirm: { - /** - * D​e​p​l​o​y​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s - */ - title: string - /** - * {​c​o​u​n​t​}​ ​c​h​a​n​g​e​s​ ​w​i​l​l​ ​b​e​ ​d​e​p​l​o​y​e​d - * @param {number} count - */ - subtitle: RequiredParams<'count'> - /** - * D​e​p​l​o​y​ ​c​h​a​n​g​e​s - */ - submit: string - } - filterGroupsModal: { - groupHeaders: { - /** - * A​l​i​a​s​e​s - */ - alias: string - /** - * L​o​c​a​t​i​o​n​s - */ - location: string - /** - * G​r​o​u​p​s - */ - groups: string - /** - * S​t​a​t​u​s - */ - status: string - } - /** - * S​a​v​e​ ​F​i​l​t​e​r - */ - submit: string - } - } - listControls: { - /** - * F​i​n​d​ ​n​a​m​e - */ - searchPlaceholder: string - /** - * A​d​d​ ​n​e​w - */ - addNew: string - filter: { - /** - * F​i​l​t​e​r - */ - nothingApplied: string - /** - * F​i​l​t​e​r​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - applied: RequiredParams<'count'> - } - apply: { - /** - * D​e​p​l​o​y​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s - */ - noChanges: string - /** - * D​e​p​l​o​y​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - all: RequiredParams<'count'> - /** - * D​e​p​l​o​y​ ​s​e​l​e​c​t​e​d​ ​c​h​a​n​g​e​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - selective: RequiredParams<'count'> - } - } - list: { - pendingList: { - /** - * P​e​n​d​i​n​g​ ​C​h​a​n​g​e​s - */ - title: string - /** - * N​o​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s - */ - noData: string - /** - * N​o​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​f​o​u​n​d - */ - noDataSearch: string - } - deployedList: { - /** - * D​e​p​l​o​y​e​d​ ​R​u​l​e​s - */ - title: string - /** - * N​o​ ​d​e​p​l​o​y​e​d​ ​r​u​l​e​s - */ - noData: string - /** - * N​o​ ​d​e​p​l​o​y​e​d​ ​r​u​l​e​s​ ​f​o​u​n​d - */ - noDataSearch: string - } - headers: { - /** - * R​u​l​e​ ​n​a​m​e - */ - name: string - /** - * I​D - */ - id: string - /** - * D​e​s​t​i​n​a​t​i​o​n - */ - destination: string - /** - * A​l​l​o​w​e​d - */ - allowed: string - /** - * D​e​n​i​e​d - */ - denied: string - /** - * L​o​c​a​t​i​o​n​s - */ - locations: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * E​d​i​t - */ - edit: string - } - tags: { - /** - * A​l​l - */ - all: string - /** - * A​l​l​ ​d​e​n​i​e​d - */ - allDenied: string - /** - * A​l​l​ ​a​l​l​o​w​e​d - */ - allAllowed: string - } - editMenu: { - /** - * D​i​s​c​a​r​d​ ​C​h​a​n​g​e​s - */ - discard: string - /** - * M​a​r​k​ ​f​o​r​ ​D​e​l​e​t​i​o​n - */ - 'delete': string - } - } - } - aliases: { - message: { - /** - * P​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​a​p​p​l​i​e​d - */ - rulesApply: string - /** - * F​a​i​l​e​d​ ​t​o​ ​a​p​p​l​y​ ​c​h​a​n​g​e​s - */ - rulesApplyFail: string - /** - * A​l​i​a​s​ ​d​e​l​e​t​e​d - */ - aliasDeleted: string - /** - * A​l​i​a​s​ ​d​e​l​e​t​i​o​n​ ​f​a​i​l​e​d - */ - aliasDeleteFail: string - } - modals: { - applyConfirm: { - /** - * C​o​n​f​i​r​m​ ​A​l​i​a​s​ ​D​e​p​l​o​y​m​e​n​t - */ - title: string - /** - * T​h​e​ ​u​p​d​a​t​e​d​ ​a​l​i​a​s​e​s​ ​w​i​l​l​ ​m​o​d​i​f​y​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​r​u​l​e​(​s​)​ ​c​u​r​r​e​n​t​l​y​ ​d​e​p​l​o​y​e​d​ ​o​n​ ​t​h​e​ ​g​a​t​e​w​a​y​.​ - ​P​l​e​a​s​e​ ​e​n​s​u​r​e​ ​t​h​e​s​e​ ​c​h​a​n​g​e​s​ ​a​r​e​ ​i​n​t​e​n​d​e​d​ ​b​e​f​o​r​e​ ​p​r​o​c​e​e​d​i​n​g​. - */ - message: string - /** - * A​f​f​e​c​t​e​d​ ​R​u​l​e​s - */ - listLabel: string - /** - * D​e​p​l​o​y​ ​C​h​a​n​g​e​s - */ - submit: string - } - deleteBlock: { - /** - * D​e​l​e​t​i​o​n​ ​b​l​o​c​k​e​d - */ - title: string - /** - * - ​T​h​i​s​ ​a​l​i​a​s​ ​i​s​ ​c​u​r​r​e​n​t​l​y​ ​i​n​ ​u​s​e​ ​b​y​ ​t​h​e​ ​f​o​l​l​o​w​i​n​g​ ​r​u​l​e​(​s​)​ ​a​n​d​ ​c​a​n​n​o​t​ ​b​e​ ​d​e​l​e​t​e​d​.​ ​T​o​ ​p​r​o​c​e​e​d​ ​w​i​t​h​ ​d​e​l​e​t​i​o​n​,​ ​y​o​u​ ​m​u​s​t​ ​f​i​r​s​t​ ​r​e​m​o​v​e​ ​i​t​ ​f​r​o​m​ ​t​h​e​s​e​ ​r​u​l​e​s​(​{​r​u​l​e​s​C​o​u​n​t​}​)​:​ - - * @param {number} rulesCount - */ - content: RequiredParams<'rulesCount'> - } - filterGroupsModal: { - groupLabels: { - /** - * R​u​l​e​s - */ - rules: string - /** - * S​t​a​t​u​s - */ - status: string - } - } - create: { - labels: { - /** - * A​l​i​a​s​ ​n​a​m​e - */ - name: string - /** - * A​l​i​a​s​ ​k​i​n​d - */ - kind: string - /** - * I​P​v​4​/​6​ ​C​I​D​R​ ​r​a​n​g​e​ ​a​d​d​r​e​s​s - */ - ip: string - /** - * P​o​r​t​s​ ​o​r​ ​P​o​r​t​ ​R​a​n​g​e​s - */ - ports: string - /** - * P​r​o​t​o​c​o​l​s - */ - protocols: string - } - placeholders: { - /** - * A​l​l​ ​P​r​o​t​o​c​o​l​s - */ - protocols: string - /** - * A​l​l​ ​P​o​r​t​s - */ - ports: string - /** - * A​l​l​ ​I​P​ ​a​d​d​r​e​s​s​e​s - */ - ip: string - } - kindOptions: { - /** - * D​e​s​t​i​n​a​t​i​o​n - */ - destination: string - /** - * C​o​m​p​o​n​e​n​t - */ - component: string - } - controls: { - /** - * C​a​n​c​e​l - */ - cancel: string - /** - * E​d​i​t​ ​A​l​i​a​s - */ - edit: string - /** - * C​r​e​a​t​e​ ​A​l​i​a​s - */ - create: string - } - messages: { - /** - * A​l​i​a​s​ ​m​o​d​i​f​i​e​d - */ - modified: string - /** - * A​l​i​a​s​ ​c​r​e​a​t​e​d - */ - created: string - } - } - } - listControls: { - /** - * F​i​n​d​ ​n​a​m​e - */ - searchPlaceholder: string - /** - * A​d​d​ ​n​e​w - */ - addNew: string - filter: { - /** - * F​i​l​t​e​r - */ - nothingApplied: string - /** - * F​i​l​t​e​r​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - applied: RequiredParams<'count'> - } - apply: { - /** - * D​e​p​l​o​y​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s - */ - noChanges: string - /** - * D​e​p​l​o​y​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - all: RequiredParams<'count'> - /** - * D​e​p​l​o​y​ ​s​e​l​e​c​t​e​d​ ​c​h​a​n​g​e​s​ ​(​{​c​o​u​n​t​}​) - * @param {number} count - */ - selective: RequiredParams<'count'> - } - } - list: { - pendingList: { - /** - * P​e​n​d​i​n​g​ ​C​h​a​n​g​e​s - */ - title: string - /** - * N​o​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s - */ - noData: string - /** - * N​o​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​ ​f​o​u​n​d - */ - noDataSearch: string - } - deployedList: { - /** - * D​e​p​l​o​y​e​d​ ​A​l​i​a​s​e​s - */ - title: string - /** - * N​o​ ​d​e​p​l​o​y​e​d​ ​a​l​i​a​s​e​s - */ - noData: string - /** - * N​o​ ​d​e​p​l​o​y​e​d​ ​a​l​i​a​s​e​s​ ​f​o​u​n​d - */ - noDataSearch: string - } - headers: { - /** - * I​D - */ - id: string - /** - * A​l​i​a​s​ ​n​a​m​e - */ - name: string - /** - * A​l​i​a​s​ ​k​i​n​d - */ - kind: string - /** - * I​P​v​4​/​6​ ​C​I​D​R​ ​r​a​n​g​e​ ​a​d​d​r​e​s​s - */ - ip: string - /** - * P​o​r​t​s - */ - ports: string - /** - * P​r​o​t​o​c​o​l​s - */ - protocols: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * E​d​i​t - */ - edit: string - /** - * R​u​l​e​s - */ - rules: string - } - status: { - /** - * A​p​p​l​i​e​d - */ - applied: string - /** - * M​o​d​i​f​i​e​d - */ - changed: string - } - tags: { - /** - * A​l​l​ ​d​e​n​i​e​d - */ - allDenied: string - /** - * A​l​l​ ​a​l​l​o​w​e​d - */ - allAllowed: string - } - editMenu: { - /** - * D​i​s​c​a​r​d​ ​c​h​a​n​g​e​s - */ - discardChanges: string - /** - * D​e​l​e​t​e​ ​a​l​i​a​s - */ - 'delete': string - } - } - } - } - createPage: { - formError: { - /** - * C​o​n​f​l​i​c​t​i​n​g​ ​m​e​m​b​e​r​s - */ - allowDenyConflict: string - /** - * M​u​s​t​ ​c​o​n​f​i​g​u​r​e​ ​s​o​m​e​ ​a​l​l​o​w​e​d​ ​u​s​e​r​s​,​ ​g​r​o​u​p​s​ ​o​r​ ​d​e​v​i​c​e​s - */ - allowNotConfigured: string - } - infoBox: { - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​S​p​e​c​i​f​y​ ​o​n​e​ ​o​r​ ​m​o​r​e​ ​f​i​e​l​d​s​ ​(​U​s​e​r​s​,​ ​G​r​o​u​p​s​ ​o​r​ ​D​e​v​i​c​e​s​)​ ​t​o​ ​d​e​f​i​n​e​ ​t​h​i​s​ ​r​u​l​e​.​ ​T​h​e​ ​r​u​l​e​ ​w​i​l​l​ ​c​o​n​s​i​d​e​r​ ​a​l​l​ ​i​n​p​u​t​s​ ​p​r​o​v​i​d​e​d​ ​f​o​r​ ​m​a​t​c​h​i​n​g​ ​c​o​n​d​i​t​i​o​n​s​.​ ​L​e​a​v​e​ ​a​n​y​ ​f​i​e​l​d​s​ ​b​l​a​n​k​ ​i​f​ ​n​o​t​ ​n​e​e​d​e​d​. - */ - allowInstructions: string - /** - * - ​ ​ ​ ​ ​ ​ ​ ​ ​S​p​e​c​i​f​y​ ​o​n​e​ ​o​r​ ​m​o​r​e​ ​f​i​e​l​d​s​ ​(​I​P​ ​A​d​d​r​e​s​s​e​s​ ​o​r​ ​P​o​r​t​s​)​ ​t​o​ ​d​e​f​i​n​e​ ​t​h​i​s​ ​r​u​l​e​.​ ​T​h​e​ ​r​u​l​e​ ​w​i​l​l​ ​c​o​n​s​i​d​e​r​ ​a​l​l​ ​i​n​p​u​t​s​ ​p​r​o​v​i​d​e​d​ ​f​o​r​ ​m​a​t​c​h​i​n​g​ ​c​o​n​d​i​t​i​o​n​s​.​ ​L​e​a​v​e​ ​a​n​y​ ​f​i​e​l​d​s​ ​b​l​a​n​k​ ​i​f​ ​n​o​t​ ​n​e​e​d​e​d​. - */ - destinationInstructions: string - } - message: { - /** - * R​u​l​e​ ​c​r​e​a​t​e​d​ ​a​n​d​ ​a​d​d​e​d​ ​t​o​ ​p​e​n​d​i​n​g​ ​c​h​a​n​g​e​s​. - */ - create: string - /** - * R​u​l​e​ ​c​r​e​a​t​i​o​n​ ​f​a​i​l​e​d - */ - createFail: string - } - headers: { - /** - * R​u​l​e - */ - rule: string - /** - * C​r​e​a​t​e​ ​R​u​l​e - */ - createRule: string - /** - * A​l​l​o​w​e​d​ ​U​s​e​r​s​/​G​r​o​u​p​s​/​D​e​v​i​c​e​s - */ - allowed: string - /** - * D​e​n​i​e​d​ ​U​s​e​r​s​/​G​r​o​u​p​s​/​D​e​v​i​c​e​s - */ - denied: string - /** - * D​e​s​t​i​n​a​t​i​o​n - */ - destination: string - } - labels: { - /** - * R​u​l​e​ ​n​a​m​e - */ - name: string - /** - * P​r​i​o​r​i​t​y - */ - priority: string - /** - * S​t​a​t​u​s - */ - status: string - /** - * L​o​c​a​t​i​o​n​s - */ - locations: string - /** - * A​l​l​o​w​ ​a​l​l​ ​u​s​e​r​s - */ - allowAllUsers: string - /** - * I​n​c​l​u​d​e​ ​a​l​l​ ​l​o​c​a​t​i​o​n​s - */ - allowAllNetworks: string - /** - * A​l​l​o​w​ ​a​l​l​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e​s - */ - allowAllNetworkDevices: string - /** - * D​e​n​y​ ​a​l​l​ ​u​s​e​r​s - */ - denyAllUsers: string - /** - * D​e​n​y​ ​a​l​l​ ​n​e​t​w​o​r​k​ ​d​e​v​i​c​e​s - */ - denyAllNetworkDevices: string - /** - * U​s​e​r​s - */ - users: string - /** - * G​r​o​u​p​s - */ - groups: string - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​s - */ - devices: string - /** - * P​r​o​t​o​c​o​l​s - */ - protocols: string - /** - * I​P​v​4​/​6​ ​C​I​D​R​ ​r​a​n​g​e​ ​o​r​ ​a​d​d​r​e​s​s - */ - manualIp: string - /** - * P​o​r​t​s - */ - ports: string - /** - * A​l​i​a​s​e​s - */ - aliases: string - /** - * E​x​p​i​r​a​t​i​o​n​ ​D​a​t​e - */ - expires: string - /** - * M​a​n​u​a​l​ ​I​n​p​u​t - */ - manualInput: string - } - placeholders: { - /** - * A​l​l​ ​p​r​o​t​o​c​o​l​s - */ - allProtocols: string - /** - * A​l​l​ ​I​P​ ​a​d​d​r​e​s​s​e​s - */ - allIps: string - } - } - } - activity: { - /** - * A​c​t​i​v​i​t​y​ ​l​o​g - */ - title: string - modals: { - timeRange: { - /** - * A​c​t​i​v​i​t​y​ ​t​i​m​e - */ - title: string - } - } - list: { - /** - * A​l​l​ ​a​c​t​i​v​i​t​y - */ - allLabel: string - headers: { - /** - * D​a​t​e - */ - date: string - /** - * U​s​e​r - */ - user: string - /** - * I​P - */ - ip: string - /** - * L​o​c​a​t​i​o​n - */ - location: string - /** - * E​v​e​n​t - */ - event: string - /** - * M​o​d​u​l​e - */ - module: string - /** - * D​e​v​i​c​e - */ - device: string - /** - * D​e​s​c​r​i​p​t​i​o​n - */ - description: string - } - noData: { - /** - * N​o​ ​a​c​t​i​v​i​t​i​e​s​ ​p​r​e​s​e​n​t - */ - data: string - /** - * N​o​ ​a​c​t​i​v​i​t​i​e​s​ ​f​o​u​n​d - */ - search: string - } - } - } - enums: { - activityLogEventType: { - /** - * U​s​e​r​ ​l​o​g​i​n - */ - user_login: string - /** - * U​s​e​r​ ​l​o​g​i​n​ ​f​a​i​l​e​d - */ - user_login_failed: string - /** - * U​s​e​r​ ​M​F​A​ ​l​o​g​i​n - */ - user_mfa_login: string - /** - * U​s​e​r​ ​M​F​A​ ​l​o​g​i​n​ ​f​a​i​l​e​d - */ - user_mfa_login_failed: string - /** - * R​e​c​o​v​e​r​y​ ​c​o​d​e​ ​u​s​e​d - */ - recovery_code_used: string - /** - * U​s​e​r​ ​l​o​g​o​u​t - */ - user_logout: string - /** - * U​s​e​r​ ​a​d​d​e​d - */ - user_added: string - /** - * U​s​e​r​ ​r​e​m​o​v​e​d - */ - user_removed: string - /** - * U​s​e​r​ ​m​o​d​i​f​i​e​d - */ - user_modified: string - /** - * U​s​e​r​ ​g​r​o​u​p​s​ ​m​o​d​i​f​i​e​d - */ - user_groups_modified: string - /** - * M​F​A​ ​e​n​a​b​l​e​d - */ - mfa_enabled: string - /** - * M​F​A​ ​d​i​s​a​b​l​e​d - */ - mfa_disabled: string - /** - * U​s​e​r​ ​M​F​A​ ​d​i​s​a​b​l​e​d - */ - user_mfa_disabled: string - /** - * M​F​A​ ​T​O​T​P​ ​e​n​a​b​l​e​d - */ - mfa_totp_enabled: string - /** - * M​F​A​ ​T​O​T​P​ ​d​i​s​a​b​l​e​d - */ - mfa_totp_disabled: string - /** - * M​F​A​ ​e​m​a​i​l​ ​e​n​a​b​l​e​d - */ - mfa_email_enabled: string - /** - * M​F​A​ ​e​m​a​i​l​ ​d​i​s​a​b​l​e​d - */ - mfa_email_disabled: string - /** - * M​F​A​ ​s​e​c​u​r​i​t​y​ ​k​e​y​ ​a​d​d​e​d - */ - mfa_security_key_added: string - /** - * M​F​A​ ​s​e​c​u​r​i​t​y​ ​k​e​y​ ​r​e​m​o​v​e​d - */ - mfa_security_key_removed: string - /** - * D​e​v​i​c​e​ ​a​d​d​e​d - */ - device_added: string - /** - * D​e​v​i​c​e​ ​r​e​m​o​v​e​d - */ - device_removed: string - /** - * D​e​v​i​c​e​ ​m​o​d​i​f​i​e​d - */ - device_modified: string - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​ ​a​d​d​e​d - */ - network_device_added: string - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​ ​r​e​m​o​v​e​d - */ - network_device_removed: string - /** - * N​e​t​w​o​r​k​ ​d​e​v​i​c​e​ ​m​o​d​i​f​i​e​d - */ - network_device_modified: string - /** - * A​c​t​i​v​i​t​y​ ​l​o​g​ ​s​t​r​e​a​m​ ​c​r​e​a​t​e​d - */ - activity_log_stream_created: string - /** - * A​c​t​i​v​i​t​y​ ​l​o​g​ ​s​t​r​e​a​m​ ​m​o​d​i​f​i​e​d - */ - activity_log_stream_modified: string - /** - * A​c​t​i​v​i​t​y​ ​l​o​g​ ​s​t​r​e​a​m​ ​r​e​m​o​v​e​d - */ - activity_log_stream_removed: string - /** - * V​P​N​ ​c​l​i​e​n​t​ ​c​o​n​n​e​c​t​e​d - */ - vpn_client_connected: string - /** - * V​P​N​ ​c​l​i​e​n​t​ ​d​i​s​c​o​n​n​e​c​t​e​d - */ - vpn_client_disconnected: string - /** - * V​P​N​ ​c​l​i​e​n​t​ ​c​o​n​n​e​c​t​e​d​ ​t​o​ ​M​F​A​ ​l​o​c​a​t​i​o​n - */ - vpn_client_connected_mfa: string - /** - * V​P​N​ ​c​l​i​e​n​t​ ​d​i​s​c​o​n​n​e​c​t​e​d​ ​f​r​o​m​ ​M​F​A​ ​l​o​c​a​t​i​o​n - */ - vpn_client_disconnected_mfa: string - /** - * V​P​N​ ​c​l​i​e​n​t​ ​f​a​i​l​e​d​ ​M​F​A​ ​a​u​t​h​e​n​t​i​c​a​t​i​o​n - */ - vpn_client_mfa_failed: string - /** - * E​n​r​o​l​l​m​e​n​t​ ​t​o​k​e​n​ ​a​d​d​e​d - */ - enrollment_token_added: string - /** - * E​n​r​o​l​l​m​e​n​t​ ​s​t​a​r​t​e​d - */ - enrollment_started: string - /** - * D​e​v​i​c​e​ ​a​d​d​e​d - */ - enrollment_device_added: string - /** - * E​n​r​o​l​l​m​e​n​t​ ​c​o​m​p​l​e​t​e​d - */ - enrollment_completed: string - /** - * P​a​s​s​w​o​r​d​ ​r​e​s​e​t​ ​r​e​q​u​e​s​t​e​d - */ - password_reset_requested: string - /** - * P​a​s​s​w​o​r​d​ ​r​e​s​e​t​ ​s​t​a​r​t​e​d - */ - password_reset_started: string - /** - * P​a​s​s​w​o​r​d​ ​r​e​s​e​t​ ​c​o​m​p​l​e​t​e​d - */ - password_reset_completed: string - /** - * V​P​N​ ​l​o​c​a​t​i​o​n​ ​a​d​d​e​d - */ - vpn_location_added: string - /** - * V​P​N​ ​l​o​c​a​t​i​o​n​ ​r​e​m​o​v​e​d - */ - vpn_location_removed: string - /** - * V​P​N​ ​l​o​c​a​t​i​o​n​ ​m​o​d​i​f​i​e​d - */ - vpn_location_modified: string - /** - * A​P​I​ ​t​o​k​e​n​ ​a​d​d​e​d - */ - api_token_added: string - /** - * A​P​I​ ​t​o​k​e​n​ ​r​e​m​o​v​e​d - */ - api_token_removed: string - /** - * A​P​I​ ​t​o​k​e​n​ ​r​e​n​a​m​e​d - */ - api_token_renamed: string - /** - * O​p​e​n​I​D​ ​a​p​p​ ​a​d​d​e​d - */ - open_id_app_added: string - /** - * O​p​e​n​I​D​ ​a​p​p​ ​r​e​m​o​v​e​d - */ - open_id_app_removed: string - /** - * O​p​e​n​I​D​ ​a​p​p​ ​m​o​d​i​f​i​e​d - */ - open_id_app_modified: string - /** - * O​p​e​n​I​D​ ​a​p​p​ ​s​t​a​t​e​ ​c​h​a​n​g​e​d - */ - open_id_app_state_changed: string - /** - * O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​ ​r​e​m​o​v​e​d - */ - open_id_provider_removed: string - /** - * O​p​e​n​I​D​ ​p​r​o​v​i​d​e​r​ ​m​o​d​i​f​i​e​d - */ - open_id_provider_modified: string - /** - * S​e​t​t​i​n​g​s​ ​u​p​d​a​t​e​d - */ - settings_updated: string - /** - * S​e​t​t​i​n​g​s​ ​p​a​r​t​i​a​l​l​y​ ​u​p​d​a​t​e​d - */ - settings_updated_partial: string - /** - * D​e​f​a​u​l​t​ ​b​r​a​n​d​i​n​g​ ​r​e​s​t​o​r​e​d - */ - settings_default_branding_restored: string - /** - * G​r​o​u​p​s​ ​b​u​l​k​ ​a​s​s​i​g​n​e​d - */ - groups_bulk_assigned: string - /** - * G​r​o​u​p​ ​a​d​d​e​d - */ - group_added: string - /** - * G​r​o​u​p​ ​m​o​d​i​f​i​e​d - */ - group_modified: string - /** - * G​r​o​u​p​ ​r​e​m​o​v​e​d - */ - group_removed: string - /** - * G​r​o​u​p​ ​m​e​m​b​e​r​ ​a​d​d​e​d - */ - group_member_added: string - /** - * G​r​o​u​p​ ​m​e​m​b​e​r​ ​r​e​m​o​v​e​d - */ - group_member_removed: string - /** - * G​r​o​u​p​ ​m​e​m​b​e​r​s​ ​m​o​d​i​f​i​e​d - */ - group_members_modified: string - /** - * W​e​b​h​o​o​k​ ​a​d​d​e​d - */ - web_hook_added: string - /** - * W​e​b​h​o​o​k​ ​m​o​d​i​f​i​e​d - */ - web_hook_modified: string - /** - * W​e​b​h​o​o​k​ ​r​e​m​o​v​e​d - */ - web_hook_removed: string - /** - * W​e​b​h​o​o​k​ ​s​t​a​t​e​ ​c​h​a​n​g​e​d - */ - web_hook_state_changed: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​k​e​y​ ​a​d​d​e​d - */ - authentication_key_added: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​k​e​y​ ​r​e​m​o​v​e​d - */ - authentication_key_removed: string - /** - * A​u​t​h​e​n​t​i​c​a​t​i​o​n​ ​k​e​y​ ​r​e​n​a​m​e​d - */ - authentication_key_renamed: string - /** - * P​a​s​s​w​o​r​d​ ​c​h​a​n​g​e​d - */ - password_changed: string - /** - * P​a​s​s​w​o​r​d​ ​c​h​a​n​g​e​d​ ​b​y​ ​a​d​m​i​n - */ - password_changed_by_admin: string - /** - * P​a​s​s​w​o​r​d​ ​r​e​s​e​t - */ - password_reset: string - /** - * C​l​i​e​n​t​ ​c​o​n​f​i​g​u​r​a​t​i​o​n​ ​t​o​k​e​n​ ​a​d​d​e​d - */ - client_configuration_token_added: string - /** - * U​s​e​r​ ​S​N​A​T​ ​b​i​n​d​i​n​g​ ​a​d​d​e​d - */ - user_snat_binding_added: string - /** - * U​s​e​r​ ​S​N​A​T​ ​b​i​n​d​i​n​g​ ​m​o​d​i​f​i​e​d - */ - user_snat_binding_modified: string - /** - * U​s​e​r​ ​S​N​A​T​ ​b​i​n​d​i​n​g​ ​r​e​m​o​v​e​d - */ - user_snat_binding_removed: string - } - activityLogModule: { - /** - * D​e​f​g​u​a​r​d - */ - defguard: string - /** - * C​l​i​e​n​t - */ - client: string - /** - * E​n​r​o​l​l​m​e​n​t - */ - enrollment: string - /** - * V​P​N - */ - vpn: string - } - } -} - -export type TranslationFunctions = { - common: { - conditions: { - /** - * or - */ - or: () => LocalizedString - /** - * and - */ - and: () => LocalizedString - /** - * equal - */ - equal: () => LocalizedString - } - controls: { - /** - * Time range - */ - timeRange: () => LocalizedString - /** - * Add new - */ - addNew: () => LocalizedString - /** - * Add - */ - add: () => LocalizedString - /** - * Accept - */ - accept: () => LocalizedString - /** - * Next - */ - next: () => LocalizedString - /** - * Back - */ - back: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - /** - * Confirm - */ - confirm: () => LocalizedString - /** - * Submit - */ - submit: () => LocalizedString - /** - * Close - */ - close: () => LocalizedString - /** - * Select - */ - select: () => LocalizedString - /** - * Finish - */ - finish: () => LocalizedString - /** - * Save changes - */ - saveChanges: () => LocalizedString - /** - * Save - */ - save: () => LocalizedString - /** - * Restore default - */ - RestoreDefault: () => LocalizedString - /** - * Delete - */ - 'delete': () => LocalizedString - /** - * Rename - */ - rename: () => LocalizedString - /** - * Copy - */ - copy: () => LocalizedString - /** - * Edit - */ - edit: () => LocalizedString - /** - * Dismiss - */ - dismiss: () => LocalizedString - /** - * Show - */ - show: () => LocalizedString - /** - * Enable - */ - enable: () => LocalizedString - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - /** - * Select all - */ - selectAll: () => LocalizedString - /** - * Clear - */ - clear: () => LocalizedString - /** - * Clear all - */ - clearAll: () => LocalizedString - /** - * Filter - */ - filter: () => LocalizedString - /** - * Filters - */ - filters: () => LocalizedString - } - /** - * Key - */ - key: () => LocalizedString - /** - * Name - */ - name: () => LocalizedString - /** - * No data - */ - noData: () => LocalizedString - /** - * Unavailable - */ - unavailable: () => LocalizedString - /** - * Not set - */ - notSet: () => LocalizedString - /** - * Search - */ - search: () => LocalizedString - /** - * Time - */ - time: () => LocalizedString - /** - * From - */ - from: () => LocalizedString - /** - * Until - */ - until: () => LocalizedString - } - messages: { - /** - * Error has occurred. - */ - error: () => LocalizedString - /** - * Operation succeeded - */ - success: () => LocalizedString - /** - * Failed to get application version. - */ - errorVersion: () => LocalizedString - /** - * Context is not secure. - */ - insecureContext: () => LocalizedString - /** - * Details: - */ - details: () => LocalizedString - clipboard: { - /** - * Clipboard is not accessible. - */ - error: () => LocalizedString - /** - * Content copied to clipboard. - */ - success: () => LocalizedString - } - } - modals: { - outdatedComponentsModal: { - /** - * Version mismatch - */ - title: () => LocalizedString - /** - * Defguard detected unsupported version in some components. - */ - subtitle: () => LocalizedString - content: { - /** - * Incompatible components: - */ - title: () => LocalizedString - /** - * Unknown version - */ - unknownVersion: () => LocalizedString - /** - * Unknown hostname - */ - unknownHostname: () => LocalizedString - } - } - upgradeLicenseModal: { - enterprise: { - /** - * Upgrade to Enterprise - */ - title: () => LocalizedString - /** - * This functionality is an **enterprise feature** and you've exceeded the user, device or network limits to use it. In order to use this feature, purchase an enterprise license or upgrade your existing one. - */ - subTitle: () => LocalizedString - } - limit: { - /** - * Upgrade - */ - title: () => LocalizedString - /** - * - You have **reached the limit** of this functionality. To **[ manage more locations/users/devices ]** purchase of the Enterprise license is required. - - */ - subTitle: () => LocalizedString - } - /** - * - You can find out more about features like: - - Real time and automatic client synchronization - - External SSO - - Controlling VPN clients behavior - - Full enterprise feature list: [https://docs.defguard.net/enterprise/enterprise-features](https://docs.defguard.net/enterprise/enterprise-features)
- Licensing information: [https://docs.defguard.net/enterprise/license](https://docs.defguard.net/enterprise/license) - - */ - content: () => LocalizedString - controls: { - /** - * Maybe later - */ - cancel: () => LocalizedString - /** - * See all Enterprise plans - */ - confirm: () => LocalizedString - } - } - standaloneDeviceEnrollmentModal: { - /** - * Network device token - */ - title: () => LocalizedString - toasters: { - /** - * Token generation failed. - */ - error: () => LocalizedString - } - } - standaloneDeviceConfigModal: { - /** - * Network device config - */ - title: () => LocalizedString - /** - * Config - */ - cardTitle: () => LocalizedString - toasters: { - getConfig: { - /** - * Failed to get device config. - */ - error: () => LocalizedString - } - } - } - editStandaloneModal: { - /** - * Edit network device - */ - title: () => LocalizedString - toasts: { - /** - * Device modified - */ - success: () => LocalizedString - /** - * Modifying the device failed - */ - failure: () => LocalizedString - } - } - deleteStandaloneDevice: { - /** - * Delete network device - */ - title: () => LocalizedString - /** - * Device {name} will be deleted. - */ - content: (arg: { name: string }) => LocalizedString - messages: { - /** - * Device deleted - */ - success: () => LocalizedString - /** - * Failed to remove device. - */ - error: () => LocalizedString - } - } - addStandaloneDevice: { - toasts: { - /** - * Device added - */ - deviceCreated: () => LocalizedString - /** - * Device could not be added. - */ - creationFailed: () => LocalizedString - } - infoBox: { - /** - * Here you can add definitions or generate configurations for devices that can connect to your VPN. Only locations without Multi-Factor Authentication are available here, as MFA is only supported in Defguard Desktop Client for now. - */ - setup: () => LocalizedString - } - form: { - /** - * Add Device - */ - submit: () => LocalizedString - labels: { - /** - * Device Name - */ - deviceName: () => LocalizedString - /** - * Location - */ - location: () => LocalizedString - /** - * Assigned IP Address - */ - assignedAddress: () => LocalizedString - /** - * Description - */ - description: () => LocalizedString - generation: { - /** - * Generate key pair - */ - auto: () => LocalizedString - /** - * Use my own public key - */ - manual: () => LocalizedString - } - /** - * Provide Your Public Key - */ - publicKey: () => LocalizedString - } - } - steps: { - method: { - /** - * Choose a preferred method - */ - title: () => LocalizedString - cards: { - cli: { - /** - * Defguard Command Line Client - */ - title: () => LocalizedString - /** - * When using defguard-cli your device will be automatically configured. - */ - subtitle: () => LocalizedString - /** - * Defguard CLI download and documentation - */ - docs: () => LocalizedString - } - manual: { - /** - * Manual WireGuard Client - */ - title: () => LocalizedString - /** - * If your device does not support our CLI binaries you can always generate a WireGuard configuration file and configure it manually - but any updates to the VPN location configuration will require manual changes in device configuration. - */ - subtitle: () => LocalizedString - } - } - } - manual: { - /** - * Add new VPN device using WireGuard Client - */ - title: () => LocalizedString - finish: { - /** - * Download the provided configuration file to your device and import it into your VPN client to complete the setup. - */ - messageTop: () => LocalizedString - /** - * Use provided configuration file below by scanning QR code or importing it as file on your device's WireGuard app. - */ - ctaInstruction: () => LocalizedString - /** - * - Please remember that Defguard **doesn't store private keys**. We will securely generate the public and private key pair in your browser, but only store the public key in Defguard database. Please download the configuration generated with the private key for the device, as it will not be accessible later. - - */ - warningMessage: () => LocalizedString - actionCard: { - /** - * Config - */ - title: () => LocalizedString - } - } - } - cli: { - /** - * Add device using Defguard Command Line Client - */ - title: () => LocalizedString - finish: { - /** - * First download Defguard command line client binary and install it on your server. - */ - topMessage: () => LocalizedString - /** - * Download Defguard CLI Client - */ - downloadButton: () => LocalizedString - /** - * Copy and paste this command in your terminal on the device - */ - commandCopy: () => LocalizedString - } - setup: { - /** - * Here you can add definitions or generate configurations for devices that can connect to your VPN. Only locations without Multi-Factor Authentication are available here, as MFA is only supported in Defguard Desktop Client for now. - */ - stepMessage: () => LocalizedString - form: { - /** - * Add Device - */ - submit: () => LocalizedString - } - } - } - } - } - updatesNotificationToaster: { - /** - * New version available {version} - */ - title: (arg: { version: string }) => LocalizedString - controls: { - /** - * See what's new - */ - more: () => LocalizedString - } - } - enterpriseUpgradeToaster: { - /** - * You've reached the enterprise functionality limit. - */ - title: () => LocalizedString - /** - * You've exceeded the limit of your current Defguard plan and the enterprise - features will be disabled. Purchase an enterprise license or upgrade your - existing one to continue using these features. - */ - message: () => LocalizedString - /** - * See all enterprise plans - */ - link: () => LocalizedString - } - updatesNotification: { - header: { - /** - * Update Available - */ - title: () => LocalizedString - /** - * new version {version} - */ - newVersion: (arg: { version: string }) => LocalizedString - /** - * critical update - */ - criticalBadge: () => LocalizedString - } - controls: { - /** - * Visit release page - */ - visitRelease: () => LocalizedString - } - } - addGroup: { - /** - * Add group - */ - title: () => LocalizedString - /** - * Select all users - */ - selectAll: () => LocalizedString - /** - * Group name - */ - groupName: () => LocalizedString - /** - * Filter/Search - */ - searchPlaceholder: () => LocalizedString - /** - * Create group - */ - submit: () => LocalizedString - /** - * Group settings - */ - groupSettings: () => LocalizedString - /** - * Admin group - */ - adminGroup: () => LocalizedString - } - editGroup: { - /** - * Edit group - */ - title: () => LocalizedString - /** - * Select all users - */ - selectAll: () => LocalizedString - /** - * Group name - */ - groupName: () => LocalizedString - /** - * Filter/Search - */ - searchPlaceholder: () => LocalizedString - /** - * Update group - */ - submit: () => LocalizedString - /** - * Group settings - */ - groupSettings: () => LocalizedString - /** - * Admin group - */ - adminGroup: () => LocalizedString - } - deleteGroup: { - /** - * Delete group {name} - */ - title: (arg: { name: string }) => LocalizedString - /** - * This action will permanently delete this group. - */ - subTitle: () => LocalizedString - /** - * This group is currently assigned to following VPN Locations: - */ - locationListHeader: () => LocalizedString - /** - * If this is the only allowed group for a given location, the location will become accessible to all users. - */ - locationListFooter: () => LocalizedString - /** - * Delete group - */ - submit: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - deviceConfig: { - /** - * Device VPN configurations - */ - title: () => LocalizedString - } - changePasswordSelf: { - /** - * Change password - */ - title: () => LocalizedString - messages: { - /** - * Password has been changed - */ - success: () => LocalizedString - /** - * Failed to changed password - */ - error: () => LocalizedString - } - form: { - labels: { - /** - * New password - */ - newPassword: () => LocalizedString - /** - * Current password - */ - oldPassword: () => LocalizedString - /** - * Confirm new password - */ - repeat: () => LocalizedString - } - } - controls: { - /** - * Change password - */ - submit: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - } - disableMfa: { - /** - * Disable MFA - */ - title: () => LocalizedString - /** - * Do you want to disable MFA for user {username}? - */ - message: (arg: { username: string }) => LocalizedString - messages: { - /** - * MFA for user {username} has been disabled - */ - success: (arg: { username: string }) => LocalizedString - /** - * Failed to disable MFA for user {username} - */ - error: (arg: { username: string }) => LocalizedString - } - controls: { - /** - * Disable MFA - */ - submit: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - } - startEnrollment: { - /** - * Start enrollment - */ - title: () => LocalizedString - /** - * Desktop activation - */ - desktopTitle: () => LocalizedString - messages: { - /** - * User enrollment started - */ - success: () => LocalizedString - /** - * Desktop configuration started - */ - successDesktop: () => LocalizedString - /** - * Failed to start user enrollment - */ - error: () => LocalizedString - /** - * Failed to start desktop activation - */ - errorDesktop: () => LocalizedString - } - messageBox: { - /** - * You can share the following URL and token with the user to configure their Defguard desktop or mobile client. - */ - clientForm: () => LocalizedString - /** - * You can share this QR code for easy Defguard mobile client configuration. - */ - clientQr: () => LocalizedString - } - form: { - email: { - /** - * Email - */ - label: () => LocalizedString - } - mode: { - options: { - /** - * Send token by email - */ - email: () => LocalizedString - /** - * Deliver token yourself - */ - manual: () => LocalizedString - } - } - /** - * Start enrollment - */ - submit: () => LocalizedString - /** - * Activate desktop - */ - submitDesktop: () => LocalizedString - /** - * Configure SMTP to send token by email. Go to Settings -> SMTP. - */ - smtpDisabled: () => LocalizedString - } - tokenCard: { - /** - * Activation token - */ - title: () => LocalizedString - } - urlCard: { - /** - * Defguard Instance URL - */ - title: () => LocalizedString - } - } - deleteNetwork: { - /** - * Delete {name} location - */ - title: (arg: { name: string }) => LocalizedString - /** - * This action will permanently delete this location. - */ - subTitle: () => LocalizedString - /** - * Delete location - */ - submit: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - changeWebhook: { - messages: { - /** - * Webhook changed. - */ - success: () => LocalizedString - } - } - manageWebAuthNKeys: { - /** - * Security keys - */ - title: () => LocalizedString - messages: { - /** - * WebAuthN key has been deleted. - */ - deleted: () => LocalizedString - /** - * Key is already registered - */ - duplicateKeyError: () => LocalizedString - } - /** - * -

- Security keys can be used as your second factor of authentication - instead of a verification code. Learn more about configuring a - security key. -

- - */ - infoMessage: () => LocalizedString - form: { - messages: { - /** - * Security key added. - */ - success: () => LocalizedString - } - fields: { - name: { - /** - * New key name - */ - label: () => LocalizedString - } - } - controls: { - /** - * Add new Key - */ - submit: () => LocalizedString - } - } - } - recoveryCodes: { - /** - * Recovery codes - */ - title: () => LocalizedString - /** - * I have saved my codes - */ - submit: () => LocalizedString - messages: { - /** - * Codes copied. - */ - copied: () => LocalizedString - } - /** - * -

- Treat your recovery codes with the same level of attention as you - would your password! We recommend saving them with a password manager - such as Lastpass, bitwarden or Keeper. -

- - */ - infoMessage: () => LocalizedString - } - registerTOTP: { - /** - * Authenticator App Setup - */ - title: () => LocalizedString - /** - * -

- To setup your MFA, scan this QR code with your authenticator app, then - enter the code in the field below: -

- - */ - infoMessage: () => LocalizedString - messages: { - /** - * TOTP path copied. - */ - totpCopied: () => LocalizedString - /** - * TOTP Enabled - */ - success: () => LocalizedString - } - /** - * Copy TOTP path - */ - copyPath: () => LocalizedString - form: { - fields: { - code: { - /** - * Authenticator code - */ - label: () => LocalizedString - /** - * Code is invalid - */ - error: () => LocalizedString - } - } - controls: { - /** - * Verify code - */ - submit: () => LocalizedString - } - } - } - registerEmailMFA: { - /** - * Email MFA Setup - */ - title: () => LocalizedString - /** - * -

- To setup your MFA enter the code that was sent to your account email: {email} -

- - */ - infoMessage: (arg: { email: string }) => LocalizedString - messages: { - /** - * Email MFA Enabled - */ - success: () => LocalizedString - /** - * Verification code resent - */ - resend: () => LocalizedString - } - form: { - fields: { - code: { - /** - * Email code - */ - label: () => LocalizedString - /** - * Code is invalid - */ - error: () => LocalizedString - } - } - controls: { - /** - * Verify code - */ - submit: () => LocalizedString - /** - * Resend email - */ - resend: () => LocalizedString - } - } - } - editDevice: { - /** - * Edit device - */ - title: () => LocalizedString - messages: { - /** - * Device has been updated. - */ - success: () => LocalizedString - } - form: { - fields: { - name: { - /** - * Device Name - */ - label: () => LocalizedString - } - publicKey: { - /** - * Device Public Key (WireGuard) - */ - label: () => LocalizedString - } - } - controls: { - /** - * Edit device - */ - submit: () => LocalizedString - } - } - } - deleteDevice: { - /** - * Delete device - */ - title: () => LocalizedString - /** - * Do you want to delete {deviceName} device ? - */ - message: (arg: { deviceName: unknown }) => LocalizedString - /** - * Delete device - */ - submit: () => LocalizedString - messages: { - /** - * Device has been deleted. - */ - success: () => LocalizedString - } - } - keyDetails: { - /** - * YubiKey details - */ - title: () => LocalizedString - /** - * Download all keys - */ - downloadAll: () => LocalizedString - } - deleteUser: { - /** - * Delete account - */ - title: () => LocalizedString - controls: { - /** - * Delete account - */ - submit: () => LocalizedString - } - /** - * Do you want to delete {username} account permanently? - */ - message: (arg: { username: string }) => LocalizedString - messages: { - /** - * {username} deleted. - */ - success: (arg: { username: string }) => LocalizedString - } - } - disableUser: { - /** - * Disable account - */ - title: () => LocalizedString - controls: { - /** - * Disable account - */ - submit: () => LocalizedString - } - /** - * Do you want to disable {username} account? - */ - message: (arg: { username: string }) => LocalizedString - messages: { - /** - * {username} disabled. - */ - success: (arg: { username: string }) => LocalizedString - } - } - enableUser: { - /** - * Enable account - */ - title: () => LocalizedString - controls: { - /** - * Enable account - */ - submit: () => LocalizedString - } - /** - * Do you want to enable {username} account? - */ - message: (arg: { username: string }) => LocalizedString - messages: { - /** - * {username} enabled. - */ - success: (arg: { username: string }) => LocalizedString - } - } - deleteProvisioner: { - /** - * Delete provisioner - */ - title: () => LocalizedString - controls: { - /** - * Delete provisioner - */ - submit: () => LocalizedString - } - /** - * Do you want to delete {id} provisioner? - */ - message: (arg: { id: string }) => LocalizedString - messages: { - /** - * {provisioner} deleted. - */ - success: (arg: { provisioner: string }) => LocalizedString - } - } - changeUserPassword: { - messages: { - /** - * Password changed. - */ - success: () => LocalizedString - } - /** - * Change user password - */ - title: () => LocalizedString - form: { - controls: { - /** - * Save new password - */ - submit: () => LocalizedString - } - fields: { - newPassword: { - /** - * New password - */ - label: () => LocalizedString - } - confirmPassword: { - /** - * Repeat password - */ - label: () => LocalizedString - } - } - } - } - provisionKeys: { - /** - * Yubikey provisioning: - */ - title: () => LocalizedString - /** - * Please be advised that this operation wll wipe openpgp application on yubikey and reconfigure it. - */ - warning: () => LocalizedString - /** - * The selected provisioner must have a clean YubiKey - plugged in be provisioned. To clean a used YubiKey - gpg --card-edit before provisioning. - */ - infoBox: () => LocalizedString - /** - * Select one of the following provisioners to provision a YubiKey: - */ - selectionLabel: () => LocalizedString - noData: { - /** - * No workers found, waiting... - */ - workers: () => LocalizedString - } - controls: { - /** - * Provision YubiKey - */ - submit: () => LocalizedString - } - messages: { - /** - * Keys provisioned - */ - success: () => LocalizedString - /** - * Error while getting worker status. - */ - errorStatus: () => LocalizedString - } - } - addUser: { - /** - * Add new user - */ - title: () => LocalizedString - messages: { - /** - * User added - */ - userAdded: () => LocalizedString - } - form: { - /** - * Add user - */ - submit: () => LocalizedString - error: { - /** - * Email already taken - */ - emailReserved: () => LocalizedString - } - fields: { - username: { - /** - * login - */ - placeholder: () => LocalizedString - /** - * Login - */ - label: () => LocalizedString - } - password: { - /** - * Password - */ - placeholder: () => LocalizedString - /** - * Password - */ - label: () => LocalizedString - } - email: { - /** - * User e-mail - */ - placeholder: () => LocalizedString - /** - * User e-mail - */ - label: () => LocalizedString - } - firstName: { - /** - * First name - */ - placeholder: () => LocalizedString - /** - * First name - */ - label: () => LocalizedString - } - lastName: { - /** - * Last name - */ - placeholder: () => LocalizedString - /** - * Last name - */ - label: () => LocalizedString - } - phone: { - /** - * Phone - */ - placeholder: () => LocalizedString - /** - * Phone - */ - label: () => LocalizedString - } - enableEnrollment: { - /** - * Use user self-enrollment process - */ - label: () => LocalizedString - /** - * more information here - */ - link: () => LocalizedString - } - } - } - } - webhookModal: { - title: { - /** - * Add webhook. - */ - addWebhook: () => LocalizedString - /** - * Edit webhook - */ - editWebhook: () => LocalizedString - } - messages: { - /** - * Client ID copied. - */ - clientIdCopy: () => LocalizedString - /** - * Client secret copied. - */ - clientSecretCopy: () => LocalizedString - } - form: { - /** - * Trigger events: - */ - triggers: () => LocalizedString - messages: { - /** - * Webhook created. - */ - successAdd: () => LocalizedString - /** - * Webhook modified. - */ - successModify: () => LocalizedString - } - error: { - /** - * URL is required. - */ - urlRequired: () => LocalizedString - /** - * Must be a valid URL. - */ - validUrl: () => LocalizedString - /** - * Must have at least one trigger. - */ - scopeValidation: () => LocalizedString - /** - * Token is required. - */ - tokenRequired: () => LocalizedString - } - fields: { - description: { - /** - * Description - */ - label: () => LocalizedString - /** - * Webhook to create gmail account on new user - */ - placeholder: () => LocalizedString - } - token: { - /** - * Secret token - */ - label: () => LocalizedString - /** - * Authorization token - */ - placeholder: () => LocalizedString - } - url: { - /** - * Webhook URL - */ - label: () => LocalizedString - /** - * https://example.com/webhook - */ - placeholder: () => LocalizedString - } - userCreated: { - /** - * New user Created - */ - label: () => LocalizedString - } - userDeleted: { - /** - * User deleted - */ - label: () => LocalizedString - } - userModified: { - /** - * User modified - */ - label: () => LocalizedString - } - hwkeyProvision: { - /** - * User Yubikey provision - */ - label: () => LocalizedString - } - } - } - } - deleteWebhook: { - /** - * Delete webhook - */ - title: () => LocalizedString - /** - * Do you want to delete {name} webhook ? - */ - message: (arg: { name: string }) => LocalizedString - /** - * Delete - */ - submit: () => LocalizedString - messages: { - /** - * Webhook deleted. - */ - success: () => LocalizedString - } - } - } - addDevicePage: { - /** - * Add device - */ - title: () => LocalizedString - helpers: { - /** - * You can add a device using this wizard. Opt for our native application "defguard" or any other WireGuard client. If you're unsure, we recommend using defguard for simplicity. - */ - setupOpt: () => LocalizedString - /** - * Please download defguard desktop client here and then follow this guide. - */ - client: () => LocalizedString - } - messages: { - /** - * Device added - */ - deviceAdded: () => LocalizedString - } - steps: { - setupMethod: { - /** - * Choose Your Connection Method - */ - title: () => LocalizedString - /** - * You can add a device using this wizard. To proceed, you'll need to install the defguard Client on the device you're adding. You can also use any standard WireGuard® client, but for the best experience and ease of setup, we recommend using our native defguard Client. - */ - message: () => LocalizedString - methods: { - client: { - /** - * Remote Device Activation - */ - title: () => LocalizedString - /** - * Use the Defguard Client to set up your device. Easily configure it with a single token or by scanning a QR code. - */ - description: () => LocalizedString - } - wg: { - /** - * Manual WireGuard Client - */ - title: () => LocalizedString - /** - * For advanced users, get a unique config via download or QR code. Download any WireGuard® client and take control of your VPN setup. - */ - description: () => LocalizedString - } - } - } - client: { - /** - * Client Activation - */ - title: () => LocalizedString - /** - * If you want to configure your Defguard desktop client, please install the client (links below), open it and just press the One-Click Desktop Configuration button - */ - desktopDeepLinkHelp: () => LocalizedString - /** - * If you are having trouble with the One-Click configuration you can do it manually by clicking *Add Instance* in the desktop client, and entering the following URL and Token: - */ - message: () => LocalizedString - /** - * Scan the QR code with your installed Defguard app. If you haven't installed it yet, use your device's app store or the link below. - */ - qrDescription: () => LocalizedString - /** - * If you want to configure your Mobile Defguard Client, please just scan this QR code in the app: - */ - qrHelp: () => LocalizedString - /** - * Download for Desktop - */ - desktopDownload: () => LocalizedString - /** - * Token copied to clipboard - */ - tokenCopy: () => LocalizedString - /** - * Failed to prepare client setup - */ - tokenFailure: () => LocalizedString - labels: { - /** - * Defguard Instance Token (new) - */ - mergedToken: () => LocalizedString - /** - * Authentication Token - */ - token: () => LocalizedString - /** - * URL - */ - url: () => LocalizedString - } - } - configDevice: { - /** - * Configure device - */ - title: () => LocalizedString - messages: { - /** - * Configuration has been copied to the clipboard - */ - copyConfig: () => LocalizedString - } - helpers: { - /** - * -

- Please be advised that you have to download the configuration now, - since we do not store your private key. After this - page is closed, you will not be able to get your - full configuration file (with private keys, only blank template). -

- - */ - warningAutoMode: () => LocalizedString - /** - * -

- Please be advised that configuration provided here does not include private key and uses public key to fill it's place you will need to replace it on your own for configuration to work properly. -

- - */ - warningManualMode: () => LocalizedString - /** - * You don't have access to any network. - */ - warningNoNetworks: () => LocalizedString - /** - * -

- You can setup your device faster with wireguard application by scanning this QR code. -

- */ - qrHelper: () => LocalizedString - } - /** - * Use provided configuration file below by scanning QR Code or importing it as file on your devices WireGuard instance. - */ - qrInfo: () => LocalizedString - /** - * Device Name - */ - inputNameLabel: () => LocalizedString - /** - * WireGuard Config File - */ - qrLabel: () => LocalizedString - } - setupDevice: { - /** - * Create VPN device - */ - title: () => LocalizedString - /** - * -

- You need to configure WireGuard® VPN on your device, please visit  - documentation if you don't know how to do it. -

- - */ - infoMessage: (arg: { addDevicesDocs: string }) => LocalizedString - options: { - /** - * Generate key pair - */ - auto: () => LocalizedString - /** - * Use my own public key - */ - manual: () => LocalizedString - } - form: { - fields: { - name: { - /** - * Device Name - */ - label: () => LocalizedString - } - publicKey: { - /** - * Provide Your Public Key - */ - label: () => LocalizedString - } - } - errors: { - name: { - /** - * Device with this name already exists - */ - duplicatedName: () => LocalizedString - } - } - } - } - copyToken: { - /** - * Client activation - */ - title: () => LocalizedString - /** - * Activation token - */ - tokenCardTitle: () => LocalizedString - /** - * Defguard Instance URL - */ - urlCardTitle: () => LocalizedString - } - } - } - userPage: { - title: { - /** - * User Profile - */ - view: () => LocalizedString - /** - * Edit User Profile - */ - edit: () => LocalizedString - } - messages: { - /** - * User updated. - */ - editSuccess: () => LocalizedString - /** - * Could not get user information. - */ - failedToFetchUserData: () => LocalizedString - /** - * Password reset email has been sent. - */ - passwordResetEmailSent: () => LocalizedString - } - userDetails: { - /** - * Profile Details - */ - header: () => LocalizedString - messages: { - /** - * App and all tokens deleted. - */ - deleteApp: () => LocalizedString - } - warningModals: { - /** - * Warning - */ - title: () => LocalizedString - content: { - /** - * Changing the username has a significant impact on services the user has logged into using Defguard. After changing it, the user may lose access to applications (since they will not recognize them). Are you sure you want to proceed? - */ - usernameChange: () => LocalizedString - /** - * If you are using external OpenID Connect (OIDC) providers to authenticate users, changing a user's email address may have a significant impact on their ability to log in to Defguard. Are you sure you want to proceed? - */ - emailChange: () => LocalizedString - } - buttons: { - /** - * Proceed - */ - proceed: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - } - fields: { - username: { - /** - * Username - */ - label: () => LocalizedString - } - firstName: { - /** - * First name - */ - label: () => LocalizedString - } - lastName: { - /** - * Last name - */ - label: () => LocalizedString - } - phone: { - /** - * Phone number - */ - label: () => LocalizedString - } - email: { - /** - * E-mail - */ - label: () => LocalizedString - } - status: { - /** - * Status - */ - label: () => LocalizedString - /** - * Active - */ - active: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - } - groups: { - /** - * User groups - */ - label: () => LocalizedString - /** - * No groups - */ - noData: () => LocalizedString - } - apps: { - /** - * Authorized apps - */ - label: () => LocalizedString - /** - * No authorized apps - */ - noData: () => LocalizedString - } - } - } - userAuthInfo: { - /** - * Password and authentication - */ - header: () => LocalizedString - password: { - /** - * Password settings - */ - header: () => LocalizedString - /** - * Change password - */ - changePassword: () => LocalizedString - /** - * {ldapName} password update required - */ - ldap_change_heading: (arg: { ldapName: string }) => LocalizedString - /** - * Defguard doesn't store your password in plain text, so we can’t retrieve it for automatic synchronization with your {ldapName} credentials. To enable {ldapName} login to other services, please update your Defguard password for your {ldapName} password to be set — you can re-enter your current password if you wish. This step is necessary to ensure consistent and secure authentication across both systems. - */ - ldap_change_message: (arg: { ldapName: string }) => LocalizedString - } - recovery: { - /** - * Recovery options - */ - header: () => LocalizedString - codes: { - /** - * Recovery Codes - */ - label: () => LocalizedString - /** - * Viewed - */ - viewed: () => LocalizedString - } - } - mfa: { - /** - * Two-factor methods - */ - header: () => LocalizedString - edit: { - /** - * Disable MFA - */ - disable: () => LocalizedString - } - messages: { - /** - * MFA disabled. - */ - mfaDisabled: () => LocalizedString - /** - * One time password disabled. - */ - OTPDisabled: () => LocalizedString - /** - * Email MFA disabled. - */ - EmailMFADisabled: () => LocalizedString - /** - * MFA method changed - */ - changeMFAMethod: () => LocalizedString - } - securityKey: { - /** - * security key - */ - singular: () => LocalizedString - /** - * security keys - */ - plural: () => LocalizedString - } - /** - * default - */ - 'default': () => LocalizedString - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - labels: { - /** - * Time based one time passwords - */ - totp: () => LocalizedString - /** - * Email - */ - email: () => LocalizedString - /** - * Security keys - */ - webauth: () => LocalizedString - } - editMode: { - /** - * Enable - */ - enable: () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Make default - */ - makeDefault: () => LocalizedString - webauth: { - /** - * Manage security keys - */ - manage: () => LocalizedString - } - } - } - } - controls: { - /** - * Edit profile - */ - editButton: () => LocalizedString - /** - * Delete account - */ - deleteAccount: () => LocalizedString - } - devices: { - /** - * User devices - */ - header: () => LocalizedString - addDevice: { - /** - * Add new device - */ - web: () => LocalizedString - /** - * Add this device - */ - desktop: () => LocalizedString - } - card: { - labels: { - /** - * Public IP - */ - publicIP: () => LocalizedString - /** - * Connected through - */ - connectedThrough: () => LocalizedString - /** - * Connected date - */ - connectionDate: () => LocalizedString - /** - * Last connected from - */ - lastLocation: () => LocalizedString - /** - * Last connected - */ - lastConnected: () => LocalizedString - /** - * Assigned IP - */ - assignedIp: () => LocalizedString - /** - * active - */ - active: () => LocalizedString - /** - * Never connected - */ - noData: () => LocalizedString - } - edit: { - /** - * Edit device - */ - edit: () => LocalizedString - /** - * Delete device - */ - 'delete': () => LocalizedString - /** - * Show configuration - */ - showConfigurations: () => LocalizedString - } - } - } - yubiKey: { - /** - * User YubiKey - */ - header: () => LocalizedString - /** - * Provision a YubiKey - */ - provision: () => LocalizedString - keys: { - /** - * PGP key - */ - pgp: () => LocalizedString - /** - * SSH key - */ - ssh: () => LocalizedString - } - noLicense: { - /** - * YubiKey module - */ - moduleName: () => LocalizedString - /** - * This is enterprise module for YubiKey - */ - line1: () => LocalizedString - /** - * management and provisioning. - */ - line2: () => LocalizedString - } - } - authenticationKeys: { - /** - * User Authentication Keys - */ - header: () => LocalizedString - /** - * Add new Key - */ - addKey: () => LocalizedString - keysList: { - common: { - /** - * Rename - */ - rename: () => LocalizedString - /** - * Key - */ - key: () => LocalizedString - /** - * Download - */ - download: () => LocalizedString - /** - * Copy - */ - copy: () => LocalizedString - /** - * Serial Number - */ - serialNumber: () => LocalizedString - /** - * Delete - */ - 'delete': () => LocalizedString - } - } - deleteModal: { - /** - * Delete Authentication Key - */ - title: () => LocalizedString - /** - * Key {name} will be deleted permanently. - */ - confirmMessage: (arg: { name: string }) => LocalizedString - } - addModal: { - /** - * Add new Authentication Key - */ - header: () => LocalizedString - /** - * Key Type - */ - keyType: () => LocalizedString - keyForm: { - placeholders: { - /** - * Key Name - */ - title: () => LocalizedString - key: { - /** - * Begins with ssh-rsa, ecdsa-sha2-nistp256, ... - */ - ssh: () => LocalizedString - /** - * Begins with -----BEGIN PGP PUBLIC KEY BLOCK----- - */ - gpg: () => LocalizedString - } - } - labels: { - /** - * Name - */ - title: () => LocalizedString - /** - * Key - */ - key: () => LocalizedString - } - /** - * Add {name} key - */ - submit: (arg: { name: string }) => LocalizedString - } - yubikeyForm: { - selectWorker: { - /** - * Please be advised that this operation will wipe openpgp application on YubiKey and reconfigure it. - */ - info: () => LocalizedString - /** - * Select on of the following provisioners to provision a YubiKey - */ - selectLabel: () => LocalizedString - /** - * No workers are registered right now. - */ - noData: () => LocalizedString - /** - * Available - */ - available: () => LocalizedString - /** - * Unavailable - */ - unavailable: () => LocalizedString - } - provisioning: { - /** - * Provisioning in progress, please wait. - */ - inProgress: () => LocalizedString - /** - * Provisioning failed ! - */ - error: () => LocalizedString - /** - * Yubikey provisioned successfully - */ - success: () => LocalizedString - } - /** - * Provision Yubikey - */ - submit: () => LocalizedString - } - messages: { - /** - * Key added. - */ - keyAdded: () => LocalizedString - /** - * Key has already been added. - */ - keyExists: () => LocalizedString - /** - * Unsupported key format. - */ - unsupportedKeyFormat: () => LocalizedString - /** - * Could not add the key. Please try again later. - */ - genericError: () => LocalizedString - } - } - } - apiTokens: { - /** - * User API Tokens - */ - header: () => LocalizedString - /** - * Add new API Token - */ - addToken: () => LocalizedString - tokensList: { - common: { - /** - * Rename - */ - rename: () => LocalizedString - /** - * Token - */ - token: () => LocalizedString - /** - * Copy - */ - copy: () => LocalizedString - /** - * Delete - */ - 'delete': () => LocalizedString - /** - * Created at - */ - createdAt: () => LocalizedString - } - } - deleteModal: { - /** - * Delete API Token - */ - title: () => LocalizedString - /** - * API token {name} will be deleted permanently. - */ - confirmMessage: (arg: { name: string }) => LocalizedString - } - addModal: { - /** - * Add new API Token - */ - header: () => LocalizedString - tokenForm: { - placeholders: { - /** - * API Token Name - */ - name: () => LocalizedString - } - labels: { - /** - * Name - */ - name: () => LocalizedString - } - /** - * Add API token - */ - submit: () => LocalizedString - } - copyToken: { - /** - * Please copy the API token below now. You won't be able to see it again. - */ - warningMessage: () => LocalizedString - /** - * Copy new API Token - */ - header: () => LocalizedString - } - messages: { - /** - * API token added. - */ - tokenAdded: () => LocalizedString - /** - * Could not add API token. Please try again later. - */ - genericError: () => LocalizedString - } - } - } - } - usersOverview: { - /** - * Users - */ - pageTitle: () => LocalizedString - grid: { - /** - * Connected Users - */ - usersTitle: () => LocalizedString - /** - * Connected Network Devices - */ - devicesTitle: () => LocalizedString - } - search: { - /** - * Find users - */ - placeholder: () => LocalizedString - } - filterLabels: { - /** - * All users - */ - all: () => LocalizedString - /** - * Admins only - */ - admin: () => LocalizedString - /** - * Users only - */ - users: () => LocalizedString - } - /** - * All users - */ - usersCount: () => LocalizedString - /** - * Add new - */ - addNewUser: () => LocalizedString - list: { - headers: { - /** - * User name - */ - name: () => LocalizedString - /** - * Login - */ - username: () => LocalizedString - /** - * Phone - */ - phone: () => LocalizedString - /** - * Actions - */ - actions: () => LocalizedString - } - editButton: { - /** - * Change password - */ - changePassword: () => LocalizedString - /** - * Edit account - */ - edit: () => LocalizedString - /** - * Add YubiKey - */ - addYubikey: () => LocalizedString - /** - * Add SSH Key - */ - addSSH: () => LocalizedString - /** - * Add GPG Key - */ - addGPG: () => LocalizedString - /** - * Delete account - */ - 'delete': () => LocalizedString - /** - * Start enrollment - */ - startEnrollment: () => LocalizedString - /** - * Configure Desktop Client - */ - activateDesktop: () => LocalizedString - /** - * Reset password - */ - resetPassword: () => LocalizedString - /** - * Disable MFA - */ - disableMfa: () => LocalizedString - } - } - } - navigation: { - bar: { - /** - * VPN Overview - */ - overview: () => LocalizedString - /** - * Users - */ - users: () => LocalizedString - /** - * YubiKeys - */ - provisioners: () => LocalizedString - /** - * Webhooks - */ - webhooks: () => LocalizedString - /** - * OpenID Apps - */ - openId: () => LocalizedString - /** - * My Profile - */ - myProfile: () => LocalizedString - /** - * Settings - */ - settings: () => LocalizedString - /** - * Log out - */ - logOut: () => LocalizedString - /** - * Enrollment - */ - enrollment: () => LocalizedString - /** - * Support - */ - support: () => LocalizedString - /** - * Groups - */ - groups: () => LocalizedString - /** - * Network Devices - */ - devices: () => LocalizedString - /** - * Access Control - */ - acl: () => LocalizedString - /** - * Activity log - */ - activity: () => LocalizedString - } - mobileTitles: { - /** - * Activity log - */ - activity: () => LocalizedString - /** - * Groups - */ - groups: () => LocalizedString - /** - * Create location - */ - wizard: () => LocalizedString - /** - * Users - */ - users: () => LocalizedString - /** - * Settings - */ - settings: () => LocalizedString - /** - * User Profile - */ - user: () => LocalizedString - /** - * Yubikey - */ - provisioners: () => LocalizedString - /** - * Webhooks - */ - webhooks: () => LocalizedString - /** - * OpenId Apps - */ - openId: () => LocalizedString - /** - * Location Overview - */ - overview: () => LocalizedString - /** - * Edit Location - */ - networkSettings: () => LocalizedString - /** - * Enrollment - */ - enrollment: () => LocalizedString - /** - * Support - */ - support: () => LocalizedString - /** - * Network Devices - */ - devices: () => LocalizedString - } - /** - * Copyright ©2023-2025 - */ - copyright: () => LocalizedString - version: { - /** - * Application version: {version} - */ - open: (arg: { version: string }) => LocalizedString - /** - * v{version} - */ - closed: (arg: { version: string }) => LocalizedString - } - } - form: { - /** - * Download - */ - download: () => LocalizedString - /** - * Copy - */ - copy: () => LocalizedString - /** - * Save changes - */ - saveChanges: () => LocalizedString - /** - * Submit - */ - submit: () => LocalizedString - /** - * Sign in - */ - login: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - /** - * Close - */ - close: () => LocalizedString - placeholders: { - /** - * Password - */ - password: () => LocalizedString - /** - * Username - */ - username: () => LocalizedString - /** - * Username or email - */ - username_or_email: () => LocalizedString - } - error: { - /** - * Enter valid URL - */ - urlInvalid: () => LocalizedString - /** - * Name is already taken. - */ - reservedName: () => LocalizedString - /** - * IP is invalid. - */ - invalidIp: () => LocalizedString - /** - * IP is already in use. - */ - reservedIp: () => LocalizedString - /** - * Field contains forbidden characters. - */ - forbiddenCharacter: () => LocalizedString - /** - * Username is already in use. - */ - usernameTaken: () => LocalizedString - /** - * Key is invalid. - */ - invalidKey: () => LocalizedString - /** - * Field is invalid. - */ - invalid: () => LocalizedString - /** - * Field is required. - */ - required: () => LocalizedString - /** - * Submitted code is invalid. - */ - invalidCode: () => LocalizedString - /** - * Maximum length exceeded. - */ - maximumLength: () => LocalizedString - /** - * Field length cannot exceed {length} - */ - maximumLengthOf: (arg: { length: number }) => LocalizedString - /** - * Minimum length not reached. - */ - minimumLength: () => LocalizedString - /** - * Minimum length of {length} not reached. - */ - minimumLengthOf: (arg: { length: number }) => LocalizedString - /** - * No special characters are allowed. - */ - noSpecialChars: () => LocalizedString - /** - * One digit required. - */ - oneDigit: () => LocalizedString - /** - * Special character required. - */ - oneSpecial: () => LocalizedString - /** - * One uppercase character required. - */ - oneUppercase: () => LocalizedString - /** - * One lowercase character required. - */ - oneLowercase: () => LocalizedString - /** - * Maximum port is 65535. - */ - portMax: () => LocalizedString - /** - * Enter a valid endpoint. - */ - endpoint: () => LocalizedString - /** - * Enter a valid address. - */ - address: () => LocalizedString - /** - * Enter a valid address with a netmask. - */ - addressNetmask: () => LocalizedString - /** - * Enter a valid port. - */ - validPort: () => LocalizedString - /** - * Code should have 6 digits. - */ - validCode: () => LocalizedString - /** - * Only valid IP or domain is allowed. - */ - allowedIps: () => LocalizedString - /** - * Cannot start from number. - */ - startFromNumber: () => LocalizedString - /** - * Fields don't match. - */ - repeat: () => LocalizedString - /** - * Expected a valid number. - */ - number: () => LocalizedString - /** - * Minimum value of {value} not reached. - */ - minimumValue: (arg: { value: number }) => LocalizedString - /** - * Maximum value of {value} exceeded. - */ - maximumValue: (arg: { value: number }) => LocalizedString - /** - * Too many bad login attempts. Please try again in a few minutes. - */ - tooManyBadLoginAttempts: () => LocalizedString - } - floatingErrors: { - /** - * Please correct the following: - */ - title: () => LocalizedString - } - } - components: { - /** - * One-Click Desktop Configuration - */ - openClientDeepLink: () => LocalizedString - aclDefaultPolicySelect: { - /** - * Default ACL Policy - */ - label: () => LocalizedString - options: { - /** - * Allow - */ - allow: () => LocalizedString - /** - * Deny - */ - deny: () => LocalizedString - } - } - standaloneDeviceTokenModalContent: { - /** - * First download defguard command line client binaries and install them on your server. - */ - headerMessage: () => LocalizedString - /** - * Download Defguard CLI Client - */ - downloadButton: () => LocalizedString - expandableCard: { - /** - * Copy and paste this command in your terminal on the device - */ - title: () => LocalizedString - } - } - deviceConfigsCard: { - /** - * WireGuard Config for location: - */ - cardTitle: () => LocalizedString - messages: { - /** - * Configuration copied to the clipboard - */ - copyConfig: () => LocalizedString - } - } - gatewaysStatus: { - /** - * Gateways - */ - label: () => LocalizedString - states: { - /** - * All ({count}) Connected - */ - all: (arg: { count: number }) => LocalizedString - /** - * Some ({count}) Connected - */ - some: (arg: { count: number }) => LocalizedString - /** - * None connected - */ - none: () => LocalizedString - /** - * Status check failed - */ - error: () => LocalizedString - } - messages: { - /** - * Failed to get gateways status - */ - error: () => LocalizedString - /** - * Failed to delete gateway - */ - deleteError: () => LocalizedString - } - } - noLicenseBox: { - footer: { - /** - * Get an enterprise license - */ - get: () => LocalizedString - /** - * by contacting: - */ - contact: () => LocalizedString - } - } - locationMfaModeSelect: { - /** - * MFA Requirement - */ - label: () => LocalizedString - options: { - /** - * Do not enforce MFA - */ - disabled: () => LocalizedString - /** - * Internal MFA - */ - internal: () => LocalizedString - /** - * External MFA - */ - external: () => LocalizedString - } - } - } - settingsPage: { - /** - * Settings - */ - title: () => LocalizedString - tabs: { - /** - * SMTP - */ - smtp: () => LocalizedString - /** - * Global settings - */ - global: () => LocalizedString - /** - * LDAP - */ - ldap: () => LocalizedString - /** - * OpenID - */ - openid: () => LocalizedString - /** - * Enterprise features - */ - enterprise: () => LocalizedString - /** - * Gateway notifications - */ - gatewayNotifications: () => LocalizedString - /** - * Activity log streaming - */ - activityLogStream: () => LocalizedString - } - messages: { - /** - * Settings updated - */ - editSuccess: () => LocalizedString - /** - * Challenge message changed - */ - challengeSuccess: () => LocalizedString - } - enterpriseOnly: { - /** - * This feature is available only in Defguard Enterprise. - */ - title: () => LocalizedString - /** - * Your current license has expired. - */ - currentExpired: () => LocalizedString - /** - * To learn more, visit our - */ - subtitle: () => LocalizedString - /** - * website - */ - website: () => LocalizedString - } - activityLogStreamSettings: { - messages: { - destinationCrud: { - /** - * {destination} destination added - */ - create: (arg: { destination: string }) => LocalizedString - /** - * {destination} destination modified - */ - modify: (arg: { destination: string }) => LocalizedString - /** - * {destination} destination removed - */ - 'delete': (arg: { destination: string }) => LocalizedString - } - } - modals: { - selectDestination: { - /** - * Select destination - */ - title: () => LocalizedString - } - vector: { - /** - * Add Vector destination - */ - create: () => LocalizedString - /** - * Edit Vector destination - */ - modify: () => LocalizedString - } - logstash: { - /** - * Add Logstash destination - */ - create: () => LocalizedString - /** - * Edit Logstash destination - */ - modify: () => LocalizedString - } - shared: { - formLabels: { - /** - * Name - */ - name: () => LocalizedString - /** - * Url - */ - url: () => LocalizedString - /** - * Username - */ - username: () => LocalizedString - /** - * Password - */ - password: () => LocalizedString - /** - * Certificate - */ - cert: () => LocalizedString - } - } - } - /** - * Activity log streaming - */ - title: () => LocalizedString - list: { - /** - * No destinations - */ - noData: () => LocalizedString - headers: { - /** - * Name - */ - name: () => LocalizedString - /** - * Destination - */ - destination: () => LocalizedString - } - } - } - ldapSettings: { - /** - * LDAP Settings - */ - title: () => LocalizedString - sync: { - /** - * LDAP two-way synchronization - */ - header: () => LocalizedString - /** - * Before enabling synchronization, please read more about it in our [documentation](https://docs.defguard.net/features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization). - */ - info: () => LocalizedString - /** - * This feature is available only in Defguard Enterprise. - */ - info_enterprise: () => LocalizedString - helpers: { - /** - * Configure LDAP synchronization settings here. If configured, Defguard will pull user information from LDAP and synchronize it with local users. - */ - heading: () => LocalizedString - /** - * If enabled, Defguard will attempt to pull LDAP user data at the specified interval. - */ - sync_enabled: () => LocalizedString - /** - * Defguard will use the selected server as the authoritative source of - user data, meaning that if LDAP is selected, Defguard data will be overwritten with the LDAP - data in case of a desynchronization. If Defguard was selected as the authority, it's data will - overwrite LDAP data if necessary. - Make sure to check the documentation to understand the implications of this - setting. - */ - authority: () => LocalizedString - /** - * The interval with which the synchronization will be attempted. - */ - interval: () => LocalizedString - /** - * Defguard will attempt to synchronize only users belonging to the provided groups. Provide a comma-separated list of groups. If empty, all users will be synchronized. - */ - groups: () => LocalizedString - } - } - form: { - labels: { - /** - * Enable LDAP integration - */ - ldap_enable: () => LocalizedString - /** - * URL - */ - ldap_url: () => LocalizedString - /** - * Bind Username - */ - ldap_bind_username: () => LocalizedString - /** - * Bind Password - */ - ldap_bind_password: () => LocalizedString - /** - * Member Attribute - */ - ldap_member_attr: () => LocalizedString - /** - * Username Attribute - */ - ldap_username_attr: () => LocalizedString - /** - * User Object Class - */ - ldap_user_obj_class: () => LocalizedString - /** - * User Search Base - */ - ldap_user_search_base: () => LocalizedString - /** - * Additional User Object Classes - */ - ldap_user_auxiliary_obj_classes: () => LocalizedString - /** - * Groupname Attribute - */ - ldap_groupname_attr: () => LocalizedString - /** - * Group Search Base - */ - ldap_group_search_base: () => LocalizedString - /** - * Group Member Attribute - */ - ldap_group_member_attr: () => LocalizedString - /** - * Group Object Class - */ - ldap_group_obj_class: () => LocalizedString - /** - * Enable LDAP two-way synchronization - */ - ldap_sync_enabled: () => LocalizedString - /** - * Consider the following source as the authority - */ - ldap_authoritative_source: () => LocalizedString - /** - * Synchronization interval - */ - ldap_sync_interval: () => LocalizedString - /** - * Use StartTLS - */ - ldap_use_starttls: () => LocalizedString - /** - * Verify TLS certificate - */ - ldap_tls_verify_cert: () => LocalizedString - /** - * LDAP server is Active Directory - */ - ldap_uses_ad: () => LocalizedString - /** - * User RDN Attribute - */ - ldap_user_rdn_attr: () => LocalizedString - /** - * Limit synchronization to these groups - */ - ldap_sync_groups: () => LocalizedString - } - helpers: { - /** - * The object class that will be added to the user object during its creation. This is used to determine if an LDAP object is a user. - */ - ldap_user_obj_class: () => LocalizedString - /** - * The additional object classes that will be added to the user object during its creation. They may also influence the added user's attributes (e.g. simpleSecurityObject class will add userPassword attribute). - */ - ldap_user_auxiliary_obj_classes: () => LocalizedString - /** - * Configure LDAP user settings here. These settings determine how Defguard maps and synchronizes LDAP user information with local users. - */ - user_settings: () => LocalizedString - /** - * Configure LDAP connection settings here. These settings determine how Defguard connects to your LDAP server. Encrypted connections are also supported (StartTLS, LDAPS). - */ - connection_settings: () => LocalizedString - /** - * Configure LDAP group settings here. These settings determine how Defguard maps and synchronizes LDAP group information with local groups. - */ - group_settings: () => LocalizedString - /** - * The object class that represents a group in LDAP. This is used to determine if an LDAP object is a group. - */ - ldap_group_obj_class: () => LocalizedString - /** - * If your user's RDN attribute is different than your username attribute, please provide it here, otherwise leave it empty to use the username attribute as the user's RDN. - */ - ldap_user_rdn_attr: () => LocalizedString - } - headings: { - /** - * User settings - */ - user_settings: () => LocalizedString - /** - * Connection settings - */ - connection_settings: () => LocalizedString - /** - * Group settings - */ - group_settings: () => LocalizedString - } - /** - * Delete configuration - */ - 'delete': () => LocalizedString - } - test: { - /** - * Test LDAP Connection - */ - title: () => LocalizedString - /** - * Test - */ - submit: () => LocalizedString - messages: { - /** - * LDAP connected successfully - */ - success: () => LocalizedString - /** - * LDAP connection rejected - */ - error: () => LocalizedString - } - } - } - openIdSettings: { - /** - * External OpenID settings - */ - heading: () => LocalizedString - general: { - /** - * General settings - */ - title: () => LocalizedString - /** - * Here you can change general OpenID behavior in your Defguard instance. - */ - helper: () => LocalizedString - createAccount: { - /** - * Automatically create user account when logging in for the first time through external OpenID. - */ - label: () => LocalizedString - /** - * If this option is enabled, Defguard automatically creates new accounts for users who log in for the first time using an external OpenID provider. Otherwise, the user account must first be created by an administrator. - */ - helper: () => LocalizedString - } - usernameHandling: { - /** - * Username handling - */ - label: () => LocalizedString - /** - * Configure the method for handling invalid characters in usernames provided by your identity provider. - */ - helper: () => LocalizedString - options: { - /** - * Remove forbidden characters - */ - remove: () => LocalizedString - /** - * Replace forbidden characters - */ - replace: () => LocalizedString - /** - * Prune email domain - */ - prune_email: () => LocalizedString - } - } - } - form: { - /** - * Client settings - */ - title: () => LocalizedString - /** - * Here you can configure the OpenID client settings with values provided by your external OpenID provider. - */ - helper: () => LocalizedString - /** - * Custom - */ - custom: () => LocalizedString - /** - * None - */ - none: () => LocalizedString - /** - * Make sure to check our [documentation](https://docs.defguard.net/features/external-openid-providers) for more information and examples. - */ - documentation: () => LocalizedString - /** - * Delete provider - */ - 'delete': () => LocalizedString - directory_sync_settings: { - /** - * Directory synchronization settings - */ - title: () => LocalizedString - /** - * Directory synchronization allows you to automatically synchronize users' status and groups from an external provider. - */ - helper: () => LocalizedString - /** - * Directory sync is not supported for this provider. - */ - notSupported: () => LocalizedString - connectionTest: { - /** - * Connection successful - */ - success: () => LocalizedString - /** - * Connection failed with error: - */ - error: () => LocalizedString - } - } - selects: { - synchronize: { - /** - * All - */ - all: () => LocalizedString - /** - * Users - */ - users: () => LocalizedString - /** - * Groups - */ - groups: () => LocalizedString - } - behavior: { - /** - * Keep - */ - keep: () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Delete - */ - 'delete': () => LocalizedString - } - } - labels: { - provider: { - /** - * Provider - */ - label: () => LocalizedString - /** - * Select your OpenID provider. You can use custom provider and fill in the base URL by yourself. - */ - helper: () => LocalizedString - } - client_id: { - /** - * Client ID - */ - label: () => LocalizedString - /** - * Client ID provided by your OpenID provider. - */ - helper: () => LocalizedString - } - client_secret: { - /** - * Client Secret - */ - label: () => LocalizedString - /** - * Client Secret provided by your OpenID provider. - */ - helper: () => LocalizedString - } - base_url: { - /** - * Base URL - */ - label: () => LocalizedString - /** - * Base URL of your OpenID provider, e.g. https://accounts.google.com. Make sure to check our documentation for more information and examples. - */ - helper: () => LocalizedString - } - display_name: { - /** - * Display Name - */ - label: () => LocalizedString - /** - * Name of the OpenID provider to display on the login's page button. If not provided, the button will display generic 'Login with OIDC' text. - */ - helper: () => LocalizedString - } - enable_directory_sync: { - /** - * Enable directory synchronization - */ - label: () => LocalizedString - } - sync_target: { - /** - * Synchronize - */ - label: () => LocalizedString - /** - * What to synchronize from the external provider. You can choose between synchronizing both users' state and group memberships, or narrow it down to just one of these. - */ - helper: () => LocalizedString - } - sync_interval: { - /** - * Synchronization interval - */ - label: () => LocalizedString - /** - * Interval in seconds between directory synchronizations. - */ - helper: () => LocalizedString - } - user_behavior: { - /** - * User behavior - */ - label: () => LocalizedString - /** - * Choose how to handle users that are not present in the external provider anymore. You can select between keeping, disabling, or deleting them. - */ - helper: () => LocalizedString - } - admin_behavior: { - /** - * Admin behavior - */ - label: () => LocalizedString - /** - * Choose how to handle Defguard admins that are not present in the external provider anymore. You can select between keeping them, disabling them or completely deleting them. - */ - helper: () => LocalizedString - } - admin_email: { - /** - * Admin email - */ - label: () => LocalizedString - /** - * Email address of the account on which behalf the synchronization checks will be performed, e.g. the person who setup the Google service account. See our documentation for more details. - */ - helper: () => LocalizedString - } - service_account_used: { - /** - * Service account in use - */ - label: () => LocalizedString - /** - * The service account currently being used for synchronization. You can change it by uploading a new service account key file. - */ - helper: () => LocalizedString - } - service_account_key_file: { - /** - * Service Account Key file - */ - label: () => LocalizedString - /** - * Upload a new service account key file to set the service account used for synchronization. NOTE: The uploaded file won't be visible after saving the settings and reloading the page as it's contents are sensitive and are never sent back to the dashboard. - */ - helper: () => LocalizedString - /** - * File uploaded - */ - uploaded: () => LocalizedString - /** - * Upload a service account key file - */ - uploadPrompt: () => LocalizedString - } - okta_client_id: { - /** - * Directory Sync Client ID - */ - label: () => LocalizedString - /** - * Client ID for the Okta directory sync application. - */ - helper: () => LocalizedString - } - okta_client_key: { - /** - * Directory Sync Client Private Key - */ - label: () => LocalizedString - /** - * Client private key for the Okta directory sync application in the JWK format. It won't be shown again here. - */ - helper: () => LocalizedString - } - jumpcloud_api_key: { - /** - * JumpCloud API Key - */ - label: () => LocalizedString - /** - * API Key for the JumpCloud directory sync. It will be used to periodically query JumpCloud for user state and group membership changes. - */ - helper: () => LocalizedString - } - group_match: { - /** - * Sync only matching groups - */ - label: () => LocalizedString - /** - * Provide a comma separated list of group names that should be synchronized. If left empty, all groups from the provider will be synchronized. - */ - helper: () => LocalizedString - } - } - } - } - modulesVisibility: { - /** - * Modules Visibility - */ - header: () => LocalizedString - /** - *

- Hide unused modules. -

- - Read more in documentation. - - */ - helper: (arg: { documentationLink: string }) => LocalizedString - fields: { - wireguard_enabled: { - /** - * WireGuard VPN - */ - label: () => LocalizedString - } - webhooks_enabled: { - /** - * Webhooks - */ - label: () => LocalizedString - } - worker_enabled: { - /** - * Yubikey provisioning - */ - label: () => LocalizedString - } - openid_enabled: { - /** - * OpenID Connect - */ - label: () => LocalizedString - } - } - } - defaultNetworkSelect: { - /** - * Default location view - */ - header: () => LocalizedString - /** - *

Here you can change your default location view.

- - Read more in documentation. - - */ - helper: (arg: { documentationLink: string }) => LocalizedString - filterLabels: { - /** - * Grid view - */ - grid: () => LocalizedString - /** - * List view - */ - list: () => LocalizedString - } - } - instanceBranding: { - /** - * Instance Branding - */ - header: () => LocalizedString - form: { - /** - * Name & Logo: - */ - title: () => LocalizedString - fields: { - instanceName: { - /** - * Instance name - */ - label: () => LocalizedString - /** - * Defguard - */ - placeholder: () => LocalizedString - } - mainLogoUrl: { - /** - * Login logo url - */ - label: () => LocalizedString - /** - * Maximum picture size is 250x100 px - */ - helper: () => LocalizedString - /** - * Default image - */ - placeholder: () => LocalizedString - } - navLogoUrl: { - /** - * Menu & navigation small logo - */ - label: () => LocalizedString - /** - * Maximum picture size is 100x100 px - */ - helper: () => LocalizedString - /** - * Default image - */ - placeholder: () => LocalizedString - } - } - controls: { - /** - * Restore default - */ - restoreDefault: () => LocalizedString - /** - * Save changes - */ - submit: () => LocalizedString - } - } - /** - * -

- Here you can add url of your logo and name for your defguard - instance it will be displayed instead of defguard. -

- - Read more in documentation. - - - */ - helper: (arg: { documentationLink: string }) => LocalizedString - } - license: { - /** - * Enterprise - */ - header: () => LocalizedString - helpers: { - enterpriseHeader: { - /** - * Here you can manage your Defguard Enterprise version license. - */ - text: () => LocalizedString - /** - * To learn more about Defguard Enterprise, visit our webiste. - */ - link: () => LocalizedString - } - licenseKey: { - /** - * Enter your Defguard Enterprise license key below. You should receive it via email after purchasing the license. - */ - text: () => LocalizedString - /** - * You can purchase the license here. - */ - link: () => LocalizedString - } - } - form: { - /** - * License - */ - title: () => LocalizedString - fields: { - key: { - /** - * License key - */ - label: () => LocalizedString - /** - * Your Defguard license key - */ - placeholder: () => LocalizedString - } - } - } - licenseInfo: { - /** - * License information - */ - title: () => LocalizedString - status: { - /** - * No valid license - */ - noLicense: () => LocalizedString - /** - * Expired - */ - expired: () => LocalizedString - /** - * Limits Exceeded - */ - limitsExceeded: () => LocalizedString - /** - * Active - */ - active: () => LocalizedString - } - /** - *

You have access to this enterprise feature, as you haven't exceeded any of the usage limits yet. Check the documentation for more information.

- */ - licenseNotRequired: () => LocalizedString - types: { - subscription: { - /** - * Subscription - */ - label: () => LocalizedString - /** - * A license that automatically renews at regular intervals - */ - helper: () => LocalizedString - } - offline: { - /** - * Offline - */ - label: () => LocalizedString - /** - * The license is valid until the expiry date and does not automatically renew - */ - helper: () => LocalizedString - } - } - fields: { - status: { - /** - * Status - */ - label: () => LocalizedString - /** - * Active - */ - active: () => LocalizedString - /** - * Expired - */ - expired: () => LocalizedString - /** - * A subscription license is considered valid for some time after the expiration date to account for possible automatic payment delays. - */ - subscriptionHelper: () => LocalizedString - } - type: { - /** - * Type - */ - label: () => LocalizedString - } - validUntil: { - /** - * Valid until - */ - label: () => LocalizedString - } - } - } - } - smtp: { - form: { - /** - * SMTP configuration - */ - title: () => LocalizedString - sections: { - /** - * Server settings - */ - server: () => LocalizedString - } - fields: { - encryption: { - /** - * Encryption - */ - label: () => LocalizedString - } - server: { - /** - * Server address - */ - label: () => LocalizedString - /** - * Address - */ - placeholder: () => LocalizedString - } - port: { - /** - * Server port - */ - label: () => LocalizedString - /** - * Port - */ - placeholder: () => LocalizedString - } - user: { - /** - * Server username - */ - label: () => LocalizedString - /** - * Username - */ - placeholder: () => LocalizedString - } - password: { - /** - * Server password - */ - label: () => LocalizedString - /** - * Password - */ - placeholder: () => LocalizedString - } - sender: { - /** - * Sender email address - */ - label: () => LocalizedString - /** - * Address - */ - placeholder: () => LocalizedString - /** - * -

- System messages will be sent from this address. - E.g. no-reply@my-company.com. -

- - */ - helper: () => LocalizedString - } - } - controls: { - /** - * Save changes - */ - submit: () => LocalizedString - } - } - /** - * Delete configuration - */ - 'delete': () => LocalizedString - testForm: { - /** - * Send test email - */ - title: () => LocalizedString - /** - * Enter recipent email address - */ - subtitle: () => LocalizedString - fields: { - to: { - /** - * Send test email to - */ - label: () => LocalizedString - /** - * Address - */ - placeholder: () => LocalizedString - } - } - controls: { - /** - * Send - */ - submit: () => LocalizedString - /** - * Resend - */ - resend: () => LocalizedString - /** - * Retry - */ - retry: () => LocalizedString - /** - * Test email sent - */ - success: () => LocalizedString - /** - * Error sending email - */ - error: () => LocalizedString - } - success: { - /** - * Test email has been sent successully. - */ - message: () => LocalizedString - } - error: { - /** - * There was an error sending the test email. Please check your SMTP configuration and try again. - */ - message: () => LocalizedString - /** - * Error: {error} - */ - fullError: (arg: { error: string }) => LocalizedString - } - } - /** - * Here you can configure SMTP server used to send system messages to the users. - */ - helper: () => LocalizedString - } - enrollment: { - /** - * Enrollment is a process by which a new employee will be able to activate their new account, create a password and configure a VPN device. - */ - helper: () => LocalizedString - vpnOptionality: { - /** - * VPN step optionality - */ - header: () => LocalizedString - /** - * You can choose whether creating a VPN device is optional or mandatory during enrollment - */ - helper: () => LocalizedString - } - welcomeMessage: { - /** - * Welcome message - */ - header: () => LocalizedString - /** - * -

In this text input you can use Markdown:

-
    -
  • Headings start with a hash #
  • -
  • Use asterisks for *italics*
  • -
  • Use two asterisks for **bold**
  • -
- - */ - helper: () => LocalizedString - } - welcomeEmail: { - /** - * Welcome e-mail - */ - header: () => LocalizedString - /** - * -

In this text input you can use Markdown:

-
    -
  • Headings start with a hash #
  • -
  • Use asterisks for *italics*
  • -
  • Use two asterisks for **bold**
  • -
- - */ - helper: () => LocalizedString - } - form: { - controls: { - /** - * Save changes - */ - submit: () => LocalizedString - } - welcomeMessage: { - /** - * This information will be displayed for the user once enrollment is completed. We advise you to insert relevant links and explain next steps briefly. - */ - helper: () => LocalizedString - /** - * Please input welcome message - */ - placeholder: () => LocalizedString - } - welcomeEmail: { - /** - * This information will be sent to the user once enrollment is completed. We advise you to insert relevant links and explain next steps briefly. You can reuse the welcome message here. - */ - helper: () => LocalizedString - /** - * Please input welcome email - */ - placeholder: () => LocalizedString - } - welcomeEmailSubject: { - /** - * Subject - */ - label: () => LocalizedString - } - useMessageAsEmail: { - /** - * Same as welcome message - */ - label: () => LocalizedString - } - } - } - enterprise: { - /** - * Enterprise Features - */ - header: () => LocalizedString - /** - * Here you can change enterprise settings. - */ - helper: () => LocalizedString - fields: { - deviceManagement: { - /** - * Disable users' ability to manage their devices - */ - label: () => LocalizedString - /** - * When this option is enabled, only users in the Admin group can manage devices in user profile (it's disabled for all other users) - */ - helper: () => LocalizedString - } - disableAllTraffic: { - /** - * Disable the option to route all traffic through VPN - */ - label: () => LocalizedString - /** - * When this option is enabled, users will not be able to route all traffic through the VPN using the defguard client. - */ - helper: () => LocalizedString - } - manualConfig: { - /** - * Disable users' ability to manually configure WireGuard client - */ - label: () => LocalizedString - /** - * When this option is enabled, users won't be able to view or download configuration for the manual WireGuard client setup. Only the Defguard desktop client configuration will be available. - */ - helper: () => LocalizedString - } - } - } - gatewayNotifications: { - /** - * To enable notifications you must first configure an SMTP server - */ - smtpWarning: () => LocalizedString - /** - * Notifications - */ - header: () => LocalizedString - sections: { - /** - * Gateway disconnect notifications - */ - gateway: () => LocalizedString - } - /** - * Here you can manage email notifications. - */ - helper: () => LocalizedString - form: { - /** - * Save changes - */ - submit: () => LocalizedString - fields: { - disconnectNotificationsEnabled: { - /** - * Enable gateway disconnect notifications - */ - label: () => LocalizedString - /** - * Send email notification to admin users once a gateway is disconnected - */ - help: () => LocalizedString - } - inactivityThreshold: { - /** - * Gateway inactivity time [minutes] - */ - label: () => LocalizedString - /** - * Time (in minutes) that a gateway needs to stay disconnected before a notification is sent - */ - help: () => LocalizedString - } - reconnectNotificationsEnabled: { - /** - * Enable gateway reconnect notifications - */ - label: () => LocalizedString - /** - * Send email notification to admin users once a gateway is reconnected - */ - help: () => LocalizedString - } - } - } - } - } - openidOverview: { - /** - * OpenID Apps - */ - pageTitle: () => LocalizedString - search: { - /** - * Find apps - */ - placeholder: () => LocalizedString - } - filterLabels: { - /** - * All apps - */ - all: () => LocalizedString - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - } - /** - * All apps - */ - clientCount: () => LocalizedString - /** - * Add new - */ - addNewApp: () => LocalizedString - list: { - headers: { - /** - * Name - */ - name: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Actions - */ - actions: () => LocalizedString - } - editButton: { - /** - * Edit app - */ - edit: () => LocalizedString - /** - * Delete app - */ - 'delete': () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Enable - */ - enable: () => LocalizedString - /** - * Copy client ID - */ - copy: () => LocalizedString - } - status: { - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - } - } - messages: { - /** - * Client ID copied. - */ - copySuccess: () => LocalizedString - /** - * You don't have a license for this feature. - */ - noLicenseMessage: () => LocalizedString - /** - * No results found. - */ - noClientsFound: () => LocalizedString - } - deleteApp: { - /** - * Delete app - */ - title: () => LocalizedString - /** - * Do you want to delete {appName} app ? - */ - message: (arg: { appName: string }) => LocalizedString - /** - * Delete app - */ - submit: () => LocalizedString - messages: { - /** - * App deleted. - */ - success: () => LocalizedString - } - } - enableApp: { - messages: { - /** - * App enabled. - */ - success: () => LocalizedString - } - } - disableApp: { - messages: { - /** - * App disabled. - */ - success: () => LocalizedString - } - } - modals: { - openidClientModal: { - title: { - /** - * Add Application - */ - addApp: () => LocalizedString - /** - * Edit {appName} app - */ - editApp: (arg: { appName: string }) => LocalizedString - } - /** - * Scopes: - */ - scopes: () => LocalizedString - messages: { - /** - * Client ID copied. - */ - clientIdCopy: () => LocalizedString - /** - * Client secret copied. - */ - clientSecretCopy: () => LocalizedString - } - form: { - messages: { - /** - * App created. - */ - successAdd: () => LocalizedString - /** - * App modified. - */ - successModify: () => LocalizedString - } - error: { - /** - * URL is required. - */ - urlRequired: () => LocalizedString - /** - * Must be a valid URL. - */ - validUrl: () => LocalizedString - /** - * Must have at least one scope. - */ - scopeValidation: () => LocalizedString - } - fields: { - name: { - /** - * App name - */ - label: () => LocalizedString - } - redirectUri: { - /** - * Redirect URL {count} - */ - label: (arg: { count: number }) => LocalizedString - /** - * https://example.com/redirect - */ - placeholder: () => LocalizedString - } - openid: { - /** - * OpenID - */ - label: () => LocalizedString - } - profile: { - /** - * Profile - */ - label: () => LocalizedString - } - email: { - /** - * Email - */ - label: () => LocalizedString - } - phone: { - /** - * Phone - */ - label: () => LocalizedString - } - groups: { - /** - * Groups - */ - label: () => LocalizedString - } - } - controls: { - /** - * Add URL - */ - addUrl: () => LocalizedString - } - } - /** - * Client ID - */ - clientId: () => LocalizedString - /** - * Client secret - */ - clientSecret: () => LocalizedString - } - } - } - webhooksOverview: { - /** - * Webhooks - */ - pageTitle: () => LocalizedString - search: { - /** - * Find webhooks by url - */ - placeholder: () => LocalizedString - } - filterLabels: { - /** - * All webhooks - */ - all: () => LocalizedString - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - } - /** - * All webhooks - */ - webhooksCount: () => LocalizedString - /** - * Add new - */ - addNewWebhook: () => LocalizedString - /** - * No webhooks found. - */ - noWebhooksFound: () => LocalizedString - list: { - headers: { - /** - * Name - */ - name: () => LocalizedString - /** - * Description - */ - description: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Actions - */ - actions: () => LocalizedString - } - editButton: { - /** - * Edit - */ - edit: () => LocalizedString - /** - * Delete webhook - */ - 'delete': () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Enable - */ - enable: () => LocalizedString - } - status: { - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - } - } - } - provisionersOverview: { - /** - * Provisioners - */ - pageTitle: () => LocalizedString - search: { - /** - * Find provisioners - */ - placeholder: () => LocalizedString - } - filterLabels: { - /** - * All - */ - all: () => LocalizedString - /** - * Available - */ - available: () => LocalizedString - /** - * Unavailable - */ - unavailable: () => LocalizedString - } - /** - * All provisioners - */ - provisionersCount: () => LocalizedString - /** - * No provisioners found. - */ - noProvisionersFound: () => LocalizedString - /** - * You don't have a license for this feature. - */ - noLicenseMessage: () => LocalizedString - provisioningStation: { - /** - * YubiKey provisioning station - */ - header: () => LocalizedString - /** - * In order to be able to provision your YubiKeys, first you need to set up - physical machine with USB slot. Run provided command on your chosen - machine to register it and start provisioning your keys. - */ - content: () => LocalizedString - dockerCard: { - /** - * Provisioning station docker setup command - */ - title: () => LocalizedString - } - tokenCard: { - /** - * Access token - */ - title: () => LocalizedString - } - } - list: { - headers: { - /** - * Name - */ - name: () => LocalizedString - /** - * IP address - */ - ip: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Actions - */ - actions: () => LocalizedString - } - editButton: { - /** - * Delete provisioner - */ - 'delete': () => LocalizedString - } - status: { - /** - * Available - */ - available: () => LocalizedString - /** - * Unavailable - */ - unavailable: () => LocalizedString - } - } - messages: { - copy: { - /** - * Token copied - */ - token: () => LocalizedString - /** - * Command copied - */ - command: () => LocalizedString - } - } - } - openidAllow: { - /** - * {name} would like to: - */ - header: (arg: { name: string }) => LocalizedString - scopes: { - /** - * Use your profile data for future logins. - */ - openid: () => LocalizedString - /** - * Know basic information from your profile like name, profile picture etc. - */ - profile: () => LocalizedString - /** - * Know your email address. - */ - email: () => LocalizedString - /** - * Know your phone number. - */ - phone: () => LocalizedString - /** - * Know your groups membership. - */ - groups: () => LocalizedString - } - controls: { - /** - * Accept - */ - accept: () => LocalizedString - /** - * Cancel - */ - cancel: () => LocalizedString - } - } - networkOverview: { - networkSelection: { - /** - * All locations summary - */ - all: () => LocalizedString - /** - * Select location - */ - placeholder: () => LocalizedString - } - /** - * {value}h period - */ - timeRangeSelectionLabel: (arg: { value: number }) => LocalizedString - /** - * Location overview - */ - pageTitle: () => LocalizedString - controls: { - /** - * Edit Locations settings - */ - editNetworks: () => LocalizedString - selectNetwork: { - /** - * Loading locations - */ - placeholder: () => LocalizedString - } - } - filterLabels: { - /** - * Grid view - */ - grid: () => LocalizedString - /** - * List view - */ - list: () => LocalizedString - } - gatewayStatus: { - /** - * All ({count}) Connected - */ - all: (arg: { count: number }) => LocalizedString - /** - * Some ({count}) Connected - */ - some: (arg: { count: number }) => LocalizedString - /** - * None connected - */ - none: () => LocalizedString - } - stats: { - /** - * Currently active users - */ - currentlyActiveUsers: () => LocalizedString - /** - * Currently active network devices - */ - currentlyActiveNetworkDevices: () => LocalizedString - /** - * Total user devices: {count} - */ - totalUserDevices: (arg: { count: number }) => LocalizedString - /** - * Active network devices in {hour}h - */ - activeNetworkDevices: (arg: { hour: number }) => LocalizedString - /** - * Active users in {hour}h - */ - activeUsersFilter: (arg: { hour: number }) => LocalizedString - /** - * Active devices in {hour}h - */ - activeDevicesFilter: (arg: { hour: number }) => LocalizedString - /** - * Activity in {hour}H - */ - activityIn: (arg: { hour: number }) => LocalizedString - /** - * Network usage - */ - networkUsage: () => LocalizedString - /** - * Peak - */ - peak: () => LocalizedString - /** - * In: - */ - 'in': () => LocalizedString - /** - * Out: - */ - out: () => LocalizedString - /** - * Gateway disconnected - */ - gatewayDisconnected: () => LocalizedString - } - cardsLabels: { - /** - * Connected Users - */ - users: () => LocalizedString - /** - * Connected Network Devices - */ - devices: () => LocalizedString - } - } - connectedUsersOverview: { - /** - * Connected users - */ - pageTitle: () => LocalizedString - /** - * Currently there are no connected users - */ - noUsersMessage: () => LocalizedString - userList: { - /** - * Username - */ - username: () => LocalizedString - /** - * Device - */ - device: () => LocalizedString - /** - * Connected - */ - connected: () => LocalizedString - /** - * Device location - */ - deviceLocation: () => LocalizedString - /** - * Network usage - */ - networkUsage: () => LocalizedString - } - } - networkPage: { - /** - * Edit Location - */ - pageTitle: () => LocalizedString - /** - * + Add new location - */ - addNetwork: () => LocalizedString - controls: { - networkSelect: { - /** - * Location choice - */ - label: () => LocalizedString - } - } - } - activityOverview: { - /** - * Activity stream - */ - header: () => LocalizedString - /** - * Currently there is no activity detected - */ - noData: () => LocalizedString - } - networkConfiguration: { - messages: { - 'delete': { - /** - * Network deleted - */ - success: () => LocalizedString - /** - * Failed to delete network - */ - error: () => LocalizedString - } - } - /** - * Location configuration - */ - header: () => LocalizedString - /** - * Location import - */ - importHeader: () => LocalizedString - form: { - helpers: { - /** - * Based on this address VPN network address will be defined, eg. 10.10.10.1/24 (and VPN network will be: 10.10.10.0/24). You can optionally specify multiple addresses separated by a comma. The first address is the primary address, and this one will be used for IP address assignment for devices. The other IP addresses are auxiliary and are not managed by Defguard. - */ - address: () => LocalizedString - /** - * Public IP address or domain name to which the remote peers/users will connect to. This address will be used in the configuration for the clients, but Defguard Gateways do not bind to this address. - */ - endpoint: () => LocalizedString - /** - * Gateway public address, used by VPN users to connect - */ - gateway: () => LocalizedString - /** - * Specify the DNS resolvers to query when the wireguard interface is up. - */ - dns: () => LocalizedString - /** - * List of addresses/masks that should be routed through the VPN network. - */ - allowedIps: () => LocalizedString - /** - * By default, all users will be allowed to connect to this location. If you want to restrict access to this location to a specific group, please select it below. - */ - allowedGroups: () => LocalizedString - /** - * ACL functionality is an enterprise feature and you've exceeded the user, device or network limits to use it. In order to use this feature, purchase an enterprise license or upgrade your existing one. - */ - aclFeatureDisabled: () => LocalizedString - /** - * Clients authorized with MFA will be disconnected from the location once there has been no network activity detected between them and the VPN gateway for a length of time configured below. - */ - peerDisconnectThreshold: () => LocalizedString - locationMfaMode: { - /** - * Choose how MFA is enforced when connecting to this location: - */ - description: () => LocalizedString - /** - * Internal MFA - MFA is enforced using Defguard's built-in MFA (e.g. TOTP, WebAuthn) with internal identity - */ - internal: () => LocalizedString - /** - * External MFA - If configured (see [OpenID settings](settings)) this option uses external identity provider for MFA - */ - external: () => LocalizedString - } - } - sections: { - accessControl: { - /** - * Access Control & Firewall - */ - header: () => LocalizedString - } - mfa: { - /** - * Multi-Factor Authentication - */ - header: () => LocalizedString - } - } - messages: { - /** - * Location modified. - */ - networkModified: () => LocalizedString - /** - * Location created - */ - networkCreated: () => LocalizedString - } - fields: { - name: { - /** - * Location name - */ - label: () => LocalizedString - } - address: { - /** - * Gateway VPN IP address and netmask - */ - label: () => LocalizedString - } - endpoint: { - /** - * Gateway IP address or domain name - */ - label: () => LocalizedString - } - allowedIps: { - /** - * Allowed Ips - */ - label: () => LocalizedString - } - port: { - /** - * Gateway port - */ - label: () => LocalizedString - } - dns: { - /** - * DNS - */ - label: () => LocalizedString - } - allowedGroups: { - /** - * Allowed groups - */ - label: () => LocalizedString - /** - * All groups - */ - placeholder: () => LocalizedString - } - keepalive_interval: { - /** - * Keepalive interval [seconds] - */ - label: () => LocalizedString - } - peer_disconnect_threshold: { - /** - * Client disconnect threshold [seconds] - */ - label: () => LocalizedString - } - acl_enabled: { - /** - * Enable ACL for this location - */ - label: () => LocalizedString - } - acl_default_allow: { - /** - * Default ACL policy - */ - label: () => LocalizedString - } - location_mfa_mode: { - /** - * MFA requirement - */ - label: () => LocalizedString - } - } - controls: { - /** - * Save changes - */ - submit: () => LocalizedString - /** - * Back to Overview - */ - cancel: () => LocalizedString - /** - * Remove location - */ - 'delete': () => LocalizedString - } - } - } - gatewaySetup: { - header: { - /** - * Gateway server setup - */ - main: () => LocalizedString - /** - * Docker Based Gateway Setup - */ - dockerBasedGatewaySetup: () => LocalizedString - /** - * From Package - */ - fromPackage: () => LocalizedString - /** - * One Line Install - */ - oneLineInstall: () => LocalizedString - } - card: { - /** - * Docker based gateway setup - */ - title: () => LocalizedString - /** - * Authentication Token - */ - authToken: () => LocalizedString - } - button: { - /** - * Available Packages - */ - availablePackages: () => LocalizedString - } - controls: { - /** - * Check connection status - */ - status: () => LocalizedString - } - messages: { - /** - * Defguard requires to deploy a gateway node to control wireguard VPN on the vpn server. - More details can be found in the [documentation]({setupGatewayDocs}). - There are several ways to deploy the gateway server, - below is a Docker based example, for other examples please visit [documentation]({setupGatewayDocs}). - */ - runCommand: (arg: { setupGatewayDocs: string }) => LocalizedString - /** - * Please create the network before running the gateway process. - */ - createNetwork: () => LocalizedString - /** - * No connection established, please run provided command. - */ - noConnection: () => LocalizedString - /** - * Gateway connected. - */ - connected: () => LocalizedString - /** - * Failed to get gateway status - */ - statusError: () => LocalizedString - /** - * If you are doing one line install: https://docs.defguard.net/getting-started/one-line-install - you don't need to do anything. - */ - oneLineInstall: () => LocalizedString - /** - * Install the package available at https://github.com/DefGuard/gateway/releases/latest and configure `/etc/defguard/gateway.toml` - according to the [documentation]({setupGatewayDocs}). - */ - fromPackage: (arg: { setupGatewayDocs: string }) => LocalizedString - /** - * Token below is required to authenticate and configure the gateway node. Ensure you keep this token secure and follow the deployment instructions - provided in the [documentation]({setupGatewayDocs}) to successfully set up the gateway server. - For more details and exact steps, please refer to the [documentation]({setupGatewayDocs}). - */ - authToken: (arg: { setupGatewayDocs: string }) => LocalizedString - /** - * Below is a Docker based example. For more details and exact steps, please refer to the [documentation]({setupGatewayDocs}). - */ - dockerBasedGatewaySetup: (arg: { setupGatewayDocs: string }) => LocalizedString - } - } - loginPage: { - /** - * Enter your credentials - */ - pageTitle: () => LocalizedString - /** - * Sign in with - */ - oidcLogin: () => LocalizedString - callback: { - /** - * Go back to login - */ - 'return': () => LocalizedString - /** - * An error occurred during external OpenID login - */ - error: () => LocalizedString - } - mfa: { - /** - * Two-factor authentication - */ - title: () => LocalizedString - controls: { - /** - * Use Authenticator app instead - */ - useAuthenticator: () => LocalizedString - /** - * Use security key instead - */ - useWebauthn: () => LocalizedString - /** - * Use recovery code instead - */ - useRecoveryCode: () => LocalizedString - /** - * Use E-mail instead - */ - useEmail: () => LocalizedString - } - email: { - /** - * Use code we sent to your e-mail to proceed. - */ - header: () => LocalizedString - form: { - labels: { - /** - * Code - */ - code: () => LocalizedString - } - controls: { - /** - * Resend Code - */ - resendCode: () => LocalizedString - } - } - } - totp: { - /** - * Use code from your authentication app and click button to proceed. - */ - header: () => LocalizedString - form: { - fields: { - code: { - /** - * Enter Authenticator code - */ - placeholder: () => LocalizedString - } - } - controls: { - /** - * Use authenticator code - */ - submit: () => LocalizedString - } - } - } - recoveryCode: { - /** - * Enter one of active recovery codes and click button to log in. - */ - header: () => LocalizedString - form: { - fields: { - code: { - /** - * Recovery code - */ - placeholder: () => LocalizedString - } - } - controls: { - /** - * Use recovery code - */ - submit: () => LocalizedString - } - } - } - webauthn: { - /** - * When you are ready to authenticate, press the button below. - */ - header: () => LocalizedString - controls: { - /** - * Use security key - */ - submit: () => LocalizedString - } - messages: { - /** - * Failed to read key. Please try again. - */ - error: () => LocalizedString - } - } - } - } - wizard: { - /** - * Location setup completed - */ - completed: () => LocalizedString - configuration: { - /** - * Location created - */ - successMessage: () => LocalizedString - } - welcome: { - /** - * Welcome to location wizard! - */ - header: () => LocalizedString - /** - * Before you start using VPN you need to setup your first location. When in doubt click on icon. - */ - sub: () => LocalizedString - /** - * Setup location - */ - button: () => LocalizedString - } - navigation: { - /** - * Location setup - */ - top: () => LocalizedString - titles: { - /** - * Location setup - */ - welcome: () => LocalizedString - /** - * Chose Location setup - */ - choseNetworkSetup: () => LocalizedString - /** - * Import existing location - */ - importConfig: () => LocalizedString - /** - * Configure location - */ - manualConfig: () => LocalizedString - /** - * Map imported devices - */ - mapDevices: () => LocalizedString - } - buttons: { - /** - * Next - */ - next: () => LocalizedString - /** - * Back - */ - back: () => LocalizedString - } - } - deviceMap: { - messages: { - /** - * Devices added - */ - crateSuccess: () => LocalizedString - /** - * Please fill marked fields. - */ - errorsInForm: () => LocalizedString - } - list: { - headers: { - /** - * Device Name - */ - deviceName: () => LocalizedString - /** - * IP - */ - deviceIP: () => LocalizedString - /** - * User - */ - user: () => LocalizedString - } - } - } - wizardType: { - manual: { - /** - * Manual Configuration - */ - title: () => LocalizedString - /** - * Manual location configuration - */ - description: () => LocalizedString - } - 'import': { - /** - * Import From File - */ - title: () => LocalizedString - /** - * Import from WireGuard config file - */ - description: () => LocalizedString - } - /** - * Create location - */ - createNetwork: () => LocalizedString - } - common: { - /** - * Select - */ - select: () => LocalizedString - } - locations: { - form: { - /** - * Name - */ - name: () => LocalizedString - /** - * IP address - */ - ip: () => LocalizedString - /** - * User - */ - user: () => LocalizedString - /** - * File - */ - fileName: () => LocalizedString - /** - * Select file - */ - selectFile: () => LocalizedString - messages: { - /** - * Devices created - */ - devicesCreated: () => LocalizedString - } - validation: { - /** - * Invalid address - */ - invalidAddress: () => LocalizedString - } - } - } - } - layout: { - select: { - /** - * Add new + - */ - addNewOptionDefault: () => LocalizedString - } - } - redirectPage: { - /** - * You have been logged in - */ - title: () => LocalizedString - /** - * You will be redirected in a moment... - */ - subtitle: () => LocalizedString - } - enrollmentPage: { - /** - * Enrollment - */ - title: () => LocalizedString - controls: { - /** - * Restore default - */ - 'default': () => LocalizedString - /** - * Save changes - */ - save: () => LocalizedString - } - messages: { - edit: { - /** - * Settings changed - */ - success: () => LocalizedString - /** - * Save failed - */ - error: () => LocalizedString - } - } - /** - * Enrollment is a process by which a new employee will be able to activate their new account, create a password and configure a VPN device. You can customize it here. - */ - messageBox: () => LocalizedString - settings: { - welcomeMessage: { - /** - * Welcome message - */ - title: () => LocalizedString - /** - * This information will be displayed for user in service once enrollment is completed. We advise to insert links and explain next steps briefly. You can use same message as in the e-mail. - */ - messageBox: () => LocalizedString - } - vpnOptionality: { - /** - * VPN set optionallity - */ - title: () => LocalizedString - select: { - options: { - /** - * Optional - */ - optional: () => LocalizedString - /** - * Mandatory - */ - mandatory: () => LocalizedString - } - } - } - welcomeEmail: { - /** - * Welcome e-mail - */ - title: () => LocalizedString - subject: { - /** - * E-mail subject - */ - label: () => LocalizedString - } - /** - * This information will be sent to user once enrollment is completed. We advise to insert links and explain next steps briefly. - */ - messageBox: () => LocalizedString - controls: { - /** - * Same as welcome message - */ - duplicateWelcome: () => LocalizedString - } - } - } - } - supportPage: { - /** - * Support - */ - title: () => LocalizedString - modals: { - confirmDataSend: { - /** - * Send Support Data - */ - title: () => LocalizedString - /** - * Please confirm that you actually want to send support debug information. None of your private information will be sent (wireguard keys, email addresses, etc. will not be sent). - */ - subTitle: () => LocalizedString - /** - * Send support data - */ - submit: () => LocalizedString - } - } - debugDataCard: { - /** - * Support data - */ - title: () => LocalizedString - /** - * - If you need assistance or you were asked to generate support data by our team (for example on our Matrix support channel: **#defguard-support:teonite.com**), you have two options: - * Either you can configure SMTP settings and click "Send support data" - * Or click "Download support data" and create a bug report in our GitHub attaching this file. - - */ - body: () => LocalizedString - /** - * Download support data - */ - downloadSupportData: () => LocalizedString - /** - * Download logs - */ - downloadLogs: () => LocalizedString - /** - * Send support data - */ - sendMail: () => LocalizedString - /** - * Email sent - */ - mailSent: () => LocalizedString - /** - * Error sending email - */ - mailError: () => LocalizedString - } - supportCard: { - /** - * Support - */ - title: () => LocalizedString - /** - * - Before contacting or submitting any issues to GitHub please get familiar with Defguard documentation available at [docs.defguard.net](https://docs.defguard.net/) - - To submit: - * Bugs - please go to [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=bug&template=bug_report.md&title=) - * Feature request - please go to [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=feature&template=feature_request.md&title=) - - Any other requests you can reach us at: support@defguard.net - - */ - body: () => LocalizedString - } - } - devicesPage: { - /** - * Network Devices - */ - title: () => LocalizedString - search: { - /** - * Find - */ - placeholder: () => LocalizedString - } - bar: { - /** - * All devices - */ - itemsCount: () => LocalizedString - filters: { - } - actions: { - /** - * Add new - */ - addNewDevice: () => LocalizedString - } - } - list: { - columns: { - labels: { - /** - * Device Name - */ - name: () => LocalizedString - /** - * Location - */ - location: () => LocalizedString - /** - * IP Addresses - */ - assignedIps: () => LocalizedString - /** - * Description - */ - description: () => LocalizedString - /** - * Added By - */ - addedBy: () => LocalizedString - /** - * Add Date - */ - addedAt: () => LocalizedString - /** - * Edit - */ - edit: () => LocalizedString - } - } - edit: { - actionLabels: { - /** - * View config - */ - config: () => LocalizedString - /** - * Generate auth token - */ - generateToken: () => LocalizedString - } - } - } - } - acl: { - messageBoxes: { - aclAliasKind: { - component: { - /** - * Component - */ - name: () => LocalizedString - /** - * combined with manually configured destination fields in ACL - */ - description: () => LocalizedString - } - destination: { - /** - * Destination - */ - name: () => LocalizedString - /** - * translated into a separate set of firewall rules - */ - description: () => LocalizedString - } - } - networkSelectionIndicatorsHelper: { - /** - * - Location access **denied** by default – network traffic not explicitly defined by the rules will be blocked. - - */ - denied: () => LocalizedString - /** - * - Location access **allowed** by default – network traffic not explicitly defined by the rules will be passed. - - */ - allowed: () => LocalizedString - /** - * - Location access unmanaged (ACL disabled) - - */ - unmanaged: () => LocalizedString - } - } - /** - * Access Control List - */ - sharedTitle: () => LocalizedString - fieldsSelectionLabels: { - /** - * All ports - */ - ports: () => LocalizedString - /** - * All protocols - */ - protocols: () => LocalizedString - } - ruleStatus: { - /** - * New - */ - 'new': () => LocalizedString - /** - * Applied - */ - applied: () => LocalizedString - /** - * Pending Change - */ - modified: () => LocalizedString - /** - * Pending Deletion - */ - deleted: () => LocalizedString - /** - * Enable - */ - enable: () => LocalizedString - /** - * Enabled - */ - enabled: () => LocalizedString - /** - * Disable - */ - disable: () => LocalizedString - /** - * Disabled - */ - disabled: () => LocalizedString - /** - * Expired - */ - expired: () => LocalizedString - } - listPage: { - tabs: { - /** - * Rules - */ - rules: () => LocalizedString - /** - * Aliases - */ - aliases: () => LocalizedString - } - message: { - /** - * Change discarded - */ - changeDiscarded: () => LocalizedString - /** - * Pending change added - */ - changeAdded: () => LocalizedString - /** - * Failed to make change - */ - changeFail: () => LocalizedString - /** - * Pending changes applied - */ - applyChanges: () => LocalizedString - /** - * Failed to apply changes - */ - applyFail: () => LocalizedString - } - rules: { - modals: { - applyConfirm: { - /** - * Deploy pending changes - */ - title: () => LocalizedString - /** - * {count} changes will be deployed - */ - subtitle: (arg: { count: number }) => LocalizedString - /** - * Deploy changes - */ - submit: () => LocalizedString - } - filterGroupsModal: { - groupHeaders: { - /** - * Aliases - */ - alias: () => LocalizedString - /** - * Locations - */ - location: () => LocalizedString - /** - * Groups - */ - groups: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - } - /** - * Save Filter - */ - submit: () => LocalizedString - } - } - listControls: { - /** - * Find name - */ - searchPlaceholder: () => LocalizedString - /** - * Add new - */ - addNew: () => LocalizedString - filter: { - /** - * Filter - */ - nothingApplied: () => LocalizedString - /** - * Filters ({count}) - */ - applied: (arg: { count: number }) => LocalizedString - } - apply: { - /** - * Deploy pending changes - */ - noChanges: () => LocalizedString - /** - * Deploy pending changes ({count}) - */ - all: (arg: { count: number }) => LocalizedString - /** - * Deploy selected changes ({count}) - */ - selective: (arg: { count: number }) => LocalizedString - } - } - list: { - pendingList: { - /** - * Pending Changes - */ - title: () => LocalizedString - /** - * No pending changes - */ - noData: () => LocalizedString - /** - * No pending changes found - */ - noDataSearch: () => LocalizedString - } - deployedList: { - /** - * Deployed Rules - */ - title: () => LocalizedString - /** - * No deployed rules - */ - noData: () => LocalizedString - /** - * No deployed rules found - */ - noDataSearch: () => LocalizedString - } - headers: { - /** - * Rule name - */ - name: () => LocalizedString - /** - * ID - */ - id: () => LocalizedString - /** - * Destination - */ - destination: () => LocalizedString - /** - * Allowed - */ - allowed: () => LocalizedString - /** - * Denied - */ - denied: () => LocalizedString - /** - * Locations - */ - locations: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Edit - */ - edit: () => LocalizedString - } - tags: { - /** - * All - */ - all: () => LocalizedString - /** - * All denied - */ - allDenied: () => LocalizedString - /** - * All allowed - */ - allAllowed: () => LocalizedString - } - editMenu: { - /** - * Discard Changes - */ - discard: () => LocalizedString - /** - * Mark for Deletion - */ - 'delete': () => LocalizedString - } - } - } - aliases: { - message: { - /** - * Pending changes applied - */ - rulesApply: () => LocalizedString - /** - * Failed to apply changes - */ - rulesApplyFail: () => LocalizedString - /** - * Alias deleted - */ - aliasDeleted: () => LocalizedString - /** - * Alias deletion failed - */ - aliasDeleteFail: () => LocalizedString - } - modals: { - applyConfirm: { - /** - * Confirm Alias Deployment - */ - title: () => LocalizedString - /** - * The updated aliases will modify the following rule(s) currently deployed on the gateway. - Please ensure these changes are intended before proceeding. - */ - message: () => LocalizedString - /** - * Affected Rules - */ - listLabel: () => LocalizedString - /** - * Deploy Changes - */ - submit: () => LocalizedString - } - deleteBlock: { - /** - * Deletion blocked - */ - title: () => LocalizedString - /** - * - This alias is currently in use by the following rule(s) and cannot be deleted. To proceed with deletion, you must first remove it from these rules({rulesCount}): - - */ - content: (arg: { rulesCount: number }) => LocalizedString - } - filterGroupsModal: { - groupLabels: { - /** - * Rules - */ - rules: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - } - } - create: { - labels: { - /** - * Alias name - */ - name: () => LocalizedString - /** - * Alias kind - */ - kind: () => LocalizedString - /** - * IPv4/6 CIDR range address - */ - ip: () => LocalizedString - /** - * Ports or Port Ranges - */ - ports: () => LocalizedString - /** - * Protocols - */ - protocols: () => LocalizedString - } - placeholders: { - /** - * All Protocols - */ - protocols: () => LocalizedString - /** - * All Ports - */ - ports: () => LocalizedString - /** - * All IP addresses - */ - ip: () => LocalizedString - } - kindOptions: { - /** - * Destination - */ - destination: () => LocalizedString - /** - * Component - */ - component: () => LocalizedString - } - controls: { - /** - * Cancel - */ - cancel: () => LocalizedString - /** - * Edit Alias - */ - edit: () => LocalizedString - /** - * Create Alias - */ - create: () => LocalizedString - } - messages: { - /** - * Alias modified - */ - modified: () => LocalizedString - /** - * Alias created - */ - created: () => LocalizedString - } - } - } - listControls: { - /** - * Find name - */ - searchPlaceholder: () => LocalizedString - /** - * Add new - */ - addNew: () => LocalizedString - filter: { - /** - * Filter - */ - nothingApplied: () => LocalizedString - /** - * Filters ({count}) - */ - applied: (arg: { count: number }) => LocalizedString - } - apply: { - /** - * Deploy pending changes - */ - noChanges: () => LocalizedString - /** - * Deploy pending changes ({count}) - */ - all: (arg: { count: number }) => LocalizedString - /** - * Deploy selected changes ({count}) - */ - selective: (arg: { count: number }) => LocalizedString - } - } - list: { - pendingList: { - /** - * Pending Changes - */ - title: () => LocalizedString - /** - * No pending changes - */ - noData: () => LocalizedString - /** - * No pending changes found - */ - noDataSearch: () => LocalizedString - } - deployedList: { - /** - * Deployed Aliases - */ - title: () => LocalizedString - /** - * No deployed aliases - */ - noData: () => LocalizedString - /** - * No deployed aliases found - */ - noDataSearch: () => LocalizedString - } - headers: { - /** - * ID - */ - id: () => LocalizedString - /** - * Alias name - */ - name: () => LocalizedString - /** - * Alias kind - */ - kind: () => LocalizedString - /** - * IPv4/6 CIDR range address - */ - ip: () => LocalizedString - /** - * Ports - */ - ports: () => LocalizedString - /** - * Protocols - */ - protocols: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Edit - */ - edit: () => LocalizedString - /** - * Rules - */ - rules: () => LocalizedString - } - status: { - /** - * Applied - */ - applied: () => LocalizedString - /** - * Modified - */ - changed: () => LocalizedString - } - tags: { - /** - * All denied - */ - allDenied: () => LocalizedString - /** - * All allowed - */ - allAllowed: () => LocalizedString - } - editMenu: { - /** - * Discard changes - */ - discardChanges: () => LocalizedString - /** - * Delete alias - */ - 'delete': () => LocalizedString - } - } - } - } - createPage: { - formError: { - /** - * Conflicting members - */ - allowDenyConflict: () => LocalizedString - /** - * Must configure some allowed users, groups or devices - */ - allowNotConfigured: () => LocalizedString - } - infoBox: { - /** - * - Specify one or more fields (Users, Groups or Devices) to define this rule. The rule will consider all inputs provided for matching conditions. Leave any fields blank if not needed. - */ - allowInstructions: () => LocalizedString - /** - * - Specify one or more fields (IP Addresses or Ports) to define this rule. The rule will consider all inputs provided for matching conditions. Leave any fields blank if not needed. - */ - destinationInstructions: () => LocalizedString - } - message: { - /** - * Rule created and added to pending changes. - */ - create: () => LocalizedString - /** - * Rule creation failed - */ - createFail: () => LocalizedString - } - headers: { - /** - * Rule - */ - rule: () => LocalizedString - /** - * Create Rule - */ - createRule: () => LocalizedString - /** - * Allowed Users/Groups/Devices - */ - allowed: () => LocalizedString - /** - * Denied Users/Groups/Devices - */ - denied: () => LocalizedString - /** - * Destination - */ - destination: () => LocalizedString - } - labels: { - /** - * Rule name - */ - name: () => LocalizedString - /** - * Priority - */ - priority: () => LocalizedString - /** - * Status - */ - status: () => LocalizedString - /** - * Locations - */ - locations: () => LocalizedString - /** - * Allow all users - */ - allowAllUsers: () => LocalizedString - /** - * Include all locations - */ - allowAllNetworks: () => LocalizedString - /** - * Allow all network devices - */ - allowAllNetworkDevices: () => LocalizedString - /** - * Deny all users - */ - denyAllUsers: () => LocalizedString - /** - * Deny all network devices - */ - denyAllNetworkDevices: () => LocalizedString - /** - * Users - */ - users: () => LocalizedString - /** - * Groups - */ - groups: () => LocalizedString - /** - * Network devices - */ - devices: () => LocalizedString - /** - * Protocols - */ - protocols: () => LocalizedString - /** - * IPv4/6 CIDR range or address - */ - manualIp: () => LocalizedString - /** - * Ports - */ - ports: () => LocalizedString - /** - * Aliases - */ - aliases: () => LocalizedString - /** - * Expiration Date - */ - expires: () => LocalizedString - /** - * Manual Input - */ - manualInput: () => LocalizedString - } - placeholders: { - /** - * All protocols - */ - allProtocols: () => LocalizedString - /** - * All IP addresses - */ - allIps: () => LocalizedString - } - } - } - activity: { - /** - * Activity log - */ - title: () => LocalizedString - modals: { - timeRange: { - /** - * Activity time - */ - title: () => LocalizedString - } - } - list: { - /** - * All activity - */ - allLabel: () => LocalizedString - headers: { - /** - * Date - */ - date: () => LocalizedString - /** - * User - */ - user: () => LocalizedString - /** - * IP - */ - ip: () => LocalizedString - /** - * Location - */ - location: () => LocalizedString - /** - * Event - */ - event: () => LocalizedString - /** - * Module - */ - module: () => LocalizedString - /** - * Device - */ - device: () => LocalizedString - /** - * Description - */ - description: () => LocalizedString - } - noData: { - /** - * No activities present - */ - data: () => LocalizedString - /** - * No activities found - */ - search: () => LocalizedString - } - } - } - enums: { - activityLogEventType: { - /** - * User login - */ - user_login: () => LocalizedString - /** - * User login failed - */ - user_login_failed: () => LocalizedString - /** - * User MFA login - */ - user_mfa_login: () => LocalizedString - /** - * User MFA login failed - */ - user_mfa_login_failed: () => LocalizedString - /** - * Recovery code used - */ - recovery_code_used: () => LocalizedString - /** - * User logout - */ - user_logout: () => LocalizedString - /** - * User added - */ - user_added: () => LocalizedString - /** - * User removed - */ - user_removed: () => LocalizedString - /** - * User modified - */ - user_modified: () => LocalizedString - /** - * User groups modified - */ - user_groups_modified: () => LocalizedString - /** - * MFA enabled - */ - mfa_enabled: () => LocalizedString - /** - * MFA disabled - */ - mfa_disabled: () => LocalizedString - /** - * User MFA disabled - */ - user_mfa_disabled: () => LocalizedString - /** - * MFA TOTP enabled - */ - mfa_totp_enabled: () => LocalizedString - /** - * MFA TOTP disabled - */ - mfa_totp_disabled: () => LocalizedString - /** - * MFA email enabled - */ - mfa_email_enabled: () => LocalizedString - /** - * MFA email disabled - */ - mfa_email_disabled: () => LocalizedString - /** - * MFA security key added - */ - mfa_security_key_added: () => LocalizedString - /** - * MFA security key removed - */ - mfa_security_key_removed: () => LocalizedString - /** - * Device added - */ - device_added: () => LocalizedString - /** - * Device removed - */ - device_removed: () => LocalizedString - /** - * Device modified - */ - device_modified: () => LocalizedString - /** - * Network device added - */ - network_device_added: () => LocalizedString - /** - * Network device removed - */ - network_device_removed: () => LocalizedString - /** - * Network device modified - */ - network_device_modified: () => LocalizedString - /** - * Activity log stream created - */ - activity_log_stream_created: () => LocalizedString - /** - * Activity log stream modified - */ - activity_log_stream_modified: () => LocalizedString - /** - * Activity log stream removed - */ - activity_log_stream_removed: () => LocalizedString - /** - * VPN client connected - */ - vpn_client_connected: () => LocalizedString - /** - * VPN client disconnected - */ - vpn_client_disconnected: () => LocalizedString - /** - * VPN client connected to MFA location - */ - vpn_client_connected_mfa: () => LocalizedString - /** - * VPN client disconnected from MFA location - */ - vpn_client_disconnected_mfa: () => LocalizedString - /** - * VPN client failed MFA authentication - */ - vpn_client_mfa_failed: () => LocalizedString - /** - * Enrollment token added - */ - enrollment_token_added: () => LocalizedString - /** - * Enrollment started - */ - enrollment_started: () => LocalizedString - /** - * Device added - */ - enrollment_device_added: () => LocalizedString - /** - * Enrollment completed - */ - enrollment_completed: () => LocalizedString - /** - * Password reset requested - */ - password_reset_requested: () => LocalizedString - /** - * Password reset started - */ - password_reset_started: () => LocalizedString - /** - * Password reset completed - */ - password_reset_completed: () => LocalizedString - /** - * VPN location added - */ - vpn_location_added: () => LocalizedString - /** - * VPN location removed - */ - vpn_location_removed: () => LocalizedString - /** - * VPN location modified - */ - vpn_location_modified: () => LocalizedString - /** - * API token added - */ - api_token_added: () => LocalizedString - /** - * API token removed - */ - api_token_removed: () => LocalizedString - /** - * API token renamed - */ - api_token_renamed: () => LocalizedString - /** - * OpenID app added - */ - open_id_app_added: () => LocalizedString - /** - * OpenID app removed - */ - open_id_app_removed: () => LocalizedString - /** - * OpenID app modified - */ - open_id_app_modified: () => LocalizedString - /** - * OpenID app state changed - */ - open_id_app_state_changed: () => LocalizedString - /** - * OpenID provider removed - */ - open_id_provider_removed: () => LocalizedString - /** - * OpenID provider modified - */ - open_id_provider_modified: () => LocalizedString - /** - * Settings updated - */ - settings_updated: () => LocalizedString - /** - * Settings partially updated - */ - settings_updated_partial: () => LocalizedString - /** - * Default branding restored - */ - settings_default_branding_restored: () => LocalizedString - /** - * Groups bulk assigned - */ - groups_bulk_assigned: () => LocalizedString - /** - * Group added - */ - group_added: () => LocalizedString - /** - * Group modified - */ - group_modified: () => LocalizedString - /** - * Group removed - */ - group_removed: () => LocalizedString - /** - * Group member added - */ - group_member_added: () => LocalizedString - /** - * Group member removed - */ - group_member_removed: () => LocalizedString - /** - * Group members modified - */ - group_members_modified: () => LocalizedString - /** - * Webhook added - */ - web_hook_added: () => LocalizedString - /** - * Webhook modified - */ - web_hook_modified: () => LocalizedString - /** - * Webhook removed - */ - web_hook_removed: () => LocalizedString - /** - * Webhook state changed - */ - web_hook_state_changed: () => LocalizedString - /** - * Authentication key added - */ - authentication_key_added: () => LocalizedString - /** - * Authentication key removed - */ - authentication_key_removed: () => LocalizedString - /** - * Authentication key renamed - */ - authentication_key_renamed: () => LocalizedString - /** - * Password changed - */ - password_changed: () => LocalizedString - /** - * Password changed by admin - */ - password_changed_by_admin: () => LocalizedString - /** - * Password reset - */ - password_reset: () => LocalizedString - /** - * Client configuration token added - */ - client_configuration_token_added: () => LocalizedString - /** - * User SNAT binding added - */ - user_snat_binding_added: () => LocalizedString - /** - * User SNAT binding modified - */ - user_snat_binding_modified: () => LocalizedString - /** - * User SNAT binding removed - */ - user_snat_binding_removed: () => LocalizedString - } - activityLogModule: { - /** - * Defguard - */ - defguard: () => LocalizedString - /** - * Client - */ - client: () => LocalizedString - /** - * Enrollment - */ - enrollment: () => LocalizedString - /** - * VPN - */ - vpn: () => LocalizedString - } - } -} - -export type Formatters = {} diff --git a/web/src/i18n/i18n-util.async.ts b/web/src/i18n/i18n-util.async.ts deleted file mode 100644 index 25819ad3e..000000000 --- a/web/src/i18n/i18n-util.async.ts +++ /dev/null @@ -1,28 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { initFormatters } from './formatters' -import type { Locales, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales, locales } from './i18n-util' - -const localeTranslationLoaders = { - en: () => import('./en'), - ko: () => import('./ko'), - pl: () => import('./pl'), -} - -const updateDictionary = (locale: Locales, dictionary: Partial): Translations => - loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary } - -export const importLocaleAsync = async (locale: Locales): Promise => - (await localeTranslationLoaders[locale]()).default as unknown as Translations - -export const loadLocaleAsync = async (locale: Locales): Promise => { - updateDictionary(locale, await importLocaleAsync(locale)) - loadFormatters(locale) -} - -export const loadAllLocalesAsync = (): Promise => Promise.all(locales.map(loadLocaleAsync)) - -export const loadFormatters = (locale: Locales): void => - void (loadedFormatters[locale] = initFormatters(locale)) diff --git a/web/src/i18n/i18n-util.sync.ts b/web/src/i18n/i18n-util.sync.ts deleted file mode 100644 index e3a5b51c6..000000000 --- a/web/src/i18n/i18n-util.sync.ts +++ /dev/null @@ -1,28 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { initFormatters } from './formatters' -import type { Locales, Translations } from './i18n-types' -import { loadedFormatters, loadedLocales, locales } from './i18n-util' - -import en from './en' -import ko from './ko' -import pl from './pl' - -const localeTranslations = { - en, - ko, - pl, -} - -export const loadLocale = (locale: Locales): void => { - if (loadedLocales[locale]) return - - loadedLocales[locale] = localeTranslations[locale] as unknown as Translations - loadFormatters(locale) -} - -export const loadAllLocales = (): void => locales.forEach(loadLocale) - -export const loadFormatters = (locale: Locales): void => - void (loadedFormatters[locale] = initFormatters(locale)) diff --git a/web/src/i18n/i18n-util.ts b/web/src/i18n/i18n-util.ts deleted file mode 100644 index 65ae07091..000000000 --- a/web/src/i18n/i18n-util.ts +++ /dev/null @@ -1,39 +0,0 @@ -// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. -/* eslint-disable */ - -import { i18n as initI18n, i18nObject as initI18nObject, i18nString as initI18nString } from 'typesafe-i18n' -import type { LocaleDetector } from 'typesafe-i18n/detectors' -import type { LocaleTranslationFunctions, TranslateByString } from 'typesafe-i18n' -import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors' -import { initExtendDictionary } from 'typesafe-i18n/utils' -import type { Formatters, Locales, Translations, TranslationFunctions } from './i18n-types' - -export const baseLocale: Locales = 'en' - -export const locales: Locales[] = [ - 'en', - 'ko', - 'pl' -] - -export const isLocale = (locale: string): locale is Locales => locales.includes(locale as Locales) - -export const loadedLocales: Record = {} as Record - -export const loadedFormatters: Record = {} as Record - -export const extendDictionary = initExtendDictionary() - -export const i18nString = (locale: Locales): TranslateByString => initI18nString(locale, loadedFormatters[locale]) - -export const i18nObject = (locale: Locales): TranslationFunctions => - initI18nObject( - locale, - loadedLocales[locale], - loadedFormatters[locale] - ) - -export const i18n = (): LocaleTranslationFunctions => - initI18n(loadedLocales, loadedFormatters) - -export const detectLocale = (...detectors: LocaleDetector[]): Locales => detectLocaleFn(baseLocale, locales, ...detectors) diff --git a/web/src/i18n/ko/index.ts b/web/src/i18n/ko/index.ts deleted file mode 100644 index 62ee06aff..000000000 --- a/web/src/i18n/ko/index.ts +++ /dev/null @@ -1,1725 +0,0 @@ -import { deepmerge } from 'deepmerge-ts'; -import { PartialDeep } from 'type-fest'; - -import en from '../en'; -import { Translation } from '../i18n-types'; - -const translation: PartialDeep = { - common: { - conditions: { - or: '또는', - and: '그리고', - equal: '같음', - }, - controls: { - next: '다음', - back: '뒤로', - cancel: '취소', - confirm: '확인', - submit: '제출', - close: '닫기', - select: '선택', - finish: '완료', - saveChanges: '변경 사항 저장', - save: '저장', - RestoreDefault: '기본값 복원', - delete: '삭제', - rename: '이름 변경', - copy: '복사', - edit: '편집', - }, - key: '키', - name: '이름', - }, - messages: { - error: '오류가 발생했습니다.', - success: '작업이 성공했습니다', - errorVersion: '애플리케이션 버전을 가져오지 못했습니다.', - insecureContext: '컨텍스트가 안전하지 않습니다.', - details: '상세내용:', - clipboard: { - error: '클립보드에 액세스할 수 없습니다.', - success: '클립보드에 복사되었습니다.', - }, - }, - modals: { - addGroup: { - title: '그룹 추가', - selectAll: '모든 사용자 선택', - groupName: '그룹 이름', - searchPlaceholder: '필터/검색', - submit: '그룹 생성', - }, - editGroup: { - title: '그룹 편집', - selectAll: '모든 사용자 선택', - groupName: '그룹 이름', - searchPlaceholder: '필터/검색', - submit: '그룹 업데이트', - }, - deleteGroup: { - title: '{name} 그룹 삭제', - subTitle: '이 작업은 이 그룹을 영구적으로 삭제합니다.', - locationListHeader: '이 그룹은 현재 다음 VPN 위치에 할당되어 있습니다:', - locationListFooter: `이것이 주어진 위치에 허용된 유일한 그룹인 경우, 해당 위치는 모든 사용자가 액세스할 수 있게 됩니다.`, - submit: '그룹 삭제', - cancel: '취소', - }, - deviceConfig: { - title: '장치 VPN 구성', - }, - changePasswordSelf: { - title: '비밀번호 변경', - messages: { - success: '비밀번호가 변경되었습니다', - error: '비밀번호 변경에 실패했습니다', - }, - form: { - labels: { - newPassword: '새 비밀번호', - oldPassword: '현재 비밀번호', - repeat: '새 비밀번호 확인', - }, - }, - controls: { - submit: '비밀번호 변경', - cancel: '취소', - }, - }, - startEnrollment: { - title: '등록 시작', - desktopTitle: '데스크톱 활성화', - messages: { - success: '사용자 등록이 시작되었습니다', - successDesktop: '데스크톱 구성이 시작되었습니다', - error: '사용자 등록을 시작하지 못했습니다', - errorDesktop: '데스크톱 활성화를 시작하지 못했습니다', - }, - form: { - email: { - label: '이메일', - }, - mode: { - options: { - email: '이메일로 토큰 보내기', - manual: '직접 토큰 전달', - }, - }, - submit: '등록 시작', - submitDesktop: '데스크톱 활성화', - smtpDisabled: - '이메일로 토큰을 보내려면 SMTP를 구성하십시오. 설정 -> SMTP로 이동하십시오.', - }, - tokenCard: { - title: '활성화 토큰', - }, - urlCard: { - title: 'Defguard 인스턴스 URL', - }, - }, - deleteNetwork: { - title: '{name} 위치 삭제', - subTitle: '이 작업은 이 위치를 영구적으로 삭제합니다.', - submit: '위치 삭제', - cancel: '취소', - }, - changeWebhook: { - messages: { - success: 'Webhook이 변경되었습니다.', - }, - }, - manageWebAuthNKeys: { - title: '보안 키', - messages: { - deleted: 'WebAuthN 키가 삭제되었습니다.', - duplicateKeyError: '키가 이미 등록되어 있습니다', - }, - infoMessage: ` -

- 보안 키는 인증 코드 대신 2단계 인증으로 사용될 수 있습니다. - - 보안 키 구성에 대해 자세히 알아보세요. -

-`, - form: { - messages: { - success: '보안 키가 추가되었습니다.', - }, - fields: { - name: { - label: '새 키 이름', - }, - }, - controls: { - submit: '새 키 추가', - }, - }, - }, - recoveryCodes: { - title: '복구 코드', - submit: '코드를 저장했습니다', - messages: { - copied: '코드가 복사되었습니다.', - }, - infoMessage: ` -

- 복구 코드는 비밀번호와 동일한 수준의 주의를 기울여 취급하십시오! - - Lastpass, bitwarden 또는 Keeper와 같은 비밀번호 관리자를 사용하여 저장하는 것을 권장합니다. -

-`, - }, - registerTOTP: { - title: 'Authenticator 앱 설정', - infoMessage: ` -

- MFA를 설정하려면, 이 QR 코드를 인증 앱으로 스캔한 다음, - 아래 필드에 코드를 입력하세요: -

-`, - messages: { - totpCopied: 'TOTP 경로가 복사되었습니다.', - success: 'TOTP가 활성화되었습니다', - }, - copyPath: 'TOTP 경로 복사', - form: { - fields: { - code: { - label: 'Authenticator 코드', - error: '코드가 유효하지 않습니다', - }, - }, - controls: { - submit: '코드 확인', - }, - }, - }, - registerEmailMFA: { - title: '이메일 MFA 설정', - infoMessage: ` -

- MFA를 설정하려면 계정 이메일: {email}로 전송된 코드를 입력하세요 -

-`, - messages: { - success: '이메일 MFA가 활성화되었습니다', - resend: '인증 코드가 재전송되었습니다', - }, - form: { - fields: { - code: { - label: '이메일 코드', - error: '코드가 유효하지 않습니다', - }, - }, - controls: { - submit: '코드 확인', - resend: '이메일 재전송', - }, - }, - }, - editDevice: { - title: '장치 편집', - messages: { - success: '장치가 업데이트되었습니다.', - }, - form: { - fields: { - name: { - label: '장치 이름', - }, - publicKey: { - label: '장치 공개 키 (WireGuard)', - }, - }, - controls: { - submit: '장치 편집', - }, - }, - }, - deleteDevice: { - title: '장치 삭제', - message: '{deviceName} 장치를 삭제하시겠습니까?', - submit: '장치 삭제', - messages: { - success: '장치가 삭제되었습니다.', - }, - }, - keyDetails: { - title: 'YubiKey 세부 정보', - downloadAll: '모든 키 다운로드', - }, - deleteUser: { - title: '계정 삭제', - controls: { - submit: '계정 삭제', - }, - message: '{username} 계정을 영구적으로 삭제하시겠습니까?', - messages: { - success: '{username}이(가) 삭제되었습니다.', - }, - }, - disableUser: { - title: '계정 비활성화', - controls: { - submit: '계정 비활성화', - }, - message: '{username} 계정을 비활성화하시겠습니까?', - messages: { - success: '{username}이(가) 비활성화되었습니다.', - }, - }, - enableUser: { - title: '계정 활성화', - controls: { - submit: '계정 활성화', - }, - message: '{username} 계정을 활성화하시겠습니까?', - messages: { - success: '{username}이(가) 활성화되었습니다.', - }, - }, - deleteProvisioner: { - title: '프로비저너 삭제', - controls: { - submit: '프로비저너 삭제', - }, - message: '{id} 프로비저너를 삭제하시겠습니까?', - messages: { - success: '{provisioner}이(가) 삭제되었습니다.', - }, - }, - changeUserPassword: { - messages: { - success: '비밀번호가 변경되었습니다.', - }, - title: '사용자 비밀번호 변경', - form: { - controls: { - submit: '새 비밀번호 저장', - }, - fields: { - newPassword: { - label: '새 비밀번호', - }, - confirmPassword: { - label: '비밀번호 다시 입력', - }, - }, - }, - }, - provisionKeys: { - title: 'Yubikey 프로비저닝:', - warning: '이 작업은 yubikey의 openpgp 애플리케이션을 삭제하고 재구성합니다.', - infoBox: `선택한 프로비저너에는 프로비저닝할 깨끗한 YubiKey가 - 연결되어 있어야 합니다. 사용된 YubiKey를 청소하려면 프로비저닝하기 전에 - gpg --card-edit 를 실행하십시오.`, - selectionLabel: '다음 프로비저너 중 하나를 선택하여 YubiKey를 프로비저닝하십시오:', - noData: { - workers: '작업자를 찾을 수 없습니다. 대기 중...', - }, - controls: { - submit: 'YubiKey 프로비저닝', - }, - messages: { - success: '키가 프로비저닝되었습니다', - errorStatus: '작업자 상태를 가져오는 중 오류가 발생했습니다.', - }, - }, - addUser: { - title: '새 사용자 추가', - messages: { - userAdded: '사용자가 추가되었습니다', - }, - form: { - submit: '사용자 추가', - fields: { - username: { - placeholder: '로그인', - label: '로그인', - }, - password: { - placeholder: '비밀번호', - label: '비밀번호', - }, - email: { - placeholder: '사용자 이메일', - label: '사용자 이메일', - }, - firstName: { - placeholder: '이름', - label: '이름', - }, - lastName: { - placeholder: '성', - label: '성', - }, - phone: { - placeholder: '전화번호', - label: '전화번호', - }, - enableEnrollment: { - label: '등록 프로세스 사용', - link: '자세한 정보는 여기를 참고하세요', - }, - }, - }, - }, - webhookModal: { - title: { - addWebhook: '웹훅 추가.', - editWebhook: '웹훅 편집', - }, - messages: { - clientIdCopy: '클라이언트 ID가 복사되었습니다.', - clientSecretCopy: '클라이언트 암호가 복사되었습니다.', - }, - form: { - triggers: '트리거 이벤트:', - messages: { - successAdd: '웹훅이 생성되었습니다.', - successModify: '웹훅이 수정되었습니다.', - }, - error: { - urlRequired: 'URL이 필요합니다.', - validUrl: '유효한 URL이어야 합니다.', - scopeValidation: '최소 하나의 트리거가 있어야 합니다.', - tokenRequired: '토큰이 필요합니다.', - }, - fields: { - description: { - label: '설명', - placeholder: '새 사용자 생성 시 gmail 계정을 생성하는 웹훅', - }, - token: { - label: '비밀 토큰', - placeholder: '인증 토큰', - }, - url: { - label: '웹훅 URL', - placeholder: 'https://example.com/webhook', - }, - userCreated: { - label: '새 사용자 생성됨', - }, - userDeleted: { - label: '사용자 삭제됨', - }, - userModified: { - label: '사용자 수정됨', - }, - hwkeyProvision: { - label: '사용자 Yubikey 프로비저닝', - }, - }, - }, - }, - deleteWebhook: { - title: '웹훅 삭제', - message: '{name} 웹훅을 삭제하시겠습니까?', - submit: '삭제', - messages: { - success: '웹훅이 삭제되었습니다.', - }, - }, - }, - addDevicePage: { - title: '장치 추가', - helpers: { - setupOpt: `이 마법사를 사용하여 장치를 추가할 수 있습니다. 당사의 기본 애플리케이션인 "defguard" 또는 다른 WireGuard 클라이언트를 선택하세요. 잘 모르시겠다면 간편하게 defguard를 사용하는 것을 권장합니다.`, - client: `defguard 데스크톱 클라이언트는 여기에서 다운로드하고 이 가이드를 따르세요.`, - }, - messages: { - deviceAdded: '장치가 추가되었습니다', - }, - steps: { - configDevice: { - title: '장치 구성', - messages: { - copyConfig: '구성이 클립보드에 복사되었습니다', - }, - helpers: { - warningAutoMode: ` -

- 개인 키를 저장하지 않으므로 - 지금 구성을 다운로드해야 합니다. - 이 페이지가 닫히면 전체 구성 파일(개인 키 포함, 빈 템플릿만)을 - 가져올 수 없습니다. -

-`, - warningManualMode: ` -

- 여기에 제공된 구성에는 개인 키가 포함되어 있지 않으며 공개 키를 사용하여 채워져 있습니다. 구성이 제대로 작동하려면 직접 교체해야 합니다. -

-`, - warningNoNetworks: '액세스할 수 있는 네트워크가 없습니다.', - qrHelper: ` -

- 이 QR 코드를 스캔하여 wireguard 애플리케이션으로 장치를 더 빠르게 설정할 수 있습니다. -

`, - }, - qrInfo: - '아래 제공된 구성 파일을 QR 코드를 스캔하거나 장치의 WireGuard 인스턴스에 파일로 가져와서 사용하세요.', - inputNameLabel: '장치 이름', - qrLabel: 'WireGuard 구성 파일', - }, - setupDevice: { - title: 'VPN 장치 생성', - infoMessage: ` -

- 장치에서 WireGuardVPN을 구성해야 합니다. 방법을 모르는 경우  - 문서를 참조하세요. -

-`, - options: { - auto: '키 쌍 생성', - manual: '내 공개 키 사용', - }, - form: { - fields: { - name: { - label: '장치 이름', - }, - publicKey: { - label: '공개 키 제공', - }, - }, - errors: { - name: { - duplicatedName: '이 이름을 가진 장치가 이미 존재합니다', - }, - }, - }, - }, - copyToken: { - title: '클라이언트 활성화', - tokenCardTitle: '활성화 토큰', - urlCardTitle: 'Defguard 인스턴스 URL', - }, - }, - }, - userPage: { - title: { - view: '사용자 프로필', - edit: '사용자 프로필 편집', - }, - messages: { - editSuccess: '사용자가 업데이트되었습니다.', - failedToFetchUserData: '사용자 정보를 가져올 수 없습니다.', - passwordResetEmailSent: '비밀번호 재설정 이메일이 전송되었습니다.', - }, - userDetails: { - header: '프로필 세부 정보', - messages: { - deleteApp: '앱 및 모든 토큰이 삭제되었습니다.', - }, - warningModals: { - title: '경고', - content: { - usernameChange: `사용자 이름을 변경하면 Defguard를 사용하여 로그인한 서비스에 큰 영향을 미칩니다. 사용자 이름을 변경하면 사용자가 애플리케이션에 대한 액세스 권한을 잃을 수 있습니다(애플리케이션에서 해당 사용자를 인식하지 못하기 때문에). 계속 진행하시겠습니까?`, - emailChange: `외부 OpenID Connect(OIDC) 공급자를 사용하여 사용자를 인증하는 경우 사용자의 이메일 주소를 변경하면 Defguard에 로그인하는 기능에 큰 영향을 미칠 수 있습니다. 계속 진행하시겠습니까?`, - }, - buttons: { - proceed: '진행', - cancel: '취소', - }, - }, - fields: { - username: { - label: '사용자 이름', - }, - firstName: { - label: '이름', - }, - lastName: { - label: '성', - }, - phone: { - label: '전화번호', - }, - email: { - label: '이메일', - }, - status: { - label: '상태', - active: '활성', - disabled: '비활성', - }, - groups: { - label: '사용자 그룹', - noData: '그룹 없음', - }, - apps: { - label: '승인된 앱', - noData: '승인된 앱 없음', - }, - }, - }, - userAuthInfo: { - header: '비밀번호 및 인증', - password: { - header: '비밀번호 설정', - changePassword: '비밀번호 변경', - }, - recovery: { - header: '복구 옵션', - codes: { - label: '복구 코드', - viewed: '조회됨', - }, - }, - mfa: { - header: '이중 인증 방법', - edit: { - disable: 'MFA 비활성화', - }, - messages: { - mfaDisabled: 'MFA가 비활성화되었습니다.', - OTPDisabled: '일회용 비밀번호가 비활성화되었습니다.', - EmailMFADisabled: '이메일 MFA가 비활성화되었습니다.', - changeMFAMethod: 'MFA 방법이 변경되었습니다', - }, - securityKey: { - singular: '보안 키', - plural: '보안 키', - }, - default: '기본값', - enabled: '활성화됨', - disabled: '비활성화됨', - labels: { - totp: '시간 기반 일회용 비밀번호', - email: '이메일', - webauth: '보안 키', - }, - editMode: { - enable: '활성화', - disable: '비활성화', - makeDefault: '기본값으로 설정', - webauth: { - manage: '보안 키 관리', - }, - }, - }, - }, - controls: { - editButton: '프로필 편집', - deleteAccount: '계정 삭제', - }, - devices: { - header: '사용자 장치', - addDevice: { - web: '새 장치 추가', - desktop: '이 장치 추가', - }, - card: { - labels: { - publicIP: '공개 IP', - connectedThrough: '연결 방식', - connectionDate: '연결 날짜', - lastLocation: '마지막 연결 위치', - lastConnected: '마지막 연결', - assignedIp: '할당된 IP', - active: '활성', - noData: '연결된 적 없음', - }, - edit: { - edit: '장치 편집', - delete: '장치 삭제', - showConfigurations: '구성 보기', - }, - }, - }, - yubiKey: { - header: '사용자 YubiKey', - provision: 'YubiKey 프로비저닝', - keys: { - pgp: 'PGP 키', - ssh: 'SSH 키', - }, - noLicense: { - moduleName: 'YubiKey 모듈', - line1: 'YubiKey 관리 및 프로비저닝을 위한 엔터프라이즈 모듈입니다.', - line2: '', - }, - }, - authenticationKeys: { - header: '사용자 인증 키', - addKey: '새 키 추가', - keysList: { - common: { - rename: '이름 변경', - key: '키', - download: '다운로드', - copy: '복사', - serialNumber: '시리얼 번호', - delete: '삭제', - }, - }, - deleteModal: { - title: '인증 키 삭제', - confirmMessage: '{name} 키가 영구적으로 삭제됩니다.', - }, - addModal: { - header: '새 인증 키 추가', - keyType: '키 유형', - keyForm: { - placeholders: { - title: '키 이름', - key: { - ssh: 'ssh-rsa, ecdsa-sha2-nistp256, ... 로 시작', - gpg: '-----BEGIN PGP PUBLIC KEY BLOCK----- 로 시작', - }, - }, - labels: { - title: '이름', - key: '키', - }, - submit: '{name} 키 추가', - }, - yubikeyForm: { - selectWorker: { - info: '이 작업은 YubiKey의 openpgp 애플리케이션을 삭제하고 재구성합니다.', - selectLabel: - '다음 프로비저너 중 하나를 선택하여 YubiKey를 프로비저닝하십시오', - noData: '현재 등록된 작업자가 없습니다.', - available: '사용 가능', - unavailable: '사용 불가', - }, - provisioning: { - inProgress: '프로비저닝 진행 중, 잠시 기다려 주세요.', - error: '프로비저닝 실패!', - success: 'Yubikey가 성공적으로 프로비저닝되었습니다', - }, - submit: 'Yubikey 프로비저닝', - }, - messages: { - keyAdded: '키가 추가되었습니다.', - keyExists: '키가 이미 추가되었습니다.', - unsupportedKeyFormat: '지원되지 않는 키 형식입니다.', - genericError: '키를 추가할 수 없습니다. 나중에 다시 시도하십시오.', - }, - }, - }, - }, - usersOverview: { - pageTitle: '사용자', - search: { - placeholder: '사용자 찾기', - }, - filterLabels: { - all: '모든 사용자', - admin: '관리자만', - users: '사용자만', - }, - usersCount: '모든 사용자', - addNewUser: '새 추가', - list: { - headers: { - name: '사용자 이름', - username: '로그인', - phone: '전화', - actions: '작업', - }, - editButton: { - changePassword: '비밀번호 변경', - edit: '계정 편집', - addYubikey: 'YubiKey 추가', - addSSH: 'SSH 키 추가', - addGPG: 'GPG 키 추가', - delete: '계정 삭제', - startEnrollment: '등록 시작', - activateDesktop: '데스크톱 클라이언트 구성', - resetPassword: '비밀번호 재설정', - }, - }, - }, - navigation: { - bar: { - overview: 'VPN 개요', - users: '사용자', - provisioners: 'YubiKeys', - webhooks: 'Webhooks', - openId: 'OpenID 앱', - myProfile: '내 프로필', - settings: '설정', - logOut: '로그아웃', - enrollment: '등록', - support: '지원', - groups: '그룹', - }, - mobileTitles: { - groups: '그룹', - wizard: 'Location 생성', - users: '사용자', - settings: '설정', - user: '사용자 프로필', - provisioners: 'Yubikey', - webhooks: 'Webhooks', - openId: 'OpenId 앱', - overview: '위치 개요', - networkSettings: '위치 편집', - enrollment: '등록', - support: '지원', - }, - copyright: 'Copyright ©2023-2025', - version: { - open: '애플리케이션 버전: {version}', - closed: 'v{version}', - }, - }, - form: { - download: '다운로드', - copy: '복사', - saveChanges: '변경 사항 저장', - submit: '제출', - login: '로그인', - cancel: '취소', - close: '닫기', - placeholders: { - password: '비밀번호', - username: '사용자 이름', - }, - error: { - forbiddenCharacter: '필드에 금지된 문자가 포함되어 있습니다.', - usernameTaken: '사용자 이름이 이미 사용 중입니다.', - invalidKey: '키가 유효하지 않습니다.', - invalid: '필드가 유효하지 않습니다.', - required: '필드는 필수입니다.', - invalidCode: '제출된 코드가 유효하지 않습니다.', - maximumLength: '최대 길이를 초과했습니다.', - minimumLength: '최소 길이에 도달하지 않았습니다.', - noSpecialChars: '특수 문자는 허용되지 않습니다.', - oneDigit: '숫자 하나가 필요합니다.', - oneSpecial: '특수 문자가 필요합니다.', - oneUppercase: '대문자 하나가 필요합니다.', - oneLowercase: '소문자 하나가 필요합니다.', - portMax: '최대 포트는 65535입니다.', - endpoint: '유효한 엔드포인트를 입력하세요.', - address: '유효한 주소를 입력하세요.', - validPort: '유효한 포트를 입력하세요.', - validCode: '코드는 6자리여야 합니다.', - allowedIps: '유효한 IP 또는 도메인만 허용됩니다.', - startFromNumber: '숫자로 시작할 수 없습니다.', - repeat: `필드가 일치하지 않습니다.`, - number: '유효한 숫자를 입력해야 합니다.', - minimumValue: `{value}의 최솟값에 도달하지 않았습니다.`, - maximumValue: '{value}의 최댓값을 초과했습니다.', - tooManyBadLoginAttempts: `잘못된 로그인 시도가 너무 많습니다. 몇 분 후에 다시 시도하십시오.`, - }, - floatingErrors: { - title: '다음을 수정하십시오:', - }, - }, - components: { - deviceConfigsCard: { - cardTitle: '위치에 대한 WireGuard 구성:', - messages: { - copyConfig: '클립보드에 구성이 복사되었습니다.', - }, - }, - gatewaysStatus: { - label: '게이트웨이', - states: { - error: '연결 정보를 가져오는 데 실패했습니다.', - }, - messages: { - error: '게이트웨이 상태를 가져오지 못했습니다', - deleteError: '게이트웨이를 삭제하지 못했습니다', - }, - }, - noLicenseBox: { - footer: { - get: '엔터프라이즈 라이선스 받기', - contact: '연락처:', - }, - }, - }, - settingsPage: { - title: '설정', - tabs: { - smtp: 'SMTP', - global: '전역 설정', - ldap: 'LDAP', - openid: 'OpenID', - enterprise: '엔터프라이즈 기능', - }, - messages: { - editSuccess: '설정이 업데이트되었습니다', - challengeSuccess: '챌린지 메시지가 변경되었습니다', - }, - enterpriseOnly: { - title: '이 기능은 Defguard Enterprise에서만 사용할 수 있습니다.', - subtitle: '자세한 내용은 ', - website: '웹사이트', - }, - ldapSettings: { - title: 'LDAP 설정', - form: { - labels: { - ldap_url: 'URL', - ldap_bind_username: '바인드 사용자 이름', - ldap_bind_password: '바인드 비밀번호', - ldap_member_attr: '멤버 속성', - ldap_username_attr: '사용자 이름 속성', - ldap_user_obj_class: '사용자 객체 클래스', - ldap_user_search_base: '사용자 검색 기준', - ldap_groupname_attr: '그룹 이름 속성', - ldap_group_search_base: '그룹 검색 기준', - ldap_group_member_attr: '그룹 멤버 속성', - ldap_group_obj_class: '그룹 객체 클래스', - }, - delete: '구성 삭제', - }, - test: { - title: 'LDAP 연결 테스트', - submit: '테스트', - messages: { - success: 'LDAP 연결 성공', - error: 'LDAP 연결 거부됨', - }, - }, - }, - openIdSettings: { - general: { - title: '외부 OpenID 설정', - helper: '여기에서 Defguard 인스턴스의 일반 OpenID 동작을 변경할 수 있습니다.', - createAccount: { - label: '외부 OpenID를 통해 처음 로그인할 때 사용자 계정을 자동으로 생성합니다.', - helper: - '이 옵션을 활성화하면 Defguard는 외부 OpenID 공급자를 사용하여 처음 로그인하는 사용자에 대한 새 계정을 자동으로 생성합니다. 그렇지 않으면 관리자가 먼저 사용자 계정을 생성해야 합니다.', - }, - }, - form: { - title: '외부 OpenID 클라이언트 설정', - helper: - '여기에서 외부 OpenID 공급자가 제공한 값으로 OpenID 클라이언트 설정을 구성할 수 있습니다.', - custom: '사용자 정의', - documentation: '설명서', - delete: '공급자 삭제', - labels: { - provider: { - label: '공급자', - helper: - 'OpenID 공급자를 선택하세요. 사용자 정의 공급자를 사용하고 직접 기본 URL을 입력할 수 있습니다.', - }, - client_id: { - label: '클라이언트 ID', - helper: 'OpenID 공급자가 제공한 클라이언트 ID입니다.', - }, - client_secret: { - label: '클라이언트 보안 비밀', - helper: 'OpenID 공급자가 제공한 클라이언트 보안 비밀입니다.', - }, - base_url: { - label: '기본 URL', - helper: - 'OpenID 공급자의 기본 URL입니다(예: https://accounts.google.com). 자세한 정보 및 예는 설명서를 확인하십시오.', - }, - }, - }, - }, - modulesVisibility: { - header: '모듈 가시성', - helper: `

- 사용하지 않는 모듈이 있는 경우 해당 모듈의 가시성을 비활성화할 수 있습니다. -

- - 자세한 내용은 설명서를 참조하십시오. - `, - fields: { - wireguard_enabled: { - label: 'WireGuard VPN', - }, - webhooks_enabled: { - label: '웹훅', - }, - worker_enabled: { - label: 'Yubikey 프로비저닝', - }, - openid_enabled: { - label: 'OpenID Connect', - }, - }, - }, - defaultNetworkSelect: { - header: '기본 위치 보기', - helper: `

여기에서 기본 위치 보기를 변경할 수 있습니다.

- - 자세한 내용은 설명서를 참조하십시오. - `, - filterLabels: { - grid: '그리드 보기', - list: '목록 보기', - }, - }, - instanceBranding: { - header: '인스턴스 브랜딩', - form: { - title: '이름 및 로고:', - fields: { - instanceName: { - label: '인스턴스 이름', - placeholder: 'Defguard', - }, - mainLogoUrl: { - label: '로그인 로고 url', - helper: '

최대 사진 크기는 250x100 px입니다

', - placeholder: '기본 이미지', - }, - navLogoUrl: { - label: '메뉴 및 탐색 작은 로고', - helper: '

최대 사진 크기는 100x100 px입니다

', - placeholder: '기본 이미지', - }, - }, - controls: { - restoreDefault: '기본값 복원', - submit: '변경 사항 저장', - }, - }, - helper: ` -

- 여기에서 defguard 인스턴스의 로고 및 이름 url을 - 추가할 수 있습니다. defguard 대신 표시됩니다. -

- - 자세한 내용은 설명서를 참조하십시오. - - `, - }, - license: { - header: '엔터프라이즈', - helpers: { - enterpriseHeader: { - text: '여기에서 Defguard Enterprise 버전 라이선스를 관리할 수 있습니다.', - link: 'Defguard Enterprise에 대한 자세한 내용은 웹사이트를 방문하십시오.', - }, - licenseKey: { - text: '아래에 Defguard Enterprise 라이선스 키를 입력하세요. 라이선스 구매 후 이메일을 통해 받아야 합니다.', - link: '라이선스는 여기에서 구입할 수 있습니다.', - }, - }, - form: { - title: '라이선스', - fields: { - key: { - label: '라이선스 키', - placeholder: 'Defguard 라이선스 키', - }, - }, - }, - licenseInfo: { - title: '라이선스 정보', - types: { - subscription: { - label: '구독', - helper: '정기적으로 자동 갱신되는 라이선스', - }, - offline: { - label: '오프라인', - helper: '라이선스는 만료 날짜까지 유효하며 자동으로 갱신되지 않습니다', - }, - }, - fields: { - type: { - label: '유형', - }, - validUntil: { - label: '유효 기간', - }, - }, - }, - }, - smtp: { - form: { - title: 'SMTP 구성', - fields: { - encryption: { - label: '암호화', - }, - server: { - label: '서버 주소', - placeholder: '주소', - }, - port: { - label: '서버 포트', - placeholder: '포트', - }, - user: { - label: '서버 사용자 이름', - placeholder: '사용자 이름', - }, - password: { - label: '서버 비밀번호', - placeholder: '비밀번호', - }, - sender: { - label: '보내는 사람 이메일 주소', - placeholder: '주소', - helper: ` -

- 시스템 메시지는 이 주소에서 발송됩니다. - 예: no-reply@my-company.com. -

- `, - }, - }, - controls: { - submit: '변경 사항 저장', - }, - }, - delete: '구성 삭제', - testForm: { - title: '테스트 이메일 보내기', - fields: { - to: { - label: '주소', - placeholder: '주소', - }, - }, - controls: { - submit: '보내기', - success: '테스트 이메일 전송됨', - error: '이메일 전송 오류', - }, - }, - helper: ` -

- 여기에서 사용자에게 시스템 메시지를 보내는 데 사용되는 SMTP 서버를 구성할 수 있습니다. -

- `, - }, - enrollment: { - helper: - '등록은 신규 직원이 새 계정을 활성화 및 비밀번호를 생성하고, VPN 장치를 구성할 수 있도록 하는 프로세스입니다.', - vpnOptionality: { - header: 'VPN 단계 선택 사항', - helper: - '등록 중 VPN 장치 생성을 선택 사항 또는 필수 사항으로 선택할 수 있습니다.', - }, - welcomeMessage: { - header: '환영 메시지', - helper: ` -

이 텍스트 입력란에서는 Markdown을 사용할 수 있습니다:

-
    -
  • 제목은 해시 #로 시작합니다
  • -
  • 별표를 사용하여 *이탤릭체*를 만듭니다
  • -
  • 별표 두 개를 사용하여 **굵게** 만듭니다
  • -
- `, - }, - welcomeEmail: { - header: '환영 이메일', - helper: ` -

이 텍스트 입력란에서는 Markdown을 사용할 수 있습니다:

-
    -
  • 제목은 해시 #로 시작합니다
  • -
  • 별표를 사용하여 *이탤릭체*를 만듭니다
  • -
  • 별표 두 개를 사용하여 **굵게** 만듭니다
  • -
- `, - }, - form: { - controls: { - submit: '변경 사항 저장', - }, - welcomeMessage: { - helper: - '등록이 완료되면 사용자에게 이 정보가 표시됩니다. 관련 링크를 삽입하고 다음 단계를 간략하게 설명하는 것이 좋습니다.', - placeholder: '환영 메시지를 입력하세요', - }, - welcomeEmail: { - helper: - '등록이 완료되면 사용자에게 이 정보가 전송됩니다. 관련 링크를 삽입하고 다음 단계를 간략하게 설명하는 것이 좋습니다. 환영 메시지를 여기에서 다시 사용할 수 있습니다.', - placeholder: '환영 이메일을 입력하세요', - }, - welcomeEmailSubject: { - label: '제목', - }, - useMessageAsEmail: { - label: '환영 메시지와 동일하게', - }, - }, - }, - enterprise: { - header: '엔터프라이즈 기능', - helper: '

여기에서 엔터프라이즈 설정을 변경할 수 있습니다.

', - fields: { - deviceManagement: { - label: '사용자가 자신의 장치를 관리하는 기능 비활성화', - helper: - '이 옵션을 활성화하면 관리자 그룹의 사용자만 사용자 프로필에서 장치를 관리할 수 있습니다(다른 모든 사용자는 비활성화됨)', - }, - manualConfig: { - label: '사용자가 수동 WireGuard 구성을 다운로드하는 기능 비활성화', - helper: - '이 옵션을 활성화하면 사용자에게 수동 클라이언트 설정을 위한 WireGuard 구성이 표시되지 않습니다.', - }, - }, - }, - }, - openidOverview: { - pageTitle: 'OpenID 앱', - search: { - placeholder: '앱 찾기', - }, - filterLabels: { - all: '모든 앱', - enabled: '활성화됨', - disabled: '비활성화됨', - }, - clientCount: '모든 앱', - addNewApp: '새 추가', - list: { - headers: { - name: '이름', - status: '상태', - actions: '작업', - }, - editButton: { - edit: '앱 편집', - delete: '앱 삭제', - disable: '비활성화', - enable: '활성화', - copy: '클라이언트 ID 복사', - }, - status: { - enabled: '활성화됨', - disabled: '비활성화됨', - }, - }, - messages: { - copySuccess: '클라이언트 ID가 복사되었습니다.', - noLicenseMessage: '이 기능에 대한 라이선스가 없습니다.', - noClientsFound: '결과를 찾을 수 없습니다.', - }, - deleteApp: { - title: '앱 삭제', - message: '{appName} 앱을 삭제하시겠습니까?', - submit: '앱 삭제', - messages: { - success: '앱이 삭제되었습니다.', - }, - }, - enableApp: { - messages: { - success: '앱이 활성화되었습니다.', - }, - }, - disableApp: { - messages: { - success: '앱이 비활성화되었습니다.', - }, - }, - modals: { - openidClientModal: { - title: { - addApp: '애플리케이션 추가', - editApp: '{appName} 앱 편집', - }, - scopes: '범위:', - messages: { - clientIdCopy: '클라이언트 ID 복사됨.', - clientSecretCopy: '클라이언트 암호 복사됨.', - }, - form: { - messages: { - successAdd: '앱 생성됨.', - successModify: '앱 수정됨.', - }, - error: { - urlRequired: 'URL이 필요합니다.', - validUrl: '유효한 URL이어야 합니다.', - scopeValidation: '최소 하나의 범위가 있어야 합니다.', - }, - fields: { - name: { - label: '앱 이름', - }, - redirectUri: { - label: '리디렉션 URL {count}', - placeholder: 'https://example.com/redirect', - }, - openid: { - label: 'OpenID', - }, - profile: { - label: '프로필', - }, - email: { - label: '이메일', - }, - phone: { - label: '전화', - }, - groups: { - label: '그룹', - }, - }, - controls: { - addUrl: 'URL 추가', - }, - }, - clientId: '클라이언트 ID', - clientSecret: '클라이언트 암호', - }, - }, - }, - webhooksOverview: { - pageTitle: 'Webhooks', - search: { - placeholder: 'URL로 웹훅 찾기', - }, - filterLabels: { - all: '모든 웹훅', - enabled: '활성화됨', - disabled: '비활성화됨', - }, - webhooksCount: '모든 웹훅', - addNewWebhook: '새 추가', - noWebhooksFound: '웹훅을 찾을 수 없습니다.', - list: { - headers: { - name: '이름', - description: '설명', - status: '상태', - actions: '작업', - }, - editButton: { - edit: '편집', - delete: '웹훅 삭제', - disable: '비활성화', - enable: '활성화', - }, - status: { - enabled: '활성화됨', - disabled: '비활성화됨', - }, - }, - }, - provisionersOverview: { - pageTitle: '프로비저너', - search: { - placeholder: '프로비저너 찾기', - }, - filterLabels: { - all: '전체', - available: '사용 가능', - unavailable: '사용 불가', - }, - provisionersCount: '모든 프로비저너', - noProvisionersFound: '프로비저너를 찾을 수 없습니다.', - noLicenseMessage: '이 기능에 대한 라이선스가 없습니다.', - provisioningStation: { - header: 'YubiKey 프로비저닝 스테이션', - content: `YubiKeys를 프로비저닝하려면 먼저 USB 슬롯이 있는 물리적 시스템을 - 설정해야 합니다. 선택한 시스템에서 제공된 명령을 실행하여 등록하고 - 키 프로비저닝을 시작하세요.`, - dockerCard: { - title: '프로비저닝 스테이션 도커 설정 명령', - }, - tokenCard: { - title: '액세스 토큰', - }, - }, - list: { - headers: { - name: '이름', - ip: 'IP 주소', - status: '상태', - actions: '작업', - }, - editButton: { - delete: '프로비저너 삭제', - }, - status: { - available: '사용 가능', - unavailable: '사용 불가', - }, - }, - messages: { - copy: { - token: '토큰 복사됨', - command: '명령 복사됨', - }, - }, - }, - openidAllow: { - header: '{name}이(가) 다음을 원합니다:', - scopes: { - openid: '향후 로그인을 위해 프로필 데이터를 사용합니다.', - profile: '이름, 프로필 사진 등 프로필의 기본 정보를 알고 있습니다.', - email: '이메일 주소를 알고 있습니다.', - phone: '전화번호를 알고 있습니다.', - groups: '그룹 멤버십을 알고 있습니다.', - }, - controls: { - accept: '수락', - cancel: '취소', - }, - }, - networkOverview: { - pageTitle: '위치 개요', - controls: { - editNetworks: '위치 설정 편집', - selectNetwork: { - placeholder: '위치 로드 중', - }, - }, - filterLabels: { - grid: '그리드 보기', - list: '목록 보기', - }, - stats: { - currentlyActiveUsers: '현재 활성 사용자', - activeUsersFilter: '{hour}시간 내 활성 사용자', - activeDevicesFilter: '{hour}시간 내 활성 장치', - activityIn: '{hour}시간 내 활동', - in: '들어오는 트래픽:', - out: '나가는 트래픽:', - gatewayDisconnected: '게이트웨이 연결 끊김', - }, - }, - connectedUsersOverview: { - pageTitle: '연결된 사용자', - noUsersMessage: '현재 연결된 사용자가 없습니다', - userList: { - username: '사용자 이름', - device: '장치', - connected: '연결됨', - deviceLocation: '장치 위치', - networkUsage: '네트워크 사용량', - }, - }, - networkPage: { - pageTitle: '위치 편집', - addNetwork: '+ 새 위치 추가', - controls: { - networkSelect: { - label: '위치 선택', - }, - }, - }, - activityOverview: { - header: '활동 스트림', - noData: '현재 감지된 활동이 없습니다', - }, - networkConfiguration: { - messages: { - delete: { - success: '네트워크 삭제됨', - error: '네트워크 삭제 실패', - }, - }, - header: '위치 구성', - importHeader: '위치 가져오기', - form: { - helpers: { - address: - '이 주소를 기반으로 VPN 네트워크 주소가 정의됩니다. 예: 10.10.10.1/24 (VPN 네트워크는 10.10.10.0/24가 됩니다)', - gateway: 'VPN 사용자가 연결하는 데 사용되는 게이트웨이 공개 주소', - dns: 'wireguard 인터페이스가 활성화될 때 쿼리할 DNS 확인자를 지정합니다.', - allowedIps: 'VPN 네트워크를 통해 라우팅되어야 하는 주소/마스크 목록입니다.', - allowedGroups: - '기본적으로 모든 사용자가 이 위치에 연결할 수 있습니다. 특정 그룹으로 이 위치에 대한 액세스를 제한하려면 아래에서 선택하십시오.', - }, - messages: { - networkModified: '위치가 수정되었습니다.', - networkCreated: '위치가 생성되었습니다', - }, - fields: { - name: { - label: '위치 이름', - }, - address: { - label: '게이트웨이 VPN IP 주소 및 넷마스크', - }, - endpoint: { - label: '게이트웨이 주소', - }, - allowedIps: { - label: '허용된 IP', - }, - port: { - label: '게이트웨이 포트', - }, - dns: { - label: 'DNS', - }, - allowedGroups: { - label: '허용된 그룹', - placeholder: '모든 그룹', - }, - keepalive_interval: { - label: 'Keepalive 간격 [초]', - }, - peer_disconnect_threshold: { - label: '피어 연결 끊김 임계값 [초]', - }, - acl_enabled: { - label: '이 위치에 대한 ACL 활성화', - }, - acl_default_allow: { - label: '기본 ACL 정책', - }, - }, - controls: { - submit: '변경 사항 저장', - cancel: '개요로 돌아가기', - delete: '위치 제거', - }, - }, - }, - gatewaySetup: { - header: { - main: '게이트웨이 서버 설정', - dockerBasedGatewaySetup: `Docker 기반 게이트웨이 설정`, - fromPackage: `패키지로부터`, - oneLineInstall: `한 줄 설치`, - }, - card: { - title: 'Docker 기반 게이트웨이 설정', - authToken: `인증 토큰`, - }, - button: { - availablePackages: `사용 가능한 패키지`, - }, - controls: { - status: '연결 상태 확인', - }, - messages: { - runCommand: `Defguard는 vpn 서버에서 wireguard VPN을 제어하기 위해 게이트웨이 노드를 배포해야 합니다. - 자세한 내용은 [문서]({setupGatewayDocs})를 참조하십시오. - 게이트웨이 서버를 배포하는 방법에는 여러 가지가 있으며, - 아래는 Docker 기반 예시입니다. 다른 예시는 [문서]({setupGatewayDocs})를 참조하십시오.`, - createNetwork: `게이트웨이 프로세스를 실행하기 전에 네트워크를 생성하십시오.`, - noConnection: `연결이 설정되지 않았습니다. 제공된 명령을 실행하십시오.`, - connected: `게이트웨이가 연결되었습니다.`, - statusError: '게이트웨이 상태를 가져오지 못했습니다', - oneLineInstall: `한 줄 설치를 수행하는 경우: https://docs.defguard.net/getting-started/one-line-install - 아무 것도 할 필요가 없습니다.`, - fromPackage: `https://github.com/DefGuard/gateway/releases/latest에서 사용 가능한 패키지를 설치하고 [문서]({setupGatewayDocs})에 따라 \`/etc/defguard/gateway.toml\`을 구성하십시오. - `, - authToken: `아래 토큰은 게이트웨이 노드를 인증하고 구성하는 데 필요합니다. 이 토큰을 안전하게 보관하고 - [문서]({setupGatewayDocs})에 제공된 배포 지침에 따라 게이트웨이 서버를 성공적으로 설정하십시오. - 자세한 내용 및 정확한 단계는 [문서]({setupGatewayDocs})를 참조하십시오.`, - dockerBasedGatewaySetup: `아래는 Docker 기반 예시입니다. 자세한 내용 및 정확한 단계는 [문서]({setupGatewayDocs})를 참조하십시오.`, - }, - }, - loginPage: { - pageTitle: '자격 증명을 입력하세요', - callback: { - return: '로그인으로 돌아가기', - error: '외부 OpenID 로그인 중 오류가 발생했습니다', - }, - mfa: { - title: '이중 인증', - controls: { - useAuthenticator: '대신 인증 앱 사용', - useWebauthn: '대신 보안 키 사용', - useRecoveryCode: '대신 복구 코드 사용', - useEmail: '대신 이메일 사용', - }, - email: { - header: '이메일로 전송된 코드를 사용하여 진행하십시오.', - form: { - labels: { - code: '코드', - }, - controls: { - resendCode: '코드 재전송', - }, - }, - }, - totp: { - header: '인증 앱의 코드를 사용하고 버튼을 클릭하여 진행하십시오.', - form: { - fields: { - code: { - placeholder: '인증 코드 입력', - }, - }, - controls: { - submit: '인증 코드 사용', - }, - }, - }, - recoveryCode: { - header: '활성 복구 코드 중 하나를 입력하고 버튼을 클릭하여 로그인하십시오.', - form: { - fields: { - code: { - placeholder: '복구 코드', - }, - }, - controls: { - submit: '복구 코드 사용', - }, - }, - }, - webauthn: { - header: '인증할 준비가 되면 아래 버튼을 누르십시오.', - controls: { - submit: '보안 키 사용', - }, - messages: { - error: '키를 읽지 못했습니다. 다시 시도하십시오.', - }, - }, - }, - }, - wizard: { - completed: '위치 설정 완료', - configuration: { - successMessage: '위치 생성됨', - }, - welcome: { - header: '위치 마법사에 오신 것을 환영합니다!', - sub: 'VPN을 사용하기 전에 먼저 위치를 설정해야 합니다. 확실하지 않은 경우 아이콘을 클릭하십시오.', - button: '위치 설정', - }, - navigation: { - top: '위치 설정', - titles: { - welcome: '위치 설정', - choseNetworkSetup: '위치 설정 선택', - importConfig: '기존 위치 가져오기', - manualConfig: '위치 구성', - mapDevices: '가져온 장치 매핑', - }, - buttons: { - next: '다음', - back: '뒤로', - }, - }, - deviceMap: { - messages: { - crateSuccess: '장치 추가됨', - errorsInForm: '표시된 필드를 채워주세요.', - }, - list: { - headers: { - deviceName: '장치 이름', - deviceIP: 'IP', - user: '사용자', - }, - }, - }, - wizardType: { - manual: { - title: '수동 구성', - description: '수동 위치 구성', - }, - import: { - title: '파일에서 가져오기', - description: 'WireGuard 구성 파일에서 가져오기', - }, - createNetwork: '위치 생성', - }, - common: { - select: '선택', - }, - locations: { - form: { - name: '이름', - ip: 'IP 주소', - user: '사용자', - fileName: '파일', - selectFile: '파일 선택', - messages: { devicesCreated: '장치 생성됨' }, - validation: { invalidAddress: '잘못된 주소' }, - }, - }, - }, - layout: { - select: { - addNewOptionDefault: '새 추가 +', - }, - }, - redirectPage: { - title: '로그인되었습니다', - subtitle: '잠시 후 리디렉션됩니다...', - }, - enrollmentPage: { - title: '등록', - controls: { - default: '기본값 복원', - save: '변경 사항 저장', - }, - messages: { - edit: { - success: '설정이 변경되었습니다', - error: '저장 실패', - }, - }, - messageBox: - '등록은 신입 직원이 새 계정을 확인하고, 비밀번호를 생성하고, VPN 장치를 구성할 수 있도록 하는 프로세스입니다. 이 패널에서 관련 메시지를 사용자 지정할 수 있습니다.', - settings: { - welcomeMessage: { - title: '환영 메시지', - messageBox: - '이 정보는 등록이 완료되면 서비스 내 사용자에게 표시됩니다. 링크를 삽입하고 다음 단계를 간략하게 설명하는 것이 좋습니다. 이메일에 있는 것과 동일한 메시지를 사용할 수 있습니다.', - }, - vpnOptionality: { - title: 'VPN 설정 선택 사항', - select: { - options: { - optional: '선택 사항', - mandatory: '필수', - }, - }, - }, - welcomeEmail: { - title: '환영 이메일', - subject: { - label: '이메일 제목', - }, - messageBox: - '등록이 완료되면 사용자에게 이 정보가 전송됩니다. 관련 링크를 삽입하고 다음 단계를 간략하게 설명하는 것이 좋습니다.', - controls: { - duplicateWelcome: '환영 메시지와 동일', - }, - }, - }, - }, - supportPage: { - title: '지원', - modals: { - confirmDataSend: { - title: '지원 데이터 보내기', - subTitle: - '실제로 지원 디버그 정보를 보내려는 것인지 확인하십시오. 개인 정보는 전송되지 않습니다(wireguard 키, 이메일 주소 등은 전송되지 않음).', - submit: '지원 데이터 보내기', - }, - }, - debugDataCard: { - title: '지원 데이터', - body: ` -지원이 필요하거나 저희 팀(예: Matrix 지원 채널: **#defguard-support:teonite.com**)에서 지원 데이터 생성을 요청받은 경우 다음 두 가지 옵션이 있습니다. -* SMTP 설정을 구성하고 "지원 데이터 보내기"를 클릭합니다. -* 또는 "지원 데이터 다운로드"를 클릭하고 이 파일을 첨부하여 GitHub에 버그 보고서를 생성합니다. -`, - downloadSupportData: '지원 데이터 다운로드', - downloadLogs: '로그 다운로드', - sendMail: '지원 데이터 보내기', - mailSent: '이메일 전송됨', - mailError: '이메일 전송 오류', - }, - supportCard: { - title: '지원', - body: ` -GitHub에 문의하거나 문제를 제출하기 전에 [docs.defguard.net](https://docs.defguard.net/)에서 제공되는 Defguard 문서를 숙지하십시오. - -제출하려면: -* 버그 - [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=bug&template=bug_report.md&title=)로 이동하십시오. -* 기능 요청 - [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=feature&template=feature_request.md&title=)로 이동하십시오. - -기타 요청은 support@defguard.net으로 문의하십시오. -`, - }, - }, -}; - -const ko = deepmerge(en, translation); - -export default ko; diff --git a/web/src/i18n/pl/index.ts b/web/src/i18n/pl/index.ts deleted file mode 100644 index 588a4a60e..000000000 --- a/web/src/i18n/pl/index.ts +++ /dev/null @@ -1,2394 +0,0 @@ -import { deepmerge } from 'deepmerge-ts'; -import { PartialDeep } from 'type-fest'; - -import en from '../en'; -import { Translation } from '../i18n-types'; - -const translation: PartialDeep = { - common: { - conditions: { - and: 'I', - equal: 'Równy', - or: 'Albo', - }, - controls: { - accept: 'Akceptuj', - next: 'Następny', - back: 'Wróć', - cancel: 'Anuluj', - confirm: 'Potwierdź', - submit: 'Wyślij', - close: 'Zamknij', - select: 'Wybierz', - finish: 'Zakończ', - saveChanges: 'Zapisz zmiany', - save: 'Zapisz', - RestoreDefault: 'Przywróć domyślne', - delete: 'Usuń', - rename: 'Zmień nazwę', - copy: 'Skopiuj', - edit: 'Edytuj', - dismiss: 'Odrzuć', - show: 'Pokaż', - enable: 'Włącz', - enabled: 'Włączony', - disable: 'Wyłącz', - disabled: 'Wyłączony', - selectAll: 'Zaznacz wszystko', - clear: 'Wyczyść', - clearAll: 'Wyczyść wszystko', - }, - key: 'Klucz', - name: 'Nazwa', - noData: 'Brak danych', - unavailable: 'Niedostępne', - notSet: 'Nieustawione', - search: 'Szukaj', - }, - messages: { - error: 'Wystąpił błąd.', - success: 'Operacja zakończyła się sukcesem', - errorVersion: 'Nie udało się uzyskać wersji aplikacji.', - details: 'Szczegóły:', - clipboard: { - success: 'Skopiowano do schowka', - error: 'Schowek nie jest dostępny', - }, - insecureContext: 'Kontekst nie jest bezpieczny', - }, - modals: { - upgradeLicenseModal: { - enterprise: { - title: 'Podnieś do Enterprise', - //md - subTitle: `Został przekroczony limit użytkowników, urządzeń lub sieci, a ta funkcjonalność jest dostępna tylko w wersji **enterprise**. Aby użyć tej funkcjonalności, należy zakupić lub podnieść obecną licencję enterprise.`, - }, - limit: { - title: 'Podnieś', - //md - subTitle: ` - **Osiągnięto limit** funkcjonalności. Aby **[ zarządzać większą liczbą lokalizacji/użytkowników/urządzeń ]** wymagany jest zakup licencji Enterprise. - `, - }, - //md - content: ` -Aby dowiedzieć się więcej o: -- Automatyczniej synchronizacji klientów w czasie rzeczywistym -- Zewnętrznym SSO -- Kontrolowaniu działania klientów VPN - -Pełna lista funkcjonalności enterprise: [https://docs.defguard.net/enterprise/enterprise-features](https://docs.defguard.net/enterprise/enterprise-features)
-Informacja o licencjonowaniu: [https://docs.defguard.net/enterprise/license](https://docs.defguard.net/enterprise/license) - `, - controls: { - cancel: 'Może później', - confirm: 'Wszystkie plany Enterprise', - }, - }, - standaloneDeviceEnrollmentModal: { - title: 'Network device token', - toasters: { - error: 'Token generation failed.', - }, - }, - standaloneDeviceConfigModal: { - title: 'Konfiguracja urządzenia sieciowego', - cardTitle: 'Konfiguracja', - toasters: { - getConfig: { - error: 'Nie udało się pobrać konfiguracji urządzenia.', - }, - }, - }, - editStandaloneModal: { - title: 'Edycja urządzenia sieciowego', - toasts: { - success: 'Urządzenia zostało zmienione', - failure: 'Nie udało się zmienić urządzenia.', - }, - }, - deleteStandaloneDevice: { - title: 'Usuń urządzenie sieciowe', - content: 'Urządzenie {name} zostanie usunięte.', - messages: { - success: 'Urządzenie zostało usunięte', - error: 'Nie udało się usunąć urządzenia.', - }, - }, - addStandaloneDevice: { - toasts: { - deviceCreated: 'Urządzenie zostało dodane', - creationFailed: 'Urządzenie nie mogło być dodane.', - }, - infoBox: { - setup: - 'Tu można dodać definicje lub utworzyć konfiguracje dla urządzeń, które można podłączyć do sieci VPN. Dostępne są jedynie lokalizacje bez uwierzytelniania wieloskładnikowego (MFA), ponieważ póki co ta funkcjonalność jest dostępna tylko w kliencie Defguard Desktop.', - }, - form: { - submit: 'Dodaj urządzenie', - labels: { - deviceName: 'Nazwa urządzenia', - location: 'Położenie', - assignedAddress: 'Przydzielony adres IP', - description: 'Opis', - generation: { - auto: 'Utwórz parę kluczy', - manual: 'Własny klucz publiczny', - }, - publicKey: 'Podaj swój klucz publiczny', - }, - }, - steps: { - method: { - title: 'Wybierz preferowaną metodę', - cards: { - cli: { - title: 'Klient Defguard CLI', - subtitle: - 'Używając defguard-cli urządznie zostanie automatycznie skonfigurowane.', - docs: 'Pobieranie i dokumentacja klienta Defguard CLI', - }, - manual: { - title: 'Ręczny klient WireGuard', - subtitle: - 'Jeżeli Twoje urządzenie nie wspiera naszych programów CLI, zawsze można utworzyć plik konfiguracyjny WireGuard i skonfigurowć je ręcznie - ale w takim przypadku uaktualnienia lokalizacji VPN będą wymagały ręcznych zmian w urządzeniu.', - }, - }, - }, - manual: { - title: 'Dodaj nowe urządzenie VPN używając klienta WireGuard', - finish: { - messageTop: - 'Pobierz podany plik konfiguracyjny na urządzeniu i zaimportuj go do klienta VPN żeby zakończyć jego konfigurowanie.', - ctaInstruction: - 'Użyj podanego niżej pliku konfiguracyjnego skanując kod QR lub importując go jako plik w aplikacji WireGuard na urządzeniu.', - // MD - warningMessage: ` - Należy pamiętać, że Defguard **nie przechowuje kluczy prywatnych**. Para kluczy (publiczny i prywatny) zostanie bezpiecznie utworzona w przeglądarce, ale jedynie klucz publiczny zostanie zapisany w bazie danych Defguard. Proszę pobrać utworzoną konfigurację zawierającą klucz prywatny dla urządzenia, gdyż nie będzie ona później dostępna. - `, - actionCard: { - title: 'Konfiguracja', - }, - }, - }, - cli: { - title: 'Dodaj urządzenie używając klienta Defguard CLI', - finish: { - topMessage: - 'Najpierw pobierz klienta Defguard CLI i zainstaluj go na serwerze.', - downloadButton: 'Pobierz klienta Defguard CLI', - commandCopy: 'Skopiuj i wklej to polecenie w terminalu na urządzeniu', - }, - setup: { - stepMessage: - 'Tu można dodać definicje lub utworzyć konfiguracje dla urządzeń, które mogą łączyć się do sieci VPN. Tutaj dostępne są jedynie lokalizacje bez uwierzytelniania wieloskładnikowego (MFA) ponieważ póki co MFA jest wspierane jedynie w kliencie Defguard Desktop.', - form: { - submit: 'Dodaj urządzenie', - }, - }, - }, - }, - }, - updatesNotification: { - header: { - criticalBadge: 'Aktualizacja krytyczna', - newVersion: 'Nowa wersja {version}', - title: 'Aktualizacja dostępna', - }, - controls: { - visitRelease: 'Zobacz stronę aktualizacji', - }, - }, - updatesNotificationToaster: { - title: 'Nowa wersja dostępna {version}', - controls: { - more: 'Zobacz co nowego', - }, - }, - addGroup: { - groupName: 'Nazwa grupy', - searchPlaceholder: 'Szukaj', - selectAll: 'Zaznacz wszystkich', - submit: 'Stwórz grupę', - title: 'Dodaj grupę', - groupSettings: 'Ustawienia grupy', - adminGroup: 'Grupa administratorska', - }, - editGroup: { - groupName: 'Nazwa grupy', - searchPlaceholder: 'Szukaj', - selectAll: 'Zaznacz wszystkich', - submit: 'Zmień grupę', - title: 'Edytuj grupę', - groupSettings: 'Ustawienia grupy', - adminGroup: 'Grupa administratorska', - }, - deleteGroup: { - title: 'Usuń grupę {name}', - subTitle: 'Grupa zostanie nieodwołalnie usunięta.', - locationListHeader: - 'Ta grupa jest obecnie przypisana do następujących lokalizacji:', - locationListFooter: `Jeżeli to jedyna dozwolona grupa dla danej lokalizacji, stanie się ona dostępna dla wszystkich użytkowników.`, - submit: 'Usuń grupę', - cancel: 'Wróć', - }, - registerEmailMFA: { - title: 'Skonfiguruj e-mail MFA', - form: { - controls: { - resend: 'Wyślij kod ponownie', - submit: 'Zweryfikuj kod', - }, - fields: { - code: { - error: 'Podany kod jest nieprawidłowy', - label: 'Kod', - }, - }, - }, - infoMessage: ` -

- Aby zakończyć konfigurację, wpisz kod, który został wysłany na adres: {email} -

- `, - messages: { - resend: 'Kod wysłany ponownie', - success: 'Metoda MFA e-mail włączona', - }, - }, - deviceConfig: { - title: 'Konfiguracje VPN urządzenia', - }, - changePasswordSelf: { - title: 'Zmień hasło', - messages: { - success: 'Hasło zostało zmienione', - error: 'Błąd zmiany hasła', - }, - form: { - labels: { - repeat: 'Powtórz hasło', - newPassword: 'Nowe hasło', - oldPassword: 'Obecne hasło', - }, - }, - controls: { - cancel: 'Wróć', - submit: 'Zmień hasło', - }, - }, - startEnrollment: { - title: 'Rozpocznij rejestrację', - desktopTitle: 'Konfiguracja klienta desktop', - messages: { - success: 'Rejestracja użytkownika rozpoczęta', - successDesktop: 'Konfiguracja klienta rozpoczęta', - errorDesktop: 'Błąd konfiguracji klienta desktop', - error: 'Błąd rejestracji użytkownika', - }, - form: { - email: { - label: 'E-mail', - }, - mode: { - options: { - email: 'Wyślij token przez e-mail', - manual: 'Przekaż token ręcznie', - }, - }, - submit: 'Rozpocznij rejestrację', - submitDesktop: 'Aktywacja desktop', - smtpDisabled: - 'Skonfiguruj SMTP, żeby wysłać token przez e-mail. Przejdź do Ustawienia -> SMTP.', - }, - tokenCard: { - title: 'Token aktywacji', - }, - urlCard: { - title: 'URL instancji Defguard', - }, - }, - deleteNetwork: { - cancel: 'Wróć', - submit: 'Usuń lokalizację', - subTitle: 'Lokalizacja zostanie nieodwołalnie usunięta.', - title: 'Usuń lokalizację {name}', - }, - changeWebhook: { - messages: { - success: 'Webhook zmieniony.', - }, - }, - manageWebAuthNKeys: { - title: 'Klucze bezpieczeństwa', - messages: { - deleted: 'Klucz WebAuthN został usunięty.', - duplicateKeyError: 'Klucz jest już zarejestrowany', - }, - infoMessage: ` -

- Klucze bezpieczeństwa mogą być używane jako drugi czynnik uwierzytelniający - zamiast kodu weryfikacyjnego. Dowiedz się więcej o konfiguracji - klucza bezpieczeństwa. -

-`, - form: { - messages: { - success: 'Klucz bezpieczeństwa dodany.', - }, - fields: { - name: { - label: 'Nazwa nowego klucza', - }, - }, - controls: { - submit: 'Dodaj nowy klucz', - }, - }, - }, - recoveryCodes: { - title: 'Kody odzysku', - submit: 'Zapisałem swoje kody', - messages: { - copied: 'Kody skopiowane.', - }, - infoMessage: ` -

- Traktuj swoje kody odzyskiwania z takim samym poziomem uwagi jak - jak swoje hasło! Zalecamy zapisywanie ich za pomocą menedżera haseł - takich jak Lastpass, bitwarden czy Keeper. -

-`, - }, - registerTOTP: { - title: 'Authenticator App Setup', - infoMessage: ` -

- Aby skonfigurować MFA, zeskanuj ten kod QR za pomocą aplikacji uwierzytelniającej, a następnie - wprowadź kod w polu poniżej: -

-`, - messages: { - totpCopied: 'Ścieżka TOTP skopiowana.', - success: 'TOTP Enabled', - }, - copyPath: 'Kopiuj ścieżkę TOTP', - form: { - fields: { - code: { - label: 'Kod uwierzytelniający', - error: 'Kod jest nieprawidłowy', - }, - }, - controls: { - submit: 'Weryfikuj kod', - }, - }, - }, - editDevice: { - title: 'Edytuj urządzenie', - messages: { - success: 'Urządzenie zostało zaktualizowane.', - }, - form: { - fields: { - name: { - label: 'Nazwa urządzenia', - }, - publicKey: { - label: 'Klucz publiczny urządzenia (WireGuard)', - }, - }, - controls: { - submit: 'Edytuj urządzenie', - }, - }, - }, - deleteDevice: { - title: 'Usuń urządzenie', - message: 'Czy chcesz usunąć urządzenie {deviceName} ?', - submit: 'Usuń urządzenie', - messages: { - success: 'Urządzenie zostało usunięte.', - }, - }, - keyDetails: { - title: 'Szczegóły YubiKey', - downloadAll: 'Pobierz wszystkie klucze', - }, - deleteUser: { - title: 'Usuń użytkownika', - controls: { - submit: 'Usuń użytkownika', - }, - message: 'Czy chcesz trwale usunąć konto {username} ?', - messages: { - success: '{username} usunięte.', - }, - }, - disableUser: { - title: 'Dezaktywuj użytkownika', - controls: { - submit: 'Dezaktywuj użytkownika', - }, - message: 'Czy chcesz dezaktywować użytkownika {username}?', - messages: { - success: 'Użytkownik {username} został dezaktywowany.', - }, - }, - enableUser: { - title: 'Aktywuj użytkownika', - controls: { - submit: 'Aktywuj użytkownika', - }, - message: 'Czy chcesz aktywować użytkownika {username}?', - messages: { - success: 'Użytkownik {username} został aktywowany.', - }, - }, - deleteProvisioner: { - title: 'Usuń provisionera', - controls: { - submit: 'Usuń provisionera', - }, - message: 'Czy chcesz usunąć {id} provisionera?', - messages: { - success: '{provisioner} usunięty.', - }, - }, - changeUserPassword: { - messages: { - success: 'Hasło zmienione.', - }, - title: 'Zmiana hasła użytkownika', - form: { - controls: { - submit: 'Zapisz nowe hasło', - }, - fields: { - newPassword: { - label: 'Nowe hasło', - }, - confirmPassword: { - label: 'Powtórz hasło', - }, - }, - }, - }, - provisionKeys: { - warning: 'Ta operacja bezpowrotnie usunie dane z aplikacji OpenPGP klucza.', - title: 'Provisionowanie klucza YubiKey:', - infoBox: `Wybrany provisioner musi mieć podłączony pusty YubiKey. - Aby zresetować YubiKey uruchom - gpg --card-edit przed generowaniem kluczy.`, - selectionLabel: - 'Wybierz jeden z następujących provisionerów, aby wygenrować klucze na YubiKey:', - noData: { - workers: 'Nie znaleziono workerów...', - }, - controls: { - submit: 'Wygeneruj klucze dla YubiKey', - }, - messages: { - success: 'Klucze zostały przetransferowane na YubiKey', - errorStatus: 'Wystapił błąd podczas pobierania statusu.', - }, - }, - addUser: { - messages: { - userAdded: 'Stworzono użytkownika', - }, - title: 'Dodaj nowego użytkownika', - form: { - submit: 'Dodaj użytkownika', - fields: { - username: { - placeholder: 'login', - label: 'Login', - }, - password: { - placeholder: 'Hasło', - label: 'Hasło', - }, - email: { - placeholder: 'E-mail użytkownika', - label: 'E-mail użytkownika', - }, - firstName: { - placeholder: 'Imię', - label: 'Imię', - }, - lastName: { - placeholder: 'Nazwisko', - label: 'Nazwisko', - }, - phone: { - placeholder: 'Telefon', - label: 'Telefon', - }, - enableEnrollment: { - label: 'Użyj zdalnej rejestracji', - link: 'więcej informacji tutaj', - }, - }, - }, - }, - webhookModal: { - title: { - addWebhook: 'Dodaj webhook', - editWebhook: 'Edytuj webhook', - }, - messages: { - clientIdCopy: 'Skopiowano identyfikator klienta', - clientSecretCopy: 'Sekret klienta skopiowany.', - }, - form: { - triggers: 'Zdarzenia wyzwalające:', - messages: { - successAdd: 'Webhook utworzony.', - successModify: 'Webhook zmodyfikowany.', - }, - error: { - urlRequired: 'URL jest wymagany.', - validUrl: 'Musi być poprawnym adresem URL.', - scopeValidation: 'Musi mieć co najmniej jeden wyzwalacz.', - tokenRequired: 'Token jest wymagany.', - }, - fields: { - description: { - label: 'Opis', - placeholder: 'Webhook do tworzenia konta gmail na nowym użytkowniku', - }, - token: { - label: 'Secret token', - placeholder: 'Token autoryzacyjny', - }, - url: { - label: 'Webhook URL', - placeholder: 'https://example.com/webhook', - }, - userCreated: { - label: 'Stworzenie nowego użytkownika', - }, - userDeleted: { - label: 'Użytkownik usunięty', - }, - userModified: { - label: 'Użytkownik zmodyfikowany', - }, - hwkeyProvision: { - label: 'Stworzenie kluczy na YubiKey dla użytkownika', - }, - }, - }, - }, - deleteWebhook: { - title: 'Usuń webhook', - message: 'Czy chcesz usunąć {name} webhook ?', - submit: 'Usuń', - messages: { - success: 'Webhook usunięty.', - }, - }, - }, - addDevicePage: { - title: 'Dodaj urządzenie', - messages: { - deviceAdded: 'Urządzenie dodane', - }, - helpers: { - setupOpt: `Możesz dodać urządzenie używając naszego klienta lub samemu skonfigurwać urządzenie.`, - client: `Pobierz klienta defguard tutaj, a następnie postępuj zgodnie z instrukcją w celu jego konfiguracji.`, - }, - - steps: { - setupDevice: { - title: 'Dodaj urządzenie', - form: { - errors: { - name: { - duplicatedName: 'Nazwa jest już zajęta', - }, - }, - fields: { - name: { - label: 'Nazwa', - }, - publicKey: { - label: 'Klucz publiczny', - }, - }, - }, - options: { - auto: 'Generuj klucze', - manual: 'Użyj własnych', - }, - infoMessage: `

W razie problemów możesz odwiedzić dokumentacje.

`, - }, - configDevice: { - title: 'Skonfiguruj urządzenie', - messages: { - copyConfig: 'Konfiguracja skopiowa', - }, - qrInfo: - 'Użyj poniższych konfiguracji aby połączyć się z wybranymi lokalizacjami.', - helpers: { - warningNoNetworks: 'Nie posiadasz dostępu do żadnej sieci.', - qrHelper: `

Możesz skonfigurować WireGuard na telefonie skanując QR kod używając aplikacji WireGuard.

`, - warningAutoMode: ` -

Uwaga, Defguard nie przechowuje twojego klucza prywatnego. Gdy opuścisz obecną stronę nie będziesz mógł pobrać ponownie konfiguracji z kluczem prywatnym.

-`, - warningManualMode: `

-Uwaga, podane tutaj konfiguracje nie posiadają klucza prywatnego. Musisz uzupełnić pobraną konfigurację o swój klucz prywatny. -

`, - }, - qrLabel: 'Konfiguracja WireGuard', - inputNameLabel: 'Nazwa urządzenia', - }, - copyToken: { - title: 'Autoryzacja klienta', - urlCardTitle: 'Url', - tokenCardTitle: 'Token', - }, - }, - }, - userPage: { - title: { - view: 'Profil użytkownika', - edit: 'Edycja profilu użytkownika', - }, - messages: { - editSuccess: 'Użytkownik zaktualizowany.', - failedToFetchUserData: 'Błąd pobierania informacji o użytkowniku.', - passwordResetEmailSent: 'E-mail zerowania hasła został wysłany.', - }, - userDetails: { - header: 'Szczegóły profilu', - messages: { - deleteApp: 'Aplikacja i wszystkie tokeny usunięte.', - }, - warningModals: { - title: 'Ostrzeżenie', - content: { - usernameChange: `Zmiana nazwy użytkownika ma znaczący wpływ na usługi, do których użytkownik zalogował się za pomocą Defguard. Po zmianie nazwy użytkownika użytkownik może stracić do nich dostęp (ponieważ nie będą go rozpoznawać). Czy na pewno chcesz kontynuować?`, - emailChange: `Jeśli korzystasz z zewnętrznych dostawców OpenID Connect (OIDC) do uwierzytelniania użytkowników, zmiana adresu e-mail użytkownika może mieć wpływ na jego możliwość zalogowania się do Defguarda. Czy na pewno chcesz kontynuować?`, - }, - buttons: { - proceed: 'Proceed', - cancel: 'Cancel', - }, - }, - fields: { - username: { - label: 'Nazwa użytkownika', - }, - firstName: { - label: 'Imię', - }, - lastName: { - label: 'Nazwisko', - }, - phone: { - label: 'Numer telefonu', - }, - email: { - label: 'E-mail', - }, - status: { - label: 'Status', - active: 'Aktywny', - disabled: 'Nieaktywny', - }, - groups: { - label: 'Grupy użytkowników', - noData: 'Brak grup', - }, - apps: { - label: 'Autoryzowane aplikacje', - noData: 'Brak autoryzowanych aplikacji', - }, - }, - }, - userAuthInfo: { - header: 'Hasło i uwierzytelnienie', - password: { - header: 'Ustawienia hasła', - changePassword: 'Zmiana hasła', - ldap_change_heading: 'Wymagana aktualizacja hasła {ldapName}', - ldap_change_message: - 'Defguard nie ma możliwości odczytania twojego hasła, więc nie możemy go pobrać do automatycznej synchronizacji z danymi logowania {ldapName}. Aby umożliwić logowanie do innych usług za pomocą {ldapName}, zaktualizuj swoje hasło Defguard, aby jednocześnie ustawić hasło {ldapName} — możesz ponownie wpisać swoje obecne hasło, jeśli chcesz. Ten krok jest konieczny, aby zapewnić spójną i bezpieczną autoryzację w obu systemach.', - }, - recovery: { - header: 'Opcje odzyskiwania danych', - codes: { - label: 'Kody odzyskiwania', - viewed: 'Obejrzane', - }, - }, - mfa: { - header: 'Metody dwuskładnikowe', - edit: { - disable: 'Wyłącz MFA', - }, - messages: { - mfaDisabled: 'MFA wyłączone.', - OTPDisabled: 'Hasło jednorazowe wyłączone.', - changeMFAMethod: 'Metoda MFA zmieniona.', - EmailMFADisabled: 'Metoda e-mail wyłączona.', - }, - securityKey: { - singular: 'klucz bezpieczeństwa', - plural: 'klucze bezpieczeństwa', - }, - default: 'domyślny', - enabled: 'Włączony', - disabled: 'Wyłączony', - labels: { - totp: 'Hasła jednorazowe oparte na czasie', - webauth: 'Klucze bezpieczeństwa', - email: 'E-mail', - }, - editMode: { - enable: 'Włącz', - disable: 'Wyłącz', - makeDefault: 'Uczyń domyślnym', - webauth: { - manage: 'Zarządzaj kluczami bezpieczeństwa', - }, - }, - }, - }, - controls: { - editButton: 'Edytuj profil', - deleteAccount: 'Usuń konto', - }, - devices: { - header: 'Urządzenia użytkownika', - addDevice: { - web: 'Dodaj nowe urządzenie', - desktop: 'Dodaj to urządzenie', - }, - card: { - labels: { - noData: 'Nie połączono', - connectedThrough: 'Połączone przez', - publicIP: 'Publiczny adres IP', - connectionDate: 'Data połączenia', - lastLocation: 'Ostatnie połączenie z', - active: 'aktywne', - assignedIp: 'Przydzielony adres IP', - lastConnected: 'Ostatnio połączone', - }, - edit: { - edit: 'Edycja urządzenia', - delete: 'Usuń urządzenie', - showConfigurations: 'Pokaż konfiguracje', - }, - }, - }, - yubiKey: { - header: 'YubiKey użytkownika', - provision: 'Sprovisionuj YubiKey', - keys: { - pgp: 'Klucz PGP', - ssh: 'Klucz SSH', - }, - noLicense: { - moduleName: 'Moduł YubiKey', - line1: 'To jest płatny moduł dla YubiKey', - line2: 'zarządzanie i provisioning.', - }, - }, - authenticationKeys: { - header: 'Klucze autoryzacyjne użytkownika', - addKey: 'Dodaj nowy klucz', - keysList: { - common: { - copy: 'Skopiuj', - delete: 'Usuń', - download: 'Pobierz', - key: 'Klucz', - rename: 'Zmień nazwę', - serialNumber: 'Numer seryjny', - }, - }, - deleteModal: { - confirmMessage: 'Klucz {name} zostanie trwale usunięty.', - title: 'Usuń klucz autoryzacyjny', - }, - addModal: { - header: 'Dodaj nowy klucz autoryzacyjny', - keyType: 'Typ Klucza', - keyForm: { - labels: { - key: 'Klucz', - title: 'Nazwa', - }, - placeholders: { - title: 'Nazwa Klucza', - key: { - ssh: 'Rozpoczyna się z ‘ssh-rsa’, ‘ecdsa-sha2-nistp256’, ...', - gpg: 'Rozpoczyna się z ‘-----BEGIN PGP PUBLIC KEY BLOCK-----‘', - }, - }, - submit: 'Dodaj klucz {name}', - }, - messages: { - keyAdded: 'Klucz dodany.', - keyExists: 'Klucz już został dodany.', - unsupportedKeyFormat: 'Format klucza nie jest wspierany.', - genericError: 'Nie udało się dodać klucza. Proszę spróbować ponownie później.', - }, - yubikeyForm: { - selectWorker: { - info: 'Ta operacja wyzeruje moduł GPG do ustawień fabrycznych po czym ponownie go skonfiguruje. Ta operacja jest nieodwracalna.', - selectLabel: 'Wybierz jedną stację do konfiguracji klucza.', - noData: 'Obecnie nie ma dostępnych stacji.', - available: 'Dostępny', - unavailable: 'Niedostępny', - }, - provisioning: { - inProgress: 'Klucz jest konfigurowany, proszę czekać.', - error: 'Konfiguracja klucza zakończyła się niepowodzeniem.', - success: 'Klucz skonfigurowany pomyślnie.', - }, - submit: 'Skonfiguruj klucz', - }, - }, - }, - apiTokens: { - header: 'API Tokeny użytkownika', - addToken: 'Dodaj nowy API Token', - tokensList: { - common: { - rename: 'Zmień nazwę', - token: 'Token', - copy: 'Skopiuj', - delete: 'Usuń', - createdAt: 'Utworzono', - }, - }, - deleteModal: { - title: 'Usuń API Token', - confirmMessage: 'API token {name} zostanie trwale usunięty.', - }, - addModal: { - header: 'Dodaj nowy API Token', - tokenForm: { - placeholders: { - name: 'Nazwa API Tokena', - }, - labels: { - name: 'Nazwa', - }, - submit: 'Dodaj API token', - }, - copyToken: { - warningMessage: - 'Skopiuj poniższy API token teraz. Nie będzie on dostępny w późniejszym czasie.', - header: 'Skopiuj nowy API Token', - }, - messages: { - tokenAdded: 'API token dodany.', - genericError: 'Nie udało się dodać API tokena. Spróbuj ponownie później.', - }, - }, - }, - }, - usersOverview: { - pageTitle: 'Użytkownicy', - search: { - placeholder: 'Znajdź użytkowników', - }, - filterLabels: { - all: 'Wszyscy użytkownicy', - admin: 'Tylko administratorzy', - users: 'Tylko użytkownicy', - }, - usersCount: 'Wszyscy użytkownicy', - addNewUser: 'Dodaj użytkownika', - list: { - headers: { - name: 'Nazwa użytkownika', - username: 'Login', - phone: 'Telefon', - actions: 'Akcje', - }, - editButton: { - activateDesktop: 'Aktywacja klienta desktop', - changePassword: 'Zmień hasło', - edit: 'Edytuj konto', - delete: 'Usuń konto', - startEnrollment: 'Rozpocznij rejestrację', - resetPassword: 'Resetuj hasło', - addGPG: 'Dodaj klucz GPG', - addSSH: 'Dodaj klucz SSH', - addYubikey: 'Dodaj YubiKey', - }, - }, - }, - navigation: { - bar: { - overview: 'Przegląd sieci', - users: 'Użytkownicy', - provisioners: 'YubiKey Provisioners', - webhooks: 'Webhooki', - openId: 'Aplikacje OpenID', - myProfile: 'Mój profil', - settings: 'Ustawienia', - logOut: 'Wyloguj się', - enrollment: 'Rejestracja', - support: 'Wsparcie', - groups: 'Grupy', - devices: 'Urządzenia sieciowe', - acl: 'Kontrola dostępu', - }, - mobileTitles: { - wizard: 'Konfiguracja VPN', - users: 'Użytkownicy', - settings: 'Ustawienia globalne Defguard', - user: 'Profil użytkownika', - provisioners: 'YubiKey Provisioners', - webhooks: 'Webhooki', - openId: 'Aplikacje OpenID', - overview: 'Przegląd lokalizacji', - networkSettings: 'Edycja lokalizacji', - enrollment: 'Rejestracja', - support: 'Wsparcie', - groups: 'Grupy', - devices: 'Urządzenia sieciowe', - }, - copyright: 'Copyright ©2023-2025', - version: { - open: 'Wersja aplikacji: {version}', - closed: 'v{version}', - }, - }, - form: { - download: 'Pobierz', - copy: 'Kopiuj', - saveChanges: 'Zapisz zmiany', - submit: 'Zapisz', - login: 'Zaloguj się', - cancel: 'Anuluj', - close: 'Zamknij', - placeholders: { - password: 'Hasło', - username: 'Nazwa użytkownika', - }, - error: { - invalidCode: 'Podany kod jest niewłaściwy.', - forbiddenCharacter: 'Pole zawiera niedozwolone znaki.', - usernameTaken: 'Nazwa użytkownika jest już w użyciu.', - invalidKey: 'Klucz jest nieprawidłowy.', - invalid: 'Pole jest nieprawidłowe.', - required: 'Pole jest wymagane.', - maximumLength: 'Maksymalna długość przekroczona.', - minimumLength: 'Minimalna długość nie została osiągnięta.', - noSpecialChars: 'Nie wolno używać znaków specjalnych.', - oneDigit: 'Wymagana jedna cyfra.', - oneSpecial: 'Wymagany jest znak specjalny.', - oneUppercase: 'Wymagana jedna duża litera.', - oneLowercase: 'Wymagana jedna mała litera.', - portMax: 'Maksymalny numer portu to 65535.', - endpoint: 'Wpisz poprawny adres.', - address: 'Wprowadź poprawny adres.', - addressNetmask: 'Wprowadź poprawny adres IP oraz maskę sieci.', - validPort: 'Wprowadź prawidłowy port.', - validCode: 'Kod powinien mieć 6 cyfr.', - allowedIps: 'Tylko poprawne adresy IP oraz domeny.', - startFromNumber: 'Nie może zaczynać się od liczby.', - repeat: 'Wartości się nie pokrywają.', - maximumValue: 'Maksymalna wartość {value} przekroczona.', - minimumValue: 'Minimalna wartość {value} nie osiągnięta.', - tooManyBadLoginAttempts: - 'Zbyt duża ilość nieprawidłowego logowania. Spróbuj ponownie za kilka minut.', - number: 'Wartość musi być liczbą.', - }, - floatingErrors: { - title: 'Popraw następujące błędy:', - }, - }, - components: { - deviceConfigsCard: { - cardTitle: 'Konfiguracja lokalizacji', - messages: { - copyConfig: 'Konfiguracja skopiowana', - }, - }, - gatewaysStatus: { - label: 'Gateways', - states: { - error: 'Błąd pobierania statusu', - }, - messages: { - error: 'Błąd pobierania statusu połączeń gateway', - deleteError: 'Błąd usuwania gateway', - }, - }, - noLicenseBox: { - footer: { - get: 'Uzyskaj licencję enterprise', - contact: 'poprzez kontakt:', - }, - }, - }, - settingsPage: { - title: 'Ustawienia', - tabs: { - smtp: 'SMTP', - global: 'Globalne', - ldap: 'LDAP', - openid: 'OpenID', - enterprise: 'Funkcjonalności enterprise', - }, - messages: { - editSuccess: 'Ustawienia zaktualizowane.', - challengeSuccess: 'Zmieniono wiadomość do podpisu.', - }, - enterpriseOnly: { - title: 'Ta funkcja jest dostępna tylko w wersji Defguard Enterprise', - currentExpired: 'Twoja obecna licencja wygasła.', - subtitle: 'Aby uzyskać więcej informacji, odwiedź naszą ', - website: 'stronę internetową', - }, - ldapSettings: { - title: 'Ustawienia LDAP', - sync: { - header: 'Obustronna synchronizacja LDAP', - info: 'Przed włączeniem synchronizacji, zapoznaj się z [dokumentacją](https://docs.defguard.net/enterprise/all-enteprise-features).', - }, - form: { - labels: { - ldap_enable: 'Włącz integrację z LDAP', - ldap_url: 'URL', - ldap_bind_username: 'Bind Username', - ldap_bind_password: 'Bind Password', - ldap_member_attr: 'Member Attribute', - ldap_username_attr: 'Username Attribute', - ldap_user_obj_class: 'User Object Class', - ldap_user_search_base: 'User Search Base', - ldap_user_auxiliary_obj_classes: 'Additional User Object Classes', - ldap_groupname_attr: 'Groupname Attribute', - ldap_group_search_base: 'Group Search Base', - ldap_group_member_attr: 'Group Member Attribute', - ldap_group_obj_class: 'Group Object Class', - ldap_sync_enabled: 'Włącz synchronizację w dwie strony', - ldap_authoritative_source: 'Użyj autorytatywne źródło danych', - ldap_sync_interval: 'Interwał synchronizacji', - ldap_use_starttls: 'Użyj StartTLS', - ldap_tls_verify_cert: 'Sprawdzaj certyfikat TLS', - ldap_uses_ad: 'Serwer LDAP jest serwerem Active Directory', - }, - delete: 'Usuń konfigurację', - }, - test: { - title: 'Test połączenia LDAP', - messages: { - error: 'Brak połączenia', - success: 'Połączono z LDAP', - }, - submit: 'Test', - }, - }, - openIdSettings: { - heading: 'Ustawienia zewnętrznego OpenID', - general: { - title: 'Ogólne ustawienia', - helper: - 'Możesz tu zmienić ogólną mechanikę działania zewnętrznego OpenID w twojej instancji Defguarda.', - createAccount: { - label: - 'Automatycznie twórz konta w momencie logowania przez zewnętrznego dostawcę OpenID', - helper: - 'Jeśli ta opcja jest włączona, Defguard automatycznie tworzy nowe konta dla użytkowników, którzy logują się po raz pierwszy za pomocą zewnętrznego dostawcy OpenID. W innym przypadku konto użytkownika musi zostać najpierw utworzone przez administratora.', - }, - useOpenIdForMfa: { - label: 'Używaj zewnętrznego OpenID dla MFA klienta', - helper: - 'Gdy zewnętrzny proces Multi-Factor Authentication (MFA) OpenID SSO jest włączony, użytkownicy łączący się z lokalizacjami VPN wymagającymi MFA będą musieli uwierzytelniać się przez swoją przeglądarkę używając skonfigurowanego dostawcy dla każdego połączenia. Jeśli to ustawienie jest wyłączone, MFA dla tych lokalizacji VPN będzie obsługiwane przez wewnętrzny system SSO Defguard. W takim przypadku użytkownicy muszą mieć skonfigurowane TOTP lub MFA oparte na e-mailu.', - }, - usernameHandling: { - label: 'Obsługa nazw użytkowników', - helper: - 'Skonfiguruj metodę obsługi nieprawidłowych znaków w nazwach użytkowników twojego dostawcy tożsamości.', - options: { - remove: 'Usuń niedozwolone znaki', - replace: 'Zamień niedozwolone znaki', - prune_email: 'Przytnij adres e-mail', - }, - }, - }, - form: { - title: 'Ustawienia klienta', - helper: - 'Tutaj możesz skonfigurować ustawienia klienta OpenID z wartościami dostarczonymi przez zewnętrznego dostawcę OpenID.', - custom: 'Niestandardowy', - none: 'Brak', - documentation: - 'Przeczytaj więcej o tej funkcji w naszej [dokumentacji](https://docs.defguard.net/enterprise/enterprise-features).', - delete: 'Usuń dostawcę', - directory_sync_settings: { - title: 'Ustawienia synchronizacji katalogu', - helper: - 'Synchronizacja katalogu pozwala na automatyczną synchronizację grup użytkowników i ich statusu na podstawie zewnętrznego dostawcy.', - notSupported: 'Synchronizacja katalogu nie jest obsługiwana dla tego dostawcy.', - connectionTest: { - success: 'Połączenie zakończone sukcesem.', - error: 'Wystąpił błąd podczas próby połączenia:', - }, - }, - selects: { - synchronize: { - all: 'Wszystko', - users: 'Użytkownicy', - groups: 'Grupy', - }, - behavior: { - keep: 'Zachowaj', - disable: 'Dezaktywuj', - delete: 'Usuń', - }, - }, - labels: { - provider: { - label: 'Dostawca', - helper: - 'Wybierz swojego dostawcę OpenID. Możesz użyć dostawcy niestandardowego i samodzielnie wypełnić pole URL bazowego.', - }, - client_id: { - label: 'ID klienta', - helper: 'ID klienta dostarczone przez dostawcę OpenID.', - }, - client_secret: { - label: 'Sekret klienta', - helper: 'Sekret klienta dostarczony przez dostawcę OpenID.', - }, - base_url: { - label: 'URL bazowy', - helper: - 'Podstawowy adres URL twojego dostawcy OpenID, np. https://accounts.google.com. Sprawdź naszą dokumentację, aby uzyskać więcej informacji i zobaczyć przykłady.', - }, - display_name: { - label: 'Wyświetlana nazwa', - helper: - 'Nazwa dostawcy OpenID, która będzie wyświetlana na przycisku logowania. Jeśli zostawisz to pole puste, przycisk będzie miał tekst "Zaloguj przez OIDC".', - }, - enable_directory_sync: { - label: 'Włącz synchronizację katalogu', - }, - sync_target: { - label: 'Synchronizuj', - helper: - 'Co będzie synchronizowane z zewnętrznym dostawcą OpenID. Możesz wybrać pomiędzy synchronizacją statusu użytkowników, ich przynależności do grup lub synchronizacją obu.', - }, - sync_interval: { - label: 'Interwał synchronizacji', - helper: 'Odstęp czasu w sekundach pomiędzy synchronizacjami katalogu.', - }, - user_behavior: { - label: 'Zachowanie kont użytkowników', - helper: - 'Wybierz jak postępować z kontami użytkowników, które nie znajdują się w katalogu zewnętrznego dostawcy. Możesz wybrać między zachowaniem ich, dezaktywacją lub całkowitym usunięciem.', - }, - admin_behavior: { - label: 'Zachowanie kont administratorów', - helper: - 'Wybierz, jak postępować z kontami administratorów Defguard, które nie znajdują się w katalogu zewnętrznego dostawcy. Możesz wybrać między zachowaniem ich, dezaktywacją lub całkowitym usunięciem.', - }, - admin_email: { - label: 'E-mail administratora', - helper: - 'Adres e-mail konta, za pośrednictwem którego będzię odbywać się synchronizacja, np. e-mail konta osoby, która skonfigurowała konto usługi Google. Więcej szczegółów możesz znaleźć w naszej dokumentacji.', - }, - service_account_used: { - label: 'Używane konto usługi', - helper: - 'Obecnie używane konto usługi Google do synchronizacji. Możesz je zmienić, przesyłając nowy plik klucza konta usługi.', - }, - service_account_key_file: { - label: 'Plik klucza konta usługi', - helper: - 'Prześlij nowy plik klucza konta usługi, aby ustawić konto usługi używane do synchronizacji. UWAGA: Przesłany plik nie będzie widoczny po zapisaniu ustawień i ponownym załadowaniu strony, ponieważ jego zawartość jest poufna i nie jest przesyłana z powrotem do panelu.', - uploaded: 'Przesłany plik', - uploadPrompt: 'Prześlij plik klucza konta usługi', - }, - okta_client_id: { - label: 'ID klienta synchronizacji Okta', - helper: 'ID klienta dla aplikacji synchronizacji Okta.', - }, - okta_client_key: { - label: 'Klucz prywatny klienta synchronizacji Okta', - helper: - 'Klucz prywatny dla aplikacji synchronizacji Okta w formacie JWK. Klucz nie jest wyświetlany ponownie po wgraniu.', - }, - jumpcloud_api_key: { - label: 'Klucz API JumpCloud', - helper: - 'Klucz API JumpCloud używany do synchronizacji stanu użytkowników i grup.', - }, - group_match: { - label: 'Synchronizuj tylko pasujące grupy', - helper: - 'Podaj listę nazw grup oddzielonych przecinkami, które powinny być synchronizowane. Jeśli pole zostanie puste, wszystkie grupy dostawcy zostaną zsynchronizowane.', - }, - }, - }, - }, - modulesVisibility: { - header: 'Widoczność modułów', - helper: `

- Jeśli nie używasz niektórych modułów, możesz zmienić ich widoczność -

- - Przeczytaj więcej w dokumentacji. - `, - fields: { - wireguard_enabled: { - label: 'WireGuard VPN', - }, - webhooks_enabled: { - label: 'Webhooks', - }, - worker_enabled: { - label: 'YubiBridge', - }, - openid_enabled: { - label: 'OpenID connect', - }, - }, - }, - defaultNetworkSelect: { - header: 'Domyślny widok sieci', - helper: `

Tutaj możesz zmienić domyślny widok sieci.

- - Przeczytaj więcej w dokumentacji. - `, - filterLabels: { - grid: 'Widok siatki', - list: 'Widok listy', - }, - }, - instanceBranding: { - header: 'Brandowanie instancji', - form: { - title: 'Nazwa i logo', - fields: { - instanceName: { - label: 'Nazwa instancji', - placeholder: 'Defguard', - }, - mainLogoUrl: { - label: 'URL logo na stronie logowania', - helper: 'Maksymalna wielkość zdjęcia to 250x100 px.', - placeholder: 'Domyślny obrazek', - }, - navLogoUrl: { - label: 'Menu i nawigacja - małe logo', - helper: 'Maksymalna wielkość zdjęcia to 100x100 px.', - placeholder: 'Domyślny obrazek', - }, - }, - controls: { - restoreDefault: 'Przywróć domyślne', - submit: 'Zapisz zmiany', - }, - }, - helper: ` -

- Tutaj możesz dodać URL swojego logo i nazwę dla swojej instancji defguard; - będzie ona wyświetlana zamiast defguard. -

- - Przeczytaj więcej w dokumentacji. - - `, - }, - license: { - header: 'Funkcje enterprise', - helpers: { - enterpriseHeader: { - text: 'Tutaj możesz zarządzać swoją licencją Defguard Enterprise.', - link: 'By dowiedzieć się więcej, odwiedź naszą stronę.', - }, - licenseKey: { - text: 'Wprowadź poniżej klucz licencyjny Defguard Enterprise. Powinieneś otrzymać go na swoją skrzynkę e-mailową po zakupie licencji.', - link: 'Licencję możesz zakupić tutaj.', - }, - }, - form: { - title: 'Licencja', - fields: { - key: { - label: 'Klucz licencji', - placeholder: 'Klucz licencji dla twojej instancji Defguard', - }, - }, - }, - licenseInfo: { - title: 'Informacje o licencji', - licenseNotRequired: - "

Posiadasz dostęp do tej funkcji enterprise, ponieważ nie przekroczyłeś jeszcze żadnych limitów. Sprawdź dokumentację, aby uzyskać więcej informacji.

", - types: { - subscription: { - label: 'Subskrypcja', - helper: 'Subskrypcja automatycznie odnawiana cyklicznie', - }, - offline: { - label: 'Offline', - helper: 'Licencja ważna do daty wygaśnięcia, odnawiana ręcznie', - }, - }, - fields: { - status: { - label: 'Status', - active: 'Aktywna', - expired: 'Wygasła', - subscriptionHelper: - 'Licencja w formie subskrypcji jest ważna przez pewien czas po dacie wygaśnięcia, by uwzględnić możliwe opóźnienia w automatycznej płatności.', - }, - type: { - label: 'Typ', - }, - validUntil: { - label: 'Ważna do', - }, - }, - }, - }, - smtp: { - form: { - title: 'Ustawienia', - sections: { - server: 'Ustawienia serwera', - }, - fields: { - server: { - label: 'Adres serwera', - placeholder: 'Adres', - }, - port: { - label: 'Port', - placeholder: 'Port', - }, - encryption: { - label: 'Szyfrowanie', - }, - user: { - label: 'Użytkownik', - placeholder: 'Użytkownik', - }, - password: { - label: 'Hasło', - placeholder: 'Hasło', - }, - sender: { - label: 'Adres wysyłającego', - placeholder: 'Adres', - helper: ` -

- Systemowe wiadomości będą wysyłane z tego adresu, np. no-reply@my-company.com. -

- `, - }, - }, - controls: { - submit: 'Zapisz zmiany', - }, - }, - delete: 'Usuń konfigurację', - testForm: { - title: 'Wyślij testowy e-mail', - subtitle: 'Wprowadź adres e-mail odbiorcy', - fields: { - to: { - label: 'Adres odbiorcy', - placeholder: 'Adres', - }, - }, - controls: { - submit: 'Wyślij', - resend: 'Wyślij ponownie', - retry: 'Spróbuj ponownie', - success: 'E-mail wysłany pomyślnie', - error: 'Błąd wysyłania e-maila', - }, - }, - helper: - 'Skonfiguruj serwer SMTP do wysyłania wiadomości systemowych do użytkowników.', - }, - enrollment: { - helper: - 'Rejestracja to proces, w ramach którego nowy użytkownik może samodzielnie aktywować swoje konto, ustawić hasło i skonfigurować urządzenie VPN.', - vpnOptionality: { - header: 'Opcjonalność kroku VPN', - helper: - 'Możesz zdecydować czy dodawanie urządzenia VPN jest obowiązkowym czy opcjonalnym krokiem rejestracji', - }, - welcomeMessage: { - header: 'Wiadomość powitalna', - helper: ` -

W tym polu możesz używać Markdown:

-
    -
  • Nagłówki zaczynają się od #
  • -
  • Użyj asterysków aby uzyskać *kursywę*
  • -
  • Użyj dwóch asterysków aby uzyskać **pogrubienie**
  • -
- `, - }, - welcomeEmail: { - header: 'E-mail powitalny', - helper: ` -

W tym polu możesz używać Markdown:

-
    -
  • Nagłówki zaczynają się od #
  • -
  • Użyj asterysków aby uzyskać *kursywę*
  • -
  • Użyj dwóch asterysków aby uzyskać **pogrubienie**
  • -
- `, - }, - form: { - controls: { - submit: 'Zapisz zmiany', - }, - welcomeMessage: { - helper: - 'Ta wiadomość będzie pokazywana użytkownikom po zakończeniu rejestracji. Sugerujemy wymienienie w niej istotnych linków oraz krótkie wyjaśnienie kolejnych kroków.', - placeholder: 'Wpisz wiadomość powitalną', - }, - welcomeEmail: { - helper: - 'Ta wiadomość zostanie wysłana do użytkowników po zakończeniu rejestracji. Sugerujemy wymienienie w niej istotnych linków oraz krótkie wyjaśnienie kolejnych kroków. Możesz użyć tej samej treści co w wiadomości powitalnej.', - placeholder: 'Wpisz e-mail powitalny', - }, - welcomeEmailSubject: { - label: 'Temat', - }, - useMessageAsEmail: { - label: 'Taki sam jak wiadomość powitalna', - }, - }, - }, - enterprise: { - header: 'Funkcjonalności Enterprise', - helper: 'Tutaj możesz zmienić ustawienia enterprise.', - fields: { - deviceManagement: { - label: 'Zablokuj możliwość zarządzania urządzeniami przez użytkowników', - helper: - 'Kiedy ta opcja jest włączona, tylko użytkownicy w grupie "Admin" mogą zarządzać urządzeniami w profilu użytkownika', - }, - disableAllTraffic: { - label: 'Zablokuj możliwość przekierowania całego ruchu przez VPN', - helper: - 'Kiedy ta opcja jest włączona, użytkownicy nie będą mogli przekierować całego ruchu przez VPN za pomocą klienta Defguard.', - }, - manualConfig: { - label: 'Wyłącz manualną konfigurację WireGuard', - helper: - 'Kiedy ta opcja jest włączona, użytkownicy nie będą mogli pobrać ani wyświetlić danych do manualnej konfiguracji WireGuard. Możliwe będzie wyłącznie skonfigurowanie klienta Defguard.', - }, - }, - }, - gatewayNotifications: { - smtpWarning: 'Aby włączyć powiadomienia należy najpierw skonfigurować serwer SMTP', - header: 'Powiadomienia', - helper: 'Tutaj możesz włączyć powiadomienia e-mail.', - sections: { - gateway: 'Powiadomienia o rozłączeniu Gatewaya', - }, - form: { - submit: 'Zapisz zmiany', - fields: { - disconnectNotificationsEnabled: { - label: 'Włącz powiadomienia o rozłączeniu', - help: "Wyślij powiadomienie do administratorów po rozłączeniu się Gateway'a", - }, - inactivityThreshold: { - label: 'Czas nieaktywności [minuty]', - help: 'Czas (w minutach), który musi upłynąć od rozłączenia zanim zostanie wysłane powiadomienie', - }, - reconnectNotificationsEnabled: { - label: 'Włącz powiadomienia o ponownym połączeniu', - help: "Wyślij powiadomienie do administratorów po ponownym nawiązaniu połączenia z Gateway'em", - }, - }, - }, - }, - }, - openidOverview: { - pageTitle: 'Aplikacje OpenID', - search: { - placeholder: 'Znajdź aplikacje', - }, - filterLabels: { - all: 'Wszystkie aplikacje', - enabled: 'Włączone', - disabled: 'Wyłączone', - }, - clientCount: 'Wszystkie aplikacje', - addNewApp: 'Dodaj aplikację', - list: { - headers: { - name: 'Nazwa', - status: 'Status', - actions: 'Akcję', - }, - editButton: { - edit: 'Edytuj aplikację', - delete: 'Usuń aplikację', - disable: 'Wyłącz', - enable: 'Włącz', - copy: 'Skopuj ID', - }, - status: { - enabled: 'Włączona', - disabled: 'Wyłączona', - }, - }, - messages: { - noLicenseMessage: 'Nie masz licencji dla tej funkcjonalności.', - noClientsFound: 'Nie znaleziono żadnych wyników.', - copySuccess: 'ID skopiowane', - }, - deleteApp: { - title: 'Usuń aplikację', - message: 'Czy chcesz usunąć aplikację {appName} ?', - submit: 'Usuń aplikację', - messages: { - success: 'Aplikacja usunięta.', - }, - }, - enableApp: { - messages: { - success: 'Aplikacja włączona', - }, - }, - disableApp: { - messages: { - success: 'Aplikacja wyłączona', - }, - }, - modals: { - openidClientModal: { - title: { - addApp: 'Dodaj aplikację', - editApp: 'Edytuj aplikację: {appName}', - }, - scopes: 'Zakresy:', - messages: { - clientIdCopy: 'Client ID zostało skopiowane.', - clientSecretCopy: 'Client secret zostało skopiowane.', - }, - form: { - messages: { - successAdd: 'Aplikacja utworzona.', - successModify: 'Aplikacja zmodyfikowana.', - }, - error: { - urlRequired: 'URL jest wymagany.', - validUrl: 'URL musi być poprawny.', - scopeValidation: 'Musi mieć co najmniej jeden zakres.', - }, - fields: { - name: { - label: 'Nazwa aplikacji', - }, - redirectUri: { - label: 'Przekierowujący URL {count}', - placeholder: 'https://example.com/redirect', - }, - openid: { - label: 'OpenID', - }, - profile: { - label: 'Profil', - }, - email: { - label: 'E-mail', - }, - phone: { - label: 'Telefon', - }, - groups: { - label: 'Grupy', - }, - }, - controls: { - addUrl: 'Dodaj URL', - }, - }, - clientId: 'Client ID', - clientSecret: 'Client secret', - }, - }, - }, - webhooksOverview: { - pageTitle: 'Webhooki', - search: { - placeholder: 'Znajdź webhooki po adresie URL', - }, - filterLabels: { - all: 'Wszystkie webhooki', - enabled: 'Włączone', - disabled: 'Wyłączone', - }, - webhooksCount: 'Wszystkie webhooki', - addNewWebhook: 'Dodaj webhook', - noWebhooksFound: 'Nie znaleziono żadnych webhooków', - list: { - headers: { - name: 'Nazwa', - description: 'Opis', - status: 'Status', - actions: 'Akcję', - }, - editButton: { - edit: 'Edytuj', - delete: 'Usuń webhook', - disable: 'Wyłącz', - enable: 'Włącz', - }, - status: { - enabled: 'Włączony', - disabled: 'Wyłączony', - }, - }, - }, - provisionersOverview: { - pageTitle: 'Provisionery', - search: { - placeholder: 'Wyszukaj provisionera', - }, - filterLabels: { - all: 'Wszystkie', - available: 'Dostępne', - unavailable: 'Niedostępne', - }, - provisionersCount: 'Wszystkie provisionery', - noProvisionersFound: 'Nie znaleziono provisionerów.', - noLicenseMessage: 'Nie masz licencji na tę funkcję.', - provisioningStation: { - header: 'Stacja provisionująca YubiKey', - content: `Aby móc sprovisionować YubiKeya, należy najpierw skonfigurować - fizyczną maszynę z gniazdem USB. Uruchom podane polecenie na wybranej maszynie - aby zarejestrować maszynę i rozpocząć generowanie kluczy.`, - tokenCard: { - title: 'Token autoryzacyjny', - }, - dockerCard: { - title: 'Przykład Docker', - }, - }, - list: { - headers: { - name: 'Nazwa', - ip: 'Adres IP', - status: 'Status', - actions: 'Akcję', - }, - editButton: { - delete: 'Usuń provisionera', - }, - status: { - available: 'Dostępny', - unavailable: 'Niedostępny', - }, - }, - messages: { - copy: { - command: 'Komenda skopiowa', - token: 'Token skopiowany', - }, - }, - }, - openidAllow: { - header: '{name} chciałby:', - scopes: { - openid: 'Użyć danych z twojego profilu do przyszłych logowań.', - profile: - 'Poznać podstawowe informacje z twojego profilu, takie jak login, imię itp', - email: 'Poznać twój adres e-mail.', - phone: 'Poznać twój numer telefonu.', - groups: 'Poznać twoje grupy.', - }, - controls: { - accept: 'Akceptuj', - cancel: 'Anuluj', - }, - }, - networkOverview: { - pageTitle: 'Przegląd lokalizacji', - controls: { - editNetworks: 'Edycja lokalizacji', - selectNetwork: { - placeholder: 'Oczekiwanie na lokalizacje', - }, - }, - filterLabels: { - grid: 'Widok siatki', - list: 'Widok listy', - }, - stats: { - currentlyActiveUsers: 'Obecnie aktywni użytkownicy', - activeUsersFilter: 'Aktywni użytkownicy w {hour}H', - activeDevicesFilter: 'Aktywne urządzenia w {hour}H', - activityIn: 'Aktywność w {hour}H', - in: 'Przychodzący:', - out: 'Wychodzący:', - gatewayDisconnected: 'Gateway rozłączony', - }, - }, - connectedUsersOverview: { - pageTitle: 'Podłączeni użytkownicy', - noUsersMessage: 'Obecnie nie ma żadnych podłączonych użytkowników', - userList: { - username: 'Nazwa użytkownika', - device: 'Urządzenia:', - connected: 'Połączony:', - deviceLocation: 'Lokacja urządzenia', - networkUsage: 'Użycie sieci', - }, - }, - networkPage: { - pageTitle: 'Edycja lokalizacji', - addNetwork: '+ Dodaj lokalizację', - controls: { - networkSelect: { - label: 'Wybór lokalizacji', - }, - }, - }, - activityOverview: { - header: 'Strumień aktywności', - noData: 'Obecnie nie wykryto żadnej aktywności', - }, - networkConfiguration: { - messages: { - delete: { - error: 'Błąd podczas próby usunięcia lokalizacji', - success: 'Lokalizacja usunięta', - }, - }, - header: 'Konfiguracja lokalizacji', - importHeader: 'Import lokalizacji', - form: { - helpers: { - address: - 'Na podstawie tego adresu będzie stworzona sieć VPN, np. 10.10.10.1/24 (sieć VPN: 10.10.10.0/24). Opcjonalnie możesz podać wiele adresów, oddzielając je przecinkiem. Pierwszy adres będzie adresem głównym i zostanie użyty do przypisywania adresów IP urządzeniom. Pozostałe adresy są dodatkowe i nie będą zarządzane przez Defguarda.', - endpoint: - 'Publiczny adres IP lub domena internetowa, do której będą łączyć się użytkownicy/urządzenia. Ten adres zostanie użyty w konfiguracji klientów, ale Gatewaye Defguard nie wiążą się z tym adresem.', - gateway: - 'Adres publiczny Gatewaya, używany przez użytkowników VPN do łączenia się.', - dns: 'Określ resolwery DNS, które mają odpytywać, gdy interfejs WireGuard jest aktywny.', - allowedIps: 'Lista adresów/masek, które powinny być routowane przez sieć VPN.', - allowedGroups: - 'Domyślnie wszyscy użytkownicy będą mogli połączyć się z tą lokalizacją. Jeżeli chcesz ogranicznyć dostęp do tej lokalizacji do wybranej grupy użytkowników, wybierz ją poniżej.', - }, - messages: { - networkModified: 'Lokalizacja zmodyfikowana', - networkCreated: 'Lokalizacja utworzona', - }, - fields: { - name: { - label: 'Nazwa lokalizacji', - }, - address: { - label: 'Adres i maska sieci VPN', - }, - endpoint: { - label: 'Adres IP lub domena internetowa Gatewaya', - }, - allowedIps: { - label: 'Dozwolone adresy IP', - }, - port: { - label: 'Port Gatewaya', - }, - dns: { - label: 'DNS', - }, - allowedGroups: { - label: 'Dozwolone grupy', - placeholder: 'Wszystkie grupy', - }, - mfa_enabled: { - label: 'Wymagaj MFA dla tej lokalizacji', - }, - keepalive_interval: { - label: 'Utrzymanie połączenia [sekundy]', - }, - peer_disconnect_threshold: { - label: 'Próg rozłączania [sekundy]', - }, - acl_enabled: { - label: 'Włącz ACL dla tej lokacji', - }, - acl_default_allow: { - label: 'Domyślna polityka ACL', - }, - }, - controls: { - submit: 'Zapisz zmiany', - cancel: 'Wróć', - delete: 'Usuń lokalizację', - }, - }, - }, - gatewaySetup: { - header: { - main: 'Uruchomienie serwera gateway', - dockerBasedGatewaySetup: `Konfiguracja gateway za pomocą narzędzia docker`, - fromPackage: `Z pakietu`, - oneLineInstall: `Instalacja za pomocą jednej linii`, - }, - card: { - title: 'Komenda Dockera uruchamiająca serwer gateway', - authToken: 'Token Autoryzacyjny', - }, - button: { - availablePackages: `Dostępne pakiety`, - }, - controls: { - status: 'Sprawdź status połączenia', - }, - messages: { - runCommand: `Defguard wymaga uruchomienia serwera gateway w celu kontrolowania VPN. - Szczegóły znajdziesz w [dokumentacji]({setupGatewayDocs}). - Istnieje wiele sposobów na uruchomienie serwera gateway, poniższy przykład używa technologii Docker, - więcej przykładów znajdziesz w [dokumentacji]({setupGatewayDocs}).`, - createNetwork: `Utwórz sieć przed uruchomieniem procesu gateway.`, - noConnection: `Brak połączenia proszę uruchom poniższą komendę.`, - connected: `Gateway połączony.`, - statusError: 'Nie udało się uzyskać statusu', - oneLineInstall: `Jeśli wykonujesz instalację w jednej linii: https://docs.defguard.net/getting-started/one-line-install - nie ma potrzeby wykonywania dalszych kroków.`, - fromPackage: `Zainstaluj pakiet dostępny na https://github.com/DefGuard/gateway/releases/latest i skonfiguruj \`/etc/defguard/gateway.toml\` - na podstawie [dokumentacji]({setupGatewayDocs}).`, - authToken: `Poniższy token jest wymagany do autoryzacji i konfiguracji węzła gateway. Upewnij się, że zachowasz ten token w bezpiecznym miejscu, - a następnie podążaj za instrukcją wdrażania usługi znajdującej się w [dokumentacji]({setupGatewayDocs}), aby pomyślnie skonfigurować serwer gateway. - Po więcej szczegółów i dokładnych kroków, proszę zapoznaj się z [dokumentacją](setupGatewayDocs).`, - dockerBasedGatewaySetup: `Poniżej znajduje się przykład oparty na Dockerze. - Więcej szczegółów i dokładnych kroków można znaleźć w [dokumentacji]({setupGatewayDocs}).`, - }, - }, - loginPage: { - pageTitle: 'Wprowadź swoje dane logowania', - callback: { - return: 'Powrót do logowania', - error: 'Wystąpił błąd podczas logowania przez zewnętrznego dostawcę OpenID', - }, - oidcLogin: 'Zaloguj się przez', - mfa: { - title: 'Autoryzacja dwuetapowa.', - controls: { - useAuthenticator: 'Zamiast tego użyj aplikacji Authenticator', - useWebauthn: 'Zamiast tego użyj klucza bezpieczeństwa', - useRecoveryCode: 'Zamiast tego użyj kodu odzyskiwania', - useEmail: 'Zamiast tego użyj e-mail', - }, - email: { - header: 'Użyj kodu wysłanego na e-mail aby kontynuować', - form: { - controls: { - resendCode: 'Wyślij kod ponownie', - }, - labels: { - code: 'Kod', - }, - }, - }, - totp: { - header: - 'Użyj kodu z aplikacji uwierzytelniającej i kliknij przycisk, aby kontynuować', - form: { - fields: { - code: { - placeholder: 'Wprowadź kod uwierzytelniający', - }, - }, - controls: { - submit: 'Użyj kodu uwierzytelniającego', - }, - }, - }, - recoveryCode: { - header: - 'Wpisz jeden z aktywnych kodów odzyskiwania i kliknij przycisk, aby się zalogować.', - form: { - fields: { - code: { - placeholder: 'Kod odzyskiwania', - }, - }, - controls: { - submit: 'Użyj kodu odzyskiwania', - }, - }, - }, - webauthn: { - header: 'Gdy jesteś gotowy do uwierzytelnienia, naciśnij przycisk poniżej.', - controls: { - submit: 'Użyj klucza bezpieczeństwa', - }, - messages: { - error: 'Nie udało się odczytać klucza. Proszę spróbować ponownie.', - }, - }, - }, - }, - wizard: { - completed: 'Sieć skonfigurowana', - configuration: { - successMessage: 'Sieć utworzona', - }, - navigation: { - top: 'Konfiguracja sieci', - titles: { - welcome: 'Konfiguracja sieci', - choseNetworkSetup: 'Wybierz tryb konfiguracji', - importConfig: 'Importuj istnijącą sieć', - manualConfig: 'Konfiguracja sieci', - mapDevices: 'Mapowanie importowanych urządzeń', - }, - buttons: { - next: 'Dalej', - back: 'Wróć', - }, - }, - welcome: { - header: 'Witaj w asystencie konfiguracji lokalizacji!', - sub: 'Zanim zaczniesz, musisz wybrać tryb konfiguracji. Ikony zawierają przydane informacje.', - button: 'Zacznij konfigurację', - }, - deviceMap: { - messages: { - crateSuccess: 'Urządzenie dodane', - errorsInForm: 'Uzupełnij oznaczone pola', - }, - list: { - headers: { - deviceName: 'Nazwa', - deviceIP: 'IP', - user: 'Użytkownik', - }, - }, - }, - wizardType: { - manual: { - title: 'Manualny', - description: 'Ręczna konfiguracja sieci WireGuard', - }, - import: { - title: 'Import', - description: 'Import z pliku konfiguracyjnego WireGuard', - }, - createNetwork: 'Utwórz sieć WireGuard', - }, - common: { - select: 'Wybierz', - }, - locations: { - form: { - name: 'Nazwa', - ip: 'Adres IP', - user: 'Użytkownik', - fileName: 'Plik', - selectFile: 'Wybierz plik', - messages: { devicesCreated: 'Urządzenia utworzone.' }, - validation: { invalidAddress: 'Nieprawidłowy adres.' }, - }, - }, - }, - layout: { - select: { - addNewOptionDefault: 'Dodaj +', - }, - }, - redirectPage: { - title: 'Zostałeś zalogowany', - subtitle: 'Wkrótce nastąpi przekierowanie...', - }, - enrollmentPage: { - title: 'Rejestracja', - controls: { - default: 'Domyślne', - save: 'Zapisz zmiany', - }, - messages: { - edit: { - error: 'Zapis nieudany', - success: 'Zapisano zmiany', - }, - }, - settings: { - welcomeMessage: { - title: 'Powitalna wiadomość', - messageBox: 'Ta informacja będzie wyświetlona w końcowym kroku rejestracj', - }, - welcomeEmail: { - subject: { - label: 'Temat wiadomości', - }, - title: 'Powitalny e-mail', - messageBox: 'Ta informacja będzie wysłana gdy użytkownik zakończy rejestrację.', - controls: { - duplicateWelcome: 'Identyczna jak wiadomość powitalna', - }, - }, - vpnOptionality: { - title: 'Opcjonalność kroku VPN', - select: { - options: { - optional: 'Opcjonalny', - mandatory: 'Obowiązkowy', - }, - }, - }, - }, - messageBox: - 'Proces rejestracji pozwala użytkownikowi na potwierdzenie swoich informacji, ustawienie hasła oraz skonfigurowanie VPN na swoim urządzeniu. Tutaj możesz skonfigurować ten proces.', - }, - supportPage: { - title: 'Wsparcie', - modals: { - confirmDataSend: { - title: 'Potwierdź przekazanie danych', - submit: 'Wyślij', - subTitle: - 'Potwierdź przesłanie danych diagnostycznych. Żadne poufne dane nie zostaną przesłane. (Klucze WireGuard, adresy e-mail, itp.)', - }, - }, - debugDataCard: { - title: 'Dane wsparcia technicznego', - body: ` -Jeśli potrzebujesz pomocy lub zostałeś poproszony przez nasz zespół o utworzenie danych wsparcia technicznego (np. na naszym kanale Matrix: **#defguard-support:teonite.com**), masz dwie opcje: -* Możesz skonfigurować ustawienia SMTP i kliknąć: "Wyślij dane wsparcia technicznego". -* Lub kliknąć "Pobierz dane wsparcia technicznego" i stworzyć zlecenie w naszym repozytorium GitHub załączając te pliki. -`, - downloadSupportData: 'Pobierz dane wsparcia technicznego', - downloadLogs: 'Pobierz dzienniki', - sendMail: 'Wyślij e-mail', - mailSent: 'E-mail wysłany', - mailError: 'Błąd wysyłania e-mail', - }, - - supportCard: { - title: 'Wsparcie', - body: ` -Przed zgłoszeniem problemów na GitHub należy zapoznać z dokumentacją dostępną na [docs.defguard.net](https://docs.defguard.net/) - -Aby zgłosić: -* Problem - przejdź do [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=bug&template=bug_report.md&title=) -* Prośbę o nową funkcjonalność - przejdź do [GitHub](https://github.com/DefGuard/defguard/issues/new?assignees=&labels=feature&template=feature_request.md&title=) - -W przypadku innych zgłoszeń skontaktuj się z nami: support@defguard.net -`, - }, - }, - devicesPage: { - title: 'Urządzenia sieciowe', - search: { - placeholder: 'Znajdź', - }, - bar: { - itemsCount: 'Wszystkie urządzenia', - filters: {}, - actions: { - addNewDevice: 'Dodaj nowe', - }, - }, - list: { - columns: { - labels: { - name: 'Nazwa', - location: 'Położenie', - description: 'Opis', - addedBy: 'Dodane przez', - addedAt: 'Data dodania', - edit: 'Zmień', - }, - }, - edit: { - actionLabels: { - config: 'Zobacz konfigurację', - generateToken: 'Utwórz kupon autoryzacyjny', - }, - }, - }, - }, - acl: { - messageBoxes: { - aclAliasKind: { - component: { - name: 'Komponent', - description: - 'w połączeniu z ręcznie skonfigurowanymi miejscami docelowymi w ACL', - }, - destination: { - name: 'Miejsce docelowe', - description: 'zostanie zamienione na osobny zestaw reguł firewalla', - }, - }, - networkSelectionIndicatorsHelper: { - //md - denied: ` - Dostęp do lokalizacji domyślnie jest **zabroniony** – ruch sieciowy nie określony przez reguły będzie blokowany. - `, - //md - allowed: ` - Dostęp do lokalizacji domyślnie jest **dozwolony** – ruch sieciowy nie określony przez reguły będzie przepuszczany. - `, - //md - unmanaged: ` - Dostęp do lokalizacji nie jest zarządzany (wyłączona kontrola ACL) - `, - }, - }, - sharedTitle: 'Lista kontroli dostępu', - fieldsSelectionLabels: { - ports: 'Wszystkie porty', - protocols: 'Wszystkie protokoły', - }, - ruleStatus: { - new: 'Nowa', - applied: 'Zastosowana', - modified: 'Czeka na zmianę', - deleted: 'Czeka na usunięcie', - enable: 'Włącz', - enabled: 'Włączona', - disable: 'Wyłącz', - disabled: 'Wyłączona', - expired: 'Przedawniona', - }, - listPage: { - message: { - changeDiscarded: 'Zmiana odrzucona', - changeAdded: 'Dodana zmiana oczekująca', - changeFail: 'Nie udało się wykonać zmiany', - applyChanges: 'Zmiana została zastosowana', - applyFail: 'Nie udało się zastosować zmiany', - }, - rules: { - modals: { - applyConfirm: { - title: 'Wdróż oczekujące zmiany', - subtitle: '{count} zmian zostanie zastosowanych', - submit: 'Wdróż zmiany', - }, - filterGroupsModal: { - groupHeaders: { - alias: 'Aliasy', - location: 'Lokalizacje', - groups: 'Grupy', - status: 'Status', - }, - submit: 'Zapisz filtr', - }, - }, - listControls: { - searchPlaceholder: 'Znajdź nazwę', - addNew: 'Dodaj nową', - filter: { - nothingApplied: 'Filtr', - applied: 'Filtry ({count})', - }, - apply: { - noChanges: 'Wdróż oczekujące zmiany', - all: 'Wdróż oczekujące zmiany ({count})', - selective: 'Wdróż zaznaczone zmiany ({count})', - }, - }, - list: { - pendingList: { - title: 'Oczekujące zmiany', - noData: 'Brak oczekujących zmian', - noDataSearch: 'Nie znaleziono oczekujących zmian', - }, - deployedList: { - title: 'Wdrożone reguły', - noData: 'Brak wdrożonych reguł', - noDataSearch: 'Nie znaleziono wdrożonych reguł', - }, - headers: { - name: 'Nazwa reguły', - id: 'ID', - destination: 'Miejsce docelowe', - allowed: 'Zazwolone', - denied: 'Zabronione', - locations: 'Lokalizacje', - status: 'Status', - edit: 'Zmień', - }, - tags: { - all: 'Wszystkie', - allDenied: 'Wszystkie zabronione', - allAllowed: 'Wszystkie zezwolne', - }, - editMenu: { - discard: 'Odrzuć zmiany', - delete: 'Zaznacz do usunięcia', - }, - }, - }, - aliases: { - message: { - rulesApply: 'Oczekujące zmiany zostały zastosowane', - rulesApplyFail: 'Nie udało się zastosować zmian', - aliasDeleted: 'Alias usunięty', - aliasDeleteFail: 'Nie udało się usunąć aliasu', - }, - modals: { - applyConfirm: { - title: 'Potwierdź wdrożenie aliasu', - message: `Uaktualnione aliasy zmienią następujące reguły obecnie wdrożone na Gatewayu.\nZanim przejdziesz dalej, upewnij się, że te zmiany są zamierzone.`, - listLabel: 'Dotyczy reguł', - submit: 'Wdóż zmiany', - }, - deleteBlock: { - title: 'Usuwanie zablokowane', - //md - content: ` -Ten alias jest obecnie używany przez nastąpujące reguły i nie może być usunięty. Aby go usunąć, należy najpierw wykasować go z tych reguł({rulesCount}): -`, - }, - filterGroupsModal: { - groupLabels: { - rules: 'Reguły', - status: 'Status', - }, - }, - create: { - labels: { - name: 'Nazwa aliasu', - kind: 'Rodzajj aliasu', - ip: 'Zakres adresów IPv4/6 CIDR', - ports: 'Porty lub zakres portów', - protocols: 'Protokoły', - }, - placeholders: { - protocols: 'Wszystkie protokoły', - ports: 'Wszystkie porty', - ip: 'Wszystkie adresy IP', - }, - kindOptions: { - destination: 'Miejsce docelowe', - component: 'Komponent', - }, - controls: { - cancel: 'Anuluj', - edit: 'Edytuj alias', - create: 'Utwórz alias', - }, - messages: { - modified: 'Alias zmienione', - created: 'Alias utworzony', - }, - }, - }, - listControls: { - searchPlaceholder: 'Znajdź nazwę', - addNew: 'Dodaj nową', - filter: { - nothingApplied: 'Filtr', - applied: 'Filtry ({count})', - }, - apply: { - noChanges: 'Wdróż oczkujące zmiany', - all: 'Wdróż oczkujące zmiany ({count})', - selective: 'Wdróż zaznaczone zmiany ({count})', - }, - }, - list: { - pendingList: { - title: 'Oczkujące zmiany', - noData: 'Brak oczkujących zmian', - noDataSearch: 'Nie znaleziono oczkujących zmian', - }, - deployedList: { - title: 'Wdrożone aliasy', - noData: 'Brak wdrożonych aliasów', - noDataSearch: 'Nie znaleziono wdrożonych aliasów', - }, - headers: { - id: 'ID', - name: 'Nazwa aliasu', - kind: 'Rodzaj aliasu', - ip: 'Zakres adresów IPv4/6 CIDR', - ports: 'Porty', - protocols: 'Protokoły', - status: 'Status', - edit: 'Zmień', - rules: 'Reguły', - }, - status: { - applied: 'Zastosowane', - changed: 'Zmieione', - }, - tags: { - allDenied: 'Wszystkie zabronione', - allAllowed: 'Wszystkie dozwolne', - }, - editMenu: { - discardChanges: 'Odrzuć zmiany', - delete: 'Usuń alias', - }, - }, - }, - }, - createPage: { - formError: { - allowDenyConflict: 'Konfliktujący członkowie', - allowNotConfigured: - 'Trzeba skonfigurowć dostęp dla użytkowników, grup lub urządzeń', - }, - infoBox: { - // md - allowInstructions: ` - Podaj jedno lub więcej pól (użytkownicy, grupy lub urządzenia) aby zdefinionwać tę regułę. Reguła uwzględni wszystkie podane wejścia dla pasujących warunków. Pozostaw puste pola, jeżeli nie są potrzebne.`, - // md - destinationInstructions: ` - Podaj jedno lub więcej pól (adresy IP lub porty) aby zdefinionwać tę regułę. Reguła uwzględni wszystkie podane wejścia dla pasujących warunków. Pozostaw puste pola, jeżeli nie są potrzebne.`, - }, - message: { - create: 'Reguła została utworzona i dodana do oczekujących zmian.', - createFail: 'Nie można było utworzyć reguły.', - }, - headers: { - rule: 'Reguła', - createRule: 'Utwórz regułę', - allowed: 'Zezwoleni użytkownicy/grupy/urządzenia', - denied: 'Zablokowani użytkownicy/grupy/urządzenia', - destination: 'Miejsce docelowe', - }, - labels: { - name: 'Nazwa reguły', - priority: 'Priorytet', - status: 'Status', - locations: 'Lokalizacje', - allowAllUsers: 'Zezwól wszystkim użytkownikom', - allowAllNetworks: 'Włącz wszystkie lokalizacje', - allowAllNetworkDevices: 'Zezwól wszystkim urządzeniom sieciowym', - denyAllUsers: 'Zablokuj wszystkich użytkowników', - denyAllNetworkDevices: 'Zablokuj wszystkie urządzenia sieciowe', - users: 'Użytkownicy', - groups: 'Grupy', - devices: 'Urządzenia sieciowe', - protocols: 'Protokoły', - manualIp: 'Zakres lub adres IPv4/6 CIDR', - ports: 'Porty', - aliases: 'Aliasy', - expires: 'Data wygaśnięcia', - manualInput: 'Ręczne wprowadzenie', - }, - placeholders: { - allProtocols: 'Wszystkie protokoły', - allIps: 'Wszystkie adresy IP', - }, - }, - }, -} as PartialDeep; - -const pl = deepmerge(en, translation) as Translation; - -export default pl; diff --git a/web/src/main.tsx b/web/src/main.tsx deleted file mode 100644 index ef6ffc73c..000000000 --- a/web/src/main.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import './shared/scss/styles.scss'; -import './shared/defguard-ui/scss/index.scss'; - -import { QueryClientProvider } from '@tanstack/react-query'; -// import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import dayjs from 'dayjs'; -import LocalizedFormat from 'dayjs/plugin/localizedFormat'; -import utc from 'dayjs/plugin/utc'; -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; - -import { AppLoader } from './components/AppLoader'; -import { I18nProvider } from './components/I18nProvider'; -import { ApiProvider } from './shared/hooks/api/provider'; -import queryClient from './shared/query-client'; - -dayjs.extend(utc); -dayjs.extend(LocalizedFormat); - -const root = createRoot(document.getElementById('root') as HTMLElement); -root.render( - - - - - - {/* */} - - - - , -); diff --git a/web/src/markdown.d.ts b/web/src/markdown.d.ts deleted file mode 100644 index ddd15b04a..000000000 --- a/web/src/markdown.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.md' { - const val: string; - export default val; -} diff --git a/web/src/pages/acl/AclCreateDataProvider.tsx b/web/src/pages/acl/AclCreateDataProvider.tsx deleted file mode 100644 index b51a93341..000000000 --- a/web/src/pages/acl/AclCreateDataProvider.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { type PropsWithChildren, useEffect, useMemo } from 'react'; -import { useLocation } from 'react-router'; -import { useSearchParams } from 'react-router-dom'; - -import { isPresent } from '../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import { useAclCreateSelector, useUpdateAclCreateContext } from './acl-context'; - -type Props = PropsWithChildren; -export const AclCreateDataProvider = ({ children }: Props) => { - const location = useLocation(); - const [searchParams] = useSearchParams(); - const updateContext = useUpdateAclCreateContext(); - const baseContextSet = useAclCreateSelector( - (s) => ![s.devices, s.groups, s.networks, s.users].includes(undefined), - ); - const ruleEditSet = useAclCreateSelector((s) => isPresent(s.editRule)); - - const { - standaloneDevice: { getDevicesList }, - groups: { getGroupsInfo }, - user: { getUsers }, - network: { getNetworks }, - acl: { - aliases: { getAliases }, - rules: { getRule }, - }, - } = useApi(); - - const isRuleEdit = useMemo( - () => location.pathname.includes('/acl/form') && location.search.includes('edit=1'), - [location.pathname, location.search], - ); - - const editRuleId = useMemo(() => { - if (isRuleEdit) { - return parseInt(searchParams.get('rule') as string, 10); - } - }, [isRuleEdit, searchParams]); - - const { data: editRuleData } = useQuery({ - queryFn: () => getRule(editRuleId as number), - queryKey: [QueryKeys.FETCH_ACL_RULE_EDIT, editRuleId], - enabled: isRuleEdit && isPresent(editRuleId), - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - const { data: aclData } = useQuery({ - queryKey: [ - QueryKeys.FETCH_ACL_CREATE_CONTEXT, - QueryKeys.FETCH_USERS_LIST, - QueryKeys.FETCH_GROUPS_INFO, - QueryKeys.FETCH_NETWORKS, - QueryKeys.FETCH_STANDALONE_DEVICE_LIST, - QueryKeys.FETCH_ACL_ALIASES, - ], - queryFn: () => - Promise.all([ - getNetworks(), - getGroupsInfo(), - getUsers(), - getDevicesList(), - getAliases(), - ]), - refetchOnReconnect: true, - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const contextSet = useMemo(() => { - if (isRuleEdit) { - return baseContextSet && ruleEditSet; - } - return baseContextSet; - }, [baseContextSet, isRuleEdit, ruleEditSet]); - - useEffect(() => { - if (aclData) { - const [networks, groups, users, devices, aliases] = aclData; - updateContext({ - devices, - groups, - networks, - users, - aliases, - }); - } - }, [aclData, updateContext]); - - useEffect(() => { - updateContext({ - editRule: editRuleData, - }); - }, [editRuleData, updateContext]); - - if (!contextSet) return null; - - return <>{children}; -}; diff --git a/web/src/pages/acl/AclCreatePage/AclCreatePage.tsx b/web/src/pages/acl/AclCreatePage/AclCreatePage.tsx deleted file mode 100644 index 34d11a545..000000000 --- a/web/src/pages/acl/AclCreatePage/AclCreatePage.tsx +++ /dev/null @@ -1,648 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { intersection } from 'lodash-es'; -import { useCallback, useMemo, useRef, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router'; -import { useSearchParams } from 'react-router-dom'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { FormDateInput } from '../../../shared/components/Layout/DateInput/FormDateInput'; -import { PageContainer } from '../../../shared/components/Layout/PageContainer/PageContainer'; -import { RenderMarkdown } from '../../../shared/components/Layout/RenderMarkdown/RenderMarkdown'; -import { SectionWithCard } from '../../../shared/components/Layout/SectionWithCard/SectionWithCard'; -import { FormCheckBox } from '../../../shared/defguard-ui/components/Form/FormCheckBox/FormCheckBox'; -import { FormInput } from '../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { FormTextarea } from '../../../shared/defguard-ui/components/Form/FormTextarea/FormTextarea'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { LabeledCheckbox } from '../../../shared/defguard-ui/components/Layout/LabeledCheckbox/LabeledCheckbox'; -import { MessageBox } from '../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { - MessageBoxStyleVariant, - MessageBoxType, -} from '../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../shared/hooks/useApi'; -import { useToaster } from '../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../shared/queries'; -import type { - AclRuleInfo, - CreateAclRuleRequest, - EditAclRuleRequest, - GroupInfo, - Network, - StandaloneDevice, - User, -} from '../../../shared/types'; -import { trimObjectStrings } from '../../../shared/utils/trimObjectStrings'; -import { AclAliasKindIcon } from '../AclIndexPage/components/shared/AclAliasKindIcon'; -import { AclMessageBoxes } from '../AclIndexPage/components/shared/AclMessageBoxes/AclMessageBoxes'; -import { NetworkAccessTypeIcon } from '../AclIndexPage/components/shared/NetworkAccessTypeIcon'; -import { useAclLoadedContext } from '../acl-context'; -import { type AclAlias, AclAliasStatus } from '../types'; -import { networkToNetworkAccessType, protocolOptions, protocolToString } from '../utils'; -import { aclDestinationValidator, aclPortsValidator } from '../validators'; -import { FormDialogSelect } from './components/DialogSelect/FormDialogSelect'; - -type AclForm = Omit; - -export const AlcCreatePage = () => { - const [searchParams] = useSearchParams(); - const editMode = ['1', 'true'].includes(searchParams.get('edit') ?? ''); - const { LL } = useI18nContext(); - const localLL = LL.acl.createPage; - const labelsLL = localLL.labels; - const formErrors = LL.form.error; - const { networks, devices, groups, users, ruleToEdit } = useAclLoadedContext(); - const queryClient = useQueryClient(); - const aclContext = useAclLoadedContext(); - const { aliases } = aclContext; - - const initialValue = useMemo(() => { - if (editMode) { - return ruleToEdit as AclForm; - } - const defaultValue: AclForm = { - aliases: [], - all_networks: false, - allow_all_users: false, - allow_all_network_devices: false, - allowed_devices: [], - allowed_groups: [], - allowed_users: [], - denied_devices: [], - denied_groups: [], - denied_users: [], - deny_all_users: false, - deny_all_network_devices: false, - destination: '', - id: 0, - name: '', - networks: [], - ports: '', - protocols: [], - expires: undefined, - enabled: true, - }; - return defaultValue; - }, [editMode, ruleToEdit]); - - const [neverExpires, setNeverExpires] = useState(!isPresent(initialValue.expires)); - const [allowAllLocations, setAllowAllLocations] = useState(initialValue.all_networks); - const submitRef = useRef(null); - const toaster = useToaster(); - const aliasesOptions = aliases.filter( - (alias) => alias.state === AclAliasStatus.APPLIED, - ); - - const navigate = useNavigate(); - - const { - acl: { - rules: { createRule, editRule }, - }, - } = useApi(); - - const handleSuccess = useCallback(() => { - const keys = [QueryKeys.FETCH_ACL_RULES, QueryKeys.FETCH_ACL_RULE_EDIT]; - for (const key of keys) { - void queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(key), - }); - } - navigate('/admin/acl'); - }, [navigate, queryClient]); - - const handleError = useCallback( - (err: AxiosError) => { - toaster.error(LL.acl.listPage.message.changeFail()); - console.error(err.message ?? err); - }, - [LL.acl.listPage.message, toaster], - ); - - const { mutate: mutatePost, isPending: postPending } = useMutation({ - mutationFn: createRule, - onSuccess: () => { - handleSuccess(); - }, - onError: handleError, - }); - - const { mutate: mutatePut, isPending: putPending } = useMutation({ - mutationFn: editRule, - onSuccess: () => { - handleSuccess(); - }, - onError: handleError, - }); - - const schema = useMemo( - () => - z - .object({ - name: z - .string({ - required_error: formErrors.required(), - }) - .min(1, formErrors.required()), - networks: z.number().array(), - expires: z.string().nullable(), - enabled: z.boolean(), - allow_all_users: z.boolean(), - deny_all_users: z.boolean(), - allow_all_network_devices: z.boolean(), - deny_all_network_devices: z.boolean(), - allowed_users: z.number().array(), - denied_users: z.number().array(), - allowed_groups: z.number().array(), - denied_groups: z.number().array(), - allowed_devices: z.number().array(), - denied_devices: z.number().array(), - aliases: z.number().array(), - destination: aclDestinationValidator(LL), - ports: aclPortsValidator(LL), - protocols: z.number().array(), - }) - .superRefine((vals, ctx) => { - // check for collisions - const message = LL.acl.createPage.formError.allowDenyConflict(); - if (!vals.allow_all_users && !vals.deny_all_users) { - if (intersection(vals.allowed_users, vals.denied_users).length) { - ctx.addIssue({ - path: ['allowed_users'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['denied_users'], - code: 'custom', - message, - }); - } - if (intersection(vals.allowed_groups, vals.denied_groups).length) { - ctx.addIssue({ - path: ['allowed_groups'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['denied_groups'], - code: 'custom', - message, - }); - } - } - if (!vals.allow_all_network_devices && !vals.deny_all_network_devices) { - if (intersection(vals.allowed_devices, vals.denied_devices).length) { - ctx.addIssue({ - path: ['allowed_devices'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['denied_devices'], - code: 'custom', - message, - }); - } - } - - // check if one of allowed users/groups/devices fields is set - const isAllowConfigured = - vals.allow_all_users || - vals.allow_all_network_devices || - vals.allowed_users.length !== 0 || - vals.allowed_groups.length !== 0 || - vals.allowed_devices.length !== 0; - if (!isAllowConfigured) { - const message = LL.acl.createPage.formError.allowNotConfigured(); - - ctx.addIssue({ - path: ['allow_all_users'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['allowed_users'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['allowed_groups'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['allow_all_network_devices'], - code: 'custom', - message, - }); - ctx.addIssue({ - path: ['allowed_devices'], - code: 'custom', - message, - }); - } - }), - [LL, formErrors], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo((): FormFields => { - const res: FormFields = { - aliases: initialValue.aliases, - allow_all_users: initialValue.allow_all_users, - allow_all_network_devices: initialValue.allow_all_network_devices, - allowed_devices: initialValue.allowed_devices, - allowed_groups: initialValue.allowed_groups, - allowed_users: initialValue.allowed_users, - deny_all_users: initialValue.deny_all_users, - deny_all_network_devices: initialValue.deny_all_network_devices, - denied_devices: initialValue.denied_devices, - denied_groups: initialValue.denied_groups, - denied_users: initialValue.denied_users, - destination: initialValue.destination, - expires: initialValue.expires ?? null, - name: initialValue.name, - networks: initialValue.networks, - ports: initialValue.ports, - protocols: initialValue.protocols, - enabled: initialValue.enabled, - }; - return res; - }, [initialValue]); - - const { control, handleSubmit, watch, setValue } = useForm({ - defaultValues, - mode: 'all', - resolver: zodResolver(schema), - criteriaMode: 'all', - }); - - const watchedExpires = watch('expires'); - - const handleValidSubmit: SubmitHandler = (values) => { - const cleaned = trimObjectStrings(values); - if (editMode) { - const requestData: EditAclRuleRequest = { - ...cleaned, - all_networks: allowAllLocations, - id: initialValue.id, - }; - mutatePut(requestData); - } else { - const requestData: CreateAclRuleRequest = { - ...cleaned, - all_networks: allowAllLocations, - }; - mutatePost(requestData); - } - }; - - const allowAllUsers = watch('allow_all_users'); - const denyAllUsers = watch('deny_all_users'); - const allowAllNetworkDevices = watch('allow_all_network_devices'); - const denyAllNetworkDevices = watch('deny_all_network_devices'); - - return ( - -
-

{LL.acl.sharedTitle()}

-
-
-
-
-
- - - - - } - forceShowErrorMessage - /> - - { - if (change) { - setValue('expires', null, { - shouldValidate: false, - shouldDirty: true, - }); - } - setNeverExpires(change); - }} - /> - - - - - - - } - controller={{ control, name: 'aliases' }} - options={aliasesOptions} - label={localLL.labels.aliases()} - identKey="id" - renderTagContent={renderAlias} - searchKeys={['name']} - /> - - - - ({ - displayValue: protocolToString(val), - key: val, - })} - disposable - /> - -
-
- - - - - - - - - - - - - - - - - - - - -
- -
-
- ); -}; - -const CardHeader = ({ title }: { title: string }) => { - return ( -
-

{title}

-
-
- ); -}; - -const renderNetworkSelectTag = (network: Network) => ( - <> -

{network.name}

- - -); - -const renderUserTag = (user: User) =>

{user.username}

; - -const renderUserListItem = (user: User) => ( - <> -

{`${user.first_name} ${user.last_name} (${user.username})`}

- -); - -const renderNetworkDevice = (device: StandaloneDevice) =>

{device.name}

; - -const renderAlias = (alias: AclAlias) => ( - <> -

{alias.name}

- - -); - -const renderGroup = (group: GroupInfo) =>

{group.name}

; diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelect.tsx b/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelect.tsx deleted file mode 100644 index 7b4bc21f4..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelect.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import './style.scss'; - -import useResizeObserver from '@react-hook/resize-observer'; -import clsx from 'clsx'; -import { useCallback, useMemo, useRef, useState } from 'react'; - -import { FieldError } from '../../../../../shared/defguard-ui/components/Layout/FieldError/FieldError'; -import { FloatingMenu } from '../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenu'; -import { FloatingMenuProvider } from '../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenuProvider'; -import { FloatingMenuTrigger } from '../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenuTrigger'; -import { Label } from '../../../../../shared/defguard-ui/components/Layout/Label/Label'; -import { isPresent } from '../../../../../shared/defguard-ui/utils/isPresent'; -import { DialogSelectButtonIcon } from './DialogSelectButtonIcon'; -import { DialogSelectModal } from './DialogSelectModal/DialogSelectModal'; -import type { DialogSelectProps } from './types'; - -export const DialogSelect = ({ - options, - selected, - identKey, - label, - onChange, - renderTagContent, - renderDialogListItem, - searchFn, - searchKeys, - errorMessage, - modalExtrasTop, - disabled = false, -}: DialogSelectProps) => { - const containerRef = useRef(null); - const [overflows, setOverflows] = useState(false); - - const handleResize = useCallback(() => { - if (containerRef.current) { - setOverflows(containerRef.current.scrollWidth > containerRef.current.clientWidth); - } - }, []); - - useResizeObserver(containerRef, handleResize); - const [modalOpen, setModalOpen] = useState(false); - const getIdent = useCallback((val: T): I => val[identKey] as I, [identKey]); - - const selectedOptions = useMemo( - () => options.filter((o) => selected.includes(getIdent(o))), - [getIdent, options, selected], - ); - - const error = !disabled ? errorMessage : undefined; - - const getLabel = renderDialogListItem ? renderDialogListItem : renderTagContent; - - return ( - <> -
-
- {label !== undefined && } -
- - -
-
- {renderTagContent !== undefined && - selectedOptions.map((o) => { - const id = getIdent(o); - return ( -
- {renderTagContent(o)} -
- ); - })} -
-
-
- -
    - {selectedOptions.map((o) => { - const id = getIdent(o); - return
  • {getLabel(o)}
  • ; - })} -
-
-
- -
- -
-
- { - onChange?.(vals); - }} - /> - - ); -}; diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectButtonIcon.tsx b/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectButtonIcon.tsx deleted file mode 100644 index a0e30aa4f..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectButtonIcon.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const DialogSelectButtonIcon = () => { - return ( - - - - ); -}; diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/DialogSelectModal.tsx b/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/DialogSelectModal.tsx deleted file mode 100644 index d970ddc8d..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/DialogSelectModal.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import './style.scss'; - -import { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { CheckBox } from '../../../../../../shared/defguard-ui/components/Layout/Checkbox/CheckBox'; -import { Modal } from '../../../../../../shared/defguard-ui/components/Layout/modals/Modal/Modal'; -import { Search } from '../../../../../../shared/defguard-ui/components/Layout/Search/Search'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import { searchByKeys } from '../../../../../../shared/utils/searchByKeys'; -import type { DialogSelectProps } from '../types'; - -type Props = { - initiallySelected: I[]; - options: T[]; - getIdent: (value: T) => I; - getLabel: (value: T) => ReactNode; - open: boolean; - setOpen: (val: boolean) => void; - onChange: (selected: I[]) => void; - extrasTop?: ReactNode; -} & Pick, 'searchFn' | 'searchKeys'>; - -export const DialogSelectModal = ({ - getIdent, - initiallySelected, - getLabel, - open, - setOpen, - options, - onChange, - searchFn, - searchKeys, - extrasTop, -}: Props) => { - const { LL } = useI18nContext(); - const [searchValue, setSearch] = useState(''); - const [selected, setSelected] = useState(initiallySelected); - - const handleSelect = useCallback((id: I, selected: boolean) => { - if (selected) { - setSelected((s) => s.filter((i) => i !== id)); - } else { - setSelected((s) => [...s, id]); - } - }, []); - - const handleSelectAll = () => { - if (selected.length === options.length) { - setSelected([]); - } else { - setSelected(options.map((o) => getIdent(o))); - } - }; - - const searchEnabled = isPresent(searchFn) || isPresent(searchKeys); - - const filteredOptions = useMemo(() => { - if (!searchEnabled) return options; - if (searchFn) { - return options.filter((o) => searchFn(o, searchValue)); - } - if (searchKeys) { - return options.filter((o) => { - const res = searchByKeys(o, searchKeys, searchValue); - return res; - }); - } - return options; - }, [searchEnabled, searchFn, options, searchValue, searchKeys]); - - useEffect(() => { - setSelected(initiallySelected); - }, [initiallySelected]); - - return ( - { - setOpen(false); - }} - afterClose={() => { - setSearch(''); - }} - className="modal-dialog-select" - > - {extrasTop} - {searchEnabled && ( - { - setSearch(value); - }} - placeholder="Filter/Search" - /> - )} -
{ - handleSelectAll(); - }} - > - -

Select all

-
-
-
    - {filteredOptions.length === 0 && searchValue === '' && ( -

    No options

    - )} - {filteredOptions.length === 0 && searchValue !== '' && ( -

    Not found

    - )} - {filteredOptions.map((o) => { - const id = getIdent(o); - const isSelected = selected.includes(id); - return ( -
  • { - handleSelect(id, isSelected); - }} - > - - {getLabel(o)} -
  • - ); - })} -
-
-
-
-
- ); -}; diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/style.scss b/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/style.scss deleted file mode 100644 index 8b1d29199..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/DialogSelectModal/style.scss +++ /dev/null @@ -1,76 +0,0 @@ -.modal.modal-dialog-select { - min-height: 100dvh; - justify-items: center; - align-items: start; - padding: 10dvh 0 40px !important; - - .modal-content { - width: 100%; - max-width: 580px; - border-radius: 10px; - padding: 18px 10px; - box-sizing: border-box; - overflow: hidden; - - & > .spacer { - padding-bottom: var(--spacing-xs); - } - - hr { - border: 0.5px solid var(--border-primary); - margin: var(--spacing-xs) 0; - } - - & > .search { - margin-bottom: var(--spacing-xs); - } - - .no-data { - width: 100%; - text-align: center; - color: var(--text-body-tertiary); - - @include typography(app-body-2); - } - - .option { - min-height: 24px; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - cursor: pointer; - user-select: none; - - p, - span { - @include typography(app-modal-1); - } - - span { - color: var(--text-body-tertiary); - } - } - - .options { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - min-height: calc(24px * 6 + 50px); - max-height: calc(240px + (9 * var(--spacing-xs))); - overflow-x: hidden; - overflow-y: auto; - } - - .controls { - padding-top: var(--spacing-xs); - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-l); - } - } -} diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/FormDialogSelect.tsx b/web/src/pages/acl/AclCreatePage/components/DialogSelect/FormDialogSelect.tsx deleted file mode 100644 index 661cf4785..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/FormDialogSelect.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useMemo } from 'react'; -import { - type FieldValues, - type UseControllerProps, - useController, -} from 'react-hook-form'; - -import { DialogSelect } from './DialogSelect'; -import type { DialogSelectProps } from './types'; - -type Props = { - controller: UseControllerProps; - forceShowErrorMessage?: boolean; - onChange?: () => void; -} & Omit, 'selected' | 'errorMessage'>; - -export const FormDialogSelect = < - T extends FieldValues, - B extends object, - I extends number | string, ->({ - controller, - onChange: onChangeExternal, - forceShowErrorMessage = false, - ...selectProps -}: Props) => { - const { - field: { value, onChange }, - fieldState: { error, isDirty, isTouched }, - formState: { isSubmitted }, - } = useController(controller); - - const errorMessage = useMemo(() => { - if ( - (error && (isDirty || isTouched)) || - (!error && isSubmitted) || - forceShowErrorMessage - ) { - return error?.message; - } - return undefined; - }, [error, forceShowErrorMessage, isDirty, isSubmitted, isTouched]); - - return ( - { - onChange(selected); - onChangeExternal?.(); - }} - selected={value} - errorMessage={errorMessage} - /> - ); -}; diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/style.scss b/web/src/pages/acl/AclCreatePage/components/DialogSelect/style.scss deleted file mode 100644 index f51846251..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/style.scss +++ /dev/null @@ -1,180 +0,0 @@ -.dialog-select-field { - width: 100%; - display: inline-grid; - grid-template-rows: auto; - grid-template-columns: 1fr 40px; - column-gap: var(--spacing-xs); - align-items: center; - - .open-button { - grid-row: 1; - grid-column: 2 / 3; - background-color: var(--surface-icon-on-dark); - border: none; - border-radius: 10px; - width: 40px; - height: 40px; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - cursor: pointer; - opacity: 1; - - @include animate-field; - transition-property: background-color, opacity; - - svg { - path { - @include animate-field; - transition-property: fill; - fill: var(--surface-icon-primary); - } - } - - &:disabled { - opacity: var(--disabled-opacity); - } - - &:not(:disabled) { - &:hover { - background-color: var(--surface-main-primary); - - svg { - path { - fill: var(--surface-icon-secondary); - } - } - } - } - } - - & > .track { - grid-row: 1; - grid-column: 1 / 2; - width: 100%; - box-sizing: border-box; - padding: 8px 10px 8px 18px; - border-radius: 10px; - border: 1px solid var(--border-primary); - min-height: 50px; - background-color: var(--surface-frame-bg); - position: relative; - overflow: hidden; - opacity: 1; - - @include animate-field; - transition-property: border-color, opacity; - - &.overflows { - &::after { - position: absolute; - top: 0; - right: 0; - width: 65px; - height: 100%; - content: ' '; - background: linear-gradient( - 90deg, - rgba(0, 0, 0, 0) 0%, - var(--surface-default-modal) 100% - ); - } - } - - .options { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: 8px; - z-index: 1; - - .dialog-select-tag { - display: inline-flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - box-sizing: border-box; - padding: 7px 10px; - border: 1px solid var(--border-primary); - column-gap: 10px; - border-radius: 10px; - background-color: var(--surface-default-modal); - - span, - p { - @include typography(app-input); - user-select: none; - text-wrap: nowrap; - } - } - } - - & > svg { - border-radius: 10px; - user-select: none; - z-index: 2; - position: absolute; - right: -1px; - top: 0px; - } - } - - &.disabled { - & > .track { - cursor: not-allowed; - } - - & > .open-button { - cursor: not-allowed; - } - } - - &.invalid { - & > .track { - border-color: var(--border-alert); - } - } - - &.disabled { - & > .open-button { - opacity: var(--disabled-opacity); - } - - & > .track { - opacity: var(--disabled-opacity); - } - } -} - -.dialog-select { - & > .inner { - position: relative; - - & > label { - padding-bottom: var(--spacing-xs); - } - } -} - -.dialog-select-track-floating-menu { - min-width: 200px; - max-width: 100dvh; - - ul { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - - li { - @include typography(app-modal-2); - display: flex; - flex-flow: row wrap; - gap: var(--spacing-xs); - align-items: center; - justify-content: flex-start; - } - } -} diff --git a/web/src/pages/acl/AclCreatePage/components/DialogSelect/types.ts b/web/src/pages/acl/AclCreatePage/components/DialogSelect/types.ts deleted file mode 100644 index e276c3090..000000000 --- a/web/src/pages/acl/AclCreatePage/components/DialogSelect/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { ReactNode } from 'react'; - -export type DialogSelectProps = { - options: T[]; - identKey: keyof T; - selected: I[]; - renderTagContent: (value: T) => ReactNode; - // if not provided will use renderTagContent instead - renderDialogListItem?: (value: T) => ReactNode; - errorMessage?: string; - label?: string; - // Can replace searchFn, when given only keys it will use util searchByKeys, searchFn prop takes priority if both given. - searchKeys?: Array; - disabled?: boolean; - searchFn?: DialogSelectSearch; - onChange?: (values: I[]) => void; - modalExtrasTop?: ReactNode; -}; - -export type DialogSelectSearch = (obj: T, searchedValue: string) => boolean; diff --git a/web/src/pages/acl/AclCreatePage/style.scss b/web/src/pages/acl/AclCreatePage/style.scss deleted file mode 100644 index a620f85d0..000000000 --- a/web/src/pages/acl/AclCreatePage/style.scss +++ /dev/null @@ -1,115 +0,0 @@ -#acl-create-page { - .labeled-checkbox, - .form-checkbox { - label { - @include typography(app-modal-1); - color: var(--text-body-primary); - } - } - - & > .page-content { - box-sizing: border-box; - padding: var(--spacing-s); - - @include media-breakpoint-up(lg) { - padding: var(--spacing-xl); - } - - & > .header { - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - padding-bottom: var(--spacing-m); - - @include media-breakpoint-up(lg) { - flex-flow: row; - align-items: center; - justify-content: flex-start; - gap: var(--spacing-s); - } - - h1 { - @include typography(app-title); - } - - .controls { - margin-left: auto; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-end; - column-gap: var(--spacing-s); - } - } - } -} - -#acl-sections { - width: 100%; - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - - @include media-breakpoint-up(xl) { - flex-flow: row; - column-gap: var(--spacing-m); - } - - #rule-card { - grid-area: rule; - } - - #allowed-card { - grid-area: allowed; - } - - #destination-card { - grid-area: destination; - } - - #denied-card { - grid-area: denied; - } - - & > .column { - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - } - - h3 { - text-wrap: nowrap; - @include typography(app-side-bar); - } - - .card { - .input, - .dialog-select-spacer, - .labeled-checkbox, - .form-checkbox, - .spacer, - & > .header { - &:not(:last-child) { - padding-bottom: var(--spacing-s); - } - } - - .header { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: 8px; - width: 100%; - min-height: 23px; - - hr { - width: 100%; - align-self: flex-end; - border: 0.5px solid var(--border-primary); - margin: 0; - padding: 0; - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/AclIndexPage.tsx b/web/src/pages/acl/AclIndexPage/AclIndexPage.tsx deleted file mode 100644 index 9f3a9a57b..000000000 --- a/web/src/pages/acl/AclIndexPage/AclIndexPage.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import './style.scss'; - -import { useMemo, useState } from 'react'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { PageLayout } from '../../../shared/components/Layout/PageLayout/PageLayout'; -import { CardTabs } from '../../../shared/defguard-ui/components/Layout/CardTabs/CardTabs'; -import type { CardTabsData } from '../../../shared/defguard-ui/components/Layout/CardTabs/types'; -import { AclIndexAliases } from './components/AclIndexAliases/AclIndexAliases'; -import { AclIndexRules } from './components/AclIndexRules/AclIndexRules'; - -enum AclTab { - ALIASES = 'aliases', - RULES = 'rules', -} - -export const AclIndexPage = () => { - const [activeTab, setActiveTab] = useState(AclTab.RULES); - const { LL } = useI18nContext(); - - const availableTabs: CardTabsData[] = [ - { - key: AclTab.RULES, - active: activeTab === AclTab.RULES, - content:

{LL.acl.listPage.tabs.rules()}

, - onClick: () => setActiveTab(AclTab.RULES), - }, - { - key: AclTab.ALIASES, - active: activeTab === AclTab.ALIASES, - content:

{LL.acl.listPage.tabs.aliases()}

, - onClick: () => setActiveTab(AclTab.ALIASES), - }, - ]; - - const tabRender = useMemo(() => { - switch (activeTab) { - case AclTab.RULES: - return ; - case AclTab.ALIASES: - return ; - } - }, [activeTab]); - - return ( - -
-

{LL.acl.sharedTitle()}

-
- -
{tabRender}
-
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/AclIndexAliases.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/AclIndexAliases.tsx deleted file mode 100644 index 56ad450cf..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/AclIndexAliases.tsx +++ /dev/null @@ -1,470 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { intersection } from 'lodash-es'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FilterGroupsModal } from '../../../../../shared/components/modals/FilterGroupsModal/FilterGroupsModal'; -import type { FilterGroupsModalFilter } from '../../../../../shared/components/modals/FilterGroupsModal/types'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ListItemCount } from '../../../../../shared/defguard-ui/components/Layout/ListItemCount/ListItemCount'; -import { Search } from '../../../../../shared/defguard-ui/components/Layout/Search/Search'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import { useAclLoadedContext } from '../../../acl-context'; -import { type AclAlias, AclAliasStatus } from '../../../types'; -import { - aclAliasStatusToInt, - aclDestinationToListTagDisplay, - aclPortsToListTagDisplay, - aclProtocolsToListTagDisplay, - aclRuleToListTagDisplay, -} from '../../../utils'; -import { AclListSkeleton } from '../AclListSkeleton/AclListSkeleton'; -import { DeployChangesIcon } from '../DeployChangesIcon'; -import { AliasesList } from './components/AliasesList'; -import { AclAliasApplyConfirmModal } from './modals/AclAliasApplyConfirmModal/AclAliasApplyConfirmModal'; -import { AclAliasDeleteBlockModal } from './modals/AclAliasDeleteBlockModal/AclAliasDeleteBlockModal'; -import { AlcAliasCEModal } from './modals/AlcAliasCEModal/AlcAliasCEModal'; -import { useAclAliasCEModal } from './modals/AlcAliasCEModal/store'; -import type { AclAliasListData } from './types'; - -type ListTagDisplay = { - key: string | number; - label: string; - displayAsTag?: boolean; -}; - -type AliasesFilters = { - rules: number[]; - status: number[]; -}; - -type ApplyConfirmState = { - rules: string[]; - open: boolean; - aliasesToApply: number[]; -}; - -const defaultApplyConfirmState: ApplyConfirmState = { - rules: [], - aliasesToApply: [], - open: false, -}; - -export type ListData = { - context: { - usedBy: ListTagDisplay[]; - }; -} & AclAlias; - -const defaultFilters: AliasesFilters = { - rules: [], - status: [], -}; - -const intersects = (...args: Array): boolean => intersection(args).length > 0; - -export const AclIndexAliases = () => { - const toaster = useToaster(); - const { - acl: { - rules: { getRules }, - aliases: { applyAliases }, - }, - } = useApi(); - - const { data: aclRules, isLoading: aliasesLoading } = useQuery({ - queryFn: getRules, - queryKey: [QueryKeys.FETCH_ACL_RULES], - refetchOnMount: true, - }); - - const queryClient = useQueryClient(); - const openCEModal = useAclAliasCEModal((s) => s.open, shallow); - const [applyConfirmModalState, setApplyConfirmModalState] = useState( - defaultApplyConfirmState, - ); - const aclContext = useAclLoadedContext(); - const { aliases } = aclContext; - const [appliedFilters, setAppliedFilters] = useState(defaultFilters); - const filtersPresent = useMemo( - () => Object.values(appliedFilters).flat(1).length > 0, - [appliedFilters], - ); - const [filtersModalOpen, setFiltersModalOpen] = useState(false); - const [searchValue, setSearchValue] = useState(''); - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.aliases; - - const { mutate: applyMutation, isPending: applyPending } = useMutation({ - mutationFn: applyAliases, - onSuccess: () => { - toaster.success(LL.acl.listPage.message.applyChanges()); - void queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(QueryKeys.FETCH_ACL_ALIASES), - }); - }, - onError: (error) => { - toaster.error(LL.acl.listPage.message.applyFail()); - console.error(error); - }, - }); - - const pendingAliasesCount = useMemo(() => { - if (aliases) { - return aliases.filter((alias) => alias.state !== AclAliasStatus.APPLIED).length; - } - return 0; - }, [aliases]); - - const applySearch = useCallback( - (data: AclAlias[]) => { - if (searchValue) { - return data.filter((alias) => - alias.name.trim().toLowerCase().includes(searchValue.toLowerCase().trim()), - ); - } - return data; - }, - [searchValue], - ); - - const [selectedPending, setSelectedPending] = useState< - Record - >({}); - - const handlePendingSelect = useCallback((key: number, value: boolean) => { - setSelectedPending((s) => ({ ...s, [key]: value })); - }, []); - - const handlePendingSelectAll = useCallback( - (value: boolean, state: Record) => { - const newState = { ...state }; - for (const key in newState) { - newState[key] = value; - } - setSelectedPending(newState); - }, - [], - ); - - const pendingSelectionCount = useMemo(() => { - let count = 0; - for (const key in selectedPending) { - if (selectedPending[key]) count++; - } - return count; - }, [selectedPending]); - - const prepareDisplay = useCallback( - (data: AclAlias[], filters: AliasesFilters) => { - if (!aclRules) return []; - if (filters.rules.length) { - data = data.filter((alias) => intersects(alias.rules, filters.rules)); - } - const res: AclAliasListData[] = []; - for (const alias of data) { - const rules = aclRules.filter((rule) => alias.rules.includes(rule.id)); - res.push({ - ...alias, - display: { - destination: aclDestinationToListTagDisplay(alias.destination), - ports: aclPortsToListTagDisplay(alias.ports), - protocols: aclProtocolsToListTagDisplay(alias.protocols), - rules: aclRuleToListTagDisplay(rules), - }, - }); - } - return res; - }, - [aclRules], - ); - - const deployed = useMemo(() => { - if (aliases) { - return aliases.filter((alias) => alias.state === AclAliasStatus.APPLIED); - } - return []; - }, [aliases]); - - const deployedDisplay = useMemo(() => { - if (aliases) { - return prepareDisplay(applySearch(deployed), appliedFilters); - } - return []; - }, [aliases, prepareDisplay, applySearch, deployed, appliedFilters]); - - const pending = useMemo(() => { - if (aliases) { - return aliases.filter((alias) => alias.state === AclAliasStatus.MODIFIED); - } - return []; - }, [aliases]); - - const pendingDisplay = useMemo(() => { - if (aliases) { - return prepareDisplay(applySearch(pending), appliedFilters); - } - return []; - }, [aliases, appliedFilters, applySearch, pending, prepareDisplay]); - - const displayItemsCount = useMemo( - () => deployedDisplay.length + pendingDisplay.length, - [deployedDisplay.length, pendingDisplay.length], - ); - - const applyText = useMemo(() => { - if (!pending.length) return localLL.listControls.apply.noChanges(); - if (pendingSelectionCount) { - return localLL.listControls.apply.selective({ - count: pendingSelectionCount, - }); - } - return localLL.listControls.apply.all({ - count: pending.length, - }); - }, [localLL.listControls.apply, pending.length, pendingSelectionCount]); - - const filters = useMemo(() => { - const res: Record = { - rules: { - identifier: 'rules', - label: localLL.modals.filterGroupsModal.groupLabels.rules(), - items: - aclRules?.map((rule) => ({ - label: rule.name, - searchValues: [rule.name], - value: rule.id, - })) ?? [], - order: 2, - }, - status: { - identifier: 'status', - label: localLL.modals.filterGroupsModal.groupLabels.status(), - items: [ - { - label: localLL.list.status.changed(), - searchValues: [LL.acl.ruleStatus.modified()], - value: aclAliasStatusToInt(AclAliasStatus.MODIFIED), - }, - { - label: localLL.list.status.applied(), - searchValues: [localLL.list.status.applied()], - value: aclAliasStatusToInt(AclAliasStatus.APPLIED), - }, - ], - order: 1, - }, - }; - return res; - }, [ - LL.acl.ruleStatus, - aclRules, - localLL.list.status, - localLL.modals.filterGroupsModal.groupLabels, - ]); - - const handleApply = () => { - if (aliases && aclRules) { - let toApply: AclAlias[]; - if (!pendingSelectionCount) { - toApply = pending; - } else { - const ids: number[] = Object.keys(selectedPending) - .filter((key: string) => selectedPending[Number(key)]) - .map((key) => Number(key)); - toApply = pending.filter((alias) => ids.includes(alias.id)); - } - const aliasesIds = toApply.map((alias) => alias.id); - const rulesWithin = new Set(); - toApply.forEach((alias) => { - alias.rules.forEach((rule) => { - rulesWithin.add(rule); - }); - }); - // check if need to confirm - if (rulesWithin.size) { - //prepare and open modal - const ruleNames: string[] = aclRules - .filter((rule) => rulesWithin.has(rule.id)) - .map((rule) => rule.name) - .sort(); - setApplyConfirmModalState({ - aliasesToApply: aliasesIds, - open: true, - rules: ruleNames, - }); - } else { - void applyMutation(aliasesIds); - } - } - }; - - // update or build selection state for list when rules are done loading - useEffect(() => { - if (aliases) { - const pending = aliases.filter((rule) => rule.state !== AclAliasStatus.APPLIED); - const selectionEntries = Object.keys(selectedPending).length; - if (selectionEntries !== pending.length) { - const newSelectionState: Record = {}; - for (const rule of pending) { - newSelectionState[rule.id] = newSelectionState[rule.id] ?? false; - } - setSelectedPending(newSelectionState); - } - } - }, [aliases, selectedPending]); - - return ( - <> - - { - setApplyConfirmModalState((s) => ({ ...s, open: val })); - }} - onSubmit={() => { - void applyMutation(applyConfirmModalState.aliasesToApply); - setApplyConfirmModalState(defaultApplyConfirmState); - }} - /> -
-
-

Aliases

- - { - setSearchValue(searchChange); - }} - /> -
-
-
- {aliasesLoading && } - {!aliasesLoading && ( - <> - - - - )} - - { - setAppliedFilters(newFilters as AliasesFilters); - }} - onCancel={() => { - setFiltersModalOpen(false); - }} - /> -
- - ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/AclAliasStatus.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/AclAliasStatus.tsx deleted file mode 100644 index b53fe3931..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/AclAliasStatus.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { ActivityIcon } from '../../../../../../../shared/defguard-ui/components/icons/ActivityIcon/ActivityIcon'; -import { ActivityIconVariant } from '../../../../../../../shared/defguard-ui/components/icons/ActivityIcon/types'; -import { AclAliasStatus } from '../../../../../types'; - -type Props = { - status: AclAliasStatus; -}; - -export const AclAliasStatusDisplay = ({ status }: Props) => { - const { LL } = useI18nContext(); - const statusLL = LL.acl.listPage.aliases.list.status; - - const [label, iconStatus] = useMemo(() => { - switch (status) { - case AclAliasStatus.APPLIED: - return [statusLL.applied(), ActivityIconVariant.CONNECTED]; - case AclAliasStatus.MODIFIED: - return [statusLL.changed(), ActivityIconVariant.DISCONNECTED]; - } - }, [status, statusLL]); - - return ( -
-

{label}

- -
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/style.scss deleted file mode 100644 index c422f4b39..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AclAliasStatus/style.scss +++ /dev/null @@ -1,28 +0,0 @@ -.acl-alias-status { - width: 100%; - max-width: 100%; - display: inline-flex; - flex-flow: row nowrap; - column-gap: 5px; - user-select: none; - overflow: hidden; - align-items: center; - justify-content: flex-start; - - & > p { - @include typography(app-modal-3); - color: inherit; - max-width: calc(100% - 13px); - overflow: hidden; - - @include text-overflow-dots; - } - - &.status-modified { - color: var(--text-important); - } - - &.status-applied { - color: var(--text-positive); - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasEditButton.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasEditButton.tsx deleted file mode 100644 index b13f1802f..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasEditButton.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useCallback } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { EditButton } from '../../../../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../../../../shared/defguard-ui/components/Layout/EditButton/types'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { AclAliasStatus } from '../../../../types'; -import { useAclAliasDeleteBlockModal } from '../modals/AclAliasDeleteBlockModal/store'; -import { useAclAliasCEModal } from '../modals/AlcAliasCEModal/store'; -import type { AclAliasListData } from '../types'; - -type EditProps = { - alias: AclAliasListData; -}; - -export const AliasEditButton = ({ alias }: EditProps) => { - const queryClient = useQueryClient(); - const isApplied = alias.state === AclAliasStatus.APPLIED; - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.aliases.list.editMenu; - const toaster = useToaster(); - const openDeleteBlockModal = useAclAliasDeleteBlockModal((s) => s.open, shallow); - - const { - acl: { - aliases: { deleteAlias }, - }, - } = useApi(); - - const invalidateQueries = useCallback(() => { - void queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(QueryKeys.FETCH_ACL_ALIASES), - }); - }, [queryClient]); - - const handleError = useCallback( - (err: AxiosError) => { - toaster.error(LL.acl.listPage.message.changeFail()); - console.error(err.message ?? err); - }, - [LL.acl.listPage.message, toaster], - ); - - const { mutate: deleteAliasMutation, isPending: deletionPending } = useMutation({ - mutationFn: deleteAlias, - onSuccess: () => { - invalidateQueries(); - if (isApplied) { - toaster.success(LL.acl.listPage.aliases.message.aliasDeleted()); - } else { - toaster.success(LL.acl.listPage.message.changeDiscarded()); - } - }, - onError: handleError, - }); - - const openEditModal = useAclAliasCEModal((s) => s.open, shallow); - - return ( - - { - openEditModal({ alias }); - }} - disabled={deletionPending} - /> - { - if (alias.rules.length === 0) { - deleteAliasMutation(alias.id); - } else { - openDeleteBlockModal( - alias, - alias.display.rules.map((tag) => tag.label).sort(), - ); - } - }} - /> - - ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasesList.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasesList.tsx deleted file mode 100644 index cdcc24bf9..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/components/AliasesList.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import clsx from 'clsx'; -import { orderBy } from 'lodash-es'; -import { type ReactNode, useMemo, useState } from 'react'; -import { upperCaseFirst } from 'text-case'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { ListCellTags } from '../../../../../../shared/components/Layout/ListCellTags/ListCellTags'; -import { ListHeader } from '../../../../../../shared/components/Layout/ListHeader/ListHeader'; -import type { ListHeaderColumnConfig } from '../../../../../../shared/components/Layout/ListHeader/types'; -import { CheckBox } from '../../../../../../shared/defguard-ui/components/Layout/Checkbox/CheckBox'; -import { InteractionBox } from '../../../../../../shared/defguard-ui/components/Layout/InteractionBox/InteractionBox'; -import { ListCellText } from '../../../../../../shared/defguard-ui/components/Layout/ListCellText/ListCellText'; -import { NoData } from '../../../../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { ListSortDirection } from '../../../../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import type { AclAlias } from '../../../../types'; -import { DividerHeader } from '../../shared/DividerHeader'; -import type { AclAliasListData } from '../types'; -import { AclAliasStatusDisplay } from './AclAliasStatus/AclAliasStatus'; -import { AliasEditButton } from './AliasEditButton'; - -type AliasesListProps = { - data: AclAliasListData[]; - header: { - text: string; - extras?: ReactNode; - }; - noDataMessage: string; - isAppliedList?: boolean; - selected?: Record; - allSelected?: boolean; - onSelect?: (key: number, value: boolean) => void; - onSelectAll?: (value: boolean, state: Record) => void; -}; - -export const AliasesList = ({ - data, - header, - noDataMessage, - selected, - allSelected, - onSelect, - onSelectAll, -}: AliasesListProps) => { - const { LL } = useI18nContext(); - const headersLL = LL.acl.listPage.aliases.list.headers; - const [sortKey, setSortKey] = useState('name'); - const [sortDir, setSortDir] = useState(ListSortDirection.ASC); - - const selectionEnabled = useMemo( - () => - isPresent(onSelect) && - isPresent(onSelectAll) && - isPresent(selected) && - isPresent(allSelected), - [onSelect, onSelectAll, selected, allSelected], - ); - - const sortedAliases = useMemo( - () => orderBy(data, [sortKey], [sortDir.valueOf().toLowerCase() as 'asc' | 'desc']), - [data, sortDir, sortKey], - ); - - const listHeaders = useMemo( - (): ListHeaderColumnConfig[] => [ - { - label: headersLL.name(), - sortKey: 'name', - enabled: true, - }, - { - label: headersLL.ip(), - key: 'ip', - enabled: false, - }, - { - label: headersLL.ports(), - key: 'ports', - enabled: false, - }, - { - label: headersLL.protocols(), - key: 'protocols', - enabled: false, - }, - { - label: headersLL.rules(), - key: 'rules', - enabled: false, - }, - { - label: headersLL.status(), - key: 'status', - enabled: false, - }, - { - label: headersLL.kind(), - sortKey: 'kind', - enabled: true, - }, - { - label: headersLL.edit(), - key: 'edit', - enabled: false, - }, - ], - [headersLL], - ); - - return ( -
- {header.extras} - {sortedAliases.length === 0 && ( - - )} - {sortedAliases.length > 0 && ( -
-
- - headers={listHeaders} - sortDirection={sortDir} - activeKey={sortKey} - selectAll={allSelected} - onSelectAll={(val) => { - if (selectionEnabled) { - onSelectAll?.(val, selected ?? {}); - } - }} - onChange={(key, dir) => { - setSortKey(key); - setSortDir(dir); - }} - /> -
-
    - {sortedAliases.map((alias) => { - let aliasSelected = false; - if (selected) { - aliasSelected = selected[alias.id] ?? false; - } - return ( -
  • - {!selectionEnabled &&
    } - {selectionEnabled && ( -
    - { - onSelect?.(alias.id, !aliasSelected); - }} - > - - -
    - )} -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
  • - ); - })} -
-
- )} -
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/AclAliasApplyConfirmModal.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/AclAliasApplyConfirmModal.tsx deleted file mode 100644 index eae2e06aa..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/AclAliasApplyConfirmModal.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; - -type Props = { - isOpen: boolean; - setOpen: (val: boolean) => void; - rules: string[]; - onSubmit: () => void; -}; - -export const AclAliasApplyConfirmModal = ({ - isOpen, - onSubmit, - rules, - setOpen, -}: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.aliases.modals.applyConfirm; - - return ( - { - setOpen(false); - }} - onSubmit={() => { - onSubmit(); - }} - submitText={localLL.submit()} - title={localLL.title()} - > -
-

{localLL.message()}

-

{`${localLL.listLabel()}(${rules.length})`}:

-

{rules.join(', ')}

-
-
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/style.scss deleted file mode 100644 index 284adbede..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasApplyConfirmModal/style.scss +++ /dev/null @@ -1,26 +0,0 @@ -#acl-aliases-apply-confirm-modal { - .title { - color: var(--text-button-primary); - text-align: center; - } - - .content { - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - max-width: 100%; - overflow: hidden; - - p { - @include typography(app-body-2); - color: var(--text-button-primary); - text-align: left; - overflow-wrap: break-word; - width: 100%; - - &.rules { - font-weight: 700; - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/AclAliasDeleteBlockModal.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/AclAliasDeleteBlockModal.tsx deleted file mode 100644 index 0cd72d66b..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/AclAliasDeleteBlockModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import './style.scss'; - -import { useEffect } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { RenderMarkdown } from '../../../../../../../shared/components/Layout/RenderMarkdown/RenderMarkdown'; -import { ConfirmModal } from '../../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import { isPresent } from '../../../../../../../shared/defguard-ui/utils/isPresent'; -import { useAclAliasDeleteBlockModal } from './store'; - -export const AclAliasDeleteBlockModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.aliases.modals.deleteBlock; - const [close, reset] = useAclAliasDeleteBlockModal((s) => [s.close, s.reset], shallow); - const alias = useAclAliasDeleteBlockModal((s) => s.alias); - const rules = useAclAliasDeleteBlockModal((s) => s.rulesNames); - const isOpen = useAclAliasDeleteBlockModal((s) => s.visible); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - return () => { - reset?.(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - { - close(); - }} - afterClose={() => { - reset(); - }} - > -
- {isPresent(alias) && ( - - )} - {rules.length > 0 &&

{rules.join(', ')}

} -
-
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/store.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/store.tsx deleted file mode 100644 index a6685026a..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/store.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { AclAlias } from '../../../../../types'; - -const defaults: StoreValues = { - visible: false, - alias: undefined, - rulesNames: [], -}; - -export const useAclAliasDeleteBlockModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (alias, rules) => set({ alias: alias, rulesNames: rules, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - rulesNames: string[]; - alias?: AclAlias; -}; - -type StoreMethods = { - open: (alias: AclAlias, rules: string[]) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/style.scss deleted file mode 100644 index 71223bade..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AclAliasDeleteBlockModal/style.scss +++ /dev/null @@ -1,26 +0,0 @@ -#acl-aliases-delete-alias-block-modal { - .title { - text-align: center; - color: var(--text-button-primary); - } - - .content { - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - text-align: left; - - p { - @include typography(app-body-2); - color: var(--text-button-primary); - text-align: left; - - &.rules { - text-wrap: wrap; - max-width: 100%; - overflow-wrap: break-word; - font-weight: 700; - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/AlcAliasCEModal.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/AlcAliasCEModal.tsx deleted file mode 100644 index 6a68bf790..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/AlcAliasCEModal.tsx +++ /dev/null @@ -1,216 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useQueryClient } from '@tanstack/react-query'; -import { omit } from 'lodash-es'; -import { useEffect, useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Button } from '../../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import type { SelectOption } from '../../../../../../../shared/defguard-ui/components/Layout/Select/types'; -import { isPresent } from '../../../../../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../../../shared/queries'; -import { AclAliasKind } from '../../../../../types'; -import { protocolOptions, protocolToString } from '../../../../../utils'; -import { aclDestinationValidator, aclPortsValidator } from '../../../../../validators'; -import { AclMessageBoxes } from '../../../shared/AclMessageBoxes/AclMessageBoxes'; -import { useAclAliasCEModal } from './store'; - -export const AlcAliasCEModal = () => { - const isOpen = useAclAliasCEModal((s) => s.visible); - const alias = useAclAliasCEModal((s) => s.alias); - const isEdit = isPresent(alias); - - const [close, reset] = useAclAliasCEModal((s) => [s.close, s.reset], shallow); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - return () => { - reset(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - { - close(); - }} - afterClose={() => { - reset(); - }} - > - - - ); -}; - -const ModalContent = () => { - const queryClient = useQueryClient(); - const closeModal = useAclAliasCEModal((s) => s.close, shallow); - const initialAlias = useAclAliasCEModal((s) => s.alias); - const isEditMode = isPresent(initialAlias); - const toaster = useToaster(); - - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.aliases.modals.create; - const formErrors = LL.form.error; - const { - acl: { - aliases: { createAlias, editAlias }, - }, - } = useApi(); - - const schema = useMemo( - () => - z.object({ - name: z - .string({ - required_error: formErrors.required(), - }) - .trim() - .min(1, formErrors.required()), - kind: z.nativeEnum(AclAliasKind), - ports: aclPortsValidator(LL), - destination: aclDestinationValidator(LL), - protocols: z.number().array(), - }), - [LL, formErrors], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo((): FormFields => { - let defaultValues: FormFields; - if (isPresent(initialAlias)) { - defaultValues = omit(initialAlias, ['id']); - } else { - defaultValues = { - destination: '', - name: '', - kind: AclAliasKind.DESTINATION, - ports: '', - protocols: [], - }; - } - return defaultValues; - }, [initialAlias]); - - const { - handleSubmit, - control, - formState: { isSubmitting }, - } = useForm({ - mode: 'all', - resolver: zodResolver(schema), - defaultValues, - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - try { - if (isEditMode) { - await editAlias({ - ...values, - id: initialAlias.id, - }); - toaster.success(localLL.messages.modified()); - } else { - await createAlias(values); - toaster.success(localLL.messages.created()); - } - await queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(QueryKeys.FETCH_ACL_ALIASES), - }); - closeModal(); - } catch (e) { - toaster.error(LL.messages.error()); - console.error(e); - } - }; - - const aliasKindOptions = useMemo( - (): SelectOption[] => [ - { - key: AclAliasKind.DESTINATION, - value: AclAliasKind.DESTINATION, - label: localLL.kindOptions.destination(), - }, - { - key: AclAliasKind.COMPONENT, - value: AclAliasKind.COMPONENT, - label: localLL.kindOptions.component(), - }, - ], - [localLL.kindOptions], - ); - - return ( -
- - - -
-

Destination

-
- - - ({ displayValue: protocolToString(val), key: val })} - disposable - /> -
-
- - ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/store.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/store.tsx deleted file mode 100644 index 72ba8e2b6..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/store.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { AclAlias } from '../../../../../types'; - -const defaults: StoreValues = { - visible: false, - alias: undefined, -}; - -export const useAclAliasCEModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (vals) => { - if (vals) { - set({ ...defaults, ...vals, visible: true }); - } else { - set({ ...defaults, visible: true }); - } - }, - close: () => { - set({ visible: false }); - }, - reset: () => { - set(defaults); - }, - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - alias?: AclAlias; -}; - -type StoreMethods = { - open: (vals?: Partial) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/style.scss deleted file mode 100644 index bc944d874..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/modals/AlcAliasCEModal/style.scss +++ /dev/null @@ -1,33 +0,0 @@ -#acl-alias-ce-modal { - form { - .input { - padding-bottom: var(--spacing-m); - } - - .select-container { - margin-bottom: var(--spacing-m); - } - - .header { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - padding-bottom: var(--spacing-m); - - h2 { - @include typography(app-body-1); - } - } - } - - .spacer { - padding-bottom: var(--spacing-m); - } -} - -.acl-alias-ce-modal-spacing { - @include media-breakpoint-up(lg) { - padding-top: var(--spacing-m) !important; - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/style.scss deleted file mode 100644 index a4631311f..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/style.scss +++ /dev/null @@ -1,65 +0,0 @@ -@mixin list-row { - display: inline-grid; - grid-template-rows: 1fr; - column-gap: var(--spacing-s); - justify-content: space-between; - align-items: center; - box-sizing: border-box; - - grid-template-columns: 40px 200px repeat(2, 250px) 160px 250px 100px 100px 60px; - - @include media-breakpoint-up(lg) { - grid-template-columns: 40px 0.5fr repeat(2, 0.75fr) 160px 0.75fr 100px 100px 60px; - } - - .cell { - display: inline-flex; - justify-content: flex-start; - align-items: center; - width: 100%; - overflow: hidden; - - &:last-child { - justify-content: center; - } - } - - .select-cell { - align-items: center; - justify-content: center; - width: 100%; - - & > .interaction-box { - width: 18px; - height: 18px; - } - } -} - -.aliases-list { - .list-headers { - @include list-row; - padding-bottom: var(--spacing-xs); - } - - ul { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - - & > li { - @include list-row; - box-sizing: border-box; - padding: 9px 0px; - - @include typography(app-modal-2); - - .cell { - &.name { - @include typography(app-modal-1); - } - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/types.ts b/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/types.ts deleted file mode 100644 index 3c13d9ea7..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexAliases/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { AclAlias } from '../../../types'; -import type { ListCellTag } from '../shared/types'; - -export type AclAliasListData = { - display: { - ports: ListCellTag[]; - destination: ListCellTag[]; - protocols: ListCellTag[]; - rules: ListCellTag[]; - }; -} & AclAlias; - -export type AclAliasListSelection = Record; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/AclIndexRules.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexRules/AclIndexRules.tsx deleted file mode 100644 index d277cf280..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/AclIndexRules.tsx +++ /dev/null @@ -1,891 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import clsx from 'clsx'; -import { concat, intersection, orderBy } from 'lodash-es'; -import { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'; -import { useNavigate } from 'react-router'; -import { upperCaseFirst } from 'text-case'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ListCellTags } from '../../../../../shared/components/Layout/ListCellTags/ListCellTags'; -import { ListHeader } from '../../../../../shared/components/Layout/ListHeader/ListHeader'; -import type { ListHeaderColumnConfig } from '../../../../../shared/components/Layout/ListHeader/types'; -import { FilterGroupsModal } from '../../../../../shared/components/modals/FilterGroupsModal/FilterGroupsModal'; -import type { FilterGroupsModalFilter } from '../../../../../shared/components/modals/FilterGroupsModal/types'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { CheckBox } from '../../../../../shared/defguard-ui/components/Layout/Checkbox/CheckBox'; -import { EditButton } from '../../../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { InteractionBox } from '../../../../../shared/defguard-ui/components/Layout/InteractionBox/InteractionBox'; -import { ListCellText } from '../../../../../shared/defguard-ui/components/Layout/ListCellText/ListCellText'; -import { ListItemCount } from '../../../../../shared/defguard-ui/components/Layout/ListItemCount/ListItemCount'; -import { NoData } from '../../../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { Search } from '../../../../../shared/defguard-ui/components/Layout/Search/Search'; -import { ListSortDirection } from '../../../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { isPresent } from '../../../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import type { AclRuleInfo } from '../../../../../shared/types'; -import { useAclLoadedContext } from '../../../acl-context'; -import { - type AclAlias, - AclAliasStatus, - type AclCreateContextLoaded, - AclStatus, -} from '../../../types'; -import { aclRuleToStatusInt, aclStatusToInt } from '../../../utils'; -import { AclListSkeleton } from '../AclListSkeleton/AclListSkeleton'; -import { DeployChangesIcon } from '../DeployChangesIcon'; -import { DividerHeader } from '../shared/DividerHeader'; -import type { ListCellTag } from '../shared/types'; -import { AclRuleStatus } from './components/AclRuleStatus/AclRuleStatus'; -import { AclRulesApplyConfirmModal } from './components/AclRulesApplyConfirmModal/AclRulesApplyConfirmModal'; - -type RulesFilters = { - networks: number[]; - aliases: number[]; - status: number[]; - groups: number[]; -}; - -type ListData = { - context: { - denied: ListCellTag[]; - allowed: ListCellTag[]; - networks: ListCellTag[]; - destination: ListCellTag[]; - }; -} & AclRuleInfo; - -const defaultFilters: RulesFilters = { - aliases: [], - networks: [], - status: [], - groups: [], -}; - -export const AclIndexRules = () => { - const navigate = useNavigate(); - const { - acl: { - rules: { applyRules }, - }, - } = useApi(); - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.rules; - const messagesLL = LL.acl.listPage.message; - const ruleStatusLL = LL.acl.ruleStatus; - const aclContext = useAclLoadedContext(); - const [filtersOpen, setFiltersOpen] = useState(false); - const [appliedFilters, setAppliedFilters] = useState(defaultFilters); - const appliedFiltersCount = useMemo( - () => Object.values(appliedFilters).reduce((acc, filters) => acc + filters.length, 0), - [appliedFilters], - ); - const [searchValue, setSearchValue] = useState(''); - const [applyConfirmOpen, setApplyConfirmOpen] = useState(false); - const toaster = useToaster(); - const queryClient = useQueryClient(); - - const { mutate: applyPendingChangesMutation, isPending: applyPending } = useMutation({ - mutationFn: applyRules, - onSuccess: () => { - toaster.success(messagesLL.applyChanges()); - void queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(QueryKeys.FETCH_ACL_RULES), - }); - }, - onError: (e) => { - toaster.error(messagesLL.applyFail()); - console.error(e); - }, - }); - - const { - acl: { - rules: { getRules }, - }, - } = useApi(); - - const { data: aclRules, isLoading: rulesLoading } = useQuery({ - queryFn: getRules, - queryKey: [QueryKeys.FETCH_ACL_RULES], - refetchOnMount: true, - }); - - const pendingRulesCount = useMemo(() => { - if (aclRules) { - return aclRules.filter( - (rule) => rule.state !== AclStatus.APPLIED && rule.state !== AclStatus.EXPIRED, - ).length; - } - return 0; - }, [aclRules]); - - const rulesAfterSearch = useMemo(() => { - if (aclRules && searchValue) { - return aclRules.filter((rule) => - rule.name.trim().toLowerCase().includes(searchValue.toLowerCase().trim()), - ); - } - return aclRules ?? []; - }, [aclRules, searchValue]); - - const pendingRules = useMemo( - () => - isPresent(aclRules) - ? prepareDisplay( - rulesAfterSearch, - appliedFilters, - aclContext.aliases, - localLL.list.tags.all(), - localLL.list.tags.all(), - true, - aclContext, - ) - : [], - [aclContext, aclRules, appliedFilters, localLL.list.tags, rulesAfterSearch], - ); - - const [selectedPending, setSelectedPending] = useState>({}); - const handlePendingSelect = useCallback((key: number, value: boolean) => { - setSelectedPending((s) => ({ ...s, [key]: value })); - }, []); - const handlePendingSelectAll = useCallback( - (value: boolean, state: Record) => { - const newState = { ...state }; - for (const key in newState) { - newState[key] = value; - } - setSelectedPending(newState); - }, - [], - ); - const pendingSelectionCount = useMemo(() => { - let count = 0; - for (const key in selectedPending) { - if (selectedPending[key]) count++; - } - return count; - }, [selectedPending]); - - const deployedRules = useMemo(() => { - if (aclRules) { - return prepareDisplay( - rulesAfterSearch, - appliedFilters, - aclContext.aliases, - localLL.list.tags.allAllowed(), - localLL.list.tags.allDenied(), - false, - aclContext, - ); - } - return []; - }, [aclContext, aclRules, appliedFilters, localLL.list.tags, rulesAfterSearch]); - - const displayItemsCount = useMemo( - () => deployedRules.length + pendingRules.length, - [deployedRules.length, pendingRules.length], - ); - - const filters = useMemo(() => { - const res: Record = {}; - const filterLL = localLL.modals.filterGroupsModal.groupHeaders; - res.groups = { - identifier: 'id', - label: filterLL.groups(), - order: 3, - items: aclContext.groups.map((group) => ({ - label: group.name, - searchValues: [group.name], - value: group.id, - })), - }; - res.networks = { - label: filterLL.location(), - order: 1, - identifier: 'id', - items: aclContext.networks.map((network) => ({ - label: network.name, - searchValues: [network.name], - value: network.id, - })), - }; - res.aliases = { - identifier: 'id', - label: filterLL.alias(), - order: 2, - items: aclContext.aliases - .filter((alias) => alias.state === AclAliasStatus.APPLIED) - .map((alias) => ({ - label: alias.name, - searchValues: [alias.name], - value: alias.id, - })), - }; - - res.status = { - identifier: 'value', - label: filterLL.status(), - order: 4, - items: [ - { - label: ruleStatusLL.enabled(), - value: 1000, - searchValues: [ruleStatusLL.enabled()], - }, - { - label: ruleStatusLL.disabled(), - value: 999, - searchValues: [ruleStatusLL.disabled()], - }, - { - label: ruleStatusLL.new(), - value: aclStatusToInt(AclStatus.NEW), - searchValues: [ruleStatusLL.new()], - }, - { - label: ruleStatusLL.modified(), - value: aclStatusToInt(AclStatus.MODIFIED), - searchValues: [ruleStatusLL.modified()], - }, - { - label: ruleStatusLL.deleted(), - value: aclStatusToInt(AclStatus.DELETED), - searchValues: [ruleStatusLL.deleted()], - }, - { - label: ruleStatusLL.expired(), - value: aclStatusToInt(AclStatus.EXPIRED), - searchValues: [ruleStatusLL.expired()], - }, - ], - }; - return res; - }, [ - aclContext.aliases, - aclContext.groups, - aclContext.networks, - localLL.modals.filterGroupsModal.groupHeaders, - ruleStatusLL, - ]); - - const controlFilterDisplay = useMemo(() => { - return appliedFiltersCount - ? localLL.listControls.filter.applied({ count: appliedFiltersCount }) - : localLL.listControls.filter.nothingApplied(); - }, [appliedFiltersCount, localLL.listControls.filter]); - - const filtersPresent = appliedFiltersCount > 0; - - const applyText = useMemo(() => { - if (pendingSelectionCount) { - return localLL.listControls.apply.selective({ count: pendingSelectionCount }); - } - if (pendingRulesCount) { - return localLL.listControls.apply.all({ count: pendingRulesCount }); - } - return localLL.listControls.apply.noChanges(); - }, [localLL.listControls.apply, pendingRulesCount, pendingSelectionCount]); - - const handleApply = useCallback(() => { - if (aclRules) { - if (pendingSelectionCount === 0) { - const rulesToApply = aclRules - .filter( - (rule) => - rule.state !== AclStatus.APPLIED && rule.state !== AclStatus.EXPIRED, - ) - .map((rule) => rule.id); - applyPendingChangesMutation(rulesToApply); - } else { - const rulesToApply: number[] = []; - for (const key in selectedPending) { - if (selectedPending[key]) { - rulesToApply.push(Number(key)); - } - } - applyPendingChangesMutation(rulesToApply); - } - } - }, [aclRules, applyPendingChangesMutation, pendingSelectionCount, selectedPending]); - - // update or build selection state for list when rules are done loading - useEffect(() => { - if (aclRules) { - const pending = aclRules.filter((rule) => rule.state !== AclStatus.APPLIED); - const selectionEntries = Object.keys(selectedPending).length; - if (selectionEntries !== pending.length) { - const newSelectionState: Record = {}; - for (const rule of pending) { - newSelectionState[rule.id] = newSelectionState[rule.id] ?? false; - } - setSelectedPending(newSelectionState); - } - } - }, [aclRules, selectedPending]); - - return ( -
-
-

Rules

- - { - setSearchValue(searchChange); - }} - /> -
-
-
- {rulesLoading && } - {!rulesLoading && ( - <> - - - - )} - { - setFiltersOpen(false); - }} - onSubmit={(vals) => { - setAppliedFilters(vals as RulesFilters); - setFiltersOpen(false); - }} - /> - -
- ); -}; - -type RulesListProps = { - data: ListData[]; - header: { - text: string; - extras?: ReactNode; - }; - noDataMessage: string; - isAppliedList?: boolean; - selected?: Record; - allSelected?: boolean; - onSelect?: (key: number, value: boolean) => void; - onSelectAll?: (value: boolean, state: Record) => void; -}; - -const RulesList = ({ - data, - header, - noDataMessage, - selected, - allSelected, - onSelect, - onSelectAll, -}: RulesListProps) => { - const { LL } = useI18nContext(); - const headersLL = LL.acl.listPage.rules.list.headers; - const [sortKey, setSortKey] = useState('name'); - const [sortDir, setSortDir] = useState(ListSortDirection.ASC); - - const selectionEnabled = useMemo( - () => - isPresent(onSelect) && - isPresent(onSelectAll) && - isPresent(selected) && - isPresent(allSelected), - [onSelect, onSelectAll, selected, allSelected], - ); - - const sortedRules = useMemo( - () => orderBy(data, [sortKey], [sortDir.valueOf().toLowerCase() as 'asc' | 'desc']), - [data, sortDir, sortKey], - ); - - const listHeaders = useMemo( - (): ListHeaderColumnConfig[] => [ - { - label: headersLL.name(), - sortKey: 'name', - enabled: true, - }, - { - label: headersLL.destination(), - sortKey: 'destination', - enabled: false, - }, - { - label: headersLL.allowed(), - key: 'allowed', - enabled: false, - }, - { - label: headersLL.denied(), - key: 'denied', - enabled: false, - }, - { - label: headersLL.locations(), - key: 'networks', - enabled: false, - }, - { - label: headersLL.status(), - key: 'status', - enabled: false, - }, - { - label: headersLL.edit(), - key: 'edit', - enabled: false, - }, - ], - [headersLL], - ); - - return ( -
- {header.extras} - {sortedRules.length === 0 && ( - - )} - {sortedRules.length > 0 && ( -
-
- - headers={listHeaders} - sortDirection={sortDir} - activeKey={sortKey} - selectAll={allSelected} - onSelectAll={(val) => { - if (selectionEnabled) { - onSelectAll?.(val, selected ?? {}); - } - }} - onChange={(key, dir) => { - setSortKey(key); - setSortDir(dir); - }} - /> -
-
    - {sortedRules.map((rule) => { - let ruleSelected = false; - if (selected) { - ruleSelected = selected[rule.id] ?? false; - } - return ( -
  • - {!selectionEnabled &&
    } - {selectionEnabled && ( -
    - { - onSelect?.(rule.id, !ruleSelected); - }} - > - - -
    - )} -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
  • - ); - })} -
-
- )} -
- ); -}; - -type EditProps = { - rule: ListData; -}; - -const RuleEditButton = ({ rule }: EditProps) => { - const queryClient = useQueryClient(); - const isApplied = rule.state === AclStatus.APPLIED; - const isDeleted = rule.state === AclStatus.DELETED; - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.rules.list.editMenu; - const statusLL = LL.acl.ruleStatus; - const toaster = useToaster(); - - const { - acl: { - rules: { deleteRule, editRule }, - }, - } = useApi(); - - const invalidateQueries = useCallback(() => { - void queryClient.invalidateQueries({ - predicate: (query) => query.queryKey.includes(QueryKeys.FETCH_ACL_RULES), - }); - }, [queryClient]); - - const handleError = useCallback( - (err: AxiosError) => { - toaster.error(LL.acl.listPage.message.changeFail()); - console.error(err.message ?? err); - }, - [LL.acl.listPage.message, toaster], - ); - - const { mutate: editRuleMutation, isPending: editPending } = useMutation({ - mutationFn: editRule, - mutationKey: ['rule', 'delete', rule.id], - onSuccess: () => { - invalidateQueries(); - toaster.success(LL.acl.listPage.message.changeAdded()); - }, - onError: handleError, - }); - - const { mutate: deleteRuleMutation, isPending: deletionPending } = useMutation({ - mutationFn: deleteRule, - onSuccess: () => { - invalidateQueries(); - if (isApplied) { - toaster.success(LL.acl.listPage.message.changeAdded()); - } else { - toaster.success(LL.acl.listPage.message.changeDiscarded()); - } - }, - onError: handleError, - }); - - const handleEnableChange = useCallback( - (newState: boolean, rule: AclRuleInfo | ListData) => { - editRuleMutation({ ...rule, enabled: newState, expires: rule.expires ?? null }); - }, - [editRuleMutation], - ); - - const navigate = useNavigate(); - - return ( - - {!isDeleted && ( - { - navigate(`/admin/acl/form?edit=1&rule=${rule.id}`); - }} - /> - )} - {isApplied && ( - <> - {!rule.enabled && ( - { - handleEnableChange(true, rule); - }} - /> - )} - {rule.enabled && ( - { - handleEnableChange(false, rule); - }} - /> - )} - - )} - { - deleteRuleMutation(rule.id); - }} - /> - - ); -}; - -const prepareDisplay = ( - aclRules: AclRuleInfo[], - appliedFilters: RulesFilters, - aliases: AclAlias[], - allAllowedLabel: string, - allDeniedLabel: string, - pending: boolean, - aclContext: Omit, -): ListData[] => { - let rules: AclRuleInfo[]; - - if (pending) { - rules = aclRules.filter( - (rule) => rule.state !== AclStatus.APPLIED && rule.state !== AclStatus.EXPIRED, - ); - } else { - rules = aclRules.filter( - (rule) => rule.state === AclStatus.APPLIED || rule.state === AclStatus.EXPIRED, - ); - } - - rules = rules.filter((rule) => { - const filterChecks: boolean[] = []; - if (appliedFilters.status.length) { - filterChecks.push(appliedFilters.status.includes(aclRuleToStatusInt(rule))); - } - if (appliedFilters.networks.length && !rule.all_networks) { - filterChecks.push(intersection(rule.networks, appliedFilters.networks).length > 0); - } - if (appliedFilters.aliases.length) { - filterChecks.push(intersection(rule.aliases, appliedFilters.aliases).length > 0); - } - if (appliedFilters.groups.length) { - const groups = concat(rule.denied_groups, rule.allowed_groups); - filterChecks.push(intersection(groups, appliedFilters.groups).length > 0); - } - return !filterChecks.includes(false); - }); - - const listData: ListData[] = rules.map((rule) => { - let allowed: ListCellTag[]; - let denied: ListCellTag[]; - let networks: ListCellTag[]; - - if (rule.allow_all_users) { - allowed = [{ key: 'all', label: allAllowedLabel, displayAsTag: false }]; - } else { - allowed = concat( - aclContext.users - .filter((u) => rule.allowed_users.includes(u.id)) - .map((u) => ({ - key: `user-${u.id}`, - label: u.username, - displayAsTag: true, - })), - aclContext.groups - .filter((g) => rule.allowed_groups.includes(g.id)) - .map((group) => ({ - key: `group-${group.id}`, - label: group.name, - displayAsTag: true, - })), - aclContext.devices - .filter((device) => rule.allowed_devices.includes(device.id)) - .map((device) => ({ - key: `device-${device.id}`, - label: device.name, - displayAsTag: true, - })), - ); - } - - if (rule.deny_all_users) { - denied = [{ key: 'all', label: allDeniedLabel, displayAsTag: false }]; - } else { - denied = concat( - aclContext.users - .filter((u) => rule.denied_users.includes(u.id)) - .map((user) => ({ - key: `user-${user.id}`, - label: user.username, - displayAsTag: true, - })), - aclContext.groups - .filter((g) => rule.denied_groups.includes(g.id)) - .map((group) => ({ - key: `group-${group.id}`, - label: group.name, - displayAsTag: true, - })), - aclContext.devices - .filter((device) => rule.denied_devices.includes(device.id)) - .map((device) => ({ - key: `device-${device.id}`, - label: device.name, - displayAsTag: true, - })), - ); - } - - if (rule.all_networks) { - networks = [ - { - key: 'all', - label: allAllowedLabel, - }, - ]; - } else { - networks = aclContext.networks - .filter((network) => rule.networks.includes(network.id)) - .map((network) => ({ - key: network.id, - label: network.name, - displayAsTag: true, - })); - } - - const destination: ListCellTag[] = concat( - aliases - .filter((alias) => rule.aliases.includes(alias.id)) - .map((alias) => ({ - key: `alias-${alias.id}`, - label: alias.name, - displayAsTag: true, - })), - rule.destination - .split(',') - .filter((s) => s !== '') - .map((dest, index) => ({ - key: `rule-destination-${index}`, - label: dest, - displayAsTag: false, - })), - ); - - return { - ...rule, - context: { - allowed, - denied, - destination, - networks, - }, - }; - }); - - return listData; -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/AclRuleStatus.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/AclRuleStatus.tsx deleted file mode 100644 index 30b4d8ace..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/AclRuleStatus.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { ActivityIcon } from '../../../../../../../shared/defguard-ui/components/icons/ActivityIcon/ActivityIcon'; -import { ActivityIconVariant } from '../../../../../../../shared/defguard-ui/components/icons/ActivityIcon/types'; -import { AclStatus } from '../../../../../types'; - -type Props = { - status: AclStatus; - enabled: boolean; -}; - -export const AclRuleStatus = ({ enabled, status }: Props) => { - const { LL } = useI18nContext(); - const statusLL = LL.acl.ruleStatus; - - const [label, iconStatus] = useMemo(() => { - if (status === AclStatus.APPLIED) { - switch (enabled) { - case true: - return [statusLL.enabled(), ActivityIconVariant.CONNECTED]; - case false: - return [statusLL.disabled(), ActivityIconVariant.DISCONNECTED]; - } - } - switch (status) { - case AclStatus.DELETED: - return [statusLL.deleted(), ActivityIconVariant.ERROR]; - case AclStatus.NEW: - return [statusLL.new(), ActivityIconVariant.CONNECTED]; - case AclStatus.MODIFIED: - return [statusLL.modified(), ActivityIconVariant.DISCONNECTED]; - case AclStatus.EXPIRED: - return [statusLL.expired(), ActivityIconVariant.DISABLED]; - default: - return [statusLL.new(), ActivityIconVariant.CONNECTED]; - } - }, [enabled, status, statusLL]); - - return ( -
-

{label}

- -
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/style.scss deleted file mode 100644 index 64a3f3242..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRuleStatus/style.scss +++ /dev/null @@ -1,46 +0,0 @@ -.acl-rule-status { - width: 100%; - max-width: 100%; - display: inline-flex; - flex-flow: row nowrap; - column-gap: 5px; - user-select: none; - overflow: hidden; - align-items: center; - justify-content: flex-start; - - & > p { - @include typography(app-modal-3); - color: inherit; - max-width: calc(100% - 13px); - overflow: hidden; - - @include text-overflow-dots; - } - - &.status-new { - color: var(--text-positive); - } - - &.status-modified { - color: var(--text-important); - } - - &.status-deleted { - color: var(--text-alert); - } - - &.status-applied { - &.disabled { - color: var(--text-important); - } - - &.enabled { - color: var(--text-positive); - } - } - - &.status-expired { - color: var(--text-body-tertiary); - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRulesApplyConfirmModal/AclRulesApplyConfirmModal.tsx b/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRulesApplyConfirmModal/AclRulesApplyConfirmModal.tsx deleted file mode 100644 index d7bd89e3a..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/components/AclRulesApplyConfirmModal/AclRulesApplyConfirmModal.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useI18nContext } from '../../../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; - -type Props = { - isOpen: boolean; - setOpen: (val: boolean) => void; - onSubmit: () => void; - changesCount: number; -}; - -export const AclRulesApplyConfirmModal = ({ - isOpen, - setOpen, - onSubmit, - changesCount, -}: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.acl.listPage.rules.modals.applyConfirm; - const close = () => setOpen(false); - - return ( - { - close(); - }} - onSubmit={() => { - onSubmit(); - close(); - }} - /> - ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/style.scss b/web/src/pages/acl/AclIndexPage/components/AclIndexRules/style.scss deleted file mode 100644 index 5b5638f82..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclIndexRules/style.scss +++ /dev/null @@ -1,111 +0,0 @@ -@mixin grid-config { - box-sizing: border-box; - display: inline-grid; - grid-template-rows: 1fr; - justify-content: space-between; - padding: 0 var(--spacing-s) 0 0; - column-gap: var(--spacing-xs); - - grid-template-columns: 40px 250px 350px repeat(3, 250px) 100px 40px; - - @include media-breakpoint-up(lg) { - grid-template-columns: 40px 1fr 1.25fr repeat(3, 1fr) 100px 45px; - } - - & > .cell { - display: inline-flex; - justify-content: flex-start; - align-items: center; - width: 100%; - overflow: hidden; - - &:last-child { - justify-content: center; - } - } - - .select-cell { - align-items: center; - justify-content: center; - width: 100%; - - & > .interaction-box { - width: 18px; - height: 18px; - } - } -} - -#acl-rules { - width: 100%; - - .rules-list { - width: 100%; - - &:not(:last-child) { - padding-bottom: var(--spacing-s); - } - - .list-headers { - @include grid-config; - } - - .header-track { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - padding-bottom: var(--spacing-xs); - - .select-cell { - width: 40px; - height: 22px; - display: inline-flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .interaction-box { - width: 18px; - height: 18px; - } - } - } - - .list-container { - overflow: auto; - position: relative; - max-height: 600px; - scrollbar-gutter: stable; - - & > .header-track { - position: sticky; - top: 0; - background-color: var(--surface-default-modal); - z-index: 2; - } - } - - ul { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-m); - - li { - @include grid-config(); - - .btn { - width: 100%; - } - - .cell { - &.name { - @include typography(app-modal-1); - } - } - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/AclListSkeleton.tsx b/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/AclListSkeleton.tsx deleted file mode 100644 index 474c94a22..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/AclListSkeleton.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import './style.scss'; - -import { range } from 'lodash-es'; -import Skeleton from 'react-loading-skeleton'; - -export const AclListSkeleton = () => { - return ( -
- {range(10).map((val) => ( - - ))} -
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/style.scss b/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/style.scss deleted file mode 100644 index b23c71c50..000000000 --- a/web/src/pages/acl/AclIndexPage/components/AclListSkeleton/style.scss +++ /dev/null @@ -1,11 +0,0 @@ -.acl-list-skeleton { - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - width: 100%; - - .react-loading-skeleton { - border-radius: 10px; - height: 60px; - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/DeployChangesIcon.tsx b/web/src/pages/acl/AclIndexPage/components/DeployChangesIcon.tsx deleted file mode 100644 index 36a09072d..000000000 --- a/web/src/pages/acl/AclIndexPage/components/DeployChangesIcon.tsx +++ /dev/null @@ -1,20 +0,0 @@ -export const DeployChangesIcon = () => { - return ( - - - - - ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/shared/AclAliasKindIcon.tsx b/web/src/pages/acl/AclIndexPage/components/shared/AclAliasKindIcon.tsx deleted file mode 100644 index 9a5c3cba4..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/AclAliasKindIcon.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { AclAliasKind } from '../../../types'; - -type Props = { - kind: AclAliasKind; -}; -export const AclAliasKindIcon = ({ kind }: Props) => { - switch (kind) { - case AclAliasKind.COMPONENT: - return ( - - - - - - - ); - case AclAliasKind.DESTINATION: - return ( - - - - - - - - ); - } -}; diff --git a/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/AclMessageBoxes.tsx b/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/AclMessageBoxes.tsx deleted file mode 100644 index fa424e96e..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/AclMessageBoxes.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { RenderMarkdown } from '../../../../../../shared/components/Layout/RenderMarkdown/RenderMarkdown'; -import { MessageBox } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { AclAliasKind, NetworkAccessType } from '../../../../types'; -import { AclAliasKindIcon } from '../AclAliasKindIcon'; -import { NetworkAccessTypeIcon } from '../NetworkAccessTypeIcon'; - -type Props = { - message: 'acl-alias-kind' | 'acl-network-access'; - dismissable?: boolean; -}; - -export const AclMessageBoxes = ({ message, dismissable = true }: Props) => { - const { LL } = useI18nContext(); - const aliasKindLL = LL.acl.messageBoxes.aclAliasKind; - const networkAccessLL = LL.acl.messageBoxes.networkSelectionIndicatorsHelper; - - switch (message) { - case 'acl-alias-kind': - return ( - -
    -
  • - -

    {`${aliasKindLL.destination.name()} — ${aliasKindLL.destination.description()}`}

    -
  • -
  • - -

    {`${aliasKindLL.component.name()} — ${aliasKindLL.component.description()}`}

    -
  • -
-
- ); - case 'acl-network-access': - return ( - -
    -
  • - -

    - -
  • -
  • - -

    - -
  • -
  • - -

    - -
  • -
-
- ); - } -}; diff --git a/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/style.scss b/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/style.scss deleted file mode 100644 index 7ef4f2cdb..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/AclMessageBoxes/style.scss +++ /dev/null @@ -1,18 +0,0 @@ -.acl-explain-message-box { - ul { - width: 100%; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - - li { - display: inline-flex; - flex-flow: row nowrap; - align-items: center; - - svg { - display: inline-block; - } - } - } -} diff --git a/web/src/pages/acl/AclIndexPage/components/shared/DividerHeader.tsx b/web/src/pages/acl/AclIndexPage/components/shared/DividerHeader.tsx deleted file mode 100644 index 86243ea08..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/DividerHeader.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { PropsWithChildren } from 'react'; - -type DividerHeaderProps = { - text: string; -} & PropsWithChildren; - -export const DividerHeader = ({ text, children }: DividerHeaderProps) => { - return ( -
-
-

{text}

- {children} -
-
- ); -}; diff --git a/web/src/pages/acl/AclIndexPage/components/shared/NetworkAccessTypeIcon.tsx b/web/src/pages/acl/AclIndexPage/components/shared/NetworkAccessTypeIcon.tsx deleted file mode 100644 index f0e545e19..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/NetworkAccessTypeIcon.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { NetworkAccessType } from '../../../types'; - -type Props = { - type: NetworkAccessType; -}; - -export const NetworkAccessTypeIcon = ({ type }: Props) => { - switch (type) { - case NetworkAccessType.ALLOWED: - return ( - - - - ); - case NetworkAccessType.DENIED: - return ( - - - - - ); - case NetworkAccessType.UNMANAGED: - return ( - - - - ); - } -}; diff --git a/web/src/pages/acl/AclIndexPage/components/shared/types.ts b/web/src/pages/acl/AclIndexPage/components/shared/types.ts deleted file mode 100644 index b30a13c1a..000000000 --- a/web/src/pages/acl/AclIndexPage/components/shared/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type ListCellTag = { - key: string | number; - label: string; - displayAsTag?: boolean; -}; diff --git a/web/src/pages/acl/AclIndexPage/style.scss b/web/src/pages/acl/AclIndexPage/style.scss deleted file mode 100644 index 3a70698f4..000000000 --- a/web/src/pages/acl/AclIndexPage/style.scss +++ /dev/null @@ -1,105 +0,0 @@ -#acl-index-page { - #content-card { - background-color: var(--surface-default-modal); - border-radius: 15px; - box-sizing: border-box; - padding: var(--spacing-s); - border-top-left-radius: 0; - - & > div { - & > header { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - padding-bottom: var(--spacing-m); - - & > .controls { - margin-left: auto; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-end; - column-gap: var(--spacing-s); - - .btn.filter { - svg path { - @include animate-standard; - transition-property: fill; - fill: var(--text-button-primary); - } - - &:hover { - svg path { - fill: var(--surface-main-primary); - } - } - } - } - } - } - - .divider-header { - padding-bottom: var(--spacing-s); - - .inner { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - border-bottom: 1px solid var(--border-primary); - } - - .header { - @include typography(app-side-bar); - } - } - } - - .page-content { - & > header { - padding-bottom: var(--spacing-l); - } - } - - .no-data { - @include typography(app-side-bar); - color: var(--text-body-tertiary); - margin: var(--spacing-s) 0; - } -} - -#acl-index-page { - .acl-list { - width: 100%; - - &:not(:last-child) { - padding-bottom: var(--spacing-s); - } - - .header-track { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - padding-bottom: var(--spacing-xs); - - .select-cell { - width: 40px; - height: 22px; - display: inline-flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .interaction-box { - width: 18px; - height: 18px; - } - } - } - } -} diff --git a/web/src/pages/acl/AclRoutes.tsx b/web/src/pages/acl/AclRoutes.tsx deleted file mode 100644 index 9c83f8089..000000000 --- a/web/src/pages/acl/AclRoutes.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import type { PropsWithChildren } from 'react'; -import { Route, Routes } from 'react-router'; -import { AclCreateDataProvider } from './AclCreateDataProvider'; -import { AlcCreatePage } from './AclCreatePage/AclCreatePage'; -import { AclIndexPage } from './AclIndexPage/AclIndexPage'; -import { AclCreateTrackedProvider } from './acl-context'; - -const AclProvide = ({ children }: PropsWithChildren) => { - return ( - - {children} - - ); -}; - -export const AclRoutes = () => { - return ( - - - - - } - /> - - - - } - /> - - ); -}; diff --git a/web/src/pages/acl/acl-context.tsx b/web/src/pages/acl/acl-context.tsx deleted file mode 100644 index 6713bb076..000000000 --- a/web/src/pages/acl/acl-context.tsx +++ /dev/null @@ -1,64 +0,0 @@ -/* eslint-disable react-refresh/only-export-components */ -import { useCallback, useState } from 'react'; -import { createContainer } from 'react-tracked'; - -import type { AclCreateContext, AclCreateContextLoaded } from './types'; - -const init: AclCreateContext = { - devices: undefined, - groups: undefined, - networks: undefined, - users: undefined, - editRule: undefined, -}; - -const useValue = () => useState(init); - -const { - useUpdate, - Provider: AclCreateTrackedProvider, - useTrackedState, - useSelector: useAclCreateSelector, -} = createContainer(useValue); - -const useUpdateAclCreateContext = () => { - const updateInner = useUpdate(); - - const update = useCallback( - (values: Partial) => { - updateInner((s) => ({ ...s, ...values })); - }, - [updateInner], - ); - - return update; -}; - -const useAclLoadedContext = () => { - const { devices, groups, networks, users, editRule, aliases } = useTrackedState(); - - if ( - devices === undefined || - groups === undefined || - networks === undefined || - users === undefined || - aliases === undefined - ) { - throw Error('Use of ACL data before it was loaded'); - } - return { - devices, - groups, - networks, - users, - aliases, - ruleToEdit: editRule, - } as AclCreateContextLoaded; -}; - -export { - AclCreateTrackedProvider, - useAclCreateSelector, - useAclLoadedContext, - useUpdateAclCreateContext, -}; diff --git a/web/src/pages/acl/types.ts b/web/src/pages/acl/types.ts deleted file mode 100644 index aeb6b6a96..000000000 --- a/web/src/pages/acl/types.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { - AclRuleInfo, - GroupInfo, - Network, - StandaloneDevice, - User, -} from '../../shared/types'; - -export type AclCreateContext = { - groups?: GroupInfo[]; - users?: User[]; - devices?: StandaloneDevice[]; - networks?: Network[]; - editRule?: AclRuleInfo; - aliases?: AclAlias[]; -}; - -export type AclCreateContextLoaded = { - groups: GroupInfo[]; - users: User[]; - devices: StandaloneDevice[]; - networks: Network[]; - aliases: AclAlias[]; - ruleToEdit?: AclRuleInfo; -}; - -export type AclAlias = { - id: number; - name: string; - kind: AclAliasKind; - state: AclAliasStatus; - destination: string; - ports: string; - protocols: AclProtocol[]; - rules: number[]; -}; - -export type AclAliasPost = Omit; - -export enum AclProtocol { - TCP = 6, - UDP = 17, - ICMP = 1, -} - -export enum AclStatus { - NEW = 'New', - APPLIED = 'Applied', - MODIFIED = 'Modified', - DELETED = 'Deleted', - EXPIRED = 'Expired', -} - -export enum AclAliasStatus { - APPLIED = AclStatus.APPLIED, - MODIFIED = AclStatus.MODIFIED, -} - -export enum AclKind { - DESTINATION = 'Destination', - COMPONENT = 'Component', -} - -export enum AclAliasKind { - DESTINATION = AclKind.DESTINATION, - COMPONENT = AclKind.COMPONENT, -} - -export enum NetworkAccessType { - ALLOWED, - DENIED, - UNMANAGED, -} diff --git a/web/src/pages/acl/utils.ts b/web/src/pages/acl/utils.ts deleted file mode 100644 index abbca3b6f..000000000 --- a/web/src/pages/acl/utils.ts +++ /dev/null @@ -1,141 +0,0 @@ -import type { SelectOption } from '../../shared/defguard-ui/components/Layout/Select/types'; -import type { AclRuleInfo, Network } from '../../shared/types'; -import type { ListCellTag } from './AclIndexPage/components/shared/types'; -import { AclAliasStatus, AclProtocol, AclStatus, NetworkAccessType } from './types'; - -// used by acl rules index page, bcs we don't show Applied in UI but instead enabled / disabled when state is "applied" -export const aclRuleToStatusInt = (rule: AclRuleInfo): number => { - const status = rule.state; - if (status === AclStatus.APPLIED) { - if (rule.enabled) { - return 1000; - } else { - return 999; - } - } - return aclStatusToInt(rule.state); -}; - -export const aclStatusToInt = (status: AclStatus): number => { - switch (status) { - case AclStatus.NEW: - return 0; - case AclStatus.MODIFIED: - return 1; - case AclStatus.APPLIED: - return 2; - case AclStatus.DELETED: - return 3; - case AclStatus.EXPIRED: - return 4; - } -}; - -export const aclAliasStatusToInt = (status: AclAliasStatus): number => { - switch (status) { - case AclAliasStatus.APPLIED: - return 2; - case AclAliasStatus.MODIFIED: - return 1; - } -}; - -export const aclStatusFromInt = (statusInt: number): AclStatus => { - switch (statusInt) { - case 0: - return AclStatus.NEW; - case 1: - return AclStatus.MODIFIED; - case 2: - return AclStatus.APPLIED; - case 3: - return AclStatus.DELETED; - default: - throw Error(`Mapping ACL Rule from int failed ! Unrecognized int of ${statusInt}`); - } -}; - -export const aclAliasStatusFromInt = (statusInt: number): AclAliasStatus => { - switch (statusInt) { - case 1: - return AclAliasStatus.APPLIED; - case 2: - return AclAliasStatus.MODIFIED; - default: - throw Error(`Unexpected alias status code of ${statusInt}`); - } -}; - -export const protocolToString = (value: AclProtocol): string => { - switch (value) { - case AclProtocol.TCP: - return 'TCP'; - case AclProtocol.UDP: - return 'UDP'; - case AclProtocol.ICMP: - return 'ICMP'; - } -}; - -export const protocolOptions: SelectOption[] = [ - { - key: AclProtocol.TCP, - label: 'TCP', - value: AclProtocol.TCP, - }, - { - key: AclProtocol.UDP, - label: 'UDP', - value: AclProtocol.UDP, - }, - { - key: AclProtocol.ICMP, - label: 'ICMP', - value: AclProtocol.ICMP, - }, -]; - -export const aclDestinationToListTagDisplay = (destination: string): ListCellTag[] => - destination - .split(',') - .filter((s) => s !== '') - .map((dest, index) => ({ - key: `destination-${index}`, - label: dest, - displayAsTag: false, - })); - -export const aclPortsToListTagDisplay = (ports: string): ListCellTag[] => - ports - .split(',') - .filter((s) => s !== '') - .map((port, index) => ({ - key: `port-${index}`, - label: port, - displayAsTag: false, - })); - -export const aclProtocolsToListTagDisplay = (protocols: AclProtocol[]): ListCellTag[] => - protocols.map((protocol) => ({ - key: protocol.toString(), - label: protocolToString(protocol), - displayAsTag: false, - })); - -export const aclRuleToListTagDisplay = (rules: AclRuleInfo[]): ListCellTag[] => - rules.map((rule) => ({ - key: rule.id, - label: rule.name, - displayAsTag: true, - })); - -export const networkToNetworkAccessType = (network: Network): NetworkAccessType => { - if (!network.acl_enabled) { - return NetworkAccessType.UNMANAGED; - } - if (network.acl_default_allow) { - return NetworkAccessType.ALLOWED; - } else { - return NetworkAccessType.DENIED; - } -}; diff --git a/web/src/pages/acl/validators.ts b/web/src/pages/acl/validators.ts deleted file mode 100644 index 83151eb68..000000000 --- a/web/src/pages/acl/validators.ts +++ /dev/null @@ -1,150 +0,0 @@ -import * as ipaddr from 'ipaddr.js'; -import { z } from 'zod'; - -import type { TranslationFunctions } from '../../i18n/i18n-types'; -import { patternStrictIpV4 } from '../../shared/patterns'; - -export const aclPortsValidator = (LL: TranslationFunctions) => - z - .string() - .refine((value: string) => { - if (value === '') return true; - const regexp = new RegExp(/^(?:\d+(?:-\d+)*)(?:(?:\s*,\s*|\s+)\d+(?:-\d+)*)*$/); - return regexp.test(value); - }, LL.form.error.invalid()) - .refine((value: string) => { - if (value === '') return true; - // check if there is no duplicates in given port field - const trimmed = value - .replaceAll(' ', '') - .replaceAll('-', ' ') - .replaceAll(',', ' ') - .split(' ') - .filter((v) => v !== ''); - const found: number[] = []; - for (const entry of trimmed) { - const num = parseInt(entry, 10); - if (Number.isNaN(num)) { - return false; - } - if (found.includes(num)) { - return false; - } - found.push(num); - } - return true; - }, LL.form.error.invalid()) - .refine((value: string) => { - if (value === '') return true; - // check if ranges in input are valid means follow pattern - - const matches = value.match(/\b\d+-\d+\b/g); - if (Array.isArray(matches)) { - for (const match of matches) { - const split = match.split('-'); - if (split.length !== 2) { - return false; - } - const start = split[0]; - const end = split[1]; - if (start >= end) { - return false; - } - } - } - return true; - }, LL.form.error.invalid()); - -function dottedMaskToPrefix(mask: string): number | null { - if (!mask.includes('.')) return Number(mask); - const maskTest = - /^(?:255\.255\.255\.(?:0|128|192|224|240|248|252|254|255)|255\.255\.(?:0|128|192|224|240|248|252|254|255)\.0|255\.(?:0|128|192|224|240|248|252|254|255)\.0\.0|(?:0|128|192|224|240|248|252|254|255)\.0\.0\.0)$/; - if (!maskTest.test(mask)) return null; - if (mask.split('.').length !== 4) return null; - const parts = mask.split('.').map(Number); - if (parts.length !== 4 || parts.some((part) => part < 0 || part > 255)) return null; - - const binary = parts.map((part) => part.toString(2).padStart(8, '0')).join(''); - if (!/^1*0*$/.test(binary)) return null; - - return binary.indexOf('0') === -1 ? 32 : binary.indexOf('0'); -} - -const validateIpPart = (input: string): ipaddr.IPv4 | ipaddr.IPv6 | null => { - if (!ipaddr.isValid(input)) return null; - const ip = ipaddr.parse(input); - if (ip.kind() === 'ipv6') { - return ip; - } - if (!patternStrictIpV4.test(input)) return null; - return ip; -}; - -function parseSubnet(input: string): [ipaddr.IPv4 | ipaddr.IPv6, number] | null { - const [ipPart, maskPart] = input.split('/'); - if (!ipaddr.isValid(ipPart) || !maskPart) return null; - const ip = ipaddr.parse(ipPart); - const kind = ip.kind(); - - if (kind === 'ipv6') { - const prefix = parseInt(maskPart, 10); - if (typeof prefix !== 'number' || Number.isNaN(prefix)) { - return null; - } - return [ip, prefix]; - } - if (!patternStrictIpV4.test(ipPart)) return null; - - const prefix = dottedMaskToPrefix(maskPart); - if (prefix === null) return null; - - return [ip, prefix]; -} - -function isValidIpOrCidr(input: string): boolean { - try { - if (input.includes('/')) { - const parsed = parseSubnet(input); - if (!parsed) return false; - const [ip, mask] = parsed; - const cidr = ipaddr.parseCIDR(`${ip.toString()}/${mask}`); - return cidr[0] !== undefined && typeof cidr[1] === 'number'; - } else { - return validateIpPart(input) !== null; - } - } catch { - return false; - } -} - -export const aclDestinationValidator = (LL: TranslationFunctions) => - z.string().refine((value: string) => { - if (value === '') return true; - - const entries = value.split(',').map((s) => s.trim()); - - for (const entry of entries) { - if (entry.includes('-')) { - const [start, end] = entry.split('-').map((s) => s.trim()); - - // reject CIDR notation used in ranges - if (start.includes('/') || end.includes('/')) return false; - - if (!ipaddr.isValid(start) || !ipaddr.isValid(end)) return false; - - const startAddr = ipaddr.parse(start); - const endAddr = ipaddr.parse(end); - - // reject different ip versions in ranges - if (startAddr.kind() !== endAddr.kind()) return false; - - // reject invalid order in ranges - if (startAddr.toByteArray().join('.') > endAddr.toByteArray().join('.')) { - return false; - } - } else { - if (!isValidIpOrCidr(entry)) return false; - } - } - - return true; - }, LL.form.error.invalid()); diff --git a/web/src/pages/activity-log/ActivityLogPage.tsx b/web/src/pages/activity-log/ActivityLogPage.tsx deleted file mode 100644 index 7f1b42b45..000000000 --- a/web/src/pages/activity-log/ActivityLogPage.tsx +++ /dev/null @@ -1,319 +0,0 @@ -import './style.scss'; - -import { type QueryKey, useInfiniteQuery, useQuery } from '@tanstack/react-query'; -import dayjs from 'dayjs'; -import { range } from 'lodash-es'; -import { useMemo, useState } from 'react'; -import Skeleton from 'react-loading-skeleton'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { FilterButton } from '../../shared/components/Layout/buttons/FilterButton/FilterButton'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { FilterGroupsModal } from '../../shared/components/modals/FilterGroupsModal/FilterGroupsModal'; -import type { FilterGroupsModalFilter } from '../../shared/components/modals/FilterGroupsModal/types'; -import { Button } from '../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonSize } from '../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../shared/defguard-ui/components/Layout/Card/Card'; -import { ListItemCount } from '../../shared/defguard-ui/components/Layout/ListItemCount/ListItemCount'; -import { NoData } from '../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { Search } from '../../shared/defguard-ui/components/Layout/Search/Search'; -import { ListSortDirection } from '../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { isPresent } from '../../shared/defguard-ui/utils/isPresent'; -import { useAuthStore } from '../../shared/hooks/store/useAuthStore'; -import useApi from '../../shared/hooks/useApi'; -import type { ActivityLogSortKey } from '../../shared/types'; -import { ActivityList } from './components/ActivityList'; -import { ActivityTimeRangeModal } from './components/ActivityTimeRangeModal'; -import { - type ActivityLogEventType, - type ActivityLogModule, - activityLogEventTypeValues, - activityLogModuleValues, -} from './types'; - -export const ActivityLogPage = () => { - return ( - - - - ); -}; - -const applyFilterArray = (val: Array | undefined | T): undefined | Array => { - if (val && Array.isArray(val) && val.length > 0) { - return val; - } -}; - -const applyFilter = (val: T | undefined | null): T | undefined => { - if (isPresent(val)) { - return val; - } -}; - -const applySearch = (val: string): string | undefined => { - if (val.length > 0) return val; - return undefined; -}; - -type Filters = 'event' | 'username' | 'module' | 'location'; - -const PageContent = () => { - const [activeFilters, setActiveFilters] = useState< - Record> - >({ - event: [], - module: [], - username: [], - location: [], - }); - const [searchValue, setSearchValue] = useState(''); - const [filtersModalOpen, setFiltersModalOpen] = useState(false); - const [from, setForm] = useState(dayjs.utc().startOf('M').toISOString()); - const [until, setUntil] = useState(null); - const [timeSelectionModalOpen, setTimeSelectionModal] = useState(false); - const [sortKey, setSortKey] = useState('timestamp'); - const [sortDirection, setSortDirection] = useState( - ListSortDirection.DESC, - ); - const isAdmin = useAuthStore((s) => s.user?.is_admin ?? false); - - const activeFiltersCount = useMemo( - () => Object.values(activeFilters).flat().length, - [activeFilters], - ); - - const { LL } = useI18nContext(); - const localLL = LL.activity; - - const { - activityLog: { getActivityLog }, - user: { getUsers }, - network: { getNetworks }, - } = useApi(); - - const { data: users } = useQuery({ - queryFn: getUsers, - queryKey: ['user'], - enabled: isAdmin, - }); - - const { data: locations } = useQuery({ - queryFn: getNetworks, - queryKey: ['location'], - }); - - const queryKey = useMemo( - (): QueryKey => [ - 'activity_log', - { - sortDirection, - sortKey, - from, - until, - searchValue, - filters: activeFilters, - }, - ], - [activeFilters, from, searchValue, sortDirection, sortKey, until], - ); - - const { - data, - hasNextPage, - isFetchingNextPage, - fetchNextPage, - isLoading, - // hasPreviousPage, - // fetchPreviousPage, - } = useInfiniteQuery({ - queryKey, - initialPageParam: 1, - queryFn: ({ pageParam }) => - getActivityLog({ - page: pageParam, - event: applyFilterArray(activeFilters.event as ActivityLogEventType[]), - module: applyFilterArray(activeFilters.module as ActivityLogModule[]), - username: applyFilterArray(activeFilters.username as string[]), - location: applyFilterArray(activeFilters.location as string[]), - sort_order: sortDirection, - sort_by: sortKey, - search: applySearch(searchValue), - from: applyFilter(from), - until: applyFilter(until), - }), - getNextPageParam: (lastPage) => lastPage?.pagination?.next_page, - getPreviousPageParam: (page) => { - if (page.pagination.current_page !== 1) { - return page.pagination.current_page - 1; - } - return undefined; - }, - }); - - const filterOptions = useMemo(() => { - const res: Record = {}; - if (users) { - res.users = { - label: 'Users', - identifier: 'username', - order: 3, - items: users.map((user) => ({ - label: `${user.first_name} ${user.last_name} (${user.username})`, - searchValues: [user.first_name, user.username, user.last_name, user.email], - value: user.username, - })), - }; - } - if (locations) { - res.locations = { - label: 'Locations', - identifier: 'location', - order: 4, - items: locations.map((location) => ({ - label: location.name, - searchValues: [location.name], - value: location.name, - })), - }; - } - res.module = { - identifier: 'module', - label: 'Module', - order: 2, - items: activityLogModuleValues.map((activityLogModule) => { - const translation = LL.enums.activityLogModule[activityLogModule](); - return { - label: translation, - searchValues: [translation], - value: activityLogModule, - }; - }), - }; - res.event = { - identifier: 'event', - label: 'Event', - order: 1, - items: activityLogEventTypeValues.map((eventType) => { - const translation = LL.enums.activityLogEventType[eventType](); - return { - label: translation, - searchValues: [translation], - value: eventType, - }; - }), - }; - return res; - }, [LL.enums, users, locations]); - - const activityData = useMemo(() => { - if (data) { - return data.pages.flatMap((page) => page.data); - } - return undefined; - }, [data]); - - return ( - <> -
-

{localLL.title()}

-
-
-
-

{localLL.list.allLabel()}

- -
- { - setSearchValue(search); - }} - /> - { - setFiltersModalOpen(true); - }} - /> -
-
- - {isPresent(activityData) && activityData.length > 0 && ( - { - setSortDirection(sortDirection); - setSortKey(sortKey as ActivityLogSortKey); - }} - data={activityData} - hasNextPage={hasNextPage} - isFetchingNextPage={isFetchingNextPage} - onNextPage={() => { - void fetchNextPage(); - }} - /> - )} - {!isPresent(activityData) && isLoading && ( -
- {range(10).map((index) => ( - - ))} -
- )} - {(activeFiltersCount > 0 || searchValue.length > 0) && - isPresent(activityData) && - activityData.length === 0 && } -
-
- { - setFiltersModalOpen(false); - }} - onSubmit={(state) => { - setActiveFilters(state as Record); - setFiltersModalOpen(false); - }} - /> - { - setForm(from); - setUntil(until); - }} - /> - - ); -}; diff --git a/web/src/pages/activity-log/components/ActivityList.tsx b/web/src/pages/activity-log/components/ActivityList.tsx deleted file mode 100644 index 552a1a491..000000000 --- a/web/src/pages/activity-log/components/ActivityList.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import { useVirtualizer } from '@tanstack/react-virtual'; -import dayjs from 'dayjs'; -import { useMemo, useRef } from 'react'; -import { useInView } from 'react-intersection-observer'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { ListHeader } from '../../../shared/components/Layout/ListHeader/ListHeader'; -import type { ListHeaderColumnConfig } from '../../../shared/components/Layout/ListHeader/types'; -import { ListCellText } from '../../../shared/defguard-ui/components/Layout/ListCellText/ListCellText'; -import { LoaderSpinner } from '../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import type { ListSortDirection } from '../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import type { ActivityLogEvent, ActivityLogSortKey } from '../../../shared/types'; - -type Props = { - data: ActivityLogEvent[]; - hasNextPage: boolean; - isFetchingNextPage: boolean; - sortKey: ActivityLogSortKey; - sortDirection: ListSortDirection; - onNextPage: () => void; - onSortChange: ( - sortKey: keyof ActivityLogEvent, - sortDirection: ListSortDirection, - ) => void; -}; - -export const ActivityList = ({ - data, - isFetchingNextPage, - hasNextPage, - sortDirection, - sortKey, - onSortChange, - onNextPage, -}: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.activity.list; - const headersLL = localLL.headers; - const { ref: infiniteLoadMoreElement } = useInView({ - threshold: 0, - trackVisibility: false, - onChange: (inView) => { - if (inView) { - onNextPage(); - } - }, - }); - const parentRef = useRef(null); - const count = data.length; - const virtualizer = useVirtualizer({ - count, - estimateSize: () => 40, - getScrollElement: () => parentRef.current, - enabled: true, - paddingStart: 45, - paddingEnd: 10, - }); - const items = virtualizer.getVirtualItems(); - const listHeaders = useMemo( - (): ListHeaderColumnConfig[] => [ - { - label: headersLL.date(), - enabled: true, - key: 'date', - sortKey: 'timestamp', - }, - { - label: headersLL.user(), - key: 'user', - }, - { - label: headersLL.ip(), - key: 'ip', - }, - { - label: headersLL.location(), - key: 'location', - }, - { - label: headersLL.event(), - key: 'event', - }, - { - label: headersLL.module(), - key: 'module', - }, - { - label: headersLL.device(), - key: 'device', - }, - { - label: headersLL.description(), - key: 'description', - }, - ], - [headersLL], - ); - return ( -
-
- -
- {items.map((virtualRow) => { - const activity = data[virtualRow.index]; - return ( -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- ); - })} - {hasNextPage && ( -
- {isFetchingNextPage && } -
- )} -
-
-
- ); -}; diff --git a/web/src/pages/activity-log/components/ActivityTimeRangeModal.tsx b/web/src/pages/activity-log/components/ActivityTimeRangeModal.tsx deleted file mode 100644 index 34c9f8323..000000000 --- a/web/src/pages/activity-log/components/ActivityTimeRangeModal.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { FormDateInput } from '../../../shared/components/Layout/DateInput/FormDateInput'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; - -type Props = { - isOpen: boolean; - onOpenChange: (val: boolean) => void; - // Time in UTC ISO without timezone string - activityFrom: string | null; - activityUntil: string | null; - onChange: (from: string | null, until: string | null) => void; -}; - -export const ActivityTimeRangeModal = (props: Props) => { - const { LL } = useI18nContext(); - return ( - { - props.onOpenChange(false); - }} - > - - - ); -}; - -const ModalContent = ({ onOpenChange, activityFrom, activityUntil, onChange }: Props) => { - const { LL } = useI18nContext(); - const schema = useMemo( - () => - z.object({ - from: z.string().nullable(), - until: z.string().nullable(), - }), - [], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo( - (): FormFields => ({ - from: activityFrom, - until: activityUntil, - }), - [activityFrom, activityUntil], - ); - - const { control, handleSubmit } = useForm({ - resolver: zodResolver(schema), - mode: 'all', - defaultValues, - }); - - const handleValidSubmit: SubmitHandler = (values) => { - onChange(values.from, values.until); - onOpenChange(false); - }; - - return ( -
- - -
-
- - ); -}; diff --git a/web/src/pages/activity-log/style.scss b/web/src/pages/activity-log/style.scss deleted file mode 100644 index aecfdc547..000000000 --- a/web/src/pages/activity-log/style.scss +++ /dev/null @@ -1,168 +0,0 @@ -#activity-log-page { - h1 { - @include typography(app-title); - } - - h2 { - @include typography(app-body-1); - } - - .page-header { - display: flex; - flex-flow: row; - gap: var(--spacing-m); - align-items: center; - justify-content: flex-start; - padding-bottom: var(--spacing-l); - - .search { - height: 40px; - width: 100%; - max-width: 350px; - } - } - - .activity-list-skeleton { - width: 100%; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - max-height: 100%; - overflow: hidden; - - .react-loading-skeleton { - height: 40px; - } - } -} - -@mixin list-sizing() { - grid-template-columns: 150px 120px 150px 150px 300px 100px 200px minmax(300px, 1fr); - justify-content: space-between; - column-gap: var(--spacing-xs); - - .cell { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - - &.select-cell { - .interaction-box { - width: 18px; - height: 18px; - } - } - } -} - -#activity-list { - & > .top { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - row-gap: var(--spacing-xs); - padding-bottom: var(--spacing-m); - - h2 { - padding-right: 10px; - } - - .controls { - display: flex; - flex-flow: row; - column-gap: var(--spacing-xs); - margin-left: auto; - } - } -} - -#activity-list-card { - padding: var(--spacing-s) 15px; - width: 100%; - max-width: 100%; - - @include media-breakpoint-up(lg) { - min-height: min(600px, 75dvh); - } - - .list-headers { - position: sticky; - top: 0; - z-index: 1; - box-sizing: border-box; - background-color: var(--surface-default-modal); - height: 40px; - width: unset; - min-width: 100%; - padding-left: var(--spacing-xs); - - .cell.empty { - display: none; - } - - @include list-sizing(); - } - - .virtual-list { - overflow: auto; - contain: strict; - width: 100%; - max-width: 100%; - max-height: 610px; - height: 600px; - padding-right: 15px; - box-sizing: border-box; - scrollbar-gutter: stable; - - .end-row { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - height: 40px; - width: 100%; - } - - .list-row { - display: grid; - max-width: 100%; - @include list-sizing(); - height: 40px; - background-color: var(--surface-default-modal); - padding-left: var(--spacing-xs); - - &:hover { - background-color: var(--surface-button); - } - - .cell { - max-width: 100%; - overflow: hidden; - - p { - color: var(--text-button-primary); - @include typography(app-code); - } - } - } - } -} - -#activity-time-selection-modal-form { - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - - & > * { - width: 100%; - } - - .controls { - display: grid; - grid-template-columns: 1fr 1fr; - width: 100%; - column-gap: var(--spacing-xs); - } -} diff --git a/web/src/pages/activity-log/types.ts b/web/src/pages/activity-log/types.ts deleted file mode 100644 index 3485b9243..000000000 --- a/web/src/pages/activity-log/types.ts +++ /dev/null @@ -1,163 +0,0 @@ -export type ActivityLogModule = 'defguard' | 'client' | 'vpn' | 'enrollment'; - -export const activityLogModuleValues: ActivityLogModule[] = [ - 'defguard', - 'client', - 'enrollment', - 'vpn', -]; - -export type ActivityLogEventType = - | 'user_login' - | 'user_login_failed' - | 'user_mfa_login' - | 'user_mfa_login_failed' - | 'recovery_code_used' - | 'user_logout' - | 'user_added' - | 'user_modified' - | 'user_removed' - | 'user_groups_modified' - | 'mfa_disabled' - | 'user_mfa_disabled' - | 'mfa_totp_enabled' - | 'mfa_totp_disabled' - | 'mfa_email_enabled' - | 'mfa_email_disabled' - | 'mfa_security_key_added' - | 'mfa_security_key_removed' - | 'device_added' - | 'device_modified' - | 'device_removed' - | 'network_device_added' - | 'network_device_modified' - | 'network_device_removed' - | 'activity_log_stream_created' - | 'activity_log_stream_modified' - | 'activity_log_stream_removed' - | 'vpn_client_connected' - | 'vpn_client_disconnected' - | 'vpn_client_connected_mfa' - | 'vpn_client_disconnected_mfa' - | 'vpn_client_mfa_failed' - | 'enrollment_token_added' - | 'enrollment_started' - | 'enrollment_device_added' - | 'enrollment_completed' - | 'password_reset_requested' - | 'password_reset_started' - | 'password_reset_completed' - | 'vpn_location_added' - | 'vpn_location_removed' - | 'vpn_location_modified' - | 'api_token_added' - | 'api_token_removed' - | 'api_token_renamed' - | 'open_id_app_added' - | 'open_id_app_removed' - | 'open_id_app_modified' - | 'open_id_app_state_changed' - | 'open_id_provider_removed' - | 'open_id_provider_modified' - | 'settings_updated' - | 'settings_updated_partial' - | 'settings_default_branding_restored' - | 'groups_bulk_assigned' - | 'group_added' - | 'group_modified' - | 'group_removed' - | 'group_member_added' - | 'group_member_removed' - | 'group_members_modified' - | 'web_hook_added' - | 'web_hook_modified' - | 'web_hook_removed' - | 'web_hook_state_changed' - | 'authentication_key_added' - | 'authentication_key_removed' - | 'authentication_key_renamed' - | 'password_changed' - | 'password_changed_by_admin' - | 'password_reset' - | 'client_configuration_token_added' - | 'user_snat_binding_added' - | 'user_snat_binding_modified' - | 'user_snat_binding_removed'; - -export const activityLogEventTypeValues: ActivityLogEventType[] = [ - 'user_login', - 'user_login_failed', - 'user_mfa_login', - 'user_mfa_login_failed', - 'user_groups_modified', - 'recovery_code_used', - 'user_logout', - 'user_added', - 'user_modified', - 'user_removed', - 'mfa_disabled', - 'user_mfa_disabled', - 'mfa_totp_enabled', - 'mfa_totp_disabled', - 'mfa_email_enabled', - 'mfa_email_disabled', - 'mfa_security_key_added', - 'mfa_security_key_removed', - 'device_added', - 'device_modified', - 'device_removed', - 'network_device_added', - 'network_device_modified', - 'network_device_removed', - 'activity_log_stream_created', - 'activity_log_stream_modified', - 'activity_log_stream_removed', - 'vpn_client_connected', - 'vpn_client_disconnected', - 'vpn_client_connected_mfa', - 'vpn_client_disconnected_mfa', - 'vpn_client_mfa_failed', - 'enrollment_token_added', - 'enrollment_started', - 'enrollment_device_added', - 'enrollment_completed', - 'password_reset_requested', - 'password_reset_started', - 'password_reset_completed', - 'vpn_location_added', - 'vpn_location_removed', - 'vpn_location_modified', - 'api_token_added', - 'api_token_removed', - 'api_token_renamed', - 'open_id_app_added', - 'open_id_app_removed', - 'open_id_app_modified', - 'open_id_app_state_changed', - 'open_id_provider_removed', - 'open_id_provider_modified', - 'settings_updated', - 'settings_updated_partial', - 'settings_default_branding_restored', - 'groups_bulk_assigned', - 'group_added', - 'group_modified', - 'group_removed', - 'group_member_added', - 'group_member_removed', - 'group_members_modified', - 'web_hook_added', - 'web_hook_modified', - 'web_hook_removed', - 'web_hook_state_changed', - 'authentication_key_added', - 'authentication_key_removed', - 'authentication_key_renamed', - 'password_changed', - 'password_changed_by_admin', - 'password_reset', - 'client_configuration_token_added', - 'user_snat_binding_added', - 'user_snat_binding_modified', - 'user_snat_binding_removed', -]; diff --git a/web/src/pages/addDevice/AddDevicePage.tsx b/web/src/pages/addDevice/AddDevicePage.tsx deleted file mode 100644 index 8366ab960..000000000 --- a/web/src/pages/addDevice/AddDevicePage.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import './style.scss'; - -import { useEffect } from 'react'; -import { useNavigate } from 'react-router'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { ArrowSingle } from '../../shared/defguard-ui/components/icons/ArrowSingle/ArrowSingle'; -import { - ArrowSingleDirection, - ArrowSingleSize, -} from '../../shared/defguard-ui/components/icons/ArrowSingle/types'; -import { Button } from '../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../shared/defguard-ui/components/Layout/Button/types'; -import { useAppStore } from '../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../shared/hooks/store/useAuthStore'; -import { useEnterpriseUpgradeStore } from '../../shared/hooks/store/useEnterpriseUpgradeStore'; -import useApi from '../../shared/hooks/useApi'; -import { useAddDevicePageStore } from './hooks/useAddDevicePageStore'; -import { AddDeviceClientConfigurationStep } from './steps/AddDeviceClientConfigurationStep/AddDeviceClientConfigurationStep'; -import { AddDeviceConfigStep } from './steps/AddDeviceConfigStep/AddDeviceConfigStep'; -import { AddDeviceSetupMethodStep } from './steps/AddDeviceSetupMethodStep/AddDeviceSetupMethodStep'; -import { AddDeviceSetupStep } from './steps/AddDeviceSetupStep/AddDeviceSetupStep'; -import { AddDeviceNavigationEvent, AddDeviceStep } from './types'; - -const finalSteps: AddDeviceStep[] = [ - AddDeviceStep.NATIVE_CONFIGURATION, - AddDeviceStep.CLIENT_CONFIGURATION, -]; - -export const AddDevicePage = () => { - const { LL } = useI18nContext(); - const pageLL = LL.addDevicePage; - const navigate = useNavigate(); - const { getAppInfo } = useApi(); - - const userData = useAddDevicePageStore((state) => state.userData); - const isAdmin = useAuthStore((s) => s.user?.is_admin ?? false); - const setAppStore = useAppStore((s) => s.setState); - const showUpgradeToast = useEnterpriseUpgradeStore((s) => s.show); - const currentStep = useAddDevicePageStore((state) => state.currentStep); - const [navSubject, resetStore, setStep] = useAddDevicePageStore( - (s) => [s.navigationSubject, s.reset, s.setStep], - shallow, - ); - - const isFinalStep = finalSteps.includes(currentStep); - - useEffect(() => { - if (!userData) { - navigate('/', { replace: true }); - } - }, [navigate, userData]); - - useEffect(() => { - const sub = navSubject.subscribe((event) => { - if ( - event === AddDeviceNavigationEvent.NEXT && - [AddDeviceStep.CLIENT_CONFIGURATION, AddDeviceStep.NATIVE_CONFIGURATION].includes( - currentStep, - ) && - userData - ) { - if (isAdmin) { - void getAppInfo().then((resp) => { - setAppStore({ appInfo: resp }); - if (resp.license_info.any_limit_exceeded) { - showUpgradeToast(); - } - }); - } - navigate(userData.originRoutePath, { replace: true }); - setTimeout(() => { - resetStore(); - }, 250); - } - if (event === AddDeviceNavigationEvent.BACK) { - if (currentStep === AddDeviceStep.NATIVE_CHOOSE_METHOD) { - setStep(AddDeviceStep.CHOOSE_METHOD); - } - } - }); - return () => { - sub.unsubscribe(); - }; - }, [ - currentStep, - getAppInfo, - isAdmin, - navSubject, - navigate, - resetStore, - setAppStore, - setStep, - showUpgradeToast, - userData, - ]); - - return ( - -
-
-

{pageLL.title()}

-
-
-
- {steps[currentStep]} -
-
- ); -}; - -const steps = { - [AddDeviceStep.CHOOSE_METHOD]: , - [AddDeviceStep.NATIVE_CHOOSE_METHOD]: , - [AddDeviceStep.NATIVE_CONFIGURATION]: , - [AddDeviceStep.CLIENT_CONFIGURATION]: , -}; diff --git a/web/src/pages/addDevice/hooks/useAddDevicePageStore.tsx b/web/src/pages/addDevice/hooks/useAddDevicePageStore.tsx deleted file mode 100644 index 583a7f3e3..000000000 --- a/web/src/pages/addDevice/hooks/useAddDevicePageStore.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { omit } from 'lodash-es'; -import { Subject } from 'rxjs'; -import { createJSONStorage, persist } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { DeviceConfigsCardNetworkInfo } from '../../../shared/components/network/DeviceConfigsCard/types'; -import type { AddDeviceResponseDevice } from '../../../shared/types'; -import { type AddDeviceNavigationEvent, AddDeviceStep } from '../types'; - -const defaultValues: StoreValues = { - navigationSubject: new Subject(), - currentStep: AddDeviceStep.CHOOSE_METHOD, - userData: undefined, - loading: false, - publicKey: undefined, - privateKey: undefined, - device: undefined, - networks: undefined, - clientSetup: undefined, -}; - -export const useAddDevicePageStore = createWithEqualityFn()( - persist( - (set) => ({ - ...defaultValues, - reset: () => set(defaultValues), - init: (userData) => { - set({ ...defaultValues, userData }); - }, - setState: (values) => set({ ...values }), - setStep: (step, values) => { - set({ ...values, currentStep: step }); - }, - }), - { - name: 'add-device-store', - partialize: (store) => omit(store, ['navigationSubject', 'loading']), - storage: createJSONStorage(() => sessionStorage), - }, - ), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - navigationSubject: Subject; - currentStep: AddDeviceStep; - loading: boolean; - privateKey?: string; - publicKey?: string; - device?: AddDeviceResponseDevice; - networks?: DeviceConfigsCardNetworkInfo[]; - userData?: { - id: number; - username: string; - reservedDevices: string[]; - email: string; - // this should be current path that user entered add-device page from, due to brave blocking history relative back doesn't work correctly. - originRoutePath: string; - }; - clientSetup?: { - token: string; - url: string; - }; -}; - -type StoreMethods = { - init: (userData: StoreValues['userData']) => void; - reset: () => void; - setState: (values: Partial) => void; - setStep: (step: AddDeviceStep, values?: Partial) => void; -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/AddDeviceClientConfigurationStep.tsx b/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/AddDeviceClientConfigurationStep.tsx deleted file mode 100644 index eaf9bf391..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/AddDeviceClientConfigurationStep.tsx +++ /dev/null @@ -1,306 +0,0 @@ -import './style.scss'; - -import { useEffect } from 'react'; -import QRCode from 'react-qr-code'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { OpenDesktopClientButton } from '../../../../shared/components/Layout/buttons/OpenDesktopClientButton/OpenDesktopClientButton'; -import { RenderMarkdown } from '../../../../shared/components/Layout/RenderMarkdown/RenderMarkdown'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { CopyField } from '../../../../shared/defguard-ui/components/Layout/CopyField/CopyField'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { isPresent } from '../../../../shared/defguard-ui/utils/isPresent'; -import { useClipboard } from '../../../../shared/hooks/useClipboard'; -import { externalLink } from '../../../../shared/links'; -import { useAddDevicePageStore } from '../../hooks/useAddDevicePageStore'; -import { AddDeviceStep } from '../../types'; -import { enrollmentToImportToken } from '../../utils/enrollmentToToken'; - -export const AddDeviceClientConfigurationStep = () => { - const { LL } = useI18nContext(); - const localLL = LL.addDevicePage.steps.client; - const clientData = useAddDevicePageStore((s) => s.clientSetup); - const clientSetup = useAddDevicePageStore((s) => s.clientSetup); - const tokenValue = useAddDevicePageStore((s) => - s.clientSetup - ? enrollmentToImportToken(s.clientSetup.url, s.clientSetup.token) - : null, - ); - const setStep = useAddDevicePageStore((s) => s.setStep, shallow); - const { writeToClipboard } = useClipboard(); - - useEffect(() => { - if (!isPresent(tokenValue)) { - setStep(AddDeviceStep.CHOOSE_METHOD); - } - }, [setStep, tokenValue]); - - if (!isPresent(tokenValue) || !isPresent(clientData)) return null; - - return ( - -

{localLL.title()}

- {isPresent(clientSetup) && ( - <> - -
- -
- - )} - - - - {/* { - void writeToClipboard(value, localLL.tokenCopy()); - }} - /> */} - { - void writeToClipboard(value, localLL.tokenCopy()); - }} - /> - { - void writeToClipboard(value, localLL.tokenCopy()); - }} - /> - -
- -
-
-

{localLL.qrDescription()}

-
- -
- ); -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/style.scss b/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/style.scss deleted file mode 100644 index df62be874..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceClientConfigurationStep/style.scss +++ /dev/null @@ -1,50 +0,0 @@ -#add-device-client-configuration { - .message-box.spacer { - padding-bottom: var(--spacing-s); - } - - .qr-description { - color: var(--text-body-secondary); - text-align: center; - max-width: 480px; - user-select: none; - @include typography(app-input); - } - - .copy-field.spacer { - &:not(:last-of-type) { - padding-bottom: var(--spacing-s); - } - } - - .row { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-xs); - - &:not(:last-child) { - padding-bottom: var(--spacing-s); - } - - a { - display: flex; - cursor: pointer; - user-select: none; - } - } - - .links:first-of-type { - padding-bottom: var(--spacing-s); - } - - .qr { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - padding: var(--spacing-m) var(--spacing-s) var(--spacing-l); - box-sizing: border-box; - } -} diff --git a/web/src/pages/addDevice/steps/AddDeviceConfigStep/AddDeviceConfigStep.tsx b/web/src/pages/addDevice/steps/AddDeviceConfigStep/AddDeviceConfigStep.tsx deleted file mode 100644 index ca397de7e..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceConfigStep/AddDeviceConfigStep.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; -import { isUndefined } from 'lodash-es'; -import { useEffect, useMemo } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { DeviceConfigsCard } from '../../../../shared/components/network/DeviceConfigsCard/DeviceConfigsCard'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Input } from '../../../../shared/defguard-ui/components/Layout/Input/Input'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { useAddDevicePageStore } from '../../hooks/useAddDevicePageStore'; -import { AddDeviceStep } from '../../types'; - -enum SetupMode { - AUTO, - MANUAL, -} - -export const AddDeviceConfigStep = () => { - const { LL } = useI18nContext(); - const localLL = LL.addDevicePage.steps.configDevice; - - const [userData, device, publicKey, privateKey, networks] = useAddDevicePageStore( - (state) => [ - state.userData, - state.device, - state.publicKey, - state.privateKey, - state.networks, - ], - shallow, - ); - - const setStep = useAddDevicePageStore((state) => state.setStep, shallow); - - const setupMode = isUndefined(privateKey) ? SetupMode.MANUAL : SetupMode.AUTO; - - const getWarningMessageContent = useMemo(() => { - if (setupMode === SetupMode.AUTO) { - return parse(localLL.helpers.warningAutoMode()); - } - return parse(localLL.helpers.warningManualMode()); - }, [localLL.helpers, setupMode]); - - useEffect(() => { - if (!device || !userData || !publicKey || !networks) { - setStep(AddDeviceStep.NATIVE_CHOOSE_METHOD); - } - }, [device, networks, publicKey, setStep, userData]); - - if (!device || !userData || !publicKey || !networks) return null; - - return ( - -

{localLL.title()}

- {getWarningMessageContent} - { - return; - }} - disabled={true} - /> -
-

{localLL.qrInfo()}

-
- {networks.length > 0 && ( - - )} - {networks.length === 0 && ( - - {localLL.helpers.warningNoNetworks()} - - )} -
- ); -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceConfigStep/style.scss b/web/src/pages/addDevice/steps/AddDeviceConfigStep/style.scss deleted file mode 100644 index fd2175705..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceConfigStep/style.scss +++ /dev/null @@ -1,21 +0,0 @@ -@use '@scssutils' as *; - -#add-device-page { - #add-device-config-step { - & > .info { - width: 100%; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - padding-bottom: 30px; - - & > p { - @include typography(app-input); - color: var(--text-body-secondary); - text-align: center; - max-width: 410px; - } - } - } -} diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/AddDeviceSetupMethodStep.tsx b/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/AddDeviceSetupMethodStep.tsx deleted file mode 100644 index 26aa2eb03..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/AddDeviceSetupMethodStep.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import './style.scss'; - -import { useMutation } from '@tanstack/react-query'; -import { useCallback, useEffect, useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { LoaderSpinner } from '../../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import useApi from '../../../../shared/hooks/useApi'; -import { useAddDevicePageStore } from '../../hooks/useAddDevicePageStore'; -import { AddDeviceNavigationEvent, AddDeviceStep } from '../../types'; -import { DeviceSetupMethodCard } from './components/DeviceSetupMethodCard/DeviceSetupMethodCard'; -import { DeviceSetupMethod } from './types'; - -export const AddDeviceSetupMethodStep = () => { - const { - user: { startDesktopActivation }, - } = useApi(); - const { LL } = useI18nContext(); - const localLL = LL.addDevicePage.steps.setupMethod; - - const [setupMethod, setSetupMethod] = useState(AddDeviceStep.CLIENT_CONFIGURATION); - const userData = useAddDevicePageStore((state) => state.userData); - - const enterpriseSettings = useAppStore((state) => state.enterprise_settings); - const [navSubject, setPageState, setStep] = useAddDevicePageStore( - (s) => [s.navigationSubject, s.setState, s.setStep], - shallow, - ); - - const { mutate, isPending } = useMutation({ - mutationFn: startDesktopActivation, - onSuccess: (resp) => { - setStep(setupMethod, { - clientSetup: { - url: resp.enrollment_url, - token: resp.enrollment_token, - }, - }); - }, - }); - - const startActivation = useCallback(() => { - mutate({ - username: userData?.username as string, - send_enrollment_notification: true, - email: userData?.email as string, - }); - }, [mutate, userData?.email, userData?.username]); - - useEffect(() => { - const sub = navSubject.subscribe((event) => { - if (event === AddDeviceNavigationEvent.NEXT) { - switch (setupMethod) { - case AddDeviceStep.NATIVE_CHOOSE_METHOD: - setPageState({ currentStep: AddDeviceStep.NATIVE_CHOOSE_METHOD }); - break; - case AddDeviceStep.CLIENT_CONFIGURATION: - startActivation(); - break; - } - } - }); - return () => { - sub.unsubscribe(); - }; - }, [navSubject, setPageState, setupMethod, startActivation]); - - useEffect(() => { - if ( - enterpriseSettings?.only_client_activation && - setupMethod === AddDeviceStep.NATIVE_CHOOSE_METHOD - ) { - setSetupMethod(AddDeviceStep.CLIENT_CONFIGURATION); - } - }, [enterpriseSettings?.only_client_activation, setupMethod]); - - return ( - <> - {!isPending ? ( - -

{localLL.title()}

- -
- { - setSetupMethod(AddDeviceStep.CLIENT_CONFIGURATION); - }} - /> - { - setSetupMethod(AddDeviceStep.NATIVE_CHOOSE_METHOD); - }} - /> -
-
- ) : ( -
- -
- )} - - ); -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/DeviceSetupMethodCard.tsx b/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/DeviceSetupMethodCard.tsx deleted file mode 100644 index cb1dbecc5..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/DeviceSetupMethodCard.tsx +++ /dev/null @@ -1,365 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { type PropsWithChildren, type ReactNode, useId, useMemo } from 'react'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import { DeviceSetupMethod } from '../../types'; - -type StandaloneConfig = { - icon: ReactNode; - title: string; - description: string; - testId: string; - extras?: ReactNode; -}; - -type Props = { - active: boolean; - onClick: () => void; - methodType?: DeviceSetupMethod; - custom?: StandaloneConfig; - disabled?: boolean; -}; - -type ContentConfiguration = { - title: string; - description: string; - testId: string; -} & Pick & - PropsWithChildren; - -export const DeviceSetupMethodCard = ({ - methodType, - active, - onClick, - custom, - disabled = false, -}: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.addDevicePage.steps.setupMethod.methods; - - const [title, description, testId] = useMemo(() => { - if (!isPresent(custom) && methodType) { - const testId = `add-device-method-${methodType.valueOf()}`; - switch (methodType) { - case DeviceSetupMethod.CLIENT: - return [localLL.client.title(), localLL.client.description(), testId]; - case DeviceSetupMethod.NATIVE_WG: - return [localLL.wg.title(), localLL.wg.description(), testId]; - default: - throw Error('Unimplemented setup method supplied to method card.'); - } - } - if (isPresent(custom)) { - return [custom.title, custom.description, custom.testId]; - } - throw Error('Bad props for DeviceSetupMethodCard'); - }, [custom, localLL.client, localLL.wg, methodType]); - - return ( - - {methodType === DeviceSetupMethod.CLIENT && ( - <> -
- - -
-
- -
- - )} - {methodType === DeviceSetupMethod.NATIVE_WG && ( -
- -
- )} - {isPresent(custom) && ( - <> -
{custom.icon}
- {custom.extras} - - )} -
- ); -}; - -const Content = ({ - active, - description, - onClick, - testId, - title, - children, - disabled = false, -}: ContentConfiguration) => { - return ( -
{ - if (!disabled) { - onClick?.(); - } - }} - > -

{title}

-

{description}

- {children} -
- ); -}; - -const PhoneSvg = () => { - return ( - - - - - ); -}; - -const DesktopSvg = () => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -const DefguardLogo = () => { - const id = useId(); - return ( - - - - - - - - - - - ); -}; - -const WireguardLogo = () => { - return ( - - - - - - - - - - - ); -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/style.scss b/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/style.scss deleted file mode 100644 index b48c11c67..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/style.scss +++ /dev/null @@ -1,67 +0,0 @@ -.device-method-card { - width: 100%; - display: flex; - flex-flow: column; - box-sizing: border-box; - align-items: center; - justify-content: flex-start; - background-color: var(--surface-frame-bg); - border-radius: 15px; - padding: var(--spacing-l) var(--spacing-s); - box-shadow: var(--box-shadow); - opacity: 1; - cursor: pointer; - outline: 0px solid transparent; - transition-property: outline, opacity; - - @include animate-standard; - - &:not(.active):not(.disabled):hover { - outline: 1px solid var(--surface-main-primary); - } - - &.active { - outline: 3px solid var(--surface-main-primary); - } - - &.disabled { - cursor: not-allowed; - opacity: 0.5; - } - - .title { - text-align: center; - padding-bottom: var(--spacing-s); - @include typography(app-body-1); - } - - .description { - text-align: center; - max-width: 280px; - color: var(--text-body-tertiary); - padding-bottom: var(--spacing-m); - - @include typography(welcome-h2); - } - - & > .icon { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-s); - width: 100%; - - &:first-of-type { - padding-bottom: var(--spacing-l); - } - } - - .wg-icon { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - min-height: 210px; - } -} diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/style.scss b/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/style.scss deleted file mode 100644 index 10ed6ff23..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/style.scss +++ /dev/null @@ -1,45 +0,0 @@ -@use '@scssutils' as *; - -#add-device-page { - #setup-method-step { - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - - .message-box-spacer { - padding-bottom: 0px !important; - } - - & > .title { - @include typography(app-body-1); - user-select: none; - } - - .primary-methods { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; - column-gap: var(--spacing-m); - } - - .native-method { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - - label { - @include typography(app-body-2); - color: var(--text-body-primary); - } - } - } - - #spinner-box { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - min-height: 500px; - } -} diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/types.ts b/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/types.ts deleted file mode 100644 index ce07d7633..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupMethodStep/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum DeviceSetupMethod { - CLIENT = 'client', - NATIVE_WG = 'native-wg', -} diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupStep/AddDeviceSetupStep.tsx b/web/src/pages/addDevice/steps/AddDeviceSetupStep/AddDeviceSetupStep.tsx deleted file mode 100644 index f71c05c16..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupStep/AddDeviceSetupStep.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import parser from 'html-react-parser'; -import { useEffect, useMemo, useRef } from 'react'; -import { type SubmitHandler, useController, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormToggle } from '../../../../shared/defguard-ui/components/Form/FormToggle/FormToggle'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import type { ToggleOption } from '../../../../shared/defguard-ui/components/Layout/Toggle/types'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { externalLink } from '../../../../shared/links'; -import { MutationKeys } from '../../../../shared/mutations'; -import { patternValidWireguardKey } from '../../../../shared/patterns'; -import { QueryKeys } from '../../../../shared/queries'; -import { generateWGKeys } from '../../../../shared/utils/generateWGKeys'; -import { trimObjectStrings } from '../../../../shared/utils/trimObjectStrings'; -import { useAddDevicePageStore } from '../../hooks/useAddDevicePageStore'; -import { - AddDeviceNavigationEvent, - AddDeviceStep, - AddNativeWgDeviceMode, -} from '../../types'; - -export const AddDeviceSetupStep = () => { - const { LL } = useI18nContext(); - const localLL = LL.addDevicePage.steps.setupDevice; - const toaster = useToaster(); - const { - device: { addDevice }, - } = useApi(); - const submitRef = useRef(null); - const userData = useAddDevicePageStore((state) => state.userData); - const [setStep, navSubject] = useAddDevicePageStore( - (state) => [state.setStep, state.navigationSubject], - shallow, - ); - - const toggleOptions = useMemo(() => { - const res: ToggleOption[] = [ - { - text: localLL.options.auto(), - value: AddNativeWgDeviceMode.AUTO, - }, - { - text: localLL.options.manual(), - value: AddNativeWgDeviceMode.MANUAL, - }, - ]; - return res; - }, [localLL.options]); - - const zodSchema = useMemo( - () => - z - .object({ - choice: z.nativeEnum(AddNativeWgDeviceMode), - name: z - .string() - .trim() - .min(4, LL.form.error.minimumLength()) - .refine((val) => !userData?.reservedDevices?.includes(val), { - message: localLL.form.errors.name.duplicatedName(), - }), - publicKey: z.string().trim(), - }) - .superRefine((val, ctx) => { - const { publicKey, choice } = val; - if (choice === AddNativeWgDeviceMode.MANUAL) { - const pubKeyRes = z - .string() - .min(44, LL.form.error.minimumLength()) - .max(44, LL.form.error.maximumLength()) - .regex(patternValidWireguardKey, LL.form.error.invalid()) - .safeParse(publicKey); - if (!pubKeyRes.success) { - ctx.addIssue({ - code: 'custom', - message: pubKeyRes.error.message, - path: ['publicKey'], - }); - } - } else { - const pubKeyRes = z.string().safeParse(publicKey); - if (!pubKeyRes.success) { - ctx.addIssue({ - code: 'custom', - path: ['publicKey'], - }); - } - } - }), - [LL.form.error, localLL.form.errors.name, userData?.reservedDevices], - ); - - type FormFields = z.infer; - - const { handleSubmit, control } = useForm({ - defaultValues: { - name: '', - choice: AddNativeWgDeviceMode.AUTO, - publicKey: '', - }, - resolver: zodResolver(zodSchema), - mode: 'all', - }); - - const queryClient = useQueryClient(); - - const { mutateAsync: addDeviceMutation } = useMutation({ - mutationFn: addDevice, - mutationKey: [MutationKeys.ADD_DEVICE], - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_USER_PROFILE], - }); - void queryClient.invalidateQueries({ - queryKey: ['user'], - }); - toaster.success(LL.addDevicePage.messages.deviceAdded()); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const validSubmitHandler: SubmitHandler = (values) => { - if (!userData) return; - values = trimObjectStrings(values); - if (values.choice === AddNativeWgDeviceMode.AUTO) { - const keys = generateWGKeys(); - void addDeviceMutation({ - name: values.name, - wireguard_pubkey: keys.publicKey, - username: userData.username, - }).then((response) => { - setStep(AddDeviceStep.NATIVE_CONFIGURATION, { - device: response.device, - publicKey: keys.publicKey, - privateKey: keys.privateKey, - networks: response.configs.map((c) => ({ - networkName: c.network_name, - networkId: c.network_id, - })), - }); - }); - } else { - void addDeviceMutation({ - name: values.name, - wireguard_pubkey: values.publicKey, - username: userData.username, - }).then((response) => { - setStep(AddDeviceStep.NATIVE_CONFIGURATION, { - device: response.device, - publicKey: values.publicKey, - privateKey: undefined, - networks: response.configs.map((c) => ({ - networkName: c.network_name, - networkId: c.network_id, - })), - }); - }); - } - }; - - const { - field: { value: choiceValue }, - } = useController({ control, name: 'choice' }); - - useEffect(() => { - const sub = navSubject.subscribe((event) => { - if (event === AddDeviceNavigationEvent.NEXT) { - submitRef.current?.click(); - } - }); - return () => { - sub.unsubscribe(); - }; - }, [navSubject]); - - return ( - -

{localLL.title()}

- - {parser( - localLL.infoMessage({ - addDevicesDocs: externalLink.gitbook.wireguard.addDevices, - }), - )} - -
- - - - - -
- ); -}; diff --git a/web/src/pages/addDevice/steps/AddDeviceSetupStep/style.scss b/web/src/pages/addDevice/steps/AddDeviceSetupStep/style.scss deleted file mode 100644 index 41c9e4e89..000000000 --- a/web/src/pages/addDevice/steps/AddDeviceSetupStep/style.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use '@scssutils' as *; - -#add-device-page { - #add-device-setup-step { - h2 { - margin-bottom: 25px; - } - } -} diff --git a/web/src/pages/addDevice/style.scss b/web/src/pages/addDevice/style.scss deleted file mode 100644 index a66e5b930..000000000 --- a/web/src/pages/addDevice/style.scss +++ /dev/null @@ -1,111 +0,0 @@ -@use '@scssutils' as *; - -#add-device-page { - & > .page-content { - box-sizing: border-box; - padding: 100px 40px; - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - overflow: auto; - - h1 { - color: var(--text-body-primary); - user-select: none; - - @include typography(app-title); - } - - h2 { - color: var(--text-body-primary); - padding-bottom: var(--spacing-s); - user-select: none; - - @include typography(app-body-1); - } - - & > .content-wrapper { - width: 100%; - max-width: 920px; - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - width: 100%; - row-gap: 40px; - - & > * { - width: 100%; - } - - & > .card { - box-sizing: border-box; - padding: var(--spacing-l); - - .message-box-spacer { - padding-bottom: 20px; - } - - form { - & > * { - width: 100%; - } - } - } - - & > header { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - user-select: none; - - & > .controls { - margin-left: auto; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: 32px; - - & > .btn { - min-width: 180px; - - &.nav-back { - .arrow-single { - svg { - g { - fill: var(--surface-icon-primary); - } - } - } - } - - .arrow-single { - svg { - g { - fill: var(--surface-icon-secondary); - } - } - } - } - } - } - } - - form { - width: 100%; - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - - & > * { - &:not(.input, .select) { - padding-bottom: 20px; - } - } - } - } -} diff --git a/web/src/pages/addDevice/types.ts b/web/src/pages/addDevice/types.ts deleted file mode 100644 index f0771818b..000000000 --- a/web/src/pages/addDevice/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -export enum AddDeviceStep { - CHOOSE_METHOD, - NATIVE_CHOOSE_METHOD, - NATIVE_CONFIGURATION, - CLIENT_CONFIGURATION, -} - -export enum AddNativeWgDeviceMode { - AUTO, - MANUAL, -} - -export enum AddDeviceNavigationEvent { - NEXT, - BACK, -} diff --git a/web/src/pages/addDevice/utils/enrollmentToToken.ts b/web/src/pages/addDevice/utils/enrollmentToToken.ts deleted file mode 100644 index 5d3cdf52d..000000000 --- a/web/src/pages/addDevice/utils/enrollmentToToken.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { fromUint8Array } from 'js-base64'; - -export type EnrollmentData = { - url: string; - token: string; -}; - -export const enrollmentToImportToken = (url: string, token: string): string => { - const data: EnrollmentData = { - token, - url, - }; - const jsonString = JSON.stringify(data); - const textEncoder = new TextEncoder(); - const encoded = textEncoder.encode(jsonString); - return fromUint8Array(encoded); -}; diff --git a/web/src/pages/allow/OpenidAllowPage.tsx b/web/src/pages/allow/OpenidAllowPage.tsx deleted file mode 100644 index b600084d4..000000000 --- a/web/src/pages/allow/OpenidAllowPage.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import './style.scss'; - -import type { AxiosError } from 'axios'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { useNavigate, useSearchParams } from 'react-router-dom'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import SvgDefguardLogoLogin from '../../shared/components/svg/DefguardLogoLogin'; -import SvgIconCheckmarkWhite from '../../shared/components/svg/IconCheckmarkWhite'; -import SvgIconDelete from '../../shared/components/svg/IconDelete'; -import { Button } from '../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../shared/defguard-ui/components/Layout/Button/types'; -import { useAuthStore } from '../../shared/hooks/store/useAuthStore'; -import useApi from '../../shared/hooks/useApi'; -import { useToaster } from '../../shared/hooks/useToaster'; -import { LoaderPage } from '../loader/LoaderPage'; - -export const OpenidAllowPage = () => { - const navigate = useNavigate(); - - const [allowLoading, setAllowLoading] = useState(false); - const [cancelLoading, setCancelLoading] = useState(false); - const [params] = useSearchParams(); - const [scope, setScope] = useState(''); - const [responseType, setResponseType] = useState(''); - const [clientId, setClientId] = useState(''); - const [redirectUri, setRedirectUri] = useState(''); - const [state, setState] = useState(''); - const [name, setName] = useState(''); - const inputRef = useRef(null); - const { - openid: { getOpenidClient }, - } = useApi(); - const setAuthStore = useAuthStore((state) => state.setState); - const [loadingInfo, setLoadingInfo] = useState(true); - const toaster = useToaster(); - - const { LL } = useI18nContext(); - - const paramsValid = useMemo(() => { - // nonce is optional in the auth code flow, just pass it as is further if it's in the params - const check = [scope, responseType, clientId, redirectUri, state]; - for (const item of check) { - if (typeof item === 'undefined' || item === null) { - toaster.error('OpenID Params invalid.'); - return false; - } - } - return true; - }, [clientId, redirectUri, responseType, scope, state, toaster]); - - const handleSubmit = useCallback( - (allow: boolean) => { - params.append('allow', String(allow)); - const formAction = `/api/v1/oauth/authorize?${params.toString()}`; - if (inputRef.current) { - inputRef.current.formAction = formAction; - inputRef.current.click(); - } - }, - [params], - ); - - useEffect(() => { - setScope(params.get('scope')); - setResponseType(params.get('response_type')); - setClientId(params.get('client_id')); - setState(params.get('state')); - setRedirectUri(params.get('redirect_uri')); - }, [params]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (paramsValid && clientId) { - getOpenidClient(clientId) - .then((res) => { - setName(res.name); - setLoadingInfo(false); - }) - .catch((error: AxiosError) => { - if (error.response?.status === 401) { - setAuthStore({ openIdParams: params }); - setLoadingInfo(false); - navigate('/auth', { replace: true }); - } else { - navigate('/', { replace: true }); - } - }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [paramsValid, clientId]); - - const scopes: Record = { - openid: LL.openidAllow.scopes.openid(), - profile: LL.openidAllow.scopes.profile(), - email: LL.openidAllow.scopes.email(), - phone: LL.openidAllow.scopes.phone(), - groups: LL.openidAllow.scopes.groups(), - }; - - if (loadingInfo) return ; - - return ( - - ); -}; diff --git a/web/src/pages/allow/style.scss b/web/src/pages/allow/style.scss deleted file mode 100644 index fe252e197..000000000 --- a/web/src/pages/allow/style.scss +++ /dev/null @@ -1,68 +0,0 @@ -#openid-consent { - background-color: var(--bg-light); - height: 100%; - width: 100%; - display: flex; - flex-direction: row; - align-content: center; - justify-content: center; - align-items: center; - justify-items: center; - min-height: 100dvh; - - & > * { - @include media-breakpoint-up(lg) { - min-height: 100dvh; - } - } - - .logo-container { - display: none; - flex-direction: column; - align-content: center; - align-items: center; - justify-content: center; - background-color: var(--primary); - flex-grow: 1; - flex-shrink: 0; - width: 50%; - height: 100%; - - @include media-breakpoint-up(lg) { - display: flex; - } - } - - & > .consent { - width: 100%; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - - ul { - margin: 0; - box-sizing: border-box; - padding: var(--spacing-l) 0; - width: 330px; - } - - .controls { - flex-direction: column; - gap: 1rem; - - button { - width: 330px; - margin-bottom: var(--spacing-s); - - &:last-of-type { - margin: 0; - } - } - } - } - - & > form { - display: none; - } -} diff --git a/web/src/pages/auth/AuthPage.tsx b/web/src/pages/auth/AuthPage.tsx deleted file mode 100644 index 5a81371ae..000000000 --- a/web/src/pages/auth/AuthPage.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import './style.scss'; - -import { useEffect, useMemo, useState } from 'react'; -import { Navigate, Route, Routes, useNavigate, useSearchParams } from 'react-router-dom'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import SvgDefguardLogoLogin from '../../shared/components/svg/DefguardLogoLogin'; -import { useAppStore } from '../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../shared/hooks/store/useAuthStore'; -import useApi from '../../shared/hooks/useApi'; -import { useToaster } from '../../shared/hooks/useToaster'; -import { UserMFAMethod } from '../../shared/types'; -import { RedirectPage } from '../redirect/RedirectPage'; -import { OpenIDCallback } from './Callback/Callback'; -import { Login } from './Login/Login'; -import { MFARoute } from './MFARoute/MFARoute'; -import { useMFAStore } from './shared/hooks/useMFAStore'; - -const VALID_URL_PATTERN = - /^(https?:\/\/[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+(?::[0-9]{1,5})?(?:\/[a-zA-Z0-9\-._~%!$&'()*+,;=:@/]*)?(?:\?[a-zA-Z0-9\-._~%!$&'()*+,;=:@/?]*)?|\/[a-zA-Z0-9\-._~%!$&'()*+,;=:@/]*(?:\?[a-zA-Z0-9\-._~%!$&'()*+,;=:@/?]*)?)$/gi; - -// Return redirect URL only if it matches a safe pattern: -// - starts with http/https -// - contains only safe characters (no <, >) -// - can include query params -// -// Once a URL matches this pattern we also explicitly check for unsafe elements in case they are a part of redirect URL query params -const sanitizeRedirectUrl = (url: string | null) => { - if (url?.match(VALID_URL_PATTERN) && !/javascript:|data:|\\/.test(url)) return url; - - return null; -}; - -export const AuthPage = () => { - const { - getAppInfo, - settings: { getSettings }, - } = useApi(); - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const [showRedirect, setShowRedirect] = useState(false); - - const loginSubject = useAuthStore((state) => state.loginSubject); - - const setAuthStore = useAuthStore((state) => state.setState); - - const [openIdParams, user] = useAuthStore( - (state) => [state.openIdParams, state.user], - shallow, - ); - - const mfaMethod = useMFAStore((state) => state.mfa_method); - - const [setMFAStore, resetMFAStore] = useMFAStore( - (state) => [state.setState, state.resetState], - shallow, - ); - - const settings = useAppStore((state) => state.settings); - - const toaster = useToaster(); - - const setAppStore = useAppStore((state) => state.setState); - - const [params] = useSearchParams(); - const redirectUrl = useMemo(() => sanitizeRedirectUrl(params.get('r')), [params]); - - useEffect(() => { - if (user && (!mfaMethod || mfaMethod === UserMFAMethod.NONE) && !openIdParams) { - navigate('/', { replace: true }); - } - }, [mfaMethod, navigate, openIdParams, user]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-misused-promises - const sub = loginSubject.subscribe(async ({ user, url, mfa }): Promise => { - // handle forward auth redirect - if (redirectUrl && user) { - setShowRedirect(true); - resetMFAStore(); - window.location.replace(redirectUrl); - return; - } - - // handle openid scenarios - - // user authenticated but app needs consent - if (openIdParams && user && !mfa) { - navigate(`/consent?${openIdParams.toString()}`, { replace: true }); - return; - } - - // application already had consent from user - if (url?.length && user) { - setShowRedirect(true); - resetMFAStore(); - window.location.replace(url); - return; - } - - if (mfa) { - setMFAStore(mfa); - let mfaUrl = ''; - switch (mfa.mfa_method) { - case UserMFAMethod.WEB_AUTH_N: - mfaUrl = '/auth/mfa/webauthn'; - break; - case UserMFAMethod.ONE_TIME_PASSWORD: - mfaUrl = '/auth/mfa/totp'; - break; - case UserMFAMethod.EMAIL: - mfaUrl = '/auth/mfa/email'; - break; - default: - toaster.error(LL.messages.error()); - console.error('API did not return any MFA method in MFA flow.'); - return; - } - navigate(mfaUrl, { replace: true }); - return; - } - - // authorization finished - if (user) { - let navigateURL = '/me'; - if (user.is_admin) { - // check where to navigate administrator - const appInfo = await getAppInfo(); - const settings = await getSettings(); - setAppStore({ - appInfo, - settings, - }); - if (settings.wireguard_enabled) { - if (!appInfo?.network_present) { - navigateURL = '/admin/wizard'; - } else { - navigateURL = '/admin/overview'; - } - } else { - navigateURL = '/admin/users'; - } - } - setAuthStore({ user }); - resetMFAStore(); - navigate(navigateURL, { replace: true }); - } - }); - return () => sub?.unsubscribe(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [loginSubject, openIdParams, redirectUrl]); - - if (showRedirect) return ; - - return ( -
- - - } /> - } /> - } /> - } /> - } /> - } /> - -
- ); -}; diff --git a/web/src/pages/auth/Callback/Callback.tsx b/web/src/pages/auth/Callback/Callback.tsx deleted file mode 100644 index 70c620233..000000000 --- a/web/src/pages/auth/Callback/Callback.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import './style.scss'; - -import { useMutation } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useEffect, useState } from 'react'; -import { useNavigate } from 'react-router'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { LoaderSpinner } from '../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { useAuthStore } from '../../../shared/hooks/store/useAuthStore'; -import useApi from '../../../shared/hooks/useApi'; -import { useToaster } from '../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../shared/mutations'; -import type { CallbackData } from '../../../shared/types'; - -type ErrorResponse = { - msg: string; -}; - -export const OpenIDCallback = () => { - const { - auth: { - openid: { callback }, - }, - } = useApi(); - const loginSubject = useAuthStore((state) => state.loginSubject); - const toaster = useToaster(); - const { LL } = useI18nContext(); - const [error, setError] = useState(null); - const navigate = useNavigate(); - - const callbackMutation = useMutation({ - mutationFn: callback, - mutationKey: [MutationKeys.OPENID_CALLBACK], - onSuccess: (data) => loginSubject.next(data), - onError: (error: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(error); - const errorResponse = error.response?.data as ErrorResponse; - if (errorResponse.msg) { - setError(errorResponse.msg); - } else { - setError(JSON.stringify(error)); - } - }, - retry: false, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (window.location.search && window.location.search.length > 0) { - // const hashFragment = window.location.search.substring(1); - const params = new URLSearchParams(window.location.search); - - // check if error occurred - const error = params.get('error'); - - if (error) { - setError(error); - toaster.error(LL.messages.error()); - return; - } - - const code = params.get('code'); - const state = params.get('state'); - - if (code && state) { - const data: CallbackData = { - code, - state, - }; - callbackMutation.mutate(data); - } else { - setError('Expected data not returned by the OpenID provider'); - toaster.error(LL.messages.error()); - return; - } - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - // FIXME: make it a bit more user friendly - return error ? ( -
-

{LL.loginPage.callback.error()}:

-

{error}

-
- ) : ( - - ); -}; diff --git a/web/src/pages/auth/Callback/style.scss b/web/src/pages/auth/Callback/style.scss deleted file mode 100644 index 2a75550de..000000000 --- a/web/src/pages/auth/Callback/style.scss +++ /dev/null @@ -1,12 +0,0 @@ -.error-info { - display: flex; - flex-direction: column; - gap: 10px; - text-align: center; - align-items: center; - justify-content: center; -} - -#back-to-login { - width: fit-content; -} diff --git a/web/src/pages/auth/Login/Login.tsx b/web/src/pages/auth/Login/Login.tsx deleted file mode 100644 index 6e55a34df..000000000 --- a/web/src/pages/auth/Login/Login.tsx +++ /dev/null @@ -1,163 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { useI18nContext } from '../../../i18n/i18n-react'; -import { FormInput } from '../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { LoaderSpinner } from '../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; -import { useAppStore } from '../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../shared/hooks/store/useAuthStore'; -import useApi from '../../../shared/hooks/useApi'; -import { useToaster } from '../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../shared/mutations'; -import { patternLoginCharacters } from '../../../shared/patterns'; -import { QueryKeys } from '../../../shared/queries'; -import { trimObjectStrings } from '../../../shared/utils/trimObjectStrings'; -import { OpenIdLoginButton } from './components/OidcButtons'; - -type Inputs = { - username: string; - password: string; -}; - -export const Login = () => { - const { LL } = useI18nContext(); - const { - auth: { - login, - openid: { getOpenIdInfo: getOpenidInfo }, - }, - } = useApi(); - const toaster = useToaster(); - - const enterpriseEnabled = useAppStore((s) => s.appInfo?.license_info.enterprise); - - const { data: openIdInfo, isLoading: openIdLoading } = useQuery({ - enabled: enterpriseEnabled, - queryKey: [QueryKeys.FETCH_OPENID_INFO], - queryFn: getOpenidInfo, - refetchOnMount: true, - refetchOnWindowFocus: false, - retry: false, - }); - - const zodSchema = useMemo( - () => - z.object({ - username: z - .string() - .trim() - .min(1, LL.form.error.minimumLength()) - .max(64) - .regex(patternLoginCharacters, LL.form.error.forbiddenCharacter()), - password: z - .string() - .trim() - .min(1, LL.form.error.required()) - .max(128, LL.form.error.maximumLength()), - }), - [LL.form.error], - ); - - const { handleSubmit, control, setError } = useForm({ - resolver: zodResolver(zodSchema), - mode: 'all', - defaultValues: { - password: '', - username: '', - }, - }); - - const loginSubject = useAuthStore((state) => state.loginSubject); - - const loginMutation = useMutation({ - mutationFn: login, - mutationKey: [MutationKeys.LOG_IN], - onSuccess: (data) => loginSubject.next(data), - onError: (error: AxiosError) => { - const status = error.response?.status; - if (isPresent(status)) { - switch (status) { - case 401: { - setError( - 'password', - { - message: 'username or password is incorrect', - }, - { shouldFocus: true }, - ); - break; - } - case 429: { - toaster.error(LL.form.error.tooManyBadLoginAttempts()); - break; - } - default: { - toaster.error(LL.messages.error()); - } - } - } else { - toaster.error(LL.messages.error()); - } - }, - }); - - const onSubmit: SubmitHandler = (data) => { - if (!loginMutation.isPending) { - loginMutation.mutate(trimObjectStrings(data)); - } - }; - - return ( -
- {!enterpriseEnabled || !openIdLoading ? ( - <> -

{LL.loginPage.pageTitle()}

-
- - -
- ); -}; diff --git a/web/src/pages/auth/Login/components/OidcButtons.tsx b/web/src/pages/auth/Login/components/OidcButtons.tsx deleted file mode 100644 index c3f0c27c0..000000000 --- a/web/src/pages/auth/Login/components/OidcButtons.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; - -export const OpenIdLoginButton = ({ - url, - display_name, -}: { - url: string; - display_name?: string; -}) => { - const { hostname } = new URL(url); - - if (hostname === 'accounts.google.com') { - return ; - } else if (hostname === 'login.microsoftonline.com') { - return ; - } else { - return ; - } -}; - -const GoogleButton = ({ url }: { url: string }) => { - return ( - - ); -}; - -const CustomButton = ({ url, display_name }: { url: string; display_name?: string }) => { - const { LL } = useI18nContext(); - return ( - - ); -}; diff --git a/web/src/pages/auth/Login/components/style.scss b/web/src/pages/auth/Login/components/style.scss deleted file mode 100644 index 422c0fcec..000000000 --- a/web/src/pages/auth/Login/components/style.scss +++ /dev/null @@ -1,120 +0,0 @@ -.gsi-material-button { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - -webkit-appearance: none; - background-color: WHITE; - background-image: none; - border: 1px solid #747775; - -webkit-border-radius: 4px; - border-radius: 4px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #1f1f1f; - cursor: pointer; - font-family: 'Roboto', arial, sans-serif; - font-size: 14px; - height: 40px; - letter-spacing: 0.25px; - outline: none; - overflow: hidden; - padding: 0 12px; - position: relative; - text-align: center; - -webkit-transition: - background-color 0.218s, - border-color 0.218s, - box-shadow 0.218s; - transition: - background-color 0.218s, - border-color 0.218s, - box-shadow 0.218s; - vertical-align: middle; - white-space: nowrap; - width: auto; - max-width: 400px; - min-width: min-content; -} - -.gsi-material-button .gsi-material-button-icon { - height: 20px; - margin-right: 12px; - min-width: 20px; - width: 20px; -} - -.gsi-material-button .gsi-material-button-content-wrapper { - -webkit-align-items: center; - align-items: center; - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - flex-wrap: nowrap; - height: 100%; - justify-content: space-between; - position: relative; - width: 100%; -} - -.gsi-material-button .gsi-material-button-contents { - -webkit-flex-grow: 1; - flex-grow: 1; - font-family: 'Roboto', arial, sans-serif; - font-weight: 500; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: top; -} - -.gsi-material-button .gsi-material-button-state { - -webkit-transition: opacity 0.218s; - transition: opacity 0.218s; - bottom: 0; - left: 0; - opacity: 0; - position: absolute; - right: 0; - top: 0; -} - -.gsi-material-button:disabled { - cursor: default; - background-color: #ffffff61; - border-color: #1f1f1f1f; -} - -.gsi-material-button:disabled .gsi-material-button-contents { - opacity: 38%; -} - -.gsi-material-button:disabled .gsi-material-button-icon { - opacity: 38%; -} - -.gsi-material-button:not(:disabled):active .gsi-material-button-state, -.gsi-material-button:not(:disabled):focus .gsi-material-button-state { - background-color: #303030; - opacity: 12%; -} - -.gsi-material-button:not(:disabled):hover { - -webkit-box-shadow: - 0 1px 2px 0 rgba(60, 64, 67, 0.3), - 0 1px 3px 1px rgba(60, 64, 67, 0.15); - box-shadow: - 0 1px 2px 0 rgba(60, 64, 67, 0.3), - 0 1px 3px 1px rgba(60, 64, 67, 0.15); -} - -.gsi-material-button:not(:disabled):hover .gsi-material-button-state { - background-color: #303030; - opacity: 8%; -} - -.ms-button { - background-color: transparent; - border: none; - cursor: pointer; - padding: 0; -} diff --git a/web/src/pages/auth/Login/style.scss b/web/src/pages/auth/Login/style.scss deleted file mode 100644 index a35ae9200..000000000 --- a/web/src/pages/auth/Login/style.scss +++ /dev/null @@ -1,47 +0,0 @@ -@use '@scssutils' as *; - -#login-container { - min-height: 100vh; - width: 100%; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 20px 0; - - @include media-breakpoint-up(lg) { - padding: 40px 0; - } - - h1 { - @include typography(app-welcome-1); - - color: var(--text-body-primary); - text-align: center; - width: 100%; - margin-bottom: 24px; - } - - form { - width: 100%; - max-width: 300px; - box-sizing: border-box; - - @include media-breakpoint-down(lg) { - padding: 10px; - } - - & > .input { - margin-bottom: 5px; - } - - & > .btn { - margin-bottom: 10px; - } - - & > * { - width: 100%; - } - } -} diff --git a/web/src/pages/auth/MFARoute/MFAEmail/MFAEmail.tsx b/web/src/pages/auth/MFARoute/MFAEmail/MFAEmail.tsx deleted file mode 100644 index 8bc85d6af..000000000 --- a/web/src/pages/auth/MFARoute/MFAEmail/MFAEmail.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useEffect, useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { useAuthStore } from '../../../../shared/hooks/store/useAuthStore'; -import useApi from '../../../../shared/hooks/useApi'; -import { patternNumbersOnly } from '../../../../shared/patterns'; -import { trimObjectStrings } from '../../../../shared/utils/trimObjectStrings'; -import { useMFAStore } from '../../shared/hooks/useMFAStore'; - -type FormFields = { - code: string; -}; - -const queryKey = 'SEND_MFA_CODE_EMAIL_LOGIN'; - -const defaultValues: FormFields = { - code: '', -}; - -export const MFAEmail = () => { - const { LL } = useI18nContext(); - const localLL = LL.loginPage.mfa.email; - const queryClient = useQueryClient(); - const [resendEnabled, setResendEnabled] = useState(true); - const navigate = useNavigate(); - const loginSubject = useAuthStore((state) => state.loginSubject); - const emailAvailable = useMFAStore((state) => state.email_available); - - const { - auth: { - mfa: { - email: { verify, sendCode }, - }, - }, - } = useApi(); - - const { isLoading: codeLoading } = useQuery({ - queryFn: sendCode, - queryKey: [queryKey], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - const schema = useMemo( - () => - z.object({ - code: z - .string() - .trim() - .min(6, LL.form.error.minimumLength()) - .max(6, LL.form.error.maximumLength()) - .regex(patternNumbersOnly, LL.form.error.invalid()), - }), - [LL.form.error], - ); - - const { control, handleSubmit, setError, resetField } = useForm({ - defaultValues, - resolver: zodResolver(schema), - mode: 'all', - }); - - const { mutate: verifyMutate, isPending: verifyLoading } = useMutation({ - mutationFn: verify, - onSuccess: (data) => { - loginSubject.next(data); - }, - onError: (e) => { - resetField('code', { - defaultValue: '', - keepDirty: true, - keepError: true, - keepTouched: true, - }); - setError('code', { - message: LL.form.error.invalidCode(), - }); - console.error(e); - }, - }); - - const handleValidSubmit: SubmitHandler = (data) => { - const trimmed = trimObjectStrings(data); - verifyMutate({ - code: String(trimmed.code), - }); - }; - - useEffect(() => { - if (!emailAvailable) { - navigate('../'); - } - }, [emailAvailable, navigate]); - - return ( - <> -

{localLL.header()}

-
- - - } - /> -
-
- -
-
- -
-
- -
-
- {formatDate} -
-
- -
- - ); -}; - -const DeviceRowEditButton = (props: { data: StandaloneDevice }) => { - const { LL } = useI18nContext(); - const { - standaloneDevice: { getDeviceConfig, generateAuthToken }, - } = useApi(); - const toaster = useToaster(); - const { mutateAsync, isPending: deviceConfigLoading } = useMutation({ - mutationFn: getDeviceConfig, - onError: (e) => { - toaster.error(LL.modals.standaloneDeviceConfigModal.toasters.getConfig.error()); - console.error(e); - }, - }); - - const { mutateAsync: mutateTokenGen, isPending: deviceTokenLoading } = useMutation({ - mutationFn: generateAuthToken, - onError: (e) => { - toaster.error(LL.modals.standaloneDeviceEnrollmentModal.toasters.error()); - console.error(e); - }, - }); - - const openDelete = useDeleteStandaloneDeviceModal((s) => s.open, shallow); - const openEdit = useEditStandaloneDeviceModal((s) => s.open, shallow); - const openConfig = useStandaloneDeviceConfigModal((s) => s.open); - const openEnrollment = useStandaloneDeviceEnrollmentModal((s) => s.open); - - const handleOpenConfig = useCallback(() => { - void mutateAsync(props.data.id).then((config) => { - openConfig({ - device: props.data, - config, - }); - }); - }, [mutateAsync, openConfig, props.data]); - - const handleTokenGen = useCallback(() => { - void mutateTokenGen(props.data.id).then((res) => { - openEnrollment({ - device: props.data, - enrollment: res, - }); - }); - }, [mutateTokenGen, openEnrollment, props.data]); - - return ( - - openEdit(props.data)} - /> - handleOpenConfig()} - disabled={!props.data.configured || deviceConfigLoading} - /> - handleTokenGen()} - disabled={deviceTokenLoading} - /> - openDelete(props.data)} - /> - - ); -}; diff --git a/web/src/pages/devices/components/DevicesList/modals/ConfirmDeviceDeleteModal.tsx b/web/src/pages/devices/components/DevicesList/modals/ConfirmDeviceDeleteModal.tsx deleted file mode 100644 index 12e4cc195..000000000 --- a/web/src/pages/devices/components/DevicesList/modals/ConfirmDeviceDeleteModal.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import { useDeleteStandaloneDeviceModal } from '../../../hooks/useDeleteStandaloneDeviceModal'; - -export const ConfirmDeviceDeleteModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.deleteStandaloneDevice; - const [visible, device] = useDeleteStandaloneDeviceModal( - (s) => [s.visible, s.device], - shallow, - ); - const queryClient = useQueryClient(); - const [close, reset] = useDeleteStandaloneDeviceModal( - (s) => [s.close, s.reset], - shallow, - ); - - const { - standaloneDevice: { deleteDevice }, - } = useApi(); - - const toaster = useToaster(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: deleteDevice, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_STANDALONE_DEVICE_LIST], - }); - close(); - toaster.success(localLL.messages.success()); - }, - onError: (e) => { - toaster.error(localLL.messages.error()); - close(); - console.error(e); - }, - }); - - const isOpen = visible && device !== undefined; - - return ( - { - if (device) { - mutate(device.id); - } - }} - onClose={close} - afterClose={reset} - loading={isLoading} - /> - ); -}; diff --git a/web/src/pages/devices/components/DevicesList/style.scss b/web/src/pages/devices/components/DevicesList/style.scss deleted file mode 100644 index a8c0a2131..000000000 --- a/web/src/pages/devices/components/DevicesList/style.scss +++ /dev/null @@ -1,118 +0,0 @@ -@mixin spacing { - display: inline-grid; - grid-template-rows: 1fr; - grid-template-columns: 250px 150px 350px 1fr 180px 200px 50px; - column-gap: 15px; -} - -#devices-page-devices-list { - overflow-x: auto; - min-width: 1540px; - - .scroll-container { - max-height: 650px; - } - - .headers { - @include spacing; - - & > :nth-child(1) { - padding-left: 50px; - } - - & > :nth-child(7) { - align-items: center; - justify-content: center; - - span { - text-align: center; - } - } - } - - .device-row { - width: 100%; - height: 60px; - box-sizing: border-box; - padding: 0 15px; - border: 1px solid transparent; - background-color: var(--surface-default-modal); - border-radius: 15px; - transition-property: border; - transition-duration: 100ms; - transition-timing-function: ease-in-out; - align-items: center; - - &:hover, - &.active { - border-color: var(--border-primary); - } - - @include spacing; - } -} - -.device-item-floating { - font-family: 'Roboto'; - font-size: 15px; - font-weight: 500; -} - -#devices-page-devices-list .device-row { - .avatar-icon { - min-width: 40px; - max-width: 40px; - } - - p, - span { - font-family: 'Roboto'; - font-size: 15px; - font-weight: 500; - } - - [class^='cell-'] { - height: 100%; - width: 100%; - max-width: 100%; - overflow: hidden; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - } - - .text-limited { - height: 100%; - } - - .cell-7 { - justify-content: center; - } - - .cell-1 { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: 10px; - - .avatar-icon { - width: 40px; - height: 40px; - - svg { - width: 30px; - height: 30px; - } - } - } -} - -.copy { - background-color: transparent; - border: 0 solid transparent; - cursor: pointer; - display: flex; - align-items: center; -} diff --git a/web/src/pages/devices/hooks/useDeleteStandaloneDeviceModal.tsx b/web/src/pages/devices/hooks/useDeleteStandaloneDeviceModal.tsx deleted file mode 100644 index ba415d5bc..000000000 --- a/web/src/pages/devices/hooks/useDeleteStandaloneDeviceModal.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { StandaloneDevice } from '../../../shared/types'; - -const defaultValues: StoreValues = { - visible: false, - device: undefined, -}; - -export const useDeleteStandaloneDeviceModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (device) => set({ visible: true, device }), - close: () => set({ visible: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - device?: StandaloneDevice; -}; -type StoreMethods = { - open: (device: StandaloneDevice) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/devices/hooks/useDevicesPage.tsx b/web/src/pages/devices/hooks/useDevicesPage.tsx deleted file mode 100644 index e1fcc98a0..000000000 --- a/web/src/pages/devices/hooks/useDevicesPage.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useState } from 'react'; -import { createContainer } from 'react-tracked'; - -import type { StandaloneDevice } from '../../../shared/types'; - -export type DevicesPageContext = { - devices: StandaloneDevice[]; - reservedDeviceNames: string[]; - search: string; -}; - -const initialState: DevicesPageContext = { - devices: [], - reservedDeviceNames: [], - search: '', -}; - -const useValue = () => useState(initialState); - -export const { Provider: DevicesPageProvider, useTracked: useDevicesPage } = - createContainer(useValue); diff --git a/web/src/pages/devices/hooks/useEditStandaloneDeviceModal.tsx b/web/src/pages/devices/hooks/useEditStandaloneDeviceModal.tsx deleted file mode 100644 index 5a17156f9..000000000 --- a/web/src/pages/devices/hooks/useEditStandaloneDeviceModal.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { StandaloneDevice } from '../../../shared/types'; - -const defaults: StoreValues = { - visible: false, - device: undefined, -}; - -export const useEditStandaloneDeviceModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (device) => set({ device: device, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; -type StoreValues = { - visible: boolean; - device?: StandaloneDevice; -}; -type StoreMethods = { - open: (device: StandaloneDevice) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/AddStandaloneDeviceModal.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/AddStandaloneDeviceModal.tsx deleted file mode 100644 index 414d3d545..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/AddStandaloneDeviceModal.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import './style.scss'; - -import { useEffect, useMemo } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ModalWithTitle } from '../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { FinishCliStep } from './steps/FinishCliStep/FinishCliStep'; -import { FinishManualStep } from './steps/FinishManualStep/FinishManualStep'; -import { MethodStep } from './steps/MethodStep/MethodStep'; -import { SetupCliStep } from './steps/SetupCliStep/SetupCliStep'; -import { SetupManualStep } from './steps/SetupManualStep/SetupManualStep'; -import { useAddStandaloneDeviceModal } from './store'; - -const steps = [ - , - , - , - , - , -]; - -export const AddStandaloneDeviceModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.addStandaloneDevice; - const [currentStep, visible] = useAddStandaloneDeviceModal( - (s) => [s.currentStep, s.visible], - shallow, - ); - const [close, reset] = useAddStandaloneDeviceModal((s) => [s.close, s.reset], shallow); - - const getTitle = useMemo(() => { - switch (currentStep.valueOf()) { - case 0: - return localLL.steps.method.title(); - case 1: - return localLL.steps.cli.title(); - case 2: - return localLL.steps.cli.title(); - case 3: - return localLL.steps.manual.title(); - case 4: - return localLL.steps.manual.title(); - } - }, [currentStep, localLL.steps.cli, localLL.steps.manual, localLL.steps.method]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - return () => { - reset(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - close()} - afterClose={() => reset()} - /> - ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/FinishCliStep.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/FinishCliStep.tsx deleted file mode 100644 index b42923e4e..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/FinishCliStep.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import './style.scss'; - -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { StandaloneDeviceModalEnrollmentContent } from '../../../components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent'; -import { useAddStandaloneDeviceModal } from '../../store'; - -export const FinishCliStep = () => { - const { LL } = useI18nContext(); - const [closeModal] = useAddStandaloneDeviceModal((s) => [s.close], shallow); - const enroll = useAddStandaloneDeviceModal((s) => s.enrollResponse); - - if (!enroll) return null; - return ( -
- -
-
-
- ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/style.scss b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/style.scss deleted file mode 100644 index 98058a417..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishCliStep/style.scss +++ /dev/null @@ -1,27 +0,0 @@ -#add-standalone-device-modal { - .finish-cli-step { - .download { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - padding-bottom: 30px; - - a { - text-decoration: none; - cursor: pointer; - } - - .btn { - height: 47px; - } - } - - .expanded-content { - p { - @include typography(app-code); - } - } - } -} diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/FinishManualStep.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/FinishManualStep.tsx deleted file mode 100644 index 24895d80f..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/FinishManualStep.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import './style.scss'; - -import { type ReactNode, useCallback, useMemo, useState } from 'react'; -import QRCode from 'react-qr-code'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { RenderMarkdown } from '../../../../../../shared/components/Layout/RenderMarkdown/RenderMarkdown'; -import { ActionButton } from '../../../../../../shared/defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../../../../shared/defguard-ui/components/Layout/ActionButton/types'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ExpandableCard } from '../../../../../../shared/defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { MessageBox } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { useClipboard } from '../../../../../../shared/hooks/useClipboard'; -import { downloadWGConfig } from '../../../../../../shared/utils/downloadWGConfig'; -import { useAddStandaloneDeviceModal } from '../../store'; - -export const FinishManualStep = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.addStandaloneDevice.steps.manual.finish; - const [closeModal] = useAddStandaloneDeviceModal((s) => [s.close], shallow); - const manual = useAddStandaloneDeviceModal((s) => s.manualResponse); - const generatedKeys = useAddStandaloneDeviceModal((s) => s.genKeys); - - return ( -
- -
-

{LL.modals.addStandaloneDevice.form.labels.deviceName()}:

-

{manual?.device.name}

-
-
-

{localLL.ctaInstruction()}

-
- - - - {manual && ( - - )} -
-
-
- ); -}; - -type ConfigCardProps = { - config: string; - privateKey?: string; - publicKey: string; - deviceName: string; -}; - -enum ConfigCardView { - FILE, - QR, -} - -const DeviceConfigCard = ({ - config, - privateKey, - publicKey, - deviceName, -}: ConfigCardProps) => { - const { LL } = useI18nContext(); - const { writeToClipboard } = useClipboard(); - const localLL = LL.modals.addStandaloneDevice.steps.manual.finish; - const [view, setView] = useState(ConfigCardView.FILE); - - const configForExport = useMemo(() => { - if (privateKey) { - return config.replace('YOUR_PRIVATE_KEY', privateKey); - } - return config; - }, [config, privateKey]); - - const getQRConfig = useMemo((): string => { - if (privateKey) { - return config.replace('YOUR_PRIVATE_KEY', privateKey); - } - return config.replace('YOUR_PRIVATE_KEY', publicKey); - }, [config, privateKey, publicKey]); - - const renderTextConfig = () => { - const content = configForExport.split('\n'); - return ( -

- {content.map((text, index) => ( - <> - {text} - {index !== content.length - 1 &&
} - - ))} -

- ); - }; - - const handleConfigCopy = useCallback(() => { - void writeToClipboard( - configForExport, - LL.components.deviceConfigsCard.messages.copyConfig(), - ); - }, [LL.components.deviceConfigsCard.messages, configForExport, writeToClipboard]); - - const handleConfigDownload = useCallback(() => { - downloadWGConfig(configForExport, deviceName.toLowerCase().replace(' ', '-')); - }, [configForExport, deviceName]); - - const actions = useMemo( - (): ReactNode[] => [ - setView(ConfigCardView.FILE)} - />, - setView(ConfigCardView.QR)} - />, - , - , - ], - [handleConfigCopy, handleConfigDownload, view], - ); - return ( - - {view === ConfigCardView.FILE && renderTextConfig()} - {view === ConfigCardView.QR && } - - ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/style.scss b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/style.scss deleted file mode 100644 index 8b4d33261..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/FinishManualStep/style.scss +++ /dev/null @@ -1,37 +0,0 @@ -#add-standalone-device-modal { - .finish-manual-step { - & > .device-name { - padding-bottom: 20px; - - .label { - color: var(--text-body-tertiary); - @include typography(app-wizard-1); - user-select: none; - padding-bottom: 10px; - } - - .name { - color: var(--text-body-primary); - @include typography(app-input); - } - } - - & > .cta { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - padding-bottom: 20px; - - p { - color: var(--text-body-secondary); - text-align: center; - width: 100%; - max-width: 410px; - text-wrap: balance; - @include typography(app-input); - } - } - } -} diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/MethodStep.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/MethodStep.tsx deleted file mode 100644 index a054a9150..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/MethodStep.tsx +++ /dev/null @@ -1,238 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { useCallback, useEffect, useId } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import SvgWireguardLogo from '../../../../../../shared/components/svg/WireguardLogo'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import type { SelectOption } from '../../../../../../shared/defguard-ui/components/Layout/Select/types'; -import SvgIconOutsideLink from '../../../../../../shared/defguard-ui/components/svg/IconOutsideLink'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { externalLink } from '../../../../../../shared/links'; -import { QueryKeys } from '../../../../../../shared/queries'; -import type { Network } from '../../../../../../shared/types'; -import { DeviceSetupMethodCard } from '../../../../../addDevice/steps/AddDeviceSetupMethodStep/components/DeviceSetupMethodCard/DeviceSetupMethodCard'; -import { useAddStandaloneDeviceModal } from '../../store'; -import { - AddStandaloneDeviceModalChoice, - AddStandaloneDeviceModalStep, -} from '../../types'; - -export const MethodStep = () => { - // this is needs bcs opening modal again and again would prevent availableIp to refetch - const modalSessionID = useId(); - const { LL } = useI18nContext(); - const localLL = LL.modals.addStandaloneDevice.steps.method; - const choice = useAddStandaloneDeviceModal((s) => s.choice); - const { - network: { getNetworks }, - standaloneDevice: { getAvailableIp }, - } = useApi(); - - const { data: networks } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORKS], - queryFn: getNetworks, - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const { - data: availableIpResponse, - refetch: refetchAvailableIp, - isLoading: availableIpLoading, - } = useQuery({ - queryKey: [ - 'ADD_STANDALONE_DEVICE_MODAL_FETCH_INITIAL_AVAILABLE_IP', - networks, - modalSessionID, - ], - queryFn: () => - getAvailableIp({ - locationId: (networks as Network[])[0].id, - }), - enabled: networks !== undefined && Array.isArray(networks) && networks.length > 0, - refetchOnMount: true, - refetchOnReconnect: true, - refetchOnWindowFocus: false, - }); - - const [setState, close, next] = useAddStandaloneDeviceModal( - (s) => [s.setStore, s.close, s.changeStep], - shallow, - ); - - const handleChange = useCallback( - (choice: AddStandaloneDeviceModalChoice) => { - setState({ choice }); - }, - [setState], - ); - - const handleNext = () => { - switch (choice) { - case AddStandaloneDeviceModalChoice.CLI: - next(AddStandaloneDeviceModalStep.SETUP_CLI); - break; - case AddStandaloneDeviceModalChoice.MANUAL: - next(AddStandaloneDeviceModalStep.SETUP_MANUAL); - break; - } - }; - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (networks) { - const options: SelectOption[] = networks.map((n) => ({ - key: n.id, - value: n.id, - label: n.name, - })); - setState({ - networks, - networkOptions: options, - }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [networks]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (availableIpResponse) { - setState({ initLocationIpResponse: availableIpResponse }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [availableIpResponse]); - - return ( -
-
- , - testId: 'standalone-device-choice-card-cli', - extras: ( - - ), - }} - active={choice === AddStandaloneDeviceModalChoice.CLI} - onClick={() => handleChange(AddStandaloneDeviceModalChoice.CLI)} - /> - , - testId: 'standalone-device-choice-card-manual', - }} - active={choice === AddStandaloneDeviceModalChoice.MANUAL} - onClick={() => handleChange(AddStandaloneDeviceModalChoice.MANUAL)} - /> -
-
-
-
- ); -}; - -const DefguardIcon = () => { - return ( - - - - - - - - - - - - - - - - - - - ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/style.scss b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/style.scss deleted file mode 100644 index 43f3d1125..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/MethodStep/style.scss +++ /dev/null @@ -1,43 +0,0 @@ -#add-standalone-device-modal .method-step { - box-sizing: border-box; - padding: 0 55px; - - .choices { - display: grid; - grid-template-columns: 1fr 1fr; - padding-bottom: 40px; - column-gap: 50px; - - .device-method-card { - .link-container { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - - .link { - width: 100%; - text-decoration: none; - text-align: center; - @include typography(app-body-2); - - &:hover { - text-decoration: underline; - } - - .spacer { - display: inline-block; - width: var(--spacing-xs); - height: 1px; - } - - svg { - width: 13; - height: 13; - } - } - } - } - } -} diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupCliStep/SetupCliStep.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupCliStep/SetupCliStep.tsx deleted file mode 100644 index 0490ec38c..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupCliStep/SetupCliStep.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useCallback, useMemo, useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { MessageBox } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { useAppStore } from '../../../../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../../../../shared/hooks/store/useAuthStore'; -import { useEnterpriseUpgradeStore } from '../../../../../../shared/hooks/store/useEnterpriseUpgradeStore'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { invalidateMultipleQueries } from '../../../../../../shared/utils/invalidateMultipleQueries'; -import { useDevicesPage } from '../../../../hooks/useDevicesPage'; -import { StandaloneDeviceModalForm } from '../../../components/StandaloneDeviceModalForm/StandaloneDeviceModalForm'; -import { StandaloneDeviceModalFormMode } from '../../../components/types'; -import { useAddStandaloneDeviceModal } from '../../store'; -import { - type AddStandaloneDeviceFormFields, - AddStandaloneDeviceModalStep, - WGConfigGenChoice, -} from '../../types'; - -export const SetupCliStep = () => { - const [{ reservedDeviceNames }] = useDevicesPage(); - const { LL } = useI18nContext(); - const localLL = LL.modals.addStandaloneDevice.steps.cli.setup; - const [formLoading, setFormLoading] = useState(false); - const queryClient = useQueryClient(); - const [setState, close, next, submitSubject] = useAddStandaloneDeviceModal( - (s) => [s.setStore, s.close, s.changeStep, s.submitSubject], - shallow, - ); - const currentUserId = useAuthStore((s) => s.user?.id); - - const toast = useToaster(); - - const { - standaloneDevice: { createCliDevice }, - } = useApi(); - - const showUpgradeToast = useEnterpriseUpgradeStore((s) => s.show); - const { getAppInfo } = useApi(); - const setAppStore = useAppStore((s) => s.setState, shallow); - - const { mutateAsync } = useMutation({ - mutationFn: createCliDevice, - onSuccess: () => { - toast.success(LL.modals.addStandaloneDevice.toasts.deviceCreated()); - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_USER_PROFILE, currentUserId], - [QueryKeys.FETCH_STANDALONE_DEVICE_LIST], - ]); - void getAppInfo().then((response) => { - setAppStore({ - appInfo: response, - }); - if (response.license_info.any_limit_exceeded) { - showUpgradeToast(); - } - }); - }, - onError: (e) => { - toast.error(LL.modals.addStandaloneDevice.toasts.creationFailed()); - console.error(e); - }, - }); - - const [initIpResponse, locationOptions] = useAddStandaloneDeviceModal( - (s) => [s.initLocationIpResponse, s.networkOptions], - shallow, - ); - - const defaultValues = useMemo(() => { - if (initIpResponse && locationOptions) { - const res: AddStandaloneDeviceFormFields = { - modifiableIpParts: initIpResponse.map((ip) => ip.modifiable_part), - generationChoice: WGConfigGenChoice.AUTO, - location_id: locationOptions[0].value, - name: '', - wireguard_pubkey: '', - description: '', - }; - return res; - } - return undefined; - }, [initIpResponse, locationOptions]); - - const handleSubmit = useCallback( - async (values: AddStandaloneDeviceFormFields) => { - const response = await mutateAsync({ - assigned_ips: values.modifiableIpParts, - location_id: values.location_id, - name: values.name, - description: values.description, - }); - setState({ enrollResponse: response }); - next(AddStandaloneDeviceModalStep.FINISH_CLI); - }, - [mutateAsync, next, setState], - ); - - if (initIpResponse === undefined || defaultValues === undefined) return null; - - return ( -
- - -
-
-
- ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/SetupManualStep.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/SetupManualStep.tsx deleted file mode 100644 index a96d93905..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/SetupManualStep.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import './style.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useCallback, useMemo, useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { useAppStore } from '../../../../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../../../../shared/hooks/store/useAuthStore'; -import { useEnterpriseUpgradeStore } from '../../../../../../shared/hooks/store/useEnterpriseUpgradeStore'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { generateWGKeys } from '../../../../../../shared/utils/generateWGKeys'; -import { invalidateMultipleQueries } from '../../../../../../shared/utils/invalidateMultipleQueries'; -import { useDevicesPage } from '../../../../hooks/useDevicesPage'; -import { StandaloneDeviceModalForm } from '../../../components/StandaloneDeviceModalForm/StandaloneDeviceModalForm'; -import { StandaloneDeviceModalFormMode } from '../../../components/types'; -import { useAddStandaloneDeviceModal } from '../../store'; -import { - type AddStandaloneDeviceFormFields, - AddStandaloneDeviceModalStep, - WGConfigGenChoice, -} from '../../types'; - -export const SetupManualStep = () => { - const { LL } = useI18nContext(); - const [formLoading, setFormLoading] = useState(false); - const [setState, next, submitSubject, close] = useAddStandaloneDeviceModal( - (s) => [s.setStore, s.changeStep, s.submitSubject, s.close], - shallow, - ); - const [initialIpResponse, locationOptions] = useAddStandaloneDeviceModal( - (s) => [s.initLocationIpResponse, s.networkOptions], - shallow, - ); - - const queryClient = useQueryClient(); - - const currentUserId = useAuthStore((s) => s.user?.id); - - const [{ reservedDeviceNames }] = useDevicesPage(); - - const { - standaloneDevice: { createManualDevice: createDevice }, - } = useApi(); - - const showUpgradeToast = useEnterpriseUpgradeStore((s) => s.show); - const { getAppInfo } = useApi(); - const setAppStore = useAppStore((s) => s.setState, shallow); - - const { mutateAsync } = useMutation({ - mutationFn: createDevice, - onSuccess: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_USER_PROFILE, currentUserId], - [QueryKeys.FETCH_STANDALONE_DEVICE_LIST], - ]); - void getAppInfo().then((response) => { - setAppStore({ - appInfo: response, - }); - if (response.license_info.any_limit_exceeded) { - showUpgradeToast(); - } - }); - }, - }); - - const handleSubmit = useCallback( - async (values: AddStandaloneDeviceFormFields) => { - let pub = values.wireguard_pubkey; - if (values.generationChoice === WGConfigGenChoice.AUTO) { - const keys = generateWGKeys(); - pub = keys.publicKey; - setState({ - genKeys: keys, - }); - } - const response = await mutateAsync({ - assigned_ips: values.modifiableIpParts, - location_id: values.location_id, - name: values.name, - description: values.description, - wireguard_pubkey: pub, - }); - setState({ - genChoice: values.generationChoice, - manualResponse: response, - }); - next(AddStandaloneDeviceModalStep.FINISH_MANUAL); - }, - [mutateAsync, next, setState], - ); - - const defaultFormValues = useMemo(() => { - if (locationOptions && initialIpResponse) { - const res: AddStandaloneDeviceFormFields = { - modifiableIpParts: initialIpResponse.map((ip) => ip.modifiable_part), - generationChoice: WGConfigGenChoice.AUTO, - location_id: locationOptions[0].value, - name: '', - wireguard_pubkey: '', - description: '', - }; - return res; - } - return undefined; - }, [initialIpResponse, locationOptions]); - - if (initialIpResponse === undefined || defaultFormValues === undefined) return null; - - return ( -
- -
-
-
- ); -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/style.scss b/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/style.scss deleted file mode 100644 index d6d0f5e91..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/steps/SetupManualStep/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -#add-standalone-device-modal { - .setup-manual { - .toggle { - margin-bottom: 20px; - } - } -} diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/store.tsx b/web/src/pages/devices/modals/AddStandaloneDeviceModal/store.tsx deleted file mode 100644 index e724ba7cd..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/store.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { isObject } from 'lodash-es'; -import { Subject } from 'rxjs'; -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { SelectOption } from '../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { - CreateStandaloneDeviceResponse, - GetAvailableLocationIpResponse, - Network, - StartEnrollmentResponse, -} from '../../../../shared/types'; -import { - AddStandaloneDeviceModalChoice, - AddStandaloneDeviceModalStep, - WGConfigGenChoice, -} from './types'; - -const defaultValues: StoreValues = { - visible: false, - currentStep: AddStandaloneDeviceModalStep.METHOD_CHOICE, - choice: AddStandaloneDeviceModalChoice.CLI, - networks: undefined, - networkOptions: [], - genChoice: WGConfigGenChoice.AUTO, - submitSubject: new Subject(), - initLocationIpResponse: undefined, - genKeys: undefined, - manualResponse: undefined, - enrollResponse: undefined, -}; - -export const useAddStandaloneDeviceModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - setStore: (v) => set(v), - reset: () => set(defaultValues), - close: () => set({ visible: false }), - open: () => set({ ...defaultValues, visible: true }), - changeStep: (step) => set({ currentStep: step }), - }), - isObject, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - currentStep: AddStandaloneDeviceModalStep; - choice: AddStandaloneDeviceModalChoice; - networkOptions: SelectOption[]; - genChoice: WGConfigGenChoice; - submitSubject: Subject; - initLocationIpResponse?: GetAvailableLocationIpResponse; - networks?: Network[]; - genKeys?: { - publicKey: string; - privateKey: string; - }; - manualResponse?: CreateStandaloneDeviceResponse; - enrollResponse?: StartEnrollmentResponse; -}; - -type StoreMethods = { - setStore: (values: Partial) => void; - reset: () => void; - close: () => void; - open: () => void; - changeStep: (step: AddStandaloneDeviceModalStep) => void; -}; diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/style.scss b/web/src/pages/devices/modals/AddStandaloneDeviceModal/style.scss deleted file mode 100644 index 9e8b7949e..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/style.scss +++ /dev/null @@ -1,59 +0,0 @@ -#add-standalone-device-modal { - width: 100%; - max-width: 920px; - - & > .header { - padding-left: 55px; - } - - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - width: 100%; - column-gap: 20px; - padding-top: 40px; - - .btn { - width: 100%; - height: 47px; - } - - &.solo { - width: 100%; - align-items: center; - justify-content: center; - - .btn { - width: 50%; - } - } - } - - .step-content > div { - box-sizing: border-box; - padding: 0 55px; - - .message-box-spacer { - padding-bottom: 20px; - } - } - - .step-content { - form { - .row { - width: 100%; - display: flex; - flex-flow: column; - row-gap: 0; - - @include media-breakpoint-up(lg) { - display: grid; - grid-template-columns: 1fr 1fr; - column-gap: 20px; - } - } - } - } -} diff --git a/web/src/pages/devices/modals/AddStandaloneDeviceModal/types.ts b/web/src/pages/devices/modals/AddStandaloneDeviceModal/types.ts deleted file mode 100644 index 0c43cda03..000000000 --- a/web/src/pages/devices/modals/AddStandaloneDeviceModal/types.ts +++ /dev/null @@ -1,31 +0,0 @@ -export enum AddStandaloneDeviceModalStep { - METHOD_CHOICE, - SETUP_CLI, - FINISH_CLI, - SETUP_MANUAL, - FINISH_MANUAL, -} - -export enum AddStandaloneDeviceModalChoice { - CLI, - MANUAL, -} - -export enum WGConfigGenChoice { - MANUAL, - AUTO, -} - -export type AddStandaloneDeviceFormFields = { - name: string; - location_id: number; - modifiableIpParts: string[]; - wireguard_pubkey?: string; - generationChoice: WGConfigGenChoice; - description?: string; -}; - -export type AddStandaloneDeviceCLIFormFields = Omit< - AddStandaloneDeviceFormFields, - 'generationChoice' | 'wireguard_pubkey' ->; diff --git a/web/src/pages/devices/modals/EditStandaloneDeviceModal/EditStandaloneModal.tsx b/web/src/pages/devices/modals/EditStandaloneDeviceModal/EditStandaloneModal.tsx deleted file mode 100644 index 1b140e833..000000000 --- a/web/src/pages/devices/modals/EditStandaloneDeviceModal/EditStandaloneModal.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { Subject } from 'rxjs'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { LoaderSpinner } from '../../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { ModalWithTitle } from '../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useAuthStore } from '../../../../shared/hooks/store/useAuthStore'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../shared/queries'; -import { selectifyNetworks } from '../../../../shared/utils/form/selectifyNetwork'; -import { invalidateMultipleQueries } from '../../../../shared/utils/invalidateMultipleQueries'; -import { useDevicesPage } from '../../hooks/useDevicesPage'; -import { useEditStandaloneDeviceModal } from '../../hooks/useEditStandaloneDeviceModal'; -import { - type AddStandaloneDeviceFormFields, - WGConfigGenChoice, -} from '../AddStandaloneDeviceModal/types'; -import { StandaloneDeviceModalForm } from '../components/StandaloneDeviceModalForm/StandaloneDeviceModalForm'; -import { StandaloneDeviceModalFormMode } from '../components/types'; - -export const EditStandaloneModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.editStandaloneModal; - const [close, reset] = useEditStandaloneDeviceModal((s) => [s.close, s.reset], shallow); - const isOpen = useEditStandaloneDeviceModal((s) => s.visible); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - return () => { - reset(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.editStandaloneModal; - const device = useEditStandaloneDeviceModal((s) => s.device); - const [submitSubject] = useState(new Subject()); - const [formLoading, setFormLoading] = useState(false); - const [closeModal] = useEditStandaloneDeviceModal((s) => [s.close], shallow); - const toaster = useToaster(); - const queryClient = useQueryClient(); - const currentUserId = useAuthStore((s) => s.user?.id); - const [{ reservedDeviceNames }] = useDevicesPage(); - - const { - network: { getNetworks }, - standaloneDevice: { editDevice }, - } = useApi(); - - const { mutateAsync } = useMutation({ - mutationFn: editDevice, - onSuccess: () => { - toaster.success(localLL.toasts.success()); - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_USER_PROFILE, currentUserId], - [QueryKeys.FETCH_STANDALONE_DEVICE_LIST], - ]); - closeModal(); - }, - onError: (e) => { - toaster.error(localLL.toasts.failure()); - console.error(e); - }, - }); - - const { data: networks } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORKS], - queryFn: getNetworks, - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const locationOptions = useMemo(() => { - if (networks) { - return selectifyNetworks(networks); - } - return []; - }, [networks]); - - const defaultValues = useMemo(() => { - if (locationOptions && device) { - const modifiableParts = device.assigned_ips.map( - (ip, i) => - ip.split(device.split_ips[i].network_part)[1] || - device.split_ips[i].modifiable_part, - ); - - const res: AddStandaloneDeviceFormFields = { - name: device?.name, - modifiableIpParts: modifiableParts, - location_id: device.location.id, - description: device.description, - generationChoice: WGConfigGenChoice.AUTO, - wireguard_pubkey: '', - }; - return res; - } - return undefined; - }, [device, locationOptions]); - - const handleSubmit = useCallback( - async (values: AddStandaloneDeviceFormFields) => { - if (device) { - await mutateAsync({ - assigned_ips: values.modifiableIpParts, - id: device.id, - name: values.name, - description: values.description, - }); - } - }, - [device, mutateAsync], - ); - - if (!device) { - return null; - } - - return ( - <> - {defaultValues && ( - ({ - ip: device.assigned_ips[i], - ...device.split_ips[i], - }))} - /> - )} - {!defaultValues && ( -
- -
- )} -
-
- - ); -}; diff --git a/web/src/pages/devices/modals/EditStandaloneDeviceModal/style.scss b/web/src/pages/devices/modals/EditStandaloneDeviceModal/style.scss deleted file mode 100644 index fd45ad7f6..000000000 --- a/web/src/pages/devices/modals/EditStandaloneDeviceModal/style.scss +++ /dev/null @@ -1,47 +0,0 @@ -#edit-standalone-device-modal { - width: 100%; - max-width: 920px; - - .loader { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - min-height: 300px; - } - - .controls { - display: flex; - width: 100%; - gap: 20px; - padding-top: 40px; - box-sizing: border-box; - padding-left: 30px; - padding-right: 30px; - flex-flow: column; - align-items: center; - justify-content: flex-start; - - @include media-breakpoint-up(lg) { - flex-flow: row; - align-items: center; - justify-content: flex-start; - } - - .btn { - width: 100%; - height: 47px; - } - - &.solo { - width: 100%; - align-items: center; - justify-content: center; - - .btn { - width: 50%; - } - } - } -} diff --git a/web/src/pages/devices/modals/StandaloneDeviceConfigModal/StandaloneDeviceConfigModal.tsx b/web/src/pages/devices/modals/StandaloneDeviceConfigModal/StandaloneDeviceConfigModal.tsx deleted file mode 100644 index 0626cc64e..000000000 --- a/web/src/pages/devices/modals/StandaloneDeviceConfigModal/StandaloneDeviceConfigModal.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { useEffect } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { WireguardConfigExpandable } from '../../../../shared/components/Layout/WireguardConfigExpandable/WireguardConfigExpandable'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ModalWithTitle } from '../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useStandaloneDeviceConfigModal } from './store'; - -export const StandaloneDeviceConfigModal = () => { - const { LL } = useI18nContext(); - const isOpen = useStandaloneDeviceConfigModal((s) => s.visible); - const [close, reset] = useStandaloneDeviceConfigModal( - (s) => [s.close, s.reset], - shallow, - ); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - return () => { - reset(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const data = useStandaloneDeviceConfigModal((s) => s.data); - const close = useStandaloneDeviceConfigModal((s) => s.close, shallow); - - if (!data) return null; - return ( - <> - -
-
- - ); -}; diff --git a/web/src/pages/devices/modals/StandaloneDeviceConfigModal/store.tsx b/web/src/pages/devices/modals/StandaloneDeviceConfigModal/store.tsx deleted file mode 100644 index e02d0481f..000000000 --- a/web/src/pages/devices/modals/StandaloneDeviceConfigModal/store.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { StandaloneDevice } from '../../../../shared/types'; - -const defaults: StoreValues = { - visible: false, -}; - -export const useStandaloneDeviceConfigModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (data) => set({ data, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; -type StoreValues = { - visible: boolean; - data?: { - device: StandaloneDevice; - config: string; - }; -}; - -type StoreMethods = { - open: (values: StoreValues['data']) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/StandaloneDeviceEnrollmentModal.tsx b/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/StandaloneDeviceEnrollmentModal.tsx deleted file mode 100644 index 967dfd872..000000000 --- a/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/StandaloneDeviceEnrollmentModal.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ModalWithTitle } from '../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { StandaloneDeviceModalEnrollmentContent } from '../components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent'; -import { useStandaloneDeviceEnrollmentModal } from './store'; - -export const StandaloneDeviceEnrollmentModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.standaloneDeviceEnrollmentModal; - const [close, reset] = useStandaloneDeviceEnrollmentModal( - (s) => [s.close, s.reset], - shallow, - ); - const isOpen = useStandaloneDeviceEnrollmentModal((s) => s.visible); - return ( - - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const modalData = useStandaloneDeviceEnrollmentModal((s) => s.data); - const closeModal = useStandaloneDeviceEnrollmentModal((s) => s.close, shallow); - if (!modalData) return null; - return ( - <> - -
-
- - ); -}; diff --git a/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/store.tsx b/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/store.tsx deleted file mode 100644 index ee55db40e..000000000 --- a/web/src/pages/devices/modals/StandaloneDeviceEnrollmentModal/store.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { StandaloneDevice, StartEnrollmentResponse } from '../../../../shared/types'; - -const defaults: StoreValues = { - visible: false, - data: undefined, -}; - -export const useStandaloneDeviceEnrollmentModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (data) => set({ data: data, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; -type StoreValues = { - visible: boolean; - data?: { - device: StandaloneDevice; - enrollment: StartEnrollmentResponse; - }; -}; -type StoreMethods = { - open: (data: StoreValues['data']) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent.tsx b/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent.tsx deleted file mode 100644 index 33348212d..000000000 --- a/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/StandaloneDeviceModalEnrollmentContent.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import './style.scss'; - -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ActionButton } from '../../../../../shared/defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../../../shared/defguard-ui/components/Layout/ActionButton/types'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ExpandableCard } from '../../../../../shared/defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { MessageBox } from '../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { useClipboard } from '../../../../../shared/hooks/useClipboard'; -import { externalLink } from '../../../../../shared/links'; -import type { StartEnrollmentResponse } from '../../../../../shared/types'; - -type Props = { - enrollmentData: StartEnrollmentResponse; -}; -export const StandaloneDeviceModalEnrollmentContent = ({ - enrollmentData: { enrollment_token, enrollment_url }, -}: Props) => { - const { LL } = useI18nContext(); - const localLL = LL.components.standaloneDeviceTokenModalContent; - const { writeToClipboard } = useClipboard(); - const commandToCopy = useMemo(() => { - return `dg enroll -u ${enrollment_url} -t ${enrollment_token}`; - }, [enrollment_token, enrollment_url]); - - return ( -
- - - { - void writeToClipboard(commandToCopy); - }} - key={0} - />, - ]} - expanded={true} - disableExpand={true} - > -

{commandToCopy}

-
-
- ); -}; diff --git a/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/style.scss b/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/style.scss deleted file mode 100644 index 35cbfc50b..000000000 --- a/web/src/pages/devices/modals/components/StandaloneDeviceModalEnrollmentContent/style.scss +++ /dev/null @@ -1,19 +0,0 @@ -.standalone-device-enrollment-content { - .download { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - padding-bottom: 30px; - - a { - text-decoration: none; - cursor: pointer; - } - - .btn { - height: 47px; - } - } -} diff --git a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/StandaloneDeviceModalForm.tsx b/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/StandaloneDeviceModalForm.tsx deleted file mode 100644 index acc2c31a7..000000000 --- a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/StandaloneDeviceModalForm.tsx +++ /dev/null @@ -1,267 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import type { Subject } from 'rxjs'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormLocationIp } from '../../../../../shared/defguard-ui/components/Form/FormLocationIp/FormLocationIp'; -import { FormSelect } from '../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { FormToggle } from '../../../../../shared/defguard-ui/components/Form/FormToggle/FormToggle'; -import type { - SelectOption, - SelectSelectedValue, -} from '../../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { ToggleOption } from '../../../../../shared/defguard-ui/components/Layout/Toggle/types'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import type { GetAvailableLocationIpResponse } from '../../../../../shared/types'; -import { - type AddStandaloneDeviceFormFields, - WGConfigGenChoice, -} from '../../AddStandaloneDeviceModal/types'; -import { StandaloneDeviceModalFormMode } from '../types'; -import { - type StandaloneDeviceFormFields, - standaloneDeviceFormSchema, -} from './formSchema'; - -type Props = { - onSubmit: (formValues: AddStandaloneDeviceFormFields) => Promise; - mode: StandaloneDeviceModalFormMode; - onLoadingChange: (value: boolean) => void; - locationOptions: SelectOption[]; - submitSubject: Subject; - defaults: StandaloneDeviceFormFields; - reservedNames: string[]; - initialIpRecommendation: GetAvailableLocationIpResponse; -}; - -export const StandaloneDeviceModalForm = ({ - onSubmit, - mode, - onLoadingChange, - locationOptions, - submitSubject, - defaults, - reservedNames, - initialIpRecommendation, -}: Props) => { - const [internalRecommendedIps, setInternalRecommendedIps] = useState< - GetAvailableLocationIpResponse | undefined - >(); - const { LL } = useI18nContext(); - const { - standaloneDevice: { validateLocationIp, getAvailableIp }, - } = useApi(); - // auto assign upon location change is happening - const [ipIsLoading, setIpIsLoading] = useState(false); - const localLL = LL.modals.addStandaloneDevice.form; - const labels = localLL.labels; - const submitRef = useRef(null); - const toaster = useToaster(); - const renderSelectedOption = useCallback( - (val?: number): SelectSelectedValue => { - const empty: SelectSelectedValue = { - displayValue: '', - key: 'empty', - }; - if (val !== undefined) { - const option = locationOptions.find((n) => n.value === val); - if (option) { - return { - displayValue: option.label, - key: option.key, - }; - } - } - return empty; - }, - [locationOptions], - ); - - const toggleOptions = useMemo( - (): ToggleOption[] => [ - { - text: labels.generation.auto(), - value: WGConfigGenChoice.AUTO, - disabled: false, - }, - { - text: labels.generation.manual(), - value: WGConfigGenChoice.MANUAL, - disabled: false, - }, - ], - [labels.generation], - ); - - const schema = useMemo( - () => - standaloneDeviceFormSchema(LL, { - mode, - reservedNames, - originalName: defaults.name, - }), - [mode, reservedNames, defaults.name, LL], - ); - - const { - handleSubmit, - control, - watch, - formState: { isSubmitting }, - setError, - resetField, - } = useForm({ - defaultValues: defaults, - resolver: zodResolver(schema), - mode: 'all', - }); - - const generationChoiceValue = watch('generationChoice'); - - const submitHandler: SubmitHandler = async (formValues) => { - const values = formValues; - const recommendationResponse = internalRecommendedIps ?? initialIpRecommendation; - let validationList = recommendationResponse.map((recommendation, index) => ({ - ip: recommendation.network_part + formValues.modifiableIpParts[index], - index, - })); - values.modifiableIpParts = validationList.map((item) => item.ip); - // try to validate explicitly chosen IPs before submission - let validationErrors = false; - - // if edit exclude initial ip's from validation as they are reserved already by edited device - if (mode === StandaloneDeviceModalFormMode.EDIT) { - const reservedByDevice = initialIpRecommendation.map( - (item) => item.network_part + item.modifiable_part, - ); - validationList = validationList.filter( - (item) => !reservedByDevice.includes(item.ip), - ); - } - - if (validationList.length) { - try { - const response = await validateLocationIp({ - ips: validationList.map((item) => item.ip), - location: values.location_id, - }); - - response.forEach(({ available, valid }, index) => { - const fieldIndex = validationList[index].index; - if (!available) { - validationErrors = true; - setError(`modifiableIpParts.${fieldIndex}`, { - message: LL.form.error.reservedIp(), - }); - } - if (!valid) { - validationErrors = true; - setError(`modifiableIpParts.${fieldIndex}`, { - message: LL.form.error.invalidIp(), - }); - } - }); - } catch (_) { - validationErrors = true; - toaster.error(LL.messages.error()); - } - } - - // submit form if no validation errors occurred - if (!validationErrors) { - try { - await onSubmit(values); - } catch (_) { - toaster.error(LL.messages.error()); - } - } - }; - - const autoAssignRecommendedIp = useCallback( - (locationId: number | undefined) => { - if (locationId !== undefined && mode !== StandaloneDeviceModalFormMode.EDIT) { - setIpIsLoading(true); - void getAvailableIp({ - locationId, - }) - .then((resp) => { - setInternalRecommendedIps(resp); - resetField('modifiableIpParts', { - defaultValue: resp.map((r) => r.modifiable_part), - }); - }) - .finally(() => { - setIpIsLoading(false); - }); - } - }, - [getAvailableIp, resetField, mode], - ); - - // inform parent that form is processing stuff - useEffect(() => { - const res = isSubmitting; - onLoadingChange(res); - }, [isSubmitting, onLoadingChange]); - - // handle form sub from outside - useEffect(() => { - const sub = submitSubject.subscribe(() => { - if (submitRef.current) { - submitRef.current.click(); - } - }); - return () => sub.unsubscribe(); - }, [submitSubject]); - - const recommendedIps = internalRecommendedIps || initialIpRecommendation; - return ( -
- - - - {recommendedIps.map((ip, i) => ( - - ))} - {mode === StandaloneDeviceModalFormMode.CREATE_MANUAL && ( - <> - - - - )} - - - ); -}; diff --git a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/formSchema.ts b/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/formSchema.ts deleted file mode 100644 index e43a1aaaf..000000000 --- a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/formSchema.ts +++ /dev/null @@ -1,64 +0,0 @@ -import z from 'zod'; -import type { TranslationFunctions } from '../../../../../i18n/i18n-types'; -import { isPresent } from '../../../../../shared/defguard-ui/utils/isPresent'; -import { validateWireguardPublicKey } from '../../../../../shared/validators'; -import { WGConfigGenChoice } from '../../AddStandaloneDeviceModal/types'; -import { StandaloneDeviceModalFormMode } from '../types'; - -type SchemaProps = { - mode: StandaloneDeviceModalFormMode; - reservedNames: string[]; - originalName?: string; -}; - -export const standaloneDeviceFormSchema = ( - LL: TranslationFunctions, - { mode, reservedNames, originalName }: SchemaProps, -) => { - const errors = LL.form.error; - - return z - .object({ - name: z - .string() - .trim() - .min(1, LL.form.error.required()) - .refine((value) => { - if (mode === StandaloneDeviceModalFormMode.EDIT && isPresent(originalName)) { - const filtered = reservedNames.filter((n) => n !== originalName.trim()); - return !filtered.includes(value.trim()); - } - return !reservedNames.includes(value.trim()); - }, LL.form.error.reservedName()), - location_id: z.number(), - description: z.string().trim().optional(), - modifiableIpParts: z.array(z.string().trim().min(1, LL.form.error.required())), - generationChoice: z.nativeEnum(WGConfigGenChoice), - wireguard_pubkey: z.string().trim().optional(), - }) - .superRefine((vals, ctx) => { - if (mode === StandaloneDeviceModalFormMode.CREATE_MANUAL) { - if (vals.generationChoice === WGConfigGenChoice.MANUAL) { - const result = validateWireguardPublicKey({ - requiredError: errors.required(), - maxError: errors.maximumLengthOf({ length: 44 }), - minError: errors.minimumLengthOf({ length: 44 }), - validKeyError: errors.invalid(), - }).safeParse(vals.wireguard_pubkey); - if (!result.success) { - result.error.errors.forEach((e) => { - ctx.addIssue({ - path: ['wireguard_pubkey'], - message: e.message, - code: 'custom', - }); - }); - } - } - } - }); -}; - -export type StandaloneDeviceFormFields = z.infer< - ReturnType ->; diff --git a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/style.scss b/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/style.scss deleted file mode 100644 index ef5f509ce..000000000 --- a/web/src/pages/devices/modals/components/StandaloneDeviceModalForm/style.scss +++ /dev/null @@ -1,14 +0,0 @@ -.standalone-device-modal-form { - .row { - width: 100%; - display: flex; - flex-flow: column; - row-gap: 0; - - @include media-breakpoint-up(lg) { - display: grid; - grid-template-columns: 1fr 1fr; - column-gap: 20px; - } - } -} diff --git a/web/src/pages/devices/modals/components/types.ts b/web/src/pages/devices/modals/components/types.ts deleted file mode 100644 index 408ff8b14..000000000 --- a/web/src/pages/devices/modals/components/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum StandaloneDeviceModalFormMode { - CREATE_CLI, - CREATE_MANUAL, - EDIT, -} diff --git a/web/src/pages/devices/style.scss b/web/src/pages/devices/style.scss deleted file mode 100644 index eb7878e3b..000000000 --- a/web/src/pages/devices/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -#standalone-devices-page { - .list-container { - position: relative; - max-width: 100%; - overflow: auto; - } -} diff --git a/web/src/pages/devices/types.ts b/web/src/pages/devices/types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/pages/enrollment/EnrollmentPage.tsx b/web/src/pages/enrollment/EnrollmentPage.tsx deleted file mode 100644 index 120d198a0..000000000 --- a/web/src/pages/enrollment/EnrollmentPage.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { useEffect } from 'react'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { MessageBox } from '../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../shared/defguard-ui/components/Layout/MessageBox/types'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import { EnrollmentEmail } from './components/EnrollmentEmail/EnrollmentEmail'; -import { EnrollmentVPN } from './components/EnrollmentVPN/EnrollmentVPN'; -import { EnrollmentWelcomeMessage } from './components/EnrollmentWelcomeMessage/EnrollmentWelcomeMessage'; -import { useEnrollmentStore } from './hooks/useEnrollmentStore'; - -export const EnrollmentPage = () => { - const { - settings: { getSettings }, - } = useApi(); - - const { LL } = useI18nContext(); - - const pageLL = LL.enrollmentPage; - - const setEnrollment = useEnrollmentStore((state) => state.setState); - - const { data: settingsData, isLoading } = useQuery({ - queryFn: getSettings, - queryKey: [QueryKeys.FETCH_SETTINGS], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (settingsData) { - setEnrollment({ settings: settingsData }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [settingsData]); - - return ( - -

{pageLL.title()}

- - {!isLoading && ( -
-
- - -
-
- -
-
- )} -
- ); -}; diff --git a/web/src/pages/enrollment/components/EnrollmentEmail/EnrollmentEmail.tsx b/web/src/pages/enrollment/components/EnrollmentEmail/EnrollmentEmail.tsx deleted file mode 100644 index d581f9383..000000000 --- a/web/src/pages/enrollment/components/EnrollmentEmail/EnrollmentEmail.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import './style.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { type ChangeEvent, useEffect, useState } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgIconCheckmark from '../../../../shared/components/svg/IconCheckmark'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { CheckBox } from '../../../../shared/defguard-ui/components/Layout/Checkbox/CheckBox'; -import { Input } from '../../../../shared/defguard-ui/components/Layout/Input/Input'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { TextareaAutoResizable } from '../../../../shared/defguard-ui/components/Layout/TextareaAutoResizable/TextareaAutoResizable'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../shared/queries'; -import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; - -export const EnrollmentEmail = () => { - const { - settings: { editSettings }, - } = useApi(); - const queryClient = useQueryClient(); - const { LL } = useI18nContext(); - const [duplicateMessage, setDuplicateMessage] = useState(false); - const settings = useEnrollmentStore((state) => state.settings); - const [email, setEmail] = useState(settings?.enrollment_welcome_email ?? ''); - const [subject, setSubject] = useState( - settings?.enrollment_welcome_email_subject ?? '', - ); - const componentLL = LL.enrollmentPage.settings.welcomeEmail; - const toaster = useToaster(); - - const { isPending: isLoading, mutate } = useMutation({ - mutationFn: editSettings, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_SETTINGS], - }); - toaster.success(LL.enrollmentPage.messages.edit.success()); - }, - onError: (e) => { - toaster.error(LL.enrollmentPage.messages.edit.error()); - console.error(e); - }, - }); - - const handleSave = () => { - if (!isLoading && settings) { - mutate({ - ...settings, - enrollment_use_welcome_message_as_email: duplicateMessage, - enrollment_welcome_email: email, - enrollment_welcome_email_subject: subject, - }); - } - }; - - useEffect(() => { - if (settings) { - setDuplicateMessage(settings.enrollment_use_welcome_message_as_email); - setEmail(settings.enrollment_welcome_email); - setSubject(settings.enrollment_welcome_email_subject); - } - }, [settings]); - - return ( -
-
-

{componentLL.title()}

-
- - -
-
- setDuplicateMessage((state) => !state)} - disabled={isLoading} - /> - setDuplicateMessage((state) => !state)}> - {componentLL.controls.duplicateWelcome()} - -
-
- setSubject(e.target.value)} - disabled={isLoading || isUndefined(settings)} - /> -
- ) => setEmail(ev.target.value)} - disabled={isLoading || isUndefined(settings)} - /> -
-
-
- ); -}; diff --git a/web/src/pages/enrollment/components/EnrollmentEmail/style.scss b/web/src/pages/enrollment/components/EnrollmentEmail/style.scss deleted file mode 100644 index d5fa90074..000000000 --- a/web/src/pages/enrollment/components/EnrollmentEmail/style.scss +++ /dev/null @@ -1,82 +0,0 @@ -@use '@scssutils' as *; - -#enrollment-email { - & > .message-box-spacer { - padding-bottom: 26px; - - .message-box { - background-color: var(--surface-tag-modal); - } - } - - & > .card { - @include media-breakpoint-up(lg) { - padding: 17px 15px; - } - - & > .controls { - width: 100%; - display: flex; - flex-flow: row wrap; - column-gap: 10px; - margin-bottom: 16px; - - & > .checkbox-wrap { - display: flex; - flex-flow: row nowrap; - column-gap: 5px; - align-items: center; - justify-content: flex-start; - - & > span { - @include typography(app-modal-1); - - color: var(--text-body-secondary); - user-select: none; - cursor: pointer; - } - } - - & > .btn { - min-width: 140px; - - &:nth-child(2) { - margin-left: auto; - } - } - } - - & > .input { - box-sizing: border-box; - margin: 20px 0; - width: 100%; - padding: 0; - } - - & > .text-wrapper { - border-radius: 15px; - box-sizing: border-box; - padding: 20px; - border: 1px solid var(--border-primary); - width: 100%; - min-height: 700px; - overflow: hidden; - - & > textarea { - min-height: 660px; - width: 100%; - height: inherit; - border: none; - padding: 0; - margin: 0; - resize: none; - overflow: none; - background-color: transparent; - - @include typography(app-welcome-2); - - color: var(--text-body-primary); - } - } - } -} diff --git a/web/src/pages/enrollment/components/EnrollmentVPN/EnrollmentVPN.tsx b/web/src/pages/enrollment/components/EnrollmentVPN/EnrollmentVPN.tsx deleted file mode 100644 index 21023642a..000000000 --- a/web/src/pages/enrollment/components/EnrollmentVPN/EnrollmentVPN.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import './style.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { useCallback, useMemo, useState } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Select } from '../../../../shared/defguard-ui/components/Layout/Select/Select'; -import { - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../../shared/defguard-ui/components/Layout/Select/types'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../shared/queries'; -import { useEnrollmentStore } from '../../hooks/useEnrollmentStore'; - -export const EnrollmentVPN = () => { - const [isLoading, setLoading] = useState(false); - - const { LL } = useI18nContext(); - - const componentLL = LL.enrollmentPage.settings.vpnOptionality; - - const { - settings: { editSettings }, - } = useApi(); - - const queryClient = useQueryClient(); - - const toaster = useToaster(); - - const settings = useEnrollmentStore((state) => state.settings); - - const { mutate } = useMutation({ - mutationFn: editSettings, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_SETTINGS], - }); - toaster.success(LL.enrollmentPage.messages.edit.success()); - setLoading(false); - }, - onError: () => { - toaster.error(LL.enrollmentPage.messages.edit.error()); - setLoading(false); - }, - }); - - const vpnOptionalityOptions = useMemo( - () => [ - { - key: 1, - value: true, - label: componentLL.select.options.optional(), - }, - { - key: 2, - value: false, - label: componentLL.select.options.mandatory(), - }, - ], - [componentLL.select.options], - ); - - const renderSelectedVpn = useCallback( - (selected: boolean): SelectSelectedValue => { - const option = vpnOptionalityOptions.find((o) => o.value === selected); - - if (!option) throw Error("Selected value doesn't exist"); - - return { - key: option.key, - displayValue: option.label, - }; - }, - [vpnOptionalityOptions], - ); - - const handleChange = useCallback( - (val: boolean) => { - if (!isLoading && settings) { - setLoading(true); - try { - mutate({ ...settings, enrollment_vpn_step_optional: val }); - } catch (e) { - setLoading(false); - toaster.error(LL.enrollmentPage.messages.edit.error()); - console.error(e); - } - } - }, - [LL.enrollmentPage.messages.edit, isLoading, mutate, settings, toaster], - ); - - return ( -
-
-

{componentLL.title()}

-
- setNetworkState({ selectedNetworkId: res })} - onCreate={() => { - resetWizardState(); - navigate('/admin/wizard', { replace: true }); - }} - /> -
- )} - - - - ); -}; diff --git a/web/src/pages/network/NetworkEditForm/components/DividerHeader.tsx b/web/src/pages/network/NetworkEditForm/components/DividerHeader.tsx deleted file mode 100644 index 86243ea08..000000000 --- a/web/src/pages/network/NetworkEditForm/components/DividerHeader.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { PropsWithChildren } from 'react'; - -type DividerHeaderProps = { - text: string; -} & PropsWithChildren; - -export const DividerHeader = ({ text, children }: DividerHeaderProps) => { - return ( -
-
-

{text}

- {children} -
-
- ); -}; diff --git a/web/src/pages/network/NetworkEditForm/style.scss b/web/src/pages/network/NetworkEditForm/style.scss deleted file mode 100644 index c8840e9d8..000000000 --- a/web/src/pages/network/NetworkEditForm/style.scss +++ /dev/null @@ -1,61 +0,0 @@ -#network-page, -.network-setup { - .network-config { - & > .card { - padding: 15px 30px 40px; - - & > form { - justify-content: flex-start; - align-content: flex-start; - align-items: flex-start; - - & > .hidden { - @include visually-hidden; - } - - & > label { - margin-bottom: 12px; - } - - & > .input-container { - width: 100%; - } - - & > .message-box-spacer { - &:not(:last-child) { - padding-bottom: 25px; - } - } - } - } - } - - #location-mfa-mode-explain-message-box { - ul { - list-style-position: inside; - margin-top: 8px; - - li { - p { - display: inline; - } - } - } - } - - .divider-header { - padding-bottom: var(--spacing-s); - - .inner { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - border-bottom: 1px solid var(--border-primary); - } - - .header { - @include typography(app-side-bar); - } - } -} diff --git a/web/src/pages/network/NetworkGateway/NetworkGateway.tsx b/web/src/pages/network/NetworkGateway/NetworkGateway.tsx deleted file mode 100644 index 319c86355..000000000 --- a/web/src/pages/network/NetworkGateway/NetworkGateway.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { useCallback, useMemo } from 'react'; -import ReactMarkdown from 'react-markdown'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { NetworkGatewaysStatus } from '../../../shared/components/network/GatewaysStatus/NetworkGatewaysStatus/NetworkGatewaysStatus'; -import { ActionButton } from '../../../shared/defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../shared/defguard-ui/components/Layout/ActionButton/types'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { ExpandableCard } from '../../../shared/defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { MessageBox } from '../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import useApi from '../../../shared/hooks/useApi'; -import { useClipboard } from '../../../shared/hooks/useClipboard'; -import { externalLink } from '../../../shared/links'; -import { QueryKeys } from '../../../shared/queries'; -import { useNetworkPageStore } from '../hooks/useNetworkPageStore'; - -export const NetworkGatewaySetup = () => { - const { writeToClipboard } = useClipboard(); - const selectedNetworkId = useNetworkPageStore((state) => state.selectedNetworkId); - const { LL } = useI18nContext(); - const { - network: { getNetworkToken }, - } = useApi(); - - const { data: networkToken } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORK_TOKEN, selectedNetworkId], - queryFn: () => getNetworkToken(selectedNetworkId as number), - refetchOnMount: true, - refetchOnWindowFocus: false, - enabled: Boolean(selectedNetworkId), - }); - - const command = useCallback(() => { - return `docker run -e DEFGUARD_TOKEN=${networkToken?.token} -e DEFGUARD_GRPC_URL=${networkToken?.grpc_url} --restart unless-stopped --network host --cap-add NET_ADMIN ghcr.io/defguard/gateway:latest`; - }, [networkToken]); - - const returnNetworkToken = useCallback(() => { - return `${networkToken?.token}`; - }, [networkToken]); - - const getActions = useMemo( - () => [ - { - void writeToClipboard(command()); - }} - />, - ], - [command, writeToClipboard], - ); - - const getNetworkTokenActions = useMemo( - () => [ - { - void writeToClipboard(returnNetworkToken()); - }} - />, - ], - [returnNetworkToken, writeToClipboard], - ); - - // TODO: consider a better way to redirect to the gateway releases page - const handleSubmit = () => { - window.location.href = 'https://github.com/DefGuard/gateway/releases'; - }; - - return ( -
-
-

{LL.gatewaySetup.header.main()}

- {/* {parse( - LL.gatewaySetup.messages.runCommand({ - setupGatewayDocs: externalLink.gitbook.setup.gateway, - }), - )} */} - - {LL.gatewaySetup.messages.runCommand({ - setupGatewayDocs: externalLink.gitbook.setup.gateway, - })} - -
- - - {networkToken - ? LL.gatewaySetup.messages.authToken({ - setupGatewayDocs: externalLink.gitbook.setup.gateway, - }) - : LL.gatewaySetup.messages.createNetwork()} - - - {networkToken && ( - -

{returnNetworkToken()}

-
- )} -

{LL.gatewaySetup.header.dockerBasedGatewaySetup()}

- - - {networkToken - ? LL.gatewaySetup.messages.dockerBasedGatewaySetup({ - setupGatewayDocs: externalLink.gitbook.setup.gateway, - }) - : LL.gatewaySetup.messages.createNetwork()} - - - {networkToken && ( - -

{command()}

-
- )} -

{LL.gatewaySetup.header.fromPackage()}

- - - {LL.gatewaySetup.messages.fromPackage({ - setupGatewayDocs: externalLink.gitbook.setup.gateway, - })} - - -
- ); -}; diff --git a/web/src/pages/network/NetworkGateway/style.scss b/web/src/pages/network/NetworkGateway/style.scss deleted file mode 100644 index 9bd3147d0..000000000 --- a/web/src/pages/network/NetworkGateway/style.scss +++ /dev/null @@ -1,74 +0,0 @@ -#network-page { - .gateway { - display: flex; - flex-direction: column; - row-gap: 20px; - - & > section.header-section { - h2, - p { - margin-bottom: 35px; - } - } - - & > .message-box-spacer { - padding-bottom: 20px; - - @include media-breakpoint-up(lg) { - padding-bottom: 40px; - } - } - - & > .expandable-card { - & > .expanded-content { - overflow: hidden; - box-sizing: border-box; - - & > p { - width: 100%; - max-width: 100%; - text-overflow: ellipsis; - text-align: left; - word-break: break-all; - white-space: normal; - @include small-text; - - line-height: 22px; - color: var(--text-body-secondary); - padding: 20px 0px; - } - } - - margin-bottom: 30px; - } - - h2 { - @include typography(app-body-1); - color: var(--text-body-primary); - text-align: center; - } - - h3 { - @include typography(modal-title); - - color: var(--text-body-primary); - } - - p { - & > a { - color: var(--text-body-secondary); - } - - @include typography(app-modal-2); - color: var(--text-body-secondary); - } - - & > p { - text-align: center; - } - - & > .btn { - width: 100%; - } - } -} diff --git a/web/src/pages/network/NetworkPage.tsx b/web/src/pages/network/NetworkPage.tsx deleted file mode 100644 index b6eb19d25..000000000 --- a/web/src/pages/network/NetworkPage.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { useEffect } from 'react'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { deviceBreakpoints } from '../../shared/constants'; -import { Card } from '../../shared/defguard-ui/components/Layout/Card/Card'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import { useNetworkPageStore } from './hooks/useNetworkPageStore'; -import { NetworkControls } from './NetworkControls/NetworkControls'; -import { NetworkEditForm } from './NetworkEditForm/NetworkEditForm'; -import { NetworkGatewaySetup } from './NetworkGateway/NetworkGateway'; -import { NetworkTabs } from './NetworkTabs/NetworkTabs'; - -export const NetworkPage = () => { - const { - network: { getNetworks }, - } = useApi(); - const { LL } = useI18nContext(); - const setNetworks = useNetworkPageStore((state) => state.setNetworks); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - - const { data: networksData } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORKS], - queryFn: getNetworks, - refetchOnWindowFocus: false, - }); - - useEffect(() => { - if (networksData) { - setNetworks(networksData); - } - }, [networksData, setNetworks]); - - return ( - -
-

{LL.networkPage.pageTitle()}

-
- {breakpoint === 'desktop' && } - - - - - -
- ); -}; diff --git a/web/src/pages/network/NetworkTabs/NetworkTabs.tsx b/web/src/pages/network/NetworkTabs/NetworkTabs.tsx deleted file mode 100644 index fce9d2516..000000000 --- a/web/src/pages/network/NetworkTabs/NetworkTabs.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useMemo } from 'react'; -import { useNavigate } from 'react-router'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { CardTabs } from '../../../shared/defguard-ui/components/Layout/CardTabs/CardTabs'; -import { useWizardStore } from '../../wizard/hooks/useWizardStore'; -import { useNetworkPageStore } from '../hooks/useNetworkPageStore'; - -export const NetworkTabs = () => { - const navigate = useNavigate(); - const { LL } = useI18nContext(); - const networks = useNetworkPageStore((state) => state.networks); - const selectedNetworkId = useNetworkPageStore((state) => state.selectedNetworkId); - const setPageState = useNetworkPageStore((state) => state.setState); - const resetWizardState = useWizardStore((state) => state.resetState); - const tabs = useMemo( - () => - networks.map((n) => ({ - key: n.id, - onClick: () => { - if (n.id !== selectedNetworkId) { - setPageState({ selectedNetworkId: n.id }); - } - }, - content: n.name, - active: n.id === selectedNetworkId, - })), - [networks, selectedNetworkId, setPageState], - ); - - return ( - { - resetWizardState(); - navigate('/admin/wizard', { replace: true }); - }} - loading={!networks || networks.length === 0} - /> - ); -}; diff --git a/web/src/pages/network/hooks/useNetworkPageStore.ts b/web/src/pages/network/hooks/useNetworkPageStore.ts deleted file mode 100644 index edac1fce3..000000000 --- a/web/src/pages/network/hooks/useNetworkPageStore.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Subject } from 'rxjs'; -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { Network } from '../../../shared/types'; - -type NetworkPageStore = { - saveSubject: Subject; - loading: boolean; - networks: Network[]; - selectedNetworkId?: number; - setState: (data: Partial) => void; - setNetworks: (data: Network[]) => void; -}; - -export const useNetworkPageStore = createWithEqualityFn()( - (set, get) => ({ - saveSubject: new Subject(), - loading: false, - networks: [], - selectedNetworkId: undefined, - setState: (newState) => set(() => newState), - setNetworks: (networks) => { - const sortedNetworks = networks.sort((a, b) => a.name.localeCompare(b.name)); - if (get().selectedNetworkId === undefined) { - set({ selectedNetworkId: sortedNetworks[0]?.id }); - } - set({ networks: sortedNetworks }); - }, - }), - Object.is, -); diff --git a/web/src/pages/network/style.scss b/web/src/pages/network/style.scss deleted file mode 100644 index 78f356703..000000000 --- a/web/src/pages/network/style.scss +++ /dev/null @@ -1,128 +0,0 @@ -#network-page { - & > .page-content { - box-sizing: border-box; - overflow-y: auto; - overflow-x: hidden; - display: block; - padding: 0; - background-color: var(--white); - - @include media-breakpoint-up(lg) { - background-color: var(--bg-light); - padding: 64px 70px 45px; - } - - & > header { - display: none; - height: auto; - margin-bottom: 5px; - width: 100%; - - & > h1 { - user-select: none; - - @include page-header; - } - - @include media-breakpoint-up(lg) { - display: block; - - & > h1 { - line-height: 62px; - } - } - } - - & > .network-card { - border-radius: 0 15px 15px 15px; - width: 100%; - max-width: 100%; - padding: 30px 20px 20px; - box-sizing: border-box; - display: grid; - grid-template-rows: repeat(3, auto); - grid-template-columns: 1fr; - row-gap: 15px; - grid-template-areas: - 'controls' - 'config' - 'gateway'; - - @include media-breakpoint-up(lg) { - padding: 20px; - row-gap: 30px; - column-gap: 30px; - grid-template-rows: 40px repeat(2, auto); - grid-template-columns: 1fr; - grid-template-areas: - 'controls' - 'config' - 'gateway'; - } - - @include media-breakpoint-up(xl) { - padding: 20px; - row-gap: 48px; - column-gap: 57px; - grid-template-rows: 40px auto; - grid-template-columns: 1fr 1fr; - grid-template-areas: - 'controls controls' - 'config gateway'; - } - - & > .network-controls { - grid-area: controls; - } - - & > .network-config { - grid-area: config; - } - - & > .gateway { - grid-area: gateway; - } - - & > * { - width: 100%; - max-width: 100%; - } - - header { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: 7px; - user-select: none; - margin-bottom: 20px; - - h2 { - @include typography-legacy(20px, 30px, semiBold, var(--text-main), 'Poppins'); - } - } - - .message-box-spacer { - &:not(:last-child) { - padding-bottom: 20px; - } - } - - form { - & > * { - width: 100%; - } - - & > .message-box-spacer { - &:not(:last-child) { - padding-bottom: 32px; - } - } - - & > .form-checkbox { - margin-bottom: 25px; - } - } - } - } -} diff --git a/web/src/pages/openid/OpenidClientsListPage/OpenidClientsListPage.tsx b/web/src/pages/openid/OpenidClientsListPage/OpenidClientsListPage.tsx deleted file mode 100644 index 91ddb2d7e..000000000 --- a/web/src/pages/openid/OpenidClientsListPage/OpenidClientsListPage.tsx +++ /dev/null @@ -1,372 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { isUndefined, orderBy } from 'lodash-es'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { PageContainer } from '../../../shared/components/Layout/PageContainer/PageContainer'; -import IconCheckmarkGreen from '../../../shared/components/svg/IconCheckmarkGreen'; -import IconDeactivated from '../../../shared/components/svg/IconDeactivated'; -import SvgIconPlusWhite from '../../../shared/components/svg/IconPlusWhite'; -import { deviceBreakpoints } from '../../../shared/constants'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { EditButton } from '../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { LoaderSpinner } from '../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { ConfirmModal } from '../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import { NoData } from '../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { Search } from '../../../shared/defguard-ui/components/Layout/Search/Search'; -import { Select } from '../../../shared/defguard-ui/components/Layout/Select/Select'; -import type { - SelectOption, - SelectSelectedValue, -} from '../../../shared/defguard-ui/components/Layout/Select/types'; -import { - type ListHeader, - type ListRowCell, - ListSortDirection, -} from '../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { VirtualizedList } from '../../../shared/defguard-ui/components/Layout/VirtualizedList/VirtualizedList'; -import { useModalStore } from '../../../shared/hooks/store/useModalStore'; -import useApi from '../../../shared/hooks/useApi'; -import { useClipboard } from '../../../shared/hooks/useClipboard'; -import { useToaster } from '../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../shared/mutations'; -import { QueryKeys } from '../../../shared/queries'; -import type { OpenidClient } from '../../../shared/types'; -import { OpenIdClientModal } from '../modals/OpenIdClientModal/OpenIdClientModal'; - -export const OpenidClientsListPage = () => { - const { writeToClipboard } = useClipboard(); - const { LL } = useI18nContext(); - const toaster = useToaster(); - const queryClient = useQueryClient(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const [deleteClientModalOpen, setDeleteClientModalOpen] = useState(false); - const [deleteClient, setDeleteClient] = useState(undefined); - const [searchValue, setSearchValue] = useState(''); - const { - openid: { getOpenidClients, changeOpenidClientState, deleteOpenidClient }, - } = useApi(); - const setOpenIdClientModalState = useModalStore((state) => state.setOpenIdClientModal); - - const selectOptions = useMemo( - (): SelectOption[] => [ - { - key: 1, - label: LL.openidOverview.filterLabels.all(), - value: FilterOption.ALL, - }, - { - key: 3, - label: LL.openidOverview.filterLabels.enabled(), - value: FilterOption.ENABLED, - }, - { - key: 2, - label: LL.openidOverview.filterLabels.disabled(), - value: FilterOption.DISABLED, - }, - ], - [LL], - ); - - const [selectedFilter, setSelectedFilter] = useState(FilterOption.ALL); - - const { mutate: deleteClientMutation, isPending: deleteClientLoading } = useMutation({ - mutationKey: [MutationKeys.DELETE_OPENID_CLIENT], - mutationFn: deleteOpenidClient, - onSuccess: () => { - toaster.success(LL.openidOverview.deleteApp.messages.success()); - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_CLIENTS], - }); - setDeleteClientModalOpen(false); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - setDeleteClientModalOpen(false); - console.error(err); - }, - }); - - const { mutate: editClientStatusMutation } = useMutation({ - mutationFn: (client: OpenidClient) => - changeOpenidClientState({ - clientId: client.client_id, - enabled: !client.enabled, - }), - onSuccess: (_, client) => { - if (client.enabled) { - toaster.success(LL.openidOverview.disableApp.messages.success()); - } else { - toaster.success(LL.openidOverview.enableApp.messages.success()); - } - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_CLIENTS], - }); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const { data: clients, isLoading } = useQuery({ - queryKey: [QueryKeys.FETCH_CLIENTS], - queryFn: getOpenidClients, - refetchOnWindowFocus: false, - refetchInterval: 15000, - }); - - const filteredClients = useMemo(() => { - if (!clients || (clients && clients.length === 0)) return []; - let res = orderBy(clients, ['name'], ['asc']); - res = res.filter((c) => c.name.toLowerCase().includes(searchValue.toLowerCase())); - switch (selectedFilter) { - case FilterOption.ALL: - break; - case FilterOption.ENABLED: - res = res.filter((c) => c.enabled); - break; - case FilterOption.DISABLED: - res = res.filter((c) => !c.enabled); - break; - } - return res; - }, [clients, searchValue, selectedFilter]); - - const listHeaders = useMemo(() => { - const res: ListHeader[] = [ - { - key: 'name', - text: LL.openidOverview.list.headers.name(), - active: true, - sortDirection: ListSortDirection.ASC, - }, - { - key: 'status', - text: LL.openidOverview.list.headers.status(), - }, - { - key: 'actions', - text: LL.openidOverview.list.headers.actions(), - sortable: false, - }, - ]; - return res; - }, [LL.openidOverview.list.headers]); - - const listCells = useMemo(() => { - const res: ListRowCell[] = [ - { - key: 'name', - render: (client) => {client.name}, - }, - { - key: 'status', - render: (client) => - client.enabled ? ( - <> - {' '} - {LL.openidOverview.list.status.enabled()} - - ) : ( - <> - {LL.openidOverview.list.status.disabled()} - - ), - }, - { - key: 'actions', - render: (client) => ( - - - setOpenIdClientModalState({ - visible: true, - viewMode: false, - client, - }) - } - /> - editClientStatusMutation(client)} - /> - { - void writeToClipboard( - client.client_id, - LL.openidOverview.messages.copySuccess(), - ); - }} - /> - { - setDeleteClient(client); - setDeleteClientModalOpen(true); - }} - /> - - ), - }, - ]; - return res; - }, [ - writeToClipboard, - LL.openidOverview.list.editButton, - LL.openidOverview.list.status, - LL.openidOverview.messages, - editClientStatusMutation, - setOpenIdClientModalState, - ]); - - const getListPadding = useMemo(() => { - if (breakpoint === 'desktop') { - return { - left: 60, - right: 60, - }; - } - return { - left: 20, - right: 20, - }; - }, [breakpoint]); - - const renderSelectedFilter = useCallback( - (selected: FilterOption): SelectSelectedValue => { - const option = selectOptions.find((o) => o.value === selected); - if (!option) throw Error("Selected value doesn't exists"); - return { - key: selected, - displayValue: option.label, - }; - }, - [selectOptions], - ); - - useEffect(() => { - if (breakpoint !== 'desktop' && selectedFilter !== FilterOption.ALL) { - setSelectedFilter(FilterOption.ALL); - } - }, [breakpoint, selectedFilter]); - - return ( - -
-

{LL.openidOverview.pageTitle()}

- setSearchValue(value)} - /> -
-
-
- {LL.openidOverview.clientCount()} -
- {clients && clients.length > 0 ? clients.length : 0} -
-
-
- {breakpoint === 'desktop' && ( - { - if (networkId !== null) { - navigate(`/admin/overview/${networkId}${location.search}`); - } else { - navigate(`/admin/overview${location.search}`); - } - }} - /> - ); -}; diff --git a/web/src/pages/overview-index/components/OverviewTimeSelection/OverviewTimeSelection.tsx b/web/src/pages/overview-index/components/OverviewTimeSelection/OverviewTimeSelection.tsx deleted file mode 100644 index 44c4539fa..000000000 --- a/web/src/pages/overview-index/components/OverviewTimeSelection/OverviewTimeSelection.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Select } from '../../../../shared/defguard-ui/components/Layout/Select/Select'; -import { - type SelectOption, - SelectSizeVariant, -} from '../../../../shared/defguard-ui/components/Layout/Select/types'; -import { useOverviewTimeSelection } from '../hooks/useOverviewTimeSelection'; - -const availableFilters: number[] = [1, 2, 4, 6, 8, 12, 16, 24]; - -export const OverviewTimeSelection = () => { - const { from, setTimeSelection } = useOverviewTimeSelection(); - const { LL } = useI18nContext(); - const options = useMemo((): SelectOption[] => { - return availableFilters.map((filter) => ({ - key: filter, - label: LL.networkOverview.timeRangeSelectionLabel({ - value: filter, - }), - value: filter, - })); - }, [LL.networkOverview]); - - return ( - { - setOverviewStore({ selectedNetworkId: res }); - }} - /> - ); -}; diff --git a/web/src/pages/overview/OverviewPage.tsx b/web/src/pages/overview/OverviewPage.tsx deleted file mode 100644 index 9def60e10..000000000 --- a/web/src/pages/overview/OverviewPage.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { isUndefined, orderBy } from 'lodash-es'; -import { useEffect, useMemo } from 'react'; -import { useLocation, useNavigate, useParams } from 'react-router'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { NetworkGatewaysStatus } from '../../shared/components/network/GatewaysStatus/NetworkGatewaysStatus/NetworkGatewaysStatus'; -import { deviceBreakpoints } from '../../shared/constants'; -import { LoaderSpinner } from '../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { NoData } from '../../shared/defguard-ui/components/Layout/NoData/NoData'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import { OverviewLayoutType } from '../../shared/types'; -import { sortByDate } from '../../shared/utils/sortByDate'; -import { useOverviewTimeSelection } from '../overview-index/components/hooks/useOverviewTimeSelection'; -import { useWizardStore } from '../wizard/hooks/useWizardStore'; -import { useOverviewStore } from './hooks/store/useOverviewStore'; -import { OverviewConnectedUsers } from './OverviewConnectedUsers/OverviewConnectedUsers'; -import { StandaloneDeviceConnectionCard } from './OverviewConnectedUsers/UserConnectionCard/UserConnectionCard'; -import { OverviewExpandable } from './OverviewExpandable/OverviewExpandable'; -import { OverviewHeader } from './OverviewHeader/OverviewHeader'; -import { OverviewStats } from './OverviewStats/OverviewStats'; - -const STATUS_REFETCH_TIMEOUT = 30 * 1000; - -export const OverviewPage = () => { - const navigate = useNavigate(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const setOverViewStore = useOverviewStore((state) => state.setState); - const resetWizard = useWizardStore((state) => state.resetState); - const viewMode = useOverviewStore((state) => state.viewMode); - const { LL } = useI18nContext(); - const { from: statsFilter } = useOverviewTimeSelection(); - const { networkId } = useParams(); - const selectedNetworkId = parseInt(networkId ?? '', 10); - const location = useLocation(); - - const { - network: { getNetworks, getOverviewStats, getNetworkStats }, - } = useApi(); - - const { data: fetchNetworksData } = useQuery({ - queryKey: ['network'], - queryFn: getNetworks, - placeholderData: (perv) => perv, - select: (networks) => - orderBy(networks, (network) => network.name.toLowerCase(), ['asc']), - }); - - const { data: networkStats } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORK_STATS, statsFilter, selectedNetworkId], - queryFn: () => - getNetworkStats({ - from: statsFilter, - id: selectedNetworkId, - }), - refetchOnWindowFocus: false, - refetchInterval: STATUS_REFETCH_TIMEOUT, - enabled: !isUndefined(selectedNetworkId) && !Number.isNaN(selectedNetworkId), - }); - - const { data: overviewStats, isLoading: userStatsLoading } = useQuery({ - queryKey: [QueryKeys.FETCH_NETWORK_USERS_STATS, statsFilter, selectedNetworkId], - queryFn: () => - getOverviewStats({ - from: statsFilter, - id: selectedNetworkId, - }), - enabled: - !isUndefined(statsFilter) && - !isUndefined(selectedNetworkId) && - !Number.isNaN(selectedNetworkId), - refetchOnWindowFocus: false, - refetchInterval: STATUS_REFETCH_TIMEOUT, - }); - - const getNetworkUsers = useMemo(() => { - if (overviewStats !== undefined) { - const user = sortByDate(overviewStats.user_devices, (s) => { - const fistDevice = sortByDate(s.devices, (d) => d.connected_at, false)[0]; - return fistDevice.connected_at; - }); - const devices = sortByDate( - overviewStats.network_devices.filter((d) => d.connected_at !== undefined), - (d) => d.connected_at as string, - ); - return { - network_devices: devices, - user_devices: user, - }; - } - return undefined; - }, [overviewStats]); - - // FIXME: lock viewMode on grid for now - useEffect(() => { - if (viewMode !== OverviewLayoutType.GRID) { - setOverViewStore({ viewMode: OverviewLayoutType.GRID }); - } - }, [setOverViewStore, viewMode]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (Number.isNaN(selectedNetworkId)) { - navigate(`/admin/overview/${location.search}`, { - replace: true, - }); - } - if (fetchNetworksData) { - if (!fetchNetworksData.length) { - resetWizard(); - navigate('/admin/wizard', { replace: true }); - } else { - setOverViewStore({ networks: fetchNetworksData }); - const ids = fetchNetworksData.map((n) => n.id); - if ( - isUndefined(selectedNetworkId) || - (!isUndefined(selectedNetworkId) && !ids.includes(selectedNetworkId)) - ) { - const oldestNetwork = orderBy(fetchNetworksData, ['id'], ['asc'])[0]; - setOverViewStore({ selectedNetworkId: oldestNetwork.id }); - } - } - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetchNetworksData, selectedNetworkId]); - - return ( - <> - - - {breakpoint === 'desktop' && !isUndefined(selectedNetworkId) && ( - - )} - {networkStats && } -
- {userStatsLoading && ( -
- -
- )} - {!getNetworkUsers && !userStatsLoading && } - {!userStatsLoading && - getNetworkUsers && - getNetworkUsers.network_devices.length === 0 && - getNetworkUsers.user_devices.length === 0 && } - {!userStatsLoading && - getNetworkUsers && - getNetworkUsers.user_devices.length > 0 && ( - - - - )} - {!userStatsLoading && - getNetworkUsers && - getNetworkUsers.network_devices.length > 0 && ( - -
-
- {getNetworkUsers.network_devices.map((device) => ( - - ))} -
-
-
- )} -
-
- {/* Modals */} - - ); -}; diff --git a/web/src/pages/overview/OverviewStats/OverviewStats.tsx b/web/src/pages/overview/OverviewStats/OverviewStats.tsx deleted file mode 100644 index f4ebc26d8..000000000 --- a/web/src/pages/overview/OverviewStats/OverviewStats.tsx +++ /dev/null @@ -1,373 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { orderBy } from 'lodash-es'; -import millify from 'millify'; -import { forwardRef, type ReactNode, useId, useMemo } from 'react'; -import AutoSizer from 'react-virtualized-auto-sizer'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import IconPacketsIn from '../../../shared/components/svg/IconPacketsIn'; -import IconPacketsOut from '../../../shared/components/svg/IconPacketsOut'; -import { Card } from '../../../shared/defguard-ui/components/Layout/Card/Card'; -import { NetworkSpeed } from '../../../shared/defguard-ui/components/Layout/NetworkSpeed/NetworkSpeed'; -import { NetworkDirection } from '../../../shared/defguard-ui/components/Layout/NetworkSpeed/types'; -import { isPresent } from '../../../shared/defguard-ui/utils/isPresent'; -import type { WireguardNetworkStats } from '../../../shared/types'; -import { useOverviewTimeSelection } from '../../overview-index/components/hooks/useOverviewTimeSelection'; -import { NetworkUsageChart } from '../OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart'; -import { networkTrafficToChartData } from './utils'; - -interface Props { - networkStats: WireguardNetworkStats; -} - -export const OverviewStats = forwardRef( - ({ networkStats }, ref) => { - const { from: filterValue } = useOverviewTimeSelection(); - const peakDownload = useMemo(() => { - const sorted = orderBy(networkStats.transfer_series, (stats) => stats.download, [ - 'desc', - ]); - return sorted[0]?.download ?? 0; - }, [networkStats.transfer_series]); - const peakUpload = useMemo(() => { - const sorted = orderBy(networkStats.transfer_series, ['upload'], ['desc']); - return sorted[0]?.upload ?? 0; - }, [networkStats.transfer_series]); - const { LL } = useI18nContext(); - const localLL = LL.networkOverview.stats; - - const chartData = useMemo( - () => networkTrafficToChartData(networkStats.transfer_series, filterValue), - [filterValue, networkStats.transfer_series], - ); - - const info = useMemo( - (): InfoProps[] => [ - { - key: 'currently-active-users', - count: networkStats.current_active_users, - icon: , - title: localLL.currentlyActiveUsers(), - subTitle: localLL.totalUserDevices({ - count: networkStats.current_active_users, - }), - }, - { - key: 'current-active-network-devices', - title: localLL.currentlyActiveNetworkDevices(), - icon: , - count: networkStats.current_active_network_devices, - }, - { - key: 'active-users-icon', - title: localLL.activeUsersFilter({ - hour: filterValue, - }), - count: networkStats.active_users, - icon: , - subTitle: localLL.totalUserDevices({ - count: networkStats.active_user_devices, - }), - }, - { - key: 'active-network-devices', - title: localLL.activeNetworkDevices({ - hour: filterValue, - }), - icon: , - count: networkStats.current_active_network_devices, - }, - ], - [ - filterValue, - localLL, - networkStats.active_user_devices, - networkStats.active_users, - networkStats.current_active_network_devices, - networkStats.current_active_users, - ], - ); - - return ( -
- - {info.map((info) => ( - - ))} -
- {LL.networkOverview.stats.networkUsage()} -
-
- - {LL.networkOverview.stats.in()} - - -
-
- - {LL.networkOverview.stats.out()} - - -
-
-
-
- -
-

{LL.networkOverview.stats.activityIn({ hour: filterValue })}

-
- {LL.networkOverview.stats.peak()} -
- - -
-
- - -
-
-
-
- - {({ width, height }) => ( - <> - {networkStats.transfer_series && ( - - )} - - )} - -
-
-
- ); - }, -); - -type InfoProps = { - icon: ReactNode; - title: string; - subTitle?: string; - count: number; - key: string | number; -}; - -const InfoContainer = ({ count, icon, subTitle, title }: InfoProps) => { - return ( -
-

{title}

-
- {icon} -

- {millify(count, { - precision: 0, - })} -

-
- {isPresent(subTitle) &&

{subTitle}

} -
- ); -}; - -const CurrentActiveUsersIcon = () => { - return ( - - - - - ); -}; - -const CurrentActiveNetworkDevicesIcon = () => { - const maskId = useId(); - return ( - - - - - - - - - - - - ); -}; - -const ActiveUsersIcon = () => { - return ( - - - - - - - ); -}; - -const ActiveNetworkDevicesIcon = () => { - const maskId = useId(); - const mask2Id = useId(); - return ( - - - - - - - - - - - - - - - - - - ); -}; diff --git a/web/src/pages/overview/OverviewStats/style.scss b/web/src/pages/overview/OverviewStats/style.scss deleted file mode 100644 index ffdc73c69..000000000 --- a/web/src/pages/overview/OverviewStats/style.scss +++ /dev/null @@ -1,204 +0,0 @@ -.overview-network-stats { - display: grid; - - grid-template-columns: 1fr; - grid-template-rows: 1fr 1fr; - gap: var(--spacing-s); - padding: 0 var(--spacing-xs) var(--spacing-xs); - align-items: stretch; - overflow-x: auto; - - @include media-breakpoint-up(lg) { - overflow-x: unset; - } - - @include media-breakpoint-up(xl) { - grid-template-columns: 850px 1fr; - grid-template-rows: 1fr; - } - - @include media-breakpoint-up(xxl) { - grid-template-columns: auto 1fr; - } - - & > .summary { - position: relative; - width: 100%; - box-shadow: 5px 5px 15px #00000005; - background-color: var(--white); - border-radius: 15px; - display: flex; - align-items: stretch; - align-content: center; - justify-content: flex-start; - flex-flow: row nowrap; - min-height: 120px; - min-width: 800px; - - & > .info { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - row-gap: var(--spacing-xs); - padding: var(--spacing-s) 5px; - min-width: 155px; - - &:not(:first-child) { - border-left: 1px solid var(--border-primary); - } - - &.network-usage { - row-gap: var(--spacing-m); - } - - &:not(.network-usage) { - .info-title { - min-height: 29px; - } - } - - .info-title { - color: var(--text-body-tertiary); - text-align: center; - @include typography(app-modal-1); - max-width: 120px; - } - - .info-track { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-xs); - max-height: 42px; - - .info-count { - @include typography(app-title); - } - } - - .info-sub-title { - color: var(--text-body-tertiary); - @include typography(app-modal-3); - } - - .network-usage-track { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-xs); - - & > :nth-child(1) { - svg { - transform: rotate(-90deg); - } - } - - & > :nth-child(2) { - svg { - transform: rotate(-90deg); - } - } - - .network-speed { - &.download { - svg { - transform: rotate(90deg); - } - } - } - - .network-usage { - & > span { - @include typography(app-modal-1); - } - } - } - } - } - - & > .activity-graph { - padding: 1.5rem 2rem 1rem; - box-sizing: border-box; - border-radius: 15px; - background-color: var(--white); - box-shadow: 5px 5px 15px #00000005; - min-height: 120px; - display: grid; - grid-template-rows: 21px 1fr; - grid-template-columns: 1fr; - row-gap: 15px; - width: 100%; - - & > .chart { - grid-row: 2; - grid-column: 1 / 2; - } - - & > header { - grid-row: 1; - grid-column: 1 / 2; - display: flex; - flex-direction: row; - align-items: center; - align-content: center; - justify-content: flex-start; - - h3 { - @include typography-legacy(15px, 21px, medium, var(--text-main), 'Poppins'); - - @include media-breakpoint-down(md) { - text-transform: uppercase; - @include text-weight(semiBold); - } - - @include media-breakpoint-up(md) { - } - } - - & > .peaks { - margin-left: auto; - display: flex; - flex-direction: row; - align-items: center; - align-content: center; - justify-content: flex-start; - height: 17px; - - @include media-breakpoint-down(md) { - column-gap: 1rem; - } - - @include media-breakpoint-up(md) { - column-gap: 2rem; - } - - & > span { - @include media-breakpoint-down(md) { - &:first-of-type { - display: none; - } - } - - @include typography-legacy(12px, 17px, medium, var(--gray-light), 'Poppins'); - } - - & > .network-speed { - display: flex; - flex-direction: row; - align-items: center; - align-content: center; - justify-content: flex-start; - column-gap: 0.4rem; - } - } - } - - & > .network-speed { - margin-top: 1rem; - } - } -} diff --git a/web/src/pages/overview/OverviewStats/utils.ts b/web/src/pages/overview/OverviewStats/utils.ts deleted file mode 100644 index fe9e648be..000000000 --- a/web/src/pages/overview/OverviewStats/utils.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { groupBy, map, sortBy } from 'lodash-es'; - -import type { NetworkSpeedStats } from '../../../shared/types'; - -type AggregatedTick = { - collected_at: string; - download: number; - upload: number; - count: number; -}; - -export const networkTrafficToChartData = ( - ticks: NetworkSpeedStats[], - filter: number, -): NetworkSpeedStats[] => { - if (filter >= 2 && filter <= 5 && ticks.length > 60) { - const sorted = sortBy(ticks, (tick) => new Date(tick.collected_at).getTime()); - const first = new Date(sorted[0].collected_at).getTime(); - const last = new Date(sorted[sorted.length - 1].collected_at).getTime(); - - const totalMinutes = Math.max(1, Math.floor((last - first) / (1000 * 60))); - const minutesPerBucket = Math.ceil(totalMinutes / 60); - - const grouped = groupBy(sorted, (tick) => { - const date = new Date(tick.collected_at); - const bucketTime = new Date( - Math.floor(date.getTime() / (minutesPerBucket * 60 * 1000)) * - minutesPerBucket * - 60 * - 1000, - ); - return bucketTime.toISOString(); - }); - - return map(grouped, (group, timestamp): AggregatedTick => { - const totalDownload = group.reduce((sum, t) => sum + t.download, 0); - const totalUpload = group.reduce((sum, t) => sum + t.upload, 0); - const count = group.length; - - return { - collected_at: timestamp, - download: totalDownload, - upload: totalUpload, - count, - }; - }); - } - return ticks; -}; diff --git a/web/src/pages/overview/OverviewViewSelect/OverviewViewSelect.tsx b/web/src/pages/overview/OverviewViewSelect/OverviewViewSelect.tsx deleted file mode 100644 index 6f3ada31f..000000000 --- a/web/src/pages/overview/OverviewViewSelect/OverviewViewSelect.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { useCallback, useEffect, useMemo } from 'react'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import { deviceBreakpoints } from '../../../shared/constants'; -import { Select } from '../../../shared/defguard-ui/components/Layout/Select/Select'; -import type { - SelectOption, - SelectSelectedValue, -} from '../../../shared/defguard-ui/components/Layout/Select/types'; -import { OverviewLayoutType } from '../../../shared/types'; -import { useOverviewStore } from '../hooks/store/useOverviewStore'; - -export const OverviewViewSelect = () => { - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const defaultViewMode = useOverviewStore((state) => state.defaultViewMode); - const viewMode = useOverviewStore((state) => state.viewMode); - const setOverViewStore = useOverviewStore((state) => state.setState); - const { LL } = useI18nContext(); - - useEffect(() => { - setOverViewStore({ viewMode: defaultViewMode }); - }, [defaultViewMode, setOverViewStore]); - - const getSelectOptions = useMemo((): SelectOption[] => { - if (breakpoint === 'mobile') { - return [ - { - key: 0, - value: OverviewLayoutType.GRID, - label: LL.networkOverview.filterLabels.grid(), - }, - { - key: 1, - value: OverviewLayoutType.LIST, - label: LL.networkOverview.filterLabels.list(), - disabled: true, - }, - ]; - } - if (breakpoint === 'tablet') { - return [ - { - key: 0, - value: OverviewLayoutType.GRID, - label: LL.networkOverview.filterLabels.grid(), - disabled: true, - }, - { - key: 1, - value: OverviewLayoutType.LIST, - label: LL.networkOverview.filterLabels.list(), - disabled: false, - }, - ]; - } - return [ - { - key: 0, - value: OverviewLayoutType.GRID, - label: LL.networkOverview.filterLabels.grid(), - }, - { - key: 1, - value: OverviewLayoutType.LIST, - label: LL.networkOverview.filterLabels.list(), - }, - ]; - }, [LL.networkOverview.filterLabels, breakpoint]); - - const renderSelected = useCallback( - (selected: OverviewLayoutType): SelectSelectedValue => { - const option = getSelectOptions.find((o) => o.value === selected); - if (!option) throw Error("Selected option doesn't exists"); - return { - key: selected, - displayValue: option.label, - }; - }, - [getSelectOptions], - ); - - return ( - setSelectedFilterOption(filter)} - /> - )} -
- {!isLoading && filteredProvisioners && filteredProvisioners.length > 0 && ( - - )} - {!isLoading && - (!filteredProvisioners || !filteredProvisioners.length ? ( - - ) : null)} - {isLoading && ( -
- -
- )} - -
- -
- - - ); -}; - -enum FilterOptions { - ALL = 'all', - AVAILABLE = 'available', - UNAVAILABLE = 'unavailable', -} diff --git a/web/src/pages/provisioners/components/ProvisionersList/ProvisionersList.tsx b/web/src/pages/provisioners/components/ProvisionersList/ProvisionersList.tsx deleted file mode 100644 index 4408ff6ea..000000000 --- a/web/src/pages/provisioners/components/ProvisionersList/ProvisionersList.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import { useMemo } from 'react'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import IconCheckmarkGreen from '../../../../shared/components/svg/IconCheckmarkGreen'; -import IconDeactivated from '../../../../shared/components/svg/IconDeactivated'; -import { deviceBreakpoints } from '../../../../shared/constants'; -import { EditButton } from '../../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { - type ListHeader, - ListSortDirection, -} from '../../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { VirtualizedList } from '../../../../shared/defguard-ui/components/Layout/VirtualizedList/VirtualizedList'; -import type { Provisioner } from '../../../../shared/types'; -import { useDeleteProvisionerModal } from '../modals/useDeleteProvisionerModal'; - -interface Props { - provisioners: Provisioner[]; -} - -export const ProvisionersList = ({ provisioners }: Props) => { - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const { LL } = useI18nContext(); - const openDeletionModal = useDeleteProvisionerModal((state) => state.open); - - const listCells = useMemo(() => { - const res = [ - { - key: 'name', - render: (value: Provisioner) => ( - <> - {value.id} - - ), - }, - { - key: 'status', - render: (value: Provisioner) => ( - <> - {value.connected ? ( - <> - - - {LL.provisionersOverview.list.status.available()} - - - ) : ( - <> - - - {LL.provisionersOverview.list.status.unavailable()} - - - )} - - ), - }, - { - key: 'ip', - render: (value: Provisioner) => ( - {value.ip} - ), - }, - { - key: 'edit', - render: (value: Provisioner) => ( - - openDeletionModal({ provisionerId: value.id })} - text={LL.provisionersOverview.list.editButton.delete()} - /> - - ), - }, - ]; - if (breakpoint !== 'desktop') { - res.splice(1, 1); - } - return res; - }, [ - LL.provisionersOverview.list.editButton, - LL.provisionersOverview.list.status, - openDeletionModal, - breakpoint, - ]); - - const getListHeaders = useMemo(() => { - const res: ListHeader[] = [ - { - key: 'name', - text: LL.provisionersOverview.list.headers.name(), - active: true, - sortDirection: ListSortDirection.ASC, - }, - { - key: 'status', - text: LL.provisionersOverview.list.headers.status(), - active: false, - }, - { - key: 'ip', - text: LL.provisionersOverview.list.headers.ip(), - active: false, - }, - { - key: 'actions', - text: LL.provisionersOverview.list.headers.actions(), - active: false, - sortable: false, - }, - ]; - if (breakpoint !== 'desktop') { - res.splice(1, 1); - } - return res; - }, [LL.provisionersOverview.list.headers, breakpoint]); - - return ( - - ); -}; diff --git a/web/src/pages/provisioners/components/ProvisionersList/style.scss b/web/src/pages/provisioners/components/ProvisionersList/style.scss deleted file mode 100644 index 68f32e2fd..000000000 --- a/web/src/pages/provisioners/components/ProvisionersList/style.scss +++ /dev/null @@ -1,83 +0,0 @@ -@mixin list-layout { - @include media-breakpoint-down(lg) { - grid-template-columns: 250px 1fr 60px; - @for $i from 1 through 3 { - & > :nth-child(#{$i}) { - grid-column: $i; - } - } - } - @include media-breakpoint-up(lg) { - grid-template-columns: 250px 200px 1fr 62px; - @for $i from 1 through 4 { - & > :nth-child(#{$i}) { - grid-column: $i; - } - } - } -} - -#provisioners-page { - .provisioners-list { - .headers { - @include list-layout; - - @include media-breakpoint-up(lg) { - & > :nth-child(4) { - justify-content: center; - } - } - } - - .scroll-container { - box-sizing: border-box; - padding-bottom: 1.5rem; - margin-right: 5px; - @include media-breakpoint-up(lg) { - padding-bottom: 4rem; - } - } - - .default-row { - display: inline-grid; - grid-template-rows: 60px; - align-items: center; - box-sizing: border-box; - padding: 0 2rem; - @include list-layout; - - & > * { - display: flex; - flex-flow: row nowrap; - align-items: center; - align-content: center; - justify-content: flex-start; - - & > span { - @include regular-text; - @include text-weight(medium); - - color: var(--gray-dark); - - &.connected { - color: var(--text-main); - } - } - } - - @include media-breakpoint-up(lg) { - & > :nth-child(2) { - column-gap: 5px; - } - - & > :nth-child(4) { - justify-content: center; - - & > button { - width: 100%; - } - } - } - } - } -} diff --git a/web/src/pages/provisioners/components/ProvisioningStationSetupCard/ProvisioningStationSetupCard.tsx b/web/src/pages/provisioners/components/ProvisioningStationSetupCard/ProvisioningStationSetupCard.tsx deleted file mode 100644 index 02fbd9e12..000000000 --- a/web/src/pages/provisioners/components/ProvisioningStationSetupCard/ProvisioningStationSetupCard.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { type ReactNode, useMemo } from 'react'; -import Skeleton from 'react-loading-skeleton'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import YubikeyProvisioningGraphic from '../../../../shared/components/svg/YubikeyProvisioningGraphic'; -import { ActionButton } from '../../../../shared/defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../../shared/defguard-ui/components/Layout/ActionButton/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { ExpandableCard } from '../../../../shared/defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import useApi from '../../../../shared/hooks/useApi'; -import { useClipboard } from '../../../../shared/hooks/useClipboard'; -import { QueryKeys } from '../../../../shared/queries'; - -export const ProvisioningStationSetup = () => { - const { writeToClipboard } = useClipboard(); - const { LL } = useI18nContext(); - const { - provisioning: { getWorkerToken }, - } = useApi(); - - const { data, isLoading: tokenLoading } = useQuery({ - queryKey: [QueryKeys.FETCH_WORKER_TOKEN], - queryFn: getWorkerToken, - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const command = useMemo( - () => - `docker run --privileged ghcr.io/defguard/yubikey-provision:main -t ${data?.token} --id --grpc `, - [data?.token], - ); - - const tokenActions = useMemo( - (): ReactNode[] => [ - { - if (data?.token) { - void writeToClipboard( - data.token, - LL.provisionersOverview.messages.copy.token(), - ); - } - }} - />, - ], - [data?.token, LL.provisionersOverview.messages.copy, writeToClipboard], - ); - - const dockerActions = useMemo( - () => [ - { - void writeToClipboard(command, LL.provisionersOverview.messages.copy.command()); - }} - />, - ], - [LL.provisionersOverview.messages, command, writeToClipboard], - ); - - return ( - -

{LL.provisionersOverview.provisioningStation.header()}

-

{LL.provisionersOverview.provisioningStation.content()}

-
- -
- {data && !isUndefined(data.token) && ( - -

{data?.token}

-
- )} - {data && !isUndefined(data.token) && ( - -

{command}

-
- )} - {tokenLoading && !data && } -
- ); -}; diff --git a/web/src/pages/provisioners/components/ProvisioningStationSetupCard/style.scss b/web/src/pages/provisioners/components/ProvisioningStationSetupCard/style.scss deleted file mode 100644 index c3e0e79a1..000000000 --- a/web/src/pages/provisioners/components/ProvisioningStationSetupCard/style.scss +++ /dev/null @@ -1,86 +0,0 @@ -@use '@scssutils' as *; - -#provisioning-setup-card { - box-sizing: border-box; - padding: 15px; - - @include media-breakpoint-down(lg) { - margin: 0 2rem; - width: calc(100% - 40px); - } - - @include media-breakpoint-up(lg) { - padding: 4rem; - margin: 0 40px 25px; - width: calc(100% - 80px); - } - - @include media-breakpoint-up(xxl) { - margin: 0; - width: 100%; - } - - & > h4 { - @include modal-header; - - text-align: center; - margin-bottom: 1.5rem; - @include media-breakpoint-up(lg) { - margin-bottom: 2rem; - } - } - - & > .image-row { - height: 75px; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - align-content: center; - } - - & > p { - word-break: normal; - text-align: center; - @include regular-text; - - margin-bottom: 15px; - max-width: 100%; - color: var(--gray-dark); - font-size: 12px; - - @include media-breakpoint-up(lg) { - margin-bottom: 25px; - } - } - - & > .expandable-card { - width: 100%; - margin-top: 20px; - @include media-breakpoint-up(lg) { - margin-top: 40px; - } - - & > .expanded-content { - overflow: hidden; - - & > p { - max-width: 100%; - text-overflow: ellipsis; - text-align: left; - word-break: break-all; - white-space: normal; - @include small-text; - - line-height: 22px; - } - } - } - .command-skeleton { - line-height: 1; - height: 198px; - width: 100%; - margin-top: 20px; - border-radius: 12px; - } -} diff --git a/web/src/pages/provisioners/components/modals/DeleteProvisionerModal.tsx b/web/src/pages/provisioners/components/modals/DeleteProvisionerModal.tsx deleted file mode 100644 index 33da15048..000000000 --- a/web/src/pages/provisioners/components/modals/DeleteProvisionerModal.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../shared/mutations'; -import { QueryKeys } from '../../../../shared/queries'; -import { useDeleteProvisionerModal } from './useDeleteProvisionerModal'; - -export const DeleteProvisionerModal = () => { - const isOpen = useDeleteProvisionerModal((state) => state.visible); - const targetId = useDeleteProvisionerModal((state) => state.provisionerId); - const [close, reset] = useDeleteProvisionerModal( - (state) => [state.close, state.reset], - shallow, - ); - - const { LL } = useI18nContext(); - const { - provisioning: { deleteWorker }, - } = useApi(); - const toaster = useToaster(); - - const queryClient = useQueryClient(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: deleteWorker, - mutationKey: [MutationKeys.DELETE_WORKER], - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_WORKERS], - }); - toaster.success( - LL.modals.deleteProvisioner.messages.success({ - provisioner: targetId ?? '', - }), - ); - close(); - }, - onError: (e) => { - toaster.error(LL.messages.error()); - console.error(e); - }, - }); - - return ( - close()} - afterClose={() => reset()} - onSubmit={() => { - if (targetId) { - mutate(targetId); - } - }} - /> - ); -}; diff --git a/web/src/pages/provisioners/components/modals/useDeleteProvisionerModal.tsx b/web/src/pages/provisioners/components/modals/useDeleteProvisionerModal.tsx deleted file mode 100644 index 90264bce4..000000000 --- a/web/src/pages/provisioners/components/modals/useDeleteProvisionerModal.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaultValues: StoreValues = { - visible: false, - provisionerId: undefined, -}; - -export const useDeleteProvisionerModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (values) => set({ ...defaultValues, ...values, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - provisionerId?: string; -}; - -type StoreMethods = { - open: (values?: Partial) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/provisioners/style.scss b/web/src/pages/provisioners/style.scss deleted file mode 100644 index 58007db08..000000000 --- a/web/src/pages/provisioners/style.scss +++ /dev/null @@ -1,177 +0,0 @@ -#provisioners-page { - & > .page-content { - min-height: 100%; - max-height: 100%; - overflow-y: auto; - display: grid; - grid-template-columns: 1fr; - grid-template-rows: auto 40px 100vh; - padding: 2rem 0; - box-sizing: border-box; - row-gap: 2rem; - - @include media-breakpoint-up(lg) { - padding-top: 2rem; - row-gap: 0; - grid-template-columns: 1fr; - grid-template-rows: 104px auto 100vh; - } - - @include media-breakpoint-up(xxl) { - padding: 4rem 7rem 0 0; - grid-template-columns: minmax(880px, 1fr) minmax(400px, 700px); - grid-template-rows: 105px 1fr; - } - - & > header { - grid-row: 2; - grid-column: 1; - box-sizing: border-box; - display: flex; - flex-flow: row nowrap; - align-items: center; - align-content: center; - padding: 0 2rem; - - @include media-breakpoint-up(lg) { - padding: 0 0 0 6rem; - column-gap: 3rem; - grid-column: 1; - grid-row: 1; - } - - & > h1 { - display: none; - - @include page-header; - - @include media-breakpoint-up(lg) { - display: block; - } - } - - & > .search { - height: 40px; - width: 100%; - - @include media-breakpoint-up(lg) { - width: clamp(200px, 360px, 360px); - } - } - } - - & > .provisioners-container { - grid-column: 1; - grid-row: 3; - display: grid; - row-gap: 1.8rem; - grid-template-rows: 40px 1fr; - grid-template-columns: 1fr; - - & > .top { - grid-row: 1; - grid-column: 1; - box-sizing: border-box; - display: flex; - flex-flow: row nowrap; - width: 100%; - padding: 0 2rem; - - @include media-breakpoint-up(lg) { - padding: 0 4rem 0 6rem; - } - - & > .select { - margin-left: auto; - width: 200px; - - & > .select-container { - min-height: 40px; - } - } - - & > .provisioners-count { - display: flex; - flex-flow: row nowrap; - column-gap: 1.5rem; - align-content: center; - align-items: center; - justify-content: flex-start; - - & > span { - @include modal-header; - } - - & > .count { - display: flex; - flex-flow: row; - height: 30px; - min-width: 30px; - box-sizing: border-box; - padding: 0 5px; - align-items: center; - align-content: center; - justify-content: center; - background-color: var(--gray-light); - border-radius: 10px; - - span { - display: block; - @include typography-legacy(12px, 18px, semiBold, var(--white), Poppins); - } - } - } - } - - & > .provisioners-list, - & > .no-data, - & > .loader { - grid-row: 2; - grid-column: 1; - } - - & > .loader { - width: 100%; - height: 100%; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - align-content: center; - } - - & > .no-data { - width: 100%; - text-align: center; - box-sizing: border-box; - padding: 0 4rem 0 6rem; - } - } - - & > .setup-container { - grid-column: 1; - grid-row: 1; - - @include media-breakpoint-up(lg) { - grid-row: 2; - } - } - - @include media-breakpoint-up(xxl) { - & > header { - grid-row: 1; - grid-column: 1/3; - } - - & > .provisioners-container { - grid-column: 1 / 2; - grid-row: 2; - } - - & > .setup-container { - grid-row: 2; - grid-column: 2 / 3; - } - } - } -} diff --git a/web/src/pages/redirect/RedirectPage.tsx b/web/src/pages/redirect/RedirectPage.tsx deleted file mode 100644 index bc3e7e186..000000000 --- a/web/src/pages/redirect/RedirectPage.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import SvgIconDfgOpenidRedirect from '../../shared/components/svg/IconDfgOpenidRedirect'; -import { Card } from '../../shared/defguard-ui/components/Layout/Card/Card'; - -// used in auth flow -export const RedirectPage = () => { - const { LL } = useI18nContext(); - return ( -
- -

{LL.redirectPage.title()}

-

{LL.redirectPage.subtitle()}

-
- -
-
-
- ); -}; diff --git a/web/src/pages/redirect/style.scss b/web/src/pages/redirect/style.scss deleted file mode 100644 index 2b9ff17ac..000000000 --- a/web/src/pages/redirect/style.scss +++ /dev/null @@ -1,42 +0,0 @@ -@use '@scssutils' as *; - -#redirect-page { - width: 100%; - height: 100%; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 0 20px; - user-select: none; - - & > .card { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - box-sizing: border-box; - padding: 30px 20px; - width: 100%; - - @include media-breakpoint-up(md) { - padding: 50px 0; - width: 450px; - } - - h2 { - @include typography-legacy(20px, 30px, semiBold, var(--text-main), 'Poppins'); - margin-bottom: 20px; - width: 100%; - text-align: center; - } - - p { - @include typography-legacy(12px, 1.2, regular, var(--gray-light), 'Roboto'); - margin-bottom: 30px; - width: 100%; - text-align: center; - } - } -} diff --git a/web/src/pages/settings/SettingsPage.tsx b/web/src/pages/settings/SettingsPage.tsx deleted file mode 100644 index e7d819c03..000000000 --- a/web/src/pages/settings/SettingsPage.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import './style.scss'; - -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { useUpgradeLicenseModal } from '../../shared/components/Layout/UpgradeLicenseModal/store'; -import { UpgradeLicenseModalVariant } from '../../shared/components/Layout/UpgradeLicenseModal/types'; -import { Card } from '../../shared/defguard-ui/components/Layout/Card/Card'; -import { CardTabs } from '../../shared/defguard-ui/components/Layout/CardTabs/CardTabs'; -import type { CardTabsData } from '../../shared/defguard-ui/components/Layout/CardTabs/types'; -import { LoaderSpinner } from '../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { useAppStore } from '../../shared/hooks/store/useAppStore'; -import useApi from '../../shared/hooks/useApi'; -import { QueryKeys } from '../../shared/queries'; -import { ActivityLogStreamSettings } from './components/ActivityLogStreamSettings/ActivityLogStreamSettings'; -import { EnterpriseSettings } from './components/EnterpriseSettings/EnterpriseSettings'; -import { GlobalSettings } from './components/GlobalSettings/GlobalSettings'; -import { LdapSettings } from './components/LdapSettings/LdapSettings'; -import { NotificationSettings } from './components/NotificationSettings/NotificationSettings'; -import { OpenIdSettings } from './components/OpenIdSettings/OpenIdSettings'; -import { SmtpSettings } from './components/SmtpSettings/SmtpSettings'; -import { useSettingsPage } from './hooks/useSettingsPage'; - -const tabsContent: ReactNode[] = [ - , - , - , - , - , - , - , -]; - -const enterpriseTabs: number[] = [2, 3, 4, 6]; - -export const SettingsPage = () => { - const { LL } = useI18nContext(); - const { - getEnterpriseInfo, - settings: { getSettings }, - } = useApi(); - - const [activeCard, setActiveCard] = useState(0); - const queryClient = useQueryClient(); - const appInfo = useAppStore((s) => s.appInfo); - const openUpgradeLicenseModal = useUpgradeLicenseModal((s) => s.open, shallow); - - const [setPageState, resetPageState] = useSettingsPage( - (state) => [state.setState, state.reset], - shallow, - ); - - const settings = useSettingsPage((state) => state.settings); - - const { data: settingsData, isLoading: settingsLoading } = useQuery({ - queryFn: getSettings, - queryKey: [QueryKeys.FETCH_SETTINGS], - refetchOnMount: true, - refetchOnWindowFocus: false, - }); - - const { data: enterpriseInfo, isLoading: enterpriseInfoLoading } = useQuery({ - queryFn: getEnterpriseInfo, - queryKey: [QueryKeys.FETCH_ENTERPRISE_INFO], - refetchOnWindowFocus: false, - refetchOnMount: true, - }); - - const handleTabClick = useCallback( - (tabIndex: number) => { - if (appInfo) { - if (enterpriseTabs.includes(tabIndex) && !appInfo.license_info.enterprise) { - openUpgradeLicenseModal({ - modalVariant: UpgradeLicenseModalVariant.ENTERPRISE_NOTICE, - }); - } else { - setActiveCard(tabIndex); - } - } - }, - [appInfo, openUpgradeLicenseModal], - ); - - const tabs = useMemo( - (): CardTabsData[] => [ - { - key: 0, - content: LL.settingsPage.tabs.global(), - active: activeCard === 0, - onClick: () => handleTabClick(0), - }, - { - key: 1, - content: LL.settingsPage.tabs.smtp(), - active: activeCard === 1, - onClick: () => handleTabClick(1), - }, - { - key: 2, - content: LL.settingsPage.tabs.ldap(), - active: activeCard === 2, - onClick: () => handleTabClick(2), - }, - { - key: 3, - content: LL.settingsPage.tabs.openid(), - active: activeCard === 3, - onClick: () => handleTabClick(3), - }, - { - key: 4, - content: LL.settingsPage.tabs.enterprise(), - active: activeCard === 4, - onClick: () => handleTabClick(4), - }, - { - key: 5, - content: LL.settingsPage.tabs.gatewayNotifications(), - active: activeCard === 5, - onClick: () => handleTabClick(5), - }, - { - key: 6, - content: LL.settingsPage.tabs.activityLogStream(), - active: activeCard === 6, - onClick: () => handleTabClick(6), - }, - ], - [LL.settingsPage.tabs, activeCard, handleTabClick], - ); - - // set store - useEffect(() => { - setPageState({ - settings: settingsData, - enterpriseInfo: enterpriseInfo?.license_info, - }); - }, [settingsData, setPageState, enterpriseInfo?.license_info]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: on mount - useEffect(() => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_APP_INFO], - }); - return () => { - resetPageState?.(); - }; - }, []); - - // if appinfo changes and license is not enterprise anymore then change active tab to global - // this can happen when admin is on enterprise tab but limits are exceeded in the mean time - useEffect(() => { - if ( - appInfo && - !appInfo.license_info.enterprise && - enterpriseTabs.includes(activeCard) - ) { - setActiveCard(0); - openUpgradeLicenseModal({ - modalVariant: UpgradeLicenseModalVariant.LICENSE_LIMIT, - }); - } - }, [activeCard, appInfo, openUpgradeLicenseModal]); - - return ( - -

{LL.settingsPage.title()}

- {(settingsLoading || enterpriseInfoLoading) && } - {settings && !enterpriseInfoLoading && !settingsLoading && ( - <> - - - {tabsContent[activeCard]} - - - )} -
- ); -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/ActivityLogStreamSettings.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/ActivityLogStreamSettings.tsx deleted file mode 100644 index 426a7a56e..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/ActivityLogStreamSettings.tsx +++ /dev/null @@ -1,244 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery } from '@tanstack/react-query'; -import { orderBy, range } from 'lodash-es'; -import { useMemo, useState } from 'react'; -import Skeleton from 'react-loading-skeleton'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ListHeader } from '../../../../shared/components/Layout/ListHeader/ListHeader'; -import type { ListHeaderColumnConfig } from '../../../../shared/components/Layout/ListHeader/types'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { EditButton } from '../../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { ListCellText } from '../../../../shared/defguard-ui/components/Layout/ListCellText/ListCellText'; -import { NoData } from '../../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { ListSortDirection } from '../../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import SvgIconPlus from '../../../../shared/defguard-ui/components/svg/IconPlus'; -import { isPresent } from '../../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import queryClient from '../../../../shared/query-client'; -import type { ActivityLogStream } from '../../../../shared/types'; -import { CreateActivityLogStreamModal } from './modals/CreateActivityLogStreamModal/CreateActivityLogStreamModal'; -import { useCreateActivityLogStreamModalStore } from './modals/CreateActivityLogStreamModal/store'; -import { LogStashHttpStreamCEModal } from './modals/LogStashHttpStreamCEModal/LogStashHttpStreamCEModal'; -import { useLogstashHttpStreamCEModalStore } from './modals/LogStashHttpStreamCEModal/store'; -import { useVectorHttpStreamCEModal } from './modals/VectorHttpStreamCEModal/store'; -import { VectorHttpStreamCEModal } from './modals/VectorHttpStreamCEModal/VectorHttpStreamCEModal'; -import { - activityLogStreamToLabel, - activityLogStreamTypeToLabel, -} from './utils/activityLogStreamToLabel'; - -export const ActivityLogStreamSettings = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings; - - return ( - <> -
-
-

{localLL.title()}

-
- -
- - - - - ); -}; - -const ActivityLogStreamList = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings; - - const { - activityLogStream: { getActivityLogStreams }, - } = useApi(); - - const openCreateModal = useCreateActivityLogStreamModalStore((s) => s.open, shallow); - - const { data: activityLogStreams, isLoading: streamsLoading } = useQuery({ - queryFn: getActivityLogStreams, - queryKey: ['activity_stream'], - placeholderData: (perv) => perv, - refetchOnMount: true, - refetchOnWindowFocus: true, - select: (data) => orderBy(data, (row) => row.name.toLowerCase(), ['asc']), - }); - - const [activeSortKey] = useState('name'); - const [sortDirection, setSortDirection] = useState( - ListSortDirection.ASC, - ); - - const listHeaders = useMemo( - (): ListHeaderColumnConfig[] => [ - { - key: 'name', - enabled: true, - sortKey: 'name', - label: localLL.list.headers.name(), - }, - { - key: 'destination', - enabled: false, - sortKey: 'stream_type', - label: localLL.list.headers.destination(), - }, - { - key: 'edit', - enabled: false, - label: LL.common.controls.edit(), - }, - ], - [LL.common.controls, localLL.list.headers], - ); - - return ( -
-
-
-
- { - setSortDirection(direction); - }} - /> -
-
- {!isPresent(activityLogStreams) && streamsLoading && ( -
- {range(6).map((index) => ( - - ))} -
- )} - {isPresent(activityLogStreams) && ( -
    - {activityLogStreams.map((stream) => ( -
  • - -
  • - ))} -
- )} - {isPresent(activityLogStreams) && activityLogStreams.length === 0 && ( - - )} -
-
- ); -}; - -type ListItemsProps = { - stream: ActivityLogStream; -}; - -const ListItem = ({ stream }: ListItemsProps) => { - return ( -
-
- -
-
- -
-
- -
-
- ); -}; - -type EditProps = { - stream: ActivityLogStream; -}; - -const EditListItem = ({ stream }: EditProps) => { - const openVectorHttpStreamModal = useVectorHttpStreamCEModal((s) => s.open, shallow); - const openLogstashHttpStreamModal = useLogstashHttpStreamCEModalStore( - (s) => s.open, - shallow, - ); - const { LL } = useI18nContext(); - - const toast = useToaster(); - - const { - activityLogStream: { deleteActivityLogStream }, - } = useApi(); - - const { mutate: deleteStreamMutation, isPending: isDeleting } = useMutation({ - mutationFn: deleteActivityLogStream, - onSuccess: () => { - toast.success( - LL.settingsPage.activityLogStreamSettings.messages.destinationCrud.delete({ - destination: activityLogStreamToLabel(stream), - }), - ); - void queryClient.invalidateQueries({ - queryKey: ['activity_stream'], - }); - }, - onError: (e) => { - toast.error(LL.messages.error()); - console.error(e); - }, - }); - - const handleEdit = () => { - switch (stream.stream_type) { - case 'logstash_http': - openLogstashHttpStreamModal(stream); - break; - case 'vector_http': - openVectorHttpStreamModal(stream); - break; - default: - toast.error('Unimplemented'); - } - }; - - return ( - - - { - deleteStreamMutation(stream.id); - }} - disabled={isDeleting} - /> - - ); -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/CreateActivityLogStreamModal.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/CreateActivityLogStreamModal.tsx deleted file mode 100644 index 014f04356..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/CreateActivityLogStreamModal.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { useState } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { RadioButton } from '../../../../../../shared/defguard-ui/components/Layout/RadioButton/Radiobutton'; -import type { ActivityLogStreamType } from '../../../../../../shared/types'; -import { activityLogStreamTypeToLabel } from '../../utils/activityLogStreamToLabel'; -import { useLogstashHttpStreamCEModalStore } from '../LogStashHttpStreamCEModal/store'; -import { useVectorHttpStreamCEModal } from '../VectorHttpStreamCEModal/store'; -import { useCreateActivityLogStreamModalStore } from './store'; - -export const CreateActivityLogStreamModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings.modals.selectDestination; - const [close, reset] = useCreateActivityLogStreamModalStore( - (s) => [s.close, s.reset], - shallow, - ); - const isOpen = useCreateActivityLogStreamModalStore((s) => s.visible); - - return ( - { - close(); - }} - afterClose={() => { - reset(); - }} - > - - - ); -}; - -const availableTypes: ActivityLogStreamType[] = ['vector_http', 'logstash_http']; - -const ModalContent = () => { - const { LL } = useI18nContext(); - - const closeModal = useCreateActivityLogStreamModalStore((s) => s.close, shallow); - const openCreateLogstash = useLogstashHttpStreamCEModalStore((s) => s.open, shallow); - const openCreateVector = useVectorHttpStreamCEModal((s) => s.open, shallow); - - const [currentStreamType, setStreamType] = - useState('vector_http'); - - return ( - <> -
- {availableTypes.map((streamType) => { - const active = streamType === currentStreamType; - return ( -
{ - setStreamType(streamType); - }} - > - -

{activityLogStreamTypeToLabel(streamType)}

-
- ); - })} -
-
-
- - ); -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/store.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/store.tsx deleted file mode 100644 index f7ad2092b..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/store.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaults: StoreValues = { - visible: false, -}; - -export const useCreateActivityLogStreamModalStore = createWithEqualityFn( - (set) => ({ - ...defaults, - open: () => set({ visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; -}; - -type StoreMethods = { - open: () => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/style.scss b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/style.scss deleted file mode 100644 index 4e1bb2332..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/CreateActivityLogStreamModal/style.scss +++ /dev/null @@ -1,60 +0,0 @@ -#create-activity-log-stream-modal { - .activity-log-stream-types { - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - - .stream-type { - display: flex; - flex-flow: row; - align-items: center; - column-gap: var(--spacing-xs); - min-height: 30px; - border: 1px solid var(--border-primary); - padding: var(--spacing-xs) var(--spacing-s); - border-radius: 10px; - cursor: pointer; - user-select: none; - transition-property: border-color; - - @include animate-standard; - - &:not(.active) { - &:hover { - border-color: var(--border-separator); - } - } - - &.active { - border-color: var(--surface-main-primary); - } - - &.active, - &:hover { - .label { - color: var(--text-body-primary); - } - } - - .label { - color: var(--text-body-secondary); - transition-property: color; - @include typography(app-modal-1); - @include animate-standard; - } - } - } - - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - padding-top: var(--spacing-m); - - .btn { - width: 100%; - } - } -} diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/LogStashHttpStreamCEModal.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/LogStashHttpStreamCEModal.tsx deleted file mode 100644 index b983c4426..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/LogStashHttpStreamCEModal.tsx +++ /dev/null @@ -1,237 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useCallback, useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import queryClient from '../../../../../../shared/query-client'; -import type { - ActivityLogStreamLogstashHttp, - ActivityLogStreamType, -} from '../../../../../../shared/types'; -import { removeEmptyStrings } from '../../../../../../shared/utils/removeEmptyStrings'; -import { trimObjectStrings } from '../../../../../../shared/utils/trimObjectStrings'; -import { activityLogStreamTypeToLabel } from '../../utils/activityLogStreamToLabel'; -import { useLogstashHttpStreamCEModalStore } from './store'; - -export const LogStashHttpStreamCEModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings.modals.logstash; - - const [close, reset] = useLogstashHttpStreamCEModalStore( - (s) => [s.close, s.reset], - shallow, - ); - const [isOpen, isEdit] = useLogstashHttpStreamCEModalStore((s) => [ - s.visible, - isPresent(s.initStreamData), - ]); - - const title = isEdit ? localLL.modify() : localLL.create(); - - return ( - { - close(); - }} - afterClose={() => { - reset(); - }} - > - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings; - const formLabels = LL.settingsPage.activityLogStreamSettings.modals.shared.formLabels; - const { - activityLogStream: { createActivityLogStream, modifyActivityLogStream }, - } = useApi(); - const close = useLogstashHttpStreamCEModalStore((s) => s.close, shallow); - const initialData = useLogstashHttpStreamCEModalStore((s) => s.initStreamData); - const toaster = useToaster(); - - const onError = useCallback( - (e: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(e); - }, - [LL.messages, toaster], - ); - - const { mutateAsync: createStreamMutation } = useMutation({ - mutationFn: createActivityLogStream, - onSuccess: () => { - toaster.success( - localLL.messages.destinationCrud.create({ - destination: activityLogStreamTypeToLabel('logstash_http'), - }), - ); - void queryClient.invalidateQueries({ - queryKey: ['activity_stream'], - }); - close(); - }, - onError, - }); - - const { mutateAsync: modifyStreamMutation } = useMutation({ - mutationFn: modifyActivityLogStream, - onSuccess: () => { - toaster.success( - localLL.messages.destinationCrud.modify({ - destination: activityLogStreamTypeToLabel('logstash_http'), - }), - ); - void queryClient.invalidateQueries({ - queryKey: ['activity_stream'], - }); - close(); - }, - onError, - }); - - const isEdit = isPresent(initialData); - - const schema = useMemo( - () => - z.object({ - name: z.string().trim().min(1, LL.form.error.required()), - url: z - .string() - .trim() - .min(1, LL.form.error.required()) - .url(LL.form.error.urlInvalid()), - username: z.string().trim(), - password: z.string().trim(), - cert: z.string().trim(), - }), - [LL.form.error], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo((): FormFields => { - if (isPresent(initialData)) { - const { name, config } = initialData; - const { cert, url, password, username } = config; - return { - name: name, - cert: cert ?? '', - password: password ?? '', - username: username ?? '', - url, - }; - } - - return { - cert: '', - name: '', - url: '', - password: '', - username: '', - }; - }, [initialData]); - - const { - handleSubmit, - control, - resetField, - formState: { isSubmitting }, - } = useForm({ - defaultValues, - mode: 'all', - resolver: zodResolver(schema), - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - const { name, ...config } = removeEmptyStrings(trimObjectStrings(values)); - const streamType: ActivityLogStreamType = 'logstash_http'; - - const logstashConfig: ActivityLogStreamLogstashHttp = config; - - if (isEdit) { - await modifyStreamMutation({ - id: initialData.id, - stream_type: streamType, - stream_config: logstashConfig, - name, - }); - } else { - await createStreamMutation({ - stream_type: streamType, - stream_config: logstashConfig, - name, - }); - } - }; - - return ( -
- - - { - resetField('username', { defaultValue: '' }); - }} - /> - { - resetField('password', { defaultValue: '' }); - }} - /> - { - resetField('cert', { defaultValue: '' }); - }} - /> - -
-
- - ); -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/store.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/store.tsx deleted file mode 100644 index 3c0881588..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/LogStashHttpStreamCEModal/store.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { - ActivityLogStream, - ActivityLogStreamLogstashHttp, -} from '../../../../../../shared/types'; - -const defaults: StoreValues = { - visible: false, -}; - -export const useLogstashHttpStreamCEModalStore = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (vals) => { - if (vals) { - if (vals?.stream_type !== 'logstash_http') { - throw Error( - 'Opened Logstash Http CE modal with wrong activity log stream type config', - ); - } - const initData: ModifyData = { - config: vals.config as ActivityLogStreamLogstashHttp, - id: vals.id, - name: vals.name, - }; - set({ ...vals, visible: true, initStreamData: initData }); - } - set({ visible: true }); - }, - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type ModifyData = { - id: number; - name: string; - config: ActivityLogStreamLogstashHttp; -}; - -type StoreValues = { - visible: boolean; - initStreamData?: ModifyData; -}; - -type StoreMethods = { - open: (activityLogStream?: ActivityLogStream) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/VectorHttpStreamCEModal.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/VectorHttpStreamCEModal.tsx deleted file mode 100644 index 51acd555b..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/VectorHttpStreamCEModal.tsx +++ /dev/null @@ -1,223 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useCallback, useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import queryClient from '../../../../../../shared/query-client'; -import { removeEmptyStrings } from '../../../../../../shared/utils/removeEmptyStrings'; -import { trimObjectStrings } from '../../../../../../shared/utils/trimObjectStrings'; -import { activityLogStreamTypeToLabel } from '../../utils/activityLogStreamToLabel'; -import { useVectorHttpStreamCEModal } from './store'; - -export const VectorHttpStreamCEModal = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings.modals.vector; - const isOpen = useVectorHttpStreamCEModal((s) => s.visible); - const [close, reset] = useVectorHttpStreamCEModal((s) => [s.close, s.reset], shallow); - const isEdit = useVectorHttpStreamCEModal((s) => isPresent(s.initStreamData)); - - const title = isEdit ? localLL.modify() : localLL.create(); - - return ( - { - close(); - }} - afterClose={() => { - reset(); - }} - > - - - ); -}; - -const ModalContent = () => { - const closeModal = useVectorHttpStreamCEModal((s) => s.close, shallow); - const [isEdit, initialData] = useVectorHttpStreamCEModal((s) => [ - s.edit, - s.initStreamData, - ]); - - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.activityLogStreamSettings; - const formLabels = LL.settingsPage.activityLogStreamSettings.modals.shared.formLabels; - const toaster = useToaster(); - - const { - activityLogStream: { createActivityLogStream, modifyActivityLogStream }, - } = useApi(); - - const schema = useMemo( - () => - z.object({ - name: z.string().trim().min(1, LL.form.error.required()), - url: z - .string() - .trim() - .min(1, LL.form.error.required()) - .url(LL.form.error.urlInvalid()), - username: z.string().trim(), - password: z.string().trim(), - cert: z.string().trim(), - }), - [LL.form.error], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo((): FormFields => { - if (isEdit && isPresent(initialData)) { - return { - name: initialData.name ?? '', - url: initialData.config.url, - username: initialData.config.username ?? '', - password: initialData.config.password ?? '', - cert: initialData.config.cert ?? '', - }; - } - return { - name: '', - password: '', - url: '', - username: '', - cert: '', - }; - }, [initialData, isEdit]); - - const { handleSubmit, control, resetField } = useForm({ - defaultValues, - resolver: zodResolver(schema), - mode: 'all', - }); - - const handleSuccess = useCallback(() => { - closeModal(); - void queryClient.invalidateQueries({ - queryKey: ['activity_stream'], - }); - }, [closeModal]); - - const handleError = useCallback( - (e: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(e); - }, - [LL.messages, toaster], - ); - - const { mutateAsync: modifyMutation } = useMutation({ - mutationFn: modifyActivityLogStream, - onError: handleError, - onSuccess: () => { - toaster.success( - localLL.messages.destinationCrud.modify({ - destination: activityLogStreamTypeToLabel('vector_http'), - }), - ); - handleSuccess(); - }, - }); - - const { mutateAsync: createMutation } = useMutation({ - mutationFn: createActivityLogStream, - onError: handleError, - onSuccess: () => { - toaster.success( - localLL.messages.destinationCrud.create({ - destination: activityLogStreamTypeToLabel('vector_http'), - }), - ); - handleSuccess(); - }, - }); - - const handleValidSubmit: SubmitHandler = async (values) => { - // prepare output - const { name, ...config } = removeEmptyStrings(trimObjectStrings(values)); - - if (isPresent(initialData)) { - await modifyMutation({ - id: initialData.id, - name, - stream_type: 'vector_http', - stream_config: config, - }); - } else { - await createMutation({ - name, - stream_config: config, - stream_type: 'vector_http', - }); - } - }; - - return ( -
- - - { - resetField('username', { defaultValue: '' }); - }} - /> - { - resetField('password', { defaultValue: '' }); - }} - /> - { - resetField('cert', { defaultValue: '' }); - }} - /> - -
-
- - ); -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/store.tsx b/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/store.tsx deleted file mode 100644 index d501a12f6..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/modals/VectorHttpStreamCEModal/store.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import type { ActivityLogStreamVectorHttp } from '../../../../../../shared/types'; - -type ModifyData = { - id: number; - name: string; - config: ActivityLogStreamVectorHttp; -}; - -const defaults: StoreValues = { - visible: false, - edit: false, - initStreamData: undefined, -}; - -export const useVectorHttpStreamCEModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: (initData) => { - if (isPresent(initData)) { - set({ visible: true, edit: true, initStreamData: initData }); - } - set({ visible: true, edit: true }); - }, - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; - edit: boolean; - initStreamData?: ModifyData; -}; - -type StoreMethods = { - open: (values?: ModifyData) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/style.scss b/web/src/pages/settings/components/ActivityLogStreamSettings/style.scss deleted file mode 100644 index 6de1352a1..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/style.scss +++ /dev/null @@ -1,82 +0,0 @@ -@mixin row-config { - width: 100%; - display: grid; - grid-template-columns: 1fr 1fr 40px; - grid-template-rows: 1fr; - align-items: center; -} - -#activity-log-stream-settings { - .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-end; - padding-bottom: var(--spacing-m); - - column-gap: var(--spacing-s); - - .btn.add { - svg { - path { - fill: var(--surface-icon-secondary); - } - } - } - } - - .list-header { - padding-bottom: var(--spacing-xs); - - .list-headers { - box-sizing: border-box; - padding: 0 var(--spacing-xs); - user-select: none; - @include row-config(); - - & > :nth-child(4) { - justify-self: center; - } - - .cell.empty { - display: none; - } - } - } - - .list { - ul { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - } - } - - .list-item { - border: 1px solid var(--border-primary); - border-radius: 10px; - min-height: 50px; - box-sizing: border-box; - padding: 5px var(--spacing-xs); - background-color: var(--surface-default-modal); - display: grid; - grid-template-rows: 1fr; - grid-template-columns: 1fr 40px; - align-items: center; - box-shadow: 0px 5px 7.5px 0px rgba(0, 0, 0, 0); - transition-property: box-shadow, border; - - @include animate-standard(); - @include row-config(); - - &:hover { - border-color: var(--border-separator); - box-shadow: 0px 5px 7.5px 0px rgba(0, 0, 0, 0.08); - } - - p { - @include typography(app-input); - } - } -} diff --git a/web/src/pages/settings/components/ActivityLogStreamSettings/utils/activityLogStreamToLabel.ts b/web/src/pages/settings/components/ActivityLogStreamSettings/utils/activityLogStreamToLabel.ts deleted file mode 100644 index 08bd5e8f5..000000000 --- a/web/src/pages/settings/components/ActivityLogStreamSettings/utils/activityLogStreamToLabel.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - ActivityLogStream, - ActivityLogStreamType, -} from '../../../../../shared/types'; - -export const activityLogStreamToLabel = (value: ActivityLogStream): string => - activityLogStreamTypeToLabel(value.stream_type); - -export const activityLogStreamTypeToLabel = (value: ActivityLogStreamType): string => { - switch (value) { - case 'vector_http': - return 'Vector'; - case 'logstash_http': - return 'Logstash'; - default: - return 'Unknown'; - } -}; diff --git a/web/src/pages/settings/components/EnterpriseSettings/EnterpriseSettings.tsx b/web/src/pages/settings/components/EnterpriseSettings/EnterpriseSettings.tsx deleted file mode 100644 index 1d26113f8..000000000 --- a/web/src/pages/settings/components/EnterpriseSettings/EnterpriseSettings.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { BigInfoBox } from '../../../../shared/defguard-ui/components/Layout/BigInfoBox/BigInfoBox'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { useSettingsPage } from '../../hooks/useSettingsPage'; -import { EnterpriseForm } from './components/EnterpriseForm'; - -export const EnterpriseSettings = () => { - const enterpriseInfo = useSettingsPage((s) => s.enterpriseInfo); - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.enterpriseOnly; - const appInfo = useAppStore((s) => s.appInfo); - - if (!appInfo) return null; - - return ( - <> - {appInfo.license_info.is_enterprise_free && ( -
- -
- )} -
- {!appInfo.license_info.enterprise && ( -
-
-
-

{localLL.title()}

- {enterpriseInfo?.expired &&

{localLL.currentExpired()}

} -

- {localLL.subtitle()}{' '} - - {localLL.website()} - - . -

-
-
-
- )} -
- -
-
-
- - ); -}; diff --git a/web/src/pages/settings/components/EnterpriseSettings/components/EnterpriseForm.tsx b/web/src/pages/settings/components/EnterpriseSettings/components/EnterpriseForm.tsx deleted file mode 100644 index d7df932de..000000000 --- a/web/src/pages/settings/components/EnterpriseSettings/components/EnterpriseForm.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import './styles.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { LabeledCheckbox } from '../../../../../shared/defguard-ui/components/Layout/LabeledCheckbox/LabeledCheckbox'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../../shared/mutations'; -import { QueryKeys } from '../../../../../shared/queries'; - -export const EnterpriseForm = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const { - settings: { patchEnterpriseSettings }, - } = useApi(); - - const settings = useAppStore((state) => state.enterprise_settings); - - const queryClient = useQueryClient(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationKey: [MutationKeys.EDIT_SETTINGS], - mutationFn: patchEnterpriseSettings, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_ENTERPRISE_SETTINGS], - }); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (err: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - if (!settings) return null; - - return ( -
-
-
-

{LL.settingsPage.enterprise.header()}

- {LL.settingsPage.enterprise.helper()} -
-
-
-
- - mutate({ admin_device_management: !settings.admin_device_management }) - } - /> - - {parse(LL.settingsPage.enterprise.fields.deviceManagement.helper())} - -
-
- - mutate({ only_client_activation: !settings.only_client_activation }) - } - /> - - {parse(LL.settingsPage.enterprise.fields.manualConfig.helper())} - -
-
- - mutate({ disable_all_traffic: !settings.disable_all_traffic }) - } - /> - - {parse(LL.settingsPage.enterprise.fields.disableAllTraffic.helper())} - -
-
-
- ); -}; diff --git a/web/src/pages/settings/components/EnterpriseSettings/components/styles.scss b/web/src/pages/settings/components/EnterpriseSettings/components/styles.scss deleted file mode 100644 index bcd4df160..000000000 --- a/web/src/pages/settings/components/EnterpriseSettings/components/styles.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use '@scssutils' as *; - -#enterprise-settings { - & > .card { - display: flex; - flex-flow: column; - row-gap: 16px; - - @include media-breakpoint-up(lg) { - padding: 16px 15px; - } - - & > .helper-row { - display: flex; - align-items: center; - gap: 10px; - } - } -} diff --git a/web/src/pages/settings/components/GlobalSettings/GlobalSettings.tsx b/web/src/pages/settings/components/GlobalSettings/GlobalSettings.tsx deleted file mode 100644 index c70be705c..000000000 --- a/web/src/pages/settings/components/GlobalSettings/GlobalSettings.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { GlobalSettingsForm } from './components/GlobalSettingsForm/GlobalSettingsForm'; - -export const GlobalSettings = () => ; diff --git a/web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/GlobalSettingsForm.tsx b/web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/GlobalSettingsForm.tsx deleted file mode 100644 index b5b3c2fbc..000000000 --- a/web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/GlobalSettingsForm.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import './styles.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import parse from 'html-react-parser'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import IconCheckmarkWhite from '../../../../../../shared/components/svg/IconCheckmarkWhite'; -import { deviceBreakpoints } from '../../../../../../shared/constants'; -import { FormCheckBox } from '../../../../../../shared/defguard-ui/components/Form/FormCheckBox/FormCheckBox'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import SvgIconX from '../../../../../../shared/defguard-ui/components/svg/IconX'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { externalLink } from '../../../../../../shared/links'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { invalidateMultipleQueries } from '../../../../../../shared/utils/invalidateMultipleQueries'; -import { useSettingsPage } from '../../../../hooks/useSettingsPage'; -import { type GlobalSettingsFormFields, globalSettingsSchema } from '../../types'; -import { LicenseSettings } from '../LicenseSettings/LicenseSettings'; - -const defaultSettings = { - instance_name: 'Defguard', - main_logo_url: '/svg/logo-defguard-white.svg', - nav_logo_url: '/svg/defguard-nav-logo.svg', - openid_enabled: false, - wireguard_enabled: false, - worker_enabled: false, - webhooks_enabled: false, - license: '', -}; - -export const GlobalSettingsForm = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const { - settings: { patchSettings }, - } = useApi(); - - const settings = useSettingsPage((state) => state.settings); - - const queryClient = useQueryClient(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: patchSettings, - onSuccess: () => { - const keys = [ - [QueryKeys.FETCH_ENTERPRISE_INFO], - [QueryKeys.FETCH_ENTERPRISE_STATUS], - [QueryKeys.FETCH_SETTINGS], - [QueryKeys.FETCH_APP_INFO], - [QueryKeys.FETCH_ESSENTIAL_SETTINGS], - ]; - invalidateMultipleQueries(queryClient, keys); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const zodSchema = useMemo(() => globalSettingsSchema(LL), [LL]); - - const defaultValues = useMemo((): GlobalSettingsFormFields => { - return { - instance_name: settings?.instance_name ?? '', - main_logo_url: - settings?.main_logo_url === defaultSettings.main_logo_url - ? '' - : (settings?.main_logo_url ?? ''), - nav_logo_url: - settings?.nav_logo_url === defaultSettings.nav_logo_url - ? '' - : (settings?.nav_logo_url ?? ''), - openid_enabled: settings?.openid_enabled ?? false, - wireguard_enabled: settings?.wireguard_enabled ?? false, - worker_enabled: settings?.worker_enabled ?? false, - webhooks_enabled: settings?.webhooks_enabled ?? false, - license: settings?.license ?? '', - }; - }, [settings]); - - const { control, handleSubmit, setValue } = useForm({ - defaultValues, - mode: 'all', - resolver: zodResolver(zodSchema), - }); - - const onSubmit: SubmitHandler = (submitted) => { - mutate(submitted); - }; - - if (!settings) return null; - - return ( -
-
-

{LL.settingsPage.tabs.global()}

-
-
-
-
-
-
-
-
-
-

{LL.settingsPage.instanceBranding.header()}

- - {parse( - LL.settingsPage.instanceBranding.helper({ - documentationLink: externalLink.gitbook.base, - }), - )} - -
-
- - - {LL.settingsPage.instanceBranding.form.fields.mainLogoUrl.helper()} - - } - label={LL.settingsPage.instanceBranding.form.fields.mainLogoUrl.label()} - controller={{ control, name: 'main_logo_url' }} - placeholder={LL.settingsPage.instanceBranding.form.fields.mainLogoUrl.placeholder()} - required - /> - - {LL.settingsPage.instanceBranding.form.fields.navLogoUrl.helper()} - - } - label={LL.settingsPage.instanceBranding.form.fields.navLogoUrl.label()} - controller={{ control, name: 'nav_logo_url' }} - placeholder={LL.settingsPage.instanceBranding.form.fields.navLogoUrl.placeholder()} - required - /> -
-
-
-

{LL.settingsPage.modulesVisibility.header()}

- - {parse( - LL.settingsPage.modulesVisibility.helper({ - documentationLink: externalLink.gitbook.base, - }), - )} - -
-
- - - - -
-
-
-
- -
-
-
-
- ); -}; diff --git a/web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/styles.scss b/web/src/pages/settings/components/GlobalSettings/components/GlobalSettingsForm/styles.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/LicenseSettings.tsx b/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/LicenseSettings.tsx deleted file mode 100644 index 3fa9acfab..000000000 --- a/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/LicenseSettings.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import './styles.scss'; - -import { useMemo } from 'react'; -import type { Control } from 'react-hook-form'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { ActivityIcon } from '../../../../../../shared/defguard-ui/components/icons/ActivityIcon/ActivityIcon'; -import { ActivityIconVariant } from '../../../../../../shared/defguard-ui/components/icons/ActivityIcon/types'; -import { ExpandableCard } from '../../../../../../shared/defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { Label } from '../../../../../../shared/defguard-ui/components/Layout/Label/Label'; -import { isPresent } from '../../../../../../shared/defguard-ui/utils/isPresent'; -import { useAppStore } from '../../../../../../shared/hooks/store/useAppStore'; -import { useSettingsPage } from '../../../../hooks/useSettingsPage'; -import type { GlobalSettingsFormFields } from '../../types'; - -export const LicenseSettings = ({ - control, -}: { - control: Control; -}) => { - const { LL } = useI18nContext(); - const appInfo = useAppStore((s) => s.appInfo); - const enterpriseInfo = useSettingsPage((s) => s.enterpriseInfo); - - const licenseIconVariant = useMemo(() => { - if ( - isPresent(enterpriseInfo) && - !enterpriseInfo.limits_exceeded && - !enterpriseInfo.expired - ) { - return ActivityIconVariant.CONNECTED; - } - return ActivityIconVariant.ERROR; - }, [enterpriseInfo]); - - const statusText = useMemo(() => { - if (!isPresent(enterpriseInfo)) { - return LL.settingsPage.license.licenseInfo.status.noLicense(); - } - if (enterpriseInfo.expired) { - return LL.settingsPage.license.licenseInfo.status.expired(); - } - if (appInfo?.license_info.any_limit_exceeded) { - return LL.settingsPage.license.licenseInfo.status.limitsExceeded(); - } - return LL.settingsPage.license.licenseInfo.status.active(); - }, [ - LL.settingsPage.license.licenseInfo.status, - appInfo?.license_info.any_limit_exceeded, - enterpriseInfo, - ]); - - return ( -
-
-

{LL.settingsPage.license.header()}

- -

{LL.settingsPage.license.helpers.enterpriseHeader.text()}

- - {LL.settingsPage.license.helpers.enterpriseHeader.link()} - -
-
-
- - - {isPresent(enterpriseInfo) ? ( -
-
- -
- -

{statusText}

- {enterpriseInfo.subscription ? ( - - {LL.settingsPage.license.licenseInfo.fields.status.subscriptionHelper()} - - ) : null} -
-
-
- -
-

- {enterpriseInfo.subscription - ? LL.settingsPage.license.licenseInfo.types.subscription.label() - : LL.settingsPage.license.licenseInfo.types.offline.label()} -

- - {enterpriseInfo.subscription - ? LL.settingsPage.license.licenseInfo.types.subscription.helper() - : LL.settingsPage.license.licenseInfo.types.offline.helper()} - -
-
-
- -

- {enterpriseInfo.valid_until - ? new Date(enterpriseInfo.valid_until).toLocaleString() - : '-'} -

-
-
- ) : ( -

- {LL.settingsPage.license.licenseInfo.status.noLicense()} -

- )} -
-
-
- ); -}; diff --git a/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/styles.scss b/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/styles.scss deleted file mode 100644 index 3d1ca3037..000000000 --- a/web/src/pages/settings/components/GlobalSettings/components/LicenseSettings/styles.scss +++ /dev/null @@ -1,56 +0,0 @@ -#license-settings { - & > .card { - display: flex; - flex-flow: column; - row-gap: 16px; - - @include media-breakpoint-up(lg) { - padding: 16px 15px; - } - - .loading-license-info { - display: flex; - justify-content: center; - align-items: center; - } - } -} - -.controls > .header { - display: flex; - justify-content: space-between; - align-items: center; - gap: 10px; -} - -#license-info { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 16px; - - & > div { - display: flex; - flex-flow: column; - row-gap: 8px; - align-items: center; - - & > .with-helper { - display: flex; - gap: 5px; - } - } - - .license-status { - display: flex; - align-items: center; - gap: 5px; - } -} - -#no-license { - text-align: center; -} - -#license-not-required { - text-align: center; -} diff --git a/web/src/pages/settings/components/GlobalSettings/types.ts b/web/src/pages/settings/components/GlobalSettings/types.ts deleted file mode 100644 index 85875150b..000000000 --- a/web/src/pages/settings/components/GlobalSettings/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -import z from 'zod'; -import type { TranslationFunctions } from '../../../../i18n/i18n-types'; - -export const globalSettingsSchema = (LL: TranslationFunctions) => - z.object({ - main_logo_url: z.string().trim(), - nav_logo_url: z.string().trim(), - instance_name: z - .string() - .trim() - .min(3, LL.form.error.minimumLength()) - .max(64, LL.form.error.maximumLength()), - openid_enabled: z.boolean(), - wireguard_enabled: z.boolean(), - worker_enabled: z.boolean(), - webhooks_enabled: z.boolean(), - license: z.string().trim().optional(), - }); - -export type GlobalSettingsFormFields = z.infer>; diff --git a/web/src/pages/settings/components/LdapSettings/LdapSettings.tsx b/web/src/pages/settings/components/LdapSettings/LdapSettings.tsx deleted file mode 100644 index 40e1109eb..000000000 --- a/web/src/pages/settings/components/LdapSettings/LdapSettings.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { BigInfoBox } from '../../../../shared/defguard-ui/components/Layout/BigInfoBox/BigInfoBox'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { LdapSettingsForm } from './components/LdapSettingsForm'; - -export const LdapSettings = () => { - const { LL } = useI18nContext(); - const appInfo = useAppStore((s) => s.appInfo); - - if (!appInfo) return null; - return ( - <> - {appInfo.license_info.is_enterprise_free && ( -
- -
- )} - - - ); -}; diff --git a/web/src/pages/settings/components/LdapSettings/components/LdapConnectionTest.tsx b/web/src/pages/settings/components/LdapSettings/components/LdapConnectionTest.tsx deleted file mode 100644 index 4346999e6..000000000 --- a/web/src/pages/settings/components/LdapSettings/components/LdapConnectionTest.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; - -export const LdapConnectionTest = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.ldapSettings.test; - const { - settings: { testLdapSettings }, - } = useApi(); - - const toaster = useToaster(); - - const { isPending: isLoading, mutate } = useMutation({ - mutationFn: testLdapSettings, - onSuccess: () => { - toaster.success(localLL.messages.success()); - }, - onError: () => { - toaster.error(localLL.messages.error()); - }, - }); - - return ( -
- ); -}; diff --git a/web/src/pages/settings/components/LdapSettings/style.scss b/web/src/pages/settings/components/LdapSettings/style.scss deleted file mode 100644 index 4c2eff9d8..000000000 --- a/web/src/pages/settings/components/LdapSettings/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -@use '@scssutils' as *; - -#ldap-settings { - .message-box-spacer { - padding-bottom: var(--spacing-s); - } -} diff --git a/web/src/pages/settings/components/NotificationSettings/NotificationSettings.tsx b/web/src/pages/settings/components/NotificationSettings/NotificationSettings.tsx deleted file mode 100644 index 5ef0c5049..000000000 --- a/web/src/pages/settings/components/NotificationSettings/NotificationSettings.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { NotificationsForm } from './components/NotificationSettingsForm'; - -export const NotificationSettings = () => { - const appInfo = useAppStore((s) => s.appInfo); - - if (!appInfo) return null; - - return ; -}; diff --git a/web/src/pages/settings/components/NotificationSettings/components/GatewayNotificationsForm.tsx b/web/src/pages/settings/components/NotificationSettings/components/GatewayNotificationsForm.tsx deleted file mode 100644 index 68ef4899f..000000000 --- a/web/src/pages/settings/components/NotificationSettings/components/GatewayNotificationsForm.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import parse from 'html-react-parser'; -import type { Control } from 'react-hook-form'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormCheckBox } from '../../../../../shared/defguard-ui/components/Form/FormCheckBox/FormCheckBox'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import type { FormFields } from './NotificationSettingsForm'; - -export const GatewayNotificationsForm = ({ - control, - isLoading, -}: { - control: Control; - isLoading: boolean; -}) => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.gatewayNotifications; - const smtpConfigured = useAppStore((s) => Boolean(s.appInfo?.smtp_enabled)); - - return ( -
-

{localLL.sections.gateway()}

-
-
- - - {parse(localLL.form.fields.disconnectNotificationsEnabled.help())} - -
-
- - - {parse(localLL.form.fields.reconnectNotificationsEnabled.help())} - -
-
- {parse(localLL.form.fields.inactivityThreshold.help())} - } - disabled={isLoading || !smtpConfigured} - required - /> -
- ); -}; diff --git a/web/src/pages/settings/components/NotificationSettings/components/NotificationSettingsForm.tsx b/web/src/pages/settings/components/NotificationSettings/components/NotificationSettingsForm.tsx deleted file mode 100644 index ed6293251..000000000 --- a/web/src/pages/settings/components/NotificationSettings/components/NotificationSettingsForm.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import parse from 'html-react-parser'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import IconCheckmarkWhite from '../../../../../shared/components/svg/IconCheckmarkWhite'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { MessageBox } from '../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import type { ApiError } from '../../../../../shared/types'; -import { invalidateMultipleQueries } from '../../../../../shared/utils/invalidateMultipleQueries'; -import { useSettingsPage } from '../../../hooks/useSettingsPage'; -import { GatewayNotificationsForm } from './GatewayNotificationsForm'; - -export type FormFields = { - gateway_disconnect_notifications_enabled: boolean; - gateway_disconnect_notifications_inactivity_threshold: number; - gateway_disconnect_notifications_reconnect_notification_enabled: boolean; -}; - -export const NotificationsForm = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.gatewayNotifications; - const settings = useSettingsPage((state) => state.settings); - - const toaster = useToaster(); - - const { - settings: { patchSettings }, - } = useApi(); - - const smtpConfigured = useAppStore((s) => Boolean(s.appInfo?.smtp_enabled)); - - const queryClient = useQueryClient(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: patchSettings, - onSuccess: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_APP_INFO], - [QueryKeys.FETCH_SETTINGS], - ]); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (err: ApiError) => { - toaster.error(err.response?.data.msg || LL.messages.error()); - console.error(err); - }, - }); - - const zodSchema = useMemo( - () => - z.object({ - gateway_disconnect_notifications_enabled: z.boolean(), - gateway_disconnect_notifications_inactivity_threshold: z - .number() - .min(0, LL.form.error.minimumValue({ value: 0 })), - gateway_disconnect_notifications_reconnect_notification_enabled: z.boolean(), - }), - [LL.form], - ); - - const defaultValues = useMemo(() => { - const res: FormFields = { - gateway_disconnect_notifications_enabled: - settings?.gateway_disconnect_notifications_enabled ?? false, - gateway_disconnect_notifications_inactivity_threshold: - settings?.gateway_disconnect_notifications_inactivity_threshold ?? 5, - gateway_disconnect_notifications_reconnect_notification_enabled: - settings?.gateway_disconnect_notifications_reconnect_notification_enabled ?? - false, - }; - return res; - }, [settings]); - - const { control, handleSubmit } = useForm({ - defaultValues, - mode: 'all', - resolver: zodResolver(zodSchema), - }); - - const onSubmit: SubmitHandler = (data) => { - mutate(data); - }; - - if (!settings) return null; - - return ( -
-
-
-

{localLL.header()}

- {parse(localLL.helper())} -
-
-
-
-
-
-
- - -
-
-
-
- ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/OpenIdSettings.tsx b/web/src/pages/settings/components/OpenIdSettings/OpenIdSettings.tsx deleted file mode 100644 index d20bce2f1..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/OpenIdSettings.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { BigInfoBox } from '../../../../shared/defguard-ui/components/Layout/BigInfoBox/BigInfoBox'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { OpenIdSettingsForm } from './components/OpenIdSettingsForm'; - -export const OpenIdSettings = () => { - const { LL } = useI18nContext(); - const appInfo = useAppStore((s) => s.appInfo); - - if (!appInfo) return null; - - return ( - <> - {appInfo.license_info.is_enterprise_free && ( -
- -
- )} -
- -
- - ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/DirectorySyncSettings.tsx b/web/src/pages/settings/components/OpenIdSettings/components/DirectorySyncSettings.tsx deleted file mode 100644 index a859fbbfc..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/DirectorySyncSettings.tsx +++ /dev/null @@ -1,268 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; -import { useMemo, useState } from 'react'; -import { useFormContext, useWatch } from 'react-hook-form'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { LabeledCheckbox } from '../../../../../shared/defguard-ui/components/Layout/LabeledCheckbox/LabeledCheckbox'; -import SvgIconDownload from '../../../../../shared/defguard-ui/components/svg/IconDownload'; -import { titleCase } from '../../../../../shared/utils/titleCase'; -import { SUPPORTED_SYNC_PROVIDERS } from './SupportedProviders'; - -export const DirsyncSettings = ({ isLoading }: { isLoading: boolean }) => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.openIdSettings; - const [googleServiceAccountFileName, setGoogleServiceAccountFileName] = useState< - string | null - >(null); - - const { control, setValue } = useFormContext(); - - const userBehaviorOptions = useMemo( - () => [ - { - value: 'keep', - label: localLL.form.selects.behavior.keep(), - key: 1, - }, - { - value: 'disable', - label: localLL.form.selects.behavior.disable(), - key: 2, - }, - { - value: 'delete', - label: localLL.form.selects.behavior.delete(), - key: 3, - }, - ], - [localLL.form.selects.behavior], - ); - - const syncTarget = useMemo( - () => [ - { - value: 'all', - label: localLL.form.selects.synchronize.all(), - key: 1, - }, - { - value: 'users', - label: localLL.form.selects.synchronize.users(), - key: 2, - }, - { - value: 'groups', - label: localLL.form.selects.synchronize.groups(), - key: 3, - }, - ], - [localLL.form.selects.synchronize], - ); - - const providerName = useWatch({ control, name: 'name' }) as string; - const dirsyncEnabled: boolean = useWatch({ - control, - name: 'directory_sync_enabled', - }) as boolean; - const showDirsync = SUPPORTED_SYNC_PROVIDERS.includes(providerName ?? ''); - - return ( -
-
-

{localLL.form.directory_sync_settings.title()}

- {localLL.form.directory_sync_settings.helper()} -
-
- {showDirsync ? ( - <> -
- {/* FIXME: Really buggy when using the controller, investigate why */} - setValue('directory_sync_enabled', val)} - // controller={{ control, name: 'directory_sync_enabled' }} - /> -
- ({ - key: val, - displayValue: titleCase(val), - })} - labelExtras={ - {parse(localLL.form.labels.sync_target.helper())} - } - disabled={isLoading} - /> - {parse(localLL.form.labels.sync_interval.helper())} - } - disabled={isLoading} - /> - ({ - key: val, - displayValue: titleCase(val), - })} - labelExtras={ - {parse(localLL.form.labels.user_behavior.helper())} - } - disabled={isLoading} - /> - ({ - key: val, - displayValue: titleCase(val), - })} - labelExtras={ - {parse(localLL.form.labels.admin_behavior.helper())} - } - disabled={isLoading} - /> - {providerName === 'Microsoft' ? ( - {parse(localLL.form.labels.group_match.helper())} - } - required={false} - > - ) : null} - {providerName === 'Okta' ? ( - <> - {parse(localLL.form.labels.okta_client_id.helper())} - } - required={dirsyncEnabled} - /> - {parse(localLL.form.labels.okta_client_key.helper())} - } - required={dirsyncEnabled} - /> - - ) : null} - {providerName === 'JumpCloud' ? ( - {parse(localLL.form.labels.jumpcloud_api_key.helper())} - } - required={dirsyncEnabled} - type="password" - /> - ) : null} - {providerName === 'Google' ? ( - <> - {parse(localLL.form.labels.admin_email.helper())} - } - required={dirsyncEnabled} - /> - - {parse(localLL.form.labels.service_account_used.helper())} - - } - disabled={isLoading} - required={dirsyncEnabled} - /> -
-
- - - {localLL.form.labels.service_account_key_file.helper()} - -
-
- { - const file = e.target.files?.[0]; - if (file) { - const reader = new FileReader(); - reader.onload = (e) => { - if (e?.target?.result) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const key = JSON.parse(e.target?.result as string); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - setValue('google_service_account_key', key.private_key); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - setValue('google_service_account_email', key.client_email); - setGoogleServiceAccountFileName(file.name); - } - }; - reader.readAsText(file); - } - }} - disabled={isLoading} - /> -
- {' '} -

- {googleServiceAccountFileName - ? `${localLL.form.labels.service_account_key_file.uploaded()}: ${googleServiceAccountFileName}` - : localLL.form.labels.service_account_key_file.uploadPrompt()} -

-
-
-
- - ) : null} - - ) : ( -

- {localLL.form.directory_sync_settings.notSupported()} -

- )} -
-
- ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdGeneralSettings.tsx b/web/src/pages/settings/components/OpenIdSettings/components/OpenIdGeneralSettings.tsx deleted file mode 100644 index 4722287be..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdGeneralSettings.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; -import { useMemo } from 'react'; -import { useFormContext, useWatch } from 'react-hook-form'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormSelect } from '../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { LabeledCheckbox } from '../../../../../shared/defguard-ui/components/Layout/LabeledCheckbox/LabeledCheckbox'; -import { - type SelectOption, - SelectSizeVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { UsernameHandling } from './OpenIdSettingsForm'; - -export const OpenIdGeneralSettings = ({ isLoading }: { isLoading: boolean }) => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.openIdSettings; - const { control, setValue } = useFormContext(); - const create_account = useWatch({ - control, - name: 'create_account', - }) as boolean; - - const options: SelectOption[] = useMemo( - () => [ - { - value: 'RemoveForbidden', - label: localLL.general.usernameHandling.options.remove(), - key: 0, - }, - { - value: 'ReplaceForbidden', - label: localLL.general.usernameHandling.options.replace(), - key: 1, - }, - { - value: 'PruneEmailDomain', - label: localLL.general.usernameHandling.options.prune_email(), - key: 2, - }, - ], - [localLL.general.usernameHandling.options], - ); - - return ( -
-
-

{localLL.general.title()}

- {parse(localLL.general.helper())} -
-
- {/* FIXME: Really buggy when using the controller, investigate why */} - { - setValue('create_account', e); - }} - disabled={isLoading} - /> - {localLL.general.createAccount.helper()} -
- {localLL.general.usernameHandling.helper()}} - disabled={isLoading} - /> -
- ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdProviderSettings.tsx b/web/src/pages/settings/components/OpenIdSettings/components/OpenIdProviderSettings.tsx deleted file mode 100644 index 4fddbe135..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdProviderSettings.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import './style.scss'; - -import parse from 'html-react-parser'; -import { useCallback, useMemo } from 'react'; -import { useFormContext, useWatch } from 'react-hook-form'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Helper } from '../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Select/types'; - -export const OpenIdProviderSettings = ({ isLoading }: { isLoading: boolean }) => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.openIdSettings; - const { control, setValue } = useFormContext(); - - const options: SelectOption[] = useMemo( - () => [ - { - value: '', - label: localLL.form.none(), - key: 0, - }, - { - value: 'Google', - label: 'Google', - key: 1, - }, - { - value: 'Microsoft', - label: 'Microsoft', - key: 2, - }, - { - value: 'Okta', - label: 'Okta', - key: 3, - }, - { - value: 'JumpCloud', - label: 'JumpCloud', - key: 4, - }, - { - value: 'Custom', - label: localLL.form.custom(), - key: 5, - }, - ], - [localLL.form], - ); - - const renderSelected = useCallback( - (selected: string): SelectSelectedValue => { - const option = options.find((o) => o.value === selected); - - if (!option) throw Error("Selected value doesn't exist"); - - return { - key: option.key, - displayValue: option.label, - }; - }, - [options], - ); - - const getProviderUrl = useCallback(({ name }: { name: string }): string | null => { - switch (name) { - case 'Google': - return 'https://accounts.google.com'; - case 'Microsoft': - return `https://login.microsoftonline.com//v2.0`; - case 'Okta': - return ``; - case 'JumpCloud': - return 'https://oauth.id.jumpcloud.com/'; - default: - return null; - } - }, []); - - const getProviderDisplayName = useCallback( - ({ name }: { name: string }): string | null => { - switch (name) { - case 'Google': - return 'Google'; - case 'Microsoft': - return 'Microsoft'; - case 'Okta': - return 'Okta'; - case 'JumpCloud': - return 'JumpCloud'; - default: - return null; - } - }, - [], - ); - - const providerName = useWatch({ - control, - name: 'name', - }) as string; - - const handleProviderChange = useCallback( - (val: string) => { - setValue('base_url', getProviderUrl({ name: val }) ?? ''); - setValue('display_name', getProviderDisplayName({ name: val }) ?? ''); - }, - [getProviderUrl, getProviderDisplayName, setValue], - ); - - return ( -
-
-

{localLL.form.title()}

- {parse(localLL.form.helper())} -
- handleProviderChange(res)} - label={localLL.form.labels.provider.label()} - labelExtras={{parse(localLL.form.labels.provider.helper())}} - disabled={isLoading} - /> - {parse(localLL.form.labels.base_url.helper())}} - disabled={providerName === 'Google' || providerName === 'JumpCloud' || isLoading} - required - /> - {parse(localLL.form.labels.client_id.helper())}} - disabled={isLoading} - required - /> - {parse(localLL.form.labels.client_secret.helper())}} - required - type="password" - disabled={isLoading} - /> - {parse(localLL.form.labels.display_name.helper())}} - disabled={isLoading || providerName !== 'Custom'} - /> -
- ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdSettingsForm.tsx b/web/src/pages/settings/components/OpenIdSettings/components/OpenIdSettingsForm.tsx deleted file mode 100644 index ec3215c2b..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/OpenIdSettingsForm.tsx +++ /dev/null @@ -1,312 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo } from 'react'; -import { FormProvider, type SubmitHandler, useForm } from 'react-hook-form'; -import ReactMarkdown from 'react-markdown'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import IconCheckmarkWhite from '../../../../../shared/components/svg/IconCheckmarkWhite'; -import SvgIconX from '../../../../../shared/components/svg/IconX'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { MessageBox } from '../../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import { MessageBoxType } from '../../../../../shared/defguard-ui/components/Layout/MessageBox/types'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import { invalidateMultipleQueries } from '../../../../../shared/utils/invalidateMultipleQueries'; -import { DirsyncSettings } from './DirectorySyncSettings'; -import { OpenIdGeneralSettings } from './OpenIdGeneralSettings'; -import { OpenIdProviderSettings } from './OpenIdProviderSettings'; -import { SUPPORTED_SYNC_PROVIDERS } from './SupportedProviders'; - -export type UsernameHandling = - | 'RemoveForbidden' - | 'ReplaceForbidden' - | 'PruneEmailDomain'; - -export const OpenIdSettingsForm = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.openIdSettings; - const queryClient = useQueryClient(); - const enterpriseEnabled = useAppStore((s) => s.appInfo?.license_info.enterprise); - const { - settings: { testDirsync }, - } = useApi(); - - const { - settings: { fetchOpenIdProviders, addOpenIdProvider, deleteOpenIdProvider }, - } = useApi(); - - const { isLoading, data: openidData } = useQuery({ - queryFn: fetchOpenIdProviders, - queryKey: [QueryKeys.FETCH_OPENID_PROVIDERS], - refetchOnMount: true, - refetchOnWindowFocus: false, - retry: false, - enabled: enterpriseEnabled, - }); - - const toaster = useToaster(); - - const { mutate } = useMutation({ - mutationFn: addOpenIdProvider, - onSuccess: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_OPENID_PROVIDERS], - [QueryKeys.FETCH_APP_INFO], - ]); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (error) => { - toaster.error(LL.messages.error()); - console.error(error); - }, - }); - - const { mutate: deleteProvider } = useMutation({ - mutationFn: deleteOpenIdProvider, - onSuccess: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_OPENID_PROVIDERS], - [QueryKeys.FETCH_APP_INFO], - ]); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (error) => { - toaster.error(LL.messages.error()); - console.error(error); - }, - }); - - const schema = useMemo( - () => - z - .object({ - name: z.string().optional(), - base_url: z - .string() - .url(LL.form.error.invalid()) - .min(1, LL.form.error.required()), - client_id: z.string().min(1, LL.form.error.required()), - client_secret: z.string().min(1, LL.form.error.required()), - display_name: z.string(), - admin_email: z.string(), - google_service_account_email: z.string(), - google_service_account_key: z.string(), - directory_sync_enabled: z.boolean(), - directory_sync_interval: z.number().min(60, LL.form.error.invalid()), - directory_sync_user_behavior: z.enum(['keep', 'disable', 'delete']), - directory_sync_admin_behavior: z.enum(['keep', 'disable', 'delete']), - directory_sync_target: z.enum(['all', 'users', 'groups']), - create_account: z.boolean(), - username_handling: z.string(), - okta_private_jwk: z.string(), - okta_dirsync_client_id: z.string(), - directory_sync_group_match: z.string(), - jumpcloud_api_key: z.string(), - }) - .superRefine((val, ctx) => { - if (val.name === '') { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: LL.form.error.required(), - path: ['name'], - }); - } - - if (val.directory_sync_enabled && val.base_url.includes('okta')) { - if (val.okta_dirsync_client_id.length === 0) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: LL.form.error.required(), - path: ['okta_dirsync_client_id'], - }); - } - } - - if (val.directory_sync_enabled && val.name === 'Google') { - if (val.admin_email.length === 0) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: LL.form.error.required(), - path: ['admin_email'], - }); - } - - if (val.google_service_account_email.length === 0) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: LL.form.error.required(), - path: ['google_service_account_email'], - }); - } - } - - if (val.directory_sync_enabled && val.name === 'JumpCloud') { - if (val.jumpcloud_api_key.length === 0) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: LL.form.error.required(), - }); - } - } - }), - [LL.form.error], - ); - - type FormFields = z.infer; - - const defaultValues = useMemo((): FormFields => { - let defaults: FormFields = { - name: '', - base_url: '', - client_id: '', - client_secret: '', - display_name: '', - admin_email: '', - google_service_account_email: '', - google_service_account_key: '', - directory_sync_enabled: false, - directory_sync_interval: 600, - directory_sync_user_behavior: 'keep', - directory_sync_admin_behavior: 'keep', - directory_sync_target: 'all', - create_account: false, - okta_private_jwk: '', - okta_dirsync_client_id: '', - directory_sync_group_match: '', - username_handling: 'RemoveForbidden', - jumpcloud_api_key: '', - }; - - if (openidData) { - if (openidData.provider) { - defaults = { - ...defaults, - ...openidData.provider, - }; - - if (Array.isArray(openidData.provider.directory_sync_group_match)) { - defaults = { - ...defaults, - - directory_sync_group_match: - openidData.provider.directory_sync_group_match.length > 0 - ? openidData.provider.directory_sync_group_match.join(',') - : '', - }; - } - } - - defaults = { - ...defaults, - ...openidData.settings, - }; - } - - return defaults; - }, [openidData]); - - const formControl = useForm({ - resolver: zodResolver(schema), - defaultValues, - mode: 'all', - }); - - const { handleSubmit, reset } = formControl; - - // Make sure the form data is fresh - useEffect(() => { - reset(defaultValues); - }, [defaultValues, reset]); - - const handleValidSubmit: SubmitHandler = (data) => { - mutate({ id: openidData?.provider?.id ?? 0, ...data, name: data.name ?? '' }); - }; - - const handleDeleteProvider = useCallback(() => { - if (openidData?.provider) { - deleteProvider(openidData?.provider.name); - } - }, [openidData, deleteProvider]); - - const showDirsync = SUPPORTED_SYNC_PROVIDERS.includes(openidData?.provider?.name ?? ''); - - return ( - <> -
-

{localLL.heading()}

-
- {showDirsync && ( - - )} -
-
- -
-
- - {localLL.form.documentation()} - - - -
-
- -
-
-
- - ); -}; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/SupportedProviders.ts b/web/src/pages/settings/components/OpenIdSettings/components/SupportedProviders.ts deleted file mode 100644 index 9bff03ecc..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/SupportedProviders.ts +++ /dev/null @@ -1 +0,0 @@ -export const SUPPORTED_SYNC_PROVIDERS = ['Google', 'Microsoft', 'Okta', 'JumpCloud']; diff --git a/web/src/pages/settings/components/OpenIdSettings/components/style.scss b/web/src/pages/settings/components/OpenIdSettings/components/style.scss deleted file mode 100644 index 017b6c9d4..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/components/style.scss +++ /dev/null @@ -1,91 +0,0 @@ -@use '@scssutils' as *; - -#openid-settings, -#dirsync-settings, -#general-settings { - .select { - padding-bottom: var(--spacing-s); - } - - .checkbox-padding { - padding-bottom: var(--spacing-s); - } - - #sync-not-supported { - text-align: center; - margin: var(--spacing-s) 0; - color: var(--text-body-tertiary); - } - - .hidden-input { - display: none; - } - - .file-upload-container { - background-color: var(--surface-frame-bg); - display: flex; - justify-content: center; - align-items: center; - border: 2px dashed var(--border-primary); - border-radius: 10px; - position: relative; - padding: var(--spacing-s); - z-index: 0; - } - - .file-upload-container.dragging { - border-color: var(--border-secondary); - } - - .file-upload { - position: absolute; - top: 0; - left: 0; - opacity: 0; - width: 100%; - height: 100%; - z-index: 1; - cursor: pointer; - } - - .select-container { - margin-bottom: 0; - } - - .upload-label { - display: flex; - align-items: center; - gap: var(--spacing-xs); - cursor: pointer; - - p { - color: var(--text-body-secondary); - font-size: 15px; - } - - & > svg { - width: 20px; - height: 20px; - transform: rotate(180deg); - } - } - - .test-connection { - display: flex; - width: 100%; - justify-content: flex-end; - } - - .labeled-checkbox { - padding-bottom: var(--spacing-s); - } -} - -.loader { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - grid-column: 1 / -1; - min-height: 300px; -} diff --git a/web/src/pages/settings/components/OpenIdSettings/style.scss b/web/src/pages/settings/components/OpenIdSettings/style.scss deleted file mode 100644 index 475fc4d20..000000000 --- a/web/src/pages/settings/components/OpenIdSettings/style.scss +++ /dev/null @@ -1,23 +0,0 @@ -.settings-card { - position: relative; -} - -.enterprise-info { - position: absolute; - inset: 0; - display: flex; - justify-content: center; - align-items: center; - backdrop-filter: blur(1.5px); - z-index: 100; - border-radius: 15px; - border-top-left-radius: 0px; - background-color: rgba(#f9f9f9, 0.75); -} - -.enterprise-info > div { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; -} diff --git a/web/src/pages/settings/components/SmtpSettings/SmtpSettings.tsx b/web/src/pages/settings/components/SmtpSettings/SmtpSettings.tsx deleted file mode 100644 index ba1fb29ec..000000000 --- a/web/src/pages/settings/components/SmtpSettings/SmtpSettings.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import './styles.scss'; - -import { SmtpSettingsForm } from './components/SmtpSettingsForm/SmtpSettingsForm'; - -export const SmtpSettings = () => { - return ; -}; diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/SmtpSettingsForm.tsx b/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/SmtpSettingsForm.tsx deleted file mode 100644 index 55db9997b..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/SmtpSettingsForm.tsx +++ /dev/null @@ -1,263 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import parse from 'html-react-parser'; -import { useCallback, useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import IconCheckmarkWhite from '../../../../../../shared/components/svg/IconCheckmarkWhite'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Helper } from '../../../../../../shared/defguard-ui/components/Layout/Helper/Helper'; -import type { - SelectOption, - SelectSelectedValue, -} from '../../../../../../shared/defguard-ui/components/Layout/Select/types'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { patternValidEmail } from '../../../../../../shared/patterns'; -import { QueryKeys } from '../../../../../../shared/queries'; -import type { SettingsSMTP } from '../../../../../../shared/types'; -import { invalidateMultipleQueries } from '../../../../../../shared/utils/invalidateMultipleQueries'; -import { validateIpOrDomain } from '../../../../../../shared/validators'; -import { useSettingsPage } from '../../../../hooks/useSettingsPage'; -import { SmtpTestModal } from '../SmtpTest/SmtpTestModal'; -import { useSmtpTestModal } from '../SmtpTest/useSmtpTestModal'; - -type FormFields = { - smtp_server: string; - smtp_port: number; - smtp_user: string; - smtp_password: string; - smtp_sender: string; - smtp_encryption: string; -}; - -export const SmtpSettingsForm = () => { - const { LL } = useI18nContext(); - const localLL = LL.settingsPage.smtp; - - const settings = useSettingsPage((state) => state.settings); - const openSmtpTest = useSmtpTestModal((state) => state.open); - - const toaster = useToaster(); - - const { - settings: { patchSettings }, - } = useApi(); - - const queryClient = useQueryClient(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: patchSettings, - onSuccess: () => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_APP_INFO], - [QueryKeys.FETCH_SETTINGS], - ]); - toaster.success(LL.settingsPage.messages.editSuccess()); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const encryptionOptions = useMemo( - (): SelectOption[] => [ - { - key: 1, - value: 'StartTls', - label: 'Start TLS', - }, - { - key: 2, - value: 'None', - label: 'None', - }, - { - key: 3, - value: 'ImplicitTls', - label: 'Implicit TLS', - }, - ], - [], - ); - - const renderSelectedEncryption = useCallback( - (selected: string): SelectSelectedValue => { - const option = encryptionOptions.find((o) => o.value === selected); - if (!option) throw Error("Selected value doesn't exist"); - return { - key: option.key, - displayValue: option.label, - }; - }, - [encryptionOptions], - ); - - const zodSchema = useMemo( - () => - z.object({ - smtp_server: z - .string() - .trim() - .min(1, LL.form.error.required()) - .refine( - (val) => (!val ? true : validateIpOrDomain(val, false, true)), - LL.form.error.endpoint(), - ), - smtp_port: z - .number({ - invalid_type_error: LL.form.error.required(), - }) - .max(65535, LL.form.error.portMax()), - smtp_password: z.string().trim(), - smtp_user: z.string().trim(), - smtp_sender: z - .string() - .trim() - .min(1, LL.form.error.required()) - .regex(patternValidEmail, LL.form.error.invalid()), - smtp_encryption: z.string().trim().min(1, LL.form.error.required()), - }), - [LL.form], - ); - - const defaultValues = useMemo(() => { - const res: FormFields = { - smtp_server: settings?.smtp_server ?? '', - smtp_port: settings?.smtp_port ?? 587, - smtp_password: settings?.smtp_password ?? '', - smtp_sender: settings?.smtp_sender ?? '', - smtp_user: settings?.smtp_user ?? '', - smtp_encryption: settings?.smtp_encryption ?? encryptionOptions[1].value, - }; - return res; - }, [settings, encryptionOptions]); - - const emptyValues: SettingsSMTP = useMemo( - () => ({ - smtp_server: '', - smtp_port: 587, - smtp_password: '', - smtp_sender: '', - smtp_user: '', - smtp_encryption: encryptionOptions[1].value, - }), - [encryptionOptions], - ); - - const { control, reset, handleSubmit } = useForm({ - defaultValues, - mode: 'all', - resolver: zodResolver(zodSchema), - }); - - const onSubmit: SubmitHandler = (data) => { - mutate(data); - }; - - const handleDeleteSubmit = useCallback(() => { - mutate(emptyValues); - reset(emptyValues); - }, [mutate, emptyValues, reset]); - - if (!settings) return null; - - return ( -
- -
-
-

{localLL.form.title()}

- {localLL.helper()} -
-
-
-
-
-
-
-
-

{localLL.form.sections.server()}

-
- - - - - {parse(localLL.form.fields.sender.helper())}} - label={localLL.form.fields.sender.label()} - controller={{ control, name: 'smtp_sender' }} - placeholder={localLL.form.fields.sender.placeholder()} - required - /> - -
-
-
-
- ); -}; diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/style.scss b/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/style.scss deleted file mode 100644 index 42296ec03..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpSettingsForm/style.scss +++ /dev/null @@ -1,24 +0,0 @@ -@use '@scssutils' as *; - -#smtp-settings { - & > header { - & > .btn { - margin-left: auto; - } - - & > .controls { - display: flex; - gap: 10px; - } - } - form { - width: 100%; - display: flex; - flex-flow: column; - row-gap: 5px; - - & > * { - width: 100%; - } - } -} diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTest.tsx b/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTest.tsx deleted file mode 100644 index ad2050366..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTest.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useMemo, useRef } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import IconCheckmark from '../../../../../../shared/components/svg/IconCheckmark'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { patternValidEmail } from '../../../../../../shared/patterns'; -import type { TestMail } from '../../../../../../shared/types'; - -type SMTPError = AxiosError<{ error: string }>; - -export const SmtpTest = () => { - const submitRef = useRef(null); - const { LL } = useI18nContext(); - const toaster = useToaster(); - const { - mail: { sendTestMail }, - } = useApi(); - - const { mutate, isPending: isLoading } = useMutation({ - mutationFn: sendTestMail, - onSuccess: () => { - toaster.success(LL.settingsPage.smtp.testForm.controls.success()); - }, - onError: (err: SMTPError) => { - toaster.error(`${LL.settingsPage.smtp.testForm.controls.error()}`, { - subMessage: `${err.response?.data.error}`, - }); - console.error(err); - }, - }); - - const zodSchema = useMemo( - () => - z.object({ - to: z.string().trim().regex(patternValidEmail, LL.form.error.invalid()), - }), - [LL.form.error], - ); - - const { control: testControl, handleSubmit: handleTestSubmit } = useForm({ - defaultValues: { - to: '', - }, - resolver: zodResolver(zodSchema), - mode: 'all', - }); - - const onSubmit: SubmitHandler = (data) => { - mutate(data); - }; - - return ( -
-
-

{LL.settingsPage.smtp.testForm.title()}

-
-
- - - -
- ); -}; diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTestModal.tsx b/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTestModal.tsx deleted file mode 100644 index 9f33fffda..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/SmtpTestModal.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { useMemo, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import IconCheckmark from '../../../../../../shared/components/svg/IconCheckmark'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { patternValidEmail } from '../../../../../../shared/patterns'; -import type { TestMail } from '../../../../../../shared/types'; -import { useSmtpTestModal } from './useSmtpTestModal'; - -type SMTPError = AxiosError<{ error: string }>; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const modal = useSmtpTestModal((s) => s); - const { - mail: { sendTestMail }, - } = useApi(); - - const [errorMessage, setErrorMessage] = useState(null); - - const { - mutate, - isPending: isLoading, - status, - reset: resetMutation, - } = useMutation({ - mutationFn: sendTestMail, - onError: (err: SMTPError) => { - if (err.response?.data.error) { - setErrorMessage(err.response?.data.error); - } - console.error(err); - }, - }); - - const zodSchema = useMemo( - () => - z.object({ - to: z.string().trim().regex(patternValidEmail, LL.form.error.invalid()), - }), - [LL.form.error], - ); - - const { control: testControl, handleSubmit: handleTestSubmit } = useForm({ - defaultValues: { - to: '', - }, - resolver: zodResolver(zodSchema), - mode: 'all', - }); - - const onSubmit: SubmitHandler = (data) => { - mutate(data); - }; - - return ( -
-
-

{LL.settingsPage.smtp.testForm.title()}

-
- {status === 'success' && ( -

{LL.settingsPage.smtp.testForm.success.message()}

- )} - {status === 'error' && ( -
-

{LL.settingsPage.smtp.testForm.error.message()}

-

- {LL.settingsPage.smtp.testForm.error.fullError({ - error: errorMessage || 'Unknown error', - })} -

-
- )} - {(status === 'idle' || status === 'pending') && ( - <> -

{LL.settingsPage.smtp.testForm.subtitle()}

-
- - - - )} -
-
-
- ); -}; - -export const SmtpTestModal = () => { - const isOpen = useSmtpTestModal((s) => s.visible); - const close = useSmtpTestModal((s) => s.close, shallow); - - return ( - { - close(); - }} - backdrop - disableClose - > - - - ); -}; diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/style.scss b/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/style.scss deleted file mode 100644 index ac23a5607..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/style.scss +++ /dev/null @@ -1,41 +0,0 @@ -@use '@scssutils' as *; - -#smtp-test-mail { - display: flex; - flex-direction: column; - gap: var(--spacing-s); - align-items: center; - - .hidden { - display: none; - } - - h2 { - color: var(--text-button-primary); - @include typography(app-body-1); - } - - p { - color: var(--text-button-primary); - @include typography(app-body-2); - text-align: center; - } - - .button-row { - display: flex; - gap: var(--spacing-xs); - justify-content: center; - width: 100%; - - button { - width: 100%; - } - } - - form { - width: 100%; - & > * { - width: 100%; - } - } -} diff --git a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/useSmtpTestModal.ts b/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/useSmtpTestModal.ts deleted file mode 100644 index 828428432..000000000 --- a/web/src/pages/settings/components/SmtpSettings/components/SmtpTest/useSmtpTestModal.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaults: StoreValues = { - visible: false, -}; - -export const useSmtpTestModal = createWithEqualityFn( - (set) => ({ - ...defaults, - open: () => set({ visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaults), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - visible: boolean; -}; - -type StoreMethods = { - open: () => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/settings/components/SmtpSettings/styles.scss b/web/src/pages/settings/components/SmtpSettings/styles.scss deleted file mode 100644 index 007442690..000000000 --- a/web/src/pages/settings/components/SmtpSettings/styles.scss +++ /dev/null @@ -1 +0,0 @@ -@use '@scssutils' as *; diff --git a/web/src/pages/settings/hooks/useSettingsPage.tsx b/web/src/pages/settings/hooks/useSettingsPage.tsx deleted file mode 100644 index b8c4f7c41..000000000 --- a/web/src/pages/settings/hooks/useSettingsPage.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { EnterpriseInfo, Settings } from '../../../shared/types'; - -const defaultValues: StoreValues = { - settings: undefined, - enterpriseInfo: undefined, - freeLicense: true, -}; - -export const useSettingsPage = createWithEqualityFn( - (set) => ({ - ...defaultValues, - setState: (data) => set(data), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - settings?: Settings; - enterpriseInfo?: EnterpriseInfo; - freeLicense: boolean; -}; - -type StoreMethods = { - setState: (data: Partial) => void; - reset: () => void; -}; diff --git a/web/src/pages/settings/style.scss b/web/src/pages/settings/style.scss deleted file mode 100644 index 81d10988a..000000000 --- a/web/src/pages/settings/style.scss +++ /dev/null @@ -1,196 +0,0 @@ -@use '@scssutils' as *; - -#settings-page { - .page-content { - box-sizing: border-box; - padding: 20px; - overflow-x: hidden; - overflow-y: auto; - - @include media-breakpoint-up(lg) { - padding: 64px 70px; - } - - h1 { - display: none; - margin-bottom: var(--spacing-l); - - @include typography(app-title); - - color: var(--text-body-primary); - - @include media-breakpoint-up(lg) { - display: block; - } - } - - h2 { - @include typography(app-body-1); - - color: var(--text-body-primary); - } - - h3 { - @include typography(modal-title); - - color: var(--text-body-primary); - } - - & > .loader-spinner { - padding-top: 10vh; - width: 100% !important; - } - - .helper-row { - display: flex; - align-items: center; - gap: var(--spacing-xs); - .labeled-checkbox { - padding-bottom: 0; - } - } - - section { - & > header { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: space-between; - gap: var(--spacing-s); - - h2 { - display: flex; - align-items: center; - gap: var(--spacing-xs); - @include typography(app-welcome-1); - - .helper-floating { - @include typography(modal-title); - } - } - - & > .controls { - display: flex; - gap: var(--spacing-s); - } - } - - display: flex; - flex-flow: column nowrap; - gap: var(--spacing-m); - } - - .license-not-required-container { - padding-bottom: var(--spacing-s); - } - - .card { - & > .controls { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - - column-gap: var(--spacing-xs); - - & > .btn { - &:first-of-type { - margin-left: auto; - } - } - } - } - - & > .settings-card { - padding: 0; - @include media-breakpoint-up(lg) { - padding: var(--spacing-m); - border-top-left-radius: 0; - } - - @include media-breakpoint-down(lg) { - padding: var(--spacing-m) 0; - } - h3 { - display: flex; - align-items: center; - gap: var(--spacing-xs); - - @include typography(app-side-bar); - - .helper-floating { - @include typography(modal-title); - } - } - - .subsection-header { - margin-bottom: var(--spacing-s); - } - - .subsection-header-with-controls { - margin-bottom: var(--spacing-s); - display: flex; - align-items: center; - justify-content: space-between; - } - - .checkbox-column { - display: flex; - flex-direction: column; - gap: var(--spacing-s); - padding-bottom: var(--spacing-s); - } - - .column-layout { - @include media-breakpoint-up(xxl) { - display: grid; - grid-template-rows: auto; - grid-template-columns: 1fr 1fr; - align-items: start; - justify-items: start; - row-gap: 48px; - column-gap: 56px; - } - - & > .left { - grid-column: 1; - } - - & > .right { - grid-column: 2; - } - - & > .left, - & > .right { - width: 100%; - max-width: 800px; - display: flex; - flex-flow: column; - row-gap: var(--spacing-s); - } - } - - .spinner-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 400px; - grid-column: 1 / -1; - width: 100%; - } - } - } - - .license-not-required-container { - grid-column: 1 / -1; - width: 100%; - - @include media-breakpoint-down(xxl) { - margin-bottom: 26px; - } - - @include media-breakpoint-down(xl) { - margin-top: 26px; - } - } -} diff --git a/web/src/pages/support/SupportPage.tsx b/web/src/pages/support/SupportPage.tsx deleted file mode 100644 index 6ac1375ec..000000000 --- a/web/src/pages/support/SupportPage.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { BuiltByCard } from './components/BuiltByCard/BuiltByCard'; -import { DebugDataCard } from './components/DebugDataCard/DebugDataCard'; -import { SupportCard } from './components/SupportCard/SupportCard'; - -export const SupportPage = () => { - const { LL } = useI18nContext(); - return ( - -

{LL.supportPage.title()}

-
-
- -
-
- - -
-
-
- ); -}; diff --git a/web/src/pages/support/components/BuiltByCard/BuiltByCard.tsx b/web/src/pages/support/components/BuiltByCard/BuiltByCard.tsx deleted file mode 100644 index 1859b6eb3..000000000 --- a/web/src/pages/support/components/BuiltByCard/BuiltByCard.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import './style.scss'; - -import TeoniteLogoGif from '/src/shared/images/gif/tnt-built.gif'; - -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; - -export const BuiltByCard = () => { - return ( - - - logo - - - ); -}; diff --git a/web/src/pages/support/components/BuiltByCard/style.scss b/web/src/pages/support/components/BuiltByCard/style.scss deleted file mode 100644 index aee69f34e..000000000 --- a/web/src/pages/support/components/BuiltByCard/style.scss +++ /dev/null @@ -1,25 +0,0 @@ -@use '@scssutils' as *; - -#built-by-card { - width: 100%; - box-sizing: border-box; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - padding: 20px 10px; - height: 150px; - - @include media-breakpoint-up(lg) { - padding: 30px 26px; - height: 180px; - } - - a { - height: 32px; - - img { - height: inherit; - } - } -} diff --git a/web/src/pages/support/components/DebugDataCard/DebugDataCard.tsx b/web/src/pages/support/components/DebugDataCard/DebugDataCard.tsx deleted file mode 100644 index a7a738da7..000000000 --- a/web/src/pages/support/components/DebugDataCard/DebugDataCard.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import './style.scss'; - -import { useMutation, useQuery } from '@tanstack/react-query'; -import { saveAs } from 'file-saver'; -import { useState } from 'react'; -import ReactMarkdown from 'react-markdown'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import SvgIconDownload from '../../../../shared/components/svg/IconDownload'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Divider } from '../../../../shared/defguard-ui/components/Layout/Divider/Divider'; -import useApi from '../../../../shared/hooks/useApi'; -import { QueryKeys } from '../../../../shared/queries'; -import { SendSupportDataModal } from './components/SendSupportDataModal'; - -export const DebugDataCard = () => { - const [sendDataOpen, setSendDataOpen] = useState(false); - const { LL } = useI18nContext(); - - const { - support: { downloadSupportData, downloadLogs }, - settings: { getSettings }, - } = useApi(); - - const { isPending: logsLoading, mutate: logsMutate } = useMutation({ - mutationFn: downloadLogs, - onSuccess: (res) => { - const content = new Blob([res], { type: 'text/plain;charset=utf-8' }); - const timestamp = new Date().toISOString().replaceAll(':', ''); - saveAs(content, `defguard-logs-${timestamp}.json`); - }, - }); - - const { isPending: configLoading, mutate: configMutate } = useMutation({ - mutationFn: downloadSupportData, - onSuccess: (res) => { - const content = new Blob([JSON.stringify(res, null, 2)], { - type: 'text/plain;charset=utf-8', - }); - const timestamp = new Date().toISOString().replaceAll(':', ''); - saveAs(content, `defguard-support-data-${timestamp}.json`); - }, - }); - - const { data: settings, isLoading: settingsLoading } = useQuery({ - queryFn: getSettings, - queryKey: [QueryKeys.FETCH_SETTINGS], - refetchOnMount: true, - }); - - const smtp_configured = - settings?.smtp_server && - settings?.smtp_port && - settings?.smtp_user && - settings?.smtp_password && - settings?.smtp_sender; - - return ( - <> - setSendDataOpen(v)} - /> - -
-

{LL.supportPage.debugDataCard.title()}

-
- -
- {LL.supportPage.debugDataCard.body()} -
-
- - ); -}; diff --git a/web/src/pages/support/components/DebugDataCard/components/SendSupportDataModal.tsx b/web/src/pages/support/components/DebugDataCard/components/SendSupportDataModal.tsx deleted file mode 100644 index 393487fb5..000000000 --- a/web/src/pages/support/components/DebugDataCard/components/SendSupportDataModal.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import type { SMTPError } from '../../../../../shared/types'; - -type Props = { - isOpen: boolean; - onOpenChange: (v: boolean) => void; -}; - -export const SendSupportDataModal = ({ isOpen, onOpenChange }: Props) => { - const { LL } = useI18nContext(); - const { - mail: { sendSupportMail }, - } = useApi(); - const toaster = useToaster(); - - const { mutate: sendMail, isPending: mailLoading } = useMutation({ - mutationFn: sendSupportMail, - onSuccess: () => { - toaster.success(LL.supportPage.debugDataCard.mailSent()); - onOpenChange(false); - }, - onError: (err: SMTPError) => { - toaster.error(`${LL.supportPage.debugDataCard.mailError()}`, { - subMessage: `${err.response?.data.error}`, - }); - console.error(err); - }, - }); - - return ( - onOpenChange(false)} - onSubmit={() => { - sendMail(); - }} - /> - ); -}; diff --git a/web/src/pages/support/components/DebugDataCard/style.scss b/web/src/pages/support/components/DebugDataCard/style.scss deleted file mode 100644 index 424fd537c..000000000 --- a/web/src/pages/support/components/DebugDataCard/style.scss +++ /dev/null @@ -1,82 +0,0 @@ -@use '@scssutils' as *; - -#support-debug-card { - box-sizing: border-box; - - .title { - width: 100%; - - @include typography(app-side-bar); - - color: var(--text-body-primary); - padding: 0; - margin: 0; - - @include media-breakpoint-up(md) { - width: unset; - } - } - - & > .controls { - display: flex; - flex-flow: row wrap; - gap: 10px; - align-items: center; - justify-content: flex-start; - box-sizing: border-box; - padding: 20px 10px; - - @include media-breakpoint-up(lg) { - padding: 16px 15px; - } - - & > .btn { - &:first-of-type { - margin-left: auto; - } - - svg { - path { - fill: var(--surface-icon-secondary); - } - } - } - } - - & > .content { - box-sizing: border-box; - padding: 25px 10px; - display: flex; - flex-flow: column; - row-gap: 15px; - - p, - span, - a, - strong, - li { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - strong { - font-weight: 600; - } - - p, - ul, - li { - text-align: center; - } - - ul, - ol { - list-style: none; - } - - @include media-breakpoint-up(lg) { - padding: 25px 60px; - } - } -} diff --git a/web/src/pages/support/components/SupportCard/SupportCard.tsx b/web/src/pages/support/components/SupportCard/SupportCard.tsx deleted file mode 100644 index d0fd03876..000000000 --- a/web/src/pages/support/components/SupportCard/SupportCard.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import './style.scss'; - -import ReactMarkdown from 'react-markdown'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Divider } from '../../../../shared/defguard-ui/components/Layout/Divider/Divider'; - -export const SupportCard = () => { - const { LL } = useI18nContext(); - return ( - -
-

{LL.supportPage.supportCard.title()}

-
- -
- {LL.supportPage.supportCard.body()} -
-
- ); -}; diff --git a/web/src/pages/support/components/SupportCard/style.scss b/web/src/pages/support/components/SupportCard/style.scss deleted file mode 100644 index a8b9b7432..000000000 --- a/web/src/pages/support/components/SupportCard/style.scss +++ /dev/null @@ -1,56 +0,0 @@ -@use '@scssutils' as *; - -#support-card { - & > header { - box-sizing: border-box; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - padding: 20px; - - & > .title { - @include typography(modal-title); - - color: var(--text-body-primary); - text-align: center; - } - } - - & > .content { - box-sizing: border-box; - padding: 25px 10px; - display: flex; - flex-flow: column; - row-gap: 15px; - - p, - span, - a, - strong, - li { - @include typography(app-body-2); - - color: var(--text-body-primary); - } - - strong { - font-weight: 600; - } - - p, - ul, - li { - text-align: center; - } - - ul, - ol { - list-style: none; - } - - @include media-breakpoint-up(lg) { - padding: 25px 60px; - } - } -} diff --git a/web/src/pages/support/style.scss b/web/src/pages/support/style.scss deleted file mode 100644 index 1fe5e8d69..000000000 --- a/web/src/pages/support/style.scss +++ /dev/null @@ -1,70 +0,0 @@ -@use '@scssutils' as *; - -#support-page { - & > .page-content { - box-sizing: border-box; - padding: 20px; - overflow-x: hidden; - overflow-y: auto; - - @include media-breakpoint-down(lg) { - background-color: var(--surface-default-modal); - } - - @include media-breakpoint-up(lg) { - padding: 64px 70px; - } - - h1 { - display: none; - margin-bottom: 50px; - - @include typography(app-title); - - color: var(--text-body-primary); - - @include media-breakpoint-up(lg) { - display: block; - } - } - - & > .content { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - row-gap: 40px; - - & > .left, - & > .right { - display: flex; - flex-flow: column; - row-gap: 48px; - width: 100%; - } - - @include media-breakpoint-up(xxl) { - display: grid; - grid-template-rows: 1fr; - grid-template-columns: minmax(auto, 1000px) minmax(auto, 1000px); - column-gap: 50px; - align-items: start; - justify-content: center; - - & > .left { - grid-column: 1; - } - - & > .right { - grid-column: 2; - } - - & > .left, - & > .right { - grid-row: 1; - width: 100%; - } - } - } - } -} diff --git a/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetails.tsx b/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetails.tsx deleted file mode 100644 index 21df46049..000000000 --- a/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetails.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import './style.scss'; - -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import classNames from 'classnames'; -import { useMemo } from 'react'; -import Skeleton from 'react-loading-skeleton'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { Label } from '../../../../shared/defguard-ui/components/Layout/Label/Label'; -import { NoData } from '../../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { Tag } from '../../../../shared/defguard-ui/components/Layout/Tag/Tag'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { useUserProfileStore } from '../../../../shared/hooks/store/useUserProfileStore'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../shared/mutations'; -import { QueryKeys } from '../../../../shared/queries'; -import { titleCase } from '../../../../shared/utils/titleCase'; -import { ProfileDetailsForm } from './ProfileDetailsForm/ProfileDetailsForm'; - -export const ProfileDetails = () => { - const { LL } = useI18nContext(); - const [editMode, userProfile] = useUserProfileStore( - (state) => [state.editMode, state.userProfile], - shallow, - ); - return ( -
-
-

{LL.userPage.userDetails.header()}

-
- {userProfile && ( - - {editMode ? : } - - )} - {!userProfile && } -
- ); -}; - -const ViewMode = () => { - const appSettings = useAppStore((state) => state.settings); - const { LL } = useI18nContext(); - const { - openid: { removeUserClient }, - } = useApi(); - - const toaster = useToaster(); - const queryClient = useQueryClient(); - const { mutate: deleteTokenMutation } = useMutation({ - mutationKey: [MutationKeys.REMOVE_USER_CLIENT], - mutationFn: removeUserClient, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_USER_PROFILE], - }); - toaster.success(LL.userPage.userDetails.messages.deleteApp()); - }, - onError: () => { - toaster.error(LL.messages.error()); - }, - }); - const user = useUserProfileStore((store) => store.userProfile?.user); - const isMe = useUserProfileStore((store) => store.isMe); - - const sortedGroups = useMemo(() => { - if (user?.groups) { - return user.groups.sort(); - } - return []; - }, [user?.groups]); - - if (!user) return null; - - return ( - <> -
-
- -

{user.username}

-
-
-
-
- -

{user.first_name}

-
-
-
-
- -

{user.last_name}

-
-
-
-
- -

{user.phone}

-
-
-
-
- -

{user.email}

-
-
- {!isMe && ( -
-
- -

- {user.is_active - ? LL.userPage.userDetails.fields.status.active() - : LL.userPage.userDetails.fields.status.disabled()} -

-
-
- )} -
- -
- {sortedGroups.map((group) => ( - - ))} - {!sortedGroups.length && ( - - )} -
-
- {appSettings?.openid_enabled && ( -
- -
- {user?.authorized_apps?.map((app) => ( - - deleteTokenMutation({ - username: user.username, - client_id: app.oauth2client_id, - }) - } - /> - ))} - {!(user?.authorized_apps?.length && user?.authorized_apps?.length > 0) && ( - - )} -
-
- )} - - ); -}; diff --git a/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/ProfileDetailsForm.tsx b/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/ProfileDetailsForm.tsx deleted file mode 100644 index 16e3ad524..000000000 --- a/web/src/pages/users/UserProfile/ProfileDetails/ProfileDetailsForm/ProfileDetailsForm.tsx +++ /dev/null @@ -1,364 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { pick, values } from 'lodash-es'; -import { useEffect, useMemo, useRef, useState } from 'react'; -import { - Controller, - type SubmitErrorHandler, - type SubmitHandler, - useForm, -} from 'react-hook-form'; -import { useNavigate, useParams } from 'react-router'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Button } from '../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { ButtonStyleVariant } from '../../../../../shared/defguard-ui/components/Layout/Button/types'; -import { ModalWithTitle } from '../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../../../shared/hooks/store/useAuthStore'; -import { useUserProfileStore } from '../../../../../shared/hooks/store/useUserProfileStore'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../../shared/mutations'; -import { - patternSafeUsernameCharacters, - patternValidEmail, - patternValidPhoneNumber, -} from '../../../../../shared/patterns'; -import { QueryKeys } from '../../../../../shared/queries'; -import type { OAuth2AuthorizedApps } from '../../../../../shared/types'; -import { invalidateMultipleQueries } from '../../../../../shared/utils/invalidateMultipleQueries'; -import { omitNull } from '../../../../../shared/utils/omitNull'; -import { removeEmptyStrings } from '../../../../../shared/utils/removeEmptyStrings'; -import { titleCase } from '../../../../../shared/utils/titleCase'; -import { ProfileDetailsFormAppsField } from './ProfileDetailsFormAppsField'; - -interface Inputs { - username: string; - first_name: string; - last_name: string; - phone: string; - email: string; - groups: string[]; - authorized_apps: OAuth2AuthorizedApps[]; - is_active: boolean; -} - -const defaultValues: Inputs = { - username: '', - first_name: '', - last_name: '', - phone: '', - email: '', - groups: [], - authorized_apps: [], - is_active: true, -}; - -export const ProfileDetailsForm = () => { - const { LL } = useI18nContext(); - const appSettings = useAppStore((state) => state.settings); - const userProfile = useUserProfileStore((state) => state.userProfile); - const submitSubject = useUserProfileStore((state) => state.submitSubject); - const setUserProfile = useUserProfileStore((state) => state.setState); - const submitButton = useRef(null); - const queryClient = useQueryClient(); - const isAdmin = useAuthStore((state) => state.user?.is_admin); - const isMe = useUserProfileStore((state) => state.isMe); - const [fetchGroups, setFetchGroups] = useState(false); - const { - user: { editUser }, - groups: { getGroups }, - } = useApi(); - const { username: paramsUsername } = useParams(); - const navigate = useNavigate(); - const [usernameChangeWarning, setUsernameChangeWarning] = useState(false); - - const zodSchema = useMemo( - () => - z.object({ - username: z - .string() - .trim() - .min(1, LL.form.error.minimumLength()) - .regex(patternSafeUsernameCharacters, LL.form.error.forbiddenCharacter()) - .max(64, LL.form.error.maximumLength()), - first_name: z.string().trim().min(1, LL.form.error.required()), - last_name: z.string().trim().min(1, LL.form.error.required()), - phone: z - .string() - .trim() - .optional() - .refine((val) => { - if (val && values.length > 0) { - return patternValidPhoneNumber.test(val); - } - return true; - }, LL.form.error.invalid()), - email: z - .string() - .trim() - .min(1, LL.form.error.required()) - .regex(patternValidEmail, LL.form.error.invalid()), - groups: z.array(z.string().trim().min(1, LL.form.error.required())), - authorized_apps: z.array( - z.object({ - oauth2client_id: z.number().min(1, LL.form.error.required()), - oauth2client_name: z.string().trim().min(1, LL.form.error.required()), - user_id: z.number().min(1, LL.form.error.required()), - }), - ), - is_active: z.boolean(), - }), - [LL.form.error], - ); - - type FormFields = z.infer; - - const formDefaultValues = useMemo((): FormFields => { - const omitted = pick(omitNull(userProfile?.user), Object.keys(defaultValues)); - const res = { ...defaultValues, ...omitted }; - return res; - }, [userProfile]); - - const { control, handleSubmit, setValue, getValues } = useForm({ - resolver: zodResolver(zodSchema), - mode: 'all', - defaultValues: formDefaultValues, - }); - - const { data: availableGroups, isLoading: groupsLoading } = useQuery({ - queryKey: [QueryKeys.FETCH_GROUPS], - queryFn: getGroups, - refetchOnWindowFocus: false, - enabled: fetchGroups && isAdmin, - }); - const toaster = useToaster(); - const { mutate, isPending: userEditLoading } = useMutation({ - mutationKey: [MutationKeys.EDIT_USER], - mutationFn: editUser, - onSuccess: (_data, variables) => { - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_USER_PROFILE], - [QueryKeys.FETCH_USERS_LIST], - ]); - toaster.success(LL.userPage.messages.editSuccess()); - setUserProfile({ editMode: false, loading: false }); - // if username was changed redirect to new profile page - const newUsername = variables.data.username; - if (paramsUsername !== newUsername) { - navigate(`/admin/users/${variables.data.username}`, { replace: true }); - } - }, - onError: (err) => { - toaster.error(LL.messages.error()); - setUserProfile({ loading: false }); - console.error(err); - }, - }); - - const groupsOptions = useMemo(() => { - if (availableGroups && !groupsLoading) { - return availableGroups.groups?.map((g) => ({ - key: g, - value: g, - label: titleCase(g), - })); - } - return []; - }, [availableGroups, groupsLoading]); - - const statusOptions = useMemo(() => { - return [ - { - key: 'active', - value: true, - label: LL.userPage.userDetails.fields.status.active(), - }, - { - key: 'inactive', - value: false, - label: LL.userPage.userDetails.fields.status.disabled(), - }, - ]; - }, [LL.userPage.userDetails.fields.status]); - - const onValidSubmit: SubmitHandler = (values) => { - if (userProfile?.user) { - setUserProfile({ loading: true }); - mutate({ - username: userProfile.user.username, - data: removeEmptyStrings({ - ...userProfile.user, - ...values, - totp_enabled: userProfile.user.totp_enabled, - }), - }); - } - }; - - // When submitted errors will be visible. - const onInvalidSubmit: SubmitErrorHandler = (values) => { - const invalidFields = Object.keys(values) as (keyof Partial)[]; - const invalidFieldsValues = getValues(invalidFields); - invalidFields.forEach((key, index) => { - setValue(key, invalidFieldsValues[index], { - shouldTouch: true, - shouldValidate: true, - }); - }); - }; - - useEffect(() => { - if (submitButton?.current) { - const sub = submitSubject.subscribe(() => { - if (getValues().username !== userProfile?.user.username) { - setUsernameChangeWarning(true); - return; - } - submitButton.current?.click(); - }); - return () => sub.unsubscribe(); - } - }, [submitSubject, getValues, userProfile?.user.username]); - - useEffect(() => { - setTimeout(() => setFetchGroups(true), 500); - }, []); - - return ( -
- { - setUsernameChangeWarning(false); - }} - title="Warning" - > -

{LL.userPage.userDetails.warningModals.content.usernameChange()}

-
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
- {isAdmin && !isMe && ( -
-
- ({ - key: val ? 'active' : 'inactive', - displayValue: val - ? LL.userPage.userDetails.fields.status.active() - : LL.userPage.userDetails.fields.status.disabled(), - })} - /> -
-
- )} -
-
- ({ - key: val, - displayValue: titleCase(val), - })} - /> -
-
- {appSettings?.openid_enabled && ( -
- ( - - )} - /> -
- )} -
- - -
-
- {keys.map((key) => ( -
-
- -

{`${key.key_type.valueOf().toUpperCase()} Key`}

-
-
- - -
-
- ))} -
-
- - ); -}; diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyList.tsx b/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyList.tsx deleted file mode 100644 index 71b9e6861..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/AuthenticationKeyList.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { groupBy, isUndefined, sortBy } from 'lodash-es'; -import { Fragment, useMemo } from 'react'; - -import { useUserProfileStore } from '../../../../../shared/hooks/store/useUserProfileStore'; -import useApi from '../../../../../shared/hooks/useApi'; -import { QueryKeys } from '../../../../../shared/queries'; -import type { AuthenticationKey } from '../../../../../shared/types'; -import { AuthenticationKeyItem } from './AuthenticationKeyItem/AuthenticationKeyItem'; -import { AuthenticationKeyItemYubikey } from './AuthenticationKeyItemYubiKey/AuthenticationKeyItemYubiKey'; - -type itemData = { - yubikey?: { - yubikey_id: number; - yubikey_name: string; - yubikey_serial: string; - keys: AuthenticationKey[]; - }; - key?: AuthenticationKey; -}; - -export const AuthenticationKeyList = () => { - const user = useUserProfileStore((s) => s.userProfile?.user); - const { - user: { getAuthenticationKeysInfo: fetchAuthenticationKeys }, - } = useApi(); - - const { data: authenticationKeysInfo } = useQuery({ - queryFn: () => fetchAuthenticationKeys({ username: user?.username as string }), - queryKey: [QueryKeys.FETCH_AUTHENTICATION_KEYS_INFO, user?.username], - refetchOnMount: true, - refetchOnWindowFocus: false, - enabled: !isUndefined(user), - }); - - // parse api response then store it and return in form which can be displayed by components - const items = useMemo((): itemData[] => { - if (authenticationKeysInfo) { - const standAlone: itemData[] = authenticationKeysInfo - .filter((k) => isUndefined(k.yubikey_id)) - .map((k) => ({ - key: { - id: k.id, - name: k.name as string, - key_type: k.key_type, - key: k.key, - }, - })); - const yubikeys: itemData[] = []; - const g = groupBy( - authenticationKeysInfo.filter((k) => !isUndefined(k.yubikey_id)), - 'yubikey_id', - ); - Object.keys(g).forEach((string_id) => { - const val = g[string_id]; - const keys: AuthenticationKey[] = val.map((info) => ({ - id: info.id, - key: info.key, - key_type: info.key_type, - name: info.yubikey_name as string, - })); - yubikeys.push({ - yubikey: { - keys, - yubikey_id: val[0].yubikey_id as number, - yubikey_name: val[0].yubikey_name as string, - yubikey_serial: val[0].yubikey_serial as string, - }, - }); - }); - const res = sortBy( - [...yubikeys, ...standAlone], - (k) => - k.key?.name?.toLowerCase?.() ?? k.yubikey?.yubikey_name?.toLowerCase?.() ?? '', - ); - return res; - } - return []; - }, [authenticationKeysInfo]); - - if (items.length === 0 || !items) return null; - - return ( -
- {items.map((item, index) => ( - - {item.yubikey && ( - - )} - {item.key && } - - ))} -
- ); -}; diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/style.scss b/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/style.scss deleted file mode 100644 index dd25ea84e..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/AuthenticationKeyList/style.scss +++ /dev/null @@ -1,130 +0,0 @@ -@use '@scssutils' as *; - -.authentication-key-list { - display: flex; - flex-flow: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: 15px; - width: 100%; - max-width: 100%; - - .authentication-key-item { - --controls-size: 40px; - background-color: var(--surface-default-modal); - border: 1px solid transparent; - border-radius: 15px; - box-sizing: border-box; - position: relative; - transition-property: border; - transition-timing-function: ease-in-out; - transition-duration: 200ms; - max-width: 100%; - width: 100%; - overflow: hidden; - - &.yubikey { - --controls-size: 90px; - } - - & > header { - .top { - padding-right: var(--controls-size); - box-sizing: border-box; - } - } - - .controls { - position: absolute; - top: 10px; - right: 15px; - display: flex; - flex-flow: row; - row-gap: 5px; - - & > * { - cursor: pointer; - width: 40px; - height: 40px; - } - - .expand-button { - border: 0px solid transparent; - background-color: transparent; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - user-select: none; - padding: 0; - margin: 0; - } - } - - .expandable-section { - width: 100%; - display: grid; - grid-template-rows: 0fr; - - & > div { - overflow: hidden; - } - - .item-content { - border-top: 1px solid var(--border-primary); - } - } - - .item-content { - box-sizing: border-box; - padding: 20px 25px; - - .avatar-icon { - width: 40px; - height: 40px; - min-width: 40px; - max-width: 40px; - } - - .top { - padding-bottom: 18px; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: 8px; - - p { - @include typography(app-side-bar); - } - } - - .top, - .bottom { - overflow: hidden; - width: 100%; - max-width: 100%; - } - - .bottom { - & > label { - padding-bottom: 8px; - } - - p { - @include typography(app-button-xl); - } - } - } - - &.active { - border-color: var(--border-primary); - } - - &.expanded { - .expandable-section { - grid-template-rows: auto; - } - } - } -} diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/DeleteAuthenticationKeyModal.tsx b/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/DeleteAuthenticationKeyModal.tsx deleted file mode 100644 index de620e0c7..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/DeleteAuthenticationKeyModal.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import useApi from '../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../../shared/queries'; -import { useDeleteAuthenticationKeyModal } from './useDeleteAuthenticationKeyModal'; - -export const DeleteAuthenticationKeyModal = () => { - const { - user: { deleteAuthenticationKey, deleteYubiKey }, - } = useApi(); - const queryClient = useQueryClient(); - const { LL } = useI18nContext(); - const toaster = useToaster(); - const isOpen = useDeleteAuthenticationKeyModal((s) => s.visible); - const [close, reset] = useDeleteAuthenticationKeyModal( - (s) => [s.close, s.reset], - shallow, - ); - const keyData = useDeleteAuthenticationKeyModal((s) => s.keyData); - - const onSuccess = () => { - toaster.success(LL.messages.success()); - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_AUTHENTICATION_KEYS_INFO], - }); - close(); - }; - - const onError = (e: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(e); - }; - - const { mutate: deleteYubikeyMutation, isPending: yubikeyPending } = useMutation({ - mutationFn: deleteYubiKey, - onSuccess, - onError, - }); - - const { mutate: deleteAuthenticationKeyMutation, isPending: authKeyPending } = - useMutation({ - mutationFn: deleteAuthenticationKey, - onSuccess, - onError, - }); - - return ( - { - if (keyData) { - if (keyData.type === 'yubikey') { - deleteYubikeyMutation({ - id: keyData.id, - username: keyData.username, - }); - } else { - deleteAuthenticationKeyMutation({ - id: keyData.id, - username: keyData.username, - }); - } - } - }} - loading={authKeyPending || yubikeyPending} - /> - ); -}; diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/useDeleteAuthenticationKeyModal.ts b/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/useDeleteAuthenticationKeyModal.ts deleted file mode 100644 index dc981f5d6..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/DeleteAuthenticationKeyModal/useDeleteAuthenticationKeyModal.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -const defaultValues: StoreValues = { - visible: false, - keyData: undefined, -}; - -export const useDeleteAuthenticationKeyModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (values) => set({ keyData: values, visible: true }), - close: () => set({ visible: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type StoreValues = { - visible: boolean; - keyData?: { - id: number; - type: 'ssh' | 'gpg' | 'yubikey'; - name: string; - username: string; - }; -}; - -type StoreMethods = { - open: (init: StoreValues['keyData']) => void; - close: () => void; - reset: () => void; -}; - -type Store = StoreValues & StoreMethods; diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/UserAuthenticationKeys.tsx b/web/src/pages/users/UserProfile/UserAuthenticationKeys/UserAuthenticationKeys.tsx deleted file mode 100644 index 4afa782e5..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/UserAuthenticationKeys.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import './style.scss'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { isPresent } from '../../../../shared/defguard-ui/utils/isPresent'; -import { useUserProfileStore } from '../../../../shared/hooks/store/useUserProfileStore'; -import { AddComponentBox } from '../../shared/components/AddComponentBox/AddComponentBox'; -import { useAddAuthorizationKeyModal } from '../../shared/modals/AddAuthenticationKeyModal/useAddAuthorizationKeyModal'; -import { RenameAuthenticationKeyModal } from '../../shared/modals/RenameAuthenticationKeyModal/RenameAuthenticationKeyModal'; -import { AuthenticationKeyList } from './AuthenticationKeyList/AuthenticationKeyList'; -import { DeleteAuthenticationKeyModal } from './DeleteAuthenticationKeyModal/DeleteAuthenticationKeyModal'; - -export const UserAuthenticationKeys = () => { - const { LL } = useI18nContext(); - const user = useUserProfileStore((state) => state.userProfile?.user); - const openAddAuthenticationKeyModal = useAddAuthorizationKeyModal((s) => s.open); - - return ( -
-
-

{LL.userPage.authenticationKeys.header()}

-
- - {isPresent(user) && ( - { - if (user) { - openAddAuthenticationKeyModal({ - user, - selectedMode: 'ssh', - }); - } - }} - /> - )} - - -
- ); -}; diff --git a/web/src/pages/users/UserProfile/UserAuthenticationKeys/style.scss b/web/src/pages/users/UserProfile/UserAuthenticationKeys/style.scss deleted file mode 100644 index 8f9e93139..000000000 --- a/web/src/pages/users/UserProfile/UserAuthenticationKeys/style.scss +++ /dev/null @@ -1,11 +0,0 @@ -@use '@scssutils' as *; - -#user-authentication-keys { - .add-component { - height: 80px; - } - - .authentication-key-list { - padding-bottom: 15px; - } -} diff --git a/web/src/pages/users/UserProfile/UserDevices/DeviceCard/DeviceCard.tsx b/web/src/pages/users/UserProfile/UserDevices/DeviceCard/DeviceCard.tsx deleted file mode 100644 index 637755637..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/DeviceCard/DeviceCard.tsx +++ /dev/null @@ -1,343 +0,0 @@ -import './style.scss'; - -import classNames from 'classnames'; -import clsx from 'clsx'; -import dayjs from 'dayjs'; -import { isUndefined, orderBy } from 'lodash-es'; -import type { TargetAndTransition } from 'motion/react'; -import { useMemo, useState } from 'react'; -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { ListCellTags } from '../../../../../shared/components/Layout/ListCellTags/ListCellTags'; -import IconClip from '../../../../../shared/components/svg/IconClip'; -import SvgIconCollapse from '../../../../../shared/components/svg/IconCollapse'; -import SvgIconCopy from '../../../../../shared/components/svg/IconCopy'; -import SvgIconExpand from '../../../../../shared/components/svg/IconExpand'; -import { ColorsRGB } from '../../../../../shared/constants'; -import { Badge } from '../../../../../shared/defguard-ui/components/Layout/Badge/Badge'; -import { Card } from '../../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { DeviceAvatar } from '../../../../../shared/defguard-ui/components/Layout/DeviceAvatar/DeviceAvatar'; -import { EditButton } from '../../../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { Label } from '../../../../../shared/defguard-ui/components/Layout/Label/Label'; -import { LimitedText } from '../../../../../shared/defguard-ui/components/Layout/LimitedText/LimitedText'; -import { ListCellText } from '../../../../../shared/defguard-ui/components/Layout/ListCellText/ListCellText'; -import { NoData } from '../../../../../shared/defguard-ui/components/Layout/NoData/NoData'; -import { useAppStore } from '../../../../../shared/hooks/store/useAppStore'; -import { useUserProfileStore } from '../../../../../shared/hooks/store/useUserProfileStore'; -import { useClipboard } from '../../../../../shared/hooks/useClipboard'; -import type { Device, DeviceNetworkInfo } from '../../../../../shared/types'; -import { sortByDate } from '../../../../../shared/utils/sortByDate'; -import type { ListCellTag } from '../../../../acl/AclIndexPage/components/shared/types'; -import { useDeleteDeviceModal } from '../hooks/useDeleteDeviceModal'; -import { useDeviceConfigModal } from '../hooks/useDeviceConfigModal'; -import { useEditDeviceModal } from '../hooks/useEditDeviceModal'; - -const dateFormat = 'DD.MM.YYYY | HH:mm'; - -const formatDate = (date: string): string => { - return dayjs.utc(date).local().format(dateFormat); -}; - -interface Props { - device: Device; - biometricEnabled: boolean; - modifiable: boolean; -} - -export const DeviceCard = ({ device, modifiable, biometricEnabled }: Props) => { - const [hovered, setHovered] = useState(false); - const [expanded, setExpanded] = useState(false); - const { LL } = useI18nContext(); - const user = useUserProfileStore((state) => state.userProfile); - const setDeleteDeviceModal = useDeleteDeviceModal((state) => state.setState); - const setEditDeviceModal = useEditDeviceModal((state) => state.setState); - const openDeviceConfigModal = useDeviceConfigModal((state) => state.open); - const enterpriseSettings = useAppStore((state) => state.enterprise_settings); - const { writeToClipboard } = useClipboard(); - - const cn = useMemo( - () => - classNames('device-card', { - expanded, - }), - [expanded], - ); - - const getContainerAnimate = useMemo((): TargetAndTransition => { - const res: TargetAndTransition = { - borderColor: ColorsRGB.White, - }; - if (expanded || hovered) { - res.borderColor = ColorsRGB.GrayBorder; - } - return res; - }, [expanded, hovered]); - - // first, order by last_connected_at then if not preset, by network_id - const orderedLocations = useMemo((): DeviceNetworkInfo[] => { - const connected = device.networks.filter( - (network) => !isUndefined(network.last_connected_at), - ); - - const neverConnected = device.networks.filter((network) => - isUndefined(network.last_connected_at), - ); - - const connectedSorted = sortByDate( - connected, - (n) => n.last_connected_at as string, - true, - ); - const neverConnectedSorted = orderBy( - neverConnected, - (network) => network.network_name.toLowerCase(), - ['asc'], - ); - - return [...connectedSorted, ...neverConnectedSorted]; - }, [device.networks]); - - const latestLocation = orderedLocations.length ? orderedLocations[0] : undefined; - - if (!user) return null; - - return ( - setHovered(true)} - onMouseOut={() => setHovered(false)} - > -
-
- - {biometricEnabled && } - -
-
-
- - {latestLocation?.last_connected_ip && ( - { - if (latestLocation.last_connected_ip) { - void writeToClipboard(latestLocation.last_connected_ip); - } - }} - > - - - } - /> - )} - {!latestLocation?.last_connected_ip && ( - - )} -
-
- - {latestLocation?.last_connected_at && ( - { - if (latestLocation.network_name) { - void writeToClipboard(latestLocation.network_name); - } - }} - > - - - } - /> - )} - {!latestLocation?.last_connected_at && ( - - )} -
-
- - {latestLocation?.last_connected_at && ( -

{formatDate(latestLocation.last_connected_at)}

- )} - {!latestLocation?.last_connected_at && ( - - )} -
-
-
-
- {orderedLocations.map((n) => ( - - ))} -
-
- - { - setEditDeviceModal({ - visible: true, - device: device, - }); - }} - /> - {!enterpriseSettings?.only_client_activation && ( - { - openDeviceConfigModal({ - deviceName: device.name, - publicKey: device.wireguard_pubkey, - deviceId: device.id, - userId: user.user.id, - networks: device.networks.map((n) => ({ - networkId: n.network_id, - networkName: n.network_name, - })), - }); - }} - /> - )} - - setDeleteDeviceModal({ - visible: true, - device: device, - }) - } - /> - - setExpanded((state) => !state)} - /> -
-
- ); -}; - -type DeviceLocationProps = { - network_info: DeviceNetworkInfo; -}; - -const DeviceLocation = ({ - network_info: { - network_id, - network_name, - network_gateway_ip, - last_connected_ip, - last_connected_at, - device_wireguard_ips, - }, -}: DeviceLocationProps) => { - const { LL } = useI18nContext(); - const { writeToClipboard } = useClipboard(); - const ipsTags = useMemo( - (): ListCellTag[] => - device_wireguard_ips.map((ip) => ({ - key: ip, - label: ip, - displayAsTag: false, - })), - [device_wireguard_ips], - ); - return ( -
-
- -
- - {!isUndefined(network_gateway_ip) && } -
-
-
-
- - {last_connected_ip && ( - { - void writeToClipboard(last_connected_ip); - }} - > - - - } - /> - )} - {!last_connected_ip && ( - - )} -
-
- - {last_connected_at && ( -

{formatDate(last_connected_at)}

- )} - {!last_connected_at && ( - - )} -
-
- - -
-
-
- ); -}; - -type ExpandButtonProps = { - expanded: boolean; - onClick: () => void; -}; - -const ExpandButton = ({ expanded, onClick }: ExpandButtonProps) => { - return ( - - ); -}; - -const IconBiometry = () => { - return ( - - - - ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/DeviceCard/style.scss b/web/src/pages/users/UserProfile/UserDevices/DeviceCard/style.scss deleted file mode 100644 index b30a20f76..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/DeviceCard/style.scss +++ /dev/null @@ -1,190 +0,0 @@ -@use '@scssutils' as *; - -.card { - &.device-card { - overflow: hidden; - display: block; - position: relative; - display: grid; - grid-template-rows: auto 0; - grid-template-columns: 1fr; - grid-template-areas: - 'main' - 'locations'; - border: 1px solid var(--white); - - h3 { - @include small-header; - user-select: none; - } - - header { - display: grid; - align-items: center; - justify-items: start; - column-gap: 10px; - margin-bottom: 18px; - max-width: 100%; - } - - .limited { - max-width: 120px; - } - - .list-cell-text { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - - h3 { - display: inline-block; - } - } - - .main-info { - & > header { - grid-template-rows: 40px; - grid-template-columns: 40px 1fr 55px; - max-width: 100%; - overflow: hidden; - - &.biometry { - grid-template-columns: 40px 12px 1fr 55px; - } - - .biometry-icon { - width: 12px; - height: 12px; - } - - & > .avatar-icon { - grid-row: 1; - grid-column: 1 / 2; - height: 100%; - width: 100%; - - svg { - width: 30px; - height: 30px; - } - } - - & > h3 { - grid-row: 1; - grid-column: 2 / 3; - } - } - } - - .location { - max-width: 100%; - overflow: hidden; - - & > header { - grid-template-rows: 40px; - grid-template-columns: 22px 1fr; - - & > svg { - grid-row: 1; - grid-column: 1 / 2; - } - - & > .info-wrapper { - grid-row: 1; - grid-column: 2 / 3; - display: grid; - grid-template-rows: 40px; - grid-template-columns: auto 83px; - column-gap: 10px; - align-items: center; - justify-items: start; - } - } - } - - .main-info, - .location { - box-sizing: border-box; - padding: 20px 25px; - } - - & > .main-info { - grid-area: main; - } - - .section-content { - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - align-items: flex-start; - - label { - display: block; - margin-bottom: 8px; - } - - p { - @include typography-legacy(15px, 18px, medium); - - &.no-data { - color: var(--text-main); - font-size: 11px; - text-align: left; - } - } - } - - & > .locations { - grid-area: locations; - display: grid; - grid-template-rows: auto; - grid-template-columns: 1fr; - grid-auto-flow: row; - - & > .location { - display: block; - box-sizing: border-box; - padding: 19px 24px; - border: 1px solid transparent; - border-top-color: var(--gray-lighter); - - &:last-child { - border-bottom-right-radius: 15px; - border-bottom-left-radius: 15px; - } - } - } - - & > .card-controls { - display: flex; - flex-flow: row nowrap; - position: absolute; - top: 10px; - right: 15px; - - .device-card-expand { - border: 0 solid transparent; - background-color: transparent; - cursor: pointer; - - svg { - width: 22px !important; - height: 22px; - } - } - } - - &.expanded { - grid-template-rows: auto auto; - } - } -} - -.copy { - background-color: transparent; - border: 0 solid transparent; - cursor: pointer; - display: flex; - align-items: center; -} diff --git a/web/src/pages/users/UserProfile/UserDevices/UserDevices.tsx b/web/src/pages/users/UserProfile/UserDevices/UserDevices.tsx deleted file mode 100644 index c5bdeb41d..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/UserDevices.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import './style.scss'; - -import { sortBy } from 'lodash-es'; -import { useMemo } from 'react'; -import Skeleton from 'react-loading-skeleton'; -import { useNavigate } from 'react-router'; -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { useAppStore } from '../../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../../shared/hooks/store/useAuthStore'; -import { useUserProfileStore } from '../../../../shared/hooks/store/useUserProfileStore'; -import { useAddDevicePageStore } from '../../../addDevice/hooks/useAddDevicePageStore'; -import { AddComponentBox } from '../../shared/components/AddComponentBox/AddComponentBox'; -import { DeviceCard } from './DeviceCard/DeviceCard'; -import { DeleteUserDeviceModal } from './modals/DeleteUserDeviceModal/DeleteUserDeviceModal'; -import { DeviceConfigModal } from './modals/DeviceConfigModal/DeviceConfigModal'; -import { EditUserDeviceModal } from './modals/EditUserDeviceModal/EditUserDeviceModal'; - -export const UserDevices = () => { - const navigate = useNavigate(); - const appInfo = useAppStore((state) => state.appInfo); - const settings = useAppStore((state) => state.enterprise_settings); - const { LL } = useI18nContext(); - const userProfile = useUserProfileStore((state) => state.userProfile); - const initAddDevice = useAddDevicePageStore((state) => state.init); - const isAdmin = useAuthStore((state) => state.user?.is_admin); - const canManageDevices = !!( - userProfile && - (!settings?.admin_device_management || isAdmin) - ); - const sortedDevices = useMemo(() => { - if (userProfile?.devices) { - return sortBy(userProfile.devices, (device) => device.name.toLowerCase()); - } - return []; - }, [userProfile?.devices]); - - return ( -
-
-

{LL.userPage.devices.header()}

-
- {!userProfile && ( -
- - - -
- )} - {userProfile && ( - <> - {sortedDevices.length > 0 && ( -
- {sortedDevices.map((device) => ( - - ))} -
- )} - {userProfile && ( - { - initAddDevice({ - username: userProfile.user.username, - id: userProfile.user.id, - reservedDevices: userProfile.devices.map((d) => d.name), - email: userProfile.user.email, - originRoutePath: window.location.pathname, - }); - navigate('/add-device', { replace: true }); - }} - /> - )} - - )} - - - -
- ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/hooks/useDeleteDeviceModal.ts b/web/src/pages/users/UserProfile/UserDevices/hooks/useDeleteDeviceModal.ts deleted file mode 100644 index 5b892d0aa..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/hooks/useDeleteDeviceModal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { Device } from '../../../../../shared/types'; - -const defaultValues: StoreValues = { - visible: false, - device: undefined, -}; - -export const useDeleteDeviceModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - setState: (values) => set((old) => ({ ...old, ...values })), - open: (values) => set({ ...defaultValues, ...values }), - close: () => set({ visible: false }), - }), - Object.is, -); - -type StoreValues = { - visible: boolean; - device?: Device; -}; - -type StoreMethods = { - setState: (values: Partial) => void; - open: (values: Partial) => void; - close: () => void; -}; - -type Store = StoreValues & StoreMethods; diff --git a/web/src/pages/users/UserProfile/UserDevices/hooks/useDeviceConfigModal.tsx b/web/src/pages/users/UserProfile/UserDevices/hooks/useDeviceConfigModal.tsx deleted file mode 100644 index 8038753bc..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/hooks/useDeviceConfigModal.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { DeviceConfigsCardNetworkInfo } from '../../../../../shared/components/network/DeviceConfigsCard/types'; - -const defaultValues: StoreValues = { - isOpen: false, - userId: undefined, - publicKey: undefined, - deviceId: undefined, - networks: undefined, - deviceName: undefined, -}; - -export const useDeviceConfigModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - open: (values) => set({ ...values, isOpen: true }), - close: () => set({ isOpen: false }), - reset: () => set(defaultValues), - }), - Object.is, -); - -type Store = StoreValues & StoreMethods; - -type StoreValues = { - isOpen: boolean; - publicKey?: string; - userId?: number; - deviceId?: number; - networks?: DeviceConfigsCardNetworkInfo[]; - deviceName?: string; -}; - -type StoreMethods = { - open: (values: Partial) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/hooks/useEditDeviceModal.ts b/web/src/pages/users/UserProfile/UserDevices/hooks/useEditDeviceModal.ts deleted file mode 100644 index b6558d119..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/hooks/useEditDeviceModal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; - -import type { Device } from '../../../../../shared/types'; - -const defaultValues: StoreValues = { - visible: false, - device: undefined, -}; - -export const useEditDeviceModal = createWithEqualityFn( - (set) => ({ - ...defaultValues, - setState: (values) => set((old) => ({ ...old, ...values })), - open: (values) => set({ ...defaultValues, ...values }), - close: () => set({ visible: false }), - }), - Object.is, -); - -type StoreValues = { - visible: boolean; - device?: Device; -}; - -type StoreMethods = { - setState: (values: Partial) => void; - open: (values: Partial) => void; - close: () => void; -}; - -type Store = StoreValues & StoreMethods; diff --git a/web/src/pages/users/UserProfile/UserDevices/modals/DeleteUserDeviceModal/DeleteUserDeviceModal.tsx b/web/src/pages/users/UserProfile/UserDevices/modals/DeleteUserDeviceModal/DeleteUserDeviceModal.tsx deleted file mode 100644 index 5d6996522..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/modals/DeleteUserDeviceModal/DeleteUserDeviceModal.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { ConfirmModal } from '../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/ConfirmModal'; -import { ConfirmModalType } from '../../../../../../shared/defguard-ui/components/Layout/modals/ConfirmModal/types'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../../../shared/mutations'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { useDeleteDeviceModal } from '../../hooks/useDeleteDeviceModal'; - -export const DeleteUserDeviceModal = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const [device, visible] = useDeleteDeviceModal( - (state) => [state.device, state.visible], - shallow, - ); - const [setModalState, closeModal] = useDeleteDeviceModal( - (state) => [state.setState, state.close], - shallow, - ); - const { - device: { deleteDevice }, - } = useApi(); - const queryClient = useQueryClient(); - - const { mutate, isPending } = useMutation({ - mutationKey: [MutationKeys.DELETE_USER_DEVICE], - mutationFn: deleteDevice, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_USER_PROFILE], - }); - toaster.success(LL.modals.deleteDevice.messages.success()); - closeModal(); - }, - onError: (err: AxiosError) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - return ( - setModalState({ visible: visibility })} - onSubmit={() => { - if (device) { - mutate(device); - } - }} - /> - ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/DeviceConfigModal.tsx b/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/DeviceConfigModal.tsx deleted file mode 100644 index bdd45f6a9..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/DeviceConfigModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import './style.scss'; - -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { DeviceConfigsCard } from '../../../../../../shared/components/network/DeviceConfigsCard/DeviceConfigsCard'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useDeviceConfigModal } from '../../hooks/useDeviceConfigModal'; - -export const DeviceConfigModal = () => { - const isOpen = useDeviceConfigModal((state) => state.isOpen); - const [close, reset] = useDeviceConfigModal( - (state) => [state.close, state.reset], - shallow, - ); - const { LL } = useI18nContext(); - - return ( - close()} - afterClose={() => reset()} - > - - - ); -}; - -const ModalContent = () => { - const [networks, userId, deviceId, publicKey, deviceName] = useDeviceConfigModal( - (state) => [ - state.networks, - state.userId, - state.deviceId, - state.publicKey, - state.deviceName, - ], - shallow, - ); - - if (!networks || !userId || !deviceId || !publicKey || !deviceName) return null; - - return ( - - ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/style.scss b/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/style.scss deleted file mode 100644 index 411392885..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/modals/DeviceConfigModal/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -#device-config-modal { - width: 100%; - max-width: 700px; - & > .content { - padding: 25px 25px 40px; - } -} diff --git a/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/EditUserDeviceModal.tsx b/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/EditUserDeviceModal.tsx deleted file mode 100644 index d5c117cdc..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/EditUserDeviceModal.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { ModalWithTitle } from '../../../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useEditDeviceModal } from '../../hooks/useEditDeviceModal'; -import { EditUserDeviceForm } from './UserDeviceEditForm'; - -export const EditUserDeviceModal = () => { - const { LL } = useI18nContext(); - const visible = useEditDeviceModal((state) => state.visible); - const closeModal = useEditDeviceModal((state) => state.close); - - return ( - closeModal()} - backdrop - > - - - ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/UserDeviceEditForm.tsx b/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/UserDeviceEditForm.tsx deleted file mode 100644 index b251ce612..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/modals/EditUserDeviceModal/UserDeviceEditForm.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../../../i18n/i18n-react'; -import { FormInput } from '../../../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../../../shared/defguard-ui/components/Layout/Button/types'; -import useApi from '../../../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../../../shared/mutations'; -import { - patternNoSpecialChars, - patternValidWireguardKey, -} from '../../../../../../shared/patterns'; -import { QueryKeys } from '../../../../../../shared/queries'; -import { useEditDeviceModal } from '../../hooks/useEditDeviceModal'; - -interface Inputs { - name: string; - wireguard_pubkey: string; -} - -const defaultFormValues: Inputs = { - name: '', - wireguard_pubkey: '', -}; - -export const EditUserDeviceForm = () => { - const device = useEditDeviceModal((state) => state.device); - const closeModal = useEditDeviceModal((state) => state.close); - const { LL } = useI18nContext(); - - const zodSchema = useMemo( - () => - z.object({ - name: z - .string() - .trim() - .min(4, LL.form.error.minimumLength()) - .regex(patternNoSpecialChars, LL.form.error.noSpecialChars()), - wireguard_pubkey: z - .string() - .trim() - .min(44, LL.form.error.invalidKey()) - .max(44, LL.form.error.invalidKey()) - .regex(patternValidWireguardKey, LL.form.error.invalidKey()), - }), - [LL.form.error], - ); - - const { control, handleSubmit } = useForm({ - resolver: zodResolver(zodSchema), - defaultValues: { - name: device?.name ?? defaultFormValues.name, - wireguard_pubkey: device?.wireguard_pubkey ?? defaultFormValues.wireguard_pubkey, - }, - mode: 'all', - }); - - const { - device: { editDevice }, - } = useApi(); - - const toaster = useToaster(); - const queryClient = useQueryClient(); - - const { isPending: editDeviceLoading, mutate } = useMutation({ - mutationKey: [MutationKeys.EDIT_USER_DEVICE], - mutationFn: editDevice, - onSuccess: () => { - toaster.success(LL.modals.editDevice.messages.success()); - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_USER_PROFILE], - }); - closeModal(); - }, - onError: (err) => { - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const onSubmitSuccess: SubmitHandler = (values) => { - if (device) { - mutate({ ...device, ...values }); - } - }; - - return ( -
- - -
-
- - ); -}; diff --git a/web/src/pages/users/UserProfile/UserDevices/style.scss b/web/src/pages/users/UserProfile/UserDevices/style.scss deleted file mode 100644 index be557a3f9..000000000 --- a/web/src/pages/users/UserProfile/UserDevices/style.scss +++ /dev/null @@ -1,51 +0,0 @@ -#user-devices { - height: auto; - width: 100%; - min-width: 100%; - - & > .skeletons { - width: 100%; - display: flex; - flex-flow: column; - row-gap: 20px; - .react-loading-skeleton { - height: 70px; - } - } - - & > header { - margin-bottom: 2rem; - - & > h2 { - @include card-header; - } - } - - & > .devices { - margin-bottom: 1rem; - display: flex; - flex-flow: column nowrap; - row-gap: 1rem; - - @include media-breakpoint-up(md) { - row-gap: 1.5rem; - margin-bottom: 1.5rem; - } - - & > .device-card { - width: 100%; - } - } - - & > .add-component { - height: 80px; - - &:not(:last-of-type) { - margin-bottom: 1rem; - - @include media-breakpoint-up(lg) { - margin-bottom: 1.5rem; - } - } - } -} diff --git a/web/src/pages/users/UserProfile/UserProfile.tsx b/web/src/pages/users/UserProfile/UserProfile.tsx deleted file mode 100644 index ea0ef1c16..000000000 --- a/web/src/pages/users/UserProfile/UserProfile.tsx +++ /dev/null @@ -1,211 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import classNames from 'classnames'; -import { isUndefined } from 'lodash-es'; -import { useEffect, useMemo } from 'react'; -import { useParams } from 'react-router'; -import { useBreakpoint } from 'use-breakpoint'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import IconCheckmarkWhite from '../../../shared/components/svg/IconCheckmarkWhite'; -import IconEdit from '../../../shared/components/svg/IconEdit'; -import { deviceBreakpoints } from '../../../shared/constants'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { EditButton } from '../../../shared/defguard-ui/components/Layout/EditButton/EditButton'; -import { EditButtonOption } from '../../../shared/defguard-ui/components/Layout/EditButton/EditButtonOption'; -import { EditButtonOptionStyleVariant } from '../../../shared/defguard-ui/components/Layout/EditButton/types'; -import { useAppStore } from '../../../shared/hooks/store/useAppStore'; -import { useAuthStore } from '../../../shared/hooks/store/useAuthStore'; -import { useModalStore } from '../../../shared/hooks/store/useModalStore'; -import { useUserProfileStore } from '../../../shared/hooks/store/useUserProfileStore'; -import useApi from '../../../shared/hooks/useApi'; -import { useToaster } from '../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../shared/queries'; -import { ProfileDetails } from './ProfileDetails/ProfileDetails'; -import { UserApiTokens } from './UserApiTokens/UserApiTokens'; -import { UserAuthenticationKeys } from './UserAuthenticationKeys/UserAuthenticationKeys'; -import { UserAuthInfo } from './UserAuthInfo/UserAuthInfo'; -import { UserDevices } from './UserDevices/UserDevices'; - -export const UserProfile = () => { - const toaster = useToaster(); - const { LL } = useI18nContext(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const { username: paramsUsername } = useParams(); - const currentUser = useAuthStore((state) => state.user); - const editMode = useUserProfileStore((state) => state.editMode); - const setUserProfileState = useUserProfileStore((state) => state.setState); - const resetUserProfileState = useUserProfileStore((state) => state.reset); - const { - user: { getUser }, - } = useApi(); - - const enterpriseEnabled = useAppStore((s) => s.appInfo?.license_info.enterprise); - const showApiTokens = enterpriseEnabled && currentUser?.is_admin; - - const username = useMemo(() => { - if (paramsUsername) { - return paramsUsername; - } else { - if (currentUser?.username) { - return currentUser.username; - } - } - throw Error('No username found.'); - }, [currentUser?.username, paramsUsername]); - - const { data: userProfileData, error: fetchProfileError } = useQuery({ - queryKey: [QueryKeys.FETCH_USER_PROFILE, username], - queryFn: () => getUser(username), - refetchOnWindowFocus: true, - refetchOnMount: true, - placeholderData: (pervious) => pervious, - enabled: !isUndefined(username), - }); - - useEffect(() => { - if (userProfileData) { - setUserProfileState({ userProfile: userProfileData }); - } - }, [setUserProfileState, userProfileData]); - - useEffect(() => { - if (fetchProfileError) { - toaster.error(LL.userPage.messages.failedToFetchUserData()); - console.error(fetchProfileError); - } - }, [LL.userPage.messages, fetchProfileError, toaster]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (currentUser?.username === username) { - setUserProfileState({ isMe: true }); - } else { - setUserProfileState({ isMe: false }); - } - return () => { - resetUserProfileState(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( -
-
- {breakpoint === 'desktop' && ( -

{editMode ? LL.userPage.title.edit() : LL.userPage.title.view()}

- )} -
- {editMode ? : } -
-
-
-
- - -
-
- -
-
- -
- {showApiTokens && ( -
- -
- )} -
-
- ); -}; - -const ViewModeControls = () => { - const setUserProfileState = useUserProfileStore((state) => state.setState); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const { LL } = useI18nContext(); - return ( -
-
- ); -}; - -const EditModeControls = () => { - const { LL } = useI18nContext(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const userProfile = useUserProfileStore((state) => state.userProfile); - const isAdmin = useAuthStore((state) => state.user?.is_admin); - const isMe = useUserProfileStore((state) => state.isMe); - const setUserProfileState = useUserProfileStore((state) => state.setState); - const setDeleteUserModalState = useModalStore((state) => state.setDeleteUserModal); - const loading = useUserProfileStore((state) => state.loading); - - const submitSubject = useUserProfileStore((state) => state.submitSubject); - - const handleDeleteUser = () => { - if (userProfile) { - setDeleteUserModalState({ visible: true, user: userProfile.user }); - } - }; - - return ( - <> - {isAdmin && !isMe && breakpoint === 'desktop' ? ( -
-
- ) : null} -
- {breakpoint !== 'desktop' && isAdmin && ( - - - - )} -
- - ); -}; diff --git a/web/src/pages/users/UserProfile/style.scss b/web/src/pages/users/UserProfile/style.scss deleted file mode 100644 index ea7567d85..000000000 --- a/web/src/pages/users/UserProfile/style.scss +++ /dev/null @@ -1,214 +0,0 @@ -#user-profile-v2 { - box-sizing: border-box; - min-height: 100%; - max-height: 100%; - overflow-x: hidden; - overflow-y: auto; - position: relative; - padding: 3rem 1.5rem; - - @include media-breakpoint-up(lg) { - padding: 39px 60px; - } - - h1, - h2, - h3 { - user-select: none; - } - - & > header { - display: block; - width: 100%; - margin-bottom: 2rem; - - @include media-breakpoint-up(lg) { - display: inline-grid; - grid-template-rows: 1fr; - grid-template-columns: auto 1fr; - grid-column-gap: 14px; - margin-bottom: 40px; - } - - &:not(.edit) { - @include media-breakpoint-down(lg) { - position: absolute; - margin: 0; - width: calc(100% - 3rem); - } - } - - & > h1 { - @include page-header; - - grid-row: 1; - grid-column: 1; - user-select: none; - } - - & > .controls { - @include media-breakpoint-down(lg) { - display: block; - width: 100%; - box-sizing: border-box; - padding: 0 0.5rem; - - & > .right { - display: flex; - flex-flow: row; - width: 100%; - - & > .btn { - margin-left: auto; - } - } - - &.edit { - & > .right { - display: inline-grid; - grid-template-columns: 1fr 1fr 40px; - grid-template-rows: 1fr; - column-gap: 1rem; - - :nth-child(1) { - grid-column: 3; - grid-row: 1; - } - - :nth-child(2) { - grid-column: 2; - grid-row: 1; - } - - :nth-child(3) { - grid-column: 1; - grid-row: 1; - } - - & > .btn { - width: 100%; - } - } - } - } - @include media-breakpoint-up(lg) { - grid-row: 1; - grid-column: 2; - width: 100%; - display: flex; - flex-flow: row nowrap; - align-items: center; - align-content: flex-start; - justify-content: flex-start; - - & > .left, - & > .right { - display: flex; - flex-flow: row nowrap; - column-gap: 1rem; - } - - & > .right { - margin-left: auto; - } - } - - .btn { - height: 40px; - } - } - } - - & > .content { - display: grid; - row-gap: 3rem; - grid-template-columns: 1fr; - grid-template-rows: repeat(3, auto); - grid-template-areas: - 'wide-cards' - 'cards-2' - 'cards-1'; - - @include media-breakpoint-up(xl) { - gap: 35px; - grid-template-columns: 1fr 440px; - grid-template-rows: auto; - grid-template-areas: - 'wide-cards cards-2' - 'wide-cards cards-1'; - } - - @include media-breakpoint-up(xxl) { - grid-template-columns: 1fr 440px 384px; - grid-template-areas: 'wide-cards cards-1 cards-2'; - } - - & > div > section > header { - box-sizing: border-box; - padding: 0 0.5rem; - margin-bottom: 1.5rem; - - @include media-breakpoint-up(lg) { - margin-bottom: 2rem; - } - - & > h2 { - @include card-header; - - user-select: none; - } - } - - & > .wide-cards, - & > .cards-1, - & > .cards-2, - & > .cards-3 { - display: flex; - flex-flow: column; - justify-content: flex-start; - row-gap: 3rem; - @include media-breakpoint-up(lg) { - row-gap: 3.5rem; - } - } - - & > .wide-cards { - grid-area: wide-cards; - } - - & > .cards-1 { - grid-area: cards-1; - } - - & > .cards-2 { - grid-area: cards-2; - } - } - - & > .content-enterprise-enabled { - & > .cards-3 { - grid-area: cards-3; - } - - grid-template-areas: - 'wide-cards' - 'cards-1' - 'cards-2' - 'cards-3'; - - @include media-breakpoint-up(xl) { - grid-template-areas: - 'wide-cards cards-1' - 'wide-cards cards-2' - 'wide-cards cards-3'; - } - - @include media-breakpoint-up(xxl) { - grid-template-columns: 1fr 440px 384px; - grid-template-rows: auto 1fr; - grid-template-areas: - 'wide-cards cards-1 cards-2' - 'wide-cards cards-1 cards-3'; - } - } -} diff --git a/web/src/pages/users/UsersOverview/UsersOverview.tsx b/web/src/pages/users/UsersOverview/UsersOverview.tsx deleted file mode 100644 index 3d74557ca..000000000 --- a/web/src/pages/users/UsersOverview/UsersOverview.tsx +++ /dev/null @@ -1,251 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { orderBy } from 'lodash-es'; -import { motion } from 'motion/react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { useBreakpoint } from 'use-breakpoint'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../i18n/i18n-react'; -import SvgIconUserAddNew from '../../../shared/components/svg/IconUserAddNew'; -import { deviceBreakpoints } from '../../../shared/constants'; -import { Button } from '../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../shared/defguard-ui/components/Layout/Button/types'; -import { LoaderSpinner } from '../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { Search } from '../../../shared/defguard-ui/components/Layout/Search/Search'; -import { Select } from '../../../shared/defguard-ui/components/Layout/Select/Select'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../shared/defguard-ui/components/Layout/Select/types'; -import useApi from '../../../shared/hooks/useApi'; -import { QueryKeys } from '../../../shared/queries'; -import type { User } from '../../../shared/types'; -import { DisableMfaModal } from '../shared/modals/DisableMfaModal/DisableMfaModal'; -import { UsersList } from './components/UsersList/UsersList'; -import { AddUserModal } from './modals/AddUserModal/AddUserModal'; -import { useAddUserModal } from './modals/AddUserModal/hooks/useAddUserModal'; -import { AssignGroupsModal } from './modals/AssignGroupsModal/AssignGroupsModal'; -import { useAssignGroupsModal } from './modals/AssignGroupsModal/store'; - -enum FilterOptions { - ALL = 'all', - ADMIN = 'admin', - USERS = 'users', -} - -export const UsersOverview = () => { - const { LL, locale } = useI18nContext(); - const { breakpoint } = useBreakpoint(deviceBreakpoints); - const [selectedUsers, setSelectedUsers] = useState([]); - const openGroupsAssign = useAssignGroupsModal((s) => s.open); - const successSubject = useAssignGroupsModal((s) => s.successSubject, shallow); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - const filterSelectOptions = useMemo(() => { - const res: SelectOption[] = [ - { - label: LL.usersOverview.filterLabels.all(), - value: FilterOptions.ALL, - key: 1, - }, - { - label: LL.usersOverview.filterLabels.admin(), - value: FilterOptions.ADMIN, - key: 2, - }, - { - label: LL.usersOverview.filterLabels.users(), - value: FilterOptions.USERS, - key: 3, - }, - ]; - return res; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [locale]); - - const renderSelectedFilter = useCallback( - (selected: FilterOptions): SelectSelectedValue => { - const option = filterSelectOptions.find((o) => o.value === selected); - if (!option) throw Error("Selected value doesn't exist"); - return { - key: option.key, - displayValue: option.label, - }; - }, - [filterSelectOptions], - ); - - const [selectedFilter, setSelectedFilter] = useState(FilterOptions.ALL); - - const { - user: { getUsers }, - } = useApi(); - - const { data: users, isLoading } = useQuery({ - queryKey: [QueryKeys.FETCH_USERS_LIST], - queryFn: getUsers, - }); - - const [usersSearchValue, setUsersSearchValue] = useState(''); - - const openAddUserModal = useAddUserModal((state) => state.open); - - const filteredUsers = useMemo(() => { - if (!users || (users && !users.length)) { - return []; - } - let searched: User[] = []; - if (users) { - searched = users.filter( - (user) => - user.username - .toLocaleLowerCase() - .includes(usersSearchValue.toLocaleLowerCase()) || - user.first_name - ?.toLocaleLowerCase() - .includes(usersSearchValue.toLocaleLowerCase()) || - user.last_name - ?.toLocaleLowerCase() - .includes(usersSearchValue.toLocaleLowerCase()), - ); - } - if (searched.length) { - searched = orderBy(searched, ['username'], ['asc']); - } - switch (selectedFilter) { - case FilterOptions.ALL: - break; - case FilterOptions.ADMIN: - searched = searched.filter((user) => user.is_admin); - break; - case FilterOptions.USERS: - searched = searched.filter((user) => !user.is_admin); - break; - } - return searched; - }, [selectedFilter, users, usersSearchValue]); - - const handleUserSelect = useCallback( - (id: number) => { - if (selectedUsers.includes(id)) { - setSelectedUsers((selected) => selected.filter((i) => i !== id)); - } else { - setSelectedUsers((s) => [...s, id]); - } - }, - [selectedUsers], - ); - - const handleSelectAll = useCallback(() => { - if (users) { - if (users.length !== selectedUsers.length) { - setSelectedUsers(users.map((u) => u.id)); - } else { - setSelectedUsers([]); - } - } - }, [users, selectedUsers]); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (breakpoint !== 'desktop' && selectedFilter !== FilterOptions.ALL) { - setSelectedFilter(FilterOptions.ALL); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [breakpoint]); - - useEffect(() => { - const sub = successSubject.subscribe(() => { - setSelectedUsers([]); - }); - return () => { - sub?.unsubscribe(); - }; - }, [successSubject]); - - return ( -
- {breakpoint === 'desktop' && ( -
-

{LL.usersOverview.pageTitle()}

- setUsersSearchValue(value)} - /> -
- )} - -
- {LL.usersOverview.usersCount()} -
- {users?.length ? users.length : 0} -
-
-
- {selectedUsers.length > 0 && ( -
-
- {isLoading || - (isUndefined(webhooks) && ( -
- -
- ))} - {!isLoading && filteredWebhooks && filteredWebhooks.length === 0 && ( - - )} - {!isLoading && filteredWebhooks && filteredWebhooks.length > 0 && ( - - )} - - { - if (!isUndefined(webhookToDelete)) { - deleteWebhookMutation(webhookToDelete.id); - } - }} - submitText={'Delete'} - loading={deleteWebhookIsLoading} - /> -
- ); -}; - -enum FilterOption { - ALL = 'all', - ENABLED = 'enabled', - DISABLED = 'disabled', -} diff --git a/web/src/pages/webhooks/modals/WebhookModal/WebhookForm.tsx b/web/src/pages/webhooks/modals/WebhookModal/WebhookForm.tsx deleted file mode 100644 index 49ffbebe2..000000000 --- a/web/src/pages/webhooks/modals/WebhookModal/WebhookForm.tsx +++ /dev/null @@ -1,217 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { useMemo } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormCheckBox } from '../../../../shared/defguard-ui/components/Form/FormCheckBox/FormCheckBox'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { useModalStore } from '../../../../shared/hooks/store/useModalStore'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../shared/mutations'; -import { QueryKeys } from '../../../../shared/queries'; - -export const WebhookForm = () => { - const { LL } = useI18nContext(); - const toaster = useToaster(); - const { - webhook: { addWebhook, editWebhook }, - } = useApi(); - const modalState = useModalStore((state) => state.webhookModal); - const setModalState = useModalStore((state) => state.setWebhookModal); - const editMode = useMemo(() => !isUndefined(modalState.webhook), [modalState.webhook]); - - const queryClient = useQueryClient(); - - const zodSchema = useMemo( - () => - z - .object({ - url: z.string().min(1, LL.modals.webhookModal.form.error.urlRequired()), - description: z - .string() - .min(1, LL.form.error.required()) - .min(4, LL.form.error.minimumLength()) - .max(65, LL.form.error.maximumLength()), - token: z - .string() - .min(1, LL.form.error.required()) - .min(3, LL.form.error.minimumLength()) - .max(250, LL.form.error.maximumLength()), - enabled: z.boolean(), - on_user_created: z.boolean(), - on_user_deleted: z.boolean(), - on_user_modified: z.boolean(), - on_hwkey_provision: z.boolean(), - }) - .superRefine((val, ctx) => { - if (val.enabled) { - if ( - !val.on_hwkey_provision && - !val.on_user_created && - !val.on_user_deleted && - !val.on_user_modified - ) { - ctx.addIssue({ - code: 'custom', - message: 'At least one event needs to be present', - }); - } - } - }), - [LL.form.error, LL.modals.webhookModal.form.error], - ); - - type FormFields = z.infer; - - const defaultFormState = useMemo((): FormFields => { - if (!isUndefined(modalState.webhook)) { - return modalState.webhook; - } - const defaultValues: FormFields = { - url: '', - description: '', - token: '', - enabled: true, - on_hwkey_provision: false, - on_user_created: false, - on_user_deleted: false, - on_user_modified: false, - }; - return defaultValues; - }, [modalState.webhook]); - - const { control, handleSubmit } = useForm({ - defaultValues: defaultFormState, - mode: 'all', - resolver: zodResolver(zodSchema), - }); - - const { mutate: addWebhookMutation, isPending: addWebhookIsLoading } = useMutation({ - mutationKey: [MutationKeys.EDIT_WEBHOOK], - mutationFn: addWebhook, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_WEBHOOKS], - }); - toaster.success(LL.modals.webhookModal.form.messages.successAdd()); - setModalState({ visible: false, webhook: undefined }); - }, - onError: (err) => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_WEBHOOKS], - }); - toaster.error(LL.messages.error()); - setModalState({ visible: false, webhook: undefined }); - console.error(err); - }, - }); - - const { mutate: editWebhookMutation, isPending: editMutationIsLoading } = useMutation({ - mutationKey: [MutationKeys.EDIT_WEBHOOK], - mutationFn: editWebhook, - onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_WEBHOOKS], - }); - toaster.success(LL.modals.webhookModal.form.messages.successModify()); - setModalState({ visible: false, webhook: undefined }); - }, - onError: (err) => { - void queryClient.invalidateQueries({ - queryKey: [QueryKeys.FETCH_WEBHOOKS], - }); - toaster.error(LL.messages.error()); - setModalState({ visible: false, webhook: undefined }); - console.error(err); - }, - }); - - const onValidSubmit: SubmitHandler = (values) => { - if (editMode) { - if (modalState.webhook) { - editWebhookMutation({ ...modalState.webhook, ...values }); - } - } else { - addWebhookMutation({ ...values, enabled: true }); - } - }; - - return ( -
- - - - -

{LL.modals.webhookModal.form.triggers()}

-
- - - - -
-
-
- - ); -}; diff --git a/web/src/pages/webhooks/modals/WebhookModal/WebhookModal.tsx b/web/src/pages/webhooks/modals/WebhookModal/WebhookModal.tsx deleted file mode 100644 index 9b7784828..000000000 --- a/web/src/pages/webhooks/modals/WebhookModal/WebhookModal.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import './style.scss'; - -import { isUndefined } from 'lodash-es'; -import { useMemo } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ModalWithTitle } from '../../../../shared/defguard-ui/components/Layout/modals/ModalWithTitle/ModalWithTitle'; -import { useModalStore } from '../../../../shared/hooks/store/useModalStore'; -import { WebhookForm } from './WebhookForm'; - -export const WebhookModal = () => { - const { LL } = useI18nContext(); - const modalState = useModalStore((state) => state.webhookModal); - - const getTitle = useMemo(() => { - if (!isUndefined(modalState.webhook)) { - return LL.modals.webhookModal.title.editWebhook(); - } - return LL.modals.webhookModal.title.addWebhook(); - }, [modalState.webhook, LL.modals.webhookModal.title]); - - const setModalState = useModalStore((state) => state.setWebhookModal); - - return ( - setModalState({ visible: v })} - id="webhook-modal" - backdrop - > - - - ); -}; diff --git a/web/src/pages/webhooks/modals/WebhookModal/style.scss b/web/src/pages/webhooks/modals/WebhookModal/style.scss deleted file mode 100644 index aac5e9ff4..000000000 --- a/web/src/pages/webhooks/modals/WebhookModal/style.scss +++ /dev/null @@ -1,32 +0,0 @@ -#webhook-modal { - & > .content { - & > form { - .form-checkbox { - padding-bottom: var(--spacing-s); - } - - & > h3 { - @include small-header; - - margin-bottom: 2rem; - } - - & > .events { - width: 100%; - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: repeat(2, 18px); - column-gap: 1rem; - row-gap: 1rem; - } - - & > .controls { - margin-top: 2.5rem; - - @include media-breakpoint-up(lg) { - margin-top: 6.5rem; - } - } - } - } -} diff --git a/web/src/pages/webhooks/style.scss b/web/src/pages/webhooks/style.scss deleted file mode 100644 index 0511e061b..000000000 --- a/web/src/pages/webhooks/style.scss +++ /dev/null @@ -1,311 +0,0 @@ -@mixin list-layout { - display: inline-grid; - grid-template-columns: 1fr 40px; - - @include media-breakpoint-up(lg) { - grid-template-columns: minmax(150px, 25%) 1fr 1fr 60px; - } - - @for $i from 1 through 4 { - & > :nth-child(#{$i}) { - grid-column: $i; - } - } - - & > * { - grid-row: 1; - } -} - -#webhooks-list-page { - & > .page-content { - position: relative; - overflow: hidden; - display: grid; - grid-template-columns: 1fr; - grid-template-rows: 40px 40px 1fr; - box-sizing: border-box; - padding-top: 1.5rem; - row-gap: 2rem; - - @include media-breakpoint-up(lg) { - row-gap: 0; - padding: 0; - align-self: stretch; - box-sizing: border-box; - user-select: none; - display: grid; - grid-template-columns: 1fr; - grid-template-rows: 147px 67px 1fr; - max-height: 100%; - overflow: hidden; - } - - header { - grid-column: 1; - grid-row: 1; - box-sizing: border-box; - width: 100%; - padding: 0 2rem; - - @include media-breakpoint-up(lg) { - display: flex; - flex-flow: row; - align-content: center; - align-items: center; - justify-content: flex-start; - width: 100%; - gap: 3rem; - padding: 4rem 6rem 4.6rem; - } - - h1 { - display: none; - - @include media-breakpoint-up(lg) { - display: block; - font-size: 4.1rem; - line-height: 6.1rem; - font-family: Poppins; - color: var(--text-main); - @include text-weight(semiBold); - } - } - - .search { - width: 100%; - height: 40px; - - @include media-breakpoint-up(lg) { - width: 400px; - } - } - } - - .actions { - grid-row: 2; - grid-column: 1; - width: 100%; - height: 100%; - display: flex; - flex-flow: row nowrap; - box-sizing: border-box; - padding: 0 2rem; - align-content: center; - align-items: center; - justify-content: flex-start; - - .select-container { - min-height: 40px; - } - - @include media-breakpoint-up(lg) { - height: auto; - padding: 0 6rem 2.7rem; - } - - .items-count { - display: flex; - flex-direction: row; - align-content: center; - align-items: center; - justify-content: flex-start; - width: auto; - height: auto; - gap: 1rem; - - span { - @include text-weight(semiBold); - @include poppins; - - color: var(--text-main); - - @include media-breakpoint-down(lg) { - font-size: 1.5rem; - line-height: 2.1rem; - text-transform: uppercase; - } - - @include media-breakpoint-up(lg) { - font-size: 2rem; - line-height: 3rem; - } - } - - .count { - display: flex; - flex-direction: row; - align-items: center; - align-content: center; - justify-content: center; - min-width: 30px; - box-sizing: border-box; - padding: 0 5px; - height: 30px; - background-color: var(--gray-light); - border-radius: 1rem; - - span { - @include text-weight(semiBold); - @include poppins; - - color: var(--white); - font-size: 1.2rem; - text-align: center; - line-height: 1.8rem; - } - } - } - - .controls { - display: flex; - flex-direction: row; - align-content: center; - align-items: center; - justify-content: center; - margin-left: auto; - - & > .select { - height: 40px; - } - - & > .add-item { - min-width: 110px; - width: auto; - - svg { - rect, - g { - fill: var(--white); - } - } - } - - @include media-breakpoint-down(lg) { - column-gap: 1rem; - - & > button { - width: 40px; - height: 40px; - - span { - display: none; - } - } - - & > .add-item { - min-width: 0; - padding: 0; - width: 40px; - height: 40px; - } - } - - @include media-breakpoint-up(lg) { - gap: 2rem; - - & > div { - width: 180px; - } - - .btn { - min-width: 110px; - } - } - } - } - - .list-loader, - .virtualized-list-container, - .no-data { - grid-column: 1; - grid-row: 3; - } - - .no-data { - width: 100%; - text-align: center; - margin-top: 20px; - } - - .list-loader { - width: 100%; - height: 100%; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - align-content: center; - } - - .virtualized-list-container { - grid-template-columns: 1fr; - grid-template-rows: 1fr; - - @include media-breakpoint-up(lg) { - grid-template-rows: 28px 1fr; - } - - .headers { - display: none; - - @include media-breakpoint-up(lg) { - @include list-layout; - - :nth-child(4) { - justify-content: center; - } - } - } - - .scroll-container { - padding: 0; - margin-right: 5px; - grid-row: 1; - grid-column: 1; - padding-bottom: 1.5rem; - - @include media-breakpoint-up(lg) { - padding-bottom: 4rem; - grid-row: 2; - } - } - - .default-row { - @include list-layout; - - align-items: center; - grid-template-rows: 1fr; - height: 60px; - padding: 0 1.5rem; - - @include media-breakpoint-up(lg) { - padding: 0 1.5rem 0 5rem; - } - - span { - @include list-text; - } - - & > :nth-child(1) { - user-select: text; - } - - & > :nth-child(3) { - display: flex; - flex-flow: row nowrap; - align-items: center; - align-content: center; - justify-content: flex-start; - column-gap: 1rem; - } - - & > :nth-child(4) { - button { - width: 100%; - } - } - } - } - } -} diff --git a/web/src/pages/wizard/WizardPage.tsx b/web/src/pages/wizard/WizardPage.tsx deleted file mode 100644 index 6d6a96cad..000000000 --- a/web/src/pages/wizard/WizardPage.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import './style.scss'; - -import { type ReactNode, useEffect, useMemo } from 'react'; -import { Navigate, Route, Routes } from 'react-router'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../i18n/i18n-react'; -import { PageContainer } from '../../shared/components/Layout/PageContainer/PageContainer'; -import { useAppStore } from '../../shared/hooks/store/useAppStore'; -import { WizardMapDevices } from './components/WizardMapDevices/WizardMapDevices'; -import { WizardNav } from './components/WizardNav/WizardNav'; -import { WizardNetworkConfiguration } from './components/WizardNetworkConfiguration/WizardNetworkConfiguration'; -import { WizardNetworkImport } from './components/WizardNetworkImport/WizardNetworkImport'; -import { WizardType } from './components/WizardType/WizardType'; -import { WizardWelcome } from './components/WizardWelcome/WizardWelcome'; -import { useWizardStore, WizardSetupType } from './hooks/useWizardStore'; - -export const WizardPage = () => { - return ( - - - } /> - } /> - - - ); -}; - -type WizardStep = { - title: string; - element: ReactNode; - className: string; - backDisabled?: boolean; -}; - -const WizardRender = () => { - const { LL } = useI18nContext(); - const networkPresent = useAppStore((state) => state.appInfo?.network_present); - const setWizardState = useWizardStore((state) => state.setState); - const [setupType, currentStep] = useWizardStore( - (state) => [state.setupType, state.currentStep], - shallow, - ); - const getSteps = useMemo((): WizardStep[] => { - let res: WizardStep[] = [ - { - title: LL.wizard.navigation.titles.welcome(), - element: , - className: 'welcome', - }, - { - title: LL.wizard.navigation.titles.choseNetworkSetup(), - element: , - backDisabled: networkPresent, - className: 'setup-selection', - }, - ]; - switch (setupType) { - case WizardSetupType.IMPORT: - res = [ - ...res, - { - title: LL.wizard.navigation.titles.importConfig(), - element: , - className: 'import-config', - }, - { - title: LL.wizard.navigation.titles.mapDevices(), - element: , - className: 'map-devices', - backDisabled: true, - }, - ]; - break; - case WizardSetupType.MANUAL: - res = [ - ...res, - { - title: LL.wizard.navigation.titles.manualConfig(), - element: , - className: 'network-config', - }, - ]; - break; - } - return res; - }, [LL.wizard.navigation.titles, networkPresent, setupType]); - - // skip welcome step when at least one network is already present - useEffect(() => { - if (networkPresent && currentStep === 0) { - setWizardState({ currentStep: 1 }); - } - }, [currentStep, networkPresent, setWizardState]); - - return ( -
- - {getSteps[currentStep].element || null} -
- ); -}; diff --git a/web/src/pages/wizard/components/WizardMapDevices/WizardMapDevices.tsx b/web/src/pages/wizard/components/WizardMapDevices/WizardMapDevices.tsx deleted file mode 100644 index 035b64acc..000000000 --- a/web/src/pages/wizard/components/WizardMapDevices/WizardMapDevices.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useRef } from 'react'; -import { type SubmitErrorHandler, type SubmitHandler, useForm } from 'react-hook-form'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { LoaderSpinner } from '../../../../shared/defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import type { SelectOption } from '../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { ListHeader } from '../../../../shared/defguard-ui/components/Layout/VirtualizedList/types'; -import { VirtualizedList } from '../../../../shared/defguard-ui/components/Layout/VirtualizedList/VirtualizedList'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { QueryKeys } from '../../../../shared/queries'; -import type { ImportedDevice, MappedDevice } from '../../../../shared/types'; -import { useWizardStore } from '../../hooks/useWizardStore'; -import { MapDeviceRow } from './components/MapDeviceRow'; -import { type WizardMapDevicesFormFields, wizardMapDevicesSchema } from './types'; - -export type WizardMapFormValues = { - devices: ImportedDevice[]; -}; - -export const WizardMapDevices = () => { - const initialized = useRef(false); - const submitElementRef = useRef(null); - const { LL } = useI18nContext(); - const { - network: { mapUserDevices }, - } = useApi(); - const toaster = useToaster(); - const setWizardState = useWizardStore((state) => state.setState); - const setImportedDevices = useWizardStore((state) => state.setImportedDevices); - const [submitSubject, nextStepSubject] = useWizardStore( - (state) => [state.submitSubject, state.nextStepSubject], - shallow, - ); - const importedDevices = useWizardStore((state) => state.importedNetworkDevices); - const importedNetwork = useWizardStore((state) => state.importedNetworkConfig); - const { - user: { getUsers }, - } = useApi(); - - const zodSchema = useMemo(() => wizardMapDevicesSchema(LL), [LL]); - - const { isLoading, data: users } = useQuery({ - queryKey: [QueryKeys.FETCH_USERS_LIST], - queryFn: getUsers, - refetchOnMount: false, - }); - - const { isPending: createLoading, mutate } = useMutation({ - mutationFn: mapUserDevices, - onSuccess: () => { - setWizardState({ loading: false }); - toaster.success(LL.wizard.deviceMap.messages.crateSuccess()); - nextStepSubject.next(); - }, - onError: (err) => { - setWizardState({ loading: false }); - toaster.error(LL.messages.error()); - console.error(err); - }, - }); - - const { handleSubmit, control, reset, getValues } = useForm( - { - defaultValues: { devices: importedDevices ?? [] }, - mode: 'onSubmit', - resolver: zodResolver(zodSchema), - }, - ); - - const getUsersOptions = useMemo( - (): SelectOption[] => - users?.map((user) => ({ - value: user.id, - label: `${user.first_name} ${user.last_name}`, - key: user.id, - meta: ``, - })) ?? [], - [users], - ); - - const getHeaders = useMemo( - (): ListHeader[] => [ - { text: 'Device Name', key: 0, sortable: false }, - { text: 'IPs', key: 1, sortable: false }, - { text: 'User', key: 2, sortable: false }, - ], - [], - ); - - const renderRow = useCallback( - (data: DeviceRowData) => ( - - ), - [control, getUsersOptions], - ); - - const handleValidSubmit: SubmitHandler = (values) => { - if (importedNetwork) { - setWizardState({ loading: true }); - mutate({ - devices: values.devices as MappedDevice[], - networkId: importedNetwork.id, - }); - } - }; - - const handleInvalidSubmit: SubmitErrorHandler = () => { - toaster.error(LL.wizard.deviceMap.messages.errorsInForm()); - }; - const devicesList = useMemo((): DeviceRowData[] => { - if (importedDevices) { - return importedDevices.map((_, index) => ({ - itemIndex: index, - })); - } - - return []; - }, [importedDevices]); - - // allows to submit form from WizardNav - useEffect(() => { - const sub = submitSubject.subscribe(() => { - if (submitElementRef.current) { - submitElementRef.current.click(); - } - }); - return () => sub?.unsubscribe(); - }, [submitSubject]); - - // init form with values from imported config - useEffect(() => { - if (importedDevices && !initialized.current) { - initialized.current = true; - reset({ devices: importedDevices }); - } - }, [importedDevices, reset]); - - // save form state so progress won't be lost - useEffect(() => { - const interval = setInterval(() => { - const values = getValues(); - setImportedDevices(values.devices); - }, 5000); - - return () => { - clearInterval(interval); - }; - }, [getValues, setImportedDevices]); - - if (isLoading || !importedDevices || createLoading) return ; - return ( - -
- - customRowRender={renderRow} - data={devicesList} - rowSize={70} - headers={getHeaders} - headerPadding={{ - left: 20, - right: 20, - }} - padding={{ - left: 47, - right: 47, - }} - /> - - -
- ); -}; - -type DeviceRowData = { - itemIndex: number; -}; diff --git a/web/src/pages/wizard/components/WizardMapDevices/components/MapDeviceRow.tsx b/web/src/pages/wizard/components/WizardMapDevices/components/MapDeviceRow.tsx deleted file mode 100644 index 06480d133..000000000 --- a/web/src/pages/wizard/components/WizardMapDevices/components/MapDeviceRow.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import type { TargetAndTransition } from 'motion/react'; -import { useCallback, useMemo } from 'react'; -import { type Control, useController } from 'react-hook-form'; - -import { ColorsRGB } from '../../../../../shared/constants'; -import { RowBox } from '../../../../../shared/defguard-ui/components/Layout/RowBox/RowBox'; -import { Select } from '../../../../../shared/defguard-ui/components/Layout/Select/Select'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../../../shared/defguard-ui/components/Layout/Select/types'; -import type { WizardMapDevicesFormFields } from '../types'; - -type Props = { - options: SelectOption[]; - control: Control; - index: number; -}; - -export const MapDeviceRow = ({ options, control, index }: Props) => { - const nameController = useController({ - control, - name: `devices.${index}.name`, - }); - - const userController = useController({ - control, - name: `devices.${index}.user_id`, - }); - - const ipController = useController({ - control, - name: `devices.${index}.wireguard_ips`, - }); - - const hasErrors = useMemo(() => { - return nameController.fieldState.invalid || userController.fieldState.invalid; - }, [nameController.fieldState.invalid, userController.fieldState.invalid]); - - const getAnimate = useMemo(() => { - const res: TargetAndTransition = { - borderColor: ColorsRGB.GrayBorder, - }; - if (hasErrors) { - res.borderColor = ColorsRGB.Error; - } - return res; - }, [hasErrors]); - - const renderSelected = useCallback( - (selected: number): SelectSelectedValue => { - const option = options.find((o) => o.value === selected); - if (!option) throw Error("Selected value doesn't exist"); - return { - key: option.key, - displayValue: option.label, - }; - }, - [options], - ); - - return ( - - - {ipController.field.value.join(' ')} - - - - ); -}; diff --git a/web/src/pages/wizard/components/WizardNetworkConfiguration/components/DividerHeader.tsx b/web/src/pages/wizard/components/WizardNetworkConfiguration/components/DividerHeader.tsx deleted file mode 100644 index 86243ea08..000000000 --- a/web/src/pages/wizard/components/WizardNetworkConfiguration/components/DividerHeader.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { PropsWithChildren } from 'react'; - -type DividerHeaderProps = { - text: string; -} & PropsWithChildren; - -export const DividerHeader = ({ text, children }: DividerHeaderProps) => { - return ( -
-
-

{text}

- {children} -
-
- ); -}; diff --git a/web/src/pages/wizard/components/WizardNetworkConfiguration/style.scss b/web/src/pages/wizard/components/WizardNetworkConfiguration/style.scss deleted file mode 100644 index 675509ec1..000000000 --- a/web/src/pages/wizard/components/WizardNetworkConfiguration/style.scss +++ /dev/null @@ -1,55 +0,0 @@ -#wizard-manual-network-configuration { - box-shadow: none; - - @include media-breakpoint-up(xl) { - box-shadow: var(--card-shadow); - } - - & > form { - @include media-breakpoint-up(xl) { - box-sizing: border-box; - padding: 47px 55px; - } - - & > * { - width: 100%; - } - - & > .message-box-spacer { - padding-bottom: 25px; - } - - & > .form-checkbox { - margin-bottom: 25px; - } - } - - #location-mfa-mode-explain-message-box { - ul { - list-style-position: inside; - margin-top: 8px; - - li { - p { - display: inline; - } - } - } - } - - .divider-header { - padding-bottom: var(--spacing-s); - - .inner { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - border-bottom: 1px solid var(--border-primary); - } - - .header { - @include typography(app-side-bar); - } - } -} diff --git a/web/src/pages/wizard/components/WizardNetworkImport/WizardNetworkImport.tsx b/web/src/pages/wizard/components/WizardNetworkImport/WizardNetworkImport.tsx deleted file mode 100644 index 52c798c0e..000000000 --- a/web/src/pages/wizard/components/WizardNetworkImport/WizardNetworkImport.tsx +++ /dev/null @@ -1,246 +0,0 @@ -import './style.scss'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { type SubmitHandler, useForm } from 'react-hook-form'; -import { useNavigate } from 'react-router'; -import { z } from 'zod'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { FormInput } from '../../../../shared/defguard-ui/components/Form/FormInput/FormInput'; -import { FormSelect } from '../../../../shared/defguard-ui/components/Form/FormSelect/FormSelect'; -import { Button } from '../../../../shared/defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../shared/defguard-ui/components/Layout/Button/types'; -import { Card } from '../../../../shared/defguard-ui/components/Layout/Card/Card'; -import { MessageBox } from '../../../../shared/defguard-ui/components/Layout/MessageBox/MessageBox'; -import type { SelectOption } from '../../../../shared/defguard-ui/components/Layout/Select/types'; -import useApi from '../../../../shared/hooks/useApi'; -import { useToaster } from '../../../../shared/hooks/useToaster'; -import { MutationKeys } from '../../../../shared/mutations'; -import { QueryKeys } from '../../../../shared/queries'; -import type { ImportNetworkRequest } from '../../../../shared/types'; -import { invalidateMultipleQueries } from '../../../../shared/utils/invalidateMultipleQueries'; -import { titleCase } from '../../../../shared/utils/titleCase'; -import { validateIpOrDomain } from '../../../../shared/validators'; -import { useWizardStore } from '../../hooks/useWizardStore'; - -interface FormInputs extends Omit { - fileName: string; - allowed_groups: string[]; -} -const defaultValues: FormInputs = { - name: '', - endpoint: '', - fileName: '', - config: '', - allowed_groups: [], -}; -export const WizardNetworkImport = () => { - const submitRef = useRef(null); - const queryClient = useQueryClient(); - const { LL } = useI18nContext(); - const navigate = useNavigate(); - const { - network: { importNetwork }, - groups: { getGroups }, - } = useApi(); - const toaster = useToaster(); - const [setWizardState, nextStepSubject, submitSubject, resetWizard] = useWizardStore( - (state) => [ - state.setState, - state.nextStepSubject, - state.submitSubject, - state.resetState, - ], - shallow, - ); - const [groupOptions, setGroupOptions] = useState[]>([]); - - const zodSchema = useMemo( - () => - z.object({ - name: z.string().trim().min(1, LL.form.error.required()), - endpoint: z - .string() - .trim() - .min(1, LL.form.error.required()) - .refine((val) => validateIpOrDomain(val), LL.form.error.endpoint()), - fileName: z.string().trim().min(1, LL.form.error.required()), - config: z.string().trim().min(1, LL.form.error.required()), - allowed_groups: z.array(z.string().min(1, LL.form.error.minimumLength())), - }), - [LL.form.error], - ); - - const { control, handleSubmit, setValue, setError, resetField } = useForm({ - defaultValues, - mode: 'all', - reValidateMode: 'onChange', - resolver: zodResolver(zodSchema), - }); - - const { - mutate: importNetworkMutation, - isPending, - data, - } = useMutation({ - mutationFn: importNetwork, - mutationKey: [MutationKeys.IMPORT_NETWORK], - onSuccess: (response) => { - toaster.success(LL.networkConfiguration.form.messages.networkCreated()); - // complete wizard if there is no devices to map - if (response.devices.length === 0) { - toaster.success(LL.wizard.completed()); - resetWizard(); - invalidateMultipleQueries(queryClient, [ - [QueryKeys.FETCH_NETWORKS], - [QueryKeys.FETCH_APP_INFO], - ]); - navigate('/admin/overview', { replace: true }); - } else { - setWizardState({ - importedNetworkDevices: response.devices, - importedNetworkConfig: response.network, - loading: false, - }); - nextStepSubject.next(); - } - }, - onError: (err) => { - setWizardState({ loading: false }); - toaster.error(LL.messages.error()); - resetField('fileName'); - resetField('config'); - console.error(err); - }, - }); - - const onValidSubmit: SubmitHandler = useCallback( - (data) => { - if (!isPending) { - setWizardState({ loading: true }); - importNetworkMutation(data); - } - }, - [importNetworkMutation, isPending, setWizardState], - ); - - const handleConfigUpload = () => { - const input = document.createElement('input'); - input.type = 'file'; - input.multiple = false; - input.style.display = 'none'; - input.onchange = () => { - if (input.files && input.files.length === 1) { - const reader = new FileReader(); - reader.onload = () => { - if (reader.result && input.files) { - const res = reader.result; - setValue('config', res as string); - setValue('fileName', input.files[0].name); - } - }; - reader.onerror = () => { - toaster.error('Error while reading file.'); - setError('fileName', { - message: 'Please try again', - }); - }; - reader.readAsText(input.files[0]); - } - }; - input.click(); - }; - - useEffect(() => { - const sub = submitSubject.subscribe(() => { - submitRef.current?.click(); - }); - return () => sub?.unsubscribe(); - }, [submitSubject]); - - const { - isLoading: groupsLoading, - data: fetchGroupsData, - error: fetchGroupsError, - } = useQuery({ - queryKey: [QueryKeys.FETCH_GROUPS], - queryFn: getGroups, - }); - - // biome-ignore lint/correctness/useExhaustiveDependencies: migration, checkMeLater - useEffect(() => { - if (fetchGroupsError) { - toaster.error(LL.messages.error()); - console.error(fetchGroupsError); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetchGroupsError]); - - useEffect(() => { - if (fetchGroupsData) { - setGroupOptions( - fetchGroupsData.groups.map((g) => ({ - key: g, - value: g, - label: titleCase(g), - })), - ); - } - }, [fetchGroupsData]); - - return ( - -
- - -

{LL.networkConfiguration.form.helpers.gateway()}

-
- - -

{LL.networkConfiguration.form.helpers.allowedGroups()}

-
- ({ - key: group, - displayValue: titleCase(group), - })} - /> - - -

{displayDate()}

- - - ); -}; - -type DisplayProps = { - selected?: string | null; - displayFormat?: string; - clearable?: boolean; - onClear?: () => void; -} & HTMLAttributes; - -const DisplayField = forwardRef( - ({ selected, className, displayFormat, onClear, clearable = false, ...rest }, ref) => { - return ( -
- - {clearable && isPresent(onClear) && selected !== null && ( - { - onClear?.(); - }} - > - - - )} -
- ); - }, -); diff --git a/web/src/shared/components/Layout/DateInput/FormDateInput.tsx b/web/src/shared/components/Layout/DateInput/FormDateInput.tsx deleted file mode 100644 index 7163f889d..000000000 --- a/web/src/shared/components/Layout/DateInput/FormDateInput.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { isUndefined } from 'lodash-es'; -import { useMemo } from 'react'; -import { - type FieldValues, - type UseControllerProps, - useController, -} from 'react-hook-form'; - -import { DateInput } from './DateInput'; -import type { DateInputProps } from './types'; - -type Props = { - onChange?: (value: string | null) => void; - controller: UseControllerProps; - label?: string; - disabled?: boolean; -} & Pick; - -export const FormDateInput = ({ - onChange, - controller, - label, - disabled = false, - ...dateInputProps -}: Props) => { - const { - field: { value, onChange: fieldChange }, - fieldState: { isDirty, isTouched, error }, - formState: { isSubmitted }, - } = useController(controller); - - const errorMessage = useMemo(() => { - if ( - (!isUndefined(error) && (isDirty || isTouched)) || - (!isUndefined(error) && isSubmitted) - ) { - return error.message; - } - return undefined; - }, [error, isDirty, isSubmitted, isTouched]); - - return ( - { - fieldChange(val); - onChange?.(val); - }} - label={label} - errorMessage={errorMessage} - disabled={disabled} - {...dateInputProps} - /> - ); -}; diff --git a/web/src/shared/components/Layout/DateInput/style.scss b/web/src/shared/components/Layout/DateInput/style.scss deleted file mode 100644 index cb8657511..000000000 --- a/web/src/shared/components/Layout/DateInput/style.scss +++ /dev/null @@ -1,276 +0,0 @@ -.date-input-spacer { - & > .inner { - position: relative; - - &.with-time { - & > .fields-track { - display: grid; - grid-template-columns: 1fr 80px; - column-gap: var(--spacing-s); - - & > .react-datepicker-wrapper { - &:first-child { - grid-row: 1; - grid-column: 1 / 2; - } - - &:last-child { - grid-row: 1; - grid-column: 2 / 3; - } - } - } - } - - & > .label { - user-select: none; - @include typography(app-wizard-1); - color: var(--text-body-tertiary); - padding-bottom: var(--spacing-xs); - } - } -} - -.date-input-container { - position: relative; - - &.clearable { - & > .date-input { - padding: 8px 42px 8px 20px; - } - - &:hover { - & > .interaction-box { - visibility: visible; - } - } - } - - .interaction-box { - visibility: hidden; - width: 24px; - height: 24px; - position: absolute; - right: 10px; - top: 50%; - transform: translateY(-50%); - - &:hover { - svg path { - fill: var(--surface-alert-primary); - } - } - } - - .date-input { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - background-color: var(--surface-frame-bg); - border: 1px solid var(--border-primary); - border-radius: 10px; - box-sizing: border-box; - width: 100%; - min-height: 50px; - margin: 0; - padding: 8px 20px; - cursor: pointer; - opacity: 1; - - @include animate-field; - transition-property: border-color, opacity; - - span { - width: 100%; - text-align: left; - @include typography(app-input); - } - } - - &.disabled { - cursor: not-allowed; - - & > .date-input { - cursor: not-allowed; - opacity: var(--disabled-opacity); - } - } - - &.error { - & > .date-input { - border-color: var(--border-alert); - } - } -} - -.react-datepicker-popper { - z-index: 2; -} - -.react-datepicker { - border-radius: 10px; - background-color: var(--surface-default-modal); - border: 1px solid var(--border-primary); - box-sizing: border-box; - padding: var(--spacing-s); - width: 100%; - max-width: 360px; -} - -.react-datepicker__triangle { - color: var(--border-primary); -} - -.react-datepicker__day-names { - display: grid; - grid-template-columns: repeat(7, 1fr); - grid-template-rows: auto; - column-gap: var(--spacing-s); - align-items: center; - border-bottom: 1px solid var(--border-primary); -} - -.react-datepicker__aria-live { - display: none; -} - -.react-datepicker-wrapper { - width: 100%; -} - -.react-datepicker__month { - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); -} - -.react-datepicker__week { - display: grid; - grid-template-columns: repeat(7, 1fr); - column-gap: var(--spacing-s); -} - -.react-datepicker__day { - width: 100%; - cursor: pointer; - - .custom-day { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - width: 20px; - height: 20px; - border-radius: 5px; - - @include typography(app-modal-1); - - &:hover { - background-color: var(--surface-main-primary); - - span { - color: var(--white); - } - } - } -} - -.react-datepicker__day--selected { - & > .custom-day { - background-color: var(--surface-main-primary); - - span { - color: var(--white); - } - } -} - -.react-datepicker__header { - padding: 0 0 var(--spacing-xs) 0; - - .date-picker-custom-header { - display: grid; - width: 100%; - grid-template-rows: auto; - grid-template-columns: 22px 1fr 22px; - align-items: center; - justify-items: start; - column-gap: 10px; - border: 0; - padding-bottom: var(--spacing-xs); - - button { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - margin: 0; - padding: 0; - background: none; - border: none; - width: 22px; - height: 22px; - cursor: pointer; - - svg { - width: 100%; - height: 100%; - } - - &:last-child { - svg { - transform: rotateZ(-180deg); - } - } - } - - p { - width: 100%; - text-align: center; - @include typography(modal-title); - user-select: none; - } - - .icon-container { - svg { - path { - fill: var(--surface-icon-primary); - } - } - } - } -} - -.react-datepicker-time__header { - color: var(--text-body-primary); - @include typography(modal-title); - border-bottom: 1px solid var(--border-primary); - padding-bottom: var(--spacing-xs); -} - -.react-datepicker__time-list { - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - list-style: none; - padding-right: 10px; - scrollbar-gutter: stable; - max-height: min(250px, 75dvh); - overflow: auto; - - .react-datepicker__time-list-item { - @include typography(app-modal-1); - color: var(--text-body-primary); - padding: 3px; - border-radius: 5px; - cursor: pointer; - background-color: transparent; - - &:hover, - &.react-datepicker__time-list-item--selected { - color: var(--white); - background-color: var(--surface-main-primary); - } - } -} diff --git a/web/src/shared/components/Layout/DateInput/types.ts b/web/src/shared/components/Layout/DateInput/types.ts deleted file mode 100644 index 1fda27111..000000000 --- a/web/src/shared/components/Layout/DateInput/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type DateInputProps = { - selected: string; - label?: string; - errorMessage?: string; - disabled?: boolean; - showTimeSelection?: boolean; - clearable?: boolean; - onChange: (value: string | null) => void; -}; diff --git a/web/src/shared/components/Layout/EnterpriseUpgradeToast/EnterpriseUpgradeToast.tsx b/web/src/shared/components/Layout/EnterpriseUpgradeToast/EnterpriseUpgradeToast.tsx deleted file mode 100644 index 5e557bbe9..000000000 --- a/web/src/shared/components/Layout/EnterpriseUpgradeToast/EnterpriseUpgradeToast.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import './style.scss'; - -import { useCallback } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Badge } from '../../../defguard-ui/components/Layout/Badge/Badge'; -import { BadgeStyleVariant } from '../../../defguard-ui/components/Layout/Badge/types'; -import type { ToastOptions } from '../../../defguard-ui/components/Layout/ToastManager/Toast/types'; -import { useToastsStore } from '../../../defguard-ui/hooks/toasts/useToastStore'; -import SvgIconX from '../../svg/IconX'; - -export const EnterpriseUpgradeToast = ({ id }: ToastOptions) => { - const removeToast = useToastsStore((s) => s.removeToast); - const { LL } = useI18nContext(); - - const closeToast = useCallback(() => { - removeToast(id); - }, [id, removeToast]); - - const handleDismiss = () => { - closeToast(); - }; - - return ( -
- ); -}; diff --git a/web/src/shared/components/Layout/EnterpriseUpgradeToast/style.scss b/web/src/shared/components/Layout/EnterpriseUpgradeToast/style.scss deleted file mode 100644 index 1e282663c..000000000 --- a/web/src/shared/components/Layout/EnterpriseUpgradeToast/style.scss +++ /dev/null @@ -1,99 +0,0 @@ -.enterprise-upgrade-toaster { - box-sizing: border-box; - padding: 15px; - box-shadow: 0px 6px 10px 0px rgba(0, 0, 0, 0.1); - border-radius: 10px; - background-color: var(--surface-nav-bg); - border-radius: 15px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 8px; - - min-width: 270px; - max-width: 400px; - - .toaster-badge { - border-radius: 100%; - width: 18px; - height: 18px; - } - - .dismiss { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - border: 0 solid transparent; - background-color: transparent; - cursor: pointer; - padding: 2px; - - svg { - & > g { - & > g { - fill: var(--surface-icon-primary); - } - } - height: 14px; - width: 14px; - } - } - - .top { - display: flex; - align-items: center; - flex-flow: row nowrap; - column-gap: 8px; - width: 100%; - justify-content: space-between; - - .heading { - display: flex; - align-items: center; - gap: 5px; - } - - p { - color: var(--text-body-primary); - text-wrap: nowrap; - white-space: none; - @include typography(app-modal-1); - } - - & > a { - margin-left: auto; - border: none; - background-color: transparent; - cursor: pointer; - width: 22px; - height: 22px; - display: inline-flex; - flex-flow: row; - align-content: center; - align-items: center; - justify-content: center; - padding: 4px; - box-sizing: border-box; - text-decoration: none; - } - } - - .bottom { - min-width: 230px; - display: flex; - flex-flow: column; - align-items: left; - justify-content: space-between; - width: 100%; - @include typography(app-copyright); - - .upgrade-link-container { - display: flex; - width: 100%; - margin-top: 8px; - justify-content: right; - } - } -} diff --git a/web/src/shared/components/Layout/EnterpriseUpgradeToast/types.ts b/web/src/shared/components/Layout/EnterpriseUpgradeToast/types.ts deleted file mode 100644 index 5e111a0ca..000000000 --- a/web/src/shared/components/Layout/EnterpriseUpgradeToast/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -export const enterpriseUpgradeToastMetaSchema = z.object({ - customId: z.string().trim().min(1), -}); - -export type EnterpriseUpgradeToastMeta = z.infer; diff --git a/web/src/shared/components/Layout/ExpandableSection/ExpandableSection.tsx b/web/src/shared/components/Layout/ExpandableSection/ExpandableSection.tsx deleted file mode 100644 index 4178b75c1..000000000 --- a/web/src/shared/components/Layout/ExpandableSection/ExpandableSection.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { type PropsWithChildren, useState } from 'react'; - -import { ArrowSingle } from '../../../defguard-ui/components/icons/ArrowSingle/ArrowSingle'; -import { ArrowSingleDirection } from '../../../defguard-ui/components/icons/ArrowSingle/types'; - -type Props = { - text: string; - initOpen?: boolean; - textAs?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p'; - className?: string; - id?: string; -} & PropsWithChildren; - -export const ExpandableSection = ({ - children, - text, - className, - id, - textAs: Tag = 'p', - initOpen = true, -}: Props) => { - const [expanded, setExpanded] = useState(initOpen); - - return ( -
-
{ - setExpanded((s) => !s); - }} - > - {text} - -
-
-
{children}
-
-
- ); -}; diff --git a/web/src/shared/components/Layout/ExpandableSection/style.scss b/web/src/shared/components/Layout/ExpandableSection/style.scss deleted file mode 100644 index e2cd65435..000000000 --- a/web/src/shared/components/Layout/ExpandableSection/style.scss +++ /dev/null @@ -1,59 +0,0 @@ -.expandable-section { - & > .track { - width: 100%; - user-select: none; - cursor: pointer; - display: grid; - grid-template-columns: 1fr auto; - column-gap: var(--spacing-xs); - align-items: center; - justify-items: start; - border-bottom: 1px solid var(--border-primary); - - p { - width: 100%; - user-select: none; - } - - .arrow-single { - align-self: end; - width: 22px; - height: 22px; - - svg { - transition-property: transform; - - @include animate-standard; - } - } - } - - & > .expandable { - display: grid; - width: 100%; - transition-property: grid-template-rows; - - @include animate-standard(); - - &:not(.open) { - grid-template-rows: 0fr; - } - - &.open { - grid-template-rows: 1fr; - } - - & > div { - overflow: hidden; - padding-top: var(--spacing-s); - } - } -} - -.expandable-section .track p { - @include typography(app-side-bar); -} - -.expandable-section .track h2 { - @include typography(app-body-1); -} diff --git a/web/src/shared/components/Layout/ListCellTags/ListCellTags.tsx b/web/src/shared/components/Layout/ListCellTags/ListCellTags.tsx deleted file mode 100644 index 2fcbabc29..000000000 --- a/web/src/shared/components/Layout/ListCellTags/ListCellTags.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import './style.scss'; - -import useResizeObserver from '@react-hook/resize-observer'; -import clsx from 'clsx'; -import { useCallback, useRef, useState } from 'react'; - -import type { ListCellTag } from '../../../../pages/acl/AclIndexPage/components/shared/types'; -import { FloatingMenu } from '../../../defguard-ui/components/Layout/FloatingMenu/FloatingMenu'; -import { FloatingMenuProvider } from '../../../defguard-ui/components/Layout/FloatingMenu/FloatingMenuProvider'; -import { FloatingMenuTrigger } from '../../../defguard-ui/components/Layout/FloatingMenu/FloatingMenuTrigger'; -import { Tag } from '../../../defguard-ui/components/Layout/Tag/Tag'; -import { isPresent } from '../../../defguard-ui/utils/isPresent'; - -type RenderTagsProps = { - data: ListCellTag[]; - placeholder?: string; -}; - -export const ListCellTags = ({ data, placeholder }: RenderTagsProps) => { - const containerRef = useRef(null); - const [overflows, setOverflows] = useState(false); - - const handleResize = useCallback(() => { - if (containerRef.current) { - setOverflows(containerRef.current.scrollWidth > containerRef.current.clientWidth); - } - }, []); - - useResizeObserver(containerRef, handleResize); - return ( - - -
- - {data.length === 0 && isPresent(placeholder) && ( -

{placeholder}

- )} -
-
- - - -
- ); -}; - -const FloatingContent = ({ data }: RenderTagsProps) => { - return ( -
    - {data.map((d) => ( -
  • {d.label}
  • - ))} -
- ); -}; - -const TagContent = ({ data }: RenderTagsProps) => { - return ( -
- {data.map((d) => { - if (d.displayAsTag) { - return ; - } - return {d.label}; - })} -
- ); -}; diff --git a/web/src/shared/components/Layout/ListCellTags/style.scss b/web/src/shared/components/Layout/ListCellTags/style.scss deleted file mode 100644 index 90633bb6b..000000000 --- a/web/src/shared/components/Layout/ListCellTags/style.scss +++ /dev/null @@ -1,72 +0,0 @@ -.list-cell-tags-floating { - list-style: none; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - max-height: 250px; - max-width: 100dvh; - min-height: 35px; - overflow: auto; - padding-right: var(--spacing-xs); - min-width: 201px; - - li { - @include typography(app-modal-1); - color: var(--text-body-secondary); - } -} - -.list-cell-tags { - position: relative; - overflow: hidden; - max-width: 100%; - width: 100%; - - &:not(.empty) { - cursor: help; - } - - span, - p { - @include typography(app-modal-2); - } - - & > .track { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - column-gap: var(--spacing-xs); - overflow: visible; - - .tag { - padding: 3px 6px; - height: unset; - border-radius: 6px; - } - } - - &.overflows { - &::after { - position: absolute; - top: 0; - right: 0; - width: 65px; - height: 100%; - content: ' '; - background: linear-gradient( - 90deg, - rgba(0, 0, 0, 0) 0%, - var(--surface-default-modal) 100% - ); - } - } - - .no-data { - cursor: default; - } - - .tag { - user-select: none; - } -} diff --git a/web/src/shared/components/Layout/ListHeader/ListHeader.tsx b/web/src/shared/components/Layout/ListHeader/ListHeader.tsx deleted file mode 100644 index 54a28ab92..000000000 --- a/web/src/shared/components/Layout/ListHeader/ListHeader.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import { uniqBy } from 'lodash-es'; -import { useEffect } from 'react'; - -import { CheckBox } from '../../../defguard-ui/components/Layout/Checkbox/CheckBox'; -import { InteractionBox } from '../../../defguard-ui/components/Layout/InteractionBox/InteractionBox'; -import { ListSortDirection } from '../../../defguard-ui/components/Layout/VirtualizedList/types'; -import { isPresent } from '../../../defguard-ui/utils/isPresent'; -import type { ListHeaderColumnConfig } from './types'; - -type ListHeaderColumnProps = { - active: boolean; - sortDirection?: ListSortDirection; - onClick?: () => void; - columnKey?: string; -} & Omit, 'key'>; - -type Props = { - headers: ListHeaderColumnConfig[]; - activeKey?: keyof T; - sortDirection?: ListSortDirection; - className?: string; - id?: string; - selectAll?: boolean; - onSelectAll?: (value: boolean) => void; - onChange?: (key: keyof T, direction: ListSortDirection) => void; -}; - -const ListHeaderColumn = ({ - onClick, - sortDirection, - label, - active, - enabled, - ...props -}: ListHeaderColumnProps) => { - const disabled = !enabled || !isPresent(props.sortKey); - const key = (props.sortKey ?? props.columnKey) as string; - - useEffect(() => { - if (!props.sortKey && !props.columnKey) { - throw Error('ListHeader needs either key or sortKey!'); - } - }, [props.columnKey, props.sortKey]); - - return ( -
- -
- ); -}; - -export const ListHeader = ({ - headers, - activeKey, - sortDirection, - className, - id, - selectAll, - onChange, - onSelectAll, -}: Props) => { - useEffect(() => { - const unq = uniqBy(headers, (h) => h.sortKey ?? h.key); - if (unq.length !== headers.length) { - throw Error('ListHeader component given headers with duplicate identifiers'); - } - }, [headers]); - - const selectEnabled = isPresent(selectAll) && isPresent(onSelectAll); - - return ( -
- {!selectEnabled &&
} - {selectEnabled && ( -
- { - onSelectAll?.(!selectAll); - }} - > - - -
- )} - {headers.map(({ label, sortKey, enabled, key }) => { - const isActive = activeKey === sortKey; - const direction = isActive ? sortDirection : ListSortDirection.ASC; - const componentKey: string = (sortKey ?? key) as string; - return ( - { - if (enabled && isPresent(onChange) && isPresent(sortKey)) { - if (isActive) { - const newDirection = - sortDirection === ListSortDirection.ASC - ? ListSortDirection.DESC - : ListSortDirection.ASC; - onChange(sortKey, newDirection); - } else { - onChange(sortKey, ListSortDirection.ASC); - } - } - }} - /> - ); - })} -
- ); -}; diff --git a/web/src/shared/components/Layout/ListHeader/style.scss b/web/src/shared/components/Layout/ListHeader/style.scss deleted file mode 100644 index ccafe59af..000000000 --- a/web/src/shared/components/Layout/ListHeader/style.scss +++ /dev/null @@ -1,70 +0,0 @@ -.list-headers { - width: 100%; - display: inline-grid; - grid-template-rows: 1fr; - - .list-header-column { - button { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - background-color: transparent; - padding: 0; - margin: 0; - border: none; - - & > .label { - @include typography(app-modal-1); - @include animate-standard; - transition-property: font-weight color; - color: var(--text-body-tertiary); - } - - & > .sort-icon { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - padding: 0; - margin: 0; - width: 22px; - height: 22px; - user-select: none; - visibility: visible; - @include animate-standard; - transition-property: transform; - transform: rotate(180deg); - - &.asc { - transform: rotate(180deg); - } - - &.desc { - transform: rotate(0deg); - } - } - } - - &.disabled { - & > button { - & > .sort-icon { - visibility: hidden; - } - } - } - - &:not(.disabled) { - &.active { - & > button { - cursor: pointer; - - & > .label { - font-weight: 500; - color: var(--text-body-primary); - } - } - } - } - } -} diff --git a/web/src/shared/components/Layout/ListHeader/types.ts b/web/src/shared/components/Layout/ListHeader/types.ts deleted file mode 100644 index 8a7281522..000000000 --- a/web/src/shared/components/Layout/ListHeader/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ListHeaderColumnConfig = { - label: string; - enabled?: boolean; - sortKey?: keyof T; - key?: string; -}; diff --git a/web/src/shared/components/Layout/ManagementPageLayout/ManagementPageLayout.tsx b/web/src/shared/components/Layout/ManagementPageLayout/ManagementPageLayout.tsx deleted file mode 100644 index 6a8ec0217..000000000 --- a/web/src/shared/components/Layout/ManagementPageLayout/ManagementPageLayout.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import './style.scss'; - -import { clsx } from 'clsx'; - -import { useNavigationStore } from '../../../../components/Navigation/hooks/useNavigationStore'; -import { Search } from '../../../defguard-ui/components/Layout/Search/Search'; -import type { ManagementPageProps } from './types'; - -export const ManagementPageLayout = ({ - children, - title, - actions, - itemsCount, - search, - id, -}: ManagementPageProps) => { - const navOpen = useNavigationStore((s) => s.isOpen); - return ( -
-
-
-

{title}

- {search && ( - - )} -
-
- {itemsCount && ( -
-

{itemsCount.label}

- {itemsCount.itemsCount !== undefined && ( -
- {itemsCount.itemsCount} -
- )} -
- )} -
{actions}
-
-
{children}
-
-
- ); -}; diff --git a/web/src/shared/components/Layout/ManagementPageLayout/style.scss b/web/src/shared/components/Layout/ManagementPageLayout/style.scss deleted file mode 100644 index becdb95a1..000000000 --- a/web/src/shared/components/Layout/ManagementPageLayout/style.scss +++ /dev/null @@ -1,80 +0,0 @@ -.management-page { - box-sizing: border-box; - width: 100%; - padding-top: 64px; - padding-left: 88px; - max-height: 100dvh; - overflow-y: auto; - - &.nav-open { - padding-left: 230px; - } - - & > .page-content { - & > header { - display: flex; - flex-flow: row wrap; - align-items: center; - justify-content: flex-start; - gap: 30px; - width: 100%; - box-sizing: border-box; - padding: 0 70px 48px; - - h1 { - @include typography(app-title); - } - - .search { - min-width: 360px; - max-width: 100%; - } - } - - & > .top-bar { - flex-flow: row; - display: flex; - box-sizing: border-box; - padding: 0 70px 30px; - width: 100%; - - .items-count { - display: flex; - flex-flow: row; - flex-grow: 0; - align-items: center; - justify-content: flex-start; - column-gap: 10px; - - & > p { - @include typography(app-body-1); - } - - .count-box { - display: flex; - align-items: center; - flex-flow: row; - align-items: center; - justify-content: center; - flex-grow: 0; - box-sizing: border-box; - padding: 0 8px; - height: 30px; - min-width: 30px; - background-color: var(--text-body-tertiary); - user-select: none; - border-radius: 35%; - - span { - color: var(--surface-frame-bg); - @include typography(app-number); - } - } - } - - & > .actions { - margin-left: auto; - } - } - } -} diff --git a/web/src/shared/components/Layout/ManagementPageLayout/types.ts b/web/src/shared/components/Layout/ManagementPageLayout/types.ts deleted file mode 100644 index 51d0ac054..000000000 --- a/web/src/shared/components/Layout/ManagementPageLayout/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { ReactNode } from 'react'; - -export type ManagementPageProps = { - children: ReactNode; - title: string; - search?: ManagementPageSearch; - actions?: ReactNode; - itemsCount?: ManagementPageItemsCount; - id?: string; -}; - -export type ManagementPageItemsCount = { - itemsCount?: number; - label: string; -}; - -export type ManagementPageSearch = { - onSearch: (searchValue: string) => void; - placeholder?: string; - loading?: boolean; -}; diff --git a/web/src/shared/components/Layout/PageContainer/PageContainer.tsx b/web/src/shared/components/Layout/PageContainer/PageContainer.tsx deleted file mode 100644 index 523f60366..000000000 --- a/web/src/shared/components/Layout/PageContainer/PageContainer.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import type { ComponentProps } from 'react'; -import { useNavigationStore } from '../../../../components/Navigation/hooks/useNavigationStore'; - -type Props = { - withDefaultPadding?: boolean; -} & ComponentProps<'div'>; - -export const PageContainer = ({ - children, - className, - ref, - withDefaultPadding = false, - ...rest -}: Props) => { - const isNavOpen = useNavigationStore((state) => state.isOpen); - return ( -
-
- {children} -
-
- ); -}; diff --git a/web/src/shared/components/Layout/PageContainer/style.scss b/web/src/shared/components/Layout/PageContainer/style.scss deleted file mode 100644 index 2c1b17be2..000000000 --- a/web/src/shared/components/Layout/PageContainer/style.scss +++ /dev/null @@ -1,38 +0,0 @@ -@use '@scssutils' as *; - -.page-container { - min-height: inherit; - - @include media-breakpoint-down(lg) { - height: 100%; - max-height: inherit; - box-sizing: border-box; - position: relative; - } - - @include media-breakpoint-up(lg) { - margin-left: 0; - width: 100%; - height: inherit; - max-height: inherit; - - & > .page-content { - width: calc(100% - 87px); - margin-left: 87px; - - &.nav-open { - margin-left: 230px; - width: calc(100% - 230px); - } - } - } -} - -.page-container > .page-content.default-padding { - box-sizing: border-box; - padding: var(--spacing-m) var(--spacing-s) var(--spacing-m); - - @include media-breakpoint-up(lg) { - padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-m); - } -} diff --git a/web/src/shared/components/Layout/PageLayout/PageLayout.tsx b/web/src/shared/components/Layout/PageLayout/PageLayout.tsx deleted file mode 100644 index b8c4880a5..000000000 --- a/web/src/shared/components/Layout/PageLayout/PageLayout.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import type { PropsWithChildren } from 'react'; - -import { PageContainer } from '../PageContainer/PageContainer'; - -type Props = { - id: string; - className?: string; - withDefaultPadding?: boolean; -} & PropsWithChildren; - -export const PageLayout = ({ - id, - className, - children, - withDefaultPadding = false, -}: Props) => { - return ( - - {children} - - ); -}; diff --git a/web/src/shared/components/Layout/PageLayout/style.scss b/web/src/shared/components/Layout/PageLayout/style.scss deleted file mode 100644 index 550dbdeb6..000000000 --- a/web/src/shared/components/Layout/PageLayout/style.scss +++ /dev/null @@ -1,26 +0,0 @@ -.page-layout { - & > .page-content { - box-sizing: border-box; - padding: var(--spacing-s); - - @include media-breakpoint-up(md) { - padding: var(--spacing-m); - } - - @include media-breakpoint-up(lg) { - padding: var(--spacing-xl); - } - - h1 { - @include typography(app-title); - } - - h2 { - @include typography(app-body-1); - } - - h3 { - @include typography(app-side-bar); - } - } -} diff --git a/web/src/shared/components/Layout/PageLimiter/PageLimiter.tsx b/web/src/shared/components/Layout/PageLimiter/PageLimiter.tsx deleted file mode 100644 index c34347a1f..000000000 --- a/web/src/shared/components/Layout/PageLimiter/PageLimiter.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import type { HTMLAttributes, PropsWithChildren } from 'react'; - -import { useNavigationStore } from '../../../../components/Navigation/hooks/useNavigationStore'; - -type Props = PropsWithChildren & HTMLAttributes; - -export const PageLimiter = ({ children, className, ...divProps }: Props) => { - const navOpen = useNavigationStore((s) => s.isOpen); - - return ( -
-
{children}
-
- ); -}; diff --git a/web/src/shared/components/Layout/PageLimiter/style.scss b/web/src/shared/components/Layout/PageLimiter/style.scss deleted file mode 100644 index a4ffd1161..000000000 --- a/web/src/shared/components/Layout/PageLimiter/style.scss +++ /dev/null @@ -1,20 +0,0 @@ -.page-limiter { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: var(--spacing-l) var(--spacing-s); - - & > .page-limited-content { - width: 100%; - max-width: calc(var(--page-content-limit) + 142px); - } - - &.nav-open { - & > .page-limited-content { - max-width: var(--page-content-limit); - } - } -} diff --git a/web/src/shared/components/Layout/RenderMarkdown/RenderMarkdown.tsx b/web/src/shared/components/Layout/RenderMarkdown/RenderMarkdown.tsx deleted file mode 100644 index 5c9aaa6e8..000000000 --- a/web/src/shared/components/Layout/RenderMarkdown/RenderMarkdown.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import Markdown from 'react-markdown'; -import rehypeExternalLinks from 'rehype-external-links'; -import rehypeRaw from 'rehype-raw'; -import rehypeSanitize, { defaultSchema } from 'rehype-sanitize'; - -type Props = { - content: string; -}; - -const sanitizeSchema = { - ...defaultSchema, - tagNames: [...(defaultSchema.tagNames ?? []), 'div', 'br'], // Allow
tags - attributes: { - ...defaultSchema.attributes, - div: ['style'], // Allow `style` attribute on
- a: ['href', 'target'], // Allow `href` and `target` on - }, -}; - -export const RenderMarkdown = ({ content }: Props) => { - const parse = (): string => { - const lines = content.split(/\r?\n/); - - // Trim all lines and handle empty lines - const processedLines = lines.map((line) => { - const trimmedLine = line.trim(); - return trimmedLine === '' ? '' : trimmedLine; // Replace empty lines with empty strings - }); - - // Remove the first line if it's empty - if (processedLines.length > 0 && processedLines[0] === '') { - processedLines.shift(); - } - - // Remove the last line if it's empty - if (processedLines.length > 0 && processedLines[processedLines.length - 1] === '') { - processedLines.pop(); - } - - return processedLines.join('\n'); - }; - return ( - - {parse()} - - ); -}; diff --git a/web/src/shared/components/Layout/SectionWithCard/SectionWithCard.tsx b/web/src/shared/components/Layout/SectionWithCard/SectionWithCard.tsx deleted file mode 100644 index b49170f7a..000000000 --- a/web/src/shared/components/Layout/SectionWithCard/SectionWithCard.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; -import type { HTMLAttributes, PropsWithChildren } from 'react'; - -import { Card } from '../../../defguard-ui/components/Layout/Card/Card'; - -type Props = { title: string } & HTMLAttributes & PropsWithChildren; - -export const SectionWithCard = ({ - title, - className, - children, - ...containerProps -}: Props) => { - return ( -
-

{title}

- {children} -
- ); -}; diff --git a/web/src/shared/components/Layout/SectionWithCard/style.scss b/web/src/shared/components/Layout/SectionWithCard/style.scss deleted file mode 100644 index e8d45a77b..000000000 --- a/web/src/shared/components/Layout/SectionWithCard/style.scss +++ /dev/null @@ -1,12 +0,0 @@ -.section-with-title { - & > h2 { - @include typography(body-1); - padding-bottom: var(--spacing-s); - } - - & > .card { - box-sizing: border-box; - width: 100%; - padding: var(--spacing-m); - } -} diff --git a/web/src/shared/components/Layout/UpgradeLicenseModal/UpgradeLicenseModal.tsx b/web/src/shared/components/Layout/UpgradeLicenseModal/UpgradeLicenseModal.tsx deleted file mode 100644 index b1347d232..000000000 --- a/web/src/shared/components/Layout/UpgradeLicenseModal/UpgradeLicenseModal.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import './style.scss'; - -import { useId, useMemo } from 'react'; -import { shallow } from 'zustand/shallow'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../defguard-ui/components/Layout/Button/types'; -import { Modal } from '../../../defguard-ui/components/Layout/modals/Modal/Modal'; -import { useAuthStore } from '../../../hooks/store/useAuthStore'; -import { externalLink } from '../../../links'; -import { RenderMarkdown } from '../RenderMarkdown/RenderMarkdown'; -import checkboxUrl from './checkbox.svg?url'; -import { useUpgradeLicenseModal } from './store'; -import { UpgradeLicenseModalVariant } from './types'; - -export const UpgradeLicenseModal = () => { - const isAdmin = useAuthStore((s) => s.user?.is_admin ?? false); - const isOpen = useUpgradeLicenseModal((s) => s.visible); - const [close, reset] = useUpgradeLicenseModal((s) => [s.close, s.reset], shallow); - - return ( - - - - ); -}; - -const ModalContent = () => { - const variant = useUpgradeLicenseModal((s) => s.modalVariant); - const { LL } = useI18nContext(); - const localLL = LL.modals.upgradeLicenseModal; - const close = useUpgradeLicenseModal((s) => s.close, shallow); - - const [title, subtitle] = useMemo(() => { - switch (variant) { - case UpgradeLicenseModalVariant.ENTERPRISE_NOTICE: - return [localLL.enterprise.title(), localLL.enterprise.subTitle()]; - case UpgradeLicenseModalVariant.LICENSE_LIMIT: - return [localLL.limit.title(), localLL.limit.subTitle()]; - } - }, [localLL.enterprise, localLL.limit, variant]); - - return ( - <> -
-

{title}

-
-
- -
-
- - -
-
- - ); -}; - -const DecoratorSvg = () => { - const id = useId(); - return ( - - - - - - - - - - - - ); -}; diff --git a/web/src/shared/components/Layout/UpgradeLicenseModal/checkbox.svg b/web/src/shared/components/Layout/UpgradeLicenseModal/checkbox.svg deleted file mode 100644 index dfdbc53ab..000000000 --- a/web/src/shared/components/Layout/UpgradeLicenseModal/checkbox.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/web/src/shared/components/Layout/UpgradeLicenseModal/store.tsx b/web/src/shared/components/Layout/UpgradeLicenseModal/store.tsx deleted file mode 100644 index cc6d8fc83..000000000 --- a/web/src/shared/components/Layout/UpgradeLicenseModal/store.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import dayjs from 'dayjs'; -import { persist } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; - -import { UpgradeLicenseModalVariant } from './types'; - -//minutes -const modalTimeout = 30; - -const defaults: StoreValues = { - visible: false, - modalVariant: UpgradeLicenseModalVariant.ENTERPRISE_NOTICE, - lastClosed: undefined, -}; - -export const useUpgradeLicenseModal = createWithEqualityFn()( - persist( - (set, get) => ({ - ...defaults, - open: ({ modalVariant }) => { - const { lastClosed } = get(); - if ( - lastClosed !== undefined && - modalVariant === UpgradeLicenseModalVariant.LICENSE_LIMIT - ) { - const past = dayjs(lastClosed).utc(); - const now = dayjs().utc(); - const diff = now.diff(past, 'minutes'); - if (diff >= modalTimeout) { - set({ visible: true, modalVariant }); - } - } else { - set({ visible: true, modalVariant }); - } - }, - close: () => { - const { modalVariant } = get(); - if (modalVariant === UpgradeLicenseModalVariant.LICENSE_LIMIT) { - set({ visible: false, lastClosed: dayjs().utc().toISOString() }); - } else { - set({ visible: false }); - } - }, - reset: () => - set({ visible: defaults.visible, modalVariant: defaults.modalVariant }), - }), - { - name: 'upgrade-license-modal', - version: 1, - partialize: (s) => ({ lastOpened: s.lastClosed }), - }, - ), - Object.is, -); - -type Store = StoreValues & StoreMethods; -type StoreValues = { - visible: boolean; - modalVariant: UpgradeLicenseModalVariant; - lastClosed?: string; -}; -type Open = Pick; - -type StoreMethods = { - open: (modalVariant: Open) => void; - close: () => void; - reset: () => void; -}; diff --git a/web/src/shared/components/Layout/UpgradeLicenseModal/style.scss b/web/src/shared/components/Layout/UpgradeLicenseModal/style.scss deleted file mode 100644 index 0c767f6ee..000000000 --- a/web/src/shared/components/Layout/UpgradeLicenseModal/style.scss +++ /dev/null @@ -1,130 +0,0 @@ -.modal { - &.upgrade-license-modal { - @include media-breakpoint-up(lg) { - padding: 154px 0 40px !important; - align-items: center; - justify-items: center; - } - } -} - -#upgrade-license-modal-content { - background-color: var(--surface-nav-bg); - max-width: 1026px; - width: 100%; - overflow: hidden; - - @include media-breakpoint-down(lg) { - min-height: 100dvh; - } - - @include media-breakpoint-up(lg) { - box-shadow: 0px 12px 24px 0px rgba(0, 0, 0, 0.08); - border-radius: 15px; - } - - & > .title { - display: flex; - flex-flow: row; - align-content: center; - align-items: center; - justify-content: center; - box-sizing: border-box; - - padding: 25px 20px 10px; - - @include media-breakpoint-up(lg) { - padding: 56px 20px 10px; - } - - p { - @include typography(app-title); - } - } - - & > .image-container { - align-items: center; - display: flex; - flex-flow: row; - justify-content: center; - - padding-bottom: 20px; - - @include media-breakpoint-up(lg) { - padding-bottom: 45px; - } - } - - .controls { - width: 100%; - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - padding: 0 20px 20px; - flex-flow: column-reverse; - gap: 18px; - - @include media-breakpoint-up(lg) { - padding: 0 50px 50px; - flex-flow: row; - } - - .btn, - a { - width: 100%; - } - - a { - text-decoration: none; - } - } - - & > .content { - box-sizing: border-box; - padding: 0 20px 40px; - - & > :nth-child(1) { - padding-bottom: 20px; - } - - @include media-breakpoint-up(lg) { - padding: 0 50px 40px; - - & > :nth-child(1) { - padding-bottom: 40px; - } - } - - p { - @include typography(app-welcome-2); - } - - ul { - padding-left: 28px; - list-style: none; - padding-bottom: 32px; - - @include media-breakpoint-up(lg) { - padding-bottom: 40px; - } - - li { - position: relative; - @include typography(app-welcome-2); - - &::before { - user-select: none; - position: absolute; - left: -24px; - top: 50%; - transform: translateY(-50%); - content: ' '; - width: 18px; - height: 18px; - background: var(--list-image); - } - } - } - } -} diff --git a/web/src/shared/components/Layout/UpgradeLicenseModal/types.ts b/web/src/shared/components/Layout/UpgradeLicenseModal/types.ts deleted file mode 100644 index 0f52624b3..000000000 --- a/web/src/shared/components/Layout/UpgradeLicenseModal/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum UpgradeLicenseModalVariant { - // when user try to use feature locked behind enterprise - ENTERPRISE_NOTICE, - // when current limits - LICENSE_LIMIT, -} diff --git a/web/src/shared/components/Layout/VersionUpdateToast/VersionUpdateToast.tsx b/web/src/shared/components/Layout/VersionUpdateToast/VersionUpdateToast.tsx deleted file mode 100644 index 79d40db00..000000000 --- a/web/src/shared/components/Layout/VersionUpdateToast/VersionUpdateToast.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import './style.scss'; - -import dayjs from 'dayjs'; -import { useCallback, useEffect } from 'react'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import type { ToastOptions } from '../../../defguard-ui/components/Layout/ToastManager/Toast/types'; -import { useToastsStore } from '../../../defguard-ui/hooks/toasts/useToastStore'; -import { useUpdatesStore } from '../../../hooks/store/useUpdatesStore'; - -export const VersionUpdateToast = ({ id }: ToastOptions) => { - const removeToast = useToastsStore((s) => s.removeToast); - const updateData = useUpdatesStore((s) => s.update); - const dismissal = useUpdatesStore((s) => s.dismissal); - const setUpdateStore = useUpdatesStore((s) => s.setStore); - const { LL } = useI18nContext(); - - const closeToast = useCallback(() => { - removeToast(id); - }, [id, removeToast]); - - const handleOpenModal = () => { - setUpdateStore({ modalVisible: true }); - closeToast(); - }; - - const handleDismiss = () => { - if (updateData) { - setUpdateStore({ - dismissal: { - dismissedAt: dayjs.utc().toISOString(), - version: updateData.version, - }, - }); - closeToast(); - } - }; - - useEffect(() => { - if (dismissal && dismissal.version === updateData?.version) { - closeToast(); - } - }, [closeToast, dismissal, updateData?.version]); - - if (!updateData) return null; - - return ( -
-
-

- {LL.modals.updatesNotificationToaster.title({ - version: updateData.version, - })} -

- {updateData.critical && ( - - - - - )} - - - - - - -
-
- - -
-
- ); -}; diff --git a/web/src/shared/components/Layout/VersionUpdateToast/style.scss b/web/src/shared/components/Layout/VersionUpdateToast/style.scss deleted file mode 100644 index a8f777be7..000000000 --- a/web/src/shared/components/Layout/VersionUpdateToast/style.scss +++ /dev/null @@ -1,63 +0,0 @@ -.update-toaster { - box-sizing: border-box; - padding: 10px 20px 15px; - box-shadow: 0px 6px 10px 0px rgba(0, 0, 0, 0.1); - border-radius: 10px; - background-color: var(--surface-nav-bg); - border-radius: 15px; - - min-width: 270px; - max-width: 100%; - - .top { - padding-bottom: 8px; - display: flex; - align-items: center; - flex-flow: row nowrap; - min-width: 230px; - column-gap: 8px; - - p { - color: var(--text-body-primary); - text-wrap: nowrap; - white-space: none; - @include typography(app-number); - } - - & > a { - margin-left: auto; - border: none; - background-color: transparent; - cursor: pointer; - width: 22px; - height: 22px; - display: inline-flex; - flex-flow: row; - align-content: center; - align-items: center; - justify-content: center; - padding: 4px; - box-sizing: border-box; - text-decoration: none; - } - } - - .bottom { - min-width: 230px; - display: flex; - flex-flow: row; - align-items: center; - justify-content: space-between; - - & > * { - cursor: pointer; - } - - button { - border: none; - background: transparent; - color: var(--text-body-primary); - @include typography(app-copyright); - } - } -} diff --git a/web/src/shared/components/Layout/VersionUpdateToast/types.ts b/web/src/shared/components/Layout/VersionUpdateToast/types.ts deleted file mode 100644 index 8ea128bf9..000000000 --- a/web/src/shared/components/Layout/VersionUpdateToast/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -export const versionUpdateToastMetaSchema = z.object({ - customId: z.string().trim().min(1), -}); - -export type VersionUpdateToastMeta = z.infer; diff --git a/web/src/shared/components/Layout/WireguardConfigExpandable/WireguardConfigExpandable.tsx b/web/src/shared/components/Layout/WireguardConfigExpandable/WireguardConfigExpandable.tsx deleted file mode 100644 index 998b026f1..000000000 --- a/web/src/shared/components/Layout/WireguardConfigExpandable/WireguardConfigExpandable.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import './style.scss'; - -import { Fragment, type ReactNode, useCallback, useMemo, useState } from 'react'; -import QRCode from 'react-qr-code'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ActionButton } from '../../../defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../defguard-ui/components/Layout/ActionButton/types'; -import { ExpandableCard } from '../../../defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { useClipboard } from '../../../hooks/useClipboard'; -import { downloadWGConfig } from '../../../utils/downloadWGConfig'; - -type Props = { - config: string; - publicKey: string; - deviceName: string; - privateKey?: string; -}; - -enum ConfigCardView { - FILE, - QR, -} - -export const WireguardConfigExpandable = ({ - config, - deviceName, - publicKey, - privateKey, -}: Props) => { - const { LL } = useI18nContext(); - const { writeToClipboard } = useClipboard(); - const localLL = LL.modals.addStandaloneDevice.steps.manual.finish; - const [view, setView] = useState(ConfigCardView.FILE); - - const configForExport = useMemo(() => { - if (privateKey) { - return config.replace('YOUR_PRIVATE_KEY', privateKey); - } - return config; - }, [config, privateKey]); - - const getQRConfig = useMemo((): string => { - if (privateKey) { - return config.replace('YOUR_PRIVATE_KEY', privateKey); - } - return config.replace('YOUR_PRIVATE_KEY', publicKey); - }, [config, privateKey, publicKey]); - - const renderTextConfig = () => { - const content = configForExport.split('\n'); - return ( -

- {content.map((text, index) => ( - - {text} - {index !== content.length - 1 &&
} -
- ))} -

- ); - }; - - const handleConfigCopy = useCallback(() => { - void writeToClipboard( - configForExport, - LL.components.deviceConfigsCard.messages.copyConfig(), - ); - }, [LL.components.deviceConfigsCard.messages, configForExport, writeToClipboard]); - - const handleConfigDownload = useCallback(() => { - downloadWGConfig(configForExport, deviceName.toLowerCase().replace(' ', '-')); - }, [configForExport, deviceName]); - - const actions = useMemo( - (): ReactNode[] => [ - setView(ConfigCardView.FILE)} - />, - setView(ConfigCardView.QR)} - />, - , - , - ], - [handleConfigCopy, handleConfigDownload, view], - ); - return ( - - {view === ConfigCardView.FILE && renderTextConfig()} - {view === ConfigCardView.QR && } - - ); -}; diff --git a/web/src/shared/components/Layout/WireguardConfigExpandable/style.scss b/web/src/shared/components/Layout/WireguardConfigExpandable/style.scss deleted file mode 100644 index 62957360e..000000000 --- a/web/src/shared/components/Layout/WireguardConfigExpandable/style.scss +++ /dev/null @@ -1,18 +0,0 @@ -.wireguard-config-card { - .expanded-content { - display: flex; - flex-flow: column; - align-items: center; - - .config { - width: 100%; - @include typography(app-code); - color: var(--text-button-primary); - - span { - @include typography(app-code); - color: var(--text-button-primary); - } - } - } -} diff --git a/web/src/shared/components/Layout/buttons/AddButton/AddButton.tsx b/web/src/shared/components/Layout/buttons/AddButton/AddButton.tsx deleted file mode 100644 index 66152a268..000000000 --- a/web/src/shared/components/Layout/buttons/AddButton/AddButton.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import './style.scss'; - -import clsx from 'clsx'; - -import { useI18nContext } from '../../../../../i18n/i18n-react'; -import { Button } from '../../../../defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../../defguard-ui/components/Layout/Button/types'; -import SvgIconPlusWhite from '../../../svg/IconPlusWhite'; - -type Props = { - onClick?: () => void; - loading?: boolean; - text?: string; - className?: string; -}; - -export const AddButton = ({ loading, onClick, text, className }: Props) => { - const { LL } = useI18nContext(); - const defaultText = LL.common.controls.addNew(); - - return ( - -
-
- {displayFilters.map((group) => ( -
- -
    - {group.items.map((item) => ( -
  • - { - toggleCheckbox( - group.identifier, - item.value, - !selected[group.identifier][item.value], - ); - }} - /> -
  • - ))} -
-
-
- ))} -
-
-
-
-
-
- - ); -}; - -const countSelected = (object: Record): number => { - let count = 0; - for (const key in object) { - if (object[key]) count++; - } - return count; -}; - -type GroupExpandableProps = Pick & - PropsWithChildren; - -const GroupExpandable = ({ - groupLabel, - selectionCount, - children, -}: GroupExpandableProps) => { - const [isOpen, setIsOpen] = useState(true); - - return ( -
- { - setIsOpen((s) => !s); - }} - /> -
-
{children}
-
-
- ); -}; - -type GroupHeaderProps = { - selectionCount: number; - groupLabel: string; - arrowDirection: ArrowSingleDirection; - onClick?: () => void; -}; - -const GroupHeader = ({ - groupLabel, - selectionCount, - arrowDirection, - onClick, -}: GroupHeaderProps) => { - const headerText = () => { - if (selectionCount > 0) { - return `${groupLabel} (${selectionCount})`; - } - return groupLabel; - }; - return ( -
{ - onClick?.(); - }} - > -

{headerText()}

- - - - -
- ); -}; diff --git a/web/src/shared/components/modals/FilterGroupsModal/style.scss b/web/src/shared/components/modals/FilterGroupsModal/style.scss deleted file mode 100644 index 47fa58111..000000000 --- a/web/src/shared/components/modals/FilterGroupsModal/style.scss +++ /dev/null @@ -1,157 +0,0 @@ -.filter-modal { - min-height: 100dvh; - justify-items: center; - align-items: start; - padding: 10dvh 0 40px !important; - - #acl-rules-index-filter-modal { - width: 100%; - max-width: 580px; - border-radius: 10px; - padding: 18px 10px; - box-sizing: border-box; - overflow: hidden; - - .divider { - width: 100%; - padding: var(--spacing-xs) 0; - background-color: transparent; - - .line { - height: 1px; - width: 100%; - background-color: var(--border-primary); - } - } - - .search { - margin-bottom: var(--spacing-s); - } - - & > .controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: space-between; - padding: var(--spacing-xs) 0; - - .labeled-checkbox { - label { - @include typography(app-modal-1); - color: var(--text-body-primary); - } - } - - & > button { - background-color: transparent; - border: none; - padding: 5px; - margin: 0; - box-sizing: border-box; - cursor: pointer; - - &:disabled { - cursor: not-allowed; - } - - p { - @include typography(app-underline); - } - } - } - - .modal-controls { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - column-gap: var(--spacing-l); - padding-top: var(--spacing-xs); - } - - .groups { - width: 100%; - max-width: 100%; - max-height: 300px; - min-height: 300px; - overflow-y: auto; - overflow-x: hidden; - display: flex; - flex-flow: column; - row-gap: var(--spacing-xs); - scrollbar-gutter: stable; - box-sizing: border-box; - - .group { - width: 100%; - - .group-header { - width: 100%; - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - border-bottom: 1px solid var(--border-primary); - column-gap: 5px; - min-height: 23px; - cursor: pointer; - - p, - span { - user-select: none; - @include typography(app-side-bar); - } - - svg { - margin-left: auto; - transform: rotateZ(0deg); - @include animate-standard; - transition-property: transform; - - &.up { - transform: rotateZ(-180deg); - } - } - } - - .items { - .labeled-checkbox { - min-height: 18px; - height: unset; - - label { - box-sizing: border-box; - padding: 5px; - @include typography(app-modal-1); - color: var(--text-body-primary); - } - } - } - } - } - } -} - -#acl-rules-index-filter-modal { - .group-expandable { - .expandable { - display: grid; - grid-template-rows: 0fr; - width: 100%; - transition-property: grid-template-rows; - transition-duration: 100ms; - transition-timing-function: ease-in-out; - - & > div { - box-sizing: border-box; - padding-top: var(--spacing-xs); - overflow: hidden; - width: 100%; - } - - &.expanded { - grid-template-rows: 1fr; - } - } - } -} diff --git a/web/src/shared/components/modals/FilterGroupsModal/types.ts b/web/src/shared/components/modals/FilterGroupsModal/types.ts deleted file mode 100644 index 61305c5eb..000000000 --- a/web/src/shared/components/modals/FilterGroupsModal/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type FilterGroupsModalFilterItem = { - label: string; - value: number | string; - searchValues: string[]; -}; - -export type FilterGroupsModalFilter = { - label: string; - items: FilterGroupsModalFilterItem[]; - order: number; - identifier: string; -}; diff --git a/web/src/shared/components/modals/OutdatedComponentsModal/OutdatedComponentsModal.tsx b/web/src/shared/components/modals/OutdatedComponentsModal/OutdatedComponentsModal.tsx deleted file mode 100644 index 823c00c6c..000000000 --- a/web/src/shared/components/modals/OutdatedComponentsModal/OutdatedComponentsModal.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { useEffect, useMemo } from 'react'; -import { shallow } from 'zustand/shallow'; -import { Button } from '../../../defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../defguard-ui/components/Layout/Button/types'; -import { Modal } from '../../../defguard-ui/components/Layout/modals/Modal/Modal'; -import type { OutdatedGateway, OutdatedProxy } from '../../../types'; -import { useOutdatedComponentsModal } from './useOutdatedComponentsModal'; -import './style.scss'; -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { isPresent } from '../../../defguard-ui/utils/isPresent'; - -export const OutdatedComponentsModal = () => { - const isOpen = useOutdatedComponentsModal((s) => s.visible); - const [close, reset] = useOutdatedComponentsModal((s) => [s.close, s.reset], shallow); - return ( - - - - ); -}; - -type ProxyItemProps = { - data: OutdatedProxy; -}; - -const ProxyListItem = ({ data }: ProxyItemProps) => { - const { LL } = useI18nContext(); - const localLL = LL.modals.outdatedComponentsModal.content; - return ( -
  • -
    - Proxy - - - {data.version || localLL.unknownVersion()} -
    -
  • - ); -}; - -type GatewayItemProps = { - data: OutdatedGateway; -}; - -const GatewayListItem = ({ data }: GatewayItemProps) => { - const { LL } = useI18nContext(); - const localLL = LL.modals.outdatedComponentsModal.content; - return ( -
  • -
    - Gateway - - - - {data.version || localLL.unknownVersion()} ( - {data.hostname || localLL.unknownHostname()}) - -
    -
  • - ); -}; - -const ModalContent = () => { - const closeModal = useOutdatedComponentsModal((s) => s.close); - const { LL } = useI18nContext(); - const localLL = LL.modals.outdatedComponentsModal; - const componentsInfo = useOutdatedComponentsModal((s) => s); - - const gatewaysInfo = useMemo( - () => componentsInfo.componentsInfo.gateways, - [componentsInfo], - ); - - const proxyInfo = useMemo(() => componentsInfo.componentsInfo.proxy, [componentsInfo]); - - useEffect(() => { - if (gatewaysInfo.length === 0 && proxyInfo === undefined) { - closeModal(); - } - }, [closeModal, gatewaysInfo.length, proxyInfo]); - - return ( -
    -
    -

    {localLL.title()}

    -

    {localLL.subtitle()}

    -
    -
    -
    -

    {localLL.content.title()}

    -
      - {isPresent(proxyInfo) && } - {gatewaysInfo.map((gateway, index) => ( - - ))} -
    -
    -
    -
    -
    -
    - ); -}; diff --git a/web/src/shared/components/modals/OutdatedComponentsModal/style.scss b/web/src/shared/components/modals/OutdatedComponentsModal/style.scss deleted file mode 100644 index 2460784f7..000000000 --- a/web/src/shared/components/modals/OutdatedComponentsModal/style.scss +++ /dev/null @@ -1,145 +0,0 @@ -#outdated-components-modal { - max-width: 100%; - overflow-x: hidden; - - @include media-breakpoint-up(lg) { - background-color: transparent; - box-shadow: var(--box-shadow); - } - - .content-wrapper { - background-color: var(--surface-nav-bg); - border-radius: 0; - - @include media-breakpoint-down(lg) { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - width: 100%; - box-sizing: border-box; - padding: 20px 20px 40px; - row-gap: 30px; - } - - @include media-breakpoint-up(lg) { - background-color: var(--surface-main-primary); - border-radius: 15px; - } - - & > .top { - box-sizing: border-box; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: 10px; - background-color: var(--surface-main-primary); - width: 100%; - padding: 20px; - - @include media-breakpoint-down(lg) { - border-radius: 15px; - min-width: 280px; - max-width: calc(100% - 40px); - } - - @include media-breakpoint-up(md) { - padding: 50px; - } - - @include media-breakpoint-up(lg) { - background-color: transparent; - padding: 56px 20px; - border-top-left-radius: 15px; - border-top-right-radius: 15px; - } - - h1, - h3 { - color: var(--text-button-secondary); - } - - h1 { - @include typography(app-title); - } - - h3 { - @include typography(app-welcome-2); - } - } - - & > .bottom { - background-color: var(--surface-nav-bg); - - @include media-breakpoint-up(lg) { - border-radius: 15px; - padding: 30px 50px 50px; - } - - & > .content { - padding-bottom: 40px; - display: flex; - flex-flow: column; - row-gap: 20px; - - h2 { - @include typography(app-welcome-2); - } - - ul { - padding-left: 20px; - box-sizing: border-box; - } - - p, - span, - a, - li { - @include typography(app-body-2); - } - - li > div { - display: flex; - flex-flow: row; - align-items: center; - justify-content: flex-start; - gap: 5px; - } - - .version { - color: var(--text-alert); - @include typography(app-copyright); - } - } - - .controls { - width: 100%; - display: flex; - align-items: center; - justify-content: center; - flex-flow: row; - - .btn { - max-height: 47px; - max-width: 400px; - width: 100%; - } - } - } - } -} - -// modal container setup -.modal-root { - .modal.outdated-components-modal { - min-height: 100dvh; - - @include media-breakpoint-up(lg) { - grid-template-columns: max(920px); - padding-top: 200px; - justify-content: center; - align-items: start; - } - } -} diff --git a/web/src/shared/components/modals/OutdatedComponentsModal/useOutdatedComponentsModal.tsx b/web/src/shared/components/modals/OutdatedComponentsModal/useOutdatedComponentsModal.tsx deleted file mode 100644 index 6b1c9116a..000000000 --- a/web/src/shared/components/modals/OutdatedComponentsModal/useOutdatedComponentsModal.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { createWithEqualityFn } from 'zustand/traditional'; -import type { OutdatedComponents } from '../../../types'; - -const defaultValues: StoreValues = { - componentsInfo: { gateways: [] }, - visible: false, -}; - -export const useOutdatedComponentsModal = createWithEqualityFn((set) => ({ - ...defaultValues, - close: () => set({ visible: false }), - open: (data) => set({ visible: true, componentsInfo: data }), - reset: () => set(defaultValues), -})); - -type Store = StoreMethods & StoreValues; - -type StoreMethods = { - open: (initData: OutdatedComponents) => void; - close: () => void; - reset: () => void; -}; - -type StoreValues = { - visible: boolean; - componentsInfo: OutdatedComponents; -}; diff --git a/web/src/shared/components/modals/UpdateNotificationModal/UpdateNotificationModal.tsx b/web/src/shared/components/modals/UpdateNotificationModal/UpdateNotificationModal.tsx deleted file mode 100644 index d320b26d7..000000000 --- a/web/src/shared/components/modals/UpdateNotificationModal/UpdateNotificationModal.tsx +++ /dev/null @@ -1,95 +0,0 @@ -// eslint-disable-next-line simple-import-sort/imports -import { shallow } from 'zustand/shallow'; -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { Button } from '../../../defguard-ui/components/Layout/Button/Button'; -import { - ButtonSize, - ButtonStyleVariant, -} from '../../../defguard-ui/components/Layout/Button/types'; -import { Modal } from '../../../defguard-ui/components/Layout/modals/Modal/Modal'; -import { useUpdatesStore } from '../../../hooks/store/useUpdatesStore'; -import { RenderMarkdown } from '../../Layout/RenderMarkdown/RenderMarkdown'; -import { UpdateNotificationModalIcons } from './components/UpdateNotificationModalIcons'; -import './style.scss'; -import dayjs from 'dayjs'; - -export const UpdateNotificationModal = () => { - const isOpen = useUpdatesStore((s) => s.modalVisible); - const close = useUpdatesStore((s) => s.closeModal, shallow); - - return ( - { - close(); - }} - className="updates-modal" - id="updates-modal" - disableClose - > - - - ); -}; - -const ModalContent = () => { - const { LL } = useI18nContext(); - const localLL = LL.modals.updatesNotification; - const data = useUpdatesStore((s) => s.update); - const setStore = useUpdatesStore((s) => s.setStore, shallow); - if (!data) return null; - return ( -
    -
    -
    - -

    {localLL.header.title()}

    -
    -
    -

    - {localLL.header.newVersion({ - version: data.version, - })} -

    - {data.critical && ( -
    - - {localLL.header.criticalBadge()} -
    - )} -
    -
    -
    -
    - -
    -
    -
    -
    -
    - ); -}; diff --git a/web/src/shared/components/modals/UpdateNotificationModal/components/UpdateNotificationModalIcons.tsx b/web/src/shared/components/modals/UpdateNotificationModal/components/UpdateNotificationModalIcons.tsx deleted file mode 100644 index 7b3914e9d..000000000 --- a/web/src/shared/components/modals/UpdateNotificationModal/components/UpdateNotificationModalIcons.tsx +++ /dev/null @@ -1,62 +0,0 @@ -type Icon = 'update' | 'alert'; - -type Props = { - variant: Icon; -}; - -export const UpdateNotificationModalIcons = ({ variant }: Props) => { - switch (variant) { - case 'alert': - return ( - - - - - ); - case 'update': - return ( - - - - - - ); - } -}; diff --git a/web/src/shared/components/modals/UpdateNotificationModal/style.scss b/web/src/shared/components/modals/UpdateNotificationModal/style.scss deleted file mode 100644 index 5906bb71e..000000000 --- a/web/src/shared/components/modals/UpdateNotificationModal/style.scss +++ /dev/null @@ -1,206 +0,0 @@ -// modal content setup -#updates-modal { - max-width: 100%; - overflow-x: hidden; - - @include media-breakpoint-up(lg) { - background-color: transparent; - box-shadow: var(--box-shadow); - } - - .content-wrapper { - background-color: var(--surface-nav-bg); - border-radius: 0; - - @include media-breakpoint-down(lg) { - display: flex; - flex-flow: column; - align-items: center; - justify-content: flex-start; - width: 100%; - box-sizing: border-box; - padding: 20px 20px 40px; - row-gap: 30px; - } - - @include media-breakpoint-up(lg) { - background-color: var(--surface-main-primary); - border-radius: 15px; - } - - & > .top { - box-sizing: border-box; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - row-gap: 10px; - background-color: var(--surface-main-primary); - width: 100%; - padding: 20px; - - @include media-breakpoint-down(lg) { - border-radius: 15px; - min-width: 280px; - max-width: calc(100% - 40px); - } - - @include media-breakpoint-up(md) { - padding: 50px; - } - - @include media-breakpoint-up(lg) { - background-color: transparent; - padding: 56px 20px; - border-top-left-radius: 15px; - border-top-right-radius: 15px; - } - - & > div { - display: flex; - flex-flow: row; - align-items: center; - } - - .header { - column-gap: 20px; - - svg { - width: 30px; - height: 30px; - - @include media-breakpoint-up(lg) { - width: 50px; - height: 50px; - } - } - - p { - color: var(--surface-icon-secondary); - - text-wrap: nowrap; - - @include media-breakpoint-down(md) { - font-size: 24px; - } - - @include typography(app-title); - } - } - - .info { - column-gap: 8px; - - @include media-breakpoint-down(md) { - display: flex; - flex-flow: column; - row-gap: 10px; - } - - .version { - color: var(--surface-icon-secondary); - - @include media-breakpoint-down(md) { - font-size: 16px; - } - - @include typography(app-welcome-2); - } - - .badge { - display: flex; - flex-flow: row; - column-gap: 8px; - box-sizing: border-box; - padding: 5px 20px; - border-radius: 5px; - background-color: var(--surface-nav-bg); - align-items: center; - justify-content: center; - min-height: 25px; - color: var(--surface-alert-primary); - - span, - p { - @include typography(app-body-2); - } - } - } - } - - & > .bottom { - background-color: var(--surface-nav-bg); - - @include media-breakpoint-up(lg) { - border-radius: 15px; - padding: 30px 50px 50px; - } - - & > .content { - padding-bottom: 40px; - display: flex; - flex-flow: column; - row-gap: 20px; - - ul { - padding-left: 20px; - box-sizing: border-box; - } - - p, - span, - a, - li { - @include typography(app-body-2); - } - - h1 { - @include typography(app-welcome-1); - } - - h2 { - @include typography(markdown-h4); - } - - h3 { - @include typography(markdown-h5); - } - } - - .controls { - width: 100%; - display: flex; - gap: 20px; - flex-flow: column-reverse; - - @include media-breakpoint-up(md) { - flex-flow: row; - } - - .btn, - a { - width: 100%; - text-decoration: none; - } - - .btn { - max-height: 47px; - } - } - } - } -} - -// modal container setup -.modal-root { - .modal.updates-modal { - min-height: 100dvh; - - @include media-breakpoint-up(lg) { - grid-template-columns: max(920px); - padding-top: 200px; - justify-content: center; - align-items: start; - } - } -} diff --git a/web/src/shared/components/network/DeviceConfigsCard/DeviceConfigsCard.tsx b/web/src/shared/components/network/DeviceConfigsCard/DeviceConfigsCard.tsx deleted file mode 100644 index 448142b50..000000000 --- a/web/src/shared/components/network/DeviceConfigsCard/DeviceConfigsCard.tsx +++ /dev/null @@ -1,181 +0,0 @@ -import './style.scss'; - -import { useQuery } from '@tanstack/react-query'; -import { isUndefined } from 'lodash-es'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import QRCode from 'react-qr-code'; - -import { useI18nContext } from '../../../../i18n/i18n-react'; -import { ActionButton } from '../../../defguard-ui/components/Layout/ActionButton/ActionButton'; -import { ActionButtonVariant } from '../../../defguard-ui/components/Layout/ActionButton/types'; -import { ExpandableCard } from '../../../defguard-ui/components/Layout/ExpandableCard/ExpandableCard'; -import { LoaderSpinner } from '../../../defguard-ui/components/Layout/LoaderSpinner/LoaderSpinner'; -import { Select } from '../../../defguard-ui/components/Layout/Select/Select'; -import { - type SelectOption, - type SelectSelectedValue, - SelectSizeVariant, -} from '../../../defguard-ui/components/Layout/Select/types'; -import useApi from '../../../hooks/useApi'; -import { useClipboard } from '../../../hooks/useClipboard'; -import { QueryKeys } from '../../../queries'; -import { downloadWGConfig } from '../../../utils/downloadWGConfig'; -import type { DeviceConfigsCardNetworkInfo } from './types'; - -type Props = { - deviceId: number; - deviceName: string; - userId: number; - // if added it will insert it into configs instead of insering public key - privateKey?: string; - publicKey: string; - networks: DeviceConfigsCardNetworkInfo[]; -}; - -/*Expandable card variant that shows wireguard configs in qrcode form and allows for copy and download of them*/ -export const DeviceConfigsCard = ({ - userId, - deviceId, - deviceName, - privateKey, - publicKey, - networks, -}: Props) => { - const { writeToClipboard } = useClipboard(); - const { LL } = useI18nContext(); - const localLL = LL.components.deviceConfigsCard; - const { - device: { downloadDeviceConfig }, - } = useApi(); - - const [selectedConfig, setSelectedConfig] = useState(); - const [selectedNetwork, setSelectedNetwork] = useState(networks[0].networkId); - - const queryParams = useMemo(() => { - return { - device_id: deviceId, - network_id: selectedNetwork, - userId, - }; - }, [selectedNetwork, deviceId, userId]); - - const { isLoading: loadingConfig, data: deviceConfigData } = useQuery({ - queryFn: () => - downloadDeviceConfig({ - network_id: queryParams.network_id, - device_id: queryParams.device_id, - }), - queryKey: [QueryKeys.FETCH_DEVICE_CONFIG, queryParams], - enabled: !!queryParams, - refetchOnMount: true, - }); - - useEffect(() => { - if (deviceConfigData) { - setSelectedConfig(deviceConfigData); - } - }, [deviceConfigData]); - - const getSelectOptions = useMemo((): SelectOption[] => { - return networks.map((n) => ({ - value: n.networkId, - label: n.networkName, - key: n.networkId, - })); - }, [networks]); - - const renderSelected = useCallback( - (selected: number): SelectSelectedValue => { - const option = getSelectOptions.find((o) => o.value === selected); - if (!option) throw Error("Selected value doesn't exist"); - return { - key: option.key, - displayValue: option.label, - }; - }, - [getSelectOptions], - ); - - const getExpandCardExtras = useMemo(() => { - return ( - + +

    {m.modal_add_user_device_manual_download_explain()}

    + + +
    + + ); +}; diff --git a/web/src/shared/components/ModalDeviceConfigSection/style.scss b/web/src/shared/components/ModalDeviceConfigSection/style.scss new file mode 100644 index 000000000..4f30fe430 --- /dev/null +++ b/web/src/shared/components/ModalDeviceConfigSection/style.scss @@ -0,0 +1,16 @@ +.modal-device-config-section { + display: grid; + grid-template-columns: 160px 1fr; + grid-template-rows: 1fr; + column-gap: var(--spacing-4xl); + + & > .right { + width: 100%; + + & > p { + font: var(--t-body-xs-500); + color: var(--fg-muted); + padding-bottom: var(--spacing-md); + } + } +} diff --git a/web/src/shared/components/modals/AddUserDeviceModal/AddUserDeviceModal.tsx b/web/src/shared/components/modals/AddUserDeviceModal/AddUserDeviceModal.tsx index d09ef103c..9d7a12fe8 100644 --- a/web/src/shared/components/modals/AddUserDeviceModal/AddUserDeviceModal.tsx +++ b/web/src/shared/components/modals/AddUserDeviceModal/AddUserDeviceModal.tsx @@ -14,6 +14,21 @@ export const AddUserDeviceModal = () => { useShallow((s) => [s.close, s.reset]), ); + const activeStep = useAddUserDeviceModal((s) => s.step); + + const modalTitle = useMemo(() => { + switch (activeStep) { + case 'start-choice': + return m.modal_add_user_device_title_add(); + case 'client-setup': + return m.modal_add_user_device_title_add(); + case 'manual-setup': + return m.modal_add_user_device_title_manual(); + case 'manual-configuration': + return m.modal_add_user_device_title_save(); + } + }, [activeStep]); + // biome-ignore lint/correctness/useExhaustiveDependencies: onUnmount useEffect(() => { return () => { @@ -25,7 +40,7 @@ export const AddUserDeviceModal = () => { { closeModal(); diff --git a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalClientConfigStep/AddDeviceModalClientConfigStep.tsx b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalClientConfigStep/AddDeviceModalClientConfigStep.tsx index f372410d2..48e42af0c 100644 --- a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalClientConfigStep/AddDeviceModalClientConfigStep.tsx +++ b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalClientConfigStep/AddDeviceModalClientConfigStep.tsx @@ -184,11 +184,8 @@ export const AddDeviceModalClientConfigStep = () => { - isOpen - ? m.modal_add_user_device_client_fold_open() - : m.modal_add_user_device_client_fold_closed() - } + textClose={m.modal_add_user_device_client_fold_open()} + textOpen={m.modal_add_user_device_client_fold_closed()} open={manualOpen} onChange={setManualOpen} /> diff --git a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualDownloadStep/AddDeviceModalManualDownloadStep.tsx b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualDownloadStep/AddDeviceModalManualDownloadStep.tsx index fd2780f5f..dcf7940c9 100644 --- a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualDownloadStep/AddDeviceModalManualDownloadStep.tsx +++ b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualDownloadStep/AddDeviceModalManualDownloadStep.tsx @@ -1,11 +1,24 @@ import { m } from '../../../../../../paraglide/messages'; +import { Divider } from '../../../../../defguard-ui/components/Divider/Divider'; import { ModalControls } from '../../../../../defguard-ui/components/ModalControls/ModalControls'; import { useAddUserDeviceModal } from '../../store/useAddUserDeviceModal'; import './style.scss'; +import { isPresent } from '../../../../../defguard-ui/utils/isPresent'; +import { ModalDeviceConfigSection } from '../../../../ModalDeviceConfigSection/ModalDeviceConfigSection'; export const AddDeviceModalManualDownloadStep = () => { + const response = useAddUserDeviceModal((s) => s.createDeviceResponse); + const keys = useAddUserDeviceModal((s) => s.manualConfig); + if (!isPresent(response) || !isPresent(keys)) + throw new Error('Required store data not present during render'); + return ( -
    +
    +

    {m.modal_add_user_device_manual_download_warn_title()}

    +

    {m.modal_add_user_device_manual_download_warn_content()}

    + + + p { + &:nth-child(1) { + font: var(--t-body-sm-500); + } + + &:nth-child(2) { + font: var(--t-body-sm-400); + color: var(--fg-muted); + } + } + + & > .divider { + padding: var(--spacing-2xl) 0; + } } diff --git a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx index 6d8481f15..e2c89ca38 100644 --- a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx +++ b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx @@ -6,10 +6,13 @@ import { useAppForm, withForm } from '../../../../../defguard-ui/form'; import { formChangeLogic } from '../../../../../form'; import './style.scss'; import { useStore } from '@tanstack/react-form'; +import { useMutation } from '@tanstack/react-query'; import { useMemo } from 'react'; +import api from '../../../../../api/api'; import { SizedBox } from '../../../../../defguard-ui/components/SizedBox/SizedBox'; import { ThemeSpacing } from '../../../../../defguard-ui/types'; import { patternValidWireguardKey } from '../../../../../patterns'; +import { generateWGKeys } from '../../../../../utils/generateWGKeys'; import { useAddUserDeviceModal } from '../../store/useAddUserDeviceModal'; import { AddUserDeviceModalStep } from '../../types'; @@ -55,6 +58,14 @@ const defaultValues: FormFields = { export const AddDeviceModalManualSetupStep = () => { const devices = useAddUserDeviceModal((s) => s.devices); + const username = useAddUserDeviceModal((s) => s.user?.username as string); + + const { mutateAsync: createDevice } = useMutation({ + mutationFn: api.device.addDevice, + meta: { + invalidate: [['user', username]], + }, + }); const formSchema = useMemo( () => getFormSchema((devices ?? []).map((d) => d.name)), @@ -68,6 +79,37 @@ export const AddDeviceModalManualSetupStep = () => { onSubmit: formSchema, onChange: formSchema, }, + onSubmit: async ({ value }) => { + let publicKey: string; + let privateKey: string | undefined; + + if (value.genChoice === 'auto') { + const keys = generateWGKeys(); + publicKey = keys.publicKey; + privateKey = keys.privateKey; + } else { + publicKey = value.publicKey as string; + } + + const createResponse = await createDevice({ + name: value.name, + username, + wireguard_pubkey: publicKey, + }); + + if (!createResponse.data.configs.length) { + useAddUserDeviceModal.getState().close(); + } + + useAddUserDeviceModal.setState({ + step: AddUserDeviceModalStep.ManualConfiguration, + manualConfig: { + publicKey, + privateKey, + }, + createDeviceResponse: createResponse.data, + }); + }, }); return ( @@ -114,18 +156,21 @@ export const AddDeviceModalManualSetupStep = () => { { useAddUserDeviceModal.getState().close(); }, }} submitProps={{ text: m.controls_continue(), + loading: form.state.isSubmitting, onClick: () => { form.handleSubmit(); }, }} >
    -
    - -
    +
    ; + createDeviceResponse?: AddDeviceResponse; manualConfig?: { publicKey: string; privateKey?: string; @@ -37,7 +34,7 @@ const defaults: StoreValues = { step: AddUserDeviceModalStep.StartChoice, devices: undefined, user: undefined, - networks: undefined, + createDeviceResponse: undefined, manualConfig: undefined, enrollment: undefined, }; diff --git a/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx b/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx new file mode 100644 index 000000000..c9b3ab075 --- /dev/null +++ b/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx @@ -0,0 +1,142 @@ +import { useStore } from '@tanstack/react-form'; +import { useMutation } from '@tanstack/react-query'; +import { cloneDeep } from 'lodash-es'; +import { useEffect, useMemo, useState } from 'react'; +import z from 'zod'; +import { m } from '../../../../paraglide/messages'; +import api from '../../../api/api'; +import { Modal } from '../../../defguard-ui/components/Modal/Modal'; +import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; +import { SizedBox } from '../../../defguard-ui/components/SizedBox/SizedBox'; +import { useAppForm } from '../../../defguard-ui/form'; +import { ThemeSpacing } from '../../../defguard-ui/types'; +import { isPresent } from '../../../defguard-ui/utils/isPresent'; +import { formChangeLogic } from '../../../form'; +import { + closeModal, + subscribeCloseModal, + subscribeOpenModal, +} from '../../../hooks/modalControls/modalsSubjects'; +import { ModalName } from '../../../hooks/modalControls/modalTypes'; +import type { OpenEditDeviceModal } from '../../../hooks/modalControls/types'; +import { patternValidWireguardKey } from '../../../patterns'; + +const modalName = ModalName.EditUserDevice; + +export const EditUserDeviceModal = () => { + const [isOpen, setOpen] = useState(false); + const [modalData, setModalData] = useState(null); + + useEffect(() => { + const openSub = subscribeOpenModal(modalName, (data) => { + setModalData(data); + setOpen(true); + }); + const closeSub = subscribeCloseModal(modalName, () => setOpen(false)); + return () => { + openSub.unsubscribe(); + closeSub.unsubscribe(); + }; + }, []); + + return ( + setOpen(false)} + afterClose={() => { + setModalData(null); + }} + > + {isPresent(modalData) && } + + ); +}; + +const getFormSchema = (names: string[]) => + z.object({ + name: z + .string() + .trim() + .min(1, m.form_error_required()) + .refine((val) => !names.includes(val), m.form_error_name_reserved()), + publicKey: z + .string() + .length(44, m.form_error_invalid()) + .regex(patternValidWireguardKey, m.form_error_invalid()), + }); + +const ModalContent = ({ device, reservedNames, username }: OpenEditDeviceModal) => { + const formSchema = useMemo( + () => getFormSchema(reservedNames.filter((name) => name !== device.name)), + [reservedNames, device.name], + ); + + const { mutateAsync } = useMutation({ + mutationFn: api.device.editDevice, + meta: { + invalidate: ['user', username], + }, + onSuccess: () => { + closeModal(modalName); + }, + }); + + const form = useAppForm({ + defaultValues: { + name: device.name, + publicKey: device.wireguard_pubkey, + }, + validationLogic: formChangeLogic, + validators: { + onSubmit: formSchema, + onChange: formSchema, + }, + onSubmit: async ({ value }) => { + const copy = cloneDeep(device); + copy.name = value.name; + copy.wireguard_pubkey = value.publicKey; + mutateAsync(copy); + }, + }); + + const isSubmitting = useStore(form.store, (s) => s.isSubmitting); + + return ( + <> +
    { + e.stopPropagation(); + e.preventDefault(); + form.handleSubmit(); + }} + > + + + {(field) => } + + + + {(field) => ( + + )} + + +
    + {}, + }} + submitProps={{ + text: m.controls_save_changes(), + loading: isSubmitting, + onClick: () => { + form.handleSubmit(); + }, + }} + /> + + ); +}; diff --git a/web/src/shared/components/modals/UserDeviceConfigModal/UserDeviceConfigModal.tsx b/web/src/shared/components/modals/UserDeviceConfigModal/UserDeviceConfigModal.tsx new file mode 100644 index 000000000..3f7a1a511 --- /dev/null +++ b/web/src/shared/components/modals/UserDeviceConfigModal/UserDeviceConfigModal.tsx @@ -0,0 +1,65 @@ +import { m } from '../../../../paraglide/messages'; +import type { AddDeviceResponse } from '../../../api/types'; +import { Divider } from '../../../defguard-ui/components/Divider/Divider'; +import { Modal } from '../../../defguard-ui/components/Modal/Modal'; +import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; +import { isPresent } from '../../../defguard-ui/utils/isPresent'; +import { + closeModal, + subscribeCloseModal, + subscribeOpenModal, +} from '../../../hooks/modalControls/modalsSubjects'; +import { ModalName } from '../../../hooks/modalControls/modalTypes'; +import { ModalDeviceConfigSection } from '../../ModalDeviceConfigSection/ModalDeviceConfigSection'; +import './style.scss'; +import { useEffect, useState } from 'react'; + +const modalName = ModalName.UserDeviceConfig; + +export const UserDeviceConfigModal = () => { + const [isOpen, setOpen] = useState(false); + const [modalData, setModalData] = useState(null); + + useEffect(() => { + const openSub = subscribeOpenModal(modalName, (data) => { + setModalData(data); + setOpen(true); + }); + const closeSub = subscribeCloseModal(modalName, () => setOpen(false)); + return () => { + openSub.unsubscribe(); + closeSub.unsubscribe(); + }; + }, []); + + return ( + setOpen(false)} + afterClose={() => { + setModalData(null); + }} + > + {isPresent(modalData) && } + + ); +}; + +const ModalContent = ({ data }: { data: AddDeviceResponse }) => { + return ( + <> + + + { + closeModal(modalName); + }, + }} + /> + + ); +}; diff --git a/web/src/shared/components/modals/UserDeviceConfigModal/style.scss b/web/src/shared/components/modals/UserDeviceConfigModal/style.scss new file mode 100644 index 000000000..732762229 --- /dev/null +++ b/web/src/shared/components/modals/UserDeviceConfigModal/style.scss @@ -0,0 +1,9 @@ +#user-device-config-modal { + .divider { + padding: var(--spacing-2xl) 0; + } + + .modal-controls { + padding-top: 0; + } +} diff --git a/web/src/shared/defguard-ui b/web/src/shared/defguard-ui index fe1d74c3b..1681c0f92 160000 --- a/web/src/shared/defguard-ui +++ b/web/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit fe1d74c3b19cc1336696f1cfec85e3d4bbafc90d +Subproject commit 1681c0f9223ef8cf35b925399d3d73da4cb95e1a diff --git a/web/src/shared/hooks/modalControls/modalTypes.ts b/web/src/shared/hooks/modalControls/modalTypes.ts index 984c32ff4..4521f38ba 100644 --- a/web/src/shared/hooks/modalControls/modalTypes.ts +++ b/web/src/shared/hooks/modalControls/modalTypes.ts @@ -1,5 +1,6 @@ import z from 'zod'; -import type { User } from '../../api/types'; +import type { AddDeviceResponse, User } from '../../api/types'; +import type { OpenEditDeviceModal } from './types'; export const ModalName = { ChangePassword: 'changePassword', @@ -7,6 +8,8 @@ export const ModalName = { RecoveryCodes: 'recoveryCodes', EmailMfaSetup: 'emailMfaSetup', WebauthnSetup: 'webauthnSetup', + EditUserDevice: 'editUserDevice', + UserDeviceConfig: 'userDeviceConfig', } as const; export type ModalNameValue = (typeof ModalName)[keyof typeof ModalName]; @@ -23,6 +26,14 @@ const modalOpenArgsSchema = z.discriminatedUnion('name', [ z.object({ name: z.literal(ModalName.RecoveryCodes), data: z.array(z.string()) }), z.object({ name: z.literal(ModalName.EmailMfaSetup) }), z.object({ name: z.literal(ModalName.WebauthnSetup) }), + z.object({ + name: z.literal(ModalName.EditUserDevice), + data: z.custom(), + }), + z.object({ + name: z.literal(ModalName.UserDeviceConfig), + data: z.custom(), + }), ]); export type ModalOpenEvent = z.infer; diff --git a/web/src/shared/hooks/modalControls/types.ts b/web/src/shared/hooks/modalControls/types.ts new file mode 100644 index 000000000..71c6ceefb --- /dev/null +++ b/web/src/shared/hooks/modalControls/types.ts @@ -0,0 +1,7 @@ +import type { Device } from '../../api/types'; + +export interface OpenEditDeviceModal { + device: Device; + reservedNames: string[]; + username: string; +} diff --git a/web/src/shared/utils/displayDate.ts b/web/src/shared/utils/displayDate.ts new file mode 100644 index 000000000..77fc43e75 --- /dev/null +++ b/web/src/shared/utils/displayDate.ts @@ -0,0 +1,10 @@ +import dayjs from 'dayjs'; + +const defaultFormat = 'DD/MM/YYYY | HH:mm'; + +export const displayDate = (date: string | number) => { + if (typeof date === 'number') { + return dayjs.unix(date).local().format(defaultFormat); + } + return dayjs.utc(date).local().format(defaultFormat); +}; diff --git a/web/src/shared/utils/download.ts b/web/src/shared/utils/download.ts index 2b34e9b95..b8df8cd70 100644 --- a/web/src/shared/utils/download.ts +++ b/web/src/shared/utils/download.ts @@ -1,6 +1,10 @@ export const downloadText = (content: string, filename: string, extension?: 'txt') => { extension = extension ?? 'txt'; const blob = new Blob([content], { type: 'text/plain;charset=utf-8' }); + downloadFile(blob, filename, extension); +}; + +export const downloadFile = (blob: Blob, filename: string, extension: string) => { const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; @@ -9,5 +13,9 @@ export const downloadText = (content: string, filename: string, extension?: 'txt document.body.appendChild(a); a.click(); document.body.removeChild(a); - URL.revokeObjectURL(url); + + // workaround for firefox + setTimeout(() => { + URL.revokeObjectURL(url); + }, 5_000); }; diff --git a/web/src/shared/utils/generateWGKeys.ts b/web/src/shared/utils/generateWGKeys.ts new file mode 100644 index 000000000..6e9818559 --- /dev/null +++ b/web/src/shared/utils/generateWGKeys.ts @@ -0,0 +1,9 @@ +import { encode } from '@stablelib/base64'; +import { generateKeyPair } from '@stablelib/x25519'; + +export const generateWGKeys = () => { + const keys = generateKeyPair(); + const publicKey = encode(keys.publicKey); + const privateKey = encode(keys.secretKey); + return { publicKey, privateKey }; +}; diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json index 38a4444e0..9d1bae353 100644 --- a/web/tsconfig.app.json +++ b/web/tsconfig.app.json @@ -32,5 +32,8 @@ }, "include": [ "src" + ], + "exclude": [ + "node_modules", ] } From eeb79727caf63b26bcfefca8a4900ca88c1e5c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Mon, 3 Nov 2025 16:07:45 +0100 Subject: [PATCH 023/112] add user profile auth keys tab --- .github/workflows/build-webnext.yml | 26 - .../workflows/staging-deployment-webnext.yml | 23 - web/biome.json | 2 +- web/messages/en/common.json | 3 + web/messages/en/form.json | 5 +- web/messages/en/modal.json | 5 +- web/messages/en/profile.json | 13 +- web/package.json | 16 +- web/pnpm-lock.yaml | 521 +++++++++--------- .../UserProfilePage/UserProfilePage.tsx | 76 ++- .../hooks/useUserProfilePage.tsx | 15 +- .../user-profile/UserProfilePage/style.scss | 4 + .../ProfileAuthKeysTab/ProfileAuthKeysTab.tsx | 58 ++ .../ProfileAuthKeysTable.tsx | 239 ++++++++ .../AddAuthKeyModal/AddAuthKeyModal.tsx | 162 ++++++ .../modals/AddAuthKeyModal/style.scss | 5 + .../RenameAuthKeyModal/RenameAuthKeyModal.tsx | 123 +++++ .../ProfileAuthCard/ProfileAuthCard.tsx | 40 +- .../components/ProfileAuthCard/style.scss | 36 ++ .../ProfileDevicesTable.tsx | 8 +- .../UserProfilePage/tabs/types.ts | 8 + web/src/routes/_authorized/user/$username.tsx | 24 +- web/src/shared/api/api.ts | 12 + web/src/shared/api/types.ts | 37 ++ web/src/shared/defguard-ui | 2 +- .../shared/hooks/modalControls/modalTypes.ts | 14 +- web/src/shared/hooks/modalControls/types.ts | 6 + web/src/shared/query.ts | 9 + web/src/shared/utils/download.ts | 6 +- web/src/shared/utils/enumFromObjValues.ts | 5 + web/src/shared/utils/formatFileName.ts | 2 + 31 files changed, 1154 insertions(+), 351 deletions(-) delete mode 100644 .github/workflows/build-webnext.yml delete mode 100644 .github/workflows/staging-deployment-webnext.yml create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/ProfileAuthKeysTab.tsx create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/ProfileAuthKeysTable.tsx create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/modals/AddAuthKeyModal/AddAuthKeyModal.tsx create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/modals/AddAuthKeyModal/style.scss create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/modals/RenameAuthKeyModal/RenameAuthKeyModal.tsx create mode 100644 web/src/pages/user-profile/UserProfilePage/tabs/types.ts create mode 100644 web/src/shared/utils/enumFromObjValues.ts create mode 100644 web/src/shared/utils/formatFileName.ts diff --git a/.github/workflows/build-webnext.yml b/.github/workflows/build-webnext.yml deleted file mode 100644 index 062adca64..000000000 --- a/.github/workflows/build-webnext.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Build webnext -permissions: - contents: read - id-token: write - packages: write - -on: - push: - branches: - - webnext - -jobs: - build-current: - if: ${{ github.event_name != 'pull_request' }} - uses: ./.github/workflows/build-docker.yml - with: - tags: | - type=ref,event=branch - type=sha - - trigger-staging-deploy: - needs: build-current - if: ${{ github.event_name != 'pull_request' }} - uses: ./.github/workflows/staging-deployment-webnext.yml - secrets: inherit -# FIXME: Remove this yml when new UI is done and merged to dev diff --git a/.github/workflows/staging-deployment-webnext.yml b/.github/workflows/staging-deployment-webnext.yml deleted file mode 100644 index 6b87b5fc0..000000000 --- a/.github/workflows/staging-deployment-webnext.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy to release staging environment -permissions: - contents: read -on: - workflow_call: - -jobs: - deploy-staging: - if: ${{ github.event_name != 'pull_request' }} - runs-on: [self-hosted, Linux, X64] - environment: STAGING - env: - KUBE_HOST: ${{ secrets.KUBE_HOST }} - KUBE_CERTIFICATE: ${{ secrets.KUBE_CERTIFICATE }} - KUBE_TOKEN: ${{ secrets.KUBE_TOKEN }} - steps: - - name: Add SHORT_SHA env variable - run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-7`" >> $GITHUB_ENV - - name: Deploy new image version - uses: actions-hub/kubectl@v1.30.3 - with: - args: --namespace defguard-staging set image deployment/defguard defguard=ghcr.io/defguard/defguard:sha-${{ env.SHORT_SHA }} -# FIXME: Remove this yml when new UI is done and merged to dev diff --git a/web/biome.json b/web/biome.json index 8d67fdd07..bfaf40f57 100644 --- a/web/biome.json +++ b/web/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.2/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.3/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/web/messages/en/common.json b/web/messages/en/common.json index 3bb358191..e386b0a9e 100644 --- a/web/messages/en/common.json +++ b/web/messages/en/common.json @@ -8,6 +8,9 @@ "misc_for": "for", "misc_clipboard_copy": "Copied to clipboard!", "misc_secret": "Secret", + "controls_copy": "Copy", + "controls_download": "Download", + "controls_rename": "Rename", "controls_close": "Close", "controls_back": "Back", "controls_delete": "Delete", diff --git a/web/messages/en/form.json b/web/messages/en/form.json index eed5c18f8..ee2356077 100644 --- a/web/messages/en/form.json +++ b/web/messages/en/form.json @@ -33,6 +33,9 @@ "form_label_url": "URL", "form_label_token": "Token", "form_label_device_name": "Device name", + "form_label_key": "Key", + "form_label_name": "Name", "form_label_public_key": "Public key", - "form_label_device_public_key": "Device public key (wireguard)" + "form_label_device_public_key": "Device public key (wireguard)", + "form_label_type": "Type" } diff --git a/web/messages/en/modal.json b/web/messages/en/modal.json index 376b291c3..931fd5226 100644 --- a/web/messages/en/modal.json +++ b/web/messages/en/modal.json @@ -60,5 +60,8 @@ "modal_add_user_device_manual_download_actions_download_one": "This location only", "modal_add_user_device_manual_download_actions_download_all": "All locations", "modal_edit_user_device_title": "Edit device", - "modal_user_device_config_title": "Device VPN configuration" + "modal_user_device_config_title": "Device VPN configuration", + "modal_add_auth_key_title": "Add authentication key", + "modal_add_auth_key_submit": "Add key", + "modal_rename_auth_key_title": "Rename authentication key" } diff --git a/web/messages/en/profile.json b/web/messages/en/profile.json index ab93ee8ce..465ab7300 100644 --- a/web/messages/en/profile.json +++ b/web/messages/en/profile.json @@ -4,6 +4,8 @@ "profile_title": "{name} Profile", "profile_tabs_details": "Details", "profile_tabs_devices": "Devices", + "profile_tabs_auth_keys": "Authentication Keys", + "profile_tabs_api": "API Tokens", "profile_general_card_title": "General", "profile_auth_card_title": "Password and authentication", "profile_auth_card_section_password": "Password settings", @@ -17,6 +19,8 @@ "profile_auth_card_delete_passkey": "Delete passkey", "profile_auth_card_password_change": "Change password", "profile_auth_card_make_default": "Make default", + "profile_auth_card_biometric_title": "Biometric authentication devices", + "profile_auth_card_devices_link": "Devices", "profile_apps_no_data_title": "No authorized apps", "profile_apps_no_data_subtitle": "Applications you allow to log in with Defguard will appear here.", "profile_apps_card_title": "Authorized apps", @@ -32,5 +36,12 @@ "profile_devices_col_location_connected_from": "Last connected from", "profile_devices_col_location_connected": "Last connected", "profile_devices_col_never_connected": "Never connected", - "profile_devices_menu_show_config": "Show configuration" + "profile_devices_menu_show_config": "Show configuration", + "profile_auth_keys_no_data_title": "You don't have any added keys.", + "profile_auth_keys_no_data_subtitle": "To add one, click the button below", + "profile_auth_keys_no_data_cta": "Add new key", + "profile_auth_keys_header_title": "Authentication keys", + "profile_auth_keys_table_col_name": "Key name", + "profile_auth_keys_table_menu_download_ssh": "Download SSH key", + "profile_auth_keys_table_menu_download_gpg": "Download GPG key" } diff --git a/web/package.json b/web/package.json index e5b3ce8b3..ee13d63e7 100644 --- a/web/package.json +++ b/web/package.json @@ -21,10 +21,10 @@ "@stablelib/x25519": "^2.0.1", "@tanstack/react-devtools": "^0.8.0", "@tanstack/react-form": "^1.23.8", - "@tanstack/react-query": "^5.90.5", + "@tanstack/react-query": "^5.90.6", "@tanstack/react-query-devtools": "^5.90.2", - "@tanstack/react-router": "^1.133.36", - "@tanstack/react-router-devtools": "^1.133.36", + "@tanstack/react-router": "^1.134.9", + "@tanstack/react-router-devtools": "^1.134.9", "@tanstack/react-table": "^8.21.3", "@tanstack/react-virtual": "^3.13.12", "@uidotdev/usehooks": "^2.4.1", @@ -44,20 +44,20 @@ "zustand": "^5.0.8" }, "devDependencies": { - "@biomejs/biome": "2.3.2", + "@biomejs/biome": "2.3.3", "@inlang/paraglide-js": "2.4.0", "@tanstack/devtools-vite": "^0.3.11", - "@tanstack/router-plugin": "^1.133.36", + "@tanstack/router-plugin": "^1.134.9", "@types/lodash-es": "^4.17.12", - "@types/node": "^24.9.2", + "@types/node": "^24.10.0", "@types/qs": "^6.14.0", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "@vitejs/plugin-react-swc": "^4.2.0", "autoprefixer": "^10.4.21", - "globals": "^16.4.0", + "globals": "^16.5.0", "prettier": "^3.6.2", - "sass": "^1.93.2", + "sass": "^1.93.3", "sharp": "^0.34.4", "stylelint": "^16.25.0", "stylelint-config-standard-scss": "^16.0.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 8797f2339..3a603e822 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -33,17 +33,17 @@ importers: specifier: ^1.23.8 version: 1.23.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': - specifier: ^5.90.5 - version: 5.90.5(react@19.2.0) + specifier: ^5.90.6 + version: 5.90.6(react@19.2.0) '@tanstack/react-query-devtools': specifier: ^5.90.2 - version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) + version: 5.90.2(@tanstack/react-query@5.90.6(react@19.2.0))(react@19.2.0) '@tanstack/react-router': - specifier: ^1.133.36 - version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.134.9 + version: 1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': - specifier: ^1.133.36 - version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) + specifier: ^1.134.9 + version: 1.134.9(@tanstack/react-router@1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.134.9)(@types/node@24.10.0)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) '@tanstack/react-table': specifier: ^8.21.3 version: 8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -97,20 +97,20 @@ importers: version: 5.0.8(@types/react@19.2.2)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) devDependencies: '@biomejs/biome': - specifier: 2.3.2 - version: 2.3.2 + specifier: 2.3.3 + version: 2.3.3 '@tanstack/devtools-vite': specifier: ^0.3.11 - version: 0.3.11(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6)) + version: 0.3.11(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6)) '@tanstack/router-plugin': - specifier: ^1.133.36 - version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6)) + specifier: ^1.134.9 + version: 1.134.9(@tanstack/react-router@1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6)) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^24.9.2 - version: 24.9.2 + specifier: ^24.10.0 + version: 24.10.0 '@types/qs': specifier: ^6.14.0 version: 6.14.0 @@ -122,19 +122,19 @@ importers: version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react-swc': specifier: ^4.2.0 - version: 4.2.0(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6)) + version: 4.2.0(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) globals: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^16.5.0 + version: 16.5.0 prettier: specifier: ^3.6.2 version: 3.6.2 sass: - specifier: ^1.93.2 - version: 1.93.2 + specifier: ^1.93.3 + version: 1.93.3 sharp: specifier: ^0.34.4 version: 0.34.4 @@ -155,10 +155,10 @@ importers: version: 8.46.2(eslint@9.37.0)(typescript@5.9.3) vite: specifier: ^7.1.12 - version: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + version: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) vite-plugin-image-optimizer: specifier: ^2.0.3 - version: 2.0.3(sharp@0.34.4)(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6)) + version: 2.0.3(sharp@0.34.4)(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6)) packages: @@ -297,55 +297,55 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.3.2': - resolution: {integrity: sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==} + '@biomejs/biome@2.3.3': + resolution: {integrity: sha512-zn/P1pRBCpDdhi+VNSMnpczOz9DnqzOA2c48K8xgxjDODvi5O8gs3a2H233rck/5HXpkFj6TmyoqVvxirZUnvg==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.3.2': - resolution: {integrity: sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==} + '@biomejs/cli-darwin-arm64@2.3.3': + resolution: {integrity: sha512-5+JtW6RKmjqL9un0UtHV0ezOslAyYBzyl5ZhYiu7GHesX2x8NCDl6tXYrenv9m7e1RLbkO5E5Kh04kseMtz6lw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.3.2': - resolution: {integrity: sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==} + '@biomejs/cli-darwin-x64@2.3.3': + resolution: {integrity: sha512-UPmKRalkHicvIpeccuKqq+/gA2HYV8FUnAEDJnqYBlGlycKqe6xrovWqvWTE4TTNpIFf4UQyuaDzLkN6Kz6tbA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.3.2': - resolution: {integrity: sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==} + '@biomejs/cli-linux-arm64-musl@2.3.3': + resolution: {integrity: sha512-KhCDMV+V7Yu72v40ssGJTHuv/j0n7JQ6l0s/c+EMcX5zPYLMLr4XpmI+WXhp4Vfkz0T5Xnh5wbrTBI3f2UTpjQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.3.2': - resolution: {integrity: sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==} + '@biomejs/cli-linux-arm64@2.3.3': + resolution: {integrity: sha512-zeiKwALNB/hax7+LLhCYqhqzlWdTfgE9BGkX2Z8S4VmCYnGFrf2fON/ec6KCos7mra5MDm6fYICsEWN2+HKZhw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.3.2': - resolution: {integrity: sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==} + '@biomejs/cli-linux-x64-musl@2.3.3': + resolution: {integrity: sha512-IyqQ+jYzU5MVy9CK5NV0U+NnUMPUAhYMrB/x4QgL/Dl1MqzBVc61bHeyhLnKM6DSEk73/TQYrk/8/QmVHudLdQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.3.2': - resolution: {integrity: sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==} + '@biomejs/cli-linux-x64@2.3.3': + resolution: {integrity: sha512-05CjPLbvVVU8J6eaO6iSEoA0FXKy2l6ddL+1h/VpiosCmIp3HxRKLOa1hhC1n+D13Z8g9b1DtnglGtM5U3sTag==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.3.2': - resolution: {integrity: sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==} + '@biomejs/cli-win32-arm64@2.3.3': + resolution: {integrity: sha512-NtlLs3pdFqFAQYZjlEHKOwJEn3GEaz7rtR2oCrzaLT2Xt3Cfd55/VvodQ5V+X+KepLa956QJagckJrNL+DmumQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.3.2': - resolution: {integrity: sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==} + '@biomejs/cli-win32-x64@2.3.3': + resolution: {integrity: sha512-klJKPPQvUk9Rlp0Dd56gQw/+Wt6uUprHdHWtbDC93f3Iv+knA2tLWpcYoOZJgPV+9s+RBmYv0DGy4mUlr20esg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -353,11 +353,11 @@ packages: '@cacheable/memoize@2.0.3': resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==} - '@cacheable/memory@2.0.3': - resolution: {integrity: sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==} + '@cacheable/memory@2.0.4': + resolution: {integrity: sha512-cCmJKCKlT1t7hNBI1+gFCwmKFd9I4pS3zqBeNGXTSODnpa0EeDmORHY8oEMTuozfdg3cgsVh8ojLaPYb6eC7Cg==} - '@cacheable/utils@2.1.0': - resolution: {integrity: sha512-ZdxfOiaarMqMj+H7qwlt5EBKWaeGihSYVHdQv5lUsbn8MJJOTW82OIwirQ39U5tMZkNvy3bQE+ryzC+xTAb9/g==} + '@cacheable/utils@2.2.0': + resolution: {integrity: sha512-7xaQayO3msdVcxXLYcLU5wDqJBNdQcPPPHr6mdTEIQI7N7TbtSVVTpWOTfjyhg0L6AQwQdq7miKdWtTDBoBldQ==} '@csstools/css-parser-algorithms@3.0.5': resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} @@ -385,161 +385,161 @@ packages: '@dual-bundle/import-meta-resolve@4.2.1': resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1179,8 +1179,8 @@ packages: resolution: {integrity: sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg==} engines: {node: '>=18'} - '@tanstack/query-core@5.90.5': - resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} + '@tanstack/query-core@5.90.6': + resolution: {integrity: sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==} '@tanstack/query-devtools@5.90.1': resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} @@ -1209,21 +1209,21 @@ packages: '@tanstack/react-query': ^5.90.2 react: ^18 || ^19 - '@tanstack/react-query@5.90.5': - resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} + '@tanstack/react-query@5.90.6': + resolution: {integrity: sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.133.36': - resolution: {integrity: sha512-il+DNzc8Ia54N+HOmIlY10NBk7rp0N7Nyysk8eeC1ZSIXImC3MPchdAspwioE6DI7WfK+MfpTav2m9zoOL8wSQ==} + '@tanstack/react-router-devtools@1.134.9': + resolution: {integrity: sha512-HwAOPK002wlnNgoHdYwchDqU9STl2ehQZOrTXoVOPgkUz5MMAHx/qcC/QZaJSU4znme4A081v8g7R8dI1aVNrw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.133.36 + '@tanstack/react-router': ^1.134.9 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.133.36': - resolution: {integrity: sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==} + '@tanstack/react-router@1.134.9': + resolution: {integrity: sha512-JIxFamShs3gRIkOxpgz/3bglbSKZHMrzKASwNFg+sQPVXVPOLtN35D5PuEDAFTPPht9Wv48WWUNYE03ZytnNug==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -1254,15 +1254,15 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.133.36': - resolution: {integrity: sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==} + '@tanstack/router-core@1.134.9': + resolution: {integrity: sha512-9Vr8tYC59I70DYGVRknRf4vjQMjSfHvmc+iTM8vcpwERBh3Vgkv90f8ol85KHKqjorSsCqMeYFhFt8AM4A4CSw==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.133.36': - resolution: {integrity: sha512-jgXSCfWPLukcjXDf4thpk/0QgLXv61mrvmfh9xc8+xeC5TMeLyz2xBaTghniD2PtdF6eII3vMaTWOpMHj4+cVQ==} + '@tanstack/router-devtools-core@1.134.9': + resolution: {integrity: sha512-VIc8ipL2QER+nWZedKinb09q7D7N9oPBpkhxgYfXqPBATAQAdv5oBxUQ2SmHz3v1vbENQZj/HlPpm2CYmsFkRg==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.133.36 + '@tanstack/router-core': ^1.134.9 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -1270,16 +1270,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.133.36': - resolution: {integrity: sha512-3+pJBqkm95/zV7INyhbr688lp1PklZT3wtNNwW9oIxmsBiUJg5hqHWh7z4JgP9E+0D0KAwT535wncWUFfMMZwA==} + '@tanstack/router-generator@1.134.9': + resolution: {integrity: sha512-yBPX/xCWE/sdEEtCKOtPBl4cQo+G5Tt7UTB0li49CW8qhmD2eFKTQY1enRb68SwFNH5uwToBXFmJkSG1zPaA5Q==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.133.36': - resolution: {integrity: sha512-y0vttpDRFbniPk2EOS93wxfNA0SqvD/anj6kXTIl/3caW0rvOC4MzMXV09atJ+3jMSOgHFniljKQj/66AY5dZg==} + '@tanstack/router-plugin@1.134.9': + resolution: {integrity: sha512-iD85GvRADpVhRXkVGRwJqprhIXPLNH+O210UjFDQ8RC2Vn92IwKY6sx8fCgwjHtcYgnTdu3p8eIYJ8CfrLazxA==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.133.36 + '@tanstack/react-router': ^1.134.9 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -1343,8 +1343,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.9.2': - resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} + '@types/node@24.10.0': + resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -1517,8 +1517,8 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - baseline-browser-mapping@2.8.21: - resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} + baseline-browser-mapping@2.8.23: + resolution: {integrity: sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==} hasBin: true binary-extensions@2.3.0: @@ -1555,8 +1555,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001752: - resolution: {integrity: sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==} + caniuse-lite@1.0.30001753: + resolution: {integrity: sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1759,8 +1759,8 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true @@ -1955,8 +1955,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} globby@11.1.0: @@ -2036,8 +2036,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.6: + resolution: {integrity: sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==} is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -2525,8 +2525,8 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - sass@1.93.2: - resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} + sass@1.93.3: + resolution: {integrity: sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==} engines: {node: '>=14.0.0'} hasBin: true @@ -2634,11 +2634,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - style-to-js@1.1.18: - resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} + style-to-js@1.1.19: + resolution: {integrity: sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ==} - style-to-object@1.0.11: - resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} + style-to-object@1.0.12: + resolution: {integrity: sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==} stylelint-config-recommended-scss@16.0.2: resolution: {integrity: sha512-aUTHhPPWCvFyWaxtckJlCPaXTDFsp4pKO8evXNCsW9OwsaUWyMd6jvcUhSmfGWPrTddvzNqK4rS/UuSLcbVGdQ==} @@ -3118,54 +3118,53 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@biomejs/biome@2.3.2': + '@biomejs/biome@2.3.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.3.2 - '@biomejs/cli-darwin-x64': 2.3.2 - '@biomejs/cli-linux-arm64': 2.3.2 - '@biomejs/cli-linux-arm64-musl': 2.3.2 - '@biomejs/cli-linux-x64': 2.3.2 - '@biomejs/cli-linux-x64-musl': 2.3.2 - '@biomejs/cli-win32-arm64': 2.3.2 - '@biomejs/cli-win32-x64': 2.3.2 - - '@biomejs/cli-darwin-arm64@2.3.2': + '@biomejs/cli-darwin-arm64': 2.3.3 + '@biomejs/cli-darwin-x64': 2.3.3 + '@biomejs/cli-linux-arm64': 2.3.3 + '@biomejs/cli-linux-arm64-musl': 2.3.3 + '@biomejs/cli-linux-x64': 2.3.3 + '@biomejs/cli-linux-x64-musl': 2.3.3 + '@biomejs/cli-win32-arm64': 2.3.3 + '@biomejs/cli-win32-x64': 2.3.3 + + '@biomejs/cli-darwin-arm64@2.3.3': optional: true - '@biomejs/cli-darwin-x64@2.3.2': + '@biomejs/cli-darwin-x64@2.3.3': optional: true - '@biomejs/cli-linux-arm64-musl@2.3.2': + '@biomejs/cli-linux-arm64-musl@2.3.3': optional: true - '@biomejs/cli-linux-arm64@2.3.2': + '@biomejs/cli-linux-arm64@2.3.3': optional: true - '@biomejs/cli-linux-x64-musl@2.3.2': + '@biomejs/cli-linux-x64-musl@2.3.3': optional: true - '@biomejs/cli-linux-x64@2.3.2': + '@biomejs/cli-linux-x64@2.3.3': optional: true - '@biomejs/cli-win32-arm64@2.3.2': + '@biomejs/cli-win32-arm64@2.3.3': optional: true - '@biomejs/cli-win32-x64@2.3.2': + '@biomejs/cli-win32-x64@2.3.3': optional: true '@cacheable/memoize@2.0.3': dependencies: - '@cacheable/utils': 2.1.0 + '@cacheable/utils': 2.2.0 - '@cacheable/memory@2.0.3': + '@cacheable/memory@2.0.4': dependencies: - '@cacheable/memoize': 2.0.3 - '@cacheable/utils': 2.1.0 + '@cacheable/utils': 2.2.0 '@keyv/bigmap': 1.1.0(keyv@5.5.3) hookified: 1.12.2 keyv: 5.5.3 - '@cacheable/utils@2.1.0': + '@cacheable/utils@2.2.0': dependencies: keyv: 5.5.3 @@ -3186,87 +3185,87 @@ snapshots: '@dual-bundle/import-meta-resolve@4.2.1': {} - '@emnapi/runtime@1.6.0': + '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.11': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.11': + '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm@0.25.11': + '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-x64@0.25.11': + '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.11': + '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.11': + '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.11': + '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.11': + '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.11': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.11': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.11': + '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.11': + '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.11': + '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.11': + '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.11': + '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.11': + '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-x64@0.25.11': + '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.11': + '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.11': + '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.11': + '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.11': + '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.11': + '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.11': + '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.11': + '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.11': + '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-x64@0.25.11': + '@esbuild/win32-x64@0.25.12': optional: true '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0)': @@ -3431,7 +3430,7 @@ snapshots: '@img/sharp-wasm32@0.34.4': dependencies: - '@emnapi/runtime': 1.6.0 + '@emnapi/runtime': 1.7.0 optional: true '@img/sharp-win32-arm64@0.34.4': @@ -3790,7 +3789,7 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.3.11(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6))': + '@tanstack/devtools-vite@0.3.11(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6))': dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -3802,7 +3801,7 @@ snapshots: chalk: 5.6.2 launch-editor: 2.12.0 picomatch: 4.0.3 - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) transitivePeerDependencies: - bufferutil - supports-color @@ -3837,7 +3836,7 @@ snapshots: '@tanstack/devtools-event-client': 0.3.4 '@tanstack/store': 0.7.7 - '@tanstack/query-core@5.90.5': {} + '@tanstack/query-core@5.90.6': {} '@tanstack/query-devtools@5.90.1': {} @@ -3864,24 +3863,24 @@ snapshots: transitivePeerDependencies: - react-dom - '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0)': + '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.6(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/query-devtools': 5.90.1 - '@tanstack/react-query': 5.90.5(react@19.2.0) + '@tanstack/react-query': 5.90.6(react@19.2.0) react: 19.2.0 - '@tanstack/react-query@5.90.5(react@19.2.0)': + '@tanstack/react-query@5.90.6(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.5 + '@tanstack/query-core': 5.90.6 react: 19.2.0 - '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': + '@tanstack/react-router-devtools@1.134.9(@tanstack/react-router@1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.134.9)(@types/node@24.10.0)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': dependencies: - '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(sass@1.93.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) + '@tanstack/react-router': 1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.134.9(@tanstack/router-core@1.134.9)(@types/node@24.10.0)(csstype@3.1.3)(sass@1.93.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -3899,11 +3898,11 @@ snapshots: - tsx - yaml - '@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/history': 1.133.28 '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.36 + '@tanstack/router-core': 1.134.9 isbot: 5.1.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -3936,7 +3935,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@tanstack/router-core@1.133.36': + '@tanstack/router-core@1.134.9': dependencies: '@tanstack/history': 1.133.28 '@tanstack/store': 0.8.0 @@ -3946,14 +3945,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(sass@1.93.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': + '@tanstack/router-devtools-core@1.134.9(@tanstack/router-core@1.134.9)(@types/node@24.10.0)(csstype@3.1.3)(sass@1.93.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': dependencies: - '@tanstack/router-core': 1.133.36 + '@tanstack/router-core': 1.134.9 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -3969,9 +3968,9 @@ snapshots: - tsx - yaml - '@tanstack/router-generator@1.133.36': + '@tanstack/router-generator@1.134.9': dependencies: - '@tanstack/router-core': 1.133.36 + '@tanstack/router-core': 1.134.9 '@tanstack/router-utils': 1.133.19 '@tanstack/virtual-file-routes': 1.133.19 prettier: 3.6.2 @@ -3982,7 +3981,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6))': + '@tanstack/router-plugin@1.134.9(@tanstack/react-router@1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -3990,8 +3989,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/router-core': 1.133.36 - '@tanstack/router-generator': 1.133.36 + '@tanstack/router-core': 1.134.9 + '@tanstack/router-generator': 1.134.9 '@tanstack/router-utils': 1.133.19 '@tanstack/virtual-file-routes': 1.133.19 babel-dead-code-elimination: 1.0.10 @@ -3999,8 +3998,8 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + '@tanstack/react-router': 1.134.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) transitivePeerDependencies: - supports-color @@ -4055,7 +4054,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.9.2': + '@types/node@24.10.0': dependencies: undici-types: 7.16.0 @@ -4173,11 +4172,11 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react-swc@4.2.0(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6))': + '@vitejs/plugin-react-swc@4.2.0(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.43 '@swc/core': 1.14.0 - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) transitivePeerDependencies: - '@swc/helpers' @@ -4233,7 +4232,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.27.0 - caniuse-lite: 1.0.30001752 + caniuse-lite: 1.0.30001753 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -4263,7 +4262,7 @@ snapshots: balanced-match@2.0.0: {} - baseline-browser-mapping@2.8.21: {} + baseline-browser-mapping@2.8.23: {} binary-extensions@2.3.0: {} @@ -4282,8 +4281,8 @@ snapshots: browserslist@4.27.0: dependencies: - baseline-browser-mapping: 2.8.21 - caniuse-lite: 1.0.30001752 + baseline-browser-mapping: 2.8.23 + caniuse-lite: 1.0.30001753 electron-to-chromium: 1.5.244 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.27.0) @@ -4291,8 +4290,8 @@ snapshots: cacheable@2.1.1: dependencies: '@cacheable/memoize': 2.0.3 - '@cacheable/memory': 2.0.3 - '@cacheable/utils': 2.1.0 + '@cacheable/memory': 2.0.4 + '@cacheable/utils': 2.2.0 hookified: 1.12.2 keyv: 5.5.3 qified: 0.5.1 @@ -4309,7 +4308,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001752: {} + caniuse-lite@1.0.30001753: {} ccount@2.0.1: {} @@ -4474,34 +4473,34 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild@0.25.11: + esbuild@0.25.12: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} @@ -4706,7 +4705,7 @@ snapshots: globals@14.0.0: {} - globals@16.4.0: {} + globals@16.5.0: {} globby@11.1.0: dependencies: @@ -4753,7 +4752,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.18 + style-to-js: 1.1.19 unist-util-position: 5.0.0 vfile-message: 4.0.3 transitivePeerDependencies: @@ -4786,7 +4785,7 @@ snapshots: ini@1.3.8: {} - inline-style-parser@0.2.4: {} + inline-style-parser@0.2.6: {} is-alphabetical@2.0.1: {} @@ -5376,7 +5375,7 @@ snapshots: dependencies: tslib: 2.8.1 - sass@1.93.2: + sass@1.93.3: dependencies: chokidar: 4.0.3 immutable: 5.1.4 @@ -5507,13 +5506,13 @@ snapshots: strip-json-comments@3.1.1: {} - style-to-js@1.1.18: + style-to-js@1.1.19: dependencies: - style-to-object: 1.0.11 + style-to-object: 1.0.12 - style-to-object@1.0.11: + style-to-object@1.0.12: dependencies: - inline-style-parser: 0.2.4 + inline-style-parser: 0.2.6 stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): dependencies: @@ -5643,7 +5642,7 @@ snapshots: tsx@4.20.6: dependencies: - esbuild: 0.25.11 + esbuild: 0.25.12 get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 @@ -5737,26 +5736,26 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-image-optimizer@2.0.3(sharp@0.34.4)(vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6)): + vite-plugin-image-optimizer@2.0.3(sharp@0.34.4)(vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6)): dependencies: ansi-colors: 4.1.3 pathe: 2.0.3 - vite: 7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6) + vite: 7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6) optionalDependencies: sharp: 0.34.4 - vite@7.1.12(@types/node@24.9.2)(sass@1.93.2)(tsx@4.20.6): + vite@7.1.12(@types/node@24.10.0)(sass@1.93.3)(tsx@4.20.6): dependencies: - esbuild: 0.25.11 + esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.0 fsevents: 2.3.3 - sass: 1.93.2 + sass: 1.93.3 tsx: 4.20.6 webpack-virtual-modules@0.6.2: {} diff --git a/web/src/pages/user-profile/UserProfilePage/UserProfilePage.tsx b/web/src/pages/user-profile/UserProfilePage/UserProfilePage.tsx index 3f6371e66..01ff6a0ca 100644 --- a/web/src/pages/user-profile/UserProfilePage/UserProfilePage.tsx +++ b/web/src/pages/user-profile/UserProfilePage/UserProfilePage.tsx @@ -1,29 +1,31 @@ import './style.scss'; import { useSuspenseQuery } from '@tanstack/react-query'; -import { useParams } from '@tanstack/react-router'; +import { useNavigate, useParams, useSearch } from '@tanstack/react-router'; import { trainCase } from 'change-case'; -import { useMemo, useRef, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef } from 'react'; import { m } from '../../../paraglide/messages'; import { Page } from '../../../shared/components/Page/Page'; import { Tabs } from '../../../shared/defguard-ui/components/Tabs/Tabs'; import type { TabsItem } from '../../../shared/defguard-ui/components/Tabs/types'; import { useAuth } from '../../../shared/hooks/useAuth'; -import { userProfileQueryOptions } from '../../../shared/query'; +import { + getUserAuthKeysQueryOptions, + userProfileQueryOptions, +} from '../../../shared/query'; import { createUserProfileStore, UserProfileContext } from './hooks/useUserProfilePage'; +import { ProfileAuthKeysTab } from './tabs/ProfileAuthKeysTab/ProfileAuthKeysTab'; import { ProfileDetailsTab } from './tabs/ProfileDetailsTab/ProfileDetailsTab'; import { ProfileDevicesTab } from './tabs/ProfileDevicesTab/ProfileDevicesTab'; +import { UserProfileTab, type UserProfileTabValue } from './tabs/types'; -const tabs = { - Details: 'details', - Devices: 'devices', -} as const; - -type TabsValue = (typeof tabs)[keyof typeof tabs]; +const defaultTab = UserProfileTab.Details; export const UserProfilePage = () => { + const navigate = useNavigate(); const authUsername = useAuth((s) => s.user?.username as string); + const search = useSearch({ from: '/_authorized/user/$username' }); + const activeTab = search.tab ?? defaultTab; - const [activeTab, setActiveTab] = useState('details'); const { username } = useParams({ from: '/_authorized/user/$username', }); @@ -34,6 +36,7 @@ export const UserProfilePage = () => { ); const { data: userProfile } = useSuspenseQuery(userProfileQueryOptions(username)); + const { data: userAuthKeys } = useSuspenseQuery(getUserAuthKeysQueryOptions(username)); const pageTitle = useMemo(() => { if (isSelf) { @@ -50,34 +53,73 @@ export const UserProfilePage = () => { const store = useRef( createUserProfileStore({ profile: userProfile, + authKeys: userAuthKeys, }), ).current; + const setActiveTab = useCallback( + (tab: UserProfileTabValue) => { + navigate({ + from: '/user/$username', + to: '/user/$username', + search: (perv) => ({ ...perv, tab }), + }); + }, + [navigate], + ); + const tabsConfiguration = useMemo(() => { const res: TabsItem[] = [ { title: m.profile_tabs_details(), - active: activeTab === 'details', - onClick: () => setActiveTab('details'), + active: activeTab === UserProfileTab.Details, + onClick: () => setActiveTab(UserProfileTab.Details), }, { title: m.profile_tabs_devices(), - active: activeTab === tabs.Devices, - onClick: () => setActiveTab(tabs.Devices), + active: activeTab === UserProfileTab.Devices, + onClick: () => setActiveTab(UserProfileTab.Devices), + }, + { + title: m.profile_tabs_auth_keys(), + active: activeTab === UserProfileTab.AuthKeys, + onClick: () => setActiveTab(UserProfileTab.AuthKeys), }, ]; return res; - }, [activeTab]); + }, [activeTab, setActiveTab]); const RenderActiveTab = useMemo(() => { switch (activeTab) { - case 'details': + case UserProfileTab.Details: return ProfileDetailsTab; - case 'devices': + case UserProfileTab.Devices: return ProfileDevicesTab; + case UserProfileTab.AuthKeys: + return ProfileAuthKeysTab; + case UserProfileTab.ApiTokens: + return ProfileAuthKeysTab; } }, [activeTab]); + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect + useEffect(() => { + if (store && userProfile) { + store.setState({ + ...userProfile, + }); + } + }, [userProfile]); + + // biome-ignore lint/correctness/useExhaustiveDependencies: side effect + useEffect(() => { + if (store && userAuthKeys) { + store.setState({ + authKeys: userAuthKeys, + }); + } + }, [userAuthKeys]); + return ( diff --git a/web/src/pages/user-profile/UserProfilePage/hooks/useUserProfilePage.tsx b/web/src/pages/user-profile/UserProfilePage/hooks/useUserProfilePage.tsx index 73787d1ab..cda068247 100644 --- a/web/src/pages/user-profile/UserProfilePage/hooks/useUserProfilePage.tsx +++ b/web/src/pages/user-profile/UserProfilePage/hooks/useUserProfilePage.tsx @@ -1,12 +1,16 @@ import { createContext, useContext } from 'react'; import { createStore, useStore } from 'zustand'; -import type { UserProfile } from '../../../../shared/api/types'; +import type { AuthKey, UserProfile } from '../../../../shared/api/types'; -interface ProfileProps { +interface Extras { + authKeys: AuthKey[]; +} + +interface ProfileProps extends Extras { profile: UserProfile; } -interface ProfileState extends UserProfile { +interface ProfileState extends UserProfile, Extras { reset: () => void; } @@ -14,7 +18,10 @@ type UserProfileStore = ReturnType; export const createUserProfileStore = (initialProps: ProfileProps) => { return createStore()((set) => ({ - ...initialProps.profile, + authKeys: initialProps.authKeys, + devices: initialProps.profile.devices, + security_keys: initialProps.profile.security_keys, + user: initialProps.profile.user, reset: () => set(initialProps.profile), })); }; diff --git a/web/src/pages/user-profile/UserProfilePage/style.scss b/web/src/pages/user-profile/UserProfilePage/style.scss index 4854f49ef..b17199456 100644 --- a/web/src/pages/user-profile/UserProfilePage/style.scss +++ b/web/src/pages/user-profile/UserProfilePage/style.scss @@ -7,4 +7,8 @@ .tabs { padding-top: var(--spacing-md); } + + .table { + grid-column: 1 / 13; + } } diff --git a/web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/ProfileAuthKeysTab.tsx b/web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/ProfileAuthKeysTab.tsx new file mode 100644 index 000000000..214fdfe94 --- /dev/null +++ b/web/src/pages/user-profile/UserProfilePage/tabs/ProfileAuthKeysTab/ProfileAuthKeysTab.tsx @@ -0,0 +1,58 @@ +import { m } from '../../../../../paraglide/messages'; +import { LayoutGrid } from '../../../../../shared/components/LayoutGrid/LayoutGrid'; +import { Button } from '../../../../../shared/defguard-ui/components/Button/Button'; +import { EmptyStateFlexible } from '../../../../../shared/defguard-ui/components/EmptyStateFlexible/EmptyStateFlexible'; +import { SizedBox } from '../../../../../shared/defguard-ui/components/SizedBox/SizedBox'; +import { ThemeSize } from '../../../../../shared/defguard-ui/types'; +import { openModal } from '../../../../../shared/hooks/modalControls/modalsSubjects'; +import { ModalName } from '../../../../../shared/hooks/modalControls/modalTypes'; +import { ProfileTabHeader } from '../../components/ProfileTabHeader/ProfileTabHeader'; +import { useUserProfile } from '../../hooks/useUserProfilePage'; +import { AddAuthKeyModal } from './modals/AddAuthKeyModal/AddAuthKeyModal'; +import { RenameAuthKeyModal } from './modals/RenameAuthKeyModal/RenameAuthKeyModal'; +import { ProfileAuthKeysTable } from './ProfileAuthKeysTable'; + +export const ProfileAuthKeysTab = () => { + const username = useUserProfile((s) => s.user.username); + const userAuthKeys = useUserProfile((s) => s.authKeys); + + return ( + <> + {userAuthKeys.length === 0 && ( + { + openModal(ModalName.AddAuthKey, { + username, + }); + }, + }} + /> + )} + {userAuthKeys.length > 0 && ( + + + +
    + ); +}; diff --git a/web/src/shared/components/SelectionSection/style.scss b/web/src/shared/components/SelectionSection/style.scss new file mode 100644 index 000000000..496b6e00c --- /dev/null +++ b/web/src/shared/components/SelectionSection/style.scss @@ -0,0 +1,37 @@ +.selection-section { + .actions { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: flex-start; + column-gap: var(--spacing-xl); + + & > .right { + margin-left: auto; + + .selected-filter { + display: flex; + flex-flow: row; + align-items: center; + justify-content: flex-end; + flex: none; + column-gap: var(--spacing-sm); + cursor: pointer; + + & > span { + font: var(--t-body-sm-400); + color: var(--fg-neutral); + } + } + } + } + + .items-box { + overflow: hidden auto; + + & > .inner { + display: flex; + flex-flow: column; + } + } +} diff --git a/web/src/shared/components/SelectionSection/type.ts b/web/src/shared/components/SelectionSection/type.ts new file mode 100644 index 000000000..c229597bb --- /dev/null +++ b/web/src/shared/components/SelectionSection/type.ts @@ -0,0 +1,19 @@ +export type SelectionSectionKey = string | number; + +export type SelectionSectionOption = { + id: T; + label: string; + meta?: unknown; + // if there is a need to search in more then label itself + searchFields?: string[]; +}; + +export interface SelectionSectionProps { + selection: Set; + onChange: (value: Set) => void; + options: SelectionSectionOption[]; + itemHeight?: number; + itemGap?: number; + className?: string; + id?: string; +} diff --git a/web/src/shared/defguard-ui b/web/src/shared/defguard-ui index 499843550..a23b1884c 160000 --- a/web/src/shared/defguard-ui +++ b/web/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit 499843550408102344b50c6f334de3ded4de5194 +Subproject commit a23b1884cb73278d9cb3b9eefacb3d9d9f1ea651 diff --git a/web/src/shared/hooks/modalControls/modalTypes.ts b/web/src/shared/hooks/modalControls/modalTypes.ts index af296747d..9d7eeb4ea 100644 --- a/web/src/shared/hooks/modalControls/modalTypes.ts +++ b/web/src/shared/hooks/modalControls/modalTypes.ts @@ -4,6 +4,7 @@ import type { OpenAddApiTokenModal, OpenAuthKeyRenameModal, OpenCEGroupModal, + OpenCEOpenIdClientModal, OpenEditDeviceModal, OpenEditUserModal, OpenRenameApiTokenModal, @@ -21,8 +22,9 @@ export const ModalName = { RenameAuthKey: 'renameAuthKey', AddApiToken: 'addApiToken', RenameApiToken: 'renameApiToken', - CreateEditGroupModal: 'createEditGroup', + CreateEditGroup: 'createEditGroup', EditUserModal: 'editUserModal', + CEOpenIdClient: 'createEditOpenIdClient', } as const; export type ModalNameValue = (typeof ModalName)[keyof typeof ModalName]; @@ -66,13 +68,21 @@ const modalOpenArgsSchema = z.discriminatedUnion('name', [ data: z.custom(), }), z.object({ - name: z.literal(ModalName.CreateEditGroupModal), + name: z.literal(ModalName.CreateEditGroup), data: z.custom(), }), z.object({ name: z.literal(ModalName.EditUserModal), data: z.custom(), }), + z.object({ + name: z.literal(ModalName.EditUserModal), + data: z.custom(), + }), + z.object({ + name: z.literal(ModalName.CEOpenIdClient), + data: z.custom(), + }), ]); export type ModalOpenEvent = z.infer; diff --git a/web/src/shared/hooks/modalControls/types.ts b/web/src/shared/hooks/modalControls/types.ts index af4125adb..38c2a9b8c 100644 --- a/web/src/shared/hooks/modalControls/types.ts +++ b/web/src/shared/hooks/modalControls/types.ts @@ -1,4 +1,4 @@ -import type { Device, GroupInfo, User } from '../../api/types'; +import type { Device, GroupInfo, OpenIdClient, User } from '../../api/types'; export interface OpenEditDeviceModal { device: Device; @@ -38,3 +38,8 @@ export interface OpenEditUserModal { reservedUsernames: string[]; reservedEmails: string[]; } + +export interface OpenCEOpenIdClientModal { + openIdClient?: OpenIdClient; + reservedNames: string[]; +} diff --git a/web/src/shared/query.ts b/web/src/shared/query.ts index d4035d505..738b81715 100644 --- a/web/src/shared/query.ts +++ b/web/src/shared/query.ts @@ -74,3 +74,9 @@ export const getGroupsInfoQueryOptions = queryOptions({ refetchOnMount: true, refetchOnReconnect: true, }); + +export const getOpenIdClientQueryOptions = queryOptions({ + queryFn: api.openIdClient.getOpenIdClients, + queryKey: ['oauth'], + select: (resp) => resp.data, +}); From a56db1883896cb1e32875993fb6cd9fea859abfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Wed, 12 Nov 2025 11:49:14 +0100 Subject: [PATCH 042/112] add webhooks page --- web/messages/en/components.json | 7 +- web/messages/en/form.json | 5 +- web/messages/en/modal.json | 6 +- web/messages/en/webhooks.json | 8 + web/project.inlang/settings.json | 1 + web/src/pages/OpenIdPage/OpenIdTable.tsx | 12 +- web/src/pages/WebhooksPage/WebhooksPage.tsx | 21 ++ web/src/pages/WebhooksPage/WebhooksTable.tsx | 172 ++++++++++++++ .../modals/CEWebhookModal/CEWebhookModal.tsx | 220 ++++++++++++++++++ .../modals/CEWebhookModal/style.scss | 7 + web/src/routeTree.gen.ts | 21 ++ web/src/routes/_authorized/webhooks.tsx | 10 + web/src/shared/api/api.ts | 14 ++ web/src/shared/api/types.ts | 19 ++ .../components/Navigation/Navigation.tsx | 6 + web/src/shared/defguard-ui | 2 +- .../shared/hooks/modalControls/modalTypes.ts | 6 + web/src/shared/hooks/modalControls/types.ts | 6 +- web/src/shared/query.ts | 6 + 19 files changed, 540 insertions(+), 9 deletions(-) create mode 100644 web/messages/en/webhooks.json create mode 100644 web/src/pages/WebhooksPage/WebhooksPage.tsx create mode 100644 web/src/pages/WebhooksPage/WebhooksTable.tsx create mode 100644 web/src/pages/WebhooksPage/modals/CEWebhookModal/CEWebhookModal.tsx create mode 100644 web/src/pages/WebhooksPage/modals/CEWebhookModal/style.scss create mode 100644 web/src/routes/_authorized/webhooks.tsx diff --git a/web/messages/en/components.json b/web/messages/en/components.json index a0e2384ec..aa2104052 100644 --- a/web/messages/en/components.json +++ b/web/messages/en/components.json @@ -15,5 +15,10 @@ "cmp_nav_group_admin": "Administration", "cmp_nav_item_users": "Users", "cmp_nav_item_groups": "Groups", - "cmp_nav_item_openid": "OpenID Apps" + "cmp_nav_item_openid": "OpenID Apps", + "cmp_nav_item_webhooks": "Webhooks", + "cmp_webhook_event_user_delete": "User deleted", + "cmp_webhook_event_user_add": "New user created", + "cmp_webhook_event_user_edit": "User modified", + "cmp_webhook_event_user_hw": "User Yubikey provision" } diff --git a/web/messages/en/form.json b/web/messages/en/form.json index 28369d990..afb8bed5c 100644 --- a/web/messages/en/form.json +++ b/web/messages/en/form.json @@ -39,5 +39,8 @@ "form_label_name": "Name", "form_label_public_key": "Public key", "form_label_device_public_key": "Device public key (wireguard)", - "form_label_type": "Type" + "form_label_type": "Type", + "form_label_description": "Description", + "form_label_secret_token": "Secret Token", + "form_label_webhook_url": "Webhook URL" } diff --git a/web/messages/en/modal.json b/web/messages/en/modal.json index 48b8b060a..7bd5791ac 100644 --- a/web/messages/en/modal.json +++ b/web/messages/en/modal.json @@ -104,5 +104,9 @@ "modal_ce_openid_client_label_redirect": "Redirect URL {index}", "modal_ce_openid_client_label_redirect_add": "Add URL", "modal_ce_openid_client_label_scopes_title": "Scopes", - "modal_ce_openid_client_label_name": "Application name" + "modal_ce_openid_client_label_name": "Application name", + "modal_ce_webhook_create_title": "Add Webhook", + "modal_ce_webhook_edit_title": "Edit Webhook", + "modal_ce_webhook_events_title": "Trigger events", + "modal_ce_webhook_events_text": "" } diff --git a/web/messages/en/webhooks.json b/web/messages/en/webhooks.json new file mode 100644 index 000000000..ce4dd6061 --- /dev/null +++ b/web/messages/en/webhooks.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "webhooks_title": "Webhooks", + "webhooks_table_title": "All Webhooks", + "webhooks_add": "Add new webhook", + "webhooks_empty_title": "You don't have any Webhooks.", + "webhooks_empty_subtitle": "To add one, click the button below." +} diff --git a/web/project.inlang/settings.json b/web/project.inlang/settings.json index 1c3964dcc..d86ea1e36 100644 --- a/web/project.inlang/settings.json +++ b/web/project.inlang/settings.json @@ -16,6 +16,7 @@ "./messages/{locale}/modal.json", "./messages/{locale}/components.json", "./messages/{locale}/users.json", + "./messages/{locale}/webhooks.json", "./messages/{locale}/groups.json" ] } diff --git a/web/src/pages/OpenIdPage/OpenIdTable.tsx b/web/src/pages/OpenIdPage/OpenIdTable.tsx index f4857dca7..98aa8081e 100644 --- a/web/src/pages/OpenIdPage/OpenIdTable.tsx +++ b/web/src/pages/OpenIdPage/OpenIdTable.tsx @@ -198,10 +198,14 @@ export const OpenIdClientTable = ({ data }: Props) => { return ( <> - -
    - {debouncedSearch.length > 0 && visibleOptions.length === 0 && ( + {searching && visibleOptions.length === 0 && ( <> Date: Thu, 13 Nov 2025 12:03:02 +0100 Subject: [PATCH 045/112] table selection update --- web/messages/en/modal.json | 3 +- .../components/GroupsTable/GroupsTable.tsx | 32 ++---- web/src/pages/OpenIdPage/OpenIdTable.tsx | 39 ++------ .../UsersOverviewPage/UsersOverviewPage.tsx | 2 + .../pages/UsersOverviewPage/UsersTable.tsx | 98 +++++++++--------- .../AssignUsersToGroupsModal.tsx | 99 +++++++++++++++++++ web/src/pages/WebhooksPage/WebhooksTable.tsx | 8 +- .../ProfileApiTokensTable.tsx | 43 +++----- .../ProfileAuthKeysTable.tsx | 42 +++----- .../ProfileDevicesTable.tsx | 71 ++++--------- web/src/shared/api/api.ts | 1 + web/src/shared/api/types.ts | 1 + .../SelectionSection/SelectionSection.tsx | 16 ++- web/src/shared/defguard-ui | 2 +- .../shared/hooks/modalControls/modalTypes.ts | 6 ++ web/src/shared/hooks/modalControls/types.ts | 5 + web/src/shared/utils/dateSortingFn.ts | 13 +++ 17 files changed, 255 insertions(+), 226 deletions(-) create mode 100644 web/src/pages/UsersOverviewPage/modals/AssignUsersToGroupsModal/AssignUsersToGroupsModal.tsx create mode 100644 web/src/shared/utils/dateSortingFn.ts diff --git a/web/messages/en/modal.json b/web/messages/en/modal.json index 7bd5791ac..21237ecf7 100644 --- a/web/messages/en/modal.json +++ b/web/messages/en/modal.json @@ -108,5 +108,6 @@ "modal_ce_webhook_create_title": "Add Webhook", "modal_ce_webhook_edit_title": "Edit Webhook", "modal_ce_webhook_events_title": "Trigger events", - "modal_ce_webhook_events_text": "" + "modal_ce_webhook_events_text": "", + "modal_assign_users_groups_title": "Assign groups to selected users" } diff --git a/web/src/pages/GroupsPage/components/GroupsTable/GroupsTable.tsx b/web/src/pages/GroupsPage/components/GroupsTable/GroupsTable.tsx index 6274f8a40..3ce668820 100644 --- a/web/src/pages/GroupsPage/components/GroupsTable/GroupsTable.tsx +++ b/web/src/pages/GroupsPage/components/GroupsTable/GroupsTable.tsx @@ -2,10 +2,9 @@ import { useMutation } from '@tanstack/react-query'; import { createColumnHelper, getCoreRowModel, - type SortingState, + getSortedRowModel, useReactTable, } from '@tanstack/react-table'; -import { orderBy } from 'lodash-es'; import { useMemo, useState } from 'react'; import { m } from '../../../../paraglide/messages'; import api from '../../../../shared/api/api'; @@ -18,7 +17,6 @@ import { tableEditColumnSize } from '../../../../shared/defguard-ui/components/t import { TableBody } from '../../../../shared/defguard-ui/components/table/TableBody/TableBody'; import { TableCell } from '../../../../shared/defguard-ui/components/table/TableCell/TableCell'; import { TableTop } from '../../../../shared/defguard-ui/components/table/TableTop/TableTop'; -import { isPresent } from '../../../../shared/defguard-ui/utils/isPresent'; import { openModal } from '../../../../shared/hooks/modalControls/modalsSubjects'; import { ModalName } from '../../../../shared/hooks/modalControls/modalTypes'; @@ -29,8 +27,6 @@ type Props = { type RowData = GroupInfo; -type SortingKeys = 'name'; - const columnHelper = createColumnHelper(); export const GroupsTable = ({ groups, users }: Props) => { @@ -43,31 +39,19 @@ export const GroupsTable = ({ groups, users }: Props) => { }, }); - const [sortState, setSortState] = useState([ - { - id: 'name', - desc: false, - }, - ]); - const transformedData = useMemo(() => { let data = groups; if (search.length) { data = data.filter((g) => g.name.toLowerCase().includes(search.toLowerCase())); } - const sorting = sortState[0]; - if (!isPresent(sorting)) return data; - const sortingId = sorting.id as SortingKeys; - const sortingDirection = sorting.desc ? 'desc' : 'asc'; - return orderBy(data, (g) => g[sortingId].toLowerCase().replaceAll(' ', ''), [ - sortingDirection, - ]); - }, [sortState, groups, search]); + return data; + }, [groups, search]); const columns = useMemo( () => [ columnHelper.accessor('name', { header: m.groups_col_name(), + sortingFn: 'text', cell: (info) => ( {info.getValue()} @@ -159,14 +143,12 @@ export const GroupsTable = ({ groups, users }: Props) => { ); const table = useReactTable({ - state: { - sorting: sortState, - }, columns, data: transformedData, getCoreRowModel: getCoreRowModel(), - onSortingChange: setSortState, - manualSorting: true, + getSortedRowModel: getSortedRowModel(), + enableSorting: true, + enableRowSelection: false, }); return ( diff --git a/web/src/pages/OpenIdPage/OpenIdTable.tsx b/web/src/pages/OpenIdPage/OpenIdTable.tsx index 9b5262d35..66675fef6 100644 --- a/web/src/pages/OpenIdPage/OpenIdTable.tsx +++ b/web/src/pages/OpenIdPage/OpenIdTable.tsx @@ -2,11 +2,10 @@ import { useMutation } from '@tanstack/react-query'; import { createColumnHelper, getCoreRowModel, - type SortingState, + getSortedRowModel, useReactTable, } from '@tanstack/react-table'; -import { orderBy } from 'lodash-es'; -import { useMemo, useState } from 'react'; +import { useMemo } from 'react'; import { m } from '../../paraglide/messages'; import api from '../../shared/api/api'; import type { OpenIdClient } from '../../shared/api/types'; @@ -32,16 +31,7 @@ type Props = { data: OpenIdClient[]; }; -type SortKey = 'name'; - export const OpenIdClientTable = ({ data }: Props) => { - const [sortingState, setSortingState] = useState([ - { - desc: false, - id: 'name', - }, - ]); - const reservedNames = useMemo( () => data.map((c) => c.name.toLowerCase().replaceAll(' ', '')), [data], @@ -63,19 +53,6 @@ export const OpenIdClientTable = ({ data }: Props) => { }, }); - const transformedData = useMemo(() => { - const result = data; - const sorting = sortingState[0]; - if (sorting) { - const key = sorting.id as SortKey; - const direction = sorting.desc ? 'desc' : 'asc'; - return orderBy(result, (c) => c[key].toLowerCase().replaceAll(' ', ''), [ - direction, - ]); - } - return result; - }, [data, sortingState[0]]); - const addButtonProps = useMemo( (): ButtonProps => ({ text: 'Add new application', @@ -94,6 +71,7 @@ export const OpenIdClientTable = ({ data }: Props) => { columnHelper.accessor('name', { header: 'App name', enableSorting: true, + sortingFn: 'text', meta: { flex: true, }, @@ -186,14 +164,11 @@ export const OpenIdClientTable = ({ data }: Props) => { ); const table = useReactTable({ - state: { - sorting: sortingState, - }, columns, - data: transformedData, + data, getCoreRowModel: getCoreRowModel(), - manualSorting: true, - onSortingChange: setSortingState, + getSortedRowModel: getSortedRowModel(), + enableRowSelection: false, }); return ( @@ -203,7 +178,7 @@ export const OpenIdClientTable = ({ data }: Props) => { + + + ); +}; diff --git a/web/src/shared/components/SelectMultiple/style.scss b/web/src/shared/components/SelectMultiple/style.scss new file mode 100644 index 000000000..9a99ad836 --- /dev/null +++ b/web/src/shared/components/SelectMultiple/style.scss @@ -0,0 +1,17 @@ +.select-multiple .fold-content { + .selected { + display: flex; + flex-flow: row wrap; + align-items: center; + justify-content: flex-start; + gap: var(--spacing-sm); + } + + & > button { + background-color: transparent; + border: 0; + font: var(--t-body-sm-400); + color: var(--fg-action); + cursor: pointer; + } +} diff --git a/web/src/shared/components/SelectMultiple/types.ts b/web/src/shared/components/SelectMultiple/types.ts new file mode 100644 index 000000000..78407f4a3 --- /dev/null +++ b/web/src/shared/components/SelectMultiple/types.ts @@ -0,0 +1,14 @@ +import type { + SelectionSectionKey, + SelectionSectionOption, +} from '../SelectionSection/type'; + +export type SelectMultipleProps = { + options: SelectionSectionOption[]; + selected: Set; + modalTitle: string; + editText: string; + toggleText: string; + counterText: (count: number) => string; + onChange: (value: Array) => void; +}; diff --git a/web/src/shared/components/modals/AddAuthKeyModal/AddAuthKeyModal.tsx b/web/src/shared/components/modals/AddAuthKeyModal/AddAuthKeyModal.tsx index 3b0af71e7..7187a80b8 100644 --- a/web/src/shared/components/modals/AddAuthKeyModal/AddAuthKeyModal.tsx +++ b/web/src/shared/components/modals/AddAuthKeyModal/AddAuthKeyModal.tsx @@ -2,8 +2,8 @@ import z from 'zod'; import { m } from '../../../../paraglide/messages'; import { Modal } from '../../../defguard-ui/components/Modal/Modal'; import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; -import { useAppForm } from '../../../defguard-ui/form'; -import { formChangeLogic } from '../../../form'; +import { useAppForm } from '../../../form'; +import { formChangeLogic } from '../../../formLogic'; import { closeModal, subscribeCloseModal, diff --git a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx index e2c89ca38..5f9863e58 100644 --- a/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx +++ b/web/src/shared/components/modals/AddUserDeviceModal/steps/AddDeviceModalManualSetupStep/AddDeviceModalManualSetupStep.tsx @@ -2,8 +2,8 @@ import z from 'zod'; import { m } from '../../../../../../paraglide/messages'; import { Button } from '../../../../../defguard-ui/components/Button/Button'; import { ModalControls } from '../../../../../defguard-ui/components/ModalControls/ModalControls'; -import { useAppForm, withForm } from '../../../../../defguard-ui/form'; -import { formChangeLogic } from '../../../../../form'; +import { useAppForm, withForm } from '../../../../../form'; +import { formChangeLogic } from '../../../../../formLogic'; import './style.scss'; import { useStore } from '@tanstack/react-form'; import { useMutation } from '@tanstack/react-query'; diff --git a/web/src/shared/components/modals/ChangePasswordModal/ChangePasswordModal.tsx b/web/src/shared/components/modals/ChangePasswordModal/ChangePasswordModal.tsx index ed2804bd1..5fcd1abb0 100644 --- a/web/src/shared/components/modals/ChangePasswordModal/ChangePasswordModal.tsx +++ b/web/src/shared/components/modals/ChangePasswordModal/ChangePasswordModal.tsx @@ -11,9 +11,9 @@ import { Icon } from '../../../defguard-ui/components/Icon'; import type { IconKindValue } from '../../../defguard-ui/components/Icon/icon-types'; import { Modal } from '../../../defguard-ui/components/Modal/Modal'; import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; -import { useAppForm, withForm } from '../../../defguard-ui/form'; import { isPresent } from '../../../defguard-ui/utils/isPresent'; -import { formChangeLogic } from '../../../form'; +import { useAppForm, withForm } from '../../../form'; +import { formChangeLogic } from '../../../formLogic'; import { closeModal, subscribeCloseModal, diff --git a/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx b/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx index 72205c3e3..d2cff8d42 100644 --- a/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx +++ b/web/src/shared/components/modals/EditUserDeviceModal/EditUserDeviceModal.tsx @@ -8,10 +8,10 @@ import api from '../../../api/api'; import { Modal } from '../../../defguard-ui/components/Modal/Modal'; import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; import { SizedBox } from '../../../defguard-ui/components/SizedBox/SizedBox'; -import { useAppForm } from '../../../defguard-ui/form'; import { ThemeSpacing } from '../../../defguard-ui/types'; import { isPresent } from '../../../defguard-ui/utils/isPresent'; -import { formChangeLogic } from '../../../form'; +import { useAppForm } from '../../../form'; +import { formChangeLogic } from '../../../formLogic'; import { closeModal, subscribeCloseModal, diff --git a/web/src/shared/components/modals/SelectionModal/SelectionModal.tsx b/web/src/shared/components/modals/SelectionModal/SelectionModal.tsx new file mode 100644 index 000000000..61609c313 --- /dev/null +++ b/web/src/shared/components/modals/SelectionModal/SelectionModal.tsx @@ -0,0 +1,70 @@ +import { useEffect, useState } from 'react'; +import { m } from '../../../../paraglide/messages'; +import { Modal } from '../../../defguard-ui/components/Modal/Modal'; +import { ModalControls } from '../../../defguard-ui/components/ModalControls/ModalControls'; +import { SelectionSection } from '../../SelectionSection/SelectionSection'; +import './style.scss'; +import type { SelectionSectionKey } from '../../SelectionSection/type'; +import { useSelectionModal } from './useSelectionModal'; + +export const SelectionModal = () => { + const title = useSelectionModal((s) => s.title); + const isOpen = useSelectionModal((s) => s.isOpen); + + useEffect(() => { + return () => { + useSelectionModal.getState().reset(); + }; + }, []); + + return ( + { + useSelectionModal.setState({ isOpen: false }); + }} + afterClose={() => { + useSelectionModal.getState().reset(); + }} + > + + + ); +}; + +const ModalContent = () => { + const options = useSelectionModal((s) => s.options); + const initialSelected = useSelectionModal((s) => s.selected); + + const [internalSelection, setInternalSelection] = + useState>(initialSelected); + + return ( + <> + + { + useSelectionModal.setState({ isOpen: false }); + }, + }} + submitProps={{ + text: m.controls_submit(), + onClick: () => { + useSelectionModal.getState().onSubmit?.(Array.from(internalSelection)); + useSelectionModal.setState({ + isOpen: false, + }); + }, + }} + /> + + ); +}; diff --git a/web/src/shared/components/modals/SelectionModal/style.scss b/web/src/shared/components/modals/SelectionModal/style.scss new file mode 100644 index 000000000..e69de29bb diff --git a/web/src/shared/components/modals/SelectionModal/useSelectionModal.tsx b/web/src/shared/components/modals/SelectionModal/useSelectionModal.tsx new file mode 100644 index 000000000..68d7db777 --- /dev/null +++ b/web/src/shared/components/modals/SelectionModal/useSelectionModal.tsx @@ -0,0 +1,29 @@ +import { create } from 'zustand'; +import type { + SelectionSectionKey, + SelectionSectionOption, +} from '../../SelectionSection/type'; + +interface StoreValues { + title: string; + options: SelectionSectionOption[]; + selected: Set | Set; + isOpen: boolean; + onSubmit?: (values: Array) => void; +} + +const defaultValues: StoreValues = { + title: 'Select', + options: [], + selected: new Set(), + isOpen: false, +}; + +interface Store extends StoreValues { + reset: () => void; +} + +export const useSelectionModal = create((set) => ({ + ...defaultValues, + reset: () => set(defaultValues), +})); diff --git a/web/src/shared/defguard-ui b/web/src/shared/defguard-ui index 61506c158..672e67f84 160000 --- a/web/src/shared/defguard-ui +++ b/web/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit 61506c1587b6d0e089f988883fe3dc98a075d864 +Subproject commit 672e67f84508dbf8564a38c4843ee2fa5814ae87 diff --git a/web/src/shared/form.tsx b/web/src/shared/form.tsx new file mode 100644 index 000000000..5b0531929 --- /dev/null +++ b/web/src/shared/form.tsx @@ -0,0 +1,27 @@ +import { createFormHook, createFormHookContexts } from '@tanstack/react-form'; +import { FormSelectMultiple } from './components/FormSelectMultiple/FormSelectMultiple'; +import { FormCheckbox } from './defguard-ui/components/form/FormCheckbox/FormCheckbox'; +import { FormInput } from './defguard-ui/components/form/FormInput/FormInput'; +import { FormRadio } from './defguard-ui/components/form/FormRadio/FormRadio'; +import { FormSubmitButton } from './defguard-ui/components/form/FormSubmitButton/FormSubmitButton'; +import { FormSuggestedIPInput } from './defguard-ui/components/form/FormSuggestedIPInput/FormSuggestedIPInput'; +import { FormToggle } from './defguard-ui/components/form/FormToggle/FormToggle'; + +export const { fieldContext, formContext, useFieldContext, useFormContext } = + createFormHookContexts(); + +export const { useAppForm, withFieldGroup, withForm } = createFormHook({ + fieldContext, + formContext, + fieldComponents: { + FormInput, + FormCheckbox, + FormRadio, + FormToggle, + FormSuggestedIPInput, + FormSelectMultiple, + }, + formComponents: { + FormSubmitButton, + }, +}); diff --git a/web/src/shared/form.ts b/web/src/shared/formLogic.ts similarity index 100% rename from web/src/shared/form.ts rename to web/src/shared/formLogic.ts From 3db0973f49bddcddb8db9831b6107afd550b4572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20=C5=9Al=C4=99zak?= Date: Tue, 2 Dec 2025 16:28:33 +0100 Subject: [PATCH 063/112] update location wizard --- .../pages/AddLocationPage/AddLocationPage.tsx | 109 ++++++++----- .../steps/AddLocationFirewallStep.tsx | 44 +++++- .../steps/AddLocationInternalVpnStep.tsx | 98 ++++++++++++ .../steps/AddLocationMfaStep.tsx | 34 +--- .../steps/AddLocationNetworkStep.tsx | 19 +-- .../steps/AddLocationServiceStep.tsx | 69 ++++++++ .../AddLocationStartStep.tsx | 46 ++---- web/src/pages/AddLocationPage/types.ts | 10 +- .../AddLocationPage/useAddLocationStore.tsx | 26 +++- .../EditLocationPage/EditLocationPage.tsx | 147 +++++++++++------- web/src/pages/LocationsPage/LocationsPage.tsx | 2 + .../components/LocationsTable.tsx | 9 +- .../AddLocationModal/AddLocationModal.tsx | 70 +++++++++ .../modals/AddUserModal/AddUserModal.tsx | 9 +- .../modals/SelectionModal/SelectionModal.tsx | 1 - .../modals/SelectionModal/style.scss | 0 web/src/shared/defguard-ui | 2 +- .../shared/hooks/modalControls/modalTypes.ts | 4 + 18 files changed, 507 insertions(+), 192 deletions(-) create mode 100644 web/src/pages/AddLocationPage/steps/AddLocationInternalVpnStep.tsx create mode 100644 web/src/pages/AddLocationPage/steps/AddLocationServiceStep.tsx rename web/src/pages/AddLocationPage/steps/{AddLocationStartStep => }/AddLocationStartStep.tsx (58%) create mode 100644 web/src/pages/LocationsPage/modals/AddLocationModal/AddLocationModal.tsx delete mode 100644 web/src/shared/components/modals/SelectionModal/style.scss diff --git a/web/src/pages/AddLocationPage/AddLocationPage.tsx b/web/src/pages/AddLocationPage/AddLocationPage.tsx index 4194ca47f..4b3f9d9f9 100644 --- a/web/src/pages/AddLocationPage/AddLocationPage.tsx +++ b/web/src/pages/AddLocationPage/AddLocationPage.tsx @@ -1,55 +1,86 @@ import { useNavigate } from '@tanstack/react-router'; +import { useMemo } from 'react'; import type { WizardPageStep } from '../../shared/components/wizard/types'; import { WizardPage } from '../../shared/components/wizard/WizardPage/WizardPage'; import { AddLocationAccessStep } from './steps/AddLocationAccessStep'; import { AddLocationFirewallStep } from './steps/AddLocationFirewallStep'; +import { AddLocationInternalVpnStep } from './steps/AddLocationInternalVpnStep'; import { AddLocationMfaStep } from './steps/AddLocationMfaStep'; import { AddLocationNetworkStep } from './steps/AddLocationNetworkStep'; -import { AddLocationStartStep } from './steps/AddLocationStartStep/AddLocationStartStep'; +import { AddLocationServiceStep } from './steps/AddLocationServiceStep'; +import { AddLocationStartStep } from './steps/AddLocationStartStep'; import { AddLocationPageStep } from './types'; import { useAddLocationStore } from './useAddLocationStore'; -const stepsData: WizardPageStep[] = [ - { - id: AddLocationPageStep.Start, - label: 'Public Facing Data', - description: 'Manage core details and connection parameters for your VPN location.', - }, - { - id: AddLocationPageStep.VpnNetwork, - label: 'Internal VPN & Network', - description: 'Manage core details and connection parameters for your VPN location.', - }, - { - id: AddLocationPageStep.LocationAccess, - label: 'Location Access', - description: 'Assign user groups with access permissions to this location.', - }, - { - id: AddLocationPageStep.Firewall, - label: 'Firewall', - description: - 'The default policy defines how to handle traffic not covered by ACL rules.', - }, - { - id: AddLocationPageStep.Mfa, - label: 'Multi-Factor Authentication', - description: - 'Configure multi-factor authentication (MFA) to add a secondary verification step to user authentication.', - }, -]; - -const stepsComponents = [ - , - , - , - , - , -]; - export const AddLocationPage = () => { const navigate = useNavigate(); const activeStep = useAddLocationStore((s) => s.activeStep); + const locationType = useAddLocationStore((s) => s.locationType); + + const stepsData: WizardPageStep[] = useMemo( + () => [ + { + id: AddLocationPageStep.Start, + label: 'Public Facing Data', + description: + 'Manage core details and connection parameters for your VPN location.', + }, + { + id: AddLocationPageStep.InternalVpnSettings, + label: 'Internal VPN ', + description: + 'Manage core details and connection parameters for your VPN location.', + }, + { + id: AddLocationPageStep.NetworkSettings, + label: 'Network Settings', + description: + 'Manage core details and connection parameters for your VPN location.', + }, + locationType === 'regular' + ? { + id: AddLocationPageStep.Mfa, + label: 'Multi-Factor Authentication', + description: + 'Configure multi-factor authentication (MFA) to add a secondary verification step to user authentication.', + } + : { + id: AddLocationPageStep.ServiceLocationSettings, + label: 'Service Location Settings', + description: + 'A special kind of locations that allow establishing automatic VPN connections on system boot. Service locations are currently only supported with Defguard Client for Windows.', + }, + { + id: AddLocationPageStep.AccessControl, + label: 'Access Control', + description: 'Assign user groups with access permissions to this location.', + }, + { + id: AddLocationPageStep.Firewall, + label: 'Firewall', + description: + 'The default policy defines how to handle traffic not covered by ACL rules.', + }, + ], + [locationType], + ); + + const stepsComponents = useMemo( + () => [ + , + , + , + locationType === 'regular' ? ( + + ) : ( + + ), + , + , + ], + [locationType], + ); + return ( { const [state, setState] = useState('disable'); + const navigate = useNavigate(); + + const { mutate, isPending } = useMutation({ + mutationFn: api.location.addLocation, + meta: { + invalidate: ['network'], + }, + onSuccess: () => { + navigate({ to: '/locations', replace: true }).then(() => { + setTimeout(() => { + useAddLocationStore.getState().reset(); + }, 100); + }); + }, + }); const saveChanges = useCallback((value: Choice) => { const enabled = value !== 'disable'; @@ -23,6 +42,22 @@ export const AddLocationFirewallStep = () => { }); }, []); + const handleSubmit = () => { + const enabled = state !== 'disable'; + const allowed = state === 'enabled-allowed'; + const storageState = cloneDeep( + omit(useAddLocationStore.getState(), [ + 'start', + 'reset', + 'activeStep', + 'locationType', + ]), + ); + storageState.acl_enabled = enabled; + storageState.acl_default_allow = allowed; + mutate(storageState); + }; + return ( { { - saveChanges(state); - useAddLocationStore.setState({ - activeStep: AddLocationPageStep.Mfa, - }); + handleSubmit(); }, }} > + + )} + {!valuePresent && ( +

    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 Z9BeOSniG6Gel>8Cm?z_$@|ytw002lPOjG~> diff --git a/web/public/fonts/Poppins/Poppins-ExtraBoldItalic.woff2 b/web/public/fonts/Poppins/Poppins-ExtraBoldItalic.woff2 deleted file mode 100644 index 9cf7164d8197906f3a2866873c79d9cb019ef36c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57108 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 J{d&n|6acFx?X3U+ diff --git a/web/public/fonts/Poppins/Poppins-ExtraLightItalic.woff2 b/web/public/fonts/Poppins/Poppins-ExtraLightItalic.woff2 deleted file mode 100644 index 8b7c5ef1f7cecc82f6d3b1bf2271673882e526e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57796 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̈́yh+WkHMF2`R&m>t!Ge1(O zrqe4j$hmVy(W=j|Tp3mMmhS6jLpuOZj0Nq~YhQ40>7tvyqLc;8=lH}Q(HAulpP$RK zPLS?=25T`F0-M8_6sX#!&(W_S3ZZx>$X`D?*!VnW;Qf zk7QQnYV!pEpL+P6C`FXoLf+gSF^lj^X+om8$>J}R4{1ot4&|?)b8ifdxoQ4WPRqU@ zJf%4BzVgQcmvA!1?;N>P8QvXWGaIFNOS_}Di z$y7s_2_Vh{dc#r*b@qekxH)B|lYtY^FsBK#%c>U(=fFN)Gfk_`O%>xNZSy2wAKa~) zrw903gIRy!hovr>=f13E9w=M@z!ccyx92DHzG^fMJTShxf>&hN3o&p0q||AqIj6CZCN z)qnrnffi8XxltD?3*h(bLog$l z^UU9gvdRpW9Cpax#!MTC_{8Pt>lIqMcM?&@jJl_xYjS zKsg6Tl?wPNX4}=co{?c*o`pJ|Bp`3oo;-8gi4UJv73M3tDd7(F&n|T8-QQc4*$AiRQO)YO9`}>s6P`UWg8nlal(Vi;n<0P>VI1b(56}zR%_uTGwv}o~-Amezqi!vYzo zOg}2q<|l2vn(>%)AC6o<#85SHUu7ie6%w0{W7vc-Aa!+)mO_;huzv1jIm3;`=n&!a zUUKRR@TOlOu?F}tmr-k%6npuZx*(tRm!BReu0cco0u8Y8sW;p^<9C30L8UG24=n|A zn7E;1Q2KGIX{$M8BW~Dz#i`6_z6wEW&dz}RU$UCj`<0AsZ0D?XJChudg<0f5Or+PQC4Hf7HyN5$do1BFL* zzZdPJ0?V^wqg2#YvbS(ayoW=EXB&-;y=$bqt~eE$dZ5XCfxNa-bH{5f9JwLnUnDP7 zVzFeB?X%S%Nr^c0p6yfS;>tdbU4%Bm;u_GK;qRj?DDY_;b&An;D7^4i8g4(8!bC>a zH#+mmHIgQ**-}1@-{GKaZa$I8+NB^LH(h+<6SoKge98aicu3*gi88e)f99R@T}ozb zkZnSn2;}1;#pm`o1&(h`!8{MDx{koeNq^yv0_DM;O=S3s{fKGuPq4NIk>tWU6G$kmLT-HtI1LG5V2Eh0HcU;-Mo1KW(j&yVy1oEf~^UfAK}5 z6j!~(UkBdPSaO$b`hyPB55d!;M|C=F{FqI){X-`pzwiFyI$QII4E)CWnL3~Om(AR( zUw|kGgfDM1Y(O?UcI^^jhT*;hErnuC4Z#jky8yI5)f;UVBjZ1I-l@NA+!ZKMtERa* zvPq@8mV_5~S-s=b>{`6A;_gyY?30GEnd!kNH6U`F!7x0dCR3s_g)(=9HlSf~WSQ)z z94r@1_If0eIKmv@7c^LviUkO-xhk1DHbGqssSzoZ=;Gt`XZ6L38!wHYp647qNv&;* zckW}EDlzn_hLr4)+Q?7*`U$m%`iDX{UZoC}lS7T#bZ=0H3TliX`EMtoV5(qE-_Gu2 zW_kNd$e%qCMt%Tw5ghw42B7FjXq?R7bb{wLUAs6e>8WKBaJ)MUnNTN{dE+OzZ8a$# zsFFYnY&1@FF?rtz*X~+S=D$=&{T2{+i=^L<-IBF(I;NJ)sEZ$!jq;9Xt<61qB&lZw z83Vg0`?wQ0V<$YVNF<$5V5er4Br-tNyYR-k1U9U3_BYm53a$p#25s$vEp;dut(EfM6Dot+KqzENJ-NSJDE1!h4Zne zF9zkZIwcn4kIYbMZY58`n`}+T5`|z_JA`vL-v!rDKR_jf< zt*?u%5>lUZ%X^TP6UgZ?{a zXwyN=#n)nGbbff5*RpnStuUDVEawpF5fPWk7CiQPjAB;?!{nWD?<_TUqGh%%ZHEY@ z;-YoetKE-iA-KU|I-((p)T=OJbfRFhd?<$|5hkbuV z;Hyb`C`^fu_M;HM;*wvo166i_C4hxuJ(V&Gf(ygThn}?@tsKaHxg~0@xdPRh{7_{B z%uW7!S~~}TtI)Ru$P76Uqmo>yzG1P(UwvV1UOkbAJwr~2cc z{Fwjq?MjbKdPNa+`xLuy?608AAGa%0AF2TdzX?}lE^kP-niz+0+pQIuUsSi(784^x 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 diff --git a/web/public/fonts/Poppins/Poppins-Italic.woff2 b/web/public/fonts/Poppins/Poppins-Italic.woff2 deleted file mode 100644 index 1db484df9bf15eb26089cb943ac55b77e4e8310c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58560 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