diff --git a/apps/storybook/package.json b/apps/storybook/package.json index 6e1551fd8..bebfde3da 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -14,6 +14,7 @@ "@storybook/react": "^7.0.5", "@storybook/react-vite": "^7.0.5", "@storybook/testing-library": "^0.1.0", + "postcss-pseudo-companion-classes": "^0.1.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/apps/storybook/postcss.config.js b/apps/storybook/postcss.config.js index 054c147cb..05f123861 100644 --- a/apps/storybook/postcss.config.js +++ b/apps/storybook/postcss.config.js @@ -1,6 +1,10 @@ module.exports = { plugins: { tailwindcss: {}, - autoprefixer: {} - } + autoprefixer: {}, + "postcss-pseudo-companion-classes": { + prefix: "sb-pseudo--", + restrictTo: [":hover", ":focus"] + }, + }, }; diff --git a/packages/ui/src/Button.stories.tsx b/packages/ui/src/Button.stories.tsx index 5a3229db2..afeb45974 100644 --- a/packages/ui/src/Button.stories.tsx +++ b/packages/ui/src/Button.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryFn } from '@storybook/react'; +import { Meta } from '@storybook/react'; import { Button } from './Button'; const meta: Meta = { @@ -17,20 +17,55 @@ const meta: Meta = { export default meta; -const Template: StoryFn = (args) => + ))} + +
+

Hovered

+ {buttonVariants.map((variant) => ( + + ))} +
-export const Primary: StoryFn = Template.bind({}); -Primary.args = { - variant: 'accent' -}; - -export const PrimarySmall: StoryFn = Template.bind({}); -PrimarySmall.args = { - variant: 'accent', - size: 'sm' +
+

Focused

+ {buttonVariants.map((variant) => ( + + ))} +
+ + + ); }; diff --git a/packages/ui/src/Button.tsx b/packages/ui/src/Button.tsx index 57d29284e..7e34ac0a3 100644 --- a/packages/ui/src/Button.tsx +++ b/packages/ui/src/Button.tsx @@ -22,7 +22,7 @@ type Button = { const hasHref = (props: ButtonProps | LinkButtonProps): props is LinkButtonProps => 'href' in props; -const styles = cva( +export const styles = cva( [ 'cursor-default items-center rounded-md border outline-none transition-colors duration-100', 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-70', @@ -51,11 +51,12 @@ const styles = cva( `rounded border border-dashed border-sidebar-line/70 text-center text-xs font-medium text-ink-faint transition hover:border-sidebar-line hover:bg-sidebar-selected/5` ], gray: [ - 'bg-app-button hover:bg-app-hover active:bg-app-selected', - 'border-app-line hover:border-app-line active:border-app-active' + 'bg-app-button hover:bg-app-hover focus:bg-app-selected', + 'border-app-line hover:border-app-line focus:ring-1 focus:ring-accent' ], accent: [ - 'border-accent-deep bg-accent text-white shadow-md shadow-app-shade/10 hover:border-accent hover:bg-accent-faint focus:outline-none focus:ring focus:ring-accent active:border-accent-deep active:bg-accent' + 'bg-accent border-accent border text-white shadow-md shadow-app-shade/10 hover:bg-accent-faint focus:outline-none', + 'focus:ring-1 focus:ring-accent focus:ring-offset-2 focus:ring-offset-app-selected' ], colored: ['text-white shadow-sm hover:bg-opacity-90 active:bg-opacity-100'], bare: '' diff --git a/packages/ui/src/Dialog.tsx b/packages/ui/src/Dialog.tsx index 33ea5fb20..acf9ff3e7 100644 --- a/packages/ui/src/Dialog.tsx +++ b/packages/ui/src/Dialog.tsx @@ -183,7 +183,10 @@ export function Dialog({ form.formState.isSubmitting || props.submitDisabled || !form.formState.isValid } variant={props.ctaDanger ? 'colored' : 'accent'} - className={clsx(props.ctaDanger && 'border-red-500 bg-red-500')} + className={clsx( + props.ctaDanger && + 'border-red-500 bg-red-500 focus:ring-1 focus:ring-red-500 focus:ring-offset-2 focus:ring-offset-app-selected' + )} > {props.ctaLabel} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f79502f7e..504496a7d 100644 Binary files a/pnpm-lock.yaml and b/pnpm-lock.yaml differ