{title}
diff --git a/packages/component/src/components/setting-components/setting-row.tsx b/packages/component/src/components/setting-components/setting-row.tsx
index 07a6620019..881681bd97 100644
--- a/packages/component/src/components/setting-components/setting-row.tsx
+++ b/packages/component/src/components/setting-components/setting-row.tsx
@@ -1,18 +1,18 @@
import clsx from 'clsx';
-import type { CSSProperties, FC, PropsWithChildren, ReactNode } from 'react';
+import type { CSSProperties, PropsWithChildren, ReactNode } from 'react';
import { settingRow } from './share.css';
-export const SettingRow: FC<
- PropsWithChildren<{
- name: ReactNode;
- desc: ReactNode;
- style?: CSSProperties;
- onClick?: () => void;
- spreadCol?: boolean;
- testId?: string;
- }>
-> = ({
+interface SettingRowProps {
+ name: ReactNode;
+ desc: ReactNode;
+ style?: CSSProperties;
+ onClick?: () => void;
+ spreadCol?: boolean;
+ testId?: string;
+}
+
+export const SettingRow = ({
name,
desc,
children,
@@ -20,7 +20,7 @@ export const SettingRow: FC<
style,
spreadCol = true,
testId = '',
-}) => {
+}: PropsWithChildren
) => {
return (
-> = ({ title, children }) => {
+
+interface SettingWrapperProps {
+ title?: ReactNode;
+}
+
+export const SettingWrapper = ({
+ title,
+ children,
+}: PropsWithChildren
) => {
return (
{title ?
{title}
: null}
diff --git a/packages/component/src/components/share-menu/export.tsx b/packages/component/src/components/share-menu/export.tsx
index 23ae4dc981..476b2bb0a2 100644
--- a/packages/component/src/components/share-menu/export.tsx
+++ b/packages/component/src/components/share-menu/export.tsx
@@ -1,5 +1,4 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import type { FC } from 'react';
import {
ExportToHtmlMenuItem,
@@ -8,9 +7,9 @@ import {
ExportToPngMenuItem,
} from '../page-list/operation-menu-items/export';
import { actionsStyle, descriptionStyle, menuItemStyle } from './index.css';
-import type { ShareMenuProps } from './share-menu';
+// import type { ShareMenuProps } from './share-menu';
-export const Export: FC
= () => {
+export const Export = () => {
const t = useAFFiNEI18N();
return (
diff --git a/packages/component/src/components/share-menu/share-menu.tsx b/packages/component/src/components/share-menu/share-menu.tsx
index fd9b281321..1d0e513311 100644
--- a/packages/component/src/components/share-menu/share-menu.tsx
+++ b/packages/component/src/components/share-menu/share-menu.tsx
@@ -5,8 +5,7 @@ import type {
import { ExportIcon, PublishIcon, ShareIcon } from '@blocksuite/icons';
import type { Page } from '@blocksuite/store';
import { useBlockSuiteWorkspacePageIsPublic } from '@toeverything/hooks/use-block-suite-workspace-page-is-public';
-import type { FC } from 'react';
-import { useRef } from 'react';
+import { type ReactElement, useRef } from 'react';
import { useCallback, useState } from 'react';
import { Button } from '../../ui/button';
@@ -16,22 +15,27 @@ import { containerStyle, indicatorContainerStyle, tabStyle } from './index.css';
import { SharePage } from './share-page';
import { ShareWorkspace } from './share-workspace';
import { StyledIndicator, TabItem } from './styles';
+
type SharePanel = 'SharePage' | 'Export' | 'ShareWorkspace';
-const MenuItems: Record
> = {
+type ShareMenuComponent = (props: T) => ReactElement;
+
+const MenuItems: Record> = {
SharePage: SharePage,
Export: Export,
ShareWorkspace: ShareWorkspace,
};
+
const tabIcons = {
SharePage: ,
Export: ,
ShareWorkspace: ,
};
-export type ShareMenuProps<
+
+export interface ShareMenuProps<
Workspace extends AffineCloudWorkspace | LocalWorkspace =
| AffineCloudWorkspace
| LocalWorkspace,
-> = {
+> {
workspace: Workspace;
currentPage: Page;
onEnableAffineCloud: (workspace: LocalWorkspace) => void;
@@ -41,7 +45,7 @@ export type ShareMenuProps<
workspace: Workspace,
publish: boolean
) => Promise;
-};
+}
function assertInstanceOf(
obj: T,
@@ -52,7 +56,7 @@ function assertInstanceOf(
}
}
-export const ShareMenu: FC = props => {
+export const ShareMenu = (props: ShareMenuProps) => {
const [activeItem, setActiveItem] = useState('SharePage');
const [isPublic] = useBlockSuiteWorkspacePageIsPublic(props.currentPage);
const [open, setOpen] = useState(false);
@@ -84,7 +88,7 @@ export const ShareMenu: FC = props => {
activeItem: SharePanel;
onChangeTab: (selectedItem: SharePanel) => void;
}
- const ShareMenu: FC = ({ activeItem, onChangeTab }) => {
+ const ShareMenu = ({ activeItem, onChangeTab }: ShareMenuProps) => {
const handleButtonClick = (itemName: SharePanel) => {
onChangeTab(itemName);
setActiveItem(itemName);
diff --git a/packages/component/src/components/share-menu/share-page.tsx b/packages/component/src/components/share-menu/share-page.tsx
index 65eaab701c..d5c9450b2b 100644
--- a/packages/component/src/components/share-menu/share-page.tsx
+++ b/packages/component/src/components/share-menu/share-page.tsx
@@ -3,7 +3,6 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useBlockSuiteWorkspacePageIsPublic } from '@toeverything/hooks/use-block-suite-workspace-page-is-public';
-import type { FC } from 'react';
import { useState } from 'react';
import { useCallback, useMemo } from 'react';
@@ -17,7 +16,7 @@ import {
import type { ShareMenuProps } from './share-menu';
import { StyledDisableButton, StyledInput, StyledLinkSpan } from './styles';
-export const LocalSharePage: FC = props => {
+export const LocalSharePage = (props: ShareMenuProps) => {
const t = useAFFiNEI18N();
return (
@@ -35,7 +34,7 @@ export const LocalSharePage: FC
= props => {
);
};
-export const AffineSharePage: FC = props => {
+export const AffineSharePage = (props: ShareMenuProps) => {
const [isPublic, setIsPublic] = useBlockSuiteWorkspacePageIsPublic(
props.currentPage
);
@@ -123,7 +122,7 @@ export const AffineSharePage: FC = props => {
);
};
-export const SharePage: FC = props => {
+export const SharePage = (props: ShareMenuProps) => {
if (props.workspace.flavour === WorkspaceFlavour.LOCAL) {
return ;
} else if (props.workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD) {
diff --git a/packages/component/src/components/share-menu/share-workspace.tsx b/packages/component/src/components/share-menu/share-workspace.tsx
index 6a01f85632..db9b982dac 100644
--- a/packages/component/src/components/share-menu/share-workspace.tsx
+++ b/packages/component/src/components/share-menu/share-workspace.tsx
@@ -4,13 +4,12 @@ import type {
} from '@affine/env/workspace';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import type { FC } from 'react';
import { Button } from '../../ui/button';
import { descriptionStyle, menuItemStyle } from './index.css';
import type { ShareMenuProps } from './share-menu';
-const ShareLocalWorkspace: FC> = props => {
+const ShareLocalWorkspace = (props: ShareMenuProps) => {
const t = useAFFiNEI18N();
return (
@@ -29,9 +28,7 @@ const ShareLocalWorkspace: FC
> = props => {
);
};
-const ShareAffineWorkspace: FC<
- ShareMenuProps
-> = props => {
+const ShareAffineWorkspace = (props: ShareMenuProps) => {
// fixme: regression
const isPublicWorkspace = false;
const t = useAFFiNEI18N();
@@ -54,7 +51,7 @@ const ShareAffineWorkspace: FC<
);
};
-export const ShareWorkspace: FC = props => {
+export const ShareWorkspace = (props: ShareMenuProps) => {
if (props.workspace.flavour === WorkspaceFlavour.LOCAL) {
return (
)} />
diff --git a/packages/component/src/components/tour-modal/tour-modal.tsx b/packages/component/src/components/tour-modal/tour-modal.tsx
index a6581a9c09..1b3f8a8add 100644
--- a/packages/component/src/components/tour-modal/tour-modal.tsx
+++ b/packages/component/src/components/tour-modal/tour-modal.tsx
@@ -1,7 +1,6 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowLeftSmallIcon, ArrowRightSmallIcon } from '@blocksuite/icons';
import clsx from 'clsx';
-import type { FC } from 'react';
import { useState } from 'react';
import { Modal, ModalCloseButton, ModalWrapper } from '../..';
@@ -26,12 +25,12 @@ import {
videoStyle,
} from './index.css';
-type TourModalProps = {
+export interface TourModalProps {
open: boolean;
onClose: () => void;
-};
+}
-export const TourModal: FC = ({ open, onClose }) => {
+export const TourModal = ({ open, onClose }: TourModalProps) => {
const t = useAFFiNEI18N();
const [step, setStep] = useState(-1);
const handleClose = () => {
diff --git a/packages/component/src/components/user-avatar/index.tsx b/packages/component/src/components/user-avatar/index.tsx
index 7a842881e8..617995f6ea 100644
--- a/packages/component/src/components/user-avatar/index.tsx
+++ b/packages/component/src/components/user-avatar/index.tsx
@@ -1,24 +1,24 @@
import * as Avatar from '@radix-ui/react-avatar';
import clsx from 'clsx';
-import type { CSSProperties, FC } from 'react';
+import type { CSSProperties } from 'react';
import * as style from './style.css';
-export type UserAvatar = {
+export interface UserAvatar {
size?: number;
url?: string;
name?: string;
className?: string;
style?: CSSProperties;
-};
+}
-export const UserAvatar: FC = ({
+export const UserAvatar = ({
size = 20,
style: propsStyles = {},
url,
name,
className,
-}) => {
+}: UserAvatar) => {
return (
& {
+export interface BlockSuiteWorkspaceAvatar
+ extends Omit {
workspace: Workspace;
-};
+}
-export const BlockSuiteWorkspaceAvatar: React.FC = ({
+export const BlockSuiteWorkspaceAvatar = ({
size,
workspace,
...props
-}) => {
+}: BlockSuiteWorkspaceAvatar) => {
const [avatar] = useBlockSuiteWorkspaceAvatarUrl(workspace);
const [name] = useBlockSuiteWorkspaceName(workspace);
@@ -46,11 +43,11 @@ export const BlockSuiteWorkspaceAvatar: React.FC = ({
);
};
-export const WorkspaceAvatar: React.FC = ({
+export const WorkspaceAvatar = ({
size = 20,
workspace,
...props
-}) => {
+}: WorkspaceAvatarProps) => {
if (workspace) {
return (
diff --git a/packages/component/src/components/workspace-list/index.tsx b/packages/component/src/components/workspace-list/index.tsx
index 47e113ab41..907456abf9 100644
--- a/packages/component/src/components/workspace-list/index.tsx
+++ b/packages/component/src/components/workspace-list/index.tsx
@@ -11,26 +11,26 @@ import {
useSensors,
} from '@dnd-kit/core';
import { SortableContext, useSortable } from '@dnd-kit/sortable';
-import type { CSSProperties, FC } from 'react';
+import type { CSSProperties } from 'react';
import { useMemo } from 'react';
import { WorkspaceCard } from '../../components/card/workspace-card';
import { workspaceItemStyle } from './index.css';
-export type WorkspaceListProps = {
+export interface WorkspaceListProps {
disabled?: boolean;
currentWorkspaceId: string | null;
items: (AffineCloudWorkspace | LocalWorkspace)[];
onClick: (workspaceId: string) => void;
onSettingClick: (workspaceId: string) => void;
onDragEnd: (event: DragEndEvent) => void;
-};
+}
-const SortableWorkspaceItem: FC<
- Omit & {
- item: RootWorkspaceMetadata;
- }
-> = props => {
+interface SortableWorkspaceItemProps extends Omit {
+ item: RootWorkspaceMetadata;
+}
+
+const SortableWorkspaceItem = (props: SortableWorkspaceItemProps) => {
const { setNodeRef, attributes, listeners, transform } = useSortable({
id: props.item.id,
});
@@ -63,7 +63,7 @@ const SortableWorkspaceItem: FC<
);
};
-export const WorkspaceList: FC = props => {
+export const WorkspaceList = (props: WorkspaceListProps) => {
const sensors = useSensors(
useSensor(PointerSensor, {
activationConstraint: {
diff --git a/packages/component/src/components/workspace/index.tsx b/packages/component/src/components/workspace/index.tsx
index 97cf7af2a4..5754355878 100644
--- a/packages/component/src/components/workspace/index.tsx
+++ b/packages/component/src/components/workspace/index.tsx
@@ -1,26 +1,27 @@
import { clsx } from 'clsx';
import type {
- FC,
HTMLAttributes,
PropsWithChildren,
ReactElement,
+ ReactNode,
} from 'react';
import { AppSidebarFallback } from '../app-sidebar';
import { appStyle, mainContainerStyle, toolStyle } from './index.css';
-export type WorkspaceRootProps = PropsWithChildren<{
+export interface WorkspaceRootProps {
resizing?: boolean;
useNoisyBackground?: boolean;
useBlurBackground?: boolean;
-}>;
+ children: ReactNode;
+}
-export const AppContainer: FC = ({
+export const AppContainer = ({
resizing,
useNoisyBackground,
useBlurBackground,
children,
-}) => {
+}: WorkspaceRootProps) => {
const noisyBackground = useNoisyBackground && environment.isDesktop;
return (
= ({
);
};
-export type MainContainerProps = PropsWithChildren<{
+export interface MainContainerProps extends HTMLAttributes
{
className?: string;
padding?: boolean;
-}> &
- HTMLAttributes;
+}
export const MainContainer = ({
className,
padding,
children,
...props
-}: MainContainerProps): ReactElement => {
+}: PropsWithChildren): ReactElement => {
return (
, 'type'> & {
- type?: ButtonType;
- disabled?: boolean;
- icon?: ReactElement;
- iconPosition?: 'start' | 'end';
- shape?: 'default' | 'round' | 'circle';
- block?: boolean;
- size?: ButtonSize;
- loading?: boolean;
- };
+
+export interface ButtonProps
+ extends Omit, 'type'> {
+ type?: ButtonType;
+ disabled?: boolean;
+ icon?: ReactElement;
+ iconPosition?: 'start' | 'end';
+ shape?: 'default' | 'round' | 'circle';
+ block?: boolean;
+ size?: ButtonSize;
+ loading?: boolean;
+}
+
const defaultProps = {
type: 'default',
disabled: false,
@@ -39,7 +42,7 @@ const defaultProps = {
loading: false,
};
-const ButtonIcon: FC = props => {
+const ButtonIcon = (props: PropsWithChildren) => {
const {
size,
icon,
@@ -65,6 +68,7 @@ const ButtonIcon: FC = props => {
);
};
+
export const Button = forwardRef(
(props, ref) => {
const {
diff --git a/packages/component/src/ui/loading/loading.tsx b/packages/component/src/ui/loading/loading.tsx
index 95da353beb..78f7f39513 100644
--- a/packages/component/src/ui/loading/loading.tsx
+++ b/packages/component/src/ui/loading/loading.tsx
@@ -1,14 +1,13 @@
import { assignInlineVars } from '@vanilla-extract/dynamic';
-import type { FC } from 'react';
import { loading, speedVar } from './styles.css';
-export type LoadingProps = {
+export interface LoadingProps {
size?: number;
speed?: number;
-};
+}
-export const Loading: FC = ({ size, speed = 1.2 }) => {
+export const Loading = ({ size, speed = 1.2 }: LoadingProps) => {
return (