flet 0.70.0.dev5774__py3-none-any.whl → 0.70.0.dev5835__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (96) hide show
  1. flet/__init__.py +32 -4
  2. flet/components/__init__.py +0 -0
  3. flet/components/component.py +346 -0
  4. flet/components/component_decorator.py +24 -0
  5. flet/components/component_owned.py +22 -0
  6. flet/components/hooks/__init__.py +0 -0
  7. flet/components/hooks/hook.py +12 -0
  8. flet/components/hooks/use_callback.py +28 -0
  9. flet/components/hooks/use_context.py +91 -0
  10. flet/components/hooks/use_effect.py +104 -0
  11. flet/components/hooks/use_memo.py +52 -0
  12. flet/components/hooks/use_state.py +58 -0
  13. flet/components/memo.py +34 -0
  14. flet/components/observable.py +269 -0
  15. flet/components/public_utils.py +10 -0
  16. flet/components/utils.py +85 -0
  17. flet/controls/base_control.py +34 -10
  18. flet/controls/base_page.py +44 -40
  19. flet/controls/context.py +22 -1
  20. flet/controls/control.py +12 -6
  21. flet/controls/control_event.py +19 -2
  22. flet/controls/core/animated_switcher.py +3 -2
  23. flet/controls/core/autofill_group.py +6 -2
  24. flet/controls/core/column.py +5 -0
  25. flet/controls/core/dismissible.py +12 -10
  26. flet/controls/core/drag_target.py +20 -10
  27. flet/controls/core/draggable.py +9 -9
  28. flet/controls/core/icon.py +16 -12
  29. flet/controls/core/interactive_viewer.py +24 -23
  30. flet/controls/core/pagelet.py +3 -2
  31. flet/controls/core/reorderable_draggable.py +3 -2
  32. flet/controls/core/row.py +5 -0
  33. flet/controls/core/safe_area.py +3 -2
  34. flet/controls/core/text_span.py +5 -3
  35. flet/controls/core/view.py +6 -6
  36. flet/controls/core/window_drag_area.py +3 -2
  37. flet/controls/cupertino/cupertino_action_sheet.py +10 -5
  38. flet/controls/cupertino/cupertino_action_sheet_action.py +3 -4
  39. flet/controls/cupertino/cupertino_activity_indicator.py +4 -3
  40. flet/controls/cupertino/cupertino_alert_dialog.py +6 -3
  41. flet/controls/cupertino/cupertino_button.py +6 -5
  42. flet/controls/cupertino/cupertino_context_menu.py +8 -4
  43. flet/controls/cupertino/cupertino_context_menu_action.py +3 -4
  44. flet/controls/cupertino/cupertino_date_picker.py +44 -28
  45. flet/controls/cupertino/cupertino_dialog_action.py +3 -4
  46. flet/controls/cupertino/cupertino_list_tile.py +3 -4
  47. flet/controls/cupertino/cupertino_navigation_bar.py +6 -5
  48. flet/controls/cupertino/cupertino_picker.py +14 -10
  49. flet/controls/cupertino/cupertino_segmented_button.py +6 -5
  50. flet/controls/cupertino/cupertino_slider.py +16 -12
  51. flet/controls/cupertino/cupertino_sliding_segmented_button.py +6 -5
  52. flet/controls/cupertino/cupertino_timer_picker.py +38 -31
  53. flet/controls/id_counter.py +24 -0
  54. flet/controls/material/alert_dialog.py +6 -5
  55. flet/controls/material/app_bar.py +17 -14
  56. flet/controls/material/banner.py +13 -11
  57. flet/controls/material/bottom_app_bar.py +5 -4
  58. flet/controls/material/bottom_sheet.py +5 -4
  59. flet/controls/material/button.py +12 -4
  60. flet/controls/material/chip.py +13 -12
  61. flet/controls/material/circle_avatar.py +17 -13
  62. flet/controls/material/datatable.py +48 -41
  63. flet/controls/material/divider.py +30 -14
  64. flet/controls/material/dropdown.py +5 -3
  65. flet/controls/material/expansion_tile.py +11 -22
  66. flet/controls/material/floating_action_button.py +32 -23
  67. flet/controls/material/icon_button.py +7 -3
  68. flet/controls/material/navigation_rail.py +14 -11
  69. flet/controls/material/outlined_button.py +7 -3
  70. flet/controls/material/progress_bar.py +18 -10
  71. flet/controls/material/radio_group.py +5 -1
  72. flet/controls/material/range_slider.py +13 -13
  73. flet/controls/material/segmented_button.py +21 -17
  74. flet/controls/material/selection_area.py +3 -2
  75. flet/controls/material/slider.py +16 -12
  76. flet/controls/material/snack_bar.py +18 -10
  77. flet/controls/material/switch.py +6 -5
  78. flet/controls/material/tabs.py +18 -14
  79. flet/controls/material/textfield.py +32 -15
  80. flet/controls/material/vertical_divider.py +20 -12
  81. flet/controls/object_patch.py +434 -197
  82. flet/controls/page.py +205 -85
  83. flet/controls/services/haptic_feedback.py +0 -3
  84. flet/controls/services/shake_detector.py +0 -3
  85. flet/messaging/flet_socket_server.py +13 -6
  86. flet/messaging/session.py +103 -10
  87. flet/{controls/session_storage.py → messaging/session_store.py} +2 -2
  88. flet/version.py +1 -1
  89. {flet-0.70.0.dev5774.dist-info → flet-0.70.0.dev5835.dist-info}/METADATA +5 -5
  90. {flet-0.70.0.dev5774.dist-info → flet-0.70.0.dev5835.dist-info}/RECORD +93 -80
  91. flet/controls/cache.py +0 -87
  92. flet/controls/control_id.py +0 -22
  93. flet/controls/core/state_view.py +0 -60
  94. {flet-0.70.0.dev5774.dist-info → flet-0.70.0.dev5835.dist-info}/WHEEL +0 -0
  95. {flet-0.70.0.dev5774.dist-info → flet-0.70.0.dev5835.dist-info}/entry_points.txt +0 -0
  96. {flet-0.70.0.dev5774.dist-info → flet-0.70.0.dev5835.dist-info}/top_level.txt +0 -0
flet/messaging/session.py CHANGED
@@ -5,6 +5,7 @@ import weakref
5
5
  from datetime import datetime, timedelta, timezone
6
6
  from typing import Any, Optional
7
7
 
8
+ from flet.components.hooks.use_effect import EffectHook
8
9
  from flet.controls.base_control import BaseControl
9
10
  from flet.controls.context import _context_page, context
10
11
  from flet.controls.object_patch import ObjectPatch
@@ -17,11 +18,13 @@ from flet.messaging.protocol import (
17
18
  PatchControlBody,
18
19
  SessionCrashedBody,
19
20
  )
21
+ from flet.messaging.session_store import SessionStore
20
22
  from flet.pubsub.pubsub_client import PubSubClient
21
23
  from flet.utils.object_model import patch_dataclass
22
24
  from flet.utils.strings import random_string
23
25
 
24
26
  logger = logging.getLogger("flet")
27
+ patch_logger = logging.getLogger("flet_object_patch")
25
28
 
26
29
  __all__ = ["Session"]
27
30
 
@@ -37,9 +40,14 @@ class Session:
37
40
  )
38
41
  self.__page = Page(self)
39
42
  self.__index[self.__page._i] = self.__page
43
+ self.__store: SessionStore = SessionStore()
40
44
  self.__pubsub_client = PubSubClient(conn.pubsubhub, self.__id)
41
45
  self.__method_calls: dict[str, asyncio.Event] = {}
42
46
  self.__method_call_results: dict[asyncio.Event, tuple[Any, Optional[str]]] = {}
47
+ self.__updates_ready: asyncio.Event = asyncio.Event()
48
+ self.__pending_updates: set[BaseControl] = set()
49
+ self.__pending_effects: list[tuple[weakref.ref[EffectHook], bool]] = []
50
+ self.__closed = False
43
51
 
44
52
  session_id = self.__id
