ex4nicegui 0.5.1__py3-none-any.whl → 0.5.3__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 (43) hide show
  1. ex4nicegui/__init__.py +3 -6
  2. ex4nicegui/bi/dataSourceFacade.py +16 -61
  3. ex4nicegui/bi/elements/text.py +1 -1
  4. ex4nicegui/bi/elements/ui_aggrid.py +2 -2
  5. ex4nicegui/bi/elements/ui_echarts.py +3 -3
  6. ex4nicegui/bi/elements/ui_slider.py +1 -1
  7. ex4nicegui/bi/elements/ui_table.py +2 -2
  8. ex4nicegui/bi/protocols.py +0 -1
  9. ex4nicegui/bi/types.py +0 -1
  10. ex4nicegui/experimental_/__init__.py +4 -0
  11. ex4nicegui/experimental_/gridLayout/__init__.py +7 -0
  12. ex4nicegui/gsap/__init__.py +11 -0
  13. ex4nicegui/gsap/timeline.js +56 -0
  14. ex4nicegui/gsap/timeline.py +78 -0
  15. ex4nicegui/layout/__init__.py +13 -2
  16. ex4nicegui/layout/gridFlex/__init__.py +1 -1
  17. ex4nicegui/layout/gridFlex/gridFlex.py +1 -3
  18. ex4nicegui/layout/rxFlex/__init__.py +0 -1
  19. ex4nicegui/layout/rxFlex/index.py +16 -6
  20. ex4nicegui/reactive/__init__.py +57 -2
  21. ex4nicegui/reactive/fileWatcher.py +1 -1
  22. ex4nicegui/reactive/local_file_picker.py +1 -1
  23. ex4nicegui/reactive/officials/button.py +0 -1
  24. ex4nicegui/reactive/officials/circular_progress.py +64 -0
  25. ex4nicegui/reactive/officials/column.py +19 -4
  26. ex4nicegui/reactive/officials/html.py +1 -1
  27. ex4nicegui/reactive/officials/knob.py +75 -0
  28. ex4nicegui/reactive/officials/label.py +0 -1
  29. ex4nicegui/reactive/officials/number.py +1 -2
  30. ex4nicegui/reactive/officials/row.py +18 -4
  31. ex4nicegui/reactive/q_pagination.py +33 -29
  32. ex4nicegui/reactive/usePagination.py +6 -4
  33. ex4nicegui/reactive/utils.py +42 -3
  34. ex4nicegui/reactive/vfor.py +19 -39
  35. ex4nicegui/reactive/vmodel.py +210 -0
  36. ex4nicegui/tools/__init__.py +0 -1
  37. ex4nicegui/tools/debug.py +1 -1
  38. ex4nicegui/utils/signals.py +12 -2
  39. {ex4nicegui-0.5.1.dist-info → ex4nicegui-0.5.3.dist-info}/METADATA +60 -34
  40. {ex4nicegui-0.5.1.dist-info → ex4nicegui-0.5.3.dist-info}/RECORD +43 -38
  41. {ex4nicegui-0.5.1.dist-info → ex4nicegui-0.5.3.dist-info}/LICENSE +0 -0
  42. {ex4nicegui-0.5.1.dist-info → ex4nicegui-0.5.3.dist-info}/WHEEL +0 -0
  43. {ex4nicegui-0.5.1.dist-info → ex4nicegui-0.5.3.dist-info}/top_level.txt +0 -0
@@ -3,6 +3,7 @@ from functools import partial
3
3
  import types
4
4
  from weakref import WeakValueDictionary
5
5
  import signe
6
+ from signe.core.protocols import ComputedResultProtocol
6
7
  from .clientScope import _CLIENT_SCOPE_MANAGER
