aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/widget/settings/Group.ts
blob: e9356e042222dcbf10a99fe26d8e2ac0d945db49 (plain)
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
import icons from "lib/icons"
import Row from "./Row"

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export default (title: string, ...rows: ReturnType<typeof Row<any>>[]) => Widget.Box(
    {
        class_name: "group",
        vertical: true,
    },
    Widget.Box([
        Widget.Label({
            hpack: "start",
            vpack: "end",
            class_name: "group-title",
            label: title,
            setup: w => Utils.idle(() => w.visible = !!title),
        }),
        title ? Widget.Button({
            hexpand: true,
            hpack: "end",
            child: Widget.Icon(icons.ui.refresh),
            class_name: "group-reset",
            sensitive: Utils.merge(
                rows.map(({ attribute: { opt } }) => opt.bind().as(v => v !== opt.initial)),
                (...values) => values.some(b => b),
            ),
            on_clicked: () => rows.forEach(row => row.attribute.opt.reset()),
        }) : Widget.Box(),
    ]),
    Widget.Box({
        vertical: true,
        children: rows,
    }),
)