ex4nicegui 0.6.7__py3-none-any.whl → 0.6.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. ex4nicegui/__init__.py +10 -6
  2. ex4nicegui/gsap/__init__.py +11 -0
  3. ex4nicegui/helper/__init__.py +4 -0
  4. ex4nicegui/helper/client_instance_locker.py +31 -0
  5. ex4nicegui/reactive/local_file_picker.py +1 -2
  6. ex4nicegui/reactive/officials/aggrid.py +4 -4
  7. ex4nicegui/reactive/officials/base.py +188 -86
  8. ex4nicegui/reactive/officials/button.py +1 -1
  9. ex4nicegui/reactive/officials/checkbox.py +2 -3
  10. ex4nicegui/reactive/officials/circular_progress.py +2 -3
  11. ex4nicegui/reactive/officials/color_picker.py +3 -4
  12. ex4nicegui/reactive/officials/column.py +1 -1
  13. ex4nicegui/reactive/officials/date.py +2 -3
  14. ex4nicegui/reactive/officials/drawer.py +2 -3
  15. ex4nicegui/reactive/officials/echarts.py +2 -3
  16. ex4nicegui/reactive/officials/expansion.py +2 -3
  17. ex4nicegui/reactive/officials/grid.py +1 -1
  18. ex4nicegui/reactive/officials/html.py +1 -3
  19. ex4nicegui/reactive/officials/icon.py +5 -6
  20. ex4nicegui/reactive/officials/image.py +2 -4
  21. ex4nicegui/reactive/officials/input.py +4 -6
  22. ex4nicegui/reactive/officials/knob.py +2 -4
  23. ex4nicegui/reactive/officials/label.py +1 -1
  24. ex4nicegui/reactive/officials/linear_progress.py +5 -6
  25. ex4nicegui/reactive/officials/number.py +3 -6
  26. ex4nicegui/reactive/officials/radio.py +3 -5
  27. ex4nicegui/reactive/officials/row.py +1 -1
  28. ex4nicegui/reactive/officials/select.py +3 -5
  29. ex4nicegui/reactive/officials/slider.py +3 -5
  30. ex4nicegui/reactive/officials/switch.py +2 -4
  31. ex4nicegui/reactive/officials/tab.py +1 -1
  32. ex4nicegui/reactive/officials/tab_panel.py +1 -1
  33. ex4nicegui/reactive/officials/tab_panels.py +1 -1
  34. ex4nicegui/reactive/officials/table.py +7 -6
  35. ex4nicegui/reactive/officials/tabs.py +1 -1
  36. ex4nicegui/reactive/officials/textarea.py +3 -5
  37. ex4nicegui/reactive/officials/upload.py +2 -2
  38. ex4nicegui/reactive/q_pagination.py +2 -2
  39. ex4nicegui/reactive/scopedStyle.js +55 -0
  40. ex4nicegui/reactive/scopedStyle.py +22 -0
  41. ex4nicegui/reactive/services/color_service.py +56 -0
  42. ex4nicegui/reactive/services/pandas_service.py +31 -0
  43. ex4nicegui/reactive/{utils.py → services/reactive_service.py} +9 -67
  44. ex4nicegui/reactive/systems/color_system.py +25 -0
  45. ex4nicegui/reactive/systems/object_system.py +33 -0
  46. ex4nicegui/reactive/systems/reactive_system.py +21 -0
  47. ex4nicegui/reactive/useMouse/UseMouse.py +4 -4
  48. ex4nicegui/reactive/usePagination.py +1 -1
  49. ex4nicegui/reactive/vfor.py +1 -2
  50. ex4nicegui/reactive/vmodel.py +1 -1
  51. ex4nicegui/utils/refComputed.py +147 -0
  52. ex4nicegui/utils/refWrapper.py +57 -0
  53. ex4nicegui/utils/signals.py +51 -192
  54. ex4nicegui/utils/types.py +16 -0
  55. ex4nicegui/version.py +3 -0
  56. {ex4nicegui-0.6.7.dist-info → ex4nicegui-0.6.8.dist-info}/METADATA +33 -4
  57. {ex4nicegui-0.6.7.dist-info → ex4nicegui-0.6.8.dist-info}/RECORD +59 -53
  58. ex4nicegui/reactive/EChartsComponent/__init__.py +0 -0
  59. ex4nicegui/reactive/UseDraggable/__init__.py +0 -0
  60. ex4nicegui/reactive/dropZone/__init__.py +0 -0
  61. ex4nicegui/reactive/mermaid/__init__.py +0 -0
  62. ex4nicegui/reactive/officials/__init__.py +0 -1
  63. ex4nicegui/reactive/officials/utils.py +0 -11
  64. ex4nicegui/reactive/useMouse/__init__.py +0 -0
  65. {ex4nicegui-0.6.7.dist-info → ex4nicegui-0.6.8.dist-info}/LICENSE +0 -0
  66. {ex4nicegui-0.6.7.dist-info → ex4nicegui-0.6.8.dist-info}/WHEEL +0 -0
@@ -1,17 +1,11 @@
1
1
  from datetime import date, datetime
2
- from functools import partial
3
- import types
4
- from weakref import WeakValueDictionary
5
2
  import signe
6
- from signe.core.protocols import ComputedResultProtocol
3
+ from signe.core.scope import Scope
7
4
  from .clientScope import _CLIENT_SCOPE_MANAGER
