flet 1.0.3__tar.gz → 1.1.0.dev0__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 (345) hide show
  1. {flet-1.0.3 → flet-1.1.0.dev0}/PKG-INFO +9 -9
  2. {flet-1.0.3 → flet-1.1.0.dev0}/pyproject.toml +10 -9
  3. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/__init__.py +27 -1
  4. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/app.py +27 -10
  5. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/flet_app.py +113 -2
  6. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/interactive_viewer.py +118 -4
  7. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/semantics.py +12 -2
  8. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/window.py +13 -2
  9. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/events.py +36 -0
  10. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/layout_control.py +29 -0
  11. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/list_tile.py +8 -1
  12. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/navigation_rail.py +7 -1
  13. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/popup_menu_button.py +10 -0
  14. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/switch.py +9 -0
  15. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/object_patch.py +18 -2
  16. flet-1.1.0.dev0/src/flet/controls/package_info.py +117 -0
  17. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/page.py +96 -8
  18. flet-1.1.0.dev0/src/flet/controls/query_string.py +102 -0
  19. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/semantics_service.py +2 -1
  20. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/template_route.py +8 -3
  21. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/theme.py +230 -0
  22. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/types.py +18 -0
  23. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/connection.py +10 -4
  24. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/flet_socket_server.py +9 -2
  25. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/pyodide_connection.py +9 -2
  26. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/session.py +34 -14
  27. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/pytest_plugin.py +22 -0
  28. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/testing/flet_test_app.py +155 -35
  29. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/version.py +2 -2
  30. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/PKG-INFO +9 -9
  31. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/SOURCES.txt +9 -0
  32. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/requires.txt +8 -8
  33. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_assets_dir_resolution.py +31 -0
  34. flet-1.1.0.dev0/tests/test_component_moved_subtree.py +151 -0
  35. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_events.py +49 -1
  36. flet-1.1.0.dev0/tests/test_flet_app.py +115 -0
  37. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_icons.py +32 -0
  38. flet-1.1.0.dev0/tests/test_input_decoration_theme.py +90 -0
  39. flet-1.1.0.dev0/tests/test_layout_constraints.py +175 -0
  40. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_object_diff_in_place.py +2 -0
  41. flet-1.1.0.dev0/tests/test_package_info.py +110 -0
  42. flet-1.1.0.dev0/tests/test_pytest_plugin.py +47 -0
  43. flet-1.1.0.dev0/tests/test_query_string.py +115 -0
  44. flet-1.1.0.dev0/tests/test_template_route.py +35 -0
  45. flet-1.0.3/src/flet/controls/query_string.py +0 -126
  46. {flet-1.0.3 → flet-1.1.0.dev0}/README.md +0 -0
  47. {flet-1.0.3 → flet-1.1.0.dev0}/setup.cfg +0 -0
  48. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/__init__.py +0 -0
  49. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/authorization.py +0 -0
  50. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/authorization_service.py +0 -0
  51. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/group.py +0 -0
  52. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/oauth_provider.py +0 -0
  53. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/oauth_token.py +0 -0
  54. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/providers/__init__.py +0 -0
  55. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/providers/auth0_oauth_provider.py +0 -0
  56. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/providers/azure_oauth_provider.py +0 -0
  57. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/providers/github_oauth_provider.py +0 -0
  58. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/providers/google_oauth_provider.py +0 -0
  59. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/auth/user.py +0 -0
  60. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/canvas/__init__.py +0 -0
  61. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/cli.py +0 -0
  62. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/__init__.py +0 -0
  63. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/component.py +0 -0
  64. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/component_decorator.py +0 -0
  65. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/component_owned.py +0 -0
  66. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/__init__.py +0 -0
  67. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/hook.py +0 -0
  68. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_callback.py +0 -0
  69. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_context.py +0 -0
  70. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_dialog.py +0 -0
  71. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_effect.py +0 -0
  72. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_memo.py +0 -0
  73. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_ref.py +0 -0
  74. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/hooks/use_state.py +0 -0
  75. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/memo.py +0 -0
  76. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/observable.py +0 -0
  77. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/public_utils.py +0 -0
  78. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/router.py +0 -0
  79. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/components/utils.py +0 -0
  80. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/__init__.py +0 -0
  81. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/action_control.py +0 -0
  82. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/adaptive_control.py +0 -0
  83. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/alignment.py +0 -0
  84. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/animation.py +0 -0
  85. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/base_control.py +0 -0
  86. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/base_page.py +0 -0
  87. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/blur.py +0 -0
  88. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/border.py +0 -0
  89. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/border_radius.py +0 -0
  90. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/box.py +0 -0
  91. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/buttons.py +0 -0
  92. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/client_action.py +0 -0
  93. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/colors.py +0 -0
  94. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/context.py +0 -0
  95. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/control.py +0 -0
  96. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/control_event.py +0 -0
  97. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/control_state.py +0 -0
  98. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/__init__.py +0 -0
  99. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/animated_switcher.py +0 -0
  100. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/autofill_group.py +0 -0
  101. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/__init__.py +0 -0
  102. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/arc.py +0 -0
  103. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/canvas.py +0 -0
  104. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/circle.py +0 -0
  105. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/color.py +0 -0
  106. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/fill.py +0 -0
  107. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/image.py +0 -0
  108. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/line.py +0 -0
  109. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/oval.py +0 -0
  110. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/path.py +0 -0
  111. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/points.py +0 -0
  112. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/rect.py +0 -0
  113. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/shadow.py +0 -0
  114. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/shape.py +0 -0
  115. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/canvas/text.py +0 -0
  116. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/column.py +0 -0
  117. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/dismissible.py +0 -0
  118. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/drag_target.py +0 -0
  119. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/draggable.py +0 -0
  120. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/gesture_detector.py +0 -0
  121. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/grid_view.py +0 -0
  122. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/hero.py +0 -0
  123. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/icon.py +0 -0
  124. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/image.py +0 -0
  125. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/keyboard_listener.py +0 -0
  126. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/list_view.py +0 -0
  127. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/markdown.py +0 -0
  128. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/merge_semantics.py +0 -0
  129. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/page_view.py +0 -0
  130. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/pagelet.py +0 -0
  131. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/placeholder.py +0 -0
  132. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/raw_image.py +0 -0
  133. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/reorderable_drag_handle.py +0 -0
  134. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/responsive_row.py +0 -0
  135. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/rotated_box.py +0 -0
  136. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/row.py +0 -0
  137. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/safe_area.py +0 -0
  138. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/screenshot.py +0 -0
  139. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/shader_mask.py +0 -0
  140. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/shimmer.py +0 -0
  141. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/stack.py +0 -0
  142. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/text.py +0 -0
  143. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/text_span.py +0 -0
  144. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/transparent_pointer.py +0 -0
  145. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/view.py +0 -0
  146. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/core/window_drag_area.py +0 -0
  147. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/__init__.py +0 -0
  148. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_action_sheet.py +0 -0
  149. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_action_sheet_action.py +0 -0
  150. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_activity_indicator.py +0 -0
  151. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_alert_dialog.py +0 -0
  152. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_app_bar.py +0 -0
  153. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_bottom_sheet.py +0 -0
  154. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_button.py +0 -0
  155. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_checkbox.py +0 -0
  156. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_colors.py +0 -0
  157. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_context_menu.py +0 -0
  158. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_context_menu_action.py +0 -0
  159. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_date_picker.py +0 -0
  160. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_dialog_action.py +0 -0
  161. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_filled_button.py +0 -0
  162. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_icons.json +0 -0
  163. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_icons.py +0 -0
  164. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_icons.pyi +0 -0
  165. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_list_tile.py +0 -0
  166. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_navigation_bar.py +0 -0
  167. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_picker.py +0 -0
  168. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_radio.py +0 -0
  169. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_segmented_button.py +0 -0
  170. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_slider.py +0 -0
  171. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_sliding_segmented_button.py +0 -0
  172. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_switch.py +0 -0
  173. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_textfield.py +0 -0
  174. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_timer_picker.py +0 -0
  175. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/cupertino/cupertino_tinted_button.py +0 -0
  176. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/device_info.py +0 -0
  177. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/dialog_control.py +0 -0
  178. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/duration.py +0 -0
  179. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/embed_json_encoder.py +0 -0
  180. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/exceptions.py +0 -0
  181. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/geometry.py +0 -0
  182. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/gradients.py +0 -0
  183. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/icon_data.py +0 -0
  184. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/id_counter.py +0 -0
  185. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/keys.py +0 -0
  186. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/margin.py +0 -0
  187. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/__init__.py +0 -0
  188. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/alert_dialog.py +0 -0
  189. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/app_bar.py +0 -0
  190. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/auto_complete.py +0 -0
  191. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/badge.py +0 -0
  192. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/banner.py +0 -0
  193. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/bottom_app_bar.py +0 -0
  194. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/bottom_sheet.py +0 -0
  195. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/button.py +0 -0
  196. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/card.py +0 -0
  197. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/checkbox.py +0 -0
  198. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/chip.py +0 -0
  199. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/circle_avatar.py +0 -0
  200. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/container.py +0 -0
  201. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/context_menu.py +0 -0
  202. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/datatable.py +0 -0
  203. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/date_picker.py +0 -0
  204. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/date_range_picker.py +0 -0
  205. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/divider.py +0 -0
  206. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/dropdown.py +0 -0
  207. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/dropdownm2.py +0 -0
  208. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/expansion_panel.py +0 -0
  209. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/expansion_tile.py +0 -0
  210. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/filled_button.py +0 -0
  211. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/filled_tonal_button.py +0 -0
  212. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/floating_action_button.py +0 -0
  213. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/form_field_control.py +0 -0
  214. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/icon_button.py +0 -0
  215. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/icons.json +0 -0
  216. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/icons.py +0 -0
  217. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/icons.pyi +0 -0
  218. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/menu_bar.py +0 -0
  219. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/menu_item_button.py +0 -0
  220. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/navigation_bar.py +0 -0
  221. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/navigation_drawer.py +0 -0
  222. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/outlined_button.py +0 -0
  223. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/progress_bar.py +0 -0
  224. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/progress_ring.py +0 -0
  225. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/radio.py +0 -0
  226. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/radio_group.py +0 -0
  227. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/range_slider.py +0 -0
  228. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/reorderable_list_view.py +0 -0
  229. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/search_bar.py +0 -0
  230. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/segmented_button.py +0 -0
  231. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/selection_area.py +0 -0
  232. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/slider.py +0 -0
  233. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/snack_bar.py +0 -0
  234. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/submenu_button.py +0 -0
  235. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/tabs.py +0 -0
  236. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/text_button.py +0 -0
  237. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/textfield.py +0 -0
  238. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/time_picker.py +0 -0
  239. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/tooltip.py +0 -0
  240. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/material/vertical_divider.py +0 -0
  241. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/multi_view.py +0 -0
  242. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/padding.py +0 -0
  243. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/painting.py +0 -0
  244. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/ref.py +0 -0
  245. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/scrollable_control.py +0 -0
  246. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/__init__.py +0 -0
  247. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/accelerometer.py +0 -0
  248. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/barometer.py +0 -0
  249. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/battery.py +0 -0
  250. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/browser_context_menu.py +0 -0
  251. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/clipboard.py +0 -0
  252. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/connectivity.py +0 -0
  253. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/file_picker.py +0 -0
  254. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/gyroscope.py +0 -0
  255. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/haptic_feedback.py +0 -0
  256. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/magnetometer.py +0 -0
  257. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/screen_brightness.py +0 -0
  258. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/sensor_error_event.py +0 -0
  259. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/service.py +0 -0
  260. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/shake_detector.py +0 -0
  261. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/share.py +0 -0
  262. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/shared_preferences.py +0 -0
  263. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/storage_paths.py +0 -0
  264. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/url_launcher.py +0 -0
  265. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/user_accelerometer.py +0 -0
  266. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/services/wakelock.py +0 -0
  267. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/text_style.py +0 -0
  268. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/transform.py +0 -0
  269. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/controls/value_types.py +0 -0
  270. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/data_channel.py +0 -0
  271. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/fastapi/__init__.py +0 -0
  272. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/flet_dart_bridge_server.py +0 -0
  273. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/protocol.py +0 -0
  274. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/messaging/session_store.py +0 -0
  275. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/pubsub/__init__.py +0 -0
  276. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/pubsub/pubsub_client.py +0 -0
  277. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/pubsub/pubsub_hub.py +0 -0
  278. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/py.typed +0 -0
  279. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/security/__init__.py +0 -0
  280. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/testing/__init__.py +0 -0
  281. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/testing/finder.py +0 -0
  282. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/testing/remote_tester.py +0 -0
  283. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/testing/tester.py +0 -0
  284. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/__init__.py +0 -0
  285. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/browser.py +0 -0
  286. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/classproperty.py +0 -0
  287. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/deprecated.py +0 -0
  288. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/deprecated_enum.py +0 -0
  289. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/environment.py +0 -0
  290. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/files.py +0 -0
  291. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/from_dict.py +0 -0
  292. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/griffe_deprecations.py +0 -0
  293. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/hashing.py +0 -0
  294. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/json_utils.py +0 -0
  295. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/locks.py +0 -0
  296. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/network.py +0 -0
  297. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/object_model.py +0 -0
  298. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/once.py +0 -0
  299. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/pip.py +0 -0
  300. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/platform_utils.py +0 -0
  301. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/slugify.py +0 -0
  302. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/strings.py +0 -0
  303. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/typing_utils.py +0 -0
  304. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/validation.py +0 -0
  305. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet/utils/vector.py +0 -0
  306. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/dependency_links.txt +0 -0
  307. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/entry_points.txt +0 -0
  308. {flet-1.0.3 → flet-1.1.0.dev0}/src/flet.egg-info/top_level.txt +0 -0
  309. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_app_logging.py +0 -0
  310. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_auth_lazy_imports.py +0 -0
  311. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_base_control.py +0 -0
  312. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_client_actions.py +0 -0
  313. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_colors.py +0 -0
  314. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_component_diff.py +0 -0
  315. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_component_effects.py +0 -0
  316. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_component_owned_identity.py +0 -0
  317. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_component_renderer.py +0 -0
  318. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_context_auto_update.py +0 -0
  319. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_dataclasses.py +0 -0
  320. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_datetime.py +0 -0
  321. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_deprecated.py +0 -0
  322. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_environment.py +0 -0
  323. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_files.py +0 -0
  324. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_flet_app_wait_idle.py +0 -0
  325. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_from_dict.py +0 -0
  326. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_generator_handler_yield.py +0 -0
  327. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_griffe_deprecations.py +0 -0
  328. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_object_diff_frozen.py +0 -0
  329. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_object_diff_memory_churn.py +0 -0
  330. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_object_diff_performance.py +0 -0
  331. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_observable.py +0 -0
  332. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_patch_dataclass.py +0 -0
  333. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_raw_image_pixels.py +0 -0
  334. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_router_modal.py +0 -0
  335. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_router_pop.py +0 -0
  336. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_router_recursive.py +0 -0
  337. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_semantics.py +0 -0
  338. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_service_registration.py +0 -0
  339. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_session_disconnect_buffering.py +0 -0
  340. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_skip_double_update.py +0 -0
  341. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_textfield_paste_files.py +0 -0
  342. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_use_dialog.py +0 -0
  343. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_validation.py +0 -0
  344. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_validation_benchmark.py +0 -0
  345. {flet-1.0.3 → flet-1.1.0.dev0}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flet
