diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..1c64b43f67 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,49 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-in-docker +{ + "name": "Halo Dev Container", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/base:bullseye", + + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": { + "version": "20.10", + "enableNonRootDocker": "true", + "moby": "true" + }, + "ghcr.io/devcontainers/features/java:1": { + "version": "17", + "jdkDistro": "tem" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "20" + }, + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "Vue.volar", + "vscodevim.vim", + "shengchen.vscode-checkstyle", + "streetsidesoftware.code-spell-checker", + "vscjava.vscode-gradle", + "vmware.vscode-boot-dev-pack", + "vscjava.vscode-java-pack", + "bradlc.vscode-tailwindcss" + ] + } + } + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "docker --version", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..a910d6332f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + +version: 2 +updates: + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/api/src/main/java/run/halo/app/security/AfterSecurityWebFilter.java b/api/src/main/java/run/halo/app/security/AfterSecurityWebFilter.java new file mode 100644 index 0000000000..c012110403 --- /dev/null +++ b/api/src/main/java/run/halo/app/security/AfterSecurityWebFilter.java @@ -0,0 +1,14 @@ +package run.halo.app.security; + +import org.pf4j.ExtensionPoint; +import org.springframework.web.server.WebFilter; + +/** + * Security web filter for after security. + * + * @author johnniang + * @since 2.18 + */ +public interface AfterSecurityWebFilter extends WebFilter, ExtensionPoint { + +} diff --git a/api/src/main/java/run/halo/app/security/BeforeSecurityWebFilter.java b/api/src/main/java/run/halo/app/security/BeforeSecurityWebFilter.java new file mode 100644 index 0000000000..0bedc3dd88 --- /dev/null +++ b/api/src/main/java/run/halo/app/security/BeforeSecurityWebFilter.java @@ -0,0 +1,14 @@ +package run.halo.app.security; + +import org.pf4j.ExtensionPoint; +import org.springframework.web.server.WebFilter; + +/** + * Security web filter for before security. + * + * @author johnniang + * @since 2.18 + */ +public interface BeforeSecurityWebFilter extends WebFilter, ExtensionPoint { + +} diff --git a/application/build.gradle b/application/build.gradle index 2eb97d2e13..49f404000f 100644 --- a/application/build.gradle +++ b/application/build.gradle @@ -114,10 +114,10 @@ tasks.named('jacocoTestReport', JacocoReport) { } ext.presetPluginUrls = [ - 'https://github.com/halo-dev/plugin-comment-widget/releases/download/v2.3.1/plugin-comment-widget-2.3.1.jar' : 'plugin-comment-widget.jar', - 'https://github.com/halo-dev/plugin-search-widget/releases/download/v1.4.0/plugin-search-widget-1.4.0.jar' : 'plugin-search-widget.jar', - 'https://github.com/halo-dev/plugin-sitemap/releases/download/v1.1.1/plugin-sitemap-1.1.1.jar' : 'plugin-sitemap.jar', - 'https://github.com/halo-dev/plugin-feed/releases/download/v1.2.2/plugin-feed-1.2.2.jar' : 'plugin-feed.jar', + 'https://github.com/halo-dev/plugin-comment-widget/releases/download/v2.4.0/plugin-comment-widget-2.4.0.jar' : 'plugin-comment-widget.jar', + 'https://github.com/halo-dev/plugin-search-widget/releases/download/v1.5.0/plugin-search-widget-1.5.0.jar' : 'plugin-search-widget.jar', + 'https://github.com/halo-dev/plugin-sitemap/releases/download/v1.1.2/plugin-sitemap-1.1.2.jar' : 'plugin-sitemap.jar', + 'https://github.com/halo-dev/plugin-feed/releases/download/v1.3.0/plugin-feed-1.3.0.jar' : 'plugin-feed.jar', // Currently, plugin-app-store is not open source, so we need to download it from the official website. // Please see https://github.com/halo-dev/plugin-app-store/issues/55 diff --git a/application/src/main/java/run/halo/app/search/lucene/LuceneSearchEngine.java b/application/src/main/java/run/halo/app/search/lucene/LuceneSearchEngine.java index 73559980f4..42698cc421 100644 --- a/application/src/main/java/run/halo/app/search/lucene/LuceneSearchEngine.java +++ b/application/src/main/java/run/halo/app/search/lucene/LuceneSearchEngine.java @@ -194,8 +194,11 @@ public SearchResult search(SearchOption option) { } var description = doc.get("description"); - var hlDescription = - highlighter.getBestFragment(this.analyzer, "description", description); + String hlDescription = null; + if (description != null) { + hlDescription = + highlighter.getBestFragment(this.analyzer, "description", description); + } var content = doc.get("content"); var hlContent = highlighter.getBestFragment(this.analyzer, "content", content); @@ -310,7 +313,9 @@ public Document convert(HaloDocument haloDoc) { } doc.add(new TextField("title", haloDoc.getTitle(), YES)); - doc.add(new TextField("description", haloDoc.getDescription(), YES)); + if (haloDoc.getDescription() != null) { + doc.add(new TextField("description", haloDoc.getDescription(), YES)); + } doc.add(new TextField("content", haloDoc.getContent(), YES)); doc.add(new StringField("recycled", Boolean.toString(haloDoc.isRecycled()), YES)); doc.add(new StringField("exposed", Boolean.toString(haloDoc.isExposed()), YES)); @@ -335,7 +340,9 @@ public Document convert(HaloDocument haloDoc) { var creationTimestamp = haloDoc.getCreationTimestamp(); doc.add(new LongField("creationTimestamp", creationTimestamp.toEpochMilli(), YES)); var updateTimestamp = haloDoc.getUpdateTimestamp(); - doc.add(new LongField("updateTimestamp", updateTimestamp.toEpochMilli(), YES)); + if (updateTimestamp != null) { + doc.add(new LongField("updateTimestamp", updateTimestamp.toEpochMilli(), YES)); + } doc.add(new StringField("permalink", haloDoc.getPermalink(), YES)); return doc; } @@ -375,8 +382,11 @@ public HaloDocument convert(Document doc) { var creationTimestamp = doc.getField("creationTimestamp").numericValue().longValue(); haloDoc.setCreationTimestamp(Instant.ofEpochMilli(creationTimestamp)); - var updateTimestamp = doc.getField("updateTimestamp").numericValue().longValue(); - haloDoc.setUpdateTimestamp(Instant.ofEpochMilli(updateTimestamp)); + var updateTimestampField = doc.getField("updateTimestamp"); + if (updateTimestampField != null) { + var updateTimestamp = updateTimestampField.numericValue().longValue(); + haloDoc.setUpdateTimestamp(Instant.ofEpochMilli(updateTimestamp)); + } // handle content later return haloDoc; } diff --git a/application/src/main/java/run/halo/app/search/post/PostHaloDocumentsProvider.java b/application/src/main/java/run/halo/app/search/post/PostHaloDocumentsProvider.java index 2579879d2c..d0100c10e1 100644 --- a/application/src/main/java/run/halo/app/search/post/PostHaloDocumentsProvider.java +++ b/application/src/main/java/run/halo/app/search/post/PostHaloDocumentsProvider.java @@ -2,6 +2,7 @@ import org.springframework.stereotype.Component; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import run.halo.app.content.ContentWrapper; import run.halo.app.content.PostService; import run.halo.app.core.extension.content.Post; @@ -36,6 +37,11 @@ public Flux fetchAll() { // get content return paginatedOperator.list(Post.class, options) .flatMap(post -> postService.getReleaseContent(post) + .switchIfEmpty(Mono.fromSupplier(() -> ContentWrapper.builder() + .content("") + .raw("") + .rawType("") + .build())) .map(contentWrapper -> convert(post, contentWrapper)) ); } diff --git a/application/src/main/java/run/halo/app/security/SecurityWebFiltersConfigurer.java b/application/src/main/java/run/halo/app/security/SecurityWebFiltersConfigurer.java index 0cf5a38fc7..daef125f6a 100644 --- a/application/src/main/java/run/halo/app/security/SecurityWebFiltersConfigurer.java +++ b/application/src/main/java/run/halo/app/security/SecurityWebFiltersConfigurer.java @@ -2,7 +2,9 @@ import static org.springframework.security.config.web.server.SecurityWebFiltersOrder.ANONYMOUS_AUTHENTICATION; import static org.springframework.security.config.web.server.SecurityWebFiltersOrder.AUTHENTICATION; +import static org.springframework.security.config.web.server.SecurityWebFiltersOrder.FIRST; import static org.springframework.security.config.web.server.SecurityWebFiltersOrder.FORM_LOGIN; +import static org.springframework.security.config.web.server.SecurityWebFiltersOrder.LAST; import lombok.Setter; import org.pf4j.ExtensionPoint; @@ -30,7 +32,12 @@ public SecurityWebFiltersConfigurer(ExtensionGetter extensionGetter) { public void configure(ServerHttpSecurity http) { http .addFilterAt( - new SecurityWebFilterChainProxy(FormLoginSecurityWebFilter.class), FORM_LOGIN + new SecurityWebFilterChainProxy(BeforeSecurityWebFilter.class), + FIRST + ) + .addFilterAt( + new SecurityWebFilterChainProxy(FormLoginSecurityWebFilter.class), + FORM_LOGIN ) .addFilterAt( new SecurityWebFilterChainProxy(AuthenticationSecurityWebFilter.class), @@ -39,7 +46,12 @@ public void configure(ServerHttpSecurity http) { .addFilterAt( new SecurityWebFilterChainProxy(AnonymousAuthenticationSecurityWebFilter.class), ANONYMOUS_AUTHENTICATION - ); + ) + .addFilterAt( + new SecurityWebFilterChainProxy(AfterSecurityWebFilter.class), + LAST + ) + ; } public class SecurityWebFilterChainProxy implements WebFilter { diff --git a/application/src/main/java/run/halo/app/security/authentication/rememberme/PersistentTokenBasedRememberMeServices.java b/application/src/main/java/run/halo/app/security/authentication/rememberme/PersistentTokenBasedRememberMeServices.java index f984b35de5..0f8adfcc7f 100644 --- a/application/src/main/java/run/halo/app/security/authentication/rememberme/PersistentTokenBasedRememberMeServices.java +++ b/application/src/main/java/run/halo/app/security/authentication/rememberme/PersistentTokenBasedRememberMeServices.java @@ -112,7 +112,7 @@ protected Mono processAutoLoginCookie(String[] cookieTokens, log.debug("Refreshing persistent login token for user '{}', series '{}'", token.getUsername(), token.getSeries()); var newToken = new PersistentRememberMeToken(token.getUsername(), token.getSeries(), - generateTokenData(), new Date()); + token.getTokenValue(), new Date()); return Mono.just(newToken); }) .flatMap(newToken -> updateToken(newToken) diff --git a/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeAuthenticationFilter.java b/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeAuthenticationFilter.java deleted file mode 100644 index e11d2356fc..0000000000 --- a/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeAuthenticationFilter.java +++ /dev/null @@ -1,36 +0,0 @@ -package run.halo.app.security.authentication.rememberme; - -import lombok.RequiredArgsConstructor; -import org.springframework.lang.NonNull; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextImpl; -import org.springframework.security.web.server.context.ServerSecurityContextRepository; -import org.springframework.web.server.ServerWebExchange; -import org.springframework.web.server.WebFilter; -import org.springframework.web.server.WebFilterChain; -import reactor.core.publisher.Mono; - -@RequiredArgsConstructor -public class RememberMeAuthenticationFilter implements WebFilter { - private final ServerSecurityContextRepository securityContextRepository; - private final RememberMeServices rememberMeServices; - private final RememberMeAuthenticationManager rememberMeAuthenticationManager; - - @Override - @NonNull - public Mono filter(@NonNull ServerWebExchange exchange, @NonNull WebFilterChain chain) { - return securityContextRepository.load(exchange) - .switchIfEmpty(Mono.defer(() -> rememberMeServices.autoLogin(exchange) - .flatMap(rememberMeAuthenticationManager::authenticate) - .flatMap(authentication -> { - var securityContext = new SecurityContextImpl(authentication); - return securityContextRepository.save(exchange, securityContext); - }) - .onErrorResume(AuthenticationException.class, - e -> rememberMeServices.loginFail(exchange) - ) - .then(Mono.empty()) - )) - .then(chain.filter(exchange)); - } -} diff --git a/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeConfigurer.java b/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeConfigurer.java index 57d7a03bf7..97cbc683c1 100644 --- a/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeConfigurer.java +++ b/application/src/main/java/run/halo/app/security/authentication/rememberme/RememberMeConfigurer.java @@ -1,8 +1,12 @@ package run.halo.app.security.authentication.rememberme; +import static org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher.MatchResult; + import lombok.RequiredArgsConstructor; import org.springframework.security.config.web.server.SecurityWebFiltersOrder; import org.springframework.security.config.web.server.ServerHttpSecurity; +import org.springframework.security.core.context.ReactiveSecurityContextHolder; +import org.springframework.security.web.server.authentication.AuthenticationWebFilter; import org.springframework.security.web.server.context.ServerSecurityContextRepository; import org.springframework.stereotype.Component; import run.halo.app.security.authentication.SecurityConfigurer; @@ -10,19 +14,28 @@ @Component @RequiredArgsConstructor public class RememberMeConfigurer implements SecurityConfigurer { + private final RememberMeServices rememberMeServices; + private final ServerSecurityContextRepository securityContextRepository; + private final CookieSignatureKeyResolver cookieSignatureKeyResolver; @Override public void configure(ServerHttpSecurity http) { - http.addFilterAt( - new RememberMeAuthenticationFilter(securityContextRepository, - rememberMeServices, authenticationManager()), - SecurityWebFiltersOrder.AUTHENTICATION); + var authManager = new RememberMeAuthenticationManager(cookieSignatureKeyResolver); + var filter = new AuthenticationWebFilter(authManager); + filter.setSecurityContextRepository(securityContextRepository); + filter.setAuthenticationFailureHandler( + (exchange, exception) -> rememberMeServices.loginFail(exchange.getExchange()) + ); + filter.setServerAuthenticationConverter(rememberMeServices::autoLogin); + filter.setRequiresAuthenticationMatcher( + exchange -> ReactiveSecurityContextHolder.getContext() + .flatMap(securityContext -> MatchResult.notMatch()) + .switchIfEmpty(MatchResult.match()) + ); + http.addFilterAt(filter, SecurityWebFiltersOrder.AUTHENTICATION); } - RememberMeAuthenticationManager authenticationManager() { - return new RememberMeAuthenticationManager(cookieSignatureKeyResolver); - } } diff --git a/application/src/main/java/run/halo/app/security/device/NewDeviceLoginListener.java b/application/src/main/java/run/halo/app/security/device/NewDeviceLoginListener.java index 876d34027b..1a9c23f166 100644 --- a/application/src/main/java/run/halo/app/security/device/NewDeviceLoginListener.java +++ b/application/src/main/java/run/halo/app/security/device/NewDeviceLoginListener.java @@ -1,5 +1,7 @@ package run.halo.app.security.device; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationListener; import org.springframework.lang.NonNull; @@ -25,6 +27,8 @@ @RequiredArgsConstructor public class NewDeviceLoginListener implements ApplicationListener { static final String REASON_TYPE = "new-device-login"; + private static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss O").withZone(ZoneOffset.systemDefault()); private final NotificationCenter notificationCenter; private final NotificationReasonEmitter notificationReasonEmitter; @@ -43,7 +47,8 @@ Mono sendNewDeviceNotification(Device device) { attributes.put("os", device.getStatus().getOs()); attributes.put("browser", device.getStatus().getBrowser()); attributes.put("ipAddress", device.getSpec().getIpAddress()); - attributes.put("loginTime", device.getSpec().getLastAuthenticatedTime()); + attributes.put("loginTime", + DATE_TIME_FORMATTER.format(device.getSpec().getLastAuthenticatedTime())); builder.attributes(attributes) .author(UserIdentity.of(device.getSpec().getPrincipalName())) .subject(Reason.Subject.builder() diff --git a/application/src/main/resources/extensions/notification-templates.yaml b/application/src/main/resources/extensions/notification-templates.yaml index a0b5d65c30..6290a22467 100644 --- a/application/src/main/resources/extensions/notification-templates.yaml +++ b/application/src/main/resources/extensions/notification-templates.yaml @@ -168,7 +168,7 @@ spec: [(${subscriber.displayName})] 你好: 你的 [(${site.title})] 账号被用于在 [(${os})] 的 [(${browser})] 上登录。 - 时间:[(${loginTime})] + 时间:[(${loginTime})] IP 地址:[(${ipAddress})] 如果你知悉上述信息,请忽略此电子邮件。 如果你最近没有使用你的 Halo 账号登录并相信有人可能访问了你的账户,请尽快重设你的密码。 @@ -180,8 +180,8 @@ spec:

-

-

+

+

如果你知悉上述信息,请忽略此电子邮件。

diff --git a/application/src/test/java/run/halo/app/search/lucene/LuceneSearchEngineTest.java b/application/src/test/java/run/halo/app/search/lucene/LuceneSearchEngineTest.java index 46625e558a..4e73d00dc2 100644 --- a/application/src/test/java/run/halo/app/search/lucene/LuceneSearchEngineTest.java +++ b/application/src/test/java/run/halo/app/search/lucene/LuceneSearchEngineTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.assertArg; @@ -160,7 +161,7 @@ void shouldSearch() throws IOException { var gotHaloDoc = result.getHits().get(0); assertEquals("fake-id", gotHaloDoc.getId()); assertEquals("fake-title", gotHaloDoc.getTitle()); - assertEquals("fake-desc", gotHaloDoc.getDescription()); + assertNull(gotHaloDoc.getDescription()); assertEquals("fake-content", gotHaloDoc.getContent()); } @@ -169,13 +170,13 @@ HaloDocument createFakeHaloDoc() { haloDoc.setId("fake-id"); haloDoc.setMetadataName("fake-name"); haloDoc.setTitle("fake-title"); - haloDoc.setDescription("fake-desc"); + haloDoc.setDescription(null); haloDoc.setContent("fake-content"); haloDoc.setType("fake-type"); haloDoc.setOwnerName("fake-owner"); var now = Instant.now(); haloDoc.setCreationTimestamp(now); - haloDoc.setUpdateTimestamp(now); + haloDoc.setUpdateTimestamp(null); haloDoc.setPermalink("/fake-permalink"); haloDoc.setAnnotations(Map.of("fake-anno-key", "fake-anno-value")); return haloDoc; diff --git a/application/src/test/java/run/halo/app/search/post/PostHaloDocumentsProviderTest.java b/application/src/test/java/run/halo/app/search/post/PostHaloDocumentsProviderTest.java index 497816f8a6..1f2771ae84 100644 --- a/application/src/test/java/run/halo/app/search/post/PostHaloDocumentsProviderTest.java +++ b/application/src/test/java/run/halo/app/search/post/PostHaloDocumentsProviderTest.java @@ -56,7 +56,23 @@ void shouldFetchAll() { assertEquals("fake-content", doc.getContent()); }) .verifyComplete(); + } + @Test + void shouldFetchAllIfNoContent() { + var post = createFakePost(); + when(paginatedOperator.list(same(Post.class), any(ListOptions.class))) + .thenReturn(Flux.just(post)); + when(postService.getReleaseContent(post)).thenReturn(Mono.empty()); + provider.fetchAll() + .as(StepVerifier::create) + .assertNext(doc -> { + assertEquals("post.content.halo.run", doc.getType()); + assertEquals("fake-post", doc.getMetadataName()); + assertEquals("post.content.halo.run-fake-post", doc.getId()); + assertEquals("", doc.getContent()); + }) + .verifyComplete(); } Post createFakePost() { diff --git a/docs/extension-points/authentication.md b/docs/extension-points/authentication.md index d471b2b2ed..a97db1b29b 100644 --- a/docs/extension-points/authentication.md +++ b/docs/extension-points/authentication.md @@ -27,6 +27,7 @@ public class MyFormLoginSecurityWebFilter implements FormLoginSecurityWebFilter } ``` + ## 普通认证(Authentication) 示例如下: @@ -41,11 +42,11 @@ import run.halo.app.security.AuthenticationSecurityWebFilter; @Component public class MyAuthenticationSecurityWebFilter implements AuthenticationSecurityWebFilter { - @Override - public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { - // Do your logic here - return chain.filter(exchange); - } + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + // Do your logic here + return chain.filter(exchange); + } } ``` @@ -62,16 +63,56 @@ import run.halo.app.security.AnonymousAuthenticationSecurityWebFilter; @Component public class MyAnonymousAuthenticationSecurityWebFilter - implements AnonymousAuthenticationSecurityWebFilter { + implements AnonymousAuthenticationSecurityWebFilter { + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + // Do your logic here + return chain.filter(exchange); + } +} +``` + +## 前置过滤器(BeforeSecurityWebFilter) + +主要用于在进行认证之前的一些处理。需要注意的是,当前过滤器中无法直接通过 ReactiveSecurityContextHolder 获取 +SecurityContext。示例如下: + +```java +public class MyBeforeSecurityWebFilter implements BeforeSecurityWebFilter { - @Override - public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { - // Do your logic here - return chain.filter(exchange); - } + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + // Do your logic here + return chain.filter(exchange); + } } ``` +## 后置过滤器(AfterSecurityWebFilter) + +主要用于进行认证之后的一些处理。在当前过滤器中,可以通过 ReactiveSecurityContextHolder 获取 SecurityContext。示例如下: + +```java +public class MyAfterSecurityWebFilter implements AfterSecurityWebFilter { + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + return ReactiveSecurityContextHolder.getContext() + .switchIfEmpty(Mono.defer(() -> { + // do something... + return chain.filter(exchange).then(Mono.empty()); + })) + .flatMap(securityContext -> { + // do something... + return chain.filter(exchange); + }); + } +} +``` + +--- + 我们在实现扩展点的时候需要注意:如果当前请求不满足认证条件,请一定要调用 `chain.filter(exchange)`,给其他 filter 留下机会。 后续会根据需求实现其他认证相关的扩展点。 \ No newline at end of file diff --git a/ui/console-src/modules/contents/attachments/AttachmentList.vue b/ui/console-src/modules/contents/attachments/AttachmentList.vue index 1f91f5bda4..ddce83b36f 100644 --- a/ui/console-src/modules/contents/attachments/AttachmentList.vue +++ b/ui/console-src/modules/contents/attachments/AttachmentList.vue @@ -35,9 +35,12 @@ import AttachmentGroupList from "./components/AttachmentGroupList.vue"; import AttachmentListItem from "./components/AttachmentListItem.vue"; import AttachmentPoliciesModal from "./components/AttachmentPoliciesModal.vue"; import AttachmentUploadModal from "./components/AttachmentUploadModal.vue"; +import AttachmentLoading from "./components/AttachmentLoading.vue"; +import AttachmentError from "./components/AttachmentError.vue"; import { useAttachmentControl } from "./composables/use-attachment"; import { useFetchAttachmentGroup } from "./composables/use-attachment-group"; import { useFetchAttachmentPolicy } from "./composables/use-attachment-policy"; +import LazyVideo from "@/components/video/LazyVideo.vue"; const { t } = useI18n(); @@ -526,24 +529,26 @@ onMounted(() => { classes="pointer-events-none object-cover group-hover:opacity-75 transform-gpu" > + + + + +
+ + {{ $t("core.common.status.loading_error") }} + +
+ diff --git a/ui/console-src/modules/contents/attachments/components/AttachmentLoading.vue b/ui/console-src/modules/contents/attachments/components/AttachmentLoading.vue new file mode 100644 index 0000000000..6fd1a05f6d --- /dev/null +++ b/ui/console-src/modules/contents/attachments/components/AttachmentLoading.vue @@ -0,0 +1,7 @@ + diff --git a/ui/package.json b/ui/package.json index c6325d83b9..a3022ddc1b 100644 --- a/ui/package.json +++ b/ui/package.json @@ -63,7 +63,7 @@ "@halo-dev/console-shared": "workspace:*", "@halo-dev/richtext-editor": "workspace:*", "@tanstack/vue-query": "^4.29.1", - "@tiptap/extension-character-count": "^2.4.0", + "@tiptap/extension-character-count": "^2.5.1", "@uppy/core": "^3.11.3", "@uppy/dashboard": "^3.8.3", "@uppy/drag-drop": "^3.1.0", diff --git a/ui/packages/editor/package.json b/ui/packages/editor/package.json index 8f068878d9..e122b8408b 100644 --- a/ui/packages/editor/package.json +++ b/ui/packages/editor/package.json @@ -41,43 +41,43 @@ }, "dependencies": { "@ckpack/vue-color": "^1.5.0", - "@tiptap/core": "^2.4.0", - "@tiptap/extension-blockquote": "^2.4.0", - "@tiptap/extension-bold": "^2.4.0", - "@tiptap/extension-bullet-list": "^2.4.0", - "@tiptap/extension-code": "^2.4.0", - "@tiptap/extension-code-block": "^2.4.0", - "@tiptap/extension-code-block-lowlight": "^2.4.0", - "@tiptap/extension-color": "^2.4.0", - "@tiptap/extension-document": "^2.4.0", - "@tiptap/extension-dropcursor": "^2.4.0", - "@tiptap/extension-hard-break": "^2.4.0", - "@tiptap/extension-heading": "^2.4.0", - "@tiptap/extension-highlight": "^2.4.0", - "@tiptap/extension-history": "^2.4.0", - "@tiptap/extension-horizontal-rule": "^2.4.0", - "@tiptap/extension-image": "^2.4.0", - "@tiptap/extension-italic": "^2.4.0", - "@tiptap/extension-link": "^2.4.0", - "@tiptap/extension-list-item": "^2.4.0", - "@tiptap/extension-list-keymap": "^2.4.0", - "@tiptap/extension-ordered-list": "^2.4.0", - "@tiptap/extension-paragraph": "^2.4.0", - "@tiptap/extension-placeholder": "^2.4.0", - "@tiptap/extension-strike": "^2.4.0", - "@tiptap/extension-subscript": "^2.4.0", - "@tiptap/extension-superscript": "^2.4.0", - "@tiptap/extension-table": "^2.4.0", - "@tiptap/extension-table-row": "^2.4.0", - "@tiptap/extension-task-item": "^2.4.0", - "@tiptap/extension-task-list": "^2.4.0", - "@tiptap/extension-text": "^2.4.0", - "@tiptap/extension-text-align": "^2.4.0", - "@tiptap/extension-text-style": "^2.4.0", - "@tiptap/extension-underline": "^2.4.0", - "@tiptap/pm": "^2.4.0", - "@tiptap/suggestion": "^2.4.0", - "@tiptap/vue-3": "^2.4.0", + "@tiptap/core": "^2.5.1", + "@tiptap/extension-blockquote": "^2.5.1", + "@tiptap/extension-bold": "^2.5.1", + "@tiptap/extension-bullet-list": "^2.5.1", + "@tiptap/extension-code": "^2.5.1", + "@tiptap/extension-code-block": "^2.5.1", + "@tiptap/extension-code-block-lowlight": "^2.5.1", + "@tiptap/extension-color": "^2.5.1", + "@tiptap/extension-document": "^2.5.1", + "@tiptap/extension-dropcursor": "^2.5.1", + "@tiptap/extension-hard-break": "^2.5.1", + "@tiptap/extension-heading": "^2.5.1", + "@tiptap/extension-highlight": "^2.5.1", + "@tiptap/extension-history": "^2.5.1", + "@tiptap/extension-horizontal-rule": "^2.5.1", + "@tiptap/extension-image": "^2.5.1", + "@tiptap/extension-italic": "^2.5.1", + "@tiptap/extension-link": "^2.5.1", + "@tiptap/extension-list-item": "^2.5.1", + "@tiptap/extension-list-keymap": "^2.5.1", + "@tiptap/extension-ordered-list": "^2.5.1", + "@tiptap/extension-paragraph": "^2.5.1", + "@tiptap/extension-placeholder": "^2.5.1", + "@tiptap/extension-strike": "^2.5.1", + "@tiptap/extension-subscript": "^2.5.1", + "@tiptap/extension-superscript": "^2.5.1", + "@tiptap/extension-table": "^2.5.1", + "@tiptap/extension-table-row": "^2.5.1", + "@tiptap/extension-task-item": "^2.5.1", + "@tiptap/extension-task-list": "^2.5.1", + "@tiptap/extension-text": "^2.5.1", + "@tiptap/extension-text-align": "^2.5.1", + "@tiptap/extension-text-style": "^2.5.1", + "@tiptap/extension-underline": "^2.5.1", + "@tiptap/pm": "^2.5.1", + "@tiptap/suggestion": "^2.5.1", + "@tiptap/vue-3": "^2.5.1", "floating-vue": "^5.2.2", "github-markdown-css": "^5.2.0", "highlight.js": "11.8.0", diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index e4c0f9595d..03a9e165b9 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -78,8 +78,8 @@ importers: specifier: ^4.29.1 version: 4.29.1(vue@3.4.27(typescript@5.3.3)) '@tiptap/extension-character-count': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@uppy/core': specifier: ^3.11.3 version: 3.11.3 @@ -453,116 +453,116 @@ importers: specifier: ^1.5.0 version: 1.5.0(vue@3.4.27(typescript@5.4.5)) '@tiptap/core': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/pm@2.5.1) '@tiptap/extension-blockquote': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-bold': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-bullet-list': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-code': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-code-block': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-code-block-lowlight': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/extension-code-block@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/extension-code-block@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-color': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/extension-text-style@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/extension-text-style@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))) '@tiptap/extension-document': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-dropcursor': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-hard-break': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-heading': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-highlight': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-history': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-horizontal-rule': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-image': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-italic': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-link': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-list-item': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-list-keymap': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-ordered-list': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-paragraph': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-placeholder': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-strike': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-subscript': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-superscript': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-table': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-table-row': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-task-item': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/extension-task-list': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-text': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-text-align': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-text-style': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/extension-underline': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) '@tiptap/pm': - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.5.1 + version: 2.5.1 '@tiptap/suggestion': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) '@tiptap/vue-3': - specifier: ^2.4.0 - version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)(vue@3.4.27(typescript@5.4.5)) + specifier: ^2.5.1 + version: 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)(vue@3.4.27(typescript@5.4.5)) floating-vue: specifier: ^5.2.2 version: 5.2.2(vue@3.4.27(typescript@5.4.5)) @@ -3165,12 +3165,6 @@ packages: '@remirror/core-constants@2.0.2': resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} - '@remirror/core-helpers@3.0.0': - resolution: {integrity: sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==} - - '@remirror/types@1.0.1': - resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==} - '@rollup/plugin-alias@3.1.9': resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} engines: {node: '>=8.0.0'} @@ -3617,219 +3611,219 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@2.4.0': - resolution: {integrity: sha512-YJSahk8pkxpCs8SflCZfTnJpE7IPyUWIylfgXM2DefjRQa5DZ+c6sNY0s/zbxKYFQ6AuHVX40r9pCfcqHChGxQ==} + '@tiptap/core@2.5.1': + resolution: {integrity: sha512-dADIUVtiFFzyvbY1podr/fMPiBTU9kzf8LaWHdStpakWwNpgCrrxfK+y79JZ4Eydug3mSi9VD2EkDTmhWq7yCg==} peerDependencies: - '@tiptap/pm': ^2.0.0 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-blockquote@2.4.0': - resolution: {integrity: sha512-nJJy4KsPgQqWTTDOWzFRdjCfG5+QExfZj44dulgDFNh+E66xhamnbM70PklllXJgEcge7xmT5oKM0gKls5XgFw==} + '@tiptap/extension-blockquote@2.5.1': + resolution: {integrity: sha512-cVx5LEoQyz4SvaOi8RljAZPfafzAPOuqclkYGyW4YTSyXjHlIrIEWIxL1d5JNeFUC+5HGLOEfXZ7SFyJk/TUmA==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-bold@2.4.0': - resolution: {integrity: sha512-csnW6hMDEHoRfxcPRLSqeJn+j35Lgtt1YRiOwn7DlS66sAECGRuoGfCvQSPij0TCDp4VCR9if5Sf8EymhnQumQ==} + '@tiptap/extension-bold@2.5.1': + resolution: {integrity: sha512-l660BA/OENJXEgJpe5m3KuAg7Jz1Ee44QFUjQxq+ulvjbnRx/inyJO9If4ZpoD2zA4XUdk7LSZ9P45MxI4XWtQ==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-bubble-menu@2.4.0': - resolution: {integrity: sha512-s99HmttUtpW3rScWq8rqk4+CGCwergNZbHLTkF6Rp6TSboMwfp+rwL5Q/JkcAG9KGLso1vGyXKbt1xHOvm8zMw==} + '@tiptap/extension-bubble-menu@2.5.1': + resolution: {integrity: sha512-v16LgcOcZHNog7xayiv2ZsB03w4UfZGiE9wW/29D/Tck2zdRWuMDVKTiopH8OciKllPECJbGP+bIxVyFAmXdJA==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-bullet-list@2.4.0': - resolution: {integrity: sha512-9S5DLIvFRBoExvmZ+/ErpTvs4Wf1yOEs8WXlKYUCcZssK7brTFj99XDwpHFA29HKDwma5q9UHhr2OB2o0JYAdw==} + '@tiptap/extension-bullet-list@2.5.1': + resolution: {integrity: sha512-hgRCN2AkKbVYeEQ4fyHiYSd2vzyilYfKHomBA21hRsEJ35y+QJ0XRsEQlDjWNVVND8LGbhMWCVY4KN+xZNMXTg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-character-count@2.4.0': - resolution: {integrity: sha512-IA3Fubvag5N/7m2xS/T8D1nH26UyebBL9CtZ3/4de4faKgvDQLlILsSI2Hefi7j7rUCYCYzgF2S0Gny+Z76ulw==} + '@tiptap/extension-character-count@2.5.1': + resolution: {integrity: sha512-bJ1/N7EYcJAct7f4CHto51HKbHYc5bIkEZ77YD9F9emNMqYTLio8q9Y7iV2a7piECSjEPWr7TIbxNvzBkEz8Zg==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-code-block-lowlight@2.4.0': - resolution: {integrity: sha512-j0SdFq66A97Cn7bQOMqFYBaYsmOltZZ6o4uDZH6fdTvEFbfXTdtTYs2awsNSbW+w/DtivKZCvAX1FRLR3/g/5A==} + '@tiptap/extension-code-block-lowlight@2.5.1': + resolution: {integrity: sha512-iP2WqtSjKaCQVYWCCoL0JsjHhBFyK41wxoDomfbDgC4/NpcQP8xF1ooUWXZ3BRx33gcDSgPosCBBVuOTjR59Ew==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/extension-code-block': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/extension-code-block': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-code-block@2.4.0': - resolution: {integrity: sha512-QWGdv1D56TBGbbJSj2cIiXGJEKguPiAl9ONzJ/Ql1ZksiQsYwx0YHriXX6TOC//T4VIf6NSClHEtwtxWBQ/Csg==} + '@tiptap/extension-code-block@2.5.1': + resolution: {integrity: sha512-NlmThqc4mU9n9wsBRVbmTsJ+SrwueV/DzjEElJ/y8c9hDHnc6Z1SLMOF7OwdajO46E4LaFFH+p/PqU1fhirMqA==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-code@2.4.0': - resolution: {integrity: sha512-wjhBukuiyJMq4cTcK3RBTzUPV24k5n1eEPlpmzku6ThwwkMdwynnMGMAmSF3fErh3AOyOUPoTTjgMYN2d10SJA==} + '@tiptap/extension-code@2.5.1': + resolution: {integrity: sha512-taY1P12LeKpMUkv2LHwpM38zhpSqKhvqomSGHZPZd/IhaBlFRVOnGqZ3xc/KmoWH/CjsXKHSO9zMutNWsVCI1w==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-color@2.4.0': - resolution: {integrity: sha512-aVuqGtzTIZO93niADdu+Hx8g03X0pS7wjrJcCcYkkDEbC/siC03zlxKZIYBW1Jiabe99Z7/s2KdtLoK6DW2A2g==} + '@tiptap/extension-color@2.5.1': + resolution: {integrity: sha512-vg0MxSxH5+WWzjS/fI5iOLGqLnhv5Y0/j2I88WFTGzq19lXWASyPZ5/Dg9NMzbmOkEbeQk2uwoiCtwcSuDPhcQ==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/extension-text-style': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/extension-text-style': ^2.5.1 - '@tiptap/extension-document@2.4.0': - resolution: {integrity: sha512-3jRodQJZDGbXlRPERaloS+IERg/VwzpC1IO6YSJR9jVIsBO6xC29P3cKTQlg1XO7p6ZH/0ksK73VC5BzzTwoHg==} + '@tiptap/extension-document@2.5.1': + resolution: {integrity: sha512-0qi2qoxFAsjM4SKk2352JsImZ2riUnZ4iK5j44dZZaqF7EJg33g4+S6zlXWW40b/zvr8XHQvPR9nk5++yvFLtw==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-dropcursor@2.4.0': - resolution: {integrity: sha512-c46HoG2PEEpSZv5rmS5UX/lJ6/kP1iVO0Ax+6JrNfLEIiDULUoi20NqdjolEa38La2VhWvs+o20OviiTOKEE9g==} + '@tiptap/extension-dropcursor@2.5.1': + resolution: {integrity: sha512-767+6nr6JDQ7TfazvklW7hPvMrfiWrzLMOWTzObyMmHnTz3bnARnTfnh37dudSofXOAIblhb5TVsFXlDl/BwUw==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-floating-menu@2.4.0': - resolution: {integrity: sha512-vLb9v+htbHhXyty0oaXjT3VC8St4xuGSHWUB9GuAJAQ+NajIO6rBPbLUmm9qM0Eh2zico5mpSD1Qtn5FM6xYzg==} + '@tiptap/extension-floating-menu@2.5.1': + resolution: {integrity: sha512-1Qx5J7vVnZsZV6txQbgMmSRm3/b37UNRY8JLsRCrLDTmDioWjpTiLkXnAeSKxvcDZcFst3eTR6qmnKj7qr2j6g==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-hard-break@2.4.0': - resolution: {integrity: sha512-3+Z6zxevtHza5IsDBZ4lZqvNR3Kvdqwxq/QKCKu9UhJN1DUjsg/l1Jn2NilSQ3NYkBYh2yJjT8CMo9pQIu776g==} + '@tiptap/extension-hard-break@2.5.1': + resolution: {integrity: sha512-sgiygQV7SXu+aMQTP0io49MbX6Ky+iFNSV3gerOstULxMhVRiXa2UxDGFqw0IYd9CVkzLV+zRhdZ/Wjnaqe2FQ==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-heading@2.4.0': - resolution: {integrity: sha512-fYkyP/VMo7YHO76YVrUjd95Qeo0cubWn/Spavmwm1gLTHH/q7xMtbod2Z/F0wd6QHnc7+HGhO7XAjjKWDjldaw==} + '@tiptap/extension-heading@2.5.1': + resolution: {integrity: sha512-yo3N/J6TuFfOwvcX/5xHq3MTcjYWT+lnzjPdQYn0DnHOieW71q36iIN+RbqDwMp1bLLbT4xXfr3hFRCaQ8j5tg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-highlight@2.4.0': - resolution: {integrity: sha512-p2I/CaMrs6hzpj/dSw6UNobOWTV38yTjPK+B4ShJQ7IN2u/C82KOTOeFfJoFd9KykmpVOVW3w3nKG3ad0HXPuQ==} + '@tiptap/extension-highlight@2.5.1': + resolution: {integrity: sha512-y1f/GeF8+MQWVDT2OLvDawG9tLJ8poMSxkX5/N7ie5LRqG6qWAla6fBDxc8b9G+4hNDVF/7/5OKgm5R3eFDbSA==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-history@2.4.0': - resolution: {integrity: sha512-gr5qsKAXEVGr1Lyk1598F7drTaEtAxqZiuuSwTCzZzkiwgEQsWMWTWc9F8FlneCEaqe1aIYg6WKWlmYPaFwr0w==} + '@tiptap/extension-history@2.5.1': + resolution: {integrity: sha512-A70g5ufBszSZAukK6xO6yl7v4Q663yaXlG/FSMDGxt7y3880iZgtz/i0gcoM+z4aonzqyzirPcPWUT8mXFSlFA==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-horizontal-rule@2.4.0': - resolution: {integrity: sha512-yDgxy+YxagcEsBbdWvbQiXYxsv3noS1VTuGwc9G7ZK9xPmBHJ5y0agOkB7HskwsZvJHoaSqNRsh7oZTkf0VR3g==} + '@tiptap/extension-horizontal-rule@2.5.1': + resolution: {integrity: sha512-VPWexBUHADcn8jm6ZIvwIw4e+VW8w4xiZ49YPt40tMpTVe17Yg3Jec5yaPkhzhVip3wXzvTPApHzAttf5GR1uw==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-image@2.4.0': - resolution: {integrity: sha512-NIVhRPMO/ONo8OywEd+8zh0Q6Q7EbFHtBxVsvfOKj9KtZkaXQfUO4MzONTyptkvAchTpj9pIzeaEY5fyU87gFA==} + '@tiptap/extension-image@2.5.1': + resolution: {integrity: sha512-TJe957mVXb76wxf1iClmuR3osK+q4gA3BxxKDjXlgWR8vJK6m/hpQASKD/m73g3kbwDu6gcSRi8L1T7pcKN5sQ==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-italic@2.4.0': - resolution: {integrity: sha512-aaW/L9q+KNHHK+X73MPloHeIsT191n3VLd3xm6uUcFDnUNvzYJ/q65/1ZicdtCaOLvTutxdrEvhbkrVREX6a8g==} + '@tiptap/extension-italic@2.5.1': + resolution: {integrity: sha512-AoN4DDo+FaSvEq2zT4KEWfGJRAZS1+N83E1WbUC7OoOQb1nTrmjp6J4AtJpcx8w46VSJVLpfaZ3vFzeYnn39eA==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-link@2.4.0': - resolution: {integrity: sha512-r3PjT0bjSKAorHAEBPA0icSMOlqALbxVlWU9vAc+Q3ndzt7ht0CTPNewzFF9kjzARABVt1cblXP/2+c0qGzcsg==} + '@tiptap/extension-link@2.5.1': + resolution: {integrity: sha512-Pl8U5zcWzAUs7MwVewqw48EJrEuW1kxmVy06o7uuXiDIf4SjpdcnhuNrjV+4sOxm3bFVMn4kF7WBM9TvJdCqLg==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-list-item@2.4.0': - resolution: {integrity: sha512-reUVUx+2cI2NIAqMZhlJ9uK/+zvRzm1GTmlU2Wvzwc7AwLN4yemj6mBDsmBLEXAKPvitfLh6EkeHaruOGymQtg==} + '@tiptap/extension-list-item@2.5.1': + resolution: {integrity: sha512-sw/7s7YEwuKawNH2I+4GxIesbAdeIO/lQSfqhrcE2kJZL8+36bfGiRqMrgAbi9aMTpkXXxPBVXj25Ag4cI3fZg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-list-keymap@2.4.0': - resolution: {integrity: sha512-xWhBvJJW4gpDU0EJ6LjQQrI6ZXE1+0M2i5yJhPCZ0z88z+Ul3+GFy86r7Joh6Ugt3ATsGyZ4RiMXgFCL95Nhjw==} + '@tiptap/extension-list-keymap@2.5.1': + resolution: {integrity: sha512-sGm9baTRRwBYNJ+fKFFO9yerSef2rW0ijlCnOYteS4kJsmkslm7fTy6oPOO9LwWPMSTHbIHoE6d+2dsVC2JzVg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-ordered-list@2.4.0': - resolution: {integrity: sha512-Zo0c9M0aowv+2+jExZiAvhCB83GZMjZsxywmuOrdUbq5EGYKb7q8hDyN3hkrktVHr9UPXdPAYTmLAHztTOHYRA==} + '@tiptap/extension-ordered-list@2.5.1': + resolution: {integrity: sha512-Cu9zdhmMZY7TWhSVYgFp2i5YSST4MkbuKtLerT8GR4mk8ANTVCh2nk8PBwRYlQcqb6cDPSUzpx98D0KJiYuAVQ==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-paragraph@2.4.0': - resolution: {integrity: sha512-+yse0Ow67IRwcACd9K/CzBcxlpr9OFnmf0x9uqpaWt1eHck1sJnti6jrw5DVVkyEBHDh/cnkkV49gvctT/NyCw==} + '@tiptap/extension-paragraph@2.5.1': + resolution: {integrity: sha512-P32trxWQcYogDEGxBQ1YKGjM92zd4h8KceZPr8xjeux5HE5WFJJLYZqIx0wgIm/0/rNl1HKDmoC1Ds9Ss1z+6A==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-placeholder@2.4.0': - resolution: {integrity: sha512-SmWOjgWpmhFt0BPOnL65abCUH0wS5yksUJgtANn5bQoHF4HFSsyl7ETRmgf0ykxdjc7tzOg31FfpWVH4wzKSYg==} + '@tiptap/extension-placeholder@2.5.1': + resolution: {integrity: sha512-5EoPVB39hma2EQBhtgqdzv3J9UN6DSESA1SVF67yQJlU8YEj1UwwVBM7+tCaiLVbvnFXKatnkX9C9LuBo8NATQ==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-strike@2.4.0': - resolution: {integrity: sha512-pE1uN/fQPOMS3i+zxPYMmPmI3keubnR6ivwM+KdXWOMnBiHl9N4cNpJgq1n2eUUGKLurC2qrQHpnVyGAwBS6Vg==} + '@tiptap/extension-strike@2.5.1': + resolution: {integrity: sha512-Z0n8DP/IMVHxG0iOG/fH7xsAT7xhTETVYTPGiVCoHnlXdrQGhOE1A30fFp3XOn4KSsr0rtXBrEodDyAGdON8Ag==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-subscript@2.4.0': - resolution: {integrity: sha512-exLSmSFmYN6AVww5oyroFL3KCwstT0U+ojvVhRD6DQ+Hc81d++lBKANfsWAcllXjZVGPWeMNdE66bV7oFCtQcQ==} + '@tiptap/extension-subscript@2.5.1': + resolution: {integrity: sha512-BeyVb7lJKg9988Aj98V3OuCdNl/dlJJLZ2sjzTqlgiNfnAnp5g1pkdE03sQUOHeITVoNAf6msOO0y98CLf4yIA==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-superscript@2.4.0': - resolution: {integrity: sha512-s+GsbbERNQCn/hyaw5/82y3wHQ7o5byc/eFAKYo1p3p5eESlDaHY/xVYPt3CGOX2TJWZalgSFEFqBVdTSI8mUQ==} + '@tiptap/extension-superscript@2.5.1': + resolution: {integrity: sha512-5qP9/6jPLfDV+XWZl+KmO1UE2aZpGkKbjrL9IK7oisO80SLJpugrYPlOH7PJdhAKySurIbnpWtc/24KXfvn8Dg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-table-row@2.4.0': - resolution: {integrity: sha512-K4FDI4YzyLWZbhIZYYL15uqs6M3QsPZGTpTdkSaxcKMLholcskDSHhJmySxnrjI0+JNAtyIiqlWBfA1/9Zyhng==} + '@tiptap/extension-table-row@2.5.1': + resolution: {integrity: sha512-xBNIJEIo5gpYd/e8Ek0RhPAZui0fFFF8MfOBrQB1xGR5/129S+q3b72Mvl/MaqR3VgfGp3FG8PkQv14pkcsUYA==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-table@2.4.0': - resolution: {integrity: sha512-ceIUnPSqVCb+qC0XZSgApoG3dL3MRvWrGl1nIMxEqPgMsD/MP6MsYV1Lx/GmtdUlEEsV1624cGTBiRzeCuWkZA==} + '@tiptap/extension-table@2.5.1': + resolution: {integrity: sha512-oJ2smhnzdvdMeC6Ioe07GAp+cjuo0cF73VUtiHWJrfSyDOlRDnxI2JpRI65wTGyefKi3ydqykqE2fRZfFL+ngQ==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-task-item@2.4.0': - resolution: {integrity: sha512-x40vdHnmDiBbA2pjWR/92wVGb6jT13Nk2AhRUI/oP/r4ZGKpTypoB7heDnvLBgH0Y5a51dFqU+G1SFFL30u5uA==} + '@tiptap/extension-task-item@2.5.1': + resolution: {integrity: sha512-A9UyOw1ZrEMPHQknoHdB/4NDd3CpAhTMTFAacCSH1oLF+eXM5r8zO0ATSYU4bRxUpEIfnFxkoZS6g/scQqsPXA==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/extension-task-list@2.4.0': - resolution: {integrity: sha512-vmUB3wEJU81QbiHUygBlselQW8YIW8/85UTwANvWx8+KEWyM7EUF4utcm5R2UobIprIcWb4hyVkvW/5iou25gg==} + '@tiptap/extension-task-list@2.5.1': + resolution: {integrity: sha512-cQI/U3U5YJbTc+8hSVjD8Jhqjwc/8BaIfHA8fXEk8jxGid42AcBUzlYUZ10JNwjtA6ojsW7Dwrb0meIFnQGVjg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-text-align@2.4.0': - resolution: {integrity: sha512-wpRe2OiLXTK4kTy4RZEPnPjFbK16kYHPAx1552hLXrOdyxbS7Sdbo+w4x7aGLLZZqZdudCFfkdtnqrc7PDVZdA==} + '@tiptap/extension-text-align@2.5.1': + resolution: {integrity: sha512-FAv3vM8WeyRFLcX+mjIXUuzvap/Pk/PGPKTPVFxlNmzCz5HMr98gca9jOVgcXlS9k4oTn+3AMl/8opD4uVSxWg==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-text-style@2.4.0': - resolution: {integrity: sha512-H0uPWeZ4sXz3o836TDWnpd38qClqzEM2d6QJ9TK+cQ1vE5Gp8wQ5W4fwUV1KAHzpJKE/15+BXBjLyVYQdmXDaQ==} + '@tiptap/extension-text-style@2.5.1': + resolution: {integrity: sha512-RPAkeK4Q3EvAxpzTZ/Az5tK2lyjVngeq8GP1cyjIC2VrHZfcOSJfWiIANfSxHwP7eDKK6Id3DXVi6EKcxGDgcw==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-text@2.4.0': - resolution: {integrity: sha512-LV0bvE+VowE8IgLca7pM8ll7quNH+AgEHRbSrsI3SHKDCYB9gTHMjWaAkgkUVaO1u0IfCrjnCLym/PqFKa+vvg==} + '@tiptap/extension-text@2.5.1': + resolution: {integrity: sha512-YSFKFe9FCwNKQDf78i1k4JrYGbONAPsulbrGL8dCT43rgnEJoj4w6ba+pmUpqlMvcsP9ZV99o7Oo5v6syNpjgQ==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/extension-underline@2.4.0': - resolution: {integrity: sha512-guWojb7JxUwLz4OKzwNExJwOkhZjgw/ttkXCMBT0PVe55k998MMYe1nvN0m2SeTW9IxurEPtScH4kYJ0XuSm8Q==} + '@tiptap/extension-underline@2.5.1': + resolution: {integrity: sha512-pC2QVJgTCshk33iTvk2xjJWo3rodRG0AqNC5CLDjcCEHqaCYRpXvHSPvsZidfqa30mH0X0nyjdeSlyXftvPKgw==} peerDependencies: - '@tiptap/core': ^2.0.0 + '@tiptap/core': ^2.5.1 - '@tiptap/pm@2.4.0': - resolution: {integrity: sha512-B1HMEqGS4MzIVXnpgRZDLm30mxDWj51LkBT/if1XD+hj5gm8B9Q0c84bhvODX6KIs+c6z+zsY9VkVu8w9Yfgxg==} + '@tiptap/pm@2.5.1': + resolution: {integrity: sha512-ZugyzyKV30QLHg+BPZs4+Bq8x2phk9Ncd9odumGkVeyxVbX/wV5ittqg2kDniwo+w4DsVkVFcgLyUH/Yxh67IQ==} - '@tiptap/suggestion@2.4.0': - resolution: {integrity: sha512-6dCkjbL8vIzcLWtS6RCBx0jlYPKf2Beuyq5nNLrDDZZuyJow5qJAY0eGu6Xomp9z0WDK/BYOxT4hHNoGMDkoAg==} + '@tiptap/suggestion@2.5.1': + resolution: {integrity: sha512-ZRgkytfaIvkPnCYW5R8U0GVsJXdb/DlViMOKZihP6s53ZK0xJOoNbnOoodH5dC9SnnGXeYej44Dn6snoXF825g==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 - '@tiptap/vue-3@2.4.0': - resolution: {integrity: sha512-NCw1Y4ScIrMCKC9YlepUHSAB8jq/PQ2f+AbZKh5bY2t/kMSJYLCJVHq9NFzG4TQtktgMGWCcEQVcDJ7YNpsfxw==} + '@tiptap/vue-3@2.5.1': + resolution: {integrity: sha512-x5g0IiJqPmlO6S4nXMnx0sKKLUu3dcOwR0+GBHOChmJ+nYO81l1yHAdK/wg544tez72i3cNUfc7TMrCadDzzkg==} peerDependencies: - '@tiptap/core': ^2.0.0 - '@tiptap/pm': ^2.0.0 + '@tiptap/core': ^2.5.1 + '@tiptap/pm': ^2.5.1 vue: ^3.0.0 '@tootallnate/once@2.0.0': @@ -3995,12 +3989,6 @@ packages: '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - '@types/object.omit@3.0.0': - resolution: {integrity: sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==} - - '@types/object.pick@1.3.2': - resolution: {integrity: sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==} - '@types/pretty-hrtime@1.0.3': resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} @@ -4049,9 +4037,6 @@ packages: '@types/sortablejs@1.15.8': resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} - '@types/throttle-debounce@2.1.0': - resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} - '@types/tough-cookie@4.0.2': resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} @@ -5000,10 +4985,6 @@ packages: caniuse-lite@1.0.30001620: resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==} - case-anything@2.1.13: - resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} - engines: {node: '>=12.13'} - caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -5357,9 +5338,6 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - dash-get@1.0.2: - resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} - dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} @@ -6856,10 +6834,6 @@ packages: is-expression@4.0.0: resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} - is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -7528,9 +7502,6 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -7929,14 +7900,6 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.omit@3.0.0: - resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} - engines: {node: '>=0.10.0'} - - object.pick@1.3.0: - resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} - engines: {node: '>=0.10.0'} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -8458,8 +8421,8 @@ packages: prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} - prosemirror-history@1.3.2: - resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + prosemirror-history@1.4.1: + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} prosemirror-inputrules@1.4.0: resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} @@ -8467,39 +8430,39 @@ packages: prosemirror-keymap@1.2.2: resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - prosemirror-markdown@1.12.0: - resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} + prosemirror-markdown@1.13.0: + resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} prosemirror-menu@1.2.4: resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} - prosemirror-model@1.19.4: - resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} + prosemirror-model@1.22.1: + resolution: {integrity: sha512-gMrxal+F3higDFxCkBK5iQXckRVYvIu/3dopERJ6b20xfwZ9cbYvQvuldqaN+v/XytNPGyURYUpUU23kBRxWCQ==} - prosemirror-schema-basic@1.2.2: - resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} + prosemirror-schema-basic@1.2.3: + resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} - prosemirror-schema-list@1.3.0: - resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} + prosemirror-schema-list@1.4.1: + resolution: {integrity: sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==} prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} - prosemirror-tables@1.3.5: - resolution: {integrity: sha512-JSZ2cCNlApu/ObAhdPyotrjBe2cimniniTpz60YXzbL0kZ+47nEYk2LWbfKU2lKpBkUNquta2PjteoNi4YCluQ==} + prosemirror-tables@1.3.7: + resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} - prosemirror-trailing-node@2.0.7: - resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==} + prosemirror-trailing-node@2.0.8: + resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 prosemirror-state: ^1.4.2 prosemirror-view: ^1.31.2 - prosemirror-transform@1.8.0: - resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} + prosemirror-transform@1.9.0: + resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} - prosemirror-view@1.33.1: - resolution: {integrity: sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==} + prosemirror-view@1.33.8: + resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -9544,10 +9507,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - throttleit@1.0.0: resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} @@ -10153,8 +10112,8 @@ packages: vue-component-type-helpers@2.0.19: resolution: {integrity: sha512-cN3f1aTxxKo4lzNeQAkVopswuImUrb5Iurll9Gaw5cqpnbTAxtEMM1mgi6ou4X79OCyqYv1U1mzBHJkzmiK82w==} - vue-component-type-helpers@2.0.24: - resolution: {integrity: sha512-Jr5N8QVYEcbQuMN1LRgvg61758G8HTnzUlQsAFOxx6Y6X8kmhJ7C+jOvWsQruYxi3uHhhS6BghyRlyiwO99DBg==} + vue-component-type-helpers@2.0.26: + resolution: {integrity: sha512-sO9qQ8oC520SW6kqlls0iqDak53gsTVSrYylajgjmkt1c0vcgjsGSy1KzlDrbEx8pm02IEYhlUkU5hCYf8rwtg==} vue-demi@0.13.11: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} @@ -13704,26 +13663,6 @@ snapshots: '@remirror/core-constants@2.0.2': {} - '@remirror/core-helpers@3.0.0': - dependencies: - '@remirror/core-constants': 2.0.2 - '@remirror/types': 1.0.1 - '@types/object.omit': 3.0.0 - '@types/object.pick': 1.3.2 - '@types/throttle-debounce': 2.1.0 - case-anything: 2.1.13 - dash-get: 1.0.2 - deepmerge: 4.3.1 - fast-deep-equal: 3.1.3 - make-error: 1.3.6 - object.omit: 3.0.0 - object.pick: 1.3.0 - throttle-debounce: 3.0.1 - - '@remirror/types@1.0.1': - dependencies: - type-fest: 2.19.0 - '@rollup/plugin-alias@3.1.9(rollup@2.79.1)': dependencies: rollup: 2.79.1 @@ -14548,7 +14487,7 @@ snapshots: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.4.27(typescript@5.4.5) - vue-component-type-helpers: 2.0.24 + vue-component-type-helpers: 2.0.26 transitivePeerDependencies: - encoding - supports-color @@ -14607,203 +14546,203 @@ snapshots: '@babel/runtime': 7.19.0 '@testing-library/dom': 8.20.1 - '@tiptap/core@2.4.0(@tiptap/pm@2.4.0)': + '@tiptap/core@2.5.1(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/pm': 2.4.0 + '@tiptap/pm': 2.5.1 - '@tiptap/extension-blockquote@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-blockquote@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-bold@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-bold@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-bubble-menu@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-bubble-menu@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 tippy.js: 6.3.7 - '@tiptap/extension-bullet-list@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-bullet-list@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-character-count@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-character-count@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-code-block-lowlight@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/extension-code-block@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-code-block-lowlight@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/extension-code-block@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/extension-code-block': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/extension-code-block': 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-code-block@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-code-block@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-code@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-code@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-color@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/extension-text-style@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)))': + '@tiptap/extension-color@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/extension-text-style@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/extension-text-style': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0)) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/extension-text-style': 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1)) - '@tiptap/extension-document@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-document@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-dropcursor@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-dropcursor@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-floating-menu@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-floating-menu@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 tippy.js: 6.3.7 - '@tiptap/extension-hard-break@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-hard-break@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-heading@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-heading@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-highlight@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-highlight@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-history@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-history@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-horizontal-rule@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-horizontal-rule@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-image@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-image@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-italic@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-italic@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-link@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 linkifyjs: 4.1.3 - '@tiptap/extension-list-item@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-list-item@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-list-keymap@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-list-keymap@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-ordered-list@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-ordered-list@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-paragraph@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-paragraph@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-placeholder@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-placeholder@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-strike@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-strike@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-subscript@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-subscript@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-superscript@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-superscript@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-table-row@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-table-row@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-table@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-table@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-task-item@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/extension-task-item@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/extension-task-list@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-task-list@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-text-align@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-text-align@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-text-style@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-text-style@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-text@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-text@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/extension-underline@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))': + '@tiptap/extension-underline@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) - '@tiptap/pm@2.4.0': + '@tiptap/pm@2.5.1': dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.3.2 + prosemirror-history: 1.4.1 prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 - prosemirror-markdown: 1.12.0 + prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.19.4 - prosemirror-schema-basic: 1.2.2 - prosemirror-schema-list: 1.3.0 + prosemirror-model: 1.22.1 + prosemirror-schema-basic: 1.2.3 + prosemirror-schema-list: 1.4.1 prosemirror-state: 1.4.3 - prosemirror-tables: 1.3.5 - prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.1) - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-tables: 1.3.7 + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.22.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.8 - '@tiptap/suggestion@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)': + '@tiptap/suggestion@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 - '@tiptap/vue-3@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0)(vue@3.4.27(typescript@5.4.5))': + '@tiptap/vue-3@2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1)(vue@3.4.27(typescript@5.4.5))': dependencies: - '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) - '@tiptap/extension-bubble-menu': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) - '@tiptap/extension-floating-menu': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))(@tiptap/pm@2.4.0) - '@tiptap/pm': 2.4.0 + '@tiptap/core': 2.5.1(@tiptap/pm@2.5.1) + '@tiptap/extension-bubble-menu': 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) + '@tiptap/extension-floating-menu': 2.5.1(@tiptap/core@2.5.1(@tiptap/pm@2.5.1))(@tiptap/pm@2.5.1) + '@tiptap/pm': 2.5.1 vue: 3.4.27(typescript@5.4.5) '@tootallnate/once@2.0.0': {} @@ -14977,10 +14916,6 @@ snapshots: '@types/normalize-package-data@2.4.1': {} - '@types/object.omit@3.0.0': {} - - '@types/object.pick@1.3.2': {} - '@types/pretty-hrtime@1.0.3': {} '@types/prop-types@15.7.11': {} @@ -15026,8 +14961,6 @@ snapshots: '@types/sortablejs@1.15.8': {} - '@types/throttle-debounce@2.1.0': {} - '@types/tough-cookie@4.0.2': {} '@types/trusted-types@2.0.7': {} @@ -16240,8 +16173,6 @@ snapshots: caniuse-lite@1.0.30001620: {} - case-anything@2.1.13: {} - caseless@0.12.0: {} chai@4.3.7: @@ -16652,8 +16583,6 @@ snapshots: untildify: 4.0.0 yauzl: 2.10.0 - dash-get@1.0.2: {} - dashdash@1.14.1: dependencies: assert-plus: 1.0.0 @@ -18444,10 +18373,6 @@ snapshots: acorn: 7.4.1 object-assign: 4.1.1 - is-extendable@1.0.1: - dependencies: - is-plain-object: 2.0.4 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -19148,8 +19073,6 @@ snapshots: dependencies: semver: 6.3.1 - make-error@1.3.6: {} - makeerror@1.0.12: dependencies: tmpl: 1.0.5 @@ -19500,14 +19423,6 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 - object.omit@3.0.0: - dependencies: - is-extendable: 1.0.1 - - object.pick@1.3.0: - dependencies: - isobject: 3.0.1 - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -20009,7 +19924,7 @@ snapshots: prosemirror-changeset@2.2.1: dependencies: - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-collab@1.3.1: dependencies: @@ -20017,98 +19932,97 @@ snapshots: prosemirror-commands@1.5.2: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-dropcursor@1.8.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.8 prosemirror-gapcursor@1.3.2: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.1 + prosemirror-view: 1.33.8 - prosemirror-history@1.3.2: + prosemirror-history@1.4.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.8 rope-sequence: 1.3.3 prosemirror-inputrules@1.4.0: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-keymap@1.2.2: dependencies: prosemirror-state: 1.4.3 w3c-keyname: 2.2.6 - prosemirror-markdown@1.12.0: + prosemirror-markdown@1.13.0: dependencies: markdown-it: 14.0.0 - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-menu@1.2.4: dependencies: crelt: 1.0.5 prosemirror-commands: 1.5.2 - prosemirror-history: 1.3.2 + prosemirror-history: 1.4.1 prosemirror-state: 1.4.3 - prosemirror-model@1.19.4: + prosemirror-model@1.22.1: dependencies: orderedmap: 2.1.0 - prosemirror-schema-basic@1.2.2: + prosemirror-schema-basic@1.2.3: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 - prosemirror-schema-list@1.3.0: + prosemirror-schema-list@1.4.1: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-state@1.4.3: dependencies: - prosemirror-model: 1.19.4 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-model: 1.22.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.8 - prosemirror-tables@1.3.5: + prosemirror-tables@1.3.7: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.8 - prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.1): + prosemirror-trailing-node@2.0.8(prosemirror-model@1.22.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): dependencies: '@remirror/core-constants': 2.0.2 - '@remirror/core-helpers': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.1 + prosemirror-view: 1.33.8 - prosemirror-transform@1.8.0: + prosemirror-transform@1.9.0: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 - prosemirror-view@1.33.1: + prosemirror-view@1.33.8: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.22.1 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 proto-list@1.2.4: {} @@ -21366,8 +21280,6 @@ snapshots: dependencies: any-promise: 1.3.0 - throttle-debounce@3.0.1: {} - throttleit@1.0.0: {} through2@2.0.5: @@ -22077,7 +21989,7 @@ snapshots: vue-component-type-helpers@2.0.19: {} - vue-component-type-helpers@2.0.24: {} + vue-component-type-helpers@2.0.26: {} vue-demi@0.13.11(vue@3.4.27(typescript@5.3.3)): dependencies: diff --git a/ui/src/components/video/LazyVideo.vue b/ui/src/components/video/LazyVideo.vue new file mode 100644 index 0000000000..5f717eaab7 --- /dev/null +++ b/ui/src/components/video/LazyVideo.vue @@ -0,0 +1,47 @@ + +