From fb129a30d99ca4f1db25bff13dff6bc3c4ed17ad Mon Sep 17 00:00:00 2001 From: Robb Niznik Date: Fri, 6 Oct 2023 09:09:29 -0400 Subject: [PATCH 1/4] refactor(button): convert to css modules --- packages/alert/src/styles/Alert.module.css | 4 +- packages/button/src/Button.tsx | 13 +++-- packages/button/src/ButtonGroup.tsx | 4 +- packages/button/src/IconButton.tsx | 13 +++-- packages/button/src/UploadButton.tsx | 7 +-- .../styles/{Button.css => Button.module.css} | 46 ++++++++++++++++- packages/button/src/styles/ButtonGroup.css | 42 ---------------- packages/form/src/styles/Form.module.css | 2 +- .../inline-edit/src/styles/InlineEdit.css.ts | 2 +- .../snackbar/src/styles/Snackbar.module.css | 2 +- packages/split-button/src/SplitButton.tsx | 4 +- .../split-button/src/SplitButtonDropdown.tsx | 1 - .../src/SplitButtonDropdownButton.tsx | 4 +- .../src/SplitButtonMainButton.tsx | 4 +- ...SplitButton.css => SplitButton.module.css} | 50 +++++++++---------- 15 files changed, 96 insertions(+), 102 deletions(-) rename packages/button/src/styles/{Button.css => Button.module.css} (91%) delete mode 100644 packages/button/src/styles/ButtonGroup.css rename packages/split-button/src/styles/{SplitButton.css => SplitButton.module.css} (69%) diff --git a/packages/alert/src/styles/Alert.module.css b/packages/alert/src/styles/Alert.module.css index 4a493ca30..4cc835d87 100644 --- a/packages/alert/src/styles/Alert.module.css +++ b/packages/alert/src/styles/Alert.module.css @@ -41,7 +41,7 @@ line-height: 1.25; } -.Alert :global(.ButtonGroup) { +.Alert :global([class*='_ButtonGroup_']) { margin-top: 1.2rem; } @@ -197,7 +197,7 @@ margin-left: auto; } -.Alert-content :global(a:not(.Button)) { +.Alert-content :global(a:not([class*='_Button_'])) { color: var(--lp-color-text-interactive-base); &:hover { diff --git a/packages/button/src/Button.tsx b/packages/button/src/Button.tsx index f28c2f590..add7998eb 100644 --- a/packages/button/src/Button.tsx +++ b/packages/button/src/Button.tsx @@ -12,7 +12,7 @@ import { Slot } from '@radix-ui/react-slot'; import { cx } from 'classix'; import { isValidElement, cloneElement, forwardRef, memo } from 'react'; -import './styles/Button.css'; +import styles from './styles/Button.module.css'; type ButtonProps = ButtonHTMLAttributes & { isLoading?: boolean; @@ -59,11 +59,10 @@ const ButtonComponent = forwardRef((props, ref) const Component: ElementType = asChild ? Slot : 'button'; const classes = cx( - 'Button', - `Button--${kind}`, - disabled && 'Button--disabled', - size && `Button--${size}`, - fit && 'Button--fit', + styles.Button, + styles[`Button--${kind}`], + size && styles[`Button--${size}`], + fit && styles['Button--fit'], className ); @@ -83,7 +82,7 @@ const ButtonComponent = forwardRef((props, ref) key: 'icon', size: getIconSize(), 'aria-hidden': true, - className: cx(icon.props.className, 'Button-icon'), + className: cx(icon.props.className, styles['Button-icon']), }); const getFinalChildren = (c: ReactNode) => [ diff --git a/packages/button/src/ButtonGroup.tsx b/packages/button/src/ButtonGroup.tsx index 61e6acc84..242eeafd0 100644 --- a/packages/button/src/ButtonGroup.tsx +++ b/packages/button/src/ButtonGroup.tsx @@ -2,7 +2,7 @@ import type { ComponentProps } from 'react'; import { cx } from 'classix'; -import './styles/ButtonGroup.css'; +import styles from './styles/Button.module.css'; type ButtonGroupProps = ComponentProps<'div'> & { spacing?: 'compact' | 'normal' | 'large'; @@ -16,7 +16,7 @@ const ButtonGroup = ({ 'data-test-id': testId = 'button-group', ...rest }: ButtonGroupProps) => { - const classes = cx('ButtonGroup', `ButtonGroup--${spacing}`, className); + const classes = cx(styles.ButtonGroup, styles[`ButtonGroup--${spacing}`], className); return (
diff --git a/packages/button/src/IconButton.tsx b/packages/button/src/IconButton.tsx index 8a87b7582..c91bd413a 100644 --- a/packages/button/src/IconButton.tsx +++ b/packages/button/src/IconButton.tsx @@ -11,7 +11,7 @@ import { Slot } from '@radix-ui/react-slot'; import { cx } from 'classix'; import { isValidElement, cloneElement, forwardRef, memo } from 'react'; -import './styles/Button.css'; +import styles from './styles/Button.module.css'; type IconButtonProps = ButtonHTMLAttributes & { kind?: 'default' | 'primary' | 'destructive' | 'minimal' | 'close'; @@ -41,12 +41,11 @@ const IconButtonComponent = forwardRef((prop const Component: ElementType = asChild ? Slot : 'button'; const classes = cx( - 'IconButton', - 'Button', - 'Button--icon', - `Button--${kind}`, - disabled && 'Button--disabled', - size && `Button--${size}`, + styles.IconButton, + styles.Button, + styles['Button--icon'], + styles[`Button--${kind}`], + size && styles[`Button--${size}`], className ); diff --git a/packages/button/src/UploadButton.tsx b/packages/button/src/UploadButton.tsx index b485bd05e..2a61587d3 100644 --- a/packages/button/src/UploadButton.tsx +++ b/packages/button/src/UploadButton.tsx @@ -1,7 +1,6 @@ import type { ButtonProps } from './Button'; import type { ChangeEventHandler, KeyboardEvent } from 'react'; -import { cx } from 'classix'; import { useRef } from 'react'; import { Button } from './Button'; @@ -25,7 +24,6 @@ const UploadButton = ({ ...rest }: UploadButtonProps) => { const inputRef = useRef(null); - const classes = cx('UploadButton', className); const handleClick = () => { inputRef.current?.click(); @@ -61,10 +59,9 @@ const UploadButton = ({ }; return ( - + -