diff --git a/components/avatar/avatar.tsx b/components/avatar/avatar.tsx index 00af649..caf265a 100644 --- a/components/avatar/avatar.tsx +++ b/components/avatar/avatar.tsx @@ -39,7 +39,7 @@ const safeText = (text: string): string => { return text.slice(0, 3) } -const Avatar: React.FC = React.memo(({ +const Avatar: React.FC = ({ src, stacked, text, size, isSquare, className, ...props }) => { const theme = useTheme() @@ -91,14 +91,14 @@ const Avatar: React.FC = React.memo(({ `} ) -}) +} -type AvatarComponent

= React.FC

& { +type MemoAvatarComponent

= React.NamedExoticComponent

& { Group: typeof AvatarGroup } type ComponentProps = Partial & Omit & NativeAttrs -(Avatar as AvatarComponent).defaultProps = defaultProps +Avatar.defaultProps = defaultProps -export default Avatar as AvatarComponent +export default React.memo(Avatar) as MemoAvatarComponent diff --git a/components/badge/badge.tsx b/components/badge/badge.tsx index a3e2d4f..047fd96 100644 --- a/components/badge/badge.tsx +++ b/components/badge/badge.tsx @@ -40,7 +40,7 @@ const getBgColor = (type: NormalTypes, palette: ZeitUIThemesPalette) => { return colors[type] } -const Badge: React.FC> = React.memo(({ +const Badge: React.FC> = ({ type, size, className, children, ...props }) => { const theme = useTheme() @@ -70,6 +70,8 @@ const Badge: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Badge, defaultProps) +const MemoBadge = React.memo>(Badge) + +export default withDefaults(MemoBadge, defaultProps) diff --git a/components/button-dropdown/button-dropdown-item.tsx b/components/button-dropdown/button-dropdown-item.tsx index 2abb036..d8ff832 100644 --- a/components/button-dropdown/button-dropdown-item.tsx +++ b/components/button-dropdown/button-dropdown-item.tsx @@ -24,7 +24,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ButtonDropdownItemProps = Props & typeof defaultProps & NativeAttrs -const ButtonDropdownItem: React.FC> = React.memo(({ +const ButtonDropdownItem: React.FC> = ({ children, onClick, className, main, type: selfType, ...props }) => { const theme = useTheme() @@ -76,6 +76,8 @@ const ButtonDropdownItem: React.FC ) -}) +} -export default withDefaults(ButtonDropdownItem, defaultProps) +const MemoButtonDropdownItem = React.memo(ButtonDropdownItem) + +export default withDefaults(MemoButtonDropdownItem, defaultProps) diff --git a/components/button-dropdown/button-dropdown.tsx b/components/button-dropdown/button-dropdown.tsx index 418e680..b1a2f7b 100644 --- a/components/button-dropdown/button-dropdown.tsx +++ b/components/button-dropdown/button-dropdown.tsx @@ -35,7 +35,7 @@ const stopPropagation = (event: MouseEvent) => { event.nativeEvent.stopImmediatePropagation() } -const ButtonDropdown: React.FC> = React.memo(({ +const ButtonDropdown: React.FC> = ({ children, type, size, auto, className, disabled, loading, ...props }) => { const ref = useRef(null) @@ -137,15 +137,14 @@ const ButtonDropdown: React.FC> = R ) -}) +} + +type MemoButtonDropdownComponent

= React.NamedExoticComponent

& { + Item: typeof ButtonDropdownItem +} +type ComponentProps = Partial & Omit & NativeAttrs ButtonDropdown.defaultProps = defaultProps -type ButtonDropdownComponent

= React.FC

& { - Item: typeof ButtonDropdownItem -} - -type ComponentProps = Partial & Omit & NativeAttrs - -export default ButtonDropdown as ButtonDropdownComponent +export default React.memo(ButtonDropdown) as MemoButtonDropdownComponent diff --git a/components/button-dropdown/icon.tsx b/components/button-dropdown/icon.tsx index a054404..98ec93b 100644 --- a/components/button-dropdown/icon.tsx +++ b/components/button-dropdown/icon.tsx @@ -5,7 +5,7 @@ interface Props { height?: string } -const ButtonDropdownIcon: React.FC = React.memo(({ +const ButtonDropdownIcon: React.FC = ({ color, height, }) => { return ( @@ -20,6 +20,8 @@ const ButtonDropdownIcon: React.FC = React.memo(({ `} ) -}) +} -export default ButtonDropdownIcon +const MemoButtonDropdownIcon = React.memo(ButtonDropdownIcon) + +export default MemoButtonDropdownIcon diff --git a/components/button/__tests__/__snapshots__/index.test.tsx.snap b/components/button/__tests__/__snapshots__/index.test.tsx.snap index 91307fa..21fab06 100644 --- a/components/button/__tests__/__snapshots__/index.test.tsx.snap +++ b/components/button/__tests__/__snapshots__/index.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Button should render empty button correctly 1`] = ` - button - + `; diff --git a/components/button/button.drip.tsx b/components/button/button.drip.tsx index ab64562..f622642 100644 --- a/components/button/button.drip.tsx +++ b/components/button/button.drip.tsx @@ -15,7 +15,7 @@ const defaultProps = { export type ButtonDrip = Props & typeof defaultProps -const ButtonDrip: React.FC = React.memo(({ +const ButtonDrip: React.FC = ({ x, y, color, onCompleted }) => { const dripRef = useRef(null) @@ -80,7 +80,9 @@ const ButtonDrip: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(ButtonDrip, defaultProps) +const MemoButtonDrip = React.memo(ButtonDrip) + +export default withDefaults(MemoButtonDrip, defaultProps) diff --git a/components/button/button.tsx b/components/button/button.tsx index a96aef9..dd44377 100644 --- a/components/button/button.tsx +++ b/components/button/button.tsx @@ -34,7 +34,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ButtonProps = Props & typeof defaultProps & NativeAttrs -const Button: React.FC> = React.memo(({ +const Button: React.FC> = ({ children, disabled, type, loading, shadow, ghost, effect, onClick, auto, size, className, ...props }) => { @@ -145,6 +145,8 @@ const Button: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Button, defaultProps) +const MemoButton = React.memo>(Button) + +export default withDefaults(MemoButton, defaultProps) diff --git a/components/capacity/capacity.tsx b/components/capacity/capacity.tsx index 6b2aee6..e533325 100644 --- a/components/capacity/capacity.tsx +++ b/components/capacity/capacity.tsx @@ -27,7 +27,7 @@ const getColor = (val: number, palette: ZeitUIThemesPalette): string => { return palette.errorDark } -const Capacity: React.FC = React.memo(({ +const Capacity: React.FC = ({ value, limit, color: userColor, className, ...props }) => { const theme = useTheme() @@ -60,6 +60,8 @@ const Capacity: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(Capacity, defaultProps) +const MemoCapacity = React.memo(Capacity) + +export default withDefaults(MemoCapacity, defaultProps) diff --git a/components/card/card-content.tsx b/components/card/card-content.tsx index cdf88f8..805b184 100644 --- a/components/card/card-content.tsx +++ b/components/card/card-content.tsx @@ -31,4 +31,6 @@ const CardContent: React.FC> = ({ ) } -export default withDefaults(CardContent, defaultProps) +const MemoCardContent = React.memo(CardContent) + +export default withDefaults(MemoCardContent, defaultProps) diff --git a/components/card/card-footer.tsx b/components/card/card-footer.tsx index 0390846..8d8a633 100644 --- a/components/card/card-footer.tsx +++ b/components/card/card-footer.tsx @@ -49,4 +49,6 @@ const CardFooter: React.FC> = ({ ) } -export default withDefaults(CardFooter, defaultProps) +const MemoCardFooter = React.memo(CardFooter) + +export default withDefaults(MemoCardFooter, defaultProps) diff --git a/components/card/card.tsx b/components/card/card.tsx index c3bcaea..f17682e 100644 --- a/components/card/card.tsx +++ b/components/card/card.tsx @@ -26,7 +26,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type CardProps = Props & typeof defaultProps & NativeAttrs -const Card: React.FC> = React.memo(({ +const Card: React.FC> = ({ children, hoverable, className, shadow, type, width, ...props }) => { const theme = useTheme() @@ -88,17 +88,16 @@ const Card: React.FC> = React.memo(({ `} ) -}) +} -type CardComponent

