dex-framework 0.0.50__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. dex_framework/__init__.py +22 -0
  2. dex_framework/buttons/DEx_ActionButtons.py +212 -0
  3. dex_framework/buttons/DEx_CupertinoButton.py +52 -0
  4. dex_framework/buttons/DEx_CupertinoFilledButton.py +52 -0
  5. dex_framework/buttons/DEx_ElevatedButton.py +57 -0
  6. dex_framework/buttons/DEx_FilledButton.py +52 -0
  7. dex_framework/buttons/DEx_FilledTonalButton.py +52 -0
  8. dex_framework/buttons/DEx_FloatingActionButton.py +52 -0
  9. dex_framework/buttons/DEx_IconButton.py +52 -0
  10. dex_framework/buttons/DEx_MenuItemButton.py +52 -0
  11. dex_framework/buttons/DEx_OutlinedButton.py +52 -0
  12. dex_framework/buttons/DEx_PopupMenuButton.py +52 -0
  13. dex_framework/buttons/DEx_SubmenuButton.py +52 -0
  14. dex_framework/buttons/DEx_TextButton.py +52 -0
  15. dex_framework/buttons/__init__.py +30 -0
  16. dex_framework/canvas/DEx_Canvas.py +50 -0
  17. dex_framework/canvas/__init__.py +3 -0
  18. dex_framework/charts/DEx_BarChart.py +82 -0
  19. dex_framework/charts/DEx_CandlestickChart.py +288 -0
  20. dex_framework/charts/DEx_DonutChart.py +334 -0
  21. dex_framework/charts/DEx_GeoHeatmap.py +305 -0
  22. dex_framework/charts/DEx_HeatmapChart.py +363 -0
  23. dex_framework/charts/DEx_LineChart.py +85 -0
  24. dex_framework/charts/DEx_PieChart.py +79 -0
  25. dex_framework/charts/__init__.py +15 -0
  26. dex_framework/charts/_brazil_states.py +295 -0
  27. dex_framework/core/DEx_Compat.py +45 -0
  28. dex_framework/core/DEx_Config.py +26 -0
  29. dex_framework/core/DEx_Protocol.py +30 -0
  30. dex_framework/core/__init__.py +13 -0
  31. dex_framework/display/DEx_Card.py +50 -0
  32. dex_framework/display/DEx_CircleAvatar.py +50 -0
  33. dex_framework/display/DEx_DataTable.py +50 -0
  34. dex_framework/display/DEx_ExpansionPanel.py +50 -0
  35. dex_framework/display/DEx_ExpansionTile.py +50 -0
  36. dex_framework/display/DEx_GridView.py +50 -0
  37. dex_framework/display/DEx_Icon.py +50 -0
  38. dex_framework/display/DEx_Image.py +50 -0
  39. dex_framework/display/DEx_KpiCard.py +205 -0
  40. dex_framework/display/DEx_ListTile.py +50 -0
  41. dex_framework/display/DEx_ListView.py +50 -0
  42. dex_framework/display/DEx_Markdown.py +50 -0
  43. dex_framework/display/DEx_Text.py +50 -0
  44. dex_framework/display/DEx_VersionBar.py +80 -0
  45. dex_framework/display/__init__.py +21 -0
  46. dex_framework/feedback/DEx_AlertDialog.py +50 -0
  47. dex_framework/feedback/DEx_Badge.py +50 -0
  48. dex_framework/feedback/DEx_Banner.py +50 -0
  49. dex_framework/feedback/DEx_Chip.py +50 -0
  50. dex_framework/feedback/DEx_CupertinoActivityIndicator.py +50 -0
  51. dex_framework/feedback/DEx_CupertinoAlertDialog.py +50 -0
  52. dex_framework/feedback/DEx_ProgressBar.py +50 -0
  53. dex_framework/feedback/DEx_ProgressRing.py +50 -0
  54. dex_framework/feedback/DEx_SnackBar.py +50 -0
  55. dex_framework/feedback/DEx_Tooltip.py +53 -0
  56. dex_framework/feedback/__init__.py +17 -0
  57. dex_framework/input/DEx_Checkbox.py +50 -0
  58. dex_framework/input/DEx_CupertinoCheckbox.py +50 -0
  59. dex_framework/input/DEx_CupertinoSlider.py +50 -0
  60. dex_framework/input/DEx_CupertinoSwitch.py +50 -0
  61. dex_framework/input/DEx_CupertinoTextField.py +56 -0
  62. dex_framework/input/DEx_DatePicker.py +50 -0
  63. dex_framework/input/DEx_Dropdown.py +57 -0
  64. dex_framework/input/DEx_Radio.py +50 -0
  65. dex_framework/input/DEx_RadioGroup.py +50 -0
  66. dex_framework/input/DEx_RangeSlider.py +50 -0
  67. dex_framework/input/DEx_Slider.py +50 -0
  68. dex_framework/input/DEx_Switch.py +50 -0
  69. dex_framework/input/DEx_TextField.py +57 -0
  70. dex_framework/input/DEx_TimePicker.py +50 -0
  71. dex_framework/input/__init__.py +22 -0
  72. dex_framework/interaction/DEx_Dismissible.py +50 -0
  73. dex_framework/interaction/DEx_Draggable.py +50 -0
  74. dex_framework/interaction/DEx_GestureDetector.py +50 -0
  75. dex_framework/interaction/DEx_SelectionArea.py +50 -0
  76. dex_framework/interaction/DEx_TransparentPointer.py +50 -0
  77. dex_framework/interaction/__init__.py +10 -0
  78. dex_framework/layout/DEx_AppShell.py +394 -0
  79. dex_framework/layout/DEx_Column.py +50 -0
  80. dex_framework/layout/DEx_Container.py +50 -0
  81. dex_framework/layout/DEx_Header.py +171 -0
  82. dex_framework/layout/DEx_ResponsiveRow.py +50 -0
  83. dex_framework/layout/DEx_Row.py +50 -0
  84. dex_framework/layout/DEx_SafeArea.py +50 -0
  85. dex_framework/layout/DEx_Stack.py +50 -0
  86. dex_framework/layout/__init__.py +15 -0
  87. dex_framework/maps/DEx_GeoHeatmap.py +703 -0
  88. dex_framework/maps/DEx_Map.py +79 -0
  89. dex_framework/maps/__init__.py +4 -0
  90. dex_framework/media/DEx_Audio.py +80 -0
  91. dex_framework/media/DEx_Lottie.py +82 -0
  92. dex_framework/media/DEx_Video.py +75 -0
  93. dex_framework/media/__init__.py +5 -0
  94. dex_framework/navigation/DEx_AppBar.py +50 -0
  95. dex_framework/navigation/DEx_CupertinoNavigationBar.py +50 -0
  96. dex_framework/navigation/DEx_NavBar.py +531 -0
  97. dex_framework/navigation/DEx_NavigationBar.py +50 -0
  98. dex_framework/navigation/DEx_NavigationDrawer.py +50 -0
  99. dex_framework/navigation/DEx_NavigationRail.py +50 -0
  100. dex_framework/navigation/DEx_Tabs.py +158 -0
  101. dex_framework/navigation/__init__.py +13 -0
  102. dex_framework/overlay/DEx_BottomSheet.py +50 -0
  103. dex_framework/overlay/DEx_CupertinoBottomSheet.py +50 -0
  104. dex_framework/overlay/DEx_Drawer.py +51 -0
  105. dex_framework/overlay/DEx_MenuBar.py +50 -0
  106. dex_framework/overlay/DEx_Pagelet.py +50 -0
  107. dex_framework/overlay/DEx_SearchAnchor.py +67 -0
  108. dex_framework/overlay/DEx_SearchBar.py +50 -0
  109. dex_framework/overlay/__init__.py +12 -0
  110. dex_framework/py.typed +0 -0
  111. dex_framework/scrolling/DEx_DragTarget.py +50 -0
  112. dex_framework/scrolling/DEx_ScrollableControl.py +56 -0
  113. dex_framework/scrolling/__init__.py +4 -0
  114. dex_framework/theming/DEx_BrandThemes.py +1006 -0
  115. dex_framework/theming/DEx_ColorScheme.py +37 -0
  116. dex_framework/theming/DEx_Theme.py +37 -0
  117. dex_framework/theming/__init__.py +5 -0
  118. dex_framework-0.0.50.dist-info/METADATA +217 -0
  119. dex_framework-0.0.50.dist-info/RECORD +122 -0
  120. dex_framework-0.0.50.dist-info/WHEEL +5 -0
  121. dex_framework-0.0.50.dist-info/licenses/LICENSE +21 -0
  122. dex_framework-0.0.50.dist-info/top_level.txt +1 -0
