Metadata-Version: 2.4
Name: lb-easy-flet
Version: 0.0.1
Summary: UI made for lazy, by lazy. Build modern Flet apps instantly.
Author: logic-break
Author-email: abibasqabiba@gmail.com
License: Custom / Copyright logic-break
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flet>=0.21.0
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary


# lb-easy-flet

© Copyright logic-break 2026

> UI made for lazy, by lazy. Build modern Flet apps without the headache.

installation:
    pip install lb-easy-flet

**NOTE: in code, you must import lb_easy_flet**

## What it can do:
- Create modern GUIs with zero nesting (no Rows/Columns needed manually)
- Automatic value handling with simple `.get()` methods[cite: 5]
- Built-in auto-scrolling log system (Listbox)

# Features:
- **Smart Sliders**: Automatically updates labels when you move the thumb

# How to use:
Import `EasyFlet` from the library, initialize it, and start stacking elements.
**hint:** use `from lb_easy_flet import EasyFlet`

# Usage (The Builder Methods):
- `.header(text)` - Adds a bold, blue title[cite: 5]
- `.input(label)` - Adds a text field. Use `.get()` to read it[cite: 5]
- `.dropdown(label, options, on_change=None)` - Adds a dropdown menu[cite: 5]
- `.radio(label, options)` - Adds a radio selection group. Use `.get()` for result[cite: 5]
- `.slider(label, min, max)` - Adds a slider with an auto-updating label[cite: 5]
- `.listbox(label, height)` - Adds a scrollable log area. Use `.add(text)` or `.clear()`[cite: 5]
- `.button(text, callback, type="primary")` - Adds a button (primary or secondary)[cite: 5]
- `.run()` - Launches the application[cite: 5]

# Example:
```python
from lb_easy_flet import EasyFlet

# 1. Создаем приложение
app = EasyFlet("AI Image Studio")

app.header("Image Generator")

# 2. Поля ввода
prompt = app.input("Prompt")
negative = app.input("Negative Prompt")

# 3. Логи (Listbox) - создаем раньше, чтобы функции его видели
status = app.listbox("System Status", height=180)

# 4. Выпадающий список
def on_model_change(val):
    status.add(f"Switched to model: {val}")

model = app.dropdown("AI Model", ["SDXL", "Midjourney v6", "DALL-E 3"], on_model_change)

# 5. Радио и Слайдер
ratio = app.radio("Aspect Ratio", ["1:1", "16:9", "9:16"])
steps = app.slider("Sampling Steps", 10, 100)

# 6. Логика кнопки
def generate():
    p = prompt.get()
    m = model.get()
    r = ratio.get()
    s = steps.get()

    if not p:
        status.add("ERROR: Prompt is empty!")
        return

    status.add(f"Generating: {p}...")
    status.add(f"Params: {m} | {r} | Steps: {s}")

# 7. Кнопки
app.button("GENERATE IMAGE", generate)
app.button("CLEAR LOGS", lambda: status.clear(), type="secondary")

# 8. Погнали!
app.run()