45
53
  weakref.finalize(
@@ -70,6 +78,10 @@ class Session:
70
78
  def pubsub_client(self) -> PubSubClient:
71
79
  return self.__pubsub_client
72
80
 
81
+ @property
82
+ def store(self) -> SessionStore:
83
+ return self.__store
84
+
73
85
  async def connect(self, conn: Connection) -> None:
74
86
  logger.debug(f"Connect session: {self.id}")
75
87
  _context_page.set(self.__page)
@@ -92,18 +104,30 @@ class Session:
92
104
 
93
105
  def close(self):
94
106
  logger.debug(f"Closing expired session: {self.id}")
107
+ self.__closed = True
95
108
  self.__pubsub_client.unsubscribe_all()
96
109
  self.__cancel_method_calls()
97
110
  asyncio.create_task(self.dispatch_event(self.__page._i, "close", None))
98
111
 
99
- def patch_control(self, control: BaseControl):
112
+ def patch_control(
113
+ self,
114
+ control: BaseControl,
115
+ prev_control: Optional[BaseControl] = None,
116
+ parent: Any = None,
117
+ path: Optional[list[Any]] = None,
118
+ frozen: bool = False,
119
+ ):
100
120
  patch, added_controls, removed_controls = self.__get_update_control_patch(
101
- control=control, prev_control=control
121
+ control=control,
122
+ prev_control=prev_control or control,
123
+ parent=parent,
124
+ path=path,
125
+ frozen=frozen,
102
126
  )
103
127
 
104
- # print(f"\n\nremoved_controls: ({len(removed_controls)})")
105
- # for c in removed_controls:
106
- # print(f"\n\nremoved_control: {c._c}({c._i} - {id(c)})")
128
+ patch_logger.debug(f"\npatch removed_controls ({len(removed_controls)}):")
129
+ for c in removed_controls:
130
+ patch_logger.debug(" %s", c)
107
131
 
108
132
  for removed_control in removed_controls:
109
133
  if not any(added._i == removed_control._i for added in added_controls):
@@ -113,13 +137,14 @@ class Session:
113
137
  if len(patch) > 1:
114
138
  self.__send_message(
115
139
  ClientMessage(
116
- ClientAction.PATCH_CONTROL, PatchControlBody(control._i, patch)
140
+ ClientAction.PATCH_CONTROL,
141
+ PatchControlBody(parent._i if parent else control._i, patch),
117
142
  )
118
143
  )
119
144
 
120
- # print(f"\n\nadded_controls: ({len(added_controls)})")
121
- # for ac in added_controls:
122
- # print(f"\n\nadded_control: {ac._c}({ac._i} - {id(ac)})")
145
+ patch_logger.debug(f"\npatch added_controls: ({len(added_controls)})")
146
+ for ac in added_controls:
147
+ patch_logger.debug(" %s", ac)
123
148
 
124
149
  for added_control in added_controls:
125
150
  self.__index[added_control._i] = added_control
@@ -258,15 +283,83 @@ class Session:
258
283
  self.__send_buffer.append(message)
259
284
 
260
285
  def __get_update_control_patch(
261
- self, control: BaseControl, prev_control: Optional[BaseControl]
286
+ self,
287
+ control: BaseControl,
288
+ prev_control: Optional[BaseControl],
289
+ parent: Any = None,
290
+ path: Optional[list[Any]] = None,
291
+ frozen: bool = False,
262
292
  ):
293
+ # start_time = datetime.now()
294
+
263
295
  # calculate patch
264
296
  patch, added_controls, removed_controls = ObjectPatch.from_diff(
265
297
  prev_control,
266
298
  control,
267
299
  control_cls=BaseControl,
300
+ parent=parent,
301
+ path=path,
302
+ frozen=frozen,
268
303
  )
269
304
 
305
+ # end_time = datetime.now()
306
+ # elapsed_time = end_time - start_time
307
+ # print(
308
+ # "Time spent calculating patch: "
309
+ # f"{elapsed_time.total_seconds() * 1000:.3f} ms"
310
+ # )
311
+
270
312
  # print("\n\npatch:", patch)
271
313
 
272
314
  return patch.to_message(), added_controls, removed_controls
315
+
316
+ def schedule_update(self, control: BaseControl):
317
+ logger.debug("Schedule_update(%s)", control)
318
+ self.__pending_updates.add(control)
319
+ self.__updates_ready.set()
320
+
321
+ def schedule_effect(self, hook: EffectHook, is_cleanup: bool):
322
+ logger.debug("Schedule_effect(%s, %s)", hook, is_cleanup)
323
+ self.__pending_effects.append((weakref.ref(hook), is_cleanup))
324
+ self.__updates_ready.set()
325
+
326
+ def start_updates_scheduler(self):
327
+ logger.debug(f"Starting updates scheduler: {self.id}")
328
+ asyncio.create_task(self.__updates_scheduler())
329
+
330
+ async def __updates_scheduler(self):
331
+ while not self.__closed:
332
+ await self.__updates_ready.wait()
333
+ self.__updates_ready.clear()
334
+
335
+ # Process pending updates
336
+ for control in self.__pending_updates:
337
+ control.update()
338
+
339
+ self.__pending_updates.clear()
340
+
341
+ # Process pending effects
342
+ for effect in self.__pending_effects:
343
+ try:
344
+ hook = effect[0]()
345
+ is_cleanup = effect[1]
346
+ # print(f"**** Running effect: {hook} {is_cleanup}")
347
+ if hook and hook.setup and not is_cleanup:
348
+ hook.cancel()
349
+ if asyncio.iscoroutinefunction(hook.setup):
350
+ hook._setup_task = asyncio.create_task(hook.setup())
351
+ else:
352
+ res = hook.setup()
353
+ if callable(res):
354
+ hook.cleanup = res
355
+ elif hook and hook.cleanup and is_cleanup:
356
+ hook.cancel()
357
+ if asyncio.iscoroutinefunction(hook.cleanup):
358
+ hook._cleanup_task = asyncio.create_task(hook.cleanup())
359
+ else:
360
+ hook.cleanup()
361
+ except Exception as ex:
362
+ tb = traceback.format_exc()
363
+ self.error(f"Exception in effect: {ex}\n{tb}")
364
+
365
+ self.__pending_effects.clear()
@@ -1,9 +1,9 @@
1
1
  from typing import Any
2
2
 
3
- __all__ = ["SessionStorage"]
3
+ __all__ = ["SessionStore"]
4
4
 
5
5
 
6
- class SessionStorage:
6
+ class SessionStore:
7
7
  def __init__(self):
8
8
  self.__store: dict[str, Any] = {}
9
9
 
flet/version.py CHANGED
@@ -10,7 +10,7 @@ from flet.utils import is_mobile, is_windows, which
10
10
  DEFAULT_VERSION = "0.1.0"
11
11
 
12
12
  # will be replaced by CI
13
- version = "0.70.0.dev5774"
13
+ version = "0.70.0.dev5835"
14
14
 
15
15
 
16
16
  def update_version():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flet
3
- Version: 0.70.0.dev5774
3
+ Version: 0.70.0.dev5835
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,10 +9,10 @@ Project-URL: Repository, https://github.com/flet-dev/flet
9
9
  Project-URL: Documentation, https://docs.flet.dev/
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: flet-cli==0.70.0.dev5774; extra == "cli"
13
- Requires-Dist: flet-desktop==0.70.0.dev5774; extra == "desktop" and (platform_system == "Darwin" or platform_system == "Windows")
14
- Requires-Dist: flet-desktop-light==0.70.0.dev5774; platform_system == "Linux" and (extra == "all" or extra == "desktop")
15
- Requires-Dist: flet-web==0.70.0.dev5774; extra == "web"
12
+ Requires-Dist: flet-cli==0.70.0.dev5835; extra == "cli"
13
+ Requires-Dist: flet-desktop==0.70.0.dev5835; extra == "desktop" and (platform_system == "Darwin" or platform_system == "Windows")
14
+ Requires-Dist: flet-desktop-light==0.70.0.dev5835; platform_system == "Linux" and (extra == "all" or extra == "desktop")
15
+ Requires-Dist: flet-web==0.70.0.dev5835; extra == "web"
16
16
  Requires-Dist: oauthlib>=3.2.2; platform_system != "Pyodide"
17
17
  Requires-Dist: httpx>=0.28.1; platform_system != "Pyodide"
18
18
  Requires-Dist: repath>=0.9.0
@@ -1,7 +1,7 @@
1
- flet/__init__.py,sha256=-yozy6OjbujMIRehArvHUY6-ej7F6yzeiShM2F6LPhQ,24805
1
+ flet/__init__.py,sha256=Lv9YmVVMQHTiO5E089OW9ES1CnGyoJadzi4IFk0bhmI,25642
2
2
  flet/app.py,sha256=HSws0Zm4ZO0-Hp2P9h7xirCVnRkKCVXhuekyAXT_9Fo,11883
3
3
  flet/cli.py,sha256=IUM25fY_sqMtl0hlQGhlMQaBb1oNyO0VZeeBgRodhuA,204
4
- flet/version.py,sha256=J1l56Ydt2PGIfRQovRVfF05AGYyIi5dJixRYxFVNYkc,2512
4
+ flet/version.py,sha256=eHFiuFHZ31WYF3bMGm1eqUJexiv7Yl9gY-obkEgdxJU,2512
5
5
  flet/auth/__init__.py,sha256=eDqmi0Ki8Resd198S7XxgYa2R14wnNqIXnYhBLPl8fQ,289
6
6
  flet/auth/authorization.py,sha256=hP_36RiRPtSwmK_Yp6MMzAjQdDxbBiEcZ2yFNqyNiRs,357
7
7
  flet/auth/authorization_service.py,sha256=6N2LvisSt7KI_VgfyCH0OaJ6jTcmXCkAldN1yYlakzQ,6410
@@ -15,23 +15,36 @@ flet/auth/providers/azure_oauth_provider.py,sha256=EF8-Nl_HR5LeP3wztV5IVwrEzGXYk
15
15
  flet/auth/providers/github_oauth_provider.py,sha256=iiJEUGlQysYQlvIURgUqNZuL4izaaB-_PC-PSj-Pjmk,2643
16
16
  flet/auth/providers/google_oauth_provider.py,sha256=RGPQfbal53C6okaniDeegt1GH8TvyAvja6G-SNme8RU,799
17
17
  flet/canvas/__init__.py,sha256=_02Qjscc6DU4c4FYVSjv2S35ld6WFte_Be8NBABRN8Q,957
18
+ flet/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ flet/components/component.py,sha256=-bkB0A3Q9OpiQ0xuxeK15wajYnJl8hjnsc5_zKTFfHE,11671
20
+ flet/components/component_decorator.py,sha256=14ocjVSXPVl-SduJUtEQ1JivhpIoWnDDG4ioD0TCn0I,639
21
+ flet/components/component_owned.py,sha256=eC2NNNFWmZADBivLHjScfrmEj-s7xygHlABo7CiGtFA,563
22
+ flet/components/memo.py,sha256=tpztAInP4LkGOCFSJLyRuKp2t6EKM2AnX7SQmXiUZH8,620
23
+ flet/components/observable.py,sha256=XnO3ZOA7tttILoyKvKaSaozrKrYEqt3Duz0YxxwCKDo,6888
24
+ flet/components/public_utils.py,sha256=9orF-ZoxspZtTmjMUp9KmXL4-jpQG6TAOVSrGTEbVyo,180
25
+ flet/components/utils.py,sha256=6Uzs2cXg2VAWKr82vghSGTL3JglbHzADxkqc_7vns8o,2079
26
+ flet/components/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ flet/components/hooks/hook.py,sha256=otO5mz15MutMsRujuqLMefZvepm777FyIkGA4PTqI-8,207
28
+ flet/components/hooks/use_callback.py,sha256=TUTIfwBeZ5Xsbt7wI8OVbzfMKBGyPq27z3Jj9U5-k7s,791
29
+ flet/components/hooks/use_context.py,sha256=38_MYBIOzHE-X45psuyHV6cTjbcrQVXVRzcCz_bMwv8,2516
30
+ flet/components/hooks/use_effect.py,sha256=dZik3viWSfkOi5uTzc-kWV00P2_DIWcV2OzA8OexAN4,3225
31
+ flet/components/hooks/use_memo.py,sha256=4IbT89yQXicMgzqp9a6hJ6egit_6GX8sVkn4DczVeyQ,1693
32
+ flet/components/hooks/use_state.py,sha256=ZAhtIRnm2CKDK2-cIWmkWWEV-Gz2eOx7f9ZhsE1b06M,1680
18
33
  flet/controls/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
34
  flet/controls/adaptive_control.py,sha256=Pw0E7z0IlNSe05cQTi5BLElLF3OnlVLzwfvtOQpsRr8,1594
20
35
  flet/controls/alignment.py,sha256=re4jnpuqNPPWs55bf8RB_c9llqcuGhZcCjdNutx2N5M,3257
21
36
  flet/controls/animation.py,sha256=C3Sxqte4S225m3UvlQOm-DGxd1WJaqfdLpA6e10B_BM,3763
22
- flet/controls/base_control.py,sha256=BjjhaSZR02zdiMJatwwC7773IlIu7GtcIsLhS5j9SBc,10050
23
- flet/controls/base_page.py,sha256=EDIVmKjSuLntotY1-XrhNRmm1r3i-dg3pLKv-B27qVw,17749
37
+ flet/controls/base_control.py,sha256=1Yea_zW1O9dpjyrgdt8Cr-jUJyujlscKedkdK08lRHA,10713
38
+ flet/controls/base_page.py,sha256=SuuoK-XHqsTmOQZXYz84DxOibE9_43sKZulalSjIxYI,17927
24
39
  flet/controls/blur.py,sha256=taMH4qtILyAFn1qNsgBGRV3z0GSH6V7VKPV3ZSBhOL4,602
25
40
  flet/controls/border.py,sha256=X0NGRfjAx1YN3VcdOvOdH0BOH27LgeIrtjxiDKzrx0g,8931
26
41
  flet/controls/border_radius.py,sha256=ePfpA_uNhR6bfBSmYxy2cO0mZ3FU1r63qX_5RuHWwDM,6605
27
42
  flet/controls/box.py,sha256=f9T25pJYOk-VzmzapgYHKprucTuIPMMJRphIBinrZQ4,12606
28
43
  flet/controls/buttons.py,sha256=0mLPx4fBjQNGn-ejMuNu1wHb38_0BGU0JOggmqbUs1E,9943
29
- flet/controls/cache.py,sha256=0SJVqUtouvypBV_SEzJ-HLT-QBG5HtpWXCsJGH_zNSw,2872
30
44
  flet/controls/colors.py,sha256=J5A9ZQ25xqyKkM7X1SjX3uRlBP9PCsUJoHhCdM-YNOw,15345
31
- flet/controls/context.py,sha256=2U_YLmtv__7A7Q0wYOeX1BBqZnkXDlB_f5MihGlS82c,3692
32
- flet/controls/control.py,sha256=b8Ux1sN9gPSbPQxniqOBnp99Rn8lcxkFzUeMTsdATug,4213
33
- flet/controls/control_event.py,sha256=uALISWT6mRS3r-owF7ENDMsQfL60PoWCDjx5C3xckWE,2565
34
- flet/controls/control_id.py,sha256=6GrwGlpnQhTkh1QnBIGutFDKfQwLuvoC5XIHnD4zDcU,671
45
+ flet/controls/context.py,sha256=xmmkrF2r4jD9ILe9lIrwtmkhvXv6awYpnwjHeqM5jFk,4239
46
+ flet/controls/control.py,sha256=7uZKB9NOtj3zM-5uGq_x2GjsuDaXuSuVzuEKLJ1ysJU,4473
47
+ flet/controls/control_event.py,sha256=wuI62LF8K42U6Ba2LK5R5YyhBtmxyTHBgZN4XfRKGRk,3107
35
48
  flet/controls/control_state.py,sha256=7Pi_WirBkE5dmUN0QnQLjSaW17Nj_escRlUvNxlrNR8,433
36
49
  flet/controls/dialog_control.py,sha256=4a1poIK4al6DAsdiV56jE-Q4E-eKrvP12DqYw5HFvYM,507
37
50
  flet/controls/duration.py,sha256=Fwb26eyHKrU_lqvmGuTLw4m-28leLHOlgHxtqRIQsnA,7398
@@ -41,57 +54,56 @@ flet/controls/exceptions.py,sha256=DV7sWQamNFSGlU6w1IBi59U03qsDBLPUzIVRnuVPrhc,8
41
54
  flet/controls/geometry.py,sha256=1M_rLlKlPdZF2s4wOBNCUGpGK8-vC5HJc8VHUhxomCQ,5000
42
55
  flet/controls/gradients.py,sha256=oUYQTL0wI4FYbhOzd2b-KkbCUsijBgGpH9gSRIMYQdk,5804
43
56
  flet/controls/icon_data.py,sha256=dtlNXm8_8yd_PRp_ogBuTDPz3-IXCXP47FA9C6SGoSk,2357
57
+ flet/controls/id_counter.py,sha256=YhZT-dB_yYYqPEBJ8IoTA98NU_EPFnx6T7FWbA9ENB4,627
44
58
  flet/controls/keys.py,sha256=YpcAeINKelX3WgSOMF8_T7wMzcFmAXNg-ssPej_NZWY,614
45
59
  flet/controls/layout_control.py,sha256=17JFILKY6_G73VgoyGofF41E3hykUl4ipQh6EKCig3Y,7279
46
60
  flet/controls/margin.py,sha256=ni5FwkchO1LPKPTKV0Cimvh2YzABi-t5DhOqTS25eIQ,2305
47
61
  flet/controls/multi_view.py,sha256=7RbM1nt8t75qgTKyfemsV06XQ04Mer0Op409Nu9q9Vs,304
48
- flet/controls/object_patch.py,sha256=VgGK0mZ4CVEs-Z_atGjdJ6tjo-xAYZYT52Deekzx6Y4,33957
62
+ flet/controls/object_patch.py,sha256=0OE8TswTyYH_l1yEqJPIf-Z6kLnOCCQCYiV-gNUvuSA,44111
49
63
  flet/controls/padding.py,sha256=AdxAZ5dbg1-Bo8aKeJ7AptUdyjaX7VWBIJto5mBT9Pk,2485
50
- flet/controls/page.py,sha256=n2VqLFr1fUt1FqPaMQcgAnXOndFdRcWuAL3VJ0yur5E,22648
64
+ flet/controls/page.py,sha256=_1FGO52-hWj7Z99Q9mEynQwWLqnmdxJZKcp6L4tPnJ4,26383
51
65
  flet/controls/painting.py,sha256=GCEycacejiCAdA4eZBQlTgxmE2ccXyad4Gy7VsjIwn0,12108
52
66
  flet/controls/query_string.py,sha256=NDrf1P0cxSWuJd4Rqz1qYld_JKDJpHY7mKcP52-70DI,3575
53
67
  flet/controls/ref.py,sha256=Lde_Nlly6NEtJX_LYv_DxIDkao6w4Buo7Nus4XUPQDA,580
54
68
  flet/controls/scrollable_control.py,sha256=Mu0oGA3fxweurlJQq1TuaUw2NMA8xy3DC27zJndQBZc,4571
55
- flet/controls/session_storage.py,sha256=UzDpebR1ddDW9seghplws9zgirlvQjRgAnskVDcrbas,561
56
69
  flet/controls/template_route.py,sha256=qP5KvFY5gazw-G9Q9bcoADlWAh-MJ_9wsIyIxjElkaE,662
57
70
  flet/controls/text_style.py,sha256=WC8uPdfps5PyZ64cdPBnWhC2HULK39Uah5V368JdVoI,9386
58
71
  flet/controls/theme.py,sha256=jed561Y3ENTgp1aHB6z5djzJdZdmazaDjfMy1acpWuI,97055
59
72
  flet/controls/transform.py,sha256=gZQGM5nhfiapvm25uxvswbTWu0qQM3oBGRVxSTDhGYY,2782
60
73
  flet/controls/types.py,sha256=f4rUZ36Ul5FID2ZTgamPXAT7wZTfJl4Lbam9dpANtvI,25574
61
74
  flet/controls/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- flet/controls/core/animated_switcher.py,sha256=CaBB8vOS2TZVHwneocQK0zUUVYyBFjnu_E_ZU6rMxaI,1862
63
- flet/controls/core/autofill_group.py,sha256=t3aI77fsOEBgpjZZE4Rc29cyIwgoXrjcXsQjAhYSgqs,3587
64
- flet/controls/core/column.py,sha256=cQPnroGU-FVUG-tSuWadsqqHla8lOMIOdhFO6K7p9D0,2035
65
- flet/controls/core/dismissible.py,sha256=RJo3xtyCx53PxWscDWNWQJLDAj8PbHV45ADgYsXCdig,5469
66
- flet/controls/core/drag_target.py,sha256=T9rewhYy54kAhr3cmMCfxrV0sQaUmvPp0_Qct8bO_6s,2526
67
- flet/controls/core/draggable.py,sha256=HAjM6kknlZrUGH3PwYkn1TsC0gMHUI3jqr-S2BfzZjE,3808
75
+ flet/controls/core/animated_switcher.py,sha256=qkPoKcmN3_fMN39VEnJw1dlV_7W46DT2O8LF0t13m2I,1873
76
+ flet/controls/core/autofill_group.py,sha256=3py4hGl8ez9prZ6e4dpT2zazk7aBPqs40M64p5awWHk,3687
77
+ flet/controls/core/column.py,sha256=g04SvwdP0iqJP-1w3STJl2eCEciwN4dt6eLKZ_xzV2U,2157
78
+ flet/controls/core/dismissible.py,sha256=ywMKNAVpYx6vkSSWIKEO8gyrkSbUqj66emrVHWGsmOk,5542
79
+ flet/controls/core/drag_target.py,sha256=-u_5vUH_CJy-DbOmW8A1M2kl6pSyFS3W7_JMiG2Ga7c,2810
80
+ flet/controls/core/draggable.py,sha256=jTwiflMgocFKA6NGYtSpzQplpck_76uX_F3Ta0JmJM8,3846
68
81
  flet/controls/core/flet_app.py,sha256=5WvbgRiktRxAMRKiZ667o1Yt7ozfuSM811yTE6D2rfA,1116
69
82
  flet/controls/core/gesture_detector.py,sha256=dcSzIiIjD7QOPVGcKDdW2MxvCdtla8M_yHvqxn4N1kg,8911
70
83
  flet/controls/core/grid_view.py,sha256=kzln6PKgQ2jGEoNkNMjx0auoFfUndfzx6x0TgzLn5yA,3139
71
- flet/controls/core/icon.py,sha256=uYCVYysaRftKaxIQCqYSSqkRP0OlqGznBM9-dgSHdxY,3880
84
+ flet/controls/core/icon.py,sha256=fOf8mCKtQ8tlm_lzSliPq_qk8QTBGFE8Tq5OfiyfK3M,4001
72
85
  flet/controls/core/image.py,sha256=ES4byvkgl3z_YbsBVNnYVox8QN4_qCnOn9RjBK_3vUY,3950
73
- flet/controls/core/interactive_viewer.py,sha256=NowxtCUc0F8Z51qIPdnH-05h1meNA62dJp9JQU1l8a8,4764
86
+ flet/controls/core/interactive_viewer.py,sha256=id5x4Z3Gf41naRy1kOj_cmBnfTlsoeBCJOmf8lLJp-o,4857
74
87
  flet/controls/core/keyboard_listener.py,sha256=S8h0ZELveIT8EyAxNilnUNPg9I9MVnOMmSKW_7cwylQ,2467
75
88
  flet/controls/core/list_view.py,sha256=zyWHHG8Tpr4VYztQFWA_mRipLXKO6bVJ-Ra1Gso4qp4,3273
76
89
  flet/controls/core/markdown.py,sha256=zTAlVDJpwh5Ay1Lh7aHlTNCJ0zktCwNGit1QiyWjUyE,10939
77
90
  flet/controls/core/merge_semantics.py,sha256=o2olHjIDU-QNKAc8JHdQABiZUKeR4dWJApOCEcBaFF4,627
78
- flet/controls/core/pagelet.py,sha256=wpHDFJSPDcDZ6zvhbvOgViY70asqaxA_lJNe6mWUFfo,4137
91
+ flet/controls/core/pagelet.py,sha256=PBpw49SBniprw_3CuxlsjzuJPvxjzJaWesXza020plE,4163
79
92
  flet/controls/core/placeholder.py,sha256=XqqP1QmjlboezVKIrwZHA4FCcl06cptqxvYQs7kVkB8,992
80
- flet/controls/core/reorderable_draggable.py,sha256=Wp2845gXLWIK5ycnHfOzhwgbH-fg02uyEMncir50qWQ,990
93
+ flet/controls/core/reorderable_draggable.py,sha256=Mdu9mHvfNs0m9VTFQ0wfYPnvB592t53XT-NyvoZs5Fs,1016
81
94
  flet/controls/core/responsive_row.py,sha256=Ij02f54UuB2qPUfJ3Y6l-W06nZQcZnEuY3ef3mn44EI,2382
82
- flet/controls/core/row.py,sha256=cIajHnIPzeWG7RoV1_aIqw975qDJ7rRrxuSle-c3GS8,2046
83
- flet/controls/core/safe_area.py,sha256=K79zitkZ5QHnanqgdczkdV5ICUtcnEGviwwRW2wZbzI,2204
95
+ flet/controls/core/row.py,sha256=u_mWESVQv9Q9zV19Rzag0eMA5TCugh7mRNZFGvTwPeA,2167
96
+ flet/controls/core/safe_area.py,sha256=oDCmD9aWHSfYa-d_Nagw32bfnwuDNX6yiTCqDyFLxus,2230
84
97
  flet/controls/core/screenshot.py,sha256=6X3f6rYaX7PHkvWM7gpFlyhA2xzt-M15ax-Nfd45n1g,1110
85
98
  flet/controls/core/semantics.py,sha256=tiRTyFMYYNIcj8kuiopZMPGxeo_n4L7eCchHcywColI,7413
86
99
  flet/controls/core/shader_mask.py,sha256=z4sr8RP2PnP-ooh0c5KNiUDLsHmj1S-R7ATm53j5CJo,1034
87
100
  flet/controls/core/stack.py,sha256=JqCIXFcDxd4C7dhJik0qwOu7IoHRmkj7BpvF6LhM03k,1954
88
- flet/controls/core/state_view.py,sha256=BLDp0PkPsI6TGs2akAJqXyxq64XqJJaisTgUKxT3CxY,1842
89
101
  flet/controls/core/text.py,sha256=Z2gqu5IIOvUQYV7RpoqAmoEueiHozxL0xN0hlnyMseQ,8811
90
- flet/controls/core/text_span.py,sha256=6sNfi6pcLtuJqLdD8v9I0uKaegFoKfLj_ymVXzmG5oE,2843
102
+ flet/controls/core/text_span.py,sha256=KpW6jER8HYRj-kHQPuAaSOa816B-nQc02le9i9M22Pc,2939
91
103
  flet/controls/core/transparent_pointer.py,sha256=BGDFuDWyDUIYOmwaEgMMks6OWS_lVjZObAw2M-3r2bQ,963
92
- flet/controls/core/view.py,sha256=wlUirfLnm3uY4ElyadWoLABC_txDgLBzCzJUMcLlU1A,4991
104
+ flet/controls/core/view.py,sha256=WuXwdjKtMwhzy1foPJa5kPsrwnpti_b85g8w_ldhOeQ,5031
93
105
  flet/controls/core/window.py,sha256=7SbbEoprqCoO_xz9-tHppOMYj0m9nJwDi3tRlnuVSoo,7157
94
- flet/controls/core/window_drag_area.py,sha256=-OQvq1JaUYDB4ha6WZbLzg2vEu9C0YO8LT5XSJ3ngXA,1808
106
+ flet/controls/core/window_drag_area.py,sha256=cgq3bH4vkXZl3HcYRceSiqS4-pbibRSuuhgNzOG5m2I,1834
95
107
  flet/controls/core/canvas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
108
  flet/controls/core/canvas/arc.py,sha256=pgZ6e2yhzx2cAbb3zBnlhwtuJR_YEyVTjo_11GAra_Q,1772
97
109
  flet/controls/core/canvas/canvas.py,sha256=eOIO5k2qhkdb3bKXoM9-9MnX30ZGBEZIpF5SO-0M838,2898
@@ -108,105 +120,106 @@ flet/controls/core/canvas/shadow.py,sha256=GuUwsGD9pO55lqRtVtuoRdESYNeruzkXrOyGx
108
120
  flet/controls/core/canvas/shape.py,sha256=Usq8DgS1jbi_uKva0SROima_8koDHmS3BO9VWznfX_E,484
109
121
  flet/controls/core/canvas/text.py,sha256=KJU7XepvY_klGYaecWRXlQZc86P0ZtMsxLAC591J1EA,2008
110
122
  flet/controls/cupertino/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- flet/controls/cupertino/cupertino_action_sheet.py,sha256=wLGFFK9nRYlOfraxbDAhHZy1w0QsVgg_Q3CXMXZrQOo,1680
112
- flet/controls/cupertino/cupertino_action_sheet_action.py,sha256=On2D8bGSQ69EG8x_A9gaxOfr4wfZpofWAp7dsDGcC5c,1374
113
- flet/controls/cupertino/cupertino_activity_indicator.py,sha256=garBwKsqz-hVSTz6Tz-IYiWuoi5bWHL-yG-wFOzuLqk,981
114
- flet/controls/cupertino/cupertino_alert_dialog.py,sha256=BRR4ZYAeVX1xRiLQIdk-OgpY8oX31LOx2wx2oB164k8,2216
123
+ flet/controls/cupertino/cupertino_action_sheet.py,sha256=GyDUD-WwWKeplUsRBFTodmnh8MPo9nE7tku24sgWefc,1865
124
+ flet/controls/cupertino/cupertino_action_sheet_action.py,sha256=yCk-lv5bvc_xc2jupEQKz6q_JE521iMjWUyIhdgzoUU,1378
125
+ flet/controls/cupertino/cupertino_activity_indicator.py,sha256=3mso-hpHjhi9ynpnJ32APBls0DcbsMLFgZ4AuIND8Z0,1014
126
+ flet/controls/cupertino/cupertino_alert_dialog.py,sha256=kcACIyiv7gWN3KX27aqPfMS9BUVTPt0CPW8k2L9hC2o,2284
115
127
  flet/controls/cupertino/cupertino_app_bar.py,sha256=CxhgW5Z_tohnyn7WkGxes9aN_KBDjovzcn_mEuhRqms,5176
116
128
  flet/controls/cupertino/cupertino_bottom_sheet.py,sha256=o8154fJuBtJUSJtqJFrjE6tEBv1ylNtgDW8qn6vwSxs,938
117
- flet/controls/cupertino/cupertino_button.py,sha256=qAMhTVNd4F6yzJ_QAt6AvIf-CxX5yItPQWpdWCs4aSU,4466
129
+ flet/controls/cupertino/cupertino_button.py,sha256=1_BuVzEDYQPcITJtuzv8vBihUdc8zs5ifjebrgeN8Co,4504
118
130
  flet/controls/cupertino/cupertino_checkbox.py,sha256=XmTY2IQL4MX08uEPTm4mAeb17o2QoWrybZaxcgfB1vs,4449
119
131
  flet/controls/cupertino/cupertino_colors.py,sha256=nbkvUsvt4hN1Z5Ay5tqX24pX56qFfPK2qB1DSnrEuvw,5106
120
- flet/controls/cupertino/cupertino_context_menu.py,sha256=p_EYHzyE5vuDYwVBCgISc4xvc5IOSwbtaW_RrXjZrvI,1297
121
- flet/controls/cupertino/cupertino_context_menu_action.py,sha256=aiAv2JHxccxEDzCStaGM7vqcCG2uhZYJ9cQStCU934k,1423
122
- flet/controls/cupertino/cupertino_date_picker.py,sha256=rwTbelytwuNqV6j0GxOKVUSeMDVWki87muTFUh0l6Fk,7253
123
- flet/controls/cupertino/cupertino_dialog_action.py,sha256=zisicZhAKImClcXyGnXvuF9pY3QxmCWcWeWwtiq6r78,1656
132
+ flet/controls/cupertino/cupertino_context_menu.py,sha256=J094wDwQm6ywd15e-eMAaY-gPsoB7-uRr8xHceOCUxE,1490
133
+ flet/controls/cupertino/cupertino_context_menu_action.py,sha256=RFAx2lCBcCbNiRKvAn7hUFC6qDL5OM_s8O5wdjj369Y,1427
134
+ flet/controls/cupertino/cupertino_date_picker.py,sha256=DqXMt8OsfLAsUT_XXlKzGAlQbAIjzliVNX8aVm5NFYg,7960
135
+ flet/controls/cupertino/cupertino_dialog_action.py,sha256=MPTF_SkG778XEUEQStXNAqSoqlkk6zFDzgo42DtJgcM,1660
124
136
  flet/controls/cupertino/cupertino_filled_button.py,sha256=BQ9sSUMEPCCJQl8isEnIOP_qXO4tjsX7yyCTs-O4hw0,313
125
137
  flet/controls/cupertino/cupertino_icons.py,sha256=cjFjErATn_1UBvIQhZsgh3qLELVoFZIGJfHUC_8C_5I,40308
126
- flet/controls/cupertino/cupertino_list_tile.py,sha256=TizcdiwzCl-Qq7sH9rZ5OXHDhCg0n7tHWvTjIJ4AypE,3393
127
- flet/controls/cupertino/cupertino_navigation_bar.py,sha256=vxODbk8gcV9qz8JS99hj-M1dsDhipxx-8ekcU03Gmb4,2814
128
- flet/controls/cupertino/cupertino_picker.py,sha256=uWmXOJq5r-ebAQqLDIwOnebnAmpKqhFOD_IxdLgoLjg,3358
138
+ flet/controls/cupertino/cupertino_list_tile.py,sha256=mrRBBmBrPKYbsRo2ReTgebl1Cw4zbm5QVFMRstaqxrc,3397
139
+ flet/controls/cupertino/cupertino_navigation_bar.py,sha256=CDFExJPxiJYH5c4BqMNdN-ziVNm4QyD9Cyad6M3Qre4,2845
140
+ flet/controls/cupertino/cupertino_picker.py,sha256=5R8GXK5qFXmpJZ_sgvqILn00RkM6PE6FgsaVOQT7Bcw,3473
129
141
  flet/controls/cupertino/cupertino_radio.py,sha256=WksRSPn0mAcMiAnE2UU7Piqe2ae_isocjzUZzNcQ-eA,2339
130
- flet/controls/cupertino/cupertino_segmented_button.py,sha256=vhRnB_WMbmpIXDaiNwhWFKj-QhQdFSNaT9ZkSk0fRus,2944
131
- flet/controls/cupertino/cupertino_slider.py,sha256=cw7iDMN-fZQ9JI2djIOGvkWnZxWtmlATBnJGZg124lk,3396
132
- flet/controls/cupertino/cupertino_sliding_segmented_button.py,sha256=5JJsF_kwsX6oxRYiPXqEaNb1H77ub1ImuqFwCUM6Cjs,3014
142
+ flet/controls/cupertino/cupertino_segmented_button.py,sha256=DEntfRb7D1HZWTfa5GPQnjdLKJvxN8WuSBthDa-5FSQ,2975
143
+ flet/controls/cupertino/cupertino_slider.py,sha256=hOdSrWy_sKBLqP5n6E0DWf3J0fhT6Xcovg1CI7YBgns,3467
144
+ flet/controls/cupertino/cupertino_sliding_segmented_button.py,sha256=h9D8L6m-jqyht_96wJlfypP7wqVipGtvmNW8hF1zcJQ,3045
133
145
  flet/controls/cupertino/cupertino_switch.py,sha256=0UtGp1fhCGlYVf2w8xXic0MfcEds-uNqF7WQi84Ld8w,4201
134
146
  flet/controls/cupertino/cupertino_textfield.py,sha256=rQmJrP-fo5m8HYGDhtBWPmhg0JywXDn5GFapYM6wZgY,2897
135
- flet/controls/cupertino/cupertino_timer_picker.py,sha256=OPGrQ4u_-AorvXey2C_DH9A8CRakf4PhjML25xLZAPw,4289
147
+ flet/controls/cupertino/cupertino_timer_picker.py,sha256=YNMAeazkm6nGEwF2X-r9WuB25aqam6PYORuq1yoptBk,4509
136
148
  flet/controls/cupertino/cupertino_tinted_button.py,sha256=rU1bW9qfu2GGkma3zlTTMZOhBlqBtj4bYxqJMrwJBF8,313
137
149
  flet/controls/material/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- flet/controls/material/alert_dialog.py,sha256=c_53ZcOm50NjiR9Pgjm2E_TE2jX1dmml6INmt3lS58s,7568
139
- flet/controls/material/app_bar.py,sha256=P2fBSUiVIkYS2ujZzyYZTclfiRikgV3fIVI49hvtv1g,6261
150
+ flet/controls/material/alert_dialog.py,sha256=8CYnb8Lcfn_EDP4mQTZe-cUVFXjHA8AdxBa6-vohjAQ,7606
151
+ flet/controls/material/app_bar.py,sha256=XBy4SavDp6Lc_o5O9npAAsQRBV591apOEnJT0-trmDM,6392
140
152
  flet/controls/material/auto_complete.py,sha256=MVesy4fUvLvY0pw_BDQXpRB5o9ac1Ci7icTdG4nC5oM,1856
141
153
  flet/controls/material/badge.py,sha256=xtyG18lElGMjKtvZg6OX4nRney8sAlC7TNTe2dUDj1M,3247
142
- flet/controls/material/banner.py,sha256=MDwXw74WrOB4OnI5FRhUqBF6z3DofD9_XXucqkXLbqw,4081
143
- flet/controls/material/bottom_app_bar.py,sha256=OVHTD2DZbyQIB9nR5TXfwT2F0QCpMh86w3GfuXIT-pE,2051
144
- flet/controls/material/bottom_sheet.py,sha256=i2J-4p9MBHU9mDtdQFXFKOtd7xB615aFVOTugm-8i0k,2759
145
- flet/controls/material/button.py,sha256=2lL5RVVS0q5BKDch4H7DBrfQjh_xs19_bMXlExb7p90,2395
154
+ flet/controls/material/banner.py,sha256=1QXFji-E7bOUh8d0iRL_byyE8kTMyepA24rWVx178pA,4159
155
+ flet/controls/material/bottom_app_bar.py,sha256=I5DO0wdbYsYe1_EatIU-jLGHFA8WT670sCrGUj6IM50,2083
156
+ flet/controls/material/bottom_sheet.py,sha256=o7y8a80HSeJWwI4Q3JNFeJ-6kvziuuj3t9f9gadGrhw,2791
157
+ flet/controls/material/button.py,sha256=14QzipCjIQpfLRoV4XBMTAxeR_EJNNvUcni7f2JLnL0,2584
146
158
  flet/controls/material/card.py,sha256=vNPL9Dv8rBg5v-0E7whgI-dV9jVRR6Z3oPctPQ8v7FU,2616
147
159
  flet/controls/material/checkbox.py,sha256=4F2OcbvBJ4BJXVD2F-U7YdI17elmwgMe3NhWIsFgA7o,5716
148
- flet/controls/material/chip.py,sha256=0RWVbaVNp_6cJgaN57IM89fYWim4cU62bmNZRC0Wx7A,7729
149
- flet/controls/material/circle_avatar.py,sha256=XLIa2tnfMMxsVEKIbvcdiAnPzQYd0hu3OfLyAX1mU2w,3879
160
+ flet/controls/material/chip.py,sha256=nGRGylhipV0wNj4w8v_qfKOqQkFSfubTBw2Nn4dcnJ0,7809
161
+ flet/controls/material/circle_avatar.py,sha256=dVhGnrvnc5uieeFTCJZ8FHDZbwVkBDFzzk-EEEugWWc,4014
150
162
  flet/controls/material/container.py,sha256=quw_KEu7N5tbEFK7EuX39OQ4Idd0i4qa4Nu6HIeS440,6875
151
- flet/controls/material/datatable.py,sha256=bfPev70Ej8_v4AvzSVHSQZYSAub9Kajl2OQq7m_DOTo,17220
163
+ flet/controls/material/datatable.py,sha256=fw2qtz5BAPxwfW3s8xm9hTrpNx9tNDkOkLhCe8RGf5E,17535
152
164
  flet/controls/material/date_picker.py,sha256=JCuU3-BcwFkb8KHQdcRQm0Scfdur7FGiMXElUX4WSxU,5336
153
165
  flet/controls/material/date_range_picker.py,sha256=7KJKE78bQYLJRdsTKgNu9JZbmyu3xh8xQUbrgwN5HwY,5350
154
- flet/controls/material/divider.py,sha256=6T4ZUvizEErqJztNcR9lEkhZrI9rm6zg0DfXxjUFwV4,2349
155
- flet/controls/material/dropdown.py,sha256=CK5G3UuHueDAI6mmcwbFs7IFUXA-tFEgXci7sLv43Ks,9777
166
+ flet/controls/material/divider.py,sha256=e3EUc8TqeDpiUwJjjtaewM3ghxQDXSy8huwWpz_R6Yo,2908
167
+ flet/controls/material/dropdown.py,sha256=hkDIO1GTLBNbX7QW45Um0RfnCxKFbUl0Qwq71fdBiPU,9863
156
168
  flet/controls/material/dropdownm2.py,sha256=JGie5s9jReAbhGWQkkoBMY1S8iBgdEvqqhhL7JMIoJg,5452
157
169
  flet/controls/material/elevated_button.py,sha256=AjrLkxn1ViwGE7ms8aNlNTgaR1-qIFhN8aU254Hx9Vc,274
158
170
  flet/controls/material/expansion_panel.py,sha256=nk7pforJciuaz5i2Sqmlmk7xksqR2ah425wzIseO-rM,3406
159
- flet/controls/material/expansion_tile.py,sha256=Pr_UYU5VAmvo0z73GZcSWqq7v2deSAbby-KQ834cfWc,5448
171
+ flet/controls/material/expansion_tile.py,sha256=D-43qpmmVqF8MvFHBJvWhvfImgM7YTv3B9nuLM-ivkM,5435
160
172
  flet/controls/material/filled_button.py,sha256=yG-JqPNMUvdkTny-oULS7IUicL2Wnw4ngeKUuDfHgC8,391
161
173
  flet/controls/material/filled_tonal_button.py,sha256=SoNneqj0O-RiCm895s-mpXbQAigsrlrplFTSii0DdHs,508
162
- flet/controls/material/floating_action_button.py,sha256=DEDCl_bUau4Hmomo-8Llp7NC2w2_rs1BCksQuPBeRNs,5520
174
+ flet/controls/material/floating_action_button.py,sha256=ZPDz7OaBqy_dEpMlUzphcKZPN_W5DNrEKnveGXvkAHA,5787
163
175
  flet/controls/material/form_field_control.py,sha256=khfIY-7S4Auk0-slhHV1Q1znM2XuRfAtMjjSz9MLN9Y,8491
164
- flet/controls/material/icon_button.py,sha256=4mJd_-L-h0QJ1hZJTmq3I6NZ0RWilRGvufvaIwevQlc,7429
176
+ flet/controls/material/icon_button.py,sha256=iKGaav-BxkD1N156iESjbZbo2vHsizB7UyttEZVmgFo,7552
165
177
  flet/controls/material/icons.py,sha256=piwc7LmopX6inmzdT4G0wpuvP6NZWGJQdG_KXCPPhEs,287248
166
178
  flet/controls/material/list_tile.py,sha256=LysJ_L9rshEBRY5Yeptt5HJjgILqmvnYrBtc1wyBZMA,7785
167
179
  flet/controls/material/menu_bar.py,sha256=P0bn4HDtNgrfe0GzWbEH4A-oiGA-n4dFoeyvUle3HeY,2168
168
180
  flet/controls/material/menu_item_button.py,sha256=ICiTw3FMCTL7maI04KggHOcuxEOEHLPxAU08D_XVVxY,2523
169
181
  flet/controls/material/navigation_bar.py,sha256=HzSiMT6P6bgkxz-d1iWxRNACMuOqnPKi2qbLBmp7BCg,4998
170
182
  flet/controls/material/navigation_drawer.py,sha256=_Wraal9cxMqyXUbDC26wMEUWlWu0pVT7V28DR-MCoQE,3794
171
- flet/controls/material/navigation_rail.py,sha256=ln4eT3ylNLyxgkRs_Ia7nfTVgLgs3lc-3JAxPvz9EoQ,7565
172
- flet/controls/material/outlined_button.py,sha256=mbjzu0VLPL9EiSYg1tmiDoa8NZhsIOrMnDo-OwSqT1w,2914
183
+ flet/controls/material/navigation_rail.py,sha256=mGNRtJVjT00ftBSoBVxPYz8ZM-CPbk5soXOW0n3-JYw,7830
184
+ flet/controls/material/outlined_button.py,sha256=Tf8Q9qRSsyMrVM4pDSNRNiwYFcNLrFa_PWYM-xwGPnI,3036
173
185
  flet/controls/material/popup_menu_button.py,sha256=iYBDno7UZcoqnpQpdA5JRCb9Fb1QrsSNDV-voGY8tnQ,4820
174
- flet/controls/material/progress_bar.py,sha256=H1iq8fsjtoE3B2SBvibITyfouhFk1D287s6FXmQ_ejw,3999
186
+ flet/controls/material/progress_bar.py,sha256=txAFMDGVeEj1jDoAlMusMHFjXCvqg4MtsiOvMPdztVw,4295
175
187
  flet/controls/material/progress_ring.py,sha256=7Nq4jUNN8ayHD5kHDgqT5dpOoTooVIHlA65jXENXjyw,3655
176
188
  flet/controls/material/radio.py,sha256=IK3hS-qT3BHA-0xDXWRDSoFQQHnMw4t-x6EayPBebIA,2797
177
- flet/controls/material/radio_group.py,sha256=r1XTsM4SSf2oOabr9WT-4rAv9SM5pjtgJqje9B83EYE,872
178
- flet/controls/material/range_slider.py,sha256=WP9yft5eb56-b_Cyk5MCRF5pZVdFeuFzJb4X_Ggbdxs,4024
189
+ flet/controls/material/radio_group.py,sha256=FyMPDvJTxQa210LNUyeFJUdgUD9RtKz56BbZpkw5COc,972
190
+ flet/controls/material/range_slider.py,sha256=nhtIwoHZ9YXS7zsclGr3cK03T5tPXPIwoxybhWbegIM,4229
179
191
  flet/controls/material/reorderable_list_view.py,sha256=iH87xlj7pIK1Kf-nQk5_PJ1sWmA0NXLCSQArDDrB-8Q,4692
180
192
  flet/controls/material/search_bar.py,sha256=hoeZxdTG4vqCqgWlRBaJi-iGenDOpIpedHrUJqp9X04,8448
181
- flet/controls/material/segmented_button.py,sha256=sU7nu5jwK-5y8ttaoMqfr16A5cmcpUthUz-O2AutlyQ,5184
182
- flet/controls/material/selection_area.py,sha256=k7qLEDB-TXiOsq13iT9Rx52nVXs6FYtJqaph-wUAxS8,1005
183
- flet/controls/material/slider.py,sha256=Vy4MO9nCx1p2j0c1wY6PeH_AVxKNVZNQqyJNG_d59w4,6807
184
- flet/controls/material/snack_bar.py,sha256=NK4M78RmJk25WlHAMddmplgXp9ruQ7-yaqxTz-1AqNw,7093
193
+ flet/controls/material/segmented_button.py,sha256=aGUID6XWzIDUoHkg7NosWcwF0vpw4q3diAP1wuZSQ00,5294
194
+ flet/controls/material/selection_area.py,sha256=lVvhKpfdaSizyRvn9xL3di02JRLIiZi_Mk2DfciLBRo,1031
195
+ flet/controls/material/slider.py,sha256=KTYfbmbpCOzT1w6u6EIQXLdr5m-hpLiXci_Ll_gthKA,6887
196
+ flet/controls/material/snack_bar.py,sha256=M_zZ1MmfV9p-zXwl-kO9rECJOJOsZp6AHAxdwh85g3k,7425
185
197
  flet/controls/material/submenu_button.py,sha256=4iQvOPTNRjNwXx3in8FWqBFKW6Mt22awwAhL8HiWd_I,2683
186
- flet/controls/material/switch.py,sha256=d4BHdAvku9V343g2AHpKnreEuclyux-FeMTZPTAy1KI,6856
187
- flet/controls/material/tabs.py,sha256=cywCdAv6Ztz9b7MJwoL6QFSfrE0Uy1Bky35Rn2h6LPw,18531
198
+ flet/controls/material/switch.py,sha256=sykhqKToMADriYkp2dmGCUZCqum-2Ht6MMCJ3o2UHU4,6892
199
+ flet/controls/material/tabs.py,sha256=aWdLCgNyGPTzhTmEq28syYjvGAMXwPaJ7GLWF0de3PA,18642
188
200
  flet/controls/material/text_button.py,sha256=Mkvz4LIl0yH1-e0ekOjPD6z8CZ5ZUIyE00zcb7sLKns,2578
189
- flet/controls/material/textfield.py,sha256=fJrTPRhcJDYYGPSl2LP08SLHZpL_3yG7Bk21h2znLMo,10999
201
+ flet/controls/material/textfield.py,sha256=tFxtWIk7JCXeq7oL_2Ltmbw5bqmY4125PIBd07Qur3Y,11668
190
202
  flet/controls/material/time_picker.py,sha256=_gUTaQi4N-mo1Oj_yJEsti8ToM0WhwhofbCjP5v2gzA,3070
191
203
  flet/controls/material/tooltip.py,sha256=PTqJiiE95z4WCTlvCx7i3vA-gGwphUT7w_2oXMiiVtY,5636
192
- flet/controls/material/vertical_divider.py,sha256=LaM-AE1Q2MUh2iuJi8vyTQy_BMg9EqulD4_AK2qLrgI,2359
204
+ flet/controls/material/vertical_divider.py,sha256=5-yjdV-sDXotSZFg_ApP_rtzBHlai4WkyeCOEoJhK34,2787
193
205
  flet/controls/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
206
  flet/controls/services/browser_context_menu.py,sha256=iLb160q7wPicdiVPXLZLzzQ4MCGxl2e-mOV4y4d2xQg,721
195
207
  flet/controls/services/clipboard.py,sha256=Linpoz32r5i-K5vpafFwNKaWwByZ6cVFhJZ0p87M_UE,987
196
208
  flet/controls/services/file_picker.py,sha256=Gsh1A4XBD3nIS9MDsLDirDwTMwO9nBZGHeC-F2furXI,7662
197
- flet/controls/services/haptic_feedback.py,sha256=rQ3Miw0jKlmoKHTOJKt-7vklqKxR1m2dngH7Oylyx6w,1266
209
+ flet/controls/services/haptic_feedback.py,sha256=JZMveq3loC3CWt3LPp87iWl6IeAzyUOnRejKzX9nLmo,1164
198
210
  flet/controls/services/semantics_service.py,sha256=eF_EcVqOMsgUyyZYhKTNLP-PcFTX0a8NQsQkAU-jxyk,1662
199
211
  flet/controls/services/service.py,sha256=1k3PGJxkJOub5Eb9SIjrRo2-Ik_xrmERQD0TfxjHYC0,378
200
- flet/controls/services/shake_detector.py,sha256=wrjoEfYcN7607QHCtW6FRdEdcj2yxyzSK-E1vBx5t_k,997
212
+ flet/controls/services/shake_detector.py,sha256=A9o5Z89lBUL7j6OhhMWv3Qna2O_ke1h3R1AFwKgmMwk,895
201
213
  flet/controls/services/shared_preferences.py,sha256=xCwAxSf52PL56KfObLLG8DGQvSZRLtQmKXP3nB0kdDY,949
202
214
  flet/controls/services/storage_paths.py,sha256=q6ykCW33IeMhvMQKAWaXZ8HKzsfdUpHGWAC52SM2NAQ,7800
203
215
  flet/controls/services/url_launcher.py,sha256=YfvNGaivvwJ2vrSkxwgQ2R1l3A5wbgY6AxX8n2Fe02U,2735
204
216
  flet/fastapi/__init__.py,sha256=crLmmKE-B-O-cm5MTlXFreYCUnqkw6mK4eIPUUMvSCM,45
205
217
  flet/messaging/connection.py,sha256=yd7NlEAwAMxhCEhh6mLN-cihYfeJdUlHhx5SycRVct4,1646
206
- flet/messaging/flet_socket_server.py,sha256=2y71YejYqAJGXhuoEaanGTHiCtnyXdu_62abur5gX-g,9053
218
+ flet/messaging/flet_socket_server.py,sha256=bFeC-hlKFhBoVHBYy6o_LzWiuFaUmT-vMT81t5lGEUM,9146
207
219
  flet/messaging/protocol.py,sha256=LTdTUHD2RQfP55rL6InG2w0FfTJPWoKo_SGcand3YpA,3856
208
220
  flet/messaging/pyodide_connection.py,sha256=-bNGKh0nYNtgdJ_nhBGJTF1TNX3vHqgxygetv2ZQwUs,4313
209
- flet/messaging/session.py,sha256=yv-pAlakXjFhhqy6VgCIOXtXZp1tUBBogrzdL-Saiaw,8879
221
+ flet/messaging/session.py,sha256=RQkYkZDIKW-l9ShUvbYKPD6ZXgfD4yVz2WERgUnp_OA,12310
222
+ flet/messaging/session_store.py,sha256=80yy3fjEGJs_60UxS_o2tXl2QCenFb9IVDaJCK8wckY,557
210
223
  flet/pubsub/__init__.py,sha256=qWcHYUa7oQEKysceGCeYG2AgIe0IO18NRXiP47jb_6o,126
211
224
  flet/pubsub/pubsub_client.py,sha256=Wamm3T_md2ObOu5odN5-bPuMgt9Si8YvbYhSC2TtAIA,1245
212
225
  flet/pubsub/pubsub_hub.py,sha256=1loRKhFYq23E89EYPaK4RMCbFdOW2qVeTQk8JqnbNp8,6514
@@ -232,8 +245,8 @@ flet/utils/platform_utils.py,sha256=U4cqV3EPi5QNYjbhfZmtk41-KMtI_P7KvVdnZzMOgJA,
232
245
  flet/utils/slugify.py,sha256=e-lsoDc2_dk5jQnySaHCU83AA4O6mguEgCEdk2smW2Y,466
233
246
  flet/utils/strings.py,sha256=R63_i7PdSAStCDPJ-O_WHBt3H02JQ14GSbnjLIpPTUc,178
234
247
  flet/utils/vector.py,sha256=pYZzjldBWCZbSeSkZ8VmujwcZC7VBWk1NLBPA-2th3U,3207
235
- flet-0.70.0.dev5774.dist-info/METADATA,sha256=Dtz-FMPLRyzBsS5-HT09ryOdd9GLwQwe4n1xCC_FwYE,6220
236
- flet-0.70.0.dev5774.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
237
- flet-0.70.0.dev5774.dist-info/entry_points.txt,sha256=mbBhHNUnLHiDqR36WeJrfLJU0Y0y087-M4wagQmaQ_Y,39
238
- flet-0.70.0.dev5774.dist-info/top_level.txt,sha256=HbLrSnWJX2jZOEZAI14cGzW8Q5BbOGTtE-7knD5FDh0,5
239
- flet-0.70.0.dev5774.dist-info/RECORD,,
248
+ flet-0.70.0.dev5835.dist-info/METADATA,sha256=GUvIKok6bJMD_anTcdBLA4S3G4gRtTN7Cwvsy6GUtoo,6220
249
+ flet-0.70.0.dev5835.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
250
+ flet-0.70.0.dev5835.dist-info/entry_points.txt,sha256=mbBhHNUnLHiDqR36WeJrfLJU0Y0y087-M4wagQmaQ_Y,39
251
+ flet-0.70.0.dev5835.dist-info/top_level.txt,sha256=HbLrSnWJX2jZOEZAI14cGzW8Q5BbOGTtE-7knD5FDh0,5
252
+ flet-0.70.0.dev5835.dist-info/RECORD,,
flet/controls/cache.py DELETED
@@ -1,87 +0,0 @@
1
- import functools
2
- import hashlib
3
- import weakref
4
- from typing import Callable, Optional, ParamSpec, TypeVar, Union, overload
5
-
6
- P = ParamSpec("P")
7
- R = TypeVar("R")
8
-
9
-
10
- def _hash_args(*args, **kwargs):
11
- try:
12
- # Convert args/kwargs to a string and hash it
13
- sig = repr((args, kwargs))
14
- return hashlib.sha256(sig.encode()).hexdigest()
15
- except Exception:
16
- # fallback to id-based hash if unhashable
17
- return str(id(args)) + str(id(kwargs))
18
-
19
-
20
- def _freeze_controls(control):
21
- if isinstance(control, list):
22
- return [_freeze_controls(c) for c in control]
23
- elif isinstance(control, dict):
24
- return {k: _freeze_controls(v) for k, v in control.items()}
25
- elif hasattr(control, "__dict__"): # assume it's a control
26
- object.__setattr__(control, "_frozen", True)
27
- return control
28
-
29
-
30
- @overload
31
- def cache(
32
- _fn: None = ..., *, freeze: bool = False
33
- ) -> Callable[[Callable[P, R]], Callable[P, R]]: ...
34
- @overload
35
- def cache(_fn: Callable[P, R], *, freeze: bool = False) -> Callable[P, R]: ...
36
-
37
-
38
- def cache(
39
- _fn: Optional[Callable[P, R]] = None, *, freeze: bool = False
40
- ) -> Union[Callable[[Callable[P, R]], Callable[P, R]], Callable[P, R]]:
41
- """
42
- A decorator to cache the results of a function based on its arguments.
43
- Used with Flet controls to optimize comparisons in declarative apps.
44
-
45
- Args:
46
- _fn: The function to be decorated.
47
- If None, the decorator is used with arguments.
48
- freeze: If `True`, freezes the returned controls
49
- by setting a `_frozen` attribute.
50
-
51
- Returns:
52
- A decorated function that caches its results.
53
- """
54
-
55
- def decorator(fn: Callable[P, R]) -> Callable[P, R]:
56
- # Use a weak reference dictionary to store cached results
57
- cache_store = weakref.WeakValueDictionary()
58
-
59
- @functools.wraps(fn)
60
- def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
61
- # Generate a unique hash key based on the function arguments
62
- key = _hash_args(*args, **kwargs)
63
-
64
- # Return cached result if it exists
65
- if key in cache_store:
66
- return cache_store[key]
67
-
68
- # Call the original function and cache the result
69
- result = fn(*args, **kwargs)
70
- if result is not None:
71
- if freeze:
72
- # Freeze the controls if the freeze flag is set
73
- _freeze_controls(result)
74
- cache_store[key] = result
75
- elif key in cache_store:
76
- # Remove the cache entry if the result is None
77
- del cache_store[key]
78
- return result
79
-
80
- return wrapper
81
-
82
- # If _fn is None, return the decorator itself for use with arguments
83
- if _fn is None:
84
- return decorator
85
- else:
86
- # Apply the decorator directly if _fn is provided
87
- return decorator(_fn)