ex4nicegui 0.1.7__tar.gz → 0.1.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/PKG-INFO +1 -1
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/__init__.py +1 -1
- {ex4nicegui-0.1.7/ex4nicegui/reactive/echarts → ex4nicegui-0.1.9/ex4nicegui/reactive/ECharts}/ECharts.py +4 -8
- {ex4nicegui-0.1.7/ex4nicegui/reactive/draggable → ex4nicegui-0.1.9/ex4nicegui/reactive/UseDraggable}/UseDraggable.js +1 -1
- {ex4nicegui-0.1.7/ex4nicegui/reactive/draggable → ex4nicegui-0.1.9/ex4nicegui/reactive/UseDraggable}/UseDraggable.py +6 -10
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/__index.py +4 -1
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/drawer.py +2 -2
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/local_file_picker.py +5 -5
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/officials.py +136 -29
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/q_pagination.py +2 -2
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/useMouse/UseMouse.py +22 -14
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/PKG-INFO +1 -1
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/SOURCES.txt +6 -6
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/requires.txt +1 -1
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/setup.py +2 -26
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/LICENSE +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/README.md +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/layout/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/layout/gridbox.py +0 -0
- {ex4nicegui-0.1.7/ex4nicegui/reactive/echarts → ex4nicegui-0.1.9/ex4nicegui/reactive/ECharts}/ECharts.js +0 -0
- {ex4nicegui-0.1.7/ex4nicegui/reactive/draggable → ex4nicegui-0.1.9/ex4nicegui/reactive/ECharts}/__init__.py +0 -0
- {ex4nicegui-0.1.7/ex4nicegui/reactive/echarts → ex4nicegui-0.1.9/ex4nicegui/reactive/UseDraggable}/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/rxui.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/useMouse/UseMouse.js +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/useMouse/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/reactive/usePagination.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/tools/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/tools/debug.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/utils/__init__.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/utils/common.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui/utils/signals.py +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/dependency_links.txt +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/not-zip-safe +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/ex4nicegui.egg-info/top_level.txt +0 -0
- {ex4nicegui-0.1.7 → ex4nicegui-0.1.9}/setup.cfg +0 -0
|
@@ -2,12 +2,9 @@ from typing import Any, Callable, Optional
|
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from nicegui.helpers import KWONLY_SLOTS
|
|
4
4
|
from nicegui.events import handle_event, EventArguments
|
|
5
|
-
from nicegui.dependencies import register_component
|
|
6
5
|
from nicegui.element import Element
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
register_component("ECharts", __file__, "ECharts.js")
|
|
10
|
-
|
|
11
8
|
_Chart_Click_Args = [
|
|
12
9
|
"componentType",
|
|
13
10
|
"seriesType",
|
|
@@ -36,9 +33,9 @@ class EChartsClickEventArguments(EventArguments):
|
|
|
36
33
|
color: str
|
|
37
34
|
|
|
38
35
|
|
|
39
|
-
class echarts(Element):
|
|
36
|
+
class echarts(Element, component="ECharts.js"):
|
|
40
37
|
def __init__(self, options: dict) -> None:
|
|
41
|
-
super().__init__(
|
|
38
|
+
super().__init__()
|
|
42
39
|
self._props["options"] = options
|
|
43
40
|
|
|
44
41
|
def update_options(self, options: dict, opts: Optional[dict] = None):
|
|
@@ -65,9 +62,8 @@ class echarts(Element):
|
|
|
65
62
|
def on_chart_click(
|
|
66
63
|
self, handler: Optional[Callable[[EChartsClickEventArguments], Any]]
|
|
67
64
|
):
|
|
68
|
-
def inner_handler(
|
|
69
|
-
args = args
|
|
70
|
-
print(args)
|
|
65
|
+
def inner_handler(e):
|
|
66
|
+
args = e.args
|
|
71
67
|
handle_event(
|
|
72
68
|
handler,
|
|
73
69
|
EChartsClickEventArguments(
|
|
@@ -139,7 +139,7 @@ const pe = /* @__PURE__ */ H({
|
|
|
139
139
|
setup(e, { emit: r }) {
|
|
140
140
|
const t = e;
|
|
141
141
|
return q(() => {
|
|
142
|
-
const o = document.getElementById(t.elementId), { x: a, y: c, style: g, isDragging: _ } = le(o, t.options);
|
|
142
|
+
const o = document.getElementById(`c${t.elementId}`), { x: a, y: c, style: g, isDragging: _ } = le(o, t.options);
|
|
143
143
|
h([a, c, g], ([l, f, i]) => {
|
|
144
144
|
r("update", { x: l, y: f, style: i });
|
|
145
145
|
}), h(_, (l) => {
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
from typing import Any, Callable, Optional
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
-
from nicegui import ui
|
|
4
3
|
from nicegui.helpers import KWONLY_SLOTS
|
|
5
4
|
from nicegui.events import handle_event, EventArguments
|
|
6
|
-
from nicegui.dependencies import register_component
|
|
7
5
|
from nicegui.element import Element
|
|
8
6
|
from signe import createSignal, effect, batch
|
|
9
7
|
from ex4nicegui.utils.signals import ref_from_signal
|
|
10
8
|
|
|
11
|
-
register_component("UseDraggable", __file__, "UseDraggable.js")
|
|
12
|
-
|
|
13
9
|
_Update_Args = [
|
|
14
10
|
"x",
|
|
15
11
|
"y",
|
|
@@ -33,9 +29,9 @@ def use_draggable(element: Element, init_x=0.0, init_y=0.0, auto_bind_style=True
|
|
|
33
29
|
return ud
|
|
34
30
|
|
|
35
31
|
|
|
36
|
-
class UseDraggable(Element):
|
|
32
|
+
class UseDraggable(Element, component="UseDraggable.js"):
|
|
37
33
|
def __init__(self, element: Element, init_x=0.0, init_y=0.0) -> None:
|
|
38
|
-
super().__init__(
|
|
34
|
+
super().__init__()
|
|
39
35
|
self._props["elementId"] = str(element.id)
|
|
40
36
|
self._props["options"] = {"initialValue": {"x": init_x, "y": init_y}}
|
|
41
37
|
|
|
@@ -53,8 +49,8 @@ class UseDraggable(Element):
|
|
|
53
49
|
|
|
54
50
|
self.on_update(update)
|
|
55
51
|
|
|
56
|
-
def on_isDraggingUpdate(
|
|
57
|
-
self.__isDragging_setter(args["
|
|
52
|
+
def on_isDraggingUpdate(e):
|
|
53
|
+
self.__isDragging_setter(e.args["isDragging"])
|
|
58
54
|
# print(args['args']['isDragging'])
|
|
59
55
|
|
|
60
56
|
self.on("isDraggingUpdate", on_isDraggingUpdate)
|
|
@@ -82,8 +78,8 @@ class UseDraggable(Element):
|
|
|
82
78
|
element.update()
|
|
83
79
|
|
|
84
80
|
def on_update(self, handler: Optional[Callable[..., Any]]):
|
|
85
|
-
def inner_handler(
|
|
86
|
-
args = args
|
|
81
|
+
def inner_handler(e):
|
|
82
|
+
args = e.args
|
|
87
83
|
handle_event(
|
|
88
84
|
handler,
|
|
89
85
|
UseDraggableUpdateEventArguments(
|
|
@@ -22,12 +22,15 @@ from .officials import (
|
|
|
22
22
|
SliderBindableUi as slider,
|
|
23
23
|
LazySliderBindableUi as lazy_slider,
|
|
24
24
|
HtmlBindableUi as html,
|
|
25
|
+
ImageBindableUi as image,
|
|
26
|
+
UploadBindableUi as upload,
|
|
27
|
+
UploadResult,
|
|
25
28
|
)
|
|
26
29
|
from .q_pagination import QPagination as q_pagination
|
|
27
30
|
from .local_file_picker import local_file_picker
|
|
28
31
|
from ex4nicegui.utils.signals import ref_computed
|
|
29
32
|
from signe import effect
|
|
30
|
-
from .
|
|
33
|
+
from .UseDraggable.UseDraggable import use_draggable
|
|
31
34
|
from .useMouse.UseMouse import use_mouse
|
|
32
35
|
from .drawer import drawer
|
|
33
36
|
from .usePagination import PaginationRef as use_pagination
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Callable, Optional, cast,List
|
|
1
|
+
from typing import Any, Callable, Optional, cast, List
|
|
2
2
|
from typing_extensions import Literal
|
|
3
3
|
from signe import createSignal, effect, computed
|
|
4
4
|
from nicegui import ui, Tailwind
|
|
@@ -155,8 +155,8 @@ def local_file_picker(
|
|
|
155
155
|
grid.style("width:50vw")
|
|
156
156
|
# grid.tailwind("w-96")
|
|
157
157
|
|
|
158
|
-
def dblClicked(
|
|
159
|
-
path = cur_dir() / Path(
|
|
158
|
+
def dblClicked(e):
|
|
159
|
+
path = cur_dir() / Path(e.args["data"]["名称"])
|
|
160
160
|
|
|
161
161
|
if path.is_dir():
|
|
162
162
|
set_cur_dir(path)
|
|
@@ -166,8 +166,8 @@ def local_file_picker(
|
|
|
166
166
|
set_result(str(path.absolute()))
|
|
167
167
|
dia.close()
|
|
168
168
|
|
|
169
|
-
def clicked(
|
|
170
|
-
path = cur_dir() / Path(
|
|
169
|
+
def clicked(e):
|
|
170
|
+
path = cur_dir() / Path(e.args["data"]["名称"])
|
|
171
171
|
|
|
172
172
|
if mode == "file" and path.is_dir():
|
|
173
173
|
return
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
import asyncio
|
|
3
|
+
from pathlib import Path
|
|
3
4
|
|
|
4
5
|
from typing import (
|
|
5
6
|
Any,
|
|
@@ -11,9 +12,8 @@ from typing import (
|
|
|
11
12
|
cast,
|
|
12
13
|
Dict,
|
|
13
14
|
Union,
|
|
14
|
-
overload,
|
|
15
15
|
)
|
|
16
|
-
from typing_extensions import Literal
|
|
16
|
+
from typing_extensions import Literal
|
|
17
17
|
from signe import effect
|
|
18
18
|
from ex4nicegui.utils.signals import (
|
|
19
19
|
ReadonlyRef,
|
|
@@ -26,6 +26,7 @@ from ex4nicegui.utils.signals import (
|
|
|
26
26
|
)
|
|
27
27
|
import ex4nicegui.utils.common as utils_common
|
|
28
28
|
from nicegui import ui
|
|
29
|
+
from nicegui import events as ng_events
|
|
29
30
|
from nicegui.elements.mixins.text_element import TextElement
|
|
30
31
|
from nicegui.elements.mixins.value_element import ValueElement
|
|
31
32
|
from nicegui.elements.mixins.color_elements import (
|
|
@@ -34,7 +35,7 @@ from nicegui.elements.mixins.color_elements import (
|
|
|
34
35
|
TAILWIND_COLORS,
|
|
35
36
|
)
|
|
36
37
|
from nicegui.page_layout import Drawer
|
|
37
|
-
from ex4nicegui.reactive.
|
|
38
|
+
from ex4nicegui.reactive.ECharts.ECharts import echarts
|
|
38
39
|
|
|
39
40
|
T = TypeVar("T")
|
|
40
41
|
|
|
@@ -172,8 +173,8 @@ def _convert_kws_ref2value(kws: Dict):
|
|
|
172
173
|
class SelectBindableUi(SingleValueBindableUi[T, ui.select]):
|
|
173
174
|
@staticmethod
|
|
174
175
|
def _setup_(binder: "SelectBindableUi"):
|
|
175
|
-
def onValueChanged(
|
|
176
|
-
binder._ref.value = args["
|
|
176
|
+
def onValueChanged(e):
|
|
177
|
+
binder._ref.value = e.args["label"] # type: ignore
|
|
177
178
|
|
|
178
179
|
@effect
|
|
179
180
|
def _():
|
|
@@ -243,8 +244,8 @@ class SelectBindableUi(SingleValueBindableUi[T, ui.select]):
|
|
|
243
244
|
class RadioBindableUi(SingleValueBindableUi[bool, ui.radio]):
|
|
244
245
|
@staticmethod
|
|
245
246
|
def _setup_(binder: "RadioBindableUi"):
|
|
246
|
-
def onValueChanged(
|
|
247
|
-
binder._ref.value = binder.element.options[args
|
|
247
|
+
def onValueChanged(e):
|
|
248
|
+
binder._ref.value = binder.element.options[e.args] # type: ignore
|
|
248
249
|
|
|
249
250
|
@effect
|
|
250
251
|
def _():
|
|
@@ -301,8 +302,8 @@ class RadioBindableUi(SingleValueBindableUi[bool, ui.radio]):
|
|
|
301
302
|
class SwitchBindableUi(SingleValueBindableUi[bool, ui.switch]):
|
|
302
303
|
@staticmethod
|
|
303
304
|
def _setup_(binder: "SwitchBindableUi"):
|
|
304
|
-
def onValueChanged(
|
|
305
|
-
binder._ref.value = args
|
|
305
|
+
def onValueChanged(e):
|
|
306
|
+
binder._ref.value = e.args # type: ignore
|
|
306
307
|
|
|
307
308
|
ele = cast(ValueElement, binder.element)
|
|
308
309
|
|
|
@@ -350,8 +351,8 @@ class SwitchBindableUi(SingleValueBindableUi[bool, ui.switch]):
|
|
|
350
351
|
class CheckboxBindableUi(SingleValueBindableUi[bool, ui.checkbox]):
|
|
351
352
|
@staticmethod
|
|
352
353
|
def _setup_(binder: "CheckboxBindableUi"):
|
|
353
|
-
def onValueChanged(
|
|
354
|
-
binder._ref.value = args
|
|
354
|
+
def onValueChanged(e):
|
|
355
|
+
binder._ref.value = e.args # type: ignore
|
|
355
356
|
|
|
356
357
|
ele = cast(ValueElement, binder.element)
|
|
357
358
|
|
|
@@ -439,8 +440,8 @@ class InputBindableUi(SingleValueBindableUi[str, ui.input]):
|
|
|
439
440
|
def _():
|
|
440
441
|
ele.value = self.value
|
|
441
442
|
|
|
442
|
-
def onModelValueChanged(
|
|
443
|
-
self._ref.value = args
|
|
443
|
+
def onModelValueChanged(e):
|
|
444
|
+
self._ref.value = e.args or "" # type: ignore
|
|
444
445
|
|
|
445
446
|
ele.on("update:modelValue", handler=onModelValueChanged)
|
|
446
447
|
|
|
@@ -496,7 +497,7 @@ class LazyInputBindableUi(InputBindableUi):
|
|
|
496
497
|
ele.on("keyup.enter", onValueChanged)
|
|
497
498
|
|
|
498
499
|
|
|
499
|
-
_TSliderValue = TypeVar("_TSliderValue", float, int)
|
|
500
|
+
_TSliderValue = TypeVar("_TSliderValue", float, int, None)
|
|
500
501
|
|
|
501
502
|
|
|
502
503
|
class SliderBindableUi(SingleValueBindableUi[Optional[_TSliderValue], ui.slider]):
|
|
@@ -535,8 +536,8 @@ class SliderBindableUi(SingleValueBindableUi[Optional[_TSliderValue], ui.slider]
|
|
|
535
536
|
def _():
|
|
536
537
|
ele.value = self.value
|
|
537
538
|
|
|
538
|
-
def onModelValueChanged(
|
|
539
|
-
self._ref.value = args
|
|
539
|
+
def onModelValueChanged(e):
|
|
540
|
+
self._ref.value = e.args # type: ignore
|
|
540
541
|
|
|
541
542
|
ele.on("update:modelValue", handler=onModelValueChanged)
|
|
542
543
|
|
|
@@ -557,10 +558,10 @@ class SliderBindableUi(SingleValueBindableUi[Optional[_TSliderValue], ui.slider]
|
|
|
557
558
|
class LazySliderBindableUi(SliderBindableUi):
|
|
558
559
|
def __init__(
|
|
559
560
|
self,
|
|
560
|
-
min: TMaybeRef[
|
|
561
|
-
max: TMaybeRef[
|
|
562
|
-
step: TMaybeRef[
|
|
563
|
-
value: TMaybeRef[
|
|
561
|
+
min: TMaybeRef[_TSliderValue],
|
|
562
|
+
max: TMaybeRef[_TSliderValue],
|
|
563
|
+
step: TMaybeRef[_TSliderValue] = 1,
|
|
564
|
+
value: TMaybeRef[_TSliderValue | None] = None,
|
|
564
565
|
on_change: Callable[..., Any] | None = None,
|
|
565
566
|
) -> None:
|
|
566
567
|
super().__init__(min, max, step, value, on_change)
|
|
@@ -575,7 +576,7 @@ class LazySliderBindableUi(SliderBindableUi):
|
|
|
575
576
|
def onValueChanged():
|
|
576
577
|
self._ref.value = ele.value
|
|
577
578
|
|
|
578
|
-
ele.on("change
|
|
579
|
+
ele.on("change", onValueChanged)
|
|
579
580
|
|
|
580
581
|
|
|
581
582
|
class TextareaBindableUi(SingleValueBindableUi[str, ui.textarea]):
|
|
@@ -615,8 +616,8 @@ class TextareaBindableUi(SingleValueBindableUi[str, ui.textarea]):
|
|
|
615
616
|
def _():
|
|
616
617
|
ele.value = self.value
|
|
617
618
|
|
|
618
|
-
def onModelValueChanged(
|
|
619
|
-
self._ref.value = args
|
|
619
|
+
def onModelValueChanged(e):
|
|
620
|
+
self._ref.value = e.args # type: ignore
|
|
620
621
|
|
|
621
622
|
ele.on("update:modelValue", handler=onModelValueChanged)
|
|
622
623
|
|
|
@@ -669,8 +670,8 @@ class LazyTextareaBindableUi(TextareaBindableUi):
|
|
|
669
670
|
class LabelBindableUi(SingleValueBindableUi[str, ui.label]):
|
|
670
671
|
@staticmethod
|
|
671
672
|
def _setup_(binder: "LabelBindableUi"):
|
|
672
|
-
def onValueChanged(
|
|
673
|
-
binder._ref.value = args["
|
|
673
|
+
def onValueChanged(e):
|
|
674
|
+
binder._ref.value = e.args["label"] # type: ignore
|
|
674
675
|
|
|
675
676
|
@effect
|
|
676
677
|
def _():
|
|
@@ -865,8 +866,8 @@ class ColorPickerBindableUi(SingleValueBindableUi[str, ui.color_picker]):
|
|
|
865
866
|
def _():
|
|
866
867
|
ele._props["modelValue"] = self.value
|
|
867
868
|
|
|
868
|
-
def onModelValueChanged(
|
|
869
|
-
self._ref.value = args
|
|
869
|
+
def onModelValueChanged(e):
|
|
870
|
+
self._ref.value = e.args # type: ignore
|
|
870
871
|
|
|
871
872
|
ele.on("update:modelValue", handler=onModelValueChanged)
|
|
872
873
|
|
|
@@ -908,8 +909,8 @@ class ColorPickerLazyBindableUi(ColorPickerBindableUi):
|
|
|
908
909
|
# def _():
|
|
909
910
|
# ele._props["modelValue"] = self.value
|
|
910
911
|
|
|
911
|
-
def onModelValueChanged(
|
|
912
|
-
self._ref.value = args
|
|
912
|
+
def onModelValueChanged(e):
|
|
913
|
+
self._ref.value = e.args # type: ignore
|
|
913
914
|
|
|
914
915
|
ele.on("change", handler=onModelValueChanged)
|
|
915
916
|
|
|
@@ -1301,3 +1302,109 @@ class HtmlBindableUi(SingleValueBindableUi[str, ui.html]):
|
|
|
1301
1302
|
color = ref_ui.value
|
|
1302
1303
|
ele._style["color"] = color
|
|
1303
1304
|
ele.update()
|
|
1305
|
+
|
|
1306
|
+
|
|
1307
|
+
class ImageBindableUi(SingleValueBindableUi[Union[str, Path], ui.image]):
|
|
1308
|
+
@staticmethod
|
|
1309
|
+
def _setup_(binder: "ImageBindableUi"):
|
|
1310
|
+
@effect
|
|
1311
|
+
def _():
|
|
1312
|
+
binder.element.on_source_change(binder.value)
|
|
1313
|
+
|
|
1314
|
+
def __init__(
|
|
1315
|
+
self,
|
|
1316
|
+
source: Union[TMaybeRef[str], TMaybeRef[Path]] = "",
|
|
1317
|
+
) -> None:
|
|
1318
|
+
kws = {
|
|
1319
|
+
"source": source,
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
value_kws = _convert_kws_ref2value(kws)
|
|
1323
|
+
|
|
1324
|
+
element = ui.image(**value_kws)
|
|
1325
|
+
|
|
1326
|
+
super().__init__(source, element) # type: ignore
|
|
1327
|
+
|
|
1328
|
+
for key, value in kws.items():
|
|
1329
|
+
if is_ref(value):
|
|
1330
|
+
self.bind_prop(key, value) # type: ignore
|
|
1331
|
+
|
|
1332
|
+
# ImageBindableUi._setup_(self)
|
|
1333
|
+
|
|
1334
|
+
def bind_prop(self, prop: str, ref_ui: ReadonlyRef):
|
|
1335
|
+
if prop == "source":
|
|
1336
|
+
return self.bind_source(ref_ui)
|
|
1337
|
+
|
|
1338
|
+
return super().bind_prop(prop, ref_ui)
|
|
1339
|
+
|
|
1340
|
+
def bind_source(self, ref_ui: ReadonlyRef[Union[str, Path]]):
|
|
1341
|
+
@effect
|
|
1342
|
+
def _():
|
|
1343
|
+
ele = self.element
|
|
1344
|
+
source = ref_ui.value
|
|
1345
|
+
ele.on_source_change(source)
|
|
1346
|
+
|
|
1347
|
+
|
|
1348
|
+
class UploadResult:
|
|
1349
|
+
def __init__(self, content: bytes = bytes(), name="", type=""):
|
|
1350
|
+
self.content = content
|
|
1351
|
+
self.name = name
|
|
1352
|
+
self.type = type
|
|
1353
|
+
|
|
1354
|
+
def get_bytes(self):
|
|
1355
|
+
return self.content
|
|
1356
|
+
|
|
1357
|
+
@property
|
|
1358
|
+
def ready(self):
|
|
1359
|
+
return len(self.content) > 0
|
|
1360
|
+
|
|
1361
|
+
|
|
1362
|
+
class UploadBindableUi(SingleValueBindableUi[UploadResult, ui.upload]):
|
|
1363
|
+
@staticmethod
|
|
1364
|
+
def _setup_(binder: "UploadBindableUi"):
|
|
1365
|
+
def on_upload(e: ng_events.UploadEventArguments):
|
|
1366
|
+
binder._ref.value = UploadResult(e.content.read(), e.name, e.type)
|
|
1367
|
+
|
|
1368
|
+
binder._on_upload_callbacks.append(on_upload)
|
|
1369
|
+
|
|
1370
|
+
def __init__(
|
|
1371
|
+
self,
|
|
1372
|
+
multiple: TMaybeRef[bool] = False,
|
|
1373
|
+
max_file_size: Optional[TMaybeRef[int]] = None,
|
|
1374
|
+
max_total_size: Optional[TMaybeRef[int]] = None,
|
|
1375
|
+
max_files: Optional[TMaybeRef[int]] = None,
|
|
1376
|
+
on_upload: Optional[Callable[..., Any]] = None,
|
|
1377
|
+
on_rejected: Optional[Callable[..., Any]] = None,
|
|
1378
|
+
label: TMaybeRef[str] = "",
|
|
1379
|
+
auto_upload: TMaybeRef[bool] = False,
|
|
1380
|
+
) -> None:
|
|
1381
|
+
kws = {
|
|
1382
|
+
"multiple": multiple,
|
|
1383
|
+
"max_file_size": max_file_size,
|
|
1384
|
+
"max_total_size": max_total_size,
|
|
1385
|
+
"max_files": max_files,
|
|
1386
|
+
"on_rejected": on_rejected,
|
|
1387
|
+
"label": label,
|
|
1388
|
+
"auto_upload": auto_upload,
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
value_kws = _convert_kws_ref2value(kws)
|
|
1392
|
+
|
|
1393
|
+
self._on_upload_callbacks = []
|
|
1394
|
+
|
|
1395
|
+
def _on_upload(e: ng_events.UploadEventArguments):
|
|
1396
|
+
for fn in self._on_upload_callbacks:
|
|
1397
|
+
fn(e)
|
|
1398
|
+
|
|
1399
|
+
if on_upload:
|
|
1400
|
+
self._on_upload_callbacks.append(on_upload)
|
|
1401
|
+
|
|
1402
|
+
element = ui.upload(**value_kws, on_upload=_on_upload)
|
|
1403
|
+
|
|
1404
|
+
super().__init__(UploadResult(), element) # type: ignore
|
|
1405
|
+
|
|
1406
|
+
for key, value in kws.items():
|
|
1407
|
+
if is_ref(value):
|
|
1408
|
+
self.bind_prop(key, value) # type: ignore
|
|
1409
|
+
|
|
1410
|
+
UploadBindableUi._setup_(self)
|
|
@@ -27,8 +27,8 @@ class QPagination(Element):
|
|
|
27
27
|
self.__min = min
|
|
28
28
|
self.__max = max
|
|
29
29
|
|
|
30
|
-
def onchange(
|
|
31
|
-
arg_value = cast(int,
|
|
30
|
+
def onchange(e):
|
|
31
|
+
arg_value = cast(int, e.args)
|
|
32
32
|
|
|
33
33
|
self._props["model-value"] = arg_value
|
|
34
34
|
if isinstance(self.__value, Ref):
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
from typing import Any, Callable, Optional
|
|
1
|
+
from typing import Any, Callable, Optional, cast
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from nicegui.helpers import KWONLY_SLOTS
|
|
4
4
|
from nicegui.events import handle_event, EventArguments
|
|
5
|
-
from nicegui.dependencies import register_component
|
|
6
5
|
from nicegui.element import Element
|
|
7
6
|
from signe import createSignal, effect, batch
|
|
7
|
+
from ex4nicegui.utils.signals import ref_from_signal
|
|
8
8
|
|
|
9
|
+
# from nicegui.dependencies import register_library
|
|
10
|
+
# from pathlib import Path
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
|
|
13
|
+
# register_library(Path(__file__).parent / "index-6543384e.js")
|
|
11
14
|
|
|
12
15
|
_Update_Args = [
|
|
13
16
|
"x",
|
|
@@ -23,16 +26,21 @@ class UseMouseUpdateEventArguments(EventArguments):
|
|
|
23
26
|
sourceType: str
|
|
24
27
|
|
|
25
28
|
|
|
26
|
-
class UseMouse(Element):
|
|
29
|
+
class UseMouse(Element, component="UseMouse.js"):
|
|
27
30
|
def __init__(self, options: Optional[dict] = None) -> None:
|
|
28
|
-
super().__init__(
|
|
31
|
+
super().__init__()
|
|
29
32
|
|
|
30
33
|
if options:
|
|
31
34
|
self._props["options"] = options
|
|
32
35
|
|
|
33
36
|
self.__x_getter, self.__x_setter = createSignal(0.0)
|
|
37
|
+
self.__x_readonly_ref = ref_from_signal(self.__x_getter)
|
|
38
|
+
|
|
34
39
|
self.__y_getter, self.__y_setter = createSignal(0.0)
|
|
40
|
+
self.__y_readonly_ref = ref_from_signal(self.__y_getter)
|
|
41
|
+
|
|
35
42
|
self.__sourceType_getter, self.__sourceType_setter = createSignal("sourceType")
|
|
43
|
+
self.__sourceType_readonly_ref = ref_from_signal(self.__sourceType_getter)
|
|
36
44
|
|
|
37
45
|
def update(args: UseMouseUpdateEventArguments):
|
|
38
46
|
@batch
|
|
@@ -45,19 +53,19 @@ class UseMouse(Element):
|
|
|
45
53
|
|
|
46
54
|
@property
|
|
47
55
|
def x(self):
|
|
48
|
-
return self.
|
|
56
|
+
return self.__x_readonly_ref
|
|
49
57
|
|
|
50
58
|
@property
|
|
51
59
|
def y(self):
|
|
52
|
-
return self.
|
|
60
|
+
return self.__y_readonly_ref
|
|
53
61
|
|
|
54
62
|
@property
|
|
55
63
|
def sourceType(self):
|
|
56
|
-
return self.
|
|
64
|
+
return self.__sourceType_readonly_ref
|
|
57
65
|
|
|
58
66
|
def on_update(self, handler: Optional[Callable[..., Any]]):
|
|
59
|
-
def inner_handler(
|
|
60
|
-
args = args
|
|
67
|
+
def inner_handler(e):
|
|
68
|
+
args = e.args
|
|
61
69
|
handle_event(
|
|
62
70
|
handler,
|
|
63
71
|
UseMouseUpdateEventArguments(
|
|
@@ -72,12 +80,12 @@ class UseMouse(Element):
|
|
|
72
80
|
self.on("update", inner_handler, args=_Update_Args)
|
|
73
81
|
|
|
74
82
|
|
|
75
|
-
_Use_Mouse_Ins =
|
|
83
|
+
_Use_Mouse_Ins = None
|
|
76
84
|
|
|
77
85
|
|
|
78
86
|
def use_mouse(options: Optional[dict] = None):
|
|
79
87
|
global _Use_Mouse_Ins
|
|
80
|
-
|
|
81
|
-
|
|
88
|
+
if _Use_Mouse_Ins is None:
|
|
89
|
+
_Use_Mouse_Ins = UseMouse(options)
|
|
82
90
|
|
|
83
|
-
return _Use_Mouse_Ins
|
|
91
|
+
return cast(UseMouse, _Use_Mouse_Ins)
|
|
@@ -18,12 +18,12 @@ ex4nicegui/reactive/officials.py
|
|
|
18
18
|
ex4nicegui/reactive/q_pagination.py
|
|
19
19
|
ex4nicegui/reactive/rxui.py
|
|
20
20
|
ex4nicegui/reactive/usePagination.py
|
|
21
|
-
ex4nicegui/reactive/
|
|
22
|
-
ex4nicegui/reactive/
|
|
23
|
-
ex4nicegui/reactive/
|
|
24
|
-
ex4nicegui/reactive/
|
|
25
|
-
ex4nicegui/reactive/
|
|
26
|
-
ex4nicegui/reactive/
|
|
21
|
+
ex4nicegui/reactive/ECharts/ECharts.js
|
|
22
|
+
ex4nicegui/reactive/ECharts/ECharts.py
|
|
23
|
+
ex4nicegui/reactive/ECharts/__init__.py
|
|
24
|
+
ex4nicegui/reactive/UseDraggable/UseDraggable.js
|
|
25
|
+
ex4nicegui/reactive/UseDraggable/UseDraggable.py
|
|
26
|
+
ex4nicegui/reactive/UseDraggable/__init__.py
|
|
27
27
|
ex4nicegui/reactive/useMouse/UseMouse.js
|
|
28
28
|
ex4nicegui/reactive/useMouse/UseMouse.py
|
|
29
29
|
ex4nicegui/reactive/useMouse/__init__.py
|
|
@@ -21,7 +21,7 @@ def get_data_files(base):
|
|
|
21
21
|
with open("README.md", encoding="utf8") as readme_file:
|
|
22
22
|
readme = readme_file.read()
|
|
23
23
|
|
|
24
|
-
requirements = ["signe>=0.1.8", "nicegui>=1.
|
|
24
|
+
requirements = ["signe>=0.1.8", "nicegui>=1.3.3", "typing_extensions"]
|
|
25
25
|
|
|
26
26
|
test_requirements = ["pytest>=3"]
|
|
27
27
|
|
|
@@ -37,11 +37,7 @@ setup(
|
|
|
37
37
|
"Programming Language :: Python :: 3.8",
|
|
38
38
|
],
|
|
39
39
|
description="...",
|
|
40
|
-
entry_points={
|
|
41
|
-
# 'console_scripts': [
|
|
42
|
-
# 'test_prj=test_prj.cli:main',
|
|
43
|
-
# ],
|
|
44
|
-
},
|
|
40
|
+
entry_points={},
|
|
45
41
|
install_requires=requirements,
|
|
46
42
|
license="MIT license",
|
|
47
43
|
# long_description=readme,
|
|
@@ -50,26 +46,6 @@ setup(
|
|
|
50
46
|
name="ex4nicegui",
|
|
51
47
|
packages=find_packages(include=["ex4nicegui", "ex4nicegui.*"]),
|
|
52
48
|
data_files=get_data_files("ex4nicegui/reactive"),
|
|
53
|
-
# data_files=[
|
|
54
|
-
# (
|
|
55
|
-
# "echarts",
|
|
56
|
-
# [
|
|
57
|
-
# "ex4nicegui/reactive/echarts/ECharts.js",
|
|
58
|
-
# ],
|
|
59
|
-
# ),
|
|
60
|
-
# (
|
|
61
|
-
# "draggable",
|
|
62
|
-
# [
|
|
63
|
-
# "ex4nicegui/reactive/draggable/UseDraggable.js",
|
|
64
|
-
# ],
|
|
65
|
-
# ),
|
|
66
|
-
# (
|
|
67
|
-
# "useMouse",
|
|
68
|
-
# [
|
|
69
|
-
# "ex4nicegui/reactive/useMouse/UseMouse.js",
|
|
70
|
-
# ],
|
|
71
|
-
# ),
|
|
72
|
-
# ],
|
|
73
49
|
test_suite="__tests",
|
|
74
50
|
tests_require=test_requirements,
|
|
75
51
|
url="",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|