flet 0.82.3.dev7921__tar.gz → 0.82.3.dev7922__tar.gz

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 (308) hide show
  1. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/PKG-INFO +9 -9
  2. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/pyproject.toml +9 -10
  3. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/__init__.py +1 -2
  4. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/authorization_service.py +3 -3
  5. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/providers/github_oauth_provider.py +1 -1
  6. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/base_control.py +2 -0
  7. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/border.py +1 -1
  8. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/control.py +25 -31
  9. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/animated_switcher.py +7 -7
  10. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/autofill_group.py +7 -9
  11. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/dismissible.py +7 -7
  12. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/drag_target.py +7 -10
  13. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/draggable.py +14 -17
  14. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/hero.py +12 -23
  15. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/icon.py +19 -27
  16. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/interactive_viewer.py +26 -31
  17. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/page_view.py +12 -18
  18. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/pagelet.py +7 -8
  19. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/reorderable_drag_handle.py +7 -10
  20. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/safe_area.py +8 -9
  21. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/shimmer.py +25 -13
  22. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/text_span.py +8 -5
  23. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/window_drag_area.py +7 -10
  24. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_action_sheet.py +24 -11
  25. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_action_sheet_action.py +7 -8
  26. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_activity_indicator.py +10 -14
  27. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_alert_dialog.py +14 -10
  28. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_button.py +7 -12
  29. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_context_menu.py +13 -14
  30. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_context_menu_action.py +7 -8
  31. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_date_picker.py +28 -32
  32. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_dialog_action.py +7 -8
  33. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_list_tile.py +7 -8
  34. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_navigation_bar.py +14 -19
  35. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_picker.py +17 -23
  36. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_segmented_button.py +12 -14
  37. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_slider.py +28 -27
  38. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_sliding_segmented_button.py +13 -13
  39. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_timer_picker.py +23 -29
  40. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/icon_data.py +4 -4
  41. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/alert_dialog.py +13 -5
  42. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/app_bar.py +17 -24
  43. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/banner.py +17 -20
  44. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/bottom_app_bar.py +7 -10
  45. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/bottom_sheet.py +12 -15
  46. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/button.py +22 -11
  47. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/chip.py +17 -17
  48. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/circle_avatar.py +37 -36
  49. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/context_menu.py +6 -7
  50. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/datatable.py +37 -63
  51. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/divider.py +20 -28
  52. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/dropdown.py +9 -6
  53. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/dropdownm2.py +21 -8
  54. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/expansion_panel.py +7 -8
  55. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/expansion_tile.py +16 -10
  56. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/floating_action_button.py +44 -45
  57. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/icon_button.py +7 -7
  58. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/menu_bar.py +7 -8
  59. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/navigation_bar.py +11 -9
  60. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/navigation_rail.py +26 -24
  61. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/outlined_button.py +20 -10
  62. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/progress_bar.py +18 -24
  63. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/radio_group.py +6 -7
  64. flet-0.82.3.dev7922/src/flet/controls/material/range_slider.py +179 -0
  65. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/segmented_button.py +39 -27
  66. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/selection_area.py +6 -7
  67. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/slider.py +27 -31
  68. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/snack_bar.py +17 -23
  69. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/switch.py +7 -11
  70. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/tabs.py +8 -8
  71. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/textfield.py +42 -53
  72. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/vertical_divider.py +23 -20
  73. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/page.py +3 -4
  74. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/testing/flet_test_app.py +4 -3
  75. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/deprecated.py +78 -18
  76. flet-0.82.3.dev7922/src/flet/utils/griffe_deprecations.py +281 -0
  77. flet-0.82.3.dev7922/src/flet/utils/validation.py +1835 -0
  78. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/version.py +1 -1
  79. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/PKG-INFO +9 -9
  80. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/SOURCES.txt +7 -1
  81. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/requires.txt +8 -8
  82. flet-0.82.3.dev7922/tests/test_deprecated.py +162 -0
  83. flet-0.82.3.dev7922/tests/test_griffe_deprecations.py +213 -0
  84. flet-0.82.3.dev7922/tests/test_validation.py +759 -0
  85. flet-0.82.3.dev7922/tests/test_validation_benchmark.py +128 -0
  86. flet-0.82.3.dev7921/src/flet/controls/material/range_slider.py +0 -157
  87. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/README.md +0 -0
  88. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/setup.cfg +0 -0
  89. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/app.py +0 -0
  90. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/__init__.py +0 -0
  91. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/authorization.py +0 -0
  92. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/group.py +0 -0
  93. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/oauth_provider.py +0 -0
  94. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/oauth_token.py +0 -0
  95. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/providers/__init__.py +0 -0
  96. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/providers/auth0_oauth_provider.py +0 -0
  97. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/providers/azure_oauth_provider.py +0 -0
  98. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/providers/google_oauth_provider.py +0 -0
  99. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/auth/user.py +0 -0
  100. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/canvas/__init__.py +0 -0
  101. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/cli.py +0 -0
  102. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/__init__.py +0 -0
  103. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/component.py +0 -0
  104. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/component_decorator.py +0 -0
  105. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/component_owned.py +0 -0
  106. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/__init__.py +0 -0
  107. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/hook.py +0 -0
  108. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_callback.py +0 -0
  109. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_context.py +0 -0
  110. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_effect.py +0 -0
  111. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_memo.py +0 -0
  112. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_ref.py +0 -0
  113. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/hooks/use_state.py +0 -0
  114. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/memo.py +0 -0
  115. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/observable.py +0 -0
  116. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/public_utils.py +0 -0
  117. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/components/utils.py +0 -0
  118. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/__init__.py +0 -0
  119. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/adaptive_control.py +0 -0
  120. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/alignment.py +0 -0
  121. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/animation.py +0 -0
  122. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/base_page.py +0 -0
  123. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/blur.py +0 -0
  124. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/border_radius.py +0 -0
  125. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/box.py +0 -0
  126. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/buttons.py +0 -0
  127. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/colors.py +0 -0
  128. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/context.py +0 -0
  129. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/control_event.py +0 -0
  130. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/control_state.py +0 -0
  131. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/__init__.py +0 -0
  132. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/__init__.py +0 -0
  133. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/arc.py +0 -0
  134. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/canvas.py +0 -0
  135. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/circle.py +0 -0
  136. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/color.py +0 -0
  137. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/fill.py +0 -0
  138. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/image.py +0 -0
  139. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/line.py +0 -0
  140. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/oval.py +0 -0
  141. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/path.py +0 -0
  142. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/points.py +0 -0
  143. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/rect.py +0 -0
  144. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/shadow.py +0 -0
  145. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/shape.py +0 -0
  146. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/canvas/text.py +0 -0
  147. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/column.py +0 -0
  148. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/flet_app.py +0 -0
  149. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/gesture_detector.py +0 -0
  150. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/grid_view.py +0 -0
  151. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/image.py +0 -0
  152. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/keyboard_listener.py +0 -0
  153. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/list_view.py +0 -0
  154. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/markdown.py +0 -0
  155. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/merge_semantics.py +0 -0
  156. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/placeholder.py +0 -0
  157. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/responsive_row.py +0 -0
  158. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/rotated_box.py +0 -0
  159. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/row.py +0 -0
  160. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/screenshot.py +0 -0
  161. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/semantics.py +0 -0
  162. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/shader_mask.py +0 -0
  163. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/stack.py +0 -0
  164. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/text.py +0 -0
  165. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/transparent_pointer.py +0 -0
  166. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/view.py +0 -0
  167. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/core/window.py +0 -0
  168. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/__init__.py +0 -0
  169. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_app_bar.py +0 -0
  170. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_bottom_sheet.py +0 -0
  171. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_checkbox.py +0 -0
  172. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_colors.py +0 -0
  173. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_filled_button.py +0 -0
  174. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_icons.json +0 -0
  175. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_icons.py +0 -0
  176. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_icons.pyi +0 -0
  177. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_radio.py +0 -0
  178. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_switch.py +0 -0
  179. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_textfield.py +0 -0
  180. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/cupertino/cupertino_tinted_button.py +0 -0
  181. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/device_info.py +0 -0
  182. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/dialog_control.py +0 -0
  183. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/duration.py +0 -0
  184. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/embed_json_encoder.py +0 -0
  185. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/events.py +0 -0
  186. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/exceptions.py +0 -0
  187. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/geometry.py +0 -0
  188. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/gradients.py +0 -0
  189. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/id_counter.py +0 -0
  190. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/keys.py +0 -0
  191. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/layout_control.py +0 -0
  192. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/margin.py +0 -0
  193. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/__init__.py +0 -0
  194. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/auto_complete.py +0 -0
  195. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/badge.py +0 -0
  196. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/card.py +0 -0
  197. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/checkbox.py +0 -0
  198. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/container.py +0 -0
  199. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/date_picker.py +0 -0
  200. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/date_range_picker.py +0 -0
  201. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/elevated_button.py +0 -0
  202. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/filled_button.py +0 -0
  203. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/filled_tonal_button.py +0 -0
  204. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/form_field_control.py +0 -0
  205. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/icons.json +0 -0
  206. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/icons.py +0 -0
  207. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/icons.pyi +0 -0
  208. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/list_tile.py +0 -0
  209. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/menu_item_button.py +0 -0
  210. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/navigation_drawer.py +0 -0
  211. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/popup_menu_button.py +0 -0
  212. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/progress_ring.py +0 -0
  213. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/radio.py +0 -0
  214. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/reorderable_list_view.py +0 -0
  215. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/search_bar.py +0 -0
  216. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/submenu_button.py +0 -0
  217. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/text_button.py +0 -0
  218. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/time_picker.py +0 -0
  219. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/material/tooltip.py +0 -0
  220. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/multi_view.py +0 -0
  221. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/object_patch.py +0 -0
  222. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/padding.py +0 -0
  223. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/painting.py +0 -0
  224. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/query_string.py +0 -0
  225. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/ref.py +0 -0
  226. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/scrollable_control.py +0 -0
  227. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/__init__.py +0 -0
  228. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/accelerometer.py +0 -0
  229. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/barometer.py +0 -0
  230. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/battery.py +0 -0
  231. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/browser_context_menu.py +0 -0
  232. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/clipboard.py +0 -0
  233. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/connectivity.py +0 -0
  234. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/file_picker.py +0 -0
  235. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/gyroscope.py +0 -0
  236. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/haptic_feedback.py +0 -0
  237. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/magnetometer.py +0 -0
  238. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/screen_brightness.py +0 -0
  239. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/semantics_service.py +0 -0
  240. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/sensor_error_event.py +0 -0
  241. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/service.py +0 -0
  242. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/shake_detector.py +0 -0
  243. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/share.py +0 -0
  244. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/shared_preferences.py +0 -0
  245. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/storage_paths.py +0 -0
  246. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/url_launcher.py +0 -0
  247. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/user_accelerometer.py +0 -0
  248. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/services/wakelock.py +0 -0
  249. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/template_route.py +0 -0
  250. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/text_style.py +0 -0
  251. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/theme.py +0 -0
  252. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/transform.py +0 -0
  253. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/types.py +0 -0
  254. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/controls/value_types.py +0 -0
  255. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/fastapi/__init__.py +0 -0
  256. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/connection.py +0 -0
  257. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/flet_socket_server.py +0 -0
  258. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/protocol.py +0 -0
  259. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/pyodide_connection.py +0 -0
  260. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/session.py +0 -0
  261. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/messaging/session_store.py +0 -0
  262. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/pubsub/__init__.py +0 -0
  263. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/pubsub/pubsub_client.py +0 -0
  264. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/pubsub/pubsub_hub.py +0 -0
  265. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/py.typed +0 -0
  266. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/security/__init__.py +0 -0
  267. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/testing/__init__.py +0 -0
  268. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/testing/finder.py +0 -0
  269. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/testing/tester.py +0 -0
  270. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/__init__.py +0 -0
  271. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/browser.py +0 -0
  272. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/classproperty.py +0 -0
  273. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/deprecated_enum.py +0 -0
  274. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/files.py +0 -0
  275. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/from_dict.py +0 -0
  276. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/hashing.py +0 -0
  277. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/json_utils.py +0 -0
  278. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/locks.py +0 -0
  279. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/network.py +0 -0
  280. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/object_model.py +0 -0
  281. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/once.py +0 -0
  282. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/pip.py +0 -0
  283. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/platform_utils.py +0 -0
  284. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/slugify.py +0 -0
  285. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/strings.py +0 -0
  286. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/typing_utils.py +0 -0
  287. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet/utils/vector.py +0 -0
  288. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/dependency_links.txt +0 -0
  289. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/entry_points.txt +0 -0
  290. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/src/flet.egg-info/top_level.txt +0 -0
  291. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_auth_lazy_imports.py +0 -0
  292. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_base_control.py +0 -0
  293. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_colors.py +0 -0
  294. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_component_effects.py +0 -0
  295. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_component_renderer.py +0 -0
  296. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_dataclasses.py +0 -0
  297. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_datetime.py +0 -0
  298. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_events.py +0 -0
  299. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_from_dict.py +0 -0
  300. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_icons.py +0 -0
  301. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_object_diff_frozen.py +0 -0
  302. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_object_diff_in_place.py +0 -0
  303. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_object_diff_memory_churn.py +0 -0
  304. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_object_diff_performance.py +0 -0
  305. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_observable.py +0 -0
  306. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_patch_dataclass.py +0 -0
  307. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_session_disconnect_buffering.py +0 -0
  308. {flet-0.82.3.dev7921 → flet-0.82.3.dev7922}/tests/test_skip_double_update.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flet