8
5
  from typing import (
9
6
  Any,
10
7
  Dict,
11
- Protocol,
12
8
  TypeVar,
13
- Generic,
14
- overload,
15
9
  Optional,
16
10
  Callable,
17
11
  cast,
@@ -21,85 +15,51 @@ from typing import (
21
15
  from nicegui import ui
22
16
  from .effect import effect
23
17
  from .scheduler import get_uiScheduler
24
- import warnings
18
+ from .types import (
19
+ _TMaybeRef,
20
+ TGetterOrReadonlyRef,
21
+ Ref,
22
+ TReadonlyRef, # noqa: F401
23
+ TRef, # noqa: F401
24
+ DescReadonlyRef, # noqa: F401
25
+ _TMaybeRef as TMaybeRef, # noqa: F401
26
+ )
27
+ from .refWrapper import RefWrapper, to_ref_wrapper # noqa: F401
28
+ from .refComputed import ref_computed # noqa: F401
25
29
 
26
30
  T = TypeVar("T")
27
31
 
28
32
 
29
- TReadonlyRef = ComputedResultProtocol[T]
30
- ReadonlyRef = TReadonlyRef[T]
31
- DescReadonlyRef = TReadonlyRef[T]
32
-
33
- TGetterOrReadonlyRef = signe.TGetter[T]
34
-
35
-
36
33
  is_reactive = signe.is_reactive
34
+ to_raw = signe.to_raw
37
35
 
38
36
 
39
37
  def reactive(obj: T) -> T:
40
38
  return signe.reactive(obj, get_uiScheduler())
41
39
 
42
40
 
43
- class RefWrapper(Generic[T]):
44
- __slot__ = ("_getter_fn", "_setter_fn", "")
45
-
46
- def __init__(
47
- self,
48
- getter_or_ref: TGetterOrReadonlyRef[T],
49
- setter_or_ref: Optional[Callable[[T], None]] = None,
50
- ):
51
- if signe.is_signal(getter_or_ref):
52
- self._getter_fn = lambda: getter_or_ref.value
53
-
54
- def ref_setter(v):
55
- getter_or_ref.value = v # type: ignore
56
-
57
- self._setter_fn = ref_setter
58
- elif isinstance(getter_or_ref, Callable):
59
- self._getter_fn = getter_or_ref
60
- self._setter_fn = setter_or_ref or (lambda x: None)
61
- else:
62
- self._getter_fn = lambda: getter_or_ref
63
- self._setter_fn = lambda x: None
64
-
65
- self._is_readonly = False
66
-
67
- @property
68
- def value(self) -> T:
69
- return cast(T, self._getter_fn())
70
-
71
- @value.setter
72
- def value(self, new_value: T):
73
- if self._is_readonly:
74
- warnings.warn("readonly ref cannot be assigned.")
75
- return
76
- return self._setter_fn(new_value)
77
-
78
-
79
- def to_ref_wrapper(
80
- getter_or_ref: TGetterOrReadonlyRef[T],
81
- setter_or_ref: Optional[Callable[[T], None]] = None,
82
- ):
83
- return RefWrapper(getter_or_ref, setter_or_ref)
84
-
85
-
86
- _TMaybeRef = signe.TMaybeSignal[T]
87
- TRef = signe.TSignal[T]
88
- Ref = TRef[T]
89
-
90
-
91
- to_raw = signe.to_raw
92
-
93
-
94
41
  def is_setter_ref(obj):
95
42
  return isinstance(obj, (signe.Signal, RefWrapper))
96
43
 
97
44
 
98
- def is_ref(obj):
45
+ def is_ref(obj: Any):
46
+ """Checks if a value is a ref object."""
99
47
  return signe.is_signal(obj) or isinstance(obj, (RefWrapper))
100
48
 
101
49
 
102
50
  def to_value(obj: Union[_TMaybeRef[T], RefWrapper]) -> T:
51
+ """unwraps a ref object and returns its inner value.
52
+
53
+ Args:
54
+ obj (Union[_TMaybeRef[T], RefWrapper]): A getter function, an existing ref, or a non-function value.
55
+
56
+ ## Example
57
+ ```python
58
+ to_value(1) # 1
59
+ to_value(lambda: 1) # 1
60
+ to_value(to_ref(1)) # 1
61
+ ```
62
+ """
103
63
  if is_ref(obj):
104
64
  return obj.value # type: ignore
105
65
  if isinstance(obj, Callable):
@@ -144,7 +104,7 @@ def _ref_comp_with_None(old, new):
144
104
  return False
145
105
 
146
106
 
147
- def ref(value: T, is_deep=False):
107
+ def ref(value: T, is_deep=False) -> Ref[T]:
148
108
  comp = False # Default never equal
149
109
 
150
110
  if _is_comp_values(value):
@@ -170,135 +130,33 @@ def deep_ref(value: T) -> Ref[T]:
170
130
  return to_ref(value, is_deep=True)
171
131
 
172
132
 
173
- class TInstanceCall(Protocol[T]):
174
- def __call__(_, self) -> T:
175
- ...
176
-
177
-
178
- @overload
179
- def ref_computed(
180
- fn: Union[Callable[[], T], TInstanceCall[T]],
181
- *,
182
- desc="",
183
- debug_trigger: Optional[Callable[..., None]] = None,
184
- priority_level: int = 1,
185
- debug_name: Optional[str] = None,
186
- ) -> ReadonlyRef[T]:
187
- """Takes a getter function and returns a readonly reactive ref object for the returned value from the getter. It can also take an object with get and set functions to create a writable ref object.
188
-
189
- @see - https://github.com/CrystalWindSnake/ex4nicegui/blob/main/README.en.md#ref_computed
190
- @中文文档 - https://gitee.com/carson_add/ex4nicegui/tree/main/#ref_computed
191
-
192
-
193
- Args:
194
- fn (Callable[[], T]): _description_
195
- desc (str, optional): _description_. Defaults to "".
196
- debug_trigger (Optional[Callable[..., None]], optional): _description_. Defaults to None.
197
- priority_level (int, optional): _description_. Defaults to 1.
198
- debug_name (Optional[str], optional): _description_. Defaults to None.
199
-
200
- """
201
- ...
202
-
203
-
204
- @overload
205
- def ref_computed(
206
- fn=None,
207
- *,
208
- desc="",
209
- debug_trigger: Optional[Callable[..., None]] = None,
210
- priority_level: int = 1,
211
- debug_name: Optional[str] = None,
212
- ) -> Callable[[Callable[..., T]], ReadonlyRef[T]]:
213
- ...
214
-
215
-
216
- def ref_computed(
217
- fn: Optional[Union[Callable[[], T], TInstanceCall[T]]] = None,
218
- *,
219
- desc="",
220
- debug_trigger: Optional[Callable[..., None]] = None,
221
- priority_level: int = 1,
222
- debug_name: Optional[str] = None,
223
- ) -> Union[ReadonlyRef[T], Callable[[Callable[..., T]], ReadonlyRef[T]]]:
224
- kws = {
225
- "debug_trigger": debug_trigger,
226
- "priority_level": priority_level,
227
- "debug_name": debug_name,
228
- }
229
-
230
- if fn:
231
- if _is_class_define_method(fn):
232
- return cast(
233
- ref_computed_method[T],
234
- ref_computed_method(fn, computed_args=kws), # type: ignore
235
- ) # type: ignore
236
-
237
- getter = signe.Computed(
238
- cast(Callable[[], T], fn),
239
- **kws,
240
- scope=_CLIENT_SCOPE_MANAGER.get_current_scope(),
241
- scheduler=get_uiScheduler(),
242
- )
243
- return cast(DescReadonlyRef[T], getter)
244
-
245
- else:
246
-
247
- def wrap(fn: Callable[[], T]):
248
- return ref_computed(fn, **kws)
249
-
250
- return wrap
251
-
252
-
253
- def _is_class_define_method(fn: Callable):
254
- has_name = hasattr(fn, "__name__")
255
- qualname_prefix = f".<locals>.{fn.__name__}" if has_name else ""
256
-
257
- return (
258
- hasattr(fn, "__qualname__")
259
- and has_name
260
- and "." in fn.__qualname__
261
- and qualname_prefix != fn.__qualname__[-len(qualname_prefix) :]
262
- and (isinstance(fn, types.FunctionType))
263
- )
264
-
265
-
266
- class ref_computed_method(Generic[T]):
267
- __isabstractmethod__: bool
268
-
269
- def __init__(self, fget: Callable[[Any], T], computed_args: Dict) -> None:
270
- self._fget = fget
271
- self._computed_args = computed_args
272
- self._instance_map: WeakValueDictionary[
273
- int, TReadonlyRef[T]
274
- ] = WeakValueDictionary()
275
-
276
- def __get_computed(self, instance):
277
- ins_id = id(instance)
278
- if ins_id not in self._instance_map:
279
- cp = signe.Computed(
280
- partial(self._fget, instance),
281
- **self._computed_args,
282
- scope=_CLIENT_SCOPE_MANAGER.get_current_scope(),
283
- scheduler=get_uiScheduler(),
284
- capture_parent_effect=False,
285
- )
286
- self._instance_map[ins_id] = cp # type: ignore
287
-
288
- return self._instance_map[ins_id]
289
-
290
- def __get__(self, __instance: Any, __owner: Optional[type] = None):
291
- return cast(TRef[T], self.__get_computed(__instance))
133
+ _T_effect_refreshable_refs = Union[
134
+ TGetterOrReadonlyRef,
135
+ RefWrapper,
136
+ Sequence[TGetterOrReadonlyRef],
137
+ _TMaybeRef,
138
+ Sequence[_TMaybeRef],
139
+ ]
292
140
 
293
141
 
294
142
  class effect_refreshable:
295
- def __init__(self, fn: Callable, refs: Union[TRef, Sequence[TRef]] = []) -> None:
143
+ def __init__(self, fn: Callable, refs: _T_effect_refreshable_refs = []) -> None:
296
144
  self._fn = fn
297
- self._refs = refs if isinstance(refs, Sequence) else [refs]
145
+
146
+ if isinstance(refs, Sequence):
147
+ ref_arg = [ref for ref in refs if self._is_valid_ref(ref)]
148
+ else:
149
+ ref_arg = [refs] if self._is_valid_ref(refs) else []
150
+
151
+ self._refs = ref_arg
298
152
  self()
299
153
 
154
+ @classmethod
155
+ def _is_valid_ref(cls, ref):
156
+ return is_ref(ref) or isinstance(ref, Callable)
157
+
300
158
  @staticmethod
301
- def on(refs: Union[TRef, Sequence[TRef]]):
159
+ def on(refs: _T_effect_refreshable_refs):
302
160
  def warp(
303
161
  fn: Callable,
304
162
  ):
@@ -323,7 +181,7 @@ class effect_refreshable:
323
181
  if len(self._refs) == 0:
324
182
  runner = effect(runner)
325
183
  else:
326
- runner = on(self._refs)(runner)
184
+ runner = on(self._refs)(runner) # type: ignore
327
185
 
328
186
  return runner
329
187
 
@@ -334,6 +192,7 @@ def on(
334
192
  priority_level=1,
335
193
  effect_kws: Optional[Dict[str, Any]] = None,
336
194
  deep: bool = True,
195
+ scope: Optional[Scope] = None,
337
196
  ):
338
197
  """Watches one or more reactive data sources and invokes a callback function when the sources change.
339
198
 
@@ -362,7 +221,7 @@ def on(
362
221
  fn,
363
222
  onchanges=onchanges,
364
223
  effect_kws=effect_kws,
365
- scope=_CLIENT_SCOPE_MANAGER.get_current_scope(),
224
+ scope=scope or _CLIENT_SCOPE_MANAGER.get_current_scope(),
366
225
  deep=deep,
367
226
  scheduler=get_uiScheduler(),
368
227
  )
@@ -0,0 +1,16 @@
1
+ import signe
2
+ from signe.core.protocols import ComputedResultProtocol
3
+ from typing import (
4
+ TypeVar,
5
+ )
6
+
7
+ T = TypeVar("T")
8
+
9
+
10
+ TReadonlyRef = ComputedResultProtocol[T]
11
+ ReadonlyRef = TReadonlyRef[T]
12
+ DescReadonlyRef = TReadonlyRef[T]
13
+ TGetterOrReadonlyRef = signe.TGetter[T]
14
+ _TMaybeRef = signe.TMaybeSignal[T]
15
+ TRef = signe.TSignal[T]
16
+ Ref = TRef[T]
ex4nicegui/version.py ADDED
@@ -0,0 +1,3 @@
1
+ import importlib.metadata
2
+
3
+ __version__: str = importlib.metadata.version("ex4nicegui")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ex4nicegui
3
- Version: 0.6.7
3
+ Version: 0.6.8
4
4
  Summary: Extension library based on nicegui, providing data responsive,BI functionality modules
5
5
  Home-page: https://github.com/CrystalWindSnake/ex4nicegui
6
6
  License: MIT
@@ -604,7 +604,7 @@ rxui.label("bind to ref_computed").bind_classes(
604
604
 
605
605
  ---
606
606
 
607
- 绑定为列表
607
+ 绑定为列表或单个字符串的响应式变量
608
608
 
609
609
  ```python
610
610
  bg_color = to_ref("red")
@@ -617,10 +617,11 @@ rxui.select(["red", "green", "yellow"], label="bg color", value=bg_color)
617
617
  rxui.select(["red", "green", "yellow"], label="text color", value=text_color)
618
618
 
619
619
  rxui.label("binding to arrays").bind_classes([bg_color_class, text_color_class])
620
-
620
+ rxui.label("binding to single string").bind_classes(bg_color_class)
621
621
  ```
622
622
 
623
- 列表中每个元素为返回类名的响应式变量
623
+ - 列表中每个元素为返回类名的响应式变量
624
+
624
625
 
625
626
  ---
626
627
 
@@ -887,6 +888,34 @@ rxui.radio(names, value=current_tab).props("inline")
887
888
 
888
889
  rxui.label(lambda: f"当前 tab 为:{current_tab.value}")
889
890
  ```
891
+ ---
892
+
893
+ ### scoped_style
894
+
895
+ `scoped_style` 方法允许你创建限定在组件内部的样式。
896
+
897
+ ```python
898
+ # 所有子元素都会有红色轮廓,但排除自身
899
+ with rxui.row().scoped_style("*", "outline: 1px solid red;") as row:
900
+ ui.label("Hello")
901
+ ui.label("World")
902
+
903
+
904
+ # 所有子元素都会有红色轮廓,包括自身
905
+ with rxui.row().scoped_style(":self *", "outline: 1px solid red;") as row:
906
+ ui.label("Hello")
907
+ ui.label("World")
908
+
909
+ # 当鼠标悬停在 row 组件时,所有子元素都会有红色轮廓,但排除自身
910
+ with rxui.row().scoped_style(":hover *", "outline: 1px solid red;") as row:
911
+ ui.label("Hello")
912
+ ui.label("World")
913
+
914
+ # 当鼠标悬停在 row 组件时,所有子元素都会有红色轮廓,包括自身
915
+ with rxui.row().scoped_style(":self:hover *", "outline: 1px solid red;") as row:
916
+ ui.label("Hello")
917
+ ui.label("World")
918
+ ```
890
919
 
891
920
 
892
921
  ---
@@ -1,4 +1,4 @@
1
- ex4nicegui/__init__.py,sha256=NxkjzifbZg-o2hX4ENk1ekPacAnu1PLi7dr34QsomEw,886
1
+ ex4nicegui/__init__.py,sha256=waq1asZd0w4BKeBozgDVKSFJTCgyK55ojdtRr-QFs1U,1048
2
2
  ex4nicegui/bi/__init__.py,sha256=eu-2CuzzrcHCyKQOfoo87v6C9nSwFDdeLhjY0cRV13M,315
3
3
  ex4nicegui/bi/dataSource.py,sha256=hOOUN4PpSfPx4Vp1sg9Sfxi5K-wROw9C22Z-mmNXs6w,7644
4
4
  ex4nicegui/bi/dataSourceFacade.py,sha256=6NuAyrTIk_L2Tz9IRFpuHKRQY_OwJINDzxoM6JYOc14,8186
@@ -22,11 +22,13 @@ ex4nicegui/bi/types.py,sha256=PGPUXr17iRmxxYHxHKJSdxp5CdAkHWb2_9nJ1GwYRlc,355
22
22
  ex4nicegui/experimental_/__init__.py,sha256=HODL0f70HUzVrfRwUzdCwxTp_9mYr4D1nnzd8jevlMw,69
23
23
  ex4nicegui/experimental_/gridLayout/__init__.py,sha256=c9k-zykhKW3Ol6QECUoKqJW9QEuhA9xPi8s4Dm4m7SU,125
24
24
  ex4nicegui/experimental_/gridLayout/index.py,sha256=zFXuvFroo5EC1CFjt-b4hMiEy67hGP5J1GYTKH6kpUU,4737
25
- ex4nicegui/gsap/__init__.py,sha256=xBApQlq9st9exhgcSkqCzWeS6bc1eKiPJfYP25MSInw,218
25
+ ex4nicegui/gsap/__init__.py,sha256=hoLf8K7_-W4WMx1SGCVe3JGl9DzX9wtJmvj5lOqMWS4,439
26
26
  ex4nicegui/gsap/gsap.py,sha256=JM3xM9OjjmUMSV-be5-H-geiw61xDU3ZljDyl8yyZAU,4638
27
27
  ex4nicegui/gsap/timeline.js,sha256=CB300drH7UUSfy_WDeuWHSNh3WX-vwbRtKBLL1Ak43o,1241
28
28
  ex4nicegui/gsap/timeline.py,sha256=EfJ3Iom3EbJMML8PnRDAO_nn58j2bone3uWrd3UubeU,2390
29
29
  ex4nicegui/gsap/wrapGsap.js,sha256=0Iz7qh8aA-h3svV7fW4U5k_pX7zXCcIdHDaG7NNvgLU,1045
30
+ ex4nicegui/helper/__init__.py,sha256=a-9skUII1iofsWU8xlieQrmeKYb9PjVsqF5TTO34wn8,98
31
+ ex4nicegui/helper/client_instance_locker.py,sha256=mrgwYjb_OricG5kDscBI4UvItLu0N_HmOwIiAaH2dWE,968
30
32
  ex4nicegui/layout/__init__.py,sha256=YT76Ec7p4aFOGms6wc19207flBeyI6jrq7Kg_FQ2wnQ,278
31
33
  ex4nicegui/layout/gridFlex/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
32
34
  ex4nicegui/layout/gridFlex/GridFlex.js,sha256=ljkxGFucBUIPksMAT5w_35sxGogC7OzxzXnOw21Z3_k,4468
@@ -70,10 +72,8 @@ ex4nicegui/libs/gsap/utils/paths.js,sha256=2SPaRHQ7zgba9cH8hGhkTYPCZdrrEhE2qhh6E
70
72
  ex4nicegui/libs/gsap/utils/strings.js,sha256=47G9slz5ltG9mDSwrfQDtWzzdV5QJ-AIMLRMNK0VSiM,10472
71
73
  ex4nicegui/reactive/__init__.py,sha256=-FC9JUa7bMqozkbbKlpWJB7WY8HuojAINgAD8ZcxHdY,3714
72
74
  ex4nicegui/reactive/deferredTask.py,sha256=l__Qdis24jAO97_DSHW1yBns0f13-OK02O2SSkyvoZQ,824
73
- ex4nicegui/reactive/dropZone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
75
  ex4nicegui/reactive/dropZone/dropZone.js,sha256=7rSpFJX-Fk_W_NGZhOTyuEw0bzR-YUc8ZYPzQG9KzE0,2713
75
76
  ex4nicegui/reactive/dropZone/dropZone.py,sha256=hg9UKTayff8v8Ek-n38h_3wX1Qmiotvdyv1Hsqilh5Y,2590
76
- ex4nicegui/reactive/EChartsComponent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  ex4nicegui/reactive/EChartsComponent/ECharts.js,sha256=ye2FZNLfY4T41YAGQQYqn3LThSlnbY0pqnGtpyEg9bE,3548
78
78
  ex4nicegui/reactive/EChartsComponent/ECharts.py,sha256=ho6Cnz5zv99UXyQGdoln81KSCWlLsA4ZUT0Jdic4Xmo,4490
79
79
  ex4nicegui/reactive/EChartsComponent/events.py,sha256=_BtmLRcAIZciDQT5i1eFc-r3e0pBnAabW1BSl6uzhCc,570
@@ -82,62 +82,64 @@ ex4nicegui/reactive/EChartsComponent/utils.py,sha256=a5r2fghC6IIZbyfUUR8TEkpLj9H
82
82
  ex4nicegui/reactive/empty.js,sha256=Y-caS4CN8jUq59LgGgcvgfkndze-RgWF_ZMmAcxOrbw,50
83
83
  ex4nicegui/reactive/empty.py,sha256=kB851B12V1_VCNsFKW6OmjcdIiuZqGEGjLgA6k6yug8,132
84
84
  ex4nicegui/reactive/fileWatcher.py,sha256=gjeZhgar02f-qGQa47Tj5SMaCP_ftRtSU898XUmXl1U,1472
85
- ex4nicegui/reactive/local_file_picker.py,sha256=d3ERoTOGiPGgE3osCdDwklvERqMl_CVbh-qokTLaAuI,6225
86
- ex4nicegui/reactive/mermaid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ ex4nicegui/reactive/local_file_picker.py,sha256=MoInXSauFdCuhYi_CmNKZwxAtsOqXh8roWWdqNwjPBY,6199
87
86
  ex4nicegui/reactive/mermaid/mermaid.js,sha256=Ds5VevGWZE1_N0WKf-uITd8xSCO9gQzVUsmb80EajNY,2308
88
87
  ex4nicegui/reactive/mermaid/mermaid.py,sha256=uP321QiNj_S5E5I2KF9h03WlSFdRITE8tvObGdk6m7M,2144
89
- ex4nicegui/reactive/officials/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
90
- ex4nicegui/reactive/officials/aggrid.py,sha256=Tgpexx3-gQF1mXrQ6HFS1D6ko3al_LoyjBsICX_mXao,2956
91
- ex4nicegui/reactive/officials/base.py,sha256=xxo51SoFKn_dvZTht549G71uWw1c8OhfJBXE9LgoUNo,10843
92
- ex4nicegui/reactive/officials/button.py,sha256=Ut3B93a9zMCvvBPmVgQpecpR5owaO9_nDPfbdPB_amo,1701
88
+ ex4nicegui/reactive/officials/aggrid.py,sha256=AhDmbCUk8PU97eP25HCTYfGhdtKCZ6noLE3Snb2O6pU,2974
89
+ ex4nicegui/reactive/officials/base.py,sha256=4UWSB0q7nE-Z4bzAka5VyfNkO0CGF914-fiXihipAqA,14360
90
+ ex4nicegui/reactive/officials/button.py,sha256=TSq8PcebIbW_rjHNhzLiYbl9NhJDaNMz31-QTcL6hM8,1721
93
91
  ex4nicegui/reactive/officials/card.py,sha256=8-tBwm3xfVybolQ87i8lAYUpBV6FdaVdeSH6xu0736U,1275
94
- ex4nicegui/reactive/officials/checkbox.py,sha256=Q_rguVABddVEnVdqe2HNOvDo7LO2DZgUDw9qWyE7P0I,1589
95
- ex4nicegui/reactive/officials/circular_progress.py,sha256=KxQIQrtuxYvvhn4FSg1pZchquD4HML2QT0aPJvtFdwQ,1814
96
- ex4nicegui/reactive/officials/color_picker.py,sha256=FbHriMPYdGJI44RfX5wFceiErr46ndBSAUYyzrRyzVA,3438
97
- ex4nicegui/reactive/officials/column.py,sha256=WdWSeF4GKPGymbwos3H_KmNIbWap-j3E03XjP_RmvsY,1089
98
- ex4nicegui/reactive/officials/date.py,sha256=qkEUBXF-J_cCZf4lN-KScLoVItkWqh7VdD25LaVZ3Gg,2539
99
- ex4nicegui/reactive/officials/drawer.py,sha256=y9_gbDDy_6Y7mRfSB8BGawM-_g6kECM1ieZXMX2YCQo,2370
100
- ex4nicegui/reactive/officials/echarts.py,sha256=2-g5O3QtybSOuTw1Ucf2P3WPWQhtXEwtcIWyj-wvVVQ,10045
92
+ ex4nicegui/reactive/officials/checkbox.py,sha256=c_CDUlPx7izgaZY3Y4CaCIyxM3moQ0x_lLEs4MylSOc,1565
93
+ ex4nicegui/reactive/officials/circular_progress.py,sha256=B24s7zwLQB8C7ScHxjlLA0rrHCYXiWgk3-8WvuZrZpE,1790
94
+ ex4nicegui/reactive/officials/color_picker.py,sha256=FUuHhSQ96bCaVua5Cq28_V08PYIVOHFxygVawJkqo1I,3420
95
+ ex4nicegui/reactive/officials/column.py,sha256=Ox2OZRmKjAR8pRTWNXej8I-AYI8FGujIAhZyAoi9cNY,1109
96
+ ex4nicegui/reactive/officials/date.py,sha256=E5Xs4mJgknQzpBqW_lwJ8c3GZf8wlyi7xCPQrJ70MWE,2515
97
+ ex4nicegui/reactive/officials/drawer.py,sha256=_Ro6stOh8U3igYMeDwI4omBgi1nld5berrAk9Dv5RVw,2346
98
+ ex4nicegui/reactive/officials/echarts.py,sha256=YvoVfxRl2V93e6pC5l5O6-VJqMxvfwqEf0JLXv639UY,10072
101
99
  ex4nicegui/reactive/officials/element.py,sha256=-qsHcxfF3fMfU0sJlKtTksX_wYPMIPJ_AgFcZbbI754,412
102
- ex4nicegui/reactive/officials/expansion.py,sha256=3uYKHybS7_QD5yAaJWI7G0gW7ydp0sCckrzUAQj9WG0,1922
103
- ex4nicegui/reactive/officials/grid.py,sha256=z3mdvDnpxKECtvioTgGXROc1kcAugNCBOvwZ7NCpQHI,865
100
+ ex4nicegui/reactive/officials/expansion.py,sha256=N0mp7_ZO0gHjGTAA69-mAdDCNZWr3FP_sqFL4-Rvhes,1898
101
+ ex4nicegui/reactive/officials/grid.py,sha256=ih2Ew4AMx6U6k3ZXwLstn9XH0OjNiWrK6lwdp1f3e6s,885
104
102
  ex4nicegui/reactive/officials/html.js,sha256=lyvRAdMKZGOc7MPEapeU6WbOzq_MVzqzUJEhKuC8zWc,119
105
- ex4nicegui/reactive/officials/html.py,sha256=yasDeGMJyyGmCpJoiwmG-QszfLSOsHLYWShWXXbSlH0,675
106
- ex4nicegui/reactive/officials/icon.py,sha256=t31tV4rVRktdKNoy-PaCkp3LgNoqQtAlmAy85Qkm5vs,1595
107
- ex4nicegui/reactive/officials/image.py,sha256=5QOS_JAC_PnMMSvON6wAfTDFPTIxwihOIYu0ygH-4XU,1147
108
- ex4nicegui/reactive/officials/input.py,sha256=nYEODTtRZp2ggfOQKQGUAHYRZlw_qo9Emx13gVKppZs,4066
109
- ex4nicegui/reactive/officials/knob.py,sha256=rVeBiuV_ROcta0kZmfVdl8f4-eJpx6uvTzyk2hIyzJs,2180
110
- ex4nicegui/reactive/officials/label.py,sha256=7TwjjYwuU46HYQCpZrUji4HPLM-FO-_EIpgO3DGsV1U,1458
111
- ex4nicegui/reactive/officials/linear_progress.py,sha256=9qun-NtLo-RcHg9CwWrj146w0eAnw1Mpydf6UgmTmRU,2164
112
- ex4nicegui/reactive/officials/number.py,sha256=M61YkL92Ikpn_fQqDOiiA78bHeJgphCdTER-ndOD4w0,2805
113
- ex4nicegui/reactive/officials/radio.py,sha256=7mPx3ZHUxZKeyEhxq63YdivmgUaf5pTzDSDHt-x32qs,1965
114
- ex4nicegui/reactive/officials/row.py,sha256=pwFJBdv3_D5-E-oga-OG5t57ahHcYXGSI_-UofWg_j0,1029
115
- ex4nicegui/reactive/officials/select.py,sha256=ZZaxEUT0S0qeRqRLTiUfR2s4x1PNJg1e9AnR8Eegkk4,3016
116
- ex4nicegui/reactive/officials/slider.py,sha256=jkL28WBFZDxhOsc6WM-mfak3-zzYfiCIRLWbsbx9PUk,2981
117
- ex4nicegui/reactive/officials/switch.py,sha256=bvS2WG9BdR586Sm0zvk0G5GhCtx8bIEiEDV74mkGCU8,1632
118
- ex4nicegui/reactive/officials/tab.py,sha256=RaS152hfUBz4aOidahzwy7GPV3jR4eWBWKnVXrITXUw,1796
119
- ex4nicegui/reactive/officials/tab_panel.py,sha256=96aR6Y8oqVFnZo_U8lX5V8mpXR7YIUldSvQMI3oFYQ0,630
120
- ex4nicegui/reactive/officials/tab_panels.py,sha256=vF07zV6LjYCp4Attv8SgTQypVbcW3E8x1bqCEdz6fcw,2103
121
- ex4nicegui/reactive/officials/table.py,sha256=UcHtNsQuUbIN4verGV9YZzb-j0G35on0GGxNPjyisGE,6105
122
- ex4nicegui/reactive/officials/tabs.py,sha256=tHnQiV8RKxITq-dHPuLFz_ra1zXFV2sSms8pJezPPGM,1281
123
- ex4nicegui/reactive/officials/textarea.py,sha256=SY08we_dABBGlth5pOZQ33axwxWIdqaHJpFc8sIOWkA,3071
124
- ex4nicegui/reactive/officials/upload.py,sha256=WYbbOqAcgnVUuqfF4WAMawldRHB9DthP6NSTyc-4Bwo,2360
125
- ex4nicegui/reactive/officials/utils.py,sha256=-fnRjyb4Yx7_6jmVeQIZKXFRNV3BWbI7JR_EemMEoTg,213
126
- ex4nicegui/reactive/q_pagination.py,sha256=nBt9nA3NrRxYYol14JQZdOWXcPKog_7HUBnIGlRwckc,1554
103
+ ex4nicegui/reactive/officials/html.py,sha256=XrOpGoAJDo8dtTnZVLSmi7H5iHffmYpeZ94lXxHjBwI,629
104
+ ex4nicegui/reactive/officials/icon.py,sha256=cFrnWAuO-i5Aj_aHZ4yJrlaR0j4KitcL_EJ2cbduoQ8,1625
105
+ ex4nicegui/reactive/officials/image.py,sha256=ifuBU_RORV8FTG_3xKQtj6d5F5exz-nxqD70HKo0S7g,1121
106
+ ex4nicegui/reactive/officials/input.py,sha256=osu9HfT6W3zXhFkCLNIaN-q3LjlFvz6GknksO6h7r7Y,4044
107
+ ex4nicegui/reactive/officials/knob.py,sha256=5wQJxCWx45pi09c0jP-szbcch3YX_7He-3iL0bV7rCw,2154
108
+ ex4nicegui/reactive/officials/label.py,sha256=_t0SGYbaKlSiR4phfgoZlWUcvyZPH5yvWsKVsQraHLw,1478
109
+ ex4nicegui/reactive/officials/linear_progress.py,sha256=TAcy9iYnGmRldNyWvdzmL0VpVu6IFtkcF4nHsWoPBls,2194
110
+ ex4nicegui/reactive/officials/number.py,sha256=H5_6_NfcC4tosomHJXht9DHAF3q87zQKBIkPoKmHgZk,2786
111
+ ex4nicegui/reactive/officials/radio.py,sha256=N13zS2FVzA3gew77_OjRCyzdcnheGLAeGYlWK3CxGTc,1945
112
+ ex4nicegui/reactive/officials/row.py,sha256=fGNcEHS2sMT1GY33jpLTvUh-MjqdNSuyCrjgBXM-p2Q,1049
113
+ ex4nicegui/reactive/officials/select.py,sha256=japHOAIeFM860W9RCOXAQtMdslN9tLjxdYuzNZ3p4rM,2996
114
+ ex4nicegui/reactive/officials/slider.py,sha256=6dXVNsW1l0DN9ljC610FlR6wfVHfpv5xSQdkN7VaiAM,2961
115
+ ex4nicegui/reactive/officials/switch.py,sha256=9OtkOB1QD3wCEyPBwPvzAPyYJku5v5MvuTciNE9EQvo,1606
116
+ ex4nicegui/reactive/officials/tab.py,sha256=A83oxhlr8-YBeuUJTfPk05Kt9DeA5knNwbpwE5-i7Lk,1816
117
+ ex4nicegui/reactive/officials/tab_panel.py,sha256=Y05XTIOE6qXYZjcCoVIPm9lruyR7av58McRLmPc2yxg,650
118
+ ex4nicegui/reactive/officials/tab_panels.py,sha256=VND49QlINVBjMdaNiqI1UaDR2Rhk6tqt79ePl-jh1oA,2123
119
+ ex4nicegui/reactive/officials/table.py,sha256=oNOuG8rT0oKbnn-MpO2sRisdJwpGILDZkxk96g7GYtQ,6208
120
+ ex4nicegui/reactive/officials/tabs.py,sha256=w-wXIRUnYBgBDZDTNLhcUrIvP6rpiZRs0kd2GvJ7zPw,1301
121
+ ex4nicegui/reactive/officials/textarea.py,sha256=dCF_uNUIveK6Nuy-OxJDSb7jzPyw-rIsNw51uwsg090,3043
122
+ ex4nicegui/reactive/officials/upload.py,sha256=5SX2CFkf3s_4bPcnx0bmKRA4eYVlm0S8RBeQ7qHnqck,2395
123
+ ex4nicegui/reactive/q_pagination.py,sha256=hvX8abzp7nmeOy2gKwtNM6Dhpt7fYqw7d8YNHYAltx8,1560
127
124
  ex4nicegui/reactive/rxui.py,sha256=gZ8ZEjGuJFKcedEZhcm4PIZguNkY-Wv5yQx80QnsBKI,31
125
+ ex4nicegui/reactive/scopedStyle.js,sha256=RtpfUwkpjMv_cbplkr2UtydKAxB5Dz7Sm6jRgPHRhow,1569
126
+ ex4nicegui/reactive/scopedStyle.py,sha256=lwykOybREj2mjjiN_oQ7S-TRda40kO-TxVlHtXF0M3c,633
127
+ ex4nicegui/reactive/services/color_service.py,sha256=UIQXP4PQ_l5601Opqw5T6E_wOyd3yt1dtMLmHdRP5L4,1746
128
+ ex4nicegui/reactive/services/pandas_service.py,sha256=XOoy6tZr4TpTyhewAH59eiSwVFxqwOipdM_j-mkGpdM,1043
129
+ ex4nicegui/reactive/services/reactive_service.py,sha256=cgw7Qirc70avsgvGuMT4RCT_mFouJb1-KR3dWOgucX8,2742
130
+ ex4nicegui/reactive/systems/color_system.py,sha256=zJvFd2UobkAtMN3yb6amGgHoR9BLyEiTSfLY-107r4w,542
131
+ ex4nicegui/reactive/systems/object_system.py,sha256=bja9YNb4v5fVZl5gJvVA4HbwRssRp-2yFy3JBzNeKxA,752
132
+ ex4nicegui/reactive/systems/reactive_system.py,sha256=EYDshl4UR9VheNcxcNHc231Dwko9VudilfMIxCD_uOk,685
128
133
  ex4nicegui/reactive/transitionGroup.js,sha256=rbfNU3Jrz9WFDQih3BgZOgC1MBr6j9cODZ9XggMAaTs,898
129
134
  ex4nicegui/reactive/transitionGroup.py,sha256=VWyYL3QUfX6YQXuxwBFF4sJ4P5VP1S-bCjLKUr28KEY,597
130
- ex4nicegui/reactive/UseDraggable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
135
  ex4nicegui/reactive/UseDraggable/UseDraggable.js,sha256=xZm_g_L2lamxAjiAeGPDR0CNmjlvgzuiJ6gH77pNrg4,5473
132
136
  ex4nicegui/reactive/UseDraggable/UseDraggable.py,sha256=Zh6NfQPSf3nMvCL8wDA4tjhyH7jfqt9cnbJ7L4cI-SU,3929
133
- ex4nicegui/reactive/useMouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
137
  ex4nicegui/reactive/useMouse/UseMouse.js,sha256=6FjcYozJK5zFwK1kBP8JlfMyTUwKVK3k_0wSdhapaZs,2722
135
- ex4nicegui/reactive/useMouse/UseMouse.py,sha256=zP0rzJmG-LCCzAT2pGFgX0l1may-syZL05gpbDKCnKE,2122
136
- ex4nicegui/reactive/usePagination.py,sha256=Gop9KV780DcQK5bH4zQZ5sRpV3jOD2sRX_Bpmb1LTFI,2598
137
- ex4nicegui/reactive/utils.py,sha256=DZ77y0qQAeHUb52yyCKlLE5_3MQlE_OAUH_M1s31_Qg,4360
138
+ ex4nicegui/reactive/useMouse/UseMouse.py,sha256=cFNlso7_BneyAfGmWbl-N9vQwGleV2ArsqdRBv_yS6Y,2126
139
+ ex4nicegui/reactive/usePagination.py,sha256=8YLqcZ_ecuX0FdQ0ct-XdEFfMAVkubAS_K02YOhg5oo,2584
138
140
  ex4nicegui/reactive/vfor.js,sha256=xtKVUPSN0BP99H0BO6LRUYFqxqTGIRttQh5UjoUTwBc,282
139
- ex4nicegui/reactive/vfor.py,sha256=LntYIilx3JoeGjplRKLgW9cxzX9uRw27n6YRF9ROxN8,5778
140
- ex4nicegui/reactive/vmodel.py,sha256=SgmchPVfM6uQAH60VlVyNobfuTg3ScuxlXNFJLRD-r8,5091
141
+ ex4nicegui/reactive/vfor.py,sha256=dBTxoXiR7lZMWp5dMQSLPhzTqRGeY7MnJPAVFEIXINg,5765
142
+ ex4nicegui/reactive/vmodel.py,sha256=cKfclpvUvQf_UYGLSYWOJVOJP2iPu8KvE7p6D-ZAHOg,5126
141
143
  ex4nicegui/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
144
  ex4nicegui/tools/debug.py,sha256=h9iYHxw7jWWvmiExSpGi2hQl1PfhPZgC2KNS_GTuHSw,4868
143
145
  ex4nicegui/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -146,9 +148,13 @@ ex4nicegui/utils/asyncComputed.py,sha256=-v19ic20URewLkjbms5Teco1k8LPRnpP7usjrgo
146
148
  ex4nicegui/utils/clientScope.py,sha256=AM5GQLXSIrLALnzz72ZmplykhKVhRjRxQdHdAeR7g7k,1719
147
149
  ex4nicegui/utils/common.py,sha256=7P0vboDadLun6EMxNi3br9rKJgKt0QT4sy_66cHEwb4,994
148
150
  ex4nicegui/utils/effect.py,sha256=MgvWuAP3OFs2bR4ef6uXPwGCkKORUK-4hmx1oSwl04Y,2310
151
+ ex4nicegui/utils/refComputed.py,sha256=Vb7fyi0wNieFeLfCjXl6wSzpws3i6_aeCka1s9dsc8E,4232
152
+ ex4nicegui/utils/refWrapper.py,sha256=gX5sdfC1P4UXmMYM6FwdImfLD39y02kq7Af6dIMDrZ8,1472
149
153
  ex4nicegui/utils/scheduler.py,sha256=Wa963Df3UDvWHjXXoVYGIBevIILzCFoz-yAWjvxeyfQ,1218
150
- ex4nicegui/utils/signals.py,sha256=-80iaAzIyUDR_7LBr8TfOY59Fj4dSq92klWXoRy538g,11346
151
- ex4nicegui-0.6.7.dist-info/LICENSE,sha256=0KDDElS2dl-HIsWvbpy8ywbLzJMBFzXLev57LnMIZXs,1094
152
- ex4nicegui-0.6.7.dist-info/METADATA,sha256=MFp1hkfnG33D8SqIPWaymBAu3hukhHaWp_xyA5ahTFs,28517
153
- ex4nicegui-0.6.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
154
- ex4nicegui-0.6.7.dist-info/RECORD,,
154
+ ex4nicegui/utils/signals.py,sha256=t21k-XUjQpX0UlW_diyzx_OxNN1Al-kNqk4u8Wx0L14,7024
155
+ ex4nicegui/utils/types.py,sha256=pE5WOSbcTHxaAhnT24FaZEd1B2Z_lTcsd46w0OKiMyc,359
156
+ ex4nicegui/version.py,sha256=NE7u1piESstg3xCtf5hhV4iedGs2qJQw9SiC3ZSpiio,90
157
+ ex4nicegui-0.6.8.dist-info/LICENSE,sha256=0KDDElS2dl-HIsWvbpy8ywbLzJMBFzXLev57LnMIZXs,1094
158
+ ex4nicegui-0.6.8.dist-info/METADATA,sha256=NK_zTEIdCukO1X2BGBtmWUEb-DBzsnkU2roJLU7P73Q,29500
159
+ ex4nicegui-0.6.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
160
+ ex4nicegui-0.6.8.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
@@ -1 +0,0 @@
1
-
@@ -1,11 +0,0 @@
1
- from typing import (
2
- Dict,
3
- )
4
-
5
- from ex4nicegui.utils.signals import (
6
- to_value,
7
- )
8
-
9
-
10
- def _convert_kws_ref2value(kws: Dict) -> Dict:
11
- return {key: to_value(value) for key, value in kws.items()}
File without changes