tab.ts

 1import { Layer } from "../common"
 2import { interactive, toggleable } from "../element"
 3import { Border, text } from "../style_tree/components"
 4
 5type TabProps = {
 6    layer: Layer
 7}
 8
 9export const tab = ({ layer }: TabProps) => {
10    const active_color = text(layer, "sans", "base").color
11    const inactive_border: Border = {
12        color: "#FFFFFF00",
13        width: 1,
14        bottom: true,
15        left: false,
16        right: false,
17        top: false,
18    }
19    const active_border: Border = {
20        ...inactive_border,
21        color: active_color,
22    }
23
24    const base = {
25        ...text(layer, "sans", "variant"),
26        padding: {
27            top: 8,
28            left: 8,
29            right: 8,
30            bottom: 6,
31        },
32        border: inactive_border,
33    }
34
35    const i = interactive({
36        state: {
37            default: {
38                ...base,
39            },
40            hovered: {
41                ...base,
42                ...text(layer, "sans", "base", "hovered"),
43            },
44            clicked: {
45                ...base,
46                ...text(layer, "sans", "base", "pressed"),
47            },
48        },
49    })
50
51    return toggleable({
52        base: i,
53        state: {
54            active: {
55                default: {
56                    ...i,
57                    ...text(layer, "sans", "base"),
58                    border: active_border,
59                },
60                hovered: {
61                    ...i,
62                    ...text(layer, "sans", "base", "hovered"),
63                    border: active_border,
64                },
65                clicked: {
66                    ...i,
67                    ...text(layer, "sans", "base", "pressed"),
68                    border: active_border,
69                },
70            },
71        },
72    })
73}