1    type CheckBox =
2        inherit Wrapper
3    
4        var obs text = ""
5        var obs is_checked = false
6    
7        subscribe { _, event -> if event.is_mouse_press then
8            is_checked = not is_checked }
9    
10       is_clickable = true
11   
12       let text_block = TextBlock.new
13       let background_rectangle = Rectangle.new
14       let check_rectangle = Rectangle.new
15       let margin = Margin.new
16   
17       text_block.char_margins_height@atom.bind {
18           val u = _ as f32 * 0.7 |> as<u32>
19           background_rectangle.min_width = u
20                                min_height = u
21   
22           let v = u as f32 * 0.5 |> as<u32>
23           check_rectangle.min_width = v
24                           min_height = v
25   
26           margin.left = u as f32 * 0.3 |> as<u32> } |> push_token
27   
28       is_checked@atom.bind { check_rectangle.is_visible = _ }
29       |> push_token
30   
31       let stack = Stack
32           is_horizontal = true
33           align_h = AlignH/Left
34           margin
35               align_h = AlignH/Left
36               align_v = AlignV/Center
37               up = 0
38               background_rectangle
39                   color = Vector3.gray 0.6
40                   check_rectangle
41                       color = Vector3.gray 0.2
42                       align_h = AlignH/Center
43                       align_v = AlignV/Center
44           text_block
45               text@obs = text@obs
46               align_h = AlignH/Left
47               align_v = AlignV/Center
48   
49       content = stack
50