euporie 2.6.2__py3-none-any.whl → 2.7.0__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 (67) hide show
  1. euporie/console/tabs/console.py +52 -38
  2. euporie/core/__init__.py +5 -2
  3. euporie/core/app.py +74 -57
  4. euporie/core/comm/ipywidgets.py +7 -3
  5. euporie/core/config.py +51 -27
  6. euporie/core/convert/__init__.py +2 -0
  7. euporie/core/convert/datum.py +82 -45
  8. euporie/core/convert/formats/ansi.py +1 -2
  9. euporie/core/convert/formats/common.py +7 -11
  10. euporie/core/convert/formats/ft.py +10 -7
  11. euporie/core/convert/formats/png.py +7 -6
  12. euporie/core/convert/formats/sixel.py +1 -1
  13. euporie/core/convert/formats/svg.py +28 -0
  14. euporie/core/convert/mime.py +4 -7
  15. euporie/core/data_structures.py +24 -22
  16. euporie/core/filters.py +16 -2
  17. euporie/core/format.py +30 -4
  18. euporie/core/ft/ansi.py +2 -1
  19. euporie/core/ft/html.py +155 -42
  20. euporie/core/{widgets/graphics.py → graphics.py} +225 -227
  21. euporie/core/io.py +8 -0
  22. euporie/core/key_binding/bindings/__init__.py +8 -2
  23. euporie/core/key_binding/bindings/basic.py +9 -14
  24. euporie/core/key_binding/bindings/micro.py +0 -12
  25. euporie/core/key_binding/bindings/mouse.py +107 -80
  26. euporie/core/key_binding/bindings/page_navigation.py +129 -0
  27. euporie/core/key_binding/key_processor.py +9 -1
  28. euporie/core/layout/__init__.py +1 -0
  29. euporie/core/layout/containers.py +1011 -0
  30. euporie/core/layout/decor.py +381 -0
  31. euporie/core/layout/print.py +130 -0
  32. euporie/core/layout/screen.py +75 -0
  33. euporie/core/{widgets/page.py → layout/scroll.py} +166 -111
  34. euporie/core/log.py +1 -1
  35. euporie/core/margins.py +11 -5
  36. euporie/core/path.py +43 -176
  37. euporie/core/renderer.py +31 -8
  38. euporie/core/style.py +2 -0
  39. euporie/core/tabs/base.py +2 -1
  40. euporie/core/terminal.py +19 -21
  41. euporie/core/widgets/cell.py +2 -4
  42. euporie/core/widgets/cell_outputs.py +2 -2
  43. euporie/core/widgets/decor.py +3 -359
  44. euporie/core/widgets/dialog.py +5 -5
  45. euporie/core/widgets/display.py +32 -12
  46. euporie/core/widgets/file_browser.py +3 -4
  47. euporie/core/widgets/forms.py +36 -14
  48. euporie/core/widgets/inputs.py +171 -99
  49. euporie/core/widgets/layout.py +80 -5
  50. euporie/core/widgets/menu.py +1 -3
  51. euporie/core/widgets/pager.py +3 -3
  52. euporie/core/widgets/palette.py +3 -2
  53. euporie/core/widgets/status_bar.py +2 -6
  54. euporie/core/widgets/tree.py +3 -6
  55. euporie/notebook/app.py +8 -8
  56. euporie/notebook/tabs/notebook.py +2 -2
  57. euporie/notebook/widgets/side_bar.py +1 -1
  58. euporie/preview/tabs/notebook.py +2 -2
  59. euporie/web/tabs/web.py +6 -1
  60. euporie/web/widgets/webview.py +52 -32
  61. {euporie-2.6.2.dist-info → euporie-2.7.0.dist-info}/METADATA +9 -11
  62. {euporie-2.6.2.dist-info → euporie-2.7.0.dist-info}/RECORD +67 -60
  63. {euporie-2.6.2.dist-info → euporie-2.7.0.dist-info}/WHEEL +1 -1
  64. {euporie-2.6.2.data → euporie-2.7.0.data}/data/share/applications/euporie-console.desktop +0 -0
  65. {euporie-2.6.2.data → euporie-2.7.0.data}/data/share/applications/euporie-notebook.desktop +0 -0
  66. {euporie-2.6.2.dist-info → euporie-2.7.0.dist-info}/entry_points.txt +0 -0
  67. {euporie-2.6.2.dist-info → euporie-2.7.0.dist-info}/licenses/LICENSE +0 -0
euporie/web/tabs/web.py CHANGED
@@ -14,10 +14,10 @@ from upath import UPath
14
14
  from euporie.core.convert.mime import get_mime
15
15
  from euporie.core.current import get_app
16
16
  from euporie.core.data_structures import DiBool
17
+ from euporie.core.layout.decor import FocusedStyle
17
18
  from euporie.core.margins import MarginContainer, ScrollbarMargin
18
19
  from euporie.core.tabs.base import Tab
19
20
  from euporie.core.utils import run_in_thread_with_context
20
- from euporie.core.widgets.decor import FocusedStyle
21
21
  from euporie.core.widgets.display import DisplayWindow
22
22
  from euporie.core.widgets.forms import Button, Text
23
23
  from euporie.web.widgets.webview import WebViewControl
@@ -51,6 +51,11 @@ class WebTab(Tab):
51
51
 
52
52
  run_in_thread_with_context(_load)
53
53
 
54
+ def focus(self) -> None:
55
+ """Focus the webview when this tab is focused."""
56
+ super().focus()
57
+ self.app.layout.focus(self.webview)
58
+
54
59
  @property
55
60
  def title(self) -> str:
56
61
  """Return the tab title."""
@@ -2,7 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import asyncio
5
6
  import logging
7
+ from threading import Thread
6
8
  from typing import TYPE_CHECKING, cast
7
9
 
8
10
  from prompt_toolkit.cache import FastDictCache
@@ -16,22 +18,20 @@ from prompt_toolkit.utils import Event
16
18
  from upath import UPath
17
19
 
18
20
  from euporie.core.commands import add_cmd
