Files
stack/apps/web/src/components/ui/button.tsx
Jason Woltje ac1f2c176f
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
fix: Resolve all ESLint errors and warnings in web package
Fixes all 542 ESLint problems in the web package to achieve 0 errors and 0 warnings.

Changes:
- Fixed 144 issues: nullish coalescing, return types, unused variables
- Fixed 118 issues: unnecessary conditions, type safety, template literals
- Fixed 79 issues: non-null assertions, unsafe assignments, empty functions
- Fixed 67 issues: explicit return types, promise handling, enum comparisons
- Fixed 45 final warnings: missing return types, optional chains
- Fixed 25 typecheck-related issues: async/await, type assertions, formatting
- Fixed JSX.Element namespace errors across 90+ files

All Quality Rails violations resolved. Lint and typecheck both pass with 0 problems.

Files modified: 118 components, tests, hooks, and utilities

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-31 00:10:03 -06:00

46 lines
1.1 KiB
TypeScript

import { Button as BaseButton } from "@mosaic/ui";
import type { ButtonProps as BaseButtonProps } from "@mosaic/ui";
import type { ReactNode } from "react";
// Extend Button to support additional variants
type ExtendedVariant =
| "default"
| "primary"
| "secondary"
| "danger"
| "ghost"
| "outline"
| "destructive"
| "link";
export interface ButtonProps extends Omit<BaseButtonProps, "variant" | "size"> {
variant?: ExtendedVariant;
size?: "sm" | "md" | "lg" | "icon";
children: ReactNode;
}
// Map extended variants to base variants
const variantMap: Record<string, "primary" | "secondary" | "danger" | "ghost"> = {
default: "primary",
outline: "ghost",
destructive: "danger",
link: "ghost",
};
export function Button({
variant = "primary",
size = "md",
...props
}: ButtonProps): React.JSX.Element {
const mappedVariant = variantMap[variant] ?? variant;
const mappedSize = size === "icon" ? "sm" : size;
return (
<BaseButton
variant={mappedVariant as "primary" | "secondary" | "danger" | "ghost"}
size={mappedSize}
{...props}
/>
);
}