From 65fc0ed59c5494a7168bfb473524e7a97212809b Mon Sep 17 00:00:00 2001 From: Garfield Lee Date: Fri, 4 Aug 2023 23:00:28 +0800 Subject: [PATCH] refactor: remove React.FC for component package (#3575) --- .../components/card/workspace-card/index.tsx | 18 +++++------ .../src/components/internal-lottie/index.tsx | 9 +++--- .../src/components/page-list/all-page.tsx | 31 ++++++++++++------- .../components/page-list/operation-cell.tsx | 17 +++++----- .../__tests__/provider-composer.spec.tsx | 2 +- .../components/provider-composer/index.tsx | 16 ++++++---- .../components/setting-components/modal.tsx | 10 +++--- .../setting-components/setting-header.tsx | 19 +++++++----- .../setting-components/setting-row.tsx | 24 +++++++------- .../components/setting-components/wrapper.tsx | 16 ++++++---- .../src/components/share-menu/export.tsx | 5 ++- .../src/components/share-menu/share-menu.tsx | 20 +++++++----- .../src/components/share-menu/share-page.tsx | 7 ++--- .../components/share-menu/share-workspace.tsx | 9 ++---- .../src/components/tour-modal/tour-modal.tsx | 7 ++--- .../src/components/user-avatar/index.tsx | 10 +++--- .../src/components/workspace-avatar/index.tsx | 21 ++++++------- .../src/components/workspace-list/index.tsx | 18 +++++------ .../src/components/workspace/index.tsx | 18 +++++------ packages/component/src/ui/button/button.tsx | 30 ++++++++++-------- packages/component/src/ui/loading/loading.tsx | 7 ++--- 21 files changed, 165 insertions(+), 149 deletions(-) diff --git a/packages/component/src/components/card/workspace-card/index.tsx b/packages/component/src/components/card/workspace-card/index.tsx index 37c99d7a44..472d4b2aaa 100644 --- a/packages/component/src/components/card/workspace-card/index.tsx +++ b/packages/component/src/components/card/workspace-card/index.tsx @@ -10,7 +10,6 @@ import { } from '@blocksuite/icons'; import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-workspace-name'; import { useStaticBlockSuiteWorkspace } from '@toeverything/infra/__internal__/react'; -import type { FC } from 'react'; import { useCallback } from 'react'; import { WorkspaceAvatar } from '../../workspace-avatar'; @@ -21,9 +20,6 @@ import { StyleWorkspaceTitle, } from './styles'; -export type WorkspaceTypeProps = { - flavour: WorkspaceFlavour; -}; const JoinedWorkspaceIcon = () => { return ; }; @@ -39,7 +35,11 @@ const LocalDataIcon = () => { return ; }; -const WorkspaceType: FC = ({ flavour }) => { +export interface WorkspaceTypeProps { + flavour: WorkspaceFlavour; +} + +const WorkspaceType = ({ flavour }: WorkspaceTypeProps) => { const t = useAFFiNEI18N(); // fixme: cloud regression const isOwner = true; @@ -66,19 +66,19 @@ const WorkspaceType: FC = ({ flavour }) => { ); }; -export type WorkspaceCardProps = { +export interface WorkspaceCardProps { currentWorkspaceId: string | null; meta: RootWorkspaceMetadata; onClick: (workspaceId: string) => void; onSettingClick: (workspaceId: string) => void; -}; +} -export const WorkspaceCard: FC = ({ +export const WorkspaceCard = ({ onClick, onSettingClick, currentWorkspaceId, meta, -}) => { +}: WorkspaceCardProps) => { const t = useAFFiNEI18N(); const workspace = useStaticBlockSuiteWorkspace(meta.id); const [name] = useBlockSuiteWorkspaceName(workspace); diff --git a/packages/component/src/components/internal-lottie/index.tsx b/packages/component/src/components/internal-lottie/index.tsx index a2e833e034..a56ac07da2 100644 --- a/packages/component/src/components/internal-lottie/index.tsx +++ b/packages/component/src/components/internal-lottie/index.tsx @@ -1,10 +1,9 @@ import { lottieAtom } from '@affine/jotai'; import { useAtomValue } from 'jotai'; import type { AnimationItem } from 'lottie-web'; -import type { FC } from 'react'; import { useEffect, useRef } from 'react'; -type CustomLottieProps = { +interface CustomLottieProps { options: { loop?: boolean | number | undefined; autoReverse?: boolean | undefined; @@ -18,15 +17,15 @@ type CustomLottieProps = { speed?: number | undefined; width?: number | string | undefined; height?: number | string | undefined; -}; +} -export const InternalLottie: FC = ({ +export const InternalLottie = ({ options, isStopped, speed, width, height, -}) => { +}: CustomLottieProps) => { const element = useRef(null); const lottieInstance = useRef(); const lottie = useAtomValue(lottieAtom); diff --git a/packages/component/src/components/page-list/all-page.tsx b/packages/component/src/components/page-list/all-page.tsx index 8a12ef8d5e..54a9c5b3d9 100644 --- a/packages/component/src/components/page-list/all-page.tsx +++ b/packages/component/src/components/page-list/all-page.tsx @@ -28,6 +28,17 @@ import type { ListData, PageListProps, TrashListData } from './type'; import { useSorter } from './use-sorter'; import { formatDate, useIsSmallDevices } from './utils'; +interface AllPagesHeadProps { + isPublicWorkspace: boolean; + sorter: ReturnType>; + createNewPage: () => void; + createNewEdgeless: () => void; + importFile: () => void; + getPageInfo: GetPageInfoById; + propertiesMeta: PropertiesMeta; + workspaceId: string; +} + const AllPagesHead = ({ isPublicWorkspace, sorter, @@ -37,16 +48,7 @@ const AllPagesHead = ({ getPageInfo, propertiesMeta, workspaceId, -}: { - isPublicWorkspace: boolean; - sorter: ReturnType>; - createNewPage: () => void; - createNewEdgeless: () => void; - importFile: () => void; - getPageInfo: GetPageInfoById; - propertiesMeta: PropertiesMeta; - workspaceId: string; -}) => { +}: AllPagesHeadProps) => { const t = useAFFiNEI18N(); const titleList = useMemo( () => [ @@ -235,10 +237,15 @@ const TrashListHead = () => { ); }; -export const PageListTrashView: React.FC<{ +interface PageListTrashViewProps { list: TrashListData[]; fallback?: React.ReactNode; -}> = ({ list, fallback }) => { +} + +export const PageListTrashView = ({ + list, + fallback, +}: PageListTrashViewProps) => { const t = useAFFiNEI18N(); const theme = useTheme(); diff --git a/packages/component/src/components/page-list/operation-cell.tsx b/packages/component/src/components/page-list/operation-cell.tsx index 1066439795..cffdaeefba 100644 --- a/packages/component/src/components/page-list/operation-cell.tsx +++ b/packages/component/src/components/page-list/operation-cell.tsx @@ -8,7 +8,6 @@ import { OpenInNewIcon, ResetIcon, } from '@blocksuite/icons'; -import type React from 'react'; import { useState } from 'react'; import { @@ -21,7 +20,7 @@ import { } from '../../..'; import { DisablePublicSharing, MoveToTrash } from './operation-menu-items'; -export type OperationCellProps = { +export interface OperationCellProps { title: string; favorite: boolean; isPublic: boolean; @@ -29,9 +28,9 @@ export type OperationCellProps = { onToggleFavoritePage: () => void; onRemoveToTrash: () => void; onDisablePublicSharing: () => void; -}; +} -export const OperationCell: React.FC = ({ +export const OperationCell = ({ title, favorite, isPublic, @@ -39,7 +38,7 @@ export const OperationCell: React.FC = ({ onToggleFavoritePage, onRemoveToTrash, onDisablePublicSharing, -}) => { +}: OperationCellProps) => { const t = useAFFiNEI18N(); const [open, setOpen] = useState(false); const [openDisableShared, setOpenDisableShared] = useState(false); @@ -118,16 +117,16 @@ export const OperationCell: React.FC = ({ ); }; -export type TrashOperationCellProps = { +export interface TrashOperationCellProps { onPermanentlyDeletePage: () => void; onRestorePage: () => void; onOpenPage: () => void; -}; +} -export const TrashOperationCell: React.FC = ({ +export const TrashOperationCell = ({ onPermanentlyDeletePage, onRestorePage, -}) => { +}: TrashOperationCellProps) => { const t = useAFFiNEI18N(); const [open, setOpen] = useState(false); return ( diff --git a/packages/component/src/components/provider-composer/__tests__/provider-composer.spec.tsx b/packages/component/src/components/provider-composer/__tests__/provider-composer.spec.tsx index a8f32d9c26..9e91843d26 100644 --- a/packages/component/src/components/provider-composer/__tests__/provider-composer.spec.tsx +++ b/packages/component/src/components/provider-composer/__tests__/provider-composer.spec.tsx @@ -10,7 +10,7 @@ import { ProviderComposer } from '..'; test('ProviderComposer', async () => { const Context = createContext('null'); - const Provider: React.FC = ({ children }) => { + const Provider = ({ children }: React.PropsWithChildren) => { return {children}; }; const ConsumerComponent = () => { diff --git a/packages/component/src/components/provider-composer/index.tsx b/packages/component/src/components/provider-composer/index.tsx index 098b61f62f..777ab12961 100644 --- a/packages/component/src/components/provider-composer/index.tsx +++ b/packages/component/src/components/provider-composer/index.tsx @@ -1,11 +1,15 @@ -import type { FC, PropsWithChildren, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { cloneElement } from 'react'; -export const ProviderComposer: FC< - PropsWithChildren<{ - contexts: any; - }> -> = ({ contexts, children }) => +interface ProviderComposerProps { + contexts: any; + children: ReactNode; +} + +export const ProviderComposer = ({ + contexts, + children, +}: ProviderComposerProps) => contexts.reduceRight( (kids: ReactNode, parent: any) => cloneElement(parent, { diff --git a/packages/component/src/components/setting-components/modal.tsx b/packages/component/src/components/setting-components/modal.tsx index d8045f4466..f04ea0fd98 100644 --- a/packages/component/src/components/setting-components/modal.tsx +++ b/packages/component/src/components/setting-components/modal.tsx @@ -1,17 +1,17 @@ import { Modal, ModalCloseButton, ModalWrapper } from '@affine/component'; -import type { FC, PropsWithChildren } from 'react'; +import type { PropsWithChildren } from 'react'; import { useCallback } from 'react'; -export type SettingModalProps = { +export interface SettingModalProps { open: boolean; setOpen: (value: boolean) => void; -}; +} -export const SettingModal: FC> = ({ +export const SettingModal = ({ children, open, setOpen, -}) => { +}: PropsWithChildren) => { const handleClose = useCallback(() => { setOpen(false); }, [setOpen]); diff --git a/packages/component/src/components/setting-components/setting-header.tsx b/packages/component/src/components/setting-components/setting-header.tsx index a570292d46..77ea5b27a1 100644 --- a/packages/component/src/components/setting-components/setting-header.tsx +++ b/packages/component/src/components/setting-components/setting-header.tsx @@ -1,13 +1,18 @@ -import type { FC, HTMLAttributes, ReactNode } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; import { settingHeader } from './share.css'; -export const SettingHeader: FC< - { title: ReactNode; subtitle?: ReactNode } & Omit< - HTMLAttributes, - 'title' - > -> = ({ title, subtitle, ...otherProps }) => { +interface SettingHeaderProps + extends Omit, 'title'> { + title: ReactNode; + subtitle?: ReactNode; +} + +export const SettingHeader = ({ + title, + subtitle, + ...otherProps +}: SettingHeaderProps) => { return (
{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 (