vivi_ui 0.2.0

Custom component library for Slint
Documentation
// SPDX-FileCopyrightText: 2024 vivi developers <vivi-ui@tuta.io>
// SPDX-License-Identifier: MIT

import { ButtonStyle } from "../foundation.slint";
import { ButtonAction } from "./magic_button_base.slint";
import { OutlineButton } from "./outline_button.slint";
import { MagicPalette, MagicFontSettings, MagicIconSettings, MagicSizeSettings, MagicLayoutSettings, MagicBorderSettings } from "./styling.slint";

export component TextButton inherits OutlineButton {
    in property <ButtonAction> action;

    property <ButtonStyle> default_style: {
        border_style: {
            border_radius: MagicBorderSettings.control_border_radius,
        },
        text_style: {
            font_size: MagicFontSettings.body.font_size,
            font_weight: MagicFontSettings.body.font_weight,
            foreground: MagicPalette.foreground,
        },
        icon_style: {
            icon_size: MagicIconSettings.body.icon_size,
            foreground: MagicPalette.foreground,
        },
        layout_style: {
            padding_left: MagicLayoutSettings.control_padding,
            padding_right: MagicLayoutSettings.control_padding,
            spacing: MagicLayoutSettings.control_spacing,
            alignment: LayoutAlignment.center,
        }
    };

    property <ButtonStyle> primary_style: {
        border_style: {
            border_radius: MagicBorderSettings.control_border_radius,
        },
        text_style: {
            font_size: MagicFontSettings.body.font_size,
            font_weight: MagicFontSettings.body.font_weight,
            foreground: MagicPalette.accent_background,
        },
        icon_style: {
            icon_size: MagicIconSettings.body.icon_size,
            foreground: MagicPalette.accent_background,
        },
        layout_style: {
            padding_left: MagicLayoutSettings.control_padding,
            padding_right: MagicLayoutSettings.control_padding,
            spacing: MagicLayoutSettings.control_spacing,
            alignment: LayoutAlignment.center,
        }
    };

    property <ButtonStyle> destructive_style: {
        border_style: {
            border_radius: MagicBorderSettings.control_border_radius,
        },
        text_style: {
            font_size: MagicFontSettings.body.font_size,
            font_weight: MagicFontSettings.body.font_weight,
            foreground: MagicPalette.destructive_background,
        },
        icon_style: {
            icon_size: MagicIconSettings.body.icon_size,
            foreground: MagicPalette.destructive_background,
        },
        layout_style: {
            padding_left: MagicLayoutSettings.control_padding,
            padding_right: MagicLayoutSettings.control_padding,
            spacing: MagicLayoutSettings.control_spacing,
            alignment: LayoutAlignment.center,
        }
    };

    style: root.action == ButtonAction.default ? root.default_style :
        root.action == ButtonAction.primary ? root.primary_style : root.destructive_style;
}