7
8
  from typing import (
8
9
  Any,
@@ -20,23 +21,27 @@ from typing import (
20
21
  from nicegui import ui
21
22
  from .effect import effect
22
23
  from .scheduler import get_uiScheduler
24
+ import warnings
23
25
 
24
26
  T = TypeVar("T")
25
27
 
26
28
 
27
- TReadonlyRef = signe.TGetterSignal[T]
29
+ TReadonlyRef = ComputedResultProtocol[T]
28
30
  ReadonlyRef = TReadonlyRef[T]
29
31
  DescReadonlyRef = TReadonlyRef[T]
30
32
 
31
33
  TGetterOrReadonlyRef = signe.TGetter[T]
32
34
 
33
35
 
36
+ is_reactive = signe.is_reactive
37
+
38
+
34
39
  def reactive(obj: T) -> T:
35
40
  return signe.reactive(obj, get_uiScheduler())
36
41
 
37
42
 
38
43
  class RefWrapper(Generic[T]):
39
- __slot__ = ("_getter_fn", "_setter_fn")
44
+ __slot__ = ("_getter_fn", "_setter_fn", "")
40
45
 
41
46
  def __init__(
42
47
  self,
@@ -57,12 +62,17 @@ class RefWrapper(Generic[T]):
57
62
  self._getter_fn = lambda: getter_or_ref
58
63
  self._setter_fn = lambda x: None
59
64
 
65
+ self._is_readonly = False
66
+
60
67
  @property
61
68
  def value(self) -> T:
62
69
  return cast(T, self._getter_fn())
63
70
 
64
71
  @value.setter
65
72
  def value(self, new_value: T):
73
+ if self._is_readonly:
74
+ warnings.warn("readonly ref cannot be assigned.")
75
+ return
66
76
  return self._setter_fn(new_value)
67
77
 
68
78
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ex4nicegui
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Extension library based on nicegui, providing data responsive,BI functionality modules
5
5
  Home-page:
6
6
  Author: carson_jia
@@ -14,9 +14,10 @@ Classifier: Programming Language :: Python :: 3.8
14
14
  Requires-Python: >=3.8
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: signe (>=0.4.8)
17
+ Requires-Dist: signe (>=0.4.9)
18
18
  Requires-Dist: nicegui (>=1.4.0)
19
19
  Requires-Dist: typing-extensions
20
+ Requires-Dist: executing
20
21
 
21
22
  # ex4nicegui
22
23
  [中文 README](./README.md)
@@ -35,6 +36,11 @@ An extension library for [nicegui](https://github.com/zauberzeug/nicegui). It ha
35
36
  pip install ex4nicegui -U
36
37
  ```
37
38
 
39
+ ## examples
40
+ - [basic](./examples/basic/)
41
+ - [todo list mvc](./examples/todomvc/)
42
+
43
+
38
44
  ## 🦄 Usage
39
45
 
40
46
  ```python
@@ -384,16 +390,58 @@ ui.button("change b", on_click=change_b)
384
390
 
385
391
  ---
386
392
 
393
+ ## functionality
394
+
395
+ ### vmodel
396
+ Create two-way bindings on form input elements or components.
397
+
398
+ Bidirectional bindings are supported by default for `ref` simple value types
399
+ ```python
400
+ from ex4nicegui import rxui, to_ref, deep_ref
401
+
402
+ data = to_ref("init")
403
+
404
+ rxui.label(lambda: f"{data.value=}")
405
+ # two-way binding
406
+ rxui.input(value=data)
407
+ ```
408
+ - Simple value types are generally immutable values such as `str`, `int`, etc.
409
+
410
+ When using complex data structures, `deep_ref` is used to keep nested values responsive.
411
+ ```python
412
+ data = deep_ref({"a": 1, "b": [1, 2, 3, 4]})
413
+
414
+ rxui.label(lambda: f"{data.value=!s}")
415
+
416
+ # No binding effect
417
+ rxui.input(value=data.value["a"])
418
+
419
+ # readonly binding
420
+ rxui.input(value=lambda: data.value["a"])
421
+
422
+ # two-way binding
423
+ rxui.input(value=rxui.vmodel(data.value["a"]))
424
+ ```
425
+
426
+ - The first input box will be completely unresponsive because the code is equivalent to passing in a value `1` directly
427
+ - The second input box will get read responsiveness due to the use of a function.
428
+ - The third input box, wrapped in `rxui.vmodel`, can be bi-directionally bound.
429
+
430
+ Most use `vmodel` with `vfor`, see [todo list examples](./examples/todomvc/)
431
+
432
+ ---
433
+
387
434
  ### vfor
388
435
  Render list components based on list responsive data. Each component is updated on demand. Data items support dictionaries or objects of any type
389
436
 
390
437
  ```python
391
438
  from nicegui import ui
392
439
  from ex4nicegui.reactive import rxui
393
- from ex4nicegui import to_ref, ref_computed
440
+ from ex4nicegui import deep_ref, ref_computed
441
+ from typing import Dict
394
442
 
395
443
  # refs
396
- items = to_ref(
444
+ items = deep_ref(
397
445
  [
398
446
  {"id": 1, "message": "foo", "done": False},
399
447
  {"id": 2, "message": "bar", "done": True},
@@ -409,7 +457,6 @@ def done_count_info():
409
457
  def check():
410
458
  for item in items.value:
411
459
  item["done"] = not item["done"]
412
- items.value = items.value
413
460
 
414
461
 
415
462
  # ui
@@ -418,54 +465,33 @@ ui.button("check", on_click=check)
418
465
 
419
466
 
420
467
  @rxui.vfor(items,key='id')
421
- def _(store: rxui.VforStore):
468
+ def _(store: rxui.VforStore[Dict]):
422
469
  # function to build the interface for each row of data
423
- msg_ref = store.get("message") # Get responsive object with `store.get`
470
+ item = store.get() # Get responsive object with `store.get`
471
+ mes = rxui.vmodel(item.value['message'])
424
472
 
425
473
  # Enter the content of the input box,
426
474
  # you can see the title of the radio box changes synchronously
427
475
  with ui.card():
428
- rxui.input(value=msg_ref)
429
- rxui.checkbox(text=msg_ref, value=store.get("done"))
476
+ with ui.row():
477
+ rxui.input(value=mes)
478
+ rxui.label(lambda: f"{mes.value=!s}")
479
+ rxui.checkbox(text=mes, value=rxui.vmodel(item.value['done']))
430
480
 
431
481
  ```
432
482
 
433
483
  - `rxui.vfor` decorator to custom function
434
484
  - The first argument is passed to the responsive list. Each item in the list can be a dictionary or other object (`dataclasses` etc.)
435
485
  - Second parameter `key`: In order to be able to keep track of the identity of each node, and thus reuse and reorder existing elements, you can provide a unique key for the block corresponding to each element. The default(`None`) is to use the list element index.
436
- - The custom function takes one argument. The current row's attribute can be retrieved via `store.get`, which is a responsive object.
486
+ - The custom function takes one argument. The current row's can be retrieved via `store.get`, which is a responsive object.
437
487
 
438
488
 
439
489
  > vfor are created only when new data is added.
440
490
 
441
- In the above example, you'll notice that when the checkbox is clicked, the text of the number of completed counts (`done_count_info`) doesn't change synchronously
442
-
443
- This is because responsive data changes in the `vfor` function do not affect the data source list. This is a restriction to prevent writing overly complex bi-directional data flow response logic.
444
-
445
- We should make changes to the data source list via events in the function
446
-
447
- ```python
448
- ...
449
-
450
- @rxui.vfor(items, key="id")
451
- def _(store: rxui.VforStore):
452
- msg_ref = store.get("message")
453
-
454
- def on_check_change(e):
455
- items.value[store.row_index]["done"] = e.value
456
- items.value = items.value
457
-
458
- with ui.card():
459
- rxui.input(value=msg_ref)
460
- rxui.checkbox(text=msg_ref, value=store.get("done"),on_change=on_check_change)
461
-
462
- ```
463
491
 
464
492
  ---
465
493
 
466
494
 
467
- ## functionality
468
-
469
495
  ### Bind class names
470
496
 
471
497
  All component classes provide `bind_classes` for binding `class`, supporting three different data structures.
@@ -1,37 +1,39 @@
1
- ex4nicegui/__init__.py,sha256=UOfnEwpxftXKiFQpIPQMbrUyHMrW49CWTp199kZIXIA,823
1
+ ex4nicegui/__init__.py,sha256=sbp4UdZz1sLg5LIpMSt87LwclMQb13_IDD9mewNPRuE,736
2
2
  ex4nicegui/bi/__init__.py,sha256=eu-2CuzzrcHCyKQOfoo87v6C9nSwFDdeLhjY0cRV13M,315
3
3
  ex4nicegui/bi/dataSource.py,sha256=sQzuQvNWBf20n9cz--1OX5gxT6RUAhwrq_xTQEpSa0o,7691
4
- ex4nicegui/bi/dataSourceFacade.py,sha256=W2i3gacEJhzClyRWuPSm9O4K-x---257vY9eO92gUyU,8757
4
+ ex4nicegui/bi/dataSourceFacade.py,sha256=6NuAyrTIk_L2Tz9IRFpuHKRQY_OwJINDzxoM6JYOc14,8186
5
5
  ex4nicegui/bi/index.py,sha256=ZuwFxUD1KcxBpKvTLO7CGQQ5gN7FDpaHo9tfAS3UpQ4,2067
6
- ex4nicegui/bi/protocols.py,sha256=EWODxokdWI1BtAgFm3iWVVRAgOlMEoXTmfT4g24HPU4,4566
7
- ex4nicegui/bi/types.py,sha256=9aX-ChGUi6HVKNdFeBnSxW2j2D98wF-WSoD6RFv8778,389
6
+ ex4nicegui/bi/protocols.py,sha256=SjwYrS21L6dcNfYrLvh5pESya0NIa6ihQ6URMU6z-6Q,4529
7
+ ex4nicegui/bi/types.py,sha256=PGPUXr17iRmxxYHxHKJSdxp5CdAkHWb2_9nJ1GwYRlc,355
8
8
  ex4nicegui/bi/elements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  ex4nicegui/bi/elements/containers.py,sha256=5a9ZkzyVNLnK7DftDYdbVRo0bQFvuMHRI9LBGR__YuI,358
10
10
  ex4nicegui/bi/elements/layouts.py,sha256=teb0Vp-fgsByBNPTiW73kXEu2JponRRj4QQanaalcA0,898
11
11
  ex4nicegui/bi/elements/models.py,sha256=YfQlW1n9sNRHT2nBfA07n_1xqwJ7GfJCmXxgDYtbzSc,1534
12
- ex4nicegui/bi/elements/text.py,sha256=5TNyTPyFFEWRPb0zqPLb5MrKEaJRfokN47z7weif_Yc,815
13
- ex4nicegui/bi/elements/ui_aggrid.py,sha256=vvXYrUpGbhrj3NSDQqEGv5sk67K8a671HrTrkrTO35A,2021
12
+ ex4nicegui/bi/elements/text.py,sha256=oX7S1cVQL6YGMOlQG_cdwK9duzOHCPG0lOi9qTZwo6s,808
13
+ ex4nicegui/bi/elements/ui_aggrid.py,sha256=Lbtcmu_GR5_metQ9p8a2bzYSXsgElOZRMGl1h0fqcFU,2009
14
14
  ex4nicegui/bi/elements/ui_date_picker.js,sha256=Tk6NACKVsCnqhWZtuNA6Xt2e-AWI54AnjfHPIldaM5A,852
15
15
  ex4nicegui/bi/elements/ui_date_picker.py,sha256=PGv8gsgc4hkvWa-EN19qznEllV7DAzz7v4aTwdx9do4,2260
16
- ex4nicegui/bi/elements/ui_echarts.py,sha256=Cr3KPVy1DHvrRZRs6qxN5enRgnc1sUYhld9zoMuNf2A,2305
16
+ ex4nicegui/bi/elements/ui_echarts.py,sha256=o_wIqxyrU27UvTSIRp6_58nQSic9llh1CuHI9QcRMOc,2302
17
17
  ex4nicegui/bi/elements/ui_radio.py,sha256=tIoBZVhoY-z3dhGxh2pYENuxVnwkHhZB5g4_a5QPMRE,5447
18
18
  ex4nicegui/bi/elements/ui_range.py,sha256=1tnka-a0jVfqTwvypKIRgHb6EzYGn3DmsWr3yvSVD-g,4128
19
19
  ex4nicegui/bi/elements/ui_select.py,sha256=yOab3YrHCZ5kkU3bmDdr-LIAMhOunUsCbtctR8WpnLI,3872
20
- ex4nicegui/bi/elements/ui_slider.py,sha256=rgLIKTKXIuDucVaX4AH-Jm7Ir-9uKsxcub4Am1Y419I,2151
21
- ex4nicegui/bi/elements/ui_table.py,sha256=x1BHexjsH7UNAY4SRsFSYK9R_c46z_CeEvIOmLt8Frc,1822
22
- ex4nicegui/experimental_/__init__.py,sha256=LSDd_U6eQ9g9St9kC4daau3MFGlVCRHGZJC4E0JRH34,36
23
- ex4nicegui/experimental_/gridLayout/__init__.py,sha256=48y_Pm0xxgC_PRnixQB5R_5rPL4FuyeoeOao_W7pm7A,49
20
+ ex4nicegui/bi/elements/ui_slider.py,sha256=-b1k3i1v8Z9WIwRaI0PJoYxR3Nbq1GUEyjmQnq9jIeo,2165
21
+ ex4nicegui/bi/elements/ui_table.py,sha256=aKL26xbiCIQG_-KFEozXjbB4G88FdOK25k2H0k24bys,1810
22
+ ex4nicegui/experimental_/__init__.py,sha256=HODL0f70HUzVrfRwUzdCwxTp_9mYr4D1nnzd8jevlMw,69
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=7sYXB-tGtRF7UJU1H9zhxLtbX7QB5M50RWZ4o3jezOQ,60
25
+ ex4nicegui/gsap/__init__.py,sha256=xBApQlq9st9exhgcSkqCzWeS6bc1eKiPJfYP25MSInw,218
26
26
  ex4nicegui/gsap/gsap.py,sha256=-1sncG2_37LYN6RosnHZAgYSI899HMj9FB6MQWUj8yw,4675
27
+ ex4nicegui/gsap/timeline.js,sha256=CB300drH7UUSfy_WDeuWHSNh3WX-vwbRtKBLL1Ak43o,1241
28
+ ex4nicegui/gsap/timeline.py,sha256=B3CvN83CzJMMFMVdZZC2UHR0l_I90amRQ0Sf-P623zo,2421
27
29
  ex4nicegui/gsap/wrapGsap.js,sha256=0Iz7qh8aA-h3svV7fW4U5k_pX7zXCcIdHDaG7NNvgLU,1045
28
- ex4nicegui/layout/__init__.py,sha256=yYkdH0bC1nxIDr_OtvyTqR_yXkwnY5DmelaQOIwwjas,48
30
+ ex4nicegui/layout/__init__.py,sha256=YT76Ec7p4aFOGms6wc19207flBeyI6jrq7Kg_FQ2wnQ,278
29
31
  ex4nicegui/layout/gridFlex/GridFlex.js,sha256=ljkxGFucBUIPksMAT5w_35sxGogC7OzxzXnOw21Z3_k,4468
30
- ex4nicegui/layout/gridFlex/__init__.py,sha256=98dcrOEROibl5fnzIj644CnELbUvYTid702IjhLdpfs,79
31
- ex4nicegui/layout/gridFlex/gridFlex.py,sha256=ALZyBI1r9u3wj82vbnD4YKDy15OpCdtT3EwYJgGpD8k,7253
32
+ ex4nicegui/layout/gridFlex/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
33
+ ex4nicegui/layout/gridFlex/gridFlex.py,sha256=pSLaKOiAzKAt_ih2TRe0E8SKrwJVyaTtdnsiWcy--Mk,7194
32
34
  ex4nicegui/layout/gridFlex/utils.py,sha256=hBuusveBRaHSubIr2q38AP033-VtXDFE_fDzZtg4h44,1236
33
- ex4nicegui/layout/rxFlex/__init__.py,sha256=dllXV6cri1oOZkOCGJpI9AlUjIZ3oB99ckLIYRW8faM,38
34
- ex4nicegui/layout/rxFlex/index.py,sha256=XeAsxfy35RJBE2g2WGzKgskf43K4We0d2mBzWb0kbB8,3509
35
+ ex4nicegui/layout/rxFlex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ ex4nicegui/layout/rxFlex/index.py,sha256=4tuMu0mYCvx8txxbavmujIwoqAtt-Moqcb0E2jYxh18,3672
35
37
  ex4nicegui/layout/rxFlex/types.py,sha256=OQBo3kkmtXhMo3BDI0GjX36HPJLDV1Cm67hPZGb1k2Q,1411
36
38
  ex4nicegui/libs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
39
  ex4nicegui/libs/d3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -64,15 +66,16 @@ ex4nicegui/libs/gsap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
64
66
  ex4nicegui/libs/gsap/utils/matrix.js,sha256=77scrxbQZXx4ex5HkvnT9IkhMG1rQoDNp4TSYgUeYVk,15235
65
67
  ex4nicegui/libs/gsap/utils/paths.js,sha256=2SPaRHQ7zgba9cH8hGhkTYPCZdrrEhE2qhh6ECAEvSA,49314
66
68
  ex4nicegui/libs/gsap/utils/strings.js,sha256=47G9slz5ltG9mDSwrfQDtWzzdV5QJ-AIMLRMNK0VSiM,10472
67
- ex4nicegui/reactive/__init__.py,sha256=-mioyA2ZwfIbJXTO3WR_1X8rDoi6hJJhDAKM71oAZs8,2352
68
- ex4nicegui/reactive/fileWatcher.py,sha256=elocr0CKrdqxhrtAwgw8qaomdL0tSPIHtJHvRs1vi-I,1477
69
- ex4nicegui/reactive/local_file_picker.py,sha256=PG0Vb7PBMaCMeMJ16TPHjjX30AxMMGE6i8wWzYLbyrE,6182
70
- ex4nicegui/reactive/q_pagination.py,sha256=wWB_RCHHZfycu0BgEUELUPFHgQUkRzfOlOoQF64_AKE,1122
69
+ ex4nicegui/reactive/__init__.py,sha256=osdHgTwRTI2jOjHtbOpMjdQlvGiJW-1vaqcPPLhzbdQ,3339
70
+ ex4nicegui/reactive/fileWatcher.py,sha256=gjeZhgar02f-qGQa47Tj5SMaCP_ftRtSU898XUmXl1U,1472
71
+ ex4nicegui/reactive/local_file_picker.py,sha256=6kh7pW4RZk1gqYjxkOvTfJ-2T_KwZznr8AekcZoxthw,6171
72
+ ex4nicegui/reactive/q_pagination.py,sha256=WcSYpB75NH3lffw3HXwZRcvnh0l6EA1Eqp5bcJKIJaw,1505
71
73
  ex4nicegui/reactive/rxui.py,sha256=gZ8ZEjGuJFKcedEZhcm4PIZguNkY-Wv5yQx80QnsBKI,31
72
- ex4nicegui/reactive/usePagination.py,sha256=NQIqHq2eW4_hWb3azIbzVca5vL3WJBzC_iJOkBS6b94,2546
73
- ex4nicegui/reactive/utils.py,sha256=-8QQ_o1yZO98du_SEfFCr57ReaaTj6jTyRHSFMluM4w,2518
74
+ ex4nicegui/reactive/usePagination.py,sha256=Gop9KV780DcQK5bH4zQZ5sRpV3jOD2sRX_Bpmb1LTFI,2598
75
+ ex4nicegui/reactive/utils.py,sha256=GSk_eUH-iNUi18Tg7MsBVnMK5basgX6EQgbSD1zxsZw,3315
74
76
  ex4nicegui/reactive/vfor.js,sha256=OmpeLZdjV_GiG5HdglMXGBKpgrKYh3UIeugpszAVdWw,52
75
- ex4nicegui/reactive/vfor.py,sha256=UnOsarN-sY7xKn-R5BXvVZyxTQLBv6RKR0HpVzVry24,6127
77
+ ex4nicegui/reactive/vfor.py,sha256=hyvbmMJtC8usSYeq023bCL8kOrmnFw09YOS_r6GWBzk,5495
78
+ ex4nicegui/reactive/vmodel.py,sha256=FH1rXjbzD6r0MeFdf-3GDvz8JJ_qgmI7rTo8itw_StY,5147
76
79
  ex4nicegui/reactive/EChartsComponent/ECharts.js,sha256=HMmgXlDl548H4JpozDSbLWv-opvPi3OdJz_XY_MHbnY,3326
77
80
  ex4nicegui/reactive/EChartsComponent/ECharts.py,sha256=hoUZ7h-KOUKNd-1BybSX4xxv33gYuTkky70yEzv-oIA,6344
78
81
  ex4nicegui/reactive/EChartsComponent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -88,26 +91,28 @@ ex4nicegui/reactive/mermaid/mermaid.py,sha256=uP321QiNj_S5E5I2KF9h03WlSFdRITE8tv
88
91
  ex4nicegui/reactive/officials/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
89
92
  ex4nicegui/reactive/officials/aggrid.py,sha256=2HL2eS23jez8zA_N7ph76XqNflwXnwxBt8CR1ycTB2M,2787
90
93
  ex4nicegui/reactive/officials/base.py,sha256=1d6ePyz4ZiOsZYLKtCr04Aw4_9YyYl2HpCN8PpRJis4,10325
91
- ex4nicegui/reactive/officials/button.py,sha256=ZdmYfT0EjZ14o_Z37f8pWiJncq8QP1Ix8Gq3dwKk2tY,1710
94
+ ex4nicegui/reactive/officials/button.py,sha256=12FZ2cQGFsTsivSHT9YfDD_wP_D4xrpHHfKmVNNKLJE,1660
92
95
  ex4nicegui/reactive/officials/card.py,sha256=8-tBwm3xfVybolQ87i8lAYUpBV6FdaVdeSH6xu0736U,1275
93
96
  ex4nicegui/reactive/officials/checkbox.py,sha256=BcSbWuMTA2UgwOeuBTtpvzqdOivb2xbkLazfGqwuboo,1562
97
+ ex4nicegui/reactive/officials/circular_progress.py,sha256=BVLjCJtEcwa2pqGZ4nC-w-8FlkTS5IuqlL_tY6xOXNY,1787
94
98
  ex4nicegui/reactive/officials/color_picker.py,sha256=fSRICdzdH16w3BIGyAk3CtaauYqpPfUHCRc2kq-w-ZA,3402
95
- ex4nicegui/reactive/officials/column.py,sha256=3RLvVKNaDtOb8df4uS3xRfwJJPuH1ndXk_Y4Gry0Tjo,413
99
+ ex4nicegui/reactive/officials/column.py,sha256=CfoJigEdpRoGaJTY_O7wbK8cp8ufX8mYUKNRUnPWUr0,1040
96
100
  ex4nicegui/reactive/officials/date.py,sha256=jp75WgZaICnCHLS_wpF3uJI2kaGeNqmRLj3qpn5IIyg,2681
97
101
  ex4nicegui/reactive/officials/drawer.py,sha256=y9_gbDDy_6Y7mRfSB8BGawM-_g6kECM1ieZXMX2YCQo,2370
98
102
  ex4nicegui/reactive/officials/echarts.py,sha256=rBYHL6K_uAp4A4r_qacXt_bFukOMPWxdN_9xjEXG4RY,9683
99
103
  ex4nicegui/reactive/officials/expansion.py,sha256=pAFGaj_N88KLNPw2476lthyZbCOa3APlMtHsgRT9rWI,1873
100
104
  ex4nicegui/reactive/officials/grid.py,sha256=z3mdvDnpxKECtvioTgGXROc1kcAugNCBOvwZ7NCpQHI,865
101
105
  ex4nicegui/reactive/officials/html.js,sha256=lyvRAdMKZGOc7MPEapeU6WbOzq_MVzqzUJEhKuC8zWc,119
102
- ex4nicegui/reactive/officials/html.py,sha256=6U0EJHYgCbFz7tQ_iewfmSnfwsabGTGUAM1vXvfJABQ,688
106
+ ex4nicegui/reactive/officials/html.py,sha256=yasDeGMJyyGmCpJoiwmG-QszfLSOsHLYWShWXXbSlH0,675
103
107
  ex4nicegui/reactive/officials/icon.py,sha256=L0yHo4Ute7PNJw2R2vn8PJGhIjreqeoZnS4p6tijmg0,1559
104
108
  ex4nicegui/reactive/officials/image.py,sha256=qtdtrjZ2OPF1mmtrL-RSgH3hNcXbRdwH9oD-RyFYVJM,1120
105
109
  ex4nicegui/reactive/officials/input.py,sha256=d338LH7tYArhUQYXJleytIOXsDieXEm4yLxOrjRbxLM,4030
106
- ex4nicegui/reactive/officials/label.py,sha256=WpKmQY76TOPgsFSOBRjCk0SRaApBt8TKVpmnwxYRzUw,1448
110
+ ex4nicegui/reactive/officials/knob.py,sha256=ZCKXUbFQUhdsRoTADk2gqdEwmi1CeW9Jmc7AGJyV1Yg,2153
111
+ ex4nicegui/reactive/officials/label.py,sha256=7xhvQIa-3Zm44xJIoKeMys1M6d6AMJTeE5l9THPICGo,1398
107
112
  ex4nicegui/reactive/officials/linear_progress.py,sha256=3ew4uqUIDrDH0PdX42K7rnKQL4khmZgxmJfmWX6qMDs,2128
108
- ex4nicegui/reactive/officials/number.py,sha256=DUb9mQy2KpVLKkdIOXqNHRz30WA48wWVip4zC_OXADQ,2216
113
+ ex4nicegui/reactive/officials/number.py,sha256=Ro20LiSjzeLkcPM5oIe3phulLH5Gsw3YwYBCyRl9bqI,2201
109
114
  ex4nicegui/reactive/officials/radio.py,sha256=35KCAE0JhzBczaCGrlufZystgpzljobOoIw1H7js1KA,1929
110
- ex4nicegui/reactive/officials/row.py,sha256=ZBPITfHbJmAdAWuIZFl2H1XFS9pJam57PJ_zDZWhueE,404
115
+ ex4nicegui/reactive/officials/row.py,sha256=pwFJBdv3_D5-E-oga-OG5t57ahHcYXGSI_-UofWg_j0,1029
111
116
  ex4nicegui/reactive/officials/select.py,sha256=Fj4V96ju2tpsP1ok0RFokN1K7TxzNS9YLVCz55O788Y,2980
112
117
  ex4nicegui/reactive/officials/slider.py,sha256=6E6UeyX_hXIDz_-0v6WEIfTM5oqzukonRyqDRJHT-PA,2954
113
118
  ex4nicegui/reactive/officials/switch.py,sha256=-QDXbOQllnWRE28pAH74qrgpN1TXs-1snLDqN6pdiVM,1605
@@ -118,17 +123,17 @@ ex4nicegui/reactive/officials/utils.py,sha256=-fnRjyb4Yx7_6jmVeQIZKXFRNV3BWbI7JR
118
123
  ex4nicegui/reactive/useMouse/UseMouse.js,sha256=6FjcYozJK5zFwK1kBP8JlfMyTUwKVK3k_0wSdhapaZs,2722
119
124
  ex4nicegui/reactive/useMouse/UseMouse.py,sha256=zP0rzJmG-LCCzAT2pGFgX0l1may-syZL05gpbDKCnKE,2122
120
125
  ex4nicegui/reactive/useMouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- ex4nicegui/tools/__init__.py,sha256=Ue6ATQC9BuQlJEcs2JnuFXZh4DYh9twKc4F7zpIPhjE,40
122
- ex4nicegui/tools/debug.py,sha256=HCKlVzhHx5av-983ADgwgMkScKwTreSluLA7uikGYa0,4887
126
+ ex4nicegui/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
+ ex4nicegui/tools/debug.py,sha256=h9iYHxw7jWWvmiExSpGi2hQl1PfhPZgC2KNS_GTuHSw,4868
123
128
  ex4nicegui/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
129
  ex4nicegui/utils/apiEffect.py,sha256=tAvQ-6sbSbZBZ1bibdAdQNb_BjrUF1uALwOkAdV_Y8M,2527
125
130
  ex4nicegui/utils/clientScope.py,sha256=-KJnrZGqdAQUNNbQbqMAqNzWHCVon-lC3aaQGuaTdxI,1225
126
131
  ex4nicegui/utils/common.py,sha256=7P0vboDadLun6EMxNi3br9rKJgKt0QT4sy_66cHEwb4,994
127
132
  ex4nicegui/utils/effect.py,sha256=MgvWuAP3OFs2bR4ef6uXPwGCkKORUK-4hmx1oSwl04Y,2310
128
133
  ex4nicegui/utils/scheduler.py,sha256=Wa963Df3UDvWHjXXoVYGIBevIILzCFoz-yAWjvxeyfQ,1218
129
- ex4nicegui/utils/signals.py,sha256=nzjw0uy9fnUUc4aol1dzweH3F4uGhNSZspW1iTZ-TBw,10924
130
- ex4nicegui-0.5.1.dist-info/LICENSE,sha256=0KDDElS2dl-HIsWvbpy8ywbLzJMBFzXLev57LnMIZXs,1094
131
- ex4nicegui-0.5.1.dist-info/METADATA,sha256=X9x8ZWv8lmtE1WIqniR5B0Uz1DQt5GG_MNWX4XA0s80,25953
132
- ex4nicegui-0.5.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
133
- ex4nicegui-0.5.1.dist-info/top_level.txt,sha256=VFwMiO9AFjj5rfLMJwN1ipLRASk9fJXB8tM6DNrpvPQ,11
134
- ex4nicegui-0.5.1.dist-info/RECORD,,
134
+ ex4nicegui/utils/signals.py,sha256=Eruq0WUH-G7dpnfHZ2y9Uf-mS6L_RBVcsaqbK8FKfvE,11193
135
+ ex4nicegui-0.5.3.dist-info/LICENSE,sha256=0KDDElS2dl-HIsWvbpy8ywbLzJMBFzXLev57LnMIZXs,1094
136
+ ex4nicegui-0.5.3.dist-info/METADATA,sha256=hGb8ZKAD6yb90SRQ6tALuCBNwsGaPwbJFK6rGsWboG0,26519
137
+ ex4nicegui-0.5.3.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
138
+ ex4nicegui-0.5.3.dist-info/top_level.txt,sha256=VFwMiO9AFjj5rfLMJwN1ipLRASk9fJXB8tM6DNrpvPQ,11
139
+ ex4nicegui-0.5.3.dist-info/RECORD,,