euporie 2.8.14__py3-none-any.whl → 2.8.15__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.
@@ -78,6 +78,10 @@ class Console(KernelTab):
78
78
 
79
79
  """
80
80
 
81
+ live_output: CellOutputArea
82
+ input_box: KernelInput
83
+ stdin_box: StdInput
84
+
81
85
  def __init__(
82
86
  self,
83
87
  app: BaseApp,
euporie/core/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """This package defines the euporie application and its components."""
2
2
 
3
3
  __app_name__ = "euporie"
4
- __version__ = "2.8.14"
4
+ __version__ = "2.8.15"
5
5
  __logo__ = "⚈"
6
6
  __strapline__ = "Jupyter in the terminal"
7
7
  __author__ = "Josiah Outram Halstead"
euporie/core/cache.py ADDED
@@ -0,0 +1,36 @@
1
+ """Updated version of the prompt_toolkit caches."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import threading
6
+ from typing import TYPE_CHECKING
7
+
8
+ from prompt_toolkit.cache import _T, _U
9
+ from prompt_toolkit.cache import SimpleCache as PtkSimpleCache
10
+
11
+ if TYPE_CHECKING:
12
+ from typing import Callable
13
+
14
+
15
+ __all__ = [
16
+ "SimpleCache",
17
+ ]
18
+
19
+
20
+ class SimpleCache(PtkSimpleCache[_T, _U]):
21
+ """Thread safe version of :py:`SimpleCache`."""
22
+
23
+ def __init__(self, maxsize: int = 8) -> None:
24
+ """Create lock at init."""
25
+ super().__init__(maxsize)
26
+ self._lock = threading.Lock()
27
+
28
+ def get(self, key: _T, getter_func: Callable[[], _U]) -> _U:
29
+ """Access cache with thread safety."""
30
+ with self._lock:
31
+ return super().get(key, getter_func)
32
+
33
+ def clear(self) -> None:
34
+ """Clear cache."""
35
+ with self._lock:
36
+ super().clear()
euporie/core/config.py CHANGED
@@ -502,7 +502,7 @@ class Config:
502
502
  def _load_args(self) -> dict[str, Any]:
503
503
  """Attempt to load configuration settings from commandline flags."""
504
504
  # Parse known arguments
505
- namespace, remainder = self._load_parser().parse_known_intermixed_args()
505
+ namespace, _remainder = self._load_parser().parse_known_intermixed_args()
506
506
  # Validate arguments
507
507
  return vars(namespace)
508
508
 
@@ -159,7 +159,7 @@ class Datum(Generic[T], metaclass=_MetaDatum):
159
159
  asyncio.Event,
160
160
  ] = {}
161
161
  self._finalizer: finalize = finalize(self, self._cleanup_datum_sizes, self.hash)
162
- self._finalizer.atexit = False
162
+ self._finalizer.atexit = False # type: ignore [misc]
163
163
 
164
164
  def __repr__(self) -> str:
165
165
  """Return a string representation of object."""
euporie/core/ft/html.py CHANGED
@@ -2851,7 +2851,7 @@ _BROWSER_CSS: CssSelectors = {
2851
2851
  CssSelector(item="*"),
2852
2852
  ),
2853
2853
  ): {
2854
- "pt_class": "markdown,code,block",
2854
+ "_pt_class": "markdown,code,block",
2855
2855
  },