3
- Version: 1.0.3
3
+ Version: 1.1.0.dev0
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://flet.dev/docs/
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: flet-cli==1.0.3; extra == "cli"
13
- Requires-Dist: flet-web==1.0.3; extra == "web"
12
+ Requires-Dist: flet-cli==1.1.0.dev0; extra == "cli"
13
+ Requires-Dist: flet-web==1.1.0.dev0; extra == "web"
14
14
  Requires-Dist: oauthlib>=3.2.2; platform_system != "Emscripten"
15
15
  Requires-Dist: httpx>=0.28.1; platform_system != "Emscripten"
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==1.0.3; extra == "all"
21
- Requires-Dist: flet-web==1.0.3; extra == "all"
22
- Requires-Dist: flet-desktop==1.0.3; extra == "all"
20
+ Requires-Dist: flet-cli==1.1.0.dev0; extra == "all"
21
+ Requires-Dist: flet-web==1.1.0.dev0; extra == "all"
22
+ Requires-Dist: flet-desktop==1.1.0.dev0; extra == "all"
23
23
  Provides-Extra: cli
24
- Requires-Dist: flet-cli==1.0.3; extra == "cli"
24
+ Requires-Dist: flet-cli==1.1.0.dev0; extra == "cli"
25
25
  Provides-Extra: desktop
26
- Requires-Dist: flet-desktop==1.0.3; extra == "desktop"
26
+ Requires-Dist: flet-desktop==1.1.0.dev0; extra == "desktop"
27
27
  Provides-Extra: web
28
- Requires-Dist: flet-web==1.0.3; extra == "web"
28
+ Requires-Dist: flet-web==1.1.0.dev0; extra == "web"
29
29
  Provides-Extra: test
30
30
  Requires-Dist: pytest>=7.2.0; extra == "test"
31
31
  Requires-Dist: pytest-asyncio>=1.1.0; extra == "test"
@@ -1,14 +1,14 @@
1
1
  [project]
2
2
  name = "flet"
3
- version = "1.0.3"
3
+ version = "1.1.0.dev0"
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==1.0.3; extra == 'cli'",
11
- "flet-web==1.0.3; extra == 'web'",
10
+ "flet-cli==1.1.0.dev0; extra == 'cli'",
11
+ "flet-web==1.1.0.dev0; extra == 'web'",
12
12
  "oauthlib >=3.2.2; platform_system != 'Emscripten'",
13
13
  "httpx >=0.28.1; platform_system != 'Emscripten'",
14
14
  "repath >=0.9.0",
@@ -23,15 +23,15 @@ Documentation = "https://flet.dev/docs/"
23
23
 