3
- Version: 0.82.3.dev7921
3
+ Version: 0.82.3.dev7922
4
4
  Summary: Flet for Python - easily build interactive multi-platform apps in Python
5
5
  Author-email: "Appveyor Systems Inc." <hello@flet.dev>
6
6
  License-Expression: Apache-2.0
@@ -9,23 +9,23 @@ Project-URL: Repository, https://github.com/flet-dev/flet
9
9
  Project-URL: Documentation, https://docs.flet.dev/
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: flet-cli==0.82.3.dev7921; extra == "cli"
13
- Requires-Dist: flet-web==0.82.3.dev7921; extra == "web"
12
+ Requires-Dist: flet-cli==0.82.3.dev7922; extra == "cli"
13
+ Requires-Dist: flet-web==0.82.3.dev7922; extra == "web"
14
14
  Requires-Dist: oauthlib>=3.2.2; platform_system != "Pyodide"
15
15
  Requires-Dist: httpx>=0.28.1; platform_system != "Pyodide"
16
16
  Requires-Dist: repath>=0.9.0
17
17
  Requires-Dist: msgpack>=1.1.0
18
18
  Requires-Dist: typing-extensions; python_version < "3.11"
19
19
  Provides-Extra: all
20
- Requires-Dist: flet-cli==0.82.3.dev7921; extra == "all"
21
- Requires-Dist: flet-web==0.82.3.dev7921; extra == "all"
22
- Requires-Dist: flet-desktop==0.82.3.dev7921; extra == "all"
20
+ Requires-Dist: flet-cli==0.82.3.dev7922; extra == "all"
21
+ Requires-Dist: flet-web==0.82.3.dev7922; extra == "all"
22
+ Requires-Dist: flet-desktop==0.82.3.dev7922; extra == "all"
23
23
  Provides-Extra: cli