19
- from euporie.core.convert.datum import Datum
21
+ from euporie.core.convert.datum import Datum, get_loop
20
22
  from euporie.core.convert.mime import get_format
21
23
  from euporie.core.current import get_app
22
24
  from euporie.core.ft.html import HTML, Node
23
25
  from euporie.core.ft.utils import fragment_list_width, paste
26
+ from euporie.core.graphics import GraphicProcessor
24
27
  from euporie.core.key_binding.registry import (
25
28
  load_registered_bindings,
26
29
  register_bindings,
27
30
  )
28
31
  from euporie.core.path import parse_path
29
- from euporie.core.utils import run_in_thread_with_context
30
- from euporie.core.widgets.graphics import (
31
- GraphicProcessor,
32
- )
33
32
 
34
33
  if TYPE_CHECKING:
34
+ from concurrent.futures._base import Future
35
35
  from pathlib import Path
36
36
  from typing import Any, Callable, Iterable
37
37
 
@@ -71,6 +71,7 @@ class WebViewControl(UIControl):
71
71
  self.loading = False
72
72
  self.resizing = False
73
73
  self.rendering = False
74
+ self.stale = False
74
75
  self.lines: list[StyleAndTextTuples] = []
75
76
  self.graphic_processor = GraphicProcessor(control=self)
76
77
  self.width = 0
@@ -79,6 +80,7 @@ class WebViewControl(UIControl):
79
80
  self.status: list[AnyFormattedText] = []
80
81
  self.link_handler = link_handler or self.load_url
81
82
 
83
+ self.render_task: Future[None] | None = None
82
84
  self.rendered = Event(self)
83
85
  self.on_cursor_position_changed = Event(self)
84
86
 
@@ -89,6 +91,9 @@ class WebViewControl(UIControl):
89
91
  # lambda: self.cursor_position, style="fg:red"
90
92
  # )
91
93
 
94
+ self.loop = asyncio.new_event_loop()
95
+ self.render_thread = Thread(target=self.loop.run_forever, daemon=True)
96
+
92
97
  self.key_bindings = load_registered_bindings(
93
98
  "euporie.web.widgets.webview.WebViewControl"
94
99
  )
@@ -128,7 +133,7 @@ class WebViewControl(UIControl):
128
133
  if changed:
129
134
  self.on_cursor_position_changed.fire()
130
135
 
131
- def get_dom(self, url: Path) -> HTML:
136
+ def get_dom(self, url: Path, x: bool = False) -> HTML:
132
137
  """Load a HTML page as renderable formatted text."""
133
138
  markup = str(
134
139
  Datum(
@@ -145,8 +150,15 @@ class WebViewControl(UIControl):
145
150
  mouse_handler=self._node_mouse_handler,
146
151
  paste_fixed=False,
147
152
  _initial_format=format_,
153
+ defer_assets=False,
154
+ on_change=lambda dom: self.invalidate(),
148
155
  )
149
156
 
157
+ def invalidate(self) -> None:
158
+ """Trigger a redraw of the webview."""
159
+ self.stale = True
160
+ self.rendered.fire()
161
+
150
162
  @property
151
163
  def dom(self) -> HTML:
152
164
  """Return the dom for the current URL."""
@@ -161,7 +173,9 @@ class WebViewControl(UIControl):
161
173
  return dom.title
162
174
  return ""
163
175
 
164
- def get_lines(self, dom: HTML, width: int, height: int) -> list[StyleAndTextTuples]:
176
+ def get_lines(
177
+ self, dom: HTML, width: int, height: int, assets_loaded: bool = False
178
+ ) -> list[StyleAndTextTuples]:
165
179
  """Render a HTML page as lines of formatted text."""
166
180
  return list(split_lines(dom.render(width, height)))
167
181
 
@@ -194,23 +208,27 @@ class WebViewControl(UIControl):
194
208
  self.prev_stack.append(self.url)
195
209
  self.load_url(self.next_stack.pop(), save_to_history=False)
196
210
 
197
- def render(self) -> None:
211
+ def render(self, force: bool = False) -> None:
198
212
  """Render the HTML DOM in a thread."""
199
213
  dom = self.dom
200
214
 
201
- def _render() -> None:
215
+ async def _render() -> None:
202
216
  assert self.url is not None
203
217
  # Potentially redirect url
204
218
  self.url = parse_path(self.url)
205
- self.lines = self._line_cache[dom, self.width, self.height]
206
- self.loading = False
207
- self.resizing = False
208
- self.rendering = False
219
+ self.lines = list(split_lines(await dom._render(self.width, self.height)))
220
+ # Reset all possible reasons for rendering
221
+ self.loading = self.resizing = self.rendering = self.stale = False
222
+ # Let the app know we're re-rerenderd and the output needs redrawing
209
223
  self.rendered.fire()
210
224
 
211
- if not self.rendering:
225
+ if not self.rendering or force:
212
226
  self.rendering = True
213
- run_in_thread_with_context(_render)
227
+
228
+ if self.render_task:
229
+ self.render_task.cancel()
230
+
231
+ self.render_task = asyncio.run_coroutine_threadsafe(_render(), get_loop())
214
232
 
215
233
  def reset(self) -> None:
216
234
  """Reset the state of the control."""
@@ -239,10 +257,12 @@ class WebViewControl(UIControl):
239
257
  loading: bool,
240
258
  resizing: bool,
241
259
  width: int,
242
- # height: int,
260
+ height: int,
243
261
  cursor_position: Point,
262
+ assets_loaded: bool,
244
263
  ) -> UIContent:
245
264
  """Create a cacheable UIContent."""
265
+ dom = self._dom_cache[url,]
246
266
  if self.loading:
247
267
  lines = [
248
268
  cast("StyleAndTextTuples", []),
@@ -252,24 +272,22 @@ class WebViewControl(UIControl):
252
272
  ),
253
273
  ]
254
274
  else:
255
- lines = self.lines
275
+ lines = self.lines[:]
256
276
 
257
277
  def get_line(i: int) -> StyleAndTextTuples:
258
278
  try:
259
279
  line = lines[i]
260
280
  except IndexError:
261
- return []
281
+ line = []
262
282
 
263
283
  # Overlay fixed lines onto this line
264
- if not loading:
265
- dom = self._dom_cache[url,]
266
- if dom.fixed:
267
- visible_line = max(0, i - self.window.vertical_scroll)
268
- fixed_lines = list(split_lines(dom.fixed_mask))
269
- if visible_line < len(fixed_lines):
270
- # Paste the fixed line over the current line
271
- fixed_line = fixed_lines[visible_line]
272
- line = paste(fixed_line, line, 0, 0, transparent=True)
284
+ if not loading and dom.fixed:
285
+ visible_line = max(0, i - self.window.vertical_scroll)
286
+ fixed_lines = list(split_lines(dom.fixed_mask))
287
+ if visible_line < len(fixed_lines):
288
+ # Paste the fixed line over the current line
289
+ fixed_line = fixed_lines[visible_line]
290
+ line = paste(fixed_line, line, 0, 0, transparent=True)
273
291
 
274
292
  return line
275
293
 
@@ -287,10 +305,10 @@ class WebViewControl(UIControl):
287
305
  A :class:`.UIContent` instance.
288
306
  """
289
307
  # Trigger a re-render in the future if things have changed
290
- if self.loading:
308
+ if self.stale or self.loading:
291
309
  self.render()
292
310
  if width != self.width: # or height != self.height:
293
- self.resizing = True
311
+ # self.resizing = True
294
312
  self.width = width
295
313
  self.height = height
296
314
  self.render()
@@ -298,10 +316,11 @@ class WebViewControl(UIControl):
298
316
  content = self._content_cache[
299
317
  self.url,
300
318
  self.loading,
301
- False, # self.resizing,
319
+ self.resizing,
302
320
  width,
303
- # height,
321
+ height,
304
322
  self.cursor_position,
323
+ self.dom.render_count,
305
324
  ]
306
325
 
307
326
  # Check for graphics in content
@@ -368,8 +387,9 @@ class WebViewControl(UIControl):
368
387
  self.loading,
369
388
  self.resizing,
370
389
  self.width,
371
- # self.height,
390
+ self.height,
372
391
  self.cursor_position,
392
+ self.dom.render_count,
373
393
  ]
374
394
  line = content.get_line(mouse_event.position.y)
375
395
  except IndexError:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: euporie
3
- Version: 2.6.2
3
+ Version: 2.7.0
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
@@ -24,9 +24,10 @@ Requires-Python: >=3.8
24
24
  Requires-Dist: aenum<=3.1.12,~=3.1
25
25
  Requires-Dist: fastjsonschema~=2.15
26
26
  Requires-Dist: flatlatex~=0.15
27
- Requires-Dist: fsspec[http]>=2022.8.0
27
+ Requires-Dist: fsspec[http]>=2022.12.0
28
28
  Requires-Dist: imagesize~=1.3
29
29
  Requires-Dist: jupyter-client>=7.1
30
+ Requires-Dist: jupytext>=1.14.0
30
31
  Requires-Dist: linkify-it-py~=1.0
31
32
  Requires-Dist: markdown-it-py~=2.1.0
32
33
  Requires-Dist: mdit-py-plugins~=0.3.0
@@ -36,19 +37,16 @@ Requires-Dist: platformdirs~=3.5
36
37
  Requires-Dist: prompt-toolkit~=3.0.36
37
38
  Requires-Dist: pygments~=2.11
38
39
  Requires-Dist: pyperclip~=1.8
39
- Requires-Dist: sixelcrop~=0.1.3
40
- Requires-Dist: timg~=1.1
40
+ Requires-Dist: sixelcrop~=0.1.6
41
+ Requires-Dist: timg~=1.1.6
41
42
  Requires-Dist: typing-extensions~=4.5
42
- Requires-Dist: universal-pathlib<0.0.24
43
- Provides-Extra: chafa
44
- Requires-Dist: chafa-py>=1.0.2; extra == 'chafa'
43
+ Requires-Dist: universal-pathlib~=0.1.4
45
44
  Provides-Extra: format
46
45
  Requires-Dist: black>=19.3.b0; extra == 'format'
47
46
  Requires-Dist: isort~=5.10.1; extra == 'format'
47
+ Requires-Dist: ruff~=0.1.0; extra == 'format'
48
48
  Provides-Extra: hub
49
49
  Requires-Dist: asyncssh~=2.10.1; extra == 'hub'
50
- Provides-Extra: jupytext
51
- Requires-Dist: jupytext>=1.14.0; extra == 'jupytext'
52
50
  Description-Content-Type: text/x-rst
53
51
 
54
52
  |logo|
@@ -80,8 +78,8 @@ If you're working with Jupyter notebooks in a terminal only environment, like an
80
78
  - `Preview <https://euporie.readthedocs.io/en/latest/apps/preview.html>`_
81
79
  - `Hub <https://euporie.readthedocs.io/en/latest/apps/hub.html>`_
82
80
 
83
- .. image:: https://user-images.githubusercontent.com/12154190/226652401-f0601134-208d-4edc-9f5d-39fcd9dab288.png
84
- :target: https://user-images.githubusercontent.com/12154190/226652401-f0601134-208d-4edc-9f5d-39fcd9dab288.png
81
+ .. image:: https://github.com/joouha/euporie/assets/12154190/c8ea6e23-11bb-4ffc-a9e5-111f788c51ae
82
+ :target: https://github.com/joouha/euporie/assets/12154190/c8ea6e23-11bb-4ffc-a9e5-111f788c51ae
85
83
 
86
84
  `View more screenshots here <https://euporie.readthedocs.io/en/latest/pages/gallery.html>`_
87
85
 
@@ -3,98 +3,105 @@ euporie/console/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,2
3
3
  euporie/console/app.py,sha256=QMR5rPREPeGThcsxb94ItFxGrG80pRpxF2gBcuEB-2I,8044
4
4
  euporie/console/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  euporie/console/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
6
- euporie/console/tabs/console.py,sha256=3ieD-fbGLzMjrkccUFmR3j7mMDJWraLxDw48lfMNa54,22886
7
- euporie/core/__init__.py,sha256=EEhD7Oj2xXSCrdkSjs4vziaan7EchPs_Xp7Wo7xn8QE,448
6
+ euporie/console/tabs/console.py,sha256=Bf1oQFU_Tp2Kmn22qQWhPUeM8PftMEIfBCvopAo9kNs,23225
7
+ euporie/core/__init__.py,sha256=8FPhfG2Pth5gJ4wpV2-xsRa6uFeXgVWuXnM_iwKk-0Q,536
8
8
  euporie/core/__main__.py,sha256=ifgDkpe2RSQVicre5seul_1y7S9FYPGl-Kyck07KPQU,424
9
- euporie/core/app.py,sha256=UnVJgrrbS-YCLpNndWnRFYrdkN6Gt8nGLygYP3Sicxk,39246
9
+ euporie/core/app.py,sha256=rkBg9pKj_EhRvv8GsPxWncDdwn-OgzG1ETjZwl2L8sw,40251
10
10
  euporie/core/border.py,sha256=kJbpyxwJBtIRpFOpXhDtaCT1_oyVRjRiYKG4lXn3-iA,48507
11
11
  euporie/core/clipboard.py,sha256=q7igcHI6b9EoAJOHc0Ib2x_TDBvia43M3Iqet_KnE1g,4458
12
12
  euporie/core/commands.py,sha256=uOS4cJTzxSv8jEMComMDAqaAUrsPjaB_AY4tTeZFGfY,8256
13
13
  euporie/core/completion.py,sha256=-bUIWP-FDOERYvNZZQ1NWNMkuzYQydTfkwNTopkuuR8,1538
14
- euporie/core/config.py,sha256=pe73TR43vhmcqJp5hFXB61EGPmCWEf4AxzWy7qTkSVk,21351
14
+ euporie/core/config.py,sha256=KqPnf34OHrTMsjpTpyjWkch-R9cVemnITMMOZOpwkYg,22444
15
15
  euporie/core/current.py,sha256=BdSVCLngNpZdtYJaxdijuu8N9yRcoU_wr0jI6RGRSms,557
16
- euporie/core/data_structures.py,sha256=3Wo_Txrf6AFoD1j-1EBh13tAJdfupSBi5ammfL0fX0g,1814
17
- euporie/core/filters.py,sha256=ZmKiWQ5-QeY2W-TYtiqa-ZfVX_g1-HL9nZbXAuvmrKg,8032
18
- euporie/core/format.py,sha256=3lYfHdtL0QcBKX_FAY0-iHozQjvuQ9HeZ4GsaXn7De8,1776
16
+ euporie/core/data_structures.py,sha256=eA54Cg305R1mVX6YGTRPIvTN4piEFKrltehif49l92o,1800
17
+ euporie/core/filters.py,sha256=N5lcPPmsQ4Xb2f8NKEpGI2XFKozTUIAWW20q4566i6g,8371
18
+ euporie/core/format.py,sha256=gyBpNqftRI9yALBqOeGYpg8FB1zKPd0ek0FJjQ2LuMg,2601
19
+ euporie/core/graphics.py,sha256=7J66fFRLnJMSaBGxzt6NqVUME3vb8UFcKCrwkm3brII,32280
19
20
  euporie/core/history.py,sha256=uO14q8keGEtH1R9loaZrBfy66GfXcJhxyXW95-35niA,2542
20
- euporie/core/io.py,sha256=UHKG5-tr7A-aHO008DG0ZEUVvQxNM24FPQEMtZh6_KA,3431
21
+ euporie/core/io.py,sha256=y-2nDaVBCp6MNpQMCFu7hsMlzp5ae5rxAN6K0rJeYTE,3741
21
22
  euporie/core/kernel.py,sha256=9n_sonP-8vbtQkf9J_Hb1H5ATS0e_fWfLFko-JP9fwg,45663
22
23
  euporie/core/keys.py,sha256=JH7TcdtryESZjX7UsMIrYhJ98VrZsemkQwHqCNoMuXA,3300
23
24
  euporie/core/launch.py,sha256=a51t67xWCGXVPRfzQMeHSJHaMBC5SDkGsjBGUqNSX_w,1405
24
25
  euporie/core/lexers.py,sha256=-IfBpOtNJ4p44mFM0mO9A6zwmWJxrXNIZHmcZzvb5w0,1060
25
- euporie/core/log.py,sha256=u5VrbIczMJgZ6yT69SmXgY8G2IYxJSlWzfBckZDNlkM,15997
26
- euporie/core/margins.py,sha256=RTs6rMrCGsh5eQUuwIzQ5ufOt4eQLdCQFdm2GxNEhNI,21142
27
- euporie/core/path.py,sha256=5Gjk9ym3MJ95Gbxk_2bXPBbbZyGID9LtmkhUY5tnSlM,8049
26
+ euporie/core/log.py,sha256=lgW2g5rHAwPKFfs09432bn7dshJCYRfERhjoLXfNT0Y,16011
27
+ euporie/core/margins.py,sha256=fv1FWtpiTY-ysp-MnFNyS3RbnUZx0W1MG9vt9ICWBLo,21456
28
+ euporie/core/path.py,sha256=6-cMmlUKQNyFIS67i_sUXcNMtwuqglzTXJUaR5P6Zc0,4298
28
29
  euporie/core/processors.py,sha256=9Ebymv0g5zeNaxBuEO8y_zqEATvsvDLXlcD9NbkZVpo,3591
29
30
  euporie/core/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
31
  euporie/core/pygments.py,sha256=TE3VrZ-QKe4n6hmoYuNmt0l0XR6qmko7JvO5YHSt_rU,2588
31
32
  euporie/core/reference.py,sha256=x8-7405xgTEcK7ImqikQtVAXXqFanz61UQ3mn7v_4-o,65039
32
- euporie/core/renderer.py,sha256=t6NkR_rkaNs5434EsLym5vOzuJADlFANCiLf2mkrnJc,16303
33
- euporie/core/style.py,sha256=olD2xCYlzGeN4fj-lnGAFXLpHpQb3VikSiOdkqSfJpg,32508
33
+ euporie/core/renderer.py,sha256=XhjSsNFiHBZigtBy7Bp942jfs0iz1Il2GIwNNKOZp00,17264
34
+ euporie/core/style.py,sha256=XDMKGpNe2qPQ0YY8kEQU7c7BEszJEkZ7W4kAdwyjJ0E,32601
34
35
  euporie/core/suggest.py,sha256=T86TsEY1_Z7XnW9ncUDKwP4utJc-wYFDV5U8MY78Q7A,5512
35
- euporie/core/terminal.py,sha256=hBKnL-dPMWYUw2eMwHgZNB3BFjOwmydmogo3nsJkb3w,17868
36
+ euporie/core/terminal.py,sha256=0zzdnd-6cOds4BFU2ih23xKelhq9m-uzyzK-K2wfyws,17972
36
37
  euporie/core/utils.py,sha256=ZzaLogLbZw_c8-wdk2XS6dwpgIpQotKwhN2nzalHL8Y,2702
37
38
  euporie/core/validation.py,sha256=cA40YnpWdB1Wpi-B4DeyQ541IEFNh2q6ypCqbVT0aXU,1180
38
39
  euporie/core/comm/__init__.py,sha256=jTf9gPhonyl-UOEC7lc8RwLGJiNhFSuDZqm8rpZRnnI,52
39
40
  euporie/core/comm/base.py,sha256=72PF6upybtBnNB3M8oNkR8WDzC2vptRS9TmIKJkNRq4,4047
40
- euporie/core/comm/ipywidgets.py,sha256=KyAvbarrJ2pfO2ZMn01P108a-w1PVezQRfJFWqxAu-w,52744
41
+ euporie/core/comm/ipywidgets.py,sha256=obOKgcYc8OBB1PfKfNRB59ppZbnVA2eCDokSTUucZ7Q,52725
41
42
  euporie/core/comm/registry.py,sha256=cxH5r6BZe-NUy0zFqxTriAnP0_spMY3m9r1Na688i7o,1353
42
- euporie/core/convert/__init__.py,sha256=519iqUv21ygjxQ-2TUyNqt9TvBxdRjsdB3uX0W06xuE,371
43
- euporie/core/convert/datum.py,sha256=tQlp6YOeeOhiENjwYxUW6ztlcW6iyN9XTDrZ7A7upSA,12623
44
- euporie/core/convert/mime.py,sha256=cxU2R087jgk8Mp0pQdA3HboP-IgIFXsvD-mmKYt9cR8,3131
43
+ euporie/core/convert/__init__.py,sha256=SdXTdFh5Exb7NLtiY7pDuv4AcQdP5b1syQSoZeanJco,391
44
+ euporie/core/convert/datum.py,sha256=XP-DU8YQuH8VMfOeYgTN1kXYsJteMFdRjqYHyg8KVEE,14227
45
+ euporie/core/convert/mime.py,sha256=W7qQ6XkARsQ2QlylDPzHpTiyIJumG0BoEhHzGGbT7jg,3093
45
46
  euporie/core/convert/registry.py,sha256=IP43FE1edE2WDpjlKNylWhQV88WULpzWCIddBOQxxk8,2757
46
47
  euporie/core/convert/utils.py,sha256=sM4QwEF-Ec_11aPRD6eiC3rbMDXe37_s3lps5YEknjs,3712
47
48
  euporie/core/convert/formats/__init__.py,sha256=sPJqKh1aA0V2jJs5cXUBmAEadsozUsGxv55irlrVr68,164
48
- euporie/core/convert/formats/ansi.py,sha256=TJuOHXe_gL7GzMk3d9gGlrb78vv0byBS1vp3GfikFuY,12653
49
+ euporie/core/convert/formats/ansi.py,sha256=1o64dEEiIDBLsqbWv0NMVPwyVgV7aC4u37LgJIs0rwg,12617
49
50
  euporie/core/convert/formats/base64.py,sha256=a-OB6Pjgv-aEqWB5rlNUImqnNlAkL3gPuQdw5USCBdE,824
50
- euporie/core/convert/formats/common.py,sha256=IVnWPkCgo-__LaWUoo2jvR2Y31VEf5qyWS6L14N0TMM,4966
51
- euporie/core/convert/formats/ft.py,sha256=tfGbrKsTxIcEwNb5Yln6MzvIbifXMCV3WR_859fJ8ZM,2669
51
+ euporie/core/convert/formats/common.py,sha256=TsYUWbgE0my6Cl2hfROjOnvdFbr-KekXltiOxWxsmO8,4901
52
+ euporie/core/convert/formats/ft.py,sha256=jnrsR7eaeLNdoKUSux2b1g1vyylOQww88J8QFCVnRNs,2706
52
53
  euporie/core/convert/formats/html.py,sha256=jdxLFUlC3tQHKrS3TlYGpvj6ny6q6XG4uZrQ3Lys4oE,2071
53
54
  euporie/core/convert/formats/jpeg.py,sha256=c38IZEd6HVAmKBXnDE0qmqwfWtjcwVL5ugXffV0wCpA,287
54
55
  euporie/core/convert/formats/markdown.py,sha256=J2AvGQAn4QUn8-tqIz0RQMxvwenND_kQzbYcLD_knXw,2275
55
56
  euporie/core/convert/formats/pdf.py,sha256=6d8e5tjV1j6QXMr7KBNmQ2hQzVY9Il19xg4a8E_0I0I,283
56
57
  euporie/core/convert/formats/pil.py,sha256=2aISFRSjsONPj53PHxCaJq3p9GQAMHvXmhoVFVFHPkE,2456
57
- euporie/core/convert/formats/png.py,sha256=pDU4BDZjYQ0BmT_dtKMDfISrk3tNK3PxULwJkUbcwV4,4784
58
+ euporie/core/convert/formats/png.py,sha256=xMivH9NOHjWQVqfO7H1Ed7f99UoKvNW8B2WPDvoP044,4852
58
59
  euporie/core/convert/formats/rich.py,sha256=Zz9GFy0x19lmm4ESuKufrloUp46l-RAGL3Ou1_JuFmM,891
59
- euporie/core/convert/formats/sixel.py,sha256=aGbfuKIkvDe1dVtPacw_yZOSRsxTshVpGiLu-1_OSVs,2373
60
+ euporie/core/convert/formats/sixel.py,sha256=Gq3FJMiG6knx3ouZaML4PeZGtFe7KQxZbwsWsdS6cr0,2374
61
+ euporie/core/convert/formats/svg.py,sha256=USlUCnO9Krk3eO4t5gwNj3uVqmAdK2vfcUTD5W8N0uY,763
60
62
  euporie/core/ft/__init__.py,sha256=Ib-pswos3RiOM2Vn8GCZ4rwuoTNPeBJ0jhgRpwu7BKE,55
61
- euporie/core/ft/ansi.py,sha256=3PjBDIAZzxK6aJEUaqBbu-dct7oN-PRqBoiq4GYA9nQ,5757
62
- euporie/core/ft/html.py,sha256=4giLUAD8hc86Dq2dvWe6ZegWPWHLbbzWPKy5Nu38nXc,175013
63
+ euporie/core/ft/ansi.py,sha256=ICUBohoOVtbkf96T3EsFcHf-oSsWMxD7uyRoEFnhS1I,5796
64
+ euporie/core/ft/html.py,sha256=vjWCI18N6QTJpiuZi4dA4YYdwuVRs33u0loDXMQ1KE0,179105
63
65
  euporie/core/ft/table.py,sha256=L6rtT1XHArydL7gYX1m98MPoKCDYk8L7jibKRiayaGc,53325
64
66
  euporie/core/ft/utils.py,sha256=PPV8iOrK68TbE75wu2eztLnN6WHUCLAmmU3CIi7aEEE,27219
65
67
  euporie/core/key_binding/__init__.py,sha256=zFKrJrZARNht6Tl4TT5Fw3fk-IrD8SBYk5mBJ5K_F1A,47
66
- euporie/core/key_binding/key_processor.py,sha256=j48DTO6BGGI-4AC8P8gCpwL3gALwUyVOxRkZNVW-YNY,4008
68
+ euporie/core/key_binding/key_processor.py,sha256=NDCzCYh2DszilELl6giGoxAlnWy40wAUOUiQqBL5GXU,4329
67
69
  euporie/core/key_binding/micro_state.py,sha256=PrVAJoaXqc52TIh8H1ItkCFb2AwGmvWDmzzCFzbdoW8,1275
68
70
  euporie/core/key_binding/registry.py,sha256=UBT_dPpndgzgrKoI7AdbL4PmZUGvZ4hBC7YGkGNTIXA,1348
69
71
  euporie/core/key_binding/utils.py,sha256=UZ0ymB4vLPFaxbx9jhqR_cKaSt08efrlvFtb1KZixcU,2407
70
72
  euporie/core/key_binding/vi_state.py,sha256=Xnl4DYIqSoPkfDma_hZXOsl77C_UMT0z_qTdapbl_mw,701
71
- euporie/core/key_binding/bindings/__init__.py,sha256=ijoIaqbZnlJPOCIvqnzoSbBIXJtDHuCfkKqe1xPdr3Q,213
72
- euporie/core/key_binding/bindings/basic.py,sha256=6PtD1s0SCvGAMaWMoJMZcyP4teJwJ84nl7Q_AYQQ5QI,1633
73
+ euporie/core/key_binding/bindings/__init__.py,sha256=vzrTyqaHWRxLDdiLStPQ-AprURIie76-i3cibELIDsA,274
74
+ euporie/core/key_binding/bindings/basic.py,sha256=rbZafsto8RYGjHNaBll2iox2B3EF6yGuaQaxCsjSQRU,1649
73
75
  euporie/core/key_binding/bindings/completion.py,sha256=npf61P0NvmrYMG8qT-1AYDReLcoMHsgdG5gzBloSTWk,2081
74
- euporie/core/key_binding/bindings/micro.py,sha256=6xr4pqjgGWymr_rayl9gRhCyStGkH0OHiD5QxihrB74,28150
75
- euporie/core/key_binding/bindings/mouse.py,sha256=Wah8f93g0xkB5DgzIFqAHRaga0N2VeXXs0qWRimKnFQ,6165
76
+ euporie/core/key_binding/bindings/micro.py,sha256=OkTrwynhT__bu5h8MD9xqPuQaFlL7PTUs3kchZ1Kds4,27845
77
+ euporie/core/key_binding/bindings/mouse.py,sha256=xbsBFSF2zLtK-f_Aj2NQ5kFaWaR1fimvs7dXhBpiFFM,6545
78
+ euporie/core/key_binding/bindings/page_navigation.py,sha256=FWIv4iqWUCMjFHLu-I5Z08NIULXuTIjrn9fC25XImYg,4142
79
+ euporie/core/layout/__init__.py,sha256=T5iGOnMGfNwVffJlfFMwGTFBLV7RkOuKw5gVp6cl4wA,59
80
+ euporie/core/layout/containers.py,sha256=y6m5P-4_Ng49CCJuR5ghtumf7VwE7dOqeNEgEPDAPZ4,38831
81
+ euporie/core/layout/decor.py,sha256=gquvaVCz_rgqyQ4ao0DColsJYRwJkmGf0tsOmcfhAV4,14102
82
+ euporie/core/layout/print.py,sha256=1Kq68Hx6EbWV0FE5eK9ZL_tiSQ-RysthJjvX82vQTDk,4644
83
+ euporie/core/layout/screen.py,sha256=0xP9ZErMcw51nPgBbrm-DSQqFq5WNvsh9fw1amz2Z28,2224
84
+ euporie/core/layout/scroll.py,sha256=Mj815FMxtWrfsr4udA58e5SpWvqsTV-6Eho_jCrYkzs,45618
76
85
  euporie/core/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
77
- euporie/core/tabs/base.py,sha256=x85z4uu794aXYdvXZDcvXUfv4S2ZwyPwSI-_sRnIjAs,13846
86
+ euporie/core/tabs/base.py,sha256=DmFX8p4pdAJdGbRa_FMa7O6ZS88Rk2iNBD8X1G3SfCg,13888
78
87
  euporie/core/tabs/notebook.py,sha256=EXXLVAnJ5ICEWrY9a997iOFuPy10UDAxQcmRFsRaJX4,16035
79
88
  euporie/core/widgets/__init__.py,sha256=ektso_Ea1-pZB04alUujQsa2r-kv8xAF0SmQOv_bvHQ,52
80
- euporie/core/widgets/cell.py,sha256=HU_RTs0LiCrxtyFefoaKF54EaJlnRvsmoqAwBVLew0I,30210
81
- euporie/core/widgets/cell_outputs.py,sha256=09e4tk6LPFx4PjZddd87YymeAqlprjyRy1xpjc2LXLw,17056
82
- euporie/core/widgets/decor.py,sha256=Bs6EqQUZOKu83E65QYenlfNvPLAk5ai9q_1nLgNOshg,22242
83
- euporie/core/widgets/dialog.py,sha256=8hAN1iM6M3B0eFqlkTZ0YLGUdUEUJKqIVWl-hNZwros,32568
84
- euporie/core/widgets/display.py,sha256=f-Xc8BQJOtu7OAW2XZJWb_YQlZbPtu2UC6W00LzsW7U,20123
85
- euporie/core/widgets/file_browser.py,sha256=UHK7nUDKPGaO_2WQkCSOYDC2gxZbvuL1a01sqWzA5dM,20664
89
+ euporie/core/widgets/cell.py,sha256=mvdl4OkaTlQU-eVOmrnDRqw6q3MeJGOePwIH2mv5VPA,30239
90
+ euporie/core/widgets/cell_outputs.py,sha256=YT3WXvJnzkMpxwdURZFWtut0GOJbPhEgUGaEyMXR67c,17094
91
+ euporie/core/widgets/decor.py,sha256=GPZG7-h3MKynQIXJ_YoR6tPpYxtmrXi0uoyVCovSjBQ,8770
92
+ euporie/core/widgets/dialog.py,sha256=QrYUvj0Fi9gkfN31jXegKynD-9eqWl7wOvkBmKiykk8,32674
93
+ euporie/core/widgets/display.py,sha256=1-K2gWjXEW-UpIGR_Uei_3ha0arETM981NEC8puxDqk,20932
94
+ euporie/core/widgets/file_browser.py,sha256=ezyzQRva5491mQ38vqpiWZECb2ZZs_lfvXrtnp0iqTo,20731
86
95
  euporie/core/widgets/formatted_text_area.py,sha256=KdAhBcEIn2E11hWQxW6y998uHHuw_dj0TrZcBH5ytvQ,4045
87
- euporie/core/widgets/forms.py,sha256=VlVx9RgSbMIC_UvlBLR9BfXrk8AUCuoBz1Muf2LJfTA,82411
88
- euporie/core/widgets/graphics.py,sha256=7n0jQODexaCphQHlxOo-T1eZ1Z0LbcfTvGhRkSwI71U,31552
89
- euporie/core/widgets/inputs.py,sha256=ZUVNd1lEhzly6PaSPy7tQoUyTFLAqGfEMfhQSu7XQ80,13650
90
- euporie/core/widgets/layout.py,sha256=9FZxnx_GlV_222QAikamvpVOVXb8Icn0LFS8TsUz8Lw,20784
91
- euporie/core/widgets/menu.py,sha256=B_PquZcBWmS3UpJQnpL6s7YMqjAB_QeaaFUL8P7j5O0,30615
92
- euporie/core/widgets/page.py,sha256=ebOV2Bemlxd6QSgBeFBm_QZCRXoU2XtzN66ZQknAIDA,42918
93
- euporie/core/widgets/pager.py,sha256=95zEd7f_h_VWMHGexWIbt9tt_Kp4BkxaBSD1VT5CBfg,6231
94
- euporie/core/widgets/palette.py,sha256=K7_2alBUQRCk_aZbsxSy7_u0lphE89ur-696gX3O_KU,10814
96
+ euporie/core/widgets/forms.py,sha256=1K7NzR0zCi3wEBOE1XzzZoYxFf_Ez23ydv17YfYAKoc,83295
97
+ euporie/core/widgets/inputs.py,sha256=WFF19wUhwMMMu4SZKRwG68jZttTTAM0n1wOfmIhlUwI,16783
98
+ euporie/core/widgets/layout.py,sha256=E23fIHbYpGjheCXK9WvOcZl4GqJlWZBCluQpoR6uhXY,23481
99
+ euporie/core/widgets/menu.py,sha256=1lvs--RFMe5k0mrpvjBZPwWSFLfBOieswU8o4EKSEdI,30645
100
+ euporie/core/widgets/pager.py,sha256=lUNVz2263_p0mqNDsRTBwG36UGrZVoPKD3ZuZfZ9dGI,6273
101
+ euporie/core/widgets/palette.py,sha256=lttmqYaKBzBgjQomutqRNJd6N9CK_PFqdRykHEXvZqU,10855
95
102
  euporie/core/widgets/search_bar.py,sha256=MmtSQ4FClM7fbRuS595OO6C1hTvX6_fDZJ7tTblXHkI,8235
96
- euporie/core/widgets/status_bar.py,sha256=go-mXTwY3XEmR_5f2zeNDQmLyB1r8k4cLysev6X9KDc,5617
97
- euporie/core/widgets/tree.py,sha256=XGquVU_1Xz4uDV8IljyseqI4UDXPsI2xgxl-NKUxaZc,3738
103
+ euporie/core/widgets/status_bar.py,sha256=LiX9Szh0M_XMPapP-XZmGfWGT3-VuQkioE87lHPqd0U,5638
104
+ euporie/core/widgets/tree.py,sha256=BG7QRsI2GzSJPReNQu9zWFjO0iy8TeJwrmCmP5dc2ek,3760
98
105
  euporie/data/desktop/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
99
106
  euporie/data/desktop/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
100
107
  euporie/hub/__init__.py,sha256=NcrOlSFgI4y5gEbD4lFY-Ryd1K79EeMoeAp41A6tDT0,44
@@ -103,7 +110,7 @@ euporie/hub/app.py,sha256=Q7lXpIQYruySgyk862hQdt2DUBK4aJhCEQp_JrkKK0A,6072
103
110
  euporie/hub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
111
  euporie/notebook/__init__.py,sha256=rOE71d95pym_ILYVg07NO9oDYbSB0AskxbC8cr4htiU,44
105
112
  euporie/notebook/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
106
- euporie/notebook/app.py,sha256=Ai08bMMd-PiNO-sowG2pvZgrqq4cSW_5AcK89zjWr8M,20726
113
+ euporie/notebook/app.py,sha256=HOu0wriziOchUN3mb_JJKPBuKTT3NprRSVXJ1-D7NYA,20886
107
114
  euporie/notebook/current.py,sha256=rQ_R9B0b8JmWILxEyGzGfuVY2iVkHTghq4qRiC-MYSU,387
108
115
  euporie/notebook/enums.py,sha256=g7quMch8KAlaaYJS0UppWqx6tx-ZFt7HxFcmEfam5OM,221
109
116
  euporie/notebook/filters.py,sha256=c2PncF-n4dE67cFmVmhsMhFVWCfxePAaCW6mb6zm0Yo,1502
@@ -113,21 +120,21 @@ euporie/notebook/tabs/display.py,sha256=I8Y9m6LLhV9Wc0JbfoLaY0kMjK98HHkKB8WQtEQi
113
120
  euporie/notebook/tabs/edit.py,sha256=mtDv5olF7VCk5k0pC9a_JhUYvCFrpogDHRYzMarzHv0,5714
114
121
  euporie/notebook/tabs/json.py,sha256=_cbOBq02V8CkHM99rqok6YG_lVm36B64pNi8hqeGaOU,2183
115
122
  euporie/notebook/tabs/log.py,sha256=VJQRC_4SB4aZ4tVELm6ldkFCON_A_rqxBfi-sZzGBOw,3550
116
- euporie/notebook/tabs/notebook.py,sha256=Hr7qCOT1NHKPYm0e4Tng6rhLg85IYxrtNd3vrNDc12M,43004
123
+ euporie/notebook/tabs/notebook.py,sha256=NMy0yh8n8-0s20PbzNJWe6_3FKPb0PmXHsghKcVlTZg,43004
117
124
  euporie/notebook/widgets/__init__.py,sha256=74tOl0bYuWkaKT-4pgD5zmdiIkoFYx8uGj4SxcLHLtQ,48
118
- euporie/notebook/widgets/side_bar.py,sha256=vhPcGyTpB2uhfTZJJTlYPND2IY2DbkAgF_zP8lBrbIk,7244
125
+ euporie/notebook/widgets/side_bar.py,sha256=EDFAulshV7YqA50w84RRl88UI60AehIXYYA2exlFh0M,7243
119
126
  euporie/preview/__init__.py,sha256=B6RsBuuT0JJk1v6U5n95VuFXcOeFLq6UGgt4w-n_nEI,51
120
127
  euporie/preview/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
121
128
  euporie/preview/app.py,sha256=4ivLH_CptFxLTQqOYCiaTW9cmxl5cITS8dfxICx_mzo,8820
122
129
  euporie/preview/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
130
  euporie/preview/tabs/__init__.py,sha256=rY6DfQ-8qRo_AiICCD-zTyhJBnuMjawWDd8tRxR6q58,43
124
- euporie/preview/tabs/notebook.py,sha256=npWj0dfpo_R9XeQ1GwSLNzuH7ZrwHGFMHNrj8GXA064,7652
125
- euporie/web/tabs/web.py,sha256=K7i6JoArPr_HqcIIw1e98s1gObovZPT7FCMd2ENPzA4,5077
126
- euporie/web/widgets/webview.py,sha256=d46bPO1myJ6fOcb_OWlmK1PsZfT3UjEAZufarJUw69w,19923
127
- euporie-2.6.2.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
128
- euporie-2.6.2.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
129
- euporie-2.6.2.dist-info/METADATA,sha256=_PQWiYQvnBYVwTYQUl4KvEYqLGlDv8OC0xrdKG5rChY,6681
130
- euporie-2.6.2.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
131
- euporie-2.6.2.dist-info/entry_points.txt,sha256=te9-neHvUA69MWeDL5VS_XREej4pIE61bYjPSea67sE,697
132
- euporie-2.6.2.dist-info/licenses/LICENSE,sha256=rI0bfSsCfCVw6d8vk7WokRxd3t8yx5xV4fC5fwaMgCg,1079
133
- euporie-2.6.2.dist-info/RECORD,,
131
+ euporie/preview/tabs/notebook.py,sha256=K8GGW8eEKfyrcSIHuSVMc4ULYYxbO4flUdTTCe5wM54,7657
132
+ euporie/web/tabs/web.py,sha256=IojCG_FszzxaSpyR4FI_LNd5O_i5KURjAbxQQRCmuE0,5232
133
+ euporie/web/widgets/webview.py,sha256=fanFNDWh8F3471xdq_z6MXV8Z4vwerTvxil1TBp0j8w,20775
134
+ euporie-2.7.0.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
135
+ euporie-2.7.0.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
136
+ euporie-2.7.0.dist-info/METADATA,sha256=cEMC5t-w3JUTJE0wztTR16r4SsmyXHtdgqX0r10nrgw,6583
137
+ euporie-2.7.0.dist-info/WHEEL,sha256=mRYSEL3Ih6g5a_CVMIcwiF__0Ae4_gLYh01YFNwiq1k,87
138
+ euporie-2.7.0.dist-info/entry_points.txt,sha256=te9-neHvUA69MWeDL5VS_XREej4pIE61bYjPSea67sE,697
139
+ euporie-2.7.0.dist-info/licenses/LICENSE,sha256=rI0bfSsCfCVw6d8vk7WokRxd3t8yx5xV4fC5fwaMgCg,1079
140
+ euporie-2.7.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.18.0
2
+ Generator: hatchling 1.21.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any