gitextract_hlplnxq_/ ├── .gitattributes ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── api_request.yml │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── feature_request.yml │ │ ├── language_request.yml │ │ ├── support_request.yml │ │ └── z_blank_request.yml │ ├── SECURITY.md │ ├── translators.txt │ └── workflows/ │ ├── analyse-php.yml │ ├── lint-js.yml │ ├── lint-php.yml │ ├── test-js.yml │ ├── test-migrations.yml │ └── test-php.yml ├── .gitignore ├── LICENSE ├── app/ │ ├── Access/ │ │ ├── Controllers/ │ │ │ ├── ConfirmEmailController.php │ │ │ ├── ForgotPasswordController.php │ │ │ ├── HandlesPartialLogins.php │ │ │ ├── LoginController.php │ │ │ ├── MfaBackupCodesController.php │ │ │ ├── MfaController.php │ │ │ ├── MfaTotpController.php │ │ │ ├── OidcController.php │ │ │ ├── RegisterController.php │ │ │ ├── ResetPasswordController.php │ │ │ ├── Saml2Controller.php │ │ │ ├── SocialController.php │ │ │ ├── ThrottlesLogins.php │ │ │ └── UserInviteController.php │ │ ├── EmailConfirmationService.php │ │ ├── ExternalBaseUserProvider.php │ │ ├── GroupSyncService.php │ │ ├── Guards/ │ │ │ ├── AsyncExternalBaseSessionGuard.php │ │ │ ├── ExternalBaseSessionGuard.php │ │ │ └── LdapSessionGuard.php │ │ ├── Ldap.php │ │ ├── LdapService.php │ │ ├── LoginService.php │ │ ├── Mfa/ │ │ │ ├── BackupCodeService.php │ │ │ ├── MfaSession.php │ │ │ ├── MfaValue.php │ │ │ ├── TotpService.php │ │ │ └── TotpValidationRule.php │ │ ├── Notifications/ │ │ │ ├── ConfirmEmailNotification.php │ │ │ ├── ResetPasswordNotification.php │ │ │ └── UserInviteNotification.php │ │ ├── Oidc/ │ │ │ ├── OidcAccessToken.php │ │ │ ├── OidcException.php │ │ │ ├── OidcIdToken.php │ │ │ ├── OidcInvalidKeyException.php │ │ │ ├── OidcInvalidTokenException.php │ │ │ ├── OidcIssuerDiscoveryException.php │ │ │ ├── OidcJwtSigningKey.php │ │ │ ├── OidcJwtWithClaims.php │ │ │ ├── OidcOAuthProvider.php │ │ │ ├── OidcProviderSettings.php │ │ │ ├── OidcService.php │ │ │ ├── OidcUserDetails.php │ │ │ ├── OidcUserinfoResponse.php │ │ │ └── ProvidesClaims.php │ │ ├── RegistrationService.php │ │ ├── Saml2Service.php │ │ ├── SocialAccount.php │ │ ├── SocialAuthService.php │ │ ├── SocialDriverManager.php │ │ ├── UserInviteException.php │ │ ├── UserInviteService.php │ │ └── UserTokenService.php │ ├── Activity/ │ │ ├── ActivityQueries.php │ │ ├── ActivityType.php │ │ ├── CommentRepo.php │ │ ├── Controllers/ │ │ │ ├── AuditLogApiController.php │ │ │ ├── AuditLogController.php │ │ │ ├── CommentApiController.php │ │ │ ├── CommentController.php │ │ │ ├── FavouriteController.php │ │ │ ├── TagController.php │ │ │ ├── WatchController.php │ │ │ └── WebhookController.php │ │ ├── DispatchWebhookJob.php │ │ ├── Models/ │ │ │ ├── Activity.php │ │ │ ├── Comment.php │ │ │ ├── Favouritable.php │ │ │ ├── Favourite.php │ │ │ ├── Loggable.php │ │ │ ├── MentionHistory.php │ │ │ ├── Tag.php │ │ │ ├── View.php │ │ │ ├── Viewable.php │ │ │ ├── Watch.php │ │ │ ├── Webhook.php │ │ │ └── WebhookTrackedEvent.php │ │ ├── Notifications/ │ │ │ ├── Handlers/ │ │ │ │ ├── BaseNotificationHandler.php │ │ │ │ ├── CommentCreationNotificationHandler.php │ │ │ │ ├── CommentMentionNotificationHandler.php │ │ │ │ ├── NotificationHandler.php │ │ │ │ ├── PageCreationNotificationHandler.php │ │ │ │ └── PageUpdateNotificationHandler.php │ │ │ ├── MessageParts/ │ │ │ │ ├── EntityLinkMessageLine.php │ │ │ │ ├── EntityPathMessageLine.php │ │ │ │ ├── LinkedMailMessageLine.php │ │ │ │ └── ListMessageLine.php │ │ │ ├── Messages/ │ │ │ │ ├── BaseActivityNotification.php │ │ │ │ ├── CommentCreationNotification.php │ │ │ │ ├── CommentMentionNotification.php │ │ │ │ ├── PageCreationNotification.php │ │ │ │ └── PageUpdateNotification.php │ │ │ └── NotificationManager.php │ │ ├── Queries/ │ │ │ └── WebhooksAllPaginatedAndSorted.php │ │ ├── TagRepo.php │ │ ├── Tools/ │ │ │ ├── ActivityLogger.php │ │ │ ├── CommentTree.php │ │ │ ├── CommentTreeNode.php │ │ │ ├── EntityWatchers.php │ │ │ ├── IpFormatter.php │ │ │ ├── MentionParser.php │ │ │ ├── TagClassGenerator.php │ │ │ ├── UserEntityWatchOptions.php │ │ │ ├── WatchedParentDetails.php │ │ │ └── WebhookFormatter.php │ │ └── WatchLevels.php │ ├── Api/ │ │ ├── ApiDocsController.php │ │ ├── ApiDocsGenerator.php │ │ ├── ApiEntityListFormatter.php │ │ ├── ApiToken.php │ │ ├── ApiTokenGuard.php │ │ ├── ListingResponseBuilder.php │ │ └── UserApiTokenController.php │ ├── App/ │ │ ├── AppVersion.php │ │ ├── Application.php │ │ ├── HomeController.php │ │ ├── MailNotification.php │ │ ├── MetaController.php │ │ ├── Model.php │ │ ├── Providers/ │ │ │ ├── AppServiceProvider.php │ │ │ ├── AuthServiceProvider.php │ │ │ ├── EventServiceProvider.php │ │ │ ├── RouteServiceProvider.php │ │ │ ├── ThemeServiceProvider.php │ │ │ ├── TranslationServiceProvider.php │ │ │ ├── ValidationRuleServiceProvider.php │ │ │ └── ViewTweaksServiceProvider.php │ │ ├── PwaManifestBuilder.php │ │ ├── SluggableInterface.php │ │ ├── SystemApiController.php │ │ └── helpers.php │ ├── Config/ │ │ ├── api.php │ │ ├── app.php │ │ ├── auth.php │ │ ├── cache.php │ │ ├── clockwork.php │ │ ├── database.php │ │ ├── debugbar.php │ │ ├── exports.php │ │ ├── filesystems.php │ │ ├── hashing.php │ │ ├── logging.php │ │ ├── mail.php │ │ ├── oidc.php │ │ ├── queue.php │ │ ├── saml2.php │ │ ├── services.php │ │ ├── session.php │ │ ├── setting-defaults.php │ │ └── view.php │ ├── Console/ │ │ ├── Commands/ │ │ │ ├── AssignSortRuleCommand.php │ │ │ ├── CleanupImagesCommand.php │ │ │ ├── ClearActivityCommand.php │ │ │ ├── ClearRevisionsCommand.php │ │ │ ├── ClearViewsCommand.php │ │ │ ├── CopyShelfPermissionsCommand.php │ │ │ ├── CreateAdminCommand.php │ │ │ ├── DeleteUsersCommand.php │ │ │ ├── HandlesSingleUser.php │ │ │ ├── InstallModuleCommand.php │ │ │ ├── RefreshAvatarCommand.php │ │ │ ├── RegeneratePermissionsCommand.php │ │ │ ├── RegenerateReferencesCommand.php │ │ │ ├── RegenerateSearchCommand.php │ │ │ ├── ResetMfaCommand.php │ │ │ ├── UpdateUrlCommand.php │ │ │ └── UpgradeDatabaseEncodingCommand.php │ │ └── Kernel.php │ ├── Entities/ │ │ ├── BreadcrumbsViewComposer.php │ │ ├── Controllers/ │ │ │ ├── BookApiController.php │ │ │ ├── BookController.php │ │ │ ├── BookshelfApiController.php │ │ │ ├── BookshelfController.php │ │ │ ├── ChapterApiController.php │ │ │ ├── ChapterController.php │ │ │ ├── PageApiController.php │ │ │ ├── PageController.php │ │ │ ├── PageRevisionController.php │ │ │ ├── PageTemplateController.php │ │ │ ├── RecycleBinApiController.php │ │ │ └── RecycleBinController.php │ │ ├── EntityExistsRule.php │ │ ├── EntityProvider.php │ │ ├── Models/ │ │ │ ├── Book.php │ │ │ ├── BookChild.php │ │ │ ├── Bookshelf.php │ │ │ ├── Chapter.php │ │ │ ├── ContainerTrait.php │ │ │ ├── DeletableInterface.php │ │ │ ├── Deletion.php │ │ │ ├── Entity.php │ │ │ ├── EntityContainerData.php │ │ │ ├── EntityPageData.php │ │ │ ├── EntityQueryBuilder.php │ │ │ ├── EntityScope.php │ │ │ ├── EntityTable.php │ │ │ ├── HasCoverInterface.php │ │ │ ├── HasDefaultTemplateInterface.php │ │ │ ├── HasDescriptionInterface.php │ │ │ ├── Page.php │ │ │ ├── PageRevision.php │ │ │ └── SlugHistory.php │ │ ├── Queries/ │ │ │ ├── BookQueries.php │ │ │ ├── BookshelfQueries.php │ │ │ ├── ChapterQueries.php │ │ │ ├── EntityQueries.php │ │ │ ├── PageQueries.php │ │ │ ├── PageRevisionQueries.php │ │ │ ├── ProvidesEntityQueries.php │ │ │ ├── QueryPopular.php │ │ │ ├── QueryRecentlyViewed.php │ │ │ └── QueryTopFavourites.php │ │ ├── Repos/ │ │ │ ├── BaseRepo.php │ │ │ ├── BookRepo.php │ │ │ ├── BookshelfRepo.php │ │ │ ├── ChapterRepo.php │ │ │ ├── DeletionRepo.php │ │ │ ├── PageRepo.php │ │ │ └── RevisionRepo.php │ │ └── Tools/ │ │ ├── BookContents.php │ │ ├── Cloner.php │ │ ├── EntityCover.php │ │ ├── EntityDefaultTemplate.php │ │ ├── EntityHtmlDescription.php │ │ ├── EntityHydrator.php │ │ ├── HierarchyTransformer.php │ │ ├── Markdown/ │ │ │ ├── CheckboxConverter.php │ │ │ ├── CustomDivConverter.php │ │ │ ├── CustomImageConverter.php │ │ │ ├── CustomListItemRenderer.php │ │ │ ├── CustomParagraphConverter.php │ │ │ ├── CustomStrikeThroughExtension.php │ │ │ ├── CustomStrikethroughRenderer.php │ │ │ ├── HtmlToMarkdown.php │ │ │ ├── MarkdownToHtml.php │ │ │ └── SpacedTagFallbackConverter.php │ │ ├── MixedEntityListLoader.php │ │ ├── MixedEntityRequestHelper.php │ │ ├── NextPreviousContentLocator.php │ │ ├── PageContent.php │ │ ├── PageEditActivity.php │ │ ├── PageEditorData.php │ │ ├── PageEditorType.php │ │ ├── PageIncludeContent.php │ │ ├── PageIncludeParser.php │ │ ├── PageIncludeTag.php │ │ ├── ParentChanger.php │ │ ├── PermissionsUpdater.php │ │ ├── ShelfContext.php │ │ ├── SiblingFetcher.php │ │ ├── SlugGenerator.php │ │ ├── SlugHistory.php │ │ └── TrashCan.php │ ├── Exceptions/ │ │ ├── ApiAuthException.php │ │ ├── BookStackExceptionHandlerPage.php │ │ ├── ConfirmationEmailException.php │ │ ├── FileUploadException.php │ │ ├── Handler.php │ │ ├── HttpFetchException.php │ │ ├── ImageUploadException.php │ │ ├── JsonDebugException.php │ │ ├── LdapException.php │ │ ├── LoginAttemptEmailNeededException.php │ │ ├── LoginAttemptException.php │ │ ├── LoginAttemptInvalidUserException.php │ │ ├── MoveOperationException.php │ │ ├── NotFoundException.php │ │ ├── NotifyException.php │ │ ├── PdfExportException.php │ │ ├── PermissionsException.php │ │ ├── PrettyException.php │ │ ├── SamlException.php │ │ ├── SocialDriverNotConfigured.php │ │ ├── SocialSignInAccountNotUsed.php │ │ ├── SocialSignInException.php │ │ ├── StoppedAuthenticationException.php │ │ ├── ThemeException.php │ │ ├── UserRegistrationException.php │ │ ├── UserTokenExpiredException.php │ │ ├── UserTokenNotFoundException.php │ │ ├── UserUpdateException.php │ │ ├── ZipExportException.php │ │ ├── ZipImportException.php │ │ └── ZipValidationException.php │ ├── Exports/ │ │ ├── Controllers/ │ │ │ ├── BookExportApiController.php │ │ │ ├── BookExportController.php │ │ │ ├── ChapterExportApiController.php │ │ │ ├── ChapterExportController.php │ │ │ ├── ImportApiController.php │ │ │ ├── ImportController.php │ │ │ ├── PageExportApiController.php │ │ │ └── PageExportController.php │ │ ├── ExportFormatter.php │ │ ├── Import.php │ │ ├── ImportRepo.php │ │ ├── PdfGenerator.php │ │ └── ZipExports/ │ │ ├── Models/ │ │ │ ├── ZipExportAttachment.php │ │ │ ├── ZipExportBook.php │ │ │ ├── ZipExportChapter.php │ │ │ ├── ZipExportImage.php │ │ │ ├── ZipExportModel.php │ │ │ ├── ZipExportPage.php │ │ │ └── ZipExportTag.php │ │ ├── ZipExportBuilder.php │ │ ├── ZipExportFiles.php │ │ ├── ZipExportReader.php │ │ ├── ZipExportReferences.php │ │ ├── ZipExportValidator.php │ │ ├── ZipFileReferenceRule.php │ │ ├── ZipImportReferences.php │ │ ├── ZipImportRunner.php │ │ ├── ZipReferenceParser.php │ │ ├── ZipUniqueIdRule.php │ │ └── ZipValidationHelper.php │ ├── Facades/ │ │ ├── Activity.php │ │ └── Theme.php │ ├── Http/ │ │ ├── ApiController.php │ │ ├── Controller.php │ │ ├── DownloadResponseFactory.php │ │ ├── HttpClientHistory.php │ │ ├── HttpRequestService.php │ │ ├── Kernel.php │ │ ├── Middleware/ │ │ │ ├── ApiAuthenticate.php │ │ │ ├── ApplyCspRules.php │ │ │ ├── Authenticate.php │ │ │ ├── AuthenticatedOrPendingMfa.php │ │ │ ├── CheckEmailConfirmed.php │ │ │ ├── CheckGuard.php │ │ │ ├── CheckUserHasPermission.php │ │ │ ├── EncryptCookies.php │ │ │ ├── Localization.php │ │ │ ├── PreventRequestsDuringMaintenance.php │ │ │ ├── PreventResponseCaching.php │ │ │ ├── RedirectIfAuthenticated.php │ │ │ ├── RunThemeActions.php │ │ │ ├── StartSessionExtended.php │ │ │ ├── StartSessionIfCookieExists.php │ │ │ ├── ThrottleApiRequests.php │ │ │ ├── TrimStrings.php │ │ │ ├── TrustHosts.php │ │ │ ├── TrustProxies.php │ │ │ └── VerifyCsrfToken.php │ │ ├── RangeSupportedStream.php │ │ └── Request.php │ ├── Permissions/ │ │ ├── ContentPermissionApiController.php │ │ ├── EntityPermissionEvaluator.php │ │ ├── JointPermissionBuilder.php │ │ ├── MassEntityPermissionEvaluator.php │ │ ├── Models/ │ │ │ ├── EntityPermission.php │ │ │ ├── JointPermission.php │ │ │ └── RolePermission.php │ │ ├── Permission.php │ │ ├── PermissionApplicator.php │ │ ├── PermissionFormData.php │ │ ├── PermissionStatus.php │ │ ├── PermissionsController.php │ │ ├── PermissionsRepo.php │ │ └── SimpleEntityData.php │ ├── References/ │ │ ├── CrossLinkParser.php │ │ ├── ModelResolvers/ │ │ │ ├── AttachmentModelResolver.php │ │ │ ├── BookLinkModelResolver.php │ │ │ ├── BookshelfLinkModelResolver.php │ │ │ ├── ChapterLinkModelResolver.php │ │ │ ├── CrossLinkModelResolver.php │ │ │ ├── ImageModelResolver.php │ │ │ ├── PageLinkModelResolver.php │ │ │ └── PagePermalinkModelResolver.php │ │ ├── Reference.php │ │ ├── ReferenceChangeContext.php │ │ ├── ReferenceController.php │ │ ├── ReferenceFetcher.php │ │ ├── ReferenceStore.php │ │ └── ReferenceUpdater.php │ ├── Search/ │ │ ├── Options/ │ │ │ ├── ExactSearchOption.php │ │ │ ├── FilterSearchOption.php │ │ │ ├── SearchOption.php │ │ │ ├── TagSearchOption.php │ │ │ └── TermSearchOption.php │ │ ├── SearchApiController.php │ │ ├── SearchController.php │ │ ├── SearchIndex.php │ │ ├── SearchOptionSet.php │ │ ├── SearchOptions.php │ │ ├── SearchResultsFormatter.php │ │ ├── SearchRunner.php │ │ ├── SearchTerm.php │ │ └── SearchTextTokenizer.php │ ├── Settings/ │ │ ├── AppSettingsStore.php │ │ ├── MaintenanceController.php │ │ ├── Setting.php │ │ ├── SettingController.php │ │ ├── SettingService.php │ │ ├── StatusController.php │ │ ├── TestEmailNotification.php │ │ ├── UserNotificationPreferences.php │ │ └── UserShortcutMap.php │ ├── Sorting/ │ │ ├── BookSortController.php │ │ ├── BookSortMap.php │ │ ├── BookSortMapItem.php │ │ ├── BookSorter.php │ │ ├── SortRule.php │ │ ├── SortRuleController.php │ │ ├── SortRuleOperation.php │ │ ├── SortSetOperationComparisons.php │ │ └── SortUrl.php │ ├── Theming/ │ │ ├── CustomHtmlHeadContentProvider.php │ │ ├── ThemeController.php │ │ ├── ThemeEvents.php │ │ ├── ThemeModule.php │ │ ├── ThemeModuleException.php │ │ ├── ThemeModuleManager.php │ │ ├── ThemeModuleZip.php │ │ ├── ThemeService.php │ │ └── ThemeViews.php │ ├── Translation/ │ │ ├── FileLoader.php │ │ ├── LocaleDefinition.php │ │ ├── LocaleManager.php │ │ └── MessageSelector.php │ ├── Uploads/ │ │ ├── Attachment.php │ │ ├── AttachmentService.php │ │ ├── Controllers/ │ │ │ ├── AttachmentApiController.php │ │ │ ├── AttachmentController.php │ │ │ ├── DrawioImageController.php │ │ │ ├── GalleryImageController.php │ │ │ ├── ImageController.php │ │ │ └── ImageGalleryApiController.php │ │ ├── FaviconHandler.php │ │ ├── FileStorage.php │ │ ├── Image.php │ │ ├── ImageRepo.php │ │ ├── ImageResizer.php │ │ ├── ImageService.php │ │ ├── ImageStorage.php │ │ ├── ImageStorageDisk.php │ │ └── UserAvatars.php │ ├── Users/ │ │ ├── Controllers/ │ │ │ ├── RoleApiController.php │ │ │ ├── RoleController.php │ │ │ ├── UserAccountController.php │ │ │ ├── UserApiController.php │ │ │ ├── UserController.php │ │ │ ├── UserPreferencesController.php │ │ │ ├── UserProfileController.php │ │ │ └── UserSearchController.php │ │ ├── Models/ │ │ │ ├── HasCreatorAndUpdater.php │ │ │ ├── OwnableInterface.php │ │ │ ├── Role.php │ │ │ └── User.php │ │ ├── Queries/ │ │ │ ├── RolesAllPaginatedAndSorted.php │ │ │ ├── UserContentCounts.php │ │ │ ├── UserRecentlyCreatedContent.php │ │ │ └── UsersAllPaginatedAndSorted.php │ │ └── UserRepo.php │ └── Util/ │ ├── ConfiguredHtmlPurifier.php │ ├── CspService.php │ ├── DatabaseTransaction.php │ ├── DateFormatter.php │ ├── FilePathNormalizer.php │ ├── HtmlContentFilter.php │ ├── HtmlContentFilterConfig.php │ ├── HtmlDescriptionFilter.php │ ├── HtmlDocument.php │ ├── HtmlNonceApplicator.php │ ├── OutOfMemoryHandler.php │ ├── SimpleListOptions.php │ ├── SsrUrlValidator.php │ ├── SvgIcon.php │ └── WebSafeMimeSniffer.php ├── artisan ├── bookstack-system-cli ├── bootstrap/ │ ├── app.php │ ├── cache/ │ │ └── .gitignore │ └── phpstan.php ├── composer.json ├── crowdin.yml ├── database/ │ ├── .gitignore │ ├── factories/ │ │ ├── Access/ │ │ │ ├── Mfa/ │ │ │ │ └── MfaValueFactory.php │ │ │ └── SocialAccountFactory.php │ │ ├── Activity/ │ │ │ └── Models/ │ │ │ ├── ActivityFactory.php │ │ │ ├── CommentFactory.php │ │ │ ├── FavouriteFactory.php │ │ │ ├── TagFactory.php │ │ │ ├── WatchFactory.php │ │ │ ├── WebhookFactory.php │ │ │ └── WebhookTrackedEventFactory.php │ │ ├── Api/ │ │ │ └── ApiTokenFactory.php │ │ ├── Entities/ │ │ │ └── Models/ │ │ │ ├── BookFactory.php │ │ │ ├── BookshelfFactory.php │ │ │ ├── ChapterFactory.php │ │ │ ├── DeletionFactory.php │ │ │ ├── PageFactory.php │ │ │ ├── PageRevisionFactory.php │ │ │ └── SlugHistoryFactory.php │ │ ├── Exports/ │ │ │ └── ImportFactory.php │ │ ├── Sorting/ │ │ │ └── SortRuleFactory.php │ │ ├── Uploads/ │ │ │ ├── AttachmentFactory.php │ │ │ └── ImageFactory.php │ │ └── Users/ │ │ └── Models/ │ │ ├── RoleFactory.php │ │ └── UserFactory.php │ ├── migrations/ │ │ ├── .gitkeep │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_resets_table.php │ │ ├── 2015_07_12_114933_create_books_table.php │ │ ├── 2015_07_12_190027_create_pages_table.php │ │ ├── 2015_07_13_172121_create_images_table.php │ │ ├── 2015_07_27_172342_create_chapters_table.php │ │ ├── 2015_08_08_200447_add_users_to_entities.php │ │ ├── 2015_08_09_093534_create_page_revisions_table.php │ │ ├── 2015_08_16_142133_create_activities_table.php │ │ ├── 2015_08_29_105422_add_roles_and_permissions.php │ │ ├── 2015_08_30_125859_create_settings_table.php │ │ ├── 2015_08_31_175240_add_search_indexes.php │ │ ├── 2015_09_04_165821_create_social_accounts_table.php │ │ ├── 2015_09_05_164707_add_email_confirmation_table.php │ │ ├── 2015_11_21_145609_create_views_table.php │ │ ├── 2015_11_26_221857_add_entity_indexes.php │ │ ├── 2015_12_05_145049_fulltext_weighting.php │ │ ├── 2015_12_07_195238_add_image_upload_types.php │ │ ├── 2015_12_09_195748_add_user_avatars.php │ │ ├── 2016_01_11_210908_add_external_auth_to_users.php │ │ ├── 2016_02_25_184030_add_slug_to_revisions.php │ │ ├── 2016_02_27_120329_update_permissions_and_roles.php │ │ ├── 2016_02_28_084200_add_entity_access_controls.php │ │ ├── 2016_03_09_203143_add_page_revision_types.php │ │ ├── 2016_03_13_082138_add_page_drafts.php │ │ ├── 2016_03_25_123157_add_markdown_support.php │ │ ├── 2016_04_09_100730_add_view_permissions_to_roles.php │ │ ├── 2016_04_20_192649_create_joint_permissions_table.php │ │ ├── 2016_05_06_185215_create_tags_table.php │ │ ├── 2016_07_07_181521_add_summary_to_page_revisions.php │ │ ├── 2016_09_29_101449_remove_hidden_roles.php │ │ ├── 2016_10_09_142037_create_attachments_table.php │ │ ├── 2017_01_21_163556_create_cache_table.php │ │ ├── 2017_01_21_163602_create_sessions_table.php │ │ ├── 2017_03_19_091553_create_search_index_table.php │ │ ├── 2017_04_20_185112_add_revision_counts.php │ │ ├── 2017_07_02_152834_update_db_encoding_to_ut8mb4.php │ │ ├── 2017_08_01_130541_create_comments_table.php │ │ ├── 2017_08_29_102650_add_cover_image_display.php │ │ ├── 2018_07_15_173514_add_role_external_auth_id.php │ │ ├── 2018_08_04_115700_create_bookshelves_table.php │ │ ├── 2019_07_07_112515_add_template_support.php │ │ ├── 2019_08_17_140214_add_user_invites_table.php │ │ ├── 2019_12_29_120917_add_api_auth.php │ │ ├── 2020_08_04_111754_drop_joint_permissions_id.php │ │ ├── 2020_08_04_131052_remove_role_name_field.php │ │ ├── 2020_09_19_094251_add_activity_indexes.php │ │ ├── 2020_09_27_210059_add_entity_soft_deletes.php │ │ ├── 2020_09_27_210528_create_deletions_table.php │ │ ├── 2020_11_07_232321_simplify_activities_table.php │ │ ├── 2020_12_30_173528_add_owned_by_field_to_entities.php │ │ ├── 2021_01_30_225441_add_settings_type_column.php │ │ ├── 2021_03_08_215138_add_user_slug.php │ │ ├── 2021_05_15_173110_create_favourites_table.php │ │ ├── 2021_06_30_173111_create_mfa_values_table.php │ │ ├── 2021_07_03_085038_add_mfa_enforced_to_roles_table.php │ │ ├── 2021_08_28_161743_add_export_role_permission.php │ │ ├── 2021_09_26_044614_add_activities_ip_column.php │ │ ├── 2021_11_26_070438_add_index_for_user_ip.php │ │ ├── 2021_12_07_111343_create_webhooks_table.php │ │ ├── 2021_12_13_152024_create_jobs_table.php │ │ ├── 2021_12_13_152120_create_failed_jobs_table.php │ │ ├── 2022_01_03_154041_add_webhooks_timeout_error_columns.php │ │ ├── 2022_04_17_101741_add_editor_change_field_and_permission.php │ │ ├── 2022_04_25_140741_update_polymorphic_types.php │ │ ├── 2022_07_16_170051_drop_joint_permission_type.php │ │ ├── 2022_08_17_092941_create_references_table.php │ │ ├── 2022_09_02_082910_fix_shelf_cover_image_types.php │ │ ├── 2022_10_07_091406_flatten_entity_permissions_table.php │ │ ├── 2022_10_08_104202_drop_entity_restricted_field.php │ │ ├── 2023_01_24_104625_refactor_joint_permissions_storage.php │ │ ├── 2023_01_28_141230_copy_color_settings_for_dark_mode.php │ │ ├── 2023_02_20_093655_increase_attachments_path_length.php │ │ ├── 2023_02_23_200227_add_updated_at_index_to_pages.php │ │ ├── 2023_06_10_071823_remove_guest_user_secondary_roles.php │ │ ├── 2023_06_25_181952_remove_bookshelf_create_entity_permissions.php │ │ ├── 2023_07_25_124945_add_receive_notifications_role_permissions.php │ │ ├── 2023_07_31_104430_create_watches_table.php │ │ ├── 2023_08_21_174248_increase_cache_size.php │ │ ├── 2023_12_02_104541_add_default_template_to_books.php │ │ ├── 2023_12_17_140913_add_description_html_to_entities.php │ │ ├── 2024_01_01_104542_add_default_template_to_chapters.php │ │ ├── 2024_02_04_141358_add_views_updated_index.php │ │ ├── 2024_05_04_154409_rename_activity_relation_columns.php │ │ ├── 2024_09_29_140340_ensure_editor_value_set.php │ │ ├── 2024_10_29_114420_add_import_role_permission.php │ │ ├── 2024_11_02_160700_create_imports_table.php │ │ ├── 2024_11_27_171039_add_instance_id_setting.php │ │ ├── 2025_01_29_180933_create_sort_rules_table.php │ │ ├── 2025_02_05_150842_add_sort_rule_id_to_books.php │ │ ├── 2025_04_18_215145_add_content_refs_and_archived_to_comments.php │ │ ├── 2025_09_02_111542_remove_unused_columns.php │ │ ├── 2025_09_15_132850_create_entities_table.php │ │ ├── 2025_09_15_134701_migrate_entity_data.php │ │ ├── 2025_09_15_134751_update_entity_relation_columns.php │ │ ├── 2025_09_15_134813_drop_old_entity_tables.php │ │ ├── 2025_10_18_163331_clean_user_id_references.php │ │ ├── 2025_10_22_134507_update_comments_relation_field_names.php │ │ ├── 2025_11_23_161812_create_slug_history_table.php │ │ ├── 2025_12_15_140219_create_mention_history_table.php │ │ └── 2025_12_19_103417_add_views_viewable_type_index.php │ └── seeders/ │ ├── .gitkeep │ ├── DatabaseSeeder.php │ ├── DummyContentSeeder.php │ └── LargeContentSeeder.php ├── dev/ │ ├── api/ │ │ ├── requests/ │ │ │ ├── attachments-create.json │ │ │ ├── attachments-update.json │ │ │ ├── books-create.json │ │ │ ├── books-update.json │ │ │ ├── chapters-create.json │ │ │ ├── chapters-update.json │ │ │ ├── comments-create.json │ │ │ ├── comments-update.json │ │ │ ├── content-permissions-update.json │ │ │ ├── image-gallery-readDataForUrl.http │ │ │ ├── image-gallery-update.json │ │ │ ├── imports-run.json │ │ │ ├── pages-create.json │ │ │ ├── pages-update.json │ │ │ ├── roles-create.json │ │ │ ├── roles-update.json │ │ │ ├── search-all.http │ │ │ ├── shelves-create.json │ │ │ ├── shelves-update.json │ │ │ ├── users-create.json │ │ │ ├── users-delete.json │ │ │ └── users-update.json │ │ └── responses/ │ │ ├── attachments-create.json │ │ ├── attachments-list.json │ │ ├── attachments-read.json │ │ ├── attachments-update.json │ │ ├── audit-log-list.json │ │ ├── books-create.json │ │ ├── books-list.json │ │ ├── books-read.json │ │ ├── books-update.json │ │ ├── chapters-create.json │ │ ├── chapters-list.json │ │ ├── chapters-read.json │ │ ├── chapters-update.json │ │ ├── comments-create.json │ │ ├── comments-list.json │ │ ├── comments-read.json │ │ ├── comments-update.json │ │ ├── content-permissions-read.json │ │ ├── content-permissions-update.json │ │ ├── image-gallery-create.json │ │ ├── image-gallery-list.json │ │ ├── image-gallery-read.json │ │ ├── image-gallery-update.json │ │ ├── imports-create.json │ │ ├── imports-list.json │ │ ├── imports-read.json │ │ ├── imports-run.json │ │ ├── pages-create.json │ │ ├── pages-list.json │ │ ├── pages-read.json │ │ ├── pages-update.json │ │ ├── recycle-bin-destroy.json │ │ ├── recycle-bin-list.json │ │ ├── recycle-bin-restore.json │ │ ├── roles-create.json │ │ ├── roles-list.json │ │ ├── roles-read.json │ │ ├── roles-update.json │ │ ├── search-all.json │ │ ├── shelves-create.json │ │ ├── shelves-list.json │ │ ├── shelves-read.json │ │ ├── shelves-update.json │ │ ├── system-read.json │ │ ├── users-create.json │ │ ├── users-list.json │ │ ├── users-read.json │ │ └── users-update.json │ ├── build/ │ │ ├── esbuild.mjs │ │ ├── livereload.js │ │ └── svg-blank-transform.js │ ├── checksums/ │ │ ├── .gitignore │ │ └── vendor │ ├── docker/ │ │ ├── Dockerfile │ │ ├── db-testing/ │ │ │ ├── Dockerfile │ │ │ ├── readme.md │ │ │ └── run.sh │ │ ├── entrypoint.app.sh │ │ ├── entrypoint.node.sh │ │ └── php/ │ │ └── conf.d/ │ │ └── xdebug.ini │ ├── docs/ │ │ ├── development.md │ │ ├── javascript-code.md │ │ ├── javascript-public-events.md │ │ ├── logical-theme-system.md │ │ ├── permission-scenario-testing.md │ │ ├── php-testing.md │ │ ├── portable-zip-file-format.md │ │ ├── release-process.md │ │ ├── theme-system-modules.md │ │ ├── visual-theme-system.md │ │ └── wysiwyg-js-api.md │ └── licensing/ │ ├── gen-js-licenses │ ├── gen-licenses-shared.php │ ├── gen-php-licenses │ ├── js-library-licenses.txt │ └── php-library-licenses.txt ├── docker-compose.yml ├── eslint.config.mjs ├── jest.config.ts ├── lang/ │ ├── ar/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── bg/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── bn/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── bs/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ca/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── cs/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── cy/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── da/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── de/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── de_informal/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── el/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── en/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── es/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── es_AR/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── et/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── eu/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── fa/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── fi/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── fr/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── he/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── hr/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── hu/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── id/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── is/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── it/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ja/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ka/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ko/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ku/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── lt/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── lv/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── nb/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ne/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── nl/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── nn/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── pl/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── pt/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── pt_BR/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ro/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── ru/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── sk/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── sl/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── sq/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── sr/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── sv/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── tk/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── tr/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── uk/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── uz/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── vi/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ ├── zh_CN/ │ │ ├── activities.php │ │ ├── auth.php │ │ ├── common.php │ │ ├── components.php │ │ ├── editor.php │ │ ├── entities.php │ │ ├── errors.php │ │ ├── notifications.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── preferences.php │ │ ├── settings.php │ │ └── validation.php │ └── zh_TW/ │ ├── activities.php │ ├── auth.php │ ├── common.php │ ├── components.php │ ├── editor.php │ ├── entities.php │ ├── errors.php │ ├── notifications.php │ ├── pagination.php │ ├── passwords.php │ ├── preferences.php │ ├── settings.php │ └── validation.php ├── package.json ├── phpcs.xml ├── phpstan.neon.dist ├── phpunit.xml ├── public/ │ ├── .htaccess │ ├── index.php │ ├── libs/ │ │ └── tinymce/ │ │ ├── langs/ │ │ │ └── README.md │ │ ├── license.txt │ │ ├── skins/ │ │ │ ├── content/ │ │ │ │ ├── dark/ │ │ │ │ │ └── content.js │ │ │ │ ├── default/ │ │ │ │ │ └── content.js │ │ │ │ ├── document/ │ │ │ │ │ └── content.js │ │ │ │ ├── tinymce-5/ │ │ │ │ │ └── content.js │ │ │ │ ├── tinymce-5-dark/ │ │ │ │ │ └── content.js │ │ │ │ └── writer/ │ │ │ │ └── content.js │ │ │ └── ui/ │ │ │ ├── tinymce-5/ │ │ │ │ ├── content.inline.js │ │ │ │ ├── content.js │ │ │ │ ├── skin.js │ │ │ │ └── skin.shadowdom.js │ │ │ └── tinymce-5-dark/ │ │ │ ├── content.inline.js │ │ │ ├── content.js │ │ │ ├── skin.js │ │ │ └── skin.shadowdom.js │ │ └── tinymce.d.ts │ ├── uploads/ │ │ ├── .gitignore │ │ └── .htaccess │ └── web.config ├── readme.md ├── resources/ │ ├── js/ │ │ ├── app.ts │ │ ├── code/ │ │ │ ├── index.mjs │ │ │ ├── languages.js │ │ │ ├── legacy-modes.mjs │ │ │ ├── setups.js │ │ │ ├── simple-editor-interface.js │ │ │ ├── themes.js │ │ │ └── views.js │ │ ├── components/ │ │ │ ├── add-remove-rows.js │ │ │ ├── ajax-delete-row.ts │ │ │ ├── ajax-form.js │ │ │ ├── api-nav.ts │ │ │ ├── attachments-list.js │ │ │ ├── attachments.js │ │ │ ├── auto-submit.js │ │ │ ├── auto-suggest.js │ │ │ ├── back-to-top.js │ │ │ ├── book-sort.js │ │ │ ├── chapter-contents.js │ │ │ ├── code-editor.js │ │ │ ├── code-highlighter.js │ │ │ ├── code-textarea.js │ │ │ ├── collapsible.js │ │ │ ├── component.js │ │ │ ├── confirm-dialog.js │ │ │ ├── custom-checkbox.js │ │ │ ├── details-highlighter.js │ │ │ ├── dropdown-search.js │ │ │ ├── dropdown.js │ │ │ ├── dropzone.js │ │ │ ├── editor-toolbox.ts │ │ │ ├── entity-permissions.js │ │ │ ├── entity-search.js │ │ │ ├── entity-selector-popup.ts │ │ │ ├── entity-selector.ts │ │ │ ├── event-emit-select.js │ │ │ ├── expand-toggle.js │ │ │ ├── global-search.js │ │ │ ├── header-mobile-toggle.js │ │ │ ├── image-manager.js │ │ │ ├── image-picker.js │ │ │ ├── index.ts │ │ │ ├── list-sort-control.js │ │ │ ├── loading-button.ts │ │ │ ├── markdown-editor.js │ │ │ ├── new-user-password.js │ │ │ ├── notification.js │ │ │ ├── optional-input.js │ │ │ ├── page-comment-reference.ts │ │ │ ├── page-comment.ts │ │ │ ├── page-comments.ts │ │ │ ├── page-display.js │ │ │ ├── page-editor.js │ │ │ ├── page-picker.js │ │ │ ├── permissions-table.js │ │ │ ├── pointer.ts │ │ │ ├── popup.js │ │ │ ├── setting-app-color-scheme.js │ │ │ ├── setting-color-picker.js │ │ │ ├── setting-homepage-control.js │ │ │ ├── shelf-sort.js │ │ │ ├── shortcut-input.js │ │ │ ├── shortcuts.js │ │ │ ├── sort-rule-manager.ts │ │ │ ├── sortable-list.js │ │ │ ├── submit-on-change.js │ │ │ ├── tabs.ts │ │ │ ├── tag-manager.js │ │ │ ├── template-manager.js │ │ │ ├── toggle-switch.js │ │ │ ├── tri-layout.ts │ │ │ ├── user-select.js │ │ │ ├── webhook-events.js │ │ │ ├── wysiwyg-editor-tinymce.js │ │ │ ├── wysiwyg-editor.js │ │ │ └── wysiwyg-input.ts │ │ ├── custom.d.ts │ │ ├── global.d.ts │ │ ├── markdown/ │ │ │ ├── actions.ts │ │ │ ├── codemirror.ts │ │ │ ├── common-events.ts │ │ │ ├── display.ts │ │ │ ├── dom-handlers.ts │ │ │ ├── index.mts │ │ │ ├── inputs/ │ │ │ │ ├── codemirror.ts │ │ │ │ ├── interface.ts │ │ │ │ └── textarea.ts │ │ │ ├── markdown.ts │ │ │ ├── settings.ts │ │ │ └── shortcuts.ts │ │ ├── services/ │ │ │ ├── __tests__/ │ │ │ │ └── translations.test.ts │ │ │ ├── animations.ts │ │ │ ├── clipboard.ts │ │ │ ├── components.ts │ │ │ ├── dates.ts │ │ │ ├── dom.ts │ │ │ ├── drawio.ts │ │ │ ├── dual-lists.ts │ │ │ ├── events.ts │ │ │ ├── http.ts │ │ │ ├── keyboard-navigation.ts │ │ │ ├── store.ts │ │ │ ├── text.ts │ │ │ ├── translations.ts │ │ │ ├── util.ts │ │ │ └── vdom.ts │ │ ├── wysiwyg/ │ │ │ ├── api/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── api-test-utils.ts │ │ │ │ │ ├── content.test.ts │ │ │ │ │ └── ui.test.ts │ │ │ │ ├── api.ts │ │ │ │ ├── content.ts │ │ │ │ └── ui.ts │ │ │ ├── index.ts │ │ │ ├── lexical/ │ │ │ │ ├── ORIGINAL-LEXICAL-LICENSE │ │ │ │ ├── clipboard/ │ │ │ │ │ ├── clipboard.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── core/ │ │ │ │ │ ├── LexicalCommands.ts │ │ │ │ │ ├── LexicalConstants.ts │ │ │ │ │ ├── LexicalEditor.ts │ │ │ │ │ ├── LexicalEditorState.ts │ │ │ │ │ ├── LexicalEvents.ts │ │ │ │ │ ├── LexicalGC.ts │ │ │ │ │ ├── LexicalMutations.ts │ │ │ │ │ ├── LexicalNode.ts │ │ │ │ │ ├── LexicalNormalization.ts │ │ │ │ │ ├── LexicalReconciler.ts │ │ │ │ │ ├── LexicalSelection.ts │ │ │ │ │ ├── LexicalUpdates.ts │ │ │ │ │ ├── LexicalUtils.ts │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── unit/ │ │ │ │ │ │ │ ├── HTMLCopyAndPaste.test.ts │ │ │ │ │ │ │ ├── LexicalEditor.test.ts │ │ │ │ │ │ │ ├── LexicalEditorState.test.ts │ │ │ │ │ │ │ ├── LexicalNode.test.ts │ │ │ │ │ │ │ ├── LexicalNormalization.test.ts │ │ │ │ │ │ │ ├── LexicalSelection.test.ts │ │ │ │ │ │ │ ├── LexicalSerialization.test.ts │ │ │ │ │ │ │ └── LexicalUtils.test.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── nodes/ │ │ │ │ │ │ ├── ArtificialNode.ts │ │ │ │ │ │ ├── CommonBlockNode.ts │ │ │ │ │ │ ├── LexicalDecoratorNode.ts │ │ │ │ │ │ ├── LexicalElementNode.ts │ │ │ │ │ │ ├── LexicalLineBreakNode.ts │ │ │ │ │ │ ├── LexicalParagraphNode.ts │ │ │ │ │ │ ├── LexicalRootNode.ts │ │ │ │ │ │ ├── LexicalTabNode.ts │ │ │ │ │ │ ├── LexicalTextNode.ts │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ │ ├── LexicalElementNode.test.ts │ │ │ │ │ │ │ ├── LexicalGC.test.ts │ │ │ │ │ │ │ ├── LexicalLineBreakNode.test.ts │ │ │ │ │ │ │ ├── LexicalParagraphNode.test.ts │ │ │ │ │ │ │ ├── LexicalRootNode.test.ts │ │ │ │ │ │ │ ├── LexicalTabNode.test.ts │ │ │ │ │ │ │ └── LexicalTextNode.test.ts │ │ │ │ │ │ └── common.ts │ │ │ │ │ └── shared/ │ │ │ │ │ ├── __mocks__/ │ │ │ │ │ │ └── invariant.ts │ │ │ │ │ ├── canUseDOM.ts │ │ │ │ │ ├── caretFromPoint.ts │ │ │ │ │ ├── environment.ts │ │ │ │ │ ├── invariant.ts │ │ │ │ │ ├── normalizeClassNames.ts │ │ │ │ │ ├── simpleDiffWithCursor.ts │ │ │ │ │ └── warnOnlyOnce.ts │ │ │ │ ├── headless/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ └── LexicalHeadlessEditor.test.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── history/ │ │ │ │ │ └── index.ts │ │ │ │ ├── html/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ └── LexicalHtml.test.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── link/ │ │ │ │ │ ├── LexicalMentionNode.ts │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ ├── LexicalAutoLinkNode.test.ts │ │ │ │ │ │ └── LexicalLinkNode.test.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── LexicalListItemNode.ts │ │ │ │ │ ├── LexicalListNode.ts │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ ├── LexicalListItemNode.test.ts │ │ │ │ │ │ ├── LexicalListNode.test.ts │ │ │ │ │ │ └── utils.test.ts │ │ │ │ │ ├── formatList.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── readme.md │ │ │ │ ├── rich-text/ │ │ │ │ │ ├── LexicalCalloutNode.ts │ │ │ │ │ ├── LexicalCodeBlockNode.ts │ │ │ │ │ ├── LexicalDetailsNode.ts │ │ │ │ │ ├── LexicalDiagramNode.ts │ │ │ │ │ ├── LexicalHeadingNode.ts │ │ │ │ │ ├── LexicalHorizontalRuleNode.ts │ │ │ │ │ ├── LexicalImageNode.ts │ │ │ │ │ ├── LexicalMediaNode.ts │ │ │ │ │ ├── LexicalQuoteNode.ts │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ ├── LexicalDetailsNode.test.ts │ │ │ │ │ │ ├── LexicalHeadingNode.test.ts │ │ │ │ │ │ ├── LexicalMediaNode.test.ts │ │ │ │ │ │ └── LexicalQuoteNode.test.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── selection/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── unit/ │ │ │ │ │ │ │ ├── LexicalSelection.test.ts │ │ │ │ │ │ │ └── LexicalSelectionHelpers.test.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lexical-node.ts │ │ │ │ │ ├── range-selection.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── table/ │ │ │ │ │ ├── LexicalCaptionNode.ts │ │ │ │ │ ├── LexicalTableCellNode.ts │ │ │ │ │ ├── LexicalTableCommands.ts │ │ │ │ │ ├── LexicalTableNode.ts │ │ │ │ │ ├── LexicalTableObserver.ts │ │ │ │ │ ├── LexicalTableRowNode.ts │ │ │ │ │ ├── LexicalTableSelection.ts │ │ │ │ │ ├── LexicalTableSelectionHelpers.ts │ │ │ │ │ ├── LexicalTableUtils.ts │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ ├── LexicalTableCellNode.test.ts │ │ │ │ │ │ ├── LexicalTableNode.test.ts │ │ │ │ │ │ ├── LexicalTableRowNode.test.ts │ │ │ │ │ │ └── LexicalTableSelection.test.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── unit/ │ │ │ │ │ │ ├── LexicalElementHelpers.test.ts │ │ │ │ │ │ ├── LexicalEventHelpers.test.ts │ │ │ │ │ │ ├── LexicalNodeHelpers.test.ts │ │ │ │ │ │ ├── LexicalRootHelpers.test.ts │ │ │ │ │ │ ├── LexicalUtilsKlassEqual.test.ts │ │ │ │ │ │ ├── LexicalUtilsSplitNode.test.ts │ │ │ │ │ │ ├── LexlcaiUtilsInsertNodeToNearestRoot.test.ts │ │ │ │ │ │ └── mergeRegister.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── markSelection.ts │ │ │ │ │ ├── mergeRegister.ts │ │ │ │ │ ├── positionNodeOnRange.ts │ │ │ │ │ └── px.ts │ │ │ │ └── yjs/ │ │ │ │ ├── Bindings.ts │ │ │ │ ├── CollabDecoratorNode.ts │ │ │ │ ├── CollabElementNode.ts │ │ │ │ ├── CollabLineBreakNode.ts │ │ │ │ ├── CollabTextNode.ts │ │ │ │ ├── SyncCursors.ts │ │ │ │ ├── SyncEditorStates.ts │ │ │ │ ├── Utils.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── nodes.ts │ │ │ ├── services/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── auto-links.test.ts │ │ │ │ │ ├── keyboard-handling.test.ts │ │ │ │ │ └── mouse-handling.test.ts │ │ │ │ ├── auto-links.ts │ │ │ │ ├── common-events.ts │ │ │ │ ├── drop-paste-handling.ts │ │ │ │ ├── keyboard-handling.ts │ │ │ │ ├── mentions.ts │ │ │ │ ├── mouse-handling.ts │ │ │ │ ├── selection-handling.ts │ │ │ │ └── shortcuts.ts │ │ │ ├── testing.md │ │ │ ├── ui/ │ │ │ │ ├── decorators/ │ │ │ │ │ ├── CodeBlockDecorator.ts │ │ │ │ │ ├── DiagramDecorator.ts │ │ │ │ │ └── MentionDecorator.ts │ │ │ │ ├── defaults/ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ ├── alignments.ts │ │ │ │ │ │ ├── block-formats.ts │ │ │ │ │ │ ├── controls.ts │ │ │ │ │ │ ├── inline-formats.ts │ │ │ │ │ │ ├── lists.ts │ │ │ │ │ │ ├── objects.ts │ │ │ │ │ │ └── tables.ts │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── controls.ts │ │ │ │ │ │ ├── objects.ts │ │ │ │ │ │ └── tables.ts │ │ │ │ │ ├── modals.ts │ │ │ │ │ └── toolbars.ts │ │ │ │ ├── framework/ │ │ │ │ │ ├── blocks/ │ │ │ │ │ │ ├── action-field.ts │ │ │ │ │ │ ├── button-with-menu.ts │ │ │ │ │ │ ├── color-button.ts │ │ │ │ │ │ ├── color-field.ts │ │ │ │ │ │ ├── color-picker.ts │ │ │ │ │ │ ├── dropdown-button.ts │ │ │ │ │ │ ├── external-content.ts │ │ │ │ │ │ ├── format-menu.ts │ │ │ │ │ │ ├── format-preview-button.ts │ │ │ │ │ │ ├── link-field.ts │ │ │ │ │ │ ├── menu-button.ts │ │ │ │ │ │ ├── overflow-container.ts │ │ │ │ │ │ ├── separator.ts │ │ │ │ │ │ └── table-creator.ts │ │ │ │ │ ├── buttons.ts │ │ │ │ │ ├── core.ts │ │ │ │ │ ├── decorator.ts │ │ │ │ │ ├── forms.ts │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ ├── dropdowns.ts │ │ │ │ │ │ ├── mouse-drag-tracker.ts │ │ │ │ │ │ ├── node-resizer.ts │ │ │ │ │ │ ├── table-resizer.ts │ │ │ │ │ │ ├── table-selection-handler.ts │ │ │ │ │ │ └── task-list-handler.ts │ │ │ │ │ ├── manager.ts │ │ │ │ │ ├── modals.ts │ │ │ │ │ └── toolbars.ts │ │ │ │ └── index.ts │ │ │ └── utils/ │ │ │ ├── __tests__/ │ │ │ │ └── lists.test.ts │ │ │ ├── actions.ts │ │ │ ├── details.ts │ │ │ ├── diagrams.ts │ │ │ ├── dom.ts │ │ │ ├── formats.ts │ │ │ ├── images.ts │ │ │ ├── links.ts │ │ │ ├── lists.ts │ │ │ ├── node-clipboard.ts │ │ │ ├── nodes.ts │ │ │ ├── selection.ts │ │ │ ├── table-copy-paste.ts │ │ │ ├── table-map.ts │ │ │ └── tables.ts │ │ └── wysiwyg-tinymce/ │ │ ├── common-events.js │ │ ├── config.js │ │ ├── drop-paste-handling.js │ │ ├── filters.js │ │ ├── fixes.js │ │ ├── icons.js │ │ ├── plugin-codeeditor.js │ │ ├── plugin-drawio.js │ │ ├── plugins-about.js │ │ ├── plugins-customhr.js │ │ ├── plugins-details.js │ │ ├── plugins-imagemanager.js │ │ ├── plugins-stub.js │ │ ├── plugins-table-additions.js │ │ ├── plugins-tasklist.js │ │ ├── scrolling.js │ │ ├── shortcuts.js │ │ ├── toolbars.js │ │ └── util.js │ ├── sass/ │ │ ├── _animations.scss │ │ ├── _blocks.scss │ │ ├── _buttons.scss │ │ ├── _codemirror.scss │ │ ├── _colors.scss │ │ ├── _components.scss │ │ ├── _content.scss │ │ ├── _editor.scss │ │ ├── _footer.scss │ │ ├── _forms.scss │ │ ├── _header.scss │ │ ├── _html.scss │ │ ├── _layout.scss │ │ ├── _lists.scss │ │ ├── _mixins.scss │ │ ├── _opacity.scss │ │ ├── _pages.scss │ │ ├── _print.scss │ │ ├── _reset.scss │ │ ├── _spacing.scss │ │ ├── _tables.scss │ │ ├── _text.scss │ │ ├── _tinymce.scss │ │ ├── _vars.scss │ │ ├── export-styles.scss │ │ └── styles.scss │ └── views/ │ ├── api-docs/ │ │ ├── index.blade.php │ │ └── parts/ │ │ ├── endpoint.blade.php │ │ └── getting-started.blade.php │ ├── attachments/ │ │ ├── list.blade.php │ │ ├── manager-edit-form.blade.php │ │ ├── manager-link-form.blade.php │ │ ├── manager-list.blade.php │ │ └── manager.blade.php │ ├── auth/ │ │ ├── invite-set-password.blade.php │ │ ├── login-initiate.blade.php │ │ ├── login.blade.php │ │ ├── parts/ │ │ │ ├── login-form-ldap.blade.php │ │ │ ├── login-form-oidc.blade.php │ │ │ ├── login-form-saml2.blade.php │ │ │ ├── login-form-standard.blade.php │ │ │ ├── login-message.blade.php │ │ │ └── register-message.blade.php │ │ ├── passwords/ │ │ │ ├── email.blade.php │ │ │ └── reset.blade.php │ │ ├── register-confirm-accept.blade.php │ │ ├── register-confirm-awaiting.blade.php │ │ ├── register-confirm.blade.php │ │ └── register.blade.php │ ├── books/ │ │ ├── copy.blade.php │ │ ├── create.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── parts/ │ │ │ ├── convert-to-shelf.blade.php │ │ │ ├── form.blade.php │ │ │ ├── index-sidebar-section-actions.blade.php │ │ │ ├── index-sidebar-section-new.blade.php │ │ │ ├── index-sidebar-section-popular.blade.php │ │ │ ├── index-sidebar-section-recents.blade.php │ │ │ ├── list-item.blade.php │ │ │ ├── list.blade.php │ │ │ ├── show-sidebar-section-actions.blade.php │ │ │ ├── show-sidebar-section-activity.blade.php │ │ │ ├── show-sidebar-section-details.blade.php │ │ │ ├── show-sidebar-section-shelves.blade.php │ │ │ ├── show-sidebar-section-tags.blade.php │ │ │ ├── sort-box-actions.blade.php │ │ │ └── sort-box.blade.php │ │ ├── permissions.blade.php │ │ ├── references.blade.php │ │ ├── show.blade.php │ │ └── sort.blade.php │ ├── chapters/ │ │ ├── copy.blade.php │ │ ├── create.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── move.blade.php │ │ ├── parts/ │ │ │ ├── child-menu.blade.php │ │ │ ├── convert-to-book.blade.php │ │ │ ├── form.blade.php │ │ │ ├── list-item.blade.php │ │ │ ├── show-sidebar-section-actions.blade.php │ │ │ ├── show-sidebar-section-details.blade.php │ │ │ └── show-sidebar-section-tags.blade.php │ │ ├── permissions.blade.php │ │ ├── references.blade.php │ │ └── show.blade.php │ ├── comments/ │ │ ├── comment-branch.blade.php │ │ ├── comment.blade.php │ │ ├── comments.blade.php │ │ └── create.blade.php │ ├── common/ │ │ ├── activity-item.blade.php │ │ ├── activity-list.blade.php │ │ ├── confirm-dialog.blade.php │ │ ├── dark-mode-toggle.blade.php │ │ ├── detailed-listing-paginated.blade.php │ │ ├── detailed-listing-with-more.blade.php │ │ ├── loading-icon.blade.php │ │ ├── sort.blade.php │ │ └── status-indicator.blade.php │ ├── entities/ │ │ ├── body-tag-classes.blade.php │ │ ├── book-tree.blade.php │ │ ├── breadcrumb-listing.blade.php │ │ ├── breadcrumbs.blade.php │ │ ├── copy-considerations.blade.php │ │ ├── export-menu.blade.php │ │ ├── favourite-action.blade.php │ │ ├── grid-item.blade.php │ │ ├── icon-link.blade.php │ │ ├── list-basic.blade.php │ │ ├── list-item-basic.blade.php │ │ ├── list-item.blade.php │ │ ├── list.blade.php │ │ ├── meta.blade.php │ │ ├── references.blade.php │ │ ├── search-form.blade.php │ │ ├── search-results.blade.php │ │ ├── selector-popup.blade.php │ │ ├── selector.blade.php │ │ ├── sibling-navigation.blade.php │ │ ├── tag-list.blade.php │ │ ├── tag-manager-list.blade.php │ │ ├── tag-manager.blade.php │ │ ├── tag.blade.php │ │ ├── template-selector.blade.php │ │ ├── view-toggle.blade.php │ │ ├── watch-action.blade.php │ │ └── watch-controls.blade.php │ ├── errors/ │ │ ├── 404.blade.php │ │ ├── 500.blade.php │ │ ├── 503.blade.php │ │ ├── debug.blade.php │ │ └── parts/ │ │ └── not-found-text.blade.php │ ├── exports/ │ │ ├── book.blade.php │ │ ├── chapter.blade.php │ │ ├── import-show.blade.php │ │ ├── import.blade.php │ │ ├── page.blade.php │ │ └── parts/ │ │ ├── book-contents-menu.blade.php │ │ ├── chapter-contents-menu.blade.php │ │ ├── chapter-item.blade.php │ │ ├── custom-head.blade.php │ │ ├── import-item.blade.php │ │ ├── import.blade.php │ │ ├── meta.blade.php │ │ ├── page-item.blade.php │ │ └── styles.blade.php │ ├── form/ │ │ ├── checkbox.blade.php │ │ ├── custom-checkbox.blade.php │ │ ├── date.blade.php │ │ ├── description-html-input.blade.php │ │ ├── editor-translations.blade.php │ │ ├── entity-permissions-row.blade.php │ │ ├── entity-permissions.blade.php │ │ ├── errors.blade.php │ │ ├── image-picker.blade.php │ │ ├── number.blade.php │ │ ├── page-picker.blade.php │ │ ├── password.blade.php │ │ ├── request-query-inputs.blade.php │ │ ├── role-checkboxes.blade.php │ │ ├── role-select.blade.php │ │ ├── simple-dropzone.blade.php │ │ ├── text.blade.php │ │ ├── textarea.blade.php │ │ ├── toggle-switch.blade.php │ │ ├── user-mention-list.blade.php │ │ ├── user-select-list.blade.php │ │ └── user-select.blade.php │ ├── help/ │ │ ├── licenses.blade.php │ │ ├── tinymce.blade.php │ │ └── wysiwyg.blade.php │ ├── home/ │ │ ├── books.blade.php │ │ ├── default.blade.php │ │ ├── parts/ │ │ │ ├── expand-toggle.blade.php │ │ │ └── sidebar.blade.php │ │ ├── shelves.blade.php │ │ └── specific-page.blade.php │ ├── layouts/ │ │ ├── base.blade.php │ │ ├── export.blade.php │ │ ├── parts/ │ │ │ ├── base-body-end.blade.php │ │ │ ├── base-body-start.blade.php │ │ │ ├── custom-head.blade.php │ │ │ ├── custom-styles.blade.php │ │ │ ├── export-body-end.blade.php │ │ │ ├── export-body-start.blade.php │ │ │ ├── footer.blade.php │ │ │ ├── header-links-start.blade.php │ │ │ ├── header-links.blade.php │ │ │ ├── header-logo.blade.php │ │ │ ├── header-search.blade.php │ │ │ ├── header-user-menu.blade.php │ │ │ ├── header.blade.php │ │ │ ├── notifications.blade.php │ │ │ └── skip-to-content.blade.php │ │ ├── plain.blade.php │ │ ├── simple.blade.php │ │ └── tri.blade.php │ ├── mfa/ │ │ ├── backup-codes-generate.blade.php │ │ ├── parts/ │ │ │ ├── setup-method-row.blade.php │ │ │ ├── verify-backup_codes.blade.php │ │ │ └── verify-totp.blade.php │ │ ├── setup.blade.php │ │ ├── totp-generate.blade.php │ │ └── verify.blade.php │ ├── misc/ │ │ ├── opensearch.blade.php │ │ └── robots.blade.php │ ├── pages/ │ │ ├── copy.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── guest-create.blade.php │ │ ├── move.blade.php │ │ ├── parts/ │ │ │ ├── code-editor.blade.php │ │ │ ├── editor-toolbar.blade.php │ │ │ ├── editor-toolbox.blade.php │ │ │ ├── form.blade.php │ │ │ ├── image-manager-form.blade.php │ │ │ ├── image-manager-list.blade.php │ │ │ ├── image-manager.blade.php │ │ │ ├── list-item.blade.php │ │ │ ├── markdown-editor.blade.php │ │ │ ├── page-display.blade.php │ │ │ ├── pointer.blade.php │ │ │ ├── revisions-index-row.blade.php │ │ │ ├── show-sidebar-section-actions.blade.php │ │ │ ├── show-sidebar-section-attachments.blade.php │ │ │ ├── show-sidebar-section-details.blade.php │ │ │ ├── show-sidebar-section-page-nav.blade.php │ │ │ ├── show-sidebar-section-tags.blade.php │ │ │ ├── template-manager-list.blade.php │ │ │ ├── template-manager.blade.php │ │ │ ├── toolbox-comments.blade.php │ │ │ ├── wysiwyg-editor-tinymce.blade.php │ │ │ └── wysiwyg-editor.blade.php │ │ ├── permissions.blade.php │ │ ├── references.blade.php │ │ ├── revision.blade.php │ │ ├── revisions.blade.php │ │ └── show.blade.php │ ├── readme.md │ ├── search/ │ │ ├── all.blade.php │ │ └── parts/ │ │ ├── boolean-filter.blade.php │ │ ├── date-filter.blade.php │ │ ├── entity-selector-list.blade.php │ │ ├── entity-suggestion-list.blade.php │ │ ├── term-list.blade.php │ │ └── type-filter.blade.php │ ├── settings/ │ │ ├── audit.blade.php │ │ ├── categories/ │ │ │ ├── customization.blade.php │ │ │ ├── features.blade.php │ │ │ ├── registration.blade.php │ │ │ └── sorting.blade.php │ │ ├── layout.blade.php │ │ ├── maintenance.blade.php │ │ ├── parts/ │ │ │ ├── footer-links.blade.php │ │ │ ├── navbar.blade.php │ │ │ ├── setting-color-picker.blade.php │ │ │ ├── setting-color-scheme.blade.php │ │ │ └── table-user.blade.php │ │ ├── recycle-bin/ │ │ │ ├── destroy.blade.php │ │ │ ├── index.blade.php │ │ │ ├── parts/ │ │ │ │ ├── deletable-entity-list.blade.php │ │ │ │ ├── entity-display-item.blade.php │ │ │ │ └── recycle-bin-list-item.blade.php │ │ │ └── restore.blade.php │ │ ├── roles/ │ │ │ ├── create.blade.php │ │ │ ├── delete.blade.php │ │ │ ├── edit.blade.php │ │ │ ├── index.blade.php │ │ │ └── parts/ │ │ │ ├── asset-permissions-row.blade.php │ │ │ ├── checkbox.blade.php │ │ │ ├── form.blade.php │ │ │ ├── related-asset-permissions-row.blade.php │ │ │ └── roles-list-item.blade.php │ │ ├── sort-rules/ │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── parts/ │ │ │ ├── form.blade.php │ │ │ ├── operation.blade.php │ │ │ └── sort-rule-list-item.blade.php │ │ └── webhooks/ │ │ ├── create.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ └── parts/ │ │ ├── form.blade.php │ │ ├── format-example.blade.php │ │ └── webhooks-list-item.blade.php │ ├── shelves/ │ │ ├── create.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── parts/ │ │ │ ├── form.blade.php │ │ │ ├── index-sidebar-section-actions.blade.php │ │ │ ├── index-sidebar-section-new.blade.php │ │ │ ├── index-sidebar-section-popular.blade.php │ │ │ ├── index-sidebar-section-recents.blade.php │ │ │ ├── list-item.blade.php │ │ │ ├── list.blade.php │ │ │ ├── shelf-sort-book-item.blade.php │ │ │ ├── show-sidebar-section-actions.blade.php │ │ │ ├── show-sidebar-section-activity.blade.php │ │ │ ├── show-sidebar-section-details.blade.php │ │ │ └── show-sidebar-section-tags.blade.php │ │ ├── permissions.blade.php │ │ ├── references.blade.php │ │ └── show.blade.php │ ├── tags/ │ │ ├── index.blade.php │ │ └── parts/ │ │ └── tags-list-item.blade.php │ ├── users/ │ │ ├── account/ │ │ │ ├── auth.blade.php │ │ │ ├── delete.blade.php │ │ │ ├── layout.blade.php │ │ │ ├── notifications.blade.php │ │ │ ├── parts/ │ │ │ │ └── shortcut-control.blade.php │ │ │ ├── profile.blade.php │ │ │ └── shortcuts.blade.php │ │ ├── api-tokens/ │ │ │ ├── create.blade.php │ │ │ ├── delete.blade.php │ │ │ ├── edit.blade.php │ │ │ └── parts/ │ │ │ ├── form.blade.php │ │ │ └── list.blade.php │ │ ├── create.blade.php │ │ ├── delete.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── parts/ │ │ │ ├── form.blade.php │ │ │ ├── language-option-row.blade.php │ │ │ └── users-list-item.blade.php │ │ └── profile.blade.php │ └── vendor/ │ ├── notifications/ │ │ ├── email-plain.blade.php │ │ └── email.blade.php │ └── pagination/ │ └── default.blade.php ├── routes/ │ ├── api.php │ └── web.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── backups/ │ │ └── .gitignore │ ├── clockwork/ │ │ └── .gitignore │ ├── fonts/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ ├── logs/ │ │ └── .gitignore │ └── uploads/ │ ├── files/ │ │ └── .gitignore │ └── images/ │ └── .gitignore ├── tests/ │ ├── Activity/ │ │ ├── AuditLogApiTest.php │ │ ├── AuditLogTest.php │ │ ├── CommentDisplayTest.php │ │ ├── CommentMentionTest.php │ │ ├── CommentSettingTest.php │ │ ├── CommentStoreTest.php │ │ ├── CommentsApiTest.php │ │ ├── MentionParserTest.php │ │ ├── WatchTest.php │ │ ├── WebhookCallTest.php │ │ ├── WebhookFormatTesting.php │ │ └── WebhookManagementTest.php │ ├── Api/ │ │ ├── ApiAuthTest.php │ │ ├── ApiConfigTest.php │ │ ├── ApiDocsTest.php │ │ ├── ApiListingTest.php │ │ ├── AttachmentsApiTest.php │ │ ├── BooksApiTest.php │ │ ├── ChaptersApiTest.php │ │ ├── ContentPermissionsApiTest.php │ │ ├── ExportsApiTest.php │ │ ├── ImageGalleryApiTest.php │ │ ├── ImportsApiTest.php │ │ ├── PagesApiTest.php │ │ ├── RecycleBinApiTest.php │ │ ├── RolesApiTest.php │ │ ├── SearchApiTest.php │ │ ├── ShelvesApiTest.php │ │ ├── SystemApiTest.php │ │ ├── TestsApi.php │ │ └── UsersApiTest.php │ ├── Auth/ │ │ ├── AuthTest.php │ │ ├── GroupSyncServiceTest.php │ │ ├── LdapTest.php │ │ ├── LoginAutoInitiateTest.php │ │ ├── MfaConfigurationTest.php │ │ ├── MfaVerificationTest.php │ │ ├── OidcTest.php │ │ ├── RegistrationTest.php │ │ ├── ResetPasswordTest.php │ │ ├── Saml2Test.php │ │ ├── SocialAuthTest.php │ │ └── UserInviteTest.php │ ├── Commands/ │ │ ├── AssignSortRuleCommandTest.php │ │ ├── CleanupImagesCommandTest.php │ │ ├── ClearActivityCommandTest.php │ │ ├── ClearRevisionsCommandTest.php │ │ ├── ClearViewsCommandTest.php │ │ ├── CopyShelfPermissionsCommandTest.php │ │ ├── CreateAdminCommandTest.php │ │ ├── DeleteUsersCommandTest.php │ │ ├── InstallModuleCommandTest.php │ │ ├── RefreshAvatarCommandTest.php │ │ ├── RegeneratePermissionsCommandTest.php │ │ ├── RegenerateReferencesCommandTest.php │ │ ├── RegenerateSearchCommandTest.php │ │ ├── ResetMfaCommandTest.php │ │ ├── UpdateUrlCommandTest.php │ │ └── UpgradeDatabaseEncodingCommandTest.php │ ├── CreatesApplication.php │ ├── DebugViewTest.php │ ├── Entity/ │ │ ├── BookShelfTest.php │ │ ├── BookTest.php │ │ ├── ChapterTest.php │ │ ├── ConvertTest.php │ │ ├── CopyTest.php │ │ ├── DefaultTemplateTest.php │ │ ├── EntityAccessTest.php │ │ ├── EntityQueryTest.php │ │ ├── MarkdownToHtmlTest.php │ │ ├── PageContentFilteringTest.php │ │ ├── PageContentTest.php │ │ ├── PageDraftTest.php │ │ ├── PageEditorTest.php │ │ ├── PageRevisionTest.php │ │ ├── PageTemplateTest.php │ │ ├── PageTest.php │ │ ├── SlugTest.php │ │ └── TagTest.php │ ├── ErrorTest.php │ ├── Exports/ │ │ ├── ExportUiTest.php │ │ ├── HtmlExportTest.php │ │ ├── MarkdownExportTest.php │ │ ├── PdfExportTest.php │ │ ├── TextExportTest.php │ │ ├── ZipExportTest.php │ │ ├── ZipExportValidatorTest.php │ │ ├── ZipImportRunnerTest.php │ │ ├── ZipImportTest.php │ │ ├── ZipResultData.php │ │ └── ZipTestHelper.php │ ├── FavouriteTest.php │ ├── Helpers/ │ │ ├── EntityProvider.php │ │ ├── FileProvider.php │ │ ├── OidcJwtHelper.php │ │ ├── PermissionsProvider.php │ │ ├── TestServiceProvider.php │ │ └── UserRoleProvider.php │ ├── HomepageTest.php │ ├── LanguageTest.php │ ├── Meta/ │ │ ├── HelpTest.php │ │ ├── LicensesTest.php │ │ ├── OpenGraphTest.php │ │ ├── OpensearchTest.php │ │ ├── PwaManifestTest.php │ │ └── RobotsTest.php │ ├── Permissions/ │ │ ├── EntityOwnerChangeTest.php │ │ ├── EntityPermissionsTest.php │ │ ├── ExportPermissionsTest.php │ │ ├── RolePermissionsTest.php │ │ └── Scenarios/ │ │ ├── EntityRolePermissionsTest.php │ │ ├── PermissionScenarioTestCase.php │ │ └── RoleContentPermissionsTest.php │ ├── PublicActionTest.php │ ├── References/ │ │ ├── CrossLinkParserTest.php │ │ └── ReferencesTest.php │ ├── Search/ │ │ ├── EntitySearchTest.php │ │ ├── SearchIndexingTest.php │ │ ├── SearchOptionsTest.php │ │ └── SiblingSearchTest.php │ ├── SecurityHeaderTest.php │ ├── SessionTest.php │ ├── Settings/ │ │ ├── CustomHeadContentTest.php │ │ ├── FooterLinksTest.php │ │ ├── PageListLimitsTest.php │ │ ├── RecycleBinTest.php │ │ ├── RegenerateReferencesTest.php │ │ ├── SettingsTest.php │ │ └── TestEmailTest.php │ ├── Sorting/ │ │ ├── BookSortTest.php │ │ ├── MoveTest.php │ │ └── SortRuleTest.php │ ├── StatusTest.php │ ├── TestCase.php │ ├── Theme/ │ │ ├── LogicalThemeEventsTest.php │ │ ├── LogicalThemeTest.php │ │ ├── ThemeModuleTest.php │ │ └── VisualThemeTest.php │ ├── Unit/ │ │ ├── ConfigTest.php │ │ ├── FrameworkAssumptionTest.php │ │ ├── IpFormatterTest.php │ │ ├── OidcIdTokenTest.php │ │ ├── PageIncludeParserTest.php │ │ └── SsrUrlValidatorTest.php │ ├── Uploads/ │ │ ├── AttachmentTest.php │ │ ├── AvatarTest.php │ │ ├── DrawioTest.php │ │ ├── ImageStorageTest.php │ │ └── ImageTest.php │ ├── UrlTest.php │ ├── User/ │ │ ├── RoleManagementTest.php │ │ ├── UserApiTokenTest.php │ │ ├── UserManagementTest.php │ │ ├── UserMyAccountTest.php │ │ ├── UserPreferencesTest.php │ │ ├── UserProfileTest.php │ │ └── UserSearchTest.php │ ├── Util/ │ │ └── DateFormatterTest.php │ └── test-data/ │ ├── animated.avif │ ├── bad-php.base64 │ ├── bad-phtml-png.base64 │ ├── bad-phtml.base64 │ └── test-file.txt ├── themes/ │ └── .gitignore ├── tsconfig.json └── version