24
- Requires-Dist: flet-cli==0.82.3.dev7921; extra == "cli"
24
+ Requires-Dist: flet-cli==0.82.3.dev7922; extra == "cli"
25
25
  Provides-Extra: desktop
26
- Requires-Dist: flet-desktop==0.82.3.dev7921; extra == "desktop"
26
+ Requires-Dist: flet-desktop==0.82.3.dev7922; extra == "desktop"
27
27
  Provides-Extra: web
28
- Requires-Dist: flet-web==0.82.3.dev7921; extra == "web"
28
+ Requires-Dist: flet-web==0.82.3.dev7922; extra == "web"
29
29
 
30
30
  <p align="center">
31
31
  <a href="https://flet.dev"><img src="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo.svg" height="150" alt="Flet logo"></a>
@@ -1,14 +1,14 @@
1
1
  [project]
2
2
  name = "flet"
3
- version = "0.82.3.dev7921"
3
+ version = "0.82.3.dev7922"
4
4
  description = "Flet for Python - easily build interactive multi-platform apps in Python"
5
5
  authors = [{name = "Appveyor Systems Inc.", email = "hello@flet.dev"}]
6
6
  license = "Apache-2.0"
7
7
  readme = "README.md"
8
8
  requires-python = ">=3.10"
9
9
  dependencies = [
10
- "flet-cli==0.82.3.dev7921; extra == 'cli'",
11
- "flet-web==0.82.3.dev7921; extra == 'web'",
10
+ "flet-cli==0.82.3.dev7922; extra == 'cli'",
11
+ "flet-web==0.82.3.dev7922; extra == 'web'",
12
12
  "oauthlib >=3.2.2; platform_system != 'Pyodide'",
13
13
  "httpx >=0.28.1; platform_system != 'Pyodide'",
14
14
  "repath >=0.9.0",
@@ -23,15 +23,15 @@ Documentation = "https://docs.flet.dev/"
23
23
 
24
24
  [project.optional-dependencies]
25
25
  all = [
26
- "flet-cli==0.82.3.dev7921",
27
- "flet-web==0.82.3.dev7921",
28
- "flet-desktop==0.82.3.dev7921",
26
+ "flet-cli==0.82.3.dev7922",
27
+ "flet-web==0.82.3.dev7922",
28
+ "flet-desktop==0.82.3.dev7922",
29
29
  ]
30
- cli = ["flet-cli==0.82.3.dev7921"]
30
+ cli = ["flet-cli==0.82.3.dev7922"]
31
31
  desktop = [
32
- "flet-desktop==0.82.3.dev7921",
32
+ "flet-desktop==0.82.3.dev7922",
33
33
  ]
34
- web = ["flet-web==0.82.3.dev7921"]
34
+ web = ["flet-web==0.82.3.dev7922"]
35
35
 
36
36
  [project.scripts]
37
37
  flet = "flet.cli:main"
@@ -87,7 +87,6 @@ docs = [
87
87
  "mkdocs-glightbox >=0.5.1",
88
88
  "mkdocs-open-in-new-tab >=1.0.8",
89
89
  "mkdocs-section-index >=0.3.10",
90
- "griffe-warnings-deprecated >=1.1.0",
91
90
  "pygments >=2.16",
92
91
  "markdown-exec[ansi] >=1.11.0",
93
92
  "pydocstyle >=6.3.0",
@@ -105,7 +105,7 @@ from flet.controls.core.draggable import Draggable
105
105
  from flet.controls.core.flet_app import FletApp
106
106
  from flet.controls.core.gesture_detector import GestureDetector
107
107
  from flet.controls.core.grid_view import GridView
108
- from flet.controls.core.hero import Hero, HeroTag
108
+ from flet.controls.core.hero import Hero
109
109
  from flet.controls.core.icon import Icon
110
110
  from flet.controls.core.image import Image
111
111
  from flet.controls.core.interactive_viewer import InteractiveViewer
@@ -815,7 +815,6 @@ __all__ = [
815
815
  "GyroscopeReadingEvent",
816
816
  "HapticFeedback",
817
817
  "Hero",
818
- "HeroTag",
819
818
  "HoverEvent",
820
819
  "Icon",
821
820
  "IconButton",
@@ -165,7 +165,7 @@ class AuthorizationService(Authorization):
165
165
  self.__token.access_token
166
166
  )
167
167
 
168
- def __convert_token(self, t: Mapping[str, Any]):
168
+ def __convert_token(self, t: Mapping[str, Any]) -> OAuthToken:
169
169
  """
170
170
  Convert oauthlib token mapping to [`OAuthToken`][(p).oauth_token.].
171
171
 
@@ -231,7 +231,7 @@ class AuthorizationService(Authorization):
231
231
  t["refresh_token"] = self.__token.refresh_token
232
232
  self.__token = self.__convert_token(t)
233
233
 
234
- async def __get_user(self):
234
+ async def __get_user(self) -> User:
235
235
  """
236
236
  Fetch user profile from provider `user_endpoint`.
237
237
 
@@ -256,7 +256,7 @@ class AuthorizationService(Authorization):
256
256
  uj = json.loads(user_resp.text)
257
257
  return User(uj, str(self.provider.user_id_fn(uj)))
258
258
 
259
- def __get_default_headers(self):
259
+ def __get_default_headers(self) -> dict[str, str]:
260
260
  """
261
261
  Build default HTTP headers for OAuth-related requests.
262
262
 
@@ -99,7 +99,7 @@ class GitHubOAuthProvider(OAuthProvider):
99
99
  break
100
100
  return User(uj, id=str(uj["id"]))
101
101
 
102
- def __get_client_headers(self, access_token):
102
+ def __get_client_headers(self, access_token: str) -> dict[str, str]:
103
103
  """
104
104
  Builds common GitHub API request headers.
105
105
 
@@ -11,6 +11,7 @@ from flet.controls.ref import Ref
11
11
  from flet.controls.value_types import Prop, Value, _install_props, value
12
12
  from flet.utils.from_dict import from_dict
13
13
  from flet.utils.object_model import get_param_count
14
+ from flet.utils.validation import validate
14
15
 
15
16
  logger = logging.getLogger("flet")
16
17
  controls_log = logging.getLogger("flet_controls")
@@ -327,6 +328,7 @@ class BaseControl:
327
328
  del self._frozen
328
329
 
329
330
  self.before_update()
331
+ validate(self, suppress_repeated_errors=True)
330
332
 
331
333
  if frozen is not None:
332
334
  self._frozen = frozen
@@ -79,7 +79,7 @@ class BorderSide:
79
79
  to [`BorderStyle.NONE`][flet.].
80
80
 
81
81
  Raises:
82
- ValueError: If it is less than zero.
82
+ ValueError: If it is not greater than or equal to `0`.
83
83
  """
84
84
 
85
85
  color: ColorValue = Colors.BLACK
@@ -1,10 +1,11 @@
1
1
  from dataclasses import dataclass
2
- from typing import Optional, Union
2
+ from typing import Annotated, Optional, Union
3
3
 
4
4
  from flet.controls.base_control import BaseControl
5
5
  from flet.controls.material.badge import BadgeValue
6
6
  from flet.controls.material.tooltip import TooltipValue
7
7
  from flet.controls.types import Number, ResponsiveNumber
8
+ from flet.utils.validation import V
8
9
 
9
10
  __all__ = ["Control"]
10
11
 
@@ -17,7 +18,10 @@ class Control(BaseControl):
17
18
  Not meant to be used directly.
18
19
  """
19
20
 
20
- expand: Optional[Union[bool, int]] = None
21
+ expand: Annotated[
22
+ Optional[Union[bool, int]],
23
+ V.instance_of((bool, int)),
24
+ ] = None
21
25
  """
22
26
  Specifies whether/how this control should expand to fill available space in its \
23
27
  parent layout.
@@ -31,7 +35,7 @@ class Control(BaseControl):
31
35
  [`View`][flet.], [`Page`][flet.].
32
36
 
33
37
  Raises:
34
- ValueError: If [`expand`][(c).] is not `None` and not of type `bool` or `int`.
38
+ ValueError: If it is not of type `bool` or `int`.
35
39
  """
36
40
 
37
41
  expand_loose: bool = False
@@ -75,7 +79,10 @@ class Control(BaseControl):
75
79
  ///
76
80
  """
77
81
 
78
- opacity: Number = 1.0
82
+ opacity: Annotated[
83
+ Number,
84
+ V.between(0.0, 1.0),
85
+ ] = 1.0
79
86
  """
80
87
  Defines the transparency of the control.
81
88
 
@@ -83,7 +90,7 @@ class Control(BaseControl):
83
90
  without any transparency).
84
91
 
85
92
  Raises:
86
- ValueError: If [`opacity`][(c).] is not between `0.0` and `1.0` inclusive.
93
+ ValueError: If it is not between `0.0` and `1.0`, inclusive.
87
94
  """
88
95
 
89
96
  tooltip: Optional[TooltipValue] = None
@@ -114,35 +121,22 @@ class Control(BaseControl):
114
121
  The value of this property will be propagated down to all children controls
115
122
  recursively.
116
123
 
117
- /// details | Example
118
- type: example
119
- For example, if you have a form with multiple entry controls you can disable them
120
- all together by disabling container:
121
-
122
- ```python
123
- ft.Column(
124
- disabled = True,
125
- controls=[
126
- ft.TextField(),
127
- ft.TextField()
128
- ]
129
- )
130
- ```
131
- ///
124
+ Example:
125
+ For example, if you have a form with multiple entry controls you can
126
+ disable them all together by disabling container:
127
+
128
+ ```python
129
+ ft.Column(
130
+ disabled = True,
131
+ controls=[
132
+ ft.TextField(),
133
+ ft.TextField()
134
+ ]
135
+ )
136
+ ```
132
137
  """
133
138
 
134
139
  rtl: bool = False
135
140
  """
136
141
  Whether the text direction of the control should be right-to-left (RTL).
137
142
  """
138
-
139
- def before_update(self):
140
- super().before_update()
141
- if not (0.0 <= self.opacity <= 1.0):
142
- raise ValueError(
143
- f"opacity must be between 0.0 and 1.0 inclusive, got {self.opacity}"
144
- )
145
- if self.expand is not None and not isinstance(self.expand, (bool, int)):
146
- raise ValueError(
147
- f"expand must be of type bool or int, got {type(self.expand)}"
148
- )
@@ -1,11 +1,13 @@
1
1
  from dataclasses import field
2
2
  from enum import Enum
3
+ from typing import Annotated
3
4
 
4
5
  from flet.controls.animation import AnimationCurve
5
6
  from flet.controls.base_control import control
6
7
  from flet.controls.control import Control
7
8
  from flet.controls.duration import Duration, DurationValue
8
9
  from flet.controls.layout_control import LayoutControl
10
+ from flet.utils.validation import V
9
11
 
10
12
  __all__ = ["AnimatedSwitcher", "AnimatedSwitcherTransition"]
11
13
 
@@ -39,7 +41,10 @@ class AnimatedSwitcher(LayoutControl):
39
41
  Used to switch between controls with an animation.
40
42
  """
41
43
 
42
- content: Control
44
+ content: Annotated[
45
+ Control,
46
+ V.visible_control(),
47
+ ]
43
48
  """
44
49
  The content to display.
45
50
 
@@ -47,7 +52,7 @@ class AnimatedSwitcher(LayoutControl):
47
52
  `content` to the new one.
48
53
 
49
54
  Raises:
50
- ValueError: If [`content`][(c).] is not visible.
55
+ ValueError: If it is not visible.
51
56
  """
52
57
 
53
58
  duration: DurationValue = field(default_factory=lambda: Duration(seconds=1))
@@ -74,8 +79,3 @@ class AnimatedSwitcher(LayoutControl):
74
79
  """
75
80
  An animation type to transition between new and old [`content`][(c).].
76
81
  """
77
-
78
- def before_update(self):
79
- super().before_update()
80
- if not self.content.visible:
81
- raise ValueError("content must be visible")
@@ -1,7 +1,9 @@
1
1
  from enum import Enum
2
+ from typing import Annotated
2
3
 
3
4
  from flet.controls.base_control import control
4
5
  from flet.controls.control import Control
6
+ from flet.utils.validation import V
5
7
 
6
8
  __all__ = ["AutofillGroup", "AutofillGroupDisposeAction", "AutofillHint"]
7
9
 
@@ -775,14 +777,15 @@ class AutofillGroup(Control):
775
777
  Used to group autofill controls together.
776
778
  """
777
779
 
778
- content: Control
780
+ content: Annotated[
781
+ Control,
782
+ V.visible_control(),
783
+ ]
779
784
  """
780
785
  The content of this group.
781
786
 
782
- Must be visible.
783
-
784
787
  Raises:
785
- ValueError: If [`content`][(c).] is not visible.
788
+ ValueError: If it is not visible.
786
789
  """
787
790
 
788
791
  dispose_action: AutofillGroupDisposeAction = AutofillGroupDisposeAction.COMMIT
@@ -790,8 +793,3 @@ class AutofillGroup(Control):
790
793
  The action to be run when this group is the topmost and it's being disposed, in \
791
794
  order to clean up the current autofill context.
792
795
  """
793
-
794
- def before_update(self):
795
- super().before_update()
796
- if not self.content.visible:
797
- raise ValueError("content must be visible")
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass, field
2
- from typing import Optional
2
+ from typing import Annotated, Optional
3
3
 
4
4
  from flet.controls.adaptive_control import AdaptiveControl
5
5
  from flet.controls.base_control import control
@@ -15,6 +15,7 @@ from flet.controls.material.snack_bar import DismissDirection
15
15
  from flet.controls.types import (
16
16
  Number,
17
17
  )
18
+ from flet.utils.validation import V
18
19
 
19
20
  __all__ = ["Dismissible", "DismissibleDismissEvent", "DismissibleUpdateEvent"]
20
21
 
@@ -75,14 +76,15 @@ class Dismissible(LayoutControl, AdaptiveControl):
75
76
  over the specified [`resize_duration`][(c).].
76
77
  """
77
78
 
78
- content: Control
79
+ content: Annotated[
80
+ Control,
81
+ V.visible_control(),
82
+ ]
79
83
  """
80
84
  The control that is being dismissed.
81
85
 
82
- Must be visible.
83
-
84
86
  Raises:
85
- ValueError: If the [`content`][(c).] is not visible.
87
+ ValueError: If it is not visible.
86
88
  """
87
89
 
88
90
  background: Optional[Control] = None
@@ -184,8 +186,6 @@ class Dismissible(LayoutControl, AdaptiveControl):
184
186
 
185
187
  def before_update(self):
186
188
  super().before_update()
187
- if not self.content.visible:
188
- raise ValueError("content must be visible")
189
189
  if (self.secondary_background and self.secondary_background.visible) and not (
190
190
  self.background and self.background.visible
191
191
  ):
@@ -1,11 +1,12 @@
1
1
  from dataclasses import dataclass, field
2
- from typing import Optional, cast
2
+ from typing import Annotated, Optional, cast
3
3
 
4
4
  from flet.controls.base_control import control
5
5
  from flet.controls.control import Control
6
6
  from flet.controls.control_event import Event, EventHandler
7
7
  from flet.controls.core.draggable import Draggable
8
8
  from flet.controls.transform import Offset
9
+ from flet.utils.validation import V
9
10
 
10
11
  __all__ = [
11
12
  "DragTarget",
@@ -96,14 +97,15 @@ class DragTarget(Control):
96
97
  asked to accept the `Draggable`'s data.
97
98
  """
98
99
 
99
- content: Control
100
+ content: Annotated[
101
+ Control,
102
+ V.visible_control(),
103
+ ]
100
104
  """
101
105
  The content of this control.
102
106
 
103
- Must be visible.
104
-
105
107
  Raises:
106
- ValueError: If [`content`][(c).] is not visible.
108
+ ValueError: If it is not visible.
107
109
  """
108
110
 
109
111
  group: str = "default"
@@ -137,8 +139,3 @@ class DragTarget(Control):
137
139
  """
138
140
  Called when a draggable moves within this target.
139
141
  """
140
-
141
- def before_update(self):
142
- super().before_update()
143
- if not self.content.visible:
144
- raise ValueError("content must be visible")
@@ -1,9 +1,10 @@
1
- from typing import Optional
1
+ from typing import Annotated, Optional
2
2
 
3
3
  from flet.controls.alignment import Axis
4
4
  from flet.controls.base_control import control
5
5
  from flet.controls.control import Control
6
6
  from flet.controls.control_event import ControlEventHandler
7
+ from flet.utils.validation import V
7
8
 
8
9
  __all__ = ["Draggable"]
9
10
 
@@ -19,7 +20,10 @@ class Draggable(Control):
19
20
  given the opportunity to complete drag-and-drop flow.
20
21
  """
21
22
 
22
- content: Control
23
+ content: Annotated[
24
+ Control,
25
+ V.visible_control(),
26
+ ]
23
27
  """
24
28
  The control to display when the draggable is not being dragged.
25
29
 
@@ -27,7 +31,7 @@ class Draggable(Control):
27
31
  [`content_when_dragging`][(c).] is displayed instead.
28
32
 
29
33
  Raises:
30
- ValueError: If [`content`][(c).] is not visible.
34
+ ValueError: If it is not visible.
31
35
  """
32
36
 
33
37
  group: str = "default"
@@ -75,7 +79,10 @@ class Draggable(Control):
75
79
  with other gestures in that direction.
76
80
  """
77
81
 
78
- max_simultaneous_drags: Optional[int] = None
82
+ max_simultaneous_drags: Annotated[
83
+ Optional[int],
84
+ V.ge(0),
85
+ ] = None
79
86
  """
80
87
  Specifies how many simultaneous drag operations are allowed for this draggable.
81
88
 
@@ -84,11 +91,11 @@ class Draggable(Control):
84
91
  For a better user experience, you may want to provide an "empty" widget for
85
92
  [`content_when_dragging`][(c).]
86
93
  to visually indicate the item is being moved.
87
- - Set to any positive integer to allow that many concurrent drags.
88
- - If `None`, there is no limit on the number of simultaneous drags.
94
+ - any other positive integer - allows that many concurrent drags.
95
+ - `None` - no limit on the number of simultaneous drags.
89
96
 
90
97
  Raises:
91
- ValueError: If [`max_simultaneous_drags`][(c).] is set to a negative value.
98
+ ValueError: If it is not greater than or equal to `0`.
92
99
  """
93
100
 
94
101
  on_drag_start: Optional[ControlEventHandler["Draggable"]] = None
@@ -100,13 +107,3 @@ class Draggable(Control):
100
107
  """
101
108
  Called when this draggable is dropped and accepted by a [`DragTarget`][flet.].
102
109
  """
103
-
104
- def before_update(self):
105
- super().before_update()
106
- if not self.content.visible:
107
- raise ValueError("content must be visible")
108
- if self.max_simultaneous_drags is not None and self.max_simultaneous_drags < 0:
109
- raise ValueError(
110
- f"max_simultaneous_drags must be greater than or equal to 0, "
111
- f"got {self.max_simultaneous_drags}"
112
- )
@@ -1,17 +1,11 @@
1
- from typing import Union
1
+ from typing import Annotated
2
2
 
3
3
  from flet.controls.base_control import control
4
4
  from flet.controls.control import Control
5
5
  from flet.controls.layout_control import LayoutControl
6
+ from flet.utils.validation import V
6
7
 
7
- __all__ = ["Hero", "HeroTag"]
8
-
9
- HeroTag = Union[str, int, float, bool]
10
- """Type alias for Hero tag values.
11
-
12
- Represents an identifier used to match source and destination [`Hero`][flet.]
13
- controls during route transitions.
14
- """
8
+ __all__ = ["Hero"]
15
9
 
16
10
 
17
11
  @control("Hero")
@@ -23,15 +17,21 @@ class Hero(LayoutControl):
23
17
  animate that control between routes.
24
18
  """
25
19
 
26
- tag: HeroTag
20
+ tag: Annotated[
21
+ str,
22
+ V.instance_of(str),
23
+ ]
27
24
  """
28
25
  A unique identifier used to match source and destination Hero controls.
29
26
 
30
27
  Raises:
31
- ValueError: If not provided or not of type `str`, `int`, `float`, or `bool`.
28
+ ValueError: If it is not of type `str`.
32
29
  """
33
30
 
34
- content: Control
31
+ content: Annotated[
32
+ Control,
33
+ V.visible_control(),
34
+ ]
35
35
  """
36
36
  The control to display and animate.
37
37
 
@@ -44,14 +44,3 @@ class Hero(LayoutControl):
44
44
  Whether to animate when the route is transitioned by a \
45
45
  user gesture (for example, iOS back swipe).
46
46
  """
47
-
48
- def before_update(self):
49
- super().before_update()
50
- if self.tag is None:
51
- raise ValueError("tag must be provided")
52
- if not isinstance(self.tag, (str, int, float, bool)):
53
- raise ValueError(
54
- f"tag must be str, int, float, or bool, got {type(self.tag)}"
55
- )
56
- if not self.content.visible:
57
- raise ValueError("content must be visible")
@@ -1,9 +1,10 @@
1
- from typing import Optional
1
+ from typing import Annotated, Optional
2
2
 
3
3
  from flet.controls.base_control import control
4
4
  from flet.controls.box import BoxShadowValue
5
5
  from flet.controls.layout_control import LayoutControl
6
6
  from flet.controls.types import BlendMode, ColorValue, IconData, Number
7
+ from flet.utils.validation import V
7
8
 
8
9
  __all__ = ["Icon"]
9
10
 
@@ -16,6 +17,7 @@ class Icon(LayoutControl):
16
17
  Icons can be customized in color, size, and visual style using various
17
18
  parameters such as stroke weight, fill level, and shadows.
18
19
 
20
+ Example:
19
21
  ```python
20
22
  ft.Icon(ft.Icons.FAVORITE, color=ft.Colors.PRIMARY, size=40)
21
23
  ```
@@ -58,7 +60,10 @@ class Icon(LayoutControl):
58
60
  The order of shadows matters for how transparency is blended.
59
61
  """
60
62
 
61
- fill: Optional[Number] = None
63
+ fill: Annotated[
64
+ Optional[Number],
65
+ V.between(0.0, 1.0),
66
+ ] = None
62
67
  """
63
68
  The fill amount of the icon, between `0.0` (outline) and `1.0` (solid).
64
69
 
@@ -66,7 +71,7 @@ class Icon(LayoutControl):
66
71
  It can be used to indicate state transitions or selection visually.
67
72
 
68
73
  Raises:
69
- ValueError: If [`fill`][(c).] is less than `0.0` or greater than `1.0`.
74
+ ValueError: If it is not between `0.0` and `1.0`, inclusive.
70
75
  """
71
76
 
72
77
  apply_text_scaling: Optional[bool] = None
@@ -86,27 +91,31 @@ class Icon(LayoutControl):
86
91
  It allows precise visual adjustments without changing icon size.
87
92
  """
88
93
 
89
- weight: Optional[Number] = None
94
+ weight: Annotated[
95
+ Optional[Number],
96
+ V.gt(0.0),
97
+ ] = None
90
98
  """
91
99
  The stroke weight (thickness) of the icon's lines.
92
100
 
93
101
  This requires the icon font to support weight variation.
94
- Must be greater than `0`.
95
102
 
96
103
  Raises:
97
- ValueError: If [`weight`][(c).] is less than or equal to `0.0`.
104
+ ValueError: If it is not strictly greater than `0.0`.
98
105
  """
99
106
 
100
- optical_size: Optional[Number] = None
107
+ optical_size: Annotated[
108
+ Optional[Number],
109
+ V.gt(0.0),
110
+ ] = None
101
111
  """
102
112
  Adjusts the icon's visual style for different sizes to maintain clarity and \
103
113
  balance.
104
114
 
105
115
  This requires the icon font to support optical sizing.
106
- Must be greater than `0`.
107
116
 
108
117
  Raises:
109
- ValueError: If [`optical_size`][(c).] is less than or equal to `0.0`.
118
+ ValueError: If it is not strictly greater than `0.0`.
110
119
  """
111
120
 
112
121
  blend_mode: Optional[BlendMode] = BlendMode.SRC_OVER
@@ -114,21 +123,4 @@ class Icon(LayoutControl):
114
123
  The blend mode used when rendering the icon.
115
124
 
116
125
  Blend modes control how the icon's color interacts with the background.
117
- The default is normal blending (`SRC_OVER`).
118
- """
119
-
120
- def before_update(self):
121
- super().before_update()
122
- if self.fill is not None and not (0.0 <= self.fill <= 1.0):
123
- raise ValueError(
124
- f"fill must be between 0.0 and 1.0 inclusive, got {self.fill}"
125
- )
126
- if self.weight is not None and self.weight <= 0.0:
127
- raise ValueError(
128
- f"weight must be strictly greater than 0.0, got {self.weight}"
129
- )
130
- if self.optical_size is not None and self.optical_size <= 0.0:
131
- raise ValueError(
132
- f"optical_size must be strictly greater than 0.0, "
133
- f"got {self.optical_size}"
134
- )
126
+ """