Skip to content

Commit 8ae697e

Browse files
feat: checkbox colors (#1032)
1 parent 8822223 commit 8ae697e

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

src/components/Checkbox/Checkbox.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { ComponentProps } from 'react';
22
import { forwardRef } from 'react';
33
import { twMerge } from 'tailwind-merge';
4-
import type { DeepPartial } from '../../';
4+
import type { DeepPartial, FlowbiteColors } from '../../';
55
import { useTheme } from '../../';
66
import { mergeDeep } from '../../helpers/merge-deep';
77

@@ -10,17 +10,26 @@ export interface FlowbiteCheckboxTheme {
1010
}
1111
export interface FlowbiteCheckboxRootTheme {
1212
base: string;
13+
color: FlowbiteColors;
1314
}
1415

15-
export interface CheckboxProps extends Omit<ComponentProps<'input'>, 'type' | 'ref'> {
16+
export interface CheckboxProps extends Omit<ComponentProps<'input'>, 'type' | 'ref' | 'color'> {
1617
theme?: DeepPartial<FlowbiteCheckboxTheme>;
18+
color?: keyof FlowbiteColors;
1719
}
1820

1921
export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(
20-
({ className, theme: customTheme = {}, ...props }, ref) => {
22+
({ className, color = 'default', theme: customTheme = {}, ...props }, ref) => {
2123
const theme = mergeDeep(useTheme().theme.checkbox, customTheme);
2224

23-
return <input ref={ref} type="checkbox" className={twMerge(theme.root.base, className)} {...props} />;
25+
return (
26+
<input
27+
ref={ref}
28+
type="checkbox"
29+
className={twMerge(theme.root.base, theme.root.color[color], className)}
30+
{...props}
31+
/>
32+
);
2433
},
2534
);
2635

src/components/Checkbox/theme.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@ import type { FlowbiteCheckboxTheme } from './Checkbox';
22

33
export const checkboxTheme: FlowbiteCheckboxTheme = {
44
root: {
5-
base: 'h-4 w-4 rounded border border-gray-300 bg-gray-100 focus:ring-2 focus:ring-cyan-500 dark:border-gray-600 dark:bg-gray-700 dark:ring-offset-gray-800 dark:focus:ring-cyan-600 text-cyan-600',
5+
base: 'h-4 w-4 rounded focus:ring-2 border border-gray-300 dark:border-gray-600 dark:bg-gray-700 bg-gray-100',
6+
color: {
7+
default: 'focus:ring-cyan-600 dark:ring-offset-cyan-600 dark:focus:ring-cyan-600 text-cyan-600',
8+
dark: 'focus:ring-gray-800 dark:ring-offset-gray-800 dark:focus:ring-gray-800 text-gray-800',
9+
failure: 'focus:ring-red-900 dark:ring-offset-red-900 dark:focus:ring-red-900 text-red-900',
10+
gray: 'focus:ring-gray-900 dark:ring-offset-gray-900 dark:focus:ring-gray-900 text-gray-900',
11+
info: 'focus:ring-cyan-800 dark:ring-offset-gray-800 dark:focus:ring-cyan-800 text-cyan-800',
12+
light: 'focus:ring-gray-900 dark:ring-offset-gray-900 dark:focus:ring-gray-900 text-gray-900',
13+
purple: 'focus:ring-purple-600 dark:ring-offset-purple-600 dark:focus:ring-purple-600 text-purple-600',
14+
success: 'focus:ring-green-800 dark:ring-offset-green-800 dark:focus:ring-green-800 text-green-800',
15+
warning: 'focus:ring-yellow-400 dark:ring-offset-yellow-400 dark:focus:ring-yellow-400 text-yellow-400',
16+
blue: 'focus:ring-blue-600 dark:ring-offset-blue-700 dark:focus:ring-blue-700 text-blue-700',
17+
cyan: 'focus:ring-cyan-600 dark:ring-offset-cyan-600 dark:focus:ring-cyan-600 text-cyan-600',
18+
green: 'focus:ring-green-600 dark:ring-offset-green-600 dark:focus:ring-green-600 text-green-600',
19+
indigo: 'focus:ring-indigo-700 dark:ring-offset-indigo-700 dark:focus:ring-indigo-700 text-indigo-700',
20+
lime: 'focus:ring-lime-700 dark:ring-offset-lime-700 dark:focus:ring-lime-700 text-lime-700',
21+
pink: 'focus:ring-pink-600 dark:ring-offset-pink-600 dark:focus:ring-pink-600 text-pink-600',
22+
red: 'focus:ring-red-600 dark:ring-offset-red-600 dark:focus:ring-red-600 text-red-600',
23+
teal: 'focus:ring-teal-600 dark:ring-offset-teal-600 dark:focus:ring-teal-600 text-teal-600',
24+
yellow: 'focus:ring-yellow-400 dark:ring-offset-yellow-400 dark:focus:ring-yellow-400 text-yellow-400',
25+
},
626
},
727
};

0 commit comments

Comments
 (0)