File tree Expand file tree Collapse file tree 2 files changed +94
-0
lines changed
src/features/common/components/checkbox Expand file tree Collapse file tree 2 files changed +94
-0
lines changed Original file line number Diff line number Diff line change 1+ import { Checkbox , type CheckboxProps } from "react-aria-components" ;
2+ import styles from './checkbox.module.scss'
3+
4+ export function CheckboxComponent ( {
5+ children,
6+ ...props
7+ } : Omit < CheckboxProps , "children" > & {
8+ children ?: React . ReactNode ;
9+ } ) {
10+ return (
11+ < Checkbox { ...props } className = { styles . checkbox__component } >
12+ { ( { isIndeterminate } ) => (
13+ < >
14+ < div className = { styles . checkbox } >
15+ < svg viewBox = "0 0 18 18" aria-hidden = "true" >
16+ { isIndeterminate ? (
17+ < rect x = { 1 } y = { 7.5 } width = { 15 } height = { 3 } />
18+ ) : (
19+ < polyline points = "1 9 7 14 15 4" />
20+ ) }
21+ </ svg >
22+ </ div >
23+ { children }
24+ </ >
25+ ) }
26+ </ Checkbox >
27+ ) ;
28+ }
Original file line number Diff line number Diff line change 1+ .checkbox__component {
2+ --selected-color : var (--color_bg_state_success );
3+ --selected-color-pressed : var (--color_fg_on_state_success_subtle );
4+ --checkmark-color : var (--color_border_state_success );
5+
6+ display : flex ;
7+ /* This is needed so the HiddenInput is positioned correctly */
8+ position : relative ;
9+ align-items : center ;
10+ gap : 0.571rem ;
11+ font-size : 1.143rem ;
12+ color : white ;
13+ forced-color-adjust : none ;
14+
15+ .checkbox {
16+ width : 1.143rem ;
17+ height : 1.143rem ;
18+ border : 2px solid var (--color_fg_default );
19+ border-radius : 4px ;
20+ transition : all 200ms ;
21+ display : flex ;
22+ align-items : center ;
23+ justify-content : center ;
24+ flex-shrink : 0 ;
25+ }
26+
27+ svg {
28+ width : 1rem ;
29+ height : 1rem ;
30+ fill : none ;
31+ stroke : var (--functional-gray-0 );
32+ stroke-width : 3px ;
33+ stroke-dasharray : 22px ;
34+ stroke-dashoffset : 66 ;
35+ transition : all 200ms ;
36+ }
37+
38+ & [data-focus-visible ] .checkbox {
39+ outline : 2px solid var (--color_fg_selected );
40+ outline-offset : 2px ;
41+ }
42+
43+ & [data-selected ],
44+ & [data-indeterminate ] {
45+ .checkbox {
46+ border-color : var (--selected-color );
47+ background : var (--selected-color );
48+ }
49+
50+ & [data-pressed ] .checkbox {
51+ border-color : var (--selected-color-pressed );
52+ background : var (--selected-color-pressed );
53+ }
54+
55+ svg {
56+ stroke-dashoffset : 44 ;
57+ }
58+ }
59+
60+ & [data-indeterminate ] {
61+ & svg {
62+ stroke : none ;
63+ fill : var (--checkmark-color );
64+ }
65+ }
66+ }
You can’t perform that action at this time.
0 commit comments