2856
2856
  (
2857
2857
  (
@@ -12,11 +12,15 @@ if TYPE_CHECKING:
12
12
  from euporie.core.kernel.base import BaseKernel, KernelInfo, MsgCallbacks
13
13
  from euporie.core.tabs.kernel import KernelTab
14
14
 
15
- KERNEL_REGISTRY = {
16
- "local": "euporie.core.kernel.local:LocalPythonKernel",
17
- }
15
+ KERNEL_REGISTRY = {}
18
16
  if find_spec("jupyter_client"):
19
17
  KERNEL_REGISTRY["jupyter"] = "euporie.core.kernel.jupyter:JupyterKernel"
18
+ KERNEL_REGISTRY.update(
19
+ {
20
+ "local": "euporie.core.kernel.local:LocalPythonKernel",
21
+ "none": "euporie.core.kernel.base:NoKernel",
22
+ }
23
+ )
20
24
 
21
25
 
22
26
  def list_kernels() -> list[KernelInfo]:
@@ -499,6 +499,19 @@ class BaseKernel(ABC):
499
499
  class NoKernel(BaseKernel):
500
500
  """A `None` kernel."""
501
501
 
502
+ @classmethod
503
+ def variants(cls) -> list[KernelInfo]:
504
+ """Return available kernel specifications."""
505
+ return [
506
+ KernelInfo(
507
+ name="none",
508
+ display_name="No Kernel",
509
+ factory=cls,
510
+ kind="new",
511
+ type=cls,
512
+ )
513
+ ]
514
+
502
515
  @property
503
516
  def spec(self) -> dict[str, str]:
504
517
  """The kernelspec metadata for the current kernel instance."""
@@ -24,7 +24,7 @@ from euporie.core.app.current import get_app
24
24
  from euporie.core.kernel.base import BaseKernel, KernelInfo, MsgCallbacks
25
25
 
26
26
  if TYPE_CHECKING:
27
- from typing import Any, Callable, Unpack
27
+ from typing import Any, Callable, TextIO, Unpack
28
28
 
29
29
  from euporie.core.tabs.kernel import KernelTab
30
30
 
@@ -631,7 +631,12 @@ class InputBuiltin(BaseHook):
631
631
  self._is_password = is_password
632
632
  update_wrapper(self, input)
633
633
 
634
- def __call__(self, prompt: str = "", stream: Any = None) -> str:
634
+ def __call__(
635
+ self,
636
+ prompt: str = "",
637
+ stream: TextIO | None = None,
638
+ echo_char: str | None = None,
639
+ ) -> str:
635
640
  """Get input from user via callback."""
636
641
  if (callbacks := self.callbacks) and (get_input := callbacks.get("get_input")):
637
642
  # Clear any previous input
@@ -37,6 +37,7 @@ from prompt_toolkit.layout.utils import explode_text_fragments
37
37
  from prompt_toolkit.mouse_events import MouseEvent, MouseEventType
38
38
  from prompt_toolkit.utils import get_cwidth, take_using_weights, to_str
39
39
 
40
+ from euporie.core.cache import SimpleCache
40
41
  from euporie.core.data_structures import DiInt
41
42
  from euporie.core.layout.controls import DummyControl
42
43
  from euporie.core.layout.screen import BoundedWritePosition
@@ -557,6 +558,10 @@ class Window(ptk_containers.Window):
557
558
  super().__init__(*args, **kwargs)
558
559
  if isinstance(self.content, PtkDummyControl):
559
560
  self.content = DummyControl()
561
+ # Use thread-safe cache for margin widths
562
+ self._margin_width_cache: SimpleCache[tuple[Margin, int], int] = SimpleCache(
563
+ maxsize=1
564
+ )
560
565
 
561
566
  def write_to_screen(
562
567
  self,
@@ -387,7 +387,12 @@ class KernelTab(Tab, metaclass=ABCMeta):
387
387
  return
388
388
 
389
389
  # Prompt user to select a kernel
390
- self.app.dialogs["change-kernel"].show(tab=self, message=msg)
390
+ if dialog := self.app.dialogs.get("change-kernel"):
391
+ dialog.show(tab=self, message=msg)
392
+ return
393
+
394
+ if msg:
395
+ log.warning(msg)
391
396
 
392
397
  def switch_kernel(self, factory: KernelFactory) -> None:
393
398
  """Shut down the current kernel and change to another."""
@@ -525,9 +525,9 @@ class CellOutputArea:
525
525
 
526
526
  def scroll_right(self) -> None:
527
527
  """Scroll the outputs right."""
528
- max_width = (
529
- max(cell_output.element.width or 0 for cell_output in self.rendered_outputs)
530
- or None
528
+ max_width = max(
529
+ (cell_output.element.width or 0 for cell_output in self.rendered_outputs),
530
+ default=None,
531
531
  )
532
532
  for cell_output in self.rendered_outputs:
533
533
  cell_output.scroll_right(max_width)
@@ -1148,9 +1148,12 @@ class SelectableWidget(metaclass=ABCMeta):
1148
1148
  return next((x for x in self.indices), None)
1149
1149
 
1150
1150
  @index.setter
1151
- def index(self, value: int) -> None:
1151
+ def index(self, value: int | None) -> None:
1152
1152
  """Set the selected indices to a single value."""
1153
- self.indices = [value]
1153
+ if value is None:
1154
+ self.indices = []
1155
+ else:
1156
+ self.indices = [value]
1154
1157
 
1155
1158
  @property
1156
1159
  def indices(self) -> list[int]:
@@ -1161,7 +1164,7 @@ class SelectableWidget(metaclass=ABCMeta):
1161
1164
  return output
1162
1165
 
1163
1166
  @indices.setter
1164
- def indices(self, values: tuple[int]) -> None:
1167
+ def indices(self, values: list[int]) -> None:
1165
1168
  """Set the selected indices."""
1166
1169
  self._selected.clear()
1167
1170
  for i in range(len(self.options)):
@@ -1722,9 +1725,12 @@ class ToggleButtons(SelectableWidget):
1722
1725
  return next((x for x in self.indices), None)
1723
1726
 
1724
1727
  @index.setter
1725
- def index(self, value: int) -> None:
1728
+ def index(self, value: int | None) -> None:
1726
1729
  """Set the selected indices to a single value."""
1727
- self.indices = [value]
1730
+ if value is None:
1731
+ self.indices = []
1732
+ else:
1733
+ self.indices = [value]
1728
1734
  self.update_buttons(self)
1729
1735
 
1730
1736
  def update_buttons(self, widget: SelectableWidget | None = None) -> None:
@@ -618,9 +618,10 @@ class MenuBar:
618
618
  self.refocus()
619
619
  item.handler()
620
620
  else:
621
- self.selected_menu = self.selected_menu[
622
- : level + 1
623
- ] + [i]
621
+ self.selected_menu = [
622
+ *self.selected_menu[: level + 1],
623
+ i,
624
+ ]
624
625
  app.layout.focus(
625
626
  self.menu_containers[
626
627
  len(self.selected_menu) - 1
@@ -39,7 +39,10 @@ class PreviewNotebook(BaseNotebook):
39
39
  self,
40
40
  app: BaseApp,
41
41
  path: Path | None = None,
42
+ kernel: BaseKernel | None = None,
43
+ comms: dict[str, Comm] | None = None,
42
44
  use_kernel_history: bool = False,
45
+ connection_file: Path | None = None,
43
46
  ) -> None:
44
47
  """Create a new instance."""
45
48
  self.cell_index = 0
@@ -49,6 +52,8 @@ class PreviewNotebook(BaseNotebook):
49
52
  self.app.after_render += self.after_render
50
53
 
51
54
  self._cell = Cell(0, {}, self)
55
+ # Start the kernel (if needed) after the tab is fully loaded
56
+ self._init_kernel(kernel, comms, use_kernel_history, connection_file)
52
57
 
53
58
  def pre_init_kernel(self) -> None:
54
59
  """Filter cells before kernel is loaded."""
@@ -72,13 +77,19 @@ class PreviewNotebook(BaseNotebook):
72
77
  use_kernel_history: bool = False,
73
78
  connection_file: Path | None = None,
74
79
  ) -> None:
75
- """Set up the tab's kernel and related components."""
80
+ """We defer starting the kernel until the whole tab has loaded."""
81
+
82
+ def _init_kernel(
83
+ self,
84
+ kernel: BaseKernel | None = None,
85
+ comms: dict[str, Comm] | None = None,
86
+ use_kernel_history: bool = False,
87
+ connection_file: Path | None = None,
88
+ ) -> None:
89
+ """Start the tab's kernel if needed."""
76
90
  # Only load the kernel if running the notebook
77
91
  if self.app.config.run:
78
92
  super().init_kernel(kernel, comms, use_kernel_history, connection_file)
79
- else:
80
- self.pre_init_kernel()
81
- self.post_init_kernel()
82
93
 
83
94
  def print_title(self) -> None:
84
95
  """Print a notebook's filename."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: euporie
3
- Version: 2.8.14
3
+ Version: 2.8.15
4
4
  Summary: Euporie is a suite of terminal applications for interacting with Jupyter kernels
5
5
  Project-URL: Documentation, https://euporie.readthedocs.io/en/latest
6
6
  Project-URL: Issues, https://github.com/joouha/euporie/issues
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
21
22
  Classifier: Programming Language :: Python :: Implementation :: CPython
22
23
  Classifier: Programming Language :: Python :: Implementation :: PyPy
23
24
  Classifier: Topic :: Scientific/Engineering
@@ -5,15 +5,16 @@ euporie/console/_settings.py,sha256=jZroKFFsTzyEhP1Sis41Se70hwxqDmpa2Lb19XnMnRQ,
5
5
  euporie/console/app.py,sha256=nUmsoIQZMnQ0e506irqzvPOd31x_xUXn2w3kT1e2f9w,5736
6
6
  euporie/console/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  euporie/console/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
8
- euporie/console/tabs/console.py,sha256=qp0uNQTRDu5qDoXGQ4LpKm6OhVjAvskzXMyctL-Trnw,31908
9
- euporie/core/__init__.py,sha256=5pwKU0Ka6g5W80ayzQIONGPsW5mg3lH1d1_aKfq8j5g,314
8
+ euporie/console/tabs/console.py,sha256=TYMgXghxyEQVjkn8yGapWXz30kY-RLbaDew6ACljPCM,31992
9
+ euporie/core/__init__.py,sha256=Cjosf8D6N4OFOXeUnlvGQFSx7M93relLtKiVjXHHTN8,314
10
10
  euporie/core/__main__.py,sha256=QkRamWXgrPiRj7h4sYNhHNpVOUJuEpRuvZE-YLK1dUU,1255
11
11
  euporie/core/_settings.py,sha256=JspB4eMUXry4r5g4Wzn4aV0FmzSVmWf1G96Jcr5bcDE,2937
12
12
  euporie/core/border.py,sha256=HktTPL-sKxaiM8_DPdaetFI5fOvEBVJrw3tmgsKT2jY,48835
13
+ euporie/core/cache.py,sha256=lW7NnfkCBG7m2nS2fv874FNoEkST8Tze826iKPqK7G0,881
13
14
  euporie/core/clipboard.py,sha256=RT6rbi_9aGYAV9HZntOLPAWmut5vCZItAMSjqknpSG0,2534
14
15
  euporie/core/commands.py,sha256=aBBCSBm7AJRCoiOZzbIOucExqm5nYf--SrbiysBRkFc,9035
15
16
  euporie/core/completion.py,sha256=F_MQ9XyZdzVwipW7O8w2XOR-puYvTVcALC2XWmEhpYc,5752
16
- euporie/core/config.py,sha256=wgjeCSgLIkRo1PXt6z41z1agkToSnMR6wfSmbF6LCT8,25198
17
+ euporie/core/config.py,sha256=OkJwjrr4o8-JmAFYTuZWJVw6yTpZagAz-GLwQCZgtQM,25199
17
18
  euporie/core/data_structures.py,sha256=2ml-q-y5Ft0pyq1Xc-NySCLMoEir71M9e2PLfvPbegc,2350
18
19
  euporie/core/diagnostics.py,sha256=KywmOqa1_Lfk5SsO1Fd0Vl801DvVKvAD4pOOpdLijAM,1680
19
20
  euporie/core/filters.py,sha256=t-s9g-wSPhDd3iXcLtiwT5IsIfK7vIuicV-KU-eB19A,10237
@@ -56,7 +57,7 @@ euporie/core/comm/base.py,sha256=-zXNOXimuD7Aeo2scADnvSimZa6pF8obT51vluBz2co,412
56
57
  euporie/core/comm/ipywidgets.py,sha256=Qw1LI_Er8l9leZJMsohtQBJD_K4b0KPordynXhrknFk,53013
57
58
  euporie/core/comm/registry.py,sha256=x9AhhTi4Ohxq6fdPXU9GJgH58CleYsEy-xw084TcIx0,1384
58
59
  euporie/core/convert/__init__.py,sha256=dZKZVTyYAuIKtjTbtcqvko-I89LYwr4fDbYj1J9PyEc,64
59
- euporie/core/convert/datum.py,sha256=L65XBOzvWcPicviJDZmaPrN1am3TRtCoLoXKWkXYMHk,16262
60
+ euporie/core/convert/datum.py,sha256=w0OMyfEFc9OTqt_62JMYBy6hkb7vzpKOpNWbYxVHDPY,16285
60
61
  euporie/core/convert/mime.py,sha256=uQwXw2hUsfS_dMeR4Ci6Zv4fORIBnEa9rdRa-nVT-Ls,3142
61
62
  euporie/core/convert/registry.py,sha256=pDnUzXp08t-XN3lXxBimMuRSNFwskAOLeeU0OHMMN30,2904
62
63
  euporie/core/convert/utils.py,sha256=aNqorWKz_yHItJZjTXcwCJ_CANuKhv2IQPq3w2o9Iqs,3449
@@ -76,15 +77,15 @@ euporie/core/convert/formats/sixel.py,sha256=8e5jKspmaO1pHjlL2vweWowultYAg2nlp7d
76
77
  euporie/core/convert/formats/svg.py,sha256=qdROd6IRDMNlRZx8fYRbQjqzpCozkNXExnFBl6Vy-Tc,827
77
78
  euporie/core/ft/__init__.py,sha256=Ib-pswos3RiOM2Vn8GCZ4rwuoTNPeBJ0jhgRpwu7BKE,55
78
79
  euporie/core/ft/ansi.py,sha256=JhmxJYtNczJa315yhHOhpM5ohZ3kROhH7sz18WiZ3a4,6197
79
- euporie/core/ft/html.py,sha256=-4U2D2FhFp4VOvj5hptqQkeZo_NrzeNysiPGGlc7q4c,182791
80
+ euporie/core/ft/html.py,sha256=B_VL2yop_rcPRb0jMUTJow5w_gVAWUNT3Q3zokBPiRA,182792
80
81
  euporie/core/ft/table.py,sha256=MC6TLc0GfRviB3xeuouZRIyq2DNxxWFFGolDf-5Tk2E,53328
81
82
  euporie/core/ft/utils.py,sha256=qcArKRg4XeQIHtxxypU5g21PQ-IlPYrjYvGY53WcvLU,27870
82
- euporie/core/kernel/__init__.py,sha256=OzDNoLffqunS-mZb23U0a2_tOx-E0QtmT25rVLj76bU,1540
83
+ euporie/core/kernel/__init__.py,sha256=aN38i26yR_WV8cP5N_SJtefBEVR460CvPG1q3Vjfe9U,1634
83
84
  euporie/core/kernel/_settings.py,sha256=h2ESe2FnHG4tu3ECz7jIIOjrpCLFrRZL3jHBpWRKeIU,828
84
- euporie/core/kernel/base.py,sha256=nAgUVwMb0IIfgfjv13L7kov7PXSzBo3MfMf12ipoOGs,17937
85
+ euporie/core/kernel/base.py,sha256=bNNg4juqguj_Ox-c5gy7jPWj523owzNzu7hmbQoUBHc,18271
85
86
  euporie/core/kernel/jupyter.py,sha256=R2H3eTYLQwLSc9pRadyETNFHrIqY1b9I6uxqAdQHXS8,36206
86
87
  euporie/core/kernel/jupyter_manager.py,sha256=tvft5LGjXYXPJBO3tNOKvyicnz-FwS1wbUQ2Q6OtEwY,4031
87
- euporie/core/kernel/local.py,sha256=TeT0vRYWEY1lWHE6-CACgJ5zyGUbeCFdEaB2c644NbY,25603
88
+ euporie/core/kernel/local.py,sha256=MLyb_KZijLcGw5xcv4sM5Ti6sTs6KGPbOUhCRcHah0c,25690
88
89
  euporie/core/key_binding/__init__.py,sha256=zFKrJrZARNht6Tl4TT5Fw3fk-IrD8SBYk5mBJ5K_F1A,47
89
90
  euporie/core/key_binding/key_processor.py,sha256=sGEOH3cd0yJO-81dWROzzDYjxEA5gxo1rpNbuphvv9I,5756
90
91
  euporie/core/key_binding/micro_state.py,sha256=h_CBBiIUa4mHf70ZZDNbXreC0p0H3boNVzHnHVuIAp8,1276
@@ -101,7 +102,7 @@ euporie/core/key_binding/bindings/terminal.py,sha256=eOoWaztPs2KblYxnbhHxMD-Xru9
101
102
  euporie/core/key_binding/bindings/vi.py,sha256=XutOsbBI8ywyWR5XY2pUN14Vga6R0vrDK27q7ZhE8pM,1567
102
103
  euporie/core/layout/__init__.py,sha256=T5iGOnMGfNwVffJlfFMwGTFBLV7RkOuKw5gVp6cl4wA,59
103
104
  euporie/core/layout/cache.py,sha256=AkZgwETYwqq4o5MNj0BWly3aZcZCrQGEUR6Li9q-3Xo,16054
104
- euporie/core/layout/containers.py,sha256=ySDSaMjkSPZeE5T1GNPI-FYUcU9VipCiNAF_UfVCXEY,49189
105
+ euporie/core/layout/containers.py,sha256=g09OTcEw0Tjx1URwIhec2VoIVcnitSF7kglsZFAXmsk,49400
105
106
  euporie/core/layout/controls.py,sha256=iFklysBxk_roWKfNN4Hdjqf4sFdEBzNWZq2OavlpJHY,825
106
107
  euporie/core/layout/decor.py,sha256=aUJXdeDujk4hDG5uvEdF44sRBzTak12x1J5W7YQxfSk,14128
107
108
  euporie/core/layout/mouse.py,sha256=AQwmSySsDJmWweh7Skly-XqqNGZavNtfqt3DDsTsvRg,5169
@@ -112,22 +113,22 @@ euporie/core/tabs/__init__.py,sha256=7IzC_LLd-61JH6CBLDEeLhTtlEyFbQtgRqGbVUWBNP8
112
113
  euporie/core/tabs/_commands.py,sha256=M1emj8w8ni-_EfE3PHTWQ_SJR0VYXBMLgLExIpLXvZc,1903
113
114
  euporie/core/tabs/_settings.py,sha256=MgC_WPy28g44PvhY_3Y1EwR7yikid4gEXZoV1Ydtq6w,3659
114
115
  euporie/core/tabs/base.py,sha256=PsYq4nMBYeYjVkfJqosBw30R1DcTlCKQtlmtXZ2oLfo,7698
115
- euporie/core/tabs/kernel.py,sha256=gsaW_2GUWBeeUtrNOTrrr6He_ShkLcA5XjiDXdS_No8,17348
116
+ euporie/core/tabs/kernel.py,sha256=EbOMwi4WJeV41dlLqd8vQinMRwr-Y3SLCERp70mLsIk,17450
116
117
  euporie/core/tabs/notebook.py,sha256=rZa2LRaCCEl3kb4hniQEQtly_uCBBF92dYFYcv8ID2g,15024
117
118
  euporie/core/widgets/__init__.py,sha256=ektso_Ea1-pZB04alUujQsa2r-kv8xAF0SmQOv_bvHQ,52
118
119
  euporie/core/widgets/_settings.py,sha256=6U6tgw8YajrvP5MbdBwvaYHNXjyRsP6ewBkSmqiVAhI,5456
119
120
  euporie/core/widgets/cell.py,sha256=PqY6FBTwPFF0mfHTJtBae_8ZQkBcBkf1RQReYARkOzQ,33783
120
- euporie/core/widgets/cell_outputs.py,sha256=vtVeydsO-ugrU2l59Tf9tE4UXokxEWyk9Z9aX0lXaaY,18414
121
+ euporie/core/widgets/cell_outputs.py,sha256=ltt-CGUYrkJJ9AnxNiUAD2o-7v0dhiTenIkLuLMRhWU,18421
121
122
  euporie/core/widgets/decor.py,sha256=_K3bSNpvAFdn5ZZyNFVjZPv6QV4fNIlNMdRpYjc4MU0,7895
122
123
  euporie/core/widgets/dialog.py,sha256=2yvNzDqDjsOBWVfeSgR4Lv1LC73tQIeI_qz2YIx7H1k,32987
123
124
  euporie/core/widgets/display.py,sha256=L2AnzIa5BmJ7KH3WLr753vj2eHmZ12l2xMHThhQCqUs,21910
124
125
  euporie/core/widgets/file_browser.py,sha256=jj8l5cpX7S6d1HlYXUg3TXdsvmhFneIOiotKpwCVgoQ,20050
125
126
  euporie/core/widgets/formatted_text_area.py,sha256=J7P_TNXPZKZkiBdjAVkPvkfRY1veXe4tzXU241k4b-Q,4037
126
- euporie/core/widgets/forms.py,sha256=G_omvjVhbWjY0HYb8s7gs9MqPyABBwAJElyCACsHv_0,85850
127
+ euporie/core/widgets/forms.py,sha256=ELpzh3wRcjS9BYUoFrrZckDFkOVgqiGLQjqucRI1dVI,86011
127
128
  euporie/core/widgets/inputs.py,sha256=fVg4sEDCJKvVf-fPXMBhVmKjs1eoRLqlUSWKKxT9e_0,20469
128
129
  euporie/core/widgets/layout.py,sha256=jPChBUf8FEbj_c6RwBooaATFnecm_MrSTpJFkPxOFFQ,30521
129
130
  euporie/core/widgets/logo.py,sha256=VU9hSVAiguS5lI0EccQoPm8roAuQNgvFUO5IREvXWFo,1487
130
- euporie/core/widgets/menu.py,sha256=eiawv3pfxyNRbwpEUrWQhQ4kPasQvAqABXJghx5n-mo,34922
131
+ euporie/core/widgets/menu.py,sha256=-7l4QMw5OOHxFe3Gym9ftPH0kczsoGsHeZ79DJG7MHQ,34963
131
132
  euporie/core/widgets/pager.py,sha256=nbFVF20kE_P2GoDHzAp_sqfiBe1mvuCvVUdjE-KFPzU,6413
132
133
  euporie/core/widgets/palette.py,sha256=Uv5n1Lvls7FnSZ_481L5zvkRsbSzzshhDmTy3gpNomQ,10950
133
134
  euporie/core/widgets/tree.py,sha256=ql5vbpelnCWZacUk7kqdCK1uXfzRzLl34U2_hu65rUY,4288
@@ -164,16 +165,16 @@ euporie/preview/_settings.py,sha256=_N3Dfzg5XOE_L-yq3HgAV68FKgz2nD1UHwLRXVSqI64,
164
165
  euporie/preview/app.py,sha256=Wec45l6vmbQrtjcPkTLbqZS6gBQM4zQvoOl7DX-s6R4,7623
165
166
  euporie/preview/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
167
  euporie/preview/tabs/__init__.py,sha256=rY6DfQ-8qRo_AiICCD-zTyhJBnuMjawWDd8tRxR6q58,43
167
- euporie/preview/tabs/notebook.py,sha256=mr3pF7KUwhxyu592Dwws1oZmYEfT9NNoCfUBUC7vDAs,6672
168
+ euporie/preview/tabs/notebook.py,sha256=eRJxeIN6V6121OYKtCfapp_ie5Nkf7TmmZJpz96O4kY,7155
168
169
  euporie/web/__init__.py,sha256=wE-4WBbzcpWVu5YisLrUhYOn3ZlBK2YZryjc1r96qrY,38
169
170
  euporie/web/tabs/__init__.py,sha256=0DbkceML8N_qefZFZB7CJQw_FX0gkuNdabQoEu0zV9E,340
170
171
  euporie/web/tabs/web.py,sha256=CY8tfy_yrZYLWY2pEyOgJsqIHCfGIj9WVKnK6v9Jg8g,6195
171
172
  euporie/web/widgets/__init__.py,sha256=xIxCPl9KiisYgsX-V1LvDT6BETZRF3nC-ZsP8DP7nOY,46
172
173
  euporie/web/widgets/webview.py,sha256=RK_pgW3ebQjz25HGhlW4ouH2XFLJRfiUy6d_vz8o_d8,20469
173
- euporie-2.8.14.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
174
- euporie-2.8.14.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
175
- euporie-2.8.14.dist-info/METADATA,sha256=KOhrSjFc8YIDqwlKj3syRiGH0jQ9u47kqMCX38aTiAQ,6516
176
- euporie-2.8.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
177
- euporie-2.8.14.dist-info/entry_points.txt,sha256=cJPvjp7siwHeqCcCdu-Q9OCcsp4ylbLv0S4RP7g3Bf0,798
178
- euporie-2.8.14.dist-info/licenses/LICENSE,sha256=yB-auuST68VxkNPXb-E7gVdFzOJShyBnoPyyveuAiYc,1079
179
- euporie-2.8.14.dist-info/RECORD,,
174
+ euporie-2.8.15.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
175
+ euporie-2.8.15.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
176
+ euporie-2.8.15.dist-info/METADATA,sha256=zBVAxzWPwfQy8VkXw01h8GuWL3rTYOg61HlkzovcgtE,6567
177
+ euporie-2.8.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
178
+ euporie-2.8.15.dist-info/entry_points.txt,sha256=cJPvjp7siwHeqCcCdu-Q9OCcsp4ylbLv0S4RP7g3Bf0,798
179
+ euporie-2.8.15.dist-info/licenses/LICENSE,sha256=yB-auuST68VxkNPXb-E7gVdFzOJShyBnoPyyveuAiYc,1079
180
+ euporie-2.8.15.dist-info/RECORD,,