slint-ui-templates 0.1.0

Composable Slint UI building blocks — mother-child pattern, token-driven
Documentation
import { Colors, Spacing, Type } from "../tokens/theme.slint";
import { Sizes } from "../tokens/sizes.slint";
import { MultiSelectOption }  from "multi-select-types.slint";
import { MultiSelectItem }    from "MultiSelectItem.slint";

// MultiSelectDropdown — the dropdown list for multi-select options.
/// M ul ti se le ct dr op do wn component.
export component MultiSelectDropdown inherits Rectangle {
    /// Input property "options".
    in property <[MultiSelectOption]> options: [];
    /// Callback fired for i te m s el ec te d.
    callback item-selected(string);

    border-radius: Spacing.xs;
    border-width: Sizes.border-w;
    border-color: Colors.border;
    background: Colors.bg-elevated;
    drop-shadow-blur: Spacing.sm;
    drop-shadow-color: Colors.shadow;
    clip: true;

    Flickable {
        width: parent.width;
        height: parent.height;
        viewport-height: root.options.length * Spacing.xl;

        VerticalLayout {
            for opt in root.options: MultiSelectItem {
                opt-label: opt.label;
                opt-value: opt.value;
                item-selected(v) => { root.item-selected(v); }
            }
        }
    }
}