gitextract_ryuvl2mb/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── 1_bug_report.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ └── workflows/ │ ├── build-onpremise.yml │ ├── build-private.yml │ ├── build-public.yml │ ├── generate-api-docs.yml │ ├── npm-build.yml │ ├── npm-format-check.yml │ ├── npm-lint.yml │ ├── npm-publish-api.yml │ ├── npm-publish-ui.yml │ ├── npm-typecheck.yml │ ├── phpstan.yml │ ├── phpunit.yml │ ├── pint.yml │ └── playwright.yml ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── app/ │ ├── Actions/ │ │ ├── Fortify/ │ │ │ ├── CreateNewUser.php │ │ │ ├── PasswordValidationRules.php │ │ │ ├── ResetUserPassword.php │ │ │ ├── UpdateUserPassword.php │ │ │ └── UpdateUserProfileInformation.php │ │ └── Jetstream/ │ │ ├── AddOrganizationMember.php │ │ ├── CreateOrganization.php │ │ ├── DeleteOrganization.php │ │ ├── DeleteUser.php │ │ ├── InviteOrganizationMember.php │ │ ├── RemoveOrganizationMember.php │ │ ├── UpdateMemberRole.php │ │ ├── UpdateOrganization.php │ │ └── ValidateOrganizationDeletion.php │ ├── Console/ │ │ ├── Commands/ │ │ │ ├── Admin/ │ │ │ │ ├── OrganizationDeleteCommand.php │ │ │ │ ├── UserCreateCommand.php │ │ │ │ └── UserVerifyCommand.php │ │ │ ├── Auth/ │ │ │ │ └── AuthSendReminderForExpiringApiTokensCommand.php │ │ │ ├── Correction/ │ │ │ │ └── CorrectionPlaceholderMembersCommand.php │ │ │ ├── Report/ │ │ │ │ └── ReportSetExpiredToPrivateCommand.php │ │ │ ├── SelfHost/ │ │ │ │ ├── SelfHostCheckForUpdateCommand.php │ │ │ │ ├── SelfHostDatabaseConsistency.php │ │ │ │ ├── SelfHostGenerateKeysCommand.php │ │ │ │ └── SelfHostTelemetryCommand.php │ │ │ ├── Test/ │ │ │ │ ├── TestEmailCommand.php │ │ │ │ ├── TestJobCommand.php │ │ │ │ └── TestOutputCommand.php │ │ │ └── TimeEntry/ │ │ │ └── TimeEntrySendStillRunningMailsCommand.php │ │ └── Kernel.php │ ├── Enums/ │ │ ├── CurrencyFormat.php │ │ ├── DateFormat.php │ │ ├── ExportFormat.php │ │ ├── IntervalFormat.php │ │ ├── NumberFormat.php │ │ ├── Role.php │ │ ├── TimeEntryAggregationType.php │ │ ├── TimeEntryAggregationTypeInterval.php │ │ ├── TimeEntryRoundingType.php │ │ ├── TimeFormat.php │ │ └── Weekday.php │ ├── Events/ │ │ ├── AfterCreateOrganization.php │ │ ├── BeforeOrganizationDeletion.php │ │ ├── DatabaseSeederAfterSeed.php │ │ ├── DatabaseSeederBeforeDelete.php │ │ ├── MemberMadeToPlaceholder.php │ │ ├── MemberRemoved.php │ │ └── NewsletterRegistered.php │ ├── Exceptions/ │ │ ├── Api/ │ │ │ ├── ApiException.php │ │ │ ├── CanNotDeleteUserWhoIsOwnerOfOrganizationWithMultipleMembers.php │ │ │ ├── CanNotRemoveOwnerFromOrganization.php │ │ │ ├── ChangingRoleOfPlaceholderIsNotAllowed.php │ │ │ ├── ChangingRoleToPlaceholderIsNotAllowed.php │ │ │ ├── EntityStillInUseApiException.php │ │ │ ├── FeatureIsNotAvailableInFreePlanApiException.php │ │ │ ├── InactiveUserCanNotBeUsedApiException.php │ │ │ ├── InvitationForTheEmailAlreadyExistsApiException.php │ │ │ ├── OnlyOwnerCanChangeOwnership.php │ │ │ ├── OnlyPlaceholdersCanBeMergedIntoAnotherMember.php │ │ │ ├── OrganizationHasNoSubscriptionButMultipleMembersException.php │ │ │ ├── OrganizationNeedsAtLeastOneOwner.php │ │ │ ├── OverlappingTimeEntryApiException.php │ │ │ ├── PdfRendererIsNotConfiguredException.php │ │ │ ├── PersonalAccessClientIsNotConfiguredException.php │ │ │ ├── ThisPlaceholderCanNotBeInvitedUseTheMergeToolInsteadException.php │ │ │ ├── TimeEntryCanNotBeRestartedApiException.php │ │ │ ├── TimeEntryStillRunningApiException.php │ │ │ ├── UserIsAlreadyMemberOfOrganizationApiException.php │ │ │ ├── UserIsAlreadyMemberOfProjectApiException.php │ │ │ └── UserNotPlaceholderApiException.php │ │ ├── Handler.php │ │ └── MovedToApiException.php │ ├── Extensions/ │ │ ├── Auditing/ │ │ │ └── Resolvers/ │ │ │ └── CustomIpAddressResolver.php │ │ ├── Fortify/ │ │ │ ├── CustomLoginResponse.php │ │ │ └── CustomTwoFactorLoginResponse.php │ │ └── Scramble/ │ │ ├── ApiExceptionTypeToSchema.php │ │ └── PaginatedResourceCollectionTypeToSchema.php │ ├── Filament/ │ │ ├── Resources/ │ │ │ ├── AuditResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateAudit.php │ │ │ │ ├── ListAudits.php │ │ │ │ └── ViewAudit.php │ │ │ ├── AuditResource.php │ │ │ ├── ClientResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateClient.php │ │ │ │ ├── EditClient.php │ │ │ │ └── ListClients.php │ │ │ ├── ClientResource.php │ │ │ ├── FailedJobResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── ListFailedJobs.php │ │ │ │ └── ViewFailedJobs.php │ │ │ ├── FailedJobResource.php │ │ │ ├── OrganizationInvitationResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── EditOrganizationInvitation.php │ │ │ │ ├── ListOrganizationInvitations.php │ │ │ │ └── ViewOrganizationInvitation.php │ │ │ ├── OrganizationInvitationResource.php │ │ │ ├── OrganizationResource/ │ │ │ │ ├── Actions/ │ │ │ │ │ └── DeleteOrganization.php │ │ │ │ ├── Pages/ │ │ │ │ │ ├── CreateOrganization.php │ │ │ │ │ ├── EditOrganization.php │ │ │ │ │ ├── ListOrganizations.php │ │ │ │ │ └── ViewOrganization.php │ │ │ │ └── RelationManagers/ │ │ │ │ ├── InvitationsRelationManager.php │ │ │ │ └── UsersRelationManager.php │ │ │ ├── OrganizationResource.php │ │ │ ├── ProjectMemberResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateProjectMember.php │ │ │ │ ├── EditProjectMember.php │ │ │ │ ├── ListProjectMembers.php │ │ │ │ └── ViewProjectMembers.php │ │ │ ├── ProjectMemberResource.php │ │ │ ├── ProjectResource/ │ │ │ │ ├── Pages/ │ │ │ │ │ ├── CreateProject.php │ │ │ │ │ ├── EditProject.php │ │ │ │ │ └── ListProjects.php │ │ │ │ └── RelationManagers/ │ │ │ │ └── ProjectMembersRelationManager.php │ │ │ ├── ProjectResource.php │ │ │ ├── ReportResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── EditReport.php │ │ │ │ ├── ListReports.php │ │ │ │ └── ViewReport.php │ │ │ ├── ReportResource.php │ │ │ ├── TagResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateTag.php │ │ │ │ ├── EditTag.php │ │ │ │ └── ListTags.php │ │ │ ├── TagResource.php │ │ │ ├── TaskResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateTask.php │ │ │ │ ├── EditTask.php │ │ │ │ └── ListTasks.php │ │ │ ├── TaskResource.php │ │ │ ├── TimeEntryResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── CreateTimeEntry.php │ │ │ │ ├── EditTimeEntry.php │ │ │ │ └── ListTimeEntries.php │ │ │ ├── TimeEntryResource.php │ │ │ ├── TokenResource/ │ │ │ │ └── Pages/ │ │ │ │ ├── ListTokens.php │ │ │ │ └── ViewToken.php │ │ │ ├── TokenResource.php │ │ │ ├── UserResource/ │ │ │ │ ├── Actions/ │ │ │ │ │ └── DeleteUser.php │ │ │ │ ├── Pages/ │ │ │ │ │ ├── CreateUser.php │ │ │ │ │ ├── EditUser.php │ │ │ │ │ ├── ListUsers.php │ │ │ │ │ └── ViewUser.php │ │ │ │ └── RelationManagers/ │ │ │ │ ├── OrganizationsRelationManager.php │ │ │ │ └── OwnedOrganizationsRelationManager.php │ │ │ └── UserResource.php │ │ └── Widgets/ │ │ ├── ActiveUserOverview.php │ │ ├── ServerOverview.php │ │ ├── TimeEntriesCreated.php │ │ ├── TimeEntriesImported.php │ │ └── UserRegistrations.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Api/ │ │ │ │ └── V1/ │ │ │ │ ├── ApiTokenController.php │ │ │ │ ├── ChartController.php │ │ │ │ ├── ClientController.php │ │ │ │ ├── Controller.php │ │ │ │ ├── CurrencyController.php │ │ │ │ ├── ExportController.php │ │ │ │ ├── ImportController.php │ │ │ │ ├── InvitationController.php │ │ │ │ ├── MemberController.php │ │ │ │ ├── OrganizationController.php │ │ │ │ ├── ProjectController.php │ │ │ │ ├── ProjectMemberController.php │ │ │ │ ├── Public/ │ │ │ │ │ └── ReportController.php │ │ │ │ ├── ReportController.php │ │ │ │ ├── TagController.php │ │ │ │ ├── TaskController.php │ │ │ │ ├── TimeEntryController.php │ │ │ │ ├── UserController.php │ │ │ │ ├── UserMembershipController.php │ │ │ │ └── UserTimeEntryController.php │ │ │ ├── Controller.php │ │ │ └── Web/ │ │ │ ├── Controller.php │ │ │ ├── DashboardController.php │ │ │ ├── HealthCheckController.php │ │ │ └── HomeController.php │ │ ├── Kernel.php │ │ ├── Middleware/ │ │ │ ├── Authenticate.php │ │ │ ├── CheckOrganizationBlocked.php │ │ │ ├── EncryptCookies.php │ │ │ ├── EnsureEmailIsVerified.php │ │ │ ├── ForceHttps.php │ │ │ ├── ForceJsonResponse.php │ │ │ ├── HandleInertiaRequests.php │ │ │ ├── PreventRequestsDuringMaintenance.php │ │ │ ├── RedirectIfAuthenticated.php │ │ │ ├── ShareInertiaData.php │ │ │ ├── TrimStrings.php │ │ │ ├── TrustProxies.php │ │ │ ├── ValidateSignature.php │ │ │ └── VerifyCsrfToken.php │ │ ├── Requests/ │ │ │ └── V1/ │ │ │ ├── ApiToken/ │ │ │ │ └── ApiTokenStoreRequest.php │ │ │ ├── BaseFormRequest.php │ │ │ ├── Client/ │ │ │ │ ├── ClientIndexRequest.php │ │ │ │ ├── ClientStoreRequest.php │ │ │ │ └── ClientUpdateRequest.php │ │ │ ├── Import/ │ │ │ │ └── ImportRequest.php │ │ │ ├── Invitation/ │ │ │ │ ├── InvitationIndexRequest.php │ │ │ │ └── InvitationStoreRequest.php │ │ │ ├── Member/ │ │ │ │ ├── MemberDestroyRequest.php │ │ │ │ ├── MemberIndexRequest.php │ │ │ │ ├── MemberMergeIntoRequest.php │ │ │ │ └── MemberUpdateRequest.php │ │ │ ├── Organization/ │ │ │ │ └── OrganizationUpdateRequest.php │ │ │ ├── Project/ │ │ │ │ ├── ProjectIndexRequest.php │ │ │ │ ├── ProjectStoreRequest.php │ │ │ │ └── ProjectUpdateRequest.php │ │ │ ├── ProjectMember/ │ │ │ │ ├── ProjectMemberIndexRequest.php │ │ │ │ ├── ProjectMemberStoreRequest.php │ │ │ │ └── ProjectMemberUpdateRequest.php │ │ │ ├── Report/ │ │ │ │ ├── ReportIndexRequest.php │ │ │ │ ├── ReportStoreRequest.php │ │ │ │ └── ReportUpdateRequest.php │ │ │ ├── Tag/ │ │ │ │ ├── TagIndexRequest.php │ │ │ │ ├── TagStoreRequest.php │ │ │ │ └── TagUpdateRequest.php │ │ │ ├── Task/ │ │ │ │ ├── TaskIndexRequest.php │ │ │ │ ├── TaskStoreRequest.php │ │ │ │ └── TaskUpdateRequest.php │ │ │ └── TimeEntry/ │ │ │ ├── TimeEntryAggregateExportRequest.php │ │ │ ├── TimeEntryAggregateRequest.php │ │ │ ├── TimeEntryDestroyMultipleRequest.php │ │ │ ├── TimeEntryIndexExportRequest.php │ │ │ ├── TimeEntryIndexRequest.php │ │ │ ├── TimeEntryStoreRequest.php │ │ │ ├── TimeEntryUpdateMultipleRequest.php │ │ │ └── TimeEntryUpdateRequest.php │ │ └── Resources/ │ │ ├── PaginatedResourceCollection.php │ │ └── V1/ │ │ ├── ApiToken/ │ │ │ ├── ApiTokenCollection.php │ │ │ ├── ApiTokenResource.php │ │ │ └── ApiTokenWithAccessTokenResource.php │ │ ├── BaseResource.php │ │ ├── Client/ │ │ │ ├── ClientCollection.php │ │ │ └── ClientResource.php │ │ ├── Invitation/ │ │ │ ├── InvitationCollection.php │ │ │ └── InvitationResource.php │ │ ├── Member/ │ │ │ ├── MemberCollection.php │ │ │ ├── MemberResource.php │ │ │ ├── PersonalMembershipCollection.php │ │ │ └── PersonalMembershipResource.php │ │ ├── Organization/ │ │ │ └── OrganizationResource.php │ │ ├── Project/ │ │ │ ├── ProjectCollection.php │ │ │ └── ProjectResource.php │ │ ├── ProjectMember/ │ │ │ ├── ProjectMemberCollection.php │ │ │ └── ProjectMemberResource.php │ │ ├── Report/ │ │ │ ├── DetailedReportResource.php │ │ │ ├── DetailedWithDataReportResource.php │ │ │ ├── ReportCollection.php │ │ │ └── ReportResource.php │ │ ├── Tag/ │ │ │ ├── TagCollection.php │ │ │ └── TagResource.php │ │ ├── Task/ │ │ │ ├── TaskCollection.php │ │ │ └── TaskResource.php │ │ ├── TimeEntry/ │ │ │ ├── TimeEntryCollection.php │ │ │ └── TimeEntryResource.php │ │ └── User/ │ │ └── UserResource.php │ ├── Jobs/ │ │ ├── RecalculateSpentTimeForProject.php │ │ ├── RecalculateSpentTimeForTask.php │ │ └── Test/ │ │ └── TestJob.php │ ├── Listeners/ │ │ └── RemovePlaceholder.php │ ├── Mail/ │ │ ├── AuthApiTokenExpirationReminderMail.php │ │ ├── AuthApiTokenExpiredMail.php │ │ ├── OrganizationInvitationMail.php │ │ └── TimeEntryStillRunningMail.php │ ├── Models/ │ │ ├── Audit.php │ │ ├── Client.php │ │ ├── Concerns/ │ │ │ ├── CustomAuditable.php │ │ │ └── HasUuids.php │ │ ├── FailedJob.php │ │ ├── Member.php │ │ ├── Organization.php │ │ ├── OrganizationInvitation.php │ │ ├── Passport/ │ │ │ ├── AuthCode.php │ │ │ ├── Client.php │ │ │ ├── RefreshToken.php │ │ │ └── Token.php │ │ ├── Project.php │ │ ├── ProjectMember.php │ │ ├── Report.php │ │ ├── Tag.php │ │ ├── Task.php │ │ ├── TimeEntry.php │ │ └── User.php │ ├── Policies/ │ │ └── OrganizationPolicy.php │ ├── Providers/ │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── EventServiceProvider.php │ │ ├── Filament/ │ │ │ └── AdminPanelProvider.php │ │ ├── FortifyServiceProvider.php │ │ ├── JetstreamServiceProvider.php │ │ ├── RouteServiceProvider.php │ │ └── TelescopeServiceProvider.php │ ├── Rules/ │ │ ├── ColorRule.php │ │ └── CurrencyRule.php │ └── Service/ │ ├── ApiService.php │ ├── BillableRateService.php │ ├── BillingContract.php │ ├── ColorService.php │ ├── CurrencyService.php │ ├── DashboardService.php │ ├── DeletionService.php │ ├── Dto/ │ │ └── ReportPropertiesDto.php │ ├── Export/ │ │ ├── ExportException.php │ │ └── ExportService.php │ ├── Import/ │ │ ├── ImportDatabaseHelper.php │ │ ├── ImportService.php │ │ └── Importers/ │ │ ├── ClockifyProjectsImporter.php │ │ ├── ClockifyTimeEntriesImporter.php │ │ ├── DefaultImporter.php │ │ ├── GenericProjectsImporter.php │ │ ├── GenericTimeEntriesImporter.php │ │ ├── HarvestClientsImporter.php │ │ ├── HarvestProjectsImporter.php │ │ ├── HarvestTimeEntriesImporter.php │ │ ├── ImportException.php │ │ ├── ImporterContract.php │ │ ├── ImporterProvider.php │ │ ├── ReportDto.php │ │ ├── SolidtimeImporter.php │ │ ├── TogglDataImporter.php │ │ └── TogglTimeEntriesImporter.php │ ├── IntervalService.php │ ├── InvitationService.php │ ├── IpLookup/ │ │ ├── IpLookupResponseDto.php │ │ ├── IpLookupServiceContract.php │ │ └── NoIpLookupService.php │ ├── LocalizationService.php │ ├── MemberService.php │ ├── OrganizationInvitationService.php │ ├── OrganizationService.php │ ├── PermissionStore.php │ ├── ReportExport/ │ │ ├── CsvExport.php │ │ ├── TimeEntriesDetailedCsvExport.php │ │ ├── TimeEntriesDetailedExport.php │ │ └── TimeEntriesReportExport.php │ ├── ReportService.php │ ├── TimeEntryAggregationService.php │ ├── TimeEntryFilter.php │ ├── TimeEntryService.php │ ├── TimezoneService.php │ └── UserService.php ├── artisan ├── bootstrap/ │ ├── app.php │ └── cache/ │ └── .gitignore ├── components.json ├── composer.json ├── config/ │ ├── app.php │ ├── audit.php │ ├── auth.php │ ├── broadcasting.php │ ├── cache.php │ ├── cors.php │ ├── database.php │ ├── excel.php │ ├── filament.php │ ├── filesystems.php │ ├── fortify.php │ ├── hashing.php │ ├── jetstream.php │ ├── logging.php │ ├── mail.php │ ├── modules.php │ ├── octane.php │ ├── passport.php │ ├── queue.php │ ├── scheduling.php │ ├── scramble.php │ ├── services.php │ ├── session.php │ ├── telescope.php │ ├── trustedproxy.php │ └── view.php ├── database/ │ ├── .gitignore │ ├── factories/ │ │ ├── AuditFactory.php │ │ ├── ClientFactory.php │ │ ├── FailedJobFactory.php │ │ ├── MemberFactory.php │ │ ├── OrganizationFactory.php │ │ ├── OrganizationInvitationFactory.php │ │ ├── Passport/ │ │ │ ├── ClientFactory.php │ │ │ └── TokenFactory.php │ │ ├── ProjectFactory.php │ │ ├── ProjectMemberFactory.php │ │ ├── ReportFactory.php │ │ ├── TagFactory.php │ │ ├── TaskFactory.php │ │ ├── TimeEntryFactory.php │ │ └── UserFactory.php │ ├── migrations/ │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_reset_tokens_table.php │ │ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php │ │ ├── 2016_06_01_000001_create_oauth_auth_codes_table.php │ │ ├── 2016_06_01_000002_create_oauth_access_tokens_table.php │ │ ├── 2016_06_01_000003_create_oauth_refresh_tokens_table.php │ │ ├── 2016_06_01_000004_create_oauth_clients_table.php │ │ ├── 2016_06_01_000005_create_oauth_personal_access_clients_table.php │ │ ├── 2018_08_08_100000_create_telescope_entries_table.php │ │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ │ ├── 2020_05_21_100000_create_organizations_table.php │ │ ├── 2020_05_21_200000_create_organization_user_table.php │ │ ├── 2020_05_21_300000_create_organization_invitations_table.php │ │ ├── 2024_01_16_161030_create_sessions_table.php │ │ ├── 2024_01_20_110218_create_clients_table.php │ │ ├── 2024_01_20_110439_create_projects_table.php │ │ ├── 2024_01_20_110444_create_tasks_table.php │ │ ├── 2024_01_20_110452_create_tags_table.php │ │ ├── 2024_01_20_110837_create_time_entries_table.php │ │ ├── 2024_03_26_171253_create_project_members_table.php │ │ ├── 2024_04_11_150130_create_jobs_table.php │ │ ├── 2024_04_12_095010_create_cache_table.php │ │ ├── 2024_05_07_134711_move_from_user_id_to_member_id_in_project_members_table.php │ │ ├── 2024_05_07_141842_move_from_user_id_to_member_id_in_time_entries_table.php │ │ ├── 2024_05_13_171020_rename_table_organization_user_to_members.php │ │ ├── 2024_05_22_151226_add_client_id_to_time_entries_table.php │ │ ├── 2024_05_30_175801_add_is_billable_column_to_projects_table.php │ │ ├── 2024_05_30_175825_add_is_imported_column_to_time_entries_table.php │ │ ├── 2024_06_01_000001_create_oauth_device_codes_table.php │ │ ├── 2024_06_07_113443_change_member_id_foreign_keys_to_restrict_on_delete.php │ │ ├── 2024_06_10_161831_reset_billable_rates_with_zero_as_value.php │ │ ├── 2024_06_21_122754_add_is_archived_columns_to_projects_and_clients_table.php │ │ ├── 2024_06_24_114433_add_done_at_to_tasks_table.php │ │ ├── 2024_07_02_134307_add_estimated_time_to_projects_and_tasks_table.php │ │ ├── 2024_07_03_145445_change_data_type_of_id_column_in_failed_jobs_table.php │ │ ├── 2024_07_18_080906_add_still_active_email_sent_at_to_time_entries_table.php │ │ ├── 2024_08_01_104840_create_reports_table.php │ │ ├── 2024_09_02_094105_create_audits_table.php │ │ ├── 2024_09_18_120203_add_spent_time_to_projects_and_tasks_table.php │ │ ├── 2024_10_01_143608_add_employees_can_see_billable_rates_to_organizations_table.php │ │ ├── 2024_11_04_164807_add_foreign_key_to_organizations_and_members_table.php │ │ ├── 2024_11_04_170614_add_foreign_keys_to_oauth_tables.php │ │ ├── 2025_04_03_101827_add_localization_columns_to_organizations_table.php │ │ ├── 2025_04_25_202047_change_data_type_for_spent_time_columns.php │ │ ├── 2025_05_06_152804_fix_typos_in_organizations_table_format_columns.php │ │ ├── 2025_05_16_075757_add_foreign_key_for_current_team_id_in_users_table.php │ │ ├── 2025_06_30_095942_remove_oauth_personal_access_clients_table.php │ │ ├── 2025_06_30_132538_update_oauth_clients_table.php │ │ ├── 2025_07_15_105949_hash_oauth_clients.php │ │ ├── 2025_07_17_104903_add_reminder_sent_at_to_oauth_access_tokens_table.php │ │ ├── 2025_10_02_000001_add_prevent_overlapping_time_entries_to_organizations_table.php │ │ ├── 2025_10_16_000001_extend_time_entry_description.php │ │ └── 2025_10_24_120845_add_employees_can_manage_tasks_to_organizations_table.php │ ├── schema/ │ │ └── pgsql_test-schema.sql │ └── seeders/ │ └── DatabaseSeeder.php ├── docker/ │ ├── local/ │ │ ├── 8.3/ │ │ │ ├── Dockerfile │ │ │ ├── php.ini │ │ │ ├── start-container │ │ │ └── supervisord.conf │ │ ├── minio/ │ │ │ └── create_bucket.sh │ │ └── pgsql/ │ │ └── create-testing-database.sql │ └── prod/ │ ├── Dockerfile │ ├── LICENSE │ └── deployment/ │ ├── healthcheck │ ├── octane/ │ │ └── FrankenPHP/ │ │ ├── Caddyfile │ │ └── supervisord.frankenphp.conf │ ├── php.ini │ ├── start-container │ ├── supervisord.conf │ ├── supervisord.horizon.conf │ ├── supervisord.reverb.conf │ ├── supervisord.scheduler.conf │ └── supervisord.worker.conf ├── docker-compose.yml ├── e2e/ │ ├── auth.spec.ts │ ├── calendar-settings.spec.ts │ ├── calendar.spec.ts │ ├── clients.spec.ts │ ├── command-palette.spec.ts │ ├── dashboard.spec.ts │ ├── import-export.spec.ts │ ├── members.spec.ts │ ├── organization.spec.ts │ ├── profile.spec.ts │ ├── project-members.spec.ts │ ├── projects.spec.ts │ ├── reporting-detailed.spec.ts │ ├── reporting.spec.ts │ ├── shared-reports.spec.ts │ ├── tags.spec.ts │ ├── tasks.spec.ts │ ├── time.spec.ts │ ├── timetracker.spec.ts │ └── utils/ │ ├── api.ts │ ├── currentTimeEntry.ts │ ├── mailpit.ts │ ├── members.ts │ ├── money.ts │ ├── reporting.ts │ ├── table.ts │ └── tags.ts ├── eslint.config.mjs ├── jsconfig.json ├── lang/ │ └── en/ │ ├── auth.php │ ├── enum.php │ ├── exceptions.php │ ├── importer.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── openapi.json ├── package.json ├── phpstan.neon ├── phpunit.xml ├── pint.json ├── playwright/ │ ├── config.ts │ └── fixtures.ts ├── playwright.config.ts ├── postcss.config.js ├── public/ │ ├── .htaccess │ ├── desktop-version/ │ │ ├── latest-linux.yml │ │ ├── latest-mac.yml │ │ └── latest.yml │ ├── favicons/ │ │ ├── browserconfig.xml │ │ └── site.webmanifest │ ├── index.php │ ├── robots.txt │ └── security.txt ├── resources/ │ ├── css/ │ │ ├── app.css │ │ └── filament/ │ │ └── admin/ │ │ ├── tailwind.config.js │ │ └── theme.css │ ├── js/ │ │ ├── Components/ │ │ │ ├── ActionMessage.vue │ │ │ ├── ActionSection.vue │ │ │ ├── ApplicationLogo.vue │ │ │ ├── ApplicationMark.vue │ │ │ ├── AuthenticationCard.vue │ │ │ ├── AuthenticationCardLogo.vue │ │ │ ├── Banner.vue │ │ │ ├── Billing/ │ │ │ │ └── BillingBanner.vue │ │ │ ├── CommandPalette/ │ │ │ │ ├── CommandPaletteProvider.vue │ │ │ │ └── index.ts │ │ │ ├── Common/ │ │ │ │ ├── Card.vue │ │ │ │ ├── Client/ │ │ │ │ │ ├── ClientCreateModal.vue │ │ │ │ │ ├── ClientEditModal.vue │ │ │ │ │ ├── ClientMoreOptionsDropdown.vue │ │ │ │ │ ├── ClientMultiselectDropdown.vue │ │ │ │ │ ├── ClientTable.vue │ │ │ │ │ ├── ClientTableHeading.vue │ │ │ │ │ └── ClientTableRow.vue │ │ │ │ ├── Invitation/ │ │ │ │ │ ├── InvitationMoreOptionsDropdown.vue │ │ │ │ │ ├── InvitationTable.vue │ │ │ │ │ ├── InvitationTableHeading.vue │ │ │ │ │ └── InvitationTableRow.vue │ │ │ │ ├── Member/ │ │ │ │ │ ├── MemberBillableRateModal.vue │ │ │ │ │ ├── MemberBillableSelect.vue │ │ │ │ │ ├── MemberCombobox.vue │ │ │ │ │ ├── MemberDeleteModal.vue │ │ │ │ │ ├── MemberEditModal.vue │ │ │ │ │ ├── MemberInviteModal.vue │ │ │ │ │ ├── MemberMakePlaceholderModal.vue │ │ │ │ │ ├── MemberMergeModal.vue │ │ │ │ │ ├── MemberMoreOptionsDropdown.vue │ │ │ │ │ ├── MemberMultiselectDropdown.vue │ │ │ │ │ ├── MemberOwnershipTransferConfirmModal.vue │ │ │ │ │ ├── MemberRoleSelect.vue │ │ │ │ │ ├── MemberTable.vue │ │ │ │ │ ├── MemberTableHeading.vue │ │ │ │ │ └── MemberTableRow.vue │ │ │ │ ├── Notification/ │ │ │ │ │ └── Notification.vue │ │ │ │ ├── Organization/ │ │ │ │ │ └── OrganizationBillableRateModal.vue │ │ │ │ ├── PageTitle.vue │ │ │ │ ├── Project/ │ │ │ │ │ ├── BaseFilterBadge.vue │ │ │ │ │ ├── ProjectClientFilterBadge.vue │ │ │ │ │ ├── ProjectDropdown.vue │ │ │ │ │ ├── ProjectEditModal.vue │ │ │ │ │ ├── ProjectMoreOptionsDropdown.vue │ │ │ │ │ ├── ProjectMultiselectDropdown.vue │ │ │ │ │ ├── ProjectStatusFilterBadge.vue │ │ │ │ │ ├── ProjectTable.vue │ │ │ │ │ ├── ProjectTableHeading.vue │ │ │ │ │ ├── ProjectTableRow.vue │ │ │ │ │ ├── ProjectsFilterDropdown.vue │ │ │ │ │ └── constants.ts │ │ │ │ ├── ProjectMember/ │ │ │ │ │ ├── ProjectMemberBillableRateModal.vue │ │ │ │ │ ├── ProjectMemberCreateModal.vue │ │ │ │ │ ├── ProjectMemberEditModal.vue │ │ │ │ │ ├── ProjectMemberMoreOptionsDropdown.vue │ │ │ │ │ ├── ProjectMemberTable.vue │ │ │ │ │ ├── ProjectMemberTableHeading.vue │ │ │ │ │ └── ProjectMemberTableRow.vue │ │ │ │ ├── Report/ │ │ │ │ │ ├── ReportCreateModal.vue │ │ │ │ │ ├── ReportEditModal.vue │ │ │ │ │ ├── ReportMoreOptionsDropdown.vue │ │ │ │ │ ├── ReportSaveButton.vue │ │ │ │ │ ├── ReportTable.vue │ │ │ │ │ ├── ReportTableHeading.vue │ │ │ │ │ └── ReportTableRow.vue │ │ │ │ ├── Reporting/ │ │ │ │ │ ├── ReportingChart.vue │ │ │ │ │ ├── ReportingExportButton.vue │ │ │ │ │ ├── ReportingExportModal.vue │ │ │ │ │ ├── ReportingFilterBadge.vue │ │ │ │ │ ├── ReportingFilterBar.vue │ │ │ │ │ ├── ReportingGroupBySelect.vue │ │ │ │ │ ├── ReportingOverview.vue │ │ │ │ │ ├── ReportingPieChart.vue │ │ │ │ │ ├── ReportingRoundingControls.vue │ │ │ │ │ ├── ReportingRow.vue │ │ │ │ │ └── ReportingTabNavbar.vue │ │ │ │ ├── StatCard.vue │ │ │ │ ├── TabBar/ │ │ │ │ │ ├── TabBar.vue │ │ │ │ │ └── TabBarItem.vue │ │ │ │ ├── TableHeading.vue │ │ │ │ ├── Tag/ │ │ │ │ │ ├── TagEditModal.vue │ │ │ │ │ ├── TagMoreOptionsDropdown.vue │ │ │ │ │ ├── TagTable.vue │ │ │ │ │ ├── TagTableHeading.vue │ │ │ │ │ └── TagTableRow.vue │ │ │ │ ├── Task/ │ │ │ │ │ ├── TaskCreateModal.vue │ │ │ │ │ ├── TaskEditModal.vue │ │ │ │ │ ├── TaskMoreOptionsDropdown.vue │ │ │ │ │ ├── TaskMultiselectDropdown.vue │ │ │ │ │ ├── TaskTable.vue │ │ │ │ │ ├── TaskTableHeading.vue │ │ │ │ │ └── TaskTableRow.vue │ │ │ │ ├── UpgradeBadge.vue │ │ │ │ ├── UpgradeModal.vue │ │ │ │ └── User/ │ │ │ │ └── UserTimezoneMismatchModal.vue │ │ │ ├── ConfirmationModal.vue │ │ │ ├── ConfirmsPassword.vue │ │ │ ├── CurrentSidebarTimer.vue │ │ │ ├── Dashboard/ │ │ │ │ ├── ActivityGraphCard.vue │ │ │ │ ├── DashboardCard.vue │ │ │ │ ├── DayOverviewCardChart.vue │ │ │ │ ├── DayOverviewCardEntry.vue │ │ │ │ ├── LastSevenDaysCard.vue │ │ │ │ ├── ProjectsChartCard.vue │ │ │ │ ├── RecentlyTrackedTasksCard.vue │ │ │ │ ├── RecentlyTrackedTasksCardEntry.vue │ │ │ │ ├── TeamActivityCard.vue │ │ │ │ ├── TeamActivityCardEntry.vue │ │ │ │ ├── ThisWeekOverview.vue │ │ │ │ └── ThisWeekReportingTable.vue │ │ │ ├── DropdownLink.vue │ │ │ ├── FormSection.vue │ │ │ ├── NavLink.vue │ │ │ ├── NavigationSidebarItem.vue │ │ │ ├── NavigationSidebarLink.vue │ │ │ ├── NotificationContainer.vue │ │ │ ├── OrganizationSwitcher.vue │ │ │ ├── ResponsiveNavLink.vue │ │ │ ├── SectionBorder.vue │ │ │ ├── SectionTitle.vue │ │ │ ├── TableRow.vue │ │ │ ├── TimeTracker.vue │ │ │ ├── UpdateSidebarNotification.vue │ │ │ ├── UserSettingsIcon.vue │ │ │ └── ui/ │ │ │ ├── alert-dialog/ │ │ │ │ ├── AlertDialog.vue │ │ │ │ ├── AlertDialogAction.vue │ │ │ │ ├── AlertDialogCancel.vue │ │ │ │ ├── AlertDialogContent.vue │ │ │ │ ├── AlertDialogDescription.vue │ │ │ │ ├── AlertDialogFooter.vue │ │ │ │ ├── AlertDialogHeader.vue │ │ │ │ ├── AlertDialogTitle.vue │ │ │ │ ├── AlertDialogTrigger.vue │ │ │ │ └── index.ts │ │ │ ├── calendar/ │ │ │ │ ├── Calendar.vue │ │ │ │ ├── CalendarCell.vue │ │ │ │ ├── CalendarCellTrigger.vue │ │ │ │ ├── CalendarDateInput.vue │ │ │ │ ├── CalendarGrid.vue │ │ │ │ ├── CalendarGridBody.vue │ │ │ │ ├── CalendarGridHead.vue │ │ │ │ ├── CalendarGridRow.vue │ │ │ │ ├── CalendarHeadCell.vue │ │ │ │ ├── CalendarHeader.vue │ │ │ │ ├── CalendarHeading.vue │ │ │ │ ├── CalendarNextButton.vue │ │ │ │ ├── CalendarPrevButton.vue │ │ │ │ └── index.ts │ │ │ ├── dialog/ │ │ │ │ ├── Dialog.vue │ │ │ │ ├── DialogClose.vue │ │ │ │ ├── DialogContent.vue │ │ │ │ ├── DialogDescription.vue │ │ │ │ ├── DialogFooter.vue │ │ │ │ ├── DialogHeader.vue │ │ │ │ ├── DialogScrollContent.vue │ │ │ │ ├── DialogTitle.vue │ │ │ │ ├── DialogTrigger.vue │ │ │ │ └── index.ts │ │ │ ├── dropdown-menu/ │ │ │ │ ├── DropdownMenu.vue │ │ │ │ ├── DropdownMenuCheckboxItem.vue │ │ │ │ ├── DropdownMenuContent.vue │ │ │ │ ├── DropdownMenuGroup.vue │ │ │ │ ├── DropdownMenuItem.vue │ │ │ │ ├── DropdownMenuLabel.vue │ │ │ │ ├── DropdownMenuRadioGroup.vue │ │ │ │ ├── DropdownMenuRadioItem.vue │ │ │ │ ├── DropdownMenuSeparator.vue │ │ │ │ ├── DropdownMenuShortcut.vue │ │ │ │ ├── DropdownMenuSub.vue │ │ │ │ ├── DropdownMenuSubContent.vue │ │ │ │ ├── DropdownMenuSubTrigger.vue │ │ │ │ ├── DropdownMenuTrigger.vue │ │ │ │ └── index.ts │ │ │ ├── label/ │ │ │ │ ├── Label.vue │ │ │ │ └── index.ts │ │ │ ├── number-field/ │ │ │ │ ├── NumberField.vue │ │ │ │ ├── NumberFieldContent.vue │ │ │ │ ├── NumberFieldDecrement.vue │ │ │ │ ├── NumberFieldIncrement.vue │ │ │ │ ├── NumberFieldInput.vue │ │ │ │ └── index.ts │ │ │ ├── select/ │ │ │ │ ├── Select.vue │ │ │ │ ├── SelectContent.vue │ │ │ │ ├── SelectGroup.vue │ │ │ │ ├── SelectItem.vue │ │ │ │ ├── SelectItemText.vue │ │ │ │ ├── SelectLabel.vue │ │ │ │ ├── SelectScrollDownButton.vue │ │ │ │ ├── SelectScrollUpButton.vue │ │ │ │ ├── SelectSeparator.vue │ │ │ │ ├── SelectTrigger.vue │ │ │ │ ├── SelectValue.vue │ │ │ │ └── index.ts │ │ │ ├── switch/ │ │ │ │ ├── Switch.vue │ │ │ │ └── index.ts │ │ │ ├── table/ │ │ │ │ ├── Table.vue │ │ │ │ ├── TableBody.vue │ │ │ │ ├── TableCaption.vue │ │ │ │ ├── TableCell.vue │ │ │ │ ├── TableEmpty.vue │ │ │ │ ├── TableFooter.vue │ │ │ │ ├── TableHead.vue │ │ │ │ ├── TableHeader.vue │ │ │ │ ├── TableRow.vue │ │ │ │ └── index.ts │ │ │ └── tabs/ │ │ │ ├── Tabs.vue │ │ │ ├── TabsContent.vue │ │ │ ├── TabsList.vue │ │ │ ├── TabsTrigger.vue │ │ │ └── index.ts │ │ ├── Layouts/ │ │ │ └── AppLayout.vue │ │ ├── Pages/ │ │ │ ├── API/ │ │ │ │ ├── Index.vue │ │ │ │ └── Partials/ │ │ │ │ └── ApiTokenManager.vue │ │ │ ├── Auth/ │ │ │ │ ├── ConfirmPassword.vue │ │ │ │ ├── ForgotPassword.vue │ │ │ │ ├── Login.vue │ │ │ │ ├── Register.vue │ │ │ │ ├── ResetPassword.vue │ │ │ │ ├── TwoFactorChallenge.vue │ │ │ │ └── VerifyEmail.vue │ │ │ ├── Calendar.vue │ │ │ ├── Clients.vue │ │ │ ├── Dashboard.vue │ │ │ ├── Import.vue │ │ │ ├── Members.vue │ │ │ ├── PrivacyPolicy.vue │ │ │ ├── Profile/ │ │ │ │ ├── Partials/ │ │ │ │ │ ├── ApiTokensForm.vue │ │ │ │ │ ├── DeleteUserForm.vue │ │ │ │ │ ├── LogoutOtherBrowserSessionsForm.vue │ │ │ │ │ ├── ThemeForm.vue │ │ │ │ │ ├── TwoFactorAuthenticationForm.vue │ │ │ │ │ ├── UpdatePasswordForm.vue │ │ │ │ │ └── UpdateProfileInformationForm.vue │ │ │ │ └── Show.vue │ │ │ ├── ProjectShow.vue │ │ │ ├── Projects.vue │ │ │ ├── Reporting.vue │ │ │ ├── ReportingDetailed.vue │ │ │ ├── ReportingShared.vue │ │ │ ├── SharedReport.vue │ │ │ ├── Tags.vue │ │ │ ├── Teams/ │ │ │ │ ├── Create.vue │ │ │ │ ├── Partials/ │ │ │ │ │ ├── CreateTeamForm.vue │ │ │ │ │ ├── DeleteTeamForm.vue │ │ │ │ │ ├── ExportData.vue │ │ │ │ │ ├── ImportData.vue │ │ │ │ │ ├── OrganizationBillableRate.vue │ │ │ │ │ ├── OrganizationFormatSettings.vue │ │ │ │ │ ├── OrganizationTimeEntrySettings.vue │ │ │ │ │ ├── TeamMemberManager.vue │ │ │ │ │ └── UpdateTeamNameForm.vue │ │ │ │ └── Show.vue │ │ │ ├── TermsOfService.vue │ │ │ ├── Time.vue │ │ │ └── Welcome.vue │ │ ├── app.ts │ │ ├── bootstrap.js │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── packages/ │ │ │ ├── api/ │ │ │ │ ├── .gitignore │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── openapi.json.client.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── vite.config.js │ │ │ └── ui/ │ │ │ ├── .gitignore │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── Badge.vue │ │ │ │ ├── BillableRateModal.vue │ │ │ │ ├── Buttons/ │ │ │ │ │ ├── Button.vue │ │ │ │ │ ├── DangerButton.vue │ │ │ │ │ ├── PrimaryButton.vue │ │ │ │ │ ├── SecondaryButton.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── CardTitle.vue │ │ │ │ ├── Client/ │ │ │ │ │ ├── ClientDropdown.vue │ │ │ │ │ └── ClientDropdownItem.vue │ │ │ │ ├── CommandPalette/ │ │ │ │ │ ├── CommandPalette.vue │ │ │ │ │ ├── CommandPaletteTypes.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── DialogModal.vue │ │ │ │ ├── EstimatedTimeProgress.vue │ │ │ │ ├── EstimatedTimeSection.vue │ │ │ │ ├── FullCalendar/ │ │ │ │ │ ├── CalendarSettingsPopover.vue │ │ │ │ │ ├── FullCalendarDayHeader.vue │ │ │ │ │ ├── FullCalendarEventContent.vue │ │ │ │ │ ├── TimeEntryCalendar.vue │ │ │ │ │ ├── calendarSettings.ts │ │ │ │ │ ├── idleStatusPlugin.ts │ │ │ │ │ └── useVisualSnap.ts │ │ │ │ ├── GroupedItemsCountButton.vue │ │ │ │ ├── Icons/ │ │ │ │ │ ├── BillableIcon.vue │ │ │ │ │ ├── DollarIcon.vue │ │ │ │ │ ├── EuroIcon.vue │ │ │ │ │ └── ListFilterIcon.vue │ │ │ │ ├── Input/ │ │ │ │ │ ├── BillableRateInput.vue │ │ │ │ │ ├── BillableToggleButton.vue │ │ │ │ │ ├── Checkbox.vue │ │ │ │ │ ├── DatePicker.vue │ │ │ │ │ ├── DateRangePicker.vue │ │ │ │ │ ├── Dropdown.vue │ │ │ │ │ ├── DurationHumanInput.vue │ │ │ │ │ ├── EstimatedTimeInput.vue │ │ │ │ │ ├── InputError.vue │ │ │ │ │ ├── InputLabel.vue │ │ │ │ │ ├── MultiselectDropdown.vue │ │ │ │ │ ├── TextInput.vue │ │ │ │ │ ├── TextareaInput.vue │ │ │ │ │ ├── TimePickerSimple.vue │ │ │ │ │ └── TimeRangeSelector.vue │ │ │ │ ├── LoadingSpinner.vue │ │ │ │ ├── MainContainer.vue │ │ │ │ ├── Modal.vue │ │ │ │ ├── Project/ │ │ │ │ │ ├── ProjectBadge.vue │ │ │ │ │ ├── ProjectBillableRateModal.vue │ │ │ │ │ ├── ProjectBillableSelect.vue │ │ │ │ │ ├── ProjectColorSelector.vue │ │ │ │ │ ├── ProjectCreateModal.vue │ │ │ │ │ ├── ProjectDropdownItem.vue │ │ │ │ │ └── ProjectEditBillableSection.vue │ │ │ │ ├── Tag/ │ │ │ │ │ ├── TagBadge.vue │ │ │ │ │ ├── TagCreateModal.vue │ │ │ │ │ └── TagDropdown.vue │ │ │ │ ├── TimeEntry/ │ │ │ │ │ ├── TimeEntryAggregateRow.vue │ │ │ │ │ ├── TimeEntryCreateModal.vue │ │ │ │ │ ├── TimeEntryDescriptionInput.vue │ │ │ │ │ ├── TimeEntryEditModal.vue │ │ │ │ │ ├── TimeEntryGroupedTable.vue │ │ │ │ │ ├── TimeEntryMassActionRow.vue │ │ │ │ │ ├── TimeEntryMassUpdateModal.vue │ │ │ │ │ ├── TimeEntryMoreOptionsDropdown.vue │ │ │ │ │ ├── TimeEntryRangeSelector.vue │ │ │ │ │ ├── TimeEntryRow.vue │ │ │ │ │ ├── TimeEntryRowDurationInput.vue │ │ │ │ │ ├── TimeEntryRowHeading.vue │ │ │ │ │ └── TimeEntryRowTagDropdown.vue │ │ │ │ ├── TimeTracker/ │ │ │ │ │ ├── TimeTrackerControls.vue │ │ │ │ │ ├── TimeTrackerMoreOptionsDropdown.vue │ │ │ │ │ ├── TimeTrackerProjectTaskDropdown.vue │ │ │ │ │ ├── TimeTrackerRangeSelector.vue │ │ │ │ │ ├── TimeTrackerRecentlyTrackedEntry.vue │ │ │ │ │ ├── TimeTrackerRunningInDifferentOrganizationOverlay.vue │ │ │ │ │ └── TimeTrackerTagDropdown.vue │ │ │ │ ├── TimeTrackerStartStop.vue │ │ │ │ ├── TimezoneMismatchModal.vue │ │ │ │ ├── accordion/ │ │ │ │ │ ├── Accordion.vue │ │ │ │ │ ├── AccordionContent.vue │ │ │ │ │ ├── AccordionItem.vue │ │ │ │ │ ├── AccordionTrigger.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── command/ │ │ │ │ │ ├── Command.vue │ │ │ │ │ ├── CommandGroup.vue │ │ │ │ │ ├── CommandInput.vue │ │ │ │ │ ├── CommandItem.vue │ │ │ │ │ ├── CommandList.vue │ │ │ │ │ ├── CommandSeparator.vue │ │ │ │ │ ├── CommandShortcut.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── field/ │ │ │ │ │ ├── Field.vue │ │ │ │ │ ├── FieldContent.vue │ │ │ │ │ ├── FieldDescription.vue │ │ │ │ │ ├── FieldError.vue │ │ │ │ │ ├── FieldGroup.vue │ │ │ │ │ ├── FieldLabel.vue │ │ │ │ │ ├── FieldLegend.vue │ │ │ │ │ ├── FieldSeparator.vue │ │ │ │ │ ├── FieldSet.vue │ │ │ │ │ ├── FieldTitle.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popover/ │ │ │ │ │ ├── Popover.vue │ │ │ │ │ ├── PopoverContent.vue │ │ │ │ │ ├── PopoverTrigger.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── range-calendar/ │ │ │ │ │ ├── RangeCalendar.vue │ │ │ │ │ ├── RangeCalendarCell.vue │ │ │ │ │ ├── RangeCalendarCellTrigger.vue │ │ │ │ │ ├── RangeCalendarGrid.vue │ │ │ │ │ ├── RangeCalendarGridBody.vue │ │ │ │ │ ├── RangeCalendarGridHead.vue │ │ │ │ │ ├── RangeCalendarGridRow.vue │ │ │ │ │ ├── RangeCalendarHeadCell.vue │ │ │ │ │ ├── RangeCalendarHeader.vue │ │ │ │ │ ├── RangeCalendarHeading.vue │ │ │ │ │ ├── RangeCalendarNextButton.vue │ │ │ │ │ ├── RangeCalendarPrevButton.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── separator/ │ │ │ │ │ ├── Separator.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── tooltip/ │ │ │ │ │ ├── Tooltip.vue │ │ │ │ │ ├── TooltipContent.vue │ │ │ │ │ ├── TooltipProvider.vue │ │ │ │ │ ├── TooltipTrigger.vue │ │ │ │ │ └── index.ts │ │ │ │ └── utils/ │ │ │ │ ├── cn.ts │ │ │ │ ├── color.ts │ │ │ │ ├── money.ts │ │ │ │ ├── number.ts │ │ │ │ ├── random.ts │ │ │ │ ├── select.ts │ │ │ │ ├── settings.ts │ │ │ │ └── time.ts │ │ │ ├── styles.css │ │ │ ├── tailwind.theme.js │ │ │ ├── tsconfig.json │ │ │ └── vite.config.js │ │ ├── types/ │ │ │ ├── dom.d.ts │ │ │ ├── dom.ts │ │ │ ├── global.d.ts │ │ │ ├── inertia.d.ts │ │ │ ├── jetstream.ts │ │ │ ├── models.d.ts │ │ │ ├── models.ts │ │ │ ├── projects.d.ts │ │ │ ├── reporting.ts │ │ │ ├── time-entries.d.ts │ │ │ ├── vite-env.d.ts │ │ │ └── vue-shim.d.ts │ │ ├── utils/ │ │ │ ├── billing.ts │ │ │ ├── commandPaletteCommands.ts │ │ │ ├── feedback.ts │ │ │ ├── fetchAllPages.ts │ │ │ ├── format.ts │ │ │ ├── init.ts │ │ │ ├── money.ts │ │ │ ├── notification.ts │ │ │ ├── permissions.ts │ │ │ ├── prefetch.ts │ │ │ ├── roles.ts │ │ │ ├── session.ts │ │ │ ├── theme.ts │ │ │ ├── useAggregatedTimeEntriesQuery.ts │ │ │ ├── useClients.ts │ │ │ ├── useClientsQuery.ts │ │ │ ├── useCommandPalette.ts │ │ │ ├── useCssVariable.ts │ │ │ ├── useCurrentTimeEntry.ts │ │ │ ├── useInvitations.ts │ │ │ ├── useMembers.ts │ │ │ ├── useMembersQuery.ts │ │ │ ├── useOrganization.ts │ │ │ ├── useOrganizationQuery.ts │ │ │ ├── useProjectMembers.ts │ │ │ ├── useProjectMembersQuery.ts │ │ │ ├── useProjects.ts │ │ │ ├── useProjectsQuery.ts │ │ │ ├── useReporting.ts │ │ │ ├── useReportsQuery.ts │ │ │ ├── useTags.ts │ │ │ ├── useTagsQuery.ts │ │ │ ├── useTasks.ts │ │ │ ├── useTasksQuery.ts │ │ │ ├── useTimeEntriesCalendarQuery.ts │ │ │ ├── useTimeEntriesInfiniteQuery.ts │ │ │ ├── useTimeEntriesMutations.ts │ │ │ ├── useTimeEntriesReportQuery.ts │ │ │ └── useUser.ts │ │ ├── ziggy.d.ts │ │ └── ziggy.js │ ├── markdown/ │ │ ├── policy.md │ │ └── terms.md │ ├── testfiles/ │ │ ├── clockify_projects_import_test_1.csv │ │ ├── clockify_time_entries_import_test_1.csv │ │ ├── clockify_time_entries_import_test_2.csv │ │ ├── clockify_time_entries_import_test_3.csv │ │ ├── generic_projects_import_test_1.csv │ │ ├── generic_time_entries_import_test_1.csv │ │ ├── harvest_clients_import_test_1.csv │ │ ├── harvest_projects_import_test_1.csv │ │ ├── harvest_time_entries_import_test_1.csv │ │ ├── solidtime_import_test_1/ │ │ │ ├── clients.csv │ │ │ ├── members.csv │ │ │ ├── meta.json │ │ │ ├── organization_invitations.csv │ │ │ ├── organizations.csv │ │ │ ├── project_members.csv │ │ │ ├── projects.csv │ │ │ ├── tags.csv │ │ │ ├── tasks.csv │ │ │ └── time_entries.csv │ │ ├── toggl_data_import_test_1/ │ │ │ ├── clients.json │ │ │ ├── projects.json │ │ │ ├── projects_users/ │ │ │ │ ├── 401.json │ │ │ │ ├── 402.json │ │ │ │ └── 403.json │ │ │ ├── tags.json │ │ │ ├── tasks/ │ │ │ │ ├── 401.json │ │ │ │ ├── 402.json │ │ │ │ └── 403.json │ │ │ └── workspace_users.json │ │ ├── toggl_data_import_test_2/ │ │ │ ├── clients.json │ │ │ ├── projects.json │ │ │ ├── projects_users/ │ │ │ │ ├── 401.json │ │ │ │ ├── 402.json │ │ │ │ └── 403.json │ │ │ ├── tags.json │ │ │ ├── tasks/ │ │ │ │ ├── 401.json │ │ │ │ ├── 402.json │ │ │ │ └── 403.json │ │ │ └── workspace_users.json │ │ ├── toggl_time_entries_import_test_1.csv │ │ └── toggl_time_entries_import_test_2.csv │ └── views/ │ ├── app.blade.php │ ├── auth/ │ │ └── oauth/ │ │ └── authorize.blade.php │ ├── emails/ │ │ ├── auth-api-expiration-reminder.blade.php │ │ ├── auth-api-token-expired.blade.php │ │ ├── organization-invitation.blade.php │ │ └── time-entry-still-running.blade.php │ ├── filament/ │ │ └── widgets/ │ │ └── server-overview.blade.php │ ├── reports/ │ │ ├── time-entry-aggregate/ │ │ │ ├── pdf-footer.blade.php │ │ │ ├── pdf.blade.php │ │ │ └── spreadsheet.blade.php │ │ └── time-entry-index/ │ │ ├── pdf-footer.blade.php │ │ └── pdf.blade.php │ └── vendor/ │ └── mail/ │ ├── html/ │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── subcopy.blade.php │ │ ├── table.blade.php │ │ └── themes/ │ │ └── default.css │ └── text/ │ ├── button.blade.php │ ├── footer.blade.php │ ├── header.blade.php │ ├── layout.blade.php │ ├── message.blade.php │ ├── panel.blade.php │ ├── subcopy.blade.php │ └── table.blade.php ├── routes/ │ ├── api.php │ └── web.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ ├── testing/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tailwind.config.js ├── tests/ │ ├── CreatesApplication.php │ ├── Feature/ │ │ ├── AuthenticationTest.php │ │ ├── BrowserSessionsTest.php │ │ ├── CreateOrganizationTest.php │ │ ├── DeleteAccountTest.php │ │ ├── DeleteOrganizationTest.php │ │ ├── EmailVerificationTest.php │ │ ├── InviteTeamMemberTest.php │ │ ├── LeaveTeamTest.php │ │ ├── PasswordConfirmationTest.php │ │ ├── PasswordResetTest.php │ │ ├── ProfileInformationTest.php │ │ ├── RegistrationTest.php │ │ ├── RemoveTeamMemberTest.php │ │ ├── TwoFactorAuthenticationSettingsTest.php │ │ ├── UpdatePasswordTest.php │ │ ├── UpdateTeamMemberRoleTest.php │ │ └── UpdateTeamTest.php │ ├── TestCase.php │ ├── TestCaseWithDatabase.php │ └── Unit/ │ ├── Console/ │ │ ├── Commands/ │ │ │ ├── Admin/ │ │ │ │ ├── OrganizationDeleteCommandTest.php │ │ │ │ ├── UserCreateCommandCommandTest.php │ │ │ │ └── UserVerifyCommandTest.php │ │ │ ├── Auth/ │ │ │ │ └── AuthSendReminderForExpiringApiTokensCommandTest.php │ │ │ ├── Correction/ │ │ │ │ └── CorrectionPlaceholderMembersCommandTest.php │ │ │ ├── Report/ │ │ │ │ └── ReportSetExpiredToPrivateCommandTest.php │ │ │ ├── SelfHost/ │ │ │ │ ├── SelfHostCheckForUpdateCommandTest.php │ │ │ │ ├── SelfHostDatabaseConsistencyCommandTest.php │ │ │ │ ├── SelfHostGenerateKeysCommandTest.php │ │ │ │ └── SelfHostTelemetryCommandTest.php │ │ │ └── TimeEntry/ │ │ │ └── TimeEntrySendStillRunningMailsCommandTest.php │ │ └── KernelTest.php │ ├── Database/ │ │ ├── MigrationTest.php │ │ └── SeederTest.php │ ├── Endpoint/ │ │ ├── Api/ │ │ │ └── V1/ │ │ │ ├── ApiEndpointTestAbstract.php │ │ │ ├── ApiTokenEndpointTest.php │ │ │ ├── ChartEndpointTest.php │ │ │ ├── ClientEndpointTest.php │ │ │ ├── CurrencyEndpointTest.php │ │ │ ├── ExportEndpointTest.php │ │ │ ├── ImportEndpointTest.php │ │ │ ├── InvitationEndpointTest.php │ │ │ ├── MemberEndpointTest.php │ │ │ ├── OrganizationEndpointTest.php │ │ │ ├── ProjectEndpointTest.php │ │ │ ├── ProjectMemberEndpointTest.php │ │ │ ├── Public/ │ │ │ │ └── PublicReportEndpointTest.php │ │ │ ├── ReportEndpointTest.php │ │ │ ├── TagEndpointTest.php │ │ │ ├── TaskEndpointTest.php │ │ │ ├── TimeEntryEndpointTest.php │ │ │ ├── UserEndpointTest.php │ │ │ ├── UserMembershipEndpointTest.php │ │ │ └── UserTimeEntryEndpointTest.php │ │ └── Web/ │ │ ├── DashboardEndpointTest.php │ │ ├── EndpointTestAbstract.php │ │ ├── HealthCheckEndpointTest.php │ │ └── HomeEndpointTest.php │ ├── Filament/ │ │ ├── FilamentTestCase.php │ │ ├── Resources/ │ │ │ ├── AuditResourceTest.php │ │ │ ├── ClientResourceTest.php │ │ │ ├── FailedJobResourceTest.php │ │ │ ├── OrganizationInvitationResourceTest.php │ │ │ ├── OrganizationResourceTest.php │ │ │ ├── ProjectResourceTest.php │ │ │ ├── ReportResourceTest.php │ │ │ ├── TagResourceTest.php │ │ │ ├── TaskResourceTest.php │ │ │ ├── TimeEntryResourceTest.php │ │ │ ├── TokenResourceTest.php │ │ │ └── UserResourceTest.php │ │ └── Widgets/ │ │ └── ServerOverviewWidgetTest.php │ ├── Jobs/ │ │ ├── RecalculateSpentTimeForProjectTest.php │ │ ├── RecalculateSpentTimeForTaskTest.php │ │ └── Test/ │ │ └── TestJobTest.php │ ├── Mail/ │ │ ├── AuthApiTokenExpirationReminderMailTest.php │ │ ├── AuthApiTokenExpiredMailTest.php │ │ ├── OrganizationInvitationMailTest.php │ │ └── TimeEntryStillRunningMailTest.php │ ├── Middleware/ │ │ ├── CheckOrganizationBlockedMiddlewareTest.php │ │ ├── EnsureEmailIsVerifiedMiddlewareTest.php │ │ ├── ForceHttpsMiddlewareTest.php │ │ ├── HandleInertiaRequestsMiddlewareTest.php │ │ └── MiddlewareTestAbstract.php │ ├── Model/ │ │ ├── ClientModelTest.php │ │ ├── MemberModelTest.php │ │ ├── ModelTestAbstract.php │ │ ├── OrganizationModelTest.php │ │ ├── Passport/ │ │ │ └── TokenModelTest.php │ │ ├── ProjectMemberModelTest.php │ │ ├── ProjectModelTest.php │ │ ├── ReportModelTest.php │ │ ├── TagModelTest.php │ │ ├── TaskModelTest.php │ │ ├── TimeEntryModelTest.php │ │ └── UserModelTest.php │ ├── Rules/ │ │ ├── ColorRuleTest.php │ │ └── CurrencyRuleTest.php │ └── Service/ │ ├── BillableRateServiceTest.php │ ├── CurrencyServiceTest.php │ ├── DashboardServiceTest.php │ ├── DeletionServiceTest.php │ ├── Export/ │ │ └── ExportServiceTest.php │ ├── Import/ │ │ ├── ImportDatabaseHelperTest.php │ │ ├── ImportServiceTest.php │ │ └── Importers/ │ │ ├── ClockifyProjectsImporterTest.php │ │ ├── ClockifyTimeEntriesImporterTest.php │ │ ├── GenericProjectsImporterTest.php │ │ ├── GenericTimeEntriesImporterTest.php │ │ ├── HarvestClientsImporterTest.php │ │ ├── HarvestProjectsImporterTest.php │ │ ├── HarvestTimeEntriesImporterTest.php │ │ ├── ImporterProviderTest.php │ │ ├── ImporterTestAbstract.php │ │ ├── SolidtimeImporterTest.php │ │ ├── TogglDataImporterTest.php │ │ └── TogglTimeEntriesImporterTest.php │ ├── IntervalServiceTest.php │ ├── LocalizationServiceTest.php │ ├── MemberServiceTest.php │ ├── PermissionStoreTest.php │ ├── TimeEntryAggregationServiceTest.php │ ├── TimeEntryFilterTest.php │ ├── TimezoneServiceTest.php │ └── UserServiceTest.php ├── tsconfig.json ├── vite-module-loader.js └── vite.config.js