@@ -0,0 +1,22 @@
1
+ """
2
+ DEx-Framework v3.0.0
3
+ Biblioteca reutilizável que encapsula todos os componentes do Flet v0.84.0.
4
+
5
+ Uso básico:
6
+ from dex_framework import DEx_ElevatedButton, DEx_TextField, DEx_Column
7
+ """
8
+
9
+ from .layout import *
10
+ from .navigation import *
11
+ from .input import *
12
+ from .buttons import *
13
+ from .display import *
14
+ from .feedback import *
15
+ from .overlay import *
16
+ from .media import *
17
+ from .canvas import *
18
+ from .maps import *
19
+ from .charts import *
20
+ from .scrolling import *
21
+ from .interaction import *
22
+ from .theming import *
@@ -0,0 +1,212 @@
1
+ """DEx_ActionButtons — barra de botões de ação direita-para-esquerda."""
2
+
3
+ from __future__ import annotations
4
+ from typing import Callable
5
+ import flet as ft
6
+ from dex_framework.theming.DEx_BrandThemes import DEx_BrandTheme
7
+
8
+
9
+ class DEx_ActionButton:
10
+ """
11
+ Define um botão individual para uso em DEx_ActionButtons.
12
+
13
+ Params
14
+ ------
15
+ icon : ícone do botão (opcional se text fornecido; obrigatório se sem text)
16
+ text : rótulo do botão (opcional)
17
+ tooltip : dica de contexto
18
+ on_click : callback de clique
19
+ disabled : botão desabilitado
20
+ button_type : tipo pré-definido — "exit" | "theme" | "brightness" | "user"
21
+ define ícone padrão e comportamento embutido quando page é fornecido
22
+
23
+ Ícones e comportamentos padrão por tipo
24
+ ----------------------------------------
25
+ exit → ft.Icons.LOGOUT — fecha a janela
26
+ theme → ft.Icons.PALETTE — cicla entre temas por nome de marca
27
+ brightness → ft.Icons.BRIGHTNESS_6 — alterna entre modo claro e escuro
28
+ user → ft.Icons.ACCOUNT_CIRCLE — nasce como readonly (disabled=True)
29
+ """
30
+
31
+ _DEFAULT_ICONS: dict = {
32
+ "exit": ft.Icons.LOGOUT,
33
+ "theme": ft.Icons.PALETTE,
34
+ "brightness": ft.Icons.BRIGHTNESS_6,
35
+ "user": ft.Icons.ACCOUNT_CIRCLE,
36
+ }
37
+
38
+ def __init__(
39
+ self,
40
+ icon: ft.IconData | None = None,
41
+ text: str | None = None,
42
+ tooltip: str | None = None,
43
+ on_click: Callable | None = None,
44
+ disabled: bool = False,
45
+ visible: bool = True,
46
+ button_type: str | None = None,
47
+ ) -> None:
48
+ self.button_type = button_type
49
+ self.text = text
50
+ self.icon = icon if icon is not None else self._DEFAULT_ICONS.get(button_type)
51
+ self.tooltip = tooltip
52
+ self.on_click = on_click
53
+ self.visible = visible
54
+ # "user" nasce como readonly salvo on_click explícito
55
+ self.disabled = disabled or (button_type == "user" and on_click is None)
56
+
57
+
58
+ class DEx_ActionButtons(ft.Container):
59
+ """
60
+ Barra de botões de ação alinhada à direita, com quebra automática de linha.
61
+
62
+ Os botões são apresentados da direita para a esquerda conforme a ordem de
63
+ criação: o primeiro botão da lista aparece mais à direita. Quando o total
64
+ de botões ultrapassa a largura disponível, uma segunda linha é criada com
65
+ o mesmo alinhamento.
66
+
67
+ O container_main (exposto publicamente) não é expansível — seu tamanho é
68
+ determinado pelo conteúdo.
69
+
70
+ Params
71
+ ------
72
+ buttons : lista de DEx_ActionButton
73
+ page : referência à ft.Page (necessário para ações embutidas exit/theme)
74
+ dex_id, dex_theme, on_dex_ready : padrão DEx
75
+ """
76
+
77
+ # Ordem canônica de todas as marcas para o ciclo de temas
78
+ _ALL_BRANDS: list[str] = [
79
+ brand
80
+ for brands in DEx_BrandTheme.BRAND_GROUPS.values()
81
+ for brand in brands
82
+ ]
83
+
84
+ def __init__(
85
+ self,
86
+ buttons: list[DEx_ActionButton] | None = None,
87
+ page: ft.Page | None = None,
88
+ dex_id: str = "",
89
+ dex_theme: str = "dell",
90
+ on_dex_ready: Callable | None = None,
91
+ **kwargs,
92
+ ) -> None:
93
+ self.dex_id: str = dex_id
94
+ self.dex_theme: str = dex_theme
95
+ # Desembrulha _UCProxy (hub) para sempre guardar a ft.Page real.
96
+ # getattr(proxy, "_real", proxy) funciona porque _UCProxy armazena
97
+ # "_real" via super().__setattr__, logo __getattr__ não é chamado.
98
+ self._page = getattr(page, "_real", page) if page is not None else None
99
+ # -1 → primeira clicada vai sempre para índice 0 (bradesco, vermelho),
100
+ # garantindo contraste visual imediato independente do dex_theme inicial.
101
+ self._theme_idx: int = -1
102
+ self._theme_widget: ft.IconButton | None = None
103
+ self._brightness_widget: ft.IconButton | None = None
104
+
105
+ # Inverte a lista para que o 1º definido fique mais à direita
106
+ btn_list = list(buttons or [])
107
+ widgets = [self._build_widget(btn) for btn in reversed(btn_list)]
108
+
109
+ self.container_main = ft.Container(
110
+ content=ft.Row(
111
+ controls=widgets,
112
+ wrap=True,
113
+ alignment=ft.MainAxisAlignment.END,
114
+ tight=True,
115
+ spacing=4,
116
+ run_spacing=4,
117
+ ),
118
+ padding=ft.Padding.symmetric(horizontal=4, vertical=4),
119
+ )
120
+
121
+ super().__init__(content=self.container_main, **kwargs)
122
+
123
+ if on_dex_ready:
124
+ on_dex_ready(self)
125
+
126
+ # ── Resolução de clique ────────────────────────────────────────────
127
+
128
+ def _resolve_click(self, btn: DEx_ActionButton) -> Callable | None:
129
+ if btn.on_click:
130
+ return btn.on_click
131
+ if self._page is None:
132
+ return None
133
+ if btn.button_type == "exit":
134
+ return self._do_exit
135
+ if btn.button_type == "theme":
136
+ return self._next_theme
137
+ if btn.button_type == "brightness":
138
+ return self._toggle_brightness
139
+ return None
140
+
141
+ async def _do_exit(self, e) -> None:
142
+ if self._page:
143
+ await self._page.window.close()
144
+
145
+ def _toggle_brightness(self, e) -> None:
146
+ if self._page is None:
147
+ return
148
+ is_dark = self._page.theme_mode == ft.ThemeMode.DARK
149
+ self._page.theme_mode = ft.ThemeMode.LIGHT if is_dark else ft.ThemeMode.DARK
150
+ # Atualiza ícone e tooltip para refletir o novo estado
151
+ if self._brightness_widget is not None:
152
+ if self._page.theme_mode == ft.ThemeMode.DARK:
153
+ self._brightness_widget.icon = ft.Icons.BRIGHTNESS_2
154
+ self._brightness_widget.tooltip = "Modo escuro (clique para claro)"
155
+ else:
156
+ self._brightness_widget.icon = ft.Icons.BRIGHTNESS_HIGH
157
+ self._brightness_widget.tooltip = "Modo claro (clique para escuro)"
158
+ self._brightness_widget.update()
159
+ self._page.update()
160
+
161
+ def _next_theme(self, e) -> None:
162
+ self._theme_idx = (self._theme_idx + 1) % len(self._ALL_BRANDS)
163
+ brand = self._ALL_BRANDS[self._theme_idx]
164
+
165
+ # Atualiza tooltip com grupo e nome da marca
166
+ if self._theme_widget is not None:
167
+ group = next(
168
+ (g for g, brands in DEx_BrandTheme.BRAND_GROUPS.items() if brand in brands),
169
+ "",
170
+ )
171
+ group_label = DEx_BrandTheme.GROUP_META.get(group, {}).get("label", group)
172
+ brand_display = brand.replace("_", " ").title()
173
+ self._theme_widget.tooltip = f"{group_label} · {brand_display}"
174
+ self._theme_widget.update()
175
+
176
+ if self._page:
177
+ DEx_BrandTheme.apply(self._page, brand)
178
+
179
+ # ── Construção de widget por botão ─────────────────────────────────
180
+
181
+ def _build_widget(self, btn: DEx_ActionButton) -> ft.Control:
182
+ on_click = self._resolve_click(btn)
183
+
184
+ if btn.text:
185
+ if btn.icon:
186
+ content = ft.Row(
187
+ [ft.Icon(btn.icon, size=16), ft.Text(btn.text, size=12)],
188
+ spacing=4,
189
+ tight=True,
190
+ )
191
+ else:
192
+ content = ft.Text(btn.text, size=12)
193
+ return ft.Button(
194
+ content=content,
195
+ tooltip=btn.tooltip,
196
+ on_click=on_click,
197
+ disabled=btn.disabled,
198
+ )
199
+
200
+ widget = ft.IconButton(
201
+ icon=btn.icon or ft.Icons.RADIO_BUTTON_UNCHECKED,
202
+ tooltip=btn.tooltip,
203
+ on_click=on_click,
204
+ disabled=btn.disabled,
205
+ visible=btn.visible,
206
+ icon_size=20,
207
+ )
208
+ if btn.button_type == "theme":
209
+ self._theme_widget = widget
210
+ if btn.button_type == "brightness":
211
+ self._brightness_widget = widget
212
+ return widget
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_CupertinoButton — DEx-Framework v3.0.0
3
+ Encapsula flet.CupertinoButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_CupertinoButton
7
+ componente = DEx_CupertinoButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_CupertinoButton(ft.CupertinoButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.CupertinoButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.CupertinoButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_CupertinoButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_CupertinoButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_CupertinoFilledButton — DEx-Framework v3.0.0
3
+ Encapsula flet.CupertinoFilledButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_CupertinoFilledButton
7
+ componente = DEx_CupertinoFilledButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_CupertinoFilledButton(ft.CupertinoFilledButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.CupertinoFilledButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.CupertinoFilledButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_CupertinoFilledButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_CupertinoFilledButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,57 @@
1
+ """
2
+ DEx_ElevatedButton — DEx-Framework v3.0.0
3
+ Encapsula flet.Button com padrões DEx.
4
+ (flet.ElevatedButton foi depreciado no 0.80.0; base atualizada para ft.Button)
5
+
6
+ Uso básico:
7
+ from dex_framework.buttons import DEx_ElevatedButton
8
+ componente = DEx_ElevatedButton(content="Salvar", dex_id="btn")
9
+ """
10
+
11
+ from __future__ import annotations
12
+ import flet as ft
13
+ from typing import Any, Callable, Optional
14
+
15
+
16
+ class DEx_ElevatedButton(ft.Button):
17
+ """
18
+ Encapsulamento DEx do controle flet.Button (substituto do ElevatedButton).
19
+
20
+ flet.ElevatedButton foi depreciado no 0.80.0. Esta classe herda de
21
+ ft.Button, mantendo o nome DEx_ElevatedButton para compatibilidade.
22
+
23
+ Mantém 100% da API original do Flet e adiciona:
24
+ - Valores padrão opinados (brand defaults)
25
+ - Parâmetro `dex_id` para rastreamento
26
+ - Hook `on_dex_ready` disparado após montagem
27
+
28
+ Args:
29
+ dex_id: Identificador único do componente na aplicação.
30
+ on_dex_ready: Callback chamado quando o componente é montado.
31
+ **kwargs: Todos os parâmetros nativos de flet.Button.
32
+
33
+ Example:
34
+ >>> btn = DEx_ElevatedButton(
35
+ ... content="Salvar",
36
+ ... dex_id="btn_salvar",
37
+ ... )
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ *args: Any,
43
+ dex_id: str = "",
44
+ dex_theme: str = "dell",
45
+ on_dex_ready: Optional[Callable[["DEx_ElevatedButton"], None]] = None,
46
+ **kwargs: Any,
47
+ ) -> None:
48
+ super().__init__(*args, **kwargs)
49
+ self.dex_id: str = dex_id
50
+ self.dex_theme: str = dex_theme
51
+ self._on_dex_ready = on_dex_ready
52
+
53
+ def did_mount(self) -> None:
54
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
55
+ super().did_mount()
56
+ if self._on_dex_ready:
57
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_FilledButton — DEx-Framework v3.0.0
3
+ Encapsula flet.FilledButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_FilledButton
7
+ componente = DEx_FilledButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_FilledButton(ft.FilledButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.FilledButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.FilledButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_FilledButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_FilledButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_FilledTonalButton — DEx-Framework v3.0.0
3
+ Encapsula flet.FilledTonalButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_FilledTonalButton
7
+ componente = DEx_FilledTonalButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_FilledTonalButton(ft.FilledTonalButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.FilledTonalButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.FilledTonalButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_FilledTonalButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_FilledTonalButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_FloatingActionButton — DEx-Framework v3.0.0
3
+ Encapsula flet.FloatingActionButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_FloatingActionButton
7
+ componente = DEx_FloatingActionButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_FloatingActionButton(ft.FloatingActionButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.FloatingActionButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.FloatingActionButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_FloatingActionButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_FloatingActionButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_IconButton — DEx-Framework v3.0.0
3
+ Encapsula flet.IconButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_IconButton
7
+ componente = DEx_IconButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_IconButton(ft.IconButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.IconButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.IconButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_IconButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_IconButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)
@@ -0,0 +1,52 @@
1
+ """
2
+ DEx_MenuItemButton — DEx-Framework v3.0.0
3
+ Encapsula flet.MenuItemButton com padrões DEx.
4
+
5
+ Uso básico:
6
+ from dex_framework.buttons import DEx_MenuItemButton
7
+ componente = DEx_MenuItemButton(...)
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import flet as ft
12
+ from typing import Any, Callable, Optional
13
+
14
+
15
+ class DEx_MenuItemButton(ft.MenuItemButton):
16
+ """
17
+ Encapsulamento DEx do controle flet.MenuItemButton.
18
+
19
+ Mantém 100% da API original do Flet e adiciona:
20
+ - Valores padrão opinados (brand defaults)
21
+ - Parâmetro `dex_id` para rastreamento
22
+ - Hook `on_dex_ready` disparado após montagem
23
+
24
+ Args:
25
+ dex_id: Identificador único do componente na aplicação.
26
+ on_dex_ready: Callback chamado quando o componente é montado.
27
+ **kwargs: Todos os parâmetros nativos de flet.MenuItemButton.
28
+
29
+ Example:
30
+ >>> btn = DEx_MenuItemButton(
31
+ ... dex_id="exemplo",
32
+ ... )
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ *args: Any,
38
+ dex_id: str = "",
39
+ dex_theme: str = "dell",
40
+ on_dex_ready: Optional[Callable[["DEx_MenuItemButton"], None]] = None,
41
+ **kwargs: Any,
42
+ ) -> None:
43
+ super().__init__(*args, **kwargs)
44
+ self.dex_id: str = dex_id
45
+ self.dex_theme: str = dex_theme
46
+ self._on_dex_ready = on_dex_ready
47
+
48
+ def did_mount(self) -> None:
49
+ """Chamado pelo Flet quando o controle é inserido na árvore."""
50
+ super().did_mount()
51
+ if self._on_dex_ready:
52
+ self._on_dex_ready(self)