diff --git a/packages/frontend/core/src/components/pure/cmdk/main.css.ts b/packages/frontend/core/src/components/pure/cmdk/main.css.ts
index cd672d946a..94f92ac726 100644
--- a/packages/frontend/core/src/components/pure/cmdk/main.css.ts
+++ b/packages/frontend/core/src/components/pure/cmdk/main.css.ts
@@ -124,13 +124,15 @@ globalStyle(`${root} [cmdk-list]`, {
minHeight: 120,
overflow: 'auto',
overscrollBehavior: 'contain',
- transition: '.1s ease',
- transitionProperty: 'height',
height: 'min(330px, calc(var(--cmdk-list-height) + 8px))',
padding: '0 0 8px 6px',
scrollbarGutter: 'stable',
});
+globalStyle(`${root} [cmdk-list]:not([data-opening])`, {
+ transition: 'height .1s ease',
+});
+
globalStyle(`${root} [cmdk-list]::-webkit-scrollbar`, {
width: 6,
height: 6,
diff --git a/packages/frontend/core/src/components/pure/cmdk/main.tsx b/packages/frontend/core/src/components/pure/cmdk/main.tsx
index 66f68c9b4d..6102511993 100644
--- a/packages/frontend/core/src/components/pure/cmdk/main.tsx
+++ b/packages/frontend/core/src/components/pure/cmdk/main.tsx
@@ -5,7 +5,7 @@ import type { PageMeta } from '@blocksuite/store';
import type { CommandCategory } from '@toeverything/infra/command';
import clsx from 'clsx';
import { useAtom, useSetAtom } from 'jotai';
-import { Suspense, useLayoutEffect, useMemo } from 'react';
+import { Suspense, useLayoutEffect, useMemo, useState } from 'react';
import {
cmdkQueryAtom,
@@ -126,8 +126,10 @@ export const CMDKContainer = ({
query,
children,
pageMeta,
+ open,
...rest
}: React.PropsWithChildren<{
+ open: boolean;
className?: string;
query: string;
pageMeta?: PageMeta;
@@ -136,6 +138,24 @@ export const CMDKContainer = ({
const t = useAFFiNEI18N();
const [value, setValue] = useAtom(cmdkValueAtom);
const isInEditor = pageMeta !== undefined;
+ const [opening, setOpening] = useState(open);
+
+ // fix list height animation on openning
+ useLayoutEffect(() => {
+ if (open) {
+ setOpening(true);
+ const timeout = setTimeout(() => {
+ setOpening(false);
+ }, 150);
+ return () => {
+ clearTimeout(timeout);
+ };
+ } else {
+ setOpening(false);
+ }
+ return;
+ }, [open]);
+
return (
- {children}
+
+ {children}
+
);
};
export const CMDKQuickSearchModal = ({
pageMeta,
+ open,
...props
}: CMDKModalProps & { pageMeta?: PageMeta }) => {
const [query, setQuery] = useAtom(cmdkQueryAtom);
useLayoutEffect(() => {
- if (props.open) {
+ if (open) {
setQuery('');
}
- }, [props.open, setQuery]);
+ }, [open, setQuery]);
return (
-
+
}>
diff --git a/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx b/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx
index 1cfbf5da3b..469760e95b 100644
--- a/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx
+++ b/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx
@@ -30,7 +30,7 @@ export const CMDKPanelStory: StoryFn = () => {
return (
<>
-
+
>
);