├── .devcontainer ├── devcontainer.json ├── dummy │ └── devcontainer.json ├── postCreate.sh └── postStart.sh ├── .dockerignore ├── .editorconfig ├── .env.example ├── .env.example.sail ├── .husky └── pre-commit ├── .prettierignore ├── .prettierrc.json ├── .sonarlint └── connectedMode.json ├── .tool-versions ├── .yarn └── releases │ └── yarn-4.6.0.cjs ├── .yarnrc.yml ├── CODE_OF_CONDUCT.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── app ├── Actions │ ├── AttemptToAuthenticateSocialite.php │ ├── AttemptToAuthenticateWebauthn.php │ ├── Fortify │ │ ├── CreateNewUser.php │ │ ├── PasswordValidationRules.php │ │ ├── RedirectIfTwoFactorAuthenticatable.php │ │ ├── ResetUserPassword.php │ │ ├── TwoFactorChallengeView.php │ │ ├── UpdateUserPassword.php │ │ └── UpdateUserProfileInformation.php │ └── Jetstream │ │ ├── DeleteUser.php │ │ └── UserProfile.php ├── Console │ ├── Commands │ │ ├── GetVersion.php │ │ ├── Local │ │ │ ├── MonicaLocalize.php │ │ │ ├── SetupDummyAccount.php │ │ │ └── UpdateAddressBookSubscription.php │ │ ├── NewAddressBookSubscription.php │ │ ├── SetupApplication.php │ │ ├── SetupDocumentation.php │ │ ├── SetupScout.php │ │ ├── TestReminders.php │ │ └── WaitForDb.php │ └── Scheduling │ │ ├── CronEvent.php │ │ └── Schedule.php ├── Domains │ ├── Contact │ │ ├── Dav │ │ │ ├── Event │ │ │ │ └── TokenDeleteEvent.php │ │ │ ├── ExportVCardResource.php │ │ │ ├── Exporter.php │ │ │ ├── ImportResource.php │ │ │ ├── ImportVCardResource.php │ │ │ ├── Importer.php │ │ │ ├── Jobs │ │ │ │ ├── CleanSyncToken.php │ │ │ │ └── UpdateVCard.php │ │ │ ├── Order.php │ │ │ ├── Services │ │ │ │ ├── ExportVCard.php │ │ │ │ ├── GetEtag.php │ │ │ │ └── ImportVCard.php │ │ │ ├── VCardResource.php │ │ │ └── Web │ │ │ │ ├── Auth │ │ │ │ └── AuthBackend.php │ │ │ │ ├── Backend │ │ │ │ ├── CardDAV │ │ │ │ │ ├── AddressBook.php │ │ │ │ │ ├── AddressBookHome.php │ │ │ │ │ ├── AddressBookRoot.php │ │ │ │ │ └── CardDAVBackend.php │ │ │ │ ├── IDAVBackend.php │ │ │ │ └── SyncDAVBackend.php │ │ │ │ ├── DAVACL │ │ │ │ └── PrincipalBackend.php │ │ │ │ └── DAVRedirect.php │ │ ├── DavClient │ │ │ ├── Jobs │ │ │ │ ├── DeleteLocalVCard.php │ │ │ │ ├── DeleteMultipleVCard.php │ │ │ │ ├── DeleteVCard.php │ │ │ │ ├── GetMultipleVCard.php │ │ │ │ ├── GetVCard.php │ │ │ │ ├── PushVCard.php │ │ │ │ ├── SynchronizeAddressBooks.php │ │ │ │ └── UpdateAddressBooks.php │ │ │ └── Services │ │ │ │ ├── CreateAddressBookSubscription.php │ │ │ │ ├── SynchronizeAddressBook.php │ │ │ │ ├── UpdateSubscriptionLocalSyncToken.php │ │ │ │ └── Utils │ │ │ │ ├── AddressBookGetter.php │ │ │ │ ├── AddressBookSynchronizer.php │ │ │ │ ├── Dav │ │ │ │ ├── DavClient.php │ │ │ │ ├── DavClientException.php │ │ │ │ ├── DavServerNotCompliantException.php │ │ │ │ └── ServiceUrlQuery.php │ │ │ │ ├── Model │ │ │ │ ├── ContactDeleteDto.php │ │ │ │ └── ContactDto.php │ │ │ │ ├── PrepareJobsContactPush.php │ │ │ │ ├── PrepareJobsContactPushMissed.php │ │ │ │ ├── PrepareJobsContactUpdater.php │ │ │ │ └── Traits │ │ │ │ ├── HasCapability.php │ │ │ │ ├── HasClient.php │ │ │ │ └── HasSubscription.php │ │ ├── ManageAvatar │ │ │ ├── Services │ │ │ │ ├── DestroyAvatar.php │ │ │ │ └── UpdatePhotoAsAvatar.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ModuleAvatarController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleAvatarViewHelper.php │ │ ├── ManageCalls │ │ │ ├── Services │ │ │ │ ├── CreateCall.php │ │ │ │ ├── DestroyCall.php │ │ │ │ └── UpdateCall.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleCallController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleCallsViewHelper.php │ │ ├── ManageContact │ │ │ ├── Dav │ │ │ │ ├── ExportAddress.php │ │ │ │ ├── ExportGender.php │ │ │ │ ├── ExportImportantDates.php │ │ │ │ ├── ExportLabels.php │ │ │ │ ├── ExportNames.php │ │ │ │ ├── ExportTimestamp.php │ │ │ │ ├── ExportWorkInformation.php │ │ │ │ ├── ImportAddress.php │ │ │ │ ├── ImportContact.php │ │ │ │ └── ImportLabels.php │ │ │ ├── Services │ │ │ │ ├── CopyContactToAnotherVault.php │ │ │ │ ├── CreateContact.php │ │ │ │ ├── DestroyContact.php │ │ │ │ ├── MoveContactToAnotherVault.php │ │ │ │ ├── ToggleArchiveContact.php │ │ │ │ ├── ToggleFavoriteContact.php │ │ │ │ ├── UpdateContact.php │ │ │ │ ├── UpdateContactSortOrder.php │ │ │ │ ├── UpdateContactTemplate.php │ │ │ │ └── UpdateContactView.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactArchiveController.php │ │ │ │ ├── ContactController.php │ │ │ │ ├── ContactFavoriteController.php │ │ │ │ ├── ContactLabelController.php │ │ │ │ ├── ContactMoveController.php │ │ │ │ ├── ContactNoTemplateController.php │ │ │ │ ├── ContactPageController.php │ │ │ │ ├── ContactSortController.php │ │ │ │ ├── ContactTemplateController.php │ │ │ │ └── ContactVCardController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── ContactCreateViewHelper.php │ │ │ │ ├── ContactEditViewHelper.php │ │ │ │ ├── ContactIndexViewHelper.php │ │ │ │ ├── ContactShowBlankViewHelper.php │ │ │ │ ├── ContactShowMoveViewHelper.php │ │ │ │ └── ContactShowViewHelper.php │ │ ├── ManageContactAddresses │ │ │ ├── Services │ │ │ │ ├── AssociateAddressToContact.php │ │ │ │ └── RemoveAddressFromContact.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModuleAddressController.php │ │ │ │ └── ContactModuleAddressImageController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleContactAddressesViewHelper.php │ │ ├── ManageContactFeed │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactFeedController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── Actions │ │ │ │ ├── ActionFeedAddress.php │ │ │ │ ├── ActionFeedContactInformation.php │ │ │ │ ├── ActionFeedGenericContactInformation.php │ │ │ │ ├── ActionFeedGoal.php │ │ │ │ ├── ActionFeedLabelAssigned.php │ │ │ │ ├── ActionFeedMoodTrackingEvent.php │ │ │ │ ├── ActionFeedNote.php │ │ │ │ └── ActionFeedPet.php │ │ │ │ └── ModuleFeedViewHelper.php │ │ ├── ManageContactImportantDates │ │ │ ├── Services │ │ │ │ ├── CreateContactImportantDate.php │ │ │ │ ├── DestroyContactImportantDate.php │ │ │ │ └── UpdateContactImportantDate.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactImportantDatesController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── ContactImportantDatesViewHelper.php │ │ │ │ └── ModuleImportantDatesViewHelper.php │ │ ├── ManageContactInformation │ │ │ ├── Dav │ │ │ │ └── ExportContactInformation.php │ │ │ ├── Services │ │ │ │ ├── CreateContactInformation.php │ │ │ │ ├── DestroyContactInformation.php │ │ │ │ └── UpdateContactInformation.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactInformationController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleContactInformationViewHelper.php │ │ ├── ManageContactName │ │ │ └── Web │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleContactNameViewHelper.php │ │ ├── ManageDocuments │ │ │ ├── Events │ │ │ │ └── FileDeleted.php │ │ │ ├── Listeners │ │ │ │ └── DeleteFileInStorage.php │ │ │ ├── Services │ │ │ │ ├── DestroyFile.php │ │ │ │ └── UploadFile.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleDocumentController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleDocumentsViewHelper.php │ │ ├── ManageGoals │ │ │ ├── Services │ │ │ │ ├── CreateGoal.php │ │ │ │ ├── DestroyGoal.php │ │ │ │ ├── ToggleStreak.php │ │ │ │ └── UpdateGoal.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactGoalController.php │ │ │ │ ├── ContactModuleGoalController.php │ │ │ │ └── ContactModuleStreakController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── GoalShowViewHelper.php │ │ │ │ └── ModuleGoalsViewHelper.php │ │ ├── ManageGroups │ │ │ ├── Dav │ │ │ │ ├── ExportKind.php │ │ │ │ ├── ExportMembers.php │ │ │ │ ├── ExportNames.php │ │ │ │ ├── ExportTimestamp.php │ │ │ │ ├── ImportGroup.php │ │ │ │ └── ImportMembers.php │ │ │ ├── Services │ │ │ │ ├── AddContactToGroup.php │ │ │ │ ├── CreateGroup.php │ │ │ │ ├── DestroyGroup.php │ │ │ │ ├── RemoveContactFromGroup.php │ │ │ │ └── UpdateGroup.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModuleGroupController.php │ │ │ │ └── GroupController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── GroupEditViewHelper.php │ │ │ │ ├── GroupIndexViewHelper.php │ │ │ │ ├── GroupShowViewHelper.php │ │ │ │ ├── GroupsViewHelper.php │ │ │ │ └── ModuleGroupsViewHelper.php │ │ ├── ManageJobInformation │ │ │ ├── Services │ │ │ │ ├── ResetJobInformation.php │ │ │ │ └── UpdateJobInformation.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleJobInformationController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleCompanyViewHelper.php │ │ ├── ManageLabels │ │ │ ├── Services │ │ │ │ ├── AssignLabel.php │ │ │ │ └── RemoveLabel.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleLabelController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleLabelViewHelper.php │ │ ├── ManageLifeEvents │ │ │ ├── Services │ │ │ │ ├── CreateLifeEvent.php │ │ │ │ ├── CreateTimelineEvent.php │ │ │ │ ├── DestroyLifeEvent.php │ │ │ │ ├── DestroyTimelineEvent.php │ │ │ │ ├── ToggleLifeEvent.php │ │ │ │ ├── ToggleTimelineEvent.php │ │ │ │ ├── UpdateLifeEvent.php │ │ │ │ └── UpdateTimelineEvent.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModuleLifeEventController.php │ │ │ │ ├── ContactModuleTimelineEventController.php │ │ │ │ ├── ToggleLifeEventController.php │ │ │ │ └── ToggleTimelineEventController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleLifeEventViewHelper.php │ │ ├── ManageLoans │ │ │ ├── Services │ │ │ │ ├── CreateLoan.php │ │ │ │ ├── DestroyLoan.php │ │ │ │ ├── ToggleLoan.php │ │ │ │ └── UpdateLoan.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModuleLoanController.php │ │ │ │ └── ContactModuleToggleLoanController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleLoanViewHelper.php │ │ ├── ManageMoodTrackingEvents │ │ │ ├── Services │ │ │ │ ├── CreateMoodTrackingEvent.php │ │ │ │ ├── DestroyMoodTrackingEvent.php │ │ │ │ └── UpdateMoodTrackingEvent.php │ │ │ └── Web │ │ │ │ └── Controllers │ │ │ │ └── ContactMoodTrackingEventsController.php │ │ ├── ManageNotes │ │ │ ├── Services │ │ │ │ ├── CreateNote.php │ │ │ │ ├── DestroyNote.php │ │ │ │ └── UpdateNote.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModuleNoteController.php │ │ │ │ └── ContactNotesController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── ModuleNotesViewHelper.php │ │ │ │ └── NotesIndexViewHelper.php │ │ ├── ManagePets │ │ │ ├── Services │ │ │ │ ├── CreatePet.php │ │ │ │ ├── DestroyPet.php │ │ │ │ └── UpdatePet.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModulePetController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModulePetsViewHelper.php │ │ ├── ManagePhotos │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactModulePhotoController.php │ │ │ │ └── ContactPhotoController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── ContactPhotosIndexViewHelper.php │ │ │ │ ├── ContactPhotosShowViewHelper.php │ │ │ │ └── ModulePhotosViewHelper.php │ │ ├── ManagePronouns │ │ │ ├── Services │ │ │ │ ├── RemovePronoun.php │ │ │ │ └── SetPronoun.php │ │ │ └── Web │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleGenderPronounViewHelper.php │ │ ├── ManageQuickFacts │ │ │ ├── Services │ │ │ │ ├── CreateQuickFact.php │ │ │ │ ├── DestroyQuickFact.php │ │ │ │ ├── ToggleQuickFactModule.php │ │ │ │ └── UpdateQuickFact.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── ContactQuickFactController.php │ │ │ │ └── ContactQuickFactToggleController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ContactModuleQuickFactViewHelper.php │ │ ├── ManageRelationships │ │ │ ├── Services │ │ │ │ ├── SetRelationship.php │ │ │ │ └── UnsetRelationship.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactRelationshipsController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── ContactRelationshipsCreateViewHelper.php │ │ │ │ ├── ModuleFamilySummaryViewHelper.php │ │ │ │ └── ModuleRelationshipViewHelper.php │ │ ├── ManageReligion │ │ │ ├── Services │ │ │ │ └── UpdateReligion.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleReligionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleReligionViewHelper.php │ │ ├── ManageReminders │ │ │ ├── Jobs │ │ │ │ └── ProcessScheduledContactReminders.php │ │ │ ├── Services │ │ │ │ ├── CreateContactReminder.php │ │ │ │ ├── DestroyReminder.php │ │ │ │ ├── RescheduleContactReminderForChannel.php │ │ │ │ ├── ScheduleContactReminderForUser.php │ │ │ │ └── UpdateContactReminder.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ContactModuleReminderController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ModuleRemindersViewHelper.php │ │ └── ManageTasks │ │ │ ├── Services │ │ │ ├── CreateContactTask.php │ │ │ ├── DestroyContactTask.php │ │ │ ├── ToggleContactTask.php │ │ │ └── UpdateContactTask.php │ │ │ └── Web │ │ │ ├── Controllers │ │ │ └── ContactModuleTaskController.php │ │ │ └── ViewHelpers │ │ │ └── ModuleContactTasksViewHelper.php │ ├── Settings │ │ ├── CancelAccount │ │ │ ├── Services │ │ │ │ └── CancelAccount.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── CancelAccountController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── CancelAccountViewHelper.php │ │ ├── CreateAccount │ │ │ ├── Jobs │ │ │ │ └── SetupAccount.php │ │ │ └── Services │ │ │ │ └── CreateAccount.php │ │ ├── ManageAddressTypes │ │ │ ├── Services │ │ │ │ ├── CreateAddressType.php │ │ │ │ ├── DestroyAddressType.php │ │ │ │ └── UpdateAddressType.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizeAddressTypeController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeAddressTypeIndexViewHelper.php │ │ ├── ManageCallReasons │ │ │ ├── Services │ │ │ │ ├── CreateCallReason.php │ │ │ │ ├── CreateCallReasonType.php │ │ │ │ ├── DestroyCallReason.php │ │ │ │ ├── DestroyCallReasonType.php │ │ │ │ ├── UpdateCallReason.php │ │ │ │ └── UpdateCallReasonType.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeCallReasonTypesController.php │ │ │ │ └── PersonalizeCallReasonsController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeCallReasonsIndexViewHelper.php │ │ ├── ManageContactInformationTypes │ │ │ ├── Services │ │ │ │ ├── CreateContactInformationType.php │ │ │ │ ├── DestroyContactInformationType.php │ │ │ │ └── UpdateContactInformationType.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizeContatInformationTypesController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeContactInformationTypeIndexViewHelper.php │ │ ├── ManageCurrencies │ │ │ ├── Services │ │ │ │ ├── DisableAllCurrencies.php │ │ │ │ ├── EnableAllCurrencies.php │ │ │ │ └── ToggleCurrency.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── CurrencyController.php │ │ │ │ └── PersonalizeCurrencyController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── CurrencyIndexViewHelper.php │ │ │ │ └── PersonalizeCurrencyIndexViewHelper.php │ │ ├── ManageGenders │ │ │ ├── Services │ │ │ │ ├── CreateGender.php │ │ │ │ ├── DestroyGender.php │ │ │ │ └── UpdateGender.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── ManageGenderController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── ManageGenderIndexViewHelper.php │ │ ├── ManageGiftOccasions │ │ │ ├── Services │ │ │ │ ├── CreateGiftOccasion.php │ │ │ │ ├── DestroyGiftOccasion.php │ │ │ │ ├── UpdateGiftOccasion.php │ │ │ │ └── UpdateGiftOccasionPosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeGiftOccasionController.php │ │ │ │ └── PersonalizeGiftOccasionsPositionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeGiftOccasionViewHelper.php │ │ ├── ManageGiftStates │ │ │ ├── Services │ │ │ │ ├── CreateGiftState.php │ │ │ │ ├── DestroyGiftState.php │ │ │ │ ├── UpdateGiftState.php │ │ │ │ └── UpdateGiftStatePosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeGiftStateController.php │ │ │ │ └── PersonalizeGiftStatesPositionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeGiftStateViewHelper.php │ │ ├── ManageGroupTypes │ │ │ ├── Services │ │ │ │ ├── CreateGroupType.php │ │ │ │ ├── CreateGroupTypeRole.php │ │ │ │ ├── DestroyGroupType.php │ │ │ │ ├── DestroyGroupTypeRole.php │ │ │ │ ├── UpdateGroupType.php │ │ │ │ ├── UpdateGroupTypePosition.php │ │ │ │ ├── UpdateGroupTypeRole.php │ │ │ │ └── UpdateGroupTypeRolePosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeGroupTypeController.php │ │ │ │ ├── PersonalizeGroupTypePositionController.php │ │ │ │ ├── PersonalizeGroupTypeRoleController.php │ │ │ │ └── PersonalizeGroupTypeRolePositionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeGroupTypeViewHelper.php │ │ ├── ManageModules │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizeModulesController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeModuleIndexViewHelper.php │ │ ├── ManageNotificationChannels │ │ │ ├── Jobs │ │ │ │ └── SendVerificationEmailChannel.php │ │ │ ├── Services │ │ │ │ ├── CreateUserNotificationChannel.php │ │ │ │ ├── DestroyUserNotificationChannel.php │ │ │ │ ├── ScheduleAllContactRemindersForNotificationChannel.php │ │ │ │ ├── SendTestEmail.php │ │ │ │ ├── SendTestTelegramNotification.php │ │ │ │ ├── ToggleUserNotificationChannel.php │ │ │ │ └── VerifyUserNotificationChannelEmailAddress.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── NotificationsController.php │ │ │ │ ├── NotificationsLogController.php │ │ │ │ ├── NotificationsTestController.php │ │ │ │ ├── NotificationsToggleController.php │ │ │ │ ├── NotificationsVerificationController.php │ │ │ │ ├── TelegramNotificationsController.php │ │ │ │ └── TelegramWebhookController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── NotificationsIndexViewHelper.php │ │ │ │ └── NotificationsLogIndexViewHelper.php │ │ ├── ManagePersonalization │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizeController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeIndexViewHelper.php │ │ ├── ManagePetCategories │ │ │ ├── Services │ │ │ │ ├── CreatePetCategory.php │ │ │ │ ├── DestroyPetCategory.php │ │ │ │ └── UpdatePetCategory.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizePetCategoriesController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizePetCategoriesIndexViewHelper.php │ │ ├── ManagePostTemplates │ │ │ ├── Services │ │ │ │ ├── CreatePostTemplate.php │ │ │ │ ├── CreatePostTemplateSection.php │ │ │ │ ├── DestroyPostTemplate.php │ │ │ │ ├── DestroyPostTemplateSection.php │ │ │ │ ├── UpdatePostTemplate.php │ │ │ │ ├── UpdatePostTemplatePosition.php │ │ │ │ ├── UpdatePostTemplateSection.php │ │ │ │ └── UpdatePostTemplateSectionPosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizePostTemplateController.php │ │ │ │ ├── PersonalizePostTemplatePositionController.php │ │ │ │ ├── PersonalizePostTemplateSectionController.php │ │ │ │ └── PersonalizePostTemplateSectionPositionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizePostTemplateViewHelper.php │ │ ├── ManagePronouns │ │ │ ├── Services │ │ │ │ ├── CreatePronoun.php │ │ │ │ ├── DestroyPronoun.php │ │ │ │ └── UpdatePronoun.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── PersonalizePronounController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizePronounIndexViewHelper.php │ │ ├── ManageRelationshipTypes │ │ │ ├── Services │ │ │ │ ├── CreateRelationshipGroupType.php │ │ │ │ ├── CreateRelationshipType.php │ │ │ │ ├── DestroyRelationshipGroupType.php │ │ │ │ ├── DestroyRelationshipType.php │ │ │ │ ├── UpdateRelationshipGroupType.php │ │ │ │ └── UpdateRelationshipType.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeRelationshipController.php │ │ │ │ └── PersonalizeRelationshipTypeController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeRelationshipIndexViewHelper.php │ │ ├── ManageReligion │ │ │ ├── Services │ │ │ │ ├── CreateReligion.php │ │ │ │ ├── DestroyReligion.php │ │ │ │ ├── UpdateReligion.php │ │ │ │ └── UpdateReligionPosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeReligionController.php │ │ │ │ └── PersonalizeReligionsPositionController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── PersonalizeReligionViewHelper.php │ │ ├── ManageSettings │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── SettingsController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── SettingsIndexViewHelper.php │ │ ├── ManageStorage │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ └── AccountStorageController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── StorageIndexViewHelper.php │ │ ├── ManageTemplates │ │ │ ├── Services │ │ │ │ ├── AssociateModuleToTemplatePage.php │ │ │ │ ├── CreateModule.php │ │ │ │ ├── CreateTemplate.php │ │ │ │ ├── CreateTemplatePage.php │ │ │ │ ├── DestroyModule.php │ │ │ │ ├── DestroyTemplate.php │ │ │ │ ├── DestroyTemplatePage.php │ │ │ │ ├── RemoveModuleFromTemplatePage.php │ │ │ │ ├── UpdateModule.php │ │ │ │ ├── UpdateModulePosition.php │ │ │ │ ├── UpdateTemplate.php │ │ │ │ ├── UpdateTemplatePage.php │ │ │ │ └── UpdateTemplatePagePosition.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PersonalizeTemplatePageModulesController.php │ │ │ │ ├── PersonalizeTemplatePageModulesPositionController.php │ │ │ │ ├── PersonalizeTemplatePagePositionController.php │ │ │ │ ├── PersonalizeTemplatePagesController.php │ │ │ │ └── PersonalizeTemplatesController.php │ │ │ │ └── ViewHelpers │ │ │ │ ├── PersonalizeTemplateIndexViewHelper.php │ │ │ │ ├── PersonalizeTemplatePageShowViewHelper.php │ │ │ │ └── PersonalizeTemplateShowViewHelper.php │ │ ├── ManageUserPreferences │ │ │ ├── Services │ │ │ │ ├── StoreDateFormatPreference.php │ │ │ │ ├── StoreDistanceFormatPreference.php │ │ │ │ ├── StoreHelpPreference.php │ │ │ │ ├── StoreLocale.php │ │ │ │ ├── StoreMapsPreference.php │ │ │ │ ├── StoreNameOrderPreference.php │ │ │ │ ├── StoreNumberFormatPreference.php │ │ │ │ └── StoreTimezone.php │ │ │ └── Web │ │ │ │ ├── Controllers │ │ │ │ ├── PreferencesController.php │ │ │ │ ├── PreferencesDateFormatController.php │ │ │ │ ├── PreferencesDistanceFormatController.php │ │ │ │ ├── PreferencesHelpController.php │ │ │ │ ├── PreferencesLocaleController.php │ │ │ │ ├── PreferencesMapsPreferenceController.php │ │ │ │ ├── PreferencesNameOrderController.php │ │ │ │ ├── PreferencesNumberFormatController.php │ │ │ │ └── PreferencesTimezoneController.php │ │ │ │ └── ViewHelpers │ │ │ │ └── UserPreferencesIndexViewHelper.php │ │ └── ManageUsers │ │ │ ├── Api │ │ │ └── Controllers │ │ │ │ └── UserController.php │ │ │ ├── Services │ │ │ ├── AcceptInvitation.php │ │ │ ├── DestroyUser.php │ │ │ ├── GiveAdministratorPrivilege.php │ │ │ ├── InviteUser.php │ │ │ └── RemoveAdministratorPrivilege.php │ │ │ └── Web │ │ │ ├── Controllers │ │ │ └── UserController.php │ │ │ └── ViewHelpers │ │ │ ├── UserCreateViewHelper.php │ │ │ └── UserIndexViewHelper.php │ └── Vault │ │ ├── ManageAddresses │ │ └── Services │ │ │ ├── CreateAddress.php │ │ │ ├── DestroyAddress.php │ │ │ ├── GetGPSCoordinate.php │ │ │ └── UpdateAddress.php │ │ ├── ManageCalendar │ │ └── Web │ │ │ ├── Controllers │ │ │ └── VaultCalendarController.php │ │ │ └── ViewHelpers │ │ │ └── VaultCalendarIndexViewHelper.php │ │ ├── ManageCompanies │ │ ├── Services │ │ │ └── CreateCompany.php │ │ └── Web │ │ │ ├── Controllers │ │ │ └── VaultCompanyController.php │ │ │ └── ViewHelpers │ │ │ ├── CompanyIndexViewHelper.php │ │ │ └── CompanyViewHelper.php │ │ ├── ManageFiles │ │ └── Web │ │ │ ├── Controllers │ │ │ └── VaultFileController.php │ │ │ └── ViewHelpers │ │ │ └── VaultFileIndexViewHelper.php │ │ ├── ManageJournals │ │ ├── Services │ │ │ ├── AddContactToPost.php │ │ │ ├── AddPhotoToPost.php │ │ │ ├── AddPostToSliceOfLife.php │ │ │ ├── AssignTag.php │ │ │ ├── CreateJournal.php │ │ │ ├── CreateJournalMetric.php │ │ │ ├── CreatePost.php │ │ │ ├── CreatePostMetric.php │ │ │ ├── CreateSliceOfLife.php │ │ │ ├── DestroyJournal.php │ │ │ ├── DestroyJournalMetric.php │ │ │ ├── DestroyPost.php │ │ │ ├── DestroyPostMetric.php │ │ │ ├── DestroySliceOfLife.php │ │ │ ├── IncrementPostReadCounter.php │ │ │ ├── RemoveContactFromPost.php │ │ │ ├── RemovePostFromSliceOfLife.php │ │ │ ├── RemoveSliceOfLifeCoverImage.php │ │ │ ├── RemoveTag.php │ │ │ ├── SetSliceOfLifeCoverImage.php │ │ │ ├── UpdateJournal.php │ │ │ ├── UpdateJournalMetric.php │ │ │ ├── UpdatePost.php │ │ │ ├── UpdatePostMetric.php │ │ │ └── UpdateSliceOfLife.php │ │ └── Web │ │ │ ├── Controllers │ │ │ ├── JournalController.php │ │ │ ├── JournalMetricController.php │ │ │ ├── JournalPhotoController.php │ │ │ ├── PostController.php │ │ │ ├── PostMetricController.php │ │ │ ├── PostPhotoController.php │ │ │ ├── PostSliceOfLifeController.php │ │ │ ├── PostTagController.php │ │ │ ├── SliceOfLifeController.php │ │ │ └── SliceOfLifeCoverImageController.php │ │ │ └── ViewHelpers │ │ │ ├── JournalCreateViewHelper.php │ │ │ ├── JournalEditViewHelper.php │ │ │ ├── JournalIndexViewHelper.php │ │ │ ├── JournalMetricIndexViewHelper.php │ │ │ ├── JournalPhotoIndexViewHelper.php │ │ │ ├── JournalShowViewHelper.php │ │ │ ├── ModuleContactPostViewHelper.php │ │ │ ├── ModulePostsViewHelper.php │ │ │ ├── PostCreateViewHelper.php │ │ │ ├── PostEditViewHelper.php │ │ │ ├── PostShowViewHelper.php │ │ │ ├── SliceOfLifeEditViewHelper.php │ │ │ ├── SliceOfLifeIndexViewHelper.php │ │ │ └── SliceOfLifeShowViewHelper.php │ │ ├── ManageLifeMetrics │ │ ├── Services │ │ │ ├── CreateLifeMetric.php │ │ │ ├── DestroyLifeMetric.php │ │ │ ├── IncrementLifeMetric.php │ │ │ └── UpdateLifeMetric.php │ │ └── Web │ │ │ ├── Controllers │ │ │ ├── LifeMetricContactController.php │ │ │ └── LifeMetricController.php │ │ │ └── ViewHelpers │ │ │ └── VaultLifeMetricsViewHelper.php │ │ ├── ManageReports │ │ └── Web │ │ │ ├── Controllers │ │ │ ├── ReportAddressesCitiesController.php │ │ │ ├── ReportAddressesController.php │ │ │ ├── ReportAddressesCountriesController.php │ │ │ ├── ReportImportantDateSummaryController.php │ │ │ ├── ReportIndexController.php │ │ │ └── ReportMoodTrackingEventController.php │ │ │ └── ViewHelpers │ │ │ ├── ReportAddressIndexViewHelper.php │ │ │ ├── ReportCitiesShowViewHelper.php │ │ │ ├── ReportCountriesShowViewHelper.php │ │ │ ├── ReportImportantDateSummaryIndexViewHelper.php │ │ │ ├── ReportIndexViewHelper.php │ │ │ └── ReportMoodTrackingEventIndexViewHelper.php │ │ ├── ManageTasks │ │ └── Web │ │ │ ├── Controllers │ │ │ └── VaultTaskController.php │ │ │ └── ViewHelpers │ │ │ └── VaultTasksIndexViewHelper.php │ │ ├── ManageVault │ │ ├── Api │ │ │ └── Controllers │ │ │ │ └── VaultController.php │ │ ├── Services │ │ │ ├── CreateVault.php │ │ │ ├── DestroyVault.php │ │ │ ├── UpdateVault.php │ │ │ ├── UpdateVaultDashboardDefaultTab.php │ │ │ └── UpdateVaultTabVisibility.php │ │ └── Web │ │ │ ├── Controllers │ │ │ ├── VaultController.php │ │ │ ├── VaultDefaultTabOnDashboardController.php │ │ │ ├── VaultFeedController.php │ │ │ ├── VaultLifeEventController.php │ │ │ └── VaultReminderController.php │ │ │ └── ViewHelpers │ │ │ ├── VaultCreateViewHelper.php │ │ │ ├── VaultEditViewHelper.php │ │ │ ├── VaultIndexViewHelper.php │ │ │ ├── VaultReminderIndexViewHelper.php │ │ │ └── VaultShowViewHelper.php │ │ ├── ManageVaultImportantDateTypes │ │ ├── Services │ │ │ ├── CreateContactImportantDateType.php │ │ │ ├── DestroyContactImportantDateType.php │ │ │ └── UpdateContactImportantDateType.php │ │ └── Web │ │ │ └── ViewHelpers │ │ │ └── VaultImportantDateTypesViewHelper.php │ │ ├── ManageVaultSettings │ │ ├── Services │ │ │ ├── ChangeVaultAccess.php │ │ │ ├── CreateLabel.php │ │ │ ├── CreateLifeEventCategory.php │ │ │ ├── CreateLifeEventType.php │ │ │ ├── CreateMoodTrackingParameter.php │ │ │ ├── CreateQuickFactTemplate.php │ │ │ ├── CreateTag.php │ │ │ ├── DestroyLabel.php │ │ │ ├── DestroyLifeEventCategory.php │ │ │ ├── DestroyLifeEventType.php │ │ │ ├── DestroyMoodTrackingParameter.php │ │ │ ├── DestroyQuickFactTemplate.php │ │ │ ├── DestroyTag.php │ │ │ ├── GrantVaultAccessToUser.php │ │ │ ├── RemoveVaultAccess.php │ │ │ ├── UpdateLabel.php │ │ │ ├── UpdateLifeEventCategory.php │ │ │ ├── UpdateLifeEventCategoryPosition.php │ │ │ ├── UpdateLifeEventType.php │ │ │ ├── UpdateLifeEventTypePosition.php │ │ │ ├── UpdateMoodTrackingParameter.php │ │ │ ├── UpdateMoodTrackingParameterPosition.php │ │ │ ├── UpdateQuickFactTemplate.php │ │ │ ├── UpdateQuickFactTemplatePosition.php │ │ │ ├── UpdateTag.php │ │ │ └── UpdateVaultDefaultTemplate.php │ │ └── Web │ │ │ ├── Controllers │ │ │ ├── VaultSettingsContactImportantDateTypeController.php │ │ │ ├── VaultSettingsController.php │ │ │ ├── VaultSettingsLabelController.php │ │ │ ├── VaultSettingsLifeEventCategoriesController.php │ │ │ ├── VaultSettingsLifeEventCategoriesPositionController.php │ │ │ ├── VaultSettingsLifeEventTypesController.php │ │ │ ├── VaultSettingsLifeEventTypesPositionController.php │ │ │ ├── VaultSettingsMoodTrackingParameterController.php │ │ │ ├── VaultSettingsMoodTrackingParameterPositionController.php │ │ │ ├── VaultSettingsQuickFactTemplateController.php │ │ │ ├── VaultSettingsQuickFactTemplatePositionController.php │ │ │ ├── VaultSettingsTabVisibilityController.php │ │ │ ├── VaultSettingsTagController.php │ │ │ ├── VaultSettingsTemplateController.php │ │ │ └── VaultSettingsUserController.php │ │ │ └── ViewHelpers │ │ │ └── VaultSettingsIndexViewHelper.php │ │ └── Search │ │ └── Web │ │ ├── Controllers │ │ ├── VaultContactSearchController.php │ │ ├── VaultMostConsultedContactsController.php │ │ └── VaultSearchController.php │ │ └── ViewHelpers │ │ ├── VaultContactSearchViewHelper.php │ │ ├── VaultMostConsultedViewHelper.php │ │ └── VaultSearchIndexViewHelper.php ├── Exceptions │ ├── CantBeDeletedException.php │ ├── EntryAlreadyExistException.php │ ├── EnvVariablesNotSetException.php │ ├── Handler.php │ ├── MaximumNumberOfUsersInVaultException.php │ ├── NotEnoughPermissionException.php │ └── SameUserException.php ├── Helpers │ ├── AvatarHelper.php │ ├── CollectionHelper.php │ ├── ContactCardHelper.php │ ├── ContactImportantDateHelper.php │ ├── ContactReminderHelper.php │ ├── DateHelper.php │ ├── DistanceHelper.php │ ├── FileHelper.php │ ├── GoalHelper.php │ ├── ImportantDateHelper.php │ ├── MapHelper.php │ ├── MonetaryNumberHelper.php │ ├── NameHelper.php │ ├── PaginatorHelper.php │ ├── PostHelper.php │ ├── SQLHelper.php │ ├── ScoutHelper.php │ ├── SignupHelper.php │ ├── SliceOfLifeHelper.php │ ├── StorageHelper.php │ ├── UserHelper.php │ ├── VaultHelper.php │ ├── WallpaperHelper.php │ ├── WikipediaHelper.php │ └── helpers.php ├── Http │ ├── Controllers │ │ ├── ApiController.php │ │ ├── Auth │ │ │ ├── AcceptInvitationController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ ├── SocialiteCallbackController.php │ │ │ └── ViewHelpers │ │ │ │ └── AcceptInvitationShowViewHelper.php │ │ ├── Controller.php │ │ └── Profile │ │ │ ├── UserTokenController.php │ │ │ ├── WebauthnDestroyResponse.php │ │ │ └── WebauthnUpdateResponse.php │ ├── Middleware │ │ ├── Authenticate.php │ │ ├── AuthenticateWithTokenOnBasicAuth.php │ │ ├── EnsureDavRequestsAreStateful.php │ │ ├── EnsureSignupIsEnabled.php │ │ ├── HandleInertiaRequests.php │ │ └── SanctumSetUser.php │ ├── Requests │ │ └── Auth │ │ │ └── LoginRequest.php │ └── Resources │ │ ├── UserResource.php │ │ └── VaultResource.php ├── Interfaces │ └── ServiceInterface.php ├── Listeners │ ├── LoginListener.php │ └── WebauthnAuthenticateListener.php ├── Logging │ ├── CleanLogs.php │ ├── Loggable.php │ └── LoggingHandler.php ├── Mail │ ├── TestEmailSent.php │ ├── UserInvited.php │ └── UserNotificationChannelEmailCreated.php ├── Models │ ├── Account.php │ ├── Address.php │ ├── AddressBookSubscription.php │ ├── AddressType.php │ ├── Call.php │ ├── CallReason.php │ ├── CallReasonType.php │ ├── Company.php │ ├── Contact.php │ ├── ContactFeedItem.php │ ├── ContactImportantDate.php │ ├── ContactImportantDateType.php │ ├── ContactInformation.php │ ├── ContactInformationType.php │ ├── ContactReminder.php │ ├── ContactTask.php │ ├── Currency.php │ ├── Emotion.php │ ├── File.php │ ├── Gender.php │ ├── GiftOccasion.php │ ├── GiftState.php │ ├── Goal.php │ ├── Group.php │ ├── GroupType.php │ ├── GroupTypeRole.php │ ├── Instance │ │ └── Cron.php │ ├── Journal.php │ ├── JournalMetric.php │ ├── Label.php │ ├── LifeEvent.php │ ├── LifeEventCategory.php │ ├── LifeEventType.php │ ├── LifeMetric.php │ ├── Loan.php │ ├── Log.php │ ├── Module.php │ ├── ModuleRow.php │ ├── ModuleRowField.php │ ├── MoodTrackingEvent.php │ ├── MoodTrackingParameter.php │ ├── MultiAvatar.php │ ├── Note.php │ ├── Pet.php │ ├── PetCategory.php │ ├── Post.php │ ├── PostMetric.php │ ├── PostSection.php │ ├── PostTemplate.php │ ├── PostTemplateSection.php │ ├── Pronoun.php │ ├── QuickFact.php │ ├── RelationshipGroupType.php │ ├── RelationshipType.php │ ├── Religion.php │ ├── SliceOfLife.php │ ├── Streak.php │ ├── SyncToken.php │ ├── Tag.php │ ├── Template.php │ ├── TemplatePage.php │ ├── TimelineEvent.php │ ├── User.php │ ├── UserNotificationChannel.php │ ├── UserNotificationSent.php │ ├── UserToken.php │ ├── Vault.php │ ├── VaultQuickFactsTemplate.php │ └── WebauthnKey.php ├── Notifications │ └── ReminderTriggered.php ├── Policies │ └── VaultPolicy.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── DAVServiceProvider.php │ ├── FortifyServiceProvider.php │ ├── JetstreamServiceProvider.php │ └── TelescopeServiceProvider.php ├── Services │ ├── BaseService.php │ └── QueuableService.php └── Traits │ ├── DAVFormat.php │ └── JsonRespondController.php ├── artisan ├── bootstrap ├── app.php └── providers.php ├── composer.json ├── composer.lock ├── config ├── api.php ├── app.php ├── auth.php ├── cache.php ├── clockwork.php ├── cors.php ├── database.php ├── dav.php ├── debugbar.php ├── filesystems.php ├── fortify.php ├── jetstream.php ├── laravelsabre.php ├── localizator.php ├── localizer.php ├── logging.php ├── mail.php ├── monica.php ├── queue.php ├── scout.php ├── scribe.php ├── sentry-tunnel.php ├── sentry.php ├── services.php ├── session.php ├── telescope.php ├── trustedproxy.php ├── unsplash.php └── webauthn.php ├── database ├── factories │ ├── AccountFactory.php │ ├── AddressBookSubscriptionFactory.php │ ├── AddressFactory.php │ ├── AddressTypeFactory.php │ ├── CallFactory.php │ ├── CallReasonFactory.php │ ├── CallReasonTypeFactory.php │ ├── CompanyFactory.php │ ├── ContactFactory.php │ ├── ContactFeedItemFactory.php │ ├── ContactImportantDateFactory.php │ ├── ContactImportantDateTypeFactory.php │ ├── ContactInformationFactory.php │ ├── ContactInformationTypeFactory.php │ ├── ContactReminderFactory.php │ ├── ContactTaskFactory.php │ ├── CurrencyFactory.php │ ├── EmotionFactory.php │ ├── FileFactory.php │ ├── GenderFactory.php │ ├── GiftOccasionFactory.php │ ├── GiftStateFactory.php │ ├── GoalFactory.php │ ├── GroupFactory.php │ ├── GroupTypeFactory.php │ ├── GroupTypeRoleFactory.php │ ├── Instance │ │ └── CronFactory.php │ ├── JournalFactory.php │ ├── JournalMetricFactory.php │ ├── LabelFactory.php │ ├── LifeEventCategoryFactory.php │ ├── LifeEventFactory.php │ ├── LifeEventTypeFactory.php │ ├── LifeMetricFactory.php │ ├── LoanFactory.php │ ├── ModuleFactory.php │ ├── ModuleRowFactory.php │ ├── ModuleRowFieldFactory.php │ ├── MoodTrackingEventFactory.php │ ├── MoodTrackingParameterFactory.php │ ├── NoteFactory.php │ ├── PetCategoryFactory.php │ ├── PetFactory.php │ ├── PostFactory.php │ ├── PostMetricFactory.php │ ├── PostSectionFactory.php │ ├── PostTemplateFactory.php │ ├── PostTemplateSectionFactory.php │ ├── PronounFactory.php │ ├── QuickFactFactory.php │ ├── RelationshipGroupTypeFactory.php │ ├── RelationshipTypeFactory.php │ ├── ReligionFactory.php │ ├── SliceOfLifeFactory.php │ ├── StreakFactory.php │ ├── SyncTokenFactory.php │ ├── TagFactory.php │ ├── TemplateFactory.php │ ├── TemplatePageFactory.php │ ├── TimelineEventFactory.php │ ├── UserFactory.php │ ├── UserNotificationChannelFactory.php │ ├── UserNotificationSentFactory.php │ ├── UserTokenFactory.php │ ├── VaultFactory.php │ └── VaultQuickFactsTemplateFactory.php ├── migrations │ ├── 2013_04_25_132851_create_accounts_table.php │ ├── 2013_04_25_155842_create_attributes_table.php │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_000010_create_vaults_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php │ ├── 2018_08_08_100000_create_telescope_entries_table.php │ ├── 2018_12_29_135516_create_synctokens.php │ ├── 2019_03_29_163611_create_webauthn_keys.php │ ├── 2019_05_05_194746_create_crons.php │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ ├── 2020_02_17_224235_create_genders_table.php │ ├── 2020_02_19_173445_create_pronouns_table.php │ ├── 2020_03_20_213318_create_address_types_table.php │ ├── 2020_04_23_133132_create_companies_table.php │ ├── 2020_04_25_133132_create_contacts_table.php │ ├── 2020_04_26_215133_create_addresses_table.php │ ├── 2021_07_06_065356_create_user_token_socialite.php │ ├── 2021_10_09_204235_create_group_table.php │ ├── 2021_10_16_184625_create_relationship_types_table.php │ ├── 2021_10_18_000002_create_pets_table.php │ ├── 2021_10_19_022411_create_contact_feed_table.php │ ├── 2021_10_19_192432_create_labels_table.php │ ├── 2021_10_20_004100_create_contact_fields_table.php │ ├── 2021_10_20_163535_create_emotions_table.php │ ├── 2021_10_21_013005_create_notes_table.php │ ├── 2022_01_22_183321_create_jobs_table.php │ ├── 2022_02_09_145139_create_contact_date_table.php │ ├── 2022_02_18_215852_create_reminders_table.php │ ├── 2022_02_24_002342_create_files_table.php │ ├── 2022_03_22_180407_create_currencies_table.php │ ├── 2022_03_23_005751_create_loans_table.php │ ├── 2022_05_13_201216_create_contact_tasks_table.php │ ├── 2022_05_16_184121_create_call_reasons_table.php │ ├── 2022_05_16_193917_create_calls_table.php │ ├── 2022_05_17_155546_create_life_events_table.php │ ├── 2022_06_02_011219_create_goals_table.php │ ├── 2022_06_09_173049_create_gifts_table.php │ ├── 2022_07_31_200647_create_sessions_table.php │ ├── 2022_07_31_200800_create_cache_table.php │ ├── 2022_09_20_183401_create_journal_table.php │ ├── 2022_09_22_111510_create_posts_table.php │ ├── 2022_10_30_202904_create_religions_table.php │ ├── 2022_11_01_174411_add_religion_to_contact.php │ ├── 2022_11_16_221702_create_job_batches_table.php │ ├── 2022_12_15_004442_create_slices_of_life_table.php │ ├── 2023_01_07_005110_create_mood_tracking_parameters_table.php │ ├── 2023_01_08_155554_create_mood_tracking_table.php │ ├── 2023_02_07_022607_create_vault_quick_facts_template_table.php │ ├── 2023_03_16_182310_create_post_metrics_table.php │ ├── 2023_03_31_125903_create_life_metrics_table.php │ ├── 2023_05_06_125432_add_contact_sort_order_to_users.php │ ├── 2023_06_12_093907_add_instance_administrator.php │ ├── 2023_06_16_103430_fix_call_reasons.php │ ├── 2023_06_28_102228_fix_locale.php │ ├── 2023_07_02_230200_fix_synctokens.php │ ├── 2023_07_03_230200_create_addressbook_subscription.php │ ├── 2023_07_29_200200_add_contact_distant_uri.php │ ├── 2023_07_29_200200_add_groups_distant_uri.php │ ├── 2023_08_22_175035_fix_group_grouptype.php │ ├── 2023_08_30_202650_create_logs_table.php │ ├── 2023_08_30_202650_fix_addressbook_currentlogid.php │ ├── 2023_10_02_195229_add_can_be_deleted_to_templates.php │ ├── 2023_10_06_064814_rename_locales.php │ ├── 2024_05_12_170430_add_fails_to_notification_channels.php │ ├── 2025_02_23_094326_contact_address_type.php │ └── 2025_05_05_101750_webauthn_used_at.php └── seeders │ └── DatabaseSeeder.php ├── docker-compose.yml ├── eslint.config.js ├── fortrabbit.yml ├── jsconfig.json ├── lang ├── ar.json ├── ar │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── bn.json ├── bn │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ca.json ├── ca │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── da.json ├── da │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── de.json ├── de │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── el.json ├── el │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── en.json ├── en │ ├── actions.php │ ├── auth.php │ ├── currencies.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── es.json ├── es │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── fr.json ├── fr │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── he.json ├── he │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── hi.json ├── hi │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── it.json ├── it │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ja.json ├── ja │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ml.json ├── ml │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── nl.json ├── nl │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── nn.json ├── nn │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── pa.json ├── pa │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── pl.json ├── pl │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── pt.json ├── pt │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── pt_BR.json ├── pt_BR │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ro.json ├── ro │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ru.json ├── ru │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── sv.json ├── sv │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── te.json ├── te │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── tr.json ├── tr │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── ur.json ├── ur │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── vendor │ └── webauthn │ │ ├── de │ │ ├── errors.php │ │ └── messages.php │ │ ├── en │ │ ├── errors.php │ │ └── messages.php │ │ └── fr │ │ ├── errors.php │ │ └── messages.php ├── vi.json ├── vi │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── zh_CN.json ├── zh_CN │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── zh_TW.json └── zh_TW │ ├── actions.php │ ├── auth.php │ ├── format.php │ ├── http-statuses.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── package.json ├── phpstan.neon ├── phpunit.xml ├── pint.json ├── psalm.xml ├── public ├── .htaccess ├── favicon.ico ├── img │ ├── auth │ │ ├── azure.svg │ │ ├── facebook.png │ │ ├── github.svg │ │ ├── google.svg │ │ ├── kanidm.svg │ │ ├── keycloak.svg │ │ ├── linkedin.svg │ │ └── saml2.svg │ ├── calendar_day_blank.svg │ ├── contact_blank_address.svg │ ├── contact_blank_call.svg │ ├── contact_blank_contact.svg │ ├── contact_blank_document.svg │ ├── contact_blank_goal.svg │ ├── contact_blank_group.svg │ ├── contact_blank_life_event.svg │ ├── contact_blank_loan.svg │ ├── contact_blank_note.svg │ ├── contact_blank_pet.svg │ ├── contact_blank_photo.svg │ ├── contact_blank_posts.svg │ ├── contact_blank_quick_facts.svg │ ├── contact_blank_relationship.svg │ ├── dashboard_blank_activity_feed.svg │ ├── dashboard_blank_how_are_you.svg │ ├── dashboard_blank_reminders.svg │ ├── dashboard_blank_tasks.svg │ ├── favicon.svg │ ├── group.svg │ ├── group_blank.svg │ ├── image1.png │ ├── image10.png │ ├── image11.png │ ├── image12.png │ ├── image13.png │ ├── image14.png │ ├── image15.png │ ├── image16.png │ ├── image17.png │ ├── image18.png │ ├── image19.png │ ├── image2.png │ ├── image20.png │ ├── image3.png │ ├── image4.png │ ├── image5.png │ ├── image6.png │ ├── image7.png │ ├── image8.png │ ├── image9.png │ ├── journal_blank.svg │ ├── journal_blank_index.svg │ ├── journal_metrics_blank.svg │ ├── journal_photo_index_blank.svg │ ├── journal_slice_of_life_blank.svg │ ├── vault_company_blank.svg │ └── vault_life_metrics_blank.svg ├── index.php ├── robots.txt ├── security.txt ├── vendor │ └── telescope │ │ ├── app-dark.css │ │ ├── app.css │ │ ├── app.js │ │ ├── favicon.ico │ │ └── mix-manifest.json └── web.config ├── resources ├── .htaccess_production ├── css │ └── app.css ├── js │ ├── Components │ │ ├── ApplicationLogo.vue │ │ ├── AuthenticationCardLogo.vue │ │ ├── Breadcrumb.vue │ │ ├── Button.vue │ │ ├── Checkbox.vue │ │ ├── ChevronLeft.vue │ │ ├── ChevronRight.vue │ │ ├── Dropdown.vue │ │ ├── DropdownLink.vue │ │ ├── Input.vue │ │ ├── InputError.vue │ │ ├── Jetstream │ │ │ ├── ActionMessage.vue │ │ │ ├── ActionSection.vue │ │ │ ├── Banner.vue │ │ │ ├── ConfirmationModal.vue │ │ │ ├── ConfirmsPassword.vue │ │ │ ├── DangerButton.vue │ │ │ ├── DialogModal.vue │ │ │ ├── FormSection.vue │ │ │ ├── Modal.vue │ │ │ ├── SecondaryButton.vue │ │ │ ├── SectionTitle.vue │ │ │ └── Select.vue │ │ ├── Label.vue │ │ ├── NavLink.vue │ │ ├── Pagination.vue │ │ ├── ResponsiveNavLink.vue │ │ ├── Uploadcare.vue │ │ └── ValidationErrors.vue │ ├── Layouts │ │ ├── AppLayout.vue │ │ ├── AuthenticationCard.vue │ │ ├── FooterLayout.vue │ │ ├── Layout.vue │ │ ├── LayoutNav.vue │ │ └── SectionBorder.vue │ ├── Pages │ │ ├── API │ │ │ ├── Index.vue │ │ │ └── Partials │ │ │ │ └── ApiTokenManager.vue │ │ ├── Auth │ │ │ ├── AcceptInvitation.vue │ │ │ ├── Beta.vue │ │ │ ├── ConfirmPassword.vue │ │ │ ├── ExternalProviders.vue │ │ │ ├── ForgotPassword.vue │ │ │ ├── Login.vue │ │ │ ├── Register.vue │ │ │ ├── ResetPassword.vue │ │ │ ├── TwoFactorChallenge.vue │ │ │ └── VerifyEmail.vue │ │ ├── PrivacyPolicy.vue │ │ ├── Profile │ │ │ ├── Partials │ │ │ │ ├── DeleteUserForm.vue │ │ │ │ ├── LogoutOtherBrowserSessionsForm.vue │ │ │ │ ├── TwoFactorAuthenticationForm.vue │ │ │ │ ├── UpdatePasswordForm.vue │ │ │ │ ├── UpdateProfileInformationForm.vue │ │ │ │ └── UpdateProviders.vue │ │ │ └── Show.vue │ │ ├── Settings │ │ │ ├── CancelAccount │ │ │ │ └── Index.vue │ │ │ ├── Index.vue │ │ │ ├── Notifications │ │ │ │ ├── Index.vue │ │ │ │ ├── Logs │ │ │ │ │ └── Index.vue │ │ │ │ └── Partials │ │ │ │ │ ├── Emails.vue │ │ │ │ │ └── Telegram.vue │ │ │ ├── Personalize │ │ │ │ ├── AddressTypes │ │ │ │ │ └── Index.vue │ │ │ │ ├── CallReasons │ │ │ │ │ └── Index.vue │ │ │ │ ├── ContactInformationTypes │ │ │ │ │ └── Index.vue │ │ │ │ ├── Currencies │ │ │ │ │ └── Index.vue │ │ │ │ ├── Genders │ │ │ │ │ └── Index.vue │ │ │ │ ├── GiftOccasions │ │ │ │ │ └── Index.vue │ │ │ │ ├── GiftStates │ │ │ │ │ └── Index.vue │ │ │ │ ├── GroupTypes │ │ │ │ │ └── Index.vue │ │ │ │ ├── Index.vue │ │ │ │ ├── Modules │ │ │ │ │ └── Index.vue │ │ │ │ ├── PetCategories │ │ │ │ │ └── Index.vue │ │ │ │ ├── PostTemplates │ │ │ │ │ └── Index.vue │ │ │ │ ├── Pronouns │ │ │ │ │ └── Index.vue │ │ │ │ ├── Relationships │ │ │ │ │ └── Index.vue │ │ │ │ ├── Religions │ │ │ │ │ └── Index.vue │ │ │ │ └── Templates │ │ │ │ │ ├── Index.vue │ │ │ │ │ ├── Partials │ │ │ │ │ ├── Modules.vue │ │ │ │ │ └── Pages.vue │ │ │ │ │ └── Show.vue │ │ │ ├── Preferences │ │ │ │ ├── Index.vue │ │ │ │ └── Partials │ │ │ │ │ ├── DateFormat.vue │ │ │ │ │ ├── DistanceFormat.vue │ │ │ │ │ ├── HelpPreference.vue │ │ │ │ │ ├── Locale.vue │ │ │ │ │ ├── Maps.vue │ │ │ │ │ ├── NameOrder.vue │ │ │ │ │ ├── NumberFormat.vue │ │ │ │ │ └── Timezone.vue │ │ │ ├── Storage │ │ │ │ └── Index.vue │ │ │ └── Users │ │ │ │ ├── Create.vue │ │ │ │ └── Index.vue │ │ ├── TermsOfService.vue │ │ ├── Vault │ │ │ ├── Calendar │ │ │ │ └── Index.vue │ │ │ ├── Companies │ │ │ │ └── Index.vue │ │ │ ├── Contact │ │ │ │ ├── Blank.vue │ │ │ │ ├── Create.vue │ │ │ │ ├── Goals │ │ │ │ │ └── Show.vue │ │ │ │ ├── ImportantDates │ │ │ │ │ ├── Index.vue │ │ │ │ │ └── Partials │ │ │ │ │ │ └── CreateOrEditImportantDate.vue │ │ │ │ ├── Index.vue │ │ │ │ ├── Move.vue │ │ │ │ ├── Names │ │ │ │ │ └── Edit.vue │ │ │ │ ├── Notes │ │ │ │ │ └── Index.vue │ │ │ │ ├── Photos │ │ │ │ │ ├── Index.vue │ │ │ │ │ └── Show.vue │ │ │ │ ├── Relationships │ │ │ │ │ └── Create.vue │ │ │ │ └── Show.vue │ │ │ ├── Create.vue │ │ │ ├── Dashboard │ │ │ │ ├── Index.vue │ │ │ │ ├── Partials │ │ │ │ │ ├── DueTasks.vue │ │ │ │ │ ├── Favorites.vue │ │ │ │ │ ├── LastUpdated.vue │ │ │ │ │ ├── LifeMetrics.vue │ │ │ │ │ ├── MoodTrackingEvents.vue │ │ │ │ │ └── UpcomingReminders.vue │ │ │ │ ├── Reminder │ │ │ │ │ └── Index.vue │ │ │ │ └── Task │ │ │ │ │ └── Index.vue │ │ │ ├── Edit.vue │ │ │ ├── Files │ │ │ │ └── Index.vue │ │ │ ├── Group │ │ │ │ ├── Edit.vue │ │ │ │ ├── Index.vue │ │ │ │ └── Show.vue │ │ │ ├── Index.vue │ │ │ ├── Journal │ │ │ │ ├── Create.vue │ │ │ │ ├── Edit.vue │ │ │ │ ├── Index.vue │ │ │ │ ├── Metrics │ │ │ │ │ └── Index.vue │ │ │ │ ├── Photo │ │ │ │ │ └── Index.vue │ │ │ │ ├── Post │ │ │ │ │ ├── Edit.vue │ │ │ │ │ ├── Partials │ │ │ │ │ │ ├── PostMetrics.vue │ │ │ │ │ │ ├── SlicesOfLife.vue │ │ │ │ │ │ └── Tags.vue │ │ │ │ │ ├── Show.vue │ │ │ │ │ └── Template.vue │ │ │ │ ├── Show.vue │ │ │ │ └── Slices │ │ │ │ │ ├── Edit.vue │ │ │ │ │ ├── Index.vue │ │ │ │ │ └── Show.vue │ │ │ ├── Reports │ │ │ │ ├── Address │ │ │ │ │ ├── Cities │ │ │ │ │ │ └── Index.vue │ │ │ │ │ ├── Countries │ │ │ │ │ │ └── Index.vue │ │ │ │ │ └── Index.vue │ │ │ │ ├── ImportantDate │ │ │ │ │ └── Index.vue │ │ │ │ ├── Index.vue │ │ │ │ └── MoodTrackingEvents │ │ │ │ │ └── Index.vue │ │ │ ├── Search │ │ │ │ ├── Index.vue │ │ │ │ └── Partials │ │ │ │ │ ├── Contact.vue │ │ │ │ │ ├── Group.vue │ │ │ │ │ └── Note.vue │ │ │ └── Settings │ │ │ │ ├── Index.vue │ │ │ │ └── Partials │ │ │ │ ├── ContactImportantDateTypes.vue │ │ │ │ ├── DefaultTemplate.vue │ │ │ │ ├── Delete.vue │ │ │ │ ├── Labels.vue │ │ │ │ ├── LifeEventTypesAndCategories.vue │ │ │ │ ├── MoodTrackingParameters.vue │ │ │ │ ├── QuickFactTemplate.vue │ │ │ │ ├── TabVisibility.vue │ │ │ │ ├── Tags.vue │ │ │ │ └── Users.vue │ │ └── Webauthn │ │ │ ├── Partials │ │ │ ├── DeleteKeyModal.vue │ │ │ ├── RegisterKey.vue │ │ │ ├── UpdateKey.vue │ │ │ └── WaitForKey.vue │ │ │ ├── WebauthnKeys.vue │ │ │ ├── WebauthnLogin.vue │ │ │ └── WebauthnTest.vue │ ├── Shared │ │ ├── Avatar.vue │ │ ├── ContactCard.vue │ │ ├── Form │ │ │ ├── ContactSelector.vue │ │ │ ├── Dropdown.vue │ │ │ ├── Errors.vue │ │ │ ├── PrettyButton.vue │ │ │ ├── PrettyLink.vue │ │ │ ├── PrettySpan.vue │ │ │ ├── PrimaryButton.vue │ │ │ ├── TextArea.vue │ │ │ └── TextInput.vue │ │ ├── Guest.vue │ │ ├── Help.vue │ │ ├── HoverMenu.vue │ │ ├── Icons │ │ │ ├── ArrowIcon.vue │ │ │ ├── BadgeIcon.vue │ │ │ ├── BallIcon.vue │ │ │ ├── CalendarIcon.vue │ │ │ ├── CallIcon.vue │ │ │ ├── CheckedIcon.vue │ │ │ ├── ChevronIcon.vue │ │ │ ├── ClockIcon.vue │ │ │ ├── DarkModeIcon.vue │ │ │ ├── DatabaseIcon.vue │ │ │ ├── DateIcon.vue │ │ │ ├── DollarIcon.vue │ │ │ ├── DoorIcon.vue │ │ │ ├── EditIcon.vue │ │ │ ├── FaceIcon.vue │ │ │ ├── FireIcon.vue │ │ │ ├── LampIcon.vue │ │ │ ├── MapPointerIcon.vue │ │ │ ├── MenuIcon.vue │ │ │ ├── MinusIcon.vue │ │ │ ├── MoonIcon.vue │ │ │ ├── NoteIcon.vue │ │ │ ├── PeopleIcon.vue │ │ │ ├── PhotoIcon.vue │ │ │ ├── PlusIcon.vue │ │ │ ├── RefreshIcon.vue │ │ │ ├── ReminderIcon.vue │ │ │ ├── SearchIcon.vue │ │ │ ├── SettingIcon.vue │ │ │ ├── StarIcon.vue │ │ │ ├── TagIcon.vue │ │ │ ├── TaskIcon.vue │ │ │ ├── TwoPinMapIcon.vue │ │ │ ├── ValideIcon.vue │ │ │ └── WorldIcon.vue │ │ ├── Loading.vue │ │ ├── Modules │ │ │ ├── Addresses.vue │ │ │ ├── Calls.vue │ │ │ ├── ContactAvatar.vue │ │ │ ├── ContactInformation.vue │ │ │ ├── ContactName.vue │ │ │ ├── CreateLifeEvent.vue │ │ │ ├── Documents.vue │ │ │ ├── FamilySummary.vue │ │ │ ├── Feed.vue │ │ │ ├── FeedItems │ │ │ │ ├── Address.vue │ │ │ │ ├── ContactInformation.vue │ │ │ │ ├── GenericAction.vue │ │ │ │ ├── Goal.vue │ │ │ │ ├── LabelAssigned.vue │ │ │ │ ├── MoodTrackingEvent.vue │ │ │ │ ├── Note.vue │ │ │ │ └── Pet.vue │ │ │ ├── GenderPronoun.vue │ │ │ ├── Goals.vue │ │ │ ├── Groups.vue │ │ │ ├── ImportantDates.vue │ │ │ ├── JobInformation.vue │ │ │ ├── Labels.vue │ │ │ ├── LifeEvent.vue │ │ │ ├── Loans.vue │ │ │ ├── Notes.vue │ │ │ ├── Pets.vue │ │ │ ├── Photos.vue │ │ │ ├── Posts.vue │ │ │ ├── QuickFacts.vue │ │ │ ├── Relationships.vue │ │ │ ├── Religion.vue │ │ │ ├── Reminders.vue │ │ │ ├── TaskItems │ │ │ │ └── CreateOrEditTask.vue │ │ │ └── Tasks.vue │ │ └── Toaster.vue │ ├── app.js │ ├── bootstrap.js │ ├── methods.js │ ├── sentry.js │ └── ssr.js ├── markdown │ ├── policy.md │ └── terms.md └── views │ ├── app.blade.php │ └── emails │ ├── notifications │ ├── reminder.blade.php │ ├── test-notification.blade.php │ └── validate-email.blade.php │ └── user │ └── invitation.blade.php ├── routes ├── api.php ├── console.php └── web.php ├── sail-init.sh ├── vite.config.js └── yarn.lock /.devcontainer/dummy/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PHP & SQLite with dummy account", 3 | "service": "app", 4 | "workspaceFolder": "/workspace", 5 | "dockerComposeFile": "../docker-compose.yaml", 6 | 7 | // For use with PHP or Apache (e.g.php -S localhost:8080 or apache2ctl start) 8 | "forwardPorts": [80], 9 | 10 | // Use 'postCreateCommand' to run commands after the container is created. 11 | "postCreateCommand": ".devcontainer/postCreate.sh dummy", 12 | "postStartCommand": "service apache2 restart" 13 | 14 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. 15 | // "remoteUser": "vscode" 16 | } 17 | -------------------------------------------------------------------------------- /.devcontainer/postStart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sudo apache2ctl restart 4 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | .composer/ 3 | .devcontainer/ 4 | .git/ 5 | .gitattributes 6 | .github/ 7 | .gitignore 8 | **/.gitignore 9 | **/.gitkeep 10 | bootstrap/cache/* 11 | database/*.sqlite 12 | .env 13 | CODE_OF_CONDUCT.md 14 | docker-compose.yml 15 | docker-compose.dev.yml 16 | Dockerfile 17 | Dockerfile.dev 18 | .dockerignore 19 | docs/ 20 | fortrabbit.yml 21 | Homestead.* 22 | node_modules/ 23 | npm-debug.log* 24 | persist/ 25 | .phpunit.result.cache 26 | public/build/ 27 | public/storage 28 | resources/vendor/ 29 | results/ 30 | sonar-project.properties 31 | storage/app/public/* 32 | storage/debugbar/* 33 | storage/framework/cache/* 34 | storage/framework/sessions/* 35 | storage/framework/views/* 36 | storage/logs/* 37 | .styleci.yml 38 | vendor/ 39 | yarn-error.log 40 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | indent_style = space 12 | indent_size = 4 13 | 14 | [*.blade.php] 15 | indent_size = 2 16 | 17 | [*.{js,vue,scss,json,css}] 18 | indent_size = 2 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [*.{yml,yaml}] 24 | indent_size = 2 25 | 26 | [docker-compose.yml] 27 | indent_size = 4 28 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | yarn lint-staged 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | public/build 2 | storage 3 | vendor 4 | node_modules 5 | composer.lock 6 | .yarn/* 7 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "tabWidth": 2, 4 | "trailingComma": "all", 5 | "singleQuote": true, 6 | "bracketSameLine": true 7 | } 8 | -------------------------------------------------------------------------------- /.sonarlint/connectedMode.json: -------------------------------------------------------------------------------- 1 | { 2 | "sonarCloudOrganization": "monicahq", 3 | "projectKey": "monica", 4 | "region": "EU" 5 | } 6 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | php 8.3.16 2 | nodejs 22.13.1 3 | yarn 4.6.0 4 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | checksumBehavior: update 2 | 3 | nodeLinker: node-modules 4 | 5 | yarnPath: .yarn/releases/yarn-4.6.0.cjs 6 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | ## Reporting a Vulnerability 2 | 3 | If you discover any security related issues, please email security@monicahq.com instead of using the issue tracker. 4 | -------------------------------------------------------------------------------- /app/Actions/Fortify/PasswordValidationRules.php: -------------------------------------------------------------------------------- 1 | $this->passwordRules(), 23 | ])->validate(); 24 | 25 | $user->forceFill([ 26 | 'password' => Hash::make($input['password']), 27 | ])->save(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Actions/Jetstream/DeleteUser.php: -------------------------------------------------------------------------------- 1 | Auth::user()->account_id, 21 | 'author_id' => Auth::id(), 22 | 'user_id' => $user->id, 23 | ]; 24 | 25 | app(DestroyUser::class)->execute($data); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Console/Commands/GetVersion.php: -------------------------------------------------------------------------------- 1 | line(config('monica.app_version')); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Domains/Contact/Dav/Event/TokenDeleteEvent.php: -------------------------------------------------------------------------------- 1 | 14 | */ 15 | public function getType(): string; 16 | 17 | /** 18 | * @param T $resource 19 | */ 20 | public function export(mixed $resource, VCard $vcard): void; 21 | } 22 | -------------------------------------------------------------------------------- /app/Domains/Contact/Dav/Exporter.php: -------------------------------------------------------------------------------- 1 | getAttributes(static::class, ReflectionAttribute::IS_INSTANCEOF); 22 | 23 | return empty($attributes) 24 | ? 0 25 | : $attributes[0]->newInstance()->order; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Domains/Contact/Dav/VCardResource.php: -------------------------------------------------------------------------------- 1 | principalUri; 16 | 17 | return $principalUri; 18 | } 19 | 20 | /** 21 | * Returns a list of addressbooks. 22 | */ 23 | public function getChildren(): array 24 | { 25 | return collect($this->carddavBackend->getAddressBooksForUser($this->getPrincipalUri())) 26 | ->map(fn (array $addressBookInfo) => new AddressBook($this->carddavBackend, $addressBookInfo)) 27 | ->toArray(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Domains/Contact/Dav/Web/Backend/CardDAV/AddressBookRoot.php: -------------------------------------------------------------------------------- 1 | carddavBackend, $principal['uri']); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Domains/Contact/Dav/Web/Backend/IDAVBackend.php: -------------------------------------------------------------------------------- 1 | on('method:GET', [$this, 'httpGet'], 500); 18 | } 19 | 20 | /** 21 | * This method intercepts GET requests to collections and returns the html. 22 | */ 23 | public function httpGet(RequestInterface $request, ResponseInterface $response): bool 24 | { 25 | $response->setStatus(302); 26 | $response->setHeader('Location', route('home')); 27 | 28 | return false; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Domains/Contact/DavClient/Services/Utils/Dav/DavClientException.php: -------------------------------------------------------------------------------- 1 | subscription; 16 | 17 | return Arr::get($subscription->capabilities, $capability, false); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Domains/Contact/DavClient/Services/Utils/Traits/HasClient.php: -------------------------------------------------------------------------------- 1 | client = $client; 18 | 19 | return $this; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageAvatar/Web/ViewHelpers/ModuleAvatarViewHelper.php: -------------------------------------------------------------------------------- 1 | $contact->avatar, 13 | ]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageContact/Dav/ExportTimestamp.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | #[Order(1000)] 14 | class ExportTimestamp implements ExportVCardResource 15 | { 16 | public function getType(): string 17 | { 18 | return Contact::class; 19 | } 20 | 21 | /** 22 | * @param Contact $resource 23 | */ 24 | public function export(mixed $resource, VCard $vcard): void 25 | { 26 | $vcard->remove('REV'); 27 | 28 | // https://datatracker.ietf.org/doc/html/rfc6350#section-6.7.4 29 | $vcard->REV = $resource->updated_at->format('Ymd\\THis\\Z'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageContactFeed/Web/ViewHelpers/Actions/ActionFeedGenericContactInformation.php: -------------------------------------------------------------------------------- 1 | contact; 12 | 13 | return [ 14 | 'id' => $contact->id, 15 | 'name' => $contact->name, 16 | 'age' => $contact->age, 17 | 'avatar' => $contact->avatar, 18 | 'url' => route('contact.show', [ 19 | 'vault' => $contact->vault_id, 20 | 'contact' => $contact->id, 21 | ]), 22 | ]; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageDocuments/Events/FileDeleted.php: -------------------------------------------------------------------------------- 1 | file = $file; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageGroups/Dav/ExportTimestamp.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | #[Order(1000)] 14 | class ExportTimestamp implements ExportVCardResource 15 | { 16 | public function getType(): string 17 | { 18 | return Group::class; 19 | } 20 | 21 | /** 22 | * @param Group $resource 23 | */ 24 | public function export($resource, VCard $vcard): void 25 | { 26 | $vcard->remove('REV'); 27 | 28 | $vcard->REV = $resource->updated_at->format('Ymd\\THis\\Z'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManageLifeEvents/Web/Controllers/ToggleTimelineEventController.php: -------------------------------------------------------------------------------- 1 | Auth::user()->account_id, 15 | 'author_id' => Auth::id(), 16 | 'vault_id' => $vaultId, 17 | 'timeline_event_id' => $timelineEventId, 18 | ]; 19 | 20 | (new ToggleTimelineEvent)->execute($data); 21 | 22 | return response()->json([ 23 | 'data' => true, 24 | ], 200); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Domains/Contact/ManagePronouns/Web/ViewHelpers/ModuleGenderPronounViewHelper.php: -------------------------------------------------------------------------------- 1 | $contact->gender ? $contact->gender->name : null, 13 | 'pronoun' => $contact->pronoun ? $contact->pronoun->name : null, 14 | 'url' => [ 15 | 'edit' => route('contact.edit', [ 16 | 'vault' => $contact->vault_id, 17 | 'contact' => $contact->id, 18 | ]), 19 | ], 20 | ]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Domains/Settings/CancelAccount/Web/ViewHelpers/CancelAccountViewHelper.php: -------------------------------------------------------------------------------- 1 | [ 11 | 'settings' => route('settings.index'), 12 | 'back' => route('settings.index'), 13 | 'destroy' => route('settings.cancel.destroy'), 14 | ], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageCurrencies/Web/Controllers/CurrencyController.php: -------------------------------------------------------------------------------- 1 | account); 15 | 16 | return response()->json([ 17 | 'data' => $currenciesCollection, 18 | ], 201); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageCurrencies/Web/ViewHelpers/CurrencyIndexViewHelper.php: -------------------------------------------------------------------------------- 1 | currencies() 13 | ->orderBy('code') 14 | ->where('active', true) 15 | ->get() 16 | ->map(function ($currency) use ($currencyId) { 17 | return [ 18 | 'id' => $currency->id, 19 | 'name' => $currency->code, 20 | 'selected' => $currencyId ? $currencyId === $currency->id : null, 21 | ]; 22 | }); 23 | 24 | return $currenciesCollection; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageModules/Web/Controllers/PersonalizeModulesController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData(), 17 | 'data' => PersonalizeModuleIndexViewHelper::data(Auth::user()->account), 18 | ]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManagePersonalization/Web/Controllers/PersonalizeController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData(), 16 | 'data' => PersonalizeIndexViewHelper::data(), 17 | ]); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageSettings/Web/Controllers/SettingsController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData(), 17 | 'data' => SettingsIndexViewHelper::data(Auth::user()), 18 | ]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageStorage/Web/Controllers/AccountStorageController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData(), 17 | 'data' => StorageIndexViewHelper::data(Auth::user()->account), 18 | ]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageUserPreferences/Web/Controllers/PreferencesController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData(), 17 | 'data' => UserPreferencesIndexViewHelper::data(Auth::user()), 18 | ]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Domains/Settings/ManageUsers/Web/ViewHelpers/UserCreateViewHelper.php: -------------------------------------------------------------------------------- 1 | [ 11 | 'settings' => route('settings.index'), 12 | 'back' => route('settings.user.index'), 13 | 'store' => route('settings.user.store'), 14 | ], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageCompanies/Web/Controllers/VaultCompanyController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData($vault), 20 | 'data' => CompanyIndexViewHelper::data($vault), 21 | ]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageCompanies/Web/ViewHelpers/CompanyViewHelper.php: -------------------------------------------------------------------------------- 1 | companies() 13 | ->get() 14 | ->sortByCollator('name') 15 | ->map(fn (Company $company) => self::dto($vault, $company)); 16 | 17 | return [ 18 | 'companies' => $companies, 19 | ]; 20 | } 21 | 22 | public static function dto(Vault $vault, Company $company): array 23 | { 24 | return [ 25 | 'id' => $company->id, 26 | 'name' => $company->name, 27 | 'type' => $company->type, 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageJournals/Web/ViewHelpers/JournalCreateViewHelper.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'store' => route('journal.store', [ 14 | 'vault' => $vault->id, 15 | ]), 16 | 'back' => route('journal.index', [ 17 | 'vault' => $vault->id, 18 | ]), 19 | ], 20 | ]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageReports/Web/Controllers/ReportAddressesController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData($vault), 20 | 'data' => ReportAddressIndexViewHelper::data($vault), 21 | ]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageReports/Web/Controllers/ReportIndexController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData($vault), 20 | 'data' => ReportIndexViewHelper::data($vault), 21 | ]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageReports/Web/ViewHelpers/ReportIndexViewHelper.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'addresses' => route('vault.reports.addresses.index', [ 14 | 'vault' => $vault->id, 15 | ]), 16 | 'mood_tracking_events' => route('vault.reports.mood_tracking_events.index', [ 17 | 'vault' => $vault->id, 18 | ]), 19 | 'important_date_summary' => route('vault.reports.important_dates.index', [ 20 | 'vault' => $vault->id, 21 | ]), 22 | ], 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageTasks/Web/Controllers/VaultTaskController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData($vault), 21 | 'data' => VaultTasksIndexViewHelper::data($vault, Auth::user()), 22 | ]); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageVault/Web/ViewHelpers/VaultCreateViewHelper.php: -------------------------------------------------------------------------------- 1 | [ 11 | 'store' => route('vault.store'), 12 | 'back' => route('vault.index'), 13 | ], 14 | ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageVault/Web/ViewHelpers/VaultEditViewHelper.php: -------------------------------------------------------------------------------- 1 | $vault->id, 13 | 'name' => $vault->name, 14 | 'description' => $vault->description, 15 | 'url' => [ 16 | 'update' => route('vault.update', [ 17 | 'vault' => $vault, 18 | ]), 19 | 'back' => route('vault.index'), 20 | ], 21 | ]; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Domains/Vault/ManageVaultSettings/Web/Controllers/VaultSettingsController.php: -------------------------------------------------------------------------------- 1 | VaultIndexViewHelper::layoutData($vault), 20 | 'data' => VaultSettingsIndexViewHelper::data($vault), 21 | ]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Domains/Vault/Search/Web/Controllers/VaultContactSearchController.php: -------------------------------------------------------------------------------- 1 | json([ 21 | 'data' => VaultContactSearchViewHelper::data($vault, $request->input('searchTerm')), 22 | ], 200); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Domains/Vault/Search/Web/Controllers/VaultMostConsultedContactsController.php: -------------------------------------------------------------------------------- 1 | json([ 23 | 'data' => VaultMostConsultedViewHelper::data($vault, Auth::user()), 24 | ], 200); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Exceptions/CantBeDeletedException.php: -------------------------------------------------------------------------------- 1 | $contact->id, 18 | 'name' => $contact->name, 19 | 'age' => $contact->age, 20 | 'avatar' => $contact->avatar, 21 | 'groups' => GroupsViewHelper::summary($contact), 22 | 'url' => route('contact.show', [ 23 | 'vault' => $contact->vault_id, 24 | 'contact' => $contact->id, 25 | ]), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Helpers/ContactImportantDateHelper.php: -------------------------------------------------------------------------------- 1 | remember("ImportantDateType:{$vaultId}:{$type}", 5, 16 | fn () => ContactImportantDateType::firstWhere([ 17 | 'vault_id' => $vaultId, 18 | 'internal_type' => $type, 19 | ]) 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Helpers/FileHelper.php: -------------------------------------------------------------------------------- 1 | 0.9) { 16 | $bytes = $bytes / $step; 17 | $i++; 18 | } 19 | 20 | return round($bytes, 2).$units[$i]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Helpers/SQLHelper.php: -------------------------------------------------------------------------------- 1 | getDriverName()) { 18 | case 'sqlite': 19 | $query = 'strftime("%Y", '.$dateColumnName.')'; 20 | break; 21 | 22 | case 'pgsql': 23 | $query = 'date_part(\'year\', '.$dateColumnName.')'; 24 | break; 25 | 26 | default: 27 | $query = 'YEAR('.$dateColumnName.')'; 28 | break; 29 | } 30 | 31 | return $query; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Helpers/SignupHelper.php: -------------------------------------------------------------------------------- 1 | isDisabledByConfig() && $this->hasAtLeastOneAccount()); 25 | } 26 | 27 | private function isDisabledByConfig(): bool 28 | { 29 | return $this->config->get('monica.disable_signup', false); 30 | } 31 | 32 | private function hasAtLeastOneAccount(): bool 33 | { 34 | return ! empty(Account::first()); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ViewHelpers/AcceptInvitationShowViewHelper.php: -------------------------------------------------------------------------------- 1 | $code, 11 | 'url' => [ 12 | 'store' => route('invitation.store'), 13 | ], 14 | ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | user()->userTokens() 18 | ->where('driver', $driver) 19 | ->delete(); 20 | 21 | return redirect()->route('profile.show'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Profile/WebauthnDestroyResponse.php: -------------------------------------------------------------------------------- 1 | wantsJson() 21 | ? Response::noContent() 22 | : Redirect::intended(Webauthn::redirects('register')); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Controllers/Profile/WebauthnUpdateResponse.php: -------------------------------------------------------------------------------- 1 | wantsJson() 21 | ? Response::noContent() 22 | : Redirect::intended(Webauthn::redirects('register')); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | expectsJson() ? route('login') : null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Middleware/EnsureSignupIsEnabled.php: -------------------------------------------------------------------------------- 1 | app[SignupHelper::class]->isEnabled(), 403, trans('Registration is currently disabled')); 25 | 26 | return $next($request); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Resources/UserResource.php: -------------------------------------------------------------------------------- 1 | $this->id, 22 | 'name' => $this->name, 23 | 'email' => $this->email, 24 | 'created_at' => DateHelper::getTimestamp($this->created_at), 25 | 'updated_at' => DateHelper::getTimestamp($this->updated_at), 26 | 'links' => [ 27 | 'self' => route('api.users.show', $this), 28 | ], 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Resources/VaultResource.php: -------------------------------------------------------------------------------- 1 | $this->id, 22 | 'name' => $this->name, 23 | 'description' => $this->description, 24 | 'created_at' => DateHelper::getTimestamp($this->created_at), 25 | 'updated_at' => DateHelper::getTimestamp($this->updated_at), 26 | 'links' => [ 27 | 'self' => route('api.vaults.show', $this), 28 | ], 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Interfaces/ServiceInterface.php: -------------------------------------------------------------------------------- 1 | remember && $event->user->webauthnKeys()->count() > 0) { 18 | Cookie::queue('return', 'true', 60 * 24 * 365); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Listeners/WebauthnAuthenticateListener.php: -------------------------------------------------------------------------------- 1 | userHandle) 19 | ->where('credentialId', Base64UrlSafe::encode($event->publicKeyCredentialSource->publicKeyCredentialId)) 20 | ->first(); 21 | 22 | if ($webauthnKey !== null) { 23 | $webauthnKey->used_at = now(); 24 | $webauthnKey->save(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Logging/CleanLogs.php: -------------------------------------------------------------------------------- 1 | subDays(15))->delete(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Logging/Loggable.php: -------------------------------------------------------------------------------- 1 | subject(trans('Test email for Monica')) 32 | ->markdown('emails.notifications.test-notification'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Models/Instance/Cron.php: -------------------------------------------------------------------------------- 1 | 16 | */ 17 | protected $fillable = [ 18 | 'command', 19 | 'last_run_at', 20 | ]; 21 | 22 | /** 23 | * The attributes that should be cast to native types. 24 | * 25 | * @var array 26 | */ 27 | protected $casts = [ 28 | 'last_run_at' => 'datetime', 29 | ]; 30 | } 31 | -------------------------------------------------------------------------------- /app/Models/PostSection.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | protected $fillable = [ 21 | 'post_id', 22 | 'label', 23 | 'position', 24 | 'content', 25 | ]; 26 | 27 | /** 28 | * Get the post associated with the post section. 29 | * 30 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\Post, $this> 31 | */ 32 | public function post(): BelongsTo 33 | { 34 | return $this->belongsTo(Post::class); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Models/WebauthnKey.php: -------------------------------------------------------------------------------- 1 | mergeFillable(['used_at']); 17 | $this->setVisible(array_merge($this->getVisible(), ['used_at'])); 18 | $this->mergeCasts(['used_at' => 'datetime']); 19 | } 20 | 21 | /** 22 | * Get the user record associated with the key. 23 | * 24 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, $this> 25 | */ 26 | public function user(): BelongsTo 27 | { 28 | return $this->belongsTo(User::class); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Traits/DAVFormat.php: -------------------------------------------------------------------------------- 1 | handleCommand(new ArgvInput); 14 | 15 | exit($status); 16 | -------------------------------------------------------------------------------- /bootstrap/providers.php: -------------------------------------------------------------------------------- 1 | 'vCard', 12 | 13 | ]; 14 | -------------------------------------------------------------------------------- /config/trustedproxy.php: -------------------------------------------------------------------------------- 1 | env('APP_TRUSTED_PROXIES', null), 20 | 21 | ]; 22 | -------------------------------------------------------------------------------- /config/unsplash.php: -------------------------------------------------------------------------------- 1 | env('UNSPLASH_ACCESS_KEY'), 5 | 'store_in_database' => env('UNSPLASH_STORE_IN_DATABASE', false), 6 | 'disk' => env('UNSPLASH_STORAGE_DISK', 'local'), 7 | ]; 8 | -------------------------------------------------------------------------------- /database/factories/AccountFactory.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | class AccountFactory extends Factory 12 | { 13 | protected $model = Account::class; 14 | 15 | /** 16 | * Define the model's default state. 17 | * 18 | * @return array 19 | */ 20 | public function definition() 21 | { 22 | return [ 23 | 'storage_limit_in_mb' => 10, 24 | ]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /database/factories/AddressTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class AddressTypeFactory extends Factory 13 | { 14 | protected $model = AddressType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | 'type' => $this->faker->randomElement(['home', 'work', 'other']), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/CallReasonFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class CallReasonFactory extends Factory 13 | { 14 | protected $model = CallReason::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'call_reason_type_id' => CallReasonType::factory(), 25 | 'label' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/CallReasonTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class CallReasonTypeFactory extends Factory 13 | { 14 | protected $model = CallReasonType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'label' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/CompanyFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class CompanyFactory extends Factory 13 | { 14 | protected $model = Company::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'name' => $this->faker->name(), 26 | 'type' => Company::TYPE_COMPANY, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/ContactFeedItemFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class ContactFeedItemFactory extends Factory 14 | { 15 | protected $model = ContactFeedItem::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'author_id' => User::factory(), 26 | 'contact_id' => Contact::factory(), 27 | 'action' => ContactFeedItem::ACTION_NOTE_CREATED, 28 | 'description' => $this->faker->word(), 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/ContactInformationFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class ContactInformationFactory extends Factory 14 | { 15 | protected $model = ContactInformation::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'contact_id' => Contact::factory(), 26 | 'type_id' => ContactInformationType::factory(), 27 | 'data' => $this->faker->name(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/ContactInformationTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class ContactInformationTypeFactory extends Factory 13 | { 14 | protected $model = ContactInformationType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | 'protocol' => 'mailto:', 27 | 'can_be_deleted' => false, 28 | 'type' => 'email', 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/CurrencyFactory.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | class CurrencyFactory extends Factory 12 | { 13 | protected $model = Currency::class; 14 | 15 | /** 16 | * Define the model's default state. 17 | * 18 | * @return array 19 | */ 20 | public function definition() 21 | { 22 | return [ 23 | 'code' => 'CAD', 24 | ]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /database/factories/EmotionFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class EmotionFactory extends Factory 13 | { 14 | protected $model = Emotion::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->firstName, 26 | 'type' => $this->faker->firstName, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/GenderFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GenderFactory extends Factory 13 | { 14 | protected $model = Gender::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | 'type' => Gender::LIST[rand(0, 4)], 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/GiftOccasionFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GiftOccasionFactory extends Factory 13 | { 14 | protected $model = GiftOccasion::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'label' => $this->faker->name, 26 | 'position' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/GiftStateFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GiftStateFactory extends Factory 13 | { 14 | protected $model = GiftState::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'label' => $this->faker->name, 26 | 'position' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/GoalFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GoalFactory extends Factory 13 | { 14 | protected $model = Goal::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'contact_id' => Contact::factory(), 25 | 'name' => $this->faker->word(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/GroupFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class GroupFactory extends Factory 14 | { 15 | protected $model = Group::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'vault_id' => Vault::factory(), 26 | 'group_type_id' => GroupType::factory(), 27 | 'name' => $this->faker->name(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/GroupTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GroupTypeFactory extends Factory 13 | { 14 | protected $model = GroupType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'label' => $this->faker->name, 26 | 'position' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/GroupTypeRoleFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class GroupTypeRoleFactory extends Factory 13 | { 14 | protected $model = GroupTypeRole::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'group_type_id' => GroupType::factory(), 25 | 'label' => $this->faker->name, 26 | 'position' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/Instance/CronFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class CronFactory extends Factory 13 | { 14 | protected $model = Cron::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'command' => $this->faker->word, 25 | 'last_run_at' => Carbon::now(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/JournalFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class JournalFactory extends Factory 13 | { 14 | protected $model = Journal::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'name' => $this->faker->name(), 26 | 'description' => $this->faker->name(), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/JournalMetricFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class JournalMetricFactory extends Factory 13 | { 14 | protected $model = JournalMetric::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'journal_id' => Journal::factory(), 25 | 'label' => $this->faker->sentence(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/LabelFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class LabelFactory extends Factory 13 | { 14 | protected $model = Label::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'name' => $this->faker->word(), 26 | 'slug' => $this->faker->word(), 27 | 'description' => $this->faker->sentence(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/LifeEventCategoryFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class LifeEventCategoryFactory extends Factory 13 | { 14 | protected $model = LifeEventCategory::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'label' => $this->faker->name(), 26 | 'label_translation_key' => $this->faker->name(), 27 | 'can_be_deleted' => true, 28 | 'position' => 1, 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/LifeEventTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class LifeEventTypeFactory extends Factory 13 | { 14 | protected $model = LifeEventType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'life_event_category_id' => LifeEventCategory::factory(), 25 | 'label' => $this->faker->name(), 26 | 'label_translation_key' => $this->faker->name(), 27 | 'can_be_deleted' => true, 28 | 'position' => 1, 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/LifeMetricFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class LifeMetricFactory extends Factory 13 | { 14 | protected $model = LifeMetric::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'label' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/LoanFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class LoanFactory extends Factory 13 | { 14 | protected $model = Loan::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'type' => Loan::TYPE_DEBT, 26 | 'name' => $this->faker->word(), 27 | 'description' => $this->faker->sentence(), 28 | 'amount_lent' => $this->faker->randomNumber(), 29 | 'loaned_at' => $this->faker->dateTimeThisCentury(), 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/factories/ModuleFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class ModuleFactory extends Factory 13 | { 14 | protected $model = Module::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => 'business', 26 | 'type' => 'business', 27 | 'can_be_deleted' => true, 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/ModuleRowFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class ModuleRowFactory extends Factory 13 | { 14 | protected $model = ModuleRow::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'module_id' => Module::factory(), 25 | 'position' => 1, 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/ModuleRowFieldFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class ModuleRowFieldFactory extends Factory 13 | { 14 | protected $model = ModuleRowField::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'module_row_id' => ModuleRow::factory(), 25 | 'label' => $this->faker->word, 26 | 'module_field_type' => ModuleRowField::TYPE_INPUT_TEXT, 27 | 'required' => false, 28 | 'position' => 1, 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/MoodTrackingParameterFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class MoodTrackingParameterFactory extends Factory 13 | { 14 | protected $model = MoodTrackingParameter::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'label' => $this->faker->name(), 26 | 'hex_color' => $this->faker->name(), 27 | 'position' => 1, 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/NoteFactory.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | class NoteFactory extends Factory 15 | { 16 | protected $model = Note::class; 17 | 18 | /** 19 | * Define the model's default state. 20 | * 21 | * @return array 22 | */ 23 | public function definition() 24 | { 25 | return [ 26 | 'contact_id' => Contact::factory(), 27 | 'vault_id' => Vault::factory(), 28 | 'author_id' => User::factory(), 29 | 'title' => $this->faker->title(), 30 | 'body' => $this->faker->sentence(), 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/factories/PetCategoryFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PetCategoryFactory extends Factory 13 | { 14 | protected $model = PetCategory::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/PetFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class PetFactory extends Factory 14 | { 15 | protected $model = Pet::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'pet_category_id' => PetCategory::factory(), 26 | 'contact_id' => Contact::factory(), 27 | 'name' => $this->faker->name(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/PostFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PostFactory extends Factory 13 | { 14 | protected $model = Post::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'journal_id' => Journal::factory(), 25 | 'title' => $this->faker->sentence(), 26 | 'published' => false, 27 | 'written_at' => $this->faker->dateTimeThisCentury(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/PostMetricFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class PostMetricFactory extends Factory 14 | { 15 | protected $model = PostMetric::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'post_id' => Post::factory(), 26 | 'journal_metric_id' => JournalMetric::factory(), 27 | 'label' => $this->faker->sentence(), 28 | 'value' => $this->faker->randomNumber(), 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/PostSectionFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PostSectionFactory extends Factory 13 | { 14 | protected $model = PostSection::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'post_id' => Post::factory(), 25 | 'label' => 'label', 26 | 'position' => $this->faker->numberBetween(1, 10), 27 | 'content' => $this->faker->sentence(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/PostTemplateFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PostTemplateFactory extends Factory 13 | { 14 | protected $model = PostTemplate::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'label' => 'business', 26 | 'position' => 1, 27 | 'can_be_deleted' => false, 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/PostTemplateSectionFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PostTemplateSectionFactory extends Factory 13 | { 14 | protected $model = PostTemplateSection::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'post_template_id' => PostTemplate::factory(), 25 | 'label' => 'business', 26 | 'position' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/PronounFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class PronounFactory extends Factory 13 | { 14 | protected $model = Pronoun::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/QuickFactFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class QuickFactFactory extends Factory 14 | { 15 | protected $model = QuickFact::class; 16 | 17 | /** 18 | * Define the model's default state. 19 | * 20 | * @return array 21 | */ 22 | public function definition() 23 | { 24 | return [ 25 | 'vault_quick_facts_template_id' => VaultQuickFactsTemplate::factory(), 26 | 'contact_id' => Contact::factory(), 27 | 'content' => 'birthdate', 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/RelationshipGroupTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class RelationshipGroupTypeFactory extends Factory 13 | { 14 | protected $model = RelationshipGroupType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/RelationshipTypeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class RelationshipTypeFactory extends Factory 13 | { 14 | protected $model = RelationshipType::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'relationship_group_type_id' => RelationshipGroupType::factory(), 25 | 'name' => $this->faker->name(), 26 | 'name_reverse_relationship' => $this->faker->name(), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/ReligionFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class ReligionFactory extends Factory 13 | { 14 | protected $model = Religion::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => $this->faker->name(), 26 | 'translation_key' => $this->faker->word(), 27 | 'position' => 1, 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/SliceOfLifeFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class SliceOfLifeFactory extends Factory 13 | { 14 | protected $model = SliceOfLife::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'journal_id' => Journal::factory(), 25 | 'name' => $this->faker->name(), 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/StreakFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class StreakFactory extends Factory 13 | { 14 | protected $model = Streak::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'goal_id' => Goal::factory(), 25 | 'happened_at' => $this->faker->dateTimeThisCentury, 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/SyncTokenFactory.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | class SyncTokenFactory extends Factory 15 | { 16 | protected $model = SyncToken::class; 17 | 18 | /** 19 | * Define the model's default state. 20 | * 21 | * @return array 22 | */ 23 | public function definition() 24 | { 25 | return [ 26 | 'account_id' => Account::factory(), 27 | 'user_id' => User::factory(), 28 | 'name' => Str::orderedUuid(), 29 | 'timestamp' => $this->faker->dateTimeThisCentury, 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/factories/TagFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class TagFactory extends Factory 13 | { 14 | protected $model = Tag::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'name' => $this->faker->name(), 26 | 'slug' => $this->faker->name(), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/TemplateFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class TemplateFactory extends Factory 13 | { 14 | protected $model = Template::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'name' => 'business', 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/factories/TemplatePageFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class TemplatePageFactory extends Factory 13 | { 14 | protected $model = TemplatePage::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'template_id' => Template::factory(), 25 | 'name' => 'business', 26 | 'slug' => 'business', 27 | 'position' => 1, 28 | 'can_be_deleted' => true, 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/TimelineEventFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class TimelineEventFactory extends Factory 13 | { 14 | protected $model = TimelineEvent::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'started_at' => $this->faker->dateTimeThisCentury(), 26 | 'label' => $this->faker->sentence(), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/UserNotificationSentFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class UserNotificationSentFactory extends Factory 13 | { 14 | protected $model = UserNotificationSent::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'user_notification_channel_id' => UserNotificationChannel::factory(), 25 | 'sent_at' => $this->faker->dateTimeThisCentury(), 26 | 'subject_line' => 'test', 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/UserTokenFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class UserTokenFactory extends Factory 13 | { 14 | protected $model = UserToken::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'user_id' => User::factory(), 25 | 'driver' => 'github', 26 | 'driver_id' => $this->faker->uuid, 27 | 'format' => 'oauth2', 28 | 'token' => $this->faker->word, 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/factories/VaultFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class VaultFactory extends Factory 13 | { 14 | protected $model = Vault::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'account_id' => Account::factory(), 25 | 'type' => Vault::TYPE_PERSONAL, 26 | 'name' => $this->faker->name(), 27 | 'description' => $this->faker->sentence(), 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/factories/VaultQuickFactsTemplateFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class VaultQuickFactsTemplateFactory extends Factory 13 | { 14 | protected $model = VaultQuickFactsTemplate::class; 15 | 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'vault_id' => Vault::factory(), 25 | 'label' => $this->faker->name(), 26 | 'position' => 1, 27 | 'label_translation_key' => 'vault_quick_fact_template.label_translation_key', 28 | ]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/migrations/2013_04_25_132851_create_accounts_table.php: -------------------------------------------------------------------------------- 1 | uuid('id'); 16 | $table->primary('id'); 17 | $table->integer('storage_limit_in_mb')->default(0); 18 | $table->timestamps(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down() 26 | { 27 | Schema::dropIfExists('accounts'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists(config('auth.passwords.users.table')); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /database/migrations/2019_05_05_194746_create_crons.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('command')->unique(); 19 | $table->timestamp('last_run_at')->nullable(); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('crons'); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /database/migrations/2020_04_23_133132_create_companies_table.php: -------------------------------------------------------------------------------- 1 | id(); 17 | $table->foreignIdFor(Vault::class)->constrained()->cascadeOnDelete(); 18 | $table->string('name'); 19 | $table->string('type')->nullable(); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | */ 27 | public function down() 28 | { 29 | Schema::dropIfExists('companies'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/2023_05_06_125432_add_contact_sort_order_to_users.php: -------------------------------------------------------------------------------- 1 | string('contact_sort_order')->default(User::CONTACT_SORT_ORDER_LAST_UPDATED)->after('name_order'); 17 | }); 18 | } 19 | 20 | /** 21 | * Reverse the migrations. 22 | */ 23 | public function down(): void 24 | { 25 | Schema::table('users', function (Blueprint $table) { 26 | $table->dropColumn('contact_sort_order'); 27 | }); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/2023_06_12_093907_add_instance_administrator.php: -------------------------------------------------------------------------------- 1 | boolean('is_instance_administrator')->default(false)->after('is_account_administrator'); 16 | }); 17 | } 18 | 19 | /** 20 | * Reverse the migrations. 21 | */ 22 | public function down(): void 23 | { 24 | Schema::table('users', function (Blueprint $table) { 25 | $table->dropColumn('is_instance_administrator'); 26 | }); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /database/migrations/2023_08_22_175035_fix_group_grouptype.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('group_type_id')->nullable()->change(); 19 | 20 | if (DB::connection()->getDriverName() !== 'sqlite') { 21 | $table->dropForeign('groups_group_type_id_foreign'); 22 | $table->foreign('group_type_id')->references('id')->on('group_types')->nullOnDelete(); 23 | } 24 | }); 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /database/migrations/2023_08_30_202650_fix_addressbook_currentlogid.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('current_logid')->after('last_batch')->nullable(); 17 | }); 18 | } 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /database/migrations/2023_10_02_195229_add_can_be_deleted_to_templates.php: -------------------------------------------------------------------------------- 1 | boolean('can_be_deleted')->default(true)->after('name_translation_key'); 13 | }); 14 | } 15 | 16 | public function down() 17 | { 18 | Schema::table('templates', function (Blueprint $table) { 19 | $table->dropColumn('can_be_deleted'); 20 | }); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /database/migrations/2023_10_06_064814_rename_locales.php: -------------------------------------------------------------------------------- 1 | update(['locale' => 'nn']); 14 | User::where('locale', 'zh')->update(['locale' => 'zh_CN']); 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /database/migrations/2025_05_05_101750_webauthn_used_at.php: -------------------------------------------------------------------------------- 1 | timestamp('used_at')->nullable()->after('counter'); 16 | }); 17 | } 18 | 19 | /** 20 | * Reverse the migrations. 21 | */ 22 | public function down(): void 23 | { 24 | Schema::table('webauthn_keys', function (Blueprint $table) { 25 | $table->dropColumn('used_at'); 26 | }); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fortrabbit.yml: -------------------------------------------------------------------------------- 1 | # differentiate from the deployment files 2 | version: 2 3 | 4 | # optional Composer settings 5 | composer: 6 | # Resolves to the --no-dev parameter 7 | no-dev: true 8 | 9 | # called after Composer runs 10 | post: artisan monica:setup --force --verbose 11 | 12 | # list of sustained folders in ~/htdocs. If not given, then it defaults to the "vendor" folder 13 | sustained: 14 | - storage 15 | - vendor 16 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": ["resources/js/*"] 6 | } 7 | }, 8 | "exclude": ["node_modules", "public"] 9 | } 10 | -------------------------------------------------------------------------------- /lang/ar/auth.php: -------------------------------------------------------------------------------- 1 | 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.', 5 | 'lang' => 'العربية', 6 | 'password' => 'كلمة المرور غير صحيحة.', 7 | 'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/ar/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ar/pagination.php: -------------------------------------------------------------------------------- 1 | 'التالي ❯', 5 | 'previous' => '❮ السابق', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ar/passwords.php: -------------------------------------------------------------------------------- 1 | 'تمت إعادة تعيين كلمة المرور!', 5 | 'sent' => 'تم إرسال تفاصيل استعادة كلمة المرور الخاصة بك إلى بريدك الإلكتروني!', 6 | 'throttled' => 'الرجاء الانتظار قبل إعادة المحاولة.', 7 | 'token' => 'رمز استعادة كلمة المرور الذي أدخلته غير صحيح.', 8 | 'user' => 'لم يتم العثور على أيّ حسابٍ بهذا العنوان الإلكتروني.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/bn/auth.php: -------------------------------------------------------------------------------- 1 | 'এই পরিচয়পত্র আমাদের রেকর্ডের সাথে মেলে না।', 5 | 'lang' => 'বাংলা', 6 | 'password' => 'পাসওয়ার্ড ভুল।', 7 | 'throttle' => 'লগইন করার জন্য অনেকবার চেষ্টা করেছেন, :seconds সেকেন্ড পরে পুনরায় চেষ্টা করুন।', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/bn/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/bn/pagination.php: -------------------------------------------------------------------------------- 1 | 'পরবর্তী ❯', 5 | 'previous' => '❮ পুর্ববর্তী', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/bn/passwords.php: -------------------------------------------------------------------------------- 1 | 'আপনার পাসওয়ার্ড পুনরায় সেট করা হয়েছে!', 5 | 'sent' => 'আমরা আপনার পাসওয়ার্ড পুনরায় সেট করার লিঙ্ক ই-মেইল করেছি!', 6 | 'throttled' => 'থামুন! অনুগ্রহ করে কিছুক্ষণ পর পূনরায় চেষ্টা করুন।', 7 | 'token' => 'এই পাসওয়ার্ড রিসেট টোকেনটি সঠিক নয়।', 8 | 'user' => 'এই ই-মেইল দিয়ে কোন ব্যবহারকারী খুঁজে পাওয়া যাচ্ছে না', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ca/auth.php: -------------------------------------------------------------------------------- 1 | 'Aquestes credencials no concorden amb els nostres registres.', 5 | 'lang' => 'Català', 6 | 'password' => 'La contrasenya és incorrecta.', 7 | 'throttle' => 'Ha superat el nombre màxim d\'intents d\'accés. Si us plau, torni a intentar-ho en :seconds segons.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/ca/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ca/pagination.php: -------------------------------------------------------------------------------- 1 | 'Següent ❯', 5 | 'previous' => '❮ Anterior', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ca/passwords.php: -------------------------------------------------------------------------------- 1 | 'La contrasenya s\'ha restablert!', 5 | 'sent' => 'Li hem enviat un correu electrònic amb un enllaç per a reiniciar la teva contrasenya!', 6 | 'throttled' => 'Si us plau, esperi abans de tornar-ho a intentar.', 7 | 'token' => 'Aquest token de recuperació de contrasenya és invàlid.', 8 | 'user' => 'No existeix cap usuari amb aquest correu.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/da/auth.php: -------------------------------------------------------------------------------- 1 | 'De angivne oplysninger er ugyldige.', 5 | 'lang' => 'Dansk', 6 | 'password' => 'Adgangskoden er forkert.', 7 | 'throttle' => 'For mange loginforsøg. Prøv igen om :seconds sekunder.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/da/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/da/pagination.php: -------------------------------------------------------------------------------- 1 | 'Næste ❯', 5 | 'previous' => '❮ Forrige', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/da/passwords.php: -------------------------------------------------------------------------------- 1 | 'Adgangskoden er blevet nulstillet!', 5 | 'sent' => 'Vi har sendt dig en e-mail til at nulstille din adgangskode!', 6 | 'throttled' => 'Vent venligst inden du prøver igen.', 7 | 'token' => 'Koden til nulstilling af adgangskoden er ugyldig.', 8 | 'user' => 'Vi kan ikke finde en bruger med den e-mailadresse.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/de/auth.php: -------------------------------------------------------------------------------- 1 | 'Diese Kombination aus Zugangsdaten wurde nicht in unserer Datenbank gefunden.', 5 | 'lang' => 'Deutsch', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'SAML 2.0-Anbieter', 12 | 'password' => 'Das Passwort ist falsch.', 13 | 'throttle' => 'Zu viele Loginversuche. Versuchen Sie es bitte in :seconds Sekunden nochmal.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/de/format.php: -------------------------------------------------------------------------------- 1 | 'd. MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (d. MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd, d. MMM YYYY', 8 | 'long_month_day' => 'd. MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'd. MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/de/pagination.php: -------------------------------------------------------------------------------- 1 | 'Weiter ❯', 5 | 'previous' => '❮ Zurück', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/de/passwords.php: -------------------------------------------------------------------------------- 1 | 'Das Passwort wurde zurückgesetzt!', 5 | 'sent' => 'E-Mail zum Zurücksetzen des Passworts wurde gesendet!', 6 | 'throttled' => 'Bitte warten Sie, bevor Sie es erneut versuchen.', 7 | 'token' => 'Der Passwort-Wiederherstellungsschlüssel ist ungültig oder abgelaufen.', 8 | 'user' => 'Es konnte leider kein Nutzer mit dieser E-Mail-Adresse gefunden werden.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/el/auth.php: -------------------------------------------------------------------------------- 1 | 'Τα στοιχεία αυτά δεν ταιριάζουν με τα δικά μας.', 5 | 'lang' => 'Ελληνικά', 6 | 'password' => 'Ο κωδικός είναι λανθασμένος.', 7 | 'throttle' => 'Πολλές προσπάθειες σύνδεσης. Παρακαλώ δοκιμάστε ξανά σε :seconds δευτερόλεπτα.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/el/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/el/pagination.php: -------------------------------------------------------------------------------- 1 | 'Επόμενη ❯', 5 | 'previous' => '❮ Προηγούμενη', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/el/passwords.php: -------------------------------------------------------------------------------- 1 | 'Έχει γίνει επαναφορά του συνθηματικού!', 5 | 'sent' => 'Η υπενθύμιση του συνθηματικού εστάλη!', 6 | 'throttled' => 'Παρακαλώ περιμένετε πριν επαναλάβετε.', 7 | 'token' => 'Το κλειδί αρχικοποίησης του συνθηματικού δεν είναι έγκυρο.', 8 | 'user' => 'Δεν βρέθηκε χρήστης με το συγκεκριμένο email.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 7 | 'lang' => 'English', 8 | 'login_provider_azure' => 'Microsoft', 9 | 'login_provider_facebook' => 'Facebook', 10 | 'login_provider_github' => 'GitHub', 11 | 'login_provider_google' => 'Google', 12 | 'login_provider_kanidm' => 'Kanidm', 13 | 'login_provider_keycloak' => 'Keycloak', 14 | 'login_provider_linkedin' => 'LinkedIn', 15 | 'login_provider_saml2' => 'SAML 2.0 provider', 16 | 'password' => 'The provided password is incorrect.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | ]; 19 | -------------------------------------------------------------------------------- /lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | 'Next ❯', 7 | 'previous' => '❮ Previous', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Your password has been reset.', 7 | 'sent' => 'We have emailed your password reset link.', 8 | 'throttled' => 'Please wait before retrying.', 9 | 'token' => 'This password reset token is invalid.', 10 | 'user' => 'We can\'t find a user with that email address.', 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/es/auth.php: -------------------------------------------------------------------------------- 1 | 'Estas credenciales no coinciden con nuestros registros.', 5 | 'lang' => 'Español', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'Proveedor SAML 2.0', 12 | 'password' => 'La contraseña es incorrecta.', 13 | 'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/es/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd, D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'DD MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/es/pagination.php: -------------------------------------------------------------------------------- 1 | 'Siguiente ❯', 5 | 'previous' => '❮ Anterior', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/es/passwords.php: -------------------------------------------------------------------------------- 1 | 'Su contraseña ha sido restablecida.', 5 | 'sent' => 'Le hemos enviado por correo electrónico el enlace para restablecer su contraseña.', 6 | 'throttled' => 'Por favor espere antes de intentar de nuevo.', 7 | 'token' => 'El token de restablecimiento de contraseña es inválido.', 8 | 'user' => 'No encontramos ningún usuario con ese correo electrónico.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/fr/auth.php: -------------------------------------------------------------------------------- 1 | 'Ces identifiants ne correspondent pas à nos enregistrements.', 5 | 'lang' => 'Français', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'Fournisseur SAML 2.0', 12 | 'password' => 'Le mot de passe est incorrect', 13 | 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/fr/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/fr/pagination.php: -------------------------------------------------------------------------------- 1 | 'Suivant ❯', 5 | 'previous' => '❮ Précédent', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/fr/passwords.php: -------------------------------------------------------------------------------- 1 | 'Votre mot de passe a été réinitialisé !', 5 | 'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !', 6 | 'throttled' => 'Veuillez patienter avant de réessayer.', 7 | 'token' => 'Ce jeton de réinitialisation du mot de passe n’est pas valide.', 8 | 'user' => 'Aucun utilisateur n’a été trouvé avec cette adresse email.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/he/auth.php: -------------------------------------------------------------------------------- 1 | 'פרטים אלה אינם תואמים את רישומינו.', 5 | 'lang' => 'עברית', 6 | 'password' => 'הסיסמה שגויה.', 7 | 'throttle' => 'ניסיונות כניסה רבים מדי. אנא נסו שוב בעוד :seconds שניות.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/he/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/he/pagination.php: -------------------------------------------------------------------------------- 1 | 'הבא ❯', 5 | 'previous' => '❮ הקודם', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/he/passwords.php: -------------------------------------------------------------------------------- 1 | 'הסיסמה אופסה!', 5 | 'sent' => 'קישור לאיפוס הסיסמה נשלח אליך באימייל', 6 | 'throttled' => 'אנא חכו לפני שתנסו שוב.', 7 | 'token' => 'אסימון איפוס הסיסמה הזה לא תקני.', 8 | 'user' => 'לא הצלחנו למצוא משתמש עם כתובת האימייל הזאת.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/hi/auth.php: -------------------------------------------------------------------------------- 1 | 'ये साख हमारे रिकॉर्ड से मेल नहीं खा रहे हैं ।', 5 | 'lang' => 'हिन्दी', 6 | 'password' => 'पासवर्ड गलत है ।', 7 | 'throttle' => 'बहुत सारे लॉगिन प्रयास। :seconds सेकंड में फिर से कोशिश करें ।', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/hi/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/hi/pagination.php: -------------------------------------------------------------------------------- 1 | 'अगला ❯', 5 | 'previous' => '❮ पिछला', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/hi/passwords.php: -------------------------------------------------------------------------------- 1 | 'आपका पासवर्ड रीसेट कर दिया गया है ।', 5 | 'sent' => 'हमने आपको एक पासवर्ड रीसेट लिंक ई-मेल किया है ।', 6 | 'throttled' => 'कृपया पुन: प्रयास करने से पहले प्रतीक्षा करें ।', 7 | 'token' => 'यह पासवर्ड रीसेट टोकन अमान्य है ।', 8 | 'user' => 'हमें उस ई-मेल पते के साथ एक उपयोगकर्ता नहीं मिल सकता है ।', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/it/auth.php: -------------------------------------------------------------------------------- 1 | 'Credenziali non valide.', 5 | 'lang' => 'Italiano', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'Fornitore SAML 2.0', 12 | 'password' => 'Il campo :attribute non è corretto.', 13 | 'throttle' => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/it/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/it/pagination.php: -------------------------------------------------------------------------------- 1 | 'Successivo ❯', 5 | 'previous' => '❮ Precedente', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/it/passwords.php: -------------------------------------------------------------------------------- 1 | 'La password è stata reimpostata!', 5 | 'sent' => 'Ti abbiamo inviato una email con il link per il reset della password!', 6 | 'throttled' => 'Per favore, attendi prima di riprovare.', 7 | 'token' => 'Questo token di reset della password non è valido.', 8 | 'user' => 'Non riusciamo a trovare un utente con questo indirizzo email.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ja/auth.php: -------------------------------------------------------------------------------- 1 | '認証に失敗しました。', 5 | 'lang' => '日本語', 6 | 'password' => 'パスワードが正しくありません。', 7 | 'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/ja/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ja/pagination.php: -------------------------------------------------------------------------------- 1 | '次へ ❯', 5 | 'previous' => '❮ 前へ', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ja/passwords.php: -------------------------------------------------------------------------------- 1 | 'パスワードが再設定されました。', 5 | 'sent' => 'パスワードリセットメールを送信しました。', 6 | 'throttled' => '時間を置いて再度お試しください。', 7 | 'token' => 'このパスワード再設定トークンは無効です。', 8 | 'user' => 'このメールアドレスに一致するユーザーがいません。', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ml/auth.php: -------------------------------------------------------------------------------- 1 | 'ഈ യോഗ്യതാപത്രങ്ങൾ ഞങ്ങളുടെ റെക്കോർഡുകളുമായി പൊരുത്തപ്പെടുന്നില്ല.', 5 | 'lang' => 'മലയാളം', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'SAML 2.0 പ്രോവൈഡർ', 12 | 'password' => 'പാസ്‌വേഡ് തെറ്റാണ്.', 13 | 'throttle' => 'വളരെയധികം ലോഗിൻ ശ്രമങ്ങൾ. :seconds സെക്കൻഡിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/ml/format.php: -------------------------------------------------------------------------------- 1 | 'd. MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (d. MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd, d. MMM YYYY', 8 | 'long_month_day' => 'd. MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'd. MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ml/pagination.php: -------------------------------------------------------------------------------- 1 | 'അടുത്തത് \\"', 5 | 'previous' => '« മുമ്പത്തെ', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ml/passwords.php: -------------------------------------------------------------------------------- 1 | 'നിങ്ങളുടെ പാസ്‌വേഡ് പുനഃസജ്ജമാക്കിയിരിക്കുന്നു.', 5 | 'sent' => 'നിങ്ങളുടെ പാസ്‌വേഡ് റീസെറ്റ് ലിങ്ക് ഞങ്ങൾ ഇമെയിൽ ചെയ്തു.', 6 | 'throttled' => 'വീണ്ടും ശ്രമിക്കുന്നതിന് മുമ്പ് ദയവായി കാത്തിരിക്കുക.', 7 | 'token' => 'ഈ പാസ്‌വേഡ് റീസെറ്റ് ടോക്കൺ അസാധുവാണ്.', 8 | 'user' => 'ആ ഇമെയിൽ വിലാസമുള്ള ഒരു ഉപയോക്താവിനെ കണ്ടെത്താൻ ഞങ്ങൾക്ക് കഴിയുന്നില്ല.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/nl/auth.php: -------------------------------------------------------------------------------- 1 | 'Deze combinatie van e-mailadres en wachtwoord is niet geldig.', 5 | 'lang' => 'Nederlands', 6 | 'password' => 'Wachtwoord is onjuist.', 7 | 'throttle' => 'Te veel mislukte aanmeldpogingen. Probeer het nog eens over :seconds seconden.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/nl/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/nl/pagination.php: -------------------------------------------------------------------------------- 1 | 'Volgende ❯', 5 | 'previous' => '❮ Vorige', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/nl/passwords.php: -------------------------------------------------------------------------------- 1 | 'Het wachtwoord van uw account is gewijzigd.', 5 | 'sent' => 'We hebben een e-mail verstuurd met instructies om een nieuw wachtwoord in te stellen.', 6 | 'throttled' => 'Gelieve even te wachten en het dan opnieuw te proberen.', 7 | 'token' => 'Dit wachtwoordhersteltoken is niet geldig.', 8 | 'user' => 'Geen gebruiker bekend met dit e-mailadres.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/nn/auth.php: -------------------------------------------------------------------------------- 1 | 'Brukarnamn og/eller passord er feil.', 5 | 'lang' => 'Norsk nynorsk', 6 | 'password' => 'Passordet er feil.', 7 | 'throttle' => 'For mange innloggingsforsøk. Ver venleg og prøv på nytt om :seconds sekund.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/nn/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/nn/pagination.php: -------------------------------------------------------------------------------- 1 | 'Neste ❯', 5 | 'previous' => '❮ Førre', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/nn/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passordet vart endra!', 5 | 'sent' => 'Vi har sendt deg ei lenke du kan klikke på for å endre passordet ditt!', 6 | 'throttled' => 'Vent før du prøver på nytt.', 7 | 'token' => 'Koden for å nullstille passord er ikkje gyldig.', 8 | 'user' => 'Vi finn ingen brukarar med denne e-postadressen.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/pa/auth.php: -------------------------------------------------------------------------------- 1 | 'ਇਹ ਪ੍ਰਮਾਣ ਪੱਤਰ ਸਾਡੇ ਰਿਕਾਰਡਾਂ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ।', 5 | 'lang' => 'ਪੰਜਾਬੀ', 6 | 'password' => 'ਪਾਸਵਰਡ ਗਲਤ ਹੈ।', 7 | 'throttle' => 'ਬਹੁਤ ਸਾਰੀਆਂ ਲੌਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ। ਕਿਰਪਾ ਕਰਕੇ :seconds ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/pa/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/pa/pagination.php: -------------------------------------------------------------------------------- 1 | 'ਅਗਲਾ \\"', 5 | 'previous' => '\\"ਪਿਛਲਾ', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/pa/passwords.php: -------------------------------------------------------------------------------- 1 | 'ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਰੀਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ।', 5 | 'sent' => 'ਅਸੀਂ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਰੀਸੈਟ ਲਿੰਕ ਨੂੰ ਈਮੇਲ ਕਰ ਦਿੱਤਾ ਹੈ।', 6 | 'throttled' => 'ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਡੀਕ ਕਰੋ।', 7 | 'token' => 'ਇਹ ਪਾਸਵਰਡ ਰੀਸੈਟ ਟੋਕਨ ਅਵੈਧ ਹੈ।', 8 | 'user' => 'ਅਸੀਂ ਉਸ ਈਮੇਲ ਪਤੇ ਵਾਲਾ ਕੋਈ ਉਪਭੋਗਤਾ ਨਹੀਂ ਲੱਭ ਸਕਦੇ।', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/pl/auth.php: -------------------------------------------------------------------------------- 1 | 'Błędny login lub hasło.', 5 | 'lang' => 'Polski', 6 | 'password' => 'Hasło jest nieprawidłowe.', 7 | 'throttle' => 'Za dużo nieudanych prób logowania. Proszę spróbować za :seconds sekund.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/pl/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/pl/pagination.php: -------------------------------------------------------------------------------- 1 | 'Następna ❯', 5 | 'previous' => '❮ Poprzednia', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/pl/passwords.php: -------------------------------------------------------------------------------- 1 | 'Hasło zostało zresetowane!', 5 | 'sent' => 'Przypomnienie hasła zostało wysłane!', 6 | 'throttled' => 'Proszę zaczekać zanim spróbujesz ponownie.', 7 | 'token' => 'Token resetowania hasła jest nieprawidłowy.', 8 | 'user' => 'Nie znaleziono użytkownika z takim adresem e-mail.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/pt/auth.php: -------------------------------------------------------------------------------- 1 | 'As credenciais indicadas não coincidem com as registadas no sistema.', 5 | 'lang' => 'Português', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'Provedor SAML 2.0', 12 | 'password' => 'A palavra-passe está errada.', 13 | 'throttle' => 'O número limite de tentativas de login foi atingido. Por favor tente novamente dentro de :seconds segundos.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/pt/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/pt/pagination.php: -------------------------------------------------------------------------------- 1 | 'Próxima ❯', 5 | 'previous' => '❮ Anterior', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/pt/passwords.php: -------------------------------------------------------------------------------- 1 | 'A palavra-passe foi redefinida!', 5 | 'sent' => 'O lembrete para a palavra-passe foi enviado!', 6 | 'throttled' => 'Por favor aguarde, antes de tentar novamente.', 7 | 'token' => 'Este código de recuperação da palavra-passe é inválido.', 8 | 'user' => 'Não existe nenhum utilizador com o e-mail indicado.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/pt_BR/auth.php: -------------------------------------------------------------------------------- 1 | 'Credenciais informadas não correspondem com nossos registros.', 5 | 'lang' => 'Português (Brasil)', 6 | 'password' => 'A senha está incorreta.', 7 | 'throttle' => 'Você realizou muitas tentativas de login. Por favor, tente novamente em :seconds segundos.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/pt_BR/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/pt_BR/pagination.php: -------------------------------------------------------------------------------- 1 | 'Próxima ❯', 5 | 'previous' => '❮ Anterior', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/pt_BR/passwords.php: -------------------------------------------------------------------------------- 1 | 'Sua senha foi redefinida!', 5 | 'sent' => 'Enviamos um link para redefinir a sua senha por e-mail.', 6 | 'throttled' => 'Por favor espere antes de tentar novamente.', 7 | 'token' => 'Esse código de redefinição de senha é inválido.', 8 | 'user' => 'Não conseguimos encontrar nenhum usuário com o endereço de e-mail informado.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ro/auth.php: -------------------------------------------------------------------------------- 1 | 'Datele de identificare nu pot fi confirmate.', 5 | 'lang' => 'Română', 6 | 'password' => 'Parola este greșită.', 7 | 'throttle' => 'Prea multe încercări de intrare în cont. Puteți încerca din nou peste :seconds secunde.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/ro/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ro/pagination.php: -------------------------------------------------------------------------------- 1 | 'Înainte ❯', 5 | 'previous' => '❮ Înapoi', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ro/passwords.php: -------------------------------------------------------------------------------- 1 | 'Parola a fost resetată!', 5 | 'sent' => 'Am trimis un e-mail cu link-ul de resetare a parolei!', 6 | 'throttled' => 'Vă rugăm să așteptați înainte de a încerca din nou.', 7 | 'token' => 'Codul de resetare a parolei este greșit.', 8 | 'user' => 'Nu există niciun utilizator cu această adresă de e-mail.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ru/auth.php: -------------------------------------------------------------------------------- 1 | 'Неверное имя пользователя или пароль.', 5 | 'lang' => 'русский язык', 6 | 'login_provider_azure' => 'Microsoft', 7 | 'login_provider_facebook' => 'Facebook', 8 | 'login_provider_github' => 'GitHub', 9 | 'login_provider_google' => 'Google', 10 | 'login_provider_linkedin' => 'LinkedIn', 11 | 'login_provider_saml2' => 'Provedor SAML 2.0', 12 | 'password' => 'Некорректный пароль.', 13 | 'throttle' => 'Слишком много попыток входа. Пожалуйста, попробуйте ещё раз через :seconds секунд.', 14 | ]; 15 | -------------------------------------------------------------------------------- /lang/ru/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ru/pagination.php: -------------------------------------------------------------------------------- 1 | 'Вперёд ❯', 5 | 'previous' => '❮ Назад', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ru/passwords.php: -------------------------------------------------------------------------------- 1 | 'Ваш пароль был сброшен.', 5 | 'sent' => 'Ссылка на сброс пароля была отправлена.', 6 | 'throttled' => 'Пожалуйста, подождите перед повторной попыткой.', 7 | 'token' => 'Ошибочный код сброса пароля.', 8 | 'user' => 'Не удалось найти пользователя с указанным электронным адресом.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/sv/auth.php: -------------------------------------------------------------------------------- 1 | 'Dessa uppgifter stämmer inte överens med vårt register.', 5 | 'lang' => 'Svenska', 6 | 'password' => 'Lösenordet är fel.', 7 | 'throttle' => 'För många inloggningsförsök. Var vänlig försök igen om :seconds sekunder.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/sv/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/sv/pagination.php: -------------------------------------------------------------------------------- 1 | 'Nästa ❯', 5 | 'previous' => '❮ Föregående', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/sv/passwords.php: -------------------------------------------------------------------------------- 1 | 'Lösenordet har blivit återställt!', 5 | 'sent' => 'Lösenordspåminnelse skickad!', 6 | 'throttled' => 'Vänligen vänta innan du försöker igen.', 7 | 'token' => 'Koden för lösenordsåterställning är ogiltig.', 8 | 'user' => 'Det finns ingen användare med den e-postadressen.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/te/auth.php: -------------------------------------------------------------------------------- 1 | 'ఈ ఆధారాలు మా రికార్డులతో సరిపోలడం లేదు.', 5 | 'lang' => 'తెలుగు', 6 | 'password' => 'పాస్వర్డ్ తప్పు.', 7 | 'throttle' => 'చాలా ఎక్కువ లాగిన్ ప్రయత్నాలు. దయచేసి :seconds సెకన్లలో మళ్లీ ప్రయత్నించండి.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/te/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/te/pagination.php: -------------------------------------------------------------------------------- 1 | 'తరువాత \\"', 5 | 'previous' => '« మునుపటి', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/te/passwords.php: -------------------------------------------------------------------------------- 1 | 'మీ పాస్‌వర్డ్ రీసెట్ చేయబడింది.', 5 | 'sent' => 'మేము మీ పాస్‌వర్డ్ రీసెట్ లింక్‌ని ఇమెయిల్ చేసాము.', 6 | 'throttled' => 'దయచేసి మళ్లీ ప్రయత్నించే ముందు వేచి ఉండండి.', 7 | 'token' => 'ఈ పాస్‌వర్డ్ రీసెట్ టోకెన్ చెల్లదు.', 8 | 'user' => 'మేము ఆ ఇమెయిల్ చిరునామాతో వినియోగదారుని కనుగొనలేకపోయాము.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/tr/auth.php: -------------------------------------------------------------------------------- 1 | 'Bu kimlik bilgileri kayıtlarımızla eşleşmiyor.', 5 | 'lang' => 'Türkçe', 6 | 'password' => 'Parola geçersiz.', 7 | 'throttle' => 'Çok fazla giriş denemesi. :seconds saniye sonra lütfen tekrar deneyin.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/tr/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/tr/pagination.php: -------------------------------------------------------------------------------- 1 | 'Sonrakiler ❯', 5 | 'previous' => '❮ Öncekiler', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/tr/passwords.php: -------------------------------------------------------------------------------- 1 | 'Parolanız sıfırlandı!', 5 | 'sent' => 'Parola sıfırlama bağlantınız e-posta ile gönderildi!', 6 | 'throttled' => 'Tekrar denemeden önce lütfen bekleyin.', 7 | 'token' => 'Parola sıfırlama kodu geçersiz.', 8 | 'user' => 'Bu e-posta adresi ile kayıtlı bir üye bulunamadı.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/ur/auth.php: -------------------------------------------------------------------------------- 1 | 'یہ تفصیلات ہمارے ریکارڈ سے مطابقت نہیں رکھتیں۔', 5 | 'lang' => 'اردو', 6 | 'password' => 'پاس ورڈ غلط ہے.', 7 | 'throttle' => 'لاگ اِن کرنے کی بہت زیادہ کوششیں۔ براہِ مہربانی :seconds سیکنڈ میں دوبارہ کوشش کریں۔', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/ur/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/ur/pagination.php: -------------------------------------------------------------------------------- 1 | 'آئندہ ❯', 5 | 'previous' => '❮ گزشتہ', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/ur/passwords.php: -------------------------------------------------------------------------------- 1 | 'آپ کا پاس ورڈ دوبارہ مرتب کر دیا گیا ہے۔', 5 | 'sent' => 'پاس ورڈ دوبارہ مرتب کرنے کے لیے ہم نے آپ کو لنک ای میل کر دیا ہے!', 6 | 'throttled' => 'براہ کرم انتظار کریں اس سے پہلے retrying.', 7 | 'token' => 'پاس ورڈ مرتب کرنے کا یہ طریقہ نا قابلِ قبول ہے۔', 8 | 'user' => 'اس ای میل پتے کے ساتھ ہمیں کوئی صارف نہیں ملا۔', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/vendor/webauthn/de/messages.php: -------------------------------------------------------------------------------- 1 | 'Wenn Ihr Sicherkeitsschlüssel einen Knopf hat, drücken Sie ihn jetzt.', 5 | 'noButtonAdvise' => 'Falls er keinen hat, bitte entfernen Sie das Gerät und schließen Sie es erneut an.', 6 | 'success' => 'Ihr Sicherheitsschlüssel wurde gefunden und verifiziert.', 7 | 'insertKey' => 'Bitte Sicherheitsschlüssel anschließen', 8 | 'cancel' => 'Abbrechen', 9 | 10 | 'auth' => [ 11 | 'title' => 'Anmeldung mit einem Sicherheitsschlüssel', 12 | ], 13 | 14 | 'register' => [ 15 | 'title' => 'Neuen Sicherheitsschlüssel registrieren', 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /lang/vendor/webauthn/en/messages.php: -------------------------------------------------------------------------------- 1 | 'If your security key has a button, press it.', 5 | 'noButtonAdvise' => 'If it does not, remove it and insert it again.', 6 | 'success' => 'Your key is detected and validated.', 7 | 'insertKey' => 'Insert your security key', 8 | 'cancel' => 'Cancel', 9 | 'submit' => 'Submit', 10 | 'key_name' => 'Key name', 11 | 12 | 'auth' => [ 13 | 'title' => 'Authentication with a security key', 14 | ], 15 | 16 | 'register' => [ 17 | 'title' => 'Register a new security key', 18 | ], 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/vendor/webauthn/fr/messages.php: -------------------------------------------------------------------------------- 1 | 'Si votre clé de sécurité dispose d’un bouton, appuyez dessus.', 5 | 'noButtonAdvise' => 'Si ce n’est pas le cas, enlevez-la et insérez là à nouveau.', 6 | 'success' => 'Votre clé est détectée et validée.', 7 | 'insertKey' => 'Insérer votre clé de sécurité', 8 | 'cancel' => 'Annuler', 9 | 10 | 'auth' => [ 11 | 'title' => 'Authentification avec une clé de sécurité', 12 | ], 13 | 14 | 'register' => [ 15 | 'title' => 'Enregistrer une nouvelle clé de sécurité', 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /lang/vi/auth.php: -------------------------------------------------------------------------------- 1 | 'Thông tin tài khoản không tìm thấy trong hệ thống.', 5 | 'lang' => 'Tiếng Việt', 6 | 'password' => 'Mật khẩu không đúng.', 7 | 'throttle' => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/vi/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/vi/pagination.php: -------------------------------------------------------------------------------- 1 | 'Trang sau ❯', 5 | 'previous' => '❮ Trang trước', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/vi/passwords.php: -------------------------------------------------------------------------------- 1 | 'Mật khẩu mới đã được cập nhật!', 5 | 'sent' => 'Hướng dẫn cấp lại mật khẩu đã được gửi!', 6 | 'throttled' => 'Vui lòng đợi trước khi thử lại.', 7 | 'token' => 'Mã khôi phục mật khẩu không hợp lệ.', 8 | 'user' => 'Không tìm thấy người dùng với địa chỉ email này.', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/zh_CN/auth.php: -------------------------------------------------------------------------------- 1 | '用户名或密码错误。', 5 | 'lang' => '中文(中华人民共和国)', 6 | 'password' => '密码错误', 7 | 'throttle' => '您尝试的登录次数过多,请 :seconds 秒后再试。', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/zh_CN/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/zh_CN/pagination.php: -------------------------------------------------------------------------------- 1 | '下一页 ❯', 5 | 'previous' => '❮ 上一页', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/zh_CN/passwords.php: -------------------------------------------------------------------------------- 1 | '密码重置成功!', 5 | 'sent' => '密码重置邮件已发送!', 6 | 'throttled' => '请稍候再试。', 7 | 'token' => '无效的 token', 8 | 'user' => '找不到该邮箱对应的用户。', 9 | ]; 10 | -------------------------------------------------------------------------------- /lang/zh_TW/auth.php: -------------------------------------------------------------------------------- 1 | '使用者名稱或密碼錯誤。', 5 | 'lang' => '中文(台灣)', 6 | 'password' => '密碼錯誤', 7 | 'throttle' => '嘗試登入太多次,請在 :seconds 秒後再試。', 8 | ]; 9 | -------------------------------------------------------------------------------- /lang/zh_TW/format.php: -------------------------------------------------------------------------------- 1 | 'D MMM YYYY', 5 | 'day_month_parenthesis' => 'dddd (D MMM)', 6 | 'day_number' => 'DD', 7 | 'full_date' => 'dddd D MMM YYYY', 8 | 'long_month_day' => 'D MMMM', 9 | 'long_month_year' => 'MMMM Y', 10 | 'short_date' => 'D MMM', 11 | 'short_date_year_time' => 'D MMM YYYY H:mm', 12 | 'short_day' => 'ddd', 13 | 'short_month' => 'MMM', 14 | 'short_month_year' => 'MMM Y', 15 | ]; 16 | -------------------------------------------------------------------------------- /lang/zh_TW/pagination.php: -------------------------------------------------------------------------------- 1 | '下一頁 ❯', 5 | 'previous' => '❮ 上一頁', 6 | ]; 7 | -------------------------------------------------------------------------------- /lang/zh_TW/passwords.php: -------------------------------------------------------------------------------- 1 | '密碼已成功重設!', 5 | 'sent' => '密碼重設郵件已發送!', 6 | 'throttled' => '請稍候再試。', 7 | 'token' => '密碼重設碼無效。', 8 | 'user' => '找不到該 E-mail 對應的使用者。', 9 | ]; 10 | -------------------------------------------------------------------------------- /pint.json: -------------------------------------------------------------------------------- 1 | { 2 | "preset": "laravel", 3 | "rules": { 4 | "single_import_per_statement": { 5 | "group_to_single_imports": false 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/favicon.ico -------------------------------------------------------------------------------- /public/img/auth/azure.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/auth/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/auth/facebook.png -------------------------------------------------------------------------------- /public/img/auth/linkedin.svg: -------------------------------------------------------------------------------- 1 | LinkedIn -------------------------------------------------------------------------------- /public/img/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image1.png -------------------------------------------------------------------------------- /public/img/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image10.png -------------------------------------------------------------------------------- /public/img/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image11.png -------------------------------------------------------------------------------- /public/img/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image12.png -------------------------------------------------------------------------------- /public/img/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image13.png -------------------------------------------------------------------------------- /public/img/image14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image14.png -------------------------------------------------------------------------------- /public/img/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image15.png -------------------------------------------------------------------------------- /public/img/image16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image16.png -------------------------------------------------------------------------------- /public/img/image17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image17.png -------------------------------------------------------------------------------- /public/img/image18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image18.png -------------------------------------------------------------------------------- /public/img/image19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image19.png -------------------------------------------------------------------------------- /public/img/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image2.png -------------------------------------------------------------------------------- /public/img/image20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image20.png -------------------------------------------------------------------------------- /public/img/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image3.png -------------------------------------------------------------------------------- /public/img/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image4.png -------------------------------------------------------------------------------- /public/img/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image5.png -------------------------------------------------------------------------------- /public/img/image6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image6.png -------------------------------------------------------------------------------- /public/img/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image7.png -------------------------------------------------------------------------------- /public/img/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image8.png -------------------------------------------------------------------------------- /public/img/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/img/image9.png -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | handleRequest(Request::capture()); 18 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/security.txt: -------------------------------------------------------------------------------- 1 | # Our security address 2 | 3 | Contact: security@monicahq.com 4 | Disclosure: Full 5 | -------------------------------------------------------------------------------- /public/vendor/telescope/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monicahq/monica/32a20e1f37ddf36296a2efcf57c0c1b84a6496f3/public/vendor/telescope/favicon.ico -------------------------------------------------------------------------------- /public/vendor/telescope/mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/app.js": "/app.js?id=99e99836705c54c9dc04352a9907bc7f", 3 | "/app-dark.css": "/app-dark.css?id=1ea407db56c5163ae29311f1f38eb7b9", 4 | "/app.css": "/app.css?id=de4c978567bfd90b38d186937dee5ccf" 5 | } 6 | -------------------------------------------------------------------------------- /resources/css/app.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss'; 2 | @import 'charts.css/dist/charts.css' layer(base); 3 | @plugin '@tailwindcss/forms'; 4 | 5 | @custom-variant dark (&:where(.dark, .dark *)); 6 | 7 | @theme { 8 | --default-font-family: Nunito, var(--font-sans); 9 | } 10 | 11 | .icon-breadcrumb { 12 | top: -1px; 13 | } 14 | 15 | .bulleted-list li:not(:last-child):after { 16 | padding-left: 4px; 17 | content: '•'; 18 | } 19 | 20 | .uploadcare--button_primary { 21 | background: #3891ff; 22 | } 23 | -------------------------------------------------------------------------------- /resources/js/Components/AuthenticationCardLogo.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /resources/js/Components/Button.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /resources/js/Components/Checkbox.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 35 | -------------------------------------------------------------------------------- /resources/js/Components/ChevronLeft.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /resources/js/Components/ChevronRight.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /resources/js/Components/Input.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 29 | -------------------------------------------------------------------------------- /resources/js/Components/InputError.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /resources/js/Components/Jetstream/ActionMessage.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | -------------------------------------------------------------------------------- /resources/js/Components/Jetstream/DangerButton.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /resources/js/Components/Jetstream/SecondaryButton.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /resources/js/Components/Label.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /resources/js/Components/ValidationErrors.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 22 | -------------------------------------------------------------------------------- /resources/js/Layouts/AuthenticationCard.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /resources/js/Layouts/FooterLayout.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /resources/js/Layouts/SectionBorder.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /resources/js/Pages/PrivacyPolicy.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 24 | -------------------------------------------------------------------------------- /resources/js/Pages/TermsOfService.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 24 | -------------------------------------------------------------------------------- /resources/js/Shared/Avatar.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /resources/js/Shared/Form/PrimaryButton.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /resources/js/Shared/Guest.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 20 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/BadgeIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/BallIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/CheckedIcon.vue: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/DatabaseIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/DateIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/DollarIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/EditIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/FireIcon.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/LampIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/MapPointerIcon.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/MenuIcon.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/MinusIcon.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/MoonIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/PeopleIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/PhotoIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/PlusIcon.vue: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/RefreshIcon.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/ReminderIcon.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/SearchIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/TagIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/TaskIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/ValideIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Icons/WorldIcon.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /resources/js/Shared/Modules/ContactAvatar.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 23 | -------------------------------------------------------------------------------- /resources/views/emails/notifications/reminder.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | # @lang('Hi :name', ['name' => $name]) 3 | 4 | @lang('You wanted to be reminded of the following:') 5 | 6 | {{ $reason }} 7 | 8 | @lang('For:') 9 | 10 | {{ $contactName }} 11 | 12 | @lang('Have a great day,')
13 | {{ config('app.name') }} 14 | @endcomponent 15 | -------------------------------------------------------------------------------- /resources/views/emails/notifications/test-notification.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | # @lang('This is a test email') 3 | 4 | @lang('This email is a test email to check if Monica can send an email to this email address.') 5 | 6 | @lang('So… it works 😼') 7 | 8 | @lang('Have a great day,')
9 | {{ config('app.name') }} 10 | @endcomponent 11 | -------------------------------------------------------------------------------- /resources/views/emails/notifications/validate-email.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | # @lang('Please verify your email address') 3 | 4 | @lang('You’ve been invited to use this email address in Monica, an open source personal CRM, so we can use it to send you notifications.') 5 | 6 | @component('mail::button', ['url' => $url]) 7 | @lang('Verify this email address') 8 | @endcomponent 9 | 10 | @lang('If you’ve received this invitation by mistake, please discard it.') 11 | 12 | @lang('Thanks,')
13 | {{ config('app.name') }} 14 | @endcomponent 15 | -------------------------------------------------------------------------------- /resources/views/emails/user/invitation.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | # @lang('Please join Monica') 3 | 4 | @lang(':UserName invites you to join Monica, an open source personal CRM, designed to help you document your relationships.', ['userName' => $userName]) 5 | 6 | @component('mail::button', ['url' => $url]) 7 | @lang('Accept invitation and create your account') 8 | @endcomponent 9 | 10 | @lang('Thanks,')
11 | {{ config('app.name') }} 12 | @endcomponent 13 | -------------------------------------------------------------------------------- /sail-init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Run this script after first cloning the repository to be ready to use the sail command. 4 | # 5 | # taken from https://laravel.com/docs/11.x/sail#installing-composer-dependencies-for-existing-projects 6 | docker run --rm \ 7 | -u "$(id -u):$(id -g)" \ 8 | -v "$(pwd):/var/www/html" \ 9 | -w /var/www/html \ 10 | laravelsail/php83-composer:latest \ 11 | composer install --ignore-platform-reqs 12 | ln -s ./vendor/bin/sail sail --------------------------------------------------------------------------------