flet 0.70.0.dev6516__tar.gz → 0.70.0.dev6533__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.

Potentially problematic release.


This version of flet might be problematic. Click here for more details.

Files changed (272) hide show
  1. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/PKG-INFO +1 -1
  2. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/pyproject.toml +1 -1
  3. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/authorization_service.py +1 -1
  4. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/oauth_provider.py +1 -1
  5. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/animation.py +20 -0
  6. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/base_control.py +6 -2
  7. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/base_page.py +1 -1
  8. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/control.py +0 -3
  9. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/control_event.py +1 -1
  10. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/image.py +1 -1
  11. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_sliding_segmented_button.py +3 -5
  12. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/expansion_panel.py +2 -2
  13. flet-0.70.0.dev6533/src/flet/controls/material/expansion_tile.py +351 -0
  14. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/text_button.py +6 -6
  15. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/object_patch.py +5 -3
  16. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/page.py +1 -1
  17. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/theme.py +136 -159
  18. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/connection.py +3 -3
  19. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/flet_socket_server.py +1 -1
  20. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/protocol.py +1 -1
  21. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/pyodide_connection.py +2 -1
  22. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/session.py +3 -2
  23. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/security/__init__.py +1 -1
  24. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/testing/flet_test_app.py +1 -1
  25. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/files.py +1 -1
  26. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/platform_utils.py +5 -3
  27. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/version.py +1 -1
  28. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/PKG-INFO +1 -1
  29. flet-0.70.0.dev6516/src/flet/controls/material/expansion_tile.py +0 -214
  30. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/README.md +0 -0
  31. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/setup.cfg +0 -0
  32. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/__init__.py +0 -0
  33. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/app.py +0 -0
  34. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/__init__.py +0 -0
  35. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/authorization.py +0 -0
  36. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/group.py +0 -0
  37. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/oauth_token.py +0 -0
  38. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/providers/__init__.py +0 -0
  39. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/providers/auth0_oauth_provider.py +0 -0
  40. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/providers/azure_oauth_provider.py +0 -0
  41. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/providers/github_oauth_provider.py +0 -0
  42. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/providers/google_oauth_provider.py +0 -0
  43. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/auth/user.py +0 -0
  44. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/canvas/__init__.py +0 -0
  45. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/cli.py +0 -0
  46. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/__init__.py +0 -0
  47. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/component.py +0 -0
  48. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/component_decorator.py +0 -0
  49. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/component_owned.py +0 -0
  50. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/__init__.py +0 -0
  51. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/hook.py +0 -0
  52. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/use_callback.py +0 -0
  53. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/use_context.py +0 -0
  54. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/use_effect.py +0 -0
  55. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/use_memo.py +0 -0
  56. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/hooks/use_state.py +0 -0
  57. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/memo.py +0 -0
  58. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/observable.py +0 -0
  59. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/public_utils.py +0 -0
  60. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/components/utils.py +0 -0
  61. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/__init__.py +0 -0
  62. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/adaptive_control.py +0 -0
  63. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/alignment.py +0 -0
  64. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/blur.py +0 -0
  65. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/border.py +0 -0
  66. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/border_radius.py +0 -0
  67. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/box.py +0 -0
  68. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/buttons.py +0 -0
  69. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/colors.py +0 -0
  70. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/context.py +0 -0
  71. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/control_state.py +0 -0
  72. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/__init__.py +0 -0
  73. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/animated_switcher.py +0 -0
  74. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/autofill_group.py +0 -0
  75. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/__init__.py +0 -0
  76. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/arc.py +0 -0
  77. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/canvas.py +0 -0
  78. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/circle.py +0 -0
  79. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/color.py +0 -0
  80. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/fill.py +0 -0
  81. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/image.py +0 -0
  82. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/line.py +0 -0
  83. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/oval.py +0 -0
  84. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/path.py +0 -0
  85. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/points.py +0 -0
  86. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/rect.py +0 -0
  87. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/shadow.py +0 -0
  88. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/shape.py +0 -0
  89. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/canvas/text.py +0 -0
  90. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/column.py +0 -0
  91. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/dismissible.py +0 -0
  92. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/drag_target.py +0 -0
  93. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/draggable.py +0 -0
  94. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/flet_app.py +0 -0
  95. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/gesture_detector.py +0 -0
  96. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/grid_view.py +0 -0
  97. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/icon.py +0 -0
  98. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/interactive_viewer.py +0 -0
  99. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/keyboard_listener.py +0 -0
  100. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/list_view.py +0 -0
  101. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/markdown.py +0 -0
  102. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/merge_semantics.py +0 -0
  103. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/pagelet.py +0 -0
  104. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/placeholder.py +0 -0
  105. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/reorderable_draggable.py +0 -0
  106. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/responsive_row.py +0 -0
  107. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/row.py +0 -0
  108. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/safe_area.py +0 -0
  109. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/screenshot.py +0 -0
  110. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/semantics.py +0 -0
  111. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/shader_mask.py +0 -0
  112. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/stack.py +0 -0
  113. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/text.py +0 -0
  114. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/text_span.py +0 -0
  115. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/transparent_pointer.py +0 -0
  116. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/view.py +0 -0
  117. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/window.py +0 -0
  118. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/core/window_drag_area.py +0 -0
  119. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/__init__.py +0 -0
  120. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_action_sheet.py +0 -0
  121. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_action_sheet_action.py +0 -0
  122. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_activity_indicator.py +0 -0
  123. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_alert_dialog.py +0 -0
  124. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_app_bar.py +0 -0
  125. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_bottom_sheet.py +0 -0
  126. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_button.py +0 -0
  127. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_checkbox.py +0 -0
  128. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_colors.py +0 -0
  129. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_context_menu.py +0 -0
  130. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_context_menu_action.py +0 -0
  131. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_date_picker.py +0 -0
  132. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_dialog_action.py +0 -0
  133. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_filled_button.py +0 -0
  134. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_icons.py +0 -0
  135. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_list_tile.py +0 -0
  136. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_navigation_bar.py +0 -0
  137. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_picker.py +0 -0
  138. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_radio.py +0 -0
  139. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_segmented_button.py +0 -0
  140. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_slider.py +0 -0
  141. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_switch.py +0 -0
  142. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_textfield.py +0 -0
  143. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_timer_picker.py +0 -0
  144. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/cupertino/cupertino_tinted_button.py +0 -0
  145. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/device_info.py +0 -0
  146. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/dialog_control.py +0 -0
  147. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/duration.py +0 -0
  148. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/embed_json_encoder.py +0 -0
  149. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/events.py +0 -0
  150. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/exceptions.py +0 -0
  151. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/geometry.py +0 -0
  152. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/gradients.py +0 -0
  153. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/icon_data.py +0 -0
  154. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/id_counter.py +0 -0
  155. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/keys.py +0 -0
  156. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/layout_control.py +0 -0
  157. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/margin.py +0 -0
  158. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/__init__.py +0 -0
  159. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/alert_dialog.py +0 -0
  160. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/app_bar.py +0 -0
  161. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/auto_complete.py +0 -0
  162. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/badge.py +0 -0
  163. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/banner.py +0 -0
  164. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/bottom_app_bar.py +0 -0
  165. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/bottom_sheet.py +0 -0
  166. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/button.py +0 -0
  167. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/card.py +0 -0
  168. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/checkbox.py +0 -0
  169. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/chip.py +0 -0
  170. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/circle_avatar.py +0 -0
  171. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/container.py +0 -0
  172. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/datatable.py +0 -0
  173. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/date_picker.py +0 -0
  174. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/date_range_picker.py +0 -0
  175. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/divider.py +0 -0
  176. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/dropdown.py +0 -0
  177. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/dropdownm2.py +0 -0
  178. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/elevated_button.py +0 -0
  179. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/filled_button.py +0 -0
  180. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/filled_tonal_button.py +0 -0
  181. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/floating_action_button.py +0 -0
  182. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/form_field_control.py +0 -0
  183. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/icon_button.py +0 -0
  184. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/icons.py +0 -0
  185. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/list_tile.py +0 -0
  186. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/menu_bar.py +0 -0
  187. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/menu_item_button.py +0 -0
  188. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/navigation_bar.py +0 -0
  189. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/navigation_drawer.py +0 -0
  190. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/navigation_rail.py +0 -0
  191. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/outlined_button.py +0 -0
  192. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/popup_menu_button.py +0 -0
  193. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/progress_bar.py +0 -0
  194. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/progress_ring.py +0 -0
  195. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/radio.py +0 -0
  196. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/radio_group.py +0 -0
  197. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/range_slider.py +0 -0
  198. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/reorderable_list_view.py +0 -0
  199. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/search_bar.py +0 -0
  200. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/segmented_button.py +0 -0
  201. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/selection_area.py +0 -0
  202. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/slider.py +0 -0
  203. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/snack_bar.py +0 -0
  204. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/submenu_button.py +0 -0
  205. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/switch.py +0 -0
  206. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/tabs.py +0 -0
  207. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/textfield.py +0 -0
  208. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/time_picker.py +0 -0
  209. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/tooltip.py +0 -0
  210. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/material/vertical_divider.py +0 -0
  211. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/multi_view.py +0 -0
  212. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/padding.py +0 -0
  213. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/painting.py +0 -0
  214. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/query_string.py +0 -0
  215. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/ref.py +0 -0
  216. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/scrollable_control.py +0 -0
  217. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/__init__.py +0 -0
  218. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/browser_context_menu.py +0 -0
  219. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/clipboard.py +0 -0
  220. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/file_picker.py +0 -0
  221. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/haptic_feedback.py +0 -0
  222. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/semantics_service.py +0 -0
  223. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/service.py +0 -0
  224. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/shake_detector.py +0 -0
  225. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/shared_preferences.py +0 -0
  226. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/storage_paths.py +0 -0
  227. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/services/url_launcher.py +0 -0
  228. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/template_route.py +0 -0
  229. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/text_style.py +0 -0
  230. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/transform.py +0 -0
  231. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/controls/types.py +0 -0
  232. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/fastapi/__init__.py +0 -0
  233. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/messaging/session_store.py +0 -0
  234. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/pubsub/__init__.py +0 -0
  235. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/pubsub/pubsub_client.py +0 -0
  236. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/pubsub/pubsub_hub.py +0 -0
  237. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/testing/__init__.py +0 -0
  238. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/testing/finder.py +0 -0
  239. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/testing/tester.py +0 -0
  240. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/__init__.py +0 -0
  241. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/browser.py +0 -0
  242. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/classproperty.py +0 -0
  243. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/deprecated.py +0 -0
  244. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/deprecated_enum.py +0 -0
  245. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/from_dict.py +0 -0
  246. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/hashing.py +0 -0
  247. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/json_utils.py +0 -0
  248. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/locks.py +0 -0
  249. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/network.py +0 -0
  250. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/object_model.py +0 -0
  251. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/once.py +0 -0
  252. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/pip.py +0 -0
  253. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/slugify.py +0 -0
  254. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/strings.py +0 -0
  255. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet/utils/vector.py +0 -0
  256. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/SOURCES.txt +0 -0
  257. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/dependency_links.txt +0 -0
  258. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/entry_points.txt +0 -0
  259. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/requires.txt +0 -0
  260. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/src/flet.egg-info/top_level.txt +0 -0
  261. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_base_control.py +0 -0
  262. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_colors.py +0 -0
  263. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_dataclasses.py +0 -0
  264. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_datetime.py +0 -0
  265. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_events.py +0 -0
  266. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_from_dict.py +0 -0
  267. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_icons.py +0 -0
  268. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_object_diff_frozen.py +0 -0
  269. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_object_diff_in_place.py +0 -0
  270. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_object_diff_performance.py +0 -0
  271. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_observable.py +0 -0
  272. {flet-0.70.0.dev6516 → flet-0.70.0.dev6533}/tests/test_patch_dataclass.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flet