= React.FC

& { +type MemoCardComponent

= React.NamedExoticComponent

& { Footer: typeof CardFooter Actions: typeof CardFooter Content: typeof CardContent Body: typeof CardContent } - type ComponentProps = Partial & Omit & NativeAttrs -(Card as CardComponent).defaultProps = defaultProps +Card.defaultProps = defaultProps -export default Card as CardComponent +export default React.memo(Card) as MemoCardComponent diff --git a/components/checkbox/checkbox-group.tsx b/components/checkbox/checkbox-group.tsx index 711e767..632f6a1 100644 --- a/components/checkbox/checkbox-group.tsx +++ b/components/checkbox/checkbox-group.tsx @@ -18,7 +18,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type CheckboxGroupProps = Props & typeof defaultProps & NativeAttrs -const CheckboxGroup: React.FC> = React.memo(({ +const CheckboxGroup: React.FC> = ({ disabled, onChange, value, children, className, ...props }) => { const [selfVal, setSelfVal] = useState([]) @@ -59,6 +59,6 @@ const CheckboxGroup: React.FC> = Rea ) -}) +} export default withDefaults(CheckboxGroup, defaultProps) diff --git a/components/checkbox/checkbox.icon.tsx b/components/checkbox/checkbox.icon.tsx index d9c2aed..43f392e 100644 --- a/components/checkbox/checkbox.icon.tsx +++ b/components/checkbox/checkbox.icon.tsx @@ -6,7 +6,7 @@ interface Props { checked?: boolean } -const CheckboxIcon: React.FC = React.memo(({ +const CheckboxIcon: React.FC = ({ disabled, checked, }) => { const theme = useTheme() @@ -47,6 +47,8 @@ const CheckboxIcon: React.FC = React.memo(({ `} ) -}) +} -export default CheckboxIcon +const MemoCheckboxIcon = React.memo(CheckboxIcon) + +export default MemoCheckboxIcon diff --git a/components/checkbox/checkbox.tsx b/components/checkbox/checkbox.tsx index 91be8e1..0d51b9e 100644 --- a/components/checkbox/checkbox.tsx +++ b/components/checkbox/checkbox.tsx @@ -34,7 +34,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type CheckboxProps = Props & typeof defaultProps & NativeAttrs -const Checkbox: React.FC = React.memo(({ +const Checkbox: React.FC = ({ checked, initialChecked, disabled, onChange, className, children, value, ...props }) => { const [selfChecked, setSelfChecked] = useState(initialChecked) @@ -119,8 +119,7 @@ const Checkbox: React.FC = React.memo(({ `} ) -}) - +} Checkbox.defaultProps = defaultProps diff --git a/components/code/code.tsx b/components/code/code.tsx index f605c2d..f54fc1b 100644 --- a/components/code/code.tsx +++ b/components/code/code.tsx @@ -20,7 +20,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type CodeProps = Props & typeof defaultProps & NativeAttrs -const Code: React.FC> = React.memo(({ +const Code: React.FC> = ({ children, block, bash, darkBash, className, width, ...props }) => { if (bash) { @@ -65,6 +65,8 @@ const Code: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Code, defaultProps) +const MemoCode = React.memo(Code) + +export default withDefaults(MemoCode, defaultProps) diff --git a/components/col/col.tsx b/components/col/col.tsx index 7466496..f89f31a 100644 --- a/components/col/col.tsx +++ b/components/col/col.tsx @@ -18,7 +18,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ColProps = Props & typeof defaultProps & NativeAttrs -const Col: React.FC> = React.memo(({ +const Col: React.FC> = ({ component, children, span, offset, className, ...props }) => { const Component = component @@ -38,6 +38,8 @@ const Col: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Col, defaultProps) +const MemoCol = React.memo(Col) + +export default withDefaults(MemoCol, defaultProps) diff --git a/components/collapse/collapse-icon.tsx b/components/collapse/collapse-icon.tsx index d05467d..f43d3fd 100644 --- a/components/collapse/collapse-icon.tsx +++ b/components/collapse/collapse-icon.tsx @@ -20,4 +20,6 @@ const CollapseIcon: React.FC = ({ active }) => { ) } -export default CollapseIcon +const MemoCollapseIcon = React.memo(CollapseIcon) + +export default MemoCollapseIcon diff --git a/components/description/description.tsx b/components/description/description.tsx index 6803c27..9c7d1f3 100644 --- a/components/description/description.tsx +++ b/components/description/description.tsx @@ -17,7 +17,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type DescriptionProps = Props & typeof defaultProps & NativeAttrs -const Description: React.FC = React.memo(({ +const Description: React.FC = ({ title, content, className, ...props }) => { const theme = useTheme() @@ -56,6 +56,8 @@ const Description: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(Description, defaultProps) +const MemoDescription = React.memo(Description) + +export default withDefaults(MemoDescription, defaultProps) diff --git a/components/display/display.tsx b/components/display/display.tsx index dd4aea9..63c1214 100644 --- a/components/display/display.tsx +++ b/components/display/display.tsx @@ -18,7 +18,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type DisplayProps = Props & typeof defaultProps & NativeAttrs -const Display: React.FC> = React.memo(({ +const Display: React.FC> = ({ children, caption, shadow, className, width, ...props }) => { const theme = useTheme() @@ -66,6 +66,8 @@ const Display: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Display, defaultProps) +const MemoDisplay = React.memo(Display) + +export default withDefaults(MemoDisplay, defaultProps) diff --git a/components/divider/divider.tsx b/components/divider/divider.tsx index 3bc9763..e56008d 100644 --- a/components/divider/divider.tsx +++ b/components/divider/divider.tsx @@ -101,4 +101,6 @@ const Divider: React.FC> = ({ ) } -export default withDefaults(Divider, defaultProps) +const MemoDivider = React.memo(Divider) + +export default withDefaults(MemoDivider, defaultProps) diff --git a/components/dot/dot.tsx b/components/dot/dot.tsx index 96616eb..22035a2 100644 --- a/components/dot/dot.tsx +++ b/components/dot/dot.tsx @@ -27,7 +27,7 @@ const getColor = (type: NormalTypes, theme: ZeitUIThemes): string => { return colors[type] || colors.default as string } -const Dot: React.FC> = React.memo(({ +const Dot: React.FC> = ({ type, children, className, ...props }) => { const theme = useTheme() @@ -62,6 +62,8 @@ const Dot: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Dot, defaultProps) +const MemoDot = React.memo(Dot) + +export default withDefaults(MemoDot, defaultProps) diff --git a/components/fieldset/fieldset-footer-actions.tsx b/components/fieldset/fieldset-footer-actions.tsx index 0b0a051..e7bcbc9 100644 --- a/components/fieldset/fieldset-footer-actions.tsx +++ b/components/fieldset/fieldset-footer-actions.tsx @@ -12,7 +12,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetFooterActionsProps = Props & typeof defaultProps & NativeAttrs -const FieldsetFooterActions: React.FC = React.memo(({ +const FieldsetFooterActions: React.FC = ({ className, children, ...props }) => { return ( @@ -26,6 +26,8 @@ const FieldsetFooterActions: React.FC = React.memo(( `} ) -}) +} -export default withDefaults(FieldsetFooterActions, defaultProps) +const MemoFieldsetFooterActions = React.memo(FieldsetFooterActions) + +export default withDefaults(MemoFieldsetFooterActions, defaultProps) diff --git a/components/fieldset/fieldset-footer-status.tsx b/components/fieldset/fieldset-footer-status.tsx index d948494..3f1d656 100644 --- a/components/fieldset/fieldset-footer-status.tsx +++ b/components/fieldset/fieldset-footer-status.tsx @@ -12,7 +12,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetFooterStatusProps = Props & typeof defaultProps & NativeAttrs -const FieldsetFooterStatus: React.FC = React.memo(({ +const FieldsetFooterStatus: React.FC = ({ className, children, ...props }) => { return ( @@ -33,6 +33,8 @@ const FieldsetFooterStatus: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(FieldsetFooterStatus, defaultProps) +const MemoFieldsetFooterStatus = React.memo(FieldsetFooterStatus) + +export default withDefaults(MemoFieldsetFooterStatus, defaultProps) diff --git a/components/fieldset/fieldset-footer.tsx b/components/fieldset/fieldset-footer.tsx index 7e9a428..0bd0a15 100644 --- a/components/fieldset/fieldset-footer.tsx +++ b/components/fieldset/fieldset-footer.tsx @@ -14,7 +14,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetFooterProps = Props & typeof defaultProps & NativeAttrs -const FieldsetFooter: React.FC> = React.memo(({ +const FieldsetFooter: React.FC> = ({ className, children, ...props }) => { const theme = useTheme() @@ -41,7 +41,7 @@ const FieldsetFooter: React.FC> = R `} ) -}) +} FieldsetFooter.defaultProps = defaultProps diff --git a/components/fieldset/fieldset-group.tsx b/components/fieldset/fieldset-group.tsx index 6428400..aee9e0b 100644 --- a/components/fieldset/fieldset-group.tsx +++ b/components/fieldset/fieldset-group.tsx @@ -18,7 +18,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetGroupProps = Props & typeof defaultProps & NativeAttrs -const FieldsetGroup: React.FC> = React.memo(({ +const FieldsetGroup: React.FC> = ({ className, children, value, onChange, ...props }) => { const theme = useTheme() @@ -118,6 +118,6 @@ const FieldsetGroup: React.FC> = Rea ) -}) +} export default withDefaults(FieldsetGroup, defaultProps) diff --git a/components/fieldset/fieldset-subtitle.tsx b/components/fieldset/fieldset-subtitle.tsx index b9c25e3..164edd0 100644 --- a/components/fieldset/fieldset-subtitle.tsx +++ b/components/fieldset/fieldset-subtitle.tsx @@ -13,7 +13,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetSubtitleProps = Props & typeof defaultProps & NativeAttrs -const FieldsetSubtitle: React.FC = React.memo(({ +const FieldsetSubtitle: React.FC = ({ className, children, ...props }) => { const theme = useTheme() @@ -30,6 +30,8 @@ const FieldsetSubtitle: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(FieldsetSubtitle, defaultProps) +const MemoFieldsetSubtitle = React.memo(FieldsetSubtitle) + +export default withDefaults(MemoFieldsetSubtitle, defaultProps) diff --git a/components/fieldset/fieldset-title.tsx b/components/fieldset/fieldset-title.tsx index 1025370..a6ab114 100644 --- a/components/fieldset/fieldset-title.tsx +++ b/components/fieldset/fieldset-title.tsx @@ -12,7 +12,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetTitleProps = Props & typeof defaultProps & NativeAttrs -const FieldsetTitle: React.FC = React.memo(({ +const FieldsetTitle: React.FC = ({ className, children, ...props }) => { return ( @@ -29,6 +29,8 @@ const FieldsetTitle: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(FieldsetTitle, defaultProps) +const MemoFieldsetTitle = React.memo(FieldsetTitle) + +export default withDefaults(MemoFieldsetTitle, defaultProps) diff --git a/components/fieldset/fieldset.tsx b/components/fieldset/fieldset.tsx index a19a7c4..3467ccb 100644 --- a/components/fieldset/fieldset.tsx +++ b/components/fieldset/fieldset.tsx @@ -29,7 +29,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type FieldsetProps = Props & typeof defaultProps & NativeAttrs -const Fieldset: React.FC> = React.memo(({ +const Fieldset: React.FC> = ({ className, title, subtitle, children, value, label, ...props }) => { const theme = useTheme() @@ -91,7 +91,7 @@ const Fieldset: React.FC> = React.memo(({ `} ) -}) +} Fieldset.defaultProps = defaultProps diff --git a/components/file-tree/tree-file-icon.tsx b/components/file-tree/tree-file-icon.tsx index 768937c..cb70637 100644 --- a/components/file-tree/tree-file-icon.tsx +++ b/components/file-tree/tree-file-icon.tsx @@ -33,4 +33,6 @@ const TreeFileIcon: React.FC = ({ ) } -export default withDefaults(TreeFileIcon, defaultProps) +const MemoTreeFileIcon = React.memo(TreeFileIcon) + +export default withDefaults(MemoTreeFileIcon, defaultProps) diff --git a/components/file-tree/tree-folder-icon.tsx b/components/file-tree/tree-folder-icon.tsx index 72e03b0..f373331 100644 --- a/components/file-tree/tree-folder-icon.tsx +++ b/components/file-tree/tree-folder-icon.tsx @@ -33,4 +33,6 @@ const TreeFolderIcon: React.FC = ({ ) } -export default withDefaults(TreeFolderIcon, defaultProps) +const MemoTreeFolderIcon = React.memo(TreeFolderIcon) + +export default withDefaults(MemoTreeFolderIcon, defaultProps) diff --git a/components/file-tree/tree-status-icon.tsx b/components/file-tree/tree-status-icon.tsx index 6e4206d..6cb476a 100644 --- a/components/file-tree/tree-status-icon.tsx +++ b/components/file-tree/tree-status-icon.tsx @@ -37,4 +37,6 @@ const TreeStatusIcon: React.FC = ({ ) } -export default withDefaults(TreeStatusIcon, defaultProps) +const MemoTreeStatusIcon = React.memo(TreeStatusIcon) + +export default withDefaults(MemoTreeStatusIcon, defaultProps) diff --git a/components/image/image-browser-https-icon.tsx b/components/image/image-browser-https-icon.tsx index 737e262..20ce3ac 100644 --- a/components/image/image-browser-https-icon.tsx +++ b/components/image/image-browser-https-icon.tsx @@ -10,4 +10,6 @@ const ImageBrowserHttpsIcon = () => { ) } -export default ImageBrowserHttpsIcon +const MemoImageBrowserHttpsIcon = React.memo(ImageBrowserHttpsIcon) + +export default MemoImageBrowserHttpsIcon diff --git a/components/image/image-browser.tsx b/components/image/image-browser.tsx index ca4e4af..f40090e 100644 --- a/components/image/image-browser.tsx +++ b/components/image/image-browser.tsx @@ -97,7 +97,7 @@ const getAddressInput = ( ) -const ImageBrowser = React.memo(React.forwardRef>(({ +const ImageBrowser = React.forwardRef>(({ url, title, children, showFullLink, invert, className, ...props }, ref: React.Ref) => { const theme = useTheme() @@ -185,6 +185,6 @@ const ImageBrowser = React.memo(React.forwardRef ) -})) +}) export default withDefaults(ImageBrowser, defaultProps) diff --git a/components/image/image.tsx b/components/image/image.tsx index ac420c0..554efd8 100644 --- a/components/image/image.tsx +++ b/components/image/image.tsx @@ -28,7 +28,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ImageProps = Props & typeof defaultProps & NativeAttrs -const Image: React.FC = React.memo(({ +const Image: React.FC = ({ src, width, height, disableSkeleton, className, scale, maxDelay, disableAutoResize, ...props }) => { @@ -115,14 +115,13 @@ const Image: React.FC = React.memo(({ `} ) -}) - -type ImageComponent

= React.FC

& { - Browser: typeof ImageBrowser } +type MemoImageComponent

= React.NamedExoticComponent

& { + Browser: typeof ImageBrowser +} type ComponentProps = Partial & Omit & NativeAttrs -(Image as ImageComponent).defaultProps = defaultProps +Image.defaultProps = defaultProps -export default Image as ImageComponent +export default React.memo(Image) as MemoImageComponent diff --git a/components/input/input-block-label.tsx b/components/input/input-block-label.tsx index dfcd958..29f4888 100644 --- a/components/input/input-block-label.tsx +++ b/components/input/input-block-label.tsx @@ -4,7 +4,7 @@ import useTheme from '../styles/use-theme' export interface InputBlockLabelLabel { } -const InputBlockLabel: React.FC> = React.memo(({ +const InputBlockLabel: React.FC> = ({ children, }) => { const theme = useTheme() @@ -33,6 +33,8 @@ const InputBlockLabel: React.FC> = `} ) -}) +} -export default InputBlockLabel +const MemoInputBlockLabel = React.memo(InputBlockLabel) + +export default MemoInputBlockLabel diff --git a/components/input/input-icon-clear.tsx b/components/input/input-icon-clear.tsx index 73168ac..d53ad60 100644 --- a/components/input/input-icon-clear.tsx +++ b/components/input/input-icon-clear.tsx @@ -63,4 +63,6 @@ const InputIconClear: React.FC = ({ ) } -export default InputIconClear +const MemoInputIconClear = React.memo(InputIconClear) + +export default MemoInputIconClear diff --git a/components/input/input-icon.tsx b/components/input/input-icon.tsx index 35483bd..f4be674 100644 --- a/components/input/input-icon.tsx +++ b/components/input/input-icon.tsx @@ -8,7 +8,7 @@ export interface InputIconProps { onClick: (e: React.MouseEvent) => void } -const InputIcon: React.FC = React.memo(({ +const InputIcon: React.FC = ({ icon, ratio, clickable, onClick, }) => { const theme = useTheme() @@ -40,6 +40,8 @@ const InputIcon: React.FC = React.memo(({ `} ) -}) +} -export default InputIcon +const MemoInputIcon = React.memo(InputIcon) + +export default MemoInputIcon diff --git a/components/input/input-label.tsx b/components/input/input-label.tsx index 487129d..b217a9b 100644 --- a/components/input/input-label.tsx +++ b/components/input/input-label.tsx @@ -6,7 +6,7 @@ export interface InputLabel { fontSize: string } -const InputLabel: React.FC> = React.memo(({ +const InputLabel: React.FC> = ({ children, isRight, fontSize, }) => { const theme = useTheme() @@ -45,6 +45,8 @@ const InputLabel: React.FC> = React.memo(({ `} ) -}) +} -export default InputLabel +const MemoInputLabel = React.memo(InputLabel) + +export default MemoInputLabel diff --git a/components/input/input.tsx b/components/input/input.tsx index a778713..d27d45b 100644 --- a/components/input/input.tsx +++ b/components/input/input.tsx @@ -212,9 +212,8 @@ type InputComponent

= React.ForwardRefExoticComponent

& { Textarea: typeof Textarea Password: typeof InputPassword } - type ComponentProps = Partial & Omit & NativeAttrs -(Input as InputComponent).defaultProps = defaultProps +Input.defaultProps = defaultProps export default Input as InputComponent diff --git a/components/input/password-icon.tsx b/components/input/password-icon.tsx index 4ec8c3e..106d0ab 100644 --- a/components/input/password-icon.tsx +++ b/components/input/password-icon.tsx @@ -24,4 +24,6 @@ const PasswordIcon: React.FC = ({ visible }) => { ) } -export default PasswordIcon +const MemoPasswordIcon = React.memo(PasswordIcon) + +export default MemoPasswordIcon diff --git a/components/keyboard/keyboard.tsx b/components/keyboard/keyboard.tsx index f690459..a2468a0 100644 --- a/components/keyboard/keyboard.tsx +++ b/components/keyboard/keyboard.tsx @@ -43,7 +43,7 @@ const getLayout = (small: boolean, theme: ZeitUIThemes): CustomLayout => { } } -const Keyboard: React.FC> = React.memo(({ +const Keyboard: React.FC> = ({ command, shift, option, ctrl, small, children, className, ...props }) => { const theme = useTheme() @@ -92,6 +92,8 @@ const Keyboard: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Keyboard, defaultProps) +const MemoKeyboard = React.memo(Keyboard) + +export default withDefaults(MemoKeyboard, defaultProps) diff --git a/components/link/icon.tsx b/components/link/icon.tsx index cfda0a8..925f106 100644 --- a/components/link/icon.tsx +++ b/components/link/icon.tsx @@ -4,7 +4,7 @@ interface Props { color?: string } -export const LinkIcon: React.FC = React.memo(({ color }) => { +export const LinkIcon: React.FC = ({ color }) => { return ( @@ -21,6 +21,6 @@ export const LinkIcon: React.FC = React.memo(({ color }) => { `} ) -}) +} -export default LinkIcon +export default React.memo(LinkIcon) diff --git a/components/link/link.tsx b/components/link/link.tsx index 66fe9c1..c886862 100644 --- a/components/link/link.tsx +++ b/components/link/link.tsx @@ -24,7 +24,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type LinkProps = Props & typeof defaultProps & NativeAttrs -const Link = React.memo(React.forwardRef>(({ +const Link = React.forwardRef>(({ href, color, underline, pure, children, className, block, ...props }, ref: React.Ref) => { const theme = useTheme() @@ -58,6 +58,8 @@ const Link = React.memo(React.forwardRef ) -})) +}) -export default withDefaults(Link, defaultProps) +const MemoLink = React.memo(Link) + +export default withDefaults(MemoLink, defaultProps) diff --git a/components/loading/loading.tsx b/components/loading/loading.tsx index 514a22d..51b9ac7 100644 --- a/components/loading/loading.tsx +++ b/components/loading/loading.tsx @@ -46,7 +46,7 @@ const getIconBgColor = ( return color ? color : colors[type] } -const Loading: React.FC> = React.memo(({ +const Loading: React.FC> = ({ children, size, type, color, }) => { const theme = useTheme() @@ -134,6 +134,8 @@ const Loading: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Loading, defaultProps) +const MemoLoading = React.memo(Loading) + +export default withDefaults(MemoLoading, defaultProps) diff --git a/components/modal/modal-action.tsx b/components/modal/modal-action.tsx index de9404f..7533289 100644 --- a/components/modal/modal-action.tsx +++ b/components/modal/modal-action.tsx @@ -23,7 +23,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ModalActionProps = Props & typeof defaultProps & NativeAttrs -const ModalAction: React.FC = React.memo(({ +const ModalAction: React.FC = ({ className, children, onClick, passive, disabled, ...props }) => { const theme = useTheme() @@ -73,6 +73,6 @@ const ModalAction: React.FC = React.memo(({ `} ) -}) +} export default withDefaults(ModalAction, defaultProps) diff --git a/components/modal/modal-actions.tsx b/components/modal/modal-actions.tsx index 2cd9955..a2525a6 100644 --- a/components/modal/modal-actions.tsx +++ b/components/modal/modal-actions.tsx @@ -1,7 +1,7 @@ import React from 'react' import useTheme from '../styles/use-theme' -const ModalActions: React.FC> = React.memo(({ +const ModalActions: React.FC> = ({ children, ...props }) => { const theme = useTheme() @@ -10,7 +10,6 @@ const ModalActions: React.FC> = React.memo(({

{children} -
) -}) +} -export default ModalActions +const MemoModalActions = React.memo(ModalActions) + +export default MemoModalActions diff --git a/components/modal/modal-content.tsx b/components/modal/modal-content.tsx index 15ad7cf..3947261 100644 --- a/components/modal/modal-content.tsx +++ b/components/modal/modal-content.tsx @@ -13,7 +13,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ModalContentProps = Props & typeof defaultProps & NativeAttrs -const ModalContent: React.FC = React.memo(({ +const ModalContent: React.FC = ({ className, children, ...props }) => { const theme = useTheme() @@ -33,6 +33,8 @@ const ModalContent: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(ModalContent, defaultProps) +const MemoModalContent = React.memo(ModalContent) + +export default withDefaults(MemoModalContent, defaultProps) diff --git a/components/modal/modal-subtitle.tsx b/components/modal/modal-subtitle.tsx index b8a79bc..70a5714 100644 --- a/components/modal/modal-subtitle.tsx +++ b/components/modal/modal-subtitle.tsx @@ -13,7 +13,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ModalSubtitleProps = Props & typeof defaultProps & NativeAttrs -const ModalSubtitle: React.FC = React.memo(({ +const ModalSubtitle: React.FC = ({ className, children, ...props }) => { const theme = useTheme() @@ -38,6 +38,8 @@ const ModalSubtitle: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(ModalSubtitle, defaultProps) +const MemoModalSubtitle = React.memo(ModalSubtitle) + +export default withDefaults(MemoModalSubtitle, defaultProps) diff --git a/components/modal/modal-title.tsx b/components/modal/modal-title.tsx index 4de52cc..b7b03cb 100644 --- a/components/modal/modal-title.tsx +++ b/components/modal/modal-title.tsx @@ -13,7 +13,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ModalTitleProps = Props & typeof defaultProps & NativeAttrs -const ModalTitle: React.FC = React.memo(({ +const ModalTitle: React.FC = ({ className, children, ...props }) => { const theme = useTheme() @@ -38,6 +38,8 @@ const ModalTitle: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(ModalTitle, defaultProps) +const MemoModalTitle = React.memo(ModalTitle) + +export default withDefaults(MemoModalTitle, defaultProps) diff --git a/components/modal/modal-wrapper.tsx b/components/modal/modal-wrapper.tsx index b5fe933..bf132c6 100644 --- a/components/modal/modal-wrapper.tsx +++ b/components/modal/modal-wrapper.tsx @@ -17,7 +17,7 @@ const defaultProps = { export type ModalWrapperProps = Props & typeof defaultProps -const ModalWrapper: React.FC> = React.memo(({ +const ModalWrapper: React.FC> = ({ className, width, children, visible, ...props }) => { const theme = useTheme() @@ -68,6 +68,6 @@ const ModalWrapper: React.FC> = React
) -}) +} export default withDefaults(ModalWrapper, defaultProps) diff --git a/components/modal/modal.tsx b/components/modal/modal.tsx index ba9d53e..dee71db 100644 --- a/components/modal/modal.tsx +++ b/components/modal/modal.tsx @@ -26,7 +26,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type ModalProps = Props & typeof defaultProps & NativeAttrs -const Modal: React.FC> = React.memo(({ +const Modal: React.FC> = ({ children, disableBackdropClick, onClose, onOpen, open }) => { const portal = usePortal('modal') @@ -74,9 +74,7 @@ const Modal: React.FC> = React.memo(({ ), portal ) -}) - -Modal.defaultProps = defaultProps +} type ModalComponent

= React.FC

& { Title: typeof ModalTitle @@ -84,7 +82,8 @@ type ModalComponent

= React.FC

& { Content: typeof ModalContent Action: typeof ModalAction } - type ComponentProps = Partial & Omit & NativeAttrs +Modal.defaultProps = defaultProps + export default Modal as ModalComponent diff --git a/components/note/note.tsx b/components/note/note.tsx index df9421d..7b97682 100644 --- a/components/note/note.tsx +++ b/components/note/note.tsx @@ -45,7 +45,7 @@ const getStatusColor = (type: NormalTypes, filled: boolean, theme: ZeitUIThemes) } } -export const Note: React.FC> = React.memo(({ +export const Note: React.FC> = ({ children, type, label, filled, small, className, ...props }) => { const theme = useTheme() @@ -88,7 +88,9 @@ export const Note: React.FC> = React.memo(({ ) -}) +} -export default withDefaults(Note, defaultProps) +const MemoNote = React.memo(Note) + +export default withDefaults(MemoNote, defaultProps) diff --git a/components/popover/popover-item.tsx b/components/popover/popover-item.tsx index 3a3700e..684a069 100644 --- a/components/popover/popover-item.tsx +++ b/components/popover/popover-item.tsx @@ -15,7 +15,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type PopoverItemProps = Props & typeof defaultProps & NativeAttrs -const PopoverItem: React.FC> = React.memo(({ +const PopoverItem: React.FC> = ({ children, line, title, className, ...props }) => { const theme = useTheme() @@ -70,6 +70,8 @@ const PopoverItem: React.FC> = React.m {title && } ) -}) +} -export default withDefaults(PopoverItem, defaultProps) +const MemoPopoverItem = React.memo(PopoverItem) + +export default withDefaults(MemoPopoverItem, defaultProps) diff --git a/components/popover/popover.tsx b/components/popover/popover.tsx index a5af799..7d18b81 100644 --- a/components/popover/popover.tsx +++ b/components/popover/popover.tsx @@ -51,11 +51,10 @@ type PopoverComponent

= React.FC

& { Item: typeof PopoverItem Option: typeof PopoverItem } - type ComponentProps = Partial & Omit & Partial> -(Popover as PopoverComponent).defaultProps = defaultProps +Popover.defaultProps = defaultProps export default Popover as PopoverComponent diff --git a/components/radio/radio-description.tsx b/components/radio/radio-description.tsx index 413ce43..e7939a0 100644 --- a/components/radio/radio-description.tsx +++ b/components/radio/radio-description.tsx @@ -13,7 +13,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type RadioDescriptionProps = Props & typeof defaultProps & NativeAttrs -const RadioDescription: React.FC> = React.memo(({ +const RadioDescription: React.FC> = ({ className, children, ...props }) => { const theme = useTheme() @@ -29,6 +29,8 @@ const RadioDescription: React.FC> `} ) -}) +} -export default withDefaults(RadioDescription, defaultProps) +const MemoRadioDescription = React.memo(RadioDescription) + +export default withDefaults(MemoRadioDescription, defaultProps) diff --git a/components/radio/radio-group.tsx b/components/radio/radio-group.tsx index 1278a52..d13e4be 100644 --- a/components/radio/radio-group.tsx +++ b/components/radio/radio-group.tsx @@ -21,7 +21,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type RadioGroupProps = Props & typeof defaultProps & NativeAttrs -const RadioGroup: React.FC> = React.memo(({ +const RadioGroup: React.FC> = ({ disabled, onChange, value, children, className, initialValue, useRow, ...props }) => { const theme = useTheme() @@ -68,6 +68,6 @@ const RadioGroup: React.FC> = React.mem `} ) -}) +} export default withDefaults(RadioGroup, defaultProps) diff --git a/components/radio/radio.tsx b/components/radio/radio.tsx index 88dff18..4cfed88 100644 --- a/components/radio/radio.tsx +++ b/components/radio/radio.tsx @@ -33,7 +33,7 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type RadioProps = Props & typeof defaultProps & NativeAttrs -const Radio: React.FC> = React.memo(({ +const Radio: React.FC> = ({ className, checked, onChange, disabled, value: radioValue, children, ...props }) => { @@ -150,17 +150,15 @@ const Radio: React.FC> = React.memo(({ `} ) -}) - - -Radio.defaultProps = defaultProps +} type RadioComponent

= React.FC

& { Group: typeof RadioGroup Desc: typeof RadioDescription Description: typeof RadioDescription } - type ComponentProps = Partial & Omit & NativeAttrs +Radio.defaultProps = defaultProps + export default Radio as RadioComponent diff --git a/components/row/row.tsx b/components/row/row.tsx index a7195c2..5ef0aeb 100644 --- a/components/row/row.tsx +++ b/components/row/row.tsx @@ -41,7 +41,7 @@ const getFlexAlignment = (justify: Justify, align: Align) => { } } -const Container: React.FC> = React.memo(({ +const Container: React.FC> = ({ children, component, gap, justify, align, className, ...props }) => { const Component = component @@ -68,6 +68,8 @@ const Container: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Container, defaultProps) +const MemoContainer = React.memo(Container) + +export default withDefaults(MemoContainer, defaultProps) diff --git a/components/select/select-icon.tsx b/components/select/select-icon.tsx index 27d36ac..e7fc77a 100644 --- a/components/select/select-icon.tsx +++ b/components/select/select-icon.tsx @@ -11,10 +11,9 @@ const defaultProps = { export type SelectIconProps = Props & typeof defaultProps -const SelectIcon: React.FC = React.memo(({ +const SelectIcon: React.FC = ({ width, }) => { - return ( @@ -28,6 +27,8 @@ const SelectIcon: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(SelectIcon, defaultProps) +const MemoSelectIcon = React.memo(SelectIcon) + +export default withDefaults(MemoSelectIcon, defaultProps) diff --git a/components/snippet/snippet-icon.tsx b/components/snippet/snippet-icon.tsx index 354d77a..2b1b817 100644 --- a/components/snippet/snippet-icon.tsx +++ b/components/snippet/snippet-icon.tsx @@ -10,4 +10,4 @@ const SnippetIcon: React.FC<{}> = () => { ) } -export default SnippetIcon +export default React.memo(SnippetIcon) diff --git a/components/snippet/snippet.tsx b/components/snippet/snippet.tsx index a4391fa..1ba496a 100644 --- a/components/snippet/snippet.tsx +++ b/components/snippet/snippet.tsx @@ -34,7 +34,7 @@ const textArrayToString = (text: string[]): string => { }, '') } -const Snippet: React.FC> = React.memo(({ +const Snippet: React.FC> = ({ type, filled, children, text, width, copy: copyType, className, ...props }) => { const theme = useTheme() @@ -122,6 +122,8 @@ const Snippet: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Snippet, defaultProps) +const MemoSnippet = React.memo(Snippet) + +export default withDefaults(MemoSnippet, defaultProps) diff --git a/components/spacer/spacer.tsx b/components/spacer/spacer.tsx index dbaa653..e2696b5 100644 --- a/components/spacer/spacer.tsx +++ b/components/spacer/spacer.tsx @@ -22,7 +22,7 @@ export const getMargin = (num: number): string => { return `calc(${num * 15.25}pt + 1px * ${num - 1})` } -const Spacer: React.FC = React.memo(({ +const Spacer: React.FC = ({ x, y, inline, className, ...props }) => { const left = getMargin(x) @@ -41,6 +41,8 @@ const Spacer: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(Spacer, defaultProps) +const MemoSpacer = React.memo(Spacer) + +export default withDefaults(MemoSpacer, defaultProps) diff --git a/components/spinner/spinner.tsx b/components/spinner/spinner.tsx index 7c3f12a..c4ebd14 100644 --- a/components/spinner/spinner.tsx +++ b/components/spinner/spinner.tsx @@ -116,7 +116,7 @@ const getWidth = (size: NormalSizes) => { return widths[size] } -const Spinner: React.FC = React.memo(({ +const Spinner: React.FC = ({ size, className, ...props }) => { const theme = useTheme() @@ -145,6 +145,8 @@ const Spinner: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(Spinner, defaultProps) +const MemoSpinner = React.memo(Spinner) + +export default withDefaults(MemoSpinner, defaultProps) diff --git a/components/styles/css-baseline/css-baseline.tsx b/components/styles/css-baseline/css-baseline.tsx index 53230f1..f9b9b37 100644 --- a/components/styles/css-baseline/css-baseline.tsx +++ b/components/styles/css-baseline/css-baseline.tsx @@ -3,7 +3,7 @@ import useTheme from '../use-theme' import flush from 'styled-jsx/server' import flushToReact from 'styled-jsx/server' -const CSSBaseline: React.FC> = React.memo(({ +const CSSBaseline: React.FC> = ({ children, }) => { const theme = useTheme() @@ -277,12 +277,13 @@ const CSSBaseline: React.FC> = React.memo(({ `} ) -}) +} -type CssBaselineComponent

= React.FC

& { +type MemoCssBaselineComponent

= React.NamedExoticComponent

& { flush: typeof flushToReact } -(CSSBaseline as CssBaselineComponent>).flush = flush +const MemoCSSBaseline = React.memo(CSSBaseline) as MemoCssBaselineComponent> +MemoCSSBaseline.flush = flush -export default CSSBaseline as CssBaselineComponent> +export default MemoCSSBaseline diff --git a/components/table/table-body.tsx b/components/table/table-body.tsx index 4874c74..e123e09 100644 --- a/components/table/table-body.tsx +++ b/components/table/table-body.tsx @@ -30,7 +30,7 @@ export type cellData = { value: any } -const TableBody: React.FC = React.memo(({ +const TableBody: React.FC = ({ data, hover, emptyText, onRow, onCell }) => { const theme = useTheme() @@ -80,6 +80,8 @@ const TableBody: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(TableBody, defaultProps) +const MemoTableBody = React.memo(TableBody) + +export default withDefaults(MemoTableBody, defaultProps) diff --git a/components/table/table-cell.tsx b/components/table/table-cell.tsx index 95f643c..29db8ce 100644 --- a/components/table/table-cell.tsx +++ b/components/table/table-cell.tsx @@ -19,7 +19,7 @@ export type cellData = { rowValue: any } -const TableCell: React.FC = React.memo(({ +const TableCell: React.FC = ({ columns, row, rowIndex, emptyText, onCellClick, }) => { const { removeRow } = useTableContext() @@ -51,6 +51,6 @@ const TableCell: React.FC = React.memo(({ ) /* eslint-enable */ -}) +} -export default TableCell +export default React.memo(TableCell) diff --git a/components/table/table-head.tsx b/components/table/table-head.tsx index 0292d10..0439f87 100644 --- a/components/table/table-head.tsx +++ b/components/table/table-head.tsx @@ -32,7 +32,7 @@ const makeColgroup = (width: number, columns: Array) => { ) } -const TableHead: React.FC = React.memo(({ +const TableHead: React.FC = ({ columns, width, }) => { const theme = useTheme() @@ -101,6 +101,8 @@ const TableHead: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(TableHead, defaultProps) +const MemoTableHead = React.memo(TableHead) + +export default withDefaults(MemoTableHead, defaultProps) diff --git a/components/tabs/tabs.tsx b/components/tabs/tabs.tsx index 4a3799e..c523eb7 100644 --- a/components/tabs/tabs.tsx +++ b/components/tabs/tabs.tsx @@ -143,13 +143,12 @@ const Tabs: React.FC> = ({ ) } -Tabs.defaultProps = defaultProps - type TabsComponent

= React.FC

& { Item: typeof TabsItem Tab: typeof TabsItem } - type ComponentProps = Partial & Omit & NativeAttrs +Tabs.defaultProps = defaultProps + export default Tabs as TabsComponent diff --git a/components/tag/tag.tsx b/components/tag/tag.tsx index ec2afb7..1108603 100644 --- a/components/tag/tag.tsx +++ b/components/tag/tag.tsx @@ -70,7 +70,7 @@ const getColors = ( } } -const Tag: React.FC> = React.memo(({ +const Tag: React.FC> = ({ type, children, className, invert, ...props }) => { const theme = useTheme() @@ -98,6 +98,8 @@ const Tag: React.FC> = React.memo(({ `} ) -}) +} -export default withDefaults(Tag, defaultProps) +const MemoTag = React.memo(Tag) + +export default withDefaults(MemoTag, defaultProps) diff --git a/components/text/child.tsx b/components/text/child.tsx index 1cfc413..88a8a33 100644 --- a/components/text/child.tsx +++ b/components/text/child.tsx @@ -31,7 +31,7 @@ const getTypeColor = (type: NormalTypes, palette: ZeitUIThemesPalette) => { type NativeAttrs = Omit, keyof Props> export type TextChildProps = Props & typeof defaultProps & NativeAttrs -const TextChild: React.FC> = React.memo(({ +const TextChild: React.FC> = ({ children, tag, className, type, size, ...props }) => { const theme = useTheme() @@ -63,7 +63,9 @@ const TextChild: React.FC> = React.memo( `} ) -}) +} -export default withDefaults(TextChild, defaultProps) +const MemoTextChild = React.memo(TextChild) + +export default withDefaults(MemoTextChild, defaultProps) diff --git a/components/text/text.tsx b/components/text/text.tsx index 610f68f..0390120 100644 --- a/components/text/text.tsx +++ b/components/text/text.tsx @@ -63,7 +63,7 @@ const getModifierChild = ( ) } -const Text: React.FC> = React.memo(({ +const Text: React.FC> = ({ h1, h2, h3, h4, h5, h6, p, b, small, i, span, del, em, blockquote, size, children, className, ...props }) => { @@ -101,7 +101,9 @@ const Text: React.FC> = React.memo(({ return ( {modifers} ) -}) +} -export default withDefaults(Text, defaultProps) +const MemoText = React.memo(Text) + +export default withDefaults(MemoText, defaultProps) diff --git a/components/toggle/toggle.tsx b/components/toggle/toggle.tsx index 14669e2..d7ca6dc 100644 --- a/components/toggle/toggle.tsx +++ b/components/toggle/toggle.tsx @@ -56,7 +56,7 @@ const getSizes = (size: NormalSizes) => { return sizes[size] } -const Toggle: React.FC = React.memo(({ +const Toggle: React.FC = ({ initialChecked, checked, disabled, onChange, size, className, ...props }) => { const theme = useTheme() @@ -164,6 +164,8 @@ const Toggle: React.FC = React.memo(({ `} ) -}) +} -export default withDefaults(Toggle, defaultProps) +const MemoToggle = React.memo(Toggle) + +export default withDefaults(MemoToggle, defaultProps) diff --git a/components/tooltip/tooltip-content.tsx b/components/tooltip/tooltip-content.tsx index 8168270..8c84f6f 100644 --- a/components/tooltip/tooltip-content.tsx +++ b/components/tooltip/tooltip-content.tsx @@ -52,7 +52,7 @@ const getRect = (ref: MutableRefObject): ReactiveDomReact => } } -const TooltipContent: React.FC> = React.memo(({ +const TooltipContent: React.FC> = ({ children, parent, visible, offset, placement, type, className, hideArrow, }) => { const theme = useTheme() @@ -112,6 +112,6 @@ const TooltipContent: React.FC> = React.memo(({ ), el) -}) +} export default TooltipContent diff --git a/components/tooltip/tooltip-icon.tsx b/components/tooltip/tooltip-icon.tsx index 931db7d..06f6f94 100644 --- a/components/tooltip/tooltip-icon.tsx +++ b/components/tooltip/tooltip-icon.tsx @@ -42,4 +42,4 @@ const TooltipIcon: React.FC = ({ ) } -export default TooltipIcon +export default React.memo(TooltipIcon) diff --git a/components/user/user-link.tsx b/components/user/user-link.tsx index 639f769..6739c13 100644 --- a/components/user/user-link.tsx +++ b/components/user/user-link.tsx @@ -14,24 +14,23 @@ const defaultProps = { type NativeAttrs = Omit, keyof Props> export type UserLinkProps = Props & typeof defaultProps & NativeAttrs -const UserLink = React.memo( - React.forwardRef>(({ - href, className, children, ...props - }, ref: React.Ref) => { - - return ( -

- - {children} - - -
- ) - }) -) +const UserLink = React.forwardRef>(({ + href, className, children, ...props +}, ref: React.Ref) => { + return ( +
+ + {children} + + +
+ ) +}) -export default withDefaults(UserLink, defaultProps) +const MemoUserLink = React.memo(UserLink) + +export default withDefaults(MemoUserLink, defaultProps) diff --git a/components/user/user.tsx b/components/user/user.tsx index b145331..f484255 100644 --- a/components/user/user.tsx +++ b/components/user/user.tsx @@ -75,12 +75,11 @@ const User: React.FC> = ({ ) } -type UserComponent

= React.FC

& { +type MemoUserComponent

= React.NamedExoticComponent

& { Link: typeof UserLink } - type ComponentProps = Partial & Omit & NativeAttrs -(User as UserComponent).defaultProps = defaultProps +User.defaultProps = defaultProps -export default User as UserComponent +export default React.memo(User) as MemoUserComponent diff --git a/components/utils/with-defaults.ts b/components/utils/with-defaults.ts index 7229def..ce22e96 100644 --- a/components/utils/with-defaults.ts +++ b/components/utils/with-defaults.ts @@ -6,7 +6,6 @@ const withDefaults = ( ) => { type Props = Partial & Omit component.defaultProps = defaultProps - return component as React.ComponentType }