Metadata-Version: 2.4
Name: dex-framework
Version: 0.0.50
Summary: Biblioteca reutilizável que encapsula todos os componentes do Flet v0.84.0, organizada em grupos temáticos.
Author-email: Almir <almir.jg@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/almirjg/DEx-Framework_3
Project-URL: Repository, https://github.com/almirjg/DEx-Framework_3
Keywords: flet,ui,framework,components,saas,design-system
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flet==0.84.0
Provides-Extra: dev
Requires-Dist: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=5.0.0; extra == "dev"
Dynamic: license-file

# DEx-Framework v0.0.49

Biblioteca reutilizável que encapsula **todos os componentes do Flet v0.84.0**, organizada em grupos temáticos, com UseCases demonstrativos para cada grupo.

---

## Instalação

```bash
pip install flet==0.84.0
```

Clone o repositório e adicione ao `PYTHONPATH` ou instale em modo editável:

```bash
git clone <repo-url>
cd DEx-Framework_3
pip install -e .
```

---

## Uso básico

### Exemplo 1 — Botão com dex_id e callback de montagem

```python
import flet as ft
from dex_framework import DEx_ElevatedButton

def main(page: ft.Page) -> None:
    btn = DEx_ElevatedButton(
        text="Salvar",
        dex_id="btn_salvar",
        on_click=lambda e: print("clicou"),
        on_dex_ready=lambda c: print(f"{c.dex_id} montado"),
    )
    page.add(btn)

ft.app(target=main)
```

### Exemplo 2 — Layout responsivo

```python
import flet as ft
from dex_framework import DEx_ResponsiveRow, DEx_Container, DEx_Text

def main(page: ft.Page) -> None:
    row = DEx_ResponsiveRow(
        dex_id="row_principal",
        controls=[
            DEx_Container(
                col={"sm": 12, "md": 6},
                content=DEx_Text("Coluna esquerda", dex_id="txt_esq"),
                bgcolor=ft.Colors.BLUE_50,
                padding=16,
            ),
            DEx_Container(
                col={"sm": 12, "md": 6},
                content=DEx_Text("Coluna direita", dex_id="txt_dir"),
                bgcolor=ft.Colors.GREEN_50,
                padding=16,
            ),
        ],
    )
    page.add(row)

ft.app(target=main)
```

### Exemplo 3 — Tema customizado

```python
import flet as ft
from dex_framework import DEx_Theme, DEx_ColorScheme

def main(page: ft.Page) -> None:
    page.theme = DEx_Theme(
        color_scheme_seed=ft.Colors.INDIGO,
        color_scheme=DEx_ColorScheme(
            primary=ft.Colors.INDIGO,
            secondary=ft.Colors.TEAL,
            dex_id="esquema_app",
        ),
        dex_id="tema_app",
    )
    page.add(ft.Text("App com tema DEx!", size=24))

ft.app(target=main)
```

---

## Estrutura de grupos

| Grupo | Componentes | Quantidade |
|---|---|---|
| `layout` | DEx_Row, DEx_Column, DEx_Stack, DEx_Container, DEx_ResponsiveRow, DEx_SafeArea | 6 |
| `navigation` | DEx_AppBar, DEx_NavigationBar, DEx_NavigationRail, DEx_NavigationDrawer, DEx_Tabs, DEx_CupertinoNavigationBar | 6 |
| `input` | DEx_TextField, DEx_Dropdown, DEx_Checkbox, DEx_Radio, DEx_RadioGroup, DEx_Switch, DEx_Slider, DEx_RangeSlider, DEx_DatePicker, DEx_TimePicker, DEx_CupertinoTextField, DEx_CupertinoCheckbox, DEx_CupertinoSlider, DEx_CupertinoSwitch | 14 |
| `buttons` | DEx_ElevatedButton, DEx_FilledButton, DEx_FilledTonalButton, DEx_OutlinedButton, DEx_TextButton, DEx_IconButton, DEx_FloatingActionButton, DEx_PopupMenuButton, DEx_MenuItemButton, DEx_SubmenuButton, DEx_CupertinoButton, DEx_CupertinoFilledButton | 12 |
| `display` | DEx_Text, DEx_Icon, DEx_Image, DEx_CircleAvatar, DEx_Card, DEx_DataTable, DEx_ListView, DEx_GridView, DEx_ListTile, DEx_ExpansionTile, DEx_ExpansionPanel, DEx_Markdown | 12 |
| `feedback` | DEx_ProgressBar, DEx_ProgressRing, DEx_SnackBar, DEx_AlertDialog, DEx_Banner, DEx_Tooltip, DEx_Badge, DEx_Chip, DEx_CupertinoAlertDialog, DEx_CupertinoActivityIndicator | 10 |
| `overlay` | DEx_BottomSheet, DEx_CupertinoBottomSheet, DEx_Drawer, DEx_SearchBar, DEx_SearchAnchor, DEx_MenuBar, DEx_Pagelet | 7 |
| `media` | DEx_Audio, DEx_Video, DEx_Lottie | 3 |
| `canvas` | DEx_Canvas | 1 |
| `maps` | DEx_Map | 1 |
| `charts` | DEx_BarChart, DEx_LineChart, DEx_PieChart | 3 |
| `scrolling` | DEx_ScrollableControl, DEx_DragTarget | 2 |
| `interaction` | DEx_GestureDetector, DEx_Draggable, DEx_Dismissible, DEx_SelectionArea, DEx_TransparentPointer | 5 |
| `theming` | DEx_Theme, DEx_ColorScheme | 2 |
| **Total** | | **84** |

---

## Como rodar os UseCases

Os UseCases ficam na pasta `usecases/` na raiz do projeto.
Execute a partir da raiz do projeto (`DEx-Framework_3/`):

```bash
# Grupo buttons
python -m usecases.buttons.UC_buttons

# Grupo layout
python -m usecases.layout.UC_layout

# Grupo navigation
python -m usecases.navigation.UC_navigation

# Grupo input
python -m usecases.input.UC_input

# Grupo display
python -m usecases.display.UC_display

# Grupo feedback
python -m usecases.feedback.UC_feedback

# Grupo overlay
python -m usecases.overlay.UC_overlay

# Grupo media
python -m usecases.media.UC_media

# Grupo canvas
python -m usecases.canvas.UC_canvas

# Grupo maps
python -m usecases.maps.UC_maps

# Grupo charts
python -m usecases.charts.UC_charts

# Grupo scrolling
python -m usecases.scrolling.UC_scrolling

# Grupo interaction
python -m usecases.interaction.UC_interaction

# Grupo theming
python -m usecases.theming.UC_theming
```

---

## Convenções DEx

Todos os componentes DEx seguem estas regras:

- **Herança direta** de `ft.<NomeOriginal>` — 100% da API Flet preservada
- **`dex_id: str`** — identificador keyword-only para rastreamento
- **`on_dex_ready`** — callback disparado após montagem na árvore (`did_mount`)
- **Type hints** em todas as assinaturas (PEP 484)
- **Docstrings Google Style** em toda classe e método público

```python
# Todos os componentes aceitam:
componente = DEx_<Nome>(
    # ... parâmetros nativos do Flet ...
    dex_id="meu_id",                        # identificador único
    on_dex_ready=lambda c: print(c.dex_id), # callback de montagem
)
```

---

*DEx-Framework v3.0.0 — gerado via Claude Code*