24
24
  [project.optional-dependencies]
25
25
  all = [
26
- "flet-cli==1.0.3",
27
- "flet-web==1.0.3",
28
- "flet-desktop==1.0.3",
26
+ "flet-cli==1.1.0.dev0",
27
+ "flet-web==1.1.0.dev0",
28
+ "flet-desktop==1.1.0.dev0",
29
29
  ]
30
- cli = ["flet-cli==1.0.3"]
30
+ cli = ["flet-cli==1.1.0.dev0"]
31
31
  desktop = [
32
- "flet-desktop==1.0.3",
32
+ "flet-desktop==1.1.0.dev0",
33
33
  ]
34
- web = ["flet-web==1.0.3"]
34
+ web = ["flet-web==1.1.0.dev0"]
35
35
  # Dependencies needed to run integration tests written with `flet.testing`
36
36
  # (the `flet test` command / the pytest plugin). Pillow/numpy/scikit-image
37
37
  # back screenshot and GIF comparison.
@@ -67,6 +67,7 @@ extensions = [
67
67
  "flet-permission-handler",
68
68
  "flet-rive",
69
69
  "flet-secure-storage",
70
+ "flet-shadcn-ui",
70
71
  "flet-spinkit",
71
72
  "flet-video",
72
73
  "flet-webview",
@@ -158,13 +158,17 @@ if TYPE_CHECKING:
158
158
  from flet.controls.core.flet_app import (
159
159
  FletApp,
160
160
  FletAppOutputEvent,
161
+ FletAppWindowEvent,
161
162
  )
162
163
  from flet.controls.core.gesture_detector import GestureDetector
163
164
  from flet.controls.core.grid_view import GridView
164
165
  from flet.controls.core.hero import Hero
165
166
  from flet.controls.core.icon import Icon
166
167
  from flet.controls.core.image import Image
167
- from flet.controls.core.interactive_viewer import InteractiveViewer
168
+ from flet.controls.core.interactive_viewer import (
169
+ InteractiveViewer,
170
+ InteractiveViewerTransform,
171
+ )
168
172
  from flet.controls.core.keyboard_listener import (
169
173
  KeyboardListener,
170
174
  KeyDownEvent,
@@ -295,6 +299,7 @@ if TYPE_CHECKING:
295
299
  DragUpdateEvent,
296
300
  ForcePressEvent,
297
301
  HoverEvent,
302
+ InteractiveViewerTransformEvent,
298
303
  LongPressDownEvent,
299
304
  LongPressEndEvent,
300
305
  LongPressMoveUpdateEvent,
@@ -513,6 +518,7 @@ if TYPE_CHECKING:
513
518
  )
514
519
  from flet.controls.material.vertical_divider import VerticalDivider
515
520
  from flet.controls.multi_view import MultiView
521
+ from flet.controls.package_info import PackageInfo
516
522
  from flet.controls.padding import (
517
523
  Padding,
518
524
  PaddingValue,
@@ -650,6 +656,7 @@ if TYPE_CHECKING:
650
656
  FloatingActionButtonTheme,
651
657
  IconButtonTheme,
652
658
  IconTheme,
659
+ InputDecorationTheme,
653
660
  ListTileTheme,
654
661
  NavigationBarTheme,
655
662
  NavigationDrawerTheme,
@@ -670,8 +677,10 @@ if TYPE_CHECKING:
670
677
  SystemOverlayStyle,
671
678
  TabBarTheme,
672
679
  TextButtonTheme,
680
+ TextFieldTheme,
673
681
  TextTheme,
674
682
  Theme,
683
+ ThemeSurfaces,
675
684
  TimePickerTheme,
676
685
  TooltipTheme,
677
686
  )
@@ -705,6 +714,7 @@ if TYPE_CHECKING:
705
714
  Locale,
706
715
  LocaleConfiguration,
707
716
  MainAxisAlignment,
717
+ MaterialTapTargetSize,
708
718
  MouseCursor,
709
719
  NotchShape,
710
720
  Number,
@@ -936,6 +946,7 @@ __all__ = [
936
946
  "FilterQuality",
937
947
  "FletApp",
938
948
  "FletAppOutputEvent",
949
+ "FletAppWindowEvent",
939
950
  "FletException",
940
951
  "FletPageDisconnectedException",
941
952
  "FletUnimplementedPlatformException",
@@ -967,8 +978,11 @@ __all__ = [
967
978
  "Image",
968
979
  "ImageRepeat",
969
980
  "InputBorder",
981
+ "InputDecorationTheme",
970
982
  "InputFilter",
971
983
  "InteractiveViewer",
984
+ "InteractiveViewerTransform",
985
+ "InteractiveViewerTransformEvent",
972
986
  "IosDeviceInfo",
973
987
  "IosUtsname",
974
988
  "Key",
@@ -1010,6 +1024,7 @@ __all__ = [
1010
1024
  "MarkdownCustomCodeTheme",
1011
1025
  "MarkdownExtensionSet",
1012
1026
  "MarkdownStyleSheet",
1027
+ "MaterialTapTargetSize",
1013
1028
  "Matrix4",
1014
1029
  "MenuBar",
1015
1030
  "MenuItemButton",
@@ -1048,6 +1063,7 @@ __all__ = [
1048
1063
  "OutlinedButtonTheme",
1049
1064
  "OutlinedIconButton",
1050
1065
  "OverlayVisibilityMode",
1066
+ "PackageInfo",
1051
1067
  "Padding",
1052
1068
  "PaddingValue",
1053
1069
  "Page",
@@ -1188,6 +1204,7 @@ __all__ = [
1188
1204
  "TextDecorationStyle",
1189
1205
  "TextField",
1190
1206
  "TextFieldPasteFilesEvent",
1207
+ "TextFieldTheme",
1191
1208
  "TextOnlyInputFilter",
1192
1209
  "TextOverflow",
1193
1210
  "TextSelection",
@@ -1199,6 +1216,7 @@ __all__ = [
1199
1216
  "TextThemeStyle",
1200
1217
  "Theme",
1201
1218
  "ThemeMode",
1219
+ "ThemeSurfaces",
1202
1220
  "TileAffinity",
1203
1221
  "TimePicker",
1204
1222
  "TimePickerEntryMode",
@@ -1454,6 +1472,8 @@ _LAZY = {
1454
1472
  "DropdownM2": "flet.controls.material.dropdownm2",
1455
1473
  "DropdownOption": "flet.controls.material.dropdown",
1456
1474
  "DropdownTheme": "flet.controls.theme",
1475
+ "InputDecorationTheme": "flet.controls.theme",
1476
+ "TextFieldTheme": "flet.controls.theme",
1457
1477
  "Duration": "flet.controls.duration",
1458
1478
  "DurationValue": "flet.controls.duration",
1459
1479
  "Event": "flet.controls.control_event",
@@ -1478,6 +1498,7 @@ _LAZY = {
1478
1498
  "FilterQuality": "flet.controls.box",
1479
1499
  "FletApp": "flet.controls.core.flet_app",
1480
1500
  "FletAppOutputEvent": "flet.controls.core.flet_app",
1501
+ "FletAppWindowEvent": "flet.controls.core.flet_app",
1481
1502
  "FletException": "flet.controls.exceptions",
1482
1503
  "FletPageDisconnectedException": "flet.controls.exceptions",
1483
1504
  "FletUnimplementedPlatformException": "flet.controls.exceptions",
@@ -1511,6 +1532,8 @@ _LAZY = {
1511
1532
  "InputBorder": "flet.controls.material.form_field_control",
1512
1533
  "InputFilter": "flet.controls.material.textfield",
1513
1534
  "InteractiveViewer": "flet.controls.core.interactive_viewer",
1535
+ "InteractiveViewerTransform": "flet.controls.core.interactive_viewer",
1536
+ "InteractiveViewerTransformEvent": "flet.controls.events",
1514
1537
  "IosDeviceInfo": "flet.controls.device_info",
1515
1538
  "IosUtsname": "flet.controls.device_info",
1516
1539
  "Key": "flet.controls.keys",
@@ -1590,6 +1613,7 @@ _LAZY = {
1590
1613
  "OutlinedButtonTheme": "flet.controls.theme",
1591
1614
  "OutlinedIconButton": "flet.controls.material.icon_button",
1592
1615
  "OverlayVisibilityMode": "flet.controls.cupertino.cupertino_textfield",
1616
+ "PackageInfo": "flet.controls.package_info",
1593
1617
  "Padding": "flet.controls.padding",
1594
1618
  "PaddingValue": "flet.controls.padding",
1595
1619
  "Page": "flet.controls.page",
@@ -1741,6 +1765,7 @@ _LAZY = {
1741
1765
  "TextThemeStyle": "flet.controls.text_style",
1742
1766
  "Theme": "flet.controls.theme",
1743
1767
  "ThemeMode": "flet.controls.types",
1768
+ "ThemeSurfaces": "flet.controls.theme",
1744
1769
  "TileAffinity": "flet.controls.material.expansion_tile",
1745
1770
  "TimePicker": "flet.controls.material.time_picker",
1746
1771
  "TimePickerEntryMode": "flet.controls.material.time_picker",
@@ -1768,6 +1793,7 @@ _LAZY = {
1768
1793
  "ViewPopEvent": "flet.controls.page",
1769
1794
  "ViewsPopUntilEvent": "flet.controls.page",
1770
1795
  "VisualDensity": "flet.controls.types",
1796
+ "MaterialTapTargetSize": "flet.controls.types",
1771
1797
  "Wakelock": "flet.controls.services.wakelock",
1772
1798
  "WebBrowserName": "flet.controls.device_info",
1773
1799
  "WebDeviceInfo": "flet.controls.device_info",
@@ -30,10 +30,21 @@ from flet.utils.pip import (
30
30
 
31
31
  logger = logging.getLogger("flet")
32
32
 
33
- #: Conventional assets directory name, used as the default for `assets_dir`.
34
- #: A missing directory of this name is unremarkable; any other value was
35
- #: chosen deliberately, so a missing one is reported.
36
33
  DEFAULT_ASSETS_DIR = "assets"
34
+ """Conventional assets directory name, used as the default for `assets_dir`.
35
+
36
+ A missing directory of this name is unremarkable; any other value was chosen
37
+ deliberately, so a missing one is reported.
38
+ """
39
+
40
+ DISPLAY_ASSETS_DIR_SUFFIX = "_ASSETS_DIR"
41
+ """Suffix of the line on which an app started by `flet run` reports its assets dir.
42
+
43
+ Appended to `FLET_DISPLAY_URL_PREFIX`, it starts the line the app prints just
44
+ before its page URL line, with its resolved assets directory (empty when it has
45
+ none). `flet run` opens the desktop client with that directory, so the app's own
46
+ `assets_dir` reaches it.
47
+ """
37
48
 
38
49
  AppCallable = Callable[[Page], Union[Any, Awaitable[Any]]]
39
50
  """Type alias for Flet app lifecycle callbacks.
@@ -222,11 +233,15 @@ async def run_async(
222
233
  """
223
234
  Handle app-start notification by logging/printing URL and optional browser open.
224
235
 
236
+ When started by `flet run`, the resolved assets directory is printed on
237
+ its own line first, so `flet run` can open the desktop client with it.
238
+
225
239
  Args:
226
240
  page_url: Resolved URL of the running app.
227
241
  """
228
242
 
229
243
  if url_prefix is not None:
244
+ print(f"{url_prefix}{DISPLAY_ASSETS_DIR_SUFFIX}", assets_dir or "")
230
245
  parts = [url_prefix, page_url]
231
246
  if view is not None:
232
247
  parts.append(view.value)
@@ -688,9 +703,10 @@ def __get_assets_dir_path(assets_dir: Optional[str], relative_to_cwd=False):
688
703
  such a directory, so a missing one is unremarkable; any other value was
689
704
  chosen deliberately, so a missing one is a mistake worth a warning.
690
705
 
691
- The env override is applied afterwards and is never dropped:
692
- `FLET_ASSETS_DIR` is always set on purpose, so a bad value there is left
693
- for downstream to report.
706
+ `FLET_ASSETS_DIR` takes precedence and is never dropped: it is always set
707
+ on purpose, so a bad value there is left for downstream to report. When it
708
+ is set, `assets_dir` is not checked, so nothing is logged about a
709
+ directory that isn't used.
694
710
 
695
711
  Args:
696
712
  assets_dir: Input assets directory path.
@@ -702,6 +718,11 @@ def __get_assets_dir_path(assets_dir: Optional[str], relative_to_cwd=False):
702
718
  exist.
703
719
  """
704
720
 
721
+ env_assets_dir = os.getenv("FLET_ASSETS_DIR")
722
+ if env_assets_dir:
723
+ logger.info("Assets path configured: %s (FLET_ASSETS_DIR)", env_assets_dir)
724
+ return env_assets_dir
725
+
705
726
  if assets_dir:
706
727
  requested = assets_dir
707
728
  if not Path(assets_dir).is_absolute():
@@ -724,10 +745,6 @@ def __get_assets_dir_path(assets_dir: Optional[str], relative_to_cwd=False):
724
745
  else:
725
746
  logger.warning("assets_dir does not exist: %s", assets_dir)
726
747
  assets_dir = None
727
-
728
- env_assets_dir = os.getenv("FLET_ASSETS_DIR")
729
- if env_assets_dir:
730
- assets_dir = env_assets_dir
731
748
  return assets_dir
732
749
 
733
750
 
@@ -1,11 +1,13 @@
1
- from dataclasses import dataclass
1
+ from dataclasses import dataclass, field
2
2
  from typing import Any, Optional
3
3
 
4
4
  from flet.controls.base_control import control
5
5
  from flet.controls.control_event import ControlEventHandler, Event, EventHandler
6
6
  from flet.controls.layout_control import LayoutControl
7
+ from flet.controls.padding import PaddingValue
8
+ from flet.controls.types import Brightness
7
9
 
8
- __all__ = ["FletApp", "FletAppOutputEvent"]
10
+ __all__ = ["FletApp", "FletAppOutputEvent", "FletAppWindowEvent"]
9
11
 
10
12
 
11
13
  @dataclass
@@ -21,6 +23,21 @@ class FletAppOutputEvent(Event["FletApp"]):
21
23
  """True for stderr writes; False for stdout."""
22
24
 
23
25
 
26
+ @dataclass
27
+ class FletAppWindowEvent(Event["FletApp"]):
28
+ """The embedded app asked its window to do something."""
29
+
30
+ action: str
31
+ """Either a `Window` method name (`close`, `maximize`, `minimize`,
32
+ `center`, `destroy`, ...) or `"set"` when the app wrote window properties
33
+ directly."""
34
+
35
+ # Not `data`: that name is already the base Event's payload, and shadowing
36
+ # it with a default reorders the base's own non-default fields.
37
+ args: dict[str, Any] = field(default_factory=dict, metadata={"data_field": "data"})
38
+ """Method arguments, or the properties written when `action` is `"set"`."""
39
+
40
+
24
41
  @control("FletApp")
25
42
  class FletApp(LayoutControl):
26
43
  """
@@ -37,6 +54,75 @@ class FletApp(LayoutControl):
37
54
  Optional dictionary of arguments to pass to the Flet app.
38
55
  """
39
56
 
57
+ route: Optional[str] = None
58
+ """
59
+ The embedded app's current route.
60
+
61
+ Two-way: setting it navigates the embedded app, and when the embedded app
62
+ navigates itself this property is updated to match and
63
+ [`on_route_change`][(c).] fires. Leave it `None` to let the embedded app
64
+ own its own routing.
65
+
66
+ Note:
67
+ The embedded app routes locally - it never touches the browser address
68
+ bar or the platform's deep links, both of which belong to the host app.
69
+ """
70
+
71
+ title: Optional[str] = None
72
+ """
73
+ The embedded app's `page.title`.
74
+
75
+ Written by the client whenever the embedded app sets its title, together
76
+ with [`on_title_change`][(c).]. A guest's title belongs to whatever window
77
+ its host draws around it - it does not touch the real OS window, because
78
+ the window service is suppressed for embedded apps.
79
+ """
80
+
81
+ window_state: Optional[dict[str, Any]] = None
82
+ """
83
+ The simulated window the embedded app should believe it lives in.
84
+
85
+ Keys are [`Window`][flet.Window] property names - `width`, `height`,
86
+ `top`, `left`, `maximized`, `minimized`, `full_screen`, `focused`. What
87
+ you set here is what the embedded app reads back from `page.window`, and
88
+ changing it raises the matching `page.window.on_event` inside the app
89
+ (`resize`, `maximize`, `focus`, ...) exactly as a real window would.
90
+
91
+ An embedded app never drives the real OS window, so without this its
92
+ `page.window` is inert.
93
+ """
94
+
95
+ media_padding: Optional[PaddingValue] = None
96
+ """
97
+ Overrides the safe-area insets the embedded app sees.
98
+
99
+ The embedded app normally inherits the host window's `MediaQuery`, so on a
100
+ desktop window its insets are zero regardless of what the app is being
101
+ previewed as. Setting this makes the embedded app lay out as though it had
102
+ those insets: `page.media.padding` reports them, and
103
+ [`SafeArea`][flet.SafeArea] avoids them.
104
+
105
+ Intended for previewing a phone layout inside a desktop window - a device
106
+ frame in a designer, say - where the chrome drawn around the app is not
107
+ something the platform knows about.
108
+ """
109
+
110
+ platform_brightness: Optional[Brightness] = None
111
+ """
112
+ Overrides the system light/dark appearance the embedded app sees.
113
+
114
+ By default the embedded app follows the host's platform brightness. Set
115
+ this to preview it as though its device were in light or dark mode: an app
116
+ whose [`theme_mode`][flet.Page.theme_mode] is `SYSTEM` switches to its dark
117
+ or light theme, [`page.platform_brightness`][flet.Page.platform_brightness]
118
+ reports the value, and
119
+ [`on_platform_brightness_change`][flet.Page.on_platform_brightness_change]
120
+ fires when it changes. An app that forces `LIGHT` or `DARK` keeps it, as
121
+ on a real device.
122
+
123
+ `None` follows the host.
124
+ """
125
+
40
126
  assets_dir: Optional[str] = None
41
127
  """
42
128
  Base location for assets referenced by the embedded app. On web this
@@ -89,6 +175,31 @@ class FletApp(LayoutControl):
89
175
  Called when a connection or any unhandled error occurs.
90
176
  """
91
177
 
178
+ on_title_change: Optional[ControlEventHandler["FletApp"]] = None
179
+ """
180
+ Called when the embedded app sets `page.title`. The event `data` is the new
181
+ title, which is also written back to [`title`][(c).].
182
+ """
183
+
184
+ on_window_event: Optional[EventHandler[FletAppWindowEvent]] = None
185
+ """
186
+ Called when the embedded app asks its window to do something - a method
187
+ call like `page.window.close()`, or a property write like
188
+ `page.window.maximized = True`.
189
+
190
+ A request, not a command: nothing happens unless the host acts on it, which
191
+ is how a host that does not simulate, say, minimizing simply ignores it.
192
+ """
193
+
194
+ on_route_change: Optional[ControlEventHandler["FletApp"]] = None
195
+ """
196
+ Called when the embedded app navigates itself. The event `data` is the new
197
+ route, which is also written back to [`route`][(c).].
198
+
199
+ Does not fire for navigation the host itself caused by setting
200
+ [`route`][(c).].
201
+ """
202
+
92
203
  on_connect: Optional[ControlEventHandler["FletApp"]] = None
93
204
  """
94
205
  Fires when the client allocates an in-process `dart_bridge` channel for this
@@ -1,4 +1,4 @@
1
- from dataclasses import field
1
+ from dataclasses import dataclass, field
2
2
  from typing import Annotated, Optional
3
3
 
4
4
  from flet.controls.alignment import Alignment
@@ -7,6 +7,7 @@ from flet.controls.control import Control
7
7
  from flet.controls.control_event import EventHandler
8
8
  from flet.controls.duration import DurationValue
9
9
  from flet.controls.events import (
10
+ InteractiveViewerTransformEvent,
10
11
  ScaleEndEvent,
11
12
  ScaleStartEvent,
12
13
  ScaleUpdateEvent,
@@ -16,7 +17,67 @@ from flet.controls.margin import Margin, MarginValue
16
17
  from flet.controls.types import ClipBehavior, Number
17
18
  from flet.utils.validation import V
18
19
 
19
- __all__ = ["InteractiveViewer"]
20
+ __all__ = ["InteractiveViewer", "InteractiveViewerTransform"]
21
+
22
+
23
+ @dataclass(kw_only=True)
24
+ class InteractiveViewerTransform:
25
+ """
26
+ Effective transform currently applied to an :class:`InteractiveViewer`.
27
+
28
+ ``scale`` is Flutter's ``Matrix4.getMaxScaleOnAxis()`` after min/max scale
29
+ and boundary clamping. ``1.0`` is the identity transform of the laid-out
30
+ content, not a ratio against the content's original pixel size.
31
+
32
+ ``matrix`` is the 16 column-major entries of that matrix, in the same
33
+ order as Flutter's ``Matrix4.storage``. The translation component is also
34
+ available as :attr:`translation_x`, :attr:`translation_y` and
35
+ :attr:`translation_z` (storage indexes 12, 13 and 14).
36
+
37
+ This does not by itself give a physical length. That also depends on the
38
+ laid-out size of the content and on a separate mapping from that content
39
+ to the real world. If either changes, the same transform describes a
40
+ different physical size.
41
+ """
42
+
43
+ scale: float
44
+ """
45
+ Maximum scale factor along the matrix axes. ``1.0`` is identity.
46
+ """
47
+
48
+ translation_x: float
49
+ """
50
+ Horizontal translation, in logical pixels.
51
+ """
52
+
53
+ translation_y: float
54
+ """
55
+ Vertical translation, in logical pixels.
56
+ """
57
+
58
+ translation_z: float
59
+ """
60
+ Z translation stored on the matrix.
61
+ """
62
+
63
+ matrix: list[float]
64
+ """
65
+ Column-major 4x4 matrix. Length is 16.
66
+ """
67
+
68
+ @classmethod
69
+ def from_message(cls, message: dict) -> "InteractiveViewerTransform":
70
+ """
71
+ Build a transform from the map returned by the Dart viewer.
72
+ """
73
+ matrix = message["m"]
74
+ return cls(
75
+ scale=float(message["s"]),
76
+ translation_x=float(message["tx"]),
77
+ translation_y=float(message["ty"]),
78
+ translation_z=float(message["tz"]),
79
+ matrix=[float(item) for item in matrix],
80
+ )
20
81
 
21
82
 
22
83
  @control("InteractiveViewer")
@@ -167,8 +228,10 @@ class InteractiveViewer(LayoutControl):
167
228
 
168
229
  interaction_update_interval: int = 200
169
230
  """
170
- The interval (in milliseconds) at which the :attr:`on_interaction_update` event is \
171
- fired.
231
+ The minimum interval in milliseconds between intermediate
232
+ :attr:`on_interaction_update` and :attr:`on_transform_changed` events.
233
+ For :attr:`on_transform_changed`, the final effective transform
234
+ is also delivered after changes stop.
172
235
  """
173
236
 
174
237
  on_interaction_start: Optional[
@@ -192,6 +255,27 @@ class InteractiveViewer(LayoutControl):
192
255
  Called when the user ends a pan or scale gesture.
193
256
  """
194
257
 
258
+ on_transform_changed: Optional[
259
+ EventHandler[InteractiveViewerTransformEvent["InteractiveViewer"]]
260
+ ] = None
261
+ """
262
+ Called when the effective transform changes.
263
+
264
+ Fires for pinch and pan gestures, pointer-wheel or trackpad zoom, and for
265
+ :meth:`zoom`, :meth:`pan`, :meth:`reset` and :meth:`restore_state`.
266
+ :meth:`save_state` only stores a snapshot, so it does not fire this event.
267
+ Intermediate updates are limited to :attr:`interaction_update_interval`
268
+ milliseconds. When changes stop, including the end of a wheel burst, an
269
+ inertial pan, :meth:`zoom` and an animated :meth:`reset`, one further
270
+ event is delivered if needed. That event matches :meth:`get_transform`.
271
+
272
+ ``on_interaction_update`` reports the gesture's relative scale, not this
273
+ absolute transform. Neither event is a physical length: the content's
274
+ laid-out size and any mapping from that content to the real world are
275
+ separate. If those change, this transform alone does not keep a
276
+ real-world measurement correct.
277
+ """
278
+
195
279
  async def reset(self, animation_duration: Optional[DurationValue] = None):
196
280
  """
197
281
  Resets the current transform matrix to identity.
@@ -258,3 +342,33 @@ class InteractiveViewer(LayoutControl):
258
342
  and defaults to `0`.
259
343
  """
260
344
  await self._invoke_method("pan", arguments={"dx": dx, "dy": dy, "dz": dz})
345
+
346
+ async def get_scale(self) -> float:
347
+ """
348
+ Return the effective scale currently applied to :attr:`content`.
349
+
350
+ Returns:
351
+ ``1.0`` for identity, after min/max scale and boundary clamping.
352
+ This is the scale of the laid-out content, not a ratio against
353
+ the content's original pixel size, and not a physical length.
354
+
355
+ Raises:
356
+ RuntimeError: If this control is not on a page.
357
+ """
358
+ return float(await self._invoke_method("get_scale"))
359
+
360
+ async def get_transform(self) -> InteractiveViewerTransform:
361
+ """
362
+ Return the effective transform currently applied to :attr:`content`.
363
+
364
+ Returns:
365
+ Scale, translation and the column-major 4x4 matrix, after
366
+ clamping. A physical length also needs the content's laid-out
367
+ size and a mapping from that content to the real world.
368
+
369
+ Raises:
370
+ RuntimeError: If this control is not on a page.
371
+ """
372
+ return InteractiveViewerTransform.from_message(
373
+ await self._invoke_method("get_transform")
374
+ )
@@ -160,7 +160,12 @@ class Semantics(Control):
160
160
 
161
161
  heading_level: Optional[int] = None
162
162
  """
163
- The heading level in the DOM document structure.
163
+ The heading level in the document structure.
164
+
165
+ A level of `1` usually marks the main heading of a page, `2` its first
166
+ subsection, and so on. Screen readers use it to navigate between sections: on
167
+ web it sets the `aria-level` attribute, and on iOS and Android 9 (API 28) or
168
+ later any level marks the node as a heading for VoiceOver and TalkBack.
164
169
  """
165
170
 
166
171
  exclude_semantics: bool = False
@@ -208,7 +213,12 @@ class Semantics(Control):
208
213
 
209
214
  header: Optional[bool] = None
210
215
  """
211
- Whether this subtree represents a header.
216
+ Whether this subtree represents a header, such as a page title or an app bar
217
+ title.
218
+
219
+ Note:
220
+ VoiceOver on iOS announces a node as a heading only when
221
+ :attr:`heading_level` is set.
212
222
  """
213
223
 
214
224
  image: Optional[bool] = None
@@ -131,6 +131,12 @@ class Window(BaseControl):
131
131
  Tip:
132
132
  Can be used together with :attr:`flet.Page.bgcolor` to make
133
133
  a window transparent.
134
+
135
+ Limitation:
136
+ On Linux, a compositor must already be running when the app starts.
137
+ The window's visual is chosen once before the window is created and
138
+ cannot be swapped afterwards, so an app that starts before its
139
+ compositor stays opaque until it is restarted.
134
140
  """
135
141
 
136
142
  width: Optional[Number] = None
@@ -257,8 +263,13 @@ class Window(BaseControl):
257
263
 
258
264
  skip_task_bar: bool = False
259
265
  """
260
- Whether the app window should be hidden from the Task Bar (on Windows) or Dock (on \
261
- macOS).
266
+ Whether the app window should be hidden from the
267
+ Task Bar (on Windows) or Dock (on macOS).
268
+
269
+ Note:
270
+ On Windows 11, the window is also hidden from the Alt+Tab switcher, so a
271
+ window that is minimized while hidden can only be restored by the app itself.
272
+ Keep a way to bring it back, such as a tray icon.
262
273
  """
263
274
 
264
275
  title_bar_hidden: bool = False