3
- Version: 0.70.0.dev6516
3
+ Version: 0.70.0.dev6533
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flet"
3
- version = "0.70.0.dev6516"
3
+ version = "0.70.0.dev6533"
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"
@@ -90,7 +90,7 @@ class AuthorizationService(Authorization):
90
90
  self.user = await self.provider._fetch_user(self.__token.access_token)
91
91
  if self.user is None and self.provider.user_endpoint is not None:
92
92
  if self.provider.user_id_fn is None:
93
- raise Exception(
93
+ raise ValueError(
94
94
  "user_id_fn must be specified too if user_endpoint is not None"
95
95
  )
96
96
  self.user = await self.__get_user()
@@ -36,7 +36,7 @@ class OAuthProvider:
36
36
  self.code_verifier = code_verifier
37
37
 
38
38
  def _name(self):
39
- raise Exception("Not implemented")
39
+ raise NotImplementedError("Subclasses must implement _name()")
40
40
 
41
41
  async def _fetch_groups(self, access_token: str) -> list[Group]:
42
42
  return []
@@ -86,6 +86,16 @@ class Animation:
86
86
 
87
87
  @dataclass
88
88
  class AnimationStyle:
89
+ """
90
+ Used to override the default parameters of an animation.
91
+
92
+ Note:
93
+ If [`duration`][(c).] and [`reverse_duration`][(c).] are set to
94
+ [`Duration()`][flet.Duration], the corresponding animation will be disabled.
95
+ See [`no_animation()`][(c).no_animation] method for a convenient way to create
96
+ such an instance.
97
+ """
98
+
89
99
  duration: Optional[DurationValue] = None
90
100
  """
91
101
  The duration of the animation.
@@ -106,6 +116,16 @@ class AnimationStyle:
106
116
  The curve to use for the reverse animation.
107
117
  """
108
118
 
119
+ @staticmethod
120
+ def no_animation() -> "AnimationStyle":
121
+ """
122
+ Creates an instance of `AnimationStyle` with no animation.
123
+ """
124
+ return AnimationStyle(
125
+ duration=Duration(),
126
+ reverse_duration=Duration(),
127
+ )
128
+
109
129
  def copy(
110
130
  self,
111
131
  *,
@@ -116,6 +116,7 @@ class BaseControl:
116
116
  """
117
117
  Arbitrary data of any type.
118
118
  """
119
+
119
120
  key: Optional[KeyValue] = None
120
121
 
121
122
  ref: InitVar[Optional[Ref["BaseControl"]]] = None
@@ -124,13 +125,16 @@ class BaseControl:
124
125
  _internals: dict = field(
125
126
  default_factory=dict, init=False, repr=False, compare=False
126
127
  )
128
+ """
129
+ A dictionary for storing internal control configuration.
130
+ """
127
131
 
128
132
  def __post_init__(self, ref: Optional[Ref[Any]]):
129
133
  self.__class__.__hash__ = BaseControl.__hash__
130
134
  self._i = ControlId.next()
131
135
  if not hasattr(self, "_c") or self._c is None:
132
136
  cls_name = f"{self.__class__.__module__}.{self.__class__.__qualname__}"
133
- raise Exception(
137
+ raise ValueError(
134
138
  f"Control {cls_name} must have @control decorator with "
135
139
  "type_name specified."
136
140
  )
@@ -232,7 +236,7 @@ class BaseControl:
232
236
  # public methods
233
237
  def update(self) -> None:
234
238
  if hasattr(self, "_frozen"):
235
- raise Exception("Frozen control cannot be updated.")
239
+ raise RuntimeError("Frozen control cannot be updated.")
236
240
  if not self.page:
237
241
  raise RuntimeError(
238
242
  f"{self.__class__.__qualname__} Control must be added to the page first"
@@ -329,7 +329,7 @@ class BasePage(AdaptiveControl):
329
329
  Exception: If the specified dialog is already open.
330
330
  """
331
331
  if dialog in self._dialogs.controls:
332
- raise Exception("Dialog is already opened")
332
+ raise RuntimeError("Dialog is already opened")
333
333
 
334
334
  original_on_dismiss = dialog.on_dismiss
335
335
 
@@ -146,6 +146,3 @@ class Control(BaseControl):
146
146
  raise ValueError(
147
147
  f"expand must be of type bool or int, got {type(self.expand)}"
148
148
  )
149
-
150
- def clean(self) -> None:
151
- raise Exception("Deprecated!")
@@ -83,7 +83,7 @@ def get_event_field_type(control: Any, field_name: str):
83
83
 
84
84
  return event_type
85
85
  except Exception as e:
86
- raise Exception(f"[resolve error] {field_name}: {e}") from e
86
+ raise RuntimeError(f"[resolve error] {field_name}: {e}") from e
87
87
 
88
88
 
89
89
  EventControlType = TypeVar("EventControlType", bound="BaseControl")
@@ -29,7 +29,7 @@ class Image(LayoutControl):
29
29
 
30
30
  ```python
31
31
  ft.Image(
32
- src_base64="iVBORw0KGgoAAAANSUhEUgAAABkAAAAgCAYAAADnnNMGAAAACXBIWXMAAAORAAADkQFnq8zdAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA6dJREFUSImllltoHFUYx3/fzOzm0lt23ZrQ1AQbtBehNpvQohgkBYVo410RwQctNE3Sh0IfiiBoIAjqi6TYrKnFy4O3oiiRavDJFi3mXomIBmOxNZe63ay52GR3Zj4f2sTEzmx3m//TYf7/c35zvgPnO6KqrESXqpq3muocAikv6m+/zytj3ejik1VN21G31YA9CgJ6xC+bMyQZPVCuarciPAMYC99V6Vw5pLbFSibHmlVoRVj9P3cmPBM8tSJI/M6mzabpfoAQ9fIF7WK4bd5vvuFnLGgy2vi0abg94A0AcJGvMq3hDxGRyar9r4F+iLAm0yIiRk8m37tctS1WsrIhhrI30+Srmg+J87OXUf3lWGS1q89dC6ltsSanxk4Aj2QBABii96300g87P/rtlrWr8l+vyDMfdlXSyyEikqxsiOUAQJCBhfHdXRfCq1LSsSlcWG+KBAGStvvrMkgiuv8lUc2mREukPwLUfHG+uTQv8Eown7VL3XlbBxYhf1c17hbVF3MDwA9bts280TnaU1YYqPby07aeFlUlHt27wSQ4CLo+F8AvoTCvHmyKF+ZbEb/M77P2LgvAwmrTHAHflN3KZxVbMC2jMFNOpgPnrMSOhvvFkMezXdwV4ePbtvHtxnJAMQ0j4JtVnO+eLb5oiSlt5HDbv7t1O90lpYCCCKbhfzW5kAIwUAazR0BlfII8Ow0I6uoVmI9MyAMwbMs8CExmDbk4zgu931MyO4OI4KrYflkRjOoTI+uM9d1vjotwKPu9QMk/sxzuO8POiVFcdZ1M2YBVsMEAKOqLvaPIe7mACuw0z/80SMH58SMplxlfiDhVi7dw2pltRhjKBQTQdrSja2KKTfE551NHuaZ0QVPvWYQUn31/Vm2nDvgjF4grVJx6suSvrvrSJ/6cSW2Oz9mf264uNrB806xZ1k/CZ49dUKgDEtlCROX2hfHpx8pGuuo3PpqYulw8fjndOp1yhgtNKRevJ1FyR2Ola+jXAjdnwTkZ6o896GdWdxDw7IxFg+0DpmXchTKSBWQnIuJn9u4j7dt+13UfHXEkXQOcuQ4kMhVtqsgUyPiQiPQfHw1NB2sRjmXKuTg1NwwBYLhtPtQX26eqTwGXPDOqvmcC4Hnwfrrad94GrVsOYTqUTkQY+iTlNe/6O1miSP/x0VB/+wMIDwHn/vtV1iQC4Xv95uUEWVCoL9Y5Z+gdovoyMHUFJHv88jmVy0vTuw7cZNv2YaA61Bfb7ZX5F8SaUv2xwZevAAAAAElFTkSuQmCC",
32
+ src="https://flet.dev/img/logo.svg",
33
33
  width=100,
34
34
  height=100,
35
35
  )
@@ -21,12 +21,12 @@ class CupertinoSlidingSegmentedButton(LayoutControl):
21
21
 
22
22
  ```python
23
23
  ft.CupertinoSlidingSegmentedButton(
24
+ selected_index=1,
24
25
  controls=[
25
26
  ft.Text("One"),
26
27
  ft.Text("Two"),
27
28
  ft.Text("Three"),
28
29
  ],
29
- selected_index=1,
30
30
  )
31
31
  ```
32
32
  """
@@ -39,8 +39,7 @@ class CupertinoSlidingSegmentedButton(LayoutControl):
39
39
  Must contain at least two visible Controls.
40
40
 
41
41
  Raises:
42
- ValueError: If [`controls`][(c).] does not contain at least two
43
- visible controls.
42
+ ValueError: If it does not contain at least two visible controls.
44
43
  """
45
44
 
46
45
  selected_index: int = 0
@@ -48,8 +47,7 @@ class CupertinoSlidingSegmentedButton(LayoutControl):
48
47
  The index (starting from 0) of the selected segment in the [`controls`][(c).] list.
49
48
 
50
49
  Raises:
51
- IndexError: If [`selected_index`][(c).] is out of range relative to the
52
- visible controls.
50
+ IndexError: If it is out of range relative to the visible controls.
53
51
  """
54
52
 
55
53
  bgcolor: ColorValue = CupertinoColors.TERTIARY_SYSTEM_FILL
@@ -149,8 +149,8 @@ class ExpansionPanelList(LayoutControl):
149
149
  """
150
150
  Called when an item of [`controls`][(c).] is expanded or collapsed.
151
151
 
152
- The event's [`data`][flet.Event.], contains the index of the
153
- child panel (in [`controls`][(c).]) which triggered this event.
152
+ The [`data`][flet.Event.] property of the event handler argument contains the
153
+ index of the child panel (in [`controls`][(c).]) which triggered this event.
154
154
  """
155
155
 
156
156
  def before_update(self):
@@ -0,0 +1,351 @@
1
+ from enum import Enum
2
+ from typing import Optional
3
+
4
+ from flet.controls.adaptive_control import AdaptiveControl
5
+ from flet.controls.alignment import Alignment
6
+ from flet.controls.animation import AnimationStyle
7
+ from flet.controls.base_control import control
8
+ from flet.controls.buttons import OutlinedBorder
9
+ from flet.controls.control import Control
10
+ from flet.controls.control_event import ControlEventHandler
11
+ from flet.controls.layout_control import LayoutControl
12
+ from flet.controls.padding import PaddingValue
13
+ from flet.controls.types import (
14
+ ClipBehavior,
15
+ ColorValue,
16
+ CrossAxisAlignment,
17
+ IconDataOrControl,
18
+ Number,
19
+ StrOrControl,
20
+ VisualDensity,
21
+ )
22
+
23
+ __all__ = ["ExpansionTile", "TileAffinity"]
24
+
25
+
26
+ class TileAffinity(Enum):
27
+ """
28
+ Where to place a control in controls that use [`ListTile`][flet.] to position a
29
+ control next to a label.
30
+ """
31
+
32
+ LEADING = "leading"
33
+ """
34
+ Positions the control on the leading edge, and the secondary control, if
35
+ any, on the trailing edge.
36
+ """
37
+
38
+ TRAILING = "trailing"
39
+ """
40
+ Positions the control on the trailing edge, and the secondary control, if
41
+ any, on the leading edge.
42
+ """
43
+
44
+ PLATFORM = "platform"
45
+ """
46
+ Positions the control relative to the text in the fashion that is typical
47
+ for the current platform, and place the secondary control on the opposite
48
+ side.
49
+ """
50
+
51
+
52
+ @control("ExpansionTile")
53
+ class ExpansionTile(LayoutControl, AdaptiveControl):
54
+ """
55
+ A single-line ListTile with an expansion arrow icon that expands or collapses the
56
+ tile to reveal or hide its controls.
57
+
58
+ ```python
59
+ ft.ExpansionTile(
60
+ width=400,
61
+ title="Account",
62
+ subtitle="Manage profile and security",
63
+ expanded=True,
64
+ controls=[
65
+ ft.ListTile(title=ft.Text("Profile")),
66
+ ft.ListTile(title=ft.Text("Security")),
67
+ ],
68
+ )
69
+ ```
70
+ """
71
+
72
+ title: StrOrControl
73
+ """
74
+ A Control to display as primary content of this tile.
75
+
76
+ Typically a [`Text`][flet.] control.
77
+
78
+ Raises:
79
+ ValueError: If it is neither a string nor a visible Control.
80
+ """
81
+
82
+ controls: Optional[list[Control]] = None
83
+ """
84
+ The controls to be displayed when this tile [expands][(c).expanded].
85
+
86
+ Typically a list of [`ListTile`][flet.] controls.
87
+ """
88
+
89
+ subtitle: Optional[StrOrControl] = None
90
+ """
91
+ Additional content displayed below the [`title`][(c).].
92
+
93
+ Typically a [`Text`][flet.] control.
94
+ """
95
+
96
+ leading: Optional[IconDataOrControl] = None
97
+ """
98
+ A Control to display before the [`title`][(c).].
99
+
100
+ Typically a [`CircleAvatar`][flet.] control.
101
+
102
+ Depending on the value of [`affinity`][(c).], this control
103
+ may replace the rotating expansion arrow icon.
104
+ """
105
+
106
+ trailing: Optional[IconDataOrControl] = None
107
+ """
108
+ A Control to display after the [`title`][(c).].
109
+
110
+ Typically an [`Icon`][flet.] control.
111
+
112
+ Depending on the value of [`affinity`][(c).], this control
113
+ may replace the rotating expansion arrow icon.
114
+ """
115
+
116
+ controls_padding: Optional[PaddingValue] = None
117
+ """
118
+ Defines the padding around the [`controls`][(c).].
119
+
120
+ If `None`, [`ExpansionTileTheme.controls_padding`][flet.] is used;
121
+ if that is also `None`, then defaults to `Padding.all(0)`.
122
+ """
123
+
124
+ tile_padding: Optional[PaddingValue] = None
125
+ """
126
+ Defines the tile's padding.
127
+
128
+ Analogous to [`ListTile.content_padding`][flet.], this property defines the
129
+ insets for the [`leading`][(c).], [`title`][(c).], [`subtitle`][(c).] and
130
+ [`trailing`][(c).] controls. It does not inset the expanded
131
+ [`controls`][(c).] widgets.
132
+
133
+ If `None`, [`ExpansionTileTheme.tile_padding`][flet.] is used;
134
+ if that is also `None`, then defaults to `Padding.symmetric(horizontal=16.0)`.
135
+ """
136
+
137
+ affinity: Optional[TileAffinity] = None
138
+ """
139
+ Typically used to force the expansion arrow icon to the tile's [`leading`][(c).] or
140
+ [`trailing`][(c).] edge.
141
+
142
+ If `None`, [`ListTileTheme.affinity`][flet.] is used;
143
+ if that is also `None`, then defaults to [`TileAffinity.TRAILING`][flet.]
144
+ (the expansion arrow icon appears on the tile's trailing edge).
145
+ """
146
+
147
+ expanded_alignment: Optional[Alignment] = None
148
+ """
149
+ Defines the alignment of [`controls`][(c).], which are arranged in a column when
150
+ the tile is expanded.
151
+
152
+ If `None`, [`ExpansionTileTheme.expanded_alignment`][flet.] is used;
153
+ if that is also `None`, then defaults to [`Alignment.CENTER`][flet.].
154
+ """
155
+
156
+ expanded_cross_axis_alignment: CrossAxisAlignment = CrossAxisAlignment.CENTER
157
+ """
158
+ Defines the alignment of each child control within [`controls`][(c).] when the
159
+ tile is expanded.
160
+
161
+ Raises:
162
+ ValueError: If set to [`CrossAxisAlignment.BASELINE`][flet.].
163
+ """
164
+
165
+ clip_behavior: Optional[ClipBehavior] = None
166
+ """
167
+ Defines how the content of this tile is clipped.
168
+
169
+ If set and a custom collapsed or expanded shape is provided,
170
+ this value determines how this tile is clipped.
171
+
172
+ If `None`, [`ExpansionTileTheme.clip_behavior`][flet.] is used;
173
+ if that is also `None`, then defaults to [`ClipBehavior.ANTI_ALIAS`][flet.].
174
+ """
175
+
176
+ maintain_state: bool = False
177
+ """
178
+ A boolean value which defines whether the state of the [`controls`][(c).] is
179
+ maintained when this tile [expands][(c).expanded] and collapses.
180
+
181
+ When `True`, the children are kept in the tree while the tile is collapsed.
182
+ When `False` (default), the [`controls`][(c).] are removed from the tree when
183
+ the tile is collapsed and recreated upon expansion.
184
+ """
185
+
186
+ text_color: Optional[ColorValue] = None
187
+ """
188
+ The color of this tile's titles when the sublist is [`expanded`][(c).].
189
+
190
+ If `None`, [`ExpansionTileTheme.text_color`][flet.] is used;
191
+ if that is also `None`, then defaults to [`body_large`][flet.TextTheme.]
192
+ of the [`Theme.text_theme`][flet.].
193
+ """
194
+
195
+ icon_color: Optional[ColorValue] = None
196
+ """
197
+ The icon color of this tile's expansion arrow icon
198
+ when the sublist is [`expanded`][(c).].
199
+
200
+ If `None`, [`ExpansionTileTheme.icon_color`][flet.] is used;
201
+ if that is also `None`, then defaults to [`ColorScheme.primary`][flet.]
202
+ of the [`Page.theme`][flet.].
203
+ """
204
+
205
+ shape: Optional[OutlinedBorder] = None
206
+ """
207
+ The border shape of this tile when the sublist is [`expanded`][(c).].
208
+
209
+ If `None`, [`ExpansionTileTheme.shape`][flet.] is used;
210
+ if that is also `None`, then defaults to a [`Border`][flet.] with vertical sides
211
+ of color [`Theme.divider_color`][flet.].
212
+ """
213
+
214
+ bgcolor: Optional[ColorValue] = None
215
+ """
216
+ The color to display behind the sublist when [`expanded`][(c).].
217
+
218
+ If `None`, [`ExpansionTileTheme.bgcolor`][flet.] is used;
219
+ if that is also `None`, then defaults to [`Colors.TRANSPARENT`][flet.].
220
+ """
221
+
222
+ collapsed_bgcolor: Optional[ColorValue] = None
223
+ """
224
+ Defines the background color of this tile when the sublist
225
+ is collapsed ([`expanded`][(c).] is False).
226
+
227
+ If `None`, [`ExpansionTileTheme.collapsed_bgcolor`][flet.] is used;
228
+ if that is also `None`, then defaults to [`Colors.TRANSPARENT`][flet.].
229
+ """
230
+
231
+ collapsed_icon_color: Optional[ColorValue] = None
232
+ """
233
+ The icon color of this tile's expansion arrow icon when the sublist
234
+ is collapsed ([`expanded`][(c).] is False).
235
+
236
+ If `None`, [`ExpansionTileTheme.collapsed_icon_color`][flet.] is used;
237
+ if that is also `None`, then defaults to [`ColorScheme.on_surface`][flet.]
238
+ of the [`Page.theme`][flet.].
239
+ """
240
+
241
+ collapsed_text_color: Optional[ColorValue] = None
242
+ """
243
+ The color of this tile's titles when the sublist
244
+ is collapsed ([`expanded`][(c).] is False).
245
+
246
+ If `None`, [`ExpansionTileTheme.collapsed_text_color`][flet.] is used;
247
+ if that is also `None`, then defaults to [`body_large`][flet.TextTheme.]
248
+ of the [`Theme.text_theme`][flet.].
249
+ """
250
+
251
+ collapsed_shape: Optional[OutlinedBorder] = None
252
+ """
253
+ The tile's border shape when the sublist is collapsed.
254
+
255
+ If `None`, [`ExpansionTileTheme.shape`][flet.] is used;
256
+ if that is also `None`, then defaults to a [`Border`][flet.] with vertical sides
257
+ of color [`Colors.TRANSPARENT`][flet.].
258
+ """
259
+
260
+ dense: Optional[bool] = None
261
+ """
262
+ Whether this list tile is part of a vertically dense list.
263
+
264
+ Dense tiles default to having a smaller height.
265
+
266
+ It is not recommended to set this property to `True` when in Material3.
267
+
268
+ If `None`, then its value is based on [`ListTileTheme.dense`][flet.].
269
+ """
270
+
271
+ enable_feedback: bool = True
272
+ """
273
+ Whether detected gestures should provide acoustic and/or haptic feedback. For
274
+ example, on Android a tap will produce a clicking sound and a long-press will
275
+ produce a short vibration, when feedback is enabled.
276
+ """
277
+
278
+ show_trailing_icon: bool = True
279
+ """
280
+ Whether this tile should build/show a default trailing icon, if
281
+ [`trailing`][(c).] is `None`.
282
+ """
283
+
284
+ min_tile_height: Optional[Number] = None
285
+ """
286
+ The minimum height of this tile.
287
+
288
+ If `None`, the default tile heights are `56.0`, `72.0`, and `88.0` for one, two,
289
+ and three lines of text respectively. If [`dense`][(c).] is `True`, these defaults
290
+ are changed to `48.0`, `64.0`, and `76.0`. A visual density value or a large title
291
+ will also adjust the default tile heights.
292
+ """
293
+
294
+ expanded: bool = False
295
+ """
296
+ The expansion state of this tile.
297
+
298
+ `True` - expanded, `False` - collapsed.
299
+ """
300
+
301
+ visual_density: Optional[VisualDensity] = None
302
+ """
303
+ Defines how compact this tile's layout will be.
304
+ """
305
+
306
+ animation_style: Optional[AnimationStyle] = None
307
+ """
308
+ Defines the animation style (curve and duration) for this tile's expansion and
309
+ collapse.
310
+
311
+ If [`AnimationStyle.duration`][flet.] is provided, it will be used to override
312
+ the expansion animation duration. If it is `None`, then
313
+ [`AnimationStyle.duration`][flet.] from the
314
+ [`ExpansionTileTheme.animation_style`][(c).] will be used. If that is also
315
+ `None`, `Duration(milliseconds=200)` will be used as default.
316
+
317
+ If [`AnimationStyle.curve`][flet.] is provided, it will be used to override
318
+ the expansion animation curve. If it is `None`, then
319
+ [`AnimationStyle.curve`][flet.] from the
320
+ [`ExpansionTileTheme.animation_style`][(c).] will be used. If that is also
321
+ `None`, [`Curves.EASE_IN`][flet.] will be used as default.
322
+
323
+ If [`AnimationStyle.reverse_curve`][flet.] is provided, it will be used to override
324
+ the collapse animation curve. If it is `None`, then
325
+ [`AnimationStyle.reverse_curve`][flet.] from the
326
+ [`ExpansionTileTheme.animation_style`][(c).] will be used. If that is also
327
+ `None`, the expansion curve will be used as default.
328
+
329
+ Tip:
330
+ To disable the animations, use
331
+ [`AnimationStyle.no_animation()`][flet.AnimationStyle.no_animation].
332
+ """
333
+
334
+ on_change: Optional[ControlEventHandler["ExpansionTile"]] = None
335
+ """
336
+ Called when a user clicks or taps the list tile.
337
+
338
+ The [`data`][flet.Event.] property of the event handler argument is a boolean
339
+ representing the [`expanded`][(c).] state of the tile after the change.
340
+ """
341
+
342
+ def before_update(self):
343
+ super().before_update()
344
+ if isinstance(self.title, Control) and not self.title.visible:
345
+ raise ValueError("title must be visible")
346
+ if self.expanded_cross_axis_alignment == CrossAxisAlignment.BASELINE:
347
+ raise ValueError(
348
+ "expanded_cross_axis_alignment cannot be CrossAxisAlignment.BASELINE "
349
+ "since the expanded controls are aligned in a column, not a row. "
350
+ "Try aligning the controls differently."
351
+ )
@@ -25,10 +25,10 @@ class TextButton(LayoutControl, AdaptiveControl):
25
25
 
26
26
  ```python
27
27
  ft.TextButton(
28
- content="Text Button",
29
- icon=ft.Icons.STAR_BORDER,
30
- icon_color=ft.Colors.BLUE_300,
31
- )
28
+ content="Text Button",
29
+ icon=ft.Icons.STAR_BORDER,
30
+ icon_color=ft.Colors.BLUE_300,
31
+ )
32
32
  ```
33
33
  """
34
34
 
@@ -87,8 +87,8 @@ class TextButton(LayoutControl, AdaptiveControl):
87
87
  """
88
88
  Called when a mouse pointer enters or exists this button's response area.
89
89
 
90
- The [`data`][flet.Event.] property of event object is `True` when cursor
91
- enters and `False` when it exits.
90
+ The [`data`][flet.Event.] property of the event handler argument is `True` when
91
+ cursor enters and `False` when it exits.
92
92
  """
93
93
 
94
94
  on_focus: Optional[ControlEventHandler["TextButton"]] = None
@@ -1060,7 +1060,7 @@ class DiffBuilder:
1060
1060
  if parent:
1061
1061
  logger.debug("\n\nAdding parent %s to item: %s", parent, item)
1062
1062
  if parent is item:
1063
- raise Exception(f"Parent is the same as item: {item}")
1063
+ raise ObjectPatchException(f"Parent is the same as item: {item}")
1064
1064
  item._parent = weakref.ref(parent)
1065
1065
  else:
1066
1066
  logger.debug("\n\nSkip adding parent to item: %s", item)
@@ -1113,7 +1113,7 @@ class DiffBuilder:
1113
1113
 
1114
1114
  if parent:
1115
1115
  if parent is item:
1116
- raise Exception(f"Parent is the same as item: {item}")
1116
+ raise ObjectPatchException(f"Parent is the same as item: {item}")
1117
1117
  item._parent = weakref.ref(parent)
1118
1118
 
1119
1119
  if hasattr(item, "_frozen"):
@@ -1130,7 +1130,9 @@ class DiffBuilder:
1130
1130
  or not isinstance(obj, control_cls)
1131
1131
  ):
1132
1132
  if hasattr(obj, "_frozen"):
1133
- raise Exception("Frozen controls cannot be updated.") from None
1133
+ raise RuntimeError(
1134
+ "Frozen controls cannot be updated."
1135
+ ) from None
1134
1136
 
1135
1137
  if hasattr(obj, "__changes"):
1136
1138
  old_value = getattr(obj, name, None)
@@ -866,7 +866,7 @@ class Page(BasePage):
866
866
  """
867
867
  if sess := self.__session():
868
868
  return sess
869
- raise Exception("An attempt to fetch destroyed session.")
869
+ raise RuntimeError("An attempt to fetch destroyed session.")
870
870
 
871
871
  @property
872
872
  def query(self) -> QueryString: