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.
- {prezo-0.3.2 → prezo-2026.1.1}/PKG-INFO +3 -1
- {prezo-0.3.2 → prezo-2026.1.1}/README.md +2 -0
- {prezo-0.3.2 → prezo-2026.1.1}/pyproject.toml +2 -2
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/app.py +2 -2
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/ascii.py +7 -5
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/sixel.py +4 -4
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/__init__.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/config.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/export.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/__init__.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/base.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/chafa.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/iterm.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/kitty.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/overlay.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/images/processor.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/parser.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/__init__.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/base.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/blackout.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/goto.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/help.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/overview.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/search.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/screens/toc.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/terminal.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/themes.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/__init__.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/image_display.py +0 -0
- {prezo-0.3.2 → prezo-2026.1.1}/src/prezo/widgets/slide_button.py +0 -0
- {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:
|
|
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 = "
|
|
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
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|