Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
$check-icon: "data:image/svg+xml;charset=UTF-8,%3csvg width='13' height='10' viewBox='0 0 13 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M1.5 4.5L5 8L11 2' stroke='currentColor' stroke-width='2' stroke-linecap='square'/%3e%3c/svg%3e";
 
.checkbox {
  --checkbox-default-size: 16px;
  --checkbox-default-color: var(--color-primary-surface-content);
  --checkbox-default-background-color: var(--color-neutral-background);
  --checkbox-default-border-color: var(--color-neutral-border);
  --checkbox-default-checked-color: var(--color-primary-surface-content);
  --checkbox-default-checked-background-color: var(--color-primary-surface);
  --checkbox-default-checked-border-color: var(--color-primary-border);
  --checkbox-default-hover-background-color: var(--color-neutral-surface);
  --checkbox-default-hover-color: var(--color-primary-surface-content);
  --checkbox-default-hover-border-color: var(--color-neutral-border-bold);
  --checkbox-default-checked-hover-color: var(--color-primary-surface-content);
  --checkbox-default-checked-hover-background-color: var(--color-primary-surface-hover);
  --checkbox-default-checked-hover-border-color: var(--grape_600);
  --checkbox-default-checked-focused-color: var(--color-primary-surface-content);
  --checkbox-default-checked-focused-background-color: var(--grape_800);
  --checkbox-default-checked-focused-border-color: var(--grape_800);
  --checkbox-default-disabled-background-color: var(--color-neutral-background);
  --checkbox-default-disabled-color: var(--color-neutral-content-subtlest);
  --checkbox-default-disabled-border-color: var(--color-neutral-border);
  --checkbox-default-indeterminate-gap: 3px;
 
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 100ms ease-out;
  color: var(--color-neutral-content);
  position: relative;
 
 
  // &:hover {
  //   box-shadow: none;
  //   &__box {
  //     background-color: var(--checkbox-hover-background-color, var(--checkbox-default-hover-background-color));
  //     color: var(--checkbox-hover-color, var(--checkbox-default-hover-color));
  //     border-color: var(--checkbox-hover-border-color, var(--checkbox-default-hover-border-color));
  //   }
  // }
 
  &_disabled {
    .checkbox {
      &__box {
        border-color: var(--checkbox-disabled-border-color, var(--checkbox-default-disabled-border-color));
      }
 
      &__check {
        background-color: var(--checkbox-disabled-background-color, var(--checkbox-default-disabled-background-color));
        color: var(--checkbox-disabled-color, var(--checkbox-default-disabled-color));
 
        &_checked::before,
        &_indeterminate::after {
          background-color: var(--checkbox-disabled-color, var(--checkbox-default-disabled-color));
        }
      }
    }
  }
 
  &:focus-within {
    .checkbox__box {
      border-color: var(--checkbox-checked-focused-border-color, var(--checkbox-default-checked-focused-border-color, #37447A));
      border-radius: 4px;
    }
  }
 
  &__box {
    overflow: hidden;
    position: relative;
    white-space: nowrap;
    display: inline-block;
    max-width: var(--checkbox-size, var(--checkbox-default-size));
    max-height: var(--checkbox-size, var(--checkbox-default-size));
    border: 1px solid var(--checkbox-border-color, var(--checkbox-default-border-color));
    color: var(--checkbox-color, var(--checkbox-default-color));
    border-radius: 4px;
    cursor: pointer;
    box-sizing: content-box;
 
    &_checked {
      border-color: var(--checkbox-checked-border-color, var(--checkbox-default-checked-border-color));
    }
  }
 
  &__input {
    top: 0;
    left: 0;
    margin: 0;
    padding: 0;
    opacity: 0;
    width: 100%;
    z-index: 10;
    height: 100%;
    border: none;
    position: absolute;
    cursor: pointer;
  }
 
  &__check {
    width: var(--checkbox-size, var(--checkbox-default-size));
    height: var(--checkbox-size, var(--checkbox-default-size));
    background: var(--checkbox-background-color, var(--checkbox-default-background-color));
    will-change: all;
    position: relative;
    display: block;
    transition: all 80ms ease;
 
    &::before,
    &::after {
      inset: 0;
      display: block;
      content: '';
      opacity: 0;
      position: absolute;
    }
 
    &::before {
      background-color: var(--checkbox-color, var(--checkbox-default-color));
      mask-image: url($check-icon);
      mask-repeat: no-repeat;
      mask-size: auto;
      mask-position: center;
      transition: all 120ms ease;
    }
 
    &_checked {
      background-color: var(--checkbox-checked-background-color, var(--checkbox-default-checked-background-color));
      color: var(--checkbox-checked-color, var(--checkbox-default-checked-color));
    }
 
    &_indeterminate::after {
      inset: calc(var(--checkbox-indeterminate-gap, var(--checkbox-default-indeterminate-gap)));
      border-radius: 2px;
      background-color: var(--checkbox-checked-background-color, var(--checkbox-default-checked-background-color));
      color: var(--checkbox-checked-color, var(--checkbox-default-checked-color));
      border-color: var(--checkbox-checked-border-color, var(--checkbox-default-checked-border-color));
    }
 
    &_checked::before,
    &_indeterminate::after {
      opacity: 1;
    }
  }
 
  &__label {
    width: 100%;
    display: flex;
    align-items: center;
    gap: var(--spacing-tight);
  }
 
  &:not(.checkbox_disabled) {
    cursor: pointer;
 
    &:hover {
      .checkbox {
        &__box {
          border-color: var(--checkbox-hover-border-color, var(--checkbox-default-hover-border-color));
 
          &_checked {
            border-color: var(--checkbox-checked-hover-border-color, var(--checkbox-default-checked-hover-border-color));
          }
        }
 
        &__check {
          background-color: var(--checkbox-hover-background-color, var(--checkbox-default-hover-background-color));
          color: var(--checkbox-hover-color, var(--checkbox-default-hover-color));
 
          &_checked,
          &_indeterminate::after {
            background-color: var(--checkbox-checked-hover-background-color, var(--checkbox-default-checked-hover-background-color));
            color: var(--checkbox-checked-hover-color, var(--checkbox-default-checked-hover-color));
          }
        }
      }
    }
  }
 
  &__input:checked + &__check::before {
    opacity: 1;
  }
 
}