prezo 0.3.2__tar.gz → 2026.1.1__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.
Files changed (31) hide show
  1. {prezo-0.3.2 → prezo-2026.1.1}/PKG-INFO +3 -1
  2. {prezo-0.3.2 → prezo-2026.1.1}/README.md +2 -0
  3. {prezo-0.3.2 → prezo-2026.1.1}/pyproject.toml +2 -2
  4. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/app.py +2 -2
  5. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/ascii.py +7 -5
  6. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/sixel.py +4 -4
  7. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/__init__.py +0 -0
  8. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/config.py +0 -0
  9. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/export.py +0 -0
  10. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/__init__.py +0 -0
  11. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/base.py +0 -0
  12. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/chafa.py +0 -0
  13. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/iterm.py +0 -0
  14. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/kitty.py +0 -0
  15. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/overlay.py +0 -0
  16. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/processor.py +0 -0
  17. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/parser.py +0 -0
  18. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/__init__.py +0 -0
  19. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/base.py +0 -0
  20. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/blackout.py +0 -0
  21. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/goto.py +0 -0
  22. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/help.py +0 -0
  23. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/overview.py +0 -0
  24. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/search.py +0 -0
  25. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/toc.py +0 -0
  26. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/terminal.py +0 -0
  27. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/themes.py +0 -0
  28. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/__init__.py +0 -0
  29. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/image_display.py +0 -0
  30. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/slide_button.py +0 -0
  31. {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/status_bar.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prezo
3
- Version: 0.3.2
3
+ Version: 2026.1.1
4
4
  Summary: A TUI-based presentation tool for the terminal, built with Textual.
5
5
  Author: Stefane Fermigier
6
6
  Author-email: Stefane Fermigier <sf@fermigier.com>
@@ -135,6 +135,8 @@ Presenter notes go here (after ???)
135
135
  More content...
136
136
  ```
137
137
 
138
+ See the [Writing Presentations in Markdown](docs/tutorial.md) tutorial for a complete guide on creating presentations, including images, presenter notes, and configuration directives.
139
+
138
140
  ## Themes
139
141
 
140
142
  Available themes: `dark`, `light`, `dracula`, `solarized-dark`, `nord`, `gruvbox`
@@ -123,6 +123,8 @@ Presenter notes go here (after ???)
123
123
  More content...
124
124
  ```
125
125
 
126
+ See the [Writing Presentations in Markdown](docs/tutorial.md) tutorial for a complete guide on creating presentations, including images, presenter notes, and configuration directives.
127
+
126
128
  ## Themes
127
129
 
128
130
  Available themes: `dark`, `light`, `dracula`, `solarized-dark`, `nord`, `gruvbox`
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "prezo"
3
- version = "0.3.2"
3
+ version = "2026.1.1"
4
4
  description = "A TUI-based presentation tool for the terminal, built with Textual."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -46,7 +46,7 @@ build-backend = "uv_build"
46
46
  missing-source-for-stubs = false # markdown stubs bundled but source not found
47
47
  missing-import = false # libsixel optional dependency
48
48
  missing-attribute = false # PIL.Image.ADAPTIVE
49
- no-matching-overload = false # PIL getdata() type issues
49
+ no-matching-overload = false # PIL type stub issues
50
50
  bad-argument-type = false # LiteralString strictness with string append
51
51
  bad-override = false # Textual COMMANDS type override
52
52
 
@@ -242,12 +242,12 @@ class PrezoApp(App):
242
242
  #slide-container {
243
243
  width: 1fr;
244
244
  height: 100%;
245
- padding: 1 4;
245
+ padding: 0 4 1 4;
246
246
  }
247
247
 
248
248
  #slide-content {
249
249
  width: 100%;
250
- padding: 1 2;
250
+ padding: 0 2;
251
251
  }
252
252
 
253
253
  /* Image container - hidden by default */
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from functools import lru_cache
6
6
  from pathlib import Path
7
+ from typing import cast
7
8
 
8
9
  # ASCII characters from dark to light
9
10
  ASCII_CHARS = " .:-=+*#%@"
@@ -68,8 +69,8 @@ class AsciiRenderer:
68
69
  # Resize
69
70
  img = img.resize((new_width, new_height))
70
71
 
71
- # Convert to ASCII
72
- pixels = list(img.getdata())
72
+ # Convert to ASCII (grayscale values 0-255)
73
+ pixels = cast("list[int]", list(img.get_flattened_data()))
73
74
  lines = []
74
75
 
75
76
  for y in range(new_height):
@@ -127,8 +128,8 @@ class ColorAsciiRenderer(AsciiRenderer):
127
128
  # Resize
128
129
  img = img.resize((new_width, new_height))
129
130
 
130
- # Convert to colored ASCII
131
- pixels = list(img.getdata())
131
+ # Convert to colored ASCII (RGB tuples)
132
+ pixels = cast("list[tuple[int, int, int]]", list(img.get_flattened_data()))
132
133
  lines = []
133
134
 
134
135
  for y in range(new_height):
@@ -190,7 +191,8 @@ class HalfBlockRenderer:
190
191
  new_height = new_height - (new_height % 2)
191
192
 
192
193
  img = img.resize((new_width, new_height))
193
- pixels = list(img.getdata())
194
+ # RGB tuples for half-block rendering
195
+ pixels = cast("list[tuple[int, int, int]]", list(img.get_flattened_data()))
194
196
 
195
197
  lines = []
196
198
  for y in range(0, new_height, 2):
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import TYPE_CHECKING
5
+ from typing import TYPE_CHECKING, cast
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from pathlib import Path
@@ -108,12 +108,12 @@ class SixelRenderer:
108
108
 
109
109
  img = img.resize((pixel_width, pixel_height))
110
110
 
111
- # Get palette
111
+ # Get palette and pixel data (palette indices 0-255)
112
112
  palette = img.getpalette()
113
- pixels = list(img.getdata())
113
+ pixels = cast("list[int]", list(img.get_flattened_data()))
114
114
 
115
115
  # Build sixel output
116
- output = []
116
+ output: list[str] = []
117
117
 
118
118
  # Start sixel sequence
119
119
  output.append("\x1bPq")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes