import flet as ft from gallery.models import Example def text_fields() -> ft.Control: return ft.Column( controls=[ ft.TextField(label="Имя", hint_text="Алексей", prefix_icon=ft.Icons.PERSON), ft.TextField(label="Пароль", password=True, can_reveal_password=True), ft.TextField(label="Комментарий", multiline=True, min_lines=2, max_lines=4), ], spacing=12, ) def dropdowns() -> ft.Control: return ft.Dropdown( label="Среда", value="web", options=[ ft.DropdownOption(key="web", text="Web"), ft.DropdownOption(key="android", text="Android"), ft.DropdownOption(key="desktop", text="Desktop"), ], width=300, ) def selection_controls() -> ft.Control: return ft.Column( controls=[ ft.Checkbox("Получать обновления", value=True), ft.Switch(label="Автоматическая тема", value=False), ft.RadioGroup( value="comfortable", content=ft.Row( controls=[ ft.Radio(value="compact", label="Компактно"), ft.Radio(value="comfortable", label="Удобно"), ] ), ), ] ) def sliders() -> ft.Control: value_label = ft.Text("Громкость: 40") def changed(e: ft.Event[ft.Slider]) -> None: value_label.value = f"Громкость: {int(e.control.value)}" value_label.update() return ft.Column( controls=[ value_label, ft.Slider(value=40, min=0, max=100, divisions=10, label="{value}", on_change=changed), ft.RangeSlider(start_value=20, end_value=75, min=0, max=100, divisions=20), ] ) def segmented_choice() -> ft.Control: return ft.SegmentedButton( segments=[ ft.Segment(value="day", label="День", icon=ft.Icons.LIGHT_MODE), ft.Segment(value="week", label="Неделя", icon=ft.Icons.DATE_RANGE), ft.Segment(value="month", label="Месяц", icon=ft.Icons.CALENDAR_MONTH), ], selected=["week"], ) EXAMPLES = [ Example("text-fields", "Text fields", "Ввод текста, пароля и многострочного значения.", "Ввод", text_fields), Example("dropdowns", "Dropdown", "Выбор одного значения из меню.", "Ввод", dropdowns), Example("selection-controls", "Checkbox, switch и radio", "Булевы и взаимоисключающие варианты.", "Ввод", selection_controls), Example("sliders", "Sliders", "Одиночный и диапазонный выбор чисел.", "Ввод", sliders), Example("segmented", "Segmented button", "Компактный выбор режима.", "Ввод", segmented_